前期准备:

确定好自己目标后,需要针对目标制定攻坚计划,确保顺利拿下城池。


看一眼面试京东java开发工程师要求

职位描述:

工作职责:

1、独立完成中大型项目的系统分析、设计,并能够完成核心代码的编写,确保技术方案能够按计划要求,高质量的完成;

2、具有一定的技术架构思维,确保设计的技术方案、开发的代码有较高性能、质量保障、扩展性、前瞻性;

3、对技术有较强的钻研及学习精神,能够深入了解开源技术、现有系统技术等相关技术原理,出现问题时能够通过较强的技术手段较好的解决问题;

4、针对新人、普通开发人员进行有效辅导,帮助其快速成长。


任职要求:

1、大型互联网公司3年以上核心架构经验,熟悉互联网快速迭代开发的模式,能化繁为简;

2、常用技术框架如Spring,Ibatis,Netty等有源码级研究者优先;

3、熟悉分布式系统的设计和应用,熟悉分布式、缓存、消息等机制;能对分布式常用技术进行合理应用,解决问题;

4、精通JVM底层原理,熟悉Tomcat运行机制,有源码经验者优先,性能调优掌握多线程及高性能的设计与编码及性能调优;有高并发应用开发经验;

5、有大数据(hadoop,hive,sqoop,hbase,spark,solr)相关经验者优先;

6、学习能力强,适应能力好;具备耐心、细心的品质;

7、对互联网应用开发的最新潮流有关注,喜欢去看及尝试最新的技术,追求编写优雅的代码,从技术趋势和思路上能影响技术团队

8、有财务、税务、财资等相关业务系统开发经验者优先


综上:需要有中大型项目经验,三年以上的核心架构经验,最主要的是需要精通Jvm底层原理等Java底层原理源码的理解与使用,恩,精通 精通 是精通


计划:

Java底层基础

准备跳槽时已经从别人社招面经知道了每轮技术面都会问及算法,JVM等等。这一块练习的比较少,像JVM这种就更是接触的很少,因此系统复习的时候这块花费的时间表比较多,所以每天的LeetCode是必不可少的,想在短短几周内刷完基本是不可能的,因此我主要按照类型去刷,还有就是需要一些视频辅助,讲Jvm的视频在各大视频网站不在少数,但真的能讲的让人通俗易懂的没发现几个,我也是找了好久才发现一位UP主发视频,讲的很不错(具体是谁就不多说了),听了两堂课一下子感觉全回来了,感觉在对JVM的理解上得到升华,


组件、容器、数据库

复习的都是一些比较基础常见的组件和后端架构设计,像Mysql、Oracle、redis、docker、zookeeper、Tomcat等等。数据库的话主要复习分库分表、sql优化、读写分离、锁另外就是Redis的一些使用场景,微服务、分布式架构就准备CAP理论、BASE理论、限流、熔断、一致性问题等等


必选项:项目(重中之重)

.没有参加过开源项目,工作中的项目也平平凡凡,拿的出手的少之又少,所以说必须找亮点,扬长避短

比如我在项目中用过Quartz 、消息队列、用docker部署过项目熟悉使用docker,可以向面试官展示出自己具有一定的架构能力。

再比如你修改过一条sql从原来要跑30s到现在的10秒

然后就是可以说一些项目中比较复杂的模块,可以不用是你做的,但是一定得搞清楚模块的功能快并能可以熟练度讲出来


京东一面:

0.项目介绍

1. ArrayList,Vector,LinkedList 的存储性能和特性?

2.forward 和redirect 的区别?

3. Java 反射机制的作用

4. Servlet 创建过程及生命周期Servlet 在容器中运行时, 其实例的创建及销毁等是由容器进行控制。

5. 用 sql 语句分页(mysql/oracle)

6.J2EE J 是什么意思? 2 是什么意思 EE 是什么意思? Struts 的拦截器你是怎么做的,

是独立开发的,能够独立开发的到。然后问有哪几种拦截?

7. 简单介绍下 java ? Spring 的AOP,IOC 的讲述对 struts2 的了解, 1,2 的比较 xml的了解 J2ee 的webserviced 的协议?

8. 如何释放过度使用的 undo 表空间

9. 数据库里面游标,索引是怎么用的? 在 oracle 数据库中,用get 和load 方法这 2个方法来查没有的数据那么分别会反馈什么样的结果?

10. 写一段把本地文件 formfile 拷贝到本地文件tofile 的程序


二面:

1. 多线程、同步实现方法?

2. 适配器模式与桥梁模式的区别

3. 开发中都用到了哪些设计模式 ?用在什么场合?

4. 栈帧中的动态链接中存储的是什么?还有其他思路么?

5. 堆为什么要分成新生代、老年代?比例为什么是1:2?

6. This指针是何时赋值的?

7. 虚拟机栈需要GC么?为什么?

8. 本地方法栈一定存在么?如果不是何时存在?

9. Jvm是用C++实现的,C++生成的对象默认是在navite method,怎么放到Jvm堆上的

10. MySQL事务的四个隔离级别? 四个级别的区别,然后说了每个级别可能产生的问题


三面:

1. 问项目

2. 虚拟机栈、本地方法栈是同一个栈么?如果不是为什么要这么设计?

3. –Xss、-X:ThreadStackSize、-XX:VMThreadStackSIze的区别?

4. –XX:NewRatio=4是什么意思?新生代占堆内存的比例是多少?

5. JVM加载class 文件原理?

6. Tomcat 的class 加载的优先顺序?

7. J2EE访问速度慢,怎么样优化?

8. 线程共享区域随虚拟机的启动/关闭而创建/销毁?

9. JVM运行时内存?


总结:

其实大厂面试也没有什么不同,同样的题目只是问的比普通公司更加的深入,往往一个问题可以延伸到十几个问题,一层一层全是坑,但是有针对性的去复习还是能达到事半功倍的效果,想进大厂必须把底层学好而且还要学精能举一反三,这样才会让面试官刮目相看。