面试辛酸泪之技术篇

面试辛酸泪之技术篇

在上一篇面试篇辛酸泪中,我梳理了这段时间来杭州之后面试的辛酸旅途。之前只是总结了一下自己的面试经历,但是没有说自己面试中遇到的一些面试知识点,这一篇文章,就来看看这是需要看的面试知识点吧

基础章

  说到基础章,那么就是Java相关知识。作为一个Java程序猿,Java基础知识很重要,但是我很奇怪的是,在我这次面试中,很多公司都没有问我几个Java相关的基础知识,问得最多的就是HashMap源码相关的了。其实也不是很奇怪,毕竟都是3年经验的开发人员了,如果连一些基础的基本知识都不是很清楚的话,那就实在是说不过去了。既然我们说到了HashMap,那么就从HashMap开始吧。

本文我只会列出面试官问我的一些的知识点,不会去详细解答。

  HashMap相关知识每次都是从它的数据结构开始的。说完了数据结构,就会说问你为什么会使用这种数据结构,比如说为什么要使用红黑树?说说红黑树的原理?使用红黑树相比链表有什么好处?还有的面试官会问,HashMap的负载因子为什么是0.75? HashMap什么时候会扩容?扩容的原理的是什么?HashMap是数组形式的,是通过什么样的计算得到它的下标的?说完了这些,面试官的问题就来到了HaspMap#put方法,说说put方法的流程?既然说到了HashMap,很多面试官会直接跨越到ConcurrentHashMap,会让你说说HashMap和ConcurrentHashMap的区别?以及ConcurrentHashMap的实现原理?如何实现锁机制的?有什么作用和用法?和HashTable的区别是什么?   说完了HashMap,其实后面很多面试官对于其他源码都问得很少了,有一个公司的面试问了我关于Integer缓存池相关知识,这知识可以参考我之前的博客。关于String,有面试管问了关于String是否可以继承?好像已经没有其他相关的知识点了,不知道是不是面试官觉得我的知识面不够,还是怎么的,面试官问我都问的很少,但是我觉得关于String常用的一些源码都很重要,我也就会继续看。   有关于Java容器相关的知识,也有很多面试涉及到。有问我关于ArrayList和LinkedList的原理?两个的区别是什么?问得比较深的会问你,单链表和双向链表各有什么好处?各自的查询效率和增删效率怎么样?有一道关于容器的笔试题,叫我手写代码。 有个字符串比如(String str = "aabb1231abdsb"),找出里面重复次数最多的字符,如果有多个字符重复次数一样,那么就返回第一个出现的字符。   其他就是一些小知识点了。比如说Java是值传递还是引用传递?Java运算符的精度,什么时候回丢失精度?还有就是Object中有哪些类,各有什么用处。   关于Java的多线程相关的,由于在我之前的项目中都没有涉及到,面试之前虽然都有去看,但是基本看完就不是很记得了,所以在面试的时候发挥也不是很好,所以我觉得Java多线程是我都应该看的。这里也没有说一些面试相关的点,因为我都会去看?‍♀️。

进阶章

  说到进阶篇,那么就得说说Spring、MySQL、MyBatis和JVM相关知识了。   这些知识面很广,但是我感觉总体都是以下的知识点。   先来说说Spring,Spring十分重要,很多公司都用到的Spring全家桶,所以一定要把Spring吃透,不说要了解里面全部的矿家园里,但是只是要能用。我遇到关于Spring的面试只是基本上分为:

  • a. Spring IOC包括什么是IOC?Spring IOC的启动流程?这里可能就涉及到源码的层面了。
  • b. Spring AOP包括什么是AOP?Spring AOP的实现原理?用什么作用?在Spring中怎么使用?JDK动态代理和cglib动态代理有什么区别和原理?
  • c. Spring事务,包括是什么Spring事务?事务隔离机制和事务传播机制是什么?分别有哪些?你在项目中是怎么用到事务的?关于Spring的知识点,我遇到可能就是这些,但是Spring太强大了,还是需要继续挖掘。后期我也会继续学习,并写博客。

  然后就到了数据库这一块了,MySQL和MyBatis。说到MySQL,大部分的面试官都会问,怎么实现MySQL调优,如果能够说上SQL调优,还有索引调优,还有缓存?可能还能会问得深一些索引是通过什么实现的?联合索引是什么?索引有什么需要注意的地方?就是事务隔离机制?锁机制,乐观锁和悲观锁?关于MyBatis,我被问得比较少,大体上就是MyBatis的缓存机制,还有$和#的区别?   然后说说JVM吧。JVM算是里面比较深入的问题了,一般的面试都会问到JVM的垃圾回收,GC机制?有哪些垃圾回收算法?JMM模型是什么?运行时数据区的细节?还有就是JVM调优?日常生活中遇到了那些JVM问题,都是怎么处理的?可以用什么指令来处理这些问题?    最后还有一些关于Linux指令的一些问题。如果查看系统指标,CPU占有率。查找文件用什么指令?vim指令有什么用,具体怎么操作这个指令?如何查看端口?怎么获取进程?等一些问题。    还有就是关于NoSQL方面的知识,但我被问的就是MongoDB和Redis的区别和好处。   说了这么多关于进阶的知识点,那么来说说现在的一些终极的吧。

终极章

  为什么要说这个是一个终极章,因为是我之前没有接触过,但是目前市面上大部分的互联网公司都有在用,并且大范围的在使用的一些重难点知识。这一章节我可能说不了多少,可能只会说说一些大致的方向,不会详细说有什么东西。由于本身自己在原公司都没有怎么用到,虽然在面试前期都有去了解过一些基本的只是,但是实在是缺乏实战经验。   说到分布式,目前市面上基本的互联网公司都使用了分布式架构,所以一般在面试中都会被问到这边方面的知识。谈谈分布式的原理?分布式的实现方式?分布式的事务等等。由于我自己对于分布式相关的只是了解也不是很多...所以还有很多要看啊。   关于分布式,面试可以扩散开问很多。可以设计到RPC、缓存中间件、数据库MySQL、分布分表、分布式锁、分布式中实现 Session共享等等。也会有叫设计一个秒杀系统。   好吧,这并不是终极章,就是一个个人反思。由于自己本身能力有限,不能再分布式上多做出一些总结和扩展。但是下面说说一些关键性技术,留到后面自己也回去看看。

  • Redis
  • 分布式锁
  • 分布式事务
  • Dubbo
  • Kafka
  • ZooKeeper
  • MQ ...

  说了这么多,其实都是自己说的一些废话,但是也算是一些总结吧。这些涉及到知识点,我也会在后面博客中陆续写出。加油吧。每次面试都是对自己的一次考验和一次提升。希望自己能够在技术的路上走得更好更远。

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://baozi.fun/2019/03/22/面试辛酸泪之技术篇

Buy me a cup of coffee ☕.