面试手写快排是一个方法,可以刷掉一些人

2019-03-10 06:20:21 +08:00
 Cbdy

听说字节跳动面试手写快排,我感觉虽然有点难,却不失为一个好方法。

我发现一些场景(比如面大厂),面试已经不一定是考察候选人能不能干活了,而是筛选出可能最能干活的一批人。

23580 次点击
所在节点    程序员
135 条回复
zmj1316
2019-03-10 11:31:49 +08:00
@hjc4869 不如 Haskell 好记

qsort [] = []
qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)
kimown
2019-03-10 11:59:14 +08:00
为什么不面试项目, 如果之前做的项目不出彩, 也没有对之前的项目有突出些的贡献, 纯面算法, 业务都没了, 你算法写出做什么, 练习 abc 打字

项目, 项目推动执行力, 这些比算法重要无数倍
hjc4869
2019-03-10 12:01:16 +08:00
@lihongjie0209 O(nlogn),每次都把数据 copy 了几遍。这么写很粗暴,但是对于理解算法来讲是最容易的。至于怎么优化可以跟面试官慢慢讨论。
crab
2019-03-10 12:06:03 +08:00
@niubee1 冒泡就是初中生都懂吧
gam2046
2019-03-10 12:06:10 +08:00
有限的面试应届生经验

Q:排序算法,你知道有哪些?不需要会写,只需要告诉我名字就可以了
A:冒泡.....嗯....(面露难色)

Q:常用的数据结构有哪些?只需要告诉我名字就可以了
A:额......可以提示一下哪些是数据结构嘛?

Q:(脸上笑嘻嘻...心里...)线性结构比如说有链表...
A:(抢答)哦,我知道了,还有数组。

Q:其他还有嘛?比如一些非线性结构。
A:这个我不是很了解

Q:(脸上依旧笑嘻嘻)
( Android 开发岗位)一个 Activity 被系统初始化时,static 代码块、构造方法、onCreate 方法,哪个被优先调用
( JavaWeb 开发岗位) Spring 全家桶,比如 Spring Boot、Spring Data 等框架是否听说过
A:
( Android 开发岗位)各种答案都有,甚至多数人告诉我时 onCreate 方法先执行。
( JavaWeb 开发岗位)多数人没听过,少数人表示听说过

Q:我看你简历上的 XX 项目,当时你主要负责的部分,在实施过程中,有没有遇到什么困难,花了一点时间才解决呢
A:(多数人告诉我,没有困难,或含糊其辞,甚至连自己完成的工作内容都说不清)

Q:(脸上依旧要保持微笑)

到此,我已经不知道,我可以再问什么了,再基础,我只能想到写个 Hello World 了。当然,我所在的是小厂,没有 985、211 的应届生。我所在的小厂宗旨是,学历不重要,理论不懂不重要,只要来了能干活就行了。可我问啥都不知道,写的项目经历水分这么大,让我怎么相信你是那个来了就可以干活的人呢。
learnshare
2019-03-10 12:09:26 +08:00
面试是为了筛选,减少面试的成本和麻烦,找合适的人是次要的(甚至连“合适”的标准都没有)
tairan2006
2019-03-10 12:10:15 +08:00
快排用递归写很简单的。。。
neoblackcap
2019-03-10 12:10:57 +08:00
快排可以算是分治算法的一个典型,同时还有原地交换,交换不随排序规模增长的特点。面试一个后端之类的岗位,了解一下很正常吧。我觉得也不过分,毕竟排序又没有考其他更难的
pathbox
2019-03-10 12:17:02 +08:00
觉得快排是最经典的排序算法之一,而且难度合适,包含多个计算机思维- 吴军的谷歌方法论里面有通俗易懂的介绍
Elephant696
2019-03-10 13:21:32 +08:00
当然可以刷掉一些人,可是,对找到合适的人真的有帮助?
Elephant696
2019-03-10 13:26:53 +08:00
话说我想起来以前的一条新闻 “因为写不出翻转二叉树,Homebrew 的作者被 Google 拒啦”
jedihy
2019-03-10 13:32:59 +08:00
放美国只能算一般难度了。如果只考快排连没有 followup 只能算 easy。
zhouyou457
2019-03-10 13:52:56 +08:00
我会说现在培训班的老师都要求面试之前背算法了嘛?(狗头保命)
KHHj7U2DNR
2019-03-10 14:00:17 +08:00
```
int qsort(int nums[], int low, int high)
{
    if (low >= high) return;
    int i = low, j = high, pivot = nums[low];
    while (i < j) {
        while (i < j && nums[j] > pivot) j--;
        nums[i] = nums[j];
        while (i < j && nums[i] < pivot) i++;
        nums[j] = nums[i];
    }
    nums[i] = pivot;
    qsort(nums, low, i - 1);
    qsort(nums, i + 1, high);
}
```
手机上打的,应该是正确的吧。
我背死的。
e1eph4nt
2019-03-10 14:16:44 +08:00
还好没让手写 kmp。。。
wdlth
2019-03-10 14:17:23 +08:00
应该考手写 TimSort
Leigg
2019-03-10 14:19:31 +08:00
只问写法岂不是和应试无差,这根本选不出想要的人才。
liuminghao233
2019-03-10 14:20:50 +08:00
这种东西
如果你不是提前准备好
突然要写起来其实有一点点难度
提前准备好的 也不一定是从头到尾背代码
一分钟啪啪啪就给你写好


给串数字写一趟快排结果还靠谱一点
这个懂的话
起码知道自己选的 pivot 跑哪去了
ooh
2019-03-10 14:41:33 +08:00
我写 PHP 还真用到过一次快排。。。
pwrliang
2019-03-10 14:42:18 +08:00
@fondoger 感觉不对吧,num[I]=num[j]就把 num[I]覆盖了,应该是交换才对吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/542931

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX