自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

AndrewYZWang的博客

keep life simple! stupid

  • 博客(645)
  • 资源 (24)
  • 收藏
  • 关注

原创 Redis解读

Redis简介Redis解读

2022-05-13 14:07:51 268 1

原创 自己开源项目汇总

从零构建cmake管理的live555开源工程代码仓库:live555-cmake视频教程:live555-cmake

2020-11-17 17:28:51 394

原创 linux系列文章

linux文章汇总VIMbashMakefileubootu-boot编译过程分析linuxLinux系统编程Linux/UNIX网络编程

2019-11-09 22:07:43 834

原创 linux开发常用工具集

工具集 – linuxMarkdown 编辑器 – TyporaGit版本管理软件 – SmartGitDiff 比较软件 – Meld Diff 差异查看器代码编辑器 – Source Insight代码查看 – Visual Studio Code抓包 – WireShark截图软件-- Shutter串口软件 – PUTTY桌面壁纸软件 – Wallch浏览器 – ...

2019-03-05 22:51:24 685

原创 数据库的并发控制

但对于数据库而言,客户端可以以任意顺序获取锁,因此数据库必须检测并解决死锁,这是一个图问题。在乐观并发控制中,事务在冲突时无法继续,这对应用程序来说并不友好,因为它们只能不断重试。涉及I/O操作,我们可以通过在等待I/O时释放锁来进一步优化,以允许其他事务进入,并让只读事务退出。然而,单个写者仍然不足,因为事务的生命周期由客户端控制,可能任意延长。在现实中,这些步骤可以并行运行,因此需要序列化共享的KV结构。这种方法的用处有限,因为写者之间没有并发能力,且长时间运行的事务会导致读者和写者互相阻塞。

2025-05-05 22:13:42 806

原创 数据库的原子事务

简单的做法是一次迭代并逐个删除键,但这会将整个表读入内存并在删除前反复更新节点,做了一些无用的工作。在我们的案例中,所有内容使用单一的B+树,我们可以实现一个范围删除操作,无需查看即可释放具有特定范围的所有叶节点。:在任何排序的数据中,邻近的键可能共享一个公共前缀。:写时复制在一次更新中从叶节点到根节点复制节点,这对于多键更新来说不是最优的,因为中间树的节点在一个事务内分配、更新一次然后被删除。另一种方法是通过日志实现原子性,在写时复制树中,更新由根指针捕获,而在原地更新中,则需要日志来捕获更新。

2025-05-05 22:11:19 921

原创 数据库的二级索引

行和列作为KV对。范围查询B+树迭代器。保持顺序的编码。二级索引索引选择。需要一个事务性接口。

2025-05-05 22:08:43 868

原创 数据库的范围查询

下一步将是添加二级索引,这实际上就是额外的表结构,用于加速某些类型的查询。例如,一个二级索引可以用来快速查找符合特定条件的所有记录,而不需要遍历整个主表。为了确保正确的顺序,正半部分与负半部分交换,这仅仅是翻转最高有效位。我们的B+树处理的是任意字节的字符串键,但列可以是其他类型的数据,如数字,而且键可以是多个列。为了在节点内找到当前键的兄弟键,需要知道当前键的位置。另一种方法是选择一个特殊的序列化格式,使得生成的字节能够反映排序顺序。有两种编码带有长度的字符串的方式,一种是在前面添加长度,这需要解码;

2025-05-05 22:03:53 759

原创 于键值(KV)的表

