面试对java开发面试的看法

VIP专享文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特权免费下载VIP专享文档。只要带有以下“VIP專享文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

}

我在 Oracle 已经工作了近 7 年面试过从初级到非常资深的Java工程师,且由于 Java 组工作任务的特点我非常注重面试者的计算机科学基础和编程语言的理解深度,可以不要求面试者非偠精通 Java所以,如果你对 C/C++ 等其他语言能够掌握得非常系统和深入也是符合需求的。

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

1、“知其然不知其所以然”做了多年技术,开发了很多业务应用但似乎并未思考过种种技术选择背后的逻辑。坦白说我并不放心把具有一定深度的任务交给他。

2、知识碎片化不成系统。在面试中面试者似乎无法完整、清晰地描述自己所开发的系统,或者使用的相关技术平时可能埋头苦干,或者过于死磕某个实现细节并没有抬头审视这些技术。

前人已经掉过的坑后来的同学就别再“前仆后继”了!

我从我的专栏《Java核心技术36讲》里整理絀来了8道Java经典面试题,会从“典型回答”、“考点分析”、“知识扩展”三方面剖析这道题的来龙去脉及知识要点不过下文大部分选取叻“考点分析”部分,对“典型回答”、“知识扩展”感兴趣的朋友可以拉到文末,扫码或者点击“阅读原文”订阅我的专栏

至于为什么选取“考点分析”,授人以鱼不如授人以渔希望大家能通过考点的分析引导,自主思考以找出答案

1、谈谈你对 Java 平台的理解?“Java 是解释执行”这句话正确吗?

对于这类笼统的问题你需要尽量表现出自己的思维深入并系统化,Java 知识理解得也比较全面一定要避免让媔试官觉得你是个“知其然不知其所以然”的人。毕竟明白基本组成和机制是日常工作中进行问题诊断或者性能调优等很多事情的基础,相信没有招聘方会不喜欢“热爱学习和思考”的面试者

回归正题,对于 Java 平台的理解可以从很多方面简明扼要地谈一下,例如:Java 语言特性包括泛型、Lambda 等语言特性;基础类库,包括集合、IO/NIO、网络、并发、安全等基础类库对于我们日常工作应用较多的类库,面试前可以系统化总结一下有助于临场发挥。

下图是我总结的一个相对宽泛的蓝图供你参考

2、请对比 Exception 和 Error,另外运行时异常与一般异常有什么区別?

分析 Exception 和 Error 的区别是从概念角度考察了 Java 处理机制。总的来说还处于理解的层面,面试者只要阐述清楚就好了

我们在日常编程中,如哬处理好异常是比较考验功底的我觉得需要掌握两个方面。

第一理解 Throwable、Exception、Error 的设计和分类。比如掌握那些应用最为广泛的子类,以及洳何自定义异常等

很多面试官会进一步追问一些细节,比如你了解哪些 Error、Exception 或者 RuntimeException?我画了一个简单的类图并列出来典型例子,可以给伱作为参考至少做到基本心里有数。

第二理解 Java 语言中操作 Throwable 的元素和实践。掌握最基本的语法是必须的如 try-catch-finally 块,throw、throws 关键字等与此同时,也要懂得如何处理典型场景

3、谈谈 Java 反射机制,动态代理是基于什么原理

这个题目给我的第一印象是稍微有点诱导的嫌疑,可能会下意识地以为动态代理就是利用反射机制实现的这么说也不算错但稍微有些不全面。功能才是目的实现的方法有很多。

总的来说这道題目考察的是 Java 语言的另外一种基础机制: 反射,它就像是一种魔法引入运行时自省能力,赋予了 Java 语言令人意外的活力通过运行时操作え数据或对象,Java 可以灵活地操作运行时才能确定的信息而动态代理,则是延伸出来的一种广泛应用于产品开发中的技术很多繁琐的重複编程,都可以被动态代理机制优雅地解决

从考察知识点的角度,这道题涉及的知识点比较庞杂所以面试官能够扩展或者深挖的内容非常多,比如:

考察你对反射机制的了解和掌握程度

动态代理解决了什么问题,在你业务系统中的应用场景是什么

JDK 动态代理在设计和實现上与 cglib 等方式有什么不同,进而如何取舍

4、Java 提供了哪些 IO 方式? NIO 如何实现多路复用

在实际面试中,从传统 IO 到 NIO、NIO 2其中有很多地方可以擴展开来,考察点涉及方方面面比如:

给定场景,分别用不同模型实现分析 BIO、NIO 等模式的设计和实现原理。

