马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
DeepSeek 面经
年前,DeepSeek 冲击波还没进入白热化的时候,我们就写了 DeepSeek 这家公司的薪资程度 。
近来,DeepSeek 的雇用职位,从 37 个缩减到 27 个。
或许是年后雇用职员重新编辑了在招岗位,又或许是有一批新天才加入了 DeepSeek。
固然已经看过 DeepSeek 的在招岗位和薪资,但相信不少读者照旧非常好奇:DeepSeek 的雇用流程到底是怎么样的?跟互联网传统的三面四周一样吗?
就在昨天,一位去年五月份参加过 DeepSeek 线上口试的应聘者分享了他的经历。
这位应聘者是一位 211、985 高校的应届博士生,在校期间也参与过不少企业的大型项目,但在面临 DeepSeek 口试过程中提及的那些深入且具有挑衅性的问题时,仍然感到不少难度。
用他对 DeepSeek 的评价原话来说就是:
<blockquote class="multiquote-1" style="display: block; font-size: 0.9em; overflow: auto; overflow-scrolling: touch; padding-top: 10px; padding-bottom: 10px; padding-left: 20px; padding-right: 10px; margin-bottom: 20px; margin-top: 20px; text-size-adjust: 100%; line-height: 1.55em; font-weight: 400; border-radius: 6px; color: #595959; font-style: normal; text-align: left; box-sizing: inherit; border-left: none; border: 1px solid RGBA(64, 184, 250, .4); background: RGBA(64, 184, 250, .1);"> ❝ 在我所经历过的互联网公司中,DeepSeek 是唯逐一家会根据应聘者的专业配景量身定制编程题目的公司。
❞ 那可不,人家 DeepSeek 但是做大模型的,输入应聘者的相干信息,用 DeepSeek 直接生成量身定制的问题,那就是分分钟的事儿。
想要进 DeepSeek,通过 DeepSeek AI 的口试只是第一步。
除了口试内容的深度和广度,这位雇用者还提到当时 DeepSeek 口试流程是「口试官一连 3 个小时高强度的提问」。
这其实就是我们常说的"压力面",通过这种口试来模拟现实工作中大概碰到的压力情景,目的是观察应聘者是否能在紧张或高压的工作条件下保持岑寂、有效沟通和解决问题的能力。
专业程度过关是条件,还得反应够快,承压能力强。
这也好明白,DeepSeek 是一个高度年轻化和本土化的团队,人数规模一直控制在 150 人以内,不设 KPI 稽核,内部完全扁平化,每位算法职员都能直接和梁文锋交换。不像大厂,将使命极致细化,在职员工只需要负责好自己的一环即可。DeepSeek 的规模,决定了其职员负重更重,容错空间更少。因此在职员选择上,此类良好的"小公司"肯定要比大厂要更严格。
对此,你怎么看?在你的求职经历中,有颠末雷同的压力面吗?接待品评区交换。
...
回归主题。
来一道经典校招算法题。
题目描述
平台:LeetCode
题号:1447
给你一个整数 n ,请你返回所有 到 之间(不包括 和 )满足分母小于等于 n 的最简分数。
分数可以以任意次序返回。
示例 1:
- 输入:n = 2<br /><br />输出:["1/2"]<br /><br />解释:"1/2" 是唯一一个分母小于等于 2 的最简分数。<br />
复制代码 示例 2:
- 输入:n = 3<br /><br />输出:["1/2","1/3","2/3"]<br />
复制代码 示例 3:
- 输入:n = 4<br /><br />输出:["1/2","1/3","1/4","2/3","3/4"]<br /><br />解释:"2/4" 不是最简分数,因为它可以化简为 "1/2" 。<br />
复制代码 示例 4:
- 输入:n = 1<br /><br />输出:[]<br />
复制代码 提示:
数论
数据范围为 且数值大小在 之间,因此摆列「分子 + 分母」的 做法是可接受的。
于是问题转化为:「怎样快速判断两个数构成的分数是否为最简(即判断两个数的最大公约数是否为 )。」
快速求得 和 的最大公约数的主要方式有两种 :「更相减损法」和「欧几里得算法」,其中「欧几里得算法」的递归实现最为好写,复杂度为 ,在绝大多数的环境下适用,只有在需要实现高精度时,才会考虑使用「更相减损法」。
而 stein 算法则是没有必要把握的。
Java 代码(欧几里得算法):
- class Solution {<br /> int gcd(int a, int b) { // 欧几里得算法<br /> return b == 0 ? a : gcd(b, a % b);<br /> }<br /> public List<String> simplifiedFractions(int n) {<br /> List<String> ans = new ArrayList<>();<br /> for (int i = 1; i < n; i++) {<br /> for (int j = i + 1; j <= n; j++) {<br /> if (gcd(i, j) == 1) ans.add(i + "/" + j);<br /> }<br /> }<br /> return ans;<br /> }<br />}<br />
复制代码 C++ 代码(欧几里得算法):
- class Solution {<br />public:<br /> int gcd(int a, int b) { // 欧几里得算法<br /> return b == 0 ? a : gcd(b, a % b); <br /> }<br /> vector<string> simplifiedFractions(int n) {<br /> vector<string> ans;<br /> for (int i = 1; i < n; i++) {<br /> for (int j = i + 1; j <= n; j++) {<br /> if (gcd(i, j) == 1) ans.push_back(to_string(i) + "/" + to_string(j));<br /> }<br /> }<br /> return ans;<br /> }<br />};<br />
复制代码 Python 代码(欧几里得算法):
- class Solution:<br /> def gcd(self, a: int, b: int) -> int: # 欧几里得算法<br /> return a if b == 0 else self.gcd(b, a % b)<br /><br /> def simplifiedFractions(self, n: int) -> List[str]:<br /> ans = []<br /> for i in range(1, n + 1):<br /> for j in range(i + 1, n + 1):<br /> if self.gcd(i, j) == 1:<br /> ans.append(f"{i}/{j}")<br /> return ans<br />
复制代码 TypeScript 代码(欧几里得算法):
- function gcd(a: number, b: number): number { // 欧几里得算法<br /> return b == 0 ? a : gcd(b, a % b);<br />}<br />function simplifiedFractions(n: number): string[] {<br /> const ans = [];<br /> for (let i = 1; i < n; i++) {<br /> for (let j = i + 1; j <= n; j++) {<br /> if (gcd(i, j) === 1) ans.push(`${i}/${j}`);<br /> }<br /> }<br /> return ans;<br />};<br />
复制代码 Java 代码(更相减损法):
- class Solution {<br /> int gcd(int a, int b) { // 更相减损法<br /> while (true) {<br /> if (a > b) a -= b;<br /> else if (a < b) b -= a;<br /> else return a;<br /> }<br /> }<br /> public List<String> simplifiedFractions(int n) {<br /> List<String> ans = new ArrayList<>();<br /> for (int i = 1; i < n; i++) {<br /> for (int j = i + 1; j <= n; j++) {<br /> if (gcd(i, j) == 1) ans.add(i + "/" + j);<br /> }<br /> }<br /> return ans;<br /> }<br />}<br />
复制代码 Java 代码(stein):
- class Solution {<br /> int gcd(int a, int b) { // stein<br /> if (a == 0 || b == 0) return Math.max(a, b);<br /> if (a % 2 == 0 && b % 2 == 0) return 2 * gcd(a >> 1, b >> 1);<br /> else if (a % 2 == 0) return gcd(a >> 1, b);<br /> else if (b % 2 == 0) return gcd(a, b >> 1);<br /> else return gcd(Math.abs(a - b), Math.min(a, b));<br /> }<br /> public List<String> simplifiedFractions(int n) {<br /> List<String> ans = new ArrayList<>();<br /> for (int i = 1; i < n; i++) {<br /> for (int j = i + 1; j <= n; j++) {<br /> if (gcd(i, j) == 1) ans.add(i + "/" + j);<br /> }<br /> }<br /> return ans;<br /> }<br />}<br />
复制代码
- 时间复杂度:摆列分子分母的复杂度为 ;判断两数是否能凑成最简分数复杂度为 。团体复杂度为
- 空间复杂度:忽略递归带来的额外空间开销,复杂度为
末了
巨划算的 LeetCode 会员优惠通道目前仍可用 ~
使用福利优惠通道 leetcode.cn/premium/?promoChannel=acoier,年度会员 有效期额外增加两个月,季度会员 有效期额外增加两周,更有超大额专属 |