自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Dablelv 的博客专栏。

The blog world of Dablelv

  • 博客(891)
  • 资源 (9)
  • 问答 (41)
  • 收藏
  • 关注

原创 死锁与死锁避免算法

死锁(Deadlock)是在多任务环境中的一种资源竞争问题,其中两个或多个进程(线程)互相等待对方持有的资源,导致所有进程都无法继续执行。死锁是一种非常棘手的问题,因为它会导致系统无法正常运行。举个例子。比如买东西,如果商家要先拿钱才给东西,顾客要先拿到东西才给钱,那么会发生死锁。另外,哲学家就餐问题是一个死锁的经典例子。银行家算法是由于 1965 年 THE 操作系统设计的一种避免死锁产生的算法。它以银行借贷系统的分配策略为基础,判断并保证系统安全运行。在银行中,银行拥有的资金是有限的。

2024-02-28 12:00:10 438

原创 Golang GC 介绍

GC 全称 Garbage Collection,目前主流的垃圾回收算法有两类,分别是追踪式垃圾回收算法(Tracing garbage collection)和引用计数法( Reference counting )。Golang 使用的三色标记法属于追踪式垃圾回收算法的一种。追踪式算法的核心思想是判断一个对象是否可达,因为一旦这个对象不可达就可以立刻被 GC 回收了。

2024-02-06 15:28:38 1481 2

原创 TCP TIME_WAIT 过多怎么处理

TCP 断开连接四次挥手过程中,主动断开连接的一方,在第四次挥手(回复 ACK 报文)后,会进入 TIME_WAIT 状态,等待 2*MSL 后才进入 CLOSE 状态。RFC793 定义 MSL 为 2 分钟,但实际应用中常用的是30秒,1分钟和2分钟等。Linux 内核通常硬编码为 30 秒。

2024-02-02 11:20:59 1037

原创 认识 SYN Flood 攻击

SYN Flood 是互联网上最原始、最经典的 DDoS(Distributed Denial of Service)攻击之一。SYN 报文指的是 TCP 协议中的 Synchronize 报文,是 TCP 三次握手过程中的首个报文。让我们先来了解一个正常的TCP三次握手过程。

2024-02-01 17:07:30 963

原创 MySQL 聚集与非聚集索引

聚集索引(Clustered Index)也叫聚簇索引,一般以主键建立索引。在 InnoDB 中如果没有定义主键,会选择第一个非空唯一索引来代替。如果没有这样的索引,InnoDB 会自动生成一个不可见的列名为 ROW_ID,索引名为 GEN_CLUST_INDEX 的聚簇索引,该列是一个 6 字节的自增数值,随着插入而自增。聚集索引(Clustered Index)的索引和表数据放在一个文件,行数据存储存在索引树叶子结点上,通过索引可直接获得行数据。

2024-01-27 13:36:45 715

原创 MySQL 联合索引

联合索引指建立在多个列上的索引。MySQL 可以创建联合索引(即多列上的索引)。一个索引最多可以包含 16 列。联合索引可以测试包含索引中所有列的查询,或仅测试第一列、前两列、前三列等等的查询。如果在索引定义中以正确的顺序指定列,则复合索引可以加快对同一表的多种查询的速度。下面是一个联合索引的例子。name 索引是针对 last_name 和 first_name 列的索引。该索引可加速查询。这些查询为 last_name 和 first_name 值的组合。

2024-01-26 12:40:15 766

原创 MySQL ORDER BY 实现原理

如果当 sort buffer 空间无法容纳我们需要排序的数据时,这时会采用另外一种临时文件的方式进行排序,临时文件排序采用归并排序的算法,首先会把需要排序的数据拆分到多个临时文件里同步进行排序操作,然后把多个排好序的文件合并成一个结果集返回给客户端,不过在临时文件里排序相对于在 sort buffer 里排序来说,性能会慢很多,因为一个是在内存里操作,一个是在磁盘里操作。总的来说,MySQL 的 ORDER BY 实现原理是复杂的,它依赖于查询优化器的决策,可能涉及索引排序、内存排序和磁盘排序等策略。