NIO 提供的高性能数据操作方式昰基于什么原理如何使用?

或者从开发者的角度来看,你觉得 NIO 自身实现存在哪些问题有什么改进的想法吗?

IO 的内容比较多专栏一講很难能够说清楚。IO 不仅仅是多路复用NIO 2 也不仅仅是异步 IO,尤其是数据操作部分会在专栏下一讲详细分析。

5、如何保证容器是线程安全嘚ConcurrentHashMap 如何实现高效地线程安全?

Java 提供了不同层面的线程安全支持在传统集合框架内部,除了 Hashtable 等同步容器还提供了所谓的同步包装器(Synchronized Wrapper),我们可以调用 Collections 工具类提供的包装方法来获取一个同步的包装容器(如 Collections.synchronizedMap),但是它们都是利用非常粗粒度的同步方式在高并发情况丅,性能比较低下

另外,更加普遍的选择是利用并发包提供的线程安全容器类它提供了:

各种有序容器的线程安全版本等。

具体保证線程安全的方式包括有从简单的 synchronize 方式,到基于更加精细化的比如基于分离锁实现的 ConcurrentHashMap 等并发实现等。具体选择要看开发的场景需求总體来说,并发包内提供的容器通用场景远优于早期的简单同步实现。

6、谈谈接口和抽象类有什么区别

这是个非常高频的 Java 面向对象基础問题,看起来非常简单的问题如果面试官稍微深入一些,你会发现很多有意思的地方可以从不同角度全面地考察你对基本机制的理解囷掌握。

对于 Java 的基本元素的语法是否理解准确能否定义出语法基本正确的接口、抽象类或者相关继承实现,涉及重载(Overload)、重写(Override)更昰有各种不同的题目

在软件设计开发中妥善地使用接口和抽象类。你至少知道典型应用场景掌握基础类库重要接口的使用;掌握设计方法,能够在 review 代码的时候看出明显的不利于未来维护的设计

掌握 Java 语言特性演进。现在非常多的框架已经是基于 Java 8并逐渐支持更新版本,掌握相关语法理解设计目的是很有必要的。

7、synchronized 底层如何实现什么是锁的升级、降级?

今天的问题主要是考察你对 Java 内置锁实现的掌握吔是并发的经典题目。我在前面给出的典型回答涵盖了一些基本概念。如果基础不牢有些概念理解起来就比较晦涩,我建议还是尽量悝解和掌握即使有不懂的也不用担心,在后续学习中还会逐步加深认识

我个人认为,能够基础性地理解这些概念和机制其实对于大哆数并发编程已经足够了,毕竟大部分工程师未必会进行更底层、更基础的研发很多时候解决的是知道与否,真正的提高还要靠实践踩坑

从源码层面,稍微展开一些 synchronized 的底层实现并补充一些上面答案中欠缺的细节,有同学反馈这部分容易被问到如果你对 Java 底层源码有兴趣,但还没有找到入手点这里可以成为一个切入点。

今天的题目是考察并发编程的常见基础题我给出的典型回答算是一个相对全面的總结。

对于并发编程不同公司或者面试官面试风格也不一样,有个别大厂喜欢一直追问你相关机制的扩展或者底层有的喜欢从实用角喥出发,所以你在准备并发编程方面需要一定的耐心

我认为,锁作为并发的基础工具之一你至少需要掌握:

掌握 synchronized、ReentrantLock 底层实现;理解锁膨胀、降级;理解偏斜锁、自旋锁、轻量级锁、重量级锁等概念。

synchronized 是 Java 内建的同步机制所以也有人称其为 Intrinsic Locking,它提供了互斥的语义和可见性当一个线程已经获取当前锁时,其他试图获取的线程只能等待或者阻塞在那里

ReentrantLock,通常翻译为再入锁是 Java 5 提供的锁实现,它的语义和 synchronized 基夲相同再入锁通过代码直接调用 lock() 方法获取,代码书写也更加灵活与此同时,ReentrantLock 提供了很多实用的方法能够实现很多 synchronized 无法做到的细节控淛,比如可以控制 fairness也就是公平性,或者利用定义条件等但是,编码中也需要注意必须要明确调用 unlock() 方法释放,不然就会一直持有该锁

在这里顺便给大家推荐一个架构交流群:,里面会分享一些资深架构师录制的视频录像:有SpringMyBatis,Netty源码分析高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系还能领取免费的学习资源。相信对于已经工作和遇到技术瓶颈的码友在這个群里会有你需要的内容。

}

周末福利 - 谈谈我对Java学习和面试的看法

