阿里高德一面
1.操作系统
进程和线程区别
进程之间通信方式
死锁的四个条件
2.数据结构
很多个tcp连接,有的无响应后失效,哪个数据结构适合查找并删除这些连接——堆
3.网络
https比http的优势和缺点
4.数据库 ——重点
mysql底层
用过索引吗
知道那些数据库引擎
如果并发量很大怎么办
5.java开发
消息队列
解耦:系统A将userId写到消息队列中,系统C和系统D从消息队列中拿数据。系统A只负责把数据写到队列中,谁想要或不想要这个数据(消息),系统A一点都不关心。即便现在系统D不想要userId这个数据了,系统B又突然想要userId这个数据了,都跟系统A无关,系统A一点代码都不用改。系统D拿userId不再经过系统A,而是从消息队列里边拿。系统D即便挂了或者请求超时,都跟系统A无关,只跟消息队列有关。
异步:系统A执行完了以后,将userId写到消息队列中,然后就直接返回了(至于其他的操作,则异步处理)。
削峰/限流:
不同servlet怎么通信,远程调用
hashmap线程安全吗,底层增删是在链表上完成的,而查询只需扫描部分,则效率高。相比 jdk1.7 的 HashMap 而言,jdk1.8引入了红黑树的设计,当hash表的单一链表长度超过 8 个的时候,链表结构就会转为红黑树结构。
在处理时,HashMap集合的key,会先后调用两个方法,hashCode and equals方法,这这两个方法都需要重写。因为equals方法默认比较的是两个对象的内存地址,所以要重写equals方法使其比较内容是非相等。