自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 python和java差异:关键数据类型与容器

​min(iterable, key=None, default=...)​, max(iterable, key=None, default=...)​: 返回可迭代对象中的最小/最大元素 (元素间需可比较,key​指定比较函数,default​为iterable为空时返回值)。索引/切片: my_list[i]​, my_list[start:stop:step]​ (比Java get(i)​ 和 subList()​ 更强大和灵活)。任何看起来像是修改不可变对象的操作,实际上都会创建一个新的对象。

2025-05-27 23:02:33 663

原创 Python与Java核心差异深度解析:从动态类型到PEP 8规范

Python与Java在设计哲学上各有侧重。Python以其简洁的语法、动态类型和快速开发周期吸引了大量开发者,特别是在数据科学、人工智能、Web开发等领域。而Java则凭借其静态类型、编译时检查、强大的生态系统和跨平台能力,在企业级应用、大型系统和Android开发中占据主导地位。理解这些根本差异,有助于开发者根据项目需求、团队技能和性能考量,做出更明智的技术选型。两者并非绝对的优劣之分,而是不同场景下的不同适用性。

2025-05-27 22:58:36 734

原创 multipart/* 响应是否必须使用 chunked 编码?

【代码】multipart/* 响应是否必须使用 chunked 编码?

2025-05-20 14:19:44 112

原创 JVM频繁FullGC:面试通关“三部曲”心法

想象一下,你的Java应用程序是一个繁忙的工厂,JVM堆内存就是工厂的仓库和车间。垃圾收集(GC)就像工厂的清洁工,负责清理不再需要的废料(无用对象),腾出空间让新的生产(对象分配)继续。Minor GC(年轻代GC)像是日常小范围清洁,速度快,影响小。而Full GC(完全垃圾收集,通常涉及老年代和整个堆)则是一次彻底的、停工级别的大扫除,耗时长,会导致工厂所有生产线(应用线程)暂停(Stop-The-World, STW)。如果你的工厂频繁地进行这种“停工大扫除”,那问题就大了!

2025-05-19 23:46:29 966

原创 MySQL死锁:面试通关“三部曲”心法

想象一下,你的MySQL数据库里有两张桌子(数据表),比如一张“产品库存表”,一张“订单表”。这下好了,顾客A等着顾客B放开订单表的锁,顾客B等着顾客A放开产品库存表的锁——他俩就像在独木桥上相遇,谁也不肯让,结果就“死锁”了,谁也动弹不得。这时,你的应用程序可能会卡住,用户下单失败,后台报错,情况紧急!作为“数据库交警”,你的首要任务不是去研究这两个顾客为啥这么巧,而是赶紧疏通交通,让至少一方能先走,恢复秩序!

2025-05-19 23:45:37 857

原创 MySQL连接池“爆满”: 面试通关“三部曲”心法

想象一下,你的应用系统就像一个繁忙的餐厅,数据库连接池就是餐厅里的座位。正常情况下,顾客(用户请求)来了,有空位(数据库连接)就坐下点餐(执行数据库操作),吃完就走,座位空出来给下一位顾客。但如果突然间,所有座位都被占满了,门口还排起了长队,新顾客完全进不来——这就是“MySQL数据库连接池爆满”的窘境。这时,系统会响应缓慢,用户请求失败,甚至整个应用都可能“瘫痪”。作为“餐厅经理”(负责的工程师),你的首要任务不是去研究菜单哪里不对,而是赶紧疏导顾客,腾出座位,让餐厅先恢复运转!

2025-05-19 23:44:55 575

原创 Java进程突然“猝死”: 面试通关“三部曲“心法

之后,通过细致的日志分析、Dump文件解读和环境排查,层层深入,找到根本原因,并最终通过修复和预防措施提升系统的整体稳定性。“事中应急”的核心:不是让你当场变成代码调试大师,而是要你像个经验丰富的现场指挥官,用最快的运维手段(重启、隔离、回滚)恢复业务,同时有意识地保留关键的“事故”证据。当服务通过应急手段暂时恢复(比如重启后暂时正常,或已回滚),或者你在隔离的故障实例上进行分析时,现在才进入“法医鉴定”和“侦探推理”阶段。找到“肇事元凶”并修复后,一定要吸取教训,避免“二次事故”。

2025-05-19 23:44:00 398

原创 Java应用OOM排查:面试通关“三部曲”心法

GC日志记录了每一次垃圾回收的详细信息,包括回收类型(Young GC, Full GC/Old GC)、回收前后各内存区域(Eden, Survivor, Old Gen, Metaspace)的大小、GC耗时、单次暂停时间(STW)、总暂停时间等。“事中应急”的核心:不是让你当场变成内存分析专家,而是要你利用运维手段(重启、隔离、回滚、临时调整参数)快速恢复业务,同时有强烈的意识去保全用于事后分析的关键诊断信息(Heap Dump、GC日志)。行动总纲:OOM排查“三部曲” (先有总纲,再看细节)

2025-05-15 23:29:45 1085

原创 磁盘I/O瓶颈排查:面试通关“三部曲”心法

iostat​ 是专门给“仓库”(磁盘)做的“体检报告”,-x​ 表示显示扩展信息,m​ 表示以MB为单位显示吞吐量(k​表示KB),t​ 表示打印时间戳,1​ 表示每秒刷新一次,z​ 表示不显示无活动的设备(让输出更干净)。​vmstat​ 里的 si​ 和 so​ 很高,就像您的电脑因为办公桌太小,不得不频繁地去远处又慢的档案室存取文件一样。首要怀疑对象: 如果看到 si​/so​ 很高,那么磁盘I/O瓶颈的根源很可能是内存不足,而不是磁盘本身的问题(虽然磁盘也会因此变得非常繁忙)。

2025-05-15 23:28:55 524

原创 CPU飙高排查:面试通关“三部曲”心法

简单说,就是服务器的“大脑”(CPU)突然忙得不可开交,转速表直接爆表(比如CPU使用率90%以上)。(降级/熔断) 有些时候为了保住核心业务(比如电商的下单功能),可以暂时把一些次要的、又特别耗CPU的功能(比如猜你喜欢)先关掉。NIO的Selector空轮询: 用了Netty之类的框架,可能遇到Epoll的bug,即使没数据也疯狂轮询。锁太多/不合理: 比如多个线程抢一个锁,或者锁住了一大段耗CPU的代码,导致大家都在这儿“堵车”。第三部曲:亡羊补牢!这时候,你就是“救火队长”,动作要快,姿势要帅!

2025-05-14 23:18:37 1568

原创 Java死锁排查:线上救火实战指南

想象一下,你正在值班,突然监控告警红成一片,用户反馈雪花般飘来:“系统卡死了!用不了了!” —— 这很可能就是Java应用遭遇了“死锁”这个大魔王。这时候,你就是救火队长,首要任务不是慢悠悠分析代码,而是立即行动,恢复服务,把损失降到最低!

2025-05-14 23:17:45 925

原创 HTTP3详解

TCP 为了保证数据可靠按序到达,有个机制:如果路途中有一个数据包(可能包含了某条车道上某辆车的一部分货物)不幸丢失了,那么整个 TCP 地基就会“暂停施工”,所有车道上的所有车辆都得等着,直到那个丢失的包裹被找回来(重传)。它像一位给力的工程师,把 HTTP/1.1 那条拥挤的“单车道土路”升级成了“多车道柏油路”,大大提升了我们的上网体验。这意味着,即使 HTTP/2 在应用层设计得再巧妙,只要底层的 TCP 连接因为丢包而“卡壳”,所有并行的 HTTP/2 流都会一起“抖三抖”。

2025-05-11 19:15:53 951

原创 Http2多路复用的静态表和动态表

因此,静态表和动态表结合使用,HPACK 才能既保证初次通信的即时压缩效率(针对通用头部),又能通过学习机制在后续通信中对会话特定的重复头部实现更高的压缩率,从而达到整体最优的头部压缩效果。内容:静态表是预先定义好的,包含了那些几乎在所有 HTTP 通信中都会高频率出现的、最最通用的头部字段及其常见值。为什么两者共存是最佳方案?

2025-05-11 18:55:17 353

原创 告别卡顿,拥抱丝滑:HTTP/2 三大“黑科技”为你解密!

想象一下 HTTP/1.1 时代,我们的网络通信有点像在用古老的“人工电报”——所有信息,无论是指令(请求头)还是内容(数据体),都得一个字一个字地用文本格式敲出来。通过“二进制分帧”打下坚实基础,依靠“多路复用”实现并发自由,再辅以“头部压缩”精打细算,HTTP/2 为我们带来了更快、更高效、更可靠的 Web 体验。一句话总结:HTTP/2 的二进制分帧,就是让计算机之间用“机器语言”高效对话,告别了 HTTP/1.1 时代的“文本广播体操”。来自不同“流”的“帧”(还记得上面说的二进制小包裹吗?

2025-05-11 18:50:28 352

原创 HTTP/1.1 host虚拟主机详解

Nginx 的核心在于其配置文件(通常是 nginx.conf​ 以及通过 include​ 指令引入的其他配置文件,如 sites-available/​ 或 conf.d/​ 目录下的 .conf​ 文件)。在互联网上,我们常常希望在一台物理服务器(它通常只有一个公网 IP 地址)上运行多个独立的网站,每个网站都有自己独特的域名(例如 www.a-site.com​, www.b-site.org​ 等)。如果每个网站都需要一个独立的 IP 地址,那将是非常昂贵且浪费 IPv4 资源的。

2025-05-11 14:39:24 1005

原创 Spring Boot Controller 如何处理HTTP请求体

开发者可以注册自定义的 HttpMessageConverter​ 来支持非标准或特定的数据格式,通过配置 WebMvcConfigurer​。// }//// // 用来添加转换器,同时不影响默认注册的转换器// // 或者调整已注册转换器的顺序// }// }理解这些机制对于构建健壮和灵活的Spring Boot API至关重要。

2025-05-08 22:35:49 1177

原创 Web开发探秘:Forward(转发)与Redirect(重定向),傻傻分不清?

对比项Forward (请求转发)Redirect (重定向)请求次数12URL变化不变变数据共享容易 (共享request)复杂 (request不共享,需额外手段)使用场景服务器内部组件协作,如MVC中的V和C防止重复提交、跳转到不同模块/站点、URL更新现在,你是不是对 Forward​ 和 Redirect​ 有了更清晰的认识呢?在Web开发中,根据具体的业务需求选择合适的"指挥官",能让你的应用更加流畅和强大!

2025-05-08 22:31:21 821

原创 场景设计题--手机没网也能付款

特性在线付款码方案离线付款码方案客户端网络必须在线可离线商家端网络必须在线必须在线码生成方服务端客户端 (基于服务端下发的密钥/规则)用户信息服务端已知 (通过请求上下文)需嵌入码中安全性相对较高 (服务端中心化控制)依赖客户端密钥安全,有被破解/伪造的潜在风险灵活性规则调整主要在服务端,较灵活算法调整可能需客户端升级,灵活性稍差适用场景网络良好环境,对安全性要求极高场景弱网/无网环境,支持无独立联网能力的设备核心依赖客户端与服务端的实时通信。

2025-05-07 16:53:40 1340

原创 从SQL的执行流程彻底详解预编译是如何解决SQL注入问题

应用程序发送参数: 客户端发送执行指令,同时单独发送用户输入的数据(如 ' OR '1'='1' -- ​ 和 any_password​)作为参数,并指明这些参数对应模板中的哪个占位符。因为用户输入的数据没有机会在分析器阶段影响或改变 SQL 的语法结构 (AST),所以它无法注入恶意的 SQL 逻辑,从而有效防止了 SQL 注入攻击。存储引擎 (Storage Engine): 根据执行器基于恶意计划发出的指令,返回了非预期的数据(比如所有用户的 ID)。(跳过查询缓存): 假设缓存未命中或未使用。

2025-05-07 11:39:19 466

原创 密码学基石:哈希、对称/非对称加密与HTTPS实践详解

哈希函数、对称加密和非对称加密是密码学中三类基本且至关重要的工具。它们各自拥有独特的特性和应用场景,并通过巧妙的组合(如 HTTPS)共同构筑了我们数字世界的安全防线。理解这些密码学概念的原理和应用,不仅对于安全专业人士至关重要,对于每一位软件开发者和希望安全畅游互联网的用户来说,也都是非常有益的。随着技术的发展,新的加密算法和安全协议会不断涌现,但这些基础的密码学思想将持续发挥其核心作用。

2025-05-07 09:45:29 1116

原创 CSRF 攻击:深入解析“借刀杀人“的请求伪造与防御之道

CSRF 攻击是一种隐蔽且危害较大的 Web 安全漏洞。首选并正确实施 Anti-CSRF Token 机制,这是防御 CSRF 的核心和最有效手段。合理利用 SameSiteCookie 属性,作为浏览器层面的增强防护。对于高风险操作,务必实施二次确认机制。谨慎使用检查Referer作为辅助手段。

2025-05-07 09:44:49 865

原创 DNS 攻击:劫持与污染的深度解析与防御

DNS 作为互联网基础设施的关键组成部分,其安全性直接关系到用户的网络体验和数据安全。DNS 劫持和污染是两种常见的攻击手段,它们利用了 DNS 设计或实现中的某些弱点。通过选择可靠的 DNS 服务、加强账户管理、正确配置客户端以及利用 DNSSEC 等先进技术,我们可以显著提升对 DNS 攻击的防御能力。

2025-05-07 09:44:15 526

原创 拒绝服务攻击(DoS/DDoS/DRDoS)详解:洪水猛兽的防御之道

DoS/DDoS/DRDoS 攻击是网络安全领域中一个持续存在且不断演变的威胁。没有一劳永逸的解决方案,防御是一个持续的过程,需要根据攻击技术的发展不断调整和升级策略。通过构建多层次的防御体系,结合充足的资源准备、先进的流量清洗技术、健壮的应用设计以及完善的应急响应机制,企业和个人可以最大限度地降低拒绝服务攻击带来的风险,保障在线业务的连续性和可用性。

2025-05-07 09:43:44 1305

原创 防盗链机制详解:保护你的网络资源不被“窃取“

盗链 (Hotlinking / Inline Linking)是指一个网站(盗链方)在其网页中直接使用了另一个网站(被盗链方)服务器上的资源(如图片、视频、音频、Flash 文件、甚至是 CSS/JS 文件等)的链接,使得用户在访问盗链方网站时,实际上是从被盗链方的服务器上加载这些资源。盗链的危害:带宽被盗用:这是最直接的危害。被盗链网站需要为并非自己真实用户的访问支付额外的带宽费用。如果盗链方的流量很大,这笔费用可能相当可观。服务器压力增加。

2025-05-07 09:42:33 745

原创 中间人攻击 (MITM):阴影中的窃听者与防御之道

中间人攻击是一种隐蔽且强大的威胁,它利用了我们对网络通信的固有信任。防御 MITM 不是单一技术的应用,而是一个涉及协议安全、网络配置、应用设计和用户行为的综合体系。通过强制 HTTPS、实施 HSTS、使用 VPN、保持软件更新、警惕不安全的网络以及提高安全意识,我们可以显著降低遭遇中间人攻击的风险,保护我们的数据和隐私在数字世界中安全传输。

2025-05-07 09:42:01 955

原创 SSL/TLS 证书与数字签名:构建互联网信任的详解

SSL/TLS 证书和数字签名是现代互联网安全的核心组成部分。它们通过一套精密的密码学机制和公钥基础设施 (PKI),为我们在不安全的网络环境中建立起了一条可信任的通信链路。数字签名确保了证书内容的真实性和完整性,是 CA 对其所签发证书的"信誉背书"。SSL/TLS 证书作为网站的"数字身份证",向用户证明了网站的身份,并提供了用于加密通信的公钥。证书链和根信任库将对单个证书的信任传递到对少数几个根 CA 的信任。证书吊销机制确保了即使证书被错误签发或私钥泄露,也能及时使其失效。

2025-05-07 09:40:30 848

原创 XSS 攻击:深入剖析“暗藏在网页中的脚本“与防御之道

XSS 攻击形式多样,层出不穷。防御 XSS 需要一个多层次、纵深防御的策略。输入验证是第一道关卡。基于上下文的输出编码/转义是核心和关键,必须严格执行。内容安全策略 (CSP) 提供了强大的额外保护层。HttpOnly Cookie 能有效降低 Cookie 泄露的风险。作为开发者,我们需要时刻保持警惕,理解不同类型 XSS 的攻击原理,掌握并运用正确的防御技术。只有这样,才能有效地保护我们的 Web 应用及其用户,免受 XSS 这种无处不在的脚本攻击的威胁。

2025-05-07 09:39:54 716

原创 Cursor MCP配置client closed

去掉cmd /c。

2025-05-06 14:29:56 502

原创 深入理解线程死锁:从概念到 Java 实战

线程死锁描述的是这样一种情况:多个线程同时被阻塞,它们中的一个或全部都在等待某个只有其它阻塞线程才能释放的资源。由于线程被无限期地阻塞,程序无法正常终止,也无法继续执行后续任务。想象一个简单的场景:有两条单行道在一个狭窄的路口交汇,每条道上都有一辆车想要通过路口到达对方的道路。如果两辆车同时驶入路口,互相挡住了对方的去路,并且谁也不愿意后退(释放路口资源),那么这两辆车就陷入了“死锁”状态,交通完全瘫痪。

2025-05-04 10:30:00 546

原创 手撕10进制转62进制

​BASE62_CHARS​: 定义了 62 进制使用的字符集,顺序很重要,'0'​ 对应数值 0,'a'​ 对应数值 36,'z'​ 对应数值 61。​main​ 方法: 包含了对各种情况的测试,包括边界值、Long.MAX_VALUE​ 以及错误输入。这个实现是自包含的,不依赖外部库,并且对解码逻辑进行了优化,避免了 Math.pow​。62 进制通常使用 0-9​, A-Z​, a-z​ 这 62 个字符来表示。

2025-05-04 08:30:00 214

原创 实战探讨:为什么 Redis Zset 选择跳表?

总结来说,Redis Zset 选择跳表是基于其在内存占用、范围查询性能与实现简洁性之间取得的良好平衡。对于 Zset 这种既需要快速单点查找/更新,又需要高效范围遍历的场景,跳表提供了一个非常实用且工程上更优的解决方案。在了解了跳表的原理和实现后,一个常见的问题(尤其是在面试中)随之而来:为什么像 Redis 的有序集合 (Zset) 这样的高性能组件会选择使用跳表,而不是大家熟知的平衡树(如红黑树)呢?

2025-05-03 12:30:00 969

原创 手撕跳表:平衡树之外的高效查找选择 (Java 实现详解)

想象一下城市的地铁系统。最底层的线路站站都停,这是我们的基础数据链表。为了提高效率,我们增加了只在几个大站停靠的“快车线”。乘客可以先乘坐快车线快速到达目标区域附近,然后再换乘慢车线精确到达目的地。基础层 (Level 0): 它是一个标准的有序链表,包含所有的数据元素。多级索引层 (Higher Levels): 在基础层之上,构建多层“稀疏”的链表,每一层都是下一层部分节点的“快捷方式”或“索引”。层级越高,节点越稀疏,跨度越大。

2025-05-03 11:00:00 721

原创 第 9 篇:最终决策:选择最适配的“兵器”

特性哈希表 (HashMap/Set)红黑树 (TreeMap/Set)AVL 树SB 树跳表 (Skip List)B/B+ 树有序性否是是是是是存储介质内存内存内存内存内存磁盘优化查找 (Avg)O(1) (常数大)O(log N)O(log N) (理论最快)O(log N)O(log N)O(logmN) (I/O少)查找 (Worst)O(N)O(log N)O(log N)O(log N)O(N) (概率极低)O(logmN)

2025-05-02 14:05:19 293

原创 第 8 篇:B/B+ 树:为海量磁盘数据而生

B/B+ 树: 处理存储在磁盘上的海量有序数据,需要高效查找和范围查询时的标准方案(数据库索引、文件系统的核心技术)。

2025-05-02 14:04:41 742

原创 第 7 篇:跳表 (Skip List):简单务实的概率性选手

跳表: 实现内存有序表时,若看重实现简单性、写性能和范围查询效率,且能接受概率性性能保证,跳表是优秀选择。

2025-05-02 14:04:02 1703

原创 第 6 篇:AVL 树与 SB 树:不同维度的平衡探索 (对比项)

特性红黑树 (Red-Black Tree)AVL 树 (Adelson-Velsky & Landis)SB 树 (Size Balanced Tree)平衡依据颜色 + 5条规则节点高度差 (<= 1)子树大小 (Size) 比例关系平衡严格性较宽松 (高 <= 2*logN)最严格 (高 ≈ logN)介于两者之间 (依赖具体约束)搜索效率稳定 O(log N),非常好理论上最快 O(log N)稳定 O(log N),非常好插入效率高效 (旋转 O(1) 次)

2025-05-02 14:03:32 598

原创 第 5 篇:红黑树:工程实践中的平衡大师

红黑树: 实现内存有序表时,需要稳定 O(log N) 和有序性,且读写操作较为均衡或写操作较多时的行业标准选择 (是 TreeMap​/TreeSet​ 的默认选择)。

2025-05-02 14:02:56 590

原创 第 4 篇:平衡的挑战:为何有序表需要特殊设计?(BST 困境再探)

为了让有序表能够兑现其 O(log N) 的性能承诺,必须采用自平衡机制来克服普通 BST 的不稳定性。平衡的核心目标是控制结构的高度,防止其退化。对于树形结构,旋转是实现自平衡的关键技术。理解了“平衡”的必要性和基本手段,我们就可以在接下来的文章中,更有针对性地去了解各种具体的有序表实现(红黑树、AVL 树、SB 树、跳表)是如何运用不同的平衡策略来达成 O(log N) 目标的,以及它们各自的优缺点和选型考量。下一篇,我们将聚焦工业界最常用的内存有序表实现——红黑树。

2025-05-02 14:02:21 513

原创 第 3 篇:有序的世界:有序表 (TreeMap/TreeSet) 的概念与优势

有序表,顾名思义,是一种在使用层面上始终保持其内部元素(根据元素的键 Key)有序的集合结构。与哈希表不同,它不仅仅是存储数据,更是在存储的同时维护了数据之间的顺序关系。自动排序: 无论你何时放入一本新书(数据),书架总能自动根据书名(键)的字母顺序,把它放在正确的位置。快速定位: 你想找书名以“Java”开头的书,书架能很快帮你定位到那个区域。轻松找到邻居: 你想找某本书前面或后面的那本书,也能轻松做到。

2025-05-02 14:01:20 559

原创 第 2 篇:哈希表 (HashMap/HashSet):速度优先的无序王者

哈希表 (HashMap/HashSet): 当你的首要目标是极致的平均增删改查速度,并且完全不需要考虑元素顺序时,基于数组(配合冲突解决)的哈希表是最佳选择。

2025-05-02 14:00:07 980

空空如也

空空如也

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

TA关注的人

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