自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(270)
  • 资源 (2)
  • 收藏
  • 关注

原创 【项目设计】自主HTTP服务器

本项目实现的是一个HTTP服务器,项目中将会通过基本的网络套接字读取客户端发来的HTTP请求并进行分析,最终构建HTTP响应并返回给客户端。HTTP在网络应用层中的地位是不可撼动的,无论是移动端还是PC端浏览器,HTTP无疑是打开互联网应用窗口的重要协议。该项目将会把HTTP中最核心的模块抽取出来,采用CS模型实现一个小型的HTTP服务器,目的在于理解HTTP协议的处理过程。该项目主要涉及C/C++、HTTP协议、网络套接字编程、CGI、单例模式、多线程、线程池等方面的技术。

2022-11-24 11:44:30 9686 72

原创 【项目设计】高并发内存池

文章目录项目简介内存池的概念定长内存池的实现整体框架设计threadcachethreadcache整体设计threadcache哈希桶映射对齐规则threadcacheTLS无锁访问centralcachecentralcache整体设计centralcache结构设计centralcache核心实现pagecachepagecache整体设计pagecache中获取Span申请内存过程联调threadcache回收内存centralcache回收内存pagecache回收内存释放内存过程联调大于256K

2022-03-28 22:11:37 27011 148

原创 Golang面向对象编程(三)

在Go中,接口(interface)是一种用于定义方法集合的抽象类型,接口中定义了一组方法的签名,而不包含方法的实现细节,其他类型可以通过实现接口中定义的方法来满足接口的要求。接口的实现是隐式的,类型不需要显式声明它实现了某个接口,只要类型提供了接口中定义的所有方法,就被视为实现了该接口。接口提供了一种灵活的方式来定义和使用抽象的行为,通过接口可以实现与类型无关的编程,提高代码的灵活性和可扩展性。接口的定义方式接口中定义的都是方法的签名,没有方法体,也不能有任何变量。

2024-05-16 15:33:43 722 22

原创 Golang面向对象编程(二)

封装(Encapsulation)是面向对象编程(OOP)中的一种重要概念,封装通过将数据和相关的方法组合在一起,形成一个称为类的抽象数据类型,只暴露必要的接口供外部使用。封装可以隐藏数据的实际实现细节,外部只能通过公共(public)接口来访问和修改数据,使得代码更加模块化和结构化,同时可以防止不恰当的访问和操作,提高数据的安全性。封装将相关的数据和方法组织在一起,形成了一个独立的单元,外部使用者只需关心公共接口,无需了解内部实现细节,简化了使用方式,提高了代码的可读性和可维护性。

2024-05-13 20:18:13 1015 21

原创 Golang面向对象编程(一)

Go支持面向对象编程特性,包括封装、继承和多态,但Go中没有类(class)而是基于结构体(struct)来实现OOP特性的。结构体是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体,结构体中的成员称为结构体的字段。在编程过程中,通常将一类事物的特性提取出来,形成一个结构体类型,然后基于这个结构体类型创建出多个实例。结构体定义方式Go中结构体定义的基本语法如下:// 定义结构体Age int结构体是值类型,不同结构体变量的字段是独立的,互不影响。

2024-05-10 22:00:05 1475 25

原创 Golang Map类型

在Go中,map是哈希表的引用,是一种key-value数据结构。map类型写作map[K]V,其中K和V分别对应key和value的类型。map中所有的key都是相同的类型,所有的value也是相同的类型,但key和value可以是不同的类型,value通常使用自定义类型。map内部需要通过判断两个key是否相等以确保每个键的唯一性,因此key的数据类型必须是可比较,如果key是自定义类型,则要求自定义类型中的所有字段是可比较的。

2024-05-07 20:10:40 1336 21

原创 Golang数组与切片

在Go中,数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。长度是数组类型的一部分,数组声明后长度不能动态变化,只有数组元素类型相同并且数组长度相同,才算同一种数组类型。数组创建后,如果没有对数组元素进行赋值,则保留对应元素类型的默认值(数值类型为0,string类型为"",bool类型为false,引用类型为nil)。数组的定义方式指明数组长度和元素类型,数组元素采用对应的默认值。指明数组长度和元素类型,并初始化数组元素。

