工作找到了
今年回来后开始招开发工作,这里作为面试记录心得
主要是java这项,目前找工作需要的技术栈大致分为几个方面,几个方面的面试有得会相互嵌套
面试必问项多线程,mysql,Redis,JVM,高并发,高可用
本文只是总结一些问题,面试的时候整理的答案还没整完,整完再发
一般会现有自我介绍,这部分我准备讲的点是 自己基本信息,技术栈,做过的项目,自我的优势,未来职业规划,因为学历不好和之前的项目不是特别好,所以没有过多介绍,所以后面规划是做个攒劲的项目,提高自己能力,如果项目够好的话可以多讲项目,之前看网上的其他人员自我介绍分享讲中级,高级需要更多介绍项目,项目对公司带来的共享,这个后面需要注意
1、技能首字母大写表示专业
2、格式模板对齐
3、以熟练使用/熟练掌握为主,少写精通
4、前1,2个项目详细描述,包括自己负责事项,注意项目围绕亮点去写,不要写的和亮点没什么关系,亮点可以是高并发,高可用,达到的收益等等,尽可能量化(之前工作的时候没注意这块,以后工作注意)
找工作有点难,心理做好被拒绝,不断被拒绝的准备,同时不要陷入自我怀疑当中进入精神内耗模式,没有一点帮助,尽量关注做好当下 的事 ,只要做好应该做的事,最起码最后不会后悔
在面试屡战屡败的时候,我开始把面试当做是日常需要处理的一个bug,感觉bug这种东西总会解决,这样心理好多了,不再去恐惧烦恼(当然偶尔也有)
就是在大量并发环境下的编程处理,面试官会问项目中的一些高并发技术栈以及实际的使用场景,常见的一些题例如
分布式锁的使用
分布式事务
分布式环境下的异常处理
主要问的具体题目大致集中于分布式锁以及分布式事务的如何使用以及原理
,这里我讲的主要技术栈就是redis,rabbitMQ
Redis包括Redisson底层原理,为什么使用Redisson,Redis如何保证不丢失,这时候可能会问一些Redis其他知识点,例如内存淘汰机制,多路复用等,甚至有家公司问过之前公司中Redis的配置文件配置,不过这点当时没有说出来
项目中如何使用rabbitMQ完成分布式事务,死信机制是什么,如何回复消息,rabbitMQ和kafka(因为简历上我写了会kafka)的区别,还有自己在项目中哪些地方使用过rabbitMQ,怎么设计的队列,
初次之外在之前面试一家公司时,也有问到使用zookeeper如何写分布式锁
没问到多线程,感觉面试不完全,现在基本面试都会问到多线程,多线程问的方向主要集中于
什么是多线程
你在项目里哪些地方用到了多线程
线程池,以及参数,阻塞队列
锁,synchronized,ReentrantLock两者的逻辑和底层原理,synchronized一般还会问到锁升级,以及Monitor
ThreadLocal原理
Future和Callable我在面试的时候没怎么问
高可用主要就是一些软件如何保证正常运行的一些策略,在面试时很多时候提问,线上的一些软件错误,或者程序错误如何解决
比如Redis保证数据安全
在秒杀的时候Redis突然挂了,你是怎么解决的(这部分是在问秒杀场景下的处理,面试官当时提问的是让你设计一个秒杀方案如何做,然后又问的这个,他主要是想看你思考是否完善)
除此之外还有MQ的消息如何保证可靠
集中于两部分,理论和实战(SQL)
理论主要有mysql的优化,索引优化,SQL优化,索引什么时候会失效,索引的数据结构,为什么使用B+树,explain执行计划的参数有哪些,mysql锁,锁这边还会问如何锁住一条数据,存储引擎有哪些,SQL执行顺序,SQL存储过程怎么创建,事务的隔离级别
实战(SQL)
其实就是给你出点SQL题,让你写SQL,或者说思路
比如如何做大量数据按照条件删除,或者是查询,SQL的判空和判空字符串
主要问到一些内存淘汰策略,Redis底层原理,还有就是会先问用过Redis做过什么功能,然后再细问,不过一般就是分布式锁和缓存
缓存再继续问缓存穿透,雪崩,击穿等,以及对应的解决思路
除了这两个数据库外有公司还会问到MongoDB和Oracle,不过Oracle和Mysql 操作上差不多,表示下可以很快学会就完了,MongoDB问的少一点
框架主要问的是Spring,SpringBoot,mybatis
Spring主要问spring 循环依赖,是否可以注入自己的bean,事务嵌套(这个最多),什么时候事务失效,SpringBean的生命周期,有没有在Spring Bean上进行些其他处理,AOP
SpringBoot问自动装配,Spring,SpringMVC,SpringBoot之间的区别和关系
mybatis原理
问一些框架和理论
比如说什么是分布式,什么是微服务
dubbo和SpringCloud的区别,SpringCloud alibaba是否用过,dubbo和SpringCloud的一些组件的使用,比如说Feign这一类的作用和底层原理,dubbo的底层协议,负载均衡
如果在讲微服务的时候说了docker,可能还会问些docker的命令
这部分不是特别难,会说就完了
会问之前公司规模,是否带过团队,团队多少人,如何处理团队矛盾,如何带领小组成员完成项目,你认为团队成员哪些品质最重要,有哪些经验心得,这部分就看自己实际经历了
会提问如果现在你面临一个需求,你需要怎么去处理,这个流程是什么,这个阶段有哪些注意项。
这部分和上面的小组带队属于开放性问题,你需要提前想好答案
或者说一些问题的解决方案,例如
数据库中有1000w数据,redis中只存10w的数据,如何保证redis中的数据都是热点数据
有文件10个G,内存1G,如何排序
一个秒杀系统,30分钟没付款就自动关闭该交易,该如何实现
如何使用命令监控Java项目运行情况?
这部分首先是提问你的项目过程,然后接下来根据项目进行扩展,扩展方面主要有业务和技术两方面
业务:主要是以项目的功能为主,主要是项目功能的细节,例如我的项目中有秒杀活动,那这时候面试官提问秒杀是常规还是活动秒杀,参加人群大概多少,秒杀后如何使用的
技术:项目使用的哪些技术,为什么用这个技术,秒杀时有没有出XXX类问题,如何解决的,其实还是高可用
这块其实应该在上面,写目录的时候忘了
JVM这块也是属于面试必问项
主要提问项有,JVM内存结构,JVM常用参数,JVM调优,之前公司的JVM参数设置,之前工作中都做过哪些JVM优化,内存泄露问题,JVM参数应该如何设置,CPU满full GC一直运行如何解决
主要是管理Linux相关问题,Linux常用命令,如何查看CPU使用情况,如何查看进程,如何查询文件,服务出现异常如何解决,线上系统突然变得异常缓慢如何查找问题
主要是一个项目中出现的场景解决方案,比如你之前开发的时候遇到过哪些问题引向深刻,如何解决的,问题最好高端大气上档次一点
除此之外还有之前公司中出现的问题也有可能问你,但是大部分还是属于第三方工具或者是服务的一些异常解决方案,比如redis丢失数据怎么解决,服务出现异常怎么解决,这一类的
这部分如果是进大厂就需要刷算法
如果不进的话就主要背一些基本代码题就好,这段时间的面试中遇到过的题目有
计算100以内尾数是3,5,9的值
冒泡排序
快速排序
实现链表
编写一段java程序,需实现的功能:采用两个以上的线程同时往一张表中插入20万条数据
手写两个设计模式
答案总结了下,不过目前不全面,后面有时间再补
https://blog.csdn.net/lihao1107156171/article/details/129826148