前言:

  金三银四跳槽季!跳槽不仅仅是因为薪资上面的差距,更多的是需要不断扩宽自己的视野,强迫自己走出舒适区,与高手过招才能有所成长。

  经历了两周的面试,暂告一阶段了,在此期间认识到了自己的不足,也从此中学习了很多知识和思想,做个简单的复盘总结,下面就以时间线为基准,进行小结:

2月14日

17点:XXX公司

自我介绍+项目介绍+业务流程
MySQL:
  • 索引(索引是什么、索引类型、为什么需要索引)
  • 事务(ACID特性(原子性、一致性、隔离性、持久性),隔离级别,Spring里面的传播行为)
  • 一条查询SQL是怎么执行的?
Redis:
  • 常用的数据类型有哪些?
  • 项目中的应用
SpringBoot:
  • 自动装配流程
  • 版本号:SpringBoot如何管理版本号的(版本仲裁中心)
  • SpringBoot 如何整合 Redis
    • 直接引入 Redis的 Starter,会导入redisTemplate组件;
    • 可以自定义 Redis 的Starter,根据业务需求做定制;
  • Spring、SpringMVC,SpringBoot、SpringCloud 各个之间的关系
多线程:
  • 线程如何创建(四种方式)
  • 线程的状态(Thread.State 枚举类)
  • 线程池
    1. 七大参数
    2. 执行流程
    3. 需要注意什么问题
    4. 项目中如何应用
JDK7与JDK8区别
  • Stream 流操作
  • Lambda 表达式
  • 函数式编程
  • 接口新增特性
  • 新增时间日期等 API
设计模式
  • 了解哪些设计模式
  • Spring中应用了哪些设计模式
  • 实际工作中用到哪些设计模式

2月15日

2点:XXX公司

自我介绍+项目介绍+负责模块
项目设计
  • 权限怎么设计的
  • 银行卡签约
  • OCR识别
  • 对账文件

4点:XXX公司

个人介绍 + 项目流程
SpringCloud
  • 常用组件:Nacos、Gateway、Feign、Hystrix
  • 熔断器 Hystrix 怎么用?怎么实现的?
MySQL:
  • 如果一个SQL执行很慢,你有什么思路(SQL优化过程)
    1. 查看是否建立索引,是否需要建立索引
    2. explain查询SQL执行计划,查看索引是否失效、进一步排查失败原因
  • 什么情况下会导致索引失效,如何防止索引失效
  • 如果一个 join 连接很慢,有什么思路
    1. 在join连接条件字段创建索引;
    2. 小表驱动大表
  • 为什小表驱动大表?
  • 索引
    1. 索引分类
    2. 聚簇索引与非聚簇索引区别
    3. 索引失效情况
    4. 建立索引 (a,b,c)
      • a=10会走索引吗?会
      • a=10, c = 10会走索引吗?会,但是不会走到底,会有ICP
    5. 哈希索引与 B+ 树索引
    • 哈希索引不支持范围查询
    1. B树与B+树区别
      • B+树索引演变过程:
      • 二叉树—》斜树—》AVL—》B树—》B+树
    2. 存储引擎
      1. 了解哪些存储引擎(InnoDB、MyISAM、Memory,CSV)
      2. InnoDB 与 MyISAM有什么区别
多线程
  • 如何创建线程,项目中如何应用
  • 线程池,如何配置使用,需要注意什么
设计模式
  • 了解哪些设计模式
  • Spring中应用了哪些设计模式
Spring:
  • IOC:怎么理解
  • AOP:理解、原理及应用
SpringMVC执行流程
  • 自定义注解
    1. 怎么理解的自定义注解
    2. 项目中用到了,怎么应用的
项目因为研发要延期,你会怎么做?
  • 团结内部,提高开发效率
  • 及时与测试、产品沟通,为了产品的安全,性能,我们需要做更多的考虑等
离职原因?

5点:XXX公司

项目介绍+业务流程(负责的模块、项目难点+项目亮点)
MySQL:
  • 索引
    • 索引是什么
    • explain 的执行计划有哪些字段,代表什么意思
    • 什么情况索引会失效
  • 事务(传播行为)
  • Spring中的传播行为是哪些?
    • Required 与 Required_New
Spring:
  • IOC 怎么理解,启动流程
  • AOP 理解、原理、应用
SpringMVC执行流程
Java 基础
  • 8种基本数据类型
  • Integer 的缓存情况
  • String的 == 与equals
  • ArrayList与LinkedList区别
  • 如何创建安全的 List 集合
  • HashMap 的原理

2月16日

16点:XXX公司

  • HashSet 怎么保证元素不重复?

    • hashcode与equals
  • TreeSet 数据结构

    • 排序的Set,红黑树
  • BIO读取文件用什么流

    • 输入流
  • 怎么比较两个对象?

    • 比较器(Comparator与Comparable)
  • 知道并行流吗,并行流的线程池多大?

  • Fork/Join 分支/合并框架知道吗?

  • LocaleDate与unit包中的Date 有什么区别?

  • JDK8中 Stream 流知道吗?

  • Redis如何查看所有的key?

    • keys *
    • scan
  • MySQL的InnoDB的隔离级别?

    • 四种级别
  • AVL查询的时间复杂度?

    • O(logn)

