感觉现在找工作难其实是市场的扭曲。。

欠阿里HR管管了

1 个赞

各种软件都越来越难用了,也不知道都在卷啥。。。

1 个赞

是的,我们bellevue大统华一直招不满人,被迫延期开

刷题多的也分两种吧,一种是每天没事干就刷题的,另一种是工作做的还行顺手刷一刷的,如果是我我肯定选第二种人做同事 :yaoming:

3 个赞

刚好我正在刷题,那我就来吐槽一下吧。Leetcode上大部分题的官方解法的质量很低。大多数时候面试官自己对那个问题也不是很了解。所以我对这样的面试很不屑。刚好我刚写完一个medium的题。拿出来分享下。题目是254。

static std::array<int, 521> primes = {
    2,    3,    5,    7,    ... , 3733};

class Solution {
public:
  std::vector<std::vector<int>> getFactors(int input) {
    int n = input;
    if (n == 1)
      return {};
    // the first one is the prime numeber, the second one is the freq
    std::vector<std::pair<int, int>> nums;
    for (size_t i = 0; n != 1 && i != primes.size(); ++i) {
      int prime = primes[i];
      int count = 0;
      while (n % prime == 0) {
        ++count;
        n /= prime;
      }
      if (count > 0)
        nums.push_back({prime, count});
    }
    if (n != 1) {
      // n is a prime
      nums.push_back({n, 1});
    }

    std::vector<std::vector<int>> ret;
    if (nums.size() == 1 && nums[0].second == 1) {
      return {};
    }

    int m = static_cast<int>(nums.size());
    int N = 0;
    for (auto kvp : nums) {
      N += kvp.second;
    }
    std::vector<int> f(N + 1);
    std::vector<int> c(static_cast<size_t>(m) * N + 1);
    std::vector<int> u(static_cast<size_t>(m) * N + 1);
    std::vector<int> v(static_cast<size_t>(m) * N + 1);
    for (int j = 0; j != m; ++j) {
      c[j] = j + 1;
      u[j] = v[j] = nums[j].second;
    }
    int a, b, l;
    f[0] = a = l = 0;
    f[1] = b = m;
    while (true) {
      int j = a;
      int k = b;
      // x!=0 means v has changed
      int x = 0;
      while (j < b) {
        u[k] = u[j] - v[j];
        if (u[k] == 0) {
          x = 1;
          ++j;
        } else if (x == 0) {
          c[k] = c[j];
          v[k] = std::min(v[j], u[k]);
          x = u[k] < v[j] ? 1 : 0;
          ++k;
          ++j;
        } else {
          c[k] = c[j];
          v[k] = u[k];
          ++k;
          ++j;
        }
      }
      if (k > b) {
        a = b;
        b = k;
        ++l;
        f[l + 1] = b;
        continue;
      }
      // Visit
      std::vector<int> temp_vec;
      for (int k = 0; k <= l; ++k) {
        auto end = f[k + 1];
        int t = 1;
        for (int j = f[k]; j != end; ++j) {
          std::pair<int, int> kvp = nums[c[j] - 1];
          for (int i = 0; i != v[j]; ++i) {
            t *= kvp.first;
          }
        }
        temp_vec.push_back(t);
      }
      if (temp_vec.size() > 1)
        ret.push_back(temp_vec);
      while (true) {
        j = b - 1;
        while (v[j] == 0) {
          --j;
        }
        if (j == a && v[j] == 1) {
          // M6;
          if (l == 0) {
            return ret;
          }
          --l;
          b = a;
          a = f[l];
          continue;
        } else {
          --v[j];
          for (int k = j + 1; k < b; ++k) {
            v[k] = u[k];
          }
          break;
        }
      }
    }
    // Should not reach here
    abort();
  }
};

我不觉得上面这样的代码是可以背下来的。能在面试中写出这样代码的得是多么天才。
Leetcode有个问题就是:不管什么算法它想着往什么binary search/backtracking/dp里面去套。上面这个实现确实是用到了backtracking,但是它跟一般的backtracking很不一样。你甚至很难一眼看出哪一步是在做backtracking。
至于算法复杂度:最差情况是n的质因数分解恰好每个质数都只出现了一次。那么这时候答案是最多的。
我的解法比官方的解法快2-3倍。

消磨掉人的创造力不就是刷题的要义吗

2 个赞

感觉刷题很扯,即便刷了几千道,面试一道题不会就过不了

刷了几千还一道不会,怎么可能,就算梦里刷的,多多少少也会有点记忆的吧

1 个赞

我的意思是面试碰到的那道题不会 :troll:

那很正常,偶尔人家出题偏一点,就放弃吧,多面试,总有公司面试刚好你都会的

1 个赞

刷lc基本看高赞solution吧 很少有人去看“官方”解发吧

3 个赞

正经点的公司都不会出特别偏的题目。
leetcode几千道题目,真正的算法其实就那几个:two-pointer,sliding Window,BFS, DFS,
加几个数据结构:stack,hash, queue, heap

几乎就是这几个的排列组合。
基本上一个公司给你出特别难的题:DP之类的,说明这个面试官特别不喜欢你或者压根不招人,压根不用纠结面挂了。

4 个赞

这就是我觉得最大的问题:算法其实特别多,大家只把最好背的记下来了,然后死搬硬套。连面试官自己也是这样半懂不懂的去面试别人。其实就拿前200道题来说,有些问题在CS领域是被研究过很多遍的很经典的算法题,远远不是BFS/DFS这样。所有人都偏好于简单的,能背下来的,好写的代码。虽然看着LC的题是越来越多了,但是bar并没有因此而增高,而是招进来一群庸才。

1 个赞

PhD 遇到个 nice 的老板不需要 perseverance, 上班后才发现以前在学校过得真是太轻松了

1 个赞

那这是咋过简历的? :yaoming:

aiai不用老算法

dei过简历会容易挺多的 :yaoming:

如果人人都dei就没有dei :yaoming:

dei不包括华裔的,非去凑什么热闹

1 个赞

感觉你说的情况跟找工作难没关系啊, hc少才是本质吧,市场扭曲不扭曲,每个hc不都招到人了么