Python采访的广泛概述。 提示与技巧

大家好!


简要介绍一下您自己。 我受过教育是数学家,但职业是程序员。 自2006年以来在发展领域。 尽管自从他们开始在学校学习编程后,我就开始在学校里写我的第一个程序和游戏(大约从2003年开始)。 碰巧我不得不用几种语言学习和工作。 如果您不考虑有关C,C ++,BASIC,Pascal和Fortran的大学讲座,那么我真的在Delphi(超过6年),PHP(超过5年),嵌入式(Atmel + PIC大约2.5年)工作过最后一次使用Python和一点Scala。 当然,您也不能没有数据库。


本文适用于谁? 对于像我一样想要(或想要)自己找到一份体面的高薪工作,有趣的项目,一支酷炫的团队和各种好东西的每个人。 也适合那些想提高知识水平和技能水平的人。


这篇文章是如何产生的? 经过3周的采访,搜索,研究,不眠之夜(我经常经历脑海中可能发生的各种事件,回答选项等),我收到了很多邀请。 前两个必须被拒绝,因为做出决定的最后期限已经结束,而我正在等待其他办事处的提议。 结果,我花了一天的时间自己决定,并等待当前和过去的采访结果。 老实说,我的选择非常复杂,因为我选择的选项通常很有吸引力。 总的来说,我决定优先考虑发展方向,而不是条件和项目。 即使在做出决定(和提案)之后,其他人仍然继续出现(但是对我而言,这已经不重要了)。


在每次面试之前,我已经做好了充分的准备工作+数了数那些地方,这些答案我不知道或不记得,或者直到最后都没有弄清楚。


我很欣赏那些可以真正表明我对某些基本概念的理解(或误解)的问题。 不幸的是,这样的问题可以用双手的手指指望。


最后,我认为值得收集所有这些经验并与他人分享。


当然,这些问题并不会耗尽每个经验丰富的开发人员应具备的知识。 在我看来,实践中很少使用某些事物来不断询问它们。 此外,如果我说90%以上的问题以基本的方式用Google搜索了10到30秒,那么我可能不会错。


我将一些问题合并为一个-以节省时间和空间。
同样在文章的结尾,我将提供在我看来最有趣的链接。


目录内容


一般理论
  • 大多数采访中的第一个问题是:“什么是SOLID?” 老实说,我永远记不清此缩写的完整含义,所以我要么用自己的话解释,要么让对话者至少建议英文名,然后我才能解密。 最初,在我看来对话者会理解我并接受这样的答案,但是由于某种原因,在两种情况下,这些家伙认为我不知道这个问题的答案(我最好不要对此发表评论(一点卢布))。 就个人而言,我曾经将依赖注入与依赖倒置相混淆。


  • 第二个典型问题:“什么是REST?” 然后在“什么是Restfull?”之后 或“基本条件是什么”。
    您可以找到答案。 我个人更喜欢此选项


  • 什么是HTTP? 他有什么方法?


  • 哪些HTTP方法是幂等的,哪些不是?


  • 我喜欢一个我在实践中从未遇到过的关于HTTP的问题,因此不知道。 假设您有一个很大的URL页面列表(例如音频或视频),需要将其下载到磁盘。 但是对于每个文件,您都需要检查计算机上是否有足够的空间容纳这些文件。 如何使用HTTP(什么方法)?
    正确的答案是HEAD方法(了解有关方法)。 就我个人而言,我给出的答案是对话者甚至没有听说(或忘记),并且快速搜索表明我也是对的(作为选择)。 我表明我将使用GET方法,但是为了不下载整个文件,我将以最小的步长指示Range参数。 尽管这仅在服务器在响应中发送非零的Accept-Ranges参数时才有效。 我写这个事实是,这个问题只表明我是否从事过这样的工作。 第二次搜索将给出详尽的答案。


  • 身份验证和授权有什么区别? 老实说,我立即问了一个反问:“你为什么错过另一个身份?”。 通过这一点,我仔细地尝试使对话者清楚地知道了这些问题。


  • HTTP和HTTPS有什么区别?


  • 什么是CSRF令牌?


  • 除了JSON,XML之外,您还知道哪些数据格式?
    它们太多了,所以我将不限于特定的列表。


  • 什么是SOAP?
    古怪的问题。 我不喜欢这些。 为什么要问什么永远不会使用,或者肯定不会在我的项目中使用?


  • 您知道什么设计模式?
    Google可以帮助您;)


  • 在有关底层开发的访谈之一中,很多人询问算法。
    通常,在评估算法的复杂性时,至少要大致了解什么是O-big。 也许还希望了解基本算法:简单搜索,二进制搜索,排序,快速排序,使用树(宽度和深度遍历)。 一位熟人建议我读一本很棒的书“ Grokay算法。AdityaBhargava”。 我认为不可能如此精美,简单地解释相当复杂的事情。 一口气读(诚实)! 我强烈推荐给像我这样不认为自己是算法专家的人。 只是没有话!



