自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 并查集(C++)

班级总人数10人,现在需要不10人分别添加到三个兴趣小组中,每个人只能参加一个兴趣小组。:由于篮球小组人比较少,某班级决定解散,成员合并到游泳小组。:某班级要创建三个兴趣小组,分别是象棋、游泳、篮球。主要解决的是元素分组的问题。象棋小组:{2,4,6,7}游泳小组:{0,1,5,8}这里就可以使用到并查集。篮球小组:{3,9}

2024-01-05 20:46:23 459

原创 【MySQL-增删查改】

select是把通过where已经筛选出来的记录拿出来,而别名total的产生是在select和where之间,这段区域是需要把筛选出来的记录的某些字段拿出来。其前后顺序是先where再生成total别名,所以where中无法使用别名。排序中可以使用别名,排序需要先拿出数据出来,再来排序,故别名可以使用。由于主键或唯一键的存在,导致新的记录无法插入,则可以使用以下方法。答:错误,total别名无法再where中使用。是修改了表中存在的记录(有就修改,没有就添加),包含id、学号、姓名、qq。

2023-06-16 21:26:47 1001

原创 【MySQL-约束篇】

空值,默认值,主键,自增,唯一键,外键

2023-06-15 17:46:56 600

原创 mysql-数据类型

find_in_set(sub,str_list) :如果 sub 在 str_list 中,则返回下标;而,char类型是固定个数,char(11),在插入数据时,即使你只使用了2个字节,数据库也分配给你11个字节。float[(m, d)] [unsigned] : M指定显示长度,d指定小数位数,占用空间4个字节。char(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255。varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节。

2023-05-20 18:59:46 484

原创 数据库【库,表操作】

记录学习MySQL的过程,不会止步于此,一起加油。

2023-05-17 23:06:32 653

原创 通俗易懂的epoll

一篇文章,带你走进epoll的世界

2022-08-01 21:18:03 475 1

原创 如何快速理解Select原理

2022-04-01 20:55:42 1797 3

原创 如何快速理解TCP协议

目录什么是TCPTCP的报文格式TCP的如何保证可靠性确认应答(ACK)机制超时重传机制连接管理机制(三次握手和四次挥手)三次握手四次挥手滑动窗口什么是TCPTCP全称位”传输控制协议(Transmission Control Protocol)“。TCP是在传输层中TCP是有连接的协议;”三次握手和四次握手 “TCP是可靠的TCP是面向字节流的TCP的报文格式源端口号和目的端口号:表示数据从哪个进程来到那个进程去。32位序号和32位确认序号:TCP传输是面向字节流的且可靠的,会对每

2022-03-26 22:49:01 7722 1

原创 高并发内存池(2)

从零实现一个高并发内存池高并发内存池整体框架设计申请内存部分高并发内存池-Thread Cache高并发内存池-Central Cache高并发内存池整体框架设计现在很多的开发环境都是多核多线程,在申请内存的场景下,必然存在激烈的锁竞争问题。malloc本身就已经很优秀了,那么我们的项目原型tcmalloc就是在多线程高并发的场景下更胜一筹,所以这次我们实现的内存池要考虑几个方面。性能问题在多线程下,锁竞争问题内存碎片问题concurrent memory pool主要由下面3个部分组成:

2022-03-12 13:32:26 1061

原创 开胃菜-定长内存池(1)

从零实现一个高并发内存池定长内存池性能测试定长内存池介绍:向操作系统申请一块足够的内存,并以链表的方式来连接,该内存只能被固定的类型所申请。windows和Linux下如何直接向堆申请页为单位的大块内存:VirtualAlloc框架:_memory:先向操作系统申请一块足够大的空间,我们需要一个指针来指向这块空间。_freelist:程序释放空间时,我们不用还给操作系统,而是用自由链表来连接起来,当下次申请空间时,先在自由链表中找,我们需要一个指针来指向链表的头部。bySize:表示_me

2022-03-11 15:32:04 765

原创 高并发内存池的介绍

从零实现一个高并发内存池项目介绍池化技术内存池内存池主要解决的问题项目介绍当前高并发内存池的原型是Google的一个开源项目tcmalloc,tcmalloc全称Thread-Caching Malloc,即线程缓存的malloc,实现了高效的多线程内存管理,用于替代系统的内存分配相关的函数(malloc,free)。我们的高并发内存池的项目只是把tcmalloc最核心的框架简化后拿出来,模拟实现出一个自己的高并发内存池,目的就是学习tcmalloc的精华。这个项目会用到C/C++、数据结构(链表、

2022-03-11 10:12:58 244

原创 【Linux入门】多线程(线程概念、生产者消费者模型、消息队列、线程池)万字解说

目录1️⃣线程概念什么是线程线程的优点线程的缺点线程异常线程异常Linux进程VS线程2️⃣线程控制创建线程获取线程的id线程终止等待线程线程分离3️⃣线程互斥进程线程间的互斥概念互斥量互斥量的接口互斥量的实现原理研究怎么看待线程在申请锁的时候等待挂起可重入VS线程安全概念常见的线程不安全情况常见的线程安全情况常见的不可重入情况常见的可重入情况可重入与线程安全的联系可重入与线程安全的区别4️⃣死锁死锁的四个必要条件避免死锁避免死锁的算法5️⃣线程同步条件变量同步概念和竞态条件初始化条件变量销毁条件变量等待条

2022-01-23 20:17:27 1763 11

原创 【Linux入门】进程信号(2)

进程信号????产生信号????阻塞信号信号其他相关常见概念在内核中的表示sigset_t信号集的操作函数sigprocmask函数sigpending????捕捉信号内核如何实现信号的捕捉sigaction可重入函数volatile关键字SIGCHLD信号普通信号????产生信号1 通过终端按键生产信号。如Ctrl+C,2 调用系统函数向进程发信号。kill函数,在命名解释行上 klii 选项 进程id(不演示,我们通过代码模拟kill命令)#include <sys/types.h&

2021-12-05 10:58:36 688 10

原创 【Linux入门】进程信号(1)

进程信号信号入门生活角度的信号技术应用角度的信号信号概念用kill -l命令查看系统定义的信号列表信号处理常见方式的概览产生信号通过终端按键产生信号调用系统函数向进程发信号由软件条件产生信号硬件异常产生信号信号捕捉-初识模拟一下野指针异常阻塞信号信号其他相关常见的概念在内核中的表示sigset_t信号集操作函数sigprocmasksigpending捕捉信号内核如何实现信号的捕捉sigaction可重入函数volatileSLGCHLD信号信号入门生活角度的信号技术应用角度的信号信号概念用ki

2021-11-24 16:35:26 1945 5

原创 【Linux入门】进程间的通信

为什么要进程间通信?进程间通信是如何完成的?a.进程间运行的时候是具有独立性(数据层面)b.进程间通信,一般一定要借助第三方(os)资源c.通信的本质就是”数据的拷贝“进程A-》数据”拷贝“给os-》os数据”拷贝“给进程B操作系统一定要提供一段内存区域,且可以让双方进程都能看到。所以,进程间的通信本质是,让不同的进程先看到同一份资源(内存、文件内核缓存等)。...

2021-11-23 13:36:45 2091 4

原创 【linux入门】动静态库

认识动静态库我们在Linux编写C代码时,默认是用动态库。动静态库其实是一堆目标文件(.o)的集合,是一些可执行文件的“半产品”。链接时,把各个.O文件进行链接,最终形成可执行程序。当一堆.o文件要被大量使用时,我们把这些目标文件进行打包,就形成了一个库。动静态库的各自特征静态库:程序在进行汇编链接时,把库的代码直接复制到可执行文件中。这样就不需要静态库库。使用静态库生产的可执行文件一般比较大。动态库:程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。一个与动态库链接的可执行

2021-11-18 08:00:00 513 4

原创 【Linux入门】基础IO

基础IO✔回顾C文件的接口✔系统文件I/O接口介绍✔回顾C文件的接口把内容写入文件中,先要打开文件。文件的路径/文件名(不带路径会在当前路径下创建文件)什么是当前路径:当前进程运行时的路径打开文件的方式打开文件一定是进程运行的时候打开的fcloseproc程序fputsfgteslinux中一切皆文件(显示器、键盘)任何进程在运行的时候会默认打开三个输入输出流。stdin stdout stderr键盘 显示器 显示器标准输入 标准输出 标准错误如何理解:FILE

2021-11-17 09:38:43 1284 3

原创 【Linux入门】:进程控制

进程控制1️⃣进程的创建fork函数初识fork函数的返回值写时拷贝fork函数常规用法fork函数失败的原因2️⃣进程的终止进程退出的场景进程常见退出方法_exit函数exit函数return退出3️⃣进程等待进程等待的必要性进程等待的方法wait方法waitpid方法获取子进程status4️⃣进程程序替换替换的原理替换函数函数解释命名理解5️⃣我们可以综合前面的知识,做一个简易的shell1️⃣进程的创建fork函数初识在上篇文章中已经讲了fork函数,主要有:创建子进程有两个返回值创建

2021-11-04 20:53:11 493 4

原创 【Linux入门】进程概念(超详解,建议收藏)

系统中,可以存在大量进程的当我们的电脑开机的时候,启动的第一个进程是操作系统(os),而os要对之后运行起来的进程进行管理工作(进程管理)。操作系统如何进行进程管理??(先描述,在组织)、当有大量程序加载到内存中时,就如同系统中同时出现大量进程,操作系统会增添大量的PCB对这些进程进行描述,并用链表的方式对PCB组织起来。1、标示符:前台进程,只能有一个前台进程+& 在后台跑+表示前台还是后台2、优先级什么是优先级?谁先谁后拿到某种资源为什么要有优先级?资源有限。CPU

2021-10-02 22:14:40 3986 8

原创 旋转数组的最小值——二分查找

>题目描述????点击链接写题有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。请问,给定这样一个旋转数组,求数组中的最小值。例1:输入:[3,4,5,1,2]返回值:1例2:输入:[1,0,1,1,1]返回值:0例3:输入:[1,2,2,2,2]返回值:1>题解1通过线性遍历可以完成,时间复杂度O(N)>题

2021-09-24 17:26:34 206

原创 二维数组中的查找

>题目描述????点击这里写题描述:在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]给定 target = 7,返回 true。给定 target = 3,返回 false。>题解1强暴一点,就是一个一个找,时间复杂度为O(N2

2021-09-23 23:31:15 99

原创 【C++STL】第二篇:vector类的介绍及模拟实现

前言一、标准库中的vector类一、标准库中的vector类

2021-09-08 14:13:38 434 7

原创 155.最小栈-力扣(LeetCode)

目录55.最小栈-力扣(LeetCode)正确题解优化题解1优化题解255.最小栈-力扣(LeetCode)????155.最小栈-力扣(LeetCode)题目描述:设计push、pop、top、getMin,函数,并且可以在时间复杂度为O(1)的情况下找出最小值错误的思路:给定一个变量,来记录最小值,这种想法是错误的,我们应该要更全面的考虑问题。当我们入栈{6,5,4,3,2,1}时,每次记录最小值的变量随着每次入栈而改变,当数据全部入栈,记录最小值的变量就为1,如果在不删除数据的情况下,可以

2021-09-05 13:34:15 404 2

原创 迭代器失效问题

目录一级目录二级目录三级目录一级目录二级目录三级目录

2021-08-30 15:21:48 203 3

原创 【Linux入门】第三篇:软件包管理器yum和编辑器vim的使用

目录前言Linux软件包管理yumLinux开发工具Linux编辑器-vim使用01.vim的基本概念02.vim的基本操作03.vim正常模式命令集04.vim末行模式命令集05.vim操作总结06. 简单vim配置Linux编辑器-gcc/g++使用Linux调试器-gdb使用Linux项目自动化构建工具-make/Makefile前言Linux软件包管理yumLinux开发工具Linux编辑器-vim使用01.vim的基本概念02.vim的基本操作03.vim正常模式命令集04.vim

2021-08-04 15:13:25 845 1

原创 【Linux入门】第一篇:Linux下的基本指令(超详解)

目录一级目录二级目录三级目录一级目录二级目录三级目录

2021-08-01 16:00:14 312 5

原创 【Linux入门】第二篇:shell命令及运行原理和Linux权限的概念

目录前言shell命令及运行原理Linux权限的概念Linux下的用户Linux创建用户和删除用户Linux用户切换Linux增加用户权限(添加到信任列表)Linux权限的管理01.文件访问者的分类02.文件类型和访问权限(事物属性)03.文件权限值的表示方法04.文件访问权限的相关设置方法a)修改文件的访问权限b)修改文件的拥有着c)修改文件或目录的所属组d)查看或修改文件的掩码e)file指令目录的权限粘滞位总结前言shell命令及运行原理在Linux中,严格意义来说是一个操作系统,我们称之为"核

