Java互联网科技管理

【本人秃顶程序员】Java面试 32个核心必考点完全解析

2019-04-22  本文已影响3人  本人秃顶程序员

←←←←←←←←←←←← 快!点关注

课程预习

课程内容分为三个模块

基础模块

应用模块

综合模块

换工作面临问题

能力不错,却总被忽略

课程特色

课时1:技术人职业发展路径

1.1 工程师发展路径

技术序列:技术攻坚、架构知识、专业知识

1~3年内从工程师到高级工程师发展,夯实基础,重点提高工作基础能力,培养技术的深度和广度,对不同方向的新技术保持强烈的好奇心和学习心

3年以上资深工程师需要重点配音技术攻坚能力,疑难问题的排查,大型项目的工程拆分,技术品牌的塑造。具体工作包括,原理实现,注重框架能力的培养,大规模高并发场景,高可用可扩展措施和方案,业务的抽象和架构能力

管理序列:团队管理、项目管理、沟通协作

偏向于团队把控,需要让团队形成技术战斗力,利用一切资源让团队完成作战目标,做好团队内和跨团队沟通工作,在实际工作中这两种并没有明显的边界,例如做管理不表示远离架构设计,技术专家也不是单兵作战。这两个方向的区分点在于工作方向的侧重点不同。

面试诀窍示例:同过往的经验来看,我对项目的整体规划、管理、推进比较感兴趣,在任务协调沟通方面也有过比较突出的表现,所以我的职业规划是成为一名职业的技术经理,以管理方向为发展目标。

1.2 常见技术岗位划分

1.3 面试岗位选择

公司&团队

岗位匹配度

匹配度与发展方向相吻合

1.4 常见面试流程

1.5 面试前的准备工作

能力、心态、沟通

提前准备一份自我介绍,自己的技术特长和职业优势

避免冷场,对于回答不上来的问题,提供解题思路,或者询问面试官是否可以换一个问题

注意细节,坐姿、表情、观察面试官反应

1.6 面试考察点

硬技能

软实力

1.7 四类硬技能

基础知识

项目经验

应用知识

架构能力

微服务架构

课时2:计算机与网络基础

2.1 知识点汇总

2.1.1操作系统(加粗为重点)

进程与线程

Linux常用命令

死锁

内存分页管理于Swap

任务队列于CPU Load

扩展知识点

2.1.2 网络知识(加粗为重点)

4/7层网络模型

TCP协议

UDP

HTTP

QUIC(基于UDP,但是提供了基于UDP的可靠性保障)

2.2 TCP详解

TCP特点

TCP实现细节

2.3 设计模式详解

主要考察两点

2.3.1 单例模式线程安全实现

2.3.2 常用设计模式与应用场景

2.4 Java基础知识详解

JUC

版本差异新特性
动态代理与反射
数据类型

常用集合

对象引用

异常机制
扩展知识点

2.4.1 Map——知识点详解

HashMap

ConcurrentHashMap

2.4.1 Java版本特性

V 1.8

V 1.9-1.10

V 1.11

2.5 考察点和加分项

面试考察点

加分项

2.6 真题

真题汇总——1

真题汇总——2

课时3:深入浅出JVM

3.1 知识点汇总

内存模型

类加载器

GC

性能调优

执行模式

编译器优化

3.2 JVM的内存模型

3.2.1 JVM内存模型

线程独占

线程共享

面试回答要点

3.2.2 JMM与内存可见性

Java内存模型,定义程序中变量的访问规则。

在多线程进行数据交互时,例如线程A给一个共享变量赋值后由线程B来读取这个值,线程A修改变量只修改在自己的工作内存区中,线程B是不可见的,只有从A的工作内存区写回到工作主内存,B在从主内存读取到自己的工作内存区才能进行进一步的操作。

由于指令重排序的存在,写和读的顺序可能会被打乱,因此JMM需要提供原子性、可见性、有序性的保证。

3.3 Java类加载机制详解

3.3.1 类的生命周期

加载:是文件到内存的过程,通过类的完全限定名查找此类字节码文件,并利用字节码文件创建一个Class对象;

验证:验证是堆文件类内容验证,目的在于当前类文件是否符合虚拟机的要求,不会危害到虚拟机安全,主要包括四种:文件格式验证、元数据验证、字节码、符号引用;

准备:准备阶段是进行内存分配,为类变量,也就是类中由static修饰的变量分配内存并设置初始值,初始值是0或null,而不是代码中设置的具体值,代码中设置的值在初始化阶段完成,另外也不包括final修饰的静态变量,因为final变量在编译时就已经分配;

解析:解析主要是解析字段、接口、方法,主要是将常量值中的符号引用替换为直接引用的过程,直接引用就是直接指向目标的指针或相对偏移量等;

初始化:最后是初始化,主要是完成静态块执行与静态变量的赋值,这是类加载最后阶段,若被加载类的父类没有初始化,则先对父类进行初始化。

只有对类使用是才会初始化,初始化的条件包括访问类的实例,访问类的静态方法和静态变量的时候,使用Class.forName()反射类的时候,或者某个子类被初始化的时候。

3.3.2 类加载器

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库被随意篡改。

3.4 常用GC算法介绍

3.4.1 分代回收

分代管理主要是为了方便垃圾回收,这样做是基于两个事实:

大部分对象在Eden区中生成,Eden区满时,还存活的对象会在两个Suivivor区交替保存,达到一定次数后对象会晋升为老年代。

老年代用来存放从年轻代晋升而来的存活时间较长的对象。

永久代主要用来保存类信息等内容。

3.4.2 垃圾回收算法

3.5 考察点和加分项

考察点

加分项

3.6 真题

课时4:并发与多线程

4.1 知识点汇总

死锁

线程通信

线程状态转换

常用工具类(JUC)

机制

同步与互斥

线程池

4.2 线程池详解

线程池参数介绍

核心线程数,默认情况下,核心线程会一直存活

最大线程数,决定线程池最多可以创建多少线程

线程的空闲时间,空闲时间的单位,当线程闲置超过空闲时间时就会被销毁

线程缓存队列

线程池工厂方法

线程池满时拒绝策略

4.3 JUC重点工具实现类

4.4 考察点和加分项

考察点

加分项

4.5 真题

课时5:数据结构与算法

5.1 知识点汇总

5.1.1 数据结构

队列

多叉树

二叉树

5.1.2 算法

常用算法思路

复杂度

排序

查找

字符串匹配

5.2 字符串匹配

字符串匹配问题
判断给定字符串中的括号是否匹配

解体思路

5.3 考察点和加分项

考察点

加分项

5.4 真题

题1、题2基础题,必须掌握

课时6:常用工具集

6.1 知识点汇总

团队协作

质量保证

压测

容器与代理(随着微服务的盛行,Envoy、OpenResty、Kong等API网关的使用也越来越普遍)

CI/CD

JVM相关

系统分析

文档管理

网络工具

6.2 考察点和加分项

考察点

加分项

6.6 真题

课时7:必会框架(上)——Spring全家桶

7.1 知识点汇总

Spring

ORM

RPC

其他框架

7.2 Spring框架

机制与实现
AOP

PlaceHolder动态替换

事务

Spring应用

类型类

设置类

Web类

功能类

配置方式

自动装配

课时8:必会框架(下)——RPC与ORM

8.1 考察点与加分项

考察点

加分项

8.2 真题

课时9:缓存

9.1 考察点和加分项

考察点

加分项

9.2 真题

上一篇 下一篇

猜你喜欢

热点阅读