数据库
1.mysql索引是怎么实现的?b+树有哪些特点?真实的数据存在哪里?
2.哪些情况下建索引?解释下最左匹配原则?
现在一个表有三列a b c,组合索引(a,b,c)查询的时候where a like ? and b=? and c=?能用到这个组合索引吗?为什么?
3.explain执行计划看过没有?其中type字段都有哪些值?分别代表什么?
4.你有哪些sql调优经验?
Redis
1.redis有哪几种数据结构?给你一个key怎么知道是用的哪种结构?
2.怎么查看所有的key?redis怎么切换库?怎么清数据?
3.描述下redis淘汰策略?如果没有数据可以淘汰活着没有配置淘汰策略读请求可以正常执行吗?
4.你们项目里redis是单节点的吗?如果多节点怎么同步?
5.项目里用redis存哪些数据?为什么用redis?和jetty本地缓存有什么区别?
网络
1.HTTP 1.1版本增加了哪些内容?有哪几种请求方式?
2.描述下HTTP三次握手和四次挥手过程?为什么需要四次挥手?为什么TIME_WAIT状态需要经过两个最大报文段生存时间才能到close状态?
3.浏览器发起一个请求到收到响应中间经历了哪些过程?知道多少就说多少,越详细越好。
Nginx
1.nginx有哪些模块?你比较熟悉哪个?
2.proxy_cache你是怎么配置的?缓存是存在哪里?具体是怎么命中缓存的?
简历里有写nginx,结果问得几个问题我都没答好,面试官就没再多问了,囧~
Linux
1.怎么查看某个进程中的线程?
2.怎么批量替换一个文件夹下所有文件中的一个字符?(sed命令)
3.有没有用过jps jmap jstack jstat 命令,分别说下有哪些常用参数,知道多少就说多少。
我这里结合自己用jmap jstack定位到线上问题的经验说的,答完后感觉面试官挺满意的,所以说实践很重要啊~
情景模拟&其他
1.设计一个系统,每天有100亿条数据,需要在后台做实时展示和查找。
我当时回答的大体思路是nginx负载均衡,消息队列存储,多线程读取,批量插入,数据库分库分表。
面试官根据我的回答又衍生出了很多问题,如消息队列存满了怎么办?(也就是消费跟不上生产)批量插入时某一条失败了有什么影响?怎么解决?分库分表应该怎么分?怎么解决数据迁移的问题?
2.用代码实现cat 1.log |grep a |sort |uniq -c |sort -rn 的功能。
3.如果现在有一台服务器突然变得很慢,怎么去定位问题?