昨天刚刚面完京东,乘着还记得一些细节,先写下了。
#### 1. 前奏
和京东是这么联系上的:我在boss直聘上有简历,然后京东商城的一个研发经理找我要不要来面试一下。我那时候还在深圳,就说了还在深圳呢,最近还不找工作,就说后面找工作就找他。后来我找工作的时候主动联系了他。那时候是晚上刚吃完饭,我手机上聊了一下,说自己要找工作了,啥时候能聊一下,结果他反应很快。。。马上让人打电话给我先来个电话面。我那时候刚吃完饭,状态不好,算了,硬着头皮面吧!。
#### 2. 电话面
不一会儿,有面试官打电话给我了。气氛比较轻松,面试官有说有笑,说这么晚面试,可能不太好,没关系,我们简单聊一下,面试官先开起了玩笑,后来就了解了一下我的基本情况。
面试正式开始了。先问我,从我在浏览器输入一个域名开始,到显示页面,中间发生了什么。。这种题我经常看到,以为面试官不会问这种题,结果还真问。我就按自己的理解说了一下。这种题答得不好。我没有专门去准备,如果这种题要答完美,还是要做很多功课的。
再就是问sql注入问题。我们项目中怎么预防的。先让我解释一下sql注入问题。再就是问数据库索引的东西,让我解释一下索引是怎么回事,我就从b树讲起,说了大半天,这个准备比较多,没问题。后来我就主动说起了数据库主从备份,讲了一回数据库主从备份原理。面试官听完后很满意,说嗯不错,你的知识面还是很广的,一般工作一年的人不会了解这么多,主从备份原理很多人都不会。我听了,一下子放松了很多,感觉一下子好了很多。这种感觉很奇妙,面试官夸你的时候,往往很容易通过面试的。一句赞扬的话,就可以激发你的洪荒之力。哈哈。一句就够了。再后面说主从复制延时的问题。都说的挺好的。
再者就说到了数据库分库分表的问题,横向切分,纵向切分,分区,分区类型都讲了,还好,没啥问题。
如何查询一个sql是否走了索引,那就是explain咯,
从输入jd.com到显示页面,中间发生了什么。。这个问题详细说可能几天几夜说不完。说出自己认为重要的部分就可以了。
cdn技术相关的问题,为什么用cdn,这些资源放在哪里等等
nginx的作用,除了反向代理还能干吗。。很多,http服务器,限流,屏蔽ip等等。
他看我是做微信公众号比较多,就问了一些微信公众号相关的问题,他之前也做过,对这些方面还是很了解,问了一些比较好的问题。具体偏向业务的,就不说了。
后来就算电话面通过了,然后研发经理就约时间电话面。
#### 2. 现场一面
终于来北京了。8.21到北京,22早上十点半去面试。好累。。京东在大兴区亦庄,好远,那里比较偏僻,不过好处就是附近能租到房,生活成本比较低。
一面上来上来就是问项目,我还是说了我的公众号估值系统。我觉得是难度最大的。又是一通讲,确实感觉每天重复同样的话心有点累。
问nginx的模块熟悉吗,用到了哪些,能说出几个名字吗?
项目讲完就问了其他一些基础
最后让我等一下,准备二面
#### 3. 现场二面
二面来的是个架构师,定级主要是由他来做吧。刚开始也是问项目。但是他不愿意听一些偏业务的东西。直接让你说难点在哪里,高并发如何体现这种要结果的东西。好吧,我简单点说。就说了些难点。
接着问http的问题,为什么是无状态的,状态码,session,cookie,cookie大小限制是多少。三次握手,四次挥手,让我在纸上画出来解释。每次传递的包的名字是什么。
再问多线程,实现方式由几种,给我出了一个题,大概意思就是说a里面有bcd三个方法,分别调用时间是40ms,20ms,40ms,c依赖b的执行结果。让我如何优化让调用时间缩短。。我说了多线程方式,回调机制,还让我写代码。。这个答了一阵子,感觉答的一般吧,我也不知道正确答案是什么。
问到redis了,说你们用过里面那些东西,我就说用存储比较多,list,map这两种方式最多。还有其他的吗,他明显不满意。我就说了redis的分布式锁。让我解释,我解释的时候发现我也没有完全理解这个分布式锁是如何实现的,只说了个大概,让我列出用到的函数,我去。。忘记了,没答上来,感觉很糟糕。。接着问nginx,用了哪些,我说反向代理,还有吗。。没有了。。又是不满意。。我就说可以屏蔽ip,限制接口调用次数,他说那就是限流咯,那你知道函数名字叫什么吗,实际用过吗。。没有啊,哎好奔溃。我就说查查文档不就知道了。在nginx.conf里面配置。多模块知道吗?还真不了解。。被问住了,只能老老实实的说不知道。
问jvm内存区,让我画出内存区分布,我画出来一个个解释。由这个引申到垃圾回收,我又解释了四种垃圾回收算法,如何判断对象要被回收,我说引用计数器(其实是根搜索算法,我说错了),好,有什么缺点吗?我说垃圾对象间引用会产生内存泄漏,那你觉得jvm里用了吗,好吧。。没用。说了其他几种,说到复制算法,他问了这是哪个区用的,为什么要分代?full gc发生的时间。。一系列问题。这部分答的还行。
再问内存泄漏,让我写个内存泄漏的例子。。妈蛋,一时没写上来。说明我还是太菜了。
接下来他给我写了类似这么一道题:
```
String s1 = "abc";
String s2 = "ab";
String s3 = "c";
String s4 = s2 + s3;
String st0 = "helloworld";
String st1 = "helloworld";
String st2 = "hello" + "word";
System.out.println(st0 == st2);
System.out.println(s1 == (s2 + s3));
System.out.println(s1 == s4);
```
打印出是false还是true。这个答的不好,我先试试。基础还是有问题。哎。。这个问题欢迎讨论哦。答案都是false
设计模式了问了,我就说了代理模式,单例模式,责任链模式等等。
线程池的原理,这个在《Java并发编程的艺术》中有深入讲解,我答得不错。几个关键点,initPoolSize,corePoolSize,maxPoolSize, 队列。都说上来,再一个他的创建线程的规则是怎么样的说上来就没问题。
再问我简历上写的2pc,3pc,选举,我慢慢开始讲,他觉得我会,就不让我说了,可能主要是试试简历内容是否真实,写上去的东西有没有不懂的。
最后也过了
#### 4. 现场3面
接下来就是研发经理面了。之前打电话联系过。比较熟悉。他说通过之前的面试大概了解了。就是基础比较好,知识面也很广,毕业一年的话这个水平算很不错了。但是你广度上去了,必须深度就不行了,有些东西你学习的不够深入,这方面需要注意下。这点觉得说的很对,深度需要场景去实践,只是看书能有多深,哎,继续努力。他接着说,总体上来说还是不错的,那我就聊一下我看重的一些东西吧。
先了解项目,我还是说的是公众号估值的项目。说了http header伪造的东西。然后给我实际场景让我设计如何实现,比如京东要搞一场促销,要发出1000份优惠券,优惠力度比较大,每张价值500元。并发量很大。你如何设计,记住要保证两点,每个用户只能领到一次,并且阻止恶意流量。让我画出详细的流程。我想到的核心就是先生成1000份优惠券号,然后放到不同的缓存中,这样防止从一个redis中读,并发降低。更多细节不说了,设计的不好吧。达不到要求。后来在他的提示下,想出ngixn里做限流,但是这样的话会影响正常流量,比如京东里面,出口的公网ip就那么几个,如果有人恶意攻击,其他用户是正常访问,那么你把公网ip都封了。。影响其他用户了。。我确实没经验,不知道应该怎么处理,他也没告诉我该怎么做。这些都偏实际工作场景,感觉对实践要求比较高吧。还有问题就是我的思路是先去查用户有没有领过,没领过的话再去抢优惠券。他说这样不合理,我现在恶意攻击,比如同时发出1000个请求,那么一查询,发现都没有领过,流量到跑到抢占优惠券那里去了。这么高的并发完全把系统资源占完了,正常流量都进不来了。哎,这已经超出我的能力范围了,没做过这么高并发、对安全性要求这么高的系统。没办法了。
没想到还是抓住redis问,抓住nginx问。我只说了我知道的那些,回答不是和好,因为很多东西也没有用过。接下来恶补一下。
到中午时间了。面试官带我去京东食堂吃饭,吃完带我去喝了一些饮料。一路有说有笑,感觉和这位面试官很能谈得来,他也是广州大学城毕业的,让我猜是哪个学习毕业的,一路比较有趣。
吃完饭继续聊。聊会技术之后就说公司的情况,这个项目组做什么的,为什么招人。主要向我介绍情况。我也问了一些问题。这时候就比较轻松。
#### 5. 最后一面
这应该是三面研发经理的上级了,也算是大boss了。问我一些基本情况。接着问,你觉得你的优点是什么,缺点是什么,对工作影响比较大的缺点?我说了保守,缺乏创新,时间分配不太合理,不太善于拒绝别人。。他听了很不满意。说这能对工作产生很大影响吗,继续说个大的,我觉得这也可大可小啊,也可以产生很大影响啊。说了半天还是没有一个让满意的。哎,我觉得这装逼有点过了,问这么空洞的问题,适可而止吧,难道你还要我说我好吃懒做,好逸恶劳,活越少越好,钱越多越好。。这样会让我过吗?我觉得纯粹就是刁难人。我心想罢了,面试过不了,跟面试官不在一个频道上,聊不到一起。后来让我问他问题,我就问了京东的自营模式的优缺点,为什么没盈利等等问题。不过还好,他耐心给我解释了。最后他问我,那假如你过了,你觉得你最少呆几年?我说了3-4年。。感觉是不是还有希望。。。就这样和boss聊完了。
面完之后研发经理又叫我聊了一下。问我和他上级聊得怎么样,我心里好苦,我知道聊的很差,不过我没说,我大概说就问了下性格的优缺点,没啥特别的。感觉他对我比较看好,说我觉得你的培养潜力是不错的,我看好你,我这个项目组是京东最核心的项目组了,你来了之后提高会很多的。。balala说了很多。这时候心里还好受了一点。挺感激他的。
再回去的地铁上,接到了研发经理打来的电话,说面试通过了,接下来会走流程,跟hr沟通薪资。大概就是这样面试通过了
听了之后也没有多少激动,感激跟大boss聊的不好,而且薪资不知道多少,感觉比较低。所以没啥值得激动的。等后面的沟通吧。
面试就像找对象,看对眼了一切都好说,确实有这种体会。
继续努力提高自己吧,还有很多不足的地方。加油加油!
又一篇流水账记完了。哈哈