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