如果测试的时候发现有些功能不可用,那很简单,不管他,直接 PS 一张正常运行的图就行。
如果比赛的时候发现有些功能不可用,那也很简单,把锅甩给 “现场网络不好” 就行。
在和平安宁之后,时刻存在着危险与不安。
当一个人获取多少荣誉和地位,他都要付出同样多的代价。
地位越高,看似越安全,实则越危险。
居安思危,对随时可能带来的严重后果,要做到谨慎。
overly pessimistic(过于悲观),把和程序有关的一切请求、服务、接口、返回值、机器、框架、中间件等等都当做不可信的,步步为营、处处设防。HTML、CSS、JavaScript 这三种最基础的技术,而如今,网站的样式和交互越来越复杂,我们不得不使用一些知名的框架来提升开发效率,比如 Vue 和 React。JetBrains IDEA 或者 Vscode。很多刚开始写代码的同学、甚至是一些经验丰富的老手,都对开发工具保持绝对的信任。a,那编辑器界面上显示的一定是 a。GitHub 等开源项目平台上能够找到大量优秀的开源项目,好的开源项目甚至可以得到 10 万多个关注,那这些知名的开源项目可信么?Vue 项目,累积提出并关闭了 8000 多个问题。Tomcat,就遇到了 bug,每次接受到特定的请求都会报错。刚开始我根本没有怀疑是 Tomcat 的问题,而是绞尽脑汁地想自己的代码哪里写错了。后来经过反复的排查和搜索,终于确认了就是 Tomcat 本身的 bug!Maven 和 npm)搜索依赖库,然后使用包管理器,用一行命令或者编写配置文件就能够让其自动安装依赖,非常方便。JSON 序列化类库 fastjson,几乎无人不知、无人不晓,因为其极快的解析速度广受好评。但是,这个库被多次曝光存在高危漏洞,可以让攻击者远程执行命令!一般的开发者根本不会发现这点,从而给项目带来了极大的危害。Java 是一种强类型语言,具有健壮性。这句话我相信所有学过 Java 的同学都再熟悉不过了。但是,强类型编程语言就一定可信么?Java 而言,甚至还有一个专门记录 bug 的数据库!MySQL,也可以直接租用大公司的云数据库,那么数据库可信么?Redis、Memcached 等,可以自己在服务器搭建,也可以直接租用大公司提供的云缓存服务。qps(query per second 每秒查询数)还能达到预期么?接口返回时长真的不会超时么?Java 语言中,应该对所有可能为 NULL 的变量进行检查,防止 NPE(NULL Pointer Error 空指针异常),在开发多线程程序时,选用线程安全的 ConcurrentHashMap 而不是 HashMap 等等。还可以利用 Assert(断言)来保证程序运行中的变量值符合预期。Java 中,先用 try 捕获异常、再用 catch 处理异常、最后用 finally 释放资源和善后。参数类型校验:比如请求参数应该是 Integer 整型而不是 Long 长整数类型。
值合法性校验:比如整数的范围大于等于 0、字符串长度大于 5,或者满足某种特定格式,比如手机号、身份证等。
用户权限校验:很多接口需要登录用户或者管理员才能调用,因此必须通过请求参数(请求头)来判断当前用户的身份,被一个普通用户下载了 VIP 付费电影肯定是不合理的!
用户流控:限制每个用户在一定时间内对某个接口的调用数。
接口流控:限制一定时间内某个接口的总调用数。
单机流控:限制一定时间内单台服务器上的项目所有接口的总调用数。
分布式流控:限制一定时间内项目所有服务器的总请求数。
Java 语言 Guava 库的 RateLimiter 令牌桶单机限流、阿里的 Sentinel 分布式限流框架等。Redis) 中查询,如果分布式缓存集体宕机,那就从本地缓存中获取数据。这样,即使缓存挂掉,也能够帮助系统支撑一段时间。Hystrix 就是比较有名的微服务熔断降级框架。Elasticsearch)时,至少要多预留一倍的存储空间,即 2G,来应对后面可能的数据增长。业务的发展潜力越大,冗余的倍数也可以越多,但也要注意不要过分冗余,毕竟资源也是很贵的啊!Java 中,我们可以使用阿里开源的诊断工具 Arthas,同时支持线上热修复功能。也可以自己编写脚本来实现,但是相对复杂一些。往期推荐
大厂机密!30 个提升团队研发效能的锦囊
实战 | 尝鲜 Svelte 前端框架,开发读书笔记
实战 | 一不小心创造了新的编程语言!
编程百晓生 | 世上竟有如此优雅的代码!
小记 | 从 0 到 1,看我玩弄千万日志于股掌
觉得不错,长按关注叭
点小花花,让他们知道你 “在看” 我