同事在代码提交备注里写“修复了XXX的低级错误实际不是我的问题,怎么办?
刚看到个贴子,说有同事在代码提交备注里写“修复了XXX的低级错误,实际不是我的问题”,楼主很无语,不知道该怎么办。
我觉得这事吧,说白了就是情绪写进了工作里,挺不专业的。
网友有的说这人玻璃心、有点小心眼,我觉得不止是性格问题,更是职场素养的问题。提交记录是团队协作的一部分,不是你发泄委屈的地方。写得越“撇清责任”,只会显得你越没有担当。
但话说回来,遇到这种人也别太上头。他这么写,反而给大家留了把柄,久而久之就知道他不好合作,自己拉低了性价比。
总的来说还是那句话:做事留痕迹,做人留余地,干活不是写日记。【备注:文末可领最新资料】
算法题:有效的数独
说实话,Java写“有效的数独”这个题目,看着好像简单,真动手的时候还是挺有讲究的。你别看它不就是个9x9的格子,判断一下是不是每行每列每个九宫格都没有重复数字——但真让你写,很多人不是判断错了位置索引,就是数组下标越界,或者直接逻辑出锅。
题目说得很清楚,给你一个部分填好的9x9数独盘,要你判断这个盘是不是“有效”,注意是“有效”,不是让你解这个盘。而且“有效”是指已经填的数字在每一行、每一列、每个3x3子宫格里都不重复。
我一开始写这个题的时候,脑子一热想用三个二维数组来记录每行、每列和每个九宫格出现的数字。后来一想,这种情况用 Set<Character> 更直观,甚至空间上都省——你不需要用一个 int[9][9] 这样的结构来记录布尔值,只要用三个 Set 的数组即可,判断重复时更高效。
上代码:
publicbooleanisValidSudoku(char[][] board){
Set<Character>[] rows = new HashSet[9];
Set<Character>[] cols = new HashSet[9];
Set<Character>[] boxes = new HashSet[9];
for (int i = 0; i < 9; i++) {
rows[i] = new HashSet<>();
cols[i] = new HashSet<>();
boxes[i] = new HashSet<>();
}
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
char c = board[i][j];
if (c == '.') continue;
if (rows[i].contains(c)) returnfalse;
rows[i].add(c);
if (cols[j].contains(c)) returnfalse;
cols[j].add(c);
int boxIndex = (i / 3) * 3 + j / 3;
if (boxes[boxIndex].contains(c)) returnfalse;
boxes[boxIndex].add(c);
}
}
returntrue;
}
这里最容易搞混的是这个 boxIndex 的计算:(i / 3) * 3 + j / 3。这玩意儿说白了就是把 (i,j) 映射到九宫格编号上。你可以理解为,每三行三列构成一个子方块,总共有9个。这个表达式就是把二维的宫格坐标压成一维。讲真,当时我写的时候还画了个格子辅助理解 😂。
说个段子,有一次我一个同事写这个题,结果用了三层循环,嵌套个 map 套 set,不但复杂还跑得贼慢,最后还把下标写错了,调了一个小时没调出来。我们看代码看得想冲过去直接 Ctrl + Z。他最后还是看了官方解法才知道自己写复杂了。
这种题目在 Java 中实现,不需要高级数据结构,也不考察递归啥的,拼的是细节能力和对数组/集合的熟练程度。你写清楚逻辑,边界处理好,不贪多贪快,结果自然不会出错。
所以别看它是个“水题”,在 Java 面试中反而很能暴露候选人的代码基本功,有没有良好的结构思维,有没有从复杂问题中抽象出模式的能力。甚至我觉得有点像“程序员眼中的九九乘法表”,基础、直白,但做得干净漂亮才叫真水平 💪。
-END-
我为大家打造了一份RPA教程,完全免费:https://www.songshuhezi.com/rpa.html