1. 静态变量和实例变量的区别。它们加载的时机是什么时候?
- 静态变量前要加static关键字,而实例变量前不加。
- 静态变量属于类,在加载类的时候,就加载了静态变量。
- 实例变量属于对象的属性,创建了实例对象,实例变量才会被分配空间。
- 静态变量可以直接使用类名来调用,实例变量必须创建对象之后才来使用。
参考博客:https://blog.csdn.net/hjq_ku/article/details/122452611
2. 包装类和基本数据类型的区别?
a、包装类是对象,拥有方法和字段,对象的调用都是通过引用对象的地址;基本类不是。
b、包装类型是引用的传递;基本类型是值的传递
c、声明方式不同:
基本数据类型不需要new关键字;
包装类型需要new在堆内存中进行new来分配内存空间
d、存储位置不同:
基本数据类型直接将值保存在值栈中;
包装类型是把对象放在堆中,然后通过对象的引用来调用他们
e、初始值不同:
int的初始值为 0 、 boolean的初始值为false
包装类型的初始值为null
f、使用方式不同:
基本数据类型直接赋值使用就好;
包装类型是在集合如 coolectionMap时使用
参考博客:https://blog.csdn.net/weichi7549/article/details/108745119
3. 面向对象的几个特征
有四大特征:
抽象
封装
继承
多态
https://m.php.cn/faq/421584.html
4. 抽象类和接口的区别
抽象类是类只能被单继承,接口可以被多实现。
接口中只能有抽象方法,抽象类中有抽象方法,也可以有普通的方法。
接口使用的是interface关键字,抽象类用abstract class来定义。
https://blog.csdn.net/qq_47908816/article/details/126236967
5. String、StringBuffer、StringBuilder的区别
String是不可变的,StringBuffer和StringBuilder是可变的。
String、StringBuffer是线程安全的,StringBuilder是线程不安全的。
不安全的速度最快,安全的慢一些,String最慢。
https://blog.csdn.net/zxl646801924/article/details/84646918
6. HashMap扩容原理,什么时候扩容?
这里回答的不好,需要重点学习一下。
当hashmap中的元素个数超过数组大小*loadFactor时,就会进行数组扩容,loadFactor的默认值为0.75,也就是说,默认情况下,数组大小为16,那么当hashmap中元素个数超过16*0.75=12的时候,就把数组的大小扩展为2*16=32,即扩大一倍,然后重新计算每个元素在数组中的位置。
7. Java的序列化与反序列化。
实现了数据的持久化,通过序列化可以把数据持久地保存在硬盘上(磁盘文件)。
利用序列化实现远程通信,在网络上传输字节序列。
8. union和union all的区别?哪个速度快
union会去重,进行默认规则排序。
union all 不会去重 ,不会进行排序,速度快。
https://blog.csdn.net/a200822146085/article/details/119545374
9. 是否设计过数据库,数据库的三范式?
第一范式:保证每列的原子性,不可再拆分。
第二范式:保证一张表只描述一件事情。有主键,非主键字段依赖主键。
第三范式:保证每列都和主键直接相关。非主键字段不能相互依赖。
https://blog.csdn.net/charlesyoosky/article/details/89204229
https://baijiahao.baidu.com/s?id=1703973144064369296&wfr=spider&for=pc
10. 主键索引和唯一索引的区别。
主键是一种约束,一张表只有一个;
唯一索引是一个索引,可以为多个字段设置唯一索引。
唯一索引允许为空,主键列不允许为空值。
11. Sql语句优化的思路?
尽量避免全表扫描,考虑在where及order by涉及的列上建立索引。
尽量避免可能引起索引失效的写法,例如:
1 对null进行判断。
2 使用or来连接,or可以改写为 union all
3 避免使用like操作。
4 避免使用in 和 not in , 尽量使用 between and。
等其他操作。
参考博客:https://blog.csdn.net/biyusr/article/details/125599865
12. 视图是否会自动刷新,如何实现视图的自动刷新?
单表的视图会自动刷新。多表的视图不会自动刷新。
可以使用触发器实现视图的自动刷新。
13. 谈谈对IOC的理解?
这里主要分为两方面去谈,一个是对象的创建交给ioc容器去创建与管理,一个是依赖注入。
14. @autowired默认注入方式是什么?构造器注入的前提条件与setter方法注入前提条件。
默认注入方式是根据类型去注入,类的名称。
set方法注入前提条件:在配置的类中有对应属性的set方法。
构造器注入前提条件:在配置的类中有对应的有参构造器。
https://blog.csdn.net/m0_52325708/article/details/125669000
15. 谈谈对AOP的理解?
面向切面,抽离出一些与业务无关的操作,例如记录日志、事务管理。
16. Spring的AOP中环绕通知与后置通知的执行顺序?
最新spring版本环绕通知在最后。
17. MQ解决了什么痛点?
异步、解耦、消峰
https://blog.csdn.net/lisu061714112/article/details/116465216
18. Redis的主从架构与哨兵模式。哨兵是如何选主的?
哨兵也是分布式集群架构,当主宕机后,哨兵会进行监控,通过选举投票来选择一个主。哨兵会把自己选择主的消息发给其他的哨兵,如果大多数都同意,那么就选定了主。
参考博客:https://blog.csdn.net/a745233700/article/details/112451629
19. Redis数据量过大,占用内存,如何解决?
采用热点数据定时过期的方式。
参考博客:http://www.muzhuangnet.com/show/47034.html
20. Mybatis的映射器,xml文件与接口是如何映射的?
通过反射的方式拿到接口的类型然后再来对应相应的xml文件。
参考博客:https://blog.csdn.net/weixin_38192427/article/details/123340994
21. Mybatis的xml文件的引入方式,有哪几种?
绝对路径引入:url
相对路径引入:resource
mapper接口引入:class
package引入:name
参考博客:https://www.jianshu.com/p/f08ca40e7260
22. Mybatis的大概执行流程是怎样的?
解析配置文件,获取数据源信息,建立连接。
解析mapper文件,获取sql语句,执行sql。
解析执行结果,并返回。
https://blog.csdn.net/fengzhizi520m/article/details/118330815
23. Mybatis的配置文件可以配置哪些内容?
environments: 环境配置,一些数据源信息等。
properties:属性信息,可以进行动态的设置值。
typeAliases: 类型别名.
plugins: 插件。等
参考博客:https://blog.csdn.net/weixin_44688973/article/details/125891522
24. Mybatis的一级缓存与二级缓存?什么时候用到一级缓存,什么时候用到二级缓存?
一级缓存是sqlsession级别,二级缓存是mapper级别。一级缓存是默认开启,二级缓存默认没有开启。查询的时候,会先看缓存里有没有,有就取缓存,没有就去取数据库,然后存入缓存。那么是如何找到缓存的?缓存是根据id,sql语句作为key来存储,下次再根据这个key来查找就可以了。
其他:又到了金九银十面试季,且面且珍惜。初面为电话面试, 对Java系列的基本功考察还是比较多,总体难度不大,面试体验比较好。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/288676.html