自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 项目系统复盘,Spring AOP实现用户操作日志功能

今天项目完了,复盘了一下系统,发现还是有一些东西值得拿出来和大家分享一下。需求分析系统需要对用户的操作进行记录,方便未来溯源首先想到的就是在每个方法中,去实现记录的逻辑,但是这样做肯定是不现实的,首先工作量大,其次违背了软件工程设计原则(开闭原则)这种需求显然是对代码进行增强,首先想到的是使用 SpringBoot 提供的 AOP 结合注解的方式来实现功能实现1、 需要一张记录日志的 Log 表导出的 sql 如下:-- mcams.t_log definiti.

2022-05-29 14:11:11 492 1

原创 颜值爆表,推荐两款JSON可视化工具,配合Swagger使用真香

经常使用Swagger的小伙伴应该有所体会,Swagger对于JSON的支持真的很不友好!最近发现了两款颜值很不错的JSON可视化工具,可以优雅地展示JSON数据从而提高开发效率,推荐给大家!聊聊Swagger我们先来聊聊Swagger对JSON支持有哪些不友好的地方,我们为什么需要JSON可视化工具!当我们使用Swagger提交POST请求,输入JSON请求参数时,它既不支持JSON格式校验,也不支持格式化,用起来很不方便;当我们使用Swagger获取到的JSON数据比较长时.

2022-05-28 13:45:44 1802

原创 Redis集群方案应该怎么做?都有哪些方案?

使用codis方案:目前用的多的集群方案,基本和twemproxy一致的效果,但它支持在节点数量改变情况下,旧节点数据可恢复到新hash节点。Redis cluster3.0自带的集群:特点在于他的分布式算法不是一致性hash,而是hash槽的概念,以及自身支持节点设置从节点。在业务代码层实现:起几个毫无关联的Redis实例,在代码层对key进行hash计算,然后去对应的Redis实例操作数据。这种方式对hash层代码要求比较高,考虑部分包括,节点失效后的替代算法方案,数据震荡后的自动脚本恢复,实例

2022-05-27 15:16:55 734

原创 再有人问你数据库缓存一致性的问题,直接把这篇文章发给他

在之前的一篇文章《为什么会出现数据库和缓存不一致的问题》中,我们介绍过缓存和数据库会出现数据不一致的几种情况。我们提到过,在数据库和缓存的操作过程中,可能存在”先写数据库,后删缓存”、”先写数据库,后更新缓存”、”先删缓存库,后写数据库”以及”先更新缓存库,后写数据库”这四种。那么,到底是应该删除缓存好呢,还是更新缓存好呢?到底应该先操作数据库呢还是先操作缓存呢?哪种方案更好呢?又该如何选择呢?本文就来展开分析一下。删除还是更新为了保证数据库和缓存里面的数据是一致的,很多人会很多人在做数

2022-05-27 13:55:31 266

原创 一起学习下,这个Java中的交互式编程环境JShell。

什么是交互式编程环境?重点词交互,在这样的编程环境中,你每输入一行代码,环境都会给你一个反馈,这就是交互式的编程环境。这种编程环境并不太适合工程化的复杂性需求,但在一些快速验证、简单计算之类的场景下还是非常好用的。其实交互式编程环境在其他高级语言中很早就有了,而Java直到Java 9才正式推出了这样的工具。下面就来一起学习下,这个Java中的交互式编程环境JShell。启动JShell打开终端,然后执行命令:jshell,执行效果如下:➜ ~ jshell| 欢迎使用 JShell

2022-05-26 20:53:58 261

转载 IDEA 插件版的 Postman,接口调试太方便了

应用场景当下Restful接口已成为主流,get请求直接通过浏览器就能模拟测试,但其他类型的请求,比如post,则需要专门工具辅助了。restful接口比较主流的调试工作是postman,安装是一方面问题,另外,开发过程中发起测试,需要切换窗口,也会降低效率。是否在IDEA界面中直接实现接口的调试呢?这就该轮到RestfulToolkitX插件出场了。方式效果安装完后,会在IDEA右侧直接出现一个单独面板,会自动搜索项目所有的resf接口点击上方的放大镜图标,会打开一个独立的

