1、Spring是什么?
spring是一个开源的轻量级框架;提供了javaee各层的解决方案,简化了程序的开发;两大核心是IOC和AOP,IOC控制反转,将控制对象的权利交给spring工厂进行管理,aop是面向切面编程,一种编程思想,可以在不修改原对象的情况下,通过代理对象,对原业务的方法进行增强,可以用于事务,日志等。
2、mysql的exist和in的执行计划
exist适合子查询中表的数据大于外部查询表中数据的业务场景;in适合外部查询表数据大于子查询的表数据的业务场景。
exist:先执行外部查询的语句,再执行子查询,子查询中每次都会去执行数据库的查询,执行次数等于外部查询的数据量。
in:先查询in()中子查询的数据,再将结果存储在内存中,然后外部查询,根据查询结果过滤。
3、mysql数据库优化
a、表的合理化设计
要符合三大范式,还要选择合适的字段属性
b、优化sql语句
尽量少使用联表查询,用join来代替子查询,使用联合来代替手动创建临时表,使用事务,使用索引等
c、分表分区、读写分离
d、存储过程
e、定时去清除不需要的数据,定时进行碎片整理
4、多线程的运用场景
使用多线程的目的:吞吐量,伸缩性;
使用场景
常见的浏览器、web服务,web请求处理等;
servlet多线程;
ftp下载,多线程操作文件;
数据库用到的多线程;
分布式计算;
Tomcat内部采用多线程;
异步处理:如微博日志等
5、java泛型
是JDK5中引进的一种新特性,提供了编译时类型安全检测机制,在编译时检测类型是否合法。在编译时起作用,运行期不起作用,字节码中不包含泛型中的类型信息;使用泛型加的类型参数,会被在编译为字节码的时候去掉,这就是类型擦除。
6、对redis的了解
出现背景:随着访问量大幅增加,web服务器和数据库服务器压力增大以及session的安全问题;
适用场景:对数据高并发读写;大量数据读写;对数据高可扩展性,速度快;例如一些热点数据,榜单;
数据类型:String类似于字符串;list类似于java的ArrayList;hash类似于hashmap存放k,v;set去重但不保证顺序;zset保证插入顺序
持久化:rdb,默认方案,在设定时间内发生指定量的数据修改,就会进行快照保存;aof方案会把每次写的请求都记录在日志文件中,在redis重启时会执行一遍;
缓存击穿:指用户请求的数据不在redis缓存中时,只能去后端数据库查找数据。当这种请求很多事就会给后端数据库造成巨大压力。可以使用redis计数器,每次查询数据的key都可以用计数器记录,判断出热点数据,保存到redis中;
缓存雪崩:就是redis宕机,缓存数据全部失效,就只能去后端数据库查找,可以使用主从复制,哨兵模式,集群来预防;
7、什么是远程调用
指进程间的功能调用;
调用方式:套接字调用;rpc服务调用;web service调用;web api调用
很多都是前辈们总结的答案,我自己也是想给自己遇到的面试题进行整理一下,感谢前辈们无私的分享!