自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 RFC 3428 会话初始协议

Session Initiation Protocol (SIP) Extension for Instant Messaging 论文解读 文档链接:https://rcn3ahrrdvjj.feishu.cn/wiki/LQRiwxD6Gih2rykxunKcGCyknvc代码链接:https://github.com/NuyoahCh/gopulse

2025-12-04 22:09:09 820

原创 RFC 2778/2779 即时消息模型

​飞书链接:https://rcn3ahrrdvjj.feishu.cn/wiki/IvGEwXR0oiwTxNkuHyscBJ2inrf视频链接:https://www.bilibili.com/video/BV1fm2sBJE7U?t=0.2代码仓库:https://github.com/NuyoahCh/gopulse

2025-12-03 20:54:37 833

原创 Protobuf指南

飞书链接:https://rcn3ahrrdvjj.feishu.cn/wiki/IR3TwiKJJi7jXJkr6QHc0P1Hnsg视频链接:https://www.bilibili.com/video/BV1kp2xBxEay?t=0.9代码仓库:https://github.com/NuyoahCh/gopulse

2025-12-03 20:47:09 806

原创 MIT 端到端系统设计

确定功能间恰当边界或许是计算机系统设计者的首要任务。指导功能定位的设计原则堪称系统设计师最重要的工具之一。

2025-12-03 15:04:57 903

原创 后端程序员对算法的思考

所以这样的话,理论估算是更加重要的,我们可以在工程初期或者是实施阶段,对我们做的东西进行整体上的预估和评价,这样会极大的提高我们对整体上的把握,和降低工程所带来的成本消耗。当然,算法的本质并不是在实际测试没有任何作用的,而是一个相辅相成的作用,当我们在前期对工程的实现和落地有一个整体的把控之后,对于之后的实际测试也就是一个水到渠成的事情了。举个例子,比如瀑布模型,虽然我们当前不推荐这样的开发模型进行落地,但是它会给我们一些指导建议——我们在开发完成一个工程之前是没有办法看到它的整体完整的一个模型的。

2025-10-04 18:10:19 205

原创 走进小王算法屋:手把手搞定 “两数之和”

singleDoc# 《1. 两数之和》

2025-08-18 09:00:00 310

原创 Java7/8中的HashMap深挖

根据 Java7 HashMap 的介绍,我们知道,查找的时候,根据 hash 值我们能够快速定位到数组的具体下标,但是之后的话,需要顺着链表一个个比较下去才能找到我们需要的,时间复杂度取决于链表的长度,为 O(n)。Java 7 很明显,还是使用头插法的方法进行操作,这种方法在 Java 8 中就进行了相关的改进,开始使用尾插法的方式,而且操作更加简单,同时防止了死循环的现象。这个方法的主要逻辑就是先判断是否需要扩容,需要的话先扩容,然后再将这个新的数据插入到扩容后的数组的相应位置处的链表的表头。

2025-08-06 19:06:31 920

原创 final关键字深挖

但是,对象本身是可以修改的,Java 没有提供将任意对象设为常量的方法。(你可以自己编写类达到使对象恒定不变的效果)这一限制同样适用数组,数组也是对象。因为它是引用,所以只是说明它不能指向一个新的对象。这对于数组具有同样的意义,数组只不过是另一种引用。也就是说,可以在编译时计算,减少了一些运行时的负担。此区别只有当值在运行时被初始化时才会显现,因为编译器对编译时数值一视同仁。的,在加载时已经被初始化,并不是每次创建新对象时都初始化。基本类型,它们都可用作编译时常量,没有多大区别。对象而改变,这是因为它是。

2025-08-04 15:09:51 387

原创 万字带你深度了解MQ消息队列

首先我们人的精力是有限的,从投入产出来说,深入学习一种消息队列就够了,因为消息队列的使用都是相通的,只要你掌握了其中一种消息队列,你就可以说你会消息队列了,这就如同你无论掌握Java还是Go或者其它语言,你都可以说自己会写代码了Kafka 是最主流的消息队列之一,被国内外大厂广泛使用,是经过验证的明星项目,也是学习消息队列的首选,所以本次的深入讲解就使用 Kafka 作为学习 MQ 的🌰,进行 MQ 的打怪升级之路吧!小王在写下这篇 blog 的时候,也是作为学生身份,我们不免也会说自己使用过各种各样的消

