• 服务器端优化、NIO、非阻塞的HTTP服务器


    一、服务器端优化

    服务端优化:

    第一个弊端:

            服务器只能处理一个客户端请求,接收完一个图片之后,服务器就关闭了。 

    改进方式:

            循环

     第二个弊端:

            第二次上传文件的时候,会把第一次的文件给覆盖

    改进方式:  

          UUID. randomUUID()方法生成随机的文件名

    加入循环以后又引发了一个问题:  

          使用循环虽然可以让服务器处理多个客户端请求。但是还是无法同时跟多个客户端进行通信。

    改进方式:  

          开启多线程处理

    加入多线程以后又引发了一个问题:

            使用多线程虽然可以让服务器同时处理多个客户端请求。但是资源消耗太大。 

    改进方式:

            加入线程池 

    日志概述:日志技术 

     弊端:

     什么是日志:

     日志与输出语句的区别: 

     日志技术的特点:

    日志体系结构: 

    体系结构

    Logback 

    Logback介绍

     Logback主要分为三个技术模块:

    Logback快速入门:

    1. package com.log;
    2. import org.slf4j.Logger;
    3. import org.slf4j.LoggerFactory;
    4. import java.util.Scanner;
    5. public class LogDemo {
    6. //获取日志对象
    7. private static final Logger LOGGER = LoggerFactory.getLogger(LogDemo.class);
    8. public static void main(String[] args) {
    9. //打日志 --- 类似于写输出语句
    10. Scanner sc = new Scanner(System.in);
    11. System.out.println("请输入您的姓名");
    12. LOGGER.debug("用户开始输入信息了");
    13. String name = sc.nextLine();
    14. //System.out.println(name);
    15. LOGGER.info("用户输出录入姓名为:" + name);
    16. System.out.println("请输入您的年龄");
    17. String age = sc.nextLine();
    18. try {
    19. int ageInt = Integer.parseInt(age);
    20. LOGGER.info("用户输入的年龄格式正确" + age);
    21. } catch (NumberFormatException e) {
    22. LOGGER.info("用户输入的年龄格式错误" + age);
    23. }
    24. }
    25. }
    26. 请输入您的姓名
    27. 22:56:27.942 [main] DEBUG com.log.LogDemo - 用户开始输入信息了
    28. 薛鸿金
    29. 22:57:24.675 [main] INFO com.log.LogDemo - 用户输出录入姓名为:薛鸿金
    30. 请输入您的年龄
    31. 23
    32. 22:57:27.227 [main] INFO com.log.LogDemo - 用户输入的年龄格式正确23
    33. Process finished with exit code 0

     日志的6种级别: 

    1. "1.0" encoding="UTF-8"?>
    2. <configuration>
    3. <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    4. <target>System.outtarget>
    5. <encoder>
    6. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %c [%thread] : %msg%npattern>
    7. encoder>
    8. appender>
    9. <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    10. <encoder>
    11. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%npattern>
    12. <charset>utf-8charset>
    13. encoder>
    14. <file>C:/code/itheima-data.logfile>
    15. <rollingPolicy
    16. class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
    17. <fileNamePattern>C:/code/itheima-data2-%d{yyyy-MMdd}.log%i.gzfileNamePattern>
    18. <maxFileSize>1MBmaxFileSize>
    19. rollingPolicy>
    20. appender>
    21. <root level="DEBUG">
    22. <appender-ref ref="CONSOLE"/>
    23. <appender-ref ref="FILE" />
    24. root>
    25. configuration>

    主要对日志做什么:修改日志级别,修改输出位置, 

     

     

     

     

     三、枚举

    为什么有枚举

     枚举

    数据类型

    基本数据类型  引用数据类型(枚举也是引用数据类型)

    枚举:当我们描述的事物,有固定的几种形式出现的时候,可以采用枚举的方式描述

    季节{

            春

            夏

    }

    1. package com.myenum.demo1;
    2. public enum Season {
    3. SPRING,SUMMER,AUTUMN,WINTER;
    4. }
    5. package com.myenum.demo2;
    6. public class EnumDemo {
    7. public static void main(String[] args) {
    8. /*
    9. 1.所有枚举类都是Enum的子类
    10. 2.我们可以通过"枚举类名.枚举项名称"去访问指定的枚举项
    11. 3.每一个枚举项其实就是该枚举的一个对象
    12. 4.枚举也是一个类,也可以去定义成员变量
    13. 5.枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,
    14. 但是如果枚举类有其他的东西,这个分号就不能省略。建议不要省略
    15. 6.枚举类可以有构造器,但必须是private的,它默认的也是private的。
    16. 枚举项的用法比较特殊:枚举("");
    17. 7.枚举类也可以有抽象方法,但是枚举项必须重写该方法
    18. */
    19. //第二个特点的演示
    20. //我们可以通过"枚举类名.枚举项名称"去访问指定的枚举项
    21. System.out.println(Season.SPRING);//枚举类名.枚举项名称
    22. System.out.println(Season.SUMMER);
    23. System.out.println(Season.AUTUMN);
    24. System.out.println(Season.WINTER);
    25. //第三个特点的演示
    26. //每一个枚举项其实就是该枚举的一个对象
    27. Season spring = Season.SPRING;
    28. }
    29. }

     特点:

     枚举的方法:

    1. package com.myenum.demo3;
    2. public class EnumDemo {
    3. public static void main(String[] args) {
    4. // String name() 获取枚举项的名称
    5. String name = Season.SPRING.name();
    6. System.out.println(name);
    7. System.out.println("-----------------------------");
    8. // int ordinal() 返回枚举项在枚举类中的索引值
    9. int index1 = Season.SPRING.ordinal();
    10. int index2 = Season.SUMMER.ordinal();
    11. int index3 = Season.AUTUMN.ordinal();
    12. int index4 = Season.WINTER.ordinal();
    13. System.out.println(index1);
    14. System.out.println(index2);
    15. System.out.println(index3);
    16. System.out.println(index4);
    17. System.out.println("-----------------------------");
    18. // int compareTo(E o) 比较两个枚举项,返回的是索引值的差值
    19. int result = Season.SPRING.compareTo(Season.WINTER);
    20. System.out.println(result);//-3
    21. System.out.println("-----------------------------");
    22. // String toString() 返回枚举常量的名称
    23. String s = Season.SPRING.toString();
    24. System.out.println(s);
    25. System.out.println("-----------------------------");
    26. // static T valueOf(Class type,String name)
    27. // 获取指定枚举类中的指定名称的枚举值
    28. Season spring = Enum.valueOf(Season.class, "SPRING");
    29. System.out.println(spring);
    30. System.out.println(Season.SPRING == spring);
    31. System.out.println("-----------------------------");
    32. // values() 获得所有的枚举项
    33. Season[] values = Season.values();
    34. for (Season value : values) {
    35. System.out.println(value);
    36. }
    37. }
    38. }

                                                      字符流+缓冲流  properties                   

    字符缓冲流输入流和字符输入流的对比:

     

    properties集合的特有特点:

     

      字符流+缓冲流 --文件复制 

     经典案例:

    使用字节流+数组完成文件复制
    对比缓冲流+数组完成文件复制
    的性能

     

    单例模式:饿汗式懒汉式

     测试:

  • 相关阅读:
    React教程之 React 中 Render Props 和高阶组件HOC的详细介绍
    每次打开百度太麻烦?用程序直接打开网页 Python实现百度划词搜索功能(获取剪切板数据)
    软件工程国考总结——判断题
    人工智能轨道交通行业周刊-第13期(2022.9.5-9.11)
    字符串资源LoadString 加速键资源TranslateAccelerator、LoadAccelerators
    Vue主要使用-03
    一文1800字从0到1使用Python Flask实战构建Web应用
    C++:类的封装
    22道js输出顺序问题,你能做出几道
    [信息论]LZW编解码的实现(基于C++&Matlab实现)
  • 原文地址:https://blog.csdn.net/weixin_46589095/article/details/128180569