自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

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

2022-11-24 11:44:30 1399 52

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

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

2022-03-28 22:11:37 18024 119

原创 MySQL表的操作

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

2022-12-07 10:02:36 147 25

原创 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 1166 41

原创 MySQL数据库基础

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

2022-11-30 09:59:59 488 40

原创 Python库的使用

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

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

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

CSDN第十期编程竞赛总结

2022-11-26 16:13:51 961 2

原创 Python文件操作

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

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

原创 文件搜索工具(Python实现)

文件搜索工具能够基于名称快速定位匹配的文件和文件夹位置,比如Everything就是Windows上的一款文件搜索工具:下面我们实现一个简单的文件搜索工具。文件搜索的步骤分为两步:需要注意的是,在搜索时并不是只在用户指定的那一级目录下进行搜索,如果该目录下存在子目录,那么还需要在该子目录下进行搜索。例如,我们在D盘下创建了一个名为TestDir的目录,该目录中的文件布局如下:当我们指定在TestDir目录下以test为关键字进行查找时,我们希望的是找出TestDir目录及其子目录下,所有包含test关键字的

2022-11-14 15:17:50 412 33

原创 Python数据类型 ——— 字典

字典(dict)是一个无序、可变和有索引的集合,字典中不允许存在重复的成员。

2022-11-11 15:05:56 203 5

原创 Python数据类型 ——— 集合

集合(set)是一个无序和无索引的集合,集合中不允许存在重复的成员。

2022-11-08 18:23:06 451 32

原创 坤坤音效键盘(Python实现)

坤坤音效键盘说明:1. 单独按下 $j、n、t、m$ 按键,会对应触发 “鸡”、“你”、“太”、“美” 音效。2. 连续按下 $jntm$ 按键,会触发 “鸡你太美” 的较长音效。3. 连续按下 $ngm$ 按键,会触发 “你干嘛” 的较长音效。4. 按下Esc按键,会触发 “鸡你太美版《澎湖湾》” 的长音效。5. 按下左Ctrl键,会触发 “鸡你太美版《想某人》” 的超长音效。6. 按下小键盘上的数字键或小数点键,停止播放音频并终止程序。

2022-11-04 10:52:50 6282 60

原创 Python数据类型 ——— 元组

元组(tuple)是一种有序且不可更改的集合,元组中允许存在重复的成员。

2022-11-02 15:06:29 396 10

原创 Python数据类型 ——— 列表

列表(list)是一种有序和可更改的集合,列表中允许存在重复的成员。

2022-10-31 15:05:11 450 38

原创 Python函数

函数的定义格式一个函数可以有一个或多个形参,也可以没有形参。一个函数中可以有一个或多个return语句,执行到return语句时函数会立即执行结束,回到调用位置。Python是动态类型语言,函数的形参和返回值都不必指定类型,因此一个函数可以支持多种不同类型的参数。多个返回值此外,Python中的一个函数可以有一个或多个返回值,当有多个值需要返回时,使用,来分隔这多个返回值。

2022-10-27 14:05:04 1141 13

原创 人生重开模拟器(Python实现)

人生重开模拟器是由VickScarlet上传至GitHub的一款简单的文字网页游戏。玩家点击“立即重开”并设置角色的初始属性后,程序就会随机为玩家生成对应的人生经历。

2022-10-24 10:50:02 38245 59

原创 Python顺序、条件和循环

Python语法规定,if语句、while语句、for语句、函数体、类定义等都不能为空,如果因为某些原因写了对应无内容的语句,就需要使用pass语句来避免语法报错。上述代码的执行结果一定是“abc”,而不会出现“bca”或“cba”等结果,这种按照顺序执行的代码就叫做顺序语句。在C/C++等其他某些语言中,负奇数取余后得到的是-1,但在Python中负奇数取余后得到的是1。Python中使用缩进来表示不同的代码块,不同级别的缩进,程序的执行效果是不同的。二、打印2,4,6,8,10。

2022-10-22 13:14:34 1407 9

原创 Python入门基础

吉多•范罗苏姆(Guido van Rossum)是一个荷兰程序员,因为他名字的前三个字母是Gui,所以大家都叫他龟叔。龟叔在1989年圣诞节的时候(当时33岁),因为在家里呆着无聊,为了打发时间于是开始了Python的开发,Python的第一个正式版本发布于1991年。1991年是一个神奇的年份,Python、万维网、Vim、Qt、第一台笔记本电脑,都诞生于1991年。

2022-10-20 16:17:59 1985 29

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

由于在学习C++的同时博主也在学习Linux系统编程、Linux网络编程以及数据库,所以从开始学习C++到现在结束已经有一年多时间了。C++是博主学习的第一个面向对象的语言,在学习过程中也是逐渐体会到了面向对象编程的种种好处,但C++相比C语言来说其语法会更加复杂,特别是继承和多态的语法(ಥ _ ಥ),以及C++11中新增的很多特性,让C++的语法变得更加复杂。下面博主将各大模块的思维导图罗列出来了,并在每张思维导图下面放上了博主的相关博客,对某一知识点有疑问的博友可以跳转阅读对应的博客。

