老大哥42岁,干了20年被公司优化,起哄让他请散伙饭,他直接一个没理、公司赔偿+公积金+失业金拢共 40来万
群里看到个吐槽:老大哥42岁,在公司写(或熬)了20年代码,忽然被“系统升级”成了离职版本。
同事们还挺热情,起哄说“老规矩,请个散伙饭呗,热闹一下”。结果老大哥一句话没回,消息都不带点个赞。
我觉得老大哥这波像写代码的“最小可行方案”:赔偿+公积金+失业金凑了40来万,先把自己的服务器续费了再说。
散伙饭能热闹一晚,现金流能让人睡踏实好几个月。
真想请,也等心情好、钱包稳、想见的人还在,再挑一顿不被起哄绑架的饭,吃得才香。
面试题:贪吃蛇
昨晚我在那儿刷算法题,刷着刷着就刷到“贪吃蛇”,人直接回到诺基亚时代…你们懂吧,就是那种一边上厕所一边按键盘,结果蛇撞墙了还不服气的那种。
这题其实不难,难的是你别把自己绕晕:核心就三件事——蛇身怎么存、碰撞怎么判、吃到食物怎么长。
我一般不整花活,蛇身就用 Deque<int[]> 当队列:队头是蛇头,队尾是尾巴。再配一个 HashSet<Integer> 记录占用格子,方便 O(1) 判断“撞自己”。格子坐标 (r,c) 我压成一个 int:r * width + c,省得写 Pair 还要重写 hashCode,累。
移动的时候我脑子里就一句话:先算新头,再看死不死,再决定尾巴要不要动。注意一个很阴的点:新头如果刚好走到“旧尾巴”位置,其实不算撞,因为尾巴这步可能会挪走。所以流程要像这样:
先算新头坐标,越界直接 GG。 如果这步不吃食物:尾巴会弹出,那就先把尾巴从 set 里删掉,给自己留条活路。 再判断新头是否在 set 里,在就撞自己。 最后把新头塞进去;如果吃到食物就不弹尾巴(等于增长),分数 +1。
就这么点东西,写出来像在搓泡面一样快,别问我为啥会这个比会做饭熟练…我也不想的。
import java.util.*;
/** 经典贪吃蛇:给定宽高、食物列表,move 返回当前分数,撞墙/撞自己返回 -1 */
publicclassSnakeGame{
privatefinalint width, height;
privatefinalint[][] food;
privateint foodIdx = 0;
privatefinal Deque<Integer> body = new ArrayDeque<>(); // 头在 front
privatefinal Set<Integer> occ = new HashSet<>();
publicSnakeGame(int width, int height, int[][] food){
this.width = width;
this.height = height;
this.food = food == null ? newint[0][0] : food;
int start = 0; // (0,0) -> 0 * width + 0
body.addFirst(start);
occ.add(start);
}
publicintmove(String direction){
int head = body.peekFirst();
int r = head / width, c = head % width;
switch (direction) {
case"U" -> r--;
case"D" -> r++;
case"L" -> c--;
case"R" -> c++;
default -> thrownew IllegalArgumentException("bad dir: " + direction);
}
// 撞墙
if (r < 0 || r >= height || c < 0 || c >= width) return -1;
int newHead = r * width + c;
boolean eat = foodIdx < food.length && food[foodIdx][0] == r && food[foodIdx][1] == c;
// 不吃:尾巴要移动,先释放尾巴占用(关键:允许走到旧尾巴位置)
if (!eat) {
int tail = body.removeLast();
occ.remove(tail);
}
// 撞自己
if (occ.contains(newHead)) return -1;
// 加新头
body.addFirst(newHead);
occ.add(newHead);
if (eat) foodIdx++;
return foodIdx; // 分数=吃到的食物数
}
}
你看,贪吃蛇就跟我写业务一样:队头插入新需求,队尾删掉旧债务,偶尔吃到“新功能”就开始变长,然后一不小心撞到自己(历史包袱)直接线上 -1……哎不说了,群里有人@我说测试环境又卡了,我先去看看是不是又是哪个超时配置没改。