V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
JoeShu
V2EX  ›  Python

挖个坑,作为 python 程序员,面试时要求手写二分查找,可以说不么

  •  
  •   JoeShu ·
    xuyaoqiang · 2014-10-29 14:20:19 +08:00 via iPhone · 18125 次点击
    这是一个创建于 3676 天前的主题,其中的信息可能已经有所发展或是发生改变。
    不会写,正常么?
    第 1 条附言  ·  2014-10-29 17:59:43 +08:00
    引那么多人跳坑,罪过。看到喷楼主的人比较多,详细介绍下情况吧。
    岗位是web开发,python,框架用的是tornado,薪水估计大于15k
    楼主是程序员,非科班,快四年了,主力python,用过c、oc、shell,前端只了解html、css,用过jquery,js有困难,python源码看过一些,主要开源工具都用过。简单算法了解,教科书上那些,遇到更复杂的就缴械了。
    面试一开始有关python的,自认为还行,没有磕绊。后来换了个人,两个问题,一个是互斥锁和读写锁实现,楼主说只会用,不会写;第二个让写了二分查找,手写了,迭代的,应该有bug,给对方讲了原理,可能会出现的问题。相互客套,散场。
    感想:
    1.算法是楼主弱点,但二分不会写,不配当程序员
    2.楼主对会的理解比较严格,会=没有bug!=其他借口,各位不妨试下手写试试,看下是否完成没有bug的代码,可以贴上来让大家品鉴
    3.楼主主要是愤怒,感觉被羞辱了,而且还成功了。大家可以批判下这种情绪是否正常
    129 条回复    2014-11-06 18:20:31 +08:00
    1  2  
    archxm
        101
    archxm  
       2014-10-30 09:58:17 +08:00
    算法,是在遇到一个实际的问题时,劳动人民经过了深思熟虑而想出来的,而面试官TMD要面试者在几个小时内想出来, 还是写在纸上, tmd不是有病是什么?
    dofine
        102
    dofine  
       2014-10-30 10:06:20 +08:00
    @geew er_search 这个名字也是醉了~哈哈
    molinxx
        103
    molinxx  
       2014-10-30 10:17:02 +08:00 via iPhone
    同算法渣,求拯救~
    @Cee
    abcfyk
        104
    abcfyk  
       2014-10-30 10:18:38 +08:00
    @dreampuf ++$i 应该比 $i++ 效率高点吧,$i++ 实际上等于 $i = $i + 1;会另开一个变量来保存新的值。 我猜的:)
    clinkzlol
        105
    clinkzlol  
       2014-10-30 11:20:03 +08:00 via Android
    楼上几位,二分查找前要排序吧
    lijsf
        106
    lijsf  
       2014-10-30 11:29:00 +08:00
    @skydiver 你是指i+j有可能溢出吗?看了下,除了这个没发现别的问题啊?
    lijsf
        107
    lijsf  
       2014-10-30 11:32:48 +08:00
    今年校招时腾讯和百度都有现场写代码的题。腾讯要求写字符串反转和strcmp。百度要求写快排和求搜索树上两个节点的最近父节点。
    MrGba2z
        108
    MrGba2z  
       2014-10-30 12:08:01 +08:00
    @chuan 出自谁口?又是为何?有链接吗? 递归反复调用函数不是系统开销更大么,而且还可能堆栈溢出.
    viila
        109
    viila  
       2014-10-30 12:21:55 +08:00
    校招卡人必备,社招这就没意思了。

    非算法职位而在面试的时候让人写快排,写排序简直就是面试官能力不行的体现。
    敲代码十几年了,当年搞oi也能默写得一手qsort,现在毛都忘光了。
    当前能力只剩下找出需要使用排序的地方,找到算法源码或者移植到十种其他语言使用。

    面试官行吗?
    Cee
        110
    Cee  
       2014-10-30 12:28:56 +08:00
    @molinxx 菊苣谦虚!
    loryyang
        111
    loryyang  
       2014-10-30 12:59:22 +08:00
    @archxm 我不知道你at做什么。你发泄的这些情绪我不想再见到了,已block,谢谢!

    首先关于大公司喜欢浪费面试者时间:对于公司而言。公司招人又不是做慈善,肯定是要严格考察面试者的,特别是现在面试者喜欢针对性准备面试题,面试时间肯定会长一些,这样才能真正看出面试者的水平。这是个困境,面试官和面试者的目标完全不一致,一方想知道优缺点,另一方只想表达优点。只有长时间深入的沟通可以解决。而对于面试者而言,想去一个公司工作,却连半天时间也不想浪费,这,你是真想找个工作?

    其次关于面试内容:我也不建议做算法题,这个不公平,原因是大部分人对算法本身不会很精通,在实际工作时也不会去写这些代码。但是我支持当面写代码,这个很考察能力,程序员就是写代码,如果连代码都写不好,那能发挥什么作用呢?但是,我不支持纸上写代码、不支持无网络写代码。面试者应该可以使用一台电脑,然后网络。就和工作时的状态一致。否则就是在尝试记忆各种api,毫无意义。至于不写算法题,写什么,那就找个比较实际的问题来写好了,比如分析一段日志,或者写一个简单的cache,或者实现几个标准库没有实现的api(比如C的string join by)。

    最后驳斥你一个观点:”深思熟虑出来的东西,然后让面试者几小时想出来“。你就想想,求圆形面积这个难题,是否还需要你深思熟虑几十年才能想出来。

    PS:关于面试内容只是针对招聘写代码的员工,架构师等高层人员另说。
    cdxem713
        112
    cdxem713  
       2014-10-30 13:13:29 +08:00
    昨天去搜狗面试前端也被考2分查找了,没写出来
    cdxem713
        113
    cdxem713  
       2014-10-30 13:15:53 +08:00
    @archxm 几个小时算啥,直接盯着你马上提笔开始写,没写两分钟,就说你直接说思路吧,然后就被PASS了
    nooper
        114
    nooper  
       2014-10-30 13:19:17 +08:00
    最变态的就是你写出来django login的 login_required装饰器。
    我回去看了下源代码。咳咳。
    pythoner
        115
    pythoner  
       2014-10-30 13:32:42 +08:00
    赶紧去写了个二分法压压惊
    msg7086
        116
    msg7086  
       2014-10-30 13:36:21 +08:00
    @loryyang 但是纸上编程是很常见的考法啊。大公司面试的时候几乎都是白板coding,而且基本都是算法题,而且基本都不会是二分这么简单的题。
    (我考过的最简单的题大概是写一个heap。最难的大概是分区回文吧。
    msg7086
        117
    msg7086  
       2014-10-30 13:36:58 +08:00
    @msg7086 总之感觉找工作非常不容易。这些题我都做出来了最后都没拿到offer,这才是蛋疼。
    loryyang
        118
    loryyang  
       2014-10-30 14:23:43 +08:00
    @msg7086 嗯,因为好操作,简单。但是常见和方便不代表更好,如果有公司可以提供面试专用机,其实会更好。当时有道来我们学校招聘,就是租了学校的机房,大家现场用机器答题的。当然因为没有面试官监督,所以我们不能上网。

    题做出来了,没有offer,这个事情其实挺尴尬的。招人好多时候靠缘分的,真的,切身体会。
    archxm
        119
    archxm  
       2014-10-30 14:40:30 +08:00
    @loryyang 不介意你屏蔽,但at你不是说让你看,只是让大伙看到是针对你的话, 你知道有些无良公司, 借着面试来学习经验吗? 反正我遇到过, 把你那些项目经历问个遍, 说了1个多小时, 完了说今天就到这里吧. 完全就是折腾人, 根本就不负责任, 我请假半天是要扣工资的. 你面试官算是在上班. 所以我现在面试就说只有周末有时间了.
    我觉得招人的时候大家都表达点诚意来, 面试者去了这个陌生的地方面试, 也算拿出了诚意, 面试官也该好好准备下, 把要问的问题动点脑子好好想一想, 半个小时还问不出什么来, 就是能力问题了. 不知道v2ex的程序员是否同意.
    圆的面积就一个公司 s= π *r平方, 多简单, 可是如果要让你证明这个公司呢? 多少人会? 写个简单的cache? cache确实是常用的伎俩, 不过有几人隔几天就写个cache的? 不会写cache还真没啥.
    纸上写代码, 只能证明面试官脑残. 机上写代码, 也要看你面试官到底想考什么了, 有些陌生的算法题, 我还真能想出来, 不过也许要花2天时间, 但绝对不是2小时.
    dingyaguang117
        120
    dingyaguang117  
       2014-10-30 16:30:33 +08:00
    @archxm 算法数据结构也分基础和高级的,我觉得让你当场徒手写AC自动机就过分了,写个二分还是一点都不过分的
    ashin
        121
    ashin  
       2014-10-30 16:52:00 +08:00
    算法一窍不通,不配当程序员,感觉自己再也找不到工作了
    bolasblack
        122
    bolasblack  
       2014-10-30 16:56:14 +08:00   ❤️ 1
    @archxm @我做什么,我是不配当程序员的 QAQ
    archxm
        123
    archxm  
       2014-10-30 17:06:15 +08:00
    @bolasblack 不好意思, 我看错了!
    纸上写程序本来就是面试官对待面试的态度问题, 或者说智商问题, 不知道纸上写程序代表什么?
    我在计算机上用IDE写个链表排序, 倒置什么的, 很快就写出来了, 但纸上写, 呵呵
    如果面试官看到面试者纸上写的程序有BUG什么的, 就更加确认了其弱智程度.
    chuan
        124
    chuan  
       2014-10-30 22:01:14 +08:00
    @MrGba2z To iterate is human, to recurse divine -L. Peter Deutsch.原始出处我没有查到。一个计算机科学的初学者很容易理解迭代的概念,然而对递归,至少我一开始接触汉诺塔问题时真心觉得递归很神奇。递归更偏向问题求解的本质,迭代则偏向计算机的冯诺依曼体系结构。机器是不懂递归的,编译器做的一个工作就是把递归转成循环。代码说递归,编译器来迭代实现它。
    yangzh
        125
    yangzh  
       2014-10-31 13:29:09 +08:00 via iPhone
    当然可以。找工作是双向选择。
    shuson
        126
    shuson  
       2014-10-31 15:47:38 +08:00
    @JoeShu 我怎么一写就是一个while循环控制的二分法,正统的二分法不是递归出来的么
    susu
        127
    susu  
       2014-10-31 16:48:45 +08:00
    看了回复我怎么觉得v2ex的算法逼格达不到v2ex标准啊。走过校招的人对二分查找这种简单的查找算法应该很熟悉吧
    RainFlying
        128
    RainFlying  
       2014-11-05 17:30:39 +08:00
    完了
    看完之后我觉得还是回家种地吧
    ming2281
        129
    ming2281  
       2014-11-06 18:20:31 +08:00
    @shuson 我来一个使用递归的,但是没有测试过效率
    def binarySearch(sequence, element, lower=0, upper=None ):
    if upper is None: upper = len(sequence)
    middle = (lower + upper) / 2
    if element > sequence[middle]:
    return binarySearch(sequence, element,middle+1, upper )
    if element<sequence[middle]:
    return binarySearch(sequence, element, lower, middle)
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2366 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 00:02 · PVG 08:02 · LAX 16:02 · JFK 19:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.