我是在35+的年纪用了一年时间从银行跳槽到BAT的程序员,工作10多年来从未离开过开发一线。
你觉得自己知识储备不够,网上随便找找,都会有一堆脑图告诉你Java需要掌握哪些知识、工具和技能。比如这样的
然而这些脑图也只能给你一个大概的学习方向,你并不知道每个知识点需要掌握到什么程度,学到哪里就可以去面试了。
所以如果你想短时间内应付面试,我建议你按下面这个知识结构去准备:
为了方便理解和对标,结合你当前的情况,这里用阿里的P5-P6技术岗来说明需要掌握的知识。
P5对应校招水平,这段阶段的基础非常重要。算法与数据结构的基础扎实,能正确高效使用关系数据库,运用设计模式改善软件架构。
比如关系数据库之间的区别是什么?索引怎么建?索引算法又是什么?怎么调优?从百万到亿级数据量之间要做些什么工作?
再比如有哪些设计模式及其使用场景?如何正确使用设计模式这部分可以看我讲的《大厂高频设计模式应用及分析》。
带你一次性搞定高频考点/经典应用/责任链模式/单例模式
戳链接即可9元秒杀:https://www.jiuzhang.com/course/78/?utm_source=sc-csdn-fks
折扣码:AF6F54
(使用方法:点击"立即购买",然后在选择优惠框输入折扣码,即可9元获得全部课程)
P5面试主要看你对于技术栈是否有通透的理解,以及体系化的思维,展现强大的培养潜力。
P6则是社招起步职级,这个阶段需要能用主流框架思想来改善系统架构,掌握主流中间件的原理和运用,初步具备高可用架构的设计实施能力。
P6面试一般是抓简历中的项目,不断深挖技术,主要看你是不是真的做过和理解。
举几个Java面试题的例子:
JDK和JRE有什么区别?
普通解答:具体来说JDK其实包含了JRE,同时还包含了编译Java源码的编译器javac,还包含了很多Java程序调试和分析的工具。简单来说:如果需要运行Java程序,只需安装JRE就可以了,如果需要编写Java程序,需要安装JDK。
追问:除了javac,你还了解些什么命令行工具,它们的用途是什么?
- Jcmd:综合工具
- jps:虚拟机进程状况工具
- jstat:虚拟机统计信息监视工具
- jinfo:Java配置信息工具
- jmap:Java内存映像工具
……
追问:对于jstat,你了解哪些参数?(这里面试官可能会视你的回答继续来问。)
1)如果你提到class,面试官可能会追问一:Class加载的时机?
回答要点:
- 启动类加载器,根转载器,用户不可访问,Bootstrap ClassLoader,加载JAVA_HOME\lib,或者被-Xbootclasspath参数限定的类;
- 扩展类加载器,Extension ClassLoader,加载\lib\ext,或者被java.ext.dirs系统变量指定的类;
- 应用程序类加载器,Application ClassLoader,加载ClassPath中的类库;
- 自定义类加载器,通过继承ClassLoader实现,一般是加载我们的自定义类。
追问二:Class加载的过程?
回答:加载→验证→准备→解析→初始化→使用→卸载
2)如果你提到了gc,面试官可以问:谈谈你对Java虚拟机栈的了解。
然后追问:JVM的垃圾回收算法有哪些?
再举个例子:
== 和 equals 的区别是什么?
答案要点:两个方法都是比较等价性,它们的区别要从“基本类型”和“引用类型”来看,作为基本类型来说,它们比较的都是值,作为引用类型——对象来说,它们比较的是双方是否为同一个对象。
如果你看过equals()的原生实现的话,就可以发现它们之间直接的关系:
所以能说出下面的内容则加分:我们可以通过重载Object中的equals方法来实现自定义的等价计算方法。比如,在String类型中,由于源码中重新实现了该方法,所以会产生下面的结果:
Tips:用字符串常量实例化的String的内容其实是保留在常量区。
例如:
String x = “string”
String y = “string”
x==y ——> true
引用的都是常量区的同一个数据项,所以有上面的结果。
这题的考察点是equals()的概念,实际要求是平时对源码的深挖意识即技术钻研和批判性思维。
总之,大厂面试java程序员的基本原则就是从常识开始,逐渐诱导,考察原理理解的完整度和深度。
考察思路:
- 简单的话题引入,麻痹候选人
- 找一个角度/工具让候选人去匹配场景
- 深挖背后的原理
面试题成千上万,听起来只是要问题的解法方向。
——其实不是。
比如面试官问:
- 你的系统最高并发是多少?
- 如果有一天并发达到5万KPS,系统需要哪些改进?
- 当然也可以问,在你的系统架构里面
- 高速缓存/数据库分表,这些的用途是什么?它们的原理是什么?
这些其实是一个问题,就是高并发。技术万变不离齐总,讲究的是整体性的通用技术栈。
凭借这些年的面试官经验,我可以告诉你大厂的实际招聘“潜规则”就是能力要求升一级,职级评定降一级。
这里我们不谈企业内部所谓的末位淘汰和“优化”,仅从面试官的角度来看,比如一个组招人,我的标准一般是不能低于组内平均水平,不然招进来的人只会拉低整个团队的水平。
所以工业界对技术水平的要求往往会越来越高。你说竞争激烈也好,内卷也罢,事实就是如此。
再说Java,其实我刚从业那会儿用的不是Java,之前做过更长时间的C/C++,也做过前端、全栈,如果你真正达到一个门槛水平的话,其实不会care用什么技术栈。程序员要学会触类旁通,学一门新技术,查查资料看看文档,就可以很快上手,这一点很重要。
所谓的新技术、新名词,很多只是技术方法层面的差异,原理和底层其实是相通的,所以“扎实的基础”对于程序员来说并不是一句空话。
转载:https://blog.csdn.net/JiuZhang_ninechapter/article/details/108885647