虚言妙诀终虚见,面试躬行是致知,Python技术面试策略与技巧实战记录

刘悦的技术博客 2021-01-21 17:40:47
面试 虚言 妙诀 躬行 致知


原文转载自「刘悦的技术博客」https://v3u.cn/a_id_183

2021年,对于正在找工作的朋友来说,笼罩在新冠肺炎疫情之下,今年的就业季显得更加具有挑战性,更有意思的是,每当这个时候,各种面试经验分享就如同过江之鲫一般,俯拾皆是,因为例子过多,兹不细举。然而这些面试经验大部分都停留在理论阶段,这就造成了一个问题:理论和实际,到底有多大出入?我国古代大名仕曾文正公曾经说:“天下事,在局外呐喊议论,总是无益,必须躬身入局,挺膺负责,方有成事之可冀。”革命先烈李大钊先生也曾感叹:“凡事都要脚踏实地去作,不驰于空想,不骛于虚声,而惟以求真的态度作踏实的工夫。以此态度求学,则真理可明,以此态度做事,则功业可就。”所以本次我们来进行一次真实的线上面试,正所谓空谈误国,实干兴邦,能够检验真理的也只有实践这一条路。

首先打开某著名垂直招聘app软件,寻找我们的猎物:

image

可以看到,我们找到了北京某企事业单位的高级python开发岗位,正所谓不打无准备之仗,在正式面试之前,我们需要对该岗位进行分析,尝试推测出面试中可能会被问到的问题,首先该岗位要求有flask/django/tornado的经验,那么可以肯定,web开发必定是主要工作,尤其是flask,很有可能是该职位的主力框架,所以我们需要准备python基础、网络协议、以及flask和django的一些相关知识用来应对。其次,要求对mysql/pgsql/es/redis等数据库有使用经验,那么可以推测出对数据库要熟练使用,特别是pgsql,要准备pgsql与mysql的异同,同时注意到文中提及es,那么对于全文检索相关的知识点也需要有所准备,最后redis相关的nosql数据库知识点也必须巩固,以备不时之需。最后,该职位提及需要熟悉linux常用命令以及docker生态体系,同时有关于selenium自动化测试经验。由此可以推断出:该岗位有可能需要参与运维或者部署工作,同时也有很大机会参与到自动化测试项目中去,所以对于docker和selenium相关知识点的筹备刻不容缓,除此之外,如果还能准备一些深度学习的案例和项目那就更是锦上添花了。

万事俱备,择一黄道吉日,我们开始面试:

面试官:请您做一下自我介绍?
面试者:您好,我是15年毕业的,在内蒙古民族大学学的计算机,毕业之后呢,教了两年的高中计算机课程,干了两年多以后在我们本地找了一家公司做微信小程序开发,然后我们这个前端是用的这个mp-vue框架,后端就是用Django,写的是一个C端的电商平台,最近日活维持在5万左右。
我主要负责的就是后端的Django的一些接口逻辑开发,主要和业务打交道,另外也接触过持续交付部署,我们采用的是这个容器式部署(docker),还有灰度的测试以及监控以及一些日常的sql语句提取数据小bug修复这类的工作,最近就是我看咱们公司的这个职位里要求这个selenium,
最近我也研究了一下selenium,并且写了一个小脚本,就是可以自动化上传表单数据。这就是我最近的一些工作。

其实自我介绍最忌讳的就是说废话,比如姓名、年龄这些简历中都有体现,所以我们要说点简历中没有的,比如自己的项目过往,取得的成就与建树(日活5万,日活是一个非常重要的指标,对于增长后期的产品,一个关键的提升指标就是做活跃,虽然5万日活还无法变现,但它是一个从0到1的过程,是百万日活的基础),甚至有意无意的,谈论的技术点可以往岗位描述上倾斜,比如岗位描述中出现过的django、部署、docker、selenium等技术,都可以在面试的自我介绍中再次出现,暗示自己与该岗位珠连璧合,相得益彰。需要注意一点的是,面试过程中最好全程使用敬语:您,以示尊敬。

