问题记录
数据库
1.索引覆盖 查询结果只在索引中
2.分页优化,先查询id范围
3. 行列转换,case when,pivot
4.索引失效,不等于时
5. mysql oracle差别(分页)
6. 使用的数据结构:什么树,原理
7. 索引类型:普通索引、唯一索引、全文索引、多列索引
8. innodb优势:b+tree,支持事务,支持外键,高并发(MVCC)
9. 范围查询,先查询出id,再用id关联有什么好处
10. 子查询为什么效率低
11. explain各列的含义
java
1.反射的几种方式,getClass,Class.ForName,ClazzA.class,class.newInstance()创建
2. hashmap和hashtable:
- 新旧差别
-是否线程安全,hashtable安全,hashmap不安全
-hashmap使用了红黑树 - hashtable全表锁,
- concurrenthashmap jdk1.7分段,1.8使用乐观锁
- hashmap遍历: keyset entryset iterator
- object方法: equal hashCode wait notify getClass toString
- equals和hashcode: equal相同,对于map结构则hashCode相同
- concurrent包,及实现
- java中的锁
- 线程池有几种
- 参数:core大小,最大大小,过期时间,队列,阻塞方式
- syncronized和object锁区别
- 偏向锁、自旋锁(轻量)、互斥锁(重量),头部存储mark,或者指针
- syn:monitor类,CAS
10。 jvm内存分类,计数器,本地方法,堆栈,全局方法,堆
- 内存回收算法:mark sweep/copy/mark compact/generation collection/
- cms: young(eden,survivor*2) old 初始标记,并发标记,重新标记,清理 减小回收时间
- g1 内存分块,提高利用率 部分清理。可预计的回收时间
- stop the world
- 申请对象是否可以直接进入old区?可以。超过-XX:PretenureSizeThreshold大小可直接进入
- 使用线程池碰到的问题
- jdk1.8 新特性:lambda,默认接口,stream,LocalDateTime
- 内存模型JMM。工作内存,主内存。8个指令。valotile,
- happens-before:同一线程,加锁,volatile,线程的发生、中断
- StringBuffer,StringBuilder区别,前者线程安全,后者不安全但速度快
- 并发锁:CountDownLatch,CyclicBarrier,Semepher
- 原子操作类
程序设计
- 常用设计模式:单例、工厂、代理、装饰、发布订阅
- 单例模式懒汉、饿汉、枚举模式(反序列化防止注入)
- spring使用的设计模式:DI:工厂模式 AOP:代理模式
- 设计原则:单一职责,里氏代换,高内聚低耦合,对修改封闭、对扩展开放
- 排序算法:归并
- 红黑树原理
spring
- aop:
- jdk: 基于接口,invocationHandler invoke 创建proxy
- cglib,字节码编制
- 通知类型? before after around afterThrow afterComplete
- 隔离级别: 默认 RUC RC RR Serializable. 默认与数据库相同
- bean的生命周期
- spring启动过程
- interceptor
redis
- 失效机制
- 默认no eviction不失效
- volatile-lru ttl random
- allKeys-lru random
- 数据库同步
- Cache Aside
- Read/Write Through
- Write Behind Caching
三方组件:mysql binlog
- 数据结构:string list map set zset
- 集群模式下,master失败怎么办
其他
- TCP三次握手
sync =2 SYN-SENT
sync = y ack = x+1 SYN-RCVD
sync = x+1 ack = y+1 ESTABLISHED - TCP四次挥手
FIN FIN-WAIT-1
ACK CLOSE-WAIT
FIN+ACK FIN-WAIT-2
ACK