自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 多路IO复用-----epoll和poll和select的区别

666

2025-03-30 17:36:29 657

原创 CPU飙高系统反应慢怎么排查?

通过以上步骤,逐步排查和分析,可以找出导致 CPU 飙高、系统反应慢的原因,并进行相应的优化和修复。

2025-03-30 14:45:47 636

原创 悲观锁与乐观锁详解+synchronized vs ReentrantLock

聊一聊锁机制

2025-03-26 22:26:49 865

原创 “Spring事务”管理---全面解析与实战代码

一文让你了解spring事务

2025-03-26 22:04:22 858

原创 关于分布式事务

由协调者和参与者组成,分为准备阶段和提交阶段。如果所有参与者都准备好,协调者发送提交请求,否则发送回滚请求。:将事务分为三个操作,Try 阶段尝试执行事务,Confirm 阶段确认执行,Cancel 阶段取消执行。例如,在业务操作前发送消息到消息队列,消费者消费消息后执行相应的业务操作,如果执行失败则进行重试。第一阶段(准备阶段):协调者询问所有参与者是否可以提交事务,参与者锁定资源并回复“同意”或“拒绝”。:在 2PC 的基础上增加了一个预准备阶段,减少了参与者的阻塞时间,提高了系统的可用性。

2025-03-11 10:47:25 262

原创 Redis总结之高可用篇(集群)

Redis集群是Redis的分布式解决方案,旨在通过数据分片和主从复制实现高可用性、水平扩展和负载均衡。它允许将数据分散到多个节点中,每个节点负责一部分数据,同时支持自动故障转移和客户端重定向。Redis集群的核心特性数据分片Redis集群将数据分散到16384个槽(slot)中,每个节点负责一部分槽。数据通过CRC16算法计算键的哈希值,然后对16384取模,决定数据存储在哪个槽中。高可用性每个分片(主节点)都有对应的从节点,主节点故障时从节点会自动接管。

2025-03-10 12:00:00 548

原创 redis缓存篇知识点总结

redis-缓存篇

2025-01-14 18:09:21 1253

原创 正向代理和反向代理的区别+场景应用

正向代理是代理客户端,隐藏客户端身份;反向代理是代理服务器,隐藏服务器身份。正向代理用于突破访问限制、提高访问速度、隐藏客户端IP;反向代理用于负载均衡、隐藏服务器架构、SSL加速等场景。

2024-02-01 10:55:28 544

原创 Redis---数据库和缓存如何保证一致性?

删除一个数据,相比更新一个数据更加轻量级,出问题的概率更小。在实际业务中,缓存的数据可能不是直接来自数据库表,也许来自多张底层数据表的聚合。比如商品详情信息,在底层可能会关联商品表、价格表、库存表等,如果更新了一个价格字段,那么就要更新整个数据库,还要关联的去查询和汇总各个周边业务系统的数据,这个操作会非常耗时。从另外一个角度,不是所有的缓存数据都是频繁访问的,更新后的缓存可能会长时间不被访问,所以说,从计算资源和整体性能的考虑,更新的时候删除缓存,等到下次查询命中再填充缓存,是一个更好的方案。

2024-01-23 19:30:00 905

原创 redis缓存篇---大总结(场景+解决方法+具体实现)

用户的数据一般都是存储于数据库,数据库的数据是落在磁盘上的,磁盘的读写速度可以说是计算机里最慢的硬件了,为了避免用户直接访问数据库,会用 Redis 作为缓存层。Redis 是内存数据库,我们可以将数据库的数据缓存在 Redis 里,相当于数据缓存在内存,内存的读写速度比硬盘快好几个数量级,这样大大提高了系统性能引入了缓存层,就会有缓存异常的三个问题,分别是缓存雪崩、缓存击穿、缓存穿透。

2024-01-23 18:45:00 4082

原创 redis的常见数据类型和应用场景(非八股)------大总结(学了要会用-------教你如何使用)

*应用场景:**存储不重复的元素,适用于需要确保元素唯一性的场景:模拟一个社交网络系统中用户的关注列表,使用集合存储用户关注的其他用户。将每个用户的信息存储为一个 Hash,其中 Hash 的键是用户ID,字段是用户属性(如用户名、邮箱、年龄等),值是对应的属性值。String(字符串),Hash(哈希),List(列表),Set(集合)、Zset(有序集合)。**应用场景:**存储带有分数的元素,适用于需要按照分数排序的场景:模拟一个在线排行榜。应用场景:存储一系列有序的元素,适用于队列、栈等场景。