面试官:好的,你简单说下这个es全文检索,
面试者:es是这样,就是当时我们就是想做一个这个检索功能嘛,但是这个老板要求是他这个响应时间要比较短,所以我们就采用这个es,es本身就是他就是这个基于内存它的这个响应速度比较快,第二它是基于这个倒排索引,速度上要比那个mysql的那个正向索引,io操作要损耗的小一些,所以当时我是结合结巴分词不知道您听没听说过?
面试官:略有耳闻。
面试者:我们可以理解为,将用户搜索的语句进行分词操作,给它切词切完词之后呢,我按照词性做这个索引,我就是举个简单例子,比如说他要搜这个超薄笔记本,但实际上超薄和笔记本一个是形容词,一个是名词,那其实我是把这个词性作为这个搜索等级,形容词优先级为2;名词作为优先级为1。在es里做那个分层索引,按照优先级来去检索数据。

开始正式进入技术面试,首先面试官问了岗位描述中出现过的技术点:es全文检索,我们可以先简单介绍一下项目背景、底层原理,同时在适当时候,进行反问,反问的意义在于,避免枯燥的一问一答模式,能够增加互动,调节气氛,最后在技术细节上,最好举例子,而不是泛泛而谈,这里既是以用户搜索“超薄笔记本”为例子,详细阐述后端es的检索策略,关于检索策略,其实本质上讨论的是搜索词权重(术语权重,也称作Term Necessity,Query Term Weight)问题,属于检索词解析的一部分。熟悉倒排索引的朋友都知道,文档通常以词的粒度建立索引。所以对于词的解析,在检索解析中属于非常重要的工作,其中,不仅仅包括正确识别目标词,还包括围绕目标词的各种特征提取,所以,当检索词文本中包含不止一个词时,问题的复杂程度就发生指数级的增长。用户的搜索有更具体的需求,最直观的体现于文本长度增长,围绕目标词有了更多的补充、限制。同时语序也相较文章类文本更加自由,解决方案就是通过结巴分词对检索词进行切词操作,当检索词存在多个词时,每个词的重要程度是不同的,在基于词召回的基础上,对词设立优先级(基于词性),以此达到近似用户原始需求的语义级别。

面试官:那请再谈谈系统的登录模块。
面试者:登录模块一开始做了一个相对简单的校验功能,那么后续我是做了一下优化,就改成了这个openldap,不知道您听没听说过,就是一个基于层级架构的统一管理系统。
面试官:好像没有听说过。
面试者:它有点像es,检索速度非常快,也是便于统一管理,也是为了便于扩展,防止以后有多个项目即陆续上线重复造轮子,同时,B端如果新上线一些项目的话,方便我做single sign on,就是单点登录。这也是我自己个人后续改造的一个小系统,可以理解为统一认证,就是把登录这个东西作为微服务给它抽离出来。

登录模块对于大部分应用来说,都是最基础的模块。看似简单,却与相当多的产品功能用户使用场景交织在一起,受到产品类型、用户定位、业务逻辑、使用场景、用户操作等不同因素影响,所以此时我们需要上升产品高度,避免流水账式的描述,而是点出统一认证(openldap)和微服务架构,同样使用反问来试探对方的知识体系深浅,最后基于统一认证体系,点出最终功能实践:Single Sign On(单点登录)。

面试官:ok,了解,你们后台权限管理是怎么设计的?用过xadmin吗?
面试者:后台权限系统是我们是自己研发的,当然了,一开始技术选型的时候也考虑过xadmin,但是它里面系统设计您应该也了解过,就是它本身二开的时候,门槛比较高,因为逻辑设计的比较复杂,如果说我想去改他的模板,或者说我想在他中间键里边做一些扩展,有点麻烦,所以我是单独把他单独抽出来自己做的。
面试官:能具体谈谈吗?
面试者:我是改造了xadmin的那个权限系统就是用了一套位运算的系统,我不知道您了解没了解过位运算。
面试官:就是类似二进制的运算?
面试者:对,我是将不同的系统节点的对应到每一个二进制位的位上,然后我针对用户带过来的权限节点,对相应的位做这个位与运算,来获取相关权限,进行授权操作则使用位或运算。