巨蟒
  • 什么是PEP8? 您如何看待他?


  • 您知道什么编程模式,以及如何实现?


  • 在python中实现Singleton模板有哪些选项?
    我还建议您了解通过装饰器实现的缺点(尤其是对于测试)。 当然,通过元类,这是最优雅,最通用的方式。


  • 装饰器。
    我认为阅读和理解将很有用:



  • python如何实现公共,私有,静态方法?


  • 什么是元类?
    我建议您充分阅读 内容


  • 他们没有问,但我建议您阅读一下第二版和第三版之间的基本差异(至少为2.7和3.4)。


  • 什么是新的 ()? 它与init ()有什么不同? 他们按什么顺序执行?


  • 您知道什么程序可以检查代码样式? 它们的优缺点是什么?
    我个人使用过pylint,pychecker,但是我命名了三个主要的:pychecker,pylint,pyflakes,因为我在==之前已经阅读过它们。顺便说一下,这是最新版本,其中详细介绍了用于分析Python代码工具


  • 您如何测试代码? 什么在嘲笑?
    就个人而言,我使用毒药,单元测试,鼻子或看特拉维斯所说的话。 关于模拟谷歌更好。


  • 关于测试,我喜欢以下问题:


    • 如果被测函数使用到外部服务的远程连接,有时会看到超时错误,404等,该怎么办?
    • 如果被测函数需要大量时间在其中执行重复操作该怎么办? 例如,在周期内从1..1000000开始,在此读取,写入和计算某些内容。
      我建议您阅读有关修补的信息。

  • 您知道python中的数据结构吗? 哪些是可变的/不可变的?
    我个人现在知道有很多人。 除了典型的字典(dict,list,set,tuple)外,请务必阅读freeze_set,default_dict,ordered_dict(与新版本不再相关)以及办公室中的其他内容。 停靠(是的,从它开始)。


  • 哈希表(字典)如何工作? 什么是碰撞以及如何处理?
    我认为,对于高级职位来说,知道是有道理的。


  • 搜索将在哪里更快,在哪里进行搜索,原因为何:字典,列表,集合,元组?


  • 参数值如何传递给函数或方法?


  • 什么是发电机? 它与迭代器有何不同?
    有较短的文章,但我喜欢这一篇 。 简短的stackoverflow答案中有很多事情无法完全揭示。


  • 什么是列表/字典理解?


  • 我无法提出具体的问题,因此建议您阅读有关自省的信息(使用dir(), dir ,hasattr(),getattr()),名称修饰。


  • 单(_)和双(__)下划线有什么区别?
    一个详尽的答案在这里


  • 什么是GIL? 他有什么问题?


  • 什么是MRO? MRO2和MR3(钻石问题)有什么区别?
    启动谷歌,您自己将了解一切。


  • 旧样式类和新样式类之间有什么区别?


  • 您对线程技术了解多少。 线程与多处理?
    我建议您自己阅读并尝试-http: //effbot.org/zone/thread-synchronization.htm 。 这篇文章有点陈旧,但是它提供了很好的理解。


  • 您是否使用过asyncio? 它有什么特点?
    我建议阅读有关异步Python的文章并亲自体验。


  • 什么是垃圾收集器(gc)? 它的优缺点是什么?
    我认为这里描述了答案所需的一切。


  • 为什么需要芹菜?


  • 什么是异步/等待,它们的用途是什么,以及如何使用它们?


  • 有一个功能:


    def f(sum, l=[]): l.append(sum) print(l) 

    屏幕上将显示什么:


     l = [1] f(10) // [10] f(10) // [10, 10] f(10, l) // [1, 10] f(10) // [10, 10, 10] print(l) // [1, 10] 