2月17日

10点:XXX公司

项目介绍+业务逻辑+自己负责的模块
  • 技术栈
  • 设计模式
  • 服务部署情况
  • 自动化测试情况
  • Spring
    • 常用注解
    • @Bean作用是什么,怎么实现的
    • AOP 理解、原理、应用
  • Jekins
  • Docker 常用命令

11点:XXX公司

Java基础:
  • 八种基本数据类型
  • float a = 3.4可以吗?
集合:
  • 常用集合、使用的数据结构、是否线程安全
  • ArrayList和LinkedList:数据结构、复杂度
  • HashMap8的实现,线程为什么不安全,怎么保证线程安全(ConcurrentHashMap)
  • 链表与红黑树的时间复杂度
  • ConcurrentHashMap 原理(1.7与1.8)
多线程:
  • 线程状态
  • 如何创建线程、线程池(如何使用,需要关注哪些点)
  • run与start方法区别
  • 多线程的应用场景
  • 异步情况下服务宕机了,怎么办
JVM:
  • 垃圾回收过程
  • 垃圾回收器CMS
    • CMS执行流程
  • 了解其他回收器吗?
    • G1、ZGC
MySQL:
  • 存储引擎常用哪些,什么区别?
  • SQL查询非常慢有什么思路?
  • 多表联查慢有什么思路?
  • 创建索引需要注意什么,性别可以建立索引吗
  • 用到了哪些数据库连接池?
    • Druid、HikariCP
MyBatis:
  • MP
  • 通过Mapper(好处、原理)
  • MyBatis自增的主键
  • 一对多,多对一用什么标签定义
Redis:
  • 数据类型有哪些,常用哪一些
  • 存储String类型需要注意什么?
  • key设置过期时间,很多的key同时放进来会有什么问题,大量写入ttl的key,会造成雪崩问题,怎么解决?
SpringCloud:
  • 基础的组件
  • 服务间调用流程
  • 每次调用都走注册中心吗
  • 注册中心宕机了还能调用吗
Docker:
  • Docker了解吗
  • Docker常用命令
  • 怎么理解Docker
Linux常用命令:
  • top、ps、du、free、grep、find、jps、df
生产问题:
  • 有没有遇到生产问题,怎么排查?
介绍一下项目,工作中遇到过什么难点,怎么解决

14点:XXX公司

MySQL:
  • 存储引擎
    • 存储引擎有哪些
    • InnoDB与MyISAM区别
  • 索引
    • 索引类型
    • 索引失效情况
  • 日期类型字段用什么?Date、DateTime、TimeStamp区别
SpringCloud
  • 常用组件
  • 服务间调用 Feign
  • 熔断器 Hystrix
SpringBoot
  • 常用注解
  • Bean组件的生命周期
  • 如何读取配置文件的值
  • 如何自定义配置

19点:XXX公司

个人介绍+项目介绍+业务流程介绍+项目难点(亮点)
MySQL:
  • 存储引擎:
    • 了解哪些存储引擎
    • InnoDB 与MyISAM 区别
Redis:
  • 常用数据类型有哪些,它们的数据结构是什么?
  • Redis 的过期策略有哪些?
  • 缓存雪崩是什么,怎么办?
    • 把key的过期时间分散一下
  • 缓存击穿是怎么,怎么办?
    • 数据快要过期的时候,异步更新设置过期时间
  • 缓存穿透是怎么,怎么办?
    • 先查询,如果为空也返回,设置合理的过期时间;
    • 布隆过滤器 Bitmaps
    • 拦截不合理请求
  • 用Redis哪一个数据结构可以实现延迟队列?
    • ZSet
Java:
  • 集合:
    • ArrayList与LinkedList区别?
    • 如何创建线程安全的 List 结构?
  • HashMap(JDK8)
    1. 底层数据结构?
      • 数组+链表/红黑树
    2. 为什么长度是2个幂次方?
      • hash % length == hash&(length-1)
    3. 如何进行哈希扰动?
      • 高16位与低16位的异或
    4. 哈希冲突怎么办?
      • 拉链法(尾插)
    5. 什么时候会进行扩容
      • 树阈值 = 8,数组长度 > 64
    6. 线程不安全体现在哪里?
      • 会造成数据覆盖
    7. 创建线程安全的Map
      • HashTable
      • Collections.synchronizedMap
      • ConcurrentHashMap
    8. HashTable怎么实现安全的?
      • synchronized锁,性能不好
    9. ConcurrentHashMap
      • JDK7:Segment 分段锁
        • ReentrantLock+ Segment + HashEntity。
        • 锁粒度:基于 Segment,包含多个HashEntity
      • JDK8:CAS+synchronized+Node+红黑树
        • 锁粒度:Node(首节点),锁粒度降低
并发问题:
  • synchronized与ReentrantLock的区别
  • synchronized的锁升级(无锁—》偏向锁—》轻量级锁—》重量级锁)
  • ReentrantLock 怎么实现的?
    • CAS + AQS
  • synchronized解决了哪些问题?
    • 原子性与可见性
  • volatile 解决了什么问题?怎么解决的
    • 可见性与重排序,通过插入内存屏障,遵循 happends-before 规则
  • 为什么会有可见性,有序性等问题
    • 因为会指令重排序
  • 会什么会有指令重排序
JVM:
  • 运行时数据分区情况,每一区域负责什么?
    • 五部分区域
  • OOM会发生在哪里?
    • 堆区与方法区
  • 垃圾回收算法有哪些?
    • 复制算法、标记清除、标记整理、分代算法
  • 垃圾回收器有哪些?
    • CMS、G1、ZGC
  • JVM的常用参数有哪些?
    • -Xms、-Xmx、-Xss、-Xsx、
    • 堆栈的内存大小设置、方法区的空间设置、新生代的比例情况、指定使用的垃圾回收器

2月18日

15点半:XXX公司

17点:XXX公司

自我介绍+项目介绍
Java
  • 8种基本数据类型
  • Integer 的缓存问题
  • 0.1 * 3 == 0.3 吗?
    • 不等于,浮点数计算存在误差,会丢失精度
集合:
  • ArrayList与LinkedList
  • HashMap
Spring:
  • IOC
  • AOP
  • MVC流程
  • 常用注解
  • Bean的生命周期
SpringBoot:
  • 自动配置
  • 如何读取配置文件的值

2月21日

10点:XXX公司

15点半:XXX公司

2月22日

14点:XXX公司

2月23日

15点:XXX公司

笔试(题目是英文😂)
(1)给定一个Integer数组,找到第二大元素
(2)二叉树的层序遍历、变形

遍历顺序:1 3 2 4 5 6 7

(3)What is ClassLoader?What ClassLoader in Java?
面试
  • 自我介绍 + 业务逻辑 + 流程架构
  • 技术栈、灰度发布、一些场景业务解决方案

2月24日

16点:XXX公司

技术专家面

项目描述+业务逻辑+项目总体流程架构图
SpringCloud
  • 常用的一些组件,
  • Gateway 怎么配置的
  • 断路器Hystrix怎么用,原理是什么?
  • 怎么在注册中心中发现服务的?
  • 服务间调用Feign怎么用,通过什么来调用的?
如何保证MySQL与Redis的数据一致性?
  • 延时双删
  • 复制 binglog,增量复制数据
项目工程分层结构:
  • 项目结构怎么分层的?
  • Service之间可以调用吗?
    • 可以调用,但是可能会造成循环依赖
  • 循环依赖怎么解决?
    • Spring 提供三级缓存
    • 遵循参考阿里开发手册,service下再分层,如Manager层,对多个DAO的组合复用,对Service层通用能力的下沉
Spring
  • 常用注解有哪些?@Service与@Component区别?
  • IOC、AOP 怎么理解的?
URL怎么找到 service的?
  • DNS—》HTTP—》TCP—》IP—》MAC—》IP—》TCP—》8080端口—》Tomcat—》Tomcat 的线程池—》DispatcherServlet
集合:
  • ArrayList与LinkedList区别?List怎么删除元素,工作中用那些?
  • HashMap原理、ConcurrentHashMap原理
自己写过哪些 bug?
  • short s = 1; s = s + 1; short s = 1; s += 1;
  • Integer 的缓存
  • 三元运算符,装箱拆箱的bug
  • 删除List中元素
想要加入什么样的Team?
与同事发生冲突了怎么办?

技术总监面

  • 自己对那些技术比较熟悉,对那些技术不熟悉,未来有什么计划?

  • 大量请求进来怎么处理?

  • 模拟一个洗牌的操作,给定一个整数 n,产生 0 到 n-1之间的随机数(复杂度O(n))

  • 如果上面的方法已经写好了,怎么判断这个方法的好坏(判断这个方法是否打乱的情况随机行)

    1. 进行排序,通过排序耗时和交换的次数来判断
    2. 随机查看一个数,看这个数的位置是否随机
    3. 查看指定的两个数之间的间距是否固定

  上面的三种方式都需要大量的案例来测试。

  • 同步、异步有什么区别?
    1. 性能
    2. 解耦

总结

  首先,谢谢各位面试官,在面试过程中循序善诱,给了我很多的指导,受益匪浅。另一方面也认识到了自己知识储备的不足,对接下来的安排制定也有了更加清晰的规划。

  可以看到,面试过程中一部分是项目介绍,主要体现出项目中的难点和亮点,然后自己使用了什么技术解决了哪些问题;另一部分就是技术栈,上面的面试题也并不是很难,都是工作中常用的一些技能,平常工作中稍微总结一下就可以,这里做了一下简单复盘,凭着印象回忆,也有好多题目遗漏,希望大家举一反三,进行一个查漏补缺。

  如果自己有理解不到位或者错误的,也欢迎大家指出,一块探讨分析。

  最后送给大家一句话:机会总是留给有准备的人!

  你知道的越多,不知道的越多,学海无涯,再出发!

posted on 2022-02-28 14:02  格物致知_Tony  阅读(294)  评论(0)    收藏  举报