自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 系统健壮性设计

一、CodeReview如何做Review,应该做到这三点统一的编码与设计规范完整的技术架构说明与示例不定期的Review会议小项目(3个月内)可以10天/次,大项目(6个月以上)15天/次,前期可以安排密集一些,后期考虑1月/次推荐工具:Phabricator:Facebook开源的代码审查工具Gerrit:非常强的CodeReview+代码托管工具CheckStyle:代码规范检查工具二、系统健壮性度量健壮性维度:架构(负载均衡、容灾能力)、环境(

2021-11-30 00:22:36 1767

原创 Redis分布式锁

一、分布式锁简介在同一个JVM内部,大家往往采用synchronized或者Lock的方式来解决多线程间的安全问题,但在分布式架构下,JVM之间就需要一种更加高级的锁机制,来处理跨JVM进程之间的线程安全问题,解决方案就是使用分布式锁。二、Redis分布式锁分析Redis分布式锁机制,主要借助setnx和expire两个命令完成原理key不存在时创建,并设置value和过期时间,返回值为1;成功获取到锁如key存在时直接返回0,抢锁失败持有锁的线程释放...

2021-11-23 12:34:11 862

原创 浅谈JWT——基于工程权限管理

一、什么是JWTJson web token,是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC7519).定义了一种简洁的,自包含的方法用于通信双方之间以JSON对象的形式安全的传递信息。因为数字签名的存在,这些信息是可信的,JWT可以使用HMAC算法或者是RSA的公私秘钥对进行签名。JWT组成Header头部头部包含了两部分,token类型和采用的加密算法:它会使用Base64编码组成JWT结构的第一部分(并非加密过程)Payload负载这部分

2021-11-20 16:19:57 223

原创 工程开发之系统安全规约

一、权限控制权限控制必须要提的是越权访问,越权访问是Web应用程序中一种常见的漏洞。越权访问漏洞:分为垂直越权访问、水平越权访问水平越权访问是一种“基于数据的访问控制”设计缺陷引起的漏洞;由于服务器端在接收到请求数据进行操作时,没有判断数据的所属人/所属部门而导致的越权数据访问漏洞。越权访问漏洞防范措施(规约)前后端同时对用户输入信息进行校验,双重验证机制 调用功能前,验证用户是否有权限调用相关功能 执行关键操作前必须验证用户身份,验证用户是否具备操作数据的权限 直接对象引

2021-11-17 22:58:27 3058

原创 工程开发之OAuth2

一、OAuth2是什么?OAuth2是目前最流行的授权协议, 用来授权第三方应用,获取用户数据。此授权协议一般涉及的角色有:Resource Owner(资源持有者)、Client(客户端)、Authorization Server(授权服务器)、Resource Server(资源服务器)、User Agent(中介,如浏览器)。先看两个栗子:第一个是快递员授权机制设计;第二个是用户使用QQ账号登录京东的过程以上两个均为授权验证的场景,现在尝试从两个场景中抽象出性质相同(或..

2021-11-16 00:34:36 3123

原创 工程开发之集合规约

一、Map类型的案例、源码解析与规约首先,来看下面一段代码;思考下这个方法会有什么问题? 有些查询结果会报java.lang.IllegalStateException,这是为什么呢?根据报错,定位并剖析Collectors.toMap方法内部构造:这里引出一个集合规约:【强制】在使用java.util.stream.Collectors类的toMap()方法转为Map集合时,一定要使用含有参数类型为BinaryOperator,参数名为mergeFunctio...

2021-11-13 14:27:34 362

原创 Java代码避坑指南

一、浮点数据处理首先看个栗子:此题输出结果为”false”,因为条件判断里面,0.1为0.1d,而(double)e为0.1f强转为double类型,即在0.1f基础上用0补充后续小数位,故两者不想等。浮点数据类型的问题:精度丢失栗子 【.0011001………】是一个无线循环的二进制数,由十进制的0.2转化而来,证明转换的时候会丢失精度单精度的存储示例:整数部分的填充单精度的存储示例:指数部分的填充补充说明浮点数据避坑(⭐)浮点

2021-11-11 12:43:09 132

原创 工程开发之编码规约

一、关于编码规约编码规约的意义:减少代码的维护成本;改善可读性;提高团队开发效率;锻炼更严谨思维;身心愉快二、代码格式与命名风格两个要求:1)命名体现代码元素特征抽象类命名使用Abstract或Base开头异常类命名使用Exception结尾测试类命名以它要测试的类名开始,以Test结尾类型与中括号紧挨相连来定义数组枚举类名带上Enum后缀,枚举成员名称需要全大写,单词间用下划线隔开2)命名最好望文知义某些不规范的缩写会导致理解成本增加,如condit

