I. 面试中的公共问题

计算机基础

  1. TCP/IP模型相关问题。

建议阅读阮一峰的《互联网协议入门(一)》《互联网协议入门(二)》

  1. HTTP和HTTPS相关问题。

建议阅读阮一峰的《HTTP 协议入门》《SSL/TLS协议运行机制的概述》

  1. Linux常用命令和服务。
  2. 进程和线程之间的关系。什么时候用多线程?什么时候用多进程?。
  3. 关系型数据库相关问题(ACID、事务隔离级别、锁、SQL优化)。
  4. 非关系型数据库相关问题(CAP/BASE、应用场景)。

Python基础

  1. 开发中用过哪些标准库和三方库。

标准库:sys / os / re / math / random / logging / json / pickle / shelve / socket / datetime / hashlib / configparser / urllib / itertools / collections / functools / threading / multiprocess / timeit / atexit / abc / asyncio / base64 / concurrent.futures / copy / csv / operator / enum / heapq / http / profile / pstats / ssl / unitest / uuid

  1. 装饰器的作用、原理和实现。
  2. 使用过哪些魔法方法。

建议阅读《Python魔术方法指南》

  1. 生成式、生成器、迭代器的编写。
  2. 列表、集合、字典的底层实现。
  3. 垃圾回收相关问题。
  4. 并发编程的相关问题。
  5. 协程和异步I/O相关知识。

Django和Flask

  1. MVC架构(MTV)解决了什么问题。
  2. 中间件的执行流程以及如何自定义中间件。
  3. REST数据接口如何设计(URL、域名、版本、过滤、状态码、安全性)。

建议阅读阮一峰的《RESTful API设计指南》

  1. ​​‌‌​​​‌‌​‌​​‌‌‍​‌​‌‌‌​​‌‌‌‌​‌​‍​‌​​‌​​​‌​​​‌‌​‍​‌​‌‌​​​‌‌​​​​​‍​​‌​‌‌‌‌‌‌‌‌​​​‍​‌‌​​‌‌‌​‌‌​​‌‌‌‍​‌‌​​​‌‌‌​​​‌​‌‍​​‌‌‌‌‌‌‌‌​​‌‌‍‌​​​‌‌‌‌‍‌​​​​‌‌​‍‌​​​‌​‌‌‍‌​​‌​‌‌‌‍‌​​‌​​​​‍‌​​‌​​​‌‍​‌​​‌​​‌​​‌‌​​‌‍​‌‌​​​‌‌​​‌‌‌‌‌‍​‌‌​​​‌‌​‌‌​‌​​‍‌‌​‌​​‌​‍​‌‌​‌​​​‌​​‌‌‌​‌‍​‌‌‌​‌​​​​‌​‌​‌​‍​‌‌​​​‌‌‌​‌​​‌​‍​​​‌​​‌​‌‌‌‌​‌‌‍​‌​‌‌‌​‌​​‌​​‌‌‍​‌​‌‌‌​‌​​​‌‌‌​‍​‌‌​‌​‌​​​​‌​​​‌‍​‌‌​​‌‌‌​‌‌​​‌‌‌‍​​‌‌‌‌‌‌‌‌​​‌​‍​​​​​​​​‌‌‌‌​​‌‌‍​​​‌​‌​‌‌​​‌‌‌​‍‌​​​‌​‌‌‍‌​​‌​​​​‍‌​​‌​​​‌‍‌​​​​‌‌​‍​‌‌​​​‌​‌‌‌​​​‌‍‌‌​​‌‌​‌‍‌‌​​‌‌‌‌‍‌‌​​‌‌​‌‍‌‌​​‌‌‌‌‍‌‌​‌​​‌​‍‌‌​​‌‌‌‌‍‌‌​​​‌‌‌‍‌‌​‌​​‌​‍‌‌​​‌‌‌​‍‌‌​​‌‌‌‌‍​‌​‌‌​‌‌‌‌​​‌​​‍​‌‌​​​​‌​‌​​​‌‌‍​​​​​​​​‌‌‌‌​​‌‌‍​‌​‌‌​​​‌‌​​​​​‍​​‌‌​‌​​‌‌‌‌​​​‍​‌​‌​​​‌‌​​‌‌‌‌‍​‌​‌​​​‌​‌‌‌‌‌‌‍​​​​​​​​‌‌‌​​‌​‌‍‌​​‌​‌‌‌‍‌​​​‌​‌‌‍‌​​​‌​‌‌‍‌​​​‌‌‌‌‍‌​​​‌‌​​‍‌‌​​​‌​‌‍‌​‌​​​‌‌‍‌​‌​​​‌‌‍‌​​​‌‌​‌‍‌​​‌​​​​‍‌​​​‌​​​‍‌​​​‌‌​​‍‌​​‌‌​‌​‍‌​​‌‌‌‌​‍‌‌​‌​​​‌‍‌​​‌‌‌​​‍‌​​‌​​​​‍‌​​‌​​‌​‍‌​‌​​​‌‌‍‌​​‌​​‌‌‍‌​​‌​‌‌​‍‌​​‌​​​‌‍‌​​​‌​‌​‍‌​​​​‌‌‌‍‌​‌​​​‌‌‍‌​​​‌‌‌‌‍‌​​​​‌‌​‍‌​​​‌​‌‌‍‌​​‌​‌‌‌‍‌​​‌​​​​‍‌​​‌​​​‌‍‌​​​​‌‌‌‍‌​​​‌​‌​‍‌​​‌‌​‌​‍‌‌​‌​​‌​‍‌​​​​‌‌‌‍‌​​‌​‌‌​‍‌‌​‌​​‌​‍‌​​​​‌​‌‍‌​​‌​‌‌‌‍‌​​‌​‌‌​‍‌‌​‌​​‌​‍‌​​‌​​‌​‍‌​​‌​‌‌​‍‌​​‌‌‌‌​‍‌​​‌​​​‌‍‌‌​‌​​‌​‍‌​​​‌‌​​‍‌​​‌​‌‌‌‍‌​​‌​‌‌​‍‌‌​‌​​‌​‍‌​​​​‌​‌‍‌​​‌​‌‌‌‍‌​​‌​​​​‍‌​​‌​​​‌‍‌​​‌‌​​​‍‌‌​‌​​‌​‍‌​​‌‌​‌‌‍‌​​‌‌​‌​‍‌‌​‌​​‌​‍‌​​‌‌​​​‍‌​​‌​​​​‍‌​​‌​​​‌‍‌​​‌‌​​​‍‌‌​‌​​‌​‍‌​​‌‌​​​‍‌​​‌​​​​‍‌​​‌​​​‌‍‌​​‌‌​​​‍‌‌​‌​​‌​‍‌​​​‌​​​‍‌​​‌‌​‌​‍‌​​‌​​​‌‍‌‌​‌​​‌​‍‌​​​‌​‌‌‍‌​​‌​‌‌​‍‌‌​‌​​​‌‍‌​​‌​‌‌‌‍‌​​​‌​‌‌‍‌​​‌​​‌​‍‌​​‌​​‌‌

    使用ORM框架实现CRUD操作的相关问题。

    • 如何实现多条件组合查询 / 如何执行原生的SQL / 如何避免N+1查询问题
  2. 如何执行异步任务和定时任务。
  3. 如何实现页面缓存和查询缓存?缓存如何预热?

