OFFER:京东2018校招物流研发岗
个人:211小硕
面试时间:2017年秋天
整体:三轮面试,前两轮为技术面试,最后为hr面试
面试时间较长,回答速度也较快,所有问题都进行了完整的回答。形式为电话面试,都是基础,难度一般,不要紧张,回答知识点即可。
内容主要包括jvm相关,网络知识(TCP/IP,DNS),JDK源码(HashMap, ArrayList, HashTable等)
这部分主要考的是知识点的串联能力,面试官提出一个问题时,要把该问题相关的知识点都罗列出来(在说之前可以询问面试官是否需要详细讲述该知识点)。
参考书籍:深入理解Java虚拟机-周志明 神书!神书!神书!建议多刷几遍,书中的所有知识点可以通过JAVA运行时区域和JAVA的内存模型与线程两个大模块罗列完全。
常考内容有:GC,JAVA线程实现方式,volatile底层原理,线程安全,锁与CAS等
回答:运行时数据区整体分为两类 线程私有和线程共享。
线程私有的包括:
程序计数器
虚拟机栈
线程共享的包括:
堆
方法区
大致思路: 要进行垃圾回收,首先要判断一个对象是否活着,这就引出了两种方法…
引用计数法和可达性分析法
gc roots 类型
引用类型
两次标记过程
垃圾回收算法
内存分配策略
触发垃圾回收
垃圾回收器
也会回收方法区
回答:要进行垃圾回收,首先要判断对象是否存活,引出了两个方法:
引用计数法
可达性分析法
在可达性分析过程中,对象引用类型会对对象的生命周期产生影响,JAVA中有这几种类型的引用:
一个对象真正不可用,要经历两次标记过程:
JAVA中的垃圾回收算法有:
触发GC又涉及到了内存分配规则: (对象主要分配在Eden,若启动了本地线程分配缓冲,将优先在TLAB上分配)
垃圾收集器:
Serial(串行收集器)
ParNew
Parallel Scavenge
SerialOld
Parallel Old
CMS
G1
GC自适应调节策略 Parallel Scavenge收集器有一个参数-XX:+UseAdaptiveSizePolicy。当这个参数打开之后,就不需要手工指定新生代的大小、Eden与Survivor区的比例、晋升老年代对象年龄等细节参数了,虚拟机会根据当前系统的运行情况收集性能监控信息,动态调整这些参数以提供最合适的停顿时间或者最大的吞吐量,这种调节方式称为GC自适应的调节策略(GC Ergonomics)。
(垃圾回收器部分重点讲CMS和G1)
最后提一下也会回收方法区:
上面的知识点在你多刷几遍书,脑中形成相应的知识网后能很全面的说出来。
网络知识在面试中非常重要,尤其是TCP,DNS,HTTP等知识点。
该部分我的参考书籍是:图解HTTP,图解TCP/IP(对于开发来说,这两本书在网络方面的讲解应该够用了),以及相关博客。
回答该类问题时,依然要从面试官提到的问题进行扩散,把相关的问题自己抛出来进行讲述(在抛出讲述时可以询问面试官是否需要进行详细的讲解)
对于该问题,可以直接关联TCP四次分手进行回答。若是当场面试,可以在纸上画出客户端和服务端的TCP状态序列
(图片来源:当时看的博客,但没能记住具体的博客地址)
然后自己可以抛出相关的问题进行回答,如:
为什么不采用两次握手,SYN半连接攻击,TIME_WAIT数量太多怎么办,为什么连接的时候是3次握手,关闭的时候是4次分手,为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能回到CLOSE状态等等问题(这些问题在网上都有讲解,这里就不赘述了)。
这部分主要在于自己平时的积累,可以跟着相关的博客看源码。常考的内容有String,集合框架,foreach(Iterator及fail-fast机制)等内容。
这里就不详细说了,大致思路是jdk7和jdk8的实现原理及区别(重点有实现的数据结构,存储单元从Entry到Node的转变,加载因子,什么时候扩容,jdk1.8扩容的具体实现方式等等),HashMap和HashTable的区别,HahsMap和HashSet的关系。要结合源码说。
重点是底层实现方式,扩容机制,以及LinkedList的底层实现方式;它们之间的区别。要结合源码说
面试时间不长,个别问题回答的有些底虚。主要考察的是知识面的广度和对技术的热爱程度,以及对做过项目的熟悉程度。还是那句话,坦诚地回答问题,不会就是不会,如果假装会但是被接下来地问题问倒的话,那就没戏了。
每个人的项目都不同,只列举几个问题
回答:用的是mybatis,sql语句中用#{},#{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,jdbc有个预编译的过程可以有效预防sql注入,尽量不用${},它是个拼接符,用来拼接sql字符串。
然后又问了aop的实现原理(jdk动态代理和cglib字节码增强,在回答时要说出底层源码)
答:分布式,实习时虽然自己做的是企业后台,并没有涉及到很多分布式的内容,但是会经常从同事那里了解一些分布式的技术感觉很有趣
答:进行反向代理和负载均衡的nginx,及实现高可用的keepalived+nginx;内存数据库redis及它的基本数据类型和持久化方式;用于做注册中心的zookeeper和服务治理的dubbo;防止用户重复登录的单点登录;分布式的文件存储系统fastdfs;页面静态化处理的freemarker;以及用于搜索的solr(这部分由于有些技术自己只是会用,不了解底层,所以说的吞吞吐吐,很没底气,其实没必要,大大方方说出来后再说明自己了解的程度即可)
答:spring源码不太了解,另外linux方面有些薄弱,正在补充相关知识。(可以加上自己目前正在看哪些书)
答:不太清楚,还没了解(内心状态:卧槽,jdk9什么时候出来的) (这个问题可以很好的了解到求职者对技术的热爱程度,平时可以多关注技术的发展方向,版本迭代。这方面可以通过关注一些优质的公众号:如Hollis)
答:可能是第一份实习工作的影响吧, 面试官:还有呢? 我:我也说不清楚,就是想去互联网公司(说完之后就想宰了自己)
hr面重要的也是真诚,还有就是表达好自己想去该公司及对该公司的了解
答:1个,但是已经拒了
答:因为它不是互联网公司
答:工资高是一方面,另外在互联网公司中一般可以更快接触到新的技术
答:因为京东是我关注很久的公司,从京东第一次做秋招视频直播就开始关注了。首先京东是一家互联网公司,其次京东近些年的发展有目共睹,而且京东正在向技术公司转型,相信自己可以学到很多东西。
答:压力大时喜欢通过吃东西来排解压力,所以又要减肥什么的很麻烦
答:喜欢熬夜
答:emmmm,哎呀,想不起来了 (其实,关于优点和缺点的问题应该好好总结一下,不然问的当时容易懵逼) 还有几个问题不太记得了,大概就是实习时自己意见和同事不一样时是怎么解决的。对于这种问题,最好举个实际的例子。
其实网上的大多数面经已经说的很清楚,一定要形成自己的知识树,如果仅仅想通过看面经来通过面试,会很难。自己平常一定要积累知识,把知识点分类进行记录,在面试过程中主动说出面试官所提问题的关联问题的解决方案能够加分,体现自己的知识串联能力。关于要积累哪些知识,Hollis在他的java成神之路已经写的很详细。
书就不详细写了,毕竟自己看的书不算多。
【公告】 版权声明
(全文完)