回馈牛客,发一些面试中遇到的问题
这里仅列举一些本人在面试中发挥未到100%的题目,供大家排坑。欢迎评论区补充遇到的一些冷门问题。
Java基础
- 为什么notify和wait方法必须在synchronized方法中使用?
- finally方法一定会被执行么?
- 抽象类能否跨包继承?
- BIO用了哪些设计模式
- Java四种引用的具体应用场景
JVM
- 如何降低GC的概率
- JVM在new对象时会不会发生抢占?如何设计堆内存分配的线程安全?
- 讲讲STW、SafePoint和SafeRegion
- FullGC触发的场景
集合
- 使用HashMap的put()时,如何判断key是否已存在(默写源码中的if()判断语句)
- Vector绝对线程安全么?
- CLH队列如何实现非公平与公平?
多线程
- CountDownLatch和CycleBarrier在使用场景上的区别(别说计数器不可重置这种没营养的)
- Lock与Synchronized的区别(结合使用场景,要求有多少说多少)
- 讲讲ThreadLocal引发的内存泄露(key弱引用)以及解决方案
- 常量、成员变量以及字面量在JVM中的存储位置
缓存&消息队列
- Redis的使用场景
- MQ的使用场景
- Redis与DB如何保持一致性(结合强一致性、弱一致性、缓存一致性回答)
- MQ如何在不去重的前提下避免消息多次发送?
- Redis的多路复用咋实现的(我不知道讲select、poll、epoll是否正确,没看过源码)
负载均衡
- Nginx和Apache的具体区别(结合使用场景回答)
- 对Nginx缓存的理解(静态资源)
分布式
- 大型分布式Session共享的解决方案
- 不利用分布式事务实现两个事务的一致性
- 如何设计uuid使其满足唯一性、稳定性、高并发性
- 如何实现单点登录
数据库
- MySQL中索引如何组织?B+树的非叶子节点存储什么内容?
- 数据库中联合查询涉及哪些关键字
- 可以用uuid做主键么?
- DB中的乐观锁和悲观锁怎么用?(这个我是真的没上手过,拒绝当sqlboys)
- MySQL的双写机制
- 讲讲事务的传播行为
- 最左前缀是否支持范围查询
- 讲讲你对DB连接池的理解(让你自己设计一个)
- ssh时代的JDBC连接过程
网络
- HTTPS握手机制(要结合非对称加密和对称加密)
- TCP四次挥手时的两个状态Time_wait 和 Close_wait属于哪一方?在哪一次通信后进入对应的状态?
- 如何实现UDP的可靠传输?
算法
- 快排的极致优化
- 冒泡排序的极致优化
Android
- 四大组件、五大存储、六大布局
- 对DataBinding的理解
- 对EventBus的理解
- RelativeLayout和LinearLayout的细致对比(从性能、绘制原理上分析)
- 如何自定义Layout
- IPC与Binder的理解
- Activity启动过程(要求极细致)
- Handler、Looper以及message
- Fragement与Activity的关系
- 讲讲ANR的原因以及解决方案
- 讲讲你对Android动画的理解
- Android应用从点图标到完全启动经历了什么?
- view的measure过程
- 如何优化页面卡顿
- Android持久化方案
开放题
- 讲讲Java中println("Hello World!")如何从文件到控制台输出(这里我说到控制台输出后就被打断了,嫌我讲太多,应该把守护线程和GC再讲讲)
- 讲讲从浏览器输入www.baidu.com到展示页面的过程(本机DNS缓存那里我不太熟,一笔带过,应该恶补一下)