后端总结知识点(三)

90 阅读3分钟

这是我参与8月更文挑战的第31天,活动详情查看:8月更文挑战

四、JAVA 相关

1. 关键字考察

  1. final 常量(不可修改的变量)/不可重写的方法/不可继承的父类/编译期确定/存储在常量池(永久代)【编译器优化策略:直接将原代码复制到被调用的地方,而不进行调用。private方法同理】
  2. finally 必须运行的代码段(在return之前运行,内部的return优先级高于外部的)
  3. finalize 被发现没有引用链(被GCRoot引用)时,被标记并判断是否有必要执行这个方法(如果已经执行过了就不再执行,否则进入F-Queue队列前后执行)。永远只执行一次!
  4. synchronized 加锁类/对象[方法]:底层实现在对象头加上monitor锁。
  5. volatile: 常用于多线程对可见变量的修改,底层实现用了内存屏障(Memory Barrier)。
  6. static 静态:变量存储在方法区/元数据区,在类第一次被加载的时候就跟着被加载。
  7. transient 修饰变量,表示不参与序列化。

2. 集合类

  1. List ArrayList LinkedList
  2. Map(get/set/entryKeys/values) HashMap(桶数组,红黑树,链表) TreeMap(键有序,红黑树,平衡二叉树) ConcurrentHashMap(分区哈希,局部加同步锁进行读写操作)
  3. Set:HashSet、LinkedSet。
  4. Queue/Deque 队列:含普通队列、双端队列,其中还有个优先队列 PriorityQueue 比较特殊。

3. Java 四大特性

  1. 抽象。
  2. 封装。
  3. 继承。
  4. 多态。

4. 关于Object类

  1. getClass() 【native】返回运行时对象的类型。
  2. hashCode() 【native】计算哈希值。
  3. equals(Object) 默认效果与 == 相同,比较对象地址。
  4. clone() 【native】确保克隆出来的对象地址不同,类相同,但不确保equals值是否相同。
  5. toString() 默认是【类全名@十六进制哈希值】
  6. notify() 唤醒另一线程,如果有多个线程,则随机选取一个。
  7. notifyAll() 唤醒其他所有等待当前对象的线程。
  8. wait(long) 使当前线程进入等待状态,直到等待时间到达或者被其他线程唤醒(notify/notifyAll)或者被迫中断。同时释放监视器占有权。
  9. wait(long,int) 以第二参数纳秒优化(精细控制)。
  10. wait() 无休止地等待直到被唤醒或中断。
  11. finalize() 在被真正GC之前被调用一次且仅一次,但不要过分依赖它来做资源回收。

5. Spring事务(TransactionDefinition)传播方式

  1. PROPAGATION_REQUIRER:支持当前事务;默认新建一个事务去执行。
  2. PROPAGATION_SUPPORTS:支持;默认以非事务形式执行。
  3. PROPAGATION_MANDATORY:支持;默认抛出无事务异常。
  4. PROPAGATION_REQUIRES_NEW:挂起当前事务;新建事务去执行。
  5. PROPAGATION_NOT_SUPPORTED:挂起当前“事务”;以非事务方式执行。
  6. PROPAGATION_NEVER:以非事务方式执行;多个“事务”则抛出异常。
  7. PROPAGATION_NESTED:支持并以嵌套的方式执行;默认新建事务去执行。

6. Spring事务(TransactionDefinition)隔离级别

  1. ISOLATION_DEFAULT 使用数据库默认级别
  2. ISOLATION_READ_UNCOMMITTED 读未提交
  3. ISOLATION_READ_COMMITTED 读已提交
  4. ISOLATION_REPEATABLE_READ 可重复读
  5. ISOLATION_SERIALIZABLE 串行化

7. SpringMVC 五大组件

  1. DispatchServlet 请求分发
  2. HandlerMapping 请求参数适配
  3. ViewResolver 渲染页面
  4. ModelAndView 数据+视图
  5. Controller 控制器/处理请求

8. 对比 SpringMVC(A) 与 Struts2(B)

  1. A 是方法级别的请求拦截,B 是类级别的拦截(共享了类属性变量)。
  2. B 需要对每个请求进行封装(耗费更多内存)。
  3. A 请求入口是 servlet,B 入口是 filter。
  4. 扩展性、综合性能:A > B。

9. Tomcat线程模型

  1. BIO:请求 - 线程一对一(~7.0)
  2. NIO:基于缓冲区;同步非阻塞(8.0~默认)
  3. APR:以 JNI 形式调用 http 服务器的核心动态链接库来处理文件读取或网络传输操作。
  4. AIO:异步非阻塞(8.0~)