java面试题(杨晓峰)---以面试题为切入点,有效提升你的java内功

时间:2024-01-18 14:21:32

java是一门历史悠久的编程语言,可以毫无争议的说,java是最主流的编程语言之一.全球有1200万以上的java程序猿以及海量的设备,还有无所不能的java生态圈.

我所知道的诸如阿里,京东,百度,腾讯,美团,去哪儿等互联网公司,基本都是以java为首要编程语言的.即使在最新的云计算领域,java仍然是AWS,google app engine等平台上,使用最多的编程语言,甚至在微软的Azure云上,java也已微弱劣势排在前三,所以,在这些大公司的面试中,基本都会以java为切入点,考评一个面试者的基本能力.

应聘初级,中级java工程师,通常只要求扎实的java和计算机科学基础,掌握主流开源框架的使用,java高级工程师或者技术专家,则往往全面考察java io/nio,并发,虚拟机等,不仅仅是了解,更要求对底层源代码层面的掌握,并对分布式,安全,性能等领域能力有进一步的要求.

我在oracle已经工作了近七年,负责过北京java核心类库,国际化,分发服务等技术团队的组建,面试过从初级到非常资深的java开发工程师.由于java组工作任务的特点,我非常重视面试者的计算机科学基础和编程语言的理解深度,我甚至不要求面试者非要精通java,如果对c/c++等其他语言能过掌握的非常系统和深入,也符合需求的.

工作多年以及在面试中,我经常能体会到,有些面试者确实是努力工作,但坦白说表现出的能力水平不足以通过面试,通常有两方面的原因;

"知其然不知其所以然"做了多年技术,开发了很多业务应用,但似乎并未思考过种种技术背后的逻辑,坦白说,我并不放心吧具有一定深度的任务交给他.更重要的是我并不确定他未来的技术能力成长潜力有多大.团队所从事的是公司核心产品,工作于基础技术领域,我们不需要那些"差不多"或"还行"的代码.而是需要达到一定水平的高质量设计与实现.我相信很多其他团队的要求会更多,更高.

知识碎片化,不成系统.在面试中,面试者似乎无法完整,清晰的描述自己所开发的系统,或者使用的相关技术.比如,有的面试者,有一些并发编程经验,但对基本的并发类库掌握却并不扎实,似乎觉得在用的时候进行"面向搜索引擎的编程"就足够了.这种情况下,我没有信心这个面试者有高效解决复杂问题,设计复杂系统的能力.

前人已经掉过的坑,后来的同学就别前赴后继了.

期初极客世界邀请我写<java核心技术36讲>专栏,我心里怀疑其形式和必要性.经典的书籍一大堆呀.网上也有所谓的面试宝典,为什么换需要我指手画脚.

很难甄别出各种技术的核心价值与要点.技术书籍如此庞杂,对于经验有限的同学,找到高效归纳自己知识体系的方法并不容易.

各种宝典更专注于问题,解答大多点到为止,甚至答案准确性都值得商榷,缺乏系统性的分析和举一反三的讲解.

我在极客时间推出这个专栏,就是为了让更多没有经验或者经验有限的开发者,在准备面试时;

少走弯路,利用有限的精力,能够更高效的准备和学习.

提纲挈领,在知识点讲解的同时,为你梳理一个相对完整的java开发技术能力图谱,将基础夯实.

java面试题千奇百怪,有的面试官甚至以黑魔法一样的态度,刨根问底jvm底层,似乎不深挖jvm源代码,不谈谈计算机指令,就是不爱学习,这是仁者见仁智者见智的事情,我根据自己的经验精选五大模块共36题

五大模块为

java基础;我会围绕java语言基本特性和机制,有点带面,让你牢固构建java基础

java进阶,将围绕并发编程,java虚拟机等领域,助你攻坚大厂java面试的核心阵地

java应用开发拓展;从数据库编程,主流开源框架,分布式开发,帮你掌握java开发的十八般兵器.

java安全基础;让你理解常见的应用安全问题和处理方法,掌握如何写出符合大厂规范的安全代码.

java性能基础;你将掌握相关工具,方法论与基础实践.

世易时移,很多大家耳熟能详的问题其实在现代java中已经发生根本性的改变但扎实的技术功底还是必要的.助你面试成功