2024-05-04 17:02:34 1279 24

原创 Golang错误处理机制

Go的类型系统会在编译时捕获很多错误,但有些错误只能在运行时检查,比如除零错误、数组访问越界、空指针引用等,这些运行时错误会引起panic异常。当panic异常发生时,程序会中断运行,并立即执行当前函数中的defer语句,然后程序会从调用栈中逐级返回,返回同时执行各级函数中的defer语句,直到panic被捕获或程序终止。

2024-04-30 21:44:36 1747 26

原创 Golang函数和包

运行程序后可以看到,按照main包中的导入顺序先后对db包和utils包进行了初始化,然后再对main包进行了初始化,每个包在初始化过程中先对全局变量进行了初始化,然后再调用了init函数,在所有包初始化完毕后开始执行main函数的代码逻辑。例如,下面在Go项目中创建了db、utils、main三个目录,分别用于存放db包、utils包和main包的go文件代码,并在main包中调用了db包和utils包中的函数。在Go中函数也是一种数据类型,可以将其赋值给一个变量,然后通过该变量即可对函数进行调用。

2024-04-27 16:49:03 1396 16

原创 Golang流程控制语句

在使用for range遍历string时,它会按照UTF-8编码格式解析字符串,并以Unicode字符作为迭代的单位,每次迭代都会返回字符串中的一个Unicode字符(rune)和对应的索引,无论是单字节的ASCII字符还是多字节的汉字,都会被正确地解析并返回。在执行完对应的case语句的代码块后,程序会直接退出switch控制,如果希望程序继续执行下一个case语句的代码块,可以在代码块的最后通过fallthough关键字实现switch穿透。在switch后声明的变量仅在switch语句中有效。

2024-04-24 20:40:33 1299 15

原创 Golang数据类型

Go中的每一种数据都定义了明确的数据类型,在内存中分配了不同大小的内存空间。具体来说,Go中的数据类型可分为基本数据类型和复杂数据类型。

2024-04-21 16:16:52 1251 12

原创 Golang入门基础

Go语言(又称Golang)是一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言,由罗伯特·格瑞史莫(Robert Griesemer)、罗布·派克(Rob Pike)及肯·汤普森(Ken Thompson)于2007年9月开始设计。

2024-04-18 22:55:40 1438 15

原创 MySQL知识总结(内附超详细知识框架图)

博友们,你们好!博主最近对MySQL相关的知识进行了复盘,并通过思维导图的方式提取出了MySQL的核心知识点,现将复盘结果分享给大家,希望能够对大家学习MySQL有所帮助。

2023-10-27 15:40:38 2756 18

原创 Rust所有权

所有程序在运行时都必须管理其使用计算机内存的方式,一些语言中具有垃圾回收机制,在程序运行时有规律地寻找不再使用的内存,比如C#和Java。在另一些语言中,程序员必须自行分配和释放内存,比如C/C++。而Rust则是通过所有权系统管理内存,所有权是Rust最独特的特性,它让Rust无需GC就可以保证内存安全,通过所有权系统管理内存,编译器在编译时会根据一系列的规则进行检查,如果违反了所有权规定,则程序不能通过编译。在程序运行时,所有权系统不会减慢程序的运行速度,因为所有权规则的检查是在编译时进行的。

2023-10-24 14:03:08 1345 18

原创 Rust通用编程概念

在Rust中,声明变量使用let关键字,并且默认情况下,声明的变量是不可变的,要使变量可变需要在声明变量时,在变量前面加上mut关键字。如果将上述代码中的mut关键字去掉,那么在编译代码时就会报错,报错结果就是不能对不可变的变量进行二次赋值,也就是不能对不可变的变量进行修改。

2023-10-20 09:11:50 1113 19

原创 猜数字游戏(Rust实现)

Rust团队没有把随机数字生成功能内置到标准库中,而是选择将它作为rand包(rand crate)提供给用户。Rust中的包(crate)代表了一系列源代码文件的集合,我们当前正在构建的项目是一个用于生成可执行程序的二进制包(binary crate),而我们引用的rand包则是一个用于复用功能的库包(library crate)。rand包中有一个名为Rng的trait,它定义了随机数生成器需要实现的方法集合,比如Rng中的gen_range方法可以根据指定的范围来生成随机数。

