拒了一个只要1.8万的45岁大佬。。
45岁,开口只要1.8万,结果还是被拒了
按理说,这种年纪,这种履历,放以前怎么也算“稳得一批”的配置。现在倒好,企业一边喊招不到人,一边把这种明显能干活的人筛出去。你说他贵吧,1.8万真不算离谱,很多公司招个中层都未必压得住这个价。
网友就说得挺直白:不是嫌贵,是嫌你45了,怕不好管,也怕用两年又得重新找人。
这才是扎心的地方。职场嘴上看能力,真到用人的时候,先看年龄,再看性价比,最后恨不得你经验老到、身体年轻、工资还像应届生。
所以很多人不是输在能力,也不是输在要价,就是输在那串数字。你越有经验,越容易被当成“风险项”,这事比要1.8万更离谱。
面试题:图像渲染
一张图改个颜色,很多人上来就两层 for 扫全图,再配个 visited。能跑,但这题我第一眼就不太信这种写法。题目叫“图像渲染”,本质不是遍历整张图,而是从起点 (sr, sc) 往四个方向,把颜色相同且连通的一片区域染掉。不是同色都改,只有连在一起的才算。
这题最容易翻车的地方不是 DFS、BFS 选哪个,而是你一上来就开始染,结果新颜色和原颜色一样,递归直接把自己绕死。线上这种 bug 我见过,表面看代码没毛病,栈一打出来全是重复调用。
Java 写这题,我一般先把两个值拿出来:起点原色 oldColor,目标色 newColor。先挡掉 oldColor == newColor 这个坑,后面才递归。
代码别写花,够用就行:
classSolution{
publicint[][] floodFill(int[][] image, int sr, int sc, int color) {
int oldColor = image[sr][sc];
if (oldColor == color) {
return image;
}
fill(image, sr, sc, oldColor, color);
return image;
}
privatevoidfill(int[][] image, int r, int c, int oldColor, int newColor){
if (r < 0 || r >= image.length || c < 0 || c >= image[0].length) {
return;
}
if (image[r][c] != oldColor) {
return;
}
image[r][c] = newColor;
fill(image, r - 1, c, oldColor, newColor);
fill(image, r + 1, c, oldColor, newColor);
fill(image, r, c - 1, oldColor, newColor);
fill(image, r, c + 1, oldColor, newColor);
}
}
这段代码核心就两件事:先判断当前格子还能不能进,再把当前格子染色,然后向四周扩。很多人喜欢单独弄个 visited 数组,这题其实没必要。因为一旦你把当前点改成了 newColor,它天然就不会再满足 image[r][c] == oldColor,相当于顺手做了标记。
再拿个例子过一下。假设 image[1][1] = 1,目标颜色是 2,那程序只会把和 (1,1) 连通、并且值也等于 1 的区域改成 2。如果图上别的位置也有 1,但中间断开了,那一块不会动。题目考的就是这个“连通”判断,不是简单替换。
这题 DFS 和 BFS 都能做。面试里 DFS 写起来更快,代码更短;数据再大一点,担心递归层数太深,就换队列做 BFS。思路是一回事,落地细节是另一回事。真正丢分的,往往不是不会,而是少了那句:
if (oldColor == color) return image;
这种题不难,坑倒是挺像真的。