2024-01-23 18:00:00 645

原创 深度解析:技术问题的独立见解----1、类加载(非八股)

勿在浮沙筑高台,不为繁华易匠心~

2024-01-15 14:43:31 882

原创 工作记录-------正则表达式---小白也能看懂

这个正则表达式是用来验证中国大陆手机号码格式的,匹配规则是以1开头,并且符合国内手机号码的第二位规定,接着后面是8个数字。这些是正则表达式中常用的一些基本元素,结合它们可以构建复杂的模式来匹配各种文本。: 方括号内的 ^ 放在开头时,表示取反,匹配除了方括号内字符之外的任何字符。: 分别匹配数字、字母数字下划线(单词字符)、空白字符(空格、制表符等)。: 这些是对应小写字符的反义,匹配非数字、非单词字符、非空白字符。: 管道符表示“或”的意思,匹配两个模式之一。这些是锚定字符,分别匹配字符串的开头和结尾。

2024-01-10 10:58:56 434

原创 工作记录----CountDownLatch(特别好用的一个工具类)

的作用是允许一个或多个线程等待其他线程完成操作,通过一个初始值的计数器实现。主要原理是调用await()让一个线程等待,直到计数器变为零;而其他线程调用递减计数器。使用时需要注意正确递减计数器、线程释放问题和线程安全性。设计时要谨慎考虑,确保各个线程能够正常完成任务以及等待线程能够适时释放。

2023-12-26 22:30:00 1146

原创 工作记录---项目开发的过程中注意哪些防止网络攻击的手段?

我们使用加密技术,比如SSL/TLS协议,来加密敏感数据,确保数据在传输过程中不被窃取或篡改。实现方式包括使用加密协议(如SSL/TLS)来保护数据传输,使用HTTPS协议来加密网站传输的数据,以及对敏感数据使用加密算法(如AES、RSA)进行加密。这包括多因素身份验证、强密码策略和权限管理,确保只有授权的用户能够访问系统,并且只能进行他们被授权的操作。“我们对用户输入进行验证和过滤,防止恶意输入导致的安全漏洞,比如SQL注入和跨站脚本攻击。定期备份数据,确保备份的安全性和有效性。

2023-12-26 20:30:00 425

原创 工作记录---如何设计一个各方面性能较高的数据库

这些措施可以帮助优化美团外卖类似系统的数据库设计,提高数据库的性能、稳定性和安全性,以应对大量用户和高并发的访问。:使用数据库主从复制或分片技术,提高数据库的读取和写入性能,增强系统的可用性和扩展性。:在订单号、用户ID、商家ID、下单时间等字段建立索引,以加速订单查询和统计。:定期进行数据库优化,如索引重建、统计信息更新等,以保持数据库性能的稳定。:存储订单信息,包括订单ID、用户ID、商家ID、下单时间、总金额等。:存储用户信息,包括用户ID、用户名、手机号、地址等。

2023-12-26 15:37:29 1230

原创 工作记录----关于跳表---小白也能看懂--图文并茂---再也不担心看源码看不懂咯~

跳表在创建节点时候,会生成范围为[0-1]的一个随机数,如果这个随机数小于 0.25(相当于概率 25%),那么层数就增加 1 层,然后继续生成下一个随机数,直到随机数的结果大于 0.25 结束,最终确定该节点的层数。在第 i 层中的元素按某个固定的概率 p(通常为 ½ 或 ¼ )出现在第 i + 1层中,产生越高的层数,概率越低。元素层数大于等于 3的概率为 p^2,而元素层数恰好等于 3 的概率为 p^2 * (1 – p)元素层数大于等于 4 的概率为 p^3,而元素层数恰好等于。

2023-12-15 08:00:00 936

原创 工作记录-----TOP K 小顶堆源码---小白也能看懂

在 Java 中使用堆数据结构来维护元素的顺序。当你需要找到数组或数据流中的前 K 个最小或最大的元素时,可以使用小顶堆(PriorityQueue)来解决。会根据元素的优先级将元素放置在正确的位置,并在需要时进行上述索引计算以保持堆的结构。它利用了小顶堆的特性,每次将元素加入堆中,当堆的大小超过 K 时,弹出堆顶元素,最后将堆中的元素放入结果数组中。中,这个二叉树通常是以数组的形式进行存储,数组的第一个元素(索引为 0)是堆顶元素。当添加或删除元素时,会调整堆的结构,将最小(或最大)的元素放置在堆顶。

