一、学海无涯,再出发!【2020.02.14-25】


前言:

  金三银四跳槽季!跳槽不仅仅是因为薪资上面的差距,更多的是需要不断扩宽自己的视野,强迫自己走出舒适区,与高手过招才能有所成长。   经历了两周的面试,暂告一阶段了,在此期间认识到了自己的不足,也从此中学习了很多知识和思想,做个简单的复盘总结,下面就以时间线为基准,进行小结:

2月14日

17点:XXX公司

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

2月15日

2点:XXX公司

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

4点:XXX公司

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

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)       ① 底层数据结构?         数组+链表/红黑树       ② 为什么长度是2个幂次方?         hash % length == hash&(length-1)       ③ 如何进行哈希扰动?         高16位与低16位的异或       ④ 哈希冲突怎么办?         拉链法(尾插)       ⑤ 什么时候会进行扩容         树阈值 = 8,数组长度 > 64       ⑥ 线程不安全体现在哪里?         会造成数据覆盖       ⑦ 创建线程安全的Map         HashTable         ConcurrentHashMap       HashTable怎么实现安全的?         synchronized锁,性能不好       ConcurrentHashMap         JDK7:Segment 分段锁         ReentrantLock+ Segment + HashEntity。         锁粒度:基于 Segment,包含多个HashEntity           JDK8:CAS+synchronized+Node+红黑树         锁粒度:Node(首节点),锁粒度降低   并发问题:     ① synchronized与ReentrantLock的区别     ② synchronized的锁升级(无锁—》偏向锁—》轻量级锁—》重量级锁)     ③ ReentrantLock 怎么实现的?       CAS + AQS     ④ synchronized解决了哪些问题?       原子性与可见性     ⑤ volatile 解决了什么问题?怎么解决的       可见性与重排序,通过插入内存屏障,遵循 happends-before 规则     ⑥ 为什么会有可见性,有序性等问题       因为会指令重排序     ⑦ 会什么会有指令重排序       处理器与编译器为了提高性能会对指令进行重排序     JMM的重排序:https://blog.csdn.net/chenssy/article/details/56003920   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数组,找到第二大元素   ② 二叉树的层序遍历、变形        遍历顺序:1 3 2 4 5 6 7     ③ What is ClassLoader?What ClassLoader in Java?   (2)面试   自我介绍 + 业务逻辑 + 流程架构   技术栈、灰度发布、一些场景业务解决方案    

2月24日

16点:XXX公司

(1)技术专家面   项目描述+业务逻辑+项目总体流程架构图   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?   (1)short s = 1; s = s + 1; short s = 1; s += 1;   (2)Integer 的缓存   (3)三元运算符,装箱拆箱的bug   (4)删除List中元素     想要加入什么样的Team?   与同事发生冲突了怎么办?   (2)技术总监面   自己对那些技术比较熟悉,对那些技术不熟悉,未来有什么计划?   大量请求进来怎么处理?   模拟一个洗牌的操作,给定一个整数 n,产生 0 到 n-1之间的随机数(复杂度O(n))     如果上面的方法已经写好了,怎么判断这个方法的好坏(判断这个方法是否打乱的情况随机行)     ① 进行排序,通过排序耗时和交换的次数来判断     ② 随机查看一个数,看这个数的位置是否随机     ③ 查看指定的两个数之间的间距是否固定     上面的三种方式都需要大量的案例来测试。     同步、异步有什么区别?   ①性能   ② 解耦  

总结

  首先,谢谢各位面试官,在面试过程中循序善诱,给了我很多的指导,受益匪浅。另一方面也认识到了自己知识储备的不足,对接下来的安排制定也有了更加清晰的规划。   可以看到,面试过程中一部分是项目介绍,主要体现出项目中的难点和亮点,然后自己使用了什么技术解决了哪些问题;另一部分就是技术栈,上面的面试题也并不是很难,都是工作中常用的一些技能,平常工作中稍微总结一下就可以,这里做了一下简单复盘,凭着印象回忆,也有好多题目遗漏,希望大家举一反三,进行一个查漏补缺。   如果自己有理解不到位或者错误的,也欢迎大家指出,一块探讨分析。   最后送给大家一句话:机会总是留给有准备的人!     你知道的越多,不知道的越多,学海无涯,再出发!