2021-07-29 19:40:22 399 6

原创 【C++STL】第一篇:string类介绍及模拟实现

目录一、标准库中的string类1.1 string类2.2 string类中的常用接口说明一、标准库中的string类1.1 string类字符串的表示字符序列的类标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设计特性。string类是使用char(即作为它的字符类型,使用它的默认char_traits和分配器类型(关于模板的更多信息,请参阅basic_string)。string类是basic_string模板类的一个实例,

2021-07-25 19:50:08 378 11

原创 【C++模板】第一篇:函数模板和类模板

这里写目录标题一级目录二级目录三级目录一级目录二级目录三级目录

2021-06-25 15:45:25 138 4

原创 【C++内存管理】第一篇:(malloc/deldete和malloc/free)

目录一级目录一级目录

2021-06-19 20:42:39 491 6

原创 【C++类与对象】第四篇:(初始化列表、构造匿名对象、隐式类型转换、友元、static成员、内部类)

目录一级目录一级目录

2021-06-12 14:08:54 616 12

原创 【C++类与对象】第三篇:日期类的实现

目录前言一级目录前言一级目录

2021-05-31 23:01:13 355 11

原创 【C++类与对象】第二篇:(构造函数、析构函数、拷贝构造、运算符重载、取地址及const取地址操作符重载)

目录前言1. 构造函数2. 析构函数3. 拷贝构造函数4.赋值操作符重载5.默认拷贝构造与赋值运算符重载问题6. const成员函数7. 取地址及const取地址操作符重载总结前言1. 构造函数2. 析构函数3. 拷贝构造函数4.赋值操作符重载5.默认拷贝构造与赋值运算符重载问题6. const成员函数7. 取地址及const取地址操作符重载总结...

2021-05-31 23:00:10 494 16

原创 【C++类与对象】第一篇:类的介绍及this指针

目录面向过程和面向对象的初步认识1.类的引入2.类的定义3.类的作用域4.类的实例化5.类的访问限定符及封装6.类的对象大小的计算7.类的成员函数的this指针面向过程和面向对象的初步认识我们先初步认识一下面向过程和面向对象:我们学c语言,c语言就是面向过程,关注的是过程,分析求解问题的步骤,通过对函数的调用逐步解决问题。我们学c++,c++就是面向对象,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。在现在这个时代,点外卖已经成为我们的日常了,以外卖为例来简单区别过程和对象:

2021-05-26 22:58:16 1153 27

原创 【C++入门语法】第一篇:(命名空间、缺省参数、函数重载、引用、内联函数)

目录命名空间namespace关键字using namespace std在程序中的作用命名空间嵌套C++输入&输出缺省参数缺省参数分类函数重载C不支持函数重载的原因(名字修饰)extern"C"引用引用概念引用特性常引用使用场景做参数做返回值传值、传引用效率比较引用和指针的区别内联函数auto关键字(C++11)auto的使用细则auto不能推导的场景基于范围的for循环(C++11)指针空值---nullptr(C++11)命名空间在c和c++中,变量,函数和后面要学到的类是大量存在的,这

2021-05-23 17:47:25 568 23

原创 排序5-计数排序

目录前言一、计数排序前言一、计数排序思想:计数排序又称鸽巢原理,是对哈希表直接定址法变形的应用。操作步骤:统计相同元素出现的个数根据统计的结果将序列回收到原来的序列中绝对映射:细节:(1):当数组中的最大值较大,且数组中的最小值也较大,那么我们开辟B空间,就会有很大的浪费。所以相对映射来了:代码:(几处细节的处理要看仔细)void CountSort(int* a,int n){ // 选择出最大值,最小值 int i = 0,min = a[0],max = a[0]

2021-05-17 10:08:51 128 4

原创 排序3-选择排序与归并排序(递归实现+非递归实现)

目录前言一、选择排序二、归并排序递归实现迭代实现(非递归)总结前言一、选择排序选择排序:指每次选择所要排序的数组中的最大(小)值的数组元素,将这个数组元素的值与最前面的没有进行排序的数组元素的值进行交换。由于比较好理解,那么我直接上代码(改版的)最大值和最小值一起排列void SelectSort(int *arr, int n){ for (int i = 0; i < n - 1;i++) { int maxi = i; int mini = i; for (int

2021-05-16 23:04:08 473

原创 排序2-冒泡排序与快速排序(递归加非递归讲解)

目录前言一、冒泡排序二、快速排序1.左右指针法2.挖坑法3.前后指针法4.快排的优化(三数取中)5.迭代实现(非递归)总结前言一、冒泡排序冒泡排序:是一种交换排序,其基本思想是,两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录就为止。当然,我们今天的主角是后面要介绍的快排,我相信朋友们对冒泡已经很熟悉了,我就简单带过一下。代码://冒泡排序:两个两个比较void BubblSort(int *arr,int n){ for (int end = n; end > 0;

2021-05-15 16:06:16 550 11

原创 排序1-插入排序与希尔排序

目录前言一、插入排序二、希尔排序总结前言一、插入排序直接插入排序是一种简单的插入排序法,把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。简单的来说:上图当然,图上的方法难免有一些特例上图:当进行到第四趟插入排序的时候当然,开始写代码的时候,我们可以先写单趟,假设前n-1已经有序了,我们在来插入最后一个数,然后再来写多趟,这样就可以简单写出插入排序了。当然,我这样写,是为了写下面介绍的希尔排序。void Inser

2021-05-14 22:27:54 195 4

原创 排序4-堆排序与海量TopK问题

目录前言一、堆排序.堆排序算法二、海量TopK问题前言一、堆排序(1)堆是一颗完全二叉树(2)堆的每个节点的值都大于或等于其左右孩子节点称为大堆(3)堆的每个节点的值都小于或等于其左右孩子节点称为小堆堆:具备着上面条件的就称之为堆我们可以看出大堆的堆顶是最大值,小堆的堆顶是最小值。从堆中需要注意:跟节点一定是最大(小)者。堆的结构:拿上面大堆做例子:如果将大堆层序遍历存入数组,则满足以下关系左孩子坐标=2父亲坐标+1右孩子标=2父亲坐标+2我们讲这个堆结构,其目的就是为了堆排序

2021-05-09 13:49:47 153 7

空空如也

空空如也

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

TA关注的人

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