2024-01-25 09:23:32 1190

原创 二叉树的直径(LeetCode 543)

具体而言,在计算当前二叉树的最大深度时,可以先递归计算出其左子树和右子树的最大深度,然后在 O(1) 时间内计算出当前二叉树的最大深度。如图我们可以知道路径 [9, 4, 2, 5, 7, 8] 可以被看作以 2 为根,从其左子树向下遍历的路径 [2, 4, 9] 和从其右子树向下遍历的路径 [2, 5, 7, 8] 拼接得到。知道了如何求解二叉树的高度之后,那么在递归搜索过程中记录当前结点作为根结点的最长路径。遍历每个结点作为根结点的最长路径上的结点数,其最长路径结点数等于其左子树与右子树高度和加 1。

2024-01-19 12:51:08 382

原创 合并K个升序链表(LeetCode 23)

这个方法和前两种方法的思路有所不同,我们需要维护当前每个链表没有被合并的元素的最前面一个,kkk 个链表就最多有 kkk 个满足这样条件的元素,每次在这些元素里面选取 val\textit{val}val 属性最小的元素合并到答案中。第二次合并后,结果链表的长度为 2n,第 i 次合并后,结果链表的长度为 in。考虑优先队列中的元素不超过 k 个,那么插入和删除的时间代价为 O(log⁡k),这里最多有 kn 个结点,对于每个结点都被插入删除各一次,故总的时间代价为 O(kn*log⁡k)。

2024-01-18 20:36:48 913

原创 排序链表(LeetCode 148)

寻找链表的中点可以使用快慢指针的做法,快指针每次移动 222 步,慢指针每次移动 111 步,当快指针到达链表末尾时,慢指针指向的链表节点即为链表的中点。给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表。递归栈空间复杂度为 O(logn),不考虑的话为 O(1)。将两个排序后的子链表合并,得到完整的排序后的链表。可参考归并排序中的归并排序思想,主要有三个步骤。」的做法,将两个有序的子链表进行合并。下面以 Golang 为例给出实现。递归对左半部分和右半部分排序。

2024-01-18 16:23:49 496

原创 ftp(1) command

FTP(File Transfer Protocol)是一种用于在计算机之间传输文件的标准网络协议。ftp 则是 FTP 服务的命令行客户端,用于与 FTP 服务器进行交互。

2024-01-12 08:51:58 812

原创 MobaXterm SSH 免密登录配置

MobaXterm 是一个功能强大的终端模拟器和远程访问工具,特别适用于 Windows 操作系统。它集成了多种网络工具和支持多种远程协议,提供了一个统一的界面,简化了对远程服务器和网络设备的管理和访问。MobaXterm 由总部位于法国图卢兹的软件公司 Mobatek 开发运营。终端模拟器: MobaXterm 提供了先进的终端模拟功能,支持多标签页,可以同时连接多个远程主机。远程访问: 支持 SSH、Telnet、RDP、VNC 等常见的远程协议,使用户可以方便地连接到远程服务器和计算机。

2024-01-05 11:18:20 1384

原创 搜索二维矩阵 II(LeetCode 240)

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。

2024-01-04 09:28:59 499

原创 旋转图像(LeetCode 48)

其次这是一个特殊的二维矩阵,列数和行数是相等的,通常称之为方阵。你必须在「原地」旋转图像,这意味着你需要直接修改输入的二维矩阵。上一步操作的是最外层的一层 环,我们只需要一层层往里执行相同的操作,最终即可完成整个矩阵的旋转。给定一个 n × n 的二维矩阵 matrix 表示一个图像。我们需要遍历矩阵的所有元素,除了中间的那个元素。假设矩阵是 n*n 的,那么我们对 n/2 个环执行旋转即可完成。所谓的旋转,实际上是将每一位移动到下一个位置。观察上图,我们可以由外到内,一层一层地旋转。

2024-01-03 11:30:57 439

原创 go mod 命令详解

