自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 常见加密算法

在对称加密算法中,加密(编码)和解密(解码)使用的是同一个密钥。也就是说,发送方和接收方必须事先共享同一密钥,并且保守这个密钥不被第三方得知。

2024-04-25 10:19:55 529 1

原创 RBAC权限模型

提供了对角色分配的限制,比如互斥角色(不允许一个用户同时拥有两个冲突的角色),先决条件角色(用户必须拥有某个角色才能被分配另一个角色),以及数量限制(对于某个角色的用户数量做出限制)。权限是对资源的访问控制,它定义了可以对资源执行的操作,如读取、写入、删除或修改。当用户登录系统时,会创建一个会话,在此会话中,用户的角色被激活,允许用户通过其角色执行权限操作。是最完整的RBAC模型,结合了RBAC1和RBAC2,包括角色层次和权限约束。扩展了基础RBAC,包含角色的继承,允许一个角色继承另一个角色的权限。

2024-04-19 10:33:29 326

原创 Spring 依赖注入

DI(依赖注入)是实现IoC的一种手段。在Spring框架中,DI指的是组件所依赖的其他组件被Spring容器注入到它们中去,而不是通过组件自己去创建或查找依赖。这样,组件的创建和依赖的解析都是由外部容器(即Spring框架)负责的,因此实现了松耦合和更高程度的模块化。依赖注入让组件之间的依赖关系更容易管理和更换,它也有助于单元测试,因为可以很容易地将真实依赖替换为mock对象。

2024-04-17 17:26:28 359

原创 MySQL执行计划

key_len:表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的)rows:估算出结果集行数,表示MySQL根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数。id:select子句或表执行顺序,id相同,从上到下执行,id不同,id值越大,执行优先级越高。ref:关联的字段,常量等值查询,显示为const,如果为连接查询,显示关联的字段。

2024-04-17 14:28:42 593

原创 Redis数据倾斜

Redis 数据倾斜问题通常出现在分布式 Redis 环境中,尤其是 Redis 集群环境。这意味着一部分节点承载了比其他节点更多的数据或者接收的请求更多,导致负载不均衡。数据倾斜可能会对性能和可扩展性造成影响。针对Redis的数据倾斜问题,可能需要综合考虑应用逻辑、key设计、集群配置和负载均衡策略多个方面,采取一种或多种措施进行缓解。在实践中,通常需要根据具体的业务场景和倾斜状况来选择最合适的解决办法。

2024-04-08 13:54:12 384

原创 Redis大key问题如何解决

Redis 中的大 key 问题通常是指一个单独的 key 占用了过多的内存,例如一个非常大的哈希表、列表、集合或有序集合。大 key 会导致一系列问题,比如执行操作时会出现延迟,甚至可能会阻塞整个 Redis 实例。适当的设计和策略可以减少大 key 对 Redis 性能的影响,确保 Redis 实例运行稳定。在解决大 key 问题时,应尽量避免在高流量期间操作,以免对线上服务造成不必要的影响。

2024-04-08 11:42:46 435

原创 直播弹幕系统设计

设计一个直播弹幕系统需要考虑到系统的实时性、可扩展性、高可用性以及数据持久性等多个方面。

2024-03-22 16:48:11 375

原创 CDN浅聊

其目的是通过在现有的Internet中增加一层新的CACHE(缓存)层,将网站的内容发布到最接近用户的网络”边缘“的节点,使用户可以就近取得所需的内容,提高用户访问网站的响应速度。简单的说,CDN的工作原理就是将您源站的资源缓存到位于全球各地的CDN节点上,用户请求资源时,就近返回节点上缓存的资源,而不需要每个用户的请求都回您的源站获取,避免网络拥塞、缓解源站压力,保证用户访问资源的速度和体验。为了达到最佳的性能和效率,CDN 需要一些复杂的技术配置,包括缓存规则的设定、CDN 节点的选择等。

2024-03-22 15:19:41 373

原创 SQL中为什么不能使用1=1条件

性能问题:当使用1=1条件时,实际上并没有进行任何实际的条件判断,这可能导致数据库引擎无法有效地利用索引或优化查询计划,从而影响查询性能。在SQL查询中,使用1=1条件是一种常见的技巧,它通常被用于动态构建查询条件或者简化查询语句。可读性:在实际的查询中,1=1条件并没有提供任何有意义的过滤条件,可能会让其他开发人员难以理解查询的意图,降低代码的可读性和可维护性。潜在安全风险:在某些情况下,如果1=1条件被滥用或者被恶意利用,可能会导致SQL注入等安全问题,因为它可以绕过正常的条件判断。

