这篇文来自于我前同事的面试经历,从他的口述中我整理了这篇文章,好几个月前了, 现在发到牛客上来。
前言
5月份离的职,裸辞的。在家咸鱼了2个月了。
虽说平时刷刷剧啊啥的,但是中间还是看了些书的,不过一直不想去工作,主要是在家做条咸鱼可太爽了!
特别是看到我买的基金,我3月底买的,这收益率到上周都有60%了,还上啥班。这躺着比一天工资都多啊哈哈哈。
然而上周四,也就《变味的茅台,谁在买单?》和中芯国际上市那天,一天把我跌傻了,想想算了算了还是找份工作先稳着,这股市还是跌宕起伏啊,顶不住,死工资虽然少啊,但是毕竟稳啊。
于是就投了波简历,然后就和面试官约好周一的晚上19点,怀着激动的心情在19.10分总算接到了电话,没有多余的话,面试官直入正题,先来个自我介绍。
我巴拉巴拉的说了一下做的项目,然后面试官说可以,我看你简历里面写着对网络很熟是吧,那我先来问问网络吧。
由于最近看的都是关于网络的书,我特意写了在简历里面突出了下计算机网络,果不其然..嘿嘿。
下面我把面试官的问题都作为小标题的形式突出以下,便于观看。
其实面试的过程还是有很多来回的谈话的,不过我记不太得,不过大致的问题就是这样的,为了突出重点就一个标题一个回答的形式来叙述我整个面试的过程。
面试过程
说下 https 吧,和 http 有什么区别
https相对于http来说主要多了一个SSL层,通过SSL加密数据包,通过证书验证身份,使得数据更安全。
那说下https是如何加密的
简单的说就是客户端在请求服务器的时候得到服务器的证书和公钥,然后自己生成一个密钥,通过公钥加密,传输给服务端。然后服务端通过私钥解密,这样就得到对称加密所需的密钥,之后就通过对称加密通信。
为什么需要这么麻烦,直接公钥私钥通信不行吗
非对称加密比较耗时,对称加密比较快
那你再说说dns 如何工作的
简单的说就是通过udp去查ip
太简单了,再详细一些
主要就是先去本地找,本地没记录去本地运营商那里找,一般都有,如果没的话,就去根服务器找,然后再找到顶级,再找权威这样迭代下来,最终找到返回。解析过的都会在本地缓存着。
看来还挺熟,那tcp三次握手这种不问了,半连接队列知道么?
知道就是服务端存储客户端发起 syn 请求后把这个连接存在半连接队列。
半连接满了会怎么样?什么参数来调
丢失连接把?tcp_max_syn_backlog
tcp拥塞控制知道么
知道,先慢启动,然后拥塞避免,快速重传和快速恢复。
那bbr知道吗?
知道一点点,相对于别的算法它通过物理延时和链路带宽瓶颈来主动的探测,寻找合适的发送速度和发送量。
那quic知道吗?
知道一点点,谷歌出的基于udp的传输协议,主要是因为tcp有很多限制,udp比较轻量,因此基于udp自己再实现可靠性等。
不错,我看你还写了对redis 蛮熟的那来问问你redis吧?先说下都有哪些结构吧?
string、hash、list、set、zset
这个string 底层是怎么样的知道么?
是动态的,相对于c语言的string可以常数时间获取长度、能自动扩容并且惰性删除和二进制安全。
那redis 的hash扩容过程知道么?
字典有两个表,平时用一个,当扩容的时候在每次添加删除的时候顺带移一个槽去新的表,直到扩容完毕。在查找的时候先去老的找,找不到去新的找。
那rdb和aof有什么区别?
rdb是将数据库快照以二进制形式保存,aof的文本方式追加每次写入的命令。
redis集群是如何访问的?
客户端是先往集群中的一个节点发,如果命中直接返回,如果不命中,会返回moved指令,然后告知key所在的是哪个节点。
那redis是单线程的,为什么6.0版本还要引入多线程呢?
....额,这个我不太清楚。
行,说说AQS原理吧?
主要是通过cas一个状态,即state来判断锁是否被获取,没获取到锁的线程加入等待队列中等待,还有条件队列。再通过公平和非公平两种模式来选择唤醒线程。
说下线程池的处理流程?
任务提交,如果线程池数量还没到核心数的话启动线程来接这个任务,如果线程数已经到了核心数则任务入队。如果队列满了则看是否超过最大核心数,如果超过最大核心数则看拒绝策略如果定义的,不超过则启动新线程来处理这个任务。
这样的线程池有什么不好的地方?
适合cpu密集型把,IO密集型的还是需要改造下,让更多的线程工作起来,而不是优先排队。
那再说下啥呢,数据库mysql吧,熟不熟?
就一般。
mysql like有什么需要注意的?
最左匹配原则,不然就走全表了。
mysql 为什么用b+树结构,而不用哈希什么的?
主要是b+树数据都存在叶子节点,然后非叶子节点就存了主键和指针,比较少,加载到内存中的数据更多,这样查找数据磁盘IO次数少,并且叶子节点还是有序的适合范围查询,而哈希的话对于等值查询来说很好,但是像范围查询啊就比较无力了。
差不多了来写一道题目吧,生产者消费者。
就是实现一个生产者消费者,其实还蛮简单的,不会像那种很难的算法,看着题目人都傻了,无从下手。基本上一线搬砖应该都能写出来。我虽然在家咸鱼了两个月但是还是会练练手的,因为刷剧刷吐了。
其实中间还问了一些我记不太得,都是某个问题的一些细节分支,这其实很考察你是不是真的懂了,不过问题大致方向就是上面我所陈列的这些。
最后
这来来回回大致一个小时的时间,总体而言我自我感觉应该还可以。主要是一面也都很基础,项目上扯的不多,基本上有准备的人基础扎实一些应该都有机会,面试官最后还对我说了可以的,嘿嘿。
怎么说呢,其实工作久了偶尔休休假,心态会不一样。不过一般不建议裸辞,除非你很有自信,我是属于那种心态比较好的,找不到工作我再咸鱼着呗,那还能怎么办呢?
像有些哥们一个星期或者两个星期没找到工作就很急,急了之后每天都难受,并且当有一个之前根本不太想去的offer之后,也会因为焦虑感而将就,或者一些待遇很差的offer也就去了,会比较被动。
这也是人之常情,焦虑感随着时间越发膨胀,因此还是别裸辞,骑驴找马还是很香的!
最后今年的行情确实差,我好几个小伙伴都说难,这种情况其实苟着最好,咱先苟着,攒大招,多学点干货到时候offer还不是手到擒来,而且一般而言面试好,进去起点高一些,比你进去再努力上去简单些。
全部评论
(15) 回帖