2022-05-26 16:28:13 1612

原创 微服务注册中心技术选型:5 种主流注册中心,哪个最香?

讲解5种常用的注册中心,对比其流程和原理,无论是面试还是技术选型,都非常有帮助。对于注册中心,在写这篇文章前,我其实只对ETCD有比较深入的了解,但是对于Zookeeper和其它的注册中心了解甚少,甚至都没有考虑过ETCD和Zookeeper是否适合作为注册中心。经过近2周的学习,原来注册中心除了ETCD和Zookeeper,常用的还有Eureka、Nacos、Consul,下面我们就对这些常用的注册中心,初探它们的异同,便于后续技术选型。全文接近8千字,有点长,建议先收藏,再慢慢看,下..

2022-05-26 15:56:27 1627 1

原创 十年磨一剑:蚂蚁集团可观测性平台 AntMonitor

十年磨一剑:蚂蚁集团可观测性平台 AntMonitor 揭秘2022-05-20 13:55·JAVA互联搬砖工人蚂蚁集团的业务种类繁多,兼具金融级的“稳” 和互联网的 “快”,支撑又快又稳的业务发展需要完善的稳定性保障体系,这个体系的基石就是可观测性平台-AntMonitor。早在2011年前,监控平台就已经完成初代建设,在2012到2017年这五年间,蚂蚁监控技术团队抽象出了业务视角监控牵引的模式,大大提升了核心业务的故障发现能力,同期研发了可视化引擎与易用的配置系统。为了支撑双..

2022-05-25 20:25:35 2186

原创 你会使用Kibana吗?(一张图片胜过千万行日志)

Kibana是一个开源的分析和可视化平台,设计用于和Elasticsearch一起工作。你用Kibana来搜索,查看,并和存储在Elasticsearch索引中的数据进行交互。你可以轻松地执行高级数据分析,并且以各种图标、表格和地图的形式可视化数据。Kibana使得理解大量数据变得很容易。它简单的、基于浏览器的界面使你能够快速创建和共享动态仪表板,实时显示Elasticsearch查询的变化。1. 安装Kibana2. Kibana配置Configure Ki...

2022-05-23 14:19:04 353

原创 Prometheus+SpringBoot应用监控全过程详解

1. Prometheus是什么Prometheus是一个具有活跃生态系统的开源系统监控和告警工具包。一言以蔽之,它是一套开源监控解决方案。Prometheus主要特性:多维数据模型,其中包含由指标名称和键/值对标识的时间序列数据 PromQL,一种灵活的查询语言 不依赖分布式存储; 单服务器节点是自治的 时间序列收集通过HTTP上的pull模型进行 通过中间网关支持推送(push)时间序列 通过服务发现或静态配置发现目标 支持多种模式的图形和仪表盘为什么用pull(拉取)而不用p

2022-05-23 13:39:33 277

原创 阅读 redis 源码,学习缓存淘汰算法 W-TinyLFU

所有 IT 从业者都接触过缓存,一定了解基本工作原理,业界流行一句话:缓存就是万金油,哪里有问题哪里抹一下。那他的本质是什么呢?上图代表从 cpu 到底层硬盘不同层次,不同模块的运行速度,上层多加一层 cache, 就能解决下层的速度慢的问题,这里的慢是指两点:IO 慢和 cpu 重复计算缓存中间结果但是 cache 受限于成本,cache size 一般都是固定的,所以数据需要淘汰,由此引出一系列其它问题:缓存一致性、击穿、雪崩、污染等等,本文通过阅读 redis 源码,学习主流淘汰算..

2022-05-21 20:28:30 329

原创 Gitee崩了?大量仓库被关闭,官方答复“迫于无奈”

