一面
-------------------------------开场------------------------------
 1、介绍自己
 2、介绍项目以及自己负责的哪些模块
 3、技术上有什么难点
 4、内存队列的使用场景
 – 1.异步 2.解决并发
-------------------------------技术------------------------------
 1、并发三大性
 2、什么是可见性
 — 我引出了JMM
 3、什么是有序性
 — 我引出了指令重排序,并且说什么时候需要指令重排序,说了cpu的空间局限性每次读取的时候都是读取连续的命令
 4、happens-before
 5、如何保证线程安全
 – 一方面加锁;另一方面无锁:比如cas、内存队列;threadlocal线程间共享(也没有追问啥是threadlocal)、sleep(这种方式不好)
 6、并发不安全的本质原因,就是说什么时候多线程并发是安全的?
 – 我回答:是否访问临界资源
 7、synchronized可以修饰哪些地方?(我只回答了修饰代码块和方法,面试官问还有吗?)
 – 链接 修饰代码块、方法、静态方法、类
 8、synchronized修改静态方法和非静态方法的区别?
 – 链接 就是类锁和对象锁的区别
 9、hashmap是线程安全的吗?
 – 回答不是
 10、arraylist是线程安全的吗?
 – 回答不是
 11、那如何让arraylist是线程安全的
 – 回答vector。又追问还有吗?回答copyonwritearraylist。
 12、又追问copyonwritearraylist底层实现原理是什么?
 – 不知道
 13、hashmap保证线程安全类是什么?
 – concurrenthashmap。追问底层实现原理,我分别为1.7和1.8说了。后续没有追问具体实现逻辑
 14、hashmap什么时候线程不安全?
 – 我回答1.7是因为扩容的时候出现环形链表;1.8线程不安全的地方需要补充;
 15、问了如何指定MySQL走没走索引?
 – explain,type类型
 16、索引数据结构类型
 17、b+树的优势
 18、为什么不用二叉树?
 – IO磁盘查询次数高,性能低
 19、公司rpc的框架
 – 用的http
 20、追问http和rpc的区别
 – 回答了:http可以跨语言,rpc只能双方都用dubbo;
 追问他俩本质区别是什么? (没有回答出来)
 –http是指从客户端到服务器端的请求消息,rpc是远程过程调用协议
 21、系统设计有做过吗?就是一个模块从头开始设计
 – 回答需要对业务足够的熟悉,才能用技术解决问题
 22、公司中使用消息中间件吗?
 23、kafka中有什么重要的组件,kafka的架构是什么样的?
 24、kafka基于zookeeper干了什么?
 – 回答kafka无状态节点,都是注册到zookeeper中的
 25、kafka如何保证消息不丢失
 – 1.回答了先开启生产者发送两个消息再开启消费者,这两个消息不会被消费,面试官问为什么会丢数据我回答可能是因为消费者启动的时候偏移量不是从头开发的,被面试官否认:如果实际生产中,谁先谁后开启说不准的。然后我又说有个参数可以设置从头开始消费 2.生产者的ack 3.消费者自动提交
 26、公司这边的MySQL事务隔离级别是什么
 27、可重复读和读已提交的本质差别在哪?为什么又读已提交还需要可重复读
 – 面试官说读已提交,明明解决了并发下可见性的问题,为什么还需要添加一层可重复读?
 28、让你设计一套秒杀系统,你需要从那几个方面设计?
 – 1.物理机器内存 2.垃圾回收器 3.jvm参数
 29、货很少,请求量有很多,那么如何保证这些货不会被超卖?比如10件货,扣减到了-2、-4;
 又补充说比如100万的请求,分别给10个tomcat(集群部署),每个tomcat处理10万个请求,且10个tomcat都会访问库存。
 – 分布式并发安全问题。我回答加锁。(弄了半圈,灭有直接问我分布式锁,而是让我主动想到分布式锁)
 追问有哪些分布式锁?
 — redis、zookeeper、MySQL实现
 30、一个redis可以抗住多少QPS?
 31、redis实现分布式锁的原理、命令?
 — setNx。
 32、秒杀系统100万的请求量,本来需要10台机器可以抗住,但是只有两台机器,那么如何抗住100万请求不让这两个机器挂掉?
 — 限流。使用nginx、histy、sentinel秒杀系统
 33、秒杀系统100万的请求,如何防止用户薅羊毛,就是防止一个用户通过其他软件抢了所有的商品?
 — 回答记录用户id
 追问还有其他方案吗?
 – 不知道。秒杀系统
 34、来个编程题,我说没有刷过,他就让我写个死锁吧,; 问我来京东之前没有刷过题吗,我说当时只让说思路;
 问我产生死锁,会不会让主线程阻塞,我说不会,他说那如何才能让主线程阻塞呢?我使用了join。
 35、如何排查死锁
 – jstack。追问具体命令,回答忘了
 36、问了面试官业务这块