其实关于权限系统,无非就是权限模型的使用(acl/rbac/abac),但是如果你在权限设计的形式上做出一点创新,那么就像黑火药时代里突然诞生的核弹一样,一定会给面试官留下深刻印象,比如说计算机最底层的基础:位运算。众所周知,运算速度快、效率高、节省存储空间、对权限控制非常灵活。所有语言都提供了位运算符,包括Python,我们可以在不同语言实现的系统、甚至数据库中使用位运算实现对用户权限的管理。当然了,位运算也会带来一些局限性,随着权限码增加,数据长度也相应的增长。这就要求权限码不能超过计算本身运算长度,在数据库中存储权限码时,权限码长度也不能的超过所使用数据类型。如:在32位系统中,权限节点数量不能多于32个。而如果基于mySQL数据库的BIGINT,其存储空间为8Byte,使用BIGINT存储存储码时,权限数不能多于64个。

面试官:好的,能说说离职原因吗?
面试者:我是这么考虑的,我其实就是觉得人嘛,应该是往更高的追求去发展,更大的环境,更大的市场来锻炼自己,对吧?
面试官:嗯。
面试者:当然这是我个人认为啊,而且现在我觉得现在的情形是逆水行舟,不进则退,因为现在北京疫情还是挺严重的,但是我觉得这是我的真正的机会,我应该抓住。
面试官:好的,那你4号能来公司吗?
面试者:可以,我买好机票了已经。

面试到了这个阶段,基本上技面已经结束,剩下就是人资问题了,关于离职原因很多朋友喜欢说诸如公司倒闭、搬迁、裁员等是由,但实际上,这些理由并不是面试官“想”听的,那么从人力资源管理的角度出发,面试官到底想听点什么呢?他想要一些主动而正面的原因,而不是一些被动的原因,因为裁员、搬迁和倒闭这些都是被动的,你“被迫”离开原公司。所以说白了,他需要你给他一点企图心,企图心是指一个人做成某件事情,或达成既定目标的意愿。 企图心的强烈程度,取决于意愿的大小,如果意愿越强烈,说明企图心越大,成功的可能就越高,所以,理所当然的,你需要向他证明你是带着企图心来面试的。

面试官:好的,那回头见?
面试者:好的,非常感谢您给我这次面试的机会
面试官:别那么客气,88
面试者:好的,再见

最后,我们需要以一个感谢来结束整个面试,无论面试成功与否,一个真诚的致谢会给面试官留下好的印象,感谢对方的同时,也感谢自己的努力。关于整个面试流程的视频,请移步:

结语:就像《双城记》里面写的那样:这是最好的时代,这是最坏的时代;这是智慧的时代,这是愚蠢的时代;这是信仰的时期,这是怀疑的时期;这是光明的季节,这是黑暗的季节;这是希望之春,这是失望之冬;人们面前有着各样事物,人们面前一无所有;人们正在直登天堂,人们正在直下地狱。在这个疫情反复无常的年代,有时让人们觉得有无限期待,有时又让人陷入无限的绝望,但无论如何,我们总要直面困难,开启新的征程,与其坐而论道,不如起而行之,在生活中学会生活,在面试中学会面试。

原文转载自「刘悦的技术博客」 https://v3u.cn/a_id_183

