京东面试回顾(通过)

本贴最后更新于 2796 天前,其中的信息可能已经时移世易
昨天刚刚面完京东,乘着还记得一些细节,先写下了。

#### 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聊的不好,而且薪资不知道多少,感觉比较低。所以没啥值得激动的。等后面的沟通吧。

面试就像找对象,看对眼了一切都好说,确实有这种体会。

继续努力提高自己吧,还有很多不足的地方。加油加油!

又一篇流水账记完了。哈哈

  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    324 引用 • 1395 回帖 • 3 关注

相关帖子

优质回帖
  • myzhong2018 1 赞同

    java 的内存泄漏其实就是不要的对象却没被回收掉,就是还是可达的。。可以用数组封装个栈的例子。Vector 里面的 removeElementAt() 方法 elementData[elementCount] = null; /* to let gc do its work */ 没这句就是了,,

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 88250

    谢谢分享~

  • relyn

    面霸!

  • 714593351

    厉害,毕业一年多了解这么多。。。

  • sweat89

    本科毕业 1 年吗?厉害哦

  • 👍 很详细,真是人外有人,相比之下自惭形秽

  • someone

    嘿嘿,文笔不好,对你们帮助我就很开心了

  • someone

    一年哈,还是菜鸟,共同努力

  • someone

    也没有啦,很多地方都不深入,继续努力。谢谢看完[em00]

  • someone

    不客气~[em11]

  • xiaoC

    👍 👍 👍

  • missingbobo

    恭喜

  • zonghua

    s1 = “abc”,s2 = “ab”, s3=“c”,判断 s1 == s2 + s3

    true,都是内存池里找

    1 回复
  • zonghua

    不对。。。

    1 回复
  • eurry

    牛人啊,佩服楼主

  • yangyujiao

    我上个周也是面试了几家,想着整理一下呢,太懒,结果现在忘记差不多了。。。

    楼主,一年知道这么多,真心强悍。这样的如果京东都过不了,那不知道京东要什么人了。。。

    我一年半以前是被京东虐了另一次的。问的基本是高并发 分库分表的,我就是不知道,那也没办法。。。

    这次我面试,朋友介绍的 boss 直聘。我晚膳了一下简历,就有很多人联系了,其中就有京东的。。。但是我一想技术这么烂还是别去受虐了,而且亦庄呀,上班穿越北京城呀,还是算了吧。

    我面试有遇到就是技术轰炸的,也有聊天比较多的。通常技术轰炸的我都完蛋。。。 而聊项目,看思维方面的,基本都没有问题。

    有时间,我把面试题整理一下。

  • guobing
    作者

    @yangyujiao 哈哈,谢谢肯定。我也是乘着还记得,赶紧记下来,过几天就忘了

  • guobing
    作者

    @zonghua 应该是 false。

  • @yangyujiao 早上我也在 boss 直聘上看到京东的信息了,本来还有点信心膨胀,看到楼主的经历也幻灭了 😂

  • guobing
    作者

    @Zephyr 哈哈哈,别逗,去试试嘛,面试的事情谁也说不准。虽然通过了,但是听说给我的定级不高,薪资也好不到哪里去,所以我也没报多大希望。还在等 hr 的一锤定音。。加油!

  • CallFold

    mark 一下,赞啊~

  • yangyujiao

    @guobing 如果你就是工作才一年多,即使定级低,薪资不是很高,也建议去京东工作一段时间,成长应该是比较快的,对以后跳槽会很有帮助的。

  • junze

    恭喜楼主 去京东锻炼锻炼是很好的

  • guobing
    作者

    @yangyujiao 但是听说那边技术氛围一般,不知您怎么看待这个问题

  • guobing
    作者

    @junze 正在考虑中。。

  • yangyujiao

    @guobing 这个你可以咨询 @wylyeak ,他是京东的,有啥你就问他。

  • wizardforcel 1

    @zonghua 变量的加在 java 里是不优化的。C++ 开 O3 可能会优化。

  • sbz

    谢谢分享,感觉差距还是蛮大的!

  • guobing
    作者

    @sbz 你指我的差距还是你的差距:bowtie:

  • sbz

    @guobing 像我这种战斗力只有 5 的渣渣,只能膜拜大神😁

  • hefeng

    楼主非常认真,确实厉害啊

  • Eddie

    + 运算符里面的字符串是新建立的..........像上面的 "hello" + "word",s2 + s3

    1 回复
  • zonghua

    但是不用变量声明,直接用 "ab"+"c" 为 true

    1 回复
  • xixi

    厉害,佩服~

  • abners

    宝宝心里苦😃

    1 回复
  • guobing
    作者

    为何苦,哈哈

  • jidilangzi603

    工作 1 年算比较不错了!

  • abners

    1472700728879

    看到你这句话,瞬间想到了宝宝心里苦

  • Darkness1m

    是 false....运行一下就知道了

  • tmedivh

    👍 面霸

  • darkfox

    工作 1 年真的算不錯了,回頭有時間 JD 細聊 ,哈哈

  • zjhch123

    st0 == st2 为什么是 false ?

    1 回复
  • zjhch123

    哎哟= = 我眼瞎……不好意思…

  • zjhch123

    内存泄露的例子,可不可以举数据库连接,开很多个 Connection 然后不关闭这样的例子?

  • jiangzezhou

    谢谢分享,我毕业一年的时候广度跟题主差很多。

  • tmedivh

    阿斯顿

  • zuokeli

    你面的应该是京东商城的核心小组 可以给你带来质的飞跃

  • myzhong2018 1 赞同

    java 的内存泄漏其实就是不要的对象却没被回收掉,就是还是可达的。。可以用数组封装个栈的例子。Vector 里面的 removeElementAt() 方法 elementData[elementCount] = null; /* to let gc do its work */ 没这句就是了,,

  • December

    面霸