2024-03-08 17:05:46 243

转载 Apollo配置中心

上图简要描述了Apollo客户端的实现原理: 前面提到了Apollo客户端和服务端保持了一个长连接,从而能第一时间获得配置更新的推送。长连接实际上我们是通过Http Long Polling(长轮询)实现的,具体而言:考虑到会有数万客户端向服务端发起长连,在服务端我们使用了async servlet(Spring DeferredResult)来服务Http Long Polling请求。

2024-02-23 16:33:51 33

原创 Java诊断利器Arthas

在JDK5中,Instrument 要求在运行前利用命令行参数或者系统参数来设置代理类,在实际的运行之中,虚拟机在初始化之时(在绝大多数的 Java 类库被载入之前),instrumentation 的设置已经启动,并在虚拟机中设置了回调函数,检测特定类的加载情况,并完成实际工作。有了这样的功能,开发者就可以实现更为灵活的运行时虚拟机监控和 Java 类操作了,这样的特性实际上提供了一种虚拟机级别支持的 AOP 实现方式,使得开发者无需对 JDK 做任何升级和改动,就可以实现某些 AOP 的功能了。

2024-01-09 16:46:31 433

原创 ConcurrentHashMap为何不支持null键和null值

ConcurrentHashmap和Hashtable都是支持并发的,这样会有一个问题,当你通过get(k)获取对应的value时,如果获取到的是null时,你无法判断,它是put(k,v)的时候value为null,还是这个key从来没有做过映射。HashMap是非并发的,可以通过contains(key)来做这个判断。ConcurrentHashMap不能put null 是因为 无法分辨是key没找到的null还是有key值为null,这在多线程里面是模糊不清的,所以压根就不让put null。

2023-10-25 16:41:53 199

原创 发生OOM时JVM会退出吗

需要明确,程序是否退出和发生 OOM 无关,而和当前是否还有有关。只要还有运行中的子线程,即使 main 线程结束或异常崩溃了,程序也不会停止。

2023-09-04 14:29:12 734

原创 Dockerfile操作指令

2023-07-11 09:21:35 112

原创 什么是Docker

docker是一个用Go语言实现的开源项目,可以让我们方便的创建和使用容器,docker将程序以及程序所有的依赖都打包到docker container,这样程序可以在任何环境都会有一致的表现。

2023-07-10 10:12:38 1711

转载 XXL-JOB分布式任务调度

调度中心调用执行器,执行定时任务。执行器回调调度中心,上报定时任务执行结果。在调度和执行的整个流程中,XXL-JOB使用了大量的异步操作,减少调度中心的资源压力,以此在集中式调度配置与性能之间找到平衡点。异步实践通过线程池来执行异步操作通过自旋线程 + 阻塞队列的方式来执行异步操作。_xxl-job怎么知道现在要调度那些任务。【分布式任务调度】(四)XXL-JOB的任务调度执行流程及实现原理_xxl-job怎么知道现在要调度那些任务_挥之以墨的博客-CSDN博客。

2023-07-06 17:06:59 78

原创 Eureka和Nacos的区别

eureka只支持APnacos支持CP和AP两种nacos是根据配置识别CP或AP模式,如果注册Nacos的client节点注册时是ephemeral=true即为临时节点,那么Naocs集群对这个client节点效果就是AP,反之则是CP,即不是临时节点#false为永久实例,true表示临时实例开启,注册为临时实例。

2023-07-03 11:18:05 1010

