如何正确的退出多层嵌套循环?
-
使用标号和 break;
-
通过在外层循环中添加标识符
内部类的作用
final, finalize 和 finally 的不同之处
clone()是哪个类的方法?
深拷贝和浅拷贝的区别是什么?
static 都有哪些用法?
final 有哪些用法
数据类型相关
======
java 中 int char,long 各占多少字节?
64 位的 JVM 当中,int 的长度是多少?
int 和 Integer 的区别
int 和 Integer 谁占用的内存更多?
String, StringBuffer 和 StringBuilder 区别
String 和 StringBuffer
StringBuffer 和 StringBuilder
什么是编译器常量?使用它有什么风险?
java 当中使用什么类型表示价格比较好?
如何将 byte 转为 String
可以将 int 强转为 byte 类型么?会产生什么问题?
关于垃圾回收
======
你知道哪些垃圾回收算法?
垃圾回收从理论上非常容易理解,具体的方法有以下几种:
1. 标记-清除
2. 标记-复制
3. 标记-整理
4. 分代回收
如何判断一个对象是否应该被回收
简单的解释一下垃圾回收
调用 System.gc()会发生什么?
进程,线程相关
=======
说说进程,线程,协程之间的区别
你了解守护线程吗?它和非守护线程有什么区别
什么是多线程上下文切换
创建两种线程的方式?他们有什么区别?
Thread 类中的 start()和 run()方法有什么区别?
怎么检测一个线程是否持有对象监视器
Runnable 和 Callable 的区别
什么导致线程阻塞
阻塞指的是暂停一个线程的执行以等待某个条件发生(如某资源就绪),学过操作系统的同学对它一定已经很熟悉了。Java 提供了大量方法来支持阻塞,下面让我们逐一分析。
wait(),notify()和 suspend(),resume()之间的区别
产生死锁的条件
为什么 wait()方法和 notify()/notifyAll()方法要在同步块中被调用
wait()方法和 notify()/notifyAll()方法在放弃对象监视器时有什么区别
wait()与 sleep()的区别
为什么 wait, nofity 和 nofityAll 这些方法不放在 Thread 类当中
怎么唤醒一个阻塞的线程
什么是多线程的上下文切换
synchronized 和 ReentrantLock 的区别
FutureTask 是什么
一个线程如果出现了运行时异常怎么办?
Java 当中有哪几种锁
如何在两个线程间共享数据
如何正确的使用 wait()?使用 if 还是 while?
什么是线程局部变量 ThreadLocal
ThreadLoal 的作用是什么?
生产者消费者模型的作用是什么?
写一个生产者-消费者队列
使用阻塞队列来实现
//消费者``public class Producer implements Runnable{
private final BlockingQueue<Integer> queue;
public Producer(BlockingQueue q){
this.queue=q;
}
@Override
public void run() {
try {
while (true){
Thread.sleep(1000);//模拟耗时
queue.put(produce());
}
}catch (InterruptedException e){
}
}
private int produce() {
int n=new Random().nextInt(10000);
System.out.println("Thread:" + Thread.currentThread().getId() + " produce:" + n);
return n;
}``}``//消费者``public class Consumer implements Runnable {
private final BlockingQueue<Integer> queue;
public Consumer(BlockingQueue q){
this.queue=q;
}
@Override
public void run() {
while (true){
try {
Thread.sleep(2000);//模拟耗时
consume(queue.take());
}catch (InterruptedException e){
}
}
}
private void consume(Integer n) {
System.out.println("Thread:" + Thread.currentThread().getId() + " consume:" + n);
}``}``//测试``public class Main {
public static void main(String[] args) {
BlockingQueue<Integer> queue=new ArrayBlockingQueue<Integer>(100);
Producer p=new Producer(queue);
Consumer c1=new Consumer(queue);
Consumer c2=new Consumer(queue);
new Thread(p).start();
new Thread(c1).start();
new Thread(c2).start();
}``}
复制代码
使用 wait-notify 来实现
如果你提交任务时,线程池队列已满,这时会发生什么
为什么要使用线程池
java 中用到的线程调度算法是什么
Thread.sleep(0)的作用是什么
什么是 CAS
什么是乐观锁和悲观锁
ConcurrentHashMap 的并发度是什么?
ConcurrentHashMap 的工作原理
jdk 1.6:
ConcurrentHashMap 是线程安全的,但是与 Hashtablea 相比,实现线程安全的方式不同。Hashtable 是通过对 hash 表结构进行锁定,是阻塞式的,当一个线程占有这个锁时,其他线程必须阻塞等待其释放锁。ConcurrentHashMap 是采用分离锁的方式,它并没有对整个 hash 表进行锁定,而是局部锁定,也就是说当一个线程占有这个局部锁时,不影响其他线程对 hash 表其他地方的访问。
具体实现:ConcurrentHashMap 内部有一个 Segment.
jdk 1.8
在 jdk 8 中,ConcurrentHashMap 不再使用 Segment 分离锁,而是采用一种乐观锁 CAS 算法来实现同步问题,但其底层还是“数组+链表->红黑树”的实现。
CyclicBarrier 和 CountDownLatch 区别
java 中的++操作符线程安全么?
你有哪些多线程开发良好的实践?
关于 volatile 关键字
===============
可以创建 Volatile 数组吗?
volatile 能使得一个非原子操作变成原子操作吗?
volatile 类型变量提供什么保证?
关于集合
====
Java 中的集合及其继承关系
关于集合的体系是每个人都应该烂熟于心的,尤其是对我们经常使用的 List,Map 的原理更该如此.这里我们看这张图即可:
poll()方法和 remove()方法区别?
LinkedHashMap 和 PriorityQueue 的区别
WeakHashMap 与 HashMap 的区别是什么?
ArrayList 和 LinkedList 的区别?
ArrayList 和 Array 有什么区别?
ArrayList 和 HashMap 默认大小?
Comparator 和 Comparable 的区别?
如何实现集合排序?
如何打印数组内容
LinkedList 的是单向链表还是双向?
TreeMap 是实现原理
遍历 ArrayList 时如何正确移除一个元素
什么是 ArrayMap?它和 HashMap 有什么区别?
HashMap 的实现原理
Fail-fast 和 Fail-safe 有什么区别
关于日期
====
SimpleDateFormat 是线程安全的吗?
如何格式化日期?
关于异常
====
简单描述 java 异常体系
什么是异常链
throw 和 throws 的区别
关于序列化
=====
Java 中,Serializable 与 Externalizable 的区别
关于 JVM
======
JVM 特性
简单解释一下类加载器
简述堆和栈的区别
简述 JVM 内存分配
其他
==
java 当中采用的是大端还是小端?