专题汇集

Posted by jabin on November 21, 2018

一、 安全

1. web安全

1.1. CSRF

  1. Refer
  2. 加token

1.2. XSS

  1. 用户输入的内容原封不动的通过服务器程序渲染在页面上。比如cookie
  2. 不能相信用户的输入, xss过滤

1.3. SQL注入

不能相信用户有的输入, 避免直接用用户输入的数据, 过滤函数等

2. 脚本注入

上传一个文件, 然后外网直接访问。。

  1. 程序和文件不放一起
  2. 基本的过滤
  3. 权限(不可执行)
  4. 重命名

二、缓存

1. 失效策略

  1. FIFO
  2. LRU: 最近最少使用, 是否被使用过
  3. LFU:最不经常使用, 被使用的次数

2. nginx缓存

本地缓存静态资源

3. 客户端缓存

Cache-Control

4. Memcached

解决传统的关系型数据库,无法满足高并发读写的场景 图片描述 slab分配算法 + lru 淘汰算法

5. redis

三、RPC

  1. 原理图 图片描述
  2. 常见框架 图片描述

四、消息中间件

1. 为什么

  1. 消息丢失?
  2. 消息传递?
  3. 业务解耦:业务只管发消息, 需要的人去取,发布者不关心谁取
  4. 削峰填谷:堆积消息,再慢慢消费消息
  5. 异步通信

2. 是什么

  1. 分布式系统中发送和接受消息的软件,本身也是个分布式系统
  2. ActiveMQ, RabbitMQ, kafka, RocketMQ

3. 怎么搞

  1. 四大组件:Name Server、Broker、Producer、Consumer
  2. 消息中间件的模块

4. 顺序问题

确认机制, 消费端

5. 推拉

  1. 推:实时性, 但是消费端可能会爆
  2. 拉:实时性无法保证

五、uml

统一的建模语言:更明确、清晰地表达项目中的架构设计,执行流程等。

1. 构成

  1. 事物(things):最基本的构成元素, 对实体的抽象
  2. 关系(relationsihps): 事物间的相互联系
  3. 图(diagrams):事物和关系的可视化表示

2. 绘制工具

  1. https://www.processon.com/trash
  2. starUml

六、MVC

  1. 阐述
  2. Model: 存储数据的对象
  3. Controller: 数据流向Model & 更新view
  4. View: 数据可视化

七、设计模式

1. 六大原则

  1. 对扩展开放,对修改关闭。 因为可能会影响到其它正在使用之前设计的模式的应用
  2. 任何时候,子类能够用基类替换。
  3. 依赖于抽象,而不是具体
  4. 接口隔离, 用多个隔离的接口,比用单个接口好
  5. 一个类少了解其它类的内部实现
  6. 尽量使用组合,少用继承

2. 常见的设计模式

  1. 单例模式
  2. 工厂模式
  3. 观察者模式
  4. 适配器模式
  5. 组合模式

八、性能优化

1. 优化方向

代码层面、业务层面、数据库层面、服务器层面、前端优化 图片描述

2. 容量评估

【步骤一:评估总访问量】 -> 询问业务、产品、运营

【步骤二:评估平均访问量QPS】-> 除以时间,一天算4w秒

【步骤三:评估高峰QPS】 -> 根据业务曲线图来

【步骤四:评估系统、单机极限QPS】 -> 压测很重要

【步骤五:根据线上冗余度回答两个问题】 -> 估计冗余度与线上冗余度差值(多要几台)

如何做容量评估

九、运维

1. 常规监控

1.1. 方式

主动(上报), 被动(分析日志),旁路(舆情监控)

1.2. 常规命令

top

2. APM

  1. 分布式追踪标准: OpenTracing 排查系统的性能
  2. jaeger

3. 测试

3.1. TDD理论

测试驱动开发,先写测试用例,再实现功能

3.2. 压测

https://huoding.com/2017/05/31/620

3.3. 单元测试

3.4. 全链路测试

  1. 滴滴的实践:https://zhuanlan.zhihu.com/p/28355759
  2. 线上环境、模拟请求、数据隔离、低峰测试、提前预警、恢复

    3.5. A\B、蓝绿、灰度测试

  3. A\B: plan A 和 plan B 的验证
  4. 蓝绿测试:不同版本,不同的功能

4. DevOps

  1. 是方法论, 让生产端(开发+运维)变得便捷, TTM(加快发布)
  2. 自主构建、验证、交付、支持
  3. 持续交付