自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 浅聊一下网页显示过程

从输入网址到网页显示,整个过程环环相扣,涉及 HTTP、DNS、TCP、IP、ARP 等多个协议,还有浏览器、协议栈、网卡等各种组件的协同工作。把这些过程搞明白,不仅能帮我们更好地理解网络通信的原理,在遇到网络问题时,也能更快地定位排查。

2025-10-05 21:11:22 904

原创 浅聊一下TCP协议

首先得搞清楚 TCP 到底是什么。TCP 的全称是传输控制协议(Transmission Control Protocol)面向连接:就像打电话,得先接通才能说话。TCP 传输数据前,必须先建立连接,而且每条连接都是 “点对点” 的,只能一对一传输,不能一对多或者多对多。基于字节流:TCP 传输数据不是按 “块” 来的,而是像水流一样的字节流。不过传输的时候,它会把这些字节流分成大小不一样的 “报文段” 再发出去。核心功能:这是 TCP 的重点 —— 它能保证可靠性传输,还能做流量控制和拥塞控制。

2025-10-04 20:32:43 926

原创 浅聊一下HTTP协议

在日常上网浏览网页、刷视频时,背后都离不开 HTTP 协议的支持。作为 Web 世界的 “交通规则”,它负责服务器和客户端浏览器之间的数据传输。这篇文章就带大家全面了解 HTTP 协议,从基本概念到通信细节,再到安全相关的 HTTPS,让你对它有清晰的认知。HTTP 协议,全名叫 Hyper Text Transfer Protocol(超文本传输协议),是应用层里专门用来在服务器和客户端浏览器之间传输超文本数据的协议。像我们平时看到的文字、图片、视频、音频这些,都靠它来传递。它不只是个简单的传输协议,还是

2025-09-15 20:14:15 893

原创 浅聊一下计算机网络模型

咱们常说的 “互联网”,其实就是 Internet 的中文翻译。计算机网络是两台或更多计算机组成的网络,同一网络里任意两台电脑能直接通信;而 Internet 是把无数个计算机网络连起来,形成全球统一的大网,所有设备都得遵守同一套网络协议。应用层:你在微信输入文字,点击发送,微信(应用层)按自己的格式生成 “消息报文”,发给传输层;传输层:传输层用 TCP 协议,把 “消息报文” 拆成小的 “TCP 报文段”,加上 TCP 报头(包含源端口、目标端口,比如微信的进程端口),发给网络层;网络层。

2025-09-15 20:09:23 613

原创 浅聊一下数据库的事务

从单机到分布式,事务的核心始终是对数据状态的可信承诺。掌握 InnoDB 的锁机制、日志原理,理解不同隔离级别的性能代价,才能在业务需求与技术实现间找到平衡点。记住:优秀的事务设计,不是消灭异常,而是让异常路径清晰可控。

2025-09-14 18:14:45 2086

原创 浅聊一下数据库索引

手机号唯一,放最左(快速定位单条)注册时间放后,支持范围查询(近 30 天注册的用户)避免回表:把常用字段(昵称、头像)也包含进索引(覆盖索引)记住:索引不是银弹,适合业务场景的才是最好的。下次写 SQL 前,先想想:这条件,索引能帮上忙吗?

2025-09-14 18:07:49 833

原创 浅聊一下线程池技术

用 ThreadPoolExecutor 时,按任务类型(CPU/I/O 密集)配置核心参数;执行流程:核心线程→队列→非核心线程→拒绝策略;生产环境避免用 Executors 默认线程池,自己配参数更安全;用完线程池要关闭,定期监控避免任务堆积。掌握这些,不管是日常开发还是面试,线程池这块都能应对啦~

2025-09-11 19:18:23 957

原创 浅聊一下ThreadLocal

