想面中高级java工程师,要准备哪些技术点?(详细)

说完了怎么写简历(想面中高级java工程师,要怎么写简历?),这篇重头戏就来啦,我们谈谈怎么准备面试,要准备哪些技术点。

框架与中间件篇

1、三大框架ssm

(1)spring的ioc原理;创建bean的过程;有没有ioc在代码中是怎么看出来的
(2)aop原理:动态代理,分为jdk和cglib,两者的区别是什么
(3)springmvc的执行流程
(4)mybatis中$和#的区别和适用场景
(5)如果能看个源码就更好了,这会成为亮点。我因为时间的缘故没有看,不过听说mybatis源码写的挺棒的,嗯,有时间看看。

2、Springcloud技术栈

(1)项目中用到了哪些组件,他们是怎么联合起作用的,画图。推荐博客:Spring Cloud底层原理
(2)Hystrix是怎么做熔断的;feign是怎么进行服务间调用的;ribbon是干嘛的:负载均衡

3、Redis

(1)redis的5种数据类型和适用场景。比如set用来去重等等。
(2)redis的删除策略:定期删除、设置过期时间、惰性删除
(3)redis怎么防止缓存穿透和雪崩,具体的技术方案
(4)redis的持久化机制分为哪两种,这两种的区别和优缺点(AOF、RDB)
(5)本公司redis集群的架构
(6)redis分布式锁是在哪用的,怎么用的(NX EX、Redission);还有没有其余的分布式锁(zk、行锁)
(7)redis相关的操作命令,比如怎么对list数据进行插入和弹出(lpush、lpop)
(8)关于Redis的底层原理,可以看看中华石杉的面试课程,传送门:Java 工程师面试突击

4、其它

(1)dubbo+zk的调用原理。我因为着重准备的是Springcloud技术栈,所以对这个没有深入认识,这个可以看看哨兵机制等等。
(2)mq,因为项目中用到的是Rabbitmq,所以我着重准备了这个。模式有哪几种,以及它们的区别;怎么保证消息不丢失:confirm和ack
(3)mycat,我们项目中用到的是其分库分表的功能,实现了多租户。这个原理可以看看,我只知道这个是根据公司id进行分库的,其余的还需深入了解。
(4)xxl-job,为什么选这个,和其它定时框架的区别;原理图,要自己能动手画出来。
想面中高级java工程师,要准备哪些技术点?(详细)_第1张图片
(5)activiti工作流,对于这个工作流框架,我只停留在会用的阶段,所以属于“了解”。

基础与数据库

1、java基础

(1)hashmap,这个是面试必问,一定要准备。这个也不难,用一两个小时看看相关资料,再总结下来就好了。

  • hashmap的底层结构(数组+链表+红黑树);
  • 是从jdk几添加的红黑树(jdk1.8);
  • 啥时候链表变为红黑树(8),啥时候红黑树变为链表(6),为什么是这个数字(概率、红黑树和链表的时间复杂度)
  • put方法的过程(先判断key值是否存在等等,看源码即可);
  • 数组是怎么扩容的(16—32);
  • 怎么计算hash值(和15取异或);
  • hashmap和hashtable的区别(线程是否安全)
  • concurrenthashmap和hashtable的区别(锁的粒度)
  • hashmap是线程安全的吗?如果想实现线程安全,要怎么做?
  • 推荐资料,这是讲hashmap底层原理的:
    链接:https://pan.baidu.com/s/1Dos3ac40gGXNydUfjqDNDQ
    提取码:7hfj

(2)集合,常用集合有哪几种,不要和redis支持的数据类型搞混了;各集合的特点。
(3)多线程,这一块也是挺重要的。

  • 什么叫线程安全
  • 线程锁都有哪几种
  • synchronized和lock的区别
  • CAS是什么,可能会造成的问题及解决办法(ABA问题—加版本号)
  • 线程池都有哪几种;都有哪些参数
  • threadlocal的使用
  • volatile的特点(线程可见性,禁止指令重排)
  • jmm模型(主线程和工作线程,和线程可见性有联系)

(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+树索引、全文索引、hash索引);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工程师,要看哪些资料?(清单)

你可能感兴趣的:(•,项目管理,——【其它】,——【java基础-高级】)