Python 开发应届生岗位
有的甚至还写的精通 Python
话说 Python 的精髓就是鸭子类型吧,有的直接说没听过
估计都是把 Python 当作面向过程来写了,怪不得觉得语法简单
我感觉 Python 并不简单。。
![]() | 1 Chase2E 2021-11-19 10:42:38 +08:00 ![]() 好的代码, 是刚入职的新人也能看懂, 牛逼的代码, 是学完 CS101 的大一新生也能看懂. 你想问他懂不懂"魔法函数"的特性, 直接问他 "__init()__"为什么前后都要下划线不就行了... 这些语言的高级 feature, 你写在工作代码中, 不是让大家为难吗?... |
![]() | 2 rationa1cuzz 2021-11-19 10:44:05 +08:00 魔法方法太多了,而且大部分都用的少。 |
![]() | 3 aladdinding OP @Chase2E 问了啊 就是问了为什么有的函数是双下划线 |
4 leetom 2021-11-19 10:47:20 +08:00 ![]() 这种语法细节没啥意义啊 要不你回答一下,为啥 init 前面和后面都有双下划线?为啥不是单下划线?为啥不是只有前边有? |
![]() | 5 cyrivlclth 2021-11-19 10:47:24 +08:00 = =不如问一下 list 的扩容机制吧。。。 |
![]() | 6 ipwx 2021-11-19 10:48:52 +08:00 ![]() @Chase2E 我寻思 Python 类写多点自然就用到 magic function 了。 别的不说,__lt__, __eq__, __hash__ 这三个凡是要用上自定义类型,大概率都要用到。不然你怎么自定义放进 map 当 key 或者 sort __deepcopy__, __getstate__, __setstate__ 这三个对需要序列化的自定义类型也是必须认识的。 __enter__, __exit__ 是为了自定义类型要 with 这些都不会,那就真的只会写函数了。可是复杂逻辑不用类,很难写啊。。。除非是 脚本小子 |
![]() | 7 huruwo 2021-11-19 10:49:33 +08:00 因为工作用不上 或者是用了也不知道是什么 |
![]() | 8 aladdinding OP @ipwx 赞同 |
![]() | 9 ampedee 2021-11-19 10:50:49 +08:00 ![]() 自己用魔术方法实现了一个特性:真爽!我真牛逼 看别人的代码用魔术方法实现了一个特性:傻逼!垃圾代码 |
![]() | 12 4BVL25L90W260T9U 2021-11-19 10:51:32 +08:00 @leetom duck typing 不能算语法细节吧,不然用毛线 Python 。不过应届生不知道这个也合理吧 |
13 macha 2021-11-19 10:51:59 +08:00 最后一句我很赞同,不知道为什么那么多人说 Python 简单。 |
![]() | 14 shyling 2021-11-19 10:52:06 +08:00 要不你问怎么让 len(自定义 class()) 返回结果吧。。 或者怎么 for in 自定义 class() |
![]() | 15 ipwx 2021-11-19 10:52:17 +08:00 哦最基础的还有 __repr__。 这个都不会还怎么调试的时候 print ? |
16 xxoOOovv 2021-11-19 10:52:49 +08:00 如果毕业就写 py 的(而且 c/cpp 基础不扎实的),我感觉多数后面都会变成“能用就行”的原则,多数都不去了解源码和底层原理。如果是从 c/cpp 或 go 转来写 py ,情况就不一样了 |
![]() | 17 hiwind 2021-11-19 10:52:57 +08:00 |
![]() | 18 aladdinding OP @dejavuwind 目的就是问有什么作用 说双下划线只是给点提示 |
![]() | 19 fgwmlhdkkkw 2021-11-19 10:57:05 +08:00 meta class await/yield |
![]() | 20 ytmsdy 2021-11-19 10:57:09 +08:00 其实我觉得 Python 最大的问题不是速度慢,或者不支持并发。 而是花式语法太多,每个人的编程风格都不一样,写出来的代码千奇百怪。 相对于 C++或者 Java 这种工程化标准的语言,就没有这一类的问题! |
21 uni 2021-11-19 10:57:30 +08:00 很讨厌面试问名词的,我觉得更好的问法是给一个具体的场景然后问他怎么实现 |
![]() | 22 fgwmlhdkkkw 2021-11-19 10:59:48 +08:00 ![]() 但是我看你打的这段文字,我想给你一拳,栽种。 没有对人的基本尊重,“估计”……,闻道有先后而已,别看不起人。 |
24 bytesfold 2021-11-19 11:03:04 +08:00 不如说些问题看看有没有解决方案,非要把 Python 搞成像 Java 那样卷? |
26 wangxin13g 2021-11-19 11:05:00 +08:00 我一直没理解 duck typing 的意义在哪 为了彻底消灭继承么 duck typing 的工程化项目写的不多 理解错了见谅 |
![]() | 27 learningman 2021-11-19 11:10:37 +08:00 原来__init__就算吗,我还以为说的是__code__ |
![]() | 28 dangyuluo 2021-11-19 11:11:19 +08:00 ![]() 不能怪应届生,因为 Python 这些魔法函数本来就是为了省事才存在的,而在大学里最不缺的就是时间。举个例子`__next__ `是为了能让 Class 支持迭代器,但是有很多其他代码长一点的办法来实现,所以大学生可能没有过接触。 我觉得面试,尤其是应届生面试的时候还是要考察对基础知识掌握是否牢固,而不是这种语法糖。 |
30 aloxaf 2021-11-19 11:22:38 +08:00 有句话怎么说的来着,人的知识就像一个圆,知道的越多,圈就越大,就越能意识到自己不知道的有多少。 大部分应届生的圈都很小,所以会产生「我已经精通了 Python 」的幻觉也无可厚非。 |
![]() | td width="10" valign="top"> 31 Osk 2021-11-19 11:22:48 +08:00 ![]() 忘名了, 尴尬, 看标题也有点懵, 看下面的回复才明白... __repr__ __str__ __eq__ __len__ 等运算和比较的用得多一点, 因为确实好用, 但已经忘了他们叫魔法方法了 |
32 skinny 2021-11-19 11:22:56 +08:00 ![]() 乍看之下我还寻思难道又有我不懂的 Python 特性和语法,看下来我就无语了,你特么就不能说人话,你这就跟在 C++、C#、Java 面试里问别人知不知道魔法函数一样,构造函数就构造函数,操作符函数或方法就操作符函数或方法,你就不能说个实际需求,比如序列化、支持某些操作符、元编程具体场景?还让别人猜你这词什么意思,暗示来暗示去,我一旁观者看着都累。 |
![]() | 33 sagaxu 2021-11-19 11:28:04 +08:00 via Android @ipwx key 一律用作为 id 的 int 或者 string ,sort 每次自定义比较 lambda ,也不是不 work 。 序列号有 json ,一般不处理 state 也问题不大。 with 就更少用了,finally 中清理也不差,而且 with 跟 pypy 不兼容。 decorater 和 descriptor 就更加用不上了,学生大都从 C 语言入门,很多时候只是把 python 之类当做不用管内存而且内置数据结构更丰富的语言在用。 |
34 youngce 2021-11-19 11:31:39 +08:00 ![]() 面试的时候尽量减少出现一些官方文档上提及比较少的名词,比如所谓的魔法函数,换一种问法:python 类的内置函数和方法你知道哪些? 再比如想考察一下面向对象的思想,让候选人讲讲常见的设计模式如何实践、SOLID 设计原则也是不错的选择 当然如果只是想找到能和自己对上暗号的候选人当我没说 |
![]() | 35 locoz 2021-11-19 11:34:11 +08:00 via Android 还是得看具体领域和做的事情吧,如果没有什么深入定制化的需求,其实真用不上这些高级玩法,不会用很正常。 以爬虫领域为例,自己写框架的肯定会用上很多高级玩法来让使用起来更方便,但是单纯用框架去采集数据的就压根不需要用,那后者当然也就大概率不会去了解这些。 |
![]() | 36 masterclock 2021-11-19 11:40:58 +08:00 原来 __init__ 这样的东西叫魔法函数啊 查了一下 python glossary magic method An informal synonym for special method. |
![]() | 37 windfarer 2021-11-19 11:41:59 +08:00 面试问语言细节没太大意思,还不如问问,假如你发现有个接口特别慢,怎么排查 |
![]() | 38 ysc3839 2021-11-19 11:48:10 +08:00 @masterclock +1 原来 __init__ 这样的东西叫魔法函数啊,我都是叫 operator 的…… |
![]() | 39 Juszoe 2021-11-19 11:52:02 +08:00 对应届生问这种工程细节其实没啥意思,基础好的稍微自学都能懂了,如何把“基础好”的应届生筛选出来或许才是更重要的 |
![]() | 40 learnshare 2021-11-19 11:57:07 +08:00 针对程序员的面试,应该问问他的项目经验,然后考察问题的分析和解决能力 不要背书式的考察,不熟悉的东西他也讲不明白,临时准备的东西也背不出来 |
![]() | 41 zmxnv123 2021-11-19 11:57:21 +08:00 我觉得楼主说的没问题,为什么应届生 Java 就要懂 Object ,但 Python 就不需要懂 Magic Method 呢? 如果是因为觉得 Python 比 Java 简单才选择 Python ,那确实... |
![]() | 42 aladdinding OP ![]() @fgwmlhdkkkw 愤青? |
43 jguo 2021-11-19 12:01:12 +08:00 ![]() 啥都不懂啥都不学,别人提出来就是为难他,然后十年后抱怨为什么过了 35 岁没人要 |
![]() | 44 niubee1 2021-11-19 12:21:53 +08:00 其实所谓的魔术方法就是 Java 啊 C# 啊里的基类中定义了给大家自行实现的一些虚函数,等同于一种约定。比如定义__str__等同于 overide toString ,定义 __lt__ 等于 override 了操作付 <。没有什么神奇的,不知道魔术方法等于学 Java 不会运算符重载,这不是扯么 |
![]() | 46 msg7086 2021-11-19 12:32:26 +08:00 @ytmsdy 语法越死板,就越能接受菜鸟的代码,但也越繁琐无趣。 越灵活,门槛就越高,每个几年的经验别说写了,看都看不懂,但是写起来也最爽滑。 我觉得 Python 已经很死板了,我一个 Ruby 用户平时都不想碰 Python ,就感觉写起来太无趣了。 Java 更死板,写个复杂点的 stream 怕不是就要被当成异教徒了。 |
![]() | 47 pengtdyd 2021-11-19 12:41:52 +08:00 我认为中小型公司招聘应该着重考察项目能力和是否有真实的工作经验,至于八股文这些问题问了也没用,对招聘帮助不大。 |
48 conhost 2021-11-19 12:43:10 +08:00 @shm7 nlp 也要用到啊,最起码的__init__肯定要用到吧,不过就像 44 楼说的一样,我都是把他们当成虚函数,用到的时候直接重写就完了,还真忘了这玩意叫魔术方法 |
![]() | 49 makelove 2021-11-19 12:45:59 +08:00 这种魔法函数基本概念,平时你可以不用,但完全不知道有这个就说不过去了,只说说明他对编程没兴趣,连完整浏览一遍概念的功夫都不想出 |
50 mon6912640 2021-11-19 12:50:17 +08:00 ![]() 那你告诉我,别的语言的内置方法或者是析构函数解构函数不叫魔法函数,为什么只有 python 的叫做魔法吗?别的语言不配称为魔法吗?为啥不叫牛逼函数? |
![]() | 51 vance123 2021-11-19 12:54:21 +08:00 via Android 一直在用,但第一次知道叫魔法函数。不过应该翻译成魔法方法,类中的函数一般叫做方法(method) |
52 mutalisk 2021-11-19 12:56:49 +08:00 写个 python 都要搞成这种八股文就很搞笑了 |
53 vvhhaaattt 2021-11-19 12:58:01 +08:00 via Android python 日常使用到(写业务)的语言特性我感觉不到 1/3 再加上上学时养成的根深蒂固的面向过程思维(需要改,也在改) 面试 python 碰到这种让猜要用某个特性又没有比较好的引导,电波没对上,那就挂了 |
54 jones2000 2021-11-19 12:59:39 +08:00 能写出解决问题的代码不就可以了。要什么魔法函数。完全就是纸上谈兵。 |
55 likeccpo 2021-11-19 12:59:55 +08:00 - -工作三年用这玩意屈指可数 还是框架好啊 (go yyds) |
56 mon6912640 2021-11-19 13:03:44 +08:00 接#50 续,我的意思是,python 并不是很多人接触的第一门语言,很多都是从 java 、C++或者其他语言摸过来的,魔法函数这个名称实在太不直观了,说白了就是可以重载的内置接口,从别的语言过来的话,看到这个大概第一时间都是理解成构造、析构之类的概念带过,用到的时候会想到,但可能名词定义就记不清了 |
![]() | 57 binux 2021-11-19 13:10:04 +08:00 via Android ![]() 不不不,就算候选人不知道魔法函数这个说法,这是在面试唉,难道就不会问清楚吗? 难道以后开会的时候有人用了一个冷门的说法或者发音,也会去搞清楚吗? 比起知识点,这反而是更严重的扣分项吧。 |
![]() | 58 est 2021-11-19 13:15:09 +08:00 ![]() 第一,这个叫 magic method ,而不是 魔法「函数」 第二,我十分讨厌滥用 magic method 的人。感觉就像给一个人插上一跟脑管一样。不自在。对象跟对象交流我觉得应该通过非魔法的常规方法和属性而不是自己实现一套双下划线魔法。。。。 |
![]() | 59 est &nbs; 2021-11-19 13:16:07 +08:00 比如现在 cpython 搞出来的什么 __aiter__ __anext__ 我觉得就是脑残。 |
![]() | 60 tinkerer 2021-11-19 13:16:09 +08:00 经常用你们口中的魔法方法,但我现在才知道叫魔法方法,然后什么鸭子类型猴子补丁,不推荐直接让面试者解释概念,还是把重点放在解决问题的能力考察上,各种名词害人,你见到的翻译后的概念名词,其实有各种翻译版本 |
61 JeffGe 2021-11-19 13:40:50 +08:00 via Android 我记得这叫 dunder methods ,取名非常直观:d(ouble)-under(score) 查了一下,这些方法也叫 magic methods 或者 special methods 这个名字已经在 Python 领域被广泛接受了,再说就算不清楚这个名字,面试的时候可以交流可以问,我认为楼主使用这个名字没有任何问题。值得探讨的无非就是 dunder methods 该不该作为考察的点,我认为自称“精通”Python 的人是可以考的。 |
![]() | 64 Zy143L 2021-11-19 13:51:11 +08:00 via Android 我一般叫魔术方法... 看到魔法函数 我愣了几秒 |
65 ila 2021-11-19 13:53:10 +08:00 via Android 比较少用。 用的常规方法。 |
66 yEhwG10ZJa83067x 2021-11-19 13:57:05 +08:00 就说 PHP 好了,比如他的协变和逆变我就理解好了很久。我感觉都不简单。 |
67 unnamedhao 2021-11-19 13:57:45 +08:00 我觉得面试的好问题应该是, 如何实现某个需求, 在实现这个需求的时候用 magic method 会有什么优势 |
![]() | 68 marcong95 2021-11-19 13:59:56 +08:00 ![]() @skinny #32 magic method 是写在 Python 官方文档 Glossary 里面的一个术语,虽然是 an informal synonym of special method ,也不至于算不上人话。 个人而言不太爽部分人看到个自己没见过的词汇就说别人「不说人话」,在指责别人不说人话之前,能不能先自己 Google 一番。如果只是从非专业人士不好从字面上理解的角度出发,窃以为「元编程」也不太算人话。 |
![]() | 69 ipwx 2021-11-19 14:00:17 +08:00 @justrand ???(刚刚速查了一下)这不就是改个函数签名吗。。。。 php runtime 帮你做了类型检查了,都不用你处理“不能编译”这件事。动态语言就是爽啊,在 C++ 里面这种代码根本写不出来,想要逆变只能 dynamic_cast<...> |
70 JudyHal 2021-11-19 14:01:39 +08:00 ![]() 现在的政治正确就是,你越无知你就越有理,这么简单的东西都不会还好意思去应聘?现在 V2 也是宣扬知识无用论的大本营 |
71 yEhwG10ZJa83067x 2021-11-19 14:12:44 +08:00 @ipwx 好吧是我太弱了 |
![]() | 72 ipwx 2021-11-19 14:33:16 +08:00 ![]() 支持楼主的附言 1 。 楼上有些人确实没怎么用过 Python ,然后上来大言不惭说,“我从来不用”,只用普通成员函数。 但凡用过大一点的库就知道 Python 都靠下划线 magic method 实现各种 protocol 然后把对象丢进去做 middleware 。这是 Pythonic 。结果还被人喷。。。 |
![]() | 73 OnlyO 2021-11-19 14:40:50 +08:00 魔法方法是 Python 的黑科技啊,深入必须得会啊. |
![]() | 74 fregie 2021-11-19 14:42:58 +08:00 "不简单"对于编程语言来说从来不是一个值得骄傲的点,相反,这可能是一个致命伤(比如 C++) "学点基础语法就能快速上岗"也从来不是缺点,这不该是一门编程语言的终极追求吗?(仅限语言方面,其他方面的基础也很重要) |
75 MonoBiao 2021-11-19 14:44:58 +08:00 metaclass 真好玩( |
![]() | 76 shyling 2021-11-19 14:53:43 +08:00 真心觉得这个是基础。。 你在 java 里不能对一个实例四则运算,在 python 里确可以,在 c 艹里甚至还可以左移一个字符串到输出流里。 难道就不好奇为什么吗? 教什么就只会什么,背书是吧 |
![]() | 77 RedisMasterNode 2021-11-19 15:01:25 +08:00 这些在 Python 开发里面是真的用得到的...如果你只是把 Python 当做一个很简单的脚本工具,没有任何公共组件、(项目内)中间件开发经历的话,那完全不了解这些东西怎么样用好一门语言呢。总不能一直抱怨工作平淡,又一点追求或者收获都没有吧。 安利写 Python 的工程师找工作前都可以看看《流畅的 Python 》 |
![]() | 78 johnsonqrr 2021-11-19 15:04:24 +08:00 额,不懂也无可厚非吧,有啥好喷的。 工程上的细节知识点太好学了,面试不是都以算法和数据结构为主吗。 |
79 ybnsjl 2021-11-19 15:04:51 +08:00 @Chase2E #1 前两句是赞同的,后两句有些偏失。比如: 定义__len__、__iter__方法,那么在你的业务代码中可以少写很多 if 、for 之类的; 定义__getitem__、__missing__可以少写很多 try...except KeyError 之类的。每个魔法函数都有它存在的意义。 完成功能是一方面,可维护性、健壮性、扩展性又是另外一方面。基础函数库越扎实,上层的业务代码就越少,秃头的可能性就越低。 |
80 ffxrqyzby 2021-11-19 15:11:21 +08:00 Python 确实不简单, lz 说的这些但凡看过一本深入 Python 的书都会了解的 不过面试吗, 考察语言只是一个点, 楼下的也不要太偏激了 |
81 coodyz 2021-11-19 15:36:32 +08:00 为啥都在怼楼主,我觉得没啥问题吧。但凡看过一本入门 python 书,或者网上的入门教程,也不至于不知道 magic method 吧 |
82 coodyz 2021-11-19 15:38:59 +08:00 python 简单更多的说的是基础语法结构简单,随便啃个有点名气的 py 开源项目,头发都能掉好多 |
![]() | 83 fgwmlhdkkkw 2021-11-19 15:39:50 +08:00 但是你面的是什么,是应届生啊。你连这点宽容都没有吗?那你找什么应届生啊。是,他是写了“精通 Python”,但他还可以写他是你爸爸,你信吗?你会喊吗? 你就是想要厉害的应届生,这也是可以理解的,完全合理的。但是你不能用这种高高在上的态度来嘲讽应届生。 按你的逻辑,你如果出现在 Guido 面前,你是不是要跪下去舔他的鞋? |
![]() | 84 fgwmlhdkkkw 2021-11-19 15:43:49 +08:00 ![]() 你能回想起那个刚毕业的自己吗?尊重人好吗? 我不是愤青,我只是讨厌你而已。 |
![]() | 85 aladdinding OP @fgwmlhdkkkw 只是描述这个现象而已,全文并没有嘲讽,高高在上的字眼。应该是你从骨子里对面试官有偏见吧 |
![]() | 86 wpyfawkes 2021-11-19 15:52:32 +08:00 |
![]() | 87 robinlovemaggie 2021-11-19 15:52:43 +08:00 如何评价 Guido 放弃 python 跑去微软抱大腿?所以还是不要谈什么热爱一门语言的屁话了,大家都只是单纯的爱钱而已。 |
![]() | 88 robinlovemaggie 2021-11-19 15:53:47 +08:00 @fgwmlhdkkkw #32 老哥明白人~ |
![]() | 89 adoal 2021-11-19 15:59:43 +08:00 因为低水平(并且敢在简历里吹高水平)的人是大多数。 结贴,散分。 |
![]() | 90 BBCCBB 2021-11-19 16:01:13 +08:00 ![]() |
91 preach 2021-11-19 16:03:01 +08:00 类似 Javaer 的重载,确实是基础,不过楼主想想,大多数人的水平应该是什么样子的? |
![]() | 92 just1 2021-11-19 16:08:59 +08:00 不用为什么,只是他们 Python 用得少而已,说难听点叫菜(不跟从业者比,在同龄人当中也是)。大学里面很多学 Python 都是在课上学的,写个爬虫或者机器学一而已。 |
![]() | 93 pepesii 2021-11-19 16:11:55 +08:00 就是因为菜而已 |
95 rpman 2021-11-19 16:18:21 +08:00 钢针, 写业务没必要搞那么多花花肠子.. 当然, 写库写框架搓火箭什么的, 熟练运用这些特性非常重要 |
![]() | 96 robinlovemaggie 2021-11-19 16:23:55 +08:00 @BBCCBB #90 那你说 Linus 为啥不去呢? |
97 O5oz6z3 2021-11-19 16:27:01 +08:00 ![]() 我想请教楼主: 1 、“魔法函数”的正式定义和名称是什么? 2 、“魔法函数”和“鸭子类型”“协议”有什么关系? 3 、“魔法”在哪里? 4 、拿这种需要时翻翻书一秒上手的知识点筛选人是否有点苛刻? 5 、__dir__ __getattr__ 对应什么鸭子类型? |
![]() | 98 aieike 2021-11-19 16:32:51 +08:00 Python, 花里胡哨, 是优点也是缺点 当时我是冲着, Python 无所不能学的, 现在用了两三年后, 就不太想要那些花的东西了 |
![]() | 99 johnsona 2021-11-19 16:42:29 +08:00 via iPhone 你要看情况 有的搞 ai 短平快框架训模型 直接 override 父类方法 自己写个函数 没工夫给你折腾语言 毕竟效果不好有的头疼了 我感觉运维工作可能也是写函数调 system api 多 |
![]() | 100 BBCCBB 2021-11-19 16:49:18 +08:00 ![]() @robinlovemaggie 人家想去不想去是他们自己的事, 去微软就是为了钱了? 没道理嘛 |