Django的/烧瓶
  • 序列化程序如何在Django REST框架中工作?
  • Meta在序列化器中负责什么?
  • django和Flask之间的性能差异是什么(为什么)?
  • 这些框架的目的是什么?
  • 身份验证在Django中如何工作?
  • django如何处理(并生成)CSRF令牌?

前端
  • 什么是饼干? 为什么要使用它们,如何与它们一起使用以及将它们存储在哪里?
  • 服务器可以更改(添加,删除)cookie吗?
  • 什么是JWT(JSON Web令牌)?

SDLC
  • 敏捷\ scrum:所有您需要知道的
  • CI和CD有什么区别? 对于战车中的人员:CI-持续集成,CD-持续交付
  • Scrum和看板有什么区别?
  • 您知道什么类型的测试?
    除了Google:单元测试,集成测试,验收测试等。
  • 给团队负责人的问题(最有可能的问题):如果没有对项目的测试并且客户不想在开发上花费时间和金钱,您将怎么办?
    就个人而言,我呼吁客户实现盈利。
  • 什么是代码债务,以及如何处理它(生活,爱情,战斗)?

Git,版本控制,重构
  • 您知道(使用)什么版本控制系统?
  • 什么是Git Flow?
    我建议您阅读它 ,因为这是有据可查的。
  • 什么是git rebase?
  • 什么是git cherry pick?
  • 您使用什么工具进行代码审查?
    就个人而言,我是github Web客户端的粉丝(它充满了有趣且方便的功能)。 但是我的对话者认为我是牛d,而我则减负。 我在家里用谷歌搜索,发现有很多专用软件与我使用3年多的软件太相似了。 软件即软件-适用于业余爱好者。
    附言 我不喜欢这一刻,因为我有足够长的代码审查经验+我不得不不断读取500到3000个长度变化的提交(是的,在我的主要项目之一中,这样的提交是正常的),人们决定我不知道其他实用程序-这意味着牛d。
  • 什么是强制推送?
  • 什么是预提交检查?
  • 什么是代码内聚和代码耦合?

资料库

令我惊讶的是,关于该主题的问题在我看来似乎太简单了(就像在学校一样),只有2-3个例外。


  • 什么是交易? 她有什么财产?
  • 什么是事务隔离级别? 他们是什么样的人?
    我建议您仔细阅读本文,因为这些是基本知识
  • 什么是嵌套交易?
  • 什么是游标,为什么需要它?
  • PostgreSQL和MySQL有什么区别?
  • PostgreSQL中的VACUUM是什么?
  • 什么是解释? 它和EXPLAIN ANALYZE有什么区别?

大数据

不幸的是,我想起了几个问题,因为我以前在软件开发和使用数据库方面的经验对我的对话者很重要(我认为这很聪明)。


  • 什么是Hadoop?...和HDFS?
  • 什么是MapReduce,它如何工作?
  • 是否可以创建许多映射器和化简器(或指示其数量)?
  • Hive和HBase有什么区别
  • 是否可以在HBase中创建索引?
  • 什么是分区?
  • 分区和合并有什么区别?
    这里描述的非常简单且负担得起。
  • Zookeeper中的主选举是什么?

