大致问了如下几个问题,面试官问的偏实际应用。
1.数据库的事务隔离等级
答:数据库的事务有四个特性:原子性、一致性、隔离性、持久性。隔离等级有四种,分别为读未提交、读已提交、可重复读、串行化。读未提交未解决并发问题,读已提交解决了数据脏读,可重复读解决了数据脏读和不可重复读、串行化结局了脏读、不可重复读和幻读。
2.Spring的原理
内部核心内容是IOC,动态注入,即依赖倒置,其原理简单来讲就是使得对象的创建不需要new了,而是可以自动的生成,其实就是利用java中的反射。Spring在运行时,利用配置文件来动态的创建对象和调用对象中的方法。
Spring另一个核心内容是AOP,面向切面编程。即通过一种横向抽取机制,将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,也就是切面,通过将横切逻辑代码与业务代码分离,在不改变原有代码的基础下,将逻辑增强部分应用到原有业务中,从根本上解耦,避免大量的重复操作,降低了模块间的耦合度,提高了系统的可维护性
Spring是一个容器,只有在该容器里的对象才会有Spring所提供的这些服务和功能。
3.mysql的优化
遵从五个原则:
1.减少数据访问:设置合理的字段类型,启用压缩,通过索引访问等减少磁盘IO
2.返回更少的数据:只返回需要的字段和数据分页处理,减少磁盘io及网络io
3.减少交互次数:批量DML操作,函数存储等减少数据连接次数
4.减少服务器CPU开销:尽量减少数据库排序操作以及全表查询,减少cpu内存占用
5.利用更多资源:使用表分区,可以增加并行操作,更大限度利用cpu资源
集中的三点即:最大化利用索引,尽可能避免全表扫描,减少无效数据的查询
4.线程池
应用场景:秒杀,购票系统。 有并发的地方、任务数量大或小、每个任务执行时间长或短的都可以使用线程池。
线程池的优势有:
1.线程和任务分离,提升线程重用性;
2.控制线程并发数量,降低服务器压力,统一管理所有线程;
3.提升系统响应速度,假如创建线程用的时间为T1,执行任务用的时间为T2,销毁线程用的时间为T3,那么使用线程池就免去了T1和T3的时间;
5.Redis缓存中间件
具体问题记不清了......