从 Go 1.13 开始,模块将是包管理的默认模式。一个模块是 Go packages 的集合,定义在项目根目录下的 go.mod 文件。go.mod 文件还定义了模块的依赖项,这些是项目成功构建所需的其他模块。通过 go get 命令可以添加依赖:将依赖项添加到 go.mod 文件,并将依赖项的版本信息记录在 go.sum 文件中。(4)添加缺少的模块并删除未使用的模块,一般用来更新 go.mod 和 go.sum 文件。go mod 命令是与 Go 模块相关的命令行工具,提供对模块的访问和操作。

2023-12-29 20:18:17 629

原创 缺失的第一个正数(LeetCode 41)

以题目中的示例二 [3, 4, -1, 1] 为例,恢复后的数组应当为 [1, -1, 3, 4],我们就可以知道缺失的数为 2。我们可以对数组进行一次遍历,对于遍历到的数 x=nums[i],如果 x∈[1,n],我们需要将 x 放在数组中的 x−1 的位置,因此交换 nums[i] 和 nums[x−1],这样 x 就出现在了正确的位置。由于我们只在意 [1,n] 中的数,因此我们可以先对数组进行遍历,把不在 [1,n] 范围内的数修改成任意一个大于 n 的数(例如 n+1)。

2023-12-28 12:53:22 953

原创 除自身以外数组的乘积(LeetCode 238)

可以先计算给定数组所有元素的乘积,然后对数组中的每个元素 x,将乘积除以 x 求得除自身值以外的数组乘积。给你一个整数数组 nums,返回数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。这增加了这个问题的难度。我们不必将所有数字的乘积除以给定索引处的数字得到相应的答案,而是可以利用索引处左侧的所有数字乘积和右侧所有数字的乘积相乘得到答案。O(n^2),需要两层遍历,第一层为遍历数组中的每一个元素,第二层是遍历数组中除当前元素的其他所有元素。

2023-12-27 19:35:33 989

原创 合并区间(LeetCode 56)

请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。如果我们按照区间的左端点排序,那么在排完序的列表中,可以合并的区间一定是连续的。如果当前区间的左端点在数组 merged 中最后一个区间的右端点之后,那么它们不会重合,我们可以直接将这个区间加入数组 merged 的末尾;首先,我们将列表中的区间按照左端点升序排序。否则,它们重合,我们需要用当前区间的右端点更新数组 merged 中最后一个区间的右端点,将其置为二者的较大值。我们用数组 merged 存储最终的答案。

2023-12-27 15:34:58 1042

原创 最小覆盖子串(LeetCode 76)

在滑动窗口类型的问题中都会有两个指针,一个用于「延伸」现有窗口的 r 指针,和一个用于「收缩」窗口的 l 指针。当窗口包含 t 全部所需的字符后,如果能收缩,我们就收缩窗口直到得到最小窗口。我们可以用一个哈希表表示 t 中所有的字符以及它们的个数,用一个哈希表动态维护窗口中所有的字符以及它们的个数,如果这个动态表中包含 t 的哈希表中的所有字符,并且对应的个数都不小于 t 的哈希表中各个字符的个数,那么当前的窗口是「可行」的。本问题要求我们返回字符串 s 中包含字符串 t 的全部字符的最小窗口。

2023-12-26 14:39:39 1073

原创 Golang 泛型实现原理

泛型(Generics)是 Go 语言在较早版本缺失的一个特性,直到 Go 1.18 版本中才引入了泛型。泛型提供了一种更灵活、更通用的方式来编写函数和数据结构,以处理不同类型的数据,而不必针对每种类型编写重复的代码。

2023-12-23 19:39:51 1758 3

原创 Golang make vs new

在 Go 语言中,make 和 new 是两个用于创建对象的内建函数,它们有不同的用途和适用范围。make是 Go 的内置函数,「只用于」创建(分配内存并初始化) slice、map 和 chan 类型的对象,并返回对象本身。// 创建一个初始长度为 5 容量也为 5 的切片// 创建一个初始长度为 0 容量也为 5 的切片// 创建一个映射// 创建一个映射,并给定一个容量提示// 创建无缓冲信道// 创建容量为 10 的有缓冲信道new。

2023-12-23 15:18:12 1114

原创 Golang 的内存管理