2023-10-17 18:55:56 1650 22

原创 Rust入门基础

Rust是一种通用的编程语言,它可以让每个人编写可靠且高效的软件。Rust可以用来替换C/C++,Rust和它们具有同样的性能,但是很多常见的bug在编译时就可以被消灭。Rust能够保证内存安全(无需GC),并且易于维护、调试,代码既安全又高效。

2023-10-11 11:29:04 1680 27

原创 高阶数据结构 ——— 图

文章目录图图的基本概念图的存储结构邻接矩阵邻接表图的遍历广度优先遍历深度优先遍历最小生成树Kruskal算法Prim算法最短路径单源最短路径-Dijkstra算法单源最短路径-Bellman-Ford算法多源最短路径-Floyd-Warshall算法图图的基本概念图的基本概念图是由顶点集合和边的集合组成的一种数据结构,记作 G=(V,E)G=(V, E)G=(V,E) 。有向图和无向图:在有向图中,顶点对 <x,y><x, y><x,y> 是有序的,顶点

2023-06-05 20:07:10 2588 46

原创 高阶数据结构 ——— 并查集

并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题。并查集通常用森林来表示,森林中的每棵树表示一个集合,树中的结点对应一个元素。虽然利用其他数据结构也能完成不相交集合的合并及查询,但在数据量极大的情况下,其耗费的时间和空间也是极大的。

2023-04-28 15:57:42 1516 21

原创 KMP算法

KMP算法是一种改进的字符串匹配算法,是由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此叫做KMP算法。KMP算法的核心就是利用匹配失败后的信息,尽量减少模式串与文本串的匹配次数,以达到快速匹配的目的。

2023-04-24 20:29:42 3156 28

原创 MySQL使用C语言连接

MySQL使用C语言连接

2023-02-20 14:45:03 2093 32

原创 MySQL用户管理

与Linux操作系统类似,MySQL中也有超级用户和普通用户之分。如果一个用户只需要访问MySQL中的某一个数据库,甚至数据库中的某一个表,那么可以为其创建一个普通用户,并为该用户赋予对应的权限,而不让该用户看到数据库中的其他数据,防止该用户对其他数据进行误操作。

2023-02-16 09:37:55 3292 34

原创 MySQL视图特性

视图是一个虚拟表,其内容由查询定义,同真实的表一样,视图包含一系列带有名称的列和行数据。视图中的数据并不会单独存储在数据库中,其数据来自定义视图时查询所引用的表(基表),在每次引用视图时动态生成。由于视图和基表用的本质是同一份数据,因此对视图的修改会影响到基表,对基表的修改也会影响到视图。

2023-02-13 10:35:58 1369 23

原创 MySQL事务管理

事务由一条或多条SQL语句组成,这些语句在逻辑上存在相关性,共同完成一个任务,事务主要用于处理操作量大,复杂度高的数据。比如转账就涉及多条SQL语句,包括查询余额(select)、在当前账户上减去指定金额(update)、在指定账户上加上对应金额(update)等,将这多条SQL语句打包便构成了一个事务。MySQL同一时刻可能存在大量事务,如果不对这些事务加以控制,在执行时就可能会出现问题。比如单个事务内部的某些SQL语句执行失败,或是多个事务同时访问同一份数据导致数据不一致的问题。

2023-02-09 19:10:51 5254 36

原创 MySQL索引特性

数据库表中存储的数据都是以记录为单位的,如果在查询数据时直接一条条遍历表中的数据记录,那么查询的时间复杂度将会是O(N)。索引的价值在于提高海量数据的检索速度,只要执行了正确的创建索引的操作,查询速度就可能提高成百上千倍。当一张表创建索引后,在数据库底层就会为表中的数据记录构建特定的数据结构,后续在查询表中数据时就能通过查询该数据结构快速定位到目标数据。索引虽然提高了数据的查询速度,但在一定程度上也会降低数据增删改的效率。

2023-01-31 14:57:26 2096 28

