聊聊鹅厂及鹅厂出来的coder们的面试套路

聊聊鹅厂及鹅厂出来的coder们的面试套路

http://blog.csdn.net/lxf20054658/article/details/77415886

原创 2017年08月19日 19:54:21

前前后后,出于对鹅厂丰厚待遇的艳羡,前去深圳鹅厂总部面试了几次,最终都因自己有激情没准备疏于细节而被鄙视掉。当下,正好又开始了自己的求职生涯——漫漫求职路! 
至今,离职2月有余,为了转行大数据,踏踏实实的把大半个hadoop家族都学习并操作了一遍,然,大数据的求职简历投出后,都石沉大海!终顿悟,没经验空有理论是无用武之地的。方是时,袋中存粮已所剩无几,自信满满的我开始焦躁起来。毕业8年,一直从事C++语言类的开发工作,始于语音行业的科大讯飞,途经电信解决方案的华为,转求移动企业业务的赛蓝科技,至于地铁WiFi行业的南方银谷。全然没有在一个领域进行深耕,渐感C++开发岗的食之无味,弃之可惜的尴尬之境。诚然手握C++,java,PHP,JavaScript,Python等众多开发语言之利器,却终无用武之地,现已至奔三而立之年,竞落魄如此,难免老泪纵横!遂决心转投java生态的怀抱,big data不成,就退而求其次,从java开发开始吧。 
目标:一个能有自己发挥余地的平台,能有稳定收入解决当下财务危机,两年左右时间成为经验丰富的架构师及带开发职能的管理岗。 
职业生涯所剩时日无多,务必紧张起来。 
求职-ing。 
在我大中国广袤的领土上,现如今雄踞着BAT三座大山,无论你身在何处,只要是稍微有点奔头的平台,始终绕不过BAT的锦衣卫们。我手握三尺利剑,意欲翻江倒海,神挡杀神,佛挡杀佛,志趣满满,然终归还是遇到了鹅厂的锦衣卫,把我杀得失魂落魄,丢盔弃甲,虽拼尽全力,奋力狙击锦衣卫放的各种疑难杂症,终还是铩羽而归。纵昔日鹅厂求职观今日之败绩,所以有感,欲聊聊鹅厂锦衣卫们的套路,以雍同是天涯沦落人等吾辈,勿使“后人”而复哀“后人”矣。 
言归正传。 
鹅厂锦衣卫们的面试特点: 
(一)周期长 
(二)问问题,偏向深度递归 
对于特点一,如果手中余粮不多,急于工作或换岗的同僚们,则欲速则不达; 
对于特点二,我的体会是:回答问题,言简意赅,言多必失,避免过渡的深度递归提问导致堆栈异常搞崩溃了自己,尽量避免提起那些自己知其一,不知其二的知识点。 
为说明特点二,现举例说明(亲身感受): 
为便于描述,现约定如下(伪代码):

set:caller<-锦衣卫
set:callee<-我
  • 1
  • 2