2023-12-14 20:30:00 412

原创 工作记录-------实现实时排行榜的各种方法---12.14

比如 1 亿个数据里,一半是 0,一半是 1,那么取前 10 名时,可以直接淘汰掉另一半为 0 的数据。采用 分治 的方式 并行计算 每个表的前 10 名(map),都计算好后,再汇总到一起计算最终的前 10 名(reduce)用户表存储了用户信息,以及用户的总积分(实时更新),也就是说总积分榜需要的数据可以直接从这里取到,不需要再去计算。把数据分为多个小组,小组内先分别选出前 N 名小组长,最后再让这些小组长同台竞技,选出最终的前 N 名。由于我们的数据库来记录积分,所以当用户量级很大时,首先要。

2023-12-14 14:29:46 1155

原创 工作记录----工作中各个方法处理检查型异常的常见处理方案----小白也能看懂--12.13

t

2023-12-13 21:00:00 429

原创 工作记录----Lambda表达式和流式操作----小白也能看懂--写代码如何更简洁

流式操作是对集合数据进行操作的一种新方式,它提供了一种更高效、更简洁的方式来处理集合数据。这段代码的效果是将原始列表中的元素转换为大写,并按照字典顺序排序,最后将排序后的结果收集到一个新的列表中。匿名函数是指没有名称的函数,允许开发者在需要函数的地方直接声明函数体,而无需为其分配一个显式的名称。这段代码展示了Java中流式操作(Stream API)的使用,它是对集合数据进行处理的便捷方式。操作用于遍历流中的每个元素,并对每个元素执行指定的操作。这段代码的效果是过滤出长度大于5的元素并将其打印出来。

2023-12-13 20:00:00 392

原创 工作记录----自己写的接口供外部调用前如何自测?---特别详细的步骤---0基础教学--嘻嘻

这里的 全限定接口名 是你要调用的 Dubbo 接口的完整类名,方法名 是接口中定义的方法名,参数类型 和 参数1、参数2 是对应的方法参数和参数类型。这里的 example.com 是你要连接的远程主机名或 IP 地址,23 是 Telnet 默认端口号,可以根据需要更改为你所连接的服务的端口号。3、启用 Telnet 客户端:在弹出的窗口中,找到并勾选 “Telnet 客户端”,然后点击确定。输入 Dubbo 命令:一旦连接成功,你可以输入 Dubbo 的命令来测试 Dubbo 服务。

2023-12-12 19:00:00 871

原创 工作记录----常用注解-----12.11

它可以帮助在类中自动生成一个名为 log 的日志对象,使得在类中可以直接使用这个日志对象进行日志记录具体来说,当你在类上添加 @Slf4j 注解后,在该类中就可以直接使用 log 对象来记录日志,无需手动创建和初始化日志对象,简化了日志的使用。例如:@Slf4j 注解简化了日志对象的创建和使用,它会自动为你生成一个 private static final Logger log = LoggerFactory.getLogger(MyClass.class); 这样的日志对象,允许你在类中直接使用 log

2023-12-11 22:00:00 943

原创 什么是分布式和集群?

网站初期,只需要搭建一个集中式的单体应用就可以了,如果业务量有很大增长,先考虑增加机器,通过集群部署提升能力。把一个大的系统拆分成多个子系统,每个子系统负责自己专注的事情,然后通过网络进行通信和协调,对用户来说,就像访问的是同一台机器一样。是指在多台不同的服务器中部署相同应用或服务模块,构成一个集群,通过负载均衡设备对外提供服务。是指在多台不同的服务器中部署不同的服务模块,通过远程调用协同工作,对外提供服务。通过把一件大的事情,拆分成多个小事情,分别交给不同的人来做。一个集群部署的电子商务应用。

2023-11-21 12:58:46 237

原创 工作记录---为什么双11当天不能申请退款?(有趣~)

所以,一旦有大促的时候,需要有限保证主要功能的可用,至于那些次要的功能就可以被降级掉,即不显示某些模块,或者返回一些默认内容。Sentinel 是阿里中间件团队开源的,面向分布式服务架构的轻量级高可用流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助用户保护服务的稳定性。所以,可以针对这个查询库存的接口做统一的降级。还有一种情况,可能也会人工介入,那就是在大促之前,预估到流量会十分巨大,提早的识别出风险,为了节省资源保证主流程的可用,开发人员可以手动将某个功能降级掉。