原创 MySQL内外连接

表的连接分为内连接和外连接,外连接分为左外连接和右外连接。

2023-01-25 10:16:00 15784 37

原创 MySQL复合查询

实际开发中往往需要将多张表关联起来进行查询,这就叫做多表查询,在进行多表查询时,只需要将多张表的表名依次放到from子句之后,用逗号隔开即可,这时MySQL将会对给定的这多张表取笛卡尔积,作为多表查询的初始数据源。多表查询的本质,就是对给定的多张表取笛卡尔积,然后在笛卡尔积中进行查询。所谓的对多张表取笛卡尔积,就是得到这多张表的记录的所有可能有序对组成的集合,需要注意的是,对多张表取笛卡尔积后得到的数据并不都是有意义的。

2023-01-15 10:44:42 3015 37

原创 CSDN编程竞赛 ——— 第二十一期

CSDN第二十一期编程竞赛总结

2023-01-10 18:18:21 5253 31

原创 MySQL内置函数

本文介绍了MySQL中常用的一些日期函数、字符串函数、数学函数,以及其他的一些函数。

2023-01-06 11:09:46 2873 35

原创 MySQL表的增删查改

表的增删查改简称CRUD:Create(新增),Retrieve(查找),Update(修改),Delete(删除)。CRUD的操作对象是对表当中的数据,是典型的DML(Data Manipulation Language)数据操作语言。

2023-01-02 22:02:56 3422 39

原创 学生管理系统(Python实现)

学生管理系统是为了对学校学生信息进行管理而开发的一款软件,下面我们来实现一个命令行版本的学生管理系统,该学生管理系统包括如下几个功能:新增学生信息、显示学生信息、查找学生信息、删除学生信息、学生信息存档

2022-12-27 11:21:25 2119 24

原创 MySQL表的约束

真正约束字段的是数据类型,如果插入的数据超出了对应数据类型的取值范围,那么数据将会插入失败。但是数据类型的约束很单一,为了更好的保证数据的合法性,从业务逻辑角度保证数据的正确性,MySQL中出现了表的约束,目的就是为了尽可能保证数据安全,减少用户的误操作可能性。表的约束有很多,本篇博客主要介绍如下几个:null/not null、default、comment、zerofill、primary key、auto_increment、unique key、foreign key。

2022-12-22 17:47:03 2366 31

原创 Python操作Excel

xlrd是Python处理Excel表格数据的一个模块,能够对Excel中的数据进行读取。

2022-12-16 19:42:21 5791 24

原创 MySQL数据类型

数据类型决定了存储数据时应该开辟的空间大小,决定了如何识别一个特定的二进制序列,决定了数据的取值范围等。MySQL本身是不支持bool类型的,当把一个数据设置成bool类型时,数据库会自动将其转换成tinyint(1)的数据类型,其实这个就是变相的bool类型,因为tinyint(1)只有1和0两种取值,可以分别对应bool类型的true和false。

2022-12-10 15:52:12 2684 27

原创 MySQL表的操作

表操作至少会涉及如下两类SQL语句:DDL(Data Definition Language)数据定义语言:比如建表、删表、该表、新增列、删除列等。DML(Data Manipulation Language)数据操作语言:比如插入记录、删除记录、修改记录等。本篇博客讲的是表的DDL操作,也就是操作表结构的SQL语句。

2022-12-07 10:02:36 2937 40

原创 MySQL库的操作

创建数据库的SQL如下:CREATE DATABASE [IF NOT EXISTS] db_name [[DEFAULT] CHARSET=charset_name] [[DEFAULT] COLLATE=collation_name];说明一下:SQL中大写的表示关键字,[ ]中代表的是可选项。CHARSET用于指定数据库所采用的编码格式。COLLATE用于指定数据库所采用的校验规则。注意: 如果创建数据库时未指明数据库的编码格式或校验规则,则默认使用MySQL配置文件中对应的编码格式或校验规则。

2022-12-03 20:56:41 4066 44

原创 MySQL数据库基础

