《你悟了没 - 架构之路》
文章平均质量分 91
架构之路
lakernote
不停的复盘自己,砥砺前行,不忘初衷
展开
-
为什么使用工作流引擎,什么是工作流引擎,工作流引擎选型以及如何使用
文章目录为什么使用工作流引擎?不使用工作流存在以下问题工作流优缺点什么是工作流引擎尝试自己构建工作流引擎有哪些选型方案呢基于bpmn标准进行流程定义国产自定义如何使用SnakerFlow工作流以请假流程来看下数据库中数据流转情况初始状态员工发起请假申请常见功能流程标题发起申请我的发起我的待办我的已办催办转办驳回撤回抄送加签会签或签为什么使用工作流引擎?反证法,如果不使用工作流引擎,先以请假流程举例,从头开始开发流程的业务逻辑:(来看看会出现哪些问题?使用工作流能解决哪些问题?又会带来什么问题?)一原创 2021-08-12 13:33:27 · 13718 阅读 · 4 评论 -
如何设计一个安全逼格高的接口?
如何设计一个安全的对外接口?序号安全问题解决方法1明文传输,偷窥问题自己加密传输或者使用https即使拦截到了也要花精力去破解2数据篡改数据加签hmac防哪个参数串改,就在hmac时把哪个参数加进去****例如 token ,sign = MD5(token+apikey)3接口重放、dos攻击时间戳+随机数机制4接口认证Appid机制5暴力调用限流机制6爬虫、防黑等黑名单、白名单机制7异常参数数据合法性校验..原创 2021-07-09 16:07:44 · 162 阅读 · 0 评论 -
线上问题排查思路及相关命令
文章目录服务器磁盘整个服务器磁盘占用情况某个目录下文件夹大小查看文件大小磁盘IO性能CPU内存网络DOS攻击应用线程查找繁忙线程查询线程详细信息内存获取内存快照监控内存的OOMGC日志MySQL慢SQL查询当前事务情况查看慢SQL是否开启开启慢SQL连接过多监控死锁获取事务隔离级别查询数据库死锁日志长事务查询Redis内存不足连接过多慢命令网络延迟服务器磁盘常用参数-h:使用人类可读的形式展示整个服务器磁盘占用情况df -h示例:[root@localhost lli]# df -h原创 2021-04-29 15:18:20 · 1063 阅读 · 2 评论 -
从零搭建开发脚手架 Spring Boot集成Flyway实现数据库版本管理
文章目录Flyway是什么Flyway集成和使用添加依赖配置文件脚本测试原理高级基于Java的迁移回调Flyway是什么Flyway是一款数据库版本控制管理工具,支持数据库版本自动升级。项目初始化的时候,往往都是要先手动执行数据库脚本。在开发过程当中,数据结构或者数据有更新时,往往都要手动执行脚本同步开发环境、测试环境。现在我们就可以使用flyway来帮我们自动的去完成这个工作。Flyway集成和使用添加依赖<dependency> <groupId.原创 2021-03-09 16:01:04 · 1308 阅读 · 0 评论 -
跨站请求伪造(CSRF)示例、原理及其防御措施
文章目录概述例子原理防御使用token验证判断Referer/OriginSameSite Cookie属性概述CSRF是Cross Site Request Forgery的缩写,中文翻译过来是跨站请求伪造。它欺骗用户在当前已通过身份验证的Web应用程序上执行不需要的操作。在社交软件的帮助下(例如通过电子邮件或聊天发送链接),攻击者可能会欺骗Web应用程序的用户执行攻击者选择的操作。如果受害者是普通用户,则成功的CSRF攻击会迫使用户执行状态更改请求,例如转账,更改其电子邮件地址等。如果受害者是管理帐原创 2021-03-04 13:59:13 · 2037 阅读 · 3 评论 -
从零搭建开发脚手架 实现在线WebLog、动态修改日志级别
文章目录背景实现在线weblog动态修改日志级别背景项目开发中,查看日志以及修改日志级别是很常用的操作。一般的操作方式为:#mermaid-svg-FcOcpmu2sPf2yQAO .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-FcOcpmu2sPf2yQAO .label text{fill:#333原创 2021-02-26 11:40:30 · 2343 阅读 · 0 评论 -
从零搭建开发脚手架 Spring Boot 输入参数校验多种方式整理
文章目录背景常见场景1.bean验证2.简单平面参数验证3.手动验证4.List验证扩展1.@Validated 和 @Valid 的异同2.快速故障模式3.验证相关注解和说明4.自定义验证注解准备做个《从零搭建开发脚手架系列》,把遇到的问题和搭建的过程记录分享给大家。背景当涉及到用户输入时,就需要对输入的内容做校验,例如:姓名不能为空,年龄范围为0-150等等。我们使用Spring Boot内置的验证来实现此功能。从Spring Boot 2.3开始,我们需要显式添加spring-boot-原创 2021-02-23 19:33:19 · 1892 阅读 · 1 评论 -
Java获取文件的Mime类型的几种方式总结
文章目录前言1. 使用Files.probeContentType2. 使用URLConnection2.1 使用getContentType2.2 使用guessContentTypeFromName2.3 使用guessContentTypeFromStream2.4 使用getFileNameMap3. 使用MimeTypesFileTypeMap4. 使用jmimemagic5. 使用Apache Tika总结前言工作中经常会用到,判断一个文件的文件类型,这里总结一把,一般判断文件类型的原理有2原创 2021-02-02 11:21:04 · 2951 阅读 · 2 评论 -
Java是编译语言还是解释语言?Java比C++慢?看了测试结果,颠覆了我的认知(JIT真的强)
文章目录1. 概述2. 编译与解释2.1 编译语言2.2 解释语言3. Write Once Run Anywhere4. Java编译器5. Java虚拟机5.1 架构概述5.2 类加载器5.3 执行引擎5.4 即时编译器(JIT)6. 性能比较6.1 斐波那契数列性能测试6.2 性能测试结果7. 思考8. 结论1. 概述编程语言根据其抽象级别进行分类。我们区分高级语言(Java,Python,JavaScript,C ++,Go),低级语言(汇编程序),最后是机器代码。每个高级语言代码(例如J原创 2021-01-29 17:12:46 · 1407 阅读 · 3 评论 -
Spring Boot 实现在线Web SSH( Java Web版本的Xsehll)
前言之前讲过,我现在在一家国企上班,由于集团网络环境是封闭的内网,平时的部署上线,日志排查是通过一个跳板堡垒机去连接内网机器,大致情况如下图:以及联想到Alibaba开源的Java诊断工具Arthas,其Web Console在浏览器上就可以执行命令,操作简单,界面也非常的nice。然后就想着去实现一个自己的Web SSH,去探究其内部的原理。扩展:什么是堡垒机堡垒机,即在一个特定的网络环境下,为了保障网络和数据不受来自外部和内部用户的入侵和破坏,而运用各种技术手段监控和记录运维人员对网络内的原创 2021-01-28 17:13:11 · 3536 阅读 · 14 评论 -
系统设计基础 负载均衡
文章目录一、什么是负载均衡?负载均衡作用或者功能负载平衡如何工作?二、负载均衡分类软件负载均衡硬件负载均衡DNS负载均衡三、负载均衡算法1. 健康检测(health checks)2. 负载均衡如何处理状态3. 负载均衡器如何选择后端服务器?随机轮询加权轮询IP哈希最小连接数一致性 Hash粘性会话四、其他负载平衡方案基于队列方案五、自身高可用-负载均衡双机热备一、什么是负载均衡?负载平衡是一种确保服务器不会过载的技术。采取适当的负载平衡措施后,工作负载和流量请求将在服务器资源之间分配,以提供更高的弹性原创 2021-01-25 15:06:05 · 2034 阅读 · 0 评论 -
Spring Boot 实现在线WebLog、动态设置日志级别(可配合Nacos实现动态刷新)
文章目录前言实战1. 实现服务器端日志浏览2. 实现日志级别查询3. 实现日志的级别动态设置前言通过前2篇原理剖析我们已经可以模拟造轮子了,本篇内容来实战一波。Nacos或者Config是如何加载远程配置的?然后再模拟它造个轮子?Nacos或者Config是怎么实现配置热刷新的?然后再模拟它造个轮子?在实际项目开发中,一般的业务配置刷新,直接用@RefreshScope+@Value即可,但是我们项目上经常会遇到这样的场景,无法简单的用@RefreshScope+@Value实现,例如:线原创 2021-01-19 19:55:01 · 3083 阅读 · 1 评论 -
配置中心 Nacos 原理 Nacos或者Config是怎么实现配置热刷新的?然后再模拟它造个轮子?
文章目录前言问题1. 如何实现配置热刷新1. @RefreshScope原理2. ContextRefresher.refresh()3. RefreshScope.refreshAll()4. 模拟造轮子问题2. Nacos客户端如何实时监听到Nacos服务端配置更新了1. Apollo 实现方式2. 什么是DeferredResult3. 模拟造轮子总结前言上一篇 Nacos或者Config是如何加载远程配置的?然后再模拟它造个轮子?,我们已经搞清楚了Nacos是如何加载远程配置的。这篇我们来看下N原创 2021-01-19 11:24:27 · 5548 阅读 · 1 评论 -
从ReentrantLock的实现看AQS的原理及应用
前言Java中的大部分同步类(Lock、Semaphore、ReentrantLock等)都是基于AbstractQueuedSynchronizer(简称为AQS)实现的。AQS是一种提供了原子式管理同步状态、阻塞和唤醒线程功能以及队列模型的简单框架。本文会从应用层逐渐深入到原理层,并通过ReentrantLock的基本特性和ReentrantLock与AQS的关联,来深入解读AQS相关独占锁的知识点,同时采取问答的模式来帮助大家理解AQS。由于篇幅原因,本篇文章主要阐述AQS中独占锁的逻辑和Sync转载 2021-01-18 18:42:07 · 163 阅读 · 0 评论 -
Java线程池实现原理及其在美团业务中的实践
随着计算机行业的飞速发展,摩尔定律逐渐失效,多核CPU成为主流。使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器。J.U.C提供的线程池:ThreadPoolExecutor类,帮助开发人员管理线程并方便地执行并行任务。了解并合理使用线程池,是一个开发人员必修的基本功。本文开篇简述线程池概念和用途,接着结合线程池的源码,帮助读者领略线程池的设计思路,最后回归实践,通过案例讲述使用线程池遇到的问题,并给出了一种动态化线程池解决方案。一、写在前面1.1 线程池是什么线程池(Thread转载 2021-01-18 18:40:56 · 134 阅读 · 1 评论 -
深入解析String#intern
在 JAVA 语言中有8中基本类型和一种比较特殊的类型String。这些类型为了使他们在运行过程中速度更快,更节省内存,都提供了一种常量池的概念。常量池就类似一个JAVA系统级别提供的缓存。8种基本类型的常量池都是系统协调的,String类型的常量池比较特殊。它的主要使用方法有两种:直接使用双引号声明出来的String对象会直接存储在常量池中。 如果不是用双引号声明的String对象,可以使用String提供的intern方法。intern 方法会从字符串常量池中查询当前字符串是否存在,若不存在就转载 2021-01-18 18:16:51 · 174 阅读 · 0 评论 -
基于Flume的美团日志收集系统(二)改进和优化
在《基于Flume的美团日志收集系统(一)架构和设计》中,我们详述了基于Flume的美团日志收集系统的架构设计,以及为什么做这样的设计。在本节中,我们将会讲述在实际部署和使用过程中遇到的问题,对Flume的功能改进和对系统做的优化。1 Flume的问题总结在Flume的使用过程中,遇到的主要问题如下:a. Channel“水土不服”:使用固定大小的MemoryChannel在日志高峰时常报队列大小不够的异常;使用FileChannel又导致IO繁忙的问题;b. HdfsSink的性能问题:使转载 2021-01-18 18:13:37 · 156 阅读 · 0 评论 -
基于Flume的美团日志收集系统(一)架构和设计
背景美团的日志收集系统负责美团的所有业务日志的收集,并分别给Hadoop平台提供离线数据和Storm平台提供实时数据流。美团的日志收集系统基于Flume设计和搭建而成。《基于Flume的美团日志收集系统》将分两部分给读者呈现美团日志收集系统的架构设计和实战经验。第一部分架构和设计,将主要着眼于日志收集系统整体的架构设计,以及为什么要做这样的设计。第二部分改进和优化,将主要着眼于实际部署和使用过程中遇到的问题,对Flume做的功能修改和优化等。1 日志收集系统简介日志收集是大数据的基石转载 2021-01-18 17:11:24 · 261 阅读 · 0 评论 -
配置中心 Nacos 原理 Nacos如何加载远程配置?
文章目录前言Nacos如何加载远程配置?wireshark抓包分析原理分析1. 当spring程序启动时会调用locate方法。2. debug跟踪,真正获取远程配置的是 NacosConfigService调用getConfigInner()。3. 解析远端拿回的内容,NacosDataParserHandler. parseNacosData重复造轮子准备实现自定义PropertySourceLocator启用自定义PropertySourceLocator**BootstrapConfiguratio原创 2021-01-15 18:21:12 · 5242 阅读 · 8 评论 -
多图叙述Http协议发展简史以及常见面试题解析
文章目录什么是HTTP协议HTTP协议发展简史HTTP 0.9 单行协议HTTP 1.0 构建扩展性HTTP 1.1 标准化协议HTTP 2.0 更高性能的协议问题1.http1.1长连接keep-alive和http2.0的多路复用有什么区别?2.到底什么是HTTP1.1的流水线(管道机制)什么是HTTP协议超文本传输协议(HTTP)是Internet上最普遍和广泛采用的应用程序协议之一:它是客户端和服务器之间的通用语言,可实现现代Web。从简单的一个关键字和文档路径开始,它不仅成为浏览器的选择协议,原创 2021-01-13 16:40:15 · 802 阅读 · 0 评论 -
一步一步在阿里云上架一个应用系统(云服务器ECS选购配置)2
文章目录云服务器ECS选购注意点一.付费模式1.包年包月2.按量付费3.抢占式实例总结二.地域及可用区地域:可用区:总结三.实例根据使用场景挑选根据典型应用推荐实例规格四.镜像公共镜像自定义镜像共享镜像镜像市场总结五.存储核心配置四种类型云盘的性能对比六.快照服务问题重置服务器密码宝塔Centos7.x安装操作手册云服务器ECS选购注意点一.付费模式1.包年包月按月购买及续费,为预付费模式。若购买中国内地地域的 ECS 用于网站 Web 访问,请及时备案。若 ECS 用于 SLB,请前往 S原创 2021-01-12 18:55:57 · 1227 阅读 · 0 评论 -
一步一步在阿里云上架一个应用系统(云服务器ECS和轻量应用服务器选型)1
前言需求如下:现在有个企业内网的应用系统(较简单,500-1000用户),需要迁移到公网环境,相关服务组件都托管上云。可选的云平台如下:阿里云腾讯云…步骤我选的阿里云,先试用1个月,很舒服。1.注册阿里云账号(很简单,注册下就行),不详细介绍了。2.购买云服务器【重点】3.购买域名并解析绑定到网站【可选】(没域名,直接撸IP凑合用也行)传送门,如果域名已被注册,小技巧如下:例如lakernote.com被注册了,可以用laker-note.com代替,看看有没有被注册原创 2021-01-12 15:37:07 · 1801 阅读 · 3 评论 -
系统设计基础 长轮询、WebSocket、服务器发送事件(SSEs)协议
文章目录长轮询,WebSocket和服务器发送事件之间有什么区别?Ajax轮询协议HTTP长轮询协议WebSockets协议服务器发送事件协议(SSEs)总结SSEs协议剖析客户端DEMO服务端DEMO长轮询,WebSocket和服务器发送事件之间有什么区别?长轮询,WebSocket和服务器发送事件是客户端和服务器(如Web浏览器和Web服务器)之间流行的通信协议。首先,让我们了解标准HTTP Web请求。以下是常规HTTP请求的一系列事件:客户端打开连接并从服务器请求数据。服原创 2021-01-11 18:05:10 · 1968 阅读 · 10 评论 -
nginx配置详解以及常用配置示例
文章目录Nginx配置文件结构常用配置详解常用命令重启Nginx常用方案配置反向代理负载均衡常见问题1.文件上传,413 Request Entity Too LargeNginx配置文件结构默认的 nginx 配置文件 nginx.conf 内容如下:... #全局块events { #events块 ...}http #http块{ ... #http全局块 server #server块原创 2021-01-11 11:07:52 · 326 阅读 · 0 评论 -
系统设计基础关键词汇
系统设计基础分布式系统的关键特征负载均衡缓存数据分区索引代理冗余和复制关系型数据库、非关系型数据库CAP理论一致性Hash长轮询、WebSocket、服务器发送事件(SSE)系统设计基础原创 2021-01-08 14:04:11 · 456 阅读 · 0 评论 -
技术与架构设计面试目录纲领
技术与架构设计面试系统设计面试探寻设计大师的系统设计访谈 英文版破解编码面试第6版英文 Cracking the Coding Interview(6th)系统设计面试题精选101种开发人员的设计模式和技巧微服务https://www.cnblogs.com/kenshinobiy/p/11113124.html高可用系统设计使用集群,减少单点故障先拿常用的 Redis 举个例子!我们如何保证我们的 Redis 缓存高可用呢?答案就是使用集群,避免单点故障。当原创 2021-01-08 13:23:32 · 150 阅读 · 0 评论 -
Spring中@Valid和@Validated注解的差异
1.概述2. @Valid和@Validated 批注3.例子4.使用@Valid批注标记嵌套对象5.利与弊6.结论1.概述我们将重点介绍Spring中@Valid和@Validated批注之间的区别 。验证用户输入是我们大多数应用程序中的常见功能。在Java生态系统中,我们专门使用Java标准Bean验证API来支持此功能。而且,从4.0版本开始,它也与Spring很好地集成在一起2. @Valid和@Validated 批注在Spring中,我们使用JSR-303的@Valid批原创 2021-01-03 19:42:23 · 339 阅读 · 0 评论 -
一文详解微服务架构,通俗易懂,看到很多人给了这篇文章很高的评价,转载推荐分享给大家
本文将介绍微服务架构和相关的组件,介绍他们是什么以及为什么要使用微服务架构和这些组件。本文侧重于简明地表达微服务架构的全局图景,因此不会涉及具体如何使用组件等细节。要理解微服务,首先要先理解不是微服务的那些。通常跟微服务相对的是单体应用,即将所有功能都打包成在一个独立单元的应用程序。从单体应用到微服务并不是一蹴而就的,这是一个逐渐演变的过程。本文将以一个网上超市应用为例来说明这一过程。转载 2020-12-31 16:24:03 · 477 阅读 · 0 评论 -
今天我们来聊聊防盗链机制
前言什么是盗链?为什么要做防盗链?如何实现防盗链呢?如何破解防盗链?前言今天我的一位公众号读者告诉我,昨天发的文章【今天来聊一聊什么是软件设计中的上游和下游?】裂开了,我打开一看果不其然,如下图:可恶的防盗链机制,这不是什么彩蛋,这真的是踩雷了,因为我写文章会同时发布在csdn【名称:lakernote,欢迎大家同时关注】和公众号,所以自己搞了个图床,但是现在很多图床或者网站都会有防盗链机制,才导致了这个悲剧,那么刚好借此机会来研究下防盗链相关知识吧????????????(因祸得福系列原创 2020-12-30 00:07:49 · 4822 阅读 · 19 评论 -
什么是软件设计中的上游和下游?
前言总结河流理论组件服务终点理论前言在我们日常工作当中,经常会听到这些词汇,上游xx、下游xx;例如:我们的上游的xx系统今天down掉了,导致我们一部分业务没有闭环,需要晚些时候去补偿。我们提供的接口被调用频率过高,爆掉了,导致下游的几个厂商业务阻断1小时。在自然界中,上游和下游一般是指我们生活中的河流流向,如下图所示:原创 2020-12-28 11:20:13 · 23133 阅读 · 17 评论 -
读书笔记 系统、子系统、模块、组件、架构等名词的含义
精炼版本架构是顶层设计;框架是面向编程或配置的半成品;组件是从技术维度上的复用;模块是从业务维度上职责的划分;系统是相互协同可运行的实体。原创 2020-12-26 19:01:41 · 1201 阅读 · 1 评论 -
程序员必看的十大电影
前言1. 骇客帝国(1999)2. 环形使者(2012)3. 创:战记(2010)4. 遇见未来(2007)5. 死神来了 1, 2, 3, 4, 56. 盗梦空间(2010)7. 云图(2012)8. Flatland 2: Sphereland (2012)9. 源代码(2011)10. 恐怖游轮 (2009)前言不同的行业领域中很多时候都分享着共同的思想和理念。比如,大量的计算机编程中涉及到的概念都被运用到了电影里。有些概念出现在电影里后变得如此之酷,甚至反过来能帮助我们程序员原创 2020-12-26 09:06:56 · 4855 阅读 · 12 评论 -
什么是面向切面的编程?
什么是面向方面的编程(AOP)?通过使用下图,可以在几秒钟内理解该概念。跨领域关注问题首先看一下下面的图表,然后思考可能是什么问题。在上图中,很容易看到与日志相关的操作无处不在。它导致两个常见问题:1.代码纠缠:日志代码与业务逻辑混合在一起。2.代码散布:由每个模块中相同的代码引起。记录功能称为“跨领域关注点”。就是说,许多其他模块中使用的功能,例如身份验证,日志记录,性能,错误检查,数据持久性,存储管理等等。通过使用面向对象编程(OOP),我们可以定义低耦合和高内聚系统。但是,在涉及跨领域原创 2020-12-25 17:14:15 · 1198 阅读 · 0 评论 -
生产环境中,如何排查CPU异常以及定位问题代码
生产环境中有没有遇到服务器cpu居高不下的情况下,如何快速定位分析问题代码呢我来介绍下自己总结的问题代码示例以cpu空转来做演示,模拟生产环境的问题 ExecutorService pool = Executors.newFixedThreadPool(10); public void test() { for (int i = 0; i <...原创 2019-05-28 18:13:51 · 2772 阅读 · 0 评论 -
【Mysql】Sql分组查询后取每组的前N条记录
一、背景二、实战解析三、总结分组查询后取每组的前N条记录标签 mysql 数据库 分组 TOPN一、背景最近,有个功能需求。系统有个发布资讯模块,要求按照卡片形式展示。如下图:按照项目组展示卡片,每个项目组展示阅读量最多的TOP2。需求解析:按照项目组分组,然后取每组阅读量最多的前2条。二、实战解析基于Mysql数据库表定义1、项目组:team id 主键 name ..原创 2020-11-07 13:34:46 · 5747 阅读 · 5 评论 -
如何正确选择Spring Boot与Spring Cloud的版本以及对应关系
背景1. 新项目使用Spring Boot、Spring Cloud2. 将Spring Cloud添加到现有的Spring Boot应用程序一. 新项目使用Spring Boot、Spring Cloud1. 使用start.spring.io网站构建2. 使用idea的Spring Initializr构建二. 将Spring Cloud添加到现有的Spring Boot应用程序1. Spring Boot版本介绍2. Spring Cloud版本介绍3. Spring Boot 与S原创 2020-12-24 11:39:08 · 912 阅读 · 0 评论 -
读书笔记 - Java数组在内存中是什么样的
Java数组在内存中是什么样的1.一维数组2.二维数组3.它们在内存中的什么位置?总结Java数组在内存中是什么样的在Java中,数组存储原始值(int,char,…)或对象的引用(即指针)。当使用"new"创建对象时,将在堆中分配一个内存空间并返回一个引用。对于数组也是如此,因为数组是Java中的对象。原创 2020-12-23 17:06:58 · 244 阅读 · 0 评论 -
从一个奇怪的需求,来重新了解下Spring MVC的注解:@RequestMapping
@RequestMapping是什么?1. 按路径映射(path)1.1 占位符1.2 正则表达式1.3 Ant风格1.4 多path2. 按HTTP方法映射2.1 多值3. 按请求参数映射(params)3.1 多值4. 按HTTP头映射4.1 多值5. 按Consumes映射5.1 多值6. 按Produces映射6.1 多值7. 所有请求的备胎原创 2020-12-22 11:47:15 · 229 阅读 · 0 评论 -
今天我们来聊聊,如何做好第三方系统对接
作者:laker,喜欢LOL滴神faker,又是NBA湖人队(laker)粉丝儿(主要是老詹的粉丝儿),本人又姓李,取名:laker,喜欢分享自己工作中需要的问题和解决方案,以及一些读书笔记和心得分享。文章目录前言What 是什么Why 为什么How 怎么做对接前对接中对接后对接风险总结与思考前言无论你是做面向ToB、ToC还是ToG的业务,开发业务系统,永远也逃脱不了与第三方系统对接的命运,例如:常见的支付宝、微信支付平台对接、短信平台对接,还有单点登录对接,以及与友商的数据接口对接等等,大..原创 2020-12-18 18:40:43 · 14559 阅读 · 4 评论 -
5分钟手撸一个简单、易用的缓存组件,架构师都对我刮目相看
背景现在只要我们一提到缓存,当下的环境,肯定很多人的脑子里立马会蹦出来Redis,俨然已经成为行业标杆了,但是中小型项目中对于简单的缓存需求,还用Redis的话,感觉杀鸡用牛刀了,这时我们可以选择常用的轻量级临时缓存,例如:使用最多的应该就是HashMap或者ConcurrentHashMap了,但是呢,它没有设置最大缓存数量的设置,以及过期淘汰的策略,如果一个不小心,很容易造成系统的OOM,So,来跟着laker手撸一个小型的缓存组件吧(麻雀虽小五脏俱全,堪称缓存界瑞士军刀)。首先先设计下缓存的核心接原创 2020-12-16 14:51:32 · 2197 阅读 · 1 评论