爬虫相关

  1. Scrapy框架的组件和数据处理流程。
  2. 爬取的目的(项目中哪些地方需要用到爬虫的数据)。
  3. 使用的工具(抓包、下载、清理、存储、分析、可视化)。
  4. 数据的来源(能够轻松的列举出10个网站)。
  5. 数据的构成(抓取的某个字段在项目中有什么用)。
  6. 反反爬措施(限速、请求头、Cookie池、代理池、Selenium、PhantomJS、RoboBrowser、TOR、OCR)。
  7. 数据的体量(最后抓取了多少数据,多少W条数据或多少个G的数据)。
  8. 后期数据处理(持久化、数据补全、归一化、格式化、转存、分类)。

数据分析

  1. 科学运算函数库(SciPy和NumPy常用运算)。
  2. 数据分析库(Pandas中封装的常用算法)。
  3. 常用的模型及对应的场景(分类、回归、聚类)。
  4. 提取了哪些具体的指标。
  5. 如何评价模型的优劣。
  6. 每种模型实际操作的步骤,对结果如何评价。

项目相关

  1. 项目团队构成以及自己在团队中扮演的角色(在项目中的职责)。
  2. 项目的业务架构(哪些模块及子模块)和技术架构(移动端、PC端、后端技术栈)。
  3. 软件控制管理相关工具(版本控制、问题管理、持续集成)。
  4. 核心业务实体及其属性,实体与实体之间的关系。
  5. 用到哪些依赖库,依赖库主要解决哪方面的问题。
  6. 项目如何部署上线以及项目的物理架构(Nginx、Gunicorn/uWSGI、Redis、MongoDB、MySQL、Supervisor等)。
  7. 如何对项目进行测试,有没有做过性能调优。
  8. 项目中遇到的困难有哪些,如何解决的。