Skip to content

Latest commit

 

History

History
109 lines (82 loc) · 9.97 KB

Python面试剖析.md

File metadata and controls

109 lines (82 loc) · 9.97 KB

Python面试剖析

专业技能解读

在你简历的专业技能部分,很有可能会有6到10项左右的内容,这些内容中的每句话在面试时都可能产生一个或多个对应的问题。接下来我就以下面罗列的专业技能为例,说明如何根据简历来准备你的面试话术,以及如何用专业的方式来回答问题。

  1. 熟练的使用Python语言进行应用程序开发,有良好的编程习惯,对面向对象的设计原则以及常用设计模式有较为深入的理解,熟悉Python开发中常用的标准库和第三方库。

    问题1:你所指的良好的编程习惯是什么。

    问题2:说一说你知道的面向对象的设计原则有哪些;你在项目中用到过哪些设计模式。

    问题3:说几个你在平时工作中用得最多的标准库和三方库。

  2. 熟练的使用Django和Flask框架进行Web应用后端开发,熟悉MVC(MTV)架构模式,有在项目中使用django-redis、django-celery、django-rest-framework、flask-sqlalchemy、flask-restful等第三方库的经验,了解过Web.py、Tornado、Twisted等框架。

    问题1:说一下你对MVC的理解以及Django的MTV跟传统的MVC有什么区别。

    问题2:说一说Django框架中一个请求的生命周期是怎样的。

    问题3:说一说Django、Flask、Tornado框架各自的优缺点。

  3. 熟悉关系型数据库产品MySQL和Oracle,熟练的使用SQL,对MySQL的优化有一定程度的了解,熟悉非关系型数据库产品MongoDB和Redis,有在项目中使用Redis实现高速缓存和消息队列服务的经验。

    问题1:你知道哪些和MySQL优化相关知识?

    问题2:Redis实现消息队列服务器的原理是什么?用到了哪一种数据类型?

    问题3:在使用Redis实现高速缓存时,有没有遇到过缓存雪崩、缓存穿透等问题?

  4. 熟练的使用urllib、requests、aiohttp、re、beautifulsoup、pyquery、pymysql、pymongo、redis、hashlib、json、pickle、zlib标准库或三方库进行网络数据采集,有使用Scrapy/PySpider开发爬虫的经验,了解Scrapy-Redis。

    问题1:说一下Scrapy框架的工作流程。

    问题2:说一下在爬取数据时如何实现增量爬取和数据去重。

    问题3:比较一下解析页面的几种方式。哪一种是你在项目中用得最多的方式?

  5. 能够使用NumPy和SciPy完成科学运算,熟悉数据分析和可视化工具Pandas和Matplotlib。

  6. 熟悉常用的机器学习算法和模型,包括:KNN、DecisionTree、LR、Naive Bayes、SVM、PCA、AdaBoost、K-Means等。

    问题1:K均值算法的优缺点是什么?如何对算法进行调优?

    问题2:欧氏距离和余弦距离的特点和应用场景分别是什么?

    问题3:决策树有哪些常用的启发函数?

  7. 熟练的使用Linux操作系统,熟悉Linux常用服务的安装和配置,熟悉Shell编程,熟练的使用vim、awk、sed等工具,了解Linux系统运维常用命令。

    问题1:说一些你常用的Linux命令。

    问题2:如何使用find命令根据文件大小、文件最后修改时间搜索文件。

    问题3:vim中如何设置将制表键自动转换成空格,如何录制宏和播放宏。

    问题4:说一说你了解的Linux运维相关的工具。

    问题5:Shell脚本中如何定义函数?函数中如何获取传入的参数?如何调用函数并传入参数?

  8. 熟悉Web前端开发的语言和框架,对HTML、CSS和JavaScript有较好的理解和掌握,熟悉Ajax和WebSocket相关技术,有在项目中使用jQuery、Axios、Fetch、Vue.js、Bootstrap、sockjs、stomp.js、ECharts等技术的经验。

  9. 熟练的使用Git和Mercury实施项目的版本控制,对缺陷管理和持续集成有一定程度的了解,使用过AB、mysqlslap、sysbench等压力测试工具。

    问题1:说一下之前公司项目开发使用的过程模型以及是否使用了敏捷开发。

    问题2:收一下你之前的项目中是如何实施缺陷管理(错误管理)的。

    问题3:之前公司在使用git进行版本控制时,用的是哪一种分支管理策略?

  10. 熟悉Nginx、uWSGI、Gunicorn、MySQL、Redis等服务器的配置和使用,熟Docker、Docker-Compose、Docker-Swarm等工具在项目部署中的应用。

    问题1:之前项目部署一共用了多少台服务器?有没有跳板机?有没有配置VPC?

    问题2:如何通过Dockerfile来创建容器?

    问题3:说一下WSGI是什么;比较一下uWSGI和Gunicorn。

    问题4:微服务架构有什么优点?项目中是否使用过微服务架构?

    问题5:如何通过Nginx部署反向代理?如何部署Keepalived服务并说明其作用?

项目经验解读

首先,简历项目经验部分一定要使用S.T.A.R法则书写,因为只有这样做才会迫使你梳理每一个业务和技术的细节,在面试的时候不会因为某个细节准备不足而导致整个面试的失败。

项目名称 喵了隔壁(优客逸家官方App)
项目简介 喵了隔壁是以社交合租元素为亮点的租房平台,为有合租需求的用户提供了一个便捷的合租生活平台,目前产品覆盖了成都、武汉、杭州、北京等区域,为数十万用户提供了真实房源保障、室友聊天、小纸条、租客树洞、故事找房、管家服务、在线报修等特色功能。
项目职责 1. 参与了项目的需求整理和评估。
2. 参与了项目核心业务的开发和版本迭代。
3. 参与了移动端数据接口的开发和文档编写。
主要技术 1. 使用Django框架生态圈的djangorestframework为移动端提供REST风格的数据接口,提供了地图找房、附近房源、关键字搜房、房源详情、为你推荐、热门搜索推荐、小纸条(发布、删除、评论、热门话题)、转租(查看、发布、删除)、身份认证、报修服务、房源收藏等数据接口。
2. 使用CBV方式,通过djangorestframework中APIView的子类、ModelViewSet、ReadOnlyModelViewSet来定制数据接口,使用DefaultRouter注册数据接口的路由。
3. 通过继承ModelSerializer实现了房源、小纸条、转租信息、报修信息等模型的自定义序列化器。
4. 在Django项目配置中配置REST_FRAMEWORK的DEFAULT_PAGINATION_CLASS,实现了数据接口的默认分页方式,对于不需要进行分页的数据接口,将其pagination_class属性设置为None。
5. 通过django-redis对接Redis为项目提供缓存服务,通过Django框架的@cache_page和@method_decorator装饰器实现了房源查询结果以及为你推荐、热门搜索、热门话题等热点数据的缓存。
6. 通过数据接口类的backend_filters属性和filterset_class属性指定数据筛选和排序的支持类,使用django-filter三方库以及自定义的FilterSet实现了房源按户型、特色、价格等条件的筛选。
7. 通过数据接口类的authentication_classes属性实现了对小纸条、转租、收藏、关注等数据接口的登录认证功能,通过继承BaseAuthentication并重写authenticate方法对用户身份令牌进行验证,只允许登录后的用户访问这类接口。
8. 通过对接第三方短信平台(Luosimao)实现了短信验证码登录以及重要消息提醒的短信服务,通过接入第三方云存储服务(七牛云)实现了小纸条模块用户上传图片的存储、水印以及缩略图等功能,使用Celery+Redis实现了三方平台接入的异步化处理(避免因三方平台问题造成的请求阻塞)。
9. 通过requests三方库接入聚合数据的身份证查询接口,实现对用户的实名认证功能。
10. 通过requests三方库实现了对百度地图API的接入,解决了项目中地理信息正向和逆向解析的问题,封装了实现经纬度坐标纠偏的函数,实现了从地球坐标到火星坐标再到百度坐标的转换。
11. 使用了Redis内置的GEODIST和GEORADIUS等命令实现了地理信息运算功能,通过django-redis提供的get_redis_connection函数获取原生Redis客户端对象,实现了对Redis命令的调用。
难点分析 1. 周边房源数据过多导致App渲染崩溃,通过……解决了这个问题。
2. 请求三方接口做地理信息运算效率低下,通过……解决了这个问题。

项目职责部分可能产生的问题:

  1. 每个迭代周期是多长?一个迭代周期一般完成多少个功能点?在职期间项目一共迭代了多少个版本?
  2. 一共写了多少个接口以及对应的文档?
  3. 你是否负责了项目的部署和线上运维?具体做了哪些工作?

技术要点部分可能产生的问题:

  1. 简单描述一下你负责的部分涉及到的核心业务模型有哪些?模型之间是否存在关联关系?关联关系的重数是怎样的?
  2. 在使用DRF时有没有对接口访问进行限流?具体是如何实现的?
  3. 项目中用户令牌是如何生成的?如何通过自定义的认证类认证用户身份?
  4. 如何对接七牛云存储,是SDK集成还是API调用的方式?如何将文件上传到七牛云,用到了哪些方法?上传的时候用的是内存文件流还是临时文件?Django框架中如何配置使用文件流还是临时文件?
  5. 多条件组合的数据筛选是如何实现的?多个条件之间如果是或者的关系,程序中应该如何处理?
  6. 项目中如何优化ORM的性能?有没有遇到过1+N查询?如何解决1+N查询问题?
  7. 如何发现项目中的性能瓶颈或者性能问题?发现问题后又是如何解决的?
  8. 项目中遇到的主要难点有哪些?你是如何解决这些技术难点的?