自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 从零开始学习计算机网络(四)

文章摘要: TCP(传输控制协议)是互联网核心协议之一,提供面向连接、可靠、基于字节流的传输服务,确保数据有序到达。与UDP相比,TCP可靠性高但效率较低,适用于HTTP、FTP等应用;UDP则适合实时性要求高的场景如视频通话。TCP通过三次握手建立连接(确认双方收发能力,避免无效连接),通过四次挥手断开连接(全双工特性需双向独立关闭)。最后客户端等待2MSL(约2分钟)以确保ACK到达并让旧数据包失效。三次握手和四次挥手的机制设计解决了网络通信中的可靠性及资源浪费问题。

2026-08-03 01:24:21 286

原创 SQL50-连接篇

这篇SQL学习笔记总结了LeetCode上三个数据库查询题目及解答: 1378题使用左连接(LEFT JOIN)将员工表与唯一标识码表关联,保留所有员工记录 1068题通过内连接(JOIN)合并销售表和产品表获取销售详情 1581题利用左连接和WHERE条件过滤找出未完成交易的顾客访问记录 笔记还归纳了SQL语句执行顺序:FROM/JOIN→WHERE→GROUP BY→HAVING→SELECT,并解释了内连接、左连接和全连接的区别。每个解决方案都提供了简洁的SQL代码实现。

2026-07-29 01:20:45 204

原创 从零开始学计算机网络(三)

本文介绍了HTTPS如何通过TLS/SSL协议解决HTTP明文传输的安全隐患。HTTPS在HTTP与TCP之间添加TLS层,通过四次握手过程建立安全连接:客户端发送随机数和密码套件(ClientHello);服务端返回随机数、证书和确认参数(ServerHello);客户端验证证书并生成pre-master密钥,使用公钥加密传输;双方基于随机数和pre-master生成会话密钥。最终通信使用该密钥进行对称加密,实现安全传输。文章简要说明了RSA握手流程,并预告后续将探讨ECDHE握手和CA证书验证机制。

2026-07-29 01:18:08 196

原创 从零开始学计算机网络(二)

本文主要介绍了DNS域名解析协议在网络中的作用和工作原理。当用户在浏览器输入网址时,DNS系统会通过以下步骤将域名转换为IP地址:首先查询浏览器和操作系统缓存,若未命中则向本地DNS服务器发起请求;本地DNS服务器依次查询根域名服务器(返回顶级域名服务器地址)、顶级域名服务器(返回权威域名服务器地址)和权威域名服务器(返回最终IP地址)。整个过程体现了递归查询(本地DNS全权负责)和迭代查询(逐级指引)的结合,查询结果会被各级缓存以提升效率。DNS作为应用层协议,是互联网访问的重要基础。

2026-07-28 02:23:51 179

原创 SQL50-查询篇

单表查询:字符串长度查询函数 CHAR_LENGTH()。还有一个 LENGTH 统计的实际上是字节数,同一个字符串,对于不同的编码字符集,会返回不同的结果。584. 寻找用户推荐人。1148. 文章浏览 I。单表查询:去重+排序。

2026-07-28 01:53:40 159

原创 从零开始学计算机网络(一)

本文介绍了HTTP协议的基础知识,重点讲解了HTTP报文格式和请求方式。HTTP报文分为请求报文和响应报文,请求报文包含请求行、请求头和请求体,响应报文包含状态行、响应头和响应体。文章详细解释了GET和POST请求的区别,以及常见的HTTP状态码分类。此外,还说明了HTTP无状态的特性,以及如何通过Cookie-Session机制维护用户登录状态。全文以通俗易懂的方式帮助读者理解HTTP协议的核心概念。

2026-07-27 22:50:06 223

原创 LeetCode Hot 100(二分查找)

本文总结了5道二分查找相关的LeetCode题目及其解法: 搜索插入位置(35题):通过二分查找第一个>=target的位置 搜索二维矩阵(74题):将二维矩阵视为一维数组进行二分查找 查找元素的起始和结束位置(34题):利用两次二分查找确定范围 搜索旋转排序数组(33题):先找到旋转点再分别在两个有序部分查找 寻找旋转数组中的最小值(153题):通过比较中间值与首元素确定最小值位置 所有解法的时间复杂度均为O(logn),空间复杂度O(1)。对于4题还给出了寻找两个有序数组中位数的解法,时间复杂度O

2026-02-14 22:49:40 640

原创 LeetCode Hot 100 (回溯篇)

