(1)Srting中的equal方法重写了Obejet的equal方法,如果是自定义对象需要比较是否相等,必须要重写equal方法和hashcode方法 (2)Integer的值如果是在-128--127之间的,是直接拿缓存数据,没有创建新对象,如果超过了这个值,则会新建一个对象 (3)synchronzie和reentrelock的使用情况synchronzie不可逆,一旦升级为重量级锁将会降低可用性, reentrelock相对来说更为灵活,可以配合condition结合使用 (4)AQS就是基于CLH队列,用volatile修饰共享变量state,线程通过CAS去改变状态符,成功则获取锁成功,失败则进入等待队列,等待被唤醒 (5)总线风暴:由于volatile的mesi缓存一致性协议需要不断的从主内存嗅探和cas不断循环无效交互导致总线带宽达到峰值 (6)hashmap扩容机制,当capacity*加载因子 > 12的时候,会产生两倍扩容(2的次幂的原因是位运算更快),hashmap在1.7采用头插法,在并发环境下会造成环表死循环,1.8改成尾插法修复了这个问题,但仍然是线程不安全的 (7)锁升级过程:首先分为无锁,偏向锁,轻量级锁,重量级锁。偏向锁就是偏向第一个进入的线程,之后的每一个线程进来,都先获取锁的主导权,随后逐渐升级为轻量级锁,轻量级锁在多次自旋后变为重量级锁 (8)风控策略:nginx限制ip,redis限制访问次数 (9)动态代理与静态代理的区别:静态代理是需要自己去实现接口的内容。动态代理分为两种,Jdk动态代理和Cglib动态代理 ,jdk动态代理是基础反射的,实现了InvocationHandler接口,使用jdk动态代理的类必须实现接口。反之 (10)spring作用域:session(不同会话不同session),application(上下文),sington(单例),request(请求) (11)#方式能够很大程度防止sql注入,$方式无法防止Sql注入。还有就是#可以预编译 (12)索引分为聚集索引和非聚集索引。聚集索引就是常用的主键,物理地址和主键id程顺序线性分布,便于查找。非聚集索引分为普通索引,唯一索引,区别就是唯一 (13)IO多路复用:多个线程,多个socket (14)线程池放不下会放入等待队列,等待队列也满了之后会执行拒绝策略 (15)springboot的加载原理:springboot通过配置文件,自动装载所属依赖的类,再通过动态代理的方式注入到spring容器中 (16)Mybatis开启二级缓存,SqlMapConfig.xml加入 <setting name="cacheEnabled" value="true" />。然后再xml中加入<cache>标签即可 (17)redis缓存问题 缓存穿透:查询一个不存在的元素,直接打入到数据库。解决方式是加一个Null的值进缓存 缓存雪崩:大量并发请求击中过期的缓存数据。解决方式是分散缓存的过期时间,不要同一时间全部失效 双写不一致问题:先删除缓存,在更新数据库
(18)AOF和RDB的区别 AOF持久化是把操作日志记录在文件中,可以采用AOF重写 RDB是根据时间,定时写入磁盘文件
(19)为什么是15次轮回才能将对象放到老年代? 原因是对象头信息中的GC年龄采用4个比特位来保存,最大值也就为15
(20)多线程情况下顺序执行:retrennlock+condition或者notify和wait
(21)spring采用了设计模式:工厂模式,对象的创建交给spring管理 AOP适配器模式,单例模式
(22)WebSocket和HTTP的区别? WebSocket建立客户端长时间会话,Http是长连接,无状态
(23)ArrayList的实现,ArrayList扩容时用什么函数copy数组? copy of()
(24)子类不能抛出比父类更多的异常(包括范围更大的异常),因为在Runnable父类中没有抛出异常,所以在实现Runnable时不能抛出异常,只能try
(25)用户态和内核态的区别: 当一个进程在执行用户自己的代码时处于用户运行态(用户态),此时特权级最低 当一个进程因为系统调用陷入内核代码中执行时处于内核运行态(内核态),此时特权级最高 切换的方式 (1)系统调用 (2)异常 (3)外围设备的中断
(26)redis分布式锁和zk分布式锁有什么区别? redis分布式锁,其实需要自己不断去尝试获取锁,比较消耗性能 zk分布式锁,获取不到锁,注册个监听器即可,不需要不断主动尝试获取锁,性能开销较小
(27)线程池核心数是20个,最大线程数是40个,讲一下任务进入线程池的原理逻辑? 如果线程数小于20个,放入线程池里执行任务 如果线程数大于20小于40,放入等待队列 如果线程数大于40,执行拒绝策略
(28)对称加密和非对称加密有什么区别? 对称加密使用同一个秘钥来加密解密,反之,非对称加密公钥私钥不一样
(29)SpringAOP有哪几种实现方式? 常用的有两种,一种是实现BeforeAdvice和afterBefore接口 另外一种是使用Aspect注解
(30)分布式事务 两阶段提交:确认,提交 缺点是占用资源,不可靠,而且采用的XA协议在微服务的api调用不可行 TCC:try-confirm-cancel ,采用不断的幂等性提交事务的方式,保证最终一致性 基于消息中间件的分布式
(31)进程间通信方式:信号量,管程 信号量:PV操作 管程:医院就诊模型
(32)ReentrantLock是基于AQS( AbstractQueuedSynchronizer)实现的,默认采用非公平锁。CAS底层实现是调用compareandsetstate方法, 如果线程被占用,state值为1.反之为0.基于可重入锁的机制,如果同一个线程多次抢占 到此资源,那么他的state将会累加。那么未抢占的资源将会进入等待队列,变成自旋状态等待抢占 的资源被释放,避免频繁切换导致资源浪费