3 个方法:set () 存、get () 取、remove () 删(重点!2 个场景:线程数据隔离(防并发)、跨函数传数据(解耦);1 个注意点:线程池场景一定要在 finally 里调用 remove (),避免内存泄露和脏数据。掌握这些,不管是开发还是面试,ThreadLocal 这块都没问题了~

2025-09-11 18:44:57 2066

原创 浅聊一下Redisson分布式锁

Redisson 分布式锁的核心价值,就是帮咱们解决了分布式环境下的并发问题,而且封装好了重入、续期、原子释放等细节,不用自己造轮子。实际项目里,只要做好 “锁 key 唯一”“合理设置 tryLock 参数”“确保释放锁” 这几点,就能轻松应对大部分并发场景。如果你的项目里还在自己手写 Redis 锁,或者被并发问题困扰,不妨试试 Redisson,上手简单,稳定性也够,亲测在高并发场景(比如秒杀)下表现很好。后续如果需要深入了解红锁、读写锁(ReadWriteLock)的用法,咱们再单独聊~

2025-09-10 19:51:27 1187

原创 浅聊一下微服务的分布式事务

要强一致,选 Seata 的 XA 模式,简单无侵入,但性能一般。要高可用和性能,选 Seata 的 AT 模式(默认),最终一致,无侵入,适合大多数场景。Seata 的优势在于易用性 —— 不用写复杂的补偿逻辑,配置一下、加个注解就能用,大大降低了分布式事务的实现成本。大家可以根据自己的业务场景,选择合适的事务模式。

2025-09-10 19:44:05 1105

原创 浅聊一下微服务的服务保护

流量控制:通过直接 / 关联 / 链路模式,结合快速失败 /warm up / 排队效果,提前挡住突发流量,预防雪崩。隔离降级:通过线程隔离(仓壁模式)和熔断降级,在服务故障时控制影响范围,避免级联失败。实际项目中,要根据业务场景选择合适的规则 —— 比如秒杀接口用 warm up + 热点参数限流,慢服务调用用线程池隔离,核心接口用熔断降级。多测试、多调优,才能让微服务更稳定~

2025-09-08 20:01:51 1980

原创 浅聊一下微服务的网关模块

前面的过滤器都是 “现成的”,只能干固定的活儿。但实际项目里,经常需要自定义逻辑(比如判断用户是否登录、有没有权限),这时候就需要 “全局过滤器”—— 自己写代码实现,想干啥就干啥。需求:所有请求必须带参数,且值为admin,否则拦截(返回 401 未授权)。本篇把 Spring Cloud Gateway 的核心知识点都覆盖了:从 “为什么需要网关”,到搭建、路由、断言、过滤器、全局逻辑、跨域解决,每个点都带了实战代码,新手跟着做就能上手。

2025-09-08 18:01:38 1074

原创 关于Leetcode中回溯的思路

回溯算法本质上是一种深度优先搜索 (DFS) 的变种,它通过 "尝试 - 验证 - 回退" 的循环机制探索所有可能的解空间。想象你在走迷宫时,遇到岔路就选择一条前进,走不通就退回上一个岔路选择另一条路径,直到找到出口或尝试所有可能 —— 这就是回溯的核心思想。状态可恢复:在尝试某条路径后能撤销选择,回到之前的状态剪枝优化:通过约束条件提前终止无效路径的搜索组合问题:从集合中选出满足条件的组合(如组合总和)排列问题:生成集合的所有可能排列(如全排列)子集问题:找出集合的所有子集(如子集 II)

2025-09-07 20:35:25 876

原创 浅聊一下微服务远程通信

Feign 是 Spring Cloud 提供的声明式伪 HTTP 客户端,核心特点是 “像调用本地服务一样调用远程服务”—— 不用写复杂的 URL 拼接,只要定义一个接口,加几个注解就行。另外,Feign 和 Nacos 兼容性特别好,而且默认集成了 Ribbon,所以用 Feign 调用服务时,不用额外配置就能实现负载均衡,省了不少事。,感兴趣的可以去看源码或文档。创建一个 Service 接口(比如叫// @FeignClient("服务名"):指定要调用的远程服务(Nacos里的服务名)

2025-09-07 20:25:47 1060

原创 浅聊一下微服务注册中心

Nacos 的定位是 “动态服务发现、配置管理和服务管理平台”,简单说就是 “注册中心 + 配置中心” 二合一,而且是 Spring Cloud Alibaba 的组件,和 Spring 生态兼容性特别好。咱们直接上手实战,把它用起来!Ribbon 是 Netflix 开源的负载均衡器,专门帮咱们管理 HTTP 和 TCP 客户端的行为。在 Spring Cloud 里,Nacos 通常和 Ribbon 搭配用 ——Ribbon 从 Nacos 里读服务列表,调用服务时还能做负载均衡,不用咱们自己写逻辑。

2025-09-07 20:07:48 1048

原创 关于LeetCode239‘滑动窗口最大值‘的一些思路

这个算法的核心是用单调队列巧妙地维护了窗口内的最大值,避免了重复比较。单调队列如何保证头部始终是最大值如何维护队列元素在窗口范围内通过这种方式,我们把滑动窗口最大值问题的效率提升到了线性级别,非常适合处理大规模数据。

2025-09-03 21:15:08 408

原创 浅聊一下ElasticSearch :从入门到实战

核心原理:倒排索引是 ES 快的关键,按 “词条→文档 ID” 的逻辑,避免全表扫描;概念对应:和 MySQL 对比着记(表→索引、行→文档、列→字段),更容易理解;核心操作:索引库(建删改查,注意 Mapping 不能改旧字段)、文档(增删改查,支持批量操作);查询重点:DSL 是基础,Bool Query 适合复杂场景,分页和排序要注意性能问题;实战建议:MySQL 负责写(事务安全),ES 负责读(查询高效),用工具同步数据。

2025-09-03 21:04:04 1068

原创 关于‘Leetcode105:从前序和中序遍历构造二叉树‘的一些个人思路

前序遍历:先访问根节点,再遍历左子树,最后遍历右子树(根 -> 左 -> 右)中序遍历:先遍历左子树,再访问根节点,最后遍历右子树(左 -> 根 -> 右)3/ \9 20/ \15 7前序遍历就是:3,9,20,15,7中序遍历就是:9,3,15,20,7。

2025-09-02 18:27:37 1048

原创 浅聊一下RocketMQ的简单使用

简单说,消息中间件就是靠高效可靠的消息传递机制,让不同平台之间能顺畅交换数据,进而把分布式系统整合起来。它提供了 “消息传递” 和 “消息排队” 两种核心模型,能帮分布式环境下的进程扩展通信能力。Producer(生产者):相当于寄件人,负责把消息发出去;Consumer(消费者):相当于收件人,负责订阅消息、接收消息并处理;消息中间件本身:就像快递公司,负责把消息安全送到消费者手里。

2025-09-02 18:01:33 836

原创 浅聊一下JVM垃圾收集器

JVM 垃圾收集器的核心逻辑是 “识别垃圾 - 回收垃圾”,不同算法与收集器的设计本质是在 “回收效率”“响应时间”“内存利用率” 三者间寻找平衡。开发过程中无需深入底层实现,但需掌握主流收集器的特性与适用场景,在遇到内存溢出、GC 频繁等问题时,能快速定位是收集器选型不当还是参数配置问题,为后续调优提供方向。个人见解,如有更深刻的理解,可以评论区交流~

2025-08-23 21:35:58 870

原创 JVM类加载与对象创建全解析

类加载器之间有层次关系,除了启动类加载器,其他类加载器有父类加载器(通过组合关系实现,不是继承 ),这就是双亲委派模型。

2025-08-20 17:45:10 825

原创 浅聊一下AQS机制

waitStatus有不同的值,0是初始化的默认值,1表示线程获取锁的请求取消了(CANCELLED),-2表示节点在等待队列中(CONDITION),-3在SHARED模式下使用(PROPAGATE),-1表示线程准备好了,就等资源释放(SIGNAL)。ReentrantLock的加锁过程是这样的:通过lock()方法加锁,会调用内部类Sync的Lock方法,因为Sync的lock是抽象方法,所以会根据选择的公平锁或非公平锁,执行相应内部类的Lock方法,本质上都会执行AQS的Acquire方法。

2025-08-18 15:58:21 253

原创 聊聊 CAS:不⽤锁也能保证线程安全?

这是个经典问题:线程 1 读到值是 A,线程 2 把 A 改成 B 再改回 A,线程 1 的 CAS 操作会认为值没变化,继续执⾏。理解 CAS 的原理,不仅能帮我们更好地⽤好 JUC ⾥的⼯具,也能让我们对并发编程的底层逻辑有更深的认识,还是很有必要的~听名字就知道,这玩意是个 “不安全” 的底层⼯具,能直接操作内存,JDK 内部⽤它来实现各种⾼性能的并发功能。CAS 是⼀种⽆锁的同步机制,靠 CPU 指令保证原⼦性,性能⽐传统锁好很多,Java ⾥的。,属于⾮阻塞同步,性能上⽐传统的锁机制更轻量。

2025-08-12 18:55:26 766

原创 Spring Bean生命周期详解:从实例化到销毁,一篇讲透!

Spring 扩展性强,靠**“后处理器”**在生命周期中“插一脚”。分两类,作用时机不同:核心点帮你整理好了:是 Bean 的**“蓝图”**,存创建信息;后处理器是扩展关键:→ 改蓝图(BeanDefinition);→ 改实例(Bean 对象);生命周期核心在**“初始化阶段”**,包含:属性填充、Aware 注入、初始化方法、后处理器增强;单例循环依赖靠三级缓存解决,多例不行;单例 Bean 进,多例每次getBean()新创建。

2025-08-04 18:13:29 823

原创 MyBatis的运行原理

将 JDBC 操作封装为简洁的接口调用,同时保留了对 SQL 的完全控制权。:处理 SQL 执行流程(查询缓存、Statement 创建等)一级缓存:SqlSession 级别(默认开启):SQL 映射(SQL 语句与接口方法绑定)二级缓存:Mapper 级别(需手动配置):预编译参数(防止 SQL 注入):定义数据访问方法(无需实现类)自动映射:列名与属性名相同的字段。:执行 SQL 的核心 API。:直接替换(用于表名、列名等):全局配置(数据源、事务等)缺乏高级 ORM 特性。

2025-07-23 18:51:32 346

原创 String类的equals()的作用和源代码解读

可以看到,在String类的equals方法里面传入了一个Object类型的参数anObject,首先第一个if用来判断当前对象的地址和anObject的地址是否相同,如果相同直接返回true——"=="在比较引用类型时,判断的是地址——也就是说,如果地址相同,不再进行多余判断,直接返回true,因为两个对象若是同一个地址,其内容一定是相同的,就像张三手里有把钥匙,李四手里也有把钥匙,他俩的钥匙都能打开这个门,那就说明他俩打开的是同一扇门,门里面的东西自然也是一样的。

2025-02-02 15:22:06 573 2

原创 String为什么是不可变的?

String为什么是不可变的?变化之后又发什么什么?

2025-01-19 19:19:59 314

空空如也

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

TA关注的人

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