2022-10-04 20:57:19 8295 49

原创 C++的类型转换

C语言和C++都是强类型语言,如果赋值运算符左右两侧变量的类型不同,或形参与实参的类型不匹配,或返回值类型与接收返回值的变量类型不一致,那么就需要进行类型转换。C语言中有两种形式的类型转换,分别是隐式类型转换和显式类型转换:隐式类型转换:编译器在编译阶段自动进行,能转就转,不能转就编译失败。显式类型转换:需要用户自己处理,以`(指定类型)变量`的方式进行类型转换。需要注意的是,只有相近类型之间才能发生隐式类型转换,不相近类型之间只能进行强制类型转换。

2022-10-02 17:18:09 1031 22

原创 C++智能指针

实现智能指针时需要考虑以下三个方面的问题:1. 在对象构造时获取资源,在对象析构的时候释放资源,利用对象的生命周期来控制程序资源,即RAII特性。2. 对*和->运算符进行重载,使得该对象具有像指针一样的行为。3. 智能指针对象的拷贝问题。概念说明:RAII(Resource Acquisition Is Initialization)是一种利用对象生命周期来控制程序资源(如内存、文件句柄、互斥量等等)的简单技术。

2022-09-29 09:00:15 842 31

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

CSDN编程竞赛第六期总结

2022-09-24 20:29:33 830 8

原创 C++异常

异常是面向对象语言常用的一种处理错误的方式,当一个函数发现自己无法处理的错误时就可以抛出异常,让函数直接或间接的调用者处理这个错误。throw:当程序出现问题时,可以通过throw关键字抛出一个异常。try:try块中放置的是可能抛出异常的代码,该代码块在执行时将进行异常错误检测,try块后面通常跟着一个或多个catch块。catch:如果try块中发生错误,则可以在catch块中定义对应要执行的代码块。

2022-09-24 17:22:42 937 29

原创 C++11 ——— 线程库

在C++11之前,涉及到多线程问题,都是和平台相关的,比如Windows和Linux下各有自己的接口,这使得代码的可移植性比较差。C++11中最重要的特性就是对线程进行了支持,使得C++在并行编程时不需要依赖第三方库,而且在原子操作中还引入了原子类的概念。

2022-09-21 16:57:05 1267 27

原创 C++11——— 包装器

function包装器function是一种函数包装器,也叫做适配器。它可以对可调用对象进行包装,C++中的function本质就是一个类模板。Ret:被包装的可调用对象的返回值类型。Args...:被包装的可调用对象的形参类型。包装示例function包装器可以对可调用对象进行包装,包括函数指针(函数名)、仿函数(函数对象)、lambda表达式、类的成员函数。

2022-09-18 12:13:33 757 11

原创 C++11 ——— lambda表达式

lambda表达式是一个匿名函数,恰当使用lambda表达式可以让代码变得简洁,并且可以提高代码的可读性。lambda表达式书写格式:[capture-list](parameters)mutable->return-type{statement}

2022-09-14 17:44:46 818 14

原创 C++11 ——— 可变参数模板

可变参数模板是C++11新增的最强大的特性之一,它对参数高度泛化,能够让我们创建可以接受可变参数的函数模板和类模板。在C++11之前,类模板和函数模板中只能包含固定数量的模板参数,可变模板参数无疑是一个巨大的改进,但由于可变参数模板比较抽象,因此使用起来需要一定的技巧。在C++11之前其实也有可变参数的概念,比如printf函数就能够接收任意多个参数,但这是函数参数的可变参数,并不是模板的可变参数。

2022-09-11 17:32:09 733 7

原创 C++11 ——— 类的新功能

在C++11之前,一个类中有如下六个默认成员函数:构造函数、析构函数、拷贝构造函数、拷贝赋值函数、取地址重载函数、const取地址重载函数。其中前四个成员函数最重要,后面两个成员函数一般不会用到,这里“默认”的意思就是你不写编译器会自动生成。在C++11标准中又增加了两个默认成员函数,分别是移动构造函数和移动赋值重载函数。

2022-09-09 12:24:50 742 12

原创 C++11 ——— 右值引用和移动语义

传统的C++语法中就有引用的语法,而C++11中新增了右值引用的语法特性,为了进行区分,于是将C++11之前的引用就叫做左值引用。但是无论左值引用还是右值引用,本质都是给对象取别名,左值引用就是对左值的引用,给左值取别名,通过“&”来声明,右值引用就是对右值的引用,给右值取别名,通过“&&”来声明。

2022-09-07 15:49:56 789 13

原创 C++11入门基础

在2003年C++标准委员会提交了一份技术勘误表(简称TC1),使得C++03这个名字取代了C++98成为C++11之前的最新C++标准名称。但由于C++03主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把这两个标准合并称为C++98/03标准。从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准姗姗来迟。

