第10章 第1节 应聘者角度分享面经与面试秘籍

大家好,非常感谢大家可以和我一起进行交流学习。在前面8个章节中,我竭尽所能的对Java开发岗的常见重要知识点进行了梳理总结,力争用最通俗易懂的语言表达出来,使得大家可以轻松掌握其技术原理。

在第九章中,我将进行一些面试分享。本小节中,我将和大家交流我作为应聘者的一些经历、心得与体会。

在曾经无数次的实习与校招的面试中,我和大家一样,也遇到了无数个性格迥异的面试官。面试官的性格以及水平,对于被面试者的面试发挥有很强的影响。接下来,我来找出几个典型的面试案例和大家分享。最后,我会给出一些面试技巧供大家借鉴。
 

实习面试:

按照套路出牌的实习面试

以下是笔者经历的某家大厂的实习生面试,主要考察的知识点以及问题如下:

面经分享(一):

  • 讲讲简历上写的实习期间所做的项目,并且针对项目提了一些问题。
  • 讲了Spark treaming计算原理和过程(因为笔者本人简历上写了相关项目)
  • Kafka的相关知识点:(简历有写)
    • 为什么要在topic下分区,每个partition可以在不同的broker上吗?
    • Kafka为什么可以快速持久化
  • Spring的IOC机制,Spring容器如何创建对象?
  • Spring的AOP原理与实现
  • 动态代(dai)理和静态代(dai)理的区别,动态代(dai)理怎么实现的,如何得到被代(dai)理类的所有方法
  • SpringMVC的消息处理流程,DispatchServlet控制器在哪里配置?
  • 数据库的索引使用什么数据结构?
  • 数据库存储引擎有哪些,区别
  • 分K组来反转单链表(手撕算法环节)

 

面经分享(二):

  • Kafka有哪些特性?为什么要使用Kafka
  • Kafka快速持久化
  • 还听说过哪些MessageQueue?
  • 抽象类和接口的选择
  • GC算法有哪些?
  • 哪些对象可以当做根root?
  • 说说内存回收过程?
  • Full GC会带来哪些影响?
  • ThreadLocal内部实现?
  • LRU实现
  • 四次挥手状态解析

 

可以看得出来,按照套路出牌的面试,考察的知识点无非就是我们在前面所总结交流的知识点,并且主要是针对简历上所写的比如Kafka,Spark Streaming等来考察。手撕代码环节也是较为常见的链表相关知识点。

看到这里,我们有同学开始有疑问了,“那如果第一次找实习,简历上没有项目,怎么办?”

莫慌莫慌,笔者在第一次找实习的时候,简历上写了N本所看Java书籍,N个Java学习视频,用来表示自己基础扎实。在实习过程中,我们可以接触到公司级别的项目和产品级的开发流程。所以,趁早加入实习大军,获取一份实习经历,对于我们今后的校招之路很有帮助。
 

不按套路出牌的实习面试

我们再来交流下什么叫做不按套路出牌的面试吧。看到这里的各位同学,我想你最擅长和相对有把握的知识点,无非就是Java基础,集合,Java多线程以及JVM等Java相关的知识点了。

但是,很抱歉,现在面试你的面试官他恰好不是Java开发工程师,比如说他是C++或者PHP工程师。为什么会出现这种情况呢?

这种情况,在笔者那个时候特别常见。因为好多公司的招聘岗位是统一的软件开发岗位或者后台开发岗位,能否遇到和自己语言一样的面试官只能碰运气了。最近2年,这种现象貌似在减少,大部分公司都进行了区分,比如软件开发-Java方向和软件开发-C++方向等,主要就是为了让大家更好的发挥自己的真实水平,从而选拔到更加合适的人才。

那么,这种不按套路出牌的面试都在考察什么呢?我们又该如何应对呢?

根据笔者的经历,面试官不会考察太多Java知识点的。考察点主要集中在操作系统,网络协议,数据库以及手撕算法方面。这就比较别扭了,因为我们毕竟看的,学的,用的最多的还是Java相关技术,而面试官却和你掰扯其他相关知识点。

