写在前边:
自己带了近俩年的俩个小伙伴要脱离公司,去北上发展,自己其实提供不了太多帮助,想起自己那几年在帝都面试or被面试的场景,在看看他们迷茫的不知道该准备点什么知识去应对面试的情况下,思考了一下午,写到手腕发疼,于是就有了下边的内容。(本来不准备开放,但是想想也会有像他们一样一到俩年认真工作的小伙伴们准备跳槽...只是个人凭个人面试被面经验出发,不一定全面,仅供参考)。
JAVA面试需要注意点。
知识点: 【加粗为必掌握项、斜体为了解项、下划线为加分项[csdn下划线不显示,想了半天就代码块替代吧]】
基础(该项内容掌握越多越优越)
java的集合容器 -> 各自的父类or接口, <u>各自底层算法与扩容机制</u>
, 各自工具类方法。
多线程 -> 生命周期,<u>应用场景or解决方案、并行、并发实现多线程的方式(方法)</u>
,死锁高级线程知识eg:线程阻塞、线程锁等。
反射与对象拷贝 -> 反射的概念、对象拷贝的概念,<u>深浅拷贝的区别,序列化与反序列化</u>
,对象拷贝的应用场景。
异常 -> 异常概念知识,<u>异常与错误的区别</u>,<u>运行时异常与非运行时异常(编译异常?)有哪些</u>。
如何在项目中写最大异常类与其应用场景。
设计模式 -> 代理模式、工厂模式、单例模式、建造者模式,<u>动态工厂模式、动态代理模式的应用场景、如何实现动态代理、如何实现动态工厂模式</u>,
spring(spring boot) 为什么要用动态代理模式来设计。
网络 -> 三次握手,http与https的区别,<u>300、400、500响应码代表什么、跨域(同源策略)、如何实现跨域(解决跨域的几种方式)。</u>
,TCP、OSI七层模型、
java web -> 其实这项问的很少了、主要需要 session 与 cookie的区别、get与post的区别,<u>session的工作原理(其实基于cookie)</u>
java8新特性 -> 这一项单独写出来,可见其重要性,这里没什么需要掌握的、毕竟代码多,<u>但是需要知道java新特性有些啥</u>,
函数式编程(lambda表达式)的优点缺点(理解项)。
框架 (该项内容为重点加强项)
Spring -> 注解(越多越好、并且需要知道解决什么问题),注入方式、bean的作用域、如何开启注解,<u>底层原理</u>,<u>工作原理</u>,<u>spring的模块有哪些</u>,<u>IOC/DI/AOP</u>
,spring 中单例bean 的线程问题,<u>@Component与@Bean的区别</u>、
这里有个超级加分项,不过也是个大坑。-> spring 事务、隔离级别、事务等级、注解、应用场景
Spring Boot -> 注解(越多越好、并且需要知道解决什么问题),<u>如何更改bean的加载顺序、如何解决相同id的bean的注入。</u><u>有哪些start</u>
,spring 与 spring boot 的区别,<u>spring boot启动类的注解由那些注解构成、*各自作用*</u>
,spring boot中定时任务的实现、spring boot start各自的作用。
Spring Cloud -> 注解(越多越好、并且需要知道解决什么问题),<u>spring cloud一般上来会问 有那些组件、各自的用途</u>,<u>分布式、微服务、集群各自区别、概念、</u>
应用场景,<u>RPC与REST的区别</u>。
这里有个超级加分项,不过也是个大坑,弄不好整个面试都丢掉。-> 微服务的事务解决方案
MyBatis -> 注解(越多越好、并且需要知道解决什么问题),这个一般问一个经典问题 -> # 与 $ 的区别,说了区别最好说下是如何防止的,二级缓存。
MyBatis plus -> 多租户、与mybatis的区别。
中间件 (该项中有则加分无则扣分)
MQ系列 -> 这东西,队列有几种、区别、<u>应用场景</u>。
ELK系列 -> 这东西、随着大数据、高并发一度狂热,眼下成了面试的亲儿子,(注意:应用场景一定要心中有数、比如你用来做搜索引擎,那为什么要用他,又或是日志收集,那你为什么又要用他),搭建不会问你怎么搭,他也不会让你亲自电脑搭建,你只需要知道他的原理,以及用作搜索应用(<u>分词器、高亮</u>
)。
shiro -> 单独写出来,可见其重要性,你要知道,没有一个项目是不需要授权模块的,不是Spring Security就是它,你不需要立刻上手了解他,但是你需要知道他的实现方式,最起码类名你得记几个。
activiti -> 这东西如果你会、想加分写就对了、如果不会、那就不要自找麻烦。需要了解那几个工作引擎类。
DB(这是你吃饭的家伙,你说呢!)
关系型数据库 -> mysql的聚合函数(<u>需要知道一些特殊的、非常常见的</u>
)、左 join,内 join、右 join的区别,执行一条查询语句,mysql是如何处理的(其实就是底层的运行机制)、<u>mysql的数据库引擎,那俩个(i 与 m)的区别</u>
,行锁、表锁,超级加分项 -> <u>事务</u>
、事务的特性、<u>如何开启一个事务</u>
,隔离级别与其对应出现的问题。
非关系型数据库 -> redis、mongodb的区别、应用场景,redis的数据类型常问的问题 redis挂掉了怎么办
,redis如何落地,等等实际应用问题,你要么说 应用场景简单,要么就背一段高级的,不过毕竟没实际应用场景,所以你觉得怎么来舒服就怎么来。
送命题 (为什么叫送命题呢、这些题看你是否敢写,敢答、工作经验敢够 {悄悄跟你讲,这些都会使简历眼前一亮})
JVM -> 这不用说了,我tm也不太懂,<u>调优、jvm的组成、各自的职责</u>
,你不怕死随便写。
大数据 -> 这东西、别了、我反正不敢写、毕竟那些大数据框架我一个也不认识,如果你愿意那就随意找网上的随意写写,可以给简历增加亮点,碰上真大佬你就GG了。
算法 -> 帝都 10家公司,4家可能有机试、或者笔试、这东西、你就练吧、不练也没办法啊,这我怎么给你找标准答案。 <u>位移可以了解,有时候会口头问你,比如 2 向右位移2位 是多少?</u>
项目 -> 这个真的是重点中的重点,第一、你一定要有一个上线的项目(好在你们都有、而且不止一个)。第二、你自己负责过的东西,一定要牢记心中,熟悉每一个业务流程,如果忘了,那就不要继续下去,破坏影响分(但这个指的是前1年左右的项目、而不是最后的项目,最后的你忘了,那你就真凉了),第三、有些复杂的业务、一定要提前说、自己代码上是如何实现的,能套知识点就套知识点,啥切面、拦截器、设计模式、一把套就对了,前提是你对这些都有了解。
逻辑思维或者说现场应答能力
一般分为算法题,比如啥黑皇后,二分、(什么鸡蛋从几楼扔下去会碎啥的),这个可以做了解,现场大胆答就行,有时候面试的提出来,他也不一定就能想好答案,实际考验你的其他方面。
二般就是有个啥样的功能,让你从DB开始设计,这种一定不要慌,一定不要慌,一定不要慌,找笔、找字,往下写就对了,尽量接口驱动DB,这样不会被抓住啥状态忘了、或者设计缺陷啥的。
最后,祝各位相识一场的小伙伴,北上一切顺利,找到自己可以发展提高自己的平台,不论大小,有提升就好.