任务

出乎意料的是,只有十多个面试中的一个被要求编写代码。 可能是因为其他所有人都想在理论部分之后检查代码。 而且由于访谈至少持续了一个小时(最长-三个小时!),而且所有问题都没有被提出,所以这些家伙根本没有时间检查代码。
除了练习,我不会建议其他任何事情。


  1. 有一个包含用空格分隔的单词的文件。 例如:“ abba com mother bill妈妈abba dog abba mother com”。 有必要找到并推论最经常出现的三个单词(顺序无关紧要)。 也就是说,在我的示例中,这三个词是“ abba com mother”,“ com mother bill”,“ mother bill mother”等。 正确答案应该是“ abba com mother”(频率-3倍)。
  2. 编写一个函数来遍历树的深度(宽度)。
    为了避免浪费时间,我将提供两个功能都非常漂亮和简单的链接。
    还有另一个简单的任务:编写一个生成器。

我的问题和链接

出于一般教育目的,值得阅读以下文章:


  • “ Python面试问题。” 我阅读了不同的内容,但是由于某种原因,我仅将这两个添加到了书签-12 。 但我建议您更多地使用Google。
  • Likbez谈编程语言的打字
  • 遗憾的是,在讨论数据库时,CAP定理没有问题。 在这里找到更多。
  • 我不知道为什么微服务这个话题没有被提及。 我只能假设那些采访我的人很少与他们合作或没有给予足够的重视。 但是,如果您有兴趣,这里是一篇好文章
  • 令我惊讶的是,没人问过有关虚拟化,泊坞窗,容器,Kubernetes的问题。 我建议您至少与docker打交道,因为现在有很多简单的分步说明和说明。
  • 超级有用的Python链接
  • Zen Python中的示例
  • 我认为,每个使用Python的人都应该了解很棒的创新
  • 很少有对话者知道合著者自己在这里讲述的python词典。
  • 没有人问过Python中的Lambda,但最好了解它是什么以及与它一起吃什么。
  • python中的类型和技巧。 这篇文章很陈旧,但是现在大多数“技巧”都是相关的。
  • 顺便说一句,对于python爱好者来说- 最新新闻和其他资料摘要
  • 在前面,我建议您看一下有关JavaScript中事件循环的简短讲座。 我认为您不知道它是如何工作的。 我强烈推荐它
  • 关于服务器端,建议您了解nginx和apache之间的区别。 互联网上到处都是文章。 如果真的很有趣,那么幕后有什么不同-这是一篇带有示例文章

给每个真正想精通掌握的人的建议-不要懒于在控制台中重复代码(无论是python,DB还是其他东西)。 请勿复制,即重复。 当然,这意味着新材料,而不是您长期盲目写作的材料。


实际上,问题多出了3-4倍。 忘记了什么。 但是我带来了最重要的。


您可能注意到前面几乎没有问题。 这是因为我们要么没有时间去找他们,要么他们很少,以至于我忘记了他们。


顺便说一句,这里是IT各个领域能力的良好矩阵 。 如果您有机会进行采访,我建议您至少要了解您需要问的内容和级别,不要将每个人都划在同一条杠下(现在经常这样做)-积累了太多不同的领域。 就我个人而言,我不明白为什么需要高级前端对数据库有很好的了解,或者要求高级后端对浏览器引擎或事件循环与浏览器渲染器或测试器之间的交互有深入的了解-能够找到平衡的最短方法图等 希望看看这个矩阵,您会明白我的意思。


我衷心祝愿每一个决定巩固自己并向他人展示自己的知识,以便获得一个有趣的好机会的人成功!


UPD:
如果您在4to-pramp.com,可以在这里练习面试。 感谢non_smile的链接。

Source: https://habr.com/ru/post/zh-CN439576/


All Articles