我们该如何应对呢?最好的办法就是“听天由命,感叹时运不济吧”。哦,不对,是应该沉着冷静,努力回忆自己脑海中的知识点和面试官进行“周旋”。

难不难?难呀,笔者曾经遇到过好多次,面试官不是搞Java的,和我交流各种底层协议,KMP和红黑树等高级算法。结果,毫无意外的都是挂掉了。但是,面试结束后我依然对非Java技术等相关知识点,比如说网络协议等进行了总结,也就是我们前面学习的一些章节。
 

实习面试总结:

前面,我们介绍了两种不同风格的面试。总的来说,实习面试是比较简单的,考察的知识点比较浅,并且一般都是常见的重要知识点。只要各位认真学习前面各个章节的知识点,相信都可以找到一份满意的实习的。
 

校招面试:

接下来,我们来看下校招的面试吧。校招面试也会遇到一些很“奇怪”的面试官,我们这里就分享按照套路出牌的面试经历吧~

面经分享(一):

  • HTTPS协议介绍
  • HTTP缓存介绍
  • 模板方法模式,如何由子类决定模板方法内的执行顺序
  • 交换二叉树的节点
  • GC中的循环引用问题?
  • 哪些对象可以作为根root?栈内存中的引用变量是否都可以作为root?
  • 海量数据中,寻找前K个数?代码实现
  • 数据库表之间左外连接、右外连接、内连接和全连接
  • 数据库的存储过程怎么理解?触发器了解吗?
  • 簇集索引和非簇集索引的区别?分别在什么场合下建立各自的索引
  • 操作系统问题:CPU时间片调度有哪些方式?
  • 听说过多级优先队列吗?
  • 设计模式了解哪些?写一个抽象工厂方法模式吧
  • 不使用递归和栈,实现一个二叉树的前序遍历
  • 任意给定一个数组,求出三个元素相乘最大的那三个数?如果三个数必须连续呢?
  • 任意给定一个数组,返回一个数组:第一个元素表示某个出现次数最多的元素,第二个元素表示其出现次数。

 

面经分享(二):

  • 泛型赋值问题
  • 泛型参数问题
  • 定义一个有界队列,内部使用数组实现
  • 指定多个线程的执行顺序
  • 多线程和单线程的关系,执行速度
  • 类加载机制,以一种什么形态存在于内存中?如何找到这个.class文件?什么时候需要类加载
  • Java反射是什么?内部是怎么实现的?
  • 线程池
  • Future.get( )方法的阻塞问题,支持传入时间参数不?
  • synchronized底层怎么实现的?
  • 如何获得线程执行结果
  • NIO中的Buffer和InputStream,Select知识点
  • 乐观锁的应用场景
  • 事务的隔离级别
  • Spring事务
  • 类加载器为什么要有那么多
  • .java文件到.class文件都经历了啥?
  • 类加载机制详细阐述
  • Java内存GC,JDK1.8之后有哪些改动?
  • Kafka中如何选举leader?从副本集合中选哪个follower作为leader?
  • 线程同步有哪些方法?

 

读到这里,各位有没有好奇,这是你的面经分享吗?抑或是你随便找了几个面试题就说这是真实的面经分享。No,这就是笔者本人真实的校园招聘面经,为什么我可以再次还原出来呢?

因为我有做笔记,写总结的习惯。我会将每次面试遇到的问题和知识点统统记下来,曾经无数次在人家公司楼下站着用手机记刚才的面试题目。这些都促使我可以更好的梳理知识点,准备面试。

好了,题归正传。从面经中,我们可以看出,校招中对于知识点的考察更加深,并且也会更加的广,涉及到了Java开发岗位相关的方方面面。
 

校招面试总结:

校园招聘,对于应聘者的基础知识考察很广,并且在深度上也有所加强。因为一般情况下都会有2-3轮技术面试,(3轮居多吧),并且面试时长也会有所要求,每个面试官和你聊点,综合起来,考察点涉及到的就会比较多了。这就要求我们必须熟练掌握各个Java相关的技术原理,并且可以进行相应的延伸与扩展,在面试中增加一个加分点。

 

面试秘籍:

上边说了这么多,无非就是在说Java相关技术我们都需要扎实掌握。作为读者的你肯定有些烦躁,就是想问:“那么,面试有没有什么秘籍或者窍门呢?”

