京东面试回顾(通过)

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

#### 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 回帖 • 1 关注

相关帖子

优质回帖
  • myzhong2018 1 赞同

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

欢迎来到这里!

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

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

    阿斯顿

  • 其他回帖
  • myzhong2018 1 赞同

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

  • guobing
    作者

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

  • abners

    1472700728879

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

  • 查看全部回帖
guobing
会当凌绝顶,一览众山小

推荐标签 标签

  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    116 引用 • 99 回帖 • 266 关注
  • Swagger

    Swagger 是一款非常流行的 API 开发工具,它遵循 OpenAPI Specification(这是一种通用的、和编程语言无关的 API 描述规范)。Swagger 贯穿整个 API 生命周期,如 API 的设计、编写文档、测试和部署。

    26 引用 • 35 回帖 • 12 关注
  • Angular

    AngularAngularJS 的新版本。

    26 引用 • 66 回帖 • 511 关注
  • PostgreSQL

    PostgreSQL 是一款功能强大的企业级数据库系统,在 BSD 开源许可证下发布。

    22 引用 • 22 回帖
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    198 引用 • 120 回帖 • 1 关注
  • FreeMarker

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

    23 引用 • 20 回帖 • 426 关注
  • CSS

    CSS(Cascading Style Sheet)“层叠样式表”是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。

    180 引用 • 447 回帖
  • RESTful

    一种软件架构设计风格而不是标准,提供了一组设计原则和约束条件,主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

    30 引用 • 114 回帖 • 1 关注
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 455 关注
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    164 引用 • 594 回帖
  • 锤子科技

    锤子科技(Smartisan)成立于 2012 年 5 月,是一家制造移动互联网终端设备的公司,公司的使命是用完美主义的工匠精神,打造用户体验一流的数码消费类产品(智能手机为主),改善人们的生活质量。

    4 引用 • 31 回帖 • 11 关注
  • Bootstrap

    Bootstrap 是 Twitter 推出的一个用于前端开发的开源工具包。它由 Twitter 的设计师 Mark Otto 和 Jacob Thornton 合作开发,是一个 CSS / HTML 框架。

    18 引用 • 33 回帖 • 684 关注
  • 新人

    让我们欢迎这对新人。哦,不好意思说错了,让我们欢迎这位新人!
    新手上路,请谨慎驾驶!

    51 引用 • 226 回帖 • 1 关注
  • 安装

    你若安好,便是晴天。

    128 引用 • 1184 回帖
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖 • 7 关注
  • 京东

    京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。

    14 引用 • 102 回帖 • 403 关注
  • AngularJS

    AngularJS 诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等。2.0 版本后已经改名为 Angular。

    12 引用 • 50 回帖 • 422 关注
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 349 关注
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    675 引用 • 535 回帖
  • 程序员

    程序员是从事程序开发、程序维护的专业人员。

    532 引用 • 3528 回帖
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖 • 1 关注
  • 资讯

    资讯是用户因为及时地获得它并利用它而能够在相对短的时间内给自己带来价值的信息,资讯有时效性和地域性。

    53 引用 • 85 回帖
  • Tomcat

    Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。

    162 引用 • 529 回帖 • 1 关注
  • 持续集成

    持续集成(Continuous Integration)是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

    14 引用 • 7 回帖 • 3 关注
  • Oracle

    Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。

    103 引用 • 126 回帖 • 448 关注
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖 • 2 关注
  • Kafka

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是现代系统中许多功能的基础。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    35 引用 • 35 回帖