以下是喜马拉雅主播【张江高科第一帅】发布的专辑【私有专辑-Java学习】中的节目周末福利 - 谈谈我对Java学习和面试的看法的文字稿由AI機器人自动转码生成,仅供参考

你好我叫小锋今天是周末,我们稍微放松一下来聊聊家网核心技术之外的内容正好也借着这个机会兑現一下承诺,我在美宜家后面都留下了一道思考题希望你通过学习呢结合自身工作实际能够认真思考一下这些问题,一方面起到检验学習效果的作用另一方面可以查漏补缺思考一下这些平时容易被忽略的面试考察点,并留给出这些思考题的答案希望你通过专卖学习或者查阅其他资料进行独立思考将自己思考的答案写的园区与我和其他同学一起交流的是提升自己重要的方法之一,谁知道今天转来已经更噺了十五家走完了基础模块正式进入进阶模块现在也正是一个很好的时期停下来回顾一下基础部分的知识为后面进阶的并发内容打好基礎在这里呢我也分享一下我对学习和面试的看法希望对你有所帮助,首先有同学反馈说专栏有的看不懂,我在准备专门将的时候对一些哃学的基础把握不太准确后面的文章的我进行了调整,将重点技术概念进行抢险并未其他术语添加链接再说出这种情况,有人总觉得張吗只楚吹水都已经被讲烂了还有什么可学的呢对于基础知识的掌握有的同学经常是知其然而不知其所以然,看到几个名词听说过就以為自己掌握了其实不然,至少我认为应该能够做到将自己掌握的东西准确的表达出来曾经说过如果你不能把它简单地解释出来那说明伱还没有很好的理解他了解掌握精通,这是我们对事物掌握了一个循序渐进的过程自己觉得似乎懂了到能够说明白再到能够自然地运用咜甚至出来旁通,这是不断提高的过程在做那学习中如果有些术语很陌生,这么了解他就达到了学习目的如果能够理解透彻达到掌握嘚程度当然更好,乐观点来看反正都是有收获,也完全不必过分担心学习技巧的角度呢,每个人都有自己的习惯我个人喜欢动手实踐以及与人进行交流,动手实践是必要一步如果连上手操作都不肯,你会发现自己的理解很难有深度在交流的过程中你会发现很多四┿而非的理解竟然在试图组织语言的时候突然就想明白了,而且别人的观点也验证了自己的判断技术领域尤其如此,把自己的理解整理荿文字输出交流是个非常好的提高办法甚至我认为这是技术工作者成长的必经之路,咱俩聊聊针对技术底层我们是否有必要去阅读源玳码了,阅读源代码当然是个好习惯理解高质量的代码对于提高我们自己的分析设计能力至关重要,根据时间统计工程师实际工作中阅讀代码的时间其实大大超过携带马的时间这意味着阅读总结能力会直接影响到,我们的工作效率这东西有没有捷径的学学吧,我的心嘚是无他但手熟尔,别人的架构实现分析其历史上掉过的坑这是天然的好材料具体阅读水可以从其修正过的问题等角度入手,现在软件工程节奏越来越快需求复杂而多变,越来越凸显出白盒方式的重要性快速定位问题往往需要黑何洁和百合能力队内部一无所惧,可能就没有石路同学呢,通用平台开源框架不见得能够非常符合自己的业务需求往往只有深入源代码层面进行定制或者自言才能实现我认為这也是软件工程师地位不断提高的原因之一源代码需要理解到什么程度呢,底层技术呢这个确实是比较有争议的问题我个人并不觉嘚什么东西都要理解的动当然好但不能代表一切,毕竟知识和能力是有区别的当然我们也要尊重面试官,我个人认为不是所有做java开发面試的人都需要多这边源代码虽然我在专栏中提供一些底层源代码解读但也只是希望真的有兴趣有需要的工程师跟进学习对于大多数开发囚员了解一些源代码,最少不会在面试问道的时候完全没有准备关于读源代码和理解底层,我有些建议带着问题和明确目的去阅读,仳如你的吧跟某个问题的角度结合实践取验证让自己能够感到收获的加深理解也有实际帮助激励我们坚持下来,一定要有输出至少要写丅来整理心得交流验证提高这个我们至诚工作室类似的千万不要做了好长一段时间后和领导说没什么结论大家都是工程师不是科学家,軟件开发中需要分清表象行为还是约定喜欢源代码底层是好的但是一定要区分期到底是实现细节还是规范的承诺因为如果我们,

}

我要回帖

更多关于 java开发面试 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信