如何准备java高级工程师/技术专家面试
如何准备java高级工程师/技术专家面试
- 心态
- 考点
- 案例
- 技巧
- 复盘
- 补充
一位拥有丰富面试经验的应届毕业生整理了个人面试经验分享
该面经主要面向IT行业中的中高级人才
欢迎广大求职者参考本文获取有价值的信息
如有业内大牛路过 请顺手点个关注或收藏(可选)
心态
面试的成功与否将深刻影响候选人在未来相当长的时间里事业发展的轨迹以及生活方式的状态。很多人在准备阶段投入了大量的时间和精力。然而,在考试环节中由于紧张和焦虑的心理状态,在考试环节中容易导致思路不清或无法正常发挥。尤其是遇到需要举一反三解决的问题时,大脑会出现暂时性的断层。因此必须保持良好的心态,在考试中秉持着学习的心态去应对各种挑战。
大多数应届毕业生普遍认为加入一线互联网公司是一项具有挑战性的工作目标,并选择完全放弃的可能性很大。然而实际上能够参与他们的面试过程将会带来全新的认识——因为知识点不再是简单直接地被提问的方式呈现出来而是通过看似简单的问题一步步深入到最基础的原理中去探讨这可能比长时间专注于编码半年所获得的经验更为丰富。经过反复这样的训练候选人会逐渐建立起自己的知识体系(内在联系和比较)而不是像散沙一样零散的知识点堆积起来
总之,只要由面试机会的可能,就不要放过。
考点
高频考点几乎无一例外都会出现在考试中。如果你在脑海中无法清晰准确地回忆相关知识点,请停止当前状态并立即着手进行知识点的复习与巩固。如果没有深入理解这些知识
理论基石
CAP理论、BASE理论
hashmap
基本结构、头插尾插、死锁、扩容、不安全的原因、hash冲突、红黑树原理和特点
jvm
内存结构、回收过程、常用调用参数、参数调优过程、jps、jstack、jinfo、jmap、jvisualvm、jconsole、MAT
垃圾回收算法
引用计数、标记清除、标记整理、CMS、G1、STOP THE WORLD
类加载
jdk类加载机制、双亲委派、打破双亲委派、泛型反射、动态加载类
数据库索引
聚集、非聚集、联合索引、B+树结构和特点、B+/B树的区别,索引回表、不适合建索引的条件、乐观锁(version)
数据库慢查询
慢查询开启、工具mysqldumpslow、常用sql优化手段、分库分表方案(分表策略)、唯一ID生成方案(雪花、leaf、uidgenerator)
多线程
volatile(内存屏障、指令重排)、线程池核心参数、等待排队的过程、中断、线程状态、wait/notify/join/sleep/yield作用和区别、suspend/resume和park/unpark区别
JDK锁
Synchronize(Markword、monitor、cas操作)、锁升级(无锁、偏向锁、轻量自旋、重量级锁)、锁分离、锁粗化、锁消除、RetrantantLock(底层结构,可重入原理)、ReadWritelock
线程同步
CountdownLacth、CyclicBarrier、LockerSupport、AQS
redis
数据类型、存储结构(跳表)、性能优势、持久化(RDB\AOF\COW)、主从(哨兵、同步)、集群(高可用)、穿透、雪崩、热key、哈希一致性(哈希槽)、分布式锁、红锁redlock、lua原子操作、jedis、codis、jedission
kafka
性能优势、分布式结构、文件存储原理、消息查找原理、消息有序、消息丢失、重复消费、幂等、脑裂问题、rebalance触发、消费者组
分布式事务
为什么需要分布式事务、XA、TCC、本地消息表、最大努力通知补偿、Seata
设计模式
单例、工厂、观察者、模板、代理、装饰、享元、jdk中常用的设计模式、spring中应用的设计模式,适合解决什么样的场景。
AOP
动态代理(基于接口实现)、CGLIB(基于类继承)
ElasticSearch
分片存储原理、查询过程、倒排索引原理、分页问题、分词问题
案例
一线IT公司的面试题通常会比较有难度和技巧性,请看以下案例以作参考:
比如说,在学习AOP(Aspect-Oriented Programming)时你可能会学到基于代理模式(如JDK或CGIB库)来处理切面操作。那么假设我们为两个不同的方法分别施加切面,并且在调用其中一个方法时需要调用另一个方法的情况下,请问这种情况下这次切面的效果会如何?
答案是否定的, 因为AOP代理机制是基于通过反射生成字节码动态创建接口代理的技术, 所以在分析过程中, A方法仅能实现针对自身功能模块的具体化处理, 这也就意味着相应的B方法中的AOP环绕效果也是不可行的
比如AQS
很多技术点都是这样贯穿的,这个过程同学们可以自己体会。
3.不会以直接提问的方式询问关于hash冲突的知识点,请列举出JDK中哪两个分别采用了不同的hash冲突处理机制的类。
普遍认为解决哈希冲突的方法主要是链地址法和开放定址法。然而或许人们很难立刻意识到具体实现细节:例如HashMap采用了链地址法而ThreadLocal选择了开放定址法。进一步探讨原因时发现这一选择背后隐藏着哈希冲突本质问题——即数据在离散空间中的分布特性由此深入探讨发现了一个关键点即魔数HASH\_INCREMENT = 0x61c88647的存在引发了一系列相关思考。此外这一发现还进一步扩展至ThreadLocal的底层架构问题中特别是在entry节点中使用弱引用存储键值对以确保线程安全性。
技巧
在面试前的准备过程中,切勿仅仅停留在表面知识,必须深入挖掘相关技术细节.在初步学习原理时可能会感到难以理解,同样缺乏足够的耐心去深入查看底层代码.然而,经过几次实践后会发现并不存在那么大的困难.这也是提升专业技能必经的阶段.
在考察候选人时,面试官通常会关注其对技术的热情程度。这种热情是否源自内心热情是一个值得探讨的方面。在反问阶段时,我会回顾之前未回答的问题。这种做法一方面可以帮助我发现知识上的漏洞,另一方面能够体现出对待技术精益求精的态度。如果很多问题都未能解答,则无需继续追问。准备其他问题吧。
最后,在确定目标企业之前供建议大家深入接触多家非目标企业,并通过这些接触系统梳理相关经验、查漏补缺。细细体会后不谋而合的是每次技术面试都让你有所收获。
复盘
每天都要预留足够时间进行记录与反思工作;建议采用有道云笔记软件;这些问题往往会在后续工作中发挥重要作用;切记不要遗漏任何问题。
补充
相当多的非计算机背景或者之前学习过其他编程语言(如.NET或C++)的朋友们想转向Java。面对这些知识点的学习常常会感到迷茫且缺乏系统性。建议大家阅读一些Java编程入门教材。
《Java高并发程序设计》第二版 葛先生
《Java程序性能优化》葛先生
《Java虚拟机JVM故障诊断与性能优化》葛先生
《亿级流量网站架构核心技术部分》张开涛
《高性能MySQL》
《Redis深度历险核心原理与应用实践》钱文品
《Spring微服务实战》