PART 01Gitee开发者:项目被封了5月18日,大量开发者反映自己Gitee上的开源项目,发现被关闭公开访问了。对此,Gitee的答复是:“此举也是迫于无奈,目前已经是Gitee团队能确保大家尽快正常使用的最优解,我们正在尽全力减少大家的不便,希望大家能够理解。”图片来源@知乎这一事件引发了广大开发者的讨论。有人认可Gitee的这种做法:有人对这种一刀切的做法表示不满:PART 02Gitee审核事件背后的“不得已”Gitee又名码云,是

2022-05-21 19:36:29 4198 3

原创 原来我一直在踩雷区,MySQL使用索引的正确方式

MySQL合理使用索引索引可以说是数据库中的一个大心脏了,如果说一个数据库少了索引,那么数据库本身存在的意义就不大了,和普通的文件没什么两样。所以说一个好的索引对数据库系统尤其重要,今天来说说MySQL索引中B+树索引好从细节和实际业务的角度看看在MySQL处,以及我们在使用索引时需要注意的知识点。一、合理利用索引在工作中,我们可能判断数据表中的一个字段是不是需要加索引的最直接办法就是:这个字段会不会经常出现在我们的where条件中。从宏观的角度来说,这样思考没有问题,但是从长远的角度来看,有时

2022-05-21 16:10:05 332

原创 超实用工具分享,一个分布式 JVM 监控工具