有呀,必须有呀,每一个曾经的“Offer收割机”都会或多或少的有一些面试窍门和秘籍吧,这里我给出一些面试建议:
 

论笔记的重要性

俗话说,好记性不如烂笔头。笔者能够短时间内完成该专刊,和平时擅长做笔记,写总结和写博客是分不开的。从2016年开始,我就开始总结与积累相关面试知识点。

具体来说,就是在学习Java的过程中,我们需要将所学的知识点用最浓缩精华的语言记录下来,保存在一些在线笔记本中(印象笔记或者有道云笔记等)。分模块总结知识点的好处,就是可以在面试前快速复习各个知识点。“临阵磨枪,不快也光”,通过在面试前一遍又一遍的复习自己写的知识点总结,并且在面试结束后及时完善补充知识点,面试起来会更加的得心应手,一些时候面试官还没说完,我们就知道他想要问什么问题了。(偷笑.jpg)

举个例子吧,你和小明同学同时在学习新的技术Redis。但是小明在学习的同时,对各个重要知识点都做了笔记总结,而你却仅仅是看了一遍,记在了聪明的大脑中。过了两个月,你们需要去参加面试了。小明拿出了自己的笔记,使用半天时间就系统完成了Redis相关知识点的复习与准备。而此刻,你的大脑一片空白,上次学习的Redis基本已经忘光了,只好满世界的去找Redis相关学习资料进行复习,浪费了更多的时间,复习还不系统,容易缺漏很多重要知识点。
 

论精通的重要性

这么说吧,我们在前面章节中分模块学习与交流了很多Java相关的技术原理。但是,可能由于个人精力与水平所限,无法全部“精通”。那么也是不打紧的,面试中需要的是在整体表现不错的基础上拥有加分点。所以,我们可以是Java基础扎实或者MySQL比较扎实,并且拥有一些亮点,也就是可以进行延伸与扩展的知识点。

总之,在精力有限的情况下,我们可以选择一个方向进行相应的延伸与扩展,给面试增加一些加分点。
 

论心态的重要性

怎么说呢,心态也是需要天赋的,当然更重要的是后天的培养与锻炼。各位肯定遇到过这样的两种同学,一种是平时牛逼,但是越重要的考试,发挥越差;还有一种是平时感觉一般,但是重要考试中往往可以超常水平发挥。没错,这就是心态的直接体现。

面试也是一样的,有的同学无法克服紧张的情绪,一看到面试官就开始忐忑,遇到有难度的问题更是大脑一片空白,无法正常发挥。笔者在面试的时候,遇到过这样的情况。在面试的一开始,这个面试官就不按照套路出牌,上来就问有相当难度的题目,把我难得满头大汗。连续几个题目之后,我整个心态都爆炸了,后边简单的知识点也没有很好的发挥。面试出来之后,我也是“骂骂咧咧”的吐槽半天。但是,接下来我还是进行了总结,认为面试官考察知识点从难到易也是一种套路吧,可以更好的检验应聘者的心态。

面试多了之后,笔者对自己更加自信。当然,也是想通了,没必要感到担心与忐忑,因为“该会的知识点,我已经复习过了”,不会的知识点,我可以临场发挥,紧张只会给自己造成心理负担。
 

论交流的重要性

此处的交流是指我们应该和同学或者同事进行交流。在学生时代,我们应该有很多同学在和自己一样找工作,对于Java相关技术我们应该时刻保持交流与探讨。有可能你觉得疑惑的地方,在去吃饭的路上别的同学就可以给你解释的通。互相交流探讨Java相关技术以及面试中的知识点,都会极大的提高我们的面试成功率。

工作之后,我们依然可以和要好的同事探讨相关技术。同事之间,水平就有所差异了,多和技术大牛交流请教,往往可以解开你多年的疑惑。
 

总结

本小节中,我以应聘者的身份和大家交流了真实的面经分享,并且对于面试中常见的问题进行了分析。在最后,给出了笔者自认为的“面试秘籍”,真诚的希望可以帮助到各位同学。下一小节中,我将转变身份,以面试官的角度来分享面试。

©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页