== 和 equals 的区别==: ==判断两个引用是否指向同一个内存地址。equals: Object 类中的方法,默认行为和 == 一致,但可以被重写。String 类重写了 equals 方法,比较的是字符串的内容,而不是内存地址。equals 的过程中需要注意的事情x.equals(x) 为 true。x.equals(y) 为 true,则 y.equals(x) 也为 true。x.equals(y) 和 y.equals(z) 为 true,则 x.equals(z) 也为 true。x.equals(y) 结果始终一致,前提是对象未被修改。hashCode 一致:如果两个对象 equals 返回 true,则其 hashCode 也必须相等。hashCode:重写 equals 时应同步重写 hashCode 方法,以确保 HashMap 等集合的正确性。String a = new String("111");
String b = new String("111");
System.out.println(a == b); // 输出 falsenew String("111") 会创建新的对象,a 和 b 是两个不同的对象,== 比较的是引用地址。String a = "111";
String b = "111";
System.out.println(a == b); // 输出 truea 和 b 指向同一个常量池地址。hashCode 方法计算键的哈希值,再通过 (n - 1) & hash 计算出数组索引。put null 会怎样?null 只会被映射到数组的第一个位置(索引 0)。null 无限制,可以存储任意多个。put null:
null 键 put 值,只会覆盖之前的值,不会产生冲突或其他问题。ArrayList 和 LinkedList 的区别ArrayList 是基于动态数组实现,随机访问性能更好,但插入和删除元素(尤其中间位置)性能较差。LinkedList 是基于双向链表实现,插入和删除性能较好,但随机访问性能较差。Collections.synchronizedList 或 CopyOnWriteArrayList。List 应该使用哪一个?CopyOnWriteArrayList: concurrent 包的了解及实际应用ConcurrentHashMap:线程安全的哈希表,分段锁机制提高并发性能。CopyOnWriteArrayList:适合读多写少的场景。BlockingQueue:线程安全的队列,用于生产者-消费者模型。ExecutorService:线程池框架。ThreadPoolExecutor)处理高并发任务。ConcurrentHashMap 作为缓存。BlockingQueue 实现任务队列。AbortPolicy: RejectedExecutionException。FixedThreadPool 的默认队列长度及潜在问题LinkedBlockingQueue,队列长度为无界。CountDownLatch 或 CyclicBarrier: CountDownLatch:用于等待一组线程完成任务。CyclicBarrier:用于一组线程相互等待,直到全部到达屏障点。InputStream 和 OutputStream)。Reader 和 Writer)。RandomAccessFile 读取和写入指定文件位置。
@Transactional 注解声明事务,基于 AOP 实现事务控制。REQUIRED。@Transactional 注解失效原因:
REQUIRES_NEW 创建一个新事务,独立于外部事务。