Java基础
- Jvm内存模型有哪些,分别有哪些gc算法,如何优化jvm进程参数;
- HashMap的数据结构怎样的,为什么HashMap是线程非安全的;
- ConcurrentHashMap如何做到线程安全;
- 首先HashMap的对象是存储在堆中的,堆是线程共有的。这样就有多线程操作同一数据源的基础。
- 其次。HashMap每次put的过程就是先通过hashcode找到对应的槽。然后顺序遍历Node链表对比(通过hashcode 和 equals)
- 然而,如果多线程同时put,有一定概率出现某一个线程put时,正好发生resize过程。 这时这个线程在resize,数据重新copy的时候,其他线程正在put。就有可能造成Node链表循环。这就是HashMap线程非安全的原因。
- ConcurrentHashMap线程安全是因为加锁。默认有16个segment,每个segment存储不同的hash值范围的key。put,get操作时,只需要lock部分数据源。但是调用全局方法等操作时,lock整个数据源。
- 堆栈是线程公有的吗?为什么这么设计;
- Java内存泄露的问题调查定位:jmap,jstack的使用等等;
- Jvm进程cpu飙升如何检查;
- atomicinteger和volatile等线程安全操作的关键字的理解和使用 ;
Java进阶
- 线程创建的三种方式,阐述下多线程的数据结构;
- Java并发包的内容,阐述;
- 多线程下访问一份数据,如何保证一致性;
- Java有哪几种级别的锁,synchronized, lock有哪些区别;
- 场景:在一个主线程中,要求有大量(很多很多)子线程执行完之后,主线程才执行完成。多种方式,考虑效率;
linux
- top命令结果的一些含义,比如第一行最后三个数字是什么意思;
- 如何查看jvm进程;
- shell等;
数据库
- mysql的事物隔离级别;
- acid的特性是什么;
- mysql锁的产生原因,如何避免;
- mysql索引的建立规则,底层数据结构如何建立的,mysql索引查询的效率依赖什么;
常用中间件
- rocketmq/ kafka有哪些模块,相互之间如何调用的,各自处理什么事情;
- redis常用的数据结构,redis对存储做了哪些优化;
- redis节点增删,rebalance的过程发生了什么;
- 首先redis的rebalance发生场景,是在redis集群增减节点时发生的。
redis集群,通过hash槽将不同节点存储不同的数据块范围。hash槽是典型的圆环式。 - 增加节点到redis集群,redis不会立即提供服务,会有槽重新分配的过程。但是因为是hash槽,只会从某一节点划分部分数据到新的节点。
- 删除节点,也是不会立即下线,会将该节点的数据,按照重新hash值划分到不同的节点上。
- 整个过程就是rebalance。如果配置人rdb, aof 就能支持秒级持久化。其中持久化也是异步操作,性能无需担心。基本不会有什么问题。
- nginx的进程启动是多少个,nginx重启为什么那么快,发生了什么;
常见大题
- 10亿url,存在文本中,有重复的。且类型种类不可控制。取出top n;
- 按照hash值按照url分流,循环递归拆分子文件,使得小文件小于内存大小。需保证同一url只能出现在一个子文件中;
- 建立队列,判断文件大小, 同时计算n个文件,快排得出结果;
- 归并排序得到top n的值。
-
有活动页面,需要统计在线人数,给出方案。
-
有商品评论页面,读写比大于1K,要求能查询所有评论,我的评论,并支持分页。如何设计缓存key的方案。
答案太多,慢慢补充。欢迎关注
网友评论