2021-11-09 14:06:14 180

原创 工程开发之技术架构选型

一、关于技术选型目的:降低开发成本、提高研发效率架构演进:1)巨石应用第一代单体应用,所有模块打包到一起部署运行,如打包一个War包放到一个Tomcat下运行优点:开发小型项目有独特优势,易于调试、部署,运维方便缺点:不可靠,模块之间没完全解耦,任何模块的一个bug,可能拖垮整个应用;单维扩展;不可持续发展,引入新的框架或语言需要重构所有业务模块2)SOA即面向服务架构,设计上通常是自上向下的,服务间松散解耦;ESB集成不同协议的服务,做消息的转化、解释、路由从.

2021-11-06 16:42:18 663

原创 工程结构规约

一、应用分层隐藏下层业务逻辑的复杂性提高系统的组件化和可维护性MVC框架模式:Model View Controller推荐分层结构:分层异常处理:DAO层 → 异常类型很多,不需要打印日志Manager/Service层 → 必须记录出错日志到磁盘,尽量带上参数信息,保护案发现场Web层 → 绝不能往上抛异常,应跳转到友好错误页面,友好的错误提示信息开放接口层 → 将异常处理成错误码和错误信息方式返回分层领域模型:DO(date object

2021-11-04 14:18:08 66

原创 工程开发之异常处理

一、JAVA异常体系Throwable包含Error与Exception而Exception下面又包含RuntimeException(uncheckedException,即不受检查异常)和checkedException受检查异常二、异常处理非必要不使用异常使用描述性消息抛出异常力所能及的异常一定要处理异常忽略要有理有据栗子:使用Optional优雅地防止NPE1)实例化OptionalOptional.ofNullable(obj)2)使用orE

2021-11-02 17:06:11 142

原创 工程开发之MySQL设计规约

数据库作为整个工程数据存储和利用的重要工具,在设计过程中务必遵循相应的规范(规约),以保证后期运行的稳定性和用户使用体验(包括管理后台用户、终端用户使用体验等)。一、建表规约建表规约的好处是解决数据库相关名称的纠结,以便选择恰当的表格命名、合适的数据类型和长度。1. 表、字段命名必须使用小写字母或数字禁止出现数字开头(eg. 字段名:7day_sales)禁止两个下划线中间只出现数字(eg. 字段名:update_1_time)不使用复数名...

2021-10-30 16:46:30 145

原创 工程开发之系统设计方案论

工程从立项到完成开发,再到最终交付的过程中,为保证整个工程的质量(代码、功能、使用体验等等),需要在每个环节做好把控,遵循相应的作业流程和设计原则。一、需求分析工程设计和编码之前,需求分析的工作是非常必要的。需求分析指的是理解和挖掘用户的诉求、以及背后的逻辑,转化成可行性的分析结果。从非结构化到结构化,确定系统的职责、模块的过程。人性是提出需求的本源,因此出现五花八门的需求也不见怪。分析的过程中,以下两类情况要特别注意:伪需求:没有调研...

2021-10-28 10:56:20 1123

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除