java2020面试题

如果一个对象的引用被设置为null, gc会立即释放该对象的内存么?

不会, 这个对象将会在下一次gc循环中被回收.

HashMap和HashTable的区别

HashTable是线程安全的,而HashMap不是

HashMap中允许存在null键和null值,而HashTable中不允许

抗住千万级流量系统的架构思路?

1)实现高并发

服务拆分:将整个项目拆分成多个子项目或模块,将项目平行扩展;

服务化:使用服务注册与发现;

消息队列:解耦、异步处理;

缓存:各种缓存带来的并发;

2)实现高可用

集群、限流、降级、数据库(读写分离、主从分离);

3)业务设计

Nginx代理等。

Class.forName 方法的目的是什么?

此方法用于加载驱动程序,以建立与数据库的连接。

fail-fast与fail-safe的区别?

Iterator的fail_safe特性是对底层集合的拷贝进行操作, 因此对集合的任何改变都不会有影响. java.util包下的所有集合类是fail-fast的, 但java.util.concurrent包下的集合类是fail-safe的. fail-fast叠代器会抛出ConcurrentModificationException, 而fail-safe叠代器不会抛出这种异常.

如何避免死锁?

Java多线程中的死锁 死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。这是一个严重的问题,因为死锁会让你的程序挂起无法完成任务,死锁的发生必须满足以下四个条件:

互斥条件:一个资源每次只能被一个进程使用。
请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
避免死锁最简单的方法就是阻止循环等待条件,将系统中所有的资源设置标志位、排序,规定所有的进程申请资源必须以一定的顺序(升序或降序)做操作来避免死锁。

序列化与反序列化:

序列化指将java对象转化为字节序列,反序列化相反。主要是为了java线程间通讯,实现对象传递。只有实现了Serializable或Externalizable接口类对象才可被序列化。

遍历ArrayList时如何正确移除一个元素

该问题的关键在于面试者使用的是 ArrayList 的 remove() 还是 Iterator 的 remove()方法。这有一段示例代码,是使用正确的方式来实现在遍历的过程中移除元素,而不会出现 ConcurrentModificationException 异常的示例代码。

JDBC最佳实践

优先使用批量操作来插入和更新数据
使用PreparedStatement来避免SQL漏洞
使用数据连接池
通过列名来获取结果集

WeakReference与SoftReference的区别?

这点在四种引用类型中已经做了解释,这里简单说明一下即可: 虽然 WeakReference 与 SoftReference 都有利于提高 GC 和 内存的效率,但是 WeakReference ,一旦失去最后一个强引用,就会被 GC 回收,而软引用虽然不能阻止被回收,但是可以延迟到 JVM 内存不足的时候。

java面试题:java题目

群1056899650

发布了7 篇原创文章 · 获赞 1 · 访问量 111

猜你喜欢

转载自blog.csdn.net/tutoulg/article/details/104730314