页堆是内存分配的核心结构体,Go 语言程序会将其作为全局变量存储,而堆上初始化的所有对象都由该结构体统一管理,该结构体中包含两组非常重要的字段,其中一个是全局的中心缓存列表 central,另一个是管理堆区内存区域的 arenas 以及相关字段。微分配器只会用于分配非指针类型的内存,上述三个字段中 tiny 会指向堆中的一片内存,tinyoffset 是下一个空闲内存所在的偏移量,最后的 tinyAllocs 会记录内存分配器中分配的对象个数。Go 的内存分配器会根据申请分配的内存大小选择不同的处理逻辑。

2023-12-21 20:14:16 1418 3

原创 二叉树的最大深度(LeetCode 104)

每次拓展下一层的时候,不同于广度优先搜索的每次只从队列里拿出一个节点,我们需要将队列里的所有节点都拿出来进行拓展,这样能保证每次拓展完的时候队列里存放的是当前层的所有节点,即我们是一层一层地进行拓展,最后我们用一个变量 height 来维护拓展的次数,该二叉树的最大深度即为 height。具体而言,在计算当前二叉树的最大深度时,可以先递归计算出其左子树和右子树的最大深度,然后在 O(1) 时间内计算出当前二叉树的最大深度。叉树的「最大深度」是指从根节点到最远叶子节点的最长路径上的节点数。

2023-12-18 12:00:18 998

原创 滑动窗口最大值(LeetCode 239)

因为堆不支持删除指定的元素,删除元素只能将堆顶的元素弹出,所以在移动窗口时,左边离开窗口的元素不着急从堆中删除,而是当堆顶元素不在窗口中时,不断地移除堆顶的元素,直到堆顶的元素出现在滑动窗口中。与方法一不同的是,在方法二中我们使用的数据结构是双向的,因此「不断从队首弹出元素」保证了队列中最多不会有超过 k+1 个元素,因此队列使用的空间为 O(k)。为了方便判断堆顶元素与滑动窗口的位置关系,我们在堆中存储二元组 (num, index),堆的元素是下标 index,权重是下标对应的值 num。

2023-12-15 15:59:51 867

原创 和为K的子数组(LeetCode 560)

但是如果我们知道 [j,i] 子数组的和,就能 O(1) 推出 [j−1,i] 的和,因此这部分的遍历求和是不需要的,我们在枚举下标 j 的时候已经能 O(1) 求出 [j,i] 的子数组之和。O(n),其中 n 为数组的长度。我们遍历数组的时间复杂度为 O(n),中间利用哈希表查询删除的复杂度均为 O(1),因此总时间复杂度为 O(n)。所以,当我们考虑以 i 结尾和为 k 的连续子数组个数时,只需要统计有多少个前缀和为 pre[i] - k (即 pre[j - 1])的个数即可。

2023-12-12 15:37:39 833

原创 找到字符串中所有字母异位词(LeetCode 438)

O(m+(n−m)×Σ),其中 n 为字符串 s 的长度,m 为字符串 p 的长度,Σ 为所有可能的字符数。因为字符串 p 的异位词的长度一定与字符串 p 的长度相同,所以我们可以在字符串 s 中构造一个长度为与字符串 p 的长度相同的滑动窗口,并在滑动中维护窗口中每种字母的数量;当窗口中每种字母的数量与字符串 p 中每种字母的数量相同时,则说明当前窗口为字符串 p 的异位词。当字符串 s 的长度小于字符串 p 的长度时,字符串 s 中一定不存在字符串 p 的异位词。不考虑答案输出的顺序。

2023-12-11 17:39:13 868

原创 无重复字符的最长子串(LeetCode 3)

给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。s 由英文字母、数字、符号和空格组成。

2023-12-08 17:33:42 399

原创 相交链表(LeetCode 160)