2025-08-03 10:07:26 1030

原创 Lambda表达式你真的懂了嘛

Lambda 表达式是 Java 8 中添加的功能。引入 Lambda 表达式的主要目的是为了让 Java 支持函数式编程。Lambda 表达式是一个可以在不属于任何类的情况下创建的函数,并且可以像对象一样被传递和执行。Java lambda 表达式用于实现简单的单方法接口,与 Java Streams API 配合进行函数式编程。以一个例子引入 lambda 表达式/*** @author 小王 Coding*/@OverrideSystem.out.println("这是匿名内部类的实现")

2025-07-27 22:27:54 903

原创 Java面向对象特性

即一个父类可能有若干子类,各子类实现父类方法有多种多样,调用父类方法时,父类引用变量指向不同子类实例而执行不同方法,这就是所谓父类方法是多态的。各自的类继承 Animal 后可以直接使用 Animal 类的属性和方法而不需要重复编写,各个类如果有自己的方法也可很容易地拓展。单继承,一个子类只有一个父类,如我们上面讲过的 Animal 类和它的子类。这样做的好处是子类拥有所有父类的特征,封装可以使得我们更容易的修改类的内部实现,而无需修改使用该类的代码。多态机制提供的一个重要的好处就是程序具有良好的扩展性。

2025-07-24 16:04:51 427

原创 Eino概述

另一方面,目前较为主流的框架如 LangChain,LlamaIndex 等,都基于 Python,虽然能借助 Python 较为丰富的生态快速实现多样的功能,但是同时也继承了 Python 作为动态语言所带来的“弱类型检验”和“长期维护成本高”等问题。每类组件作为一个 interface,有完善、稳定的定义:具体的输入输出类型,明确的运行时 option,以及明确的流处理范式。Eino 基于明确的“组件”定义,提供强大的流程“编排”,覆盖开发全流程,旨在帮助开发者以最快的速度实现最有深度的大模型应用。

2025-06-13 14:43:44 1241

原创 nginx相关操作

选择适合你系统的命令来重启Nginx服务。如果不确定你的系统使用的是systemd还是其他初始化系统,可以尝试systemctl命令,因为它是目前大多数现代Linux发行版的默认选择。

2025-06-12 09:03:48 360

原创 计算机网络域名系统

任何一个连接在互联网上的主机或路由器,都有一个唯一的层次结构的名字,即域名 (domain name)。可以划分为子域,而子域还可继续划分为子域的子域,这样就形成了顶级域、二级域、三级域,等等。域名到 IP 地址的解析是由若干个域名服务器程序共同完成。域名服务器程序在专设的结点上运行,运行该程序的机器称为域名服务器。域名结构:层次结构。由标号 (label) 序列组成,各标号之间用点(.)隔开,各标号分别代表不同级别的域名。域名采用层次树状结构的命名方法:www.myschool.edu。

2025-06-11 07:51:42 505

原创 计算机网络应用层协议

精确定义不同主机中的多个应用进程之间的通信规则。包括: 应用进程交换的报文类型,如请求报文和响应报文。各种报文类型的语法,如报文中的各个字段及其详细描述。字段的语义,即包含在字段中的信息的含义。进程何时、如何发送报文,以及对报文进行响应的规则。

2025-06-11 07:48:27 211

原创 计算机网络运输层

暂存:在发送完一个分组后,发送方必须暂存已发送的分组的副本,以备重发。若超时计时器超时位收到确认,发送方会自动超时重传分组。超时计时器的重传时间应当比数据在分组传输的平均往返时间更长一些,防止不必要的重传。确认丢失 若 B 所发送的对 M1 的确认丢失了,那么 A 在设定的超时重传时间内将不会收到确认,因此 A 在超时计时器到期后重传 M1。确认迟到 B 对分组 M1 的确认迟到了,因此 A 在超时计时器到期后重传 M1。B 会收到重复的 M1,丢弃重复的 M1,并重传确认分组。对重复的确认的处理:丢弃。