const (TYPE_BYTES = 1 // 字符串(任意字节)TYPE_INT64 = 2 // 整数;64位有符号TYPE_BYTES表示字符串类型,可以存储任意字节。TYPE_INT64表示整数类型,使用64位有符号整数。// 用户定义的部分Name string // 表名Types []uint32 // 列类型Cols []string // 列名PKeys int // 主键列的数量// 前 `PKeys` 列是主键// 不同表的自动分配的 B 树键前缀。

2025-04-28 00:04:44 725

原创 空闲列表:回收和再利用

高效的内存管理:自由列表能够自我维护,并且支持快速分配和释放页面。与写时复制的兼容性:通过追加写入的方式避免覆盖数据,减少了崩溃恢复的复杂性。灵活性:可以选择外部链表或嵌入式链表,根据性能和存储需求进行权衡。这种设计为数据库系统中的磁盘空间管理提供了一种优雅的解决方案。在这一节中,我们详细讨论了自由列表(Free List)的实现方法。自由列表是一种用于管理未使用页面的数据结构,它通过链表的形式组织页面编号,并支持高效的分配和回收操作。以下是对自由列表实现的逐步分析和总结。自由列表接口设计。

2025-04-24 23:34:01 848

原创 仅追加KV数据库

在本章中,我们将创建一个基于文件的键值存储(KV Store),其核心是一个**写时复制(Copy-on-Write, CoW)B+ 树**。这种设计的目标是实现数据的持久性和原子性。

2025-04-23 00:12:30 964

原创 B+树删除和测试

通过实现合并逻辑,我们可以优化 B+ 树的存储空间利用率。

2025-04-20 22:46:58 932

原创 B+树节点与插入操作

所有的B+树节点大小相同,这是为了后续使用自由列表机制。即使当前阶段不处理磁盘数据,一个具体的节点格式仍然是必要的,因为它决定了节点的字节大小以及何时应该分裂一个节点。

2025-04-20 21:57:41 877

原创 B树的异常恢复

叶节点存储实际数据所有的实际数据都存储在叶节点中,这使得查询路径更加一致和简单。内部节点仅存储引导键内部节点的键用于划分子树的范围,帮助快速定位目标数据所在的叶节点。高度平衡B+树的高度始终保持平衡,确保查找、插入和删除操作的时间复杂度为Ο(log 𝑁)。高效的范围查询由于所有叶节点通过指针链接在一起,范围查询变得非常高效。例如,查询[4, 9)范围内的所有数据时,只需遍历相关的叶节点。空间利用率高每个节点可以存储多个键和子节点,减少了树的高度,从而降低了磁盘访问次数。扩展B树。

2025-04-20 21:56:47 976

原创 数据库基础-B+树

日志结构存储(如LSM-tree)通过合并操作摊销了更新成本,并通过多级结构进一步优化了写放大效应。高效的写入性能:更新被缓冲在小文件中,避免频繁重写整个数据集。可控的写放大效应:通过多级合并,减少不必要的磁盘写入。灵活性:可以根据具体应用场景调整层级数量,权衡写放大效应和查询性能。B+树B+树适用于需要频繁更新的场景,但在磁盘上的更新效率较低,并且空间复用的问题需要额外处理。LSM-treeLSM-tree 解决了许多上一章提到的挑战,例如如何高效更新基于磁盘的数据结构以及如何复用空间。

2025-04-19 23:00:38 952

原创 容器技术解析:容器网络

随着云计算的发展,基础资源层的弹性伸缩问题得到了解决。然而,PaaS层应用如何随基础资源层的变化而快速、批量部署成为新的挑战。容器技术应运而生,它不仅提供了轻量级的虚拟化方案,还极大地简化了软件交付流程。本文将探讨容器技术的核心概念及其网络实现机制。

2025-04-17 21:00:54 927

原创 理解 iptables 的表与链

iptables

2025-04-16 20:07:22 804

原创 从物理机到虚拟化:构建更灵活的数据中心

在当今快速发展的信息技术领域,传统的本地服务器面临着诸多挑战。本文将探讨这些问题,并介绍通过虚拟化技术,特别是 qemu-kvm 和 TUN/TAP 技术,如何解决这些难题,从而为数据中心带来更高的灵活性和效率。

2025-04-16 16:48:40 393

原创 数据库的基本原则

SQL几乎成为了数据库的代名词,但它实际上只是数据库的一个用户界面,并不是数据库的核心。通过KV接口,你可以获取、设置和删除单个键值对,更重要的是,可以以排序顺序列出一系列键。为了实现持久性,可以使用。手机使用SQLite而非其他格式(如JSON)存储数据的原因在于,数据库系统提供了更高级的数据完整性和可靠性保证,尤其是在处理异常情况时。:这是一种常用的组织和存储数据的方式,特别适合于磁盘上的数据结构。以下是一些关键的原则,它们构成了数据库系统的基础,并且可以帮助你通过实践来学习如何构建一个简单的数据库。

2025-04-16 00:03:08 646

原创 TCP 和 UDP 的区别

特性TCPUDP连接方式面向连接无连接可靠性可靠(重传、排序、去重)不可靠(可能丢失或乱序)数据模式字节流数据报拥塞控制有无适用场景文件传输、HTTP 等实时音视频、DNS 等import ("fmt""net"if err!= nil {

2025-04-14 15:37:35 1160

原创 ubuntu24.04LTS安装向日葵解决方案

但是会报libgconf-2-4缺失的问题,而这个库24.04软件源里面是没有的,你需要使用如下命令。输入如下命令安装,将具体版本修改成自己下载的版本。

2025-04-13 11:38:54 658

原创 go语言内存泄漏的常见形式

例如,有时我们可能会让 Go 程序的主 Goroutine 挂起,以避免程序退出。因为,虽然go中并未对字符串时候共享底层内存块进行规定,但go语言编译器/运行时默认情况下允许字符串共享底层内存块,直到原先的字符串指向的内存被修改才会进行写时复制,这是一个很好的设计,既能节省内存,又能节省CPU资源,但有时也会导致"内存泄漏"。例如如下代码,一旦调用demo就会导致将近1M内存的泄漏,因为s0只使用了50字节,但是会导致1M的内存一直无法被回收,这些内存会一直持续到下次s0被修改的时候才会被释放掉。

2025-04-12 22:43:05 1124

原创 ICMP 协议深度解析

ICMP就像网络的神经系统,通过毫秒级的信号传递维持着互联网的生命体征。理解其工作原理,是掌握网络故障排查的基石。通过接收"需要分片"差错报文(Type=3,Code=4),动态调整数据包大小。源站抑制报文(Type=4)自动触发发送端降速,防止网络拥塞。(互联网控制报文协议)是IP协议体系的"哨兵系统",专用于。利用TTL递减触发ICMP超时报文,绘制完整传输路径。携带故障包"证据",便于源端精准定位问题。通过ICMP请求/应答判断主机可达性。

2025-04-07 19:52:46 394

原创 Linux网络配置解析:当IP地址与周围环境不匹配时会发生什么?

分层处理原则:Linux严格遵循OSI模型,上层(如ICMP)依赖下层(如ARP)的完整实现。子网隔离性:跨子网通信必须依赖网关,单播广播(如ARP)无法穿透子网边界。配置强校验:网关地址必须与至少一个本地接口在同一子网,否则配置无效。

2025-04-03 10:34:14 820

原创 go语言中空结构体

在某些场景下,你并不需要通过通道传递具体的数据,而只是需要一个简单的信号机制来通知其他协程某个事件已经发生。由于空结构体不占用内存,发送和接收空结构体的操作通常比发送和接收复杂数据类型的通道更快。虽然这种差异在大多数情况下是微不足道的,但在高并发或高性能要求的场景下,这些细微的优化可能会产生显著的影响。基于这个特性,在一些特殊的场合之下,可以用做占位符使用,合理的使用空结构体,会减小程序的内存占用空间。空结构体的表象特征,就是没有任何属性,而从更深层次的角度来说,空结构体是一个不占用空间的对象。

2025-03-19 10:43:54 537

原创 什么是eBPF?

eBPF(Extended Berkeley Packet Filter)是一种内核技术,允许用户空间程序在不修改内核代码的情况下,通过加载 eBPF 程序来拦截和处理内核事件。这种技术广泛应用于网络过滤、性能分析、安全审计等多种功能。eBPF 作为一种现代操作系统中不可或缺的技术,提供了强大的监控和诊断能力,同时保持了系统的高性能和稳定性。通过其实时数据收集和非侵入式的特性,eBPF 成为了提升系统可观测性的理想选择,推动了操作系统级别的创新和发展。

2025-03-04 14:47:28 815

原创 一分钟搭建promehteus+grafana+alertmanager监控平台

平时进行后端开发,特别是微服务的后端可开发,一定少不了对接监控平台,但是平时进行一些小功能的测试又没有必要每次都手动安装那么多软件进行一个小功能的测试,这里我使用docker-compose搭建了一个promehteus+grafana+alertmanager监控平台,如果你也需要接下来的一分钟,只需要执行几个命令就可以开启你的promehteus之旅啦。仓库clone好了之后,按照如下示例执行,命令执行结束,你的 promehteus+grafana+alertmanager环境就搭建完成了。

2025-01-26 15:47:39 917

原创 [go-redis]客户端的创建与配置说明

经过上述过程,一个完整的Client算是创建完成了,后面你就可以使用Client对redis进行操作了。

2024-12-04 21:48:45 1015

原创 剖析go协程池实现原理

协程本身也是一种资源,但是协程池有自己的特殊性,那是由协程池执行任务的特殊性决定的,协程作为资源使用时其实是在消费其他资源,也就是说必须向协程池提供一个统一的接口,所有需要协程池执行的任务都需要实现该接口,然后被协程池统一调用。触发协程池工作很简单,只需要向协程池等待的通道中放入一个任务即可,当协程池关闭时,所有任务都会被立即执行,当所有任务执行完毕,协程池中的所有协程都会退出。创建协程池需要指定最大并发数,当有新的任务加入时,会立即被执行,而当没有任务时,所有协程池中的协程阻塞竞争等待通道中的"任务"。

2024-12-02 15:58:40 766 1

原创 go语言 Pool实现资源池管理数据库连接资源或其他常用需要共享的资源

Pool用于展示如何使用有缓冲的通道实现资源池,来管理可以在任意数量的goroutine之间共享及独立使用的资源。这种模式在需要共享一组静态资源的情况(如共享数据库连接或者内存缓冲区)下非 常有用。如果goroutine需要从池里得到这些资源中的一个,它可以从池里申请,使用完后归还到资源池里。提到池子,channel天然就是一个池子,而且channel是多线程安全的,所以可以直接使用管道来安全的共享资源。文章按照如下四个方面对Pool资源池的设计过程以及使用进行剖析。

2024-12-02 13:52:17 664

原创 go并发设计模式runner模式

真正运行的程序不可能是单线程运行的,go语言中最值得骄傲的就是CSP模型了,可以说go语言是CSP模型的实现。

2024-12-01 13:28:12 1446

原创 go语言切片

还可以通过对切片再次切片来缩小一个切片的大小。空切片和nil切片并不等价,空切片和nil切片是不同的。空切片是一个长度为0,容量为0的切片,而nil切片是一个未初始化的切片,它指向一个不存在的内存区域。操作超过当前切片的容量时,Go 会分配一个新的更大的底层数组,并将原有数据复制到新的数组中。当使用make指定的切片长度为0时,那么底层其实会创建一个指针指向zerobase的切片,这时的Data指向。和C++的vector一样,在进行扩容时,一般会大于实际需要的长度,在实际使用中能有效的减少扩容的次数。

2024-11-29 17:41:49 1256

原创 go结构体匿名“继承“方法冲突时继承优先顺序

在 Go 语言中,当一个结构体匿名嵌入了多个实现相同接口的结构体时,调用该接口方法时会优先选择自己实现的方法,如果自己没有实现该方法,就按照顺序从上到下找到第一个定义的方法。方法的定义顺序决定了调用哪个方法。但是为了避免歧义和提高代码的可读性,建议在设计时尽量避免这种情况,或者在外部结构体中显式地实现接口方法。

2024-11-28 10:22:52 489

原创 Redis持久化即AOF与RDB

虽然每次执行更改数据库内容的操作时,AOF都会将命令记录在AOF文件中,但是事实上,由于操作系统的缓存机制,数据并没有真正地写入硬盘,而是进入了系统的硬盘缓存。当使用Redis存储非临时文件时,一般需要打开AOF持久化来降低因进程终止导致的数据丢失,AOF可以将Redis执行的每一条写命令追加到硬盘文件中,这一过程显然会降低Redis性能,但是大部分情况下这个影响是可以接受的。这时我们希望Redis将数据从内存中以某种形式同步到硬盘中,使得重启之后数据能从硬盘中的记录中恢复数据,这以过程就是持久化的过程。

2024-11-27 15:42:24 628

原创 Redis中如何使用lua脚本-即redis与lua的相互调用

- 定义一个函数-- 函数体end-- 将函数赋值给变量end-- 函数可以借助lua提供的语法糖简写为local funcend。

2024-11-27 13:33:15 1843

原创 Redis中的消息订阅与发布

假设你的博客网站,每次有新文章时需要发送邮件通知,但是邮件发送需要一定的时间,如果采用 FIFO 的方式,可能会导致用户发送邮件的请求时间过长。所以,我们可以使用优先级队列,在队列中存储用户发送邮件的请求,并根据请求的优先级进行排序,优先级高的先发送。订阅者可以订阅一个或若干个频道(channel),而发布者可以向指定的频道发送消息,所有订阅此频道的订阅者都会收到此消息。的键优先级越高,借此特性可以实现区分优先级的任务队列。命令,当链表中没有数据时,客户端会阻塞等待。命令订阅指定名称的频道外,还可以使用。

2024-11-26 16:30:50 1088

原创 Redis过期时间和SORT命令的高级用法

在实际的开发中经常会遇到一些有时效的数据,比如限时优惠活动、缓存或验证码等,过了一定的时间就需要删除这些数据。是 Redis 中一个强大的命令,用于对列表、集合或有序集合中的元素进行排序。选项配合,就可以在不排序的情况下,获取多个外部键,相当于执行一个整合的获取操作(类似于 SQL 数据库的。因为直接使用有序集合不如集合操作强大,当排序不经常使用的时候,可以使用集合存储数据,然后使用。命令只能设置精确的秒数,不能设置到毫秒级别,如果需要精确到毫秒级别的控制,可以使用。中的值,然后再用这个值来查找相应的键。

2024-11-25 21:23:28 1415

原创 Redis事务

Redis 事务允许你一次执行多个命令,并且这些命令会按照顺序被执行,中间不会被其他客户端的请求打断。我们可以使用 Redis 事务来确保这些操作作为一个整体执行,不会被其他客户端的请求打断。之间,其他客户端修改了。

2024-11-25 17:32:10 296

原创 redis常用命令整理

如果你的博客想每页显示5篇文章,但是在实际中文章的ID可能因为人为操作而变得不连续,比如从1到100,但是第50个被删除了,那么你再翻页就找不到了。集合类型内部是使用哈希表实现的,所以可以非常快速地添加和删除元素,向两端添加元素和删除元素的复杂度都是O(1)。因此使用集合命令可以非常快速地判断一个元素是否在集合中,在网站中常使用集合来存储标签。列表类型内部是使用双向链表实现的,所以可以非常快速地插入和删除元素,向两端添加元素和删除元素的复杂度都是O(1)。

2024-11-25 16:16:17 1050

原创 go语言range的高级用法-使用range来接收通道里面的数据

在 Go 语言中,可以使用循环来遍历通道(channel)。循环会一直从通道中接收值,直到通道关闭并且所有值都被接收完毕。

2024-11-22 10:06:35 1133

DB leveldb实现解析

DB leveldb实现解析

2023-08-15

DB redis设计与实现

DB redis设计与实现

2023-08-15

Java-Interview-超全集合github上评分最高的jiva面试题

Java-Interview-超全集合github上评分最高的jiva面试题

2023-08-15

The Robert C. Martin Clean Code Collection - Martin, Robert C-.m

The Robert C. Martin Clean Code Collection - Martin, Robert C_.mobi by The Robert C. Martin Clean Code Collection - Martin, Robert C_.mobi (z-lib.org)

2023-08-15

Technical Overview of LoRa and LoRaWAN-TÜV Rheinland

Technical Overview of LoRa and LoRaWAN_TÜV Rheinland

2023-08-15

Getting Started with LevelDB-Andy Dent

Getting Started with LevelDB_Andy Dent 使用具体实例来深入了解和学习levelDB

2023-08-15

Alice and Bob: A History Of The World’s Most Famous Couple

Alice and Bob: A History Of The World’s Most Famous Couple

2023-08-07

福昕阅读器--linux最新版

福建福昕软件开发股份有限公司(Foxit Software Incorporated)是一家国际化运营的PDF电子文档解决方案提供厂商,是国际PDF协会主要成员、中国版式文档OFD标准制定成员。福昕在亚洲、美洲、欧洲和澳洲设有多家子公司,福昕直接用户已超过5.6亿,企业客户数达10万以上,遍及世界200多个国家和地区。2020年9月8日,福昕软件正式在上交所科创板挂牌上市,股票代码:688095,证券简称:福昕软件。 福昕具有完全自主产权的PDF核心技术,提供文档的生成、转换、显示、编辑、搜索、打印、存储、签章、表单、保护、安全分发管理等涵盖文档生命周期的产品技术与解决方案。 福

2020-11-14

dbeaver-ce_7.2.4_amd64最新版本|dbeaver-ce_7.2.4_amd64.deb

已下载 28.2 MB,耗时 12秒 (2,441 kB/s) 正在选中未选择的软件包 ca-certificates-java。 (正在读取数据库 ... 系统当前共安装有 203570 个文件和目录。) 准备解压 .../ca-certificates-java_20190405ubuntu1_all.deb ... 正在解压 ca-certificates-java (20190405ubuntu1) ... 正在选中未选择的软件包 java-common。 准备解压 .../java-common_0.

2020-11-14

最新GeoLite2资源整合.zip

开源的IP地理数据库GeoLiteCity,类似于GeoIPCity,但不如后者精确。免费数据库GeoLite的格式与收费数据库GeoIP相同。任何可以读取GeoIP的代码都可以读取GeoLite。其存储是MaxMind DB格式。 里面放了 GeoLite2-City.mmdb(等同于GeoLite2-Citt.dat 该文件形式已经被wireshark弃用,使用GeoLite2-City.mmdb能完全兼容),国家字段的csv文件以及城市的csv都放到里面,可以打包下载

2020-10-03

C++基础课程讲义.pdf

面向过程的结构化程序设计方法  设计思路 – 自顶向下、逐步求精。采用模块分解与功能抽象,自顶向下、分而治之。  程序结构: – 按功能划分为若干个基本模块,形成一个树状结构。 – 各模块间的关系尽可能简单,功能上相对独立;每一模块内部均是由顺序 、 选择和循环三种基本结构组成。 – 其模块化实现的具体方法是使用子程序。  优点: 有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发 和维护。  缺点:可重用性差、数据安全性差、难以开发大型软件和图形界面的应用软件 – 把数据和处理数据的过程分离为相互独立的实体。 – 当数据结构改变时,所有相关的处理过程都要进

2020-09-26

strtok的赞歌.pdf

标记解析(`Tokenizing`)是最简单也是最常见的解析问题,也就是根据分隔符把一个字符串分割为几个部分。这个定义覆盖了所有这种类型的任务。根据空白分隔符(例如`" \t\n\r"`之一)分割单词。假设有个像`"/usr/include:/usr/local/include:."`这样的路径,在冒号处将其分开,形成单独的目录。根据一个简单的换行分隔符`"\n"`把一个字符串分割为不同的行。可以使用一个配置文件,包含`value = key`格式的行,在这种情况下分隔符就是`"="`。在数据文件中以逗号分隔的值当然是以逗号为分隔符。我们可以采取两个层次的分割来分别进行处理。例如读取一个完整的配置文件,首先根据换行符进行分割,然后在每行根据=进行分割。

2020-04-19

bsearch.zip

The bsearch() function searches an array of nmemb objects, the initial member of which is pointed to by base, for a member that matches the object pointed to by key. The size of each member of the array is specified by size. The contents of the array should be in ascending sorted order according to the comparison function refer‐ enced by compar. The compar routine is expected to have two arguments which point to the key object and to an array member, in that order, and should return an integer less than, equal to, or greater than zero if the key object is found, respectively, to be less than, to match, or be greater than the array member.

2020-04-18

2.变量和参数的介绍.md

变量是什么,变量是脚本编程中进行数据表现的一种方法,说白了,变量不过是计算机为了保留数据项,而在内存中分配的一个位置或一组位置的标识或名字。

2020-01-16

RFC2616中文翻译-有待改进.odg

- 支持客户/服务器模式。 - 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有 GET、HEAD、 POST。每种方法规定了客户与服务器联系的类型不同。由于 HTTP 协议简单,使得 HTTP 服务器的程序规 模小,因而通信速度很快。 - 灵活:HTTP 允许传输任意类型的数据对象。正在传输的类型由 Content-Type 加以标记。 - 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的 应答后,即断开连接。采用这种方式可以节省传输时间。 - 无状态:HTTP 协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着 如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在 服务器不需要先前信息时它的应答就较快。

2020-01-15

Sqlite3.pdf

## 使用SQLite创建数据库 **sqlite3_open(const char \*filename, sqlite3 \**ppDb)** 如果 *filename* 参数是 NULL 或 ':memory:',那么 sqlite3_open() 将会在 RAM 中创建一个内存数据库,这只会在 session 的有效时间内持续。 如果文件名 filename 不为 NULL,那么 sqlite3_open() 将使用这个参数值尝试打开数据库文件。如果该名称的文件不存在,sqlite3_open() 将创建一个新的命名为该名称的数据库文件并打开。 简单的来说就是会打开一个数据库文件,文件不存在就会创建一个对应名字的数据库文件

2019-06-30

GDB就该这样用

因为执行脚本的时候会自动新启用一个子 bash因此在脚本中设置的ulimit -c unlimited 并不能产生核心转存储文件,需要执行可执行文件之前手动设置一下 ulimit -c unlimited ------ DEBUG 是在linux下使用dbg的记录,一下的文件是在UBUNTU 16.04上验证通过的

2019-05-04

IPC进程间通信

- IPC对象(消息队列、共享内存和信号量)存在于内核而不是文件系统中,由用户控制释放(用户管理IPC对象的生命周期),不像管道的释放由内核控制。 - IPC对象通过其标识来引用和访问,所有的IPC对象在内核空间中唯一性标识ID,在用户空间中的唯一性标识称为Key. - IPC对象是全局对象,可以通过ipcs,ipcrm等命令来查看或删除 - 每个IPC对象都由get函数创建

2019-05-03

pycharm快捷键

python IDE常用快捷键,用于日常查看使用pycharm,包含所有pycharm上的快捷键及其使用方式

2019-05-03

ubuntu搭建ftp服务器

自己的环境是ubuntu16.04搭建的ftp环境,测试能够使用,并将相应的资源上传共享也能够方便自己日后使用

2018-08-26

在ubuntu上配置ftp服务器的说明文档,亲测可用(图片)

环境是ubuntu16.04,配置ftp服务器的文档,亲测可用,所以上传分享,也可以方便自己今后再次配置使用(图片)(图片)

2018-08-26

vim配色,用于配置viim

vim配色,让自己的vim像IDE一样工作,你想要的配置里面都有,只需要去掉自己不想要的设置就行

2018-08-25

最经典的bash资料

最经典的bash   shell编程资料因为网上买不到书本,就自己打印了一本,真的非常棒

2018-08-25

linux上的可以绘制思维导图的软件

资源是可以安装在linux上的回执思维导图的软件,非常的好用

2018-08-25

自己参考网上的资源配置的vim编译器配置文件

因为ubuntu自带的vim使用的不是很方便,于是就自己动手参考网上的教程,配置了自己的vim环境, 源文件的路径和名称是  /etc/vim/vimrc 要是用户不行执行本用户使用不影响其他用户的配置可以将该文件改名为   .vimrc并放到  ~  目录下面

2018-08-25

配置samba服务器的配置文件备份

自己使用的是ubuntu16.04与自己的windows主机在在进程资料传输的时候一直使用ftp但是这样做很不方便,于是自己就折腾了一下配置了samba服务器,为了方便以后重装系统之后还需要重新配置就将配置文件进行了copy源文件的路路径和名称是  /etc/samba/smb.conf

2018-08-25

GPS-6M-模块+DMA上传

更改的原子的GPS使用串口3+DMA进行GPS的数据接收

2017-07-28

MPU6050模块STM32驱动代码

自己移植的MPU6050程序,采用宏编译将MPU9150的寄存器也加了进去可以同时支持MPU6050和MPU9150两种模块

2017-07-28

matplotlib

Matplotlib_slides.pdf

2017-01-02

空空如也

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

TA关注的人

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