中高级Java工程师面试准备指南:SSM框架与SpringCloud技术栈详解
讲完如何写简历(如果要面试中级或高级Java工程师,简历怎么写?),本文的亮点就在这里。我们来谈谈如何准备面试以及需要准备哪些技术点。

框架和中间件
1. 三大框架ssm
(1)Spring的ioc原理;创建bean的过程;如何查看代码中是否有ioc
(2)AOP原理:动态代理分为jdk和cglib。两者有什么区别?
(3)Springmvc执行流程
(四)mybatis中$和#的区别及适用场景
(5)如果能看到源代码就更好了,这会成为一个亮点。由于时间原因没有看,不过听说mybatis的源码很不错。嗯,有时间的话我会去看一下。
2.Springcloud技术栈
(1) 项目中使用了哪些组件以及它们如何协同工作?画一幅画。推荐博客:Spring Cloud底层原理
(2)Hystrix是如何进行熔断的; feign如何进行服务间调用; Ribbon 的作用是什么:负载均衡
3.Redis
(一)redis的5种数据类型及适用场景。比如用set来去除重复等等。
(2)Redis删除策略:定期删除、设置过期时间、懒惰删除
(三)redis如何防止缓存穿透和雪崩,具体技术方案
(4)redis有哪两种持久化机制?这两种类型(AOF、RDB)有什么区别、优缺点
(五)我公司redis集群的架构
(6)redis分布式锁在哪里以及如何使用(NX EX、Redission);还有其他分布式锁(zk、行锁)
(7)Redis相关操作命令,比如如何插入和弹出列表数据(lpush、lpop)
(8)关于Redis底层原理,可以看看中文虎山的面试课程,传送门:Java工程师面试突击
4.其他
(1)dubbo+zk的调用原理。因为我专注于准备Springcloud技术栈,所以对此并没有深入的了解。可以看看哨兵机制等等。
(2)mq,因为项目中使用的是Rabbitmq,所以我重点准备了这个。有哪些模式及其区别;如何保证消息不丢失:confirm和ack
(3)mycat,我们项目中使用的是它的分库分表功能,实现多租户。这个原理你可以看一下。我只知道这个是根据公司ID来划分数据库的。剩下的就需要深入理解了。
(4)xxl-job,为什么选择这个,它与其他时序框架有什么不同;您需要能够自己绘制原理图。
(5)Activiti工作流,对于这个工作流框架,我只停留在使用的阶段,所以我“了解”它。
基础与数据库
1.Java基础知识
(1)Hashmap,这个是面试必问的,一定要准备的。这个并不难,花一两个小时阅读相关资料然后总结一下就可以了。
(2) 收藏。常用的集合有哪些?不要将它们与redis支持的数据类型混淆;每个集合的特征。
(3)多线程,这个也很重要。
(4)剩下的,比如泛型、反射,只要你能解释清楚这是干什么用的就可以了。我刚刚写了这些 Java 基础知识:集合、多线程、泛型和反射。
2. JVM
(1)jvm的内存模块必须能够被绘制。
(2)堆分为哪些部分,为什么持久代改为元空间?
(3)类加载过程;家长委派有什么用?如果我自己写一个string类,可以加载到内存中吗?
(4)垃圾收集算法有哪些及其优缺点?垃圾收集器有哪些?
(5)你通常如何优化jvm?如果gc频繁,可能是什么原因?
(6)您平时如何监控jvm的性能?
3、设计模式
(1)能够手写单例代码,通常双检测的就够了;饥饿者、懒人、双重检测是否是线程安全的,为什么;为什么双检测是双而不是单?
(2)我的简历上写了3种设计模式:单例、策略、代理。我感觉这3个比较常用
4. 算法
(1) 气泡、快速、插入
(2)还有一些相关的数据结构,比如链表闪回等。我来谈谈这个想法。如果你想写代码...o(╯□╰)o
5.MySQL
(1)mysql主要分为3部分:索引、锁、事务
(2)索引的分类(B+树索引、全文索引、哈希索引); B+树的分类(聚集索引和辅助索引);聚集索引和辅助索引的区别
(3)B+树和B树的区别; InnoDB 和 myIsam 的区别
(4)数据库中有哪些锁?
(5)事务的隔离级别,即InnoDB(读已提交、读未提交、可重复读、序列化)
(6)重复读(幻读)会带来什么问题; InnoDB如何解决这个问题(MVCC);什么是MVCC
(7) 交易传播机制;什么情况下@Tansactional会失败?
(8)什么情况下适合建立索引?索引失败的场景
(9)如何监控和调优复杂的SQL
前端及管理
(1)我写了平时使用的前端框架Angular、ionic、vue,以及常用的工具git、xiaopiu、Jenkins、Maven等,几乎没有面试官问过这些。
(2)Linux中的常用命令,例如如何查看实时日志等。
自己的项目和其他项目
按比例划分,上述技术及其原理占80%,项目占20%。
(1) 您最熟悉哪个项目?这个项目是做什么用的?它的业务是什么?这个项目的QPS是多少?
(2)你做了什么?这个项目的难点和亮点是什么?开发过程中遇到了哪些问题以及如何解决的?您是否遇到过上网问题?
(3)以上内容一定要提前想好,否则现场记不住要说什么。别问我怎么知道的。
(4)其余的,比如期望薪资、最低薪资等需要提前想好;你需要问清楚上下班时间,五险一金如何缴纳,公司有没有其他福利。
概括
一般来说,简历上写什么,面试官就会问什么,所以要好好看看简历上的技能。
有些地方可能没说清楚。欢迎大家指出交流,共同进步~
类似文章直接上传到:
如果我想面试中级或高级Java工程师,我应该如何写简历? (附照片)
如果你想面试中级或高级Java工程师,你应该寻找哪些信息? (列表)