java后端开发面试常问
面试常问问题
1 spring相关
(1)@Transactional失效的场景
<1> @Transactional注解默认只会回滚运行时异常(RuntimeException),如果方法中抛出了其他异常,则事务不会回滚(数据库数据仍然插入成功了)。
@Transactional(rollbackFor = Exception.class)
<2> 如果方法中有try catch语句,并且抛出的异常的代码被try捕获,那么方法上的@Transactional注解也会失效。
<3> 方法内调用,一个没有@Transactional注解的方法在内部调用了有@Transactional注解的方法,那么由于spring aop的代理会导致有@Transactional注解的方法的事务失效。
<4> 一个有@Transactional注解的方法中调用了@Async异步注解的方法,由于@Async是开启一个异步线程执行,和主线程不共享同一个事务,当主线程中有异常回滚后,@Async注解的方法不会回滚。
<5> 事务的方法被private和final修饰的,事务也会失效。
(2)
java相关
异常
java中的异常可以分为2大类:Error和Exception
Error:是程序无法处理的错误,通常和jvm或系统资源有关,如:内存溢出(OutOfMemoryError),当jvm没有足够内存时抛出。
Exception:程序本身可以处理的异常,包括运行时异常和非运行时异常(受检异常)。
运行时异常:是由程序逻辑错误引起的,java编译器不会检查它们。
非运行时异常:必须在代码中进行处理的异常。如:IOException、SQLException、FileNotFoundException
linux相关
jvm相关命令
1 列出所有的java进程:
jps
jps -l
2 监控jvm的各种统计信息
jsata pid
3 查看和调整运行中的java进程的配置参数
jinfo pid
4 生成java进程的内存转储快照
jmap pid
5 打印java线程的堆栈跟踪信息
jstack
6 监控java进程的可视化监控、管理工具
jconsole
jvisualvm