本文介绍了几个经典的排列组合问题的回溯解法。全排列问题通过DFS遍历决策树收集所有叶子节点的路径;子集问题通过递归枚举所有可能的长度组合;电话号码字母组合采用递归处理不确定层数的循环;组合总和问题通过选择/不选当前数的策略;括号生成则通过控制左右括号数量来确保合法性。这些解法都遵循回溯的基本框架,时间复杂度大多在指数级,空间复杂度为线性。

2026-02-14 22:36:45 569

原创 LeetCode Hot 100(图论篇)

本文介绍了三个算法题解和数据结构实现: 岛屿数量问题(200题):使用DFS染色法统计连通"1"的数量,时间复杂度O(nm),空间复杂度O(nm)。 腐烂橘子问题(994题):采用BFS逐层扩展腐烂范围,统计所需时间,时间复杂度O(nm),空间复杂度O(nm)。 课程表问题(207题):通过拓扑排序检测有向图是否存在环来判断课程安排可行性,时间复杂度O(n+m)。 Trie树实现(208题):展示了前缀树的基本实现,包括插入和检索操作,时间复杂度O(n),空间复杂度O(qn)。每个解决方

2026-01-29 20:58:38 379

原创 LeetCode Hot 100(矩阵篇)

本文介绍了四个矩阵相关算法题的解法。73题通过利用矩阵第一行和列作为标记空间实现O(1)空间复杂度置零;54题使用螺旋遍历方式收集矩阵元素;48题通过两次翻转实现图像90度旋转;240题从右上角开始搜索矩阵,通过逐步缩小范围实现高效查找。这些解法都注重时间/空间复杂度优化,展示了矩阵处理的常见技巧,包括标记法、遍历顺序控制和双指针等。

2026-01-29 20:56:03 596

原创 LeetCode Hot 100(二叉树篇)

本文总结了二叉树相关的常见算法题解,包括中序遍历、最大深度、翻转二叉树、对称二叉树、直径计算和层序遍历。每道题目都给出了时间复杂度O(n)和空间复杂度O(n)的Java实现。中序遍历采用迭代法,最大深度通过递归计算左右子树深度,翻转二叉树采用后序遍历交换左右子树,对称二叉树递归比较左右子树,直径计算通过深度搜索记录最大值,层序遍历使用队列实现。这些解法涵盖了二叉树遍历和基本操作的核心思想。

2026-01-28 21:55:29 660

原创 从零学习MySQL(三)

本文探讨了MySQL索引如何通过B+树结构大幅提升查询效率。当数据量增长至百万级时,无索引查询耗时可达2308ms,而建立索引后仅需0.4ms。文章分析了从二叉查找树到平衡二叉树的演进,指出其在高数据量场景下的不足。重点阐述了B+树的优势:多分支结构降低树高,索引页不存储数据减少IO次数,叶子节点双向链表提升范围查询效率。B+树通过优化磁盘IO而非计算复杂度,使查询性能实现数量级提升。这种设计理念体现了数据库对硬件特性的尊重,即在最少IO次数下定位目标数据。

2026-01-28 21:48:32 653

原创 LeetCode Hot 100(链表篇)

本文介绍了几个常见的链表算法题解: 相交链表:使用双指针法,当指针到达链表末尾时跳转到另一链表头部继续遍历,确保两指针能在交点相遇。时间复杂度O(n+m),空间O(1)。 反转链表:给出两种实现方式:尾插法(新建头节点逐步插入)和三指针法(直接修改指针方向)。时间复杂度均为O(n),空间O(1)。 回文链表:通过快慢指针找到中点,反转后半部分后与前半部分比较。时间复杂度O(n),空间O(1)。 环形链表检测:快慢指针法,快指针每次两步,慢指针一步,相遇则存在环。时间复杂度O(n),空间O(1)。 环形链表入

2026-01-27 20:08:10 917

原创 LeetCode Hot 100(普通数组篇)

本文介绍了五个经典数组问题的解法: 最大子数组和:使用动态规划,维护当前子数组和,时间复杂度O(n),空间O(1) 合并区间:先排序再合并重叠区间,时间复杂度O(nlogn),空间O(n) 轮转数组:通过三次翻转实现轮转,时间复杂度O(n),空间O(1) 除自身以外数组乘积:利用前缀和后缀乘积,时间复杂度O(n),空间O(1) 缺失的第一个正数:采用桶排序思想,时间复杂度O(n),空间O(1) 这些解法都利用了数组的特性,通过巧妙的算法设计实现了最优解。

