个人总结的一些java面经

一、java基础方面

栈和队列的实现,大厂都会考察的一个点,有的还直接让用list来现场写段代码。

HashMap的jdk源码,怎么实现的尤其是散列方面hashcode()方法,必须要会!

List下的各接口实现,底层采用的数据结构,原理还有特性,要很熟悉

二、多线程

synchronized关键字,原理是怎么样的

Lock类,基于jdk实现的锁机制,掌握好可重入锁和读写锁,最好还能和synchronized做做对比。

线程安全的几种做法,从上面两点,volatile,ThreadLocal方面讲讲。

线程池

三、sql和数据库优化方面的问题

sql优化,最最基础的一个点,需要从sql语句,索引这些方面去考虑

亿级别海量数据的优化,从库表设计以及查询各方面去考虑

缓存服务化,利用redis等缓存数据库能做的应用去考虑,主要有主备、主从、读写分离、持久化、与数据库同步还有分布式锁之类的角度。

redis支持的数据类型,redis和数据库的同步

四、jvm

GC的运行机制,原理,算法以及判断对象可回收,很重要

类加载,双亲委托,理解+记忆

jvm内存区域怎么划分,GC在其中的策略,能够了解minor gc和full gc。

jvm的优化,能谈上几点更好。

五、tomcat

tomcat的体系架构,这个在本人系列博客中进行过详细阐述

tomcat优化,可以结合NIO,BIO对高并发做优化的思路。

六、算法和设计模式

排序算法必须要掌握一种,冒泡是基本,额外准备一个可以眼前一亮的堆排序or归并排序。每次的算法考察都不一样,只能平时找些题练下思路和语法有备无患。

掌握好单例模式,恶汉、懒汉、线程安全的,不带锁的线程安全的也是一个亮点。

spring里面的工厂模式和代理模式,IO中的装饰者模式,挑几个最熟的能讲讲思路和伪代码实现。

七、框架

SSM不用说了,必须很熟。

SOA以及微服务是目前较为流行的技术趋势,dubbo框架(或者spring cloud)的工作流程和使用都要掌握,最好能结合项目谈谈理解和使用。

消息方面,我准备了RabbitMQ,数据协议也要能说一说ProtoBuf的好处,消息的确认,如何保证消息可靠和不丢失的一些机制


最后能针对项目中的难点,谈一谈自己做出的改进,延伸拓展一下,和他人做法的一个对比,分析和总结些规律出来,这样能展现一个比较好的工作和学习态度,也是日后真正工作了不断提升成长的应有之义。推荐写博客(备忘)和github(展示成果和输出)

你可能感兴趣的:(个人总结的一些java面经)