程序员老鬼

同等能力下,其实就差在一张985文凭上,有文凭的就可以拿50w年薪,高中毕业的就是只能 5w年薪拿着

刷到个吐槽挺扎心:同样的能力,差的就一张“985纸”,有人年薪50万,没学历的只能拿5万,越想越憋屈。

Image

确实,很多公司把文凭当筛子,省事、降低试错成本,HR一眼就能把人分层。问题是,这种做法很容易把“会干活的人”挡在门外,也让努力变得像撞墙。

但话说回来,学历也不是纯玄学,它往往代表一段受过训练的经历和起点资源。真正不该被忽略的是:文凭能打开第一扇门,但走多远还是看作品、能力和持续学习。

对我们来说,别把命运押在怨气上,能补学历就补,不能就把技能做硬,把项目做亮,总会有人愿意为“真本事”买单。

面试题:用栈实现队列

昨天群里不是有人问嘛,“用栈实现队列”到底图啥……我当时正卡在一个线上小问题,接口一堆请求排队,日志刷得我眼睛疼,就突然想到:队列这玩意儿本质不就是“先进先出”,但是我们手里只有“先进后出”的栈,那就得耍点小聪明对吧。

思路其实挺土的:准备两个栈,一个专门负责进(我叫 in),一个专门负责出(out)。 你 enqueue 的时候别想太多,直接往 in 里 push。 你要 dequeue / peek 的时候,如果 out 里还有东西,就从 out 弹;如果 out 为空,那就把 in 里的元素一个个倒到 out——注意是“一个个弹出来再压进去”,这样顺序就反过来了,最早进去的就跑到 out 的栈顶了,然后再 pop/peek 就是队列头。

你看这不就跟我平时搬家一样嘛……箱子(in)先乱堆,真要找最早放进去那包泡面,就得全倒出来到另一个角落(out),倒完了就好拿了。倒一次能用很久,所以均摊下来还是很划算的。

来,上 Java 代码,我用 Deque 当栈(别用老古董 Stack 了,那个同步开销啥的…算了不展开)。代码里我顺便加了个 shift(),就是“需要出的时候才倒栈”,懒加载那味儿:

import java.util.ArrayDeque;
import java.util.Deque;

publicclassMyQueue{
privatefinal Deque<Integer> in = new ArrayDeque<>();
privatefinal Deque<Integer> out = new ArrayDeque<>();

// 入队:直接进 in 栈
publicvoidpush(int x){
        in.push(x);
    }

// 出队:out 为空就把 in 倒过来
publicintpop(){
        shiftIfNeeded();
return out.pop();
    }

// 看队头:同理
publicintpeek(){
        shiftIfNeeded();
return out.peek();
    }

publicbooleanempty(){
return in.isEmpty() && out.isEmpty();
    }

// 只有 out 真的没货了,才倒一次
privatevoidshiftIfNeeded(){
if (!out.isEmpty()) return;
while (!in.isEmpty()) {
            out.push(in.pop());
        }
    }

// 你想跑一下就用这个 main,当场验尸…哦不验算
publicstaticvoidmain(String[] args){
        MyQueue q = new MyQueue();
        q.push(1);
        q.push(2);
        q.push(3);
        System.out.println(q.peek()); // 1
        System.out.println(q.pop());  // 1
        System.out.println(q.pop());  // 2
        q.push(4);
        System.out.println(q.pop());  // 3
        System.out.println(q.pop());  // 4
        System.out.println(q.empty()); // true
    }
}

有个小坑我以前真踩过:有些人每次 pop() 都先把 in 倒到 out(不管 out 里有没有),那就退化成来回倒腾,性能直接掉下去,尤其数据一多,CPU 跟着你一起骂街…所以一定要记住“out 空了才倒”。

复杂度这块你要是被老师追着问,就说:单次最坏是 O(n)(倒栈那一下),但均摊是 O(1),因为每个元素最多只会从 in -> out 走一次,再也不回来了。嗯,就这样,反正我这会儿咖啡也凉了,我先去续一口…你们要是还想让我用泛型写个通用版也行,下次群里吼我一声。