数据库是按照数据结构来组织、存储和管理数据的仓库,是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。虽然单纯的使用文件也可以存储数据,但会存在如下缺点:安全性问题:数据误操作后无法进行回滚。不利于数据的查询和管理:没有将存储的数据以某种数据结构组织起来。控制不方便:数据的控制需要用户自己来完成。不利于存储海量数据:数据量越大用户操控数据的成本越高。为了解决上述问题,于是专家们设计出了更利于管理数据的数据库。

2022-11-30 09:59:59 4676 42

原创 Python库的使用

库就是别人已经写好了的代码,我们可以直接拿来用。一个编程语言能否流行起来,一方面取决于其语法是否简单方便容易学习,另一方面取决于其生态是否完备。所谓的生态就是指,该语言是否有足够丰富的库来应对各种编程场景。在编程过程中并发所有代码都需要自己写,而是要充分利用现成的库来简化开发过程,因此如果一个语言有足够丰富的库,就能够降低程序员的学习成本,提高程序的开发效率。

2022-11-28 13:37:12 3047 6

原创 CSDN编程竞赛 ——— 第十期

CSDN第十期编程竞赛总结

2022-11-26 16:13:51 2809 3

原创 Python文件操作

打开文件的方式有以下几种:| 'r' | 以读方式打开文件(默认) || 'w' | 以覆盖写方式打开文件,如果文件不存在则先创建再打开 || 'a' | 以追加写方式打开文件,如果文件不存在则先创建再打开 || 'x' | 创建文件并以写方式打开,如果文件已存在则会抛出异常 || 'b' | 以二进制方式打开文件 || 't' | 以文本方式打开文件(默认) || '+' | 打开磁盘文件进行更新(读取与写入) |

2022-11-17 13:53:12 804 11

MySQL知识总结思维导图

MySQL知识总结思维导图,压缩包内包含MySQL数据库基础、MySQL库的操作、MySQL表的操作(DDL)、MySQL数据类型、MySQL表的约束、MySQL基本查询(DML)、MySQL内置函数、MySQL复合查询、MySQL内外连接、MySQL索引特性、MySQL事务管理、MySQL视图特性、MySQL用户管理、C语言连接MySQL数据库的Xmind思维导图,以及对应导出的jpg图片,思维导图内容可以参考博主的博客:https://blog.csdn.net/chenlong_cxy/article/details/134077741?spm=1001.2014.3001.5501

2023-10-27

C++知识总结思维导图

C++知识总结思维导图,压缩包内包含C++基础、类和对象、C/C++内存管理、模板、C++的IO流、继承、多态、C++11、异常、智能指针、特殊类设计、C++的类型转换、STL的Xmind思维导图,以及对应导出的jpg图片,思维导图内容可以参考博主的博客:https://blog.csdn.net/chenlong_cxy/article/details/127166206#comments_24702593

2022-12-29

坤坤音效键盘可执行程序

Python实现坤坤音效键盘,压缩包内含有两个exe程序,KunKunKeyboard1.exe运行后会显示窗口,KunKunKeyboard2.exe运行后不显示窗口,压缩包中还包括一个说明文档,里面说明了终止程序的方式。

2022-11-04

Python基础语法PPT

Python基础语法PPT,说明了Python与C语言之间最大的两个区别,其中讲解的Python语法主要包括:Python基础知识、函数、面向对象、数据类型、条件&循环、文件操作、模块、异常,并列出了Python中常见数据类型对应的各种成员函数接口及其功能。

2022-07-10

【C++项目设计】高并发内存池.zip

本项目实现的是一个高并发的内存池,它的原型是Google的一个开源项目tcmalloc,tcmalloc全称Thread-Caching Malloc,即线程缓存的malloc,实现了高效的多线程内存管理,用于替换系统的内存分配相关函数malloc和free。该项目就是把tcmalloc中最核心的框架简化后拿出来,模拟实现出一个mini版的高并发内存池,目的就是学习tcmalloc的精华。该项目主要涉及C/C++、数据结构(链表、哈希桶)、操作系统内存管理、单例模式、多线程、互斥锁等方面的技术。 项目详解:https://blog.csdn.net/chenlong_cxy/article/details/122819562?spm=1001.2014.3001.5502

2022-05-28

空空如也

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

TA关注的人

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