跳过正文

Java基础

Java Stream API 使用笔记

·230 字·2 分钟
Stream API 用起来真香,但别乱用 # 自从学了 Stream API,写 Java 的风格变了不少。以前过滤加转换要写十几行 for 循环,现在一行链式搞定,确实香。 但用了一段时间也踩了不少坑,特别是并行流和性能方面,今天来聊聊。 基本操作过一遍 # Stream 操作分两种:中间操作(返回新 Stream,可以链式调用)和终端操作(触发计算,产出结果)。

Java 反射机制与性能

·269 字·2 分钟
反射慢?慢多少你测过吗 # “反射很慢,尽量别用。“这话你肯定听过。但到底慢多少?慢在哪?大部分人说不清楚,我之前也说不清楚,干脆自己测了一下。 怎么获取 Class 对象 # 反射的入口是 Class 对象,三种方式:

Java 泛型常见问题

·301 字·2 分钟
Java 泛型这几个坑你肯定踩过 # Java 泛型这东西,看着简单用着顺手,直到踩坑才发现自己根本没搞懂。上周写作业一个泛型编译错误折腾了我一个多小时,气得把泛型重新学了一遍。 类型擦除到底擦了啥 # Java 的泛型是假泛型。编译之后泛型信息就没了,全变成 Object(或上界类型),这叫类型擦除。

JVM 垃圾回收机制

·167 字·1 分钟
JVM 垃圾回收看这篇就够了 # JVM 垃圾回收是面试八股文里的重头戏,也是我觉得最难啃的一块。概念多、算法多、收集器也多,第一次看的时候感觉脑子不够用。这篇把我学到的整理一下,尽量讲人话。 堆内存长什么样 # JVM 的堆分两大块:新生代(Young Generation)和老年代(Old Generation)。

Java 线程池原理与实践

·214 字·2 分钟
线程池这玩意,用不好真的会出事 # 上周实验室项目出了个线上问题,排查了一下午发现是线程池配置不对导致的 OOM。这事让我意识到,线程池看着简单,用不好是真会出事的。 为什么要用线程池 # 你可能觉得,new 一个 Thread 跑任务不就完了?能跑,但有几个问题:

ConcurrentHashMap 线程安全原理

·223 字·2 分钟
ConcurrentHashMap 到底怎么保证线程安全的 # 上篇写了 HashMap,有同学私信问我 ConcurrentHashMap 和 HashMap 有什么区别。其实吧,区别大了去了,JDK8 的 ConcurrentHashMap 基本是重写的,跟 JDK7 完全两个思路。 花了差不多一周把源码理清楚,这篇来聊聊它到底怎么在并发场景下保证线程安全。 JDK7 的 Segment 分段锁 # 先说 JDK7 的方案,面试还是会问。

HashMap 源码笔记

·347 字·2 分钟
HashMap 源码我读了三遍才看懂 # 大二下学期面试实习的时候,面试官问我 HashMap 的底层原理,我支支吾吾说了个"数组加链表"就说不下去了。回来之后就下定决心要把源码读一遍。结果读了三遍才算真正搞明白,这玩意比我想象的要精妙得多。 先说说 HashMap 的内部结构 # 你打开 HashMap 的源码,会看到一个叫 Node<K,V>[] table 的数组。这就是 HashMap 的骨架。