请输入回帖内容 ...
guobing
会当凌绝顶,一览众山小

推荐标签 标签

  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    103 引用 • 294 回帖 • 3 关注
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 346 关注
  • GraphQL

    GraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。

    4 引用 • 3 回帖 • 20 关注
  • Lute

    Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。

    25 引用 • 191 回帖 • 19 关注
  • Jenkins

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    51 引用 • 37 回帖
  • 脑图

    脑图又叫思维导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。

    21 引用 • 58 回帖
  • frp

    frp 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP、UDP、 HTTP 和 HTTPS 协议。

    15 引用 • 7 回帖 • 9 关注
  • SQLite

    SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。

    4 引用 • 7 回帖
  • 安装

    你若安好,便是晴天。

    128 引用 • 1184 回帖 • 1 关注
  • 强迫症

    强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。

    15 引用 • 161 回帖 • 1 关注
  • 一些有用的避坑指南。

    69 引用 • 93 回帖
  • Chrome

    Chrome 又称 Google 浏览器,是一个由谷歌公司开发的网页浏览器。该浏览器是基于其他开源软件所编写,包括 WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。

    60 引用 • 287 回帖 • 2 关注
  • Rust

    Rust 是一门赋予每个人构建可靠且高效软件能力的语言。Rust 由 Mozilla 开发,最早发布于 2014 年 9 月。

    57 引用 • 22 回帖
  • API

    应用程序编程接口(Application Programming Interface)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

    76 引用 • 421 回帖 • 1 关注
  • SVN

    SVN 是 Subversion 的简称,是一个开放源代码的版本控制系统,相较于 RCS、CVS,它采用了分支管理系统,它的设计目标就是取代 CVS。

    29 引用 • 98 回帖 • 693 关注
  • 百度

    百度(Nasdaq:BIDU)是全球最大的中文搜索引擎、最大的中文网站。2000 年 1 月由李彦宏创立于北京中关村,致力于向人们提供“简单,可依赖”的信息获取方式。“百度”二字源于中国宋朝词人辛弃疾的《青玉案·元夕》词句“众里寻他千百度”,象征着百度对中文信息检索技术的执著追求。

    63 引用 • 785 回帖 • 251 关注
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 427 关注
  • GAE

    Google App Engine(GAE)是 Google 管理的数据中心中用于 WEB 应用程序的开发和托管的平台。2008 年 4 月 发布第一个测试版本。目前支持 Python、Java 和 Go 开发部署。全球已有数十万的开发者在其上开发了众多的应用。

    14 引用 • 42 回帖 • 683 关注
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 370 关注
  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    228 引用 • 1450 回帖
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖 • 4 关注
  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    96 引用 • 330 回帖
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3167 引用 • 8207 回帖
  • 创业

    你比 99% 的人都优秀么?

    82 引用 • 1398 回帖 • 1 关注
  • Telegram

    Telegram 是一个非盈利性、基于云端的即时消息服务。它提供了支持各大操作系统平台的开源的客户端,也提供了很多强大的 APIs 给开发者创建自己的客户端和机器人。

    5 引用 • 35 回帖
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    40 引用 • 40 回帖
  • RabbitMQ

    RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

    49 引用 • 60 回帖 • 392 关注