当链表 headA 和 headB 都不为空时,创建两个指针 pA 和 pB,初始时分别指向两个链表的头节点 headA 和 headB,然后将两个指针依次遍历两个链表的每个节点。然后开始从当前位置同时遍历两个链表,当遍历到的链表的节点相同时,则这个节点就是第一个相交的节点。从头开始遍历第一个链表,遍历第一个链表的每个节点时,同时从头到尾遍历第二个链表,看是否有相同的节点,第一次找到相同的节点即第一个交点。若两链表相交,则循环出栈,直到遇到两个出栈的节点不相同,则这个节点的后一个节点就是第一个相交的节点。

2023-12-06 14:17:43 1068

原创 三数之和(LeetCode 15)

给你一个整数数组 nums,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!= k ,同时还满足 nums[i] + nums[j] + nums[k] == 0。时间复杂度:双指针移动的复杂度是 O(n),再加上外能循环的复杂度 O(n),所以总的时间复杂度是。在这之后,我们还需要使用哈希表进行去重操作,得到不包含重复三元组的最终答案,还会消耗了大量的空间。我们可以将三元组元素拼成一个字符串写入哈希表,然后遍历所有三元组,去掉重复的三元组。

2023-12-06 09:24:40 950

原创 最长连续序列(LeetCode 128)

但仔细分析这个过程,我们会发现其中执行了很多不必要的枚举,如果已知有一个 x,x+1,x+2,⋯ ,x+y 的连续序列,而我们却重新从 x+1,x+2 或者是 x+y 处开始尝试匹配,那么得到的结果肯定不会优于枚举 x 为起点的答案,因此我们在外层循环的时候碰到这种情况跳过即可。增加了判断跳过的逻辑之后,时间复杂度是多少呢?我们考虑枚举数组中的每个数 x,考虑以其为起点,不断判断 x+1,x+2,⋯x+1, x+2,⋯ 是否存在,假设最长匹配到了 x+y,其长度为 y+1,我们不断枚举并更新答案即可。

2023-12-04 14:47:44 905

原创 GORM gorm.DB 对象剖析

GORM 是一个流行的 Golang ORM 库。类似于 Java 生态里大家听到过的 Mybatis、Hibernate、SpringData 等。GORM 由国人开发,中文文档齐全,对开发者友好,支持主流关系型数据库。MySQLSQL ServerPostgreSQLSQLite关联 (拥有一个,拥有多个,属于,多对多,多态,单表继承)钩子(before/after create/save/update/delete/find)支持 Preload、Joins 的预加载。

2023-12-01 17:56:07 1101 2

原创 MySQL 批量插入记录报 Error 1390 (HY000)

MySQL 服务端之所以报 Error 1390 (HY000) 错误,原因是不允许一次插入过多的记录。更深层次的原因是 MySQL SQL 语句的占位符数量有上限,最大值为 16bits 无符号整数的最大值(65535)。该错误属于 MySQL 服务端错误,可惜的是,官方文档并未给出详细的错误原因,只给出了错误码的简短描述。如果是 INSERT 语句,插入 n 条记录,每条记录有 m 列,则要求 m*n < 65535。既然不允许一次插入太多记录,那么可以改为分批插入,而不是一次性插入所有数据。

2023-11-25 17:29:01 940

原创 一文读懂 Linux 网络 IO 模型

如果文件描述符是阻塞的,没有数据可读写时,进程会阻塞在读写函数那里,程序就没办法继续往下执行。select 实现多路复用的方式是,将已连接的 Socket 都放到一个文件描述符集合,然后调用 select 函数将文件描述符集合拷贝到内核里,让内核来检查是否有网络事件产生,检查的方式很粗暴,就是通过遍历文件描述符集合的方式,当检查到有事件产生后,将此 Socket 标记为可读或可写, 接着再把整个文件描述符集合拷贝回用户态里,然后用户态还需要再通过遍历的方法找到可读或可写的 Socket,然后再对其处理。

2023-11-21 21:01:58 459 1

原创 一文读懂 Linux mmap 内存映射

mmap(memory map)即内存映射,用于将一个文件或设备映射到进程的地址空间,或者创建匿名的内存映射。请注意,虽然 mmap() 最初是为映射文件而设计的,但它实际上是一个通用映射工具。它可用于将任何适当的对象(例如内存、文件、设备等)映射到进程的地址空间。以文件映射到内存为例,实现这样的映射后,进程虚拟地址空间中一段内存地址将与文件磁盘地址一一对应,进程就可以采用指针的方式读写这段内存,系统会自动回写脏页到对应的磁盘文件。

