飞道的博客

请问如何短时间突击 Java 通过面试?

477人阅读  评论(0)

我是在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程序员的基本原则就是从常识开始,逐渐诱导,考察原理理解的完整度和深度。

考察思路:

  1. 简单的话题引入,麻痹候选人
  2. 找一个角度/工具让候选人去匹配场景
  3. 深挖背后的原理

面试题成千上万,听起来只是要问题的解法方向。

——其实不是。

比如面试官问:

  • 你的系统最高并发是多少?
  • 如果有一天并发达到5万KPS,系统需要哪些改进?
  • 当然也可以问,在你的系统架构里面
  • 高速缓存/数据库分表,这些的用途是什么?它们的原理是什么?

这些其实是一个问题,就是高并发。技术万变不离齐总,讲究的是整体性的通用技术栈。

凭借这些年的面试官经验,我可以告诉你大厂的实际招聘“潜规则”就是能力要求升一级,职级评定降一级。

这里我们不谈企业内部所谓的末位淘汰和“优化”,仅从面试官的角度来看,比如一个组招人,我的标准一般是不能低于组内平均水平,不然招进来的人只会拉低整个团队的水平。

所以工业界对技术水平的要求往往会越来越高。你说竞争激烈也好,内卷也罢,事实就是如此。

再说Java,其实我刚从业那会儿用的不是Java,之前做过更长时间的C/C++,也做过前端、全栈,如果你真正达到一个门槛水平的话,其实不会care用什么技术栈。程序员要学会触类旁通,学一门新技术,查查资料看看文档,就可以很快上手,这一点很重要。

所谓的新技术、新名词,很多只是技术方法层面的差异,原理和底层其实是相通的,所以“扎实的基础”对于程序员来说并不是一句空话。


转载:https://blog.csdn.net/JiuZhang_ninechapter/article/details/108885647
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场