提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
在当前这个环境下,想找一个适合的工作还是比较难的。结合自己的经历,希望帮助每个正在找工作的人。经历:两周时间,在Boss上沟通了800多次,提交简历80多,面试10次,4个面试通过。智联共提交360多次简历,无一个面试。
一、面试需要准备什么呢?
1.项目
项目是我们面试必须要准备的。看你面得是什么样的公司,我们的项目要准备的也要相对应的做改变。更重要的一点是,要理解自己项目的详细逻辑,要体现出你在项目中的贡献。如果自己只是一个开发,那么需要从比你高几个层级的角度来看你的项目。比如,你是中级,需要考虑高级都在做什么?如果你是高级,需要看看资深在做什么?我面高级,我就需要知道我们原来部门的整体架构,网络拓扑图、QPS、TPS、对内、对外的服务提供、什么这么切分微服务、为什么不用分布式、为什么用微服务、数据的流动等等当面要有自己的独道见解。
2.基础
今年给我出的基础题很少很少。也许是我们面大公司的原因吧。主要的基础就是线程问题。
2.1 线程池参数
一共7个参数:核心线程数、最大线程数、多余线程的存活时间、存活时间单位、等待队列、生成线程池的线程工厂、拒绝策略。
2.2 线程池执行流程
1)判断核心线程是都都在执行任务,如果不是则创建一个新的工作线程来工作,如果核心线程都在执行任务,则进入下一流程。
2)线程池判断工作队列是否满了,如果没有,则将新提交的任务存储到工作队列中,如果工作队列满了,则进入下一流程
3)如果线程池的线程都处于工作中,如果没有则创建一个新的线程来执行任务,如果已经达到最大线程数,则交给拒绝策略。
2.3 拒绝策略
2.4 ArrayList底层数据结构和扩容过程。
数组。扩容1.5倍
2.5 LinkedArrayList底层数据结构和扩容过程。
双向链表
2.6 HashMap 底层数据结构和扩容过程。
数组和链表,数据长度大于64或链表高度大于8的时候会变成红黑树。扩容因子是0.75。
为什么扩容因子是0.75?为什么到8的时候变成红黑树?为什么到6的时候会从红黑树退
成链表和数组
2.7 ConcurrentHashMap 底层数据结构和扩容过程。为什么线程安全。
3.框架
3.1 spring三级缓存步骤。例如A依赖B,B依赖A。
1)在创建A的时候,从一级缓存中获取不到A,那么创建实例,提前暴露,把A存储到三级缓存中,
这时进行依赖注入;
2)这时候创建A依赖的B,从一级缓存中获取不到B,开始创建B,提前暴露,把B存储到三级缓存中,
3)这时候创建B依赖的A,从一级缓存到三级缓存中,依次查找,最终在三级缓存中,查找到了A,
将三级缓存中的A添加到二级缓存中,同时删掉三级缓存中的A,这时B创建完毕,将B添加到一级缓存中。
4)这时A还处于创建过程中,最终将A添加到一级缓存中,完成最终的创建。
3.2 spring 的注入方式?spring注入方式优缺点。
1)三种注入方式:setter、构造方法、接口注入
2)优缺点:
3.3 有三级缓存不能解决的循环引用吗?
有四种:
1)单例依赖了多例
2)构造器注入依赖
3)单例注入代理对象
4)DependsO循环依赖
3.4 springboot启动原理(我的答案不准确哈)
1)启动的时候执行了run方法,run方法其实是进行了spring的ioc操作
2)其次执行到了注解:@SpringBootApplication,这个注解中最重要的是@SpringBootConfiguration,
@EnableAutoConfiguration,两个注解。@EnableAutoConfiguration主要实现加载了,
MATE-INFO/下的spring.factories中的配置类。
3)BeanFactoryPostProcessor完成@EnableAutoConfiguration注解加载解析,
在源码中找到了@import注解修饰的类AutoConfigurationImportSelector,
最终会执行这个类的方法,完成关联IOC和配置类的关联。
4.中间件(没学好)
4.1 kafka:订阅发布、消费者组
4.2 ES:索引,分片,同义词、近义词、中英文怎么做区分的(我也没学好,就不班门弄斧了)
5.JVM
5.1 JVM内存模型?
1)方法区
2)堆
3)程序计数器
4)虚拟机栈
5)本地方法栈
5.2 每个内存模型都是做什么的?都存了什么
1)方法区存储了类的结构信息,运行时常量池,字段方法的数据、以及一些结构方法
2)堆主要存储了Java实例对象和数组
3)虚拟机栈 主要存储的是我们
3)本地方法栈 主要存储的是native方法
5)程序计数器 记录线程执行位置
5.3 垃圾回收器
1)Serial
2)Serial old
3)ParNew
4)CMS
5)Parallel Scavenge
6)Pataller Old
7)G1
5.4 垃圾回收集算法
1)分代收集
2)标记复制
3)标记整理
4)标记清除
5.5 可达性分析法
5.6 怎么调优的
1)我举了两个案例,原来用CMS的时候怎么来做的
2)用G1怎么来做的
5.7 CMS怎么设置并发标记
5.8 linux 导出 gc日志
6.数据库
6.1 索引为什么用b+树,不用其他数据结构,比如hash,二叉树
1)B+的优势,要只要B+树的数据结构。
2)了解都有什么数据结构可以当做索引比如:hash、二叉树、红黑树、b树,都有哪些劣势
6.2 索引覆盖
1)查询的数据中包含在索引里。
6.3 执行计划
explain 还有各个字段什么含义
6.4 怎么做的sql优化。
太多场景了就不赘述了
6.5 myIsam和innodb的区别。
1)最大区别MyISam无锁,Innodb有锁
2)文件区别,MyIsam三个文件,Innodb两个文件聚簇索引。
6.6 事务的特性
1)原子性
2)一致性
3)隔离性
4)持久性
6.7 事务的隔离级别,mysql默认的级别。mvcc
1)读已提交
2)读未提交
3)可重复度
4)序列化(串行化)
默认可重复读,因为mysql的Innodb有MVCC,底层用了记录锁、分段锁、临键锁机制,不会造成幻读。
7.设计模式
只问了一个Facade设计模式
8.并发编程
8.1.synchronized
1)原理
2)锁升级
3)锁静态方法锁的是什么?
8.2 lock
1)怎么实现的?
8.3 volatile
1)怎么保证可见性
8.4 CAS
1)底层原理
9.算法
只有一个面了算法:
走4*4格子
10.redis
10.1 redis是怎么持久化的?优缺点。
10.2 redis事务
10.3 redis过期策略
10.4 redis集群好处。
10.5 redis分布式锁怎么实现的,有什么弊端
10.6 redis 击穿、穿透、雪崩、bigkey、热点key问题的处理。
10.7 redis pipline
总结
经过两周的面试,其实很受打击。第一,自己问题,没有好好学习。第二。生活压力。第三,社会问题。具体就不细说了,主要是介绍经验嘛。这个时期,还是很难的,难那也要规划自己的时间。我是上午8点多起,开始看工作岗位,投简历到10点多,然后去沐浴(差点就焚香了),最远去了清河(我住宋家庄),面完试一般在16-17点,开始投简历。到家开始做饭,吃完饭,打游戏,12点之前睡觉。人生嘛,总有起落,暂时的低谷,也许这个低谷在加利亚纳,也许在乔戈里峰。走出去就好了,一天走不出去,那就一辈子。