面试两个月总结的没回答上来的问题
疫情期间找工作,我也是吐了呀,有多难受可以想象,面试的时候,问题都能答上来,不顶用!你不只是要答上来,还要答得详细,答得有特点,不要怕面试有不会的怎么办,不会很正常,但是该会的你必须搞懂,搞透彻,再强调一次框架不重要,学一个框架用不了多久,重要的是基础,就这。基础不行,啥也不是!!
- Mycat的三个配置文件
(1) server.xml,schema.xml,rule.xml
- Tcp协议
(1) 三次握手
① 第一次客户端发送SYN=1,和随机生成的seq=J,同时客户端状态变为请求连接状态
② 第二次握手服务器端收到SYN=1知道了客户端在请求连接,就再生成一个seq=k,ACK=j+1,SYN=1,然后服务器端状态变为同步收到状态。
③ 第三次握手客户端收到ACK=j+1,seq=k后再次向服务器端传递ACK=k+1,然后客户端和服务器端状态都变为正在连接状态。
(2) 四次挥手
①
- Jdk8新特性
(1) 在interface中可以写非抽象方法,只需要在方法前面加上default就可以,这样在该接口的实现类上就可以直接调用这个方法。
- SQL优化
(1) Like %在前面会全表扫描
(2) 在表中建立索引,优先考虑where、group by使用到的字段。
(3) 尽量避免使用select *,返回无用的字段会降低查询效率
(4) 尽量避免使用in 和not in,会导致数据库引擎放弃索引进行全表扫描
(5) 尽量避免使用or,会导致数据库引擎放弃索引进行全表扫描
(6) 尽量避免在字段开头模糊查询(后面就没事),会导致数据库引擎放弃索引进行全表扫描
(7) 尽量避免进行null值的判断,会导致数据库引擎放弃索引进行全表扫描
- GC垃圾回收分两个代()
(1) Eden区和两个幸存者区默认比例为8:1:1
(2) Minor GC或YGC即年轻代GC,当new出来的对象不被其他对象引用时,就会被从内存中清除。发生YGC后没被清除的将会放到幸存者区
① 年轻代又分为三个区域,分别是Eden区和两个幸存者区(from和to)
② 在发生第一次GC前to中是没有东西的,第一次GC后,存活年龄达到阈值的会进入年老代,同时没有达到阈值的会被复制到to中,然后eden区和from区会被清空,之后原来的to在有内容后变成from区, 而原来的from区则变为to区,每一次发生GC from和to都会交换,如果GC后to区满了,那么to区中所有的对象都会被移动到年老代
(3) 在发生多次YGC还没被清除的就会被放到年老区。
4) 当年老区被放满时将会发生majorGC又称FullGC
(5) FullGC发生时会清理整个堆中的GC(包括年轻代和年老代)
- mybatis-plus的用法
- mybatis动态sql是什么,有那些?有什么好处?
- 什么是触发器?
- springMVC三个层的注解?
(1) @controller @Service @Repository
- Springboot关闭自动配置exclude参数
- @SpringbootApplication的原理
(1) @ComponentScan 用于类或接口上主要是指定扫描路径,spring会把指定路径下带有指定注解的类自动装配到bean容器里。
(2) @EnableAutoConfiguration 用于自动配置
(3) @springBootConfiguration 继承自@Configuration,二者功能也一致,标注当前类是配置类,并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到spring容器中,并且实例名就是方法名
- 乐观锁和悲观锁的实现方式
(1) Mysql版本号机制
在数据表中添加version字段,修改数据之前先读取版本号
比如当前版本是1,A和B获取到version=1,此时更新,那A和B的更新条件都为“version = 1”,如果A先提交了,此时表中该条数据version已经被A更新为2,B再提交,发现不满足“version=1”,所以无法更 新,排他异常。
(2) Java CAS来实现---这个不是太懂,所以没法说出来
(3) Mysql使用悲观锁需要先把事务的自动提交关闭,然后用select 。。。for update,
(4) Java中悲观锁即使用synchronized。
- 什么是线程安全
(1) 就是线程同步的意思,也就是说一个程序对一个线程安全的方法或语句进行访问的时候,其他线程必须等该线程访问完才能继续访问该方法。
- 线程死锁问题
(1) 一个线程因为一些原因无法释放锁,导致资源被一直占用。
(2) 让线程的执行按特定的顺序执行当几个线程都要访问共享资源A、B、C时,保证使每个线程都按照同样的顺序去访问它们,比如都先访问A,在访问B和C
- 说一下jmm内存模型
(1) Jmm中有主内存,工作内存,和线程,每个线程中都包含自己的工作内存,工作内存中放的是主内存中的共享变量的副本。
- 说一下JVM虚拟机内存模型
(1) 什么是堆:一些基本类型的变量和对象的引用变量
(2) 什么是栈:存放变量所指向的对象
程序计数器是用来存放线程执行的下一个指令的字节码,是为了保证线程的连续执行。