←←←←←←←←←←←← 快!点关注
基础模块:
应用模块:
综合模块:
能力不错,却总被忽略
技术序列:技术攻坚、架构知识、专业知识
1~3年内从工程师到高级工程师发展,夯实基础,重点提高工作基础能力,培养技术的深度和广度,对不同方向的新技术保持强烈的好奇心和学习心
3年以上资深工程师需要重点配音技术攻坚能力,疑难问题的排查,大型项目的工程拆分,技术品牌的塑造。具体工作包括,原理实现,注重框架能力的培养,大规模高并发场景,高可用可扩展措施和方案,业务的抽象和架构能力
管理序列:团队管理、项目管理、沟通协作
偏向于团队把控,需要让团队形成技术战斗力,利用一切资源让团队完成作战目标,做好团队内和跨团队沟通工作,在实际工作中这两种并没有明显的边界,例如做管理不表示远离架构设计,技术专家也不是单兵作战。这两个方向的区分点在于工作方向的侧重点不同。
面试诀窍示例:同过往的经验来看,我对项目的整体规划、管理、推进比较感兴趣,在任务协调沟通方面也有过比较突出的表现,所以我的职业规划是成为一名职业的技术经理,以管理方向为发展目标。
公司&团队
岗位匹配度
匹配度与发展方向相吻合
能力、心态、沟通
提前准备一份自我介绍,自己的技术特长和职业优势
避免冷场,对于回答不上来的问题,提供解题思路,或者询问面试官是否可以换一个问题
注意细节,坐姿、表情、观察面试官反应
硬技能
软实力
基础知识
项目经验
应用知识
架构能力
微服务架构
进程与线程
Linux常用命令
死锁
内存分页管理于Swap
任务队列于CPU Load
扩展知识点
4/7层网络模型
TCP协议
UDP
HTTP
QUIC(基于UDP,但是提供了基于UDP的可靠性保障)
TCP特点
TCP实现细节
主要考察两点
JUC
版本差异新特性 动态代理与反射 数据类型
常用集合
对象引用
异常机制 扩展知识点
HashMap
ConcurrentHashMap
V 1.8
V 1.9-1.10
V 1.11
面试考察点
加分项
真题汇总——1
真题汇总——2
内存模型
类加载器
GC
性能调优
执行模式
编译器优化
线程独占
线程共享
面试回答要点:
Java内存模型,定义程序中变量的访问规则。
在多线程进行数据交互时,例如线程A给一个共享变量赋值后由线程B来读取这个值,线程A修改变量只修改在自己的工作内存区中,线程B是不可见的,只有从A的工作内存区写回到工作主内存,B在从主内存读取到自己的工作内存区才能进行进一步的操作。
由于指令重排序的存在,写和读的顺序可能会被打乱,因此JMM需要提供原子性、可见性、有序性的保证。
加载:是文件到内存的过程,通过类的完全限定名查找此类字节码文件,并利用字节码文件创建一个Class对象;
验证:验证是堆文件类内容验证,目的在于当前类文件是否符合虚拟机的要求,不会危害到虚拟机安全,主要包括四种:文件格式验证、元数据验证、字节码、符号引用;
准备:准备阶段是进行内存分配,为类变量,也就是类中由static修饰的变量分配内存并设置初始值,初始值是0或null,而不是代码中设置的具体值,代码中设置的值在初始化阶段完成,另外也不包括final修饰的静态变量,因为final变量在编译时就已经分配;
解析:解析主要是解析字段、接口、方法,主要是将常量值中的符号引用替换为直接引用的过程,直接引用就是直接指向目标的指针或相对偏移量等;
初始化:最后是初始化,主要是完成静态块执行与静态变量的赋值,这是类加载最后阶段,若被加载类的父类没有初始化,则先对父类进行初始化。
只有对类使用是才会初始化,初始化的条件包括访问类的实例,访问类的静态方法和静态变量的时候,使用Class.forName()反射类的时候,或者某个子类被初始化的时候。
BootStrap ClassLoader
:启动类加载器加载JAVA_HOME/lib
下的类
ExtClassLoader
:扩展加载器加载JAVA_HOME/lib/ext
下的类
AppClassLoader
:应用加载器加载加载classpath
指定目录下的类
除此之外,还可以自定义类加载器。
Java的类加载器使用双亲委派模式,双亲委派模型的工作过程是:
很多人对“双亲”一词很困惑。这是翻译的锅,,,“双亲”只是“parents”的直译,实际上并不表示汉语中的父母双亲,而是一代一代很多parent,即parents。
双亲委派模式优势:
采用双亲委派模式的是好处是Java类随着它的类加载器一起具备了一种带有优先级的层次关系,通过这种层级关可以避免类的重复加载,当父亲已经加载了该类时,就没有必要子ClassLoader
再加载一次。其次是考虑到安全因素,java核心api中定义类型不会被随意替换,假设通过网络传递一个名为java.lang.Integer的类,通过双亲委托模式传递到启动类加载器,而启动类加载器在核心Java API发现这个名字的类,发现该类已被加载,并不会重新加载网络传递的过来的java.lang.Integer,而直接返回已加载过的Integer.class,这样便可以防止核心API库被随意篡改。
分代管理主要是为了方便垃圾回收,这样做是基于两个事实:
大部分对象在Eden区中生成,Eden区满时,还存活的对象会在两个Suivivor区交替保存,达到一定次数后对象会晋升为老年代。
老年代用来存放从年轻代晋升而来的存活时间较长的对象。
永久代主要用来保存类信息等内容。
考察点
加分项
死锁
线程通信
线程状态转换
常用工具类(JUC)
机制
同步与互斥
线程池
线程池参数介绍
核心线程数,默认情况下,核心线程会一直存活
最大线程数,决定线程池最多可以创建多少线程
线程的空闲时间,空闲时间的单位,当线程闲置超过空闲时间时就会被销毁
线程缓存队列
线程池工厂方法
线程池满时拒绝策略
考察点
加分项
队列
栈
表
图
多叉树
二叉树
常用算法思路
复杂度
排序
查找
字符串匹配
字符串匹配问题 判断给定字符串中的括号是否匹配
解体思路:
考察点
加分项
题1、题2基础题,必须掌握
团队协作
质量保证
压测
容器与代理(随着微服务的盛行,Envoy、OpenResty、Kong等API网关的使用也越来越普遍)
CI/CD
JVM相关
系统分析
文档管理
网络工具
考察点
加分项
Spring
ORM
RPC
其他框架
机制与实现 AOP
PlaceHolder动态替换
事务
Spring应用
类型类
设置类
Web类
功能类
配置方式
自动装配
考察点
加分项
考察点
加分项
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。