欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java面试题3

程序员文章站 2022-05-06 17:52:32
...

1、强引用、软引用、弱引用、虚引用与GC的关系?


https://blog.csdn.net/a568418299/article/details/78914637

2、String类为什么是final的?

1.为了实现字符串池        
2.为了线程安全        
3.为了实现String可以创建HashCode不可变性    首

先你要理解final的用途,在分析String为什么要用final修饰,final可以修饰类,方法和变量,并且被修饰的类或方法,被final修饰的类不能被继承,即它不能拥有自己的子类,被final修饰的方法不能被重写, final修饰的变量,无论是类属性、对象属性、形参还是局部变量,都需要进行初始化操作。在了解final的用途后,在看String为什么要被final修饰:主要是为了”安全性“和”效率“的缘故。

3、HashMap底层结构是怎样的?线程是否安全?如果线程不安全,怎么使用保证线程安全?


4、Volatile的含义?

用volatile修饰的变量,线程在每次使用变量的时候,都会读取变量修改后的最的值。volatile很容易被误用,用来进行原子性操作。

5、java创建线程后,直接调用start()方法和run()的区别?

run()方法:在本线程内调用该Runnable对象的run()方法,可以重复多次调用;

start()方法:启动一个线程,调用该Runnable对象的run()方法,不能多次启动一个线程;

6、数据库优化方案?

具体优化手段:
A:尽量少用(或者不用)sqlserver 自带的函数 
select id from t where substring(name,1,3) = ’abc’ 
select id from t where datediff(day,createdate,’2005-11-30′) = 0 
可以这样查询: 
select id from t where name like ‘abc%’ 
select id from t where createdate >= ‘2005-11-30’ and createdate < ‘2005-12-1’

B:连续数值条件,用BETWEEN不用IN:SELECT id FROM t WHERE num BETWEEN 1 AND 5 
C:Update 语句,如果只更改1、2个字段,不要Update全部字段,否则频繁调用会引起明显的性能消耗 
D:尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型 
E:不建议使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。尽量避免向客户 端返回大数据量,若数据量过大,应该考虑相应需求是否合理 
F:表与表之间通过一个冗余字段来关联,要比直接使用JOIN有更好的性能 
G:select count(*) from table;这样不带任何条件的count会引起全表扫描 
连接池调优 
我们的应用为了实现数据库连接的高效获取、对数据库连接的限流等目的,通常会采用连接池类的方案,即每一个应用节点都管理了一个到各个数据库的连接池。随着业务访问量或者数据量的增长,原有的连接池参数可能不能很好地满足需求,这个时候就需要结合当前使用连接池的原理、具体的连接池监控数据和当前的业务量作一个综合的判断,通过反复的几次调试得到最终的调优参数。
https://blog.csdn.net/u013628152/article/details/82184809

7、ArrayList与Vector的比较区别是什么?

•	线程安全:Vector 使用了 Synchronized 来实现线程同步,是线程安全的,而 ArrayList 是非线程安全的。
•	性能:ArrayList 在性能方面要优于 Vector。
•	扩容:ArrayList 和 Vector 都会根据实际的需要动态的调整容量,只不过在 Vector 扩容每次会增加 1 倍,而 ArrayList 只会增加 50%。

8、BIO、NIO和AIO的区别?

•	BIO:Block IO 同步阻塞式 IO,就是我们平常使用的传统 IO,它的特点是模式简单使用方便,并发处理能力低。
•	NIO:New IO 同步非阻塞 IO,是传统 IO 的升级,客户端和服务器端通过 Channel(通道)通讯,实现了多路复用。
•	AIO:Asynchronous IO 是 NIO 的升级,也叫 NIO2,实现了异步非堵塞 IO ,异步 IO 的操作基于事件和回调机制。

https://blog.csdn.net/meism5/article/details/89469101

9、当数据表中A、B字段做了组合索引,那么单独使用A或单独使用B会有索引效果吗?(使用like查询如何有索引效果)?


10、一条sql执行时间过长,你如何优化,从哪些方面?

1、查看sql是否涉及多表的联表或者子查询,如果有,看是否能进行业务拆分,相关字段冗余或者合并成临时表(业务和算法的优化)

2、涉及链表的查询,是否能进行分表查询,单表查询之后的结果进行字段整合

3、如果以上两种都不能操作,非要链表查询,那么考虑对相对应的查询条件做索引。加快查询速度

4、针对数量大的表进行历史表分离(如交易流水表)

5、数据库主从分离,读写分离,降低读写针对同一表同时的压力,至于主从同步,mysql有自带的binlog实现 主从同步

6、explain分析sql语句,查看执行计划,分析索引是否用上,分析扫描行数等等

7、查看mysql执行日志,看看是否有其他方面的问题

11、Spring实现AOP方式?


12、redis是如何持久化配置?


13、项目中缓存是如何使用的?为什么要用缓存?缓存使用不当会造成什么后果?

用缓存,主要有两个用途:高性能、高并发。
缓存是走内存的,内存天然就支撑高并发。
常见的缓存问题有以下几个:
	缓存与数据库双写不一致
	缓存雪崩、缓存穿透
	缓存并发竞争