2026-01-27 20:05:05 923

原创 LeetCode Hot 100(子串篇)

本文介绍了三道滑动窗口相关的算法题解。第一题通过前缀和和哈希表统计满足条件的子数组数量;第二题使用单调队列维护滑动窗口最大值;第三题通过变长滑动窗口寻找最小覆盖子串。三题均采用滑动窗口思想,分别针对定长窗口、变长窗口等不同场景,展示了如何高效处理数组/字符串中的子区间问题。解题思路清晰,代码实现简洁,时间复杂度均为线性。

2026-01-23 11:17:40 302

原创 LeetCode Hot 100(滑动窗口篇)

本文介绍了两种滑动窗口算法的应用。第一种是无重复字符的最长子串问题,使用哈希表记录窗口内的字符出现情况,通过收缩窗口确保字符不重复,时间复杂度O(n)。第二种是字符串中所有字母异位词查找问题,通过维护定长窗口的字母计数数组,当窗口大小等于目标字符串长度时比较字母频率,时间复杂度O(n)。两种方法都利用了滑动窗口技术高效处理字符串子序列问题,代码实现清晰简洁。

2026-01-23 11:16:15 223

原创 LeetCode Hot 100(双指针篇)

本文总结了6道数组与字符串相关的LeetCode题目解法: 移动零:使用双指针法,将非零元素前移后补零,时间复杂度O(n) 盛水容器:双指针从两端向中间移动,每次调整较短边,记录最大面积 三数之和:排序后固定一个数,双指针寻找另外两个数,注意去重 接雨水:预处理左右最大值数组,每个位置存水量由左右最大值较小值决定 无重复字符子串:滑动窗口维护无重复字符区间,记录最大长度 字母异位词:定长滑动窗口统计字符频率,与目标模式比较 这些题目都采用了双指针或滑动窗口等高效算法,时间复杂度多为线性,空间复杂度优化良好。

2026-01-14 19:21:02 284

原创 LeetCode Hot 100(哈希篇)

本文介绍了三个基于哈希表的算法问题解决方案。1. 两数之和:使用哈希表存储元素和索引,通过查找补数实现O(n)时间复杂度的解法。2. 字母异位词分组:将排序后的字符串作为哈希表键值,将异位词分组存储。3. 最长连续序列:利用哈希表查找序列起点,计算最长连续序列长度。三个问题都充分利用了哈希表快速查找的特性,实现了高效的问题求解,时间复杂度均为O(n)或O(nmlogm),空间复杂度均为O(n)。

2026-01-14 19:17:28 976

原创 从零学习MySQL(二)

本文介绍了MySQL中记录行的存储格式,重点分析了Compact行格式的结构。MySQL提供了多种行格式方案(Compact、Dynamic、Compressed、Redundant),其中Compact格式将记录分为真实数据和额外信息两部分。真实数据包含业务字段和3个隐藏字段(事务ID、回滚指针、隐藏主键);额外信息包括记录头(逻辑删除标记、链表指针等)、变长字段长度和NULL值位图。对于行溢出情况,不同格式处理方式不同:Compact部分存储溢出数据,Dynamic完全存储到溢出页,Compressed

2026-01-10 20:58:58 557

原创 从零学习 MySQL(一)

摘要:MySQL采用C/S架构,服务端分为Server层和存储引擎层。Server层处理连接、SQL解析与执行,包含连接器、分析器(词法/语法分析)、预处理器、优化器和执行器等组件。存储引擎层负责数据存取,支持多种引擎。SQL执行流程包括建立连接、解析SQL语句、预处理检查、优化执行方案,最后由执行器与存储引擎交互获取数据。MySQL 8.0移除了查询缓存功能。执行过程中,Server层与存储引擎以记录为单位进行交互。

2026-01-05 16:40:05 779

原创 Synchronized的入门理解

本文介绍了多线程并发中的临界区和竞态条件问题,重点讲解了synchronized的用法和原理。synchronized通过对象锁保证临界区代码的原子性,提供实例锁和类锁两种方式。JDK15后锁膨胀路径为无锁→轻量级锁→重量级锁。轻量级锁通过CAS和Lock Record实现,适合少量竞争场景;重量级锁则通过Monitor管理线程竞争,包含Owner、EntryList和WaitSet。synchronized在底层实现了锁升级、自旋等优化机制,开发者只需要简单使用即可获得线程安全保证,JVM会处理复杂的锁管

2025-11-14 10:37:07 774

空空如也

空空如也

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

TA关注的人

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