前言
不少互联网公司都是有独立的技术面试环节的,相信有不少开发同学都跪在这里,平常开发都是CURD和框架,但到了技术面试就是各种源码,各种实现的刨根问底儿。下面就简单梳理了一下常见的问题。
主要内容
个人感觉Java技术栈是比较容易掌握的,虽然内容比较多,但大概可以分为基础知识以及开源软件这两块,实际上也会有算法和设计模式相关内容,但大多是穿插在基础知识和开源软件之中的,单独考一下红黑树或是B+树的比较少,确实是有(国外较多),这个需要提前了解一下情况。
Java基础知识
1.Java内存模型了解么?讲讲组成吧。
2.Java的类加载机制介绍一下?假如有一个继承了父类的子类,那么会加载谁的类加载器呢?
3.HashMap的实现机理,HashMap和ConcurrentHashMap的区别?自己实现散列表的话,需要注意的点有哪些,扩展因子+散列碰撞?ConcurrentHashMap的特点,链表和线程安全以及同步机制。
4. 同步相关问题,怎么使用synchronized关键字,静态的synchronized方法的是会锁住对象还是全部的这个类?synchronized和 volatile的区别?为什么synchronized还有lock的出现?
5.GC的算法,标记清除整理算法,G1等垃圾回收器的机制
6.线程池的参数?各自的意义?
开源软件
1.redis相关,如何进行key like的实现?分布式锁如何实现
2.es了解么?其中的Lucene引擎有过了解吗?
3.zookeeper了解吗?
4.spark了解么?
5.kafka了解么?
6.为什么有了nginx还要有zuul?
7.Springcloud熟悉么?其中的熔断机制以及其中用到了什么设计模式?
写在最后
实际上好的面试问题大多都是根据面试者的实际情况来选择的,根据面试者熟悉情况再层层递进,个人理解企业招人进来并不是需要一个code monkey,而是需要解决问题的人,而这样的人更加注重解决问题的思路和态度,而非仅仅是知识点。
实际上平时的积累是最有效的准备,要切忌浅尝辄逝和眼高手低。