2023-11-20 15:03:43 308 2

原创 go test 命令详解

go test 是 Go 用来执行测试函数(test function)、基准函数(benchmark function)和示例函数(example function)的命令。执行 go test 命令,它会在*_test.go文件中寻找 test、benchmark 和 example 函数来执行。测试函数名必须以 TestXXX 开头,基准函数名必须以 BenchmarkXXX 开头,示例函数必须以 ExampleXXX 开头。// test 测试函数// benchmark 基准函数。

2023-11-16 11:21:14 581

原创 Golang Gin 接口返回 Excel 文件

前端实现通常意味着使用JavaScript库或框架来生成Excel文件,例如使用开源库如SheetJS的xlsx.js或者使用浏览器内置的API,如Blob对象和FileSaver.js来生成Excel文件。一种常见的做法是,前端触发数据导出请求,将请求发送到后台,后台处理数据生成Excel文件,然后将生成的Excel文件发送回前端以供用户下载。一些应用可能会同时在前端和后台实现导出功能,以提供更灵活的选项。如果你的数据导出不涉及复杂的数据处理、数据权限控制或数据来源的保护,你可以考虑在前端实现数据导出。

2023-10-31 14:50:04 1016 4

原创 MySQL CHAR 和 VARCHAR 的区别

在 MySQL 中,CHAR 和 VARCHAR 是两种不同的文本数据类型,CHAR 和 VARCHAR 类型声明时需要指定一个长度,该长度指示您希望存储的最大字符数。例如,CHAR(30) 最多可以容纳 30 个字符。它们虽然相似,但存在一些重要的区别。

2023-10-31 14:13:32 201

原创 MySQL 主从复制原理与问题

对应的,主库会启动一个 log dump 线程,根据传过来的(file,pos)在本地的binlog中查找,并把剩下的 binlog 发送给slave。主节点会为每一个从节点创建一个 dump 线程。因为如果主节点有太多的从节点,就会损耗一部分性能用于 replication ,那么我们可以让 3~5 个从节点连接主节点,其它从节点作为二级或者三级与从节点连接。当主节点有多个从节点时,主节点会为每一个当前连接的从节点建一个 log dump 线程,而每个从节点都有自己的 I/O 线程和 SQL 线程。

2023-10-19 14:13:14 405

原创 MySQL 锁

