面试问题总结
项目经验
1.主流技术框架必须包括的,SSM,缓存,MQ,微服务。
2.复杂业务,简单的CRUD也可以,面试初级程序员就可以的,但是高级就不可以了。
3.并发多线程场景,这是加分项,spring线程池的使用,多线程什么场景里用,说的清楚。
4.第三方接口调用,如调用银行接口,里面关于异常怎么定义啊,失败机制,重试机制,幂等机制。
5.代码的优雅设计,项目中用了模块,单例,高级泛型,异常设计,日志,拦截器,自定义注释,枚举高级特性。
6.java8新特性,如java流式语法的好处,常见的方法。
多线程同步的实现方式
synchroized关键字
同步方法:
即有synchroized关键字修饰的方法。由于java的每个对象都有一个内置锁,当用此关键字修饰方法时,内置锁会保护整个方法。在调用该方法前,需要获得内置锁,否则就处于阻塞状态。
synchronized【锁】总结
-
方法里 static synchronized 和 synchronized(类)都是锁所有类,非 static synchronized 和 synchronized(this)都是锁对象
-
记住锁的不是代码,而是对象【类就是所有对象】
-
【关键点】能不能同时执行,只要看锁获得的是哪个对象就行,其他需要这个锁的方法都不能同时执行,不需要这个锁的方法都能同时执行。
-
只有锁同一个对象才行。
hashcode作用
pass
error和exception有什么区别
Error:程序无法处理的系统错误,编译器不做检查。
Error表示系统致命的错误,程序没法处理。
一般是与JVM相关的问题,如系统崩溃,内存溢出,方法调用栈溢出等,如:经常遇到的StackOverflowError、OutOfMemoryError。
这种类型的错误,编译器不做检查,都是系统运行过程中发生的。
这些错误靠我们程序本身是无法处理与预防的,遇到了建议直接程序中止、重启。
Exception:程序可以处理的异常,捕获后可处理。
Exception异常是程序能够捕获的,也可以做异常处理,
我们要尽可能的去处理,使程序继续运行,而不是中止程序。
总结一下就是Error是程序无法处理的错误,Exception是可以处理的异常。
redis实际项目应用
如何解决Redis缓存与MySQL数据一致性的问题?
如何利用Redis锁解决高并发问题?
springAOP项目中的实际应用
建议从项目中的事务注解讲起
如果项目有实际应用的AOP自定义注解更好,
没有也不要慌把spring自带的事务注解讲明白也可以
面试官主要考察有没有AOP的思想,
实际项目中AOP应用太广泛了 日志,权限,事务等等都可以利用AOP去完成统一设计.
mysql索引失效和创建原则
解决什么生产问题
你先要熟悉linux基本命令,(传送门 linux之解决生产问题必备命令「日志快速定位分析」)
排查日志你首先要知道关键字,比如产品ID等等ID,
命令
|
搜索关键字
|
定位到日志信息log
|
看堆栈信息
|
分析具体异常原因(结合你实际问题场景)
如果是分布式系统,有一个关键字叫traceId (非常强大)