x米员工爆料:35岁被裁后,投百份简历无人问津,一气之下把薪资由2W调为3W,简历改成英文,结果出乎意料!!!

科技   2024-12-12 11:21   陕西  
最近看了一个挺有意思的帖子。话说一位35岁的老哥在X米公司被裁员了,开始投了百份简历,结果......是无人问津。
面对这样尴尬的局面,他居然干了件让我忍不住笑出声的事:直接把自己的薪资从2W涨到3W,然后把简历从中文改成了英文。
结果居然让人瞠目结舌!他的简历很快得到了几家公司关注,最后还顺利拿到了几份面试机会,甚至其中一家直接就给了一个超高的报价!想不到吧?连他自己也有点小意外。
我觉得,他这一波操作其实挺有意思的,也给我们提了个醒——有时候,可能我们并不是真的能力不足,而是“自我设限”过多。
薪资低了不敢开口,简历又觉得过于“常规”。所以,面对工作市场的激烈竞争,勇敢地尝试一下提升自我定位、调整表现方式,或许会有意想不到的收获。
不过嘛,最后还是得提醒一句:“懂得自己在做什么”的自信,才是王道!

算法:课程表

聊一个经典的算法题:课程表问题。
可能很多同学看题目一开始就懵了,但其实这类题目的套路是可以一眼看穿的。
课程表问题的核心是:你有 n 门课程,每一门课程都有一些先修课程。你的任务是判断你能不能按要求安排完这些课程。如果可以安排完,就返回 true,否则返回 false
简单来说,就是判断一个有依赖关系的任务是否能按顺序完成。你可以理解为,先修课程就像是前置条件,只有先学了基础课程才能学更高级的。
简单说,课程表问题可以抽象成一个图的问题:每一门课程是一个节点,先修关系就是边。依赖关系很像是一个有向图,其中一个课程指向它依赖的课程。所以问题的实质就是判断这个有向图是否存在环。如果有环,那就不可能完成所有课程;如果没有环,那么肯定可以完成。
咱们来详细分析一下这个问题:我们可以用深度优先搜索(DFS)或者拓扑排序(Kahn算法)来解决。

深度优先搜索(DFS)

这是一种典型的图遍历方法,通过递归地访问每个节点并标记状态来判断图中是否存在环。在DFS的过程中,我们要标记每个节点的状态,避免重复访问。我们用三种状态来表示课程的状态:
  • 0:课程尚未访问
  • 1:课程正在访问中(即该课程是当前DFS栈的一部分)
  • 2:课程已经访问完毕
如果在DFS过程中,发现当前节点正在访问中(即状态为1),那就说明图中存在环,返回 false。否则,如果整个图遍历完成都没有问题,就返回 true
以下是一个实现的代码:
import java.util.*;

public class Solution {
    public boolean canFinish(int numCourses, int[][] prerequisites) {
        // 构建图
        List<List<Integer>> graph = new ArrayList<>();
        for (int i = 0; i < numCourses; i++) {
            graph.add(new ArrayList<>());
        }

        for (int[] pre : prerequisites) {
            graph.get(pre[0]).add(pre[1]);
        }

        // 用来标记课程的状态
        int[] visited = new int[numCourses];

        // 对每门课程执行DFS
        for (int i = 0; i < numCourses; i++) {
            if (visited[i] == 0 && !dfs(graph, visited, i)) {
                return false;
            }
        }

        return true;
    }

    private boolean dfs(List<List<Integer>> graph, int[] visited, int course) {
        // 如果该课程正在被访问,说明图中有环
        if (visited[course] == 1) {
            return false;
        }

        // 如果该课程已经被访问过,说明没有环
        if (visited[course] == 2) {
            return true;
        }

        // 标记为正在访问
        visited[course] = 1;

        // 访问所有依赖于当前课程的课程
        for (int neighbor : graph.get(course)) {
            if (!dfs(graph, visited, neighbor)) {
                return false;
            }
        }

        // 访问完当前课程的所有依赖,标记为已访问
        visited[course] = 2;

        return true;
    }
}
在这段代码中,我们首先构建了一个图的邻接表。每一门课程的先修课程都会被记录下来。然后,我们使用DFS来遍历每一门课程,并通过visited数组来判断是否有环。

拓扑排序(Kahn算法)

如果你对拓扑排序有所了解,就知道它是另一种解决这类问题的经典方法。拓扑排序的关键是:每次取出图中入度为0的节点,表示这些节点可以开始处理。然后去掉这些节点,并更新其他节点的入度,直到所有节点都被处理完。如果图中存在环,那么就无法完成拓扑排序。
Kahn算法的核心思路是:
  1. 计算每个节点的入度。
  2. 使用一个队列存储所有入度为0的节点。
  3. 从队列中取出一个节点,处理它并减少与它相关的其他节点的入度。
  4. 如果最终所有节点都能被处理,说明图中没有环;如果有节点始终无法被处理,那就是有环。
以下是用Kahn算法实现的代码:
import java.util.*;

public class Solution {
    public boolean canFinish(int numCourses, int[][] prerequisites) {
        // 构建图的邻接表和入度数组
        List<List<Integer>> graph = new ArrayList<>();
        int[] inDegree = new int[numCourses];
        
        for (int i = 0; i < numCourses; i++) {
            graph.add(new ArrayList<>());
        }

        for (int[] pre : prerequisites) {
            graph.get(pre[1]).add(pre[0]);
            inDegree[pre[0]]++;
        }

        // 将入度为0的课程加入队列
        Queue<Integer> queue = new LinkedList<>();
        for (int i = 0; i < numCourses; i++) {
            if (inDegree[i] == 0) {
                queue.offer(i);
            }
        }

        // 处理课程
        int processedCourses = 0;
        while (!queue.isEmpty()) {
            int course = queue.poll();
            processedCourses++;

            // 更新依赖课程的入度
            for (int neighbor : graph.get(course)) {
                if (--inDegree[neighbor] == 0) {
                    queue.offer(neighbor);
                }
            }
        }

        // 如果所有课程都被处理了,就返回true
        return processedCourses == numCourses;
    }
}
这道题其实并不复杂,关键在于理解它本质是一个图的问题,而且我们有两种常见的算法来处理这类问题:DFS和拓扑排序。
DFS适用于直观的递归解法,而拓扑排序则可以借助队列来高效地完成任务。大家在面试中,选择哪种算法并不重要,重要的是要清晰地表达你的思路,展示你解决问题的能力。
对编程、职场感兴趣的同学,可以链接我,微信:coder301 拉你进入“程序员交流群”。
🔥东哥私藏精品 热门推荐🔥

东哥作为一名超级老码农,整理了全网最全《Java高级架构师资料合集》

资料包含了《IDEA视频教程》《最全Java面试题库》、最全项目实战源码及视频》及《毕业设计系统源码》总量高达 650GB 。全部免费领取!全面满足各个阶段程序员的学习需求。

Java面试那些事儿
回复 java ,领取Java面试题。分享AI编程,Java教程,Java面试辅导,Java编程视频,Java下载,Java技术栈,AI工具,Java开源项目,Java简历模板,Java招聘,Java实战,Java面试经验,IDEA教程。
 最新文章