主页 > 电脑硬件  > 

Java8面试

Java8面试
Java 8 有哪些新特性? 🐎Java 8五大神装特性🐎

Lambda表达式(魔法调料) 曼波觉得像速食魔法咒语!(๑✧◡✧๑)

// 传统写法(像冗长菜谱) new Thread(new Runnable() { public void run() { System.out.println("喵~"); } }).start(); // Lambda写法(像速食包) new Thread(() -> System.out.println("喵~")).start();

Stream API(数据流水线) 哦呜(° ロ °)!曼波觉得这是集合的魔法传送带!

List<String> pets = Arrays.asList("布偶猫", "柯基犬", "仓鼠"); List<String> 猫猫列表 = pets.stream() .filter(s -> s.contains("猫")) .collect(Collectors.toList()); // 结果:[布偶猫]

新的日期API(时间魔法) 曼波再也不用被Date搞糊涂啦!(๑・.・๑)

LocalDate 生产日期 = LocalDate.of(2023, 12, 25); LocalDate 今天 = LocalDate.now(); long 保质天数 = ChronoUnit.DAYS.between(生产日期, 今天);

接口默认方法(接口进化) 接口居然能写具体方法了!✨

interface 游戏手柄 { default void 震动() { System.out.println("嗡嗡~"); } }

Optional类(空指针护盾) 曼波的安全感++!(๑✧◡✧๑)

Optional<String> 钥匙 = Optional.ofNullable(找钥匙()); 钥匙.ifPresent(k -> System.out.println("找到钥匙:" + k));

(° ロ °)!曼波要特别安利两个超好用的技巧:

方法引用魔法:

// 传统Lambda pets.forEach(s -> System.out.println(s)); // 方法引用版(像直接召唤打印机) pets.forEach(System.out::println);

构造器引用:

Supplier<List<String>> 创造列表 = ArrayList::new; List<String> 新列表 = 创造列表.get();

最后的小贴士:这些特性就像新的游戏技能,组合使用效果更佳哦!比如:

LocalDateTime.now().plusDays(7).format(DateTimeFormatter.ISO_DATE); // 一周后的日期

 

(✪▽✪)曼波~~~~!快去用Stream和Lambda写出更优雅的代码吧~

HashMap 在 jdk 1.7 和 1.8 的区别? 🐎HashMap 1.7 vs 1.8 五大进化🐎 城堡结构升级 曼波觉得像从平房变成带阁楼的小别墅!(๑✧◡✧๑) 1.7:纯数组+链表(链表像挂在城堡房间外的晾衣绳)1.8:数组+链表+红黑树(当绳子太长就变成旋转楼梯) // 当链表长度>=8时变树,<=6时退化成链表 static final int TREEIFY_THRESHOLD = 8; 魔法物品存放方式 哦呜(° ロ °)!曼波发现存放宝箱的方式变了! 1.7:头插法(新宝物放宝箱最上面) void addEntry(...) { // 把新节点插到链表头部 table[bucketIndex] = new Entry<>(hash, key, value, e); }   1.8:尾插法(新宝物放宝箱最下面) final V putVal(...) { // 遍历到链表尾部再插入 for (int binCount = 0; ; ++binCount) { if ((e = p.next) == null) { p.next = newNode(...); break; } } } 魔法阵扩容优化 曼波觉得像传送阵升级了!(๑・.・๑) 1.7:扩容后所有元素重新计算位置1.8:智能判断新位置(原位置 或 原位置+旧容量) // 新位置 = 原位置 或 原位置 + oldCapacity if ((e.hash & oldCap) == 0) { // 留在低位区 } else { // 迁移到高位区 } 哈希魔法公式 曼波发现咒语更简洁了!✨ 1.7:4次位运算+5次异或 h ^= k.hashCode(); h ^= (h >>> 20) ^ (h >>> 12); h ^= (h >>> 7) ^ (h >>> 4); 1.8:1次位运算+1次异或 (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); 死循环问题修复 (° ロ °)!曼波要放烟花庆祝这个修复! 1.7:头插法扩容可能导致环形链表(多线程下)1.8:尾插法避免了这个噩梦(但依然线程不安全)

举个超形象的例子🌰: 假设城堡有8个房间(数组),每个房间挂着宝箱(链表)

1.7版:新宝物总是放在宝箱最上面,容易拿但容易缠在一起1.8版:当宝箱超过8个宝物时,自动变成带编号的旋转书架(红黑树)

最后的小贴士:虽然1.8修复了死循环问题,但多线程环境还是要用ConcurrentHashMap哦!(✪▽✪)曼波~~~~!

标签:

Java8面试由讯客互联电脑硬件栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Java8面试