上周面试一个说自己熟悉Spring的候选人,问他Bean的生命周期,支支吾吾半天说不出来。 这年头简历造假都不过脑子了?
刚看到个贴子,说上周面试一个自称“熟悉Spring”的候选人,结果问到Bean生命周期就卡壳了。
我觉得这事吧,很多人写简历喜欢堆技术栈,Spring、MyBatis、Redis、Kafka全往上写,但真要深挖,很多只是“用过”,并没有真正理解。网友们有人说简历造假,这我也认同一半。毕竟Spring的核心机制都说不出来,那“熟悉”二字确实有点虚。
从程序员的角度看,这其实反映了一个老问题:会用框架≠懂框架。就像开车会踩油门刹车,不代表你能修发动机。面试官问生命周期,不是为难人,而是想知道你是否真正理解背后的运行逻辑。
不过话说回来,也不能全怪候选人,很多公司项目里就只写Controller和Service,很少有人深入源码。学习和项目场景还是有差距的。
总的来说,简历可以写好听的词,但实力才是过硬的底气。技术这行,吹牛是短期收益,真本事才是长期饭票。【备注:文末可领最新资料】
算法题:移除最多的同行或同列石头
昨天晚上十一点多,在公司楼下啃着冷掉的煎饼——手机里小李又甩了道题过来:“哥,那个…移除最多的同行同列石头,咋写?”我当时困得眼冒金星,但这题思路还挺顺的,就边回家边嘀咕,顺手记了个 Java 版本。
有一堆石头,每块石头在二维平面一个整数点 (r, c)。只要某块石头所在行或列还有别的石头,就能“移走”它。问最多能移走多少块。直觉上,只要一群“互相同一行/同一列能串起来”的石头,最后至少会剩一块当“根”。所以答案=总数−连通分量数。嗯…就是把行列能互达的石头当成一个“连通块”。
两种常见解法
DFS/BFS:把会互通的石头建图,搜连通块个数。缺点是建图可能要 O(n^2)判断是否同一行/列。并查集(推荐):把“行”和“列”当成两个集合的点,把一块石头连接它的行节点和列节点,最后数有多少个“被使用”的根。实现利落,近似 O(n α(n))。
Java 并查集写法
小技巧:行索引用正数,列索引用偏移量避免冲突,比如列用 col + OFFSET。OFFSET 取大一点(> 最大行范围)。用 Map 做动态并查集,内存更省。
import java.util.*;
publicclassRemoveStonesUF{
staticclassDSU{
Map<Integer, Integer> parent = new HashMap<>();
intfind(int x){
parent.putIfAbsent(x, x);
if (parent.get(x) != x) parent.put(x, find(parent.get(x)));
return parent.get(x);
}
voidunion(int a, int b){
int ra = find(a), rb = find(b);
if (ra != rb) parent.put(ra, rb);
}
intcountRoots(Set<Integer> used){
int cnt = 0;
for (int x : used) if (find(x) == x) cnt++;
return cnt;
}
}
publicintremoveStones(int[][] stones){
finalint OFFSET = 100_001; // 偏移一下列
DSU dsu = new DSU();
Set<Integer> used = new HashSet<>();
for (int[] s : stones) {
int r = s[0], c = s[1] + OFFSET;
dsu.union(r, c);
used.add(r); used.add(c);
}
int comps = dsu.countRoots(used);
return stones.length - comps;
}
// 简单跑个样例
publicstaticvoidmain(String[] args){
RemoveStonesUF sol = new RemoveStonesUF();
int[][] a = {{0,0},{0,1},{1,0},{1,2},{2,1},{2,2}};
System.out.println(sol.removeStones(a)); // 5
}
}
为啥对
你想象一串能互相“靠行/列”触达的石头,不管你怎么删,最后至少留一块守着那条连通关系的“根”。所以每个连通块最多能移走 size-1。把所有块加起来,就是“总数 − 连通块数”。并查集正好帮我们把这些块合起来,不必显式建全图。
边界 & 小坑
单石头:只有一块,移不了,答案 0;代码里自然得到连通块=1。 行/列值很大:用 OFFSET + 列或者把(row, col)映射到字符串键都行;上面用偏移+Map 更稳。性能: n ≤ 10^4级别毫无压力;DFS 版若暴力建边可能超时,除非用“行映射列表/列映射列表”降复杂度。
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html