JAVA后端工程师笔试题
问题一:java关键字volatile的作用是什么?能保证原子性吗?
答:防止指令重排,不能保证原子性
问题二:四种线程池,如何配置线程池的线程数
答:如果是CPU密集型的 就用CPU核数*2
如果是IO密集型,CPU/(1-阻塞系统)
问题三:ConcurrentHashMap 的可以并发读,并发读写,并发写吗?用到的锁机制是什么?该锁的优点和缺点分别是什么?
答:。可以
优势:减少资源竞争,避免死锁出现
分段锁劣势:造成内存开销过多,性能会下降。
问题四:如果JAVA程序中抛出了java.lang.OutOfMemoryError:Java heap space ,请讲一下解决问题的思路。
答:先dump快照分析,确定是否内存泄露,然后检查配置参数设置是否合理,检查GC
二.框架
spring问题一:简单讲一下spring中aop是如何实现的。
答: 主业务A类中,辅助业务B切面在Spring项目启动时,A和B会组合成一个新的类C,在C类执行A类中,如果适当时机后,就会调用B类方法。C也就是我们所说的代理类。
spring问题二:简单讲一下spring MVC中的运行流程:
答:1.请求到DispatchServlet
2.通过HandlerMapper获取对应的Mapper
3.将Hander交给HanderAdapter,返回ModelView
4.ViewResolver进行视图解析
spring问题三?: beanFactory与 factoryBean的区别(该问题能基本反映对spring的熟悉程度)
答:前者是Spring bean的容器接口,交给Spring容器管理。后者是不直接返回 factoryBean本身,而是调用factoryBean和GetObeject方法,返回我们自己定义的对象。
spring问题四?: 简述三种IOC注入方式
1.setter注入
2.构造器注入
3.注解注入
原理:IOC是控制反转,正常情况下是A依赖B,所以需要A去实例化B,也就是A控制B的实现。spring提供的IOC是将所有实例交由spring管理,也就是所有对象自主实例化注入到spring容器,谁需要调用的时候去容器里面获取即可。主要解决对象依赖时,对对象管理的麻烦。
问:简述三种IOC注入方式
答:1. 通过Spring的getter 和setter方法注入
2.通过Spring容器提供的实例构造器方法注入
3.通过实例注解注入依赖
redis问题五:redis的两种持久化数据的方法是什么?它们分别有什么优缺点?
答:AOF:优点:适合灾难性恢复,可做到秒级持久化,不容易丢失
缺点:体积比较大,恢复慢
RDB:适合冷备份,体积小,可全量复制
缺点:粒度不够细,不能做到秒级持久化,容易丢失
mysql问题六:讲述数据库事务的四个隔离等级。讲述一下脏读,不可重复读,幻读。
答:ACID,原子性A 持久性C 隔离性I 一致性D
脏读:读到了其他事务修改后未提交的数据(两次数据不一致)
不可重复读:读到其他事务已提交的修改
幻读:同一个事务两次读的数据条数不一样
dubbo问题七:请简单描述一下dubbo的架构?
题目来源于 垃圾公司,老板pua拖延症严重,面试拖延题多,避开这家惠州思宏科技公司