20K技术经理三面全过,被 HR总监秒杀,沾过仲裁的一律不进。。
刚看到个贴子,说一位技术经理,三面通关,背调也没问题,结果因为和前东家打过仲裁,被HR总监一票否决。说真的,看到这我真是又气又叹气。
我觉得这事儿太讽刺了。按理说,技术面能三过,说明人能力没问题,结果卡在仲裁记录,这不是在明示:“你可以被压榨,但不能反抗”?这年头鼓励合法维权嘴上说说,真维权了就被拉黑,那规则还有啥意义?
网友有的说“企业也怕惹麻烦”,但问题是,这种一刀切的做法,本质上是在打击所有有底线的员工。谁还敢较真?到头来就是比谁更能忍。
不过话说回来,我们技术人也别灰心。就像代码里try/catch机制一样,错了不可怕,关键是别被一个异常终结了整个程序。
走正道,也要学会自保。【备注:文末可领最新资料】
算法题:删除无效的括号
突然看到牛客又推了一个经典老题——删除无效括号。
题目其实很简单,就是给你一个字符串,里头可能有多余的 ( 或 ),你得把它删成合法的括号表达式,同时删的最少。
像我们这种干后端的,字符串处理是家常便饭对吧,但这题一上来其实很恶心人的点是——你不能瞎删,得保证删的数量最少,而且可能有多个解。你要是写个暴力DFS,递归的时候不加去重,一秒钟内就能把你内存炸掉。
我一开始偷懒写了个 BFS 版本,用队列 + visited 集合去重,逻辑大概是这样:
public List<String> removeInvalidParentheses(String s){
List<String> res = new ArrayList<>();
if (s == null) return res;
Set<String> visited = new HashSet<>();
Queue<String> queue = new LinkedList<>();
queue.offer(s);
visited.add(s);
boolean found = false;
while (!queue.isEmpty()) {
String cur = queue.poll();
if (isValid(cur)) {
res.add(cur);
found = true;
}
if (found) continue; // 只保留当前层合法解
for (int i = 0; i < cur.length(); i++) {
if (cur.charAt(i) != '(' && cur.charAt(i) != ')') continue;
String next = cur.substring(0, i) + cur.substring(i + 1);
if (!visited.contains(next)) {
visited.add(next);
queue.offer(next);
}
}
}
return res;
}
privatebooleanisValid(String s){
int count = 0;
for (char c : s.toCharArray()) {
if (c == '(') count++;
elseif (c == ')') {
if (--count < 0) returnfalse;
}
}
return count == 0;
}
别笑,这段逻辑我调了快一小时才过全部case。那种边界情况特别多,比如字符串里混着字母啊,连续多个括号啊,甚至像 )(" 这种逆天格式,得非常细心处理。
讲真,这题一上来就有点让人想起配置中心里那个规则校验,当时小李用 Antlr 写了一版表达式校验器,还给每个括号配了Token序号,最后结果还是要靠一个简单的“计数器”解决——你发现没有,很多时候复杂问题,最后靠的还是最基本那点东西:栈、队列、Set。
还有个地方我当时被坑到了,就是你得保留所有“最短修改”的可能结果。刚开始我以为找到一个合法就可以直接 return,后来发现不是,得是所有“最少删除”的解。否则leetcode测试用例直接给你撕开。
反正总结就一句话:括号合法性问题基本都绕不开“平衡计数”思路,剩下的就是怎么控制搜索范围、去重,别让内存爆了。
-END-
我为大家打造了一份RPA教程,完全免费:https://www.songshuhezi.com/rpa.html