2022-09-04 16:03:24 1019 10

原创 特殊类设计

请设计一个类,只能在堆上创建对象;请设计一个类,只能在栈上创建对象;请设计一个类,不能被拷贝;请设计一个类,不能被继承;请设计一个类,只能创建一个对象(单例模式)

2022-08-30 14:35:40 587 13

原创 海量数据处理面试题

海量数据处理是指基于海量数据的存储和处理,正因为数据量太大,所以导致要么无法在短时间内迅速处理,要么无法一次性装入内存。对于时间问题,就可以采用位图、布隆过滤器等数据结构来解决。对于空间问题,就可以采用哈希切割等方法,将大规模的数据转换成小规模的数据逐个击破。......

2022-08-27 15:26:43 704 13

原创 哈希的应用 —— 布隆过滤器

布隆过滤器是由布隆(Burton Howard Bloom)在1970年提出的一种紧凑型的、比较巧妙的概率型数据结构,特点是高效地插入和查询。布隆过滤器其实就是位图的一个变形和延申,虽然无法避免存在哈希冲突,但我们可以想办法降低误判的概率。当一个数据映射到位图中时,布隆过滤器会用多个哈希函数将其映射到多个比特位,当判断一个数据是否在位图当中时,需要分别根据这些哈希函数计算出对应的比特位,如果这些比特位都被设置为1则判定为该数据存在,否则则判定为该数据不存在。

2022-08-25 15:08:05 614 11

原创 Reactor模式

Reactor反应器模式,也叫做分发者模式或通知者模式,是一种将就绪事件派发给对应服务处理程序的事件设计模式。

2022-08-22 19:56:54 1083 40

原创 IO多路转接 ——— select、poll、epoll

select是系统提供的一个多路转接接口。select函数的函数原型如下:参数说明:参数timeout的取值:返回值说明:select调用失败时,错误码可能被设置为:fd_set结构与sigset_t结构类似,fd_set本质也是一个位图,用位图中对应的位来表示要监视的文件描述符。调用select函数之前就需要用fd_set结构定义出对应的文件描述符集,然后将需要监视的文件描述符添加到文件描述符集当中,这个添加的过程本质就是在进行位操作,但是这个位操作不需要用户自己进行,系统提供了一组专门的接口,用

2022-08-16 16:53:38 1510 30

原创 Linux高级IO

其中,这个钓鱼场景中的各个事物都能与IO当中的相关概念对应起来,比如这里钓鱼的河对应就是内核,这里的每一个人都是进程或线程,鱼竿对应的就是文件描述符或套接字,装鱼的桶对应的就是用户缓冲区。因此张三、李四、王五他们三个人的钓鱼的效率是一样的,他们只是等鱼上钩的方式不同而已,张三是死等,李四是定期检测浮漂,而王五是通过铃铛来判断是否有鱼上钩。需要注意的是,这里问的是他们的钓鱼效率是否是一样的,而不是问他们整体谁做的事最多,如果说整体做事情的量的话,那一定是王五做得最多,李四次之,张三最少。...

2022-08-06 16:25:37 829 22

原创 DNS协议、ICMP协议、NAT技术

文章目录DNS协议DNS背景域名简介域名解析过程使用dig工具分析DNS过程浏览器中输入url后发生的事情ICMP协议ICMP功能ICMP协议格式ping命令一个值得注意的坑traceroute命令NAT技术NAT技术背景NAT IP转换过程NAPTNAT技术的缺陷NAT和代理服务器网络协议总结应用层传输层网络层数据链路层DNS协议DNS背景域名简介域名解析过程使用dig工具分析DNS过程浏览器中输入url后发生的事情ICMP协议ICMP功能ICMP协议格式ping命令一个值得注意的坑

2022-07-28 19:30:04 4867 21

原创 数据链路层协议 ——— 以太网协议

由于以太网中的所有的主机共享一个通信信道,因此在同一时刻只允许有一台主机发送数据,否则各个主机发送的数据就会相互干扰。站在系统的角度来看,这里各个主机所共享的通信信道就是一种临界资源,这个临界资源同一时刻只允许一台主机使用。......

2022-07-22 21:46:04 12239 30

原创 网络层协议 ——— IP协议

IP协议全称为“网际互连协议(Internet Protocol)”,IP协议是TCP/IP体系中的网络层协议。双方在进行网络通信时,发送的数据并不是直接从一方的传输层直接发送到了另一方的传输层,而是需要传输层将数据继续向下进行交付,在网络层和链路层经过数据封装后再通过网络发送到对方主机,对方主机收到数据后也同样需要在链路层和网络层进行数据解包,此时对方的传输层才拿到了发送过来的数据,然后再继续将该数据向上进行交付。............

2022-07-17 21:30:13 23881 38

原创 leetcode1146. 快照数组

实现支持下列接口的「快照数组」- SnapshotArray。

2022-07-07 22:18:23 524 18

坤坤音效键盘可执行程序

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关注的人

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