3.18号二面电话面试,20分钟就结束了,让我再好好准备一下😂😂。(已凉)
下面一些问题的回答,只是个人见解,不一定是对的,仅供参考,欢迎大家指正。
- Java虚拟机的GC原理
- 说说可达性分析法
- 哪些对象可以作为GC root
1.虚拟机栈中引用的对象
2.方法区中静态属性引用的对象
3.方法区中常量引用的对象
4.本地方法栈中JNI(即Native方法)引用的对象 - 弱引用是用来干的
缓存和防止内存泄漏。像ThreadLocal中,获取到线程私有对象是通过线程持有的一个threadLocalMap,然后传入ThreadLocal当做key获取到对象的,这时候就有个问题,如果你在使用完ThreadLocal之后,将其置为null,这时候这个对象并不能被回收,因为他还有 ThreadLocalMap->entry->key的引用,直到该线程被销毁,但是这个线程很可能会被放到线程池中不会被销毁,这就产生了内存泄露,jdk是通过弱引用来解决的这个问题的,entry中对key的引用是弱引用,当你取消了ThreadLocal的强引用之后,他就只剩下一个弱引用了,所以也会被回收。
- 如果让你自己实现一个线程池,你怎么控制这个线程的并发数
正确答案:https://blog.csdn.net/manzhizhen/article/details/81413014
下面回答是如何自己实现一个线程池,面试的时候回答有点偏了
1.要定义一个存放所有线程的集合
2.每有一个任务分配给线程池,我们就从线程池中分配一个线程处理它
3.当线程池中的线程都在运行状态,没有空闲线程时,我们还需要一个队列来存储提交给线程池的任务。 - 乐观锁是什么?
乐观锁(compare and swap)假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测。CAS机制当中使用了3个基本操作数:内存地址V,旧的预期值A,要修改的新值B。
- CAS的缺点
1.CPU开销较大
2.不能保证代码块的原子性
3.ABA问题 - Java里面怎么实现(调用)一个乐观锁
java.util.concurrent包 (J.U.C)就是建立在CAS之上的,其中提供了AtomicInteger,AtomicBoolean,AtomicLong等
- 哈希冲突一般怎么解决
- 拉链法如果重复的比较多的时候,性能下降很厉害,怎么办?
- 红黑树和平衡二叉树有什么区别?
AVL 树比红黑树更加平衡,但AVL树在插入和删除的时候也会存在大量的旋转操作。所以当你的应用涉及到频繁的插入和删除操作,切记放弃AVL树,选择性能更好的红黑树;当然,如果你的应用中涉及的插入和删除操作并不频繁,而是查找操作相对更频繁,那么就优先选择 AVL 树进行实现。
- 平衡二叉树和红黑树旋转次数比较
https://blog.csdn.net/z702143700/article/details/49079107
平衡二叉树:插入最多一次旋转,删除最多logN次
红黑树:插入最多二次,删除最多三次 - 一致性哈希知道吗
将请求均匀地分配到应用服务器上;确保同样的用户总是访问同一个服务器等。
- TCP 里面的time_wait和time_close的状态
- 这个状态保持多长时间
2MSL
- 为什么是2MSL
去向ACK消息最大存活时间(MSL) + 来向FIN消息的最大存活时间(MSL)
- 一个 32 位的JVM可以管理多大内存
简单的说就32位处理器虽然可控内存空间有4GB,但是具体的操作系统会给一个限制,这个限制一般是2GB-3GB。
- 跳跃表这种数据结构了解吗,时间复杂度
- 跳跃表用在什么地方
应用场景:节点增加和更新比较少,查询频次较多的情况。
产品:Lucene,,elasticSearch,Redis。 - 为什么redis中用跳跃表不用红黑树?
- 数据库有慢查询如何去定位
- 为什么加索引可以加快查询速度
- b+树和红黑树有什么区别
- 一个三层的B+树大概能存多少条记录
- 一个进程 fork 出一个子进程,内存占用会不会翻倍
全部评论
(3) 回帖