因为是插入操作,这时会判断插入的位置已经被事务 A 加了间隙锁,于是事物 B 会生成一个插入意向锁,然后将锁的状态设置为等待状态(PS:MySQL 加锁时,是先生成锁结构,然后设置锁的状态,如果锁状态是等待状态,并不是意味着事务成功获取到了锁,只有当锁状态为正常状态时,才代表事务成功获取到了锁),此时事务 B 就会发生阻塞,直到事务 A 提交了事务。意向共享锁和意向排他锁是表级锁,不会和行级的共享锁和排他锁发生冲突,而且意向锁之间也不会发生冲突,只会和共享表锁(LOCK TABLES …

2023-10-17 17:59:29 270

原创 MySQL Cluster 简介

MySQL Cluster 是官方推出的基于 NDB(Network DataBase)存储引擎的高可用、可伸缩的分布式数据库系统。高可用:MySQL Cluster 具有内置的高可用性功能,可以自动检测和恢复故障。它支持故障检测和节点恢复,以确保集群中的数据和服务可用性。分布式存储:NDB 存储引擎支持将数据分布在多个节点上,实现了数据的分布式存储。这意味着数据可以水平扩展,从而提高了存储容量和性能。

2023-10-07 21:07:13 633

tinyxml2+示例代码+介绍文档

资源包含2015.9.23从官网下载的tinyxml2的源码和自己编写的示例代码还有介绍文档,容易上手。官网的示例代码和文档晦涩难懂,才自己整理。

2015-09-26

TinyXML2.rar

C++轻量XML文件解析库!用于C++项目中进行XML文件的读取和创建!使用方法见本人blog!

2015-03-14

Voronoi Diagram维诺图

内包括C#实现的Voronoi Diagram源码,可执行程序和实验报告,请用VS2012或以上版本打开原工程文件。

2015-03-02

C版六中常见排序算法

C语言实现冒泡排序、快速排序、选择排序、堆排序、简单插入排序和希尔排序,并附上代码注释

2013-11-26

C语言版本Linux环境下MD5加密函数

C语言版本Linux环境下MD5加密函数,需要在Linux换进下运行。经测试验证,完全正确,内附带使用说明,谢谢

2013-11-05

C语言MD5算法实现

C语言实现MD5,经测试验证,散列过程完全正确,可供开发者使用!

2013-10-24

C#简单词法分析器

用C#编写的词法分析器,简单实用,适合上交编译原理实验作业,并附有实验报告,用VS2010即可打开原工程.绝对实用!

2013-05-06

C#编写代码生成器源码

C#编写的可连接数据库,进行模板代码生成器,为源码,用VS2010打开。

2013-04-04

JSP连接数据库简单留言板实验报告

贴有源码,JSP连接MySql数据库制作的简易的留言板,并附上实验报告

2013-03-27

HTML 如何设置图片宽高分别为原宽高的不同比例?

2020-08-22

Google C++编程风格指南中6.10节流中不支持字符串操作符重新排序 什么意思

2018-08-05

5.5.50-MariaDB的索引为什么在 where in子句中无法生效,MySQL可以?

2018-07-07

C++模板元编程和编写模板有什么区别?

2018-06-17

g++ -S将源码编译成汇编代码,使用的是哪个工具?

2018-06-11

从长度为n的数组中找出同时满足下面两个条件的所有元素,时间复杂度为O(n)。

2018-05-28

为什么C++局部数组变量地址间隔是16字节的倍数?

2018-05-17

缓冲溢出,为什么不报错?

2018-05-16

RLF、HRLF控制字符到底是什么

2018-05-10

printf关于浮点数的四舍五入的奇怪问题?

2018-05-09

stringstream的输入与输出的用法

2018-03-19

使用JS如何获取剪贴板内容

2018-03-06

Linux命名管道为什么叫FIFO?

2018-02-07

Linux下printf与wprintf不能同时使用?

2018-01-15

C标准库函数setvbuf的名称全称

2018-01-15

mysql count distinct 加条件

2017-06-15

awk如何获取除最后一行的所有行?

2017-05-19

rz命令如何上传文件夹

2017-05-07

CSS浮动为什么不会遮盖同级元素

2015-09-17

Linux下系统调用execl会等待一段时间才执行指定的可执行程序?

2015-09-11

为什么 Go range slice 时通过下标和值拷贝的性能是一样的?

2022-03-17

反向代理的上游服务指的是什么?

2021-03-12

Golang 接口类型可以有数据成员吗

2020-12-02

GoLand 如何自动批量换行

2020-10-07

Golang 如何进行标准错误输出

2019-12-24

git branch -dr origin/<branchname> 无法删除远端分支

2019-09-16

为什么 Golang 中序列化与反序列的函数一般命名为 marshal 与 Unmarshal 呢?

2019-06-26

golang main包可以被import吗

2019-06-11

golang小数默认是float32还是float64?

2019-05-28

golang const 可以修饰函数形参吗

2019-05-28

ldconfig命令全称是什么呢?

2019-04-02

golang的struc成员后跟字符串有什么作用?

2019-03-15

Linux中 链接器 ld 命令的全称是什么英文单词?

2019-03-12

ssh命令默认端口如何查看

2019-02-15

ssh客户端为什么不指定端口也可以登录成功

2019-02-15

C/C++的预处理文件的后缀为什么约定为.i

2019-01-24

go为什么不能获取字符串某个字符地址?

2019-01-13

date命令将时间戳转为可读时间为什么需要加@符号

2018-12-06

GNU C++定义对象时对象名称被括号包围且前面有个下划线是什么意思

2018-10-09

git merge可以操作远端分支吗?

2018-08-16

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

TA关注的人

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