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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: 2023年,对于正在找工作的朋友来说,今年的就业季显得更加具有挑战性,更有意思的是,每当这个时候,各种面试经验分享就如同过江之鲫一般,俯拾皆是,因为例子过多,兹不细举。然而这些面试经验大部分都停留在理论阶段,这就造成了一个问题:理论和实际,到底有多大出入?我国古代大名仕曾文正公曾经说:“天下事,在局外呐喊议论,总是无益,必须躬身入局,挺膺负责,方有成事之可冀。”革命先烈李大钊先生也曾感叹:“凡事都要脚踏实地去作,不驰于空想,不骛于虚声,而惟以求真的态度作踏实的工夫。以此态度求学,则真理可明,以此态度做事,则功业可就。”所以本次我们来进行一次真实的线上面试,正所谓空谈误国,实干兴邦,能够检验真理

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

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

可以看到,我们找到了北京某企事业单位的高级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
面试者:好的,再见

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

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

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1天前
|
监控 测试技术 Python
颠覆传统!Python闭包与装饰器的高级实战技巧,让你的项目效率翻倍
【7月更文挑战第7天】Python的闭包与装饰器是强大的工具。闭包是能记住外部作用域变量的内部函数,常用于动态函数创建和工厂模式。例如,`make_power`返回含外部变量`n`的`power`闭包。装饰器则允许在不修改函数代码的情况下添加新功能,如日志或性能监控。`my_decorator`函数接收一个函数并返回包装后的函数,添加了前后处理逻辑。掌握这两者,可提升编程效率和灵活性。
11 3
|
1天前
|
开发者 Python
Python元类实战:打造你的专属编程魔法,让代码随心所欲变化
【7月更文挑战第7天】Python的元类是编程的变形师,用于创建类的“类”,赋予代码在构建时的变形能力。
10 1
|
1天前
|
Python
Python编程实战:利用闭包与装饰器优化日志记录功能
【7月更文挑战第7天】Python的闭包和装饰器简化了日志记录。通过定义如`log_decorator`的装饰器,可以在不修改原函数代码的情况下添加日志功能。当@log_decorator用于`add(x, y)`函数时,调用时自动记录日志。进一步,`timestamp_log_decorator`展示了如何创建特定功能的装饰器,如添加时间戳。这些技术减少了代码冗余,提高了代码的可维护性。
8 1
|
3天前
|
数据采集 机器学习/深度学习 数据可视化
了解数据科学面试中的Python数据分析重点,包括Pandas(DataFrame)、NumPy(ndarray)和Matplotlib(图表绘制)。
【7月更文挑战第5天】了解数据科学面试中的Python数据分析重点,包括Pandas(DataFrame)、NumPy(ndarray)和Matplotlib(图表绘制)。数据预处理涉及缺失值(dropna(), fillna())和异常值处理。使用describe()进行统计分析,通过Matplotlib和Seaborn绘图。回归和分类分析用到Scikit-learn,如LinearRegression和RandomForestClassifier。
14 3
|
3天前
|
机器学习/深度学习 算法 数据挖掘
Python强化学习应用于数据分析决策策略:** - 强化学习让智能体通过环境互动学习决策。
【7月更文挑战第5天】**Python强化学习应用于数据分析决策策略:** - 强化学习让智能体通过环境互动学习决策。 - Python因丰富库(如TensorFlow, PyTorch, Keras, Pandas, NumPy)和生态而受青睐。 - 使用OpenAI Gym构建环境,如`gym.make('CartPole-v0')`。 - 选择模型,例如神经网络,定义策略如Q-Learning。 - 训练模型,调整智能体行为,如Q-Learning更新Q表。 - 最后评估模型性能,实现数据驱动决策。
11 3
|
5天前
|
运维 知识图谱 Python
专为运维工程师设计!阿里藏经阁出品的Python实战手册被我搞来了
Python 可能是极少数既简单又强大的编程语言中的一种。更重要的是,用它来编程是非常快乐的事。 今天给小伙伴们分享的是阿里“藏经阁”出品的专门给运维工程师设计的Python实战手册
|
5天前
|
算法 Java Linux
python中的面试常考知识点
python中的面试常考知识点
|
5天前
|
数据采集 Python
揭秘淘宝商品信息:Python爬虫技术入门与实战指南
Python爬虫用于获取淘宝商品详情,依赖`requests`和`beautifulsoup4`库。安装这两个库后,定义函数`get_taobao_product_details`,发送GET请求模拟浏览器,解析HTML获取标题和价格。注意选择器需随页面结构更新,遵守爬虫政策,控制请求频率,处理异常,且数据只能用于合法目的。
|
10天前
|
算法 Java 调度
《面试专题-----经典高频面试题收集四》解锁 Java 面试的关键:深度解析并发编程进阶篇高频经典面试题(第四篇)
《面试专题-----经典高频面试题收集四》解锁 Java 面试的关键:深度解析并发编程进阶篇高频经典面试题(第四篇)
18 0
|
2天前
|
存储 算法 Java
Java面试之SpringCloud篇
Java面试之SpringCloud篇
16 1