京东面试回顾(通过)

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

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

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

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

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

  • 面试

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

    325 引用 • 1395 回帖 • 1 关注

相关帖子

优质回帖
  • myzhong2018 1 赞同

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

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • guobing
    作者

    @junze 正在考虑中。。

  • 其他回帖
  • guobing
    作者

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

  • fujunsfzh

    String st0 = "helloworld"; String st2 = "hello" + "word";
    结果为 false 的原因,仅仅是少了一个‘l’字符 orn.

  • yangyujiao

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

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

推荐标签 标签

  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1063 引用 • 3454 回帖 • 189 关注
  • 七牛云

    七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化 PaaS 服务。围绕富媒体场景,七牛先后推出了对象存储,融合 CDN 加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

    27 引用 • 225 回帖 • 163 关注
  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    181 引用 • 400 回帖
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    123 引用 • 74 回帖 • 2 关注
  • MySQL

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

    692 引用 • 535 回帖
  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    85 引用 • 165 回帖 • 2 关注
  • Bootstrap

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

    18 引用 • 33 回帖 • 667 关注
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    23014 引用 • 92572 回帖
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 4 关注
  • Telegram

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

    5 引用 • 35 回帖
  • Ruby

    Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。

    7 引用 • 31 回帖 • 216 关注
  • Facebook

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

    4 引用 • 15 回帖 • 440 关注
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    492 引用 • 926 回帖
  • MongoDB

    MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

    90 引用 • 59 回帖 • 1 关注
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    41 引用 • 130 回帖 • 253 关注
  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 724 关注
  • JSON

    JSON (JavaScript Object Notation)是一种轻量级的数据交换格式。易于人类阅读和编写。同时也易于机器解析和生成。

    52 引用 • 190 回帖 • 1 关注
  • Vue.js

    Vue.js(读音 /vju ː/,类似于 view)是一个构建数据驱动的 Web 界面库。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

    265 引用 • 666 回帖 • 1 关注
  • 尊园地产

    昆明尊园房地产经纪有限公司,即:Kunming Zunyuan Property Agency Company Limited(简称“尊园地产”)于 2007 年 6 月开始筹备,2007 年 8 月 18 日正式成立,注册资本 200 万元,公司性质为股份经纪有限公司,主营业务为:代租、代售、代办产权过户、办理银行按揭、担保、抵押、评估等。

    1 引用 • 22 回帖 • 772 关注
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 538 关注
  • Solidity

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

    3 引用 • 18 回帖 • 401 关注
  • DevOps

    DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

    51 引用 • 25 回帖
  • 反馈

    Communication channel for makers and users.

    123 引用 • 913 回帖 • 250 关注
  • PostgreSQL

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

    22 引用 • 22 回帖
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    93 引用 • 113 回帖
  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 584 关注