这是我参与8月更文挑战的第31天,活动详情查看:8月更文挑战
四、JAVA 相关
1. 关键字考察
- final 常量(不可修改的变量)/不可重写的方法/不可继承的父类/编译期确定/存储在常量池(永久代)【编译器优化策略:直接将原代码复制到被调用的地方,而不进行调用。private方法同理】
- finally 必须运行的代码段(在return之前运行,内部的return优先级高于外部的)
- finalize 被发现没有引用链(被GCRoot引用)时,被标记并判断是否有必要执行这个方法(如果已经执行过了就不再执行,否则进入F-Queue队列前后执行)。永远只执行一次!
- synchronized 加锁类/对象[方法]:底层实现在对象头加上monitor锁。
- volatile: 常用于多线程对可见变量的修改,底层实现用了内存屏障(Memory Barrier)。
- static 静态:变量存储在方法区/元数据区,在类第一次被加载的时候就跟着被加载。
- transient 修饰变量,表示不参与序列化。
2. 集合类
- List ArrayList LinkedList
- Map(get/set/entryKeys/values) HashMap(桶数组,红黑树,链表) TreeMap(键有序,红黑树,平衡二叉树) ConcurrentHashMap(分区哈希,局部加同步锁进行读写操作)
- Set:HashSet、LinkedSet。
- Queue/Deque 队列:含普通队列、双端队列,其中还有个优先队列 PriorityQueue 比较特殊。
3. Java 四大特性
- 抽象。
- 封装。
- 继承。
- 多态。
4. 关于Object类
- getClass() 【native】返回运行时对象的类型。
- hashCode() 【native】计算哈希值。
- equals(Object) 默认效果与 == 相同,比较对象地址。
- clone() 【native】确保克隆出来的对象地址不同,类相同,但不确保equals值是否相同。
- toString() 默认是【类全名@十六进制哈希值】
- notify() 唤醒另一线程,如果有多个线程,则随机选取一个。
- notifyAll() 唤醒其他所有等待当前对象的线程。
- wait(long) 使当前线程进入等待状态,直到等待时间到达或者被其他线程唤醒(notify/notifyAll)或者被迫中断。同时释放监视器占有权。
- wait(long,int) 以第二参数纳秒优化(精细控制)。
- wait() 无休止地等待直到被唤醒或中断。
- finalize() 在被真正GC之前被调用一次且仅一次,但不要过分依赖它来做资源回收。
5. Spring事务(TransactionDefinition)传播方式
- PROPAGATION_REQUIRER:支持当前事务;默认新建一个事务去执行。
- PROPAGATION_SUPPORTS:支持;默认以非事务形式执行。
- PROPAGATION_MANDATORY:支持;默认抛出无事务异常。
- PROPAGATION_REQUIRES_NEW:挂起当前事务;新建事务去执行。
- PROPAGATION_NOT_SUPPORTED:挂起当前“事务”;以非事务方式执行。
- PROPAGATION_NEVER:以非事务方式执行;多个“事务”则抛出异常。
- PROPAGATION_NESTED:支持并以嵌套的方式执行;默认新建事务去执行。
6. Spring事务(TransactionDefinition)隔离级别
- ISOLATION_DEFAULT 使用数据库默认级别
- ISOLATION_READ_UNCOMMITTED 读未提交
- ISOLATION_READ_COMMITTED 读已提交
- ISOLATION_REPEATABLE_READ 可重复读
- ISOLATION_SERIALIZABLE 串行化
7. SpringMVC 五大组件
- DispatchServlet 请求分发
- HandlerMapping 请求参数适配
- ViewResolver 渲染页面
- ModelAndView 数据+视图
- Controller 控制器/处理请求
8. 对比 SpringMVC(A) 与 Struts2(B)
- A 是方法级别的请求拦截,B 是类级别的拦截(共享了类属性变量)。
- B 需要对每个请求进行封装(耗费更多内存)。
- A 请求入口是 servlet,B 入口是 filter。
- 扩展性、综合性能:A > B。
9. Tomcat线程模型
- BIO:请求 - 线程一对一(~7.0)
- NIO:基于缓冲区;同步非阻塞(8.0~默认)
- APR:以 JNI 形式调用 http 服务器的核心动态链接库来处理文件读取或网络传输操作。
- AIO:异步非阻塞(8.0~)