面试经验

"""
主要针对各位的复习链路展开叙述。

作为服务端研发,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. 时序图

### 常见设计问题

- 秒杀系统
- 对账系统
- 点赞系统
- 排行榜系统
- ...
"""
posted @ 2020-08-25 17:16    阅读(342)  评论(0编辑  收藏  举报