最近复习了下数据结构中的哈希表,发现在计算等概率情况下查找不成功的平均查找长度时比较迷茫,不知道到底是怎么计算出来的。现在通过查阅资料终于知道如何计算了,所以记录下来以供以后查阅。 下面看下2010年2010年全国硕士研究生入学统一考试计算机科学与技术学科联考计算机学科专业基础综合试题中一个考哈希表的题。Question1:将关键字序列(7、8、30、11、18、9、14)散列存储到散列表中。散列表的存储空间是一个下标从0开始的一维数组,散列函数为: H(key) = (keyx3...

2022-05-21 15:31:44 248

原创 TCP为什么要三次握手与四次分手?

TCP协议简介TCP协议是五层协议中运输层的协议,下面依赖网络层、链路层、物理层,对于一个报文想发到另一台机器(假设是服务器)上对等层,每一个所依赖的层都会对报文进行包装,例如TCP协议就依赖网络层的IP协议,所以发送的报文会经过如下封装:当这个数据包到达服务器时,服务器的网络层会对IP相关协议内容解封装、校验,然后运输层对TCP层进行解封,解封涉及到一系列的步骤,例如这个数据包是要干嘛?是发给我的吗?这些操作需要根据TCP报文的首部信息来判断,首部包含以下内容:主要通过首部信息来了解这

2022-05-21 15:24:23 332

原创 超简单易用,一款MySQL管理工具:Sequel Pro

Sequel Pro 是一个 Mac 系统上简单易用的 MySQL 和 MariaDB 数据库管理系统。服务器和本地都是Mysql数据库 使用的工具:Sequel Pro(专门管理Mysql的工具) 操作系统Mac OS 10.12Sequel Pro简介Sequel Pro是一款管理Mysql的工具,界面简洁易用。Sequel 连接界面连接服务器的mysql数据库Sequel Pro提供了3种连接方式,standard/socket/ssh。我使用的是st.

2022-05-20 21:00:04 2542

原创 Spring常用的拓展接口分门别类

Spring框架是一个拓展性很好的框架,在平时的开发中我们也会进行一些拓展。那么来看一下常用的拓展类:​编辑切换为居中添加图片注释,不超过 140 字(可选)这里把拓展接口分成了四大类 1. 导入类拓展接口​编辑添加图片注释,不超过 140 字(可选) ImportAware 从Spring的源码注释来看ImportAware接口是需要和@Import一起使用的。通过@Import导入的配置类如果实现了ImportAware接口就可以获取到导入该配置类接口的数据配置

2022-05-20 20:33:00 398

原创 利用JAVA向Mysql插入一亿数量级数据—效率测评

利用JAVA向Mysql插入一亿数量级数据—效率测评这几天研究mysql优化中查询效率时,发现测试的数据太少(10万级别),利用 EXPLAIN 比较不同的 SQL 语句,不能够得到比较有效的测评数据,大多模棱两可,不敢通过这些数据下定论。所以通过随机生成人的姓名、年龄、性别、电话、email、地址 ,向mysql数据库大量插入数据,便于用大量的数据测试 SQL 语句优化效率。、在生成过程中发现使用不同的方法,效率天差万别。1、先上Mysql数据库,随机生成的人员数据图。分别是ID、姓名、性.

2022-05-20 20:19:16 1793

原创 给我整不会了,58技术3面,面试官问我:你做事仔细吗?

引子2015年的时候,我去58面试。因为有前同事的介绍,面试官不用问就对我各方面的能力什么的都很了解。本身那个同事级别就比较高(如果我面试通过,大概他大概是我领导的样子)。所以过程中可以看出,我去面试前级别什么的都定好了。面试就是走个过场。其中一个面试官,级别应该是我那位同事的领导。就问我:“因为咱们是做金融的,需要非常仔细,你做事仔细吗?”当时我只要回答是或者否就行了。但是现在想来,是否仔细看不是一道判断题,而是一道思考题。对仔细的意识领导这个问题听起来无关痛痒,谁遇到这种送分题不

2022-05-20 16:13:55 369

原创 在我差点崩溃了的时候,还好有主从复制

大家好,我是小林哥。又来图解 Redis 啦。我在前两篇已经给大家图解了 AOF 和 RDB,这两个持久化技术保证了即使在服务器重启的情况下也不会丢失数据(或少量损失)。不过,由于数据都是存储在一台服务器上,如果出事就完犊子了,比如: 如果服务器发生了宕机,由于数据恢复是需要点时间,那么这个期间是无法服务新的请求的; 如果这台服务器的硬盘出现了故障,可能数据就都丢失了。 要避免这种单点故障,最好的办法是将数据备份到其他服务器上,让这些服务器也可以对外提供服务,这样即使有一台服

2022-05-20 14:16:23 205

原创 效率这不就提上来了嘛,SpringBoot+flowable快速实现工作流

总览使用flowable自带的flowable-ui制作流程图 使用springboot开发流程使用的接口完成流程的业务功能一、flowable-ui部署运行flowable-6.6.0 运行 官方demo参考文档:https://flowable.com/open-source/docs/bpmn/ch14-Applications/1、从官网下载flowable-6.6.0 :https://github.com/flowable/flowable-engine/relea.

2022-05-20 13:49:48 344

原创 深入分析mysql为什么不推荐使用uuid或者雪花id作为主键

前言:在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究竟有什么坏处?本篇文章我们就来分析这个问题,探讨一下内部的原因。一、mysql和程序实例1.要说明这个问题,我们首先来建立三张表分别是user_auto_key,user_uuid,user_random_key,分别表示自动增长的主键,uuid作为主键,随机key

2022-05-20 13:39:02 945

原创 取而代之,以后不用再 new Date() 了

Date背景众所周知,在 1995 年,Brendan(JavaScript之父) 被网景公司安排了一个巨大而紧急的工作任务,用 10 天的时间来编写 JavaScript 语言。而日期处理是几乎所有编程语言的基本部分,所以JavaScript 也必须拥有它。这是一个非常复杂的领域,但留给作者编写它的时间却很短。最终Brendan选择了借鉴当时红极一时的java语言,从java.Util.Date日期实现中复制了 Javascript 的日期对象。坦率地说,这个实现很糟糕。事实上Jav...

2022-05-19 20:49:06 996

原创 Spring Cloud Gateway 结合OAuth2提供UAA服务

微服务做用户认证和授权一直都是一个难点,随着OAuth2.0的密码模式被作废,更是难上加难了。今天胖哥群里的一个群友搭建用户认证授权体系的时候遇到了一些棘手的问题,这让胖哥觉得是时候分享一些思路出来了。两种思路通常微服务的认证和授权思路有两种:所有的认证授权都由一个独立的用户认证授权服务器负责,它只负责发放Token,然后网关只负责转发请求到各个微服务模块,由微服务各个模块自行对Token进行校验处理。 另一种是网关不但承担了流量转发作用,还承担认证授权流程,当前请求的认证信息由网关中继给下游

2022-05-19 20:13:06 486

原创 时间类有多复杂,JDK竟设计了三版?

(一)概述时间类一直是代码开发中经常用到的东西,时间类在JDK中刚出现到国内最常用的1.8版本,一共迭代了三次。分别是Date类、Calendar类和LocalDateTime类。虽然JDK在更新,但是我看到很多的项目还是用着最初的Date类,这期就来讲一下三代时间类的区别。(二)Date类Date类是JDK1.0时期推出来的第一代时间类,Date类最常用的方式是对获取当前时间,并使用SimpleDateFormat对时间进行格式化,代码如下:Date date = new Date();

2022-05-19 16:03:21 111

原创 放弃密码模式吧,最先进的Spring Cloud认证授权方案在这里

旧的Spring Security OAuth2停止维护已经有一段时间了,99%的Spring Cloud微服务项目还在使用这些旧的体系,严重青黄不接。很多同学都在寻找新的解决方案,甚至还有念念不忘密码模式的,别想了,已经凉透了。今天看到这篇文章的同学有福了,问题将在这里得到解决。仓库地址:https://github.com/NotFound403/id-server方案目前这应该是Spring生态中最新的解决方案,没有之一。先看下流程,微服务无关的其它的组件这里先屏蔽了,剩下图的几个组件:

2022-05-19 15:54:52 650 1

原创 完完整整地看完这个故事,你敢说还不懂Docker?

程序员受苦久矣多年前的一个夜晚,风雨大作,一个名叫Docker的年轻人来到Linux帝国拜见帝国的长老。推荐学习:爱了!Alibaba内部出品“K8S+Docker指南”,理论与实战双管齐下“Linux长老,天下程序员苦于应用部署久矣,我要改变这一现状,希望长老你能帮帮我”长老回答:“哦,小小年纪,口气不小,先请入座,你有何所求,愿闻其详”Docker坐下后开始侃侃而谈:“当今天下,应用开发、测试、部署,各种库的依赖纷繁复杂,再加上版本之间的差异,经常出现在开发环境运行正常,

2022-05-19 14:05:37 17715 59

原创 大厂面试真题解读:Tomcat的连接器是如何设计的?

导读为什么要学习Tomcat的设计思路,对我们这些 crud 工程师有用吗?现代背景下,我们不仅可以学到Tomcat的架构,学会从宏观上怎么去设计一个复杂系统,怎么设计顶层模块,以及模块之间关系。Tomcat总体架构Tomcat主要实现了2个核心功能:处理Socket连接,负责网络字节流与Request和Response对象的转化 加载和管理Servlet,以及具体处理Request请求因此Tomcat设计了两个核心组件:连接器(Connector):负责对外交流 容器(Conta

2022-05-19 13:41:35 180

原创 看完这15张图你就知道Redis为什么单线程还这么快了

作为一名后端工程师,工作中你肯定和 Redis 打过交道。Redis 为什么快,这点想必你也知道,至少为了面试也做过准备。很多人知道 Redis 快仅仅因为它是基于内存实现的,对于其它原因倒是模棱两可。那么今天就来一起看看:​编辑切换为居中添加图片注释,不超过 140 字(可选)- 思维导图 -基于内存实现这点在一开始就提到过了,这里再简单说说。Redis 是基于内存的数据库,那不可避免的就要与磁盘数据库做对比。对于磁盘数据库来说,是需要将数据读取到内存里的,这个过程

2022-05-19 13:27:43 185

原创 使用Netty和动态代理一键实现一个简单的RPC

RPC(remote procedure call)远程过程调用RPC是为了在分布式应用中,两台主机的Java进程进行通信,当A主机调用B主机的方法时,过程简洁,就像是调用自己进程里的方法一样。RPC框架的职责就是,封装好底层调用的细节,客户端只要调用方法,就能够获取服务提供者的响应,方便开发者编写代码。RPC底层使用的是TCP协议,服务端和客户端和点对点通信。作用在RPC的应用场景中,客户端调用服务端的代码客户端需要有相应的api接口,将方法名、方法参数类型、具体参数等等都发送给服务端

2022-05-18 20:41:37 288

原创 Spring Cloud Alibaba使用Seata解决分布式事务全过程解析

为什么会产生分布式事务?#随着业务的快速发展,网站系统往往由单体架构逐渐演变为分布式、微服务架构,而对于数据库则由单机数据库架构向分布式数据库架构转变。此时,我们会将一个大的应用系统拆分为多个可以独立部署的应用服务,需要各个服务之间进行远程协作才能完成事务操作。在微服务项目中通常一个大项目会被拆分为N个子项目,例如用户中心服务,会员中心服务,支付中心服务等一系列微服务,在面临各种业务需求时难免会产生用户中心服务中需要调用会员中心服务,支付中心服务而产生调用链路;服务与服务之间通讯采用RPC远程调用技术,

2022-05-18 20:03:27 598

原创 不是吧,都2022年了你别说你还不会Spring MVC基本应用

1.1 经典三层结构在JavaEE开发中,几乎全部都是基于B/S架构的开发。那么在B/S架构中,系统标准的三层架构包括:表现层、业务层、持久层。三层架构在我们的实际开发中使用得非常多,接下来我们详细了解下这三层架构。表现层:也就是我们常说的web层。它负责接收客户端请求,向客户端响应结果。表现层包括展示层和控制层:控制层负责接受请求,展示层负责结果的展示。表现层依赖业务层,接收到客户端请求一般会调用业务层进行业务处理,并将处理结果响应给客户端。表现层的设计一般都使用MVC模型。业务

2022-05-18 19:54:42 1151

原创 老生常谈的问题:Spring Boot中如何一键自定义starter?

Spring Boot starter我们知道Spring Boot大大简化了项目初始搭建以及开发过程,而这些都是通过Spring Boot提供的starter来完成的。品达通用权限系统就是基于Spring Boot进行开发,而且一些基础模块其本质就是starter,所以我们需要对Spring Boot的starter有一个全面深入的了解,这是我们开发品达通用权限系统的必备知识。1 starter介绍spring boot 在配置上相比spring要简单许多, 其核心在于spring-boot-

2022-05-18 15:09:43 149

原创 淘宝教你:秒杀系统设计就该这么玩

秒杀活动是指网络商家为促销等目的组织或网上限时抢购活动,这种活动具有瞬时并发量大、库存量少和业务逻辑简单等特点。设计一个秒杀系统需要考虑的因素很多,比如对现有业务的影响、网络带宽消耗以及超卖等因素。本文会讨论秒杀系统的各个环节可能存在的问题以及解决方案。秒杀系统傻瓜式秒杀系统秒杀系统的核心难点是并发量,如果不考虑并发问题,那么我们可以用如下图所示的简单的系统结构来实现秒杀系统,用户只有两个简单操作:刷新界面和秒杀按钮,服务端也只有两个服务接口:返回秒杀界面和处理秒杀逻辑。假设本文中秒杀商品有10

2022-05-18 14:32:57 323

原创 在什么样的情况下RPC或者HTTP需要序列化和反序列化?

大家好,我是热心网友 —— 小林。有位读者问了,我这么一个问题:不管是 RPC 或者 HTTP,只要传输的内容是「对象」,要想在接收方还原出一摸一样的「对象」,那就需要序列化和反序列化。那什么是序列化和反序列化呢?RPC 能帮助我们的应用透明地完成远程调用,即调用其他服务器的函数就像调用本地方法一样。发起调用请求的那一方叫做调用方,被调用的一方叫做服务提供方。调用方和服务提供方一般是不同的服务器,所以就需要通过网络来传输数据,并且 RPC 常用于业务系统之间的数据交互,需要保

2022-05-17 20:44:54 283

原创 微服务网关:SpringCloud Gateway保姆级入门教程

什么是微服务网关SpringCloud Gateway是Spring全家桶中一个比较新的项目,Spring社区是这么介绍它的:该项目借助Spring WebFlux的能力,打造了一个API网关。旨在提供一种简单而有效的方法来作为API服务的路由,并为它们提供各种增强功能,例如:安全性,监控和可伸缩性。而在真实的业务领域,我们经常用SpringCloud Gateway来做微服务网关,如果你不理解微服务网关和传统网关的区别,可以阅读此篇文章 Service Mesh和API Gateway关系深度

2022-05-17 20:21:43 2079

原创 2022金三银四必问储备知识:Java线程池详解

线程池概念说得简单明了一点,就是管理线程的一个池子,是一种基于池化思想管理线程的工具。为解决资源分配的问题,线程池采用了“池化”(Pooling)思想。池化,顾名思义,是为了最大化收益并最小化风险,而将资源统一在一起管理的一种思想。Pooling is the grouping together of resources (assets, equipment, personnel, effort, etc.) for the purposes of maximizing advantage o

2022-05-17 17:17:21 312 1

原创 微服务调用链日志追踪分析

一、技术原理1.1 背景微服务架构是一个分布式架构,它按业务划分服务单元,一个分布式系统往往有很多个服务单元。由于服务单元数量众多,业务的复杂性,如果出现了错误和异常,很难去定位。主要体现在,一个请求可能需要调用很多个服务,而内部服务的调用复杂性,决定了问题难以定位。所以微服务架构中,必须实现分布式链路追踪,去跟进一个请求到底有哪些服务参与,参与的顺序又是怎样的,从而达到每个请求的步骤清晰可见,出了问题,很快定位。举个例子,在微服务系统中,一个来自用户的请求,请求先达到前端A(如前端界面),然后

2022-05-17 16:37:42 3302

原创 Redis不止缓存,原来在微服务领域也做出了这么大的贡献

前言说到redis,可能大家的脑海中蹦出的关键词是:NoSQL、KV、高性能、缓存等。但今天的文章从另一个角度——微服务来展开。这篇文章的起因也是源自一次面试经历,在面试一位来自陌陌的候选人(就是那个交友的陌陌)时,他提到一点让我觉得很有意思,他说redis在陌陌被使用得非常广泛,除了常规的缓存外,某些场景下也当NoSQL数据库来使用,还用redis作为微服务的注册中心,甚至连RPC的调用协议都用了redis协议。注册中心最早了解到redis可以作为注册中心是从dubbo的源码中看到,但一直

2022-05-17 15:56:38 276

原创 慌了,老大突然问我基于JDK和CGLib实现动态代理的区别和适用场景

在日常的开发中,Spring AOP 是一个非常常用的功能。谈到 AOP,自然离不开动态代理。那么,基于 JDK 和 CGLib 如何实现动态代理,他们之间的区别和适用场景是什么呢?接下来,我们一起来探讨一下这个问题。JDK 如何实现动态代理?话不多说,我们直接对照着代码来查看。代码示例Hello 接口public interface HelloInterface { /** * 代理的目标方法 */ void sayHello();

2022-05-17 14:06:34 338

空空如也

空空如也

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

TA关注的人

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