- 博客(100)
- 收藏
- 关注
原创 Web 消息实时推送
推送的场景比较多,比如有人关注我的公众号,这时我就会收到一条推送消息,以此来吸引我点击打开应用。消息推送通常是指网站的运营工作等人员,通过某种工具对用户当前网页或移动设备 APP 进行的主动消息推送。消息推送一般又分为 Web 端消息推送和移动端消息推送。移动端消息推送示例:Web 端消息推送示例:在具体实现之前,咱们再来分析一下前边的需求,其实功能很简单,只要触发某个事件(主动分享了资源或者后台主动推送消息),Web 页面的通知小红点就会实时的+1就可以了。
2025-02-22 17:34:42
1039
原创 Java 定时任务
单机定时任务的常见解决方案有TimerDelayQueue、Spring Task 和时间轮,其中最常用也是比较推荐使用的是时间轮。另外,这几种单机定时任务解决方案同样可以实现延时任务。Redis 和 MQ 虽然可以实现分布式定时任务,但这两者本身不是专门用来做分布式定时任务的,它们并不提供较为完整和强大的分布式定时任务的功能。而且,两者不太适合执行周期性的定时任务,因为它们只能保证消息被消费一次,而不能保证消息被消费多次。因此,它们更适合执行一次性的延时任务,例如订单取消、红包撤回。
2025-02-21 20:57:05
794
原创 消息队列 基础知识
我们可以把消息队列看作是一个存放消息的容器,当我们需要使用消息的时候,直接从容器中取出消息供自己使用即可。由于队列 Queue 是一种先进先出的数据结构,所以消费消息时也是按照顺序来消费的参与消息传递的双方称为生产者和消费者,生产者负责发送消息,消费者负责处理消息操作系统中的进程通信的一种很重要的方式就是消息队列。我们这里提到的消息队列稍微有点区别,更多指的是各个服务以及系统内部各个组件/模块之前的通信,属于一种中间件。
2025-02-19 20:53:57
806
原创 Spring Boot “约定大于配置”
约定大于配置”是一种简化开发的设计理念。简单来说,就是框架默认提供了常见的配置和行为,开发者只需要按照约定来编写代码,避免了繁琐的配置,只在需要时进行定制和调整。这种理念在Spring Boot中被充分体现,开发者可以专注于业务逻辑的开发,而不必在配置文件中花费大量精力在Spring Boot中,这一理念通过自动配置(Auto Configuration)和默认约定得到了广泛应用,极大地简化了应用的搭建过程。
2025-02-14 20:34:12
1368
原创 Redis
的确,一般情况下,我们也是不建议使用多级缓存的,这会增加维护负担(比如你需要保证一级缓存和二级缓存的数据一致性),并且,实际带来的提升效果对于绝大部分项目来说其实并不是很大。不要把缓存想的太高大上,虽然,它的 确对系统的性能提升的性价比非常高。引入缓存意味着系统需要一个单独的缓存服务,这是需要花费相应的成 本的,并且这个成本还是很贵的,毕竟耗费的是宝贵的内存。本地缓存位于应用内部,其最大的优点是应用存在于同一个进程内部,请求本地缓存的速度非常快,不 存在额外的网络开销。器上,也是使用的同一份缓存。
2025-02-06 23:43:55
780
原创 Java实战经验分享
为了解决这个问题,我们可以通过设置不同的缓存过期时间来避免多个缓存同时过期,此外,还可以使用加锁机制,保证只有一个请求能查询数据库,其他请求则直接等待缓存更新。在我们的项目中,Seata解决了微服务之间的分布式事务问题,尤其是在大规模并发场景下,能够有效减少事务回滚和数据不一致的风险。我们通过多个策略来确保接口的幂等性:例如,在数据库中设置唯一约束来避免重复插入,或者在操作时生成唯一的请求ID,确保相同的请求不会被执行多次。主库负责写操作,从库负责读操作,这样可以有效分担主库的读压力,提升系统的并发能力。
2025-02-06 23:30:01
1397
原创 Java面试场景题分享
日志系统必须确保日志不会丢失,面试官会问:“你会如何处理日志数据传输过程中的网络问题或者机器宕机问题?“你会如何设计微服务的扩展性?面试官首先会想了解你如何定位问题的根源:“你会如何排查是数据库查询慢,还是数据存储有问题?假设你的任务是设计一个分布式日志收集系统,系统需要在不同的机器之间传输日志数据,如何确保数据的可靠性和一致性。假设你正在设计一个电商平台的微服务架构,如何处理各个微服务之间的通信,并且保证数据的一致性?假设你的任务是优化一个数据库查询性能,系统中的查询速度非常慢,你会如何诊断和优化?
2025-02-06 23:16:40
476
原创 Redis持久化-秒杀系统设计
在构建高性能、高可用的系统时,Redis 作为缓存和消息队列的角色越来越重要。在一些场景下,我们还需要将 Redis 的数据进行持久化,以确保数据的安全性和恢复能力。除此之外,秒杀系统也越来越成为电商、抢购等平台的核心功能之一。本文将详细探讨 Redis 的持久化策略及秒杀系统设计的核心要素,帮助你更好地理解这两个常见的技术难题。
2025-02-06 23:07:47
628
原创 MySQL实战-解决方案
在主从复制架构中,主库执行写操作后,将更新事件写入 Binlog,从库通过 I/O 线程将 Binlog 数据同步到本地的 Relay Log,再由 SQL 线程解析并执行,从而保持数据一致性。然而,由于网络延迟、磁盘 IO 和从库自身处理能力等原因,主从之间可能存在延迟。实际生产环境中,主从延迟往往是无法完全避免的,关键在于如何在系统设计中容忍延迟,并通过合理的业务逻辑降低延迟对用户体验的影响。MySQL 的二进制日志(binlog)是记录数据库写操作的重要日志,用于数据恢复、主从同步等场景。
2025-02-06 23:03:13
717
原创 MongoDB
插件式的存储引擎架构可以实现 Server 层和存储引擎层的解耦,可以支持多种存储引擎,如 MySQL 既可以支持 B-Tree 结构的 InnoDB 存储引擎,还可以支持 LSM 结构的 RocksDB 存储引擎。MongoDB 中的记录就是一个 BSON 文档,它是由键值对组成的数据结构,类似于 JSON 对象,是 MongoDB 中的基本数据单元。的简称,是 JSON 文档的二进制表示,支持将文档和数组嵌入到其他文档和数组中,还包含允许表示不属于 JSON 规范的数据类型的扩展。
2025-01-16 20:44:18
591
原创 JWT 身份认证优缺点
JWT 其中一个很重要的优势是无状态,但实际上,我们想要在实际项目中合理使用 JWT 做认证登录的话,也还是需要保存 JWT 信息。JWT 也不是银弹,也有很多缺陷,具体是选择 JWT 还是 Session 方案还是要看项目的具体需求。万万不可尬吹 JWT,而看不起其他身份认证方案。另外,不用 JWT 直接使用普通的 Token(随机生成的 ID,不包含具体的信息) 结合 Redis 来做身份认证也是可以的。
2025-01-15 20:37:35
601
原创 JWT 基础概念详解
JWT (JSON Web Token) 是目前最流行的跨域认证解决方案,是一种基于 Token 的认证授权机制。从 JWT 的全称可以看出,JWT 本身也是 Token,一种规范化之后的 JSON 结构的 Token。JWT 自身包含了身份验证所需要的所有信息,因此,我们的服务器不需要存储 Session 信息。这显然增加了系统的可用性和伸缩性,大大减轻了服务端的压力。可以看出,JWT 更符合设计 RESTful API 时的「Stateless(无状态)」原则。
2025-01-14 20:31:52
952
原创 微服务限流策略
针对软件系统来说,限流就是对请求的速率进行限制,避免瞬时的大量请求击垮软件系统。毕竟,软件系统的处理能力是有限的。如果说超过了其处理能力的范围,软件系统可能直接就挂掉了。限流可能会导致用户的请求无法被正确处理或者无法立即被处理,不过,这往往也是权衡了软件系统的稳定性之后得到的最优解。现实生活中,处处都有限流的实际应用,就比如排队买票是为了避免大量用户涌入购票而导致售票员无法处理。
2025-01-13 20:48:50
571
原创 负载均衡原理及算法
负载均衡指的是将用户请求分摊到不同的服务器上处理,以提高系统整体的并发处理能力以及可靠性。负载均衡服务可以有由专门的软件或者硬件来完成,一般情况下,硬件的性能更好,软件的价格更便宜(后文会详细介绍到)下负载均衡是一种比较常用且实施起来较为简单的提高系统并发能力和可靠性的手段,不论是单体架构的系统还是微服务架构的系统几乎都会用到。
2025-01-11 16:59:15
1804
原创 Redis 3 种特殊数据类型
根据官网介绍:Bitmap 不是 Redis 中的实际数据类型,而是在 String 类型上定义的一组面向位的操作,将其视为位向量。由于字符串是二进制安全的块,且最大长度为 512 MB,它们适合用于设置最多 2^32 个不同的位。Bitmap 存储的是连续的二进制数字(0 和 1),通过 Bitmap, 只需要一个 bit 位来表示某个元素对应的值或者状态,key 就是对应元素本身。我们知道 8 个 bit 可以组成一个 byte,所以 Bitmap 本身会极大的节省储存空间。
2025-01-10 20:53:37
1056
原创 JWT 基础概念
JWT (JSON Web Token) 是目前最流行的跨域认证解决方案,是一种基于 Token 的认证授权机制。从 JWT 的全称可以看出,JWT 本身也是 Token,一种规范化之后的 JSON 结构的 Token。JWT 自身包含了身份验证所需要的所有信息,因此,我们的服务器不需要存储 Session 信息。这显然增加了系统的可用性和伸缩性,大大减轻了服务端的压力。可以看出,JWT 更符合设计 RESTful API 时的「Stateless(无状态)」原则。
2025-01-09 20:43:35
790
原创 SSO单点登录
SSO 英文全称 Single Sign On,单点登录。SSO 是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。例如你登录网易账号中心(网易账号安全中心)之后访问以下站点都是登录状态。网易直播网易博客网易花田网易考拉网易 Lofter。
2025-01-08 18:44:59
652
原创 Redis常见的阻塞原因
Swap 直译过来是交换的意思,Linux 中的 Swap 常被称为内存交换或者交换分区。类似于 Windows 中的虚拟内存,就是当内存不足的时候,把一部分硬盘空间虚拟成内存使用,从而解决内存容量不足的情况。因此,Swap 分区的作用就是牺牲硬盘,增加内存,解决 VPS 内存不够用或者爆满的问题。Swap 对于 Redis 来说是非常致命的,Redis 保证高性能的一个重要前提是所有的数据在内存中。
2025-01-07 18:52:46
682
原创 Redis内存碎片
你可以将内存碎片简单地理解为那些不可用的空闲内存。举个例子:操作系统为你分配了 32 字节的连续内存空间,而你存储数据实际只需要使用 24 字节内存空间,那这多余出来的 8 字节内存空间如果后续没办法再被分配存储其他数据的话,就可以被称为内存碎片Redis 内存碎片虽然不会影响 Redis 性能,但是会增加内存消耗。
2025-01-06 20:13:15
801
原创 Redis三种常用的缓存读写策略
看到很多小伙伴简历上写了“”,但是被我问到“”的时候却一脸懵逼在我看来,造成这个问题的原因是我们在学习 Redis 的时候,可能只是简单写了一些 Demo,并没有去关注缓存的读写策略,或者说压根不知道这回事。但是,搞懂 3 种常见的缓存读写策略对于实际工作中使用缓存以及面试中被问到缓存都是非常有帮助的!
2025-01-04 16:12:28
907
1
原创 十大经典排序算法
插入排序希尔排序选择排序冒泡排序归并排序快速排序堆排序基数排序等,本文只讲解内部排序算法。排序算法时间复杂度(平均)时间复杂度(最差)时间复杂度(最好)空间复杂度排序方式稳定性冒泡排序O(n^2)O(n^2)O(n)O(1)内部排序稳定选择排序O(n^2)O(n^2)O(n^2)O(1)内部排序不稳定插入排序O(n^2)O(n^2)O(n)O(1)内部排序稳定希尔排序O(nlogn)O(n^2)O(nlogn)O(1)内部排序不稳定。
2025-01-03 20:31:56
735
原创 Redis缓存雪崩、缓存击穿、缓存穿透
2)缓存中没有数据,第1个进入的线程,获取锁并从数据库去取数据,没释放锁之前,其他并行进入的线程会等待100ms,再重新去缓存取数据。由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。前台请求,后台先从缓存中取数据,取到直接返回结果,取不到时从数据库中取,数据库取到更新缓存,并返回结果,数据库也没取到,那直接返回空结果。从缓存取不到的数据,在数据库中也没有取到,这时也可以将key-value对写为。
2025-01-02 20:38:14
545
原创 常见的网络攻击手段(安全)
攻击中间人攻击英文名叫 Man-in-the-MiddleAttack,简称「MITM 攻击」。指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方 直接对话,但事实上整个会话都被攻击者完全控制。我们画一张图:从这张图可以看到,中间人其实就是攻击者。通过这种原理,有很多实现的用途,比如说,你在手机上浏览不健康网站的时候,手机就会提示你,此网站可能含有病毒,是否继续访问还是做其他的操作等等。目前比较常用的加密算法有消息摘要算法和安全散列算法(SHA。
2024-12-30 20:29:22
931
原创 OSI 七层模型
应用层协议HTTP(Hypertext Transfer Protocol,超文本传输协议)SMTP(Simple Mail Transfer Protocol,简单邮件发送协议)POP3/IMAP(邮件接收协议)FTP(File Transfer Protocol,文件传输协议)Telnet(远程登陆协议)SSH(Secure Shell Protocol,安全的网络传输协议)RTP(Real-time Transport Protocol,实时传输协议)
2024-12-28 17:10:06
836
原创 TCP 三次握手和四次挥手(传输层)
半连接队列(也称 SYN Queue):当服务端收到客户端的 SYN 请求时,此时双方还没有完全建立连接,它会把半连接状态的连接放在半连接队列。全连接队列(也称 Accept Queue):当服务端收到客户端对 ACK 响应时,意味着三次握手成功完成,服务端会将该连接从半连接队列移动到全连接队列。如果未收到客户端的 ACK 响应,会进行重传,重传的等待时间通常是指数增长的。如果重传次数超过系统规定的最大重传次数,系统将从半连接队列中删除该连接信息。
2024-12-13 20:17:52
1081
原创 常见的网络攻击手段
攻击中间人攻击英文名叫 Man-in-the-MiddleAttack,简称「MITM 攻击」。指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方 直接对话,但事实上整个会话都被攻击者完全控制。我们画一张图:从这张图可以看到,中间人其实就是攻击者。通过这种原理,有很多实现的用途,比如说,你在手机上浏览不健康网站的时候,手机就会提示你,此网站可能含有病毒,是否继续访问还是做其他的操作等等。目前比较常用的加密算法有消息摘要算法和安全散列算法(SHA。
2024-12-12 20:32:53
1439
原创 计算机网络知识扩充
结点 (node):网络中的结点可以是计算机,集线器,交换机或路由器等。链路(link ): 从一个结点到另一个结点的一段物理线路。中间没有任何其他交点。主机(host):连接在因特网上的计算机。:因特网服务提供者(提供商):互联网交换点 IXP 的主要作用就是允许两个网络直接相连并交换分组,而不需要再通过第三个网络来转发分组:意思是“请求评议”,包含了关于 Internet 几乎所有的重要的文字资料。广域网 WAN(Wide Area Network):任务是通过长距离运送主机发送的数据。
2024-12-11 20:29:47
990
原创 字符集详解
每种字符集都有自己的字符编码规则,常用的字符集编码规则有 ASCII 编码、 GB2312 编码、GBK 编码、GB18030 编码、Big5 编码、UTF-8 编码、UTF-16 编码等。级别的字符集是 MySQL 服务器的全局设置,它不仅会作为创建或修改数据库时的默认字符集(如果没有指定其他字符集),还会影响到客户端和服务器之间的连接字符集,具体可以查看。字符集的种类较多,每个字符集可以表示的字符范围通常不同,就比如说有些字符集是无法表示汉字的。因此,很多国家都捣鼓了一个适合自己国家语言的字符集。
2024-12-10 20:55:11
709
原创 数据库基础知识总结
数据库: 数据库(DataBase 简称 DB)就是信息的集合或者说数据库是由数据库管理系统管理的数据的集合数据库管理系统: 数据库管理系统(Database Management System 简称 DBMS)是一种操纵和管理数据库的大型软件,通常用于建立、使用和维护数据库数据库系统: 数据库系统(Data Base System,简称 DBS)通常由软件、数据库和数据管理员(DBA)组成数据库管理员。
2024-12-09 20:34:17
636
原创 线性数据结构
链表(LinkedList)虽然是一种线性表,但是并不会按线性的顺序存储数据,使用的不是连续的内存空间来存储数据链表的插入和删除操作的复杂度为 O(1) ,只需要知道目标位置元素的上一个元素即可。但是,在查找一个节点或者访问特定位置的节点的时候复杂度为 O(n)使用链表结构可以克服数组需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但链表不会节省空间,相比于数组会占用更多的空间,因为链表中每个节点存放的还有指向其他节点的指针。
2024-12-06 18:45:56
873
原创 布隆过滤器
首先,我们需要了解布隆过滤器的概念布隆过滤器(Bloom Filter,BF)是一个叫做 Bloom 的老哥于 1970 年提出的。我们可以把它看作由二进制向量(或者说位数组)和一系列随机映射函数(哈希函数)两部分组成的数据结构。相比于我们平时常用的 List、Map、Set 等数据结构,它占用空间更少并且效率更高,但是缺点是其返回的结果是概率性的,而不是非常准确的。理论情况下添加到集合中的元素越多,误报的可能性就越大。并且,存放在布隆过滤器的数据不容易删除。
2024-12-05 19:30:30
1049
原创 计算机网络常见面试题总结(上)
WebSocket 是一种基于 TCP 连接的全双工通信协议,即客户端和服务器可以同时发送和接收数据。WebSocket 协议在 2008 年诞生,2011 年成为国际标准,几乎所有主流较新版本的浏览器都支持该协议。不过,WebSocket 不只能在基于浏览器的应用程序中使用,很多编程语言、框架和服务器都提供了 WebSocket 支持。WebSocket 协议本质上是应用层的协议,用于弥补 HTTP 协议在持久通信能力上的不足。
2024-11-29 18:37:18
1408
原创 Shell 编程基础知识
简单来说“Shell 编程就是对一堆 Linux 命令的逻辑化处理”W3Cschool 上的一篇文章是这样介绍 Shell 的,如下图所示。Shell 编程中一般分为三种变量:仅在当前 Shell 实例中有效,其他 Shell 启动的程序不能访问局部变量。Linux 已定义的环境变量PATH, HOME等..., 这类变量我们可以直接使用),使用env命令可以查看所有的环境变量,而 set 命令既可以查看环境变量也可以查看自定义变量。Shell 变量。
2024-11-28 19:56:30
788
原创 初识Linux
类 Unix 系统:Linux 是一种自由、开放源码的类似 Unix 的操作系统Linux 本质是指 Linux 内核:严格来讲,Linux 这个词本身只表示 Linux 内核,单独的 Linux 内核并不能成为一个可以正常工作的操作系统。所以,就有了各种 Linux 发行版Linux 之父(林纳斯·本纳第克特·托瓦兹 Linus Benedict Torvalds):一个编程领域的传奇式人物,真大佬!我辈崇拜敬仰之楷模。他是Linux 内核。
2024-11-27 19:27:42
839
原创 计算机基础(下)
内部内存碎片(Internal Memory Fragmentation,简称为内存碎片):已经分配给进程使用但未被使用的内存。导致内部内存碎片的主要原因是,当采用固定比例比如 2 的幂次方进行内存分配时,进程所分配的内存可能会比其实际所需要的大。举个例子,一个进程只需要 65 字节的内存,但为其分配了 128(2^7) 大小的内存,那 63 字节的内存就成为了内部内存碎片外部内存碎片(External Memory Fragmentation,简称为外部碎片)
2024-11-26 19:25:59
689
原创 计算机基础 (上)
操作系统(Operating System,简称 OS)是管理计算机硬件与软件资源的程序,是计算机的基石操作系统本质上是一个运行在计算机上的软件程序 ,主要用于管理计算机硬件和软件资源。举例:运行在你电脑上的所有应用程序都通过操作系统来调用系统内存以及磁盘等等硬件。操作系统存在屏蔽了硬件层的复杂性。操作系统就像是硬件使用的负责人,统筹着各种相关事项操作系统的内核(Kernel)是操作系统的核心部分,它负责系统的内存管理,硬件设备的管理,文件系统的管理以及应用程序的管理。
2024-11-25 14:14:27
1060
原创 Java 8 常用特性 (JDK1.8)
也称 SAM 接口,即 Single Abstract Method interfaces,有且只有一个抽象方法,但可以有多个非抽象方法的接口在 java 8 中专门有一个包放函数式接口。
2024-11-24 22:33:58
1404
原创 JDK监控和故障处理工具
VisualVM(All-in-One Java Troubleshooting Tool)是到目前为止随 JDK 发布的功能最强大的运行监视和故障处理程序,官方在 VisualVM 的软件说明中写上了“All-in-One”的描述字样,预示着他除了运行监视、故障处理外,还提供了很多其他方面的功能,如性能分析(Profiling)。生成线程快照的目的主要是定位线程长时间出现停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等都是导致线程长时间停顿的原因。:输出对应名称的参数的具体值。
2024-11-22 09:41:44
778
原创 JVM的简单了解
JVM 是 Java Virtual Machine 的缩写,它是一个虚构出来的计算机,一种规范。通过在实际的计算机上仿真模拟各类计算机功能实现···好,其实抛开这么专业的句子不说,就知道 JVM 其实就类似于一台小电脑运行在 windows 或者 linux 这些操作系统环境下即可。它直接和操作系统进行交互,与硬件不直接交互,而操作系统可以帮我们完成和硬件进行交互的工作。Java 文件经过编译后变成 .class 字节码文件字节码文件通过类加载器被搬运到 JVM 虚拟机中。
2024-11-21 19:47:24
1150
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人