2025-06-10 08:56:13 141

原创 软件工程的软件生命周期

系统设计 :将需求转化为具体的技术方案,包括体系结构设计、界面设计、数据库设计等。可行性分析 :评估项目的技术、经济、操作和法律可行性,确定项目是否值得开发。需求分析 :明确用户需求,定义软件功能和非功能需求,形成需求规格说明书。维护 :在软件运行后持续改进、修复漏洞,并根据用户反馈进行版本迭代。测试 :验证软件是否满足需求,发现并修复缺陷,确保质量达标。实现(编码) :根据设计文档编写代码,完成软件功能的开发。部署/实施 :将软件交付给用户,进行安装、配置和培训。

2025-06-09 16:41:15 230

原创 可缩放架构

infrastructure (38), architecture (33)Few computer science or software development programs attempt to teach the building blocks of scalable systems. Instead, system architecture is usually picked up on the job by working through the pain of a growing prod

2025-06-07 10:16:52 1256

原创 主键设计不当,你的系统可能正在慢性自杀!​​

首先当我们深入的去学习和了解数据库主键设计方案时,可以去参考一些业界大佬的设计方案,以此来学习,从而获取灵感,那么小王今天带大家先从淘宝数据库的主键设计方案入手~

2025-06-05 08:41:03 561

原创 计算机网络文件传输协议

【代码】计算机网络文件传输协议。

2025-06-04 13:22:29 272

原创 计算机网络协议

【代码】计算机网络协议。

2025-06-04 13:21:38 317 1

原创 1298. 你能从盒子里获得的最大糖果数

Go语言使用广度优先。

2025-06-03 09:06:50 282

原创 leetcode135. 分发糖果

【代码】leetcode135. 分发糖果。

2025-06-02 07:59:08 151

原创 动手实现环形数组

Go语言实现环形数组。

2025-06-01 09:01:03 448

原创 动态数组实现

Go语言实现动态数组。

2025-05-31 16:45:04 127

原创 LRU算法实现

LRU Golang 版本。

2025-05-29 09:26:24 96

原创 最大子数组和

有两种「选择」,要么与前面的相邻子数组连接,形成一个和更大的子数组;要么不与前面的子数组连接,自成一派,自己作为一个子数组。在这两种选择中择优,就可以计算出最大子数组,而且空间复杂度还有优化空间,见详细题解。

2025-05-27 09:01:03 285

原创 简单实现LRU算法

简单实现LRU算法-面试手撕。

2025-05-26 10:26:34 121

原创 LeetCode连接两字母单词得到的最长回文串

随后,我们遍历哈希表的所有元素,并用 res 维护可能构成回文字符串的最长长度,同时用初值为 false 的布尔变量 mid 判断是否存在可以作为中心单词的、出现奇数次的回文单词。word=rev,此时可以构成的对数为 ⌊m/2⌋,即对最长回文字符串贡献的字符长度为 4⌊m/2⌋,我们同样将 res 加上对应值。如果按照上述条件挑选后,仍然存在未被选择的两个字符相同的单词(此时该字符串只可能有一个未被选择,且该字符串一定在 words 中出现奇数次),我们可以任意选择一个。反之则没有,我们不进行任何操作。

2025-05-25 08:39:29 329

原创 UUID和雪花(Snowflake)算法该如何选择?

Snowflake的算法并不复杂,你在使用的时候可以不考虑独立部署的问题,先想清楚按照自身的业务场景,需要如何设计Snowflake算法中的每一部分占的二进制位数。比如你的业务会部署几个IDC,应用服务器要部署多少台机器,每秒钟发号个数的要求是多少等等,然后在业务代码中实现一个简单的版本先使用,等到应用服务器数量达到一定规模,再考虑独立部署的问题就可以了。这样可以避免多维护一套发号器服务,减少了运维上的复杂度。

2025-05-24 10:04:31 1098

原创 算法中数组的基本概念

