一、 安全
1. web安全
1.1. CSRF
- Refer
- 加token
1.2. XSS
- 用户输入的内容原封不动的通过服务器程序渲染在页面上。比如cookie
- 不能相信用户的输入, xss过滤
1.3. SQL注入
不能相信用户有的输入, 避免直接用用户输入的数据, 过滤函数等
2. 脚本注入
上传一个文件, 然后外网直接访问。。
- 程序和文件不放一起
- 基本的过滤
- 权限(不可执行)
- 重命名
二、缓存
1. 失效策略
- FIFO
- LRU: 最近最少使用, 是否被使用过
- LFU:最不经常使用, 被使用的次数
2. nginx缓存
本地缓存静态资源
3. 客户端缓存
Cache-Control
4. Memcached
解决传统的关系型数据库,无法满足高并发读写的场景 slab分配算法 + lru 淘汰算法
5. redis
三、RPC
- 原理图
- 常见框架
四、消息中间件
1. 为什么
- 消息丢失?
- 消息传递?
- 业务解耦:业务只管发消息, 需要的人去取,发布者不关心谁取
- 削峰填谷:堆积消息,再慢慢消费消息
- 异步通信
2. 是什么
- 分布式系统中发送和接受消息的软件,本身也是个分布式系统
- ActiveMQ, RabbitMQ, kafka, RocketMQ
3. 怎么搞
- 四大组件:Name Server、Broker、Producer、Consumer
- 消息中间件的模块
4. 顺序问题
确认机制, 消费端
5. 推拉
- 推:实时性, 但是消费端可能会爆
- 拉:实时性无法保证
五、uml
统一的建模语言:更明确、清晰地表达项目中的架构设计,执行流程等。
1. 构成
- 事物(things):最基本的构成元素, 对实体的抽象
- 关系(relationsihps): 事物间的相互联系
- 图(diagrams):事物和关系的可视化表示
2. 绘制工具
- https://www.processon.com/trash
- starUml
六、MVC
- 阐述
- Model: 存储数据的对象
- Controller: 数据流向Model & 更新view
- View: 数据可视化
七、设计模式
1. 六大原则
- 对扩展开放,对修改关闭。 因为可能会影响到其它正在使用之前设计的模式的应用
- 任何时候,子类能够用基类替换。
- 依赖于抽象,而不是具体
- 接口隔离, 用多个隔离的接口,比用单个接口好
- 一个类少了解其它类的内部实现
- 尽量使用组合,少用继承
2. 常见的设计模式
- 单例模式
- 工厂模式
- 观察者模式
- 适配器模式
- 组合模式
八、性能优化
1. 优化方向
代码层面、业务层面、数据库层面、服务器层面、前端优化
2. 容量评估
【步骤一:评估总访问量】 -> 询问业务、产品、运营
【步骤二:评估平均访问量QPS】-> 除以时间,一天算4w秒
【步骤三:评估高峰QPS】 -> 根据业务曲线图来
【步骤四:评估系统、单机极限QPS】 -> 压测很重要
【步骤五:根据线上冗余度回答两个问题】 -> 估计冗余度与线上冗余度差值(多要几台)
九、运维
1. 常规监控
1.1. 方式
主动(上报), 被动(分析日志),旁路(舆情监控)
1.2. 常规命令
top
2. APM
- 分布式追踪标准: OpenTracing 排查系统的性能
- jaeger
3. 测试
3.1. TDD理论
测试驱动开发,先写测试用例,再实现功能
3.2. 压测
https://huoding.com/2017/05/31/620
3.3. 单元测试
3.4. 全链路测试
- 滴滴的实践:https://zhuanlan.zhihu.com/p/28355759
- 线上环境、模拟请求、数据隔离、低峰测试、提前预警、恢复
3.5. A\B、蓝绿、灰度测试
- A\B: plan A 和 plan B 的验证
- 蓝绿测试:不同版本,不同的功能
4. DevOps
- 是方法论, 让生产端(开发+运维)变得便捷, TTM(加快发布)
- 自主构建、验证、交付、支持
- 持续交付