版权声明
本文为[刘悦的技术博客]所创,转载请带上原文链接,感谢
https://segmentfault.com/a/1190000039052560

  1. Centos7 installing Python 3.8
  2. Centos7 installing Python 3.8
  3. Django——图书管理系统(六)
  4. Django——图书管理系统(五)
  5. Django -- library management system (6)
  6. Django -- library management system (5)
  7. python批量插入数据小脚本
  8. Python batch insert data script
  9. ZoomEye-python 使用指南
  10. Zoomeye Python User's Guide
  11. 用Python写代码,一分钟搞定一天工作量,同事直呼:好家伙 - 知乎
  12. Using Python to write code, one minute to complete a day's workload, colleagues call: good guy - Zhihu
  13. Python 上的可视化库——PyG2Plot
  14. Pyg2plot: a visualization library on Python
  15. Python 上的可视化库——PyG2Plot
  16. Python实用代码-无限级分类树状结构生成算法
  17. Pyg2plot: a visualization library on Python
  18. Python utility code - infinite classification tree structure generation algorithm
  19. 奇技淫巧,还是正统功夫?Python推导式最全用法
  20. Pandas 的这个知识点,估计 80% 的人都得挂!
  21. 前后端分离有什么了不起,手把手教你用Python爬下来!
  22. 在 Azure 上执行一些简单的 python 工作
  23. 推荐 :利用Python的混合集成机器学习(附链接)
  24. Cunning or orthodox Kung Fu? The most complete usage of Python derivation
  25. It's estimated that 80% of pandas people have to hang up!
  26. What's so great about the separation of front and rear ends? Hand in hand teach you to climb down with Python!
  27. Doing some simple Python work on azure
  28. Recommendation: hybrid integrated machine learning using python (link attached)
  29. Learning PPO algorithm programming from scratch (Python version)
  30. Python OpenCV 图片模糊操作 blur 与 medianBlur
  31. Python OpenCV image blur operation blur and mediablur
  32. 成功解决cv2.error: OpenCV(4.1.2) C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:182: err
  33. Cv2.error solved successfully: opencv (4.1.2) C:: (projects / opencv Python / opencv modules / imgproc / SRC)\ color.cpp:182 : err
  34. Python 中使用 virtualenv 管理虚拟环境
  35. Using virtualenv to manage virtual environment in Python
  36. 如何使用Python执行系统命令?Python学习教程!
  37. How to use Python to execute system commands? Python tutorial!
  38. 快速掌握Python中的循环技术
  39. Quickly grasp the loop technology in Python
  40. Python主流Web框架之Tornado
  41. appium+python自动化63-使用Uiautomator2报错问题解决
  42. Tornado: the mainstream Python Web Framework
  43. Appium + Python automation 63 - using uiautomator2 to solve the problem of error reporting
  44. 爬虫+django,打造个性化API接口
  45. Crawler + Django to create personalized API interface
  46. 爬虫+django,打造个性化API接口
  47. Crawler + Django to create personalized API interface
  48. C、C++、Java、PHP、Python主要应用在哪里方面?
  49. C. Where are the main applications of C + +, Java, PHP and python?
  50. Python 无限级分类树状结构生成算法 「实用代码」
  51. Python infinite classification tree structure generation algorithm "practical code"
  52. 【Azure 存储服务】Python模块(azure.cosmosdb.table)直接对表存储(Storage Account Table)做操作示例
  53. [azure storage service] Python module( azure.cosmosdb.table )Direct operation example of storage account table
  54. 【Azure 存储服务】Python模块(azure.cosmosdb.table)直接对表存储(Storage Account Table)做操作示例
  55. [azure storage service] Python module( azure.cosmosdb.table )Direct operation example of storage account table
  56. openpose c++ 配置教程 + python api
  57. Openpose C + + configuration tutorial + Python API
  58. PYTHON爬虫实战_垃圾佬闲鱼爬虫转转爬虫数据整合自用二手急速响应捡垃圾平台_3(附源码持续更新)
  59. 使用python javaSerializationTools模块拼接生成 8u20 Gadget
  60. 萌新入门之python基础语法