2023-11-21 06:00:00 516

原创 工作记录---淘宝双11,亿级流量高并发是怎么抗住?(站在巨人的肩膀上学习,超开心~)--------脚踏实地,持续学习(看完这一篇获益匪浅)

系统中的多个模块在不同服务器上部署,即可称为分布式系统。如Tomcat和数据库分别部署在不同的服务器上,或两个相同功能的Tomcat分别部署在不同服务器上。系统中部分节点失效时,其他节点能够接替它继续提供服务,则可认为系统具有高可用性一个特定领域的软件部署在多台服务器上并作为一个整体提供一类服务,这个整体称为集群。如Zookeeper中的Master和Slave分别部署在多台服务器上,共同组成一个整体提供集中配置服务。

2023-11-20 19:27:18 649

原创 工作记录-------java文件的JVM之旅(学习篇)---好理解

在解析阶段,将类或接口中的符号引用转化为直接引用的过程。如果该类实现了接口,也会对这个接口进行初始化操作,接口的初始化过程和类一样,都会进行静态变量显式赋值及静态代码块执行,同时还会检查接口中的所有静态方法。如果类定义了多个静态变量,JVM会按照代码中声明的顺序进行初始化,并且若发现此过程需要访问到其他未初始化的类,JVM会先完成这些类的初始化。自定义类加载器(Custom ClassLoader):继承自 ClassLoader 类,实现自己的类加载器,主要用于加载一些自定义的类或者修改某些类的字节码。

2023-11-15 23:30:00 481

原创 工作记录-------双 11场景下库存更新 SQL 优化

如果有库存,我们就创建一个订单,商品库存减去 1(为了方便分析,我们只讨论这种比较简单的情况)。首先,我们要知道上面的每一条数据库操作语句,包括最后的 commit 或者 rollback 都要由业务服务向数据库发送网络请求,并且要等待数据库返回语句执行结果(同步)当我们在编写一个事务的时候,加行锁的操作应在不影响业务的情况下,尽可能地靠近 commit 语句,这样单行记录的行锁时间才会更短,TPS 会更高。好的,基于最开始的约定,代码的注释,以及基础知识,我们可以来计算了。

2023-11-14 22:45:00 544

原创 工作记录-------MySql主从同步

通过上述内容,我们了解了Mysql数据库的主从同步,如果你的目标仅是数据库的高并发,那么可以先从 SQL 优化,索引以及 Redis 缓存数据等这些方面来考虑优化,然后再考虑是否采用主从架构的方式。在主从架构的配置中,如果想要采取读写分离的策略,我们可以自己编写程序,也可以通过第三方的中间件来实现。自己编写程序的好处就在于比较自主,我们可以自己判断哪些查询在从库上来执行,针对实时性要求高的需求,我们还可以考虑哪些查询可以在主库上执行。同时程序直接连接数据库,减少了中间件层,可以减少一些性能损耗。

2023-11-14 21:45:00 119

原创 工作记录--(关于接口设计)---每天学习多一点

需要注意的是,如果日志中涉及比较大的JSON富文本,请使用log.isInfoEnable(),在高并发和复杂log信息拼接的情况下,使用这种标准的方法输出log能够省去不小的系统开销。设置合理的超时时间,也是在保护你的接口。比如一个请求率先访问你的上游,而你的上游设置的超时时间是500ms,上游调用你的接口,但你设置的超时是2000ms,这其实就是无效超时时间。举个简单的例子,对于一些运营操作的接口,往往需要记录对应操作的操作日志,记录下是谁在什么时间操作了什么对象,便于追踪“事发现场”。

2023-11-14 20:00:00 279

原创 工作记录--(用HTTPS,为啥能被查出浏览记录?如何解决?)---每天学习多一点

这是因为,当多个网站托管在一台服务器上并共享一个IP地址,且每个网站都有自己的SSL证书时,那就没法通过IP地址判断客户端是想和哪个网站建立TLS连接,此时就需要域名信息辅助判断。打个比方,快递员送货上门时,如果快递单只有收货的小区地址(IP地址),没有具体的门牌号(域名),那就没法将快递送到正确的客户手上(与正确的网站建立TLS连接)。TLS是一种安全协议。虽然HTTPS连接本身是加密的,但在建立HTTPS的过程中(TLS握手),是有数据明文传输的,其中SNI中包含了服务器的域名信息。