转载 Seata json decode exception, Cannot construct instance of `java.time.LocalDateTime

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `java.time.LocalDateTime` (no Creators, like default constructor, exist): cannot deserialize from Object val 秃秃爱健身 华为云开发者联盟。

2023-07-03 10:58:11 70

原创 Seata XA模式和AT模式的区别

总的来说,XA模式是通过数据库的两阶段提交协议来实现分布式事务,而AT模式则是通过应用程序层面的日志来实现分布式事务。在AT模式中,Seata通过,在每个参与分布式事务的服务中,截取并记录每个本地事务的执行情况,在事务提交阶段,通过回放本地事务日志的方式来判断是否提交或回滚。在XA模式中,Seata通过协调器(TC)来协调各个分支事务的提交或回滚,保证全局事务的一致性。全局事务由事务协调器(TC)统一管理,分支事务由不同的资源管理器(RM)进行管理。

2023-07-03 10:30:44 961

原创 MySQL如何给大表加索引

步骤3之后,新表改为原表名后(tb)开始承担业务,步骤3到结束之前这段时间的新产生的数据都是存在新表中的,但是如果有业务对老数据进行修改或删除操作,那将无法实现,所以步骤3到结束这段时间可能会产生数据(更新和删除)丢失。pt-online-schema-change 方案利用三个触发器(DELETE\UPDATE\INSERT触发器)解决了“影子策略”存在的问题,让新老表数据同步时发生的数据变动也能得到同步。

2023-06-26 14:46:31 1373

原创 跨库分页查询

随着数据量的增大,数据库需要进行水平切分,例如通过业务主键id取模,使得数据均匀分布到不同的库中,随之而来的问题就出现跨库如何进行分页查询。举例当在单库单表进行查询的时候,是拥有全局视野的,当进行了水平切分后,就失去了全局视野,数据按照time局部排序之后,不管哪个分库的第3页数据,都不一定是全局排序的第3页数据。

2023-06-26 11:17:15 440

原创 MySQL InnoDB缓存池

磁盘读写,并不是按需读取,而是按页读取,一次至少读一页数据(一般是4K),如果未来要读取的数据就在页中,就能够省去后续的磁盘IO,提高效率。

2023-06-01 15:21:36 519

原创 动态规划-完全背包

有N件物品和⼀个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品都有⽆限个(也就是可以放⼊背包多次),求解将哪些物品装⼊背包⾥物品价值总和最⼤。完全背包和01背包问题唯⼀不同的地⽅就是,每种物品有⽆限件。

2023-02-21 14:47:06 83 1

原创 动态规划-01背包

有N件物品和⼀个最多能被重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品只能⽤⼀次,求解将哪些物品装⼊背包⾥物品价值总和最⼤。

2023-02-21 09:46:20 292

原创 算法-动态规划

动态规划中每⼀个状态⼀定是由上⼀个状态推导出来的。

2023-02-20 11:34:42 121

原创 算法-二叉树

⼴度优先遍历的实现⼀般使⽤队列来实现,这也是队列先进先出的特点所决定的,因为需要先进先出的结构,才能⼀层⼀层的来遍历⼆叉树。经常会使⽤递归的⽅式来实现深度优先遍历,也就是实现前中后序遍历,使⽤递归是⽐较⽅便的。这⾥前中后,其实指的就是中间节点的遍历顺序,只要记住前中后序指的就是中间节。看如下中间节点的顺序,就可以发现,中间节点的顺序就是所谓的遍历⽅式。

2023-02-20 10:54:50 321

原创 算法-回溯-排列问题

⾸先排列是有序的,也就是说[1,2] 和[2,1] 是两个集合,这和之前分析的⼦集以及组合所不。可以看出元素1在[1,2]中已经使⽤过了,但是在[2,1]中还要在使⽤⼀次1,所以处理排列问题。就不⽤使⽤startIndex了。给定一个可包含重复数字的序列。给定一个不含重复数字的数组。返回所有不重复的全排列。

2023-02-16 14:16:44 98

原创 算法-回溯-子集问题

返回该数组所有可能的子集(幂集)。

2023-02-16 14:04:35 95

原创 算法-回溯-切割问题

是正着读和反着读都一样的字符串。分割成一些子串,使每个子串都是。所有可能的分割方案。

2023-02-16 11:24:08 68

原创 算法-回溯-组合问题

该列表不能包含相同的组合两次,组合可以以任何顺序返回。如果至少一个数字的被选数量不同,则两种组合是不同的。中的每个数字在每个组合中只能使用。,并以列表形式返回。中可以使数字和为目标数。对于给定的输入,保证和为。给定一个候选人编号的集合。解集不能包含重复的组合。所有可能的有效组合的列表。中所有可以使数字和为。

2023-02-16 11:10:26 370

原创 算法-回溯

回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案,如果想让回溯法⾼效⼀些,可以加⼀些剪枝的操作,但也改不了回溯法就是穷举的本质。

2023-02-16 09:44:16 72

原创 Zookeeper

zookeeper是一个分布式协调服务。所谓分布式协调主要是来解决分布式系统中多个进程之间的同步限制,防止出现脏读,例如我们常说的分布式锁。zookeeper中的数据是存储在内存当中的,因此它的效率十分高效。它内部的存储方式十分类似于文件存储结构,采用了分层存储结构。但是它和文件存储结构的区别是,它的各个节点中是允许存储数据的,需要注意的是zk的每个节点存储数据不能超过1M。

2023-02-13 11:23:46 752

原创 Dubbo使用Redis作为注册中心

【代码】Dubbo使用Redis作为注册中心。

2023-02-08 15:12:54 651

原创 ShardingSphere-JDBC

从架构上看ShardingSphere-JDBC更符合分布式架构的设计,直连数据库,没有中间应用,理论性能是最高的(实际性能需要结合具体的代码实现,理论性能可以理解为上限,通过不断优化代码实现,逐渐接近理论性能)。同时缺点也很明显,由于作为组件存在,需要集成在应用内,意味着作为使用方,必须要集成到代码里,使得开发成本相对较高;它使用客户端直连数据库,以 jar 包形式提供服务,无需额外部署和依赖,可理解为增强版的 JDBC 驱动,完全兼容 JDBC 和各种 ORM 框架。

2023-02-08 14:44:10 228

原创 时间轮算法

案例如图,从图中可以看到此时指针指向的是第2个槽(下标1),一共有八个槽0~7,假设槽的时间单位为 1 秒,现在要加入一个延时 4 秒的任务,计算方式就是 4 % 8 + 2 = 6,即放在槽位为 6,下标为 5 的那个槽中,就是拼到槽的双向链表的尾部。而多层次时间轮还会有降级的操作,假设一个任务延迟500秒执行,那么刚开始加进来肯定是放在第三层的,当时间过了 436 秒后,此时还需要 64 秒就会触发任务的执行,而此时相对而言它就是个延迟64秒后的任务,因此它会被降低放在第二层中,第一层还放不下它。

2022-08-25 14:43:47 300

原创 记一次Mysql并发死锁

可见Transaction1与Transaction2 同时锁住了同一部分,而且是locak_mode X rec bur not gap Record lock。根据show engine innodb status查询。多个终端session模拟并发事务。

2022-08-23 14:42:23 476

原创 分库分表如何解决跨库查询问题

字段冗余能带来便利,是一种“空间换时间”的体现。最复杂的还是数据一致性问题,这点很难保证,可以借助数据库中的触发器或者在业务代码层面去保证。定时A库中的tab_a表和B库中tbl_b有关联,可以定时将指定的表做同步。当然,同步本来会对数据库带来一定的影响,需要性能影响和数据时效性中取得一个平衡。“订单表”中保存“卖家Id”的同时,将卖家的“Name”字段也冗余,这样查询订单详情的时候就不需要再去查询“卖家用户表”。这是一种典型的反范式设计,在互联网行业中比较常见,通常是为了性能来避免join查询。...

2022-08-12 16:58:20 576

原创 设计模式-简单工厂、工厂方法模式、抽象工厂模式

简单工厂模式不是23种设计模式里的一种,简而言之,就是有一个专门生产某个产品的类。比如下图中的鼠标工厂,专业生产鼠标,给参数0,生产戴尔鼠标,给参数1,生产惠普鼠标。注意这个参数, 我必须根据入参去确定返回。...............

2022-08-11 10:34:22 147

原创 RocketMQ底层原理之存储设计

RocketMQ消息的存储是由ConsumeQueue和CommitLog配合完成 的,消息真正的物理存储文件是CommitLog,ConsumeQueue是消息的逻辑队列,类似数据库的索引文件,存储的是指向物理存储的地址。每个Topic下的每个Message Queue都有一个对应的ConsumeQueue文件。comsumequeue:存储消息在commit log的索引。commit log:存储消息的元数据。...

2022-08-09 14:41:49 264

原创 贫血模型与充血模型

架构设计是一项持续性演进性的工作,不是一成不变的。架构的选择并没有好坏只有适合,每一种都有自己的使用场景。如何选择需要自身理论支持,保持相对方向性统一,并持续审视是否符合预期目标。...

2022-08-08 10:34:26 301

空空如也

空空如也

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

TA关注的人

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