好程序员Python培训分享Python程序员面试技巧,往年的这个时候,“金三银四”的招聘热潮已经扑面而至。今年,因为疫情的影响,各大公司的社招可能跟“2002的第一场雪”一样,比以往时候来得更晚一些。当然,对于计划在年后找工作或者跳槽的人来说,相当于多了一段可以用来准备面试的时间,相信有这个计划的人已经开始各项准备工作了。
今天,想跟大家聊一聊面试中的一些技巧,因为我自己是一个程序员,目前以Python作为主要的开发语言,我跟大家聊的也是程序员面试的相关技巧。可能我会以Python程序员面试为例,但是这些技巧应该对程序员都有用的。
我们的简历上通常会有一个叫做“专业技能”的部分,这个部分通常会罗列6到12项左右的内容来展示你对编程语言、开发框架、服务器产品、开发工具等的理解和掌握情况。这里的每句话在面试时都可能都会产生一个或多个对应的问题,如果不事先做好准备,只是凭感觉罗列出若干项内容,那么在面试的时候必然是一个填不起的大坑。接下来,我为大家举例说明这些坑都在什么地方。
下面的内容是不是在你的简历上也有类似的描述呀,那么看看我提出的问题,你是否能够给出漂亮的答案。
技能点1:熟练的使用Python语言进行应用程序开发,有良好的编程习惯,对面向对象的设计原则以及常用设计模式有较为深入的理解,熟悉Python开发中常用的标准库和第三方库。
如果我是面试官,针对上面的描述会问你如下几个问题:
问题1:你所指的良好的编程习惯是什么。
问这个问题其实是想考察你对编程规范(如:PEP8)的理解,除此之外还想知道你有没有使用Lint工具检查代码的习惯。
问题2:说一说你知道的面向对象的设计原则有哪些;你在项目中用到过哪些设计模式。
很多面试者都喜欢说自己懂设计原则和设计模式,但是基本上稍微一问就原形毕露了。最简单的“哪些地方会用到单例模式”,很多面试者都答不上来,而且面试官并不想听你说出23种设计模式的名字,而是想知道你的项目中哪个场景用到了哪种设计模式。
问题3:说几个你在平时工作中用得最多的标准库和三方库。
技能点2:熟练的使用Django和Flask框架进行Web应用后端开发,熟悉MVC(MTV)架构模式,有在项目中使用django-redis、django-celery、django-rest-framework、flask-sqlalchemy、flask-restful等第三方库的经验,了解过Web.py、Tornado、Twisted等框架。
如果我是面试官,针对上面的描述会向你提出如下几个问题。
问题1:说一下你对MVC的理解。
这个问题其实还是很友好的,但是如果你就背书式的把网上找到的所谓的参考答案念出来,面试官肯定是不满意的。这种问题一定要说自己的理解和看法,最好结合着项目来讲。我在面试中还有一个神奇的发现就是很多面试者认为MVC就是三层架构,我只能说这个行业里面蹩脚的开发者还真多。
问题2:说一说Django框架中一个请求的生命周期是怎样的。
问题3:说一说Django、Flask、Tornado框架各自的优缺点。
技能点3:熟悉关系型数据库产品MySQL和Oracle,熟练的使用SQL,对MySQL的优化有一定程度的了解,熟悉非关系型数据库产品MongoDB和Redis,有使用高速缓存服务和消息队列服务优化项目的经验。
问题1:你知道哪些和MySQL优化相关知识?
这个问题可能还是比较能够鉴别开发者的能力和水平,因为MySQL的优化涉及到硬件、软件、架构各个方面的问题,当然还有程序本身的优化。
问题2:在使用Redis实现高速缓存时,有没有遇到过缓存雪崩、缓存穿透等问题?
问题3:比较一下你用过的数据库产品,说一下它们都适合什么样的应用场景。
技能点4:熟悉常用的机器学习算法和模型,包括:KNN、DecisionTree、LR、Naive Bayes、SVM、PCA、AdaBoost、K-Means等。
问题1:K均值算法的优缺点是什么?如何对算法进行调优?
问题2:欧氏距离和余弦距离的特点和应用场景分别是什么?
问题3:决策树有哪些常用的启发函数?
技能点5:熟练使用Linux操作系统,熟悉Linux常用服务的安装和配置,熟悉Shell编程。
问题1:说一些你常用的Linux命令。
这个问题貌似非常友好,但是如果你张嘴就说出pwd、ls、cd这些命令,面试基本就结束了,为什么自己想想就明白了,想不明白就给我留言吧。
问题2:如何使用find命令根据文件大小、文件最后修改时间搜索文件,如何删除搜索到的文件。
一个命令加上的常用参数深挖一下,也可以甄别出很多对Linux系统并不熟悉的小白。
问题3:Shell脚本中如何定义函数?函数中如何获取传入的参数?如何调用函数并传入参数?
技能点6:熟练的使用Git实施项目的版本控制,熟悉项目的开发流程。
问题1:说一下之前的公司项目开发使用的过程模型(开发流程)。
问题2:说一下之前的项目中是如何实施缺陷管理(错误管理)的。
这个问题还可以继续深挖到如何提一个缺陷报告、缺陷分为多少个级别等。
问题3:之前公司在使用git进行版本控制时,用的是哪一种分支管理策略?
我经常惊奇的发现,很多面试者说自己能熟练的使用Git,但是居然不知道Git的分支管理策略。
技能点7:熟悉Nginx、uWSGI、Gunicorn等服务器的配置和使用,熟Docker、K8S等工具在项目部署中的应用。
问题1:之前的项目部署一共用了多少台服务器?有没有跳板机?有没有配置VPC?
问题2:说一下WSGI是什么?比较一下uWSGI和Gunicorn。
很多面试者对CGI、WSGI这些完全没有概念,这就是典型的知其然不知其所以然。
问题3:微服务架构有什么优点?项目中是否使用过微服务架构?
技能点8:熟悉Web前端开发的语言和框架,对HTML、CSS和JavaScript有较好的理解和掌握,熟悉jQuery、Lodash、Bootstrap、AngularJS、Vue.js等前端库和框架。
前端的东西我也不太懂,也没有什么发言权,但是一般面试的时候我也喜欢问下面几个问题。
问题1:你们公司的前端用过哪些库和框架?
就算你只负责后端开发,但是前端用的技术肯定也应该是清楚的,没吃过猪肉也见过猪跑。
问题2:你们移动端是原生开发还是跨平台开发?
这个问题可以继续追问关于跨平台开发工具的相关问题,道理跟第一个问题一样。
问题3:你们公司前端跟后端如何对接工作?例如遇到数据格式化之类的问题时,到底是前端来处理还是后端来处理。
看到这里,相信你已经比较深刻的体会到了写简历是个技术活,一不小心就给自己挖一个在面试的过程中无法填补的大坑。那么如何提前把这个坑填好了,两个办法:
- 认真负责的制作简历,不要把无法把控的内容强加到自己的简历上。
- 对于已经做好了简历,给它做一版标注稿,把可能遇到的问题提前标注好,并借此思考这些问题应该如何解决,这也算是对之前学习工作的经历做一个总结和沉淀。
当然,刚才只说了“专业技能”的部分,至于”工作经历“和”项目经验“的部分也会有类似的问题。行成于思毁于随,凡事预则立不预则废,制作一份有竞争力的优质简历的关键就在于此。面试当然不仅仅是简历,简历只是一个开始,找工作需要的是全面展示自己的综合实力。但是,我们相信好的开始是成功的一半,首先做好自己的简历,才能迎来美好的”金三银四“。