面试中,很容易遇到一些奇怪的问题,看似简单,自己也以为没问题,但最终还是会倒下。
今天跟你分享一个有趣的面试过程,这是我学习圈子里的朋友真实面试经历。
下面是面试兑换场景
伪大佬:面试官,您好!
面试官:你好!看你简历上说掌握了常用集合。
伪大佬:是的,像ArrayList、HashMap、LinkedList等源码有所研究。
面试官:不错,那我给你出一个简单map题,你看看如何实现。
一个HashMap,key是String类型,value是Integer类型。假设我目前想把map中的所有value值都加1,你知道怎么做?
伪大佬:好的,(心想这么简单,妥妥滴送分题)!
public class MapDemo {    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();        map.put("A", 1);        map.put("B", 2);        map.put("C", 3);        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            String key = entry.getKey();
            Integer value = map.get(key);            map.put(key, value + 1);
        }
    }
}面试官:嗯,不错,挺好的,除了这种方式,还有什么比较便捷的方式么?
伪大佬:这不是挺好的么?还有什么更便捷的方式?

面试官:我看你对源码有所研究,所以,我才就这么问,看你对源码到底掌握几成。
伪大佬:能不能指教一二?
面试官:实则很简单,但大家在看源码时,都容易忽略。
下面给你看一个更便捷的方式:
public class MapDemo {    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();        map.put("A", 1);        map.put("B", 2);        map.put("C", 3); 
        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            entry.setValue(entry.getValue() + 1);
        } 
    }
}怎么样?直接一行代码就搞定了entry.setValue(entry.getValue() + 1);。
不过,请注意,不是每个map都可以这么玩的。
列如鼎鼎大名的ConcurrentHashMap就不能调用entry.setValue()方法。
 public final V setValue(V value) {    throw new UnsupportedOperationException();
 }会直接抛异常的。
伪大佬:那我想调用ConcurrentHashMap的entry.setValue()方法,怎么办呢?
面试官:可以使用compute()方法或者replace()方法来替换entry的值。这两个方法都可以确保在修改值的过程中,其他线程无法访问到这个entry,从而避免了UnsupportedOperationException异常。
ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();
  map.put("A", 1);
  map.put("B", 2);
  map.put("C", 3); 
  map.forEach((key, value) -> map.replace(key, value + 1)); 
  map.forEach((key, value) -> map.compute(key, (k, v) -> v+1));伪大佬:感谢感谢!(我屮艸芔茻,居然还可以这么玩)。
看到这里,你肯定会觉得这个面试题很无趣,我也觉得无趣,目前主要就是遇到了,你说怎么办呢?
咱们不能说人家面试官不行吧,人家看到你都对源码有研究了,那么这么问好像也没毛病,可能是咱们没用心关注这个点而已?

突然想起一句话:知道的越多,不知道的越多!
 ¥43.80
 
                ¥43.80
            steam PC正版 噬神者3 CDKey激活码 GOD EATER 3 弑神者3 国区PC中文游戏
 ¥4.50
 
                ¥4.50
            PC中文正版 steam游戏 影子战术将军之刃 爱子的选择 Shadow Tactics Blades of the Shogun激活码秒发
 ¥13.50
 
                ¥13.50
            PC中文正版steam 死亡细胞 Dead Cells 王后与海 致命坠落 坏种 重返恶魔城DLC 激活码KEY
 ¥9.80
 
                ¥9.80
            PC正版 steam平台 游戏 合金装备崛起 复仇 METAL GEAR RISING REVENGEANCE 激活码
 ¥26.00
 
                ¥26.00
            PC 正版 游戏 steam 逃生1 Outlast 国区cdkey 国区激活码秒发
 ¥19.90
 
                ¥19.90
            PC中文正版 steam平台 国区 游戏 电脑装机模拟器 PC Building Simulator 全DLC 电竞扩展 激活码