
架构
诗人不写诗
当你足够努力时,全世界都会给你让路
展开
-
六边形架构
总的来说,Alistair Cockburn是一位备受尊敬的软件工程师和架构师,他的贡献和影响力对软件开发领域的发展产生了深远的影响。Alistair Cockburn是一位软件开发领域的重要人物,他通过自己的研究、著作和实践,推动了敏捷开发方法的发展和普及,对提升软件开发团队的效率和质量产生了积极的影响。除了他的学术和行业成就,Alistair Cockburn还以其独特的幽默感和迷人的演讲风格而闻名于同行。他的经验和见解使他成为了软件开发领域的权威人物,受到了业界的广泛赞誉和尊重。原创 2023-11-17 20:47:07 · 912 阅读 · 0 评论 -
数据架构与数据模型
待定。原创 2023-11-12 16:10:26 · 467 阅读 · 0 评论 -
JAVA项目建模之包目录结构
对于API,分为2种,一是提供API给外部调用,二是调用外部API,我们通常会封装好这2部分内容,针对提供给外部调用的接口,命名为。调用外部接口的内容,命名为。原创 2023-09-07 23:50:09 · 197 阅读 · 0 评论 -
Jenkins配置流水线
这个任务名称将会是Jenkins的workspace路径下的一个目录,如我建立了一个test任务,那么Jenkins会生成一个/jenkins_home/workspace/test目录,用来拉取代码编译等。所以请谨慎设置任务名称。原创 2023-08-02 00:11:13 · 248 阅读 · 0 评论 -
CAP理论
2000年7月,美国加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出了CAP猜想。2年后,麻省理工学院的Seth Gilbert和Nancy Lynch从理论上证明了CAP。之后,CAP理论正式成为分布式计算领域的公认定理。原创 2022-09-18 20:03:48 · 311 阅读 · 0 评论 -
总线Bus是什么意思
计算机系统中的总线最早是在硬件上使用,计算机各个部件之间需要交换各种数据,此时计算机设计者就用一根线将多个部件串起来,这就称之为总线,这里的关键是串多个部件,如果只有2个部件,我们很可能是不会称之为总线的。总线根据传输数据时序可以分为并行总线和串行总线,usb就是universalserialbus通用串行总线,并行总线通常是通过增加线(通道)的数量来实现。后来软件设计中也喜欢用总线这个词来描述数据流过多个部件。Bus公共汽车,巴士,计算机系统的总线。springcloud设计中总线。...原创 2022-07-23 19:38:21 · 4845 阅读 · 0 评论 -
任务放进线程池重启应用导致任务丢失解决
在很多情况下,我们需要使用线程池来处理高并发下的大量任务,线程池不仅能加快任务处理速度,同时也能通过队列缓冲存储一些任务,有利就有弊,如果当线程池中保存了大量任务,此时应用重启了,那么这些任务将会丢失,有可能对业务产生重要故障。此时我们的解决的方案针对不同情况,如果是接口接收了大量请求,我们通过异步处理,且每个请求的处理时间较长,此时我们需要一种能将任务持久化的队列,这是mq就是一种比较好的方案,我们将任务消息投放到mq,然后消费mq的消息,此时利用的mq对消息的持久化功能,防止任务丢失。...原创 2022-04-16 16:54:42 · 2659 阅读 · 0 评论 -
联合登陆设计
这种联合登录的思想就是必须在一个已经登录的系统E上调用E后端接口,此时调用是经过认证的,安全的,然后得到一个code,然后拿code调用需要联合登录的系统N的一个接口,此时N提供的这个接口是无需认证,但是N的后端逻辑是用code调用E的后端接口获取token,此时交互是安全的,就这样完成了的联合登录,所以核心是必须有一方的系统是经过认证的。原创 2022-04-11 23:10:17 · 3700 阅读 · 0 评论 -
如何实现失败自动重试
应用中有些和本地资源交付,或者和远程资源交付场景,如果此时失败了,你能确定失败的原因不是逻辑错误,此时你就可以重试。并不是所有失败场景都需要重试,比如你的应用中出现一个主键冲突的错误,此时你就完全没有必要针对这种错误进行重试。...原创 2022-04-09 10:42:52 · 324 阅读 · 0 评论 -
打印日志的规则
1、日志中不要出现无意义的字符,如》》》》,--------等2、日志中不要出现影响正则搜索的字符,如*,[]等3、有异常抛出时,一定要确认是否需要打印关键信息4、存在加密数据时,记得打印出解密后的关键信息,特别是接口失败时,打印密文是没有意义的5、日志打印尽量少且有用,不要随意打印,也不要漏掉关键信息...原创 2022-04-03 22:17:56 · 1412 阅读 · 0 评论 -
方法封装经验
在开发业务逻辑时,当遇到复杂的业务场景时,设计模式可以解决一定问题,但是具体的方法封装还是需要编码来解决,在我看到的场景里,很多人使用了设计模式之后,导致整个代码更加难以维护,代码可读性变得更差,因为他们都是为了练手而使用设计模式,并不是出于这里的确需要一个设计的目的。方法封装方法多了以后,会变得混乱不堪,解决的方法有一下几点:1、将方法的上下层次结构整理清楚,尽量不要形成网状调用关系,要线性关系。2、方法的入参设计直接决定了方法可复用的程度,进而决定整个调用关系复杂程度,对外接口入参,和内部方原创 2022-03-27 22:08:00 · 514 阅读 · 0 评论 -
订单号生成
实时生成,适合并发不高的场景,利用redis自增特性,单号构成为:2位年份+2位月份+2位日+5位当天经过秒数+5位自增=16位@Componentpublic class OrderNoUtil { @Autowired RedisTemplate redisTemplate; public String getNo() { String incrKey = "incr_no"; LocalDateTime now = LocalDat原创 2022-03-25 23:25:08 · 1569 阅读 · 0 评论 -
架构之微服务划分
微服务要有层次结构,不能形成网状,应该是有比较清晰的层次划分,分为高、低层,每层可以有多个服务,高层单向调用底层,同层可互调。用户数据属于底层,原创 2022-02-15 12:54:31 · 1206 阅读 · 0 评论 -
APP消息push设计
一、消息push依赖一般消息push依赖第三方已经提供的能力,应用开发者很难有精力自行维护一个完整的push链路。原创 2021-09-18 08:47:13 · 332 阅读 · 0 评论 -
用户体系之三户模型
三户模型是电信行业业务系统普遍使用的模型。分别是客户,用户,账户。在电信行业,“三户一体”这个概念并不是一个官方术语,但它可以从“三户模型”的基础上延伸理解。在电信运营中,“三户”指的是客户(Customer)、用户(User)和账户(Account)。这三个概念在电信业务中扮演着重要的角色,它们之间的关系是:1. **客户(Customer)**:客户是指与电信运营商签订合同并享受服务的实体,可以是个人也可以是企业或其他组织。客户是电信运营商营销和服务的对象。原创 2021-09-18 08:32:58 · 3900 阅读 · 0 评论 -
企业防火墙
在企业中使用防火墙是很常见的作用,应用开发者需要了解防火墙的规律,这样才能解决应用架构的设计。一、网络区域企业服务器所在的网络一般都会划分区域,每个区域都有各自的防火墙规则。机房:这个是物理位置,不同物理位置可以有相同的逻辑区域SF:Server Farm Zone,俗称内部服务区,通常用来部署应用服务器和数据库服务器。它无法直接与公网连接,但是可以通过设置被其他两个网络域访问,位于SF区域的服务器一般是内网应用服务器。DMZ:Demilitarized Zone,翻译是非军事化区域,与军事化区域原创 2021-07-10 18:18:28 · 1907 阅读 · 0 评论 -
软件各个版本命名规则
GA:AenerallyAvailableM:MilestoneRC:Release CandidatesSR:Service Release原创 2021-06-03 19:39:16 · 340 阅读 · 0 评论 -
UML使用
关联程度依赖1继承2实现接口3 依赖:被依赖者以函数参数的方式体现在依赖者中。不构成数据成员关系。表现形式为函数参数,返回值,函数局部变量,全局变量。4 关联:以数据成员的形式体现。5 聚合:关联关系的特例,具有has-a这层语义,相对独立的类型在一起,可分离,生命周期各自独立。可聚亦可散6 组合/强聚合:关联关系的特例,具有contains-a这层语义,难以分离,生命周期一致。如同小说中游氏双雄所说"盾在人在,盾亡人亡"的情景,部门不能脱原创 2021-05-27 20:27:53 · 137 阅读 · 0 评论 -
一致性解读
为了提升系统的可用性、性能、扩展性,我们可以从两个方面着手,要去建立多个副本。可以放到不同的物理机、机架、机房、地域。一个副本的失效可以让请求转到其他副本。对数据进行分区。复制多个副本解决了读的性能问题,但是无法解决写的性能问题。根据关键字进行分片,实现数据分布式,进一步提升系统的写性能。以上两种方式最复杂的问题就是如何保证一致性。一致性问题一直以来都是分布式系统的痛点,因为本身一致性的场景有很多,并不是所有的系统都要求是强一致的,强一致需要极大的成本,我们需要根据系统的容忍度适当放宽一致性的要原创 2021-07-10 11:16:32 · 670 阅读 · 0 评论 -
QZ求职题
1、Java事件机制包括哪三个部分?分别介绍。2、为什么要使用线程池?3、线程池有什么用?4、说说几种常见的线程池及使用场景。5、线程池都有哪几种工作队列?6、怎么理解无界队列和有届队列?7、线程池中的几种重要的参数及流程说明。8、什么是反射机制?9、说说反射机制的作用。10、反射机制会不会有性能问题?11、你怎么理解http协议?12、说说http协议的工作流程。13、http有哪些请求提交方式?14、http中的200,302,403,404,500,503都代表什么状态?1原创 2020-11-07 10:44:54 · 282 阅读 · 0 评论 -
ZooKeeper
zookeeper主要用来解决分布式集群中应用系统的一致性问题,官网有一句话ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services.翻译下来就是Zo...原创 2019-01-07 16:12:22 · 119 阅读 · 0 评论 -
web常识和实际使用经验
1、接口被浏览器缓存,导致必须请求的接口没有请求,使得逻辑出错。出现问题的情况是我们重定向到一个固定get类型的地址,发现有时接口会被调用,多半时候没有被调用,多此排查后端代码无果,只能怀疑到前端,查看浏览器重定向请求(chrom F12后勾选保存日志选项)后发现接口是调用了的,实在是百思不得其解,后来发现这个重定向有个from disk的说明,当时没注意,后来发现这就是从本地缓存拿结果的标致,要想禁止缓存,不可能要求所有用户设置F12后勾选禁止缓存,只能后端改造,后来发现可以在请求地址后面带一个时间戳原创 2020-05-30 11:05:14 · 154 阅读 · 0 评论 -
Redis集群部署
redis是由意大利的一家创业公司Merzia的创始人Salvatore Sanfilippo(antirez是他的艺名)在2008年根据公司需求所开发的一个开源的高性能键值对数据库,于2009开发完成,并于当年随即开源了redis。2010年VMware公司开始赞助redis开发,Salvatore Sanfilippo和Pieter Noordhuis也于同年3月和5月加入VMware,全职开...原创 2019-11-09 23:42:35 · 619 阅读 · 0 评论 -
一致性哈希
Hash算法是一种散列算法,总的来说,就是将不同规格的输入,经过散列算法计算后,给出相同规格的输出,理想情况下,相同的输入,输出相同,不同的输入,输出不同。Hash算法具备哈不可逆性和抗碰撞性,这也决定了它的应用领域。Hash算法的应用有:1、用作密码学中摘要算法,如MD4、MD5、SHA-1、SHA-2等都是典型的哈希算法,可用于文件完整性校验,数字签名。2、检索数据3、数据分片...原创 2019-11-09 21:45:22 · 168 阅读 · 0 评论 -
功能权限和数据权限
功能权限指的是以功能为维度的限制,不如查看保险系统里的保单数据,新增保单等,这些是功能权限。数据权限是以数据为维度来限制,一听这个就比较复杂了,确实如此,因为这个是和业务强耦合,且粒度更细化,比如只能查看自己小组的保单数据,只能新增某个地区的保单等,这个就是数据权限控制的。功能权限的实现方式可以通过角色、功能菜单组合方式实现,系统化程度高,数据权限只能通过代码逻辑来控制,个性化程度较高,一般来说,...原创 2019-10-14 23:28:57 · 2307 阅读 · 0 评论 -
HTTP Basic Authentication
这个认证是HTTP协议层次的,在你访问一个需要HTTP Basic Authentication的URL的时候,如果你没有提供用户名和密码,服务器就会返回401,如果你直接在浏览器中打开,浏览器会提示你输入用户名和密码,此时解决的方式有两种,要在发送请求的时候添加HTTP Basic Authentication认证信息到请求中一、在请求头中添加Authorization: Authori...原创 2019-10-14 23:08:26 · 356 阅读 · 0 评论 -
正则表达式使用
正则表达式组成1 边界符^ 开始符$ 结束符[] 单字符() 分组= 区间a-z A-Z 0-92 转义符\b Break,单词边界\w Word, 单词字母数字组合\s Space,空格\d Digital,数字\t Table,制表符\n NewLine 换行\r Return,回车3 计量符* (贪婪)重复零次或任意,通配符,*...原创 2019-08-30 22:10:42 · 119 阅读 · 0 评论 -
数据库多对多关系建表
对于多对多的关系,建表的方式是有两种的,最常见的做法就是建立一张中间关系表b,关联另外两张表a和c的主键,不要其他多余信息,这种做法通常的情况就是a表和c表中的数据不能有重复的,所以我们只能建立单独的关联关系来关联两张表中的记录。而且建立这种关联关系时不会产生其他很多附属关联信息,或者说是a表和c表都需要独立的维护,不能受对应关系的影响。比如有一张用户表,和兴趣表,用户和兴趣之间属于多对多的关系,...原创 2019-08-26 00:45:59 · 11878 阅读 · 0 评论 -
OAuth2与JWT的区别和联系
JWT:JSON Web Token // 是一种具体的Token实现框架OAuth2:Open Authorization // 是一种授权协议,是规范,不是实现Spring Security OAuth2:Spring 对 OAuth2 的开源实现,优点是能与Spring Cloud技术栈无缝集成Spring Security:前身是 Acegi Security ,能够为 Spring...原创 2019-05-01 14:57:55 · 22744 阅读 · 0 评论 -
swagger使用
前后端协同开发的时候,交流的方式就是API接口,所以需要快速定义出API接口,让开发工作可以同时进行,最原始的办法就是写文档,手敲,速度不仅慢还难以修改,后来我们使用淘宝的RAP,目前已经更新到RAP2了,它可以线上设计接口,大大提升了协同开发效率,但是却没有和code联系起来,现在我们使用swagger,嵌入到项目中,接口文档和项目接口直接关联,这样的接口文档真实且及时,特别是项目开发完成后新增...原创 2019-04-05 09:43:38 · 243 阅读 · 0 评论 -
Restful是什么
restful是一种API的设计风格,他对API的设计有自己的规定,比如面向资源,使用HTTP动词来描述对资源的操作,资源在这里就是数据,REST仅支持HTTP,也就是说他和HTTP是绑定在一起的,这种设计思路是和我们对API的常规理解冲突的,以前我们设计API会通过命名来区分功能,这同时也对设计者提出了一定的要求,没设计好的API会使系统接口复杂混乱,也会使系统越来越臃肿,让人以一种放弃治疗的心...原创 2019-02-25 00:04:07 · 326 阅读 · 0 评论 -
SOA架构
SOA(Service-oriented architecture,面向服务架构)。1996年,Gartner最早提出SOA。2002年12月,Gartner提出SOA是"现代应用开发领域最重要的课题",还预计到2008年,SOA将成为占有绝对优势的软件工程实践方法,主流企业现在就应该在理解和应用SOA开发技能方面进行投资。SOA是一种开发的方法论,是互联网、云计算进一步发展下应运而生的产物,...原创 2019-01-08 10:22:25 · 274 阅读 · 0 评论 -
编程规约
在感情的世界,感觉能指导你走向幸福,在科学的世界,规则能让你变得可怕。编程规约背后是由历史经验得出的宝贵准则,遵守一定能得到巨大的好处。1、大量参数的构造函数是有问题的,意味着类型的职责太多,需要重构拆分。...原创 2019-09-09 23:13:15 · 119 阅读 · 0 评论 -
HTTP返回码字典
状态码 含义 100 客户端应当继续发送请求。这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝。客户端应当继续发送请求的剩余部分, 或者如果请求已经完成,忽略这个响应。服务器必须在请求完成后向客户端发送一个最终响应。 101 服务器已经理解了客户端的请求,并将通过Upgrade 消息头通知客户端采用不同的协议来完成这个请求。在发送完这个响应最后...原创 2019-09-13 09:47:18 · 298 阅读 · 0 评论 -
web安全相关
1、CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为“One Click Attack”或者“Session Riding”。CSRF 攻击的原理,就是利用由于浏览器的同源策略约束下对嵌入资源不做限制的行为进行跨站请求伪造的。...原创 2019-09-13 16:18:42 · 97 阅读 · 0 评论 -
权限控制模型
权限控制表 (ACL: Access Control List)自主访问控制(DAC: Discretionary Access Control)强制访问控制(MAC: Mandatory Access Control)基于角色的访问控制(RBAC: Role-Based Access Control)基于属性的权限验证(ABAC: Attribute-Based Access Contr...原创 2019-09-14 19:58:00 · 181 阅读 · 0 评论 -
Spring Security使用
简介Spring Security是一个安全框架,前身是 Acegi Security ,能够为 Spring企业应用系统提供声明式的安全访问控制。Spring Security基于Servlet 过滤器、IoC和AOP,为 Web 请求和方法调用提供身份确认和授权处理,避免了代码耦合,减少了大量重复代码工作。Spring Security提供了若干个可扩展的、可声明式使用的过滤器处理拦截的we...原创 2019-09-15 14:03:06 · 299 阅读 · 0 评论 -
OAuth 2开发人员指南
OAuth 2开发人员指南介绍这是支持的用户指南OAuth 2.0。对于OAuth 1.0,一切都不同,请参阅其用户指南。本用户指南分为两部分,第一部分用于OAuth 2.0提供程序,第二部分用于OAuth 2.0客户端。对于提供者和客户端,示例代码的最佳来源是集成测试和示例应用程序。OAuth 2.0提供商OAuth 2.0提供程序机制负责公开OAuth 2.0受保护资源。配...原创 2019-09-16 00:31:32 · 228 阅读 · 0 评论 -
NAT F5
今天在申请外部系统调用时,需要上报自己服务逻辑机器和IP地址端口以及被调方逻辑机器以及地址和端口等信息,但是在部署信息上反馈了很多信息,有逻辑机器IP,NAT IP,F5 IP等,不懂得话就有点乱了。如逻辑机器XN1逻辑机器XN1的IP NAT地址 端口 F5信息215.144.89.122 30.7...原创 2019-09-18 00:14:16 · 408 阅读 · 0 评论 -
Slf4j MDC机制
MDC ( Mapped Diagnostic Contexts ),它是一个线程安全的存放诊断日志的容器。原创 2019-09-22 12:33:47 · 161 阅读 · 0 评论