近来秋招已经开始有一段时间了,很多学弟学妹,相信是在论文和工作之间苦苦煎熬着。下面给大家分享自己当初面试Java工程师岗位的经验,主要是一些整理之前看过的知识点,希望有了这些资料,慢慢啃下来你会有所收获。内容不像其他分享整理的那么全面,但是都是在面试中有所体现的重点内容。
- Java语言进阶面试常考内容,里面包括以下内容,讲解非常详细(再次给作者一百个赞),学好里面的内容,相信你会对Java的基础知识有很大提升
- 深入理解Java类型信息(Class对象)与反射机制
- 深入理解Java枚举类型(enum)
- 深入理解Java注解类型(@Annotation)
- 深入理解Java类加载器(ClassLoader)
- 深入理解Java并发之synchronized实现原理(面试问过不止一次)
- Java并发编程-无锁CAS与Unsafe类及其并发包Atomic
- 深入理解Java内存模型(JMM)及volatile关键字(内存模型是Java语言的重要知识点,想要学好Java,这一关必过,也是常考的点)
- 剖析基于并发AQS的重入锁(ReetrantLock)及其Condition实现原理(Java的锁和MySQL的锁机制一样是面试官常考的点)
- 剖析基于并发AQS的共享锁的实现(基于信号量Semaphore)
并发之阻塞队列LinkedBlockingQueue与ArrayBlockingQueue
PS: 除了上面的知识点以外,还有以下几点非常重要,但是我这边没找到收藏的链接:
- Java对基础数据类型的封装,拆箱装箱机制
- Java虚拟机内存管理、GC算法(重点,建议直接看《深入理解Java虚拟机》部分章节)
- Java语法层面的比如 类、接口、抽象类、private、public关键字等知识点
- syncronized、volatile关键字(重点会问,和Java锁、内存模型部分知识分不开)
Java语言层面的基础知识众多,问的比较多的也就上面这些,当然最终问什么全是考官个人爱好。
- HashMap(单独列出来可见其重要性)
面试主要问的内容有以下两点,当然,HashMap的源码实现有非常多的让人眼前一亮的代码,好好学习人家大拿写的代码对自己的有很大好处。
- JDK1.7 和 JDK1.8实现的不同,要深入源码层面,不能仅仅局限于简单的比较
- HashMap出现死循环的原因,能否复现?生产遇到这个问题如何解决?
这是链接:Map 综述(一):彻头彻尾理解 HashMap,当然,这是一个系列的文章,建议都仔细好好认真的学习10遍,T。T
- 算法
算法我只建议好好认真学习以下算法,因为算法繁多,而且算法难度是有目共睹的,不建议花太多时间学习,但是数据结构与算法的重要性是大家都清楚的,有时间还是要多多学习,不是说不建议学就不学,而是目前而言,不建议花太多时间准备。(因为我知道准备了也没用,算法方面临时抱佛脚起不到作用的)
- 排序算法,都好好学一遍,每一个排序算法都得知道原理,其中几个诸如冒泡排序,插入排序之类的简单排序,还是要一分钟内写出可运行的代码来的。非常重要且常考但却有点难度的算法有 快速排序, 堆排序,这两个算法有点难度,但是建议会写出可运行代码。(多写两遍自然就会了)
- 一些非常经典的算法,只有大神才能设计出如此优雅的算法,值得学习,多学学这些算法能解决的问题 经典算法系列之(一) - BitMap, 作者还有一个系列的经典算法,不妨进去一探究竟。
PS:算法部分不定期更新......
- 框架部分
spring家族,Spring,Spring MVC, Spring Boot。Spring家族的部分要学的太多,建议直接看书,在网络上各种博客中,建议看的只有一点,主要是Spring的整体思想,非常重要,这是spring学习的起点,重要讲解spring为何诞生,他是怎么解决问题的,其他技术上的细节是说不完的,建议直接看书。
关于Spring IOC (DI-依赖注入)你需要知道的一切 非常详尽的介绍了spring核心之一的依赖注入MyBatis,Spring JPA学会使用的接触上比较两者的优劣
- 数据库系列(MySQL和Redis问的最多)
- Redis,redis的数据结构设计的非常精妙,值得研究,建议直接看书《Redis设计与实现》,学完这本书感觉Redis的实现原理基本都懂了,这本书用python这种非常易懂的语言作为写算法的为代码,非常值得一读
- MySQL的锁,引擎,两个部分非常容易被考官问到。这里收藏了两篇博客:
mysql共享锁与排他锁
什么是脏读,不可重复读,幻读
设计模式
设计模式是非常重要的,其中Spring用到的代理模式是非常经典的,值得学习,https://juejin.im/post/5bc96afff265da0aa94a4493其他
面试官会针对你的简历问不同的问题,所以简历上突出的重中之重必须是你擅长的内容。我认为面试官会看的内容有以下几点:你的学历、你的学校、你的专业技能、你的项目经验。其他可能就是你的一句话总结,如果你写出了一句令人眼前一亮的自我评价,面试官会对你加一分,但是这并不是重点,重点在上面说的那些。如何醒目的体现出你的专业技能很重要。
如果你有实际的项目,那么要突出的是你使用过什么技术,有什么重点,难点,遇到过什么问题,你是怎么解决的。如果这点你回答的很好,那么也是会加分的。
尽量引导面试官到你会的地方去,我就是尽量引导面试官到我看到的上面那一系列博客上面,面试官越问越深,但是我看过博客,基本都懂了,就不怕他问了,当他越问越深,那么你的分数也将越来越高,而且问题深了的话,有些问题回答不出来或者回答的不好,关系也不是很大,你只要最最基本的回答出来,不要出重大错误就可以了。
对于想要找一份好工作的童鞋来说,日常的学习,编码,没事看看博客是很有必要的。有些同学其实是看中学习,但是仅仅是课程的学习,并不看重编码技能,导致到了找工作节骨眼上,因为手头没有项目,技能平平而一路饱受闭门羹的痛苦。然后心里很不平衡:“我成绩比他好着么多,他还有挂科,凭什么面试官不要我要他?”,其实面试官不要你要他你心里还是有数的。
如果你本身就对计算机这块并不感兴趣,那么你会对编码、看源码、看技术博客,捣鼓各种框架,自己写博客系统这些对于喜爱计算机的同学来说的日常操作很排斥。如果你是这种情况,那么你得好好思考思考你的职业生涯是否需要在计算机行业继续。
Last updated at 2019/08/29