数组是一种数据结构,用于存储相同类型的数据元素的集合。这些元素在内存中是连续存储的,并且可以通过一个唯一的索引来访问每个元素。

2025-05-22 08:17:43 248

原创 复杂度分析

空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度。它描述的是算法在执行过程中所需的额外空间,不包括输入数据本身所需的空间。有些输入的东西是不能改的,是十分危险的⚠️,要和面试官去进行沟通。

2025-05-20 08:32:41 944

原创 有关链表的经典题型

【代码】有关链表的经典题型。

2025-05-19 09:07:57 128

原创 Go语言中空struct的用途

2. 空结构体在 channel 中:通过信号量控制并发,无需传输数据。3. 空结构体实现接口:当行为不需要依赖状态时,简化代码结构。1. 空结构体作为集合:节省内存,仅用键判断存在性。

2025-05-18 09:03:15 581

原创 死锁的概念

▪ 死锁是说一个进程拥有某种资源,而又等待其他进程释放他们手上的资源,在这种状态未发生改变前无法向前推进,则称这组进程陷入了死锁的状态,通俗来说就是一组进程无限期阻塞,相互等待的一种状态。• 第二个是请求和保持条件,一个进程拥有某个资源时,并且请求其他资源,要保持当前资源不放;• 第三个是不可剥夺条件,当进程拥有某个资源时,该资源不可被强行剥夺;• 第四个条件是循环等待条件,请求资源的一组进程形成一个循环等待的状态​。◦ 什么是死锁(进程,拥有,等待,无法推进,无限期阻塞,互相等待)​。

2025-05-17 10:27:14 285

原创 妙解每日一题

【代码】妙解每日一题。

2025-05-16 00:57:41 166

原创 Git和SVN的区别

svn:Apache Subversion是Apache许可证下的开源软件版本和版本控制系统。git:Git是由Linus Torvalds在2005年开发的开源分布式版本控制系统。它强调速度和数据完整性。

2025-05-15 09:01:31 1050

原创 数据结构算法指引

比方说 O(2n2+3n+1)O(2n2+3n+1) 等同于 O(n2)O(n2),O(1000n+1000)O(1000n+1000) 等同于 O(n)O(n)。比方说时间复杂度 O(n)O(n) 的算法比 O(n2)O(n2) 的算法执行效率高,空间复杂度 O(1)O(1) 的算法比 O(n)O(n) 的算法内存消耗小。是的,还是 O(n2)O(n2)。数组需要 O(n)O(n) 的时间复杂度,包含一个 for 循环,时间复杂度也是 O(n)O(n),总的时间复杂度是还是 O(n)O(n) 其中。

2025-05-14 14:20:32 966

原创 Golang最长连续序列

这样可以避免大量重复计算。比如 nums=[3,2,4,5],从 3 开始,我们可以找到 3,4,5 这个连续序列;而从 2 开始,我们可以找到 2,3,4,5 这个连续序列,一定比从 3 开始的序列更长。如果 nums=[1,1,1,…,1,2,3,4,5,…](前一半都是 1),遍历 nums 的做法会导致每个 1 都跑一个 O(n) 的循环,总的循环次数是 O(n。核心思路:对于 nums 中的元素 x,以 x 为起点,不断查找下一个数 x+1,x+2,⋯ 是否在 nums 中,并统计序列的长度。

2025-05-13 09:01:42 270

原创 HTTP 和 HTTPS 有什么区别?​

2. 建立连接:HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。4. 证书:HTTPS需要使用数字证书来验证服务器的身份,并确保数据传输的安全性。而HTTPS通过使用SSL/TLS协议对数据进行加密,提供了更高的安全性和数据保护。从安全性、 建立连接、端口号、证书三个方向来说明 HTTP 和 HTTPS 的区别​。我的理解主要有 4 个方面的区别:​。

2025-05-12 13:22:25 241

微积分基础-机器学习-程序员的数学基础

微积分基础-机器学习-程序员的数学基础

2024-09-05

Java思维导图,基于Java的基本语法以及Java的面向对象开发

Java思维导图,基于Java的基本语法以及Java的面向对象开发

2024-06-23

空空如也

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

TA关注的人

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