JAVA零散知识点记录

零散知识点记录:

  • @PostConstruct
    @PostConstruct注解的方法在项目启动的时候执行这个方法,也可以理解为在spring容器启动的时候执行,可作为一些数据的常规化加载,比如数据字典之类的。
    构造方法->@Autowired->@PostConstruct修饰的方法->init()->service
  • Collector和Collectors
    Collector是专门用来作为Stream的collect方法的参数的
    而Collectors是作为生产具体Collector的工具类
  • spring mvc中的@ModelAttribute
    @ModelAttribute用于将方法的参数绑定到指定的模型属性上
  • @SpringQueryMap注解 feign的get传参方式
    spring cloud项目使用feign的时候都会发现一个问题,就是get方式无法解析对象参数。其实feign是支持对象传递的,但是得是Map形式,而且不能为空,与spring在机制上不兼容,因此无法使用。spring cloud在2.1.x版本中提供了@SpringQueryMap注解,可以传递对象参数,框架自动解析
  • WebFlux
    springmvc是同步阻塞的IO模型,WebFlux特性:异步非阻塞,响应式函数编程,不在拘束于servlet容器,响应式
  • 序列化
    把对象或者结构体从内存中变成可存储或传输的过程称之为序列化。
    transient
    将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会被序列化。
    static
    凡是被static修饰的字段是不会被序列化的,列化保存的是对象的状态而非类的状态
  • Java中共有三种变量,分别是类变量、成员变量和局部变量。他们分别存放在JVM的方法区、堆内存和栈内存中。
  • @Import把用到的bean导入当前容器
  • @EnableFeignClients用来扫描带@FeignClient注解的接口
  • TreeMap
    TreeMap中的元素默认按照keys的自然排序排列。( 对Integer来说,其自然排序就是数字的升序;对String来说,其自然排序就是按照字母表排序)
  • 如何选择合适的Map
    1. HashMap可实现快速存储和检索,但其缺点是其包含的元素是无序的,这导致它在存在大量迭代的情况下表现不佳。HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null。HashMap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度。遍历时,取得数据的顺序是完全随机的。HashMap不支持线程的同步(即任一时刻可以有多个线程同时写HashMap),可能会导致数据的不一致。如果需要同步,可以用 Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap。
    2. LinkedHashMap保留了HashMap的优势,且其包含的元素是有序的。它在有大量迭代的情况下表现更好。保存插入顺序:LinkedHashMap保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的。也可以在构造时带参数,按照应用次数排序。
    3. TreeMap能便捷的实现对其内部元素的各种排序,但其一般性能比前两种map差。
    4. LinkedHashMap映射减少了HashMap排序中的混乱,且不会导致TreeMap的性能损失。
  • TreeSet
    TreeSet是一个有序的集合,它的作用是提供有序的Set集合。它继承了AbstractSet抽象类,实现了NavigableSet<E>,Cloneable,Serializable接口。TreeSet是基于TreeMap实现的,TreeSet的元素支持2种排序方式:自然排序或者根据提供的Comparator进行排序。(即可以同时实现去重和排序)
  • 四种授权模式
    1. Authorization Code(授权码模式):正宗的OAuth2的授权模式,客户端先将用户导向认证服务器,登录后获取授权码,然后进行授权,最后根据授权码获取访问令牌;
    2. Implicit(简化模式):和授权码模式相比,取消了获取授权码的过程,直接获取访问令牌;Resource Owner Password
    3. Credentials(密码模式):客户端直接向用户获取用户名和密码,之后向认证服务器获取访问令牌;
    4. Client Credentials(客户端模式):客户端直接通过客户端认证(比如client_id和client_secret)从认证服务器获取访问令牌。
  • JAVA8十大新特性
    1. Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法
    2. Lambda表达式
    3. Stream
      map,flatmap,limit,distint,filter,peek,skip,sorted
      collect,count,finFirst,findAny,noneMatch,min,max,reduct,forEach,toArray
           List list = new ArrayList();
           list.add("abc");
           list.add("bcd");
           list.add("def");
           list.add("cab");
           Stream.iterate(0, i->i+1).limit(list.size())
           .forEach(i -> System.out.println(i+":"+list.get(i)));
           list.stream().map(mapper -> mapper+"-end").forEach(action 
			-> System.out.println(action));

  1. :: 成员函数引用

你可能感兴趣的:(JAVA)