主要针对各位的复习链路展开叙述。
作为服务端研发,web开发整体需要掌握的知识。
Python
-
深浅 copy
-
作用域、闭包
- 可能会出一大堆的函数调用,然后分别看输出什么(涉及到全局修改)
-
装饰器(在纸上可以写出来,整个调用链)
-
迭代器、生成器
-
面向OOP编程:封装、继承、多态
-
map、filter、reduce、及各类内置函数(sorted、zip)
- 针对一个数组,里面有若干值,一行代码实现对偶数下标对应的数 + 3,求和
-
类的
__new__、__init__,以及一些其它的各类魔术方法各代表什么含义 -
进程、线程、协程
- 定义(尽可能的详细)
- 进程、线程的状态
- 守护进程、守护线程
- 通信机制有哪些
- 线程池、进程池(如何自定义去实现进程池、线程池)
-
socket 网络编程
-
IO 模型
阻塞IO、非阻塞IO、同步IO、异步IO、IO对路复用
-
select、poll、epoll(水平触发&边缘触发,默认机制是什么,对比)
-
cpu 的内核态和用户态
-
并发编程,GIL锁,那么python里面就一定是线程安全么?
-
asyncio 异步编程
-
-
python的内存管理和垃圾回收(GC)
- 小数据池、字符驻留、缓存
- 引用计数、标记清除、分代回收
-
框架
- WSGI,定义且实现的框架有哪些
- django、flask、tornado、sanic (常见框架基本使用,涵盖的功能要掌握清楚)
- 有兴趣的话可以看下源码,整个调用链是怎么执行的
- 请求怎么分发进去的
- 构造 request 对象
- 路由匹配
- 到达视图
-
可能其它会问到一些理解题
- 程序异常你是怎么理解的,比如 raise 或者 return 错误码
网络
- 一条url从访问到结束的生命周期
- 服务架构图
- 服务器配置、几台机器、用什么进行部署(这一点要比较清晰)
- 开发模式、上线流程
- nginx
- 动静分离
- 分流
- 负载均衡策略
- 怎么配置 websocket
- uwsgi、gunicorn、uvicorn
- 一些常见的配置项
- 怎么和 nginx 做配合的
- tcp&udp
- 区别
- tcp
- 握手为什么是3次
- 挥手为什么是4次
- 挥手的时候为什么要等待 2MSL 的时间
- tcp是怎么保障了传输流是可靠的
- http&https
- http1.0 & http1.1 & http2.0 有什么区别
- https 是什么?怎么保障了数据传输是密文的,TLS 是怎么建立安全连接的
- tcp & http & websocket 有什么区别
数据库(Mysql&Redis)
这里的题非常之多,举几个例子。
用服务要明白三个要点:容灾、扩容、备份。
mysql
- 常见的数据库引擎,区别
- innodb 为什么使用 b+ 树作为数据库引擎,为何不使用 b 树、红黑树或者其它数据结构?
- char 和 varchar 区别
- 索引、执行计划
- 事务,隔离级别分别对应了什么问题,怎么解决?
- 乐观锁和悲观锁,mysql 有哪些锁
- 高可用、主从、读写分离,django 代码层怎么配置
redis
- 常用数据类型
- 有哪些应用场景
- 缓存雪崩、缓存击穿
- 缓存热点数据如何和数据库保持一致性
- 底层实现的数据结构
- redis 如何保证高可用?
- redis 如何保证数据不丢失?
- 做集群有哪些方案,常见就是 redis-cluster
- redis 布隆过滤器
前端
前端东西很多,以下问题简单了解即可
可以作为一个亮点,可以简单了解一些常用问题。
- == 和 === 区别
- jq 和 vue 的区别
- 什么是数据驱动
- 怎么做响应式布局
- vue、react 的 key 有什么含义
- vue 的生命周期函数,各会做什么事情
- vue 的 nextTick 有何意义
- 什么作为打包工具(webpack),什么作为代码编译(babel)
服务
- 做监控么(GF监控)
- 日志分析(ELK)
- es
- logstash
- kibana
- 接口安全
- 接口幂等性
- docker
- k8s
单机应用
- 集群
- 负载均衡
- 文件共享服务器(OSS)
分布式系统
- 分布式锁
- 分布式ID
- 分布式事务
- 分布式session
微服务
- RPC
- 怎么理解的微服务
- 服务之间的认证、调用
- 服务注册、服务发现、服务熔断、降级
- 服务网格
数据结构&算法
- 数据结构:数组、链表、队列、堆、栈、二叉树、图
- 对应 curd 的时间复杂度
- 堆和栈有什么区别?
- 二叉树的遍历(BFS、DFS),先序、中序、后序、层序遍历怎么写,递归和非递归的
- 经典排序算法时间复杂度及区别
- 冒泡、选择、插入,例如它们的时间复杂度一样,但是有区别吗?
- 快排、归并、堆排
- 基数排序、桶排序、希尔排序
- 力扣:HOT题100道可以做一做
- 滑动窗口
- 动态规划(DP)
- 快慢指针
- 双指针
- 回溯
- 递归
- TopK 问题
- 100亿个数选 top5
- 一个文件,里面是单词文本,求top10
业务
- 团队怎么协作开发的,团队配置
- git 相关的问题
- 如何防止重复订单
- 第三方认证登录
- 如何进行接口限流
- 遇到过什么难以解决的问题
- 认证方式:cookie、session、jwt
- 业务子系统时序图、流程
- 怎么做的这个模块
- 时序图
常见设计问题
- 秒杀系统
- 对账系统
- 点赞系统
- 排行榜系统
- ...