舞台背景:笔一支,A4纸若干。 
人物:caller,callee。 
caller:先自我介绍一下。 
callee:巴拉巴拉。 
caller:你会web服务开发,是吧? 
callee:嗯。 
caller:get和post有什么区别?两者最本质的区别是什么? 
callee:get的请求地址可见,post则不可见,比较安全。本质区别:伊犁哇啦啦,有点蒙。 
caller:服务器如何判断一个请求是get还是post? 
callee:开始有点蒙,提醒后,说根据http请求头判断。 
caller:http请求头有哪些? 
callee:Host,User-Agent,keep-alive(这个实际上是Connect字段的值)。 
caller:keep-alive有什么作用? 
callee:降低web服务器的负载,保持长连接。 
caller:http协议是基于哪个协议实现的? 
callee:http协议基于面向连接的tcp协议。 
caller:keep-alive的实现,从tcp层来说,是如何实现的? 
callee:使用心跳保持(心里也知道这个有问题,并不是你告诉服务器keep-alive,连接就能keep-alive的)。 
caller:心跳的本质是什么?为什么能保持连接? 
callee:懵逼。。。(大脑在思索,心跳都是业务服务器和客户端的约定实现呀)。 
caller:心跳实际上是因为网络包,从客户端到服务端时,要经过很多网关,路由器等众多节点,发送心跳包时,可以更新各节点的缓存时间。 
caller:你会套接字编程,是吧? 
callee:嗯。 
caller:套接字编程过程中,有遇到过什么坑吗? 
callee:客户端连接到服务端时,如果服务端主动断开了客户端的连接,连接状态会变为time_wait,这种连接在高并发时,有很多(当时,我还没深入去理解为什么会有time_wait状态,属于自己知其一不知其二的知识点)。 
caller:那应用层编程,如何处理这种time_wait过多的情况? 
callee:懵逼。。。(脑里想,当时是改操作系统内核参数修改的,但是应用层不知道) 
caller:套接字编程过程中,有遇到过粘包问题吗? 
callee:懵逼。。。(只知道丢包,但是tcp会自己处理重传呀,粘包是何怪物??),伊利哇啦啦。。。 
caller:粘包:简单讲就是接收端一次性收到了多个数据包,前一个数据包和后一个数据包同时到达接收端。怎样解决粘包问题? 
callee:我们每一个数据包,在报文头都很明确的知道,这个数据包的报文头长度和数据报文长度,不会出现这种粘包的情况(这种其实就是解决粘包的一个办法),我们的二进制协议报文中会有报文长度,命令字,是否加密等字段(坑,马上又问加密解密的问题)。 
caller:(不依不饶)粘包可能发生的场景是什么?如何在应用层编程控制? 
callee:一般会设置SO_LINGER算法(误打误撞,粘包出现,主要就是tcp为了优化性能,发送数据缓冲区没有达到阈值时,会一直缓存,达到阈值后将数据一次性发送出去)。 
caller:刚才聊到加密解密,那对称加密和非对称加密都有哪些? 
callee:懵逼。。。(原先看过加密解密算法,但是一下子想不起来),我们项目中,使用的是tea加密。。。(当时根本不知道tea加密其实是属于对称加密,判断是否是对称加密,有个方法就是看解密方是否需要密钥才能解密,后来通过和一个朋友聊,知道了对称加密主要有des,des3,aes,非对称加密主要是RSA,非对称加密中,解密方使用公钥去解密,RSA的密钥长度可以为128,256,512,1024,密钥长度越长,加解密越耗时,越难破解)。 
caller:在https通信中,用到了ssl,可以说说ssl的原理吗? 
callee:懵逼。。。https加密后,安全但是性能不高(这当然不是caller要的答案)。 
caller:用过CA证书吗? 
callee:用过。 
caller:能说说CA的原理吗? 
callee:伊利哇啦啦粘。。。(脑里盘算着,我曾经去微软注册过证书,但是真不知道原理),忽乱的说些tocken,令牌。。。 
caller:你用过数据库,是吧? 
callee:用过mysql。 
caller:知道mysql的存储引擎吗? 
callee:myisam和Innodb引擎,一通说。。。(这个自己熟悉) 
caller:数据库隔离有哪几种? 
callee:按库隔离,按表隔离(不着边际实际是:可读取未确认,会导致脏读,可读取确认,可重复读,可能导致幻读,可串行华) 
caller:了解什么是脏读吗? 
callee:在缓存系统中,缓存过期后,会有脏读,可能导致缓存穿透,一般直接返回脏数据,然后服务自动去数据库加载新数据,清理脏数据(考察的其实是数据库的脏读) 
caller:了解过什么是幻读吗? 
callee:懵逼。。。不知道。 
caller:知道字符集分哪几种吗? 
callee:单字节字符集,多字节字符集Unicode,utf8,utf8又分好多种类型,。。。(又是坑,自己引入了utf8,自己对utf8的分类也是只知其一不知其二) 
caller:utf8和Unicode是什么关系? 
callee:utf8是字符编码,Unicode是字符集,如汉字编码,需要2个字节才能编码一个汉字,所以使用Unicode字符集。 
caller:bom utf8和普通utf8有什么区别? 
callee:蒙圈。。。,不知道bom(其实bom就是大端编码,小端编码的区别,在一个文件开头的2个字节,如果是FF FE则是小端编码,如果是FE FF则是大端编码,BOM只有Windows操作系统支持,Unix,Linux是不讲究这种魔法数的) 
caller:好,面试就到这里,我去和hr说说。。。等待-ing,过了几分钟,caller过来,hr有事,要不你先回去,后面有消息,hr再联系你。 
callee:哦,好的,谢谢!(心里大概知道了结局)

The End(省略若干提问)。 
点评: 
这种问答方式,是标准的鹅厂锦衣卫面试方式。个人认为,无论你多么牛逼,最后都会被问成SB(偷笑)。 
仅以此献给那些有志于大厂的同僚们。

lxf20054658

  • lxf20054658

    2017-08-21 08:492楼
  • 更详细的关于time_wait状态了参考:
    http://m.blog.csdn.net/yusiguyuan/article/details/21445883
 
lxf20054658
  • lxf20054658

    2017-08-21 08:481楼
  • 纠正一个错误及一个争议问题:
    -错误问题
    使用rsa加密时,公钥只能用于加密,只有私钥能解密。(问中描述恰好颠倒了)
    -争议问题
    一朋友说对于time_wait这种情况可以在应用层设置so_reuse解决,这其实是无法解决高并发时的大量的短链接的问题的。单台机器的可用端口为1-65535个。彻底屏蔽time_wait也是不好的设计,原因:
    (一)连接主动关闭发送的四次挥手的ack有可能没成功传输到对端,从而对端会重发ack包,此时主动关闭一方需要能够响应,否则如果主动关闭方处于closed状态,就会给对端发送rst,对端就认为出错,这是不优雅的!所以此时主动关闭一方需要time_wait等待,等待2个msl后,根据tcp的设计,此时网络上未传输完成的包都将被丢弃。
    (二)主动关闭一方关闭连接后,网络上可能还有剩余数据包未传输完成,需要等待2msl,确保数据包要么被丢弃,要么成功传输。
    所以对于有高并发的tcp短连接场景,要么是增加业务服务器,提高集群吞吐量,要么优化内核参数。
 
  •  

 
 
posted @ 2018-03-19 13:48  sky20080101  阅读(116)  评论(0)    收藏  举报