2023-11-13 22:15:00 607

原创 工作记录---(Explain执行计划详解--基于HS)--每天都要保持学习状态和专注的状态啊!!!

Using where Using index:查询的列被索引覆盖,并且where筛选条件是索引列之一但不是索引的前导列,意味着无法直接通过索引查找来查询到符合条件的数据,Using index代表select用到了覆盖索引。NULL:查询的列未被索引覆盖,并且where筛选条件是索引的前导列,意味着用到了索引,但是部分字段未被索引覆盖,必须通过“回表”来实现,不是纯粹地用到了索引,也不是完全没用到索引。这一列显示了在key列记录的索引中,表查找值所用到的列或常量,常见的有:const(常量),字段名。

2023-11-07 11:52:13 81

原创 工作记录--(海量数据如何判重?)--每天都要保持学习状态和专注的状态啊!!!

沉淀,专注,记录时间

2023-11-03 19:00:00 290

原创 工作日常的点点滴滴记录(Spring Boot的核心注解)------慢慢积累,厚积薄发(要学的东西还好多,加油!))(知识和实践的结合)

用来代替配置文件中的component-scan配置,开启组件扫描,自动扫描包路径下的@Component注解进行注册bean实例放到context(容器)中。它其实是@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan这三个注解的组合。**@SpringBootApplication:**这是Spring Boot最核心的注解,用于开启Spring Boot的各项能力。这个注解用来定义条件,当满足某个条件时,才可开启配置。

2023-10-30 19:05:06 610

原创 工作日常的点点滴滴记录(实习过程中遇到的常用注解@RequestMapping)------慢慢积累,厚积薄发(要学的东西还好多,加油!))(知识和实践的结合)

注解

2023-10-30 16:52:11 72

原创 工作日常的点点滴滴记录(代码冲突问题)------慢慢积累,厚积薄发(要学的东西还好多,加油!))(知识和实践的结合)

远程仓库的某个文件内容发生了修改,而本地没有及时进行pull拉取,那么就会导致本地的分支落后。当修改完本地代码再push到远程的时候,就会产生代码冲突。每次使用git,先将远程仓库的代码pull到本地,再在本地进行修改,修改完成后再去push。d) 修改完毕后,点击Apply,出现 push rejected,点击push。本次push成功,远程仓库代码成功修改。a) Commit后push,出现push rejected的提示。点击X或者>>可以将本地代码或者远程代码合并或更改到中间面板。

2023-10-30 16:50:38 146

原创 工作日常的点点滴滴记录(threadlocal知识概括和相关应用场景)------慢慢积累,厚积薄发(要学的东西还好多,加油!))(知识和实践的结合)

每个线程获取到的信息可能都是不一样的,前面执行的方法保存了信息后,后续方法可以通过ThreadLocal 直接获取到,避免了传参,类似于全局变量的概念。比如说我们是一个用户系统,那么当一个请求进来的时候,一个线程会负责执行这个请求,然后这个请求就会依次调用service-1()、service-2()、service-3()、service-4(),这4个方法可能是分布在不同的类中的。这么多对象的创建是有开销的,并且在使用完之后的销毁同样是有开销的,同时存在在内存中也是一种内存的浪费。

2023-10-26 16:57:41 91

原创 工作日常的点点滴滴记录(Java基础知识之Java锁)------好记性不如烂笔头--慢慢积累,厚积薄发

Java锁是一种多线程同步的机制,用于控制多个线程对共享资源的并发访问。Java锁的作用是保证线程间的互斥性,即同一时刻只有一个线程可以访问共享资源,从而避免多线程间的竞态条件和其他并发问题。Java锁可以分为两大类:隐式锁(Implicit Locks)和显式锁(Explicit Locks)。隐式锁,称为内置锁或synchronized锁;通过在方法或代码块中使用synchronized关键字,Java编译器和JVM会自动在对象或类上添加锁,以实现对共享资源的同步访问。

2023-10-23 22:35:20 191

原创 工作日常的点点滴滴记录(Java应用内存泄漏相关开发规范+JVM参数调优)------好记性不如烂笔头--慢慢积累,厚积薄发

行动+执行力

2023-10-23 12:49:30 118

原创 实际开发中常用的设计模式--------模板方法模式(知识跟业务场景结合)-----小白也能看懂(通俗易懂版本)

模板方法模式

2023-07-07 08:30:00 152

空空如也

空空如也

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

TA关注的人

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