自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【数据结构】图

1.适合存稠密图2.邻接矩阵判断两个顶点的连接关系,并取到权值时间复杂度为o(1)

2024-03-19 14:16:21 2022 33

原创 16.【CPP】详解继承

1.基类private成员在派生类中无论以什么方式继承都是不可见的。这里的不可见是指基类的私有成员还是被继承到了派生类对象中,但是语法上限制派生类对象不管在类里面还是类外面都不能去访问它2.基类private成员在派生类中是不能被访问,如果基类成员不想在类外直接被访问,但需要在派生类中能访问,就定义为protected。可以看出保护成员限定符是因继承才出现的3.使用关键字class时默认的继承方式是private,使用struct时默认的继承方式是public,不过最好显示的写出继承方式。

2024-03-15 18:16:45 1743 5

原创 2.【Linux】(进程的状态||深入理解fork||底层剖析||task_struct||进程优先级||并行和并发||详解环境变量)

fork通过复制一份当前进程(父进程)来创建一份全新的进程(子进程),父进程创建成功返回子进程的pid,失败返回-1,子进程创建成功返回0,失败返回-1。

2024-01-18 15:53:10 1972 19

原创 4.【CPP】入门(初始化列表||explicit||static||友元||静态成员变量/函数)

详解初始化列表||explicit||static||友元||静态成员变量/函数

2024-01-14 13:36:09 2032 11

原创 【Java】基础语法1(变量类型||类型转换||猜数字游戏&自幂数)

java中的double,float,int都与c语言类似,这里不作讲解。下面仅针对java特殊的变量类型进行说明。

2024-07-19 18:23:41 414 2

原创 【网络】高级IO(select||poll||epoll)

比如listenfd,接受缓冲区 可能存放多个客户端连接请求的信息,这时候要使用水平触发(LT),因为accept每次只能处理一个,需要多次触发。fd有上限,输入输出型参数比较多,数据拷贝频率比较高,每次都要重置fd_set(不能重用),管理第三方数组的fd需要用户层多次遍历较繁杂,用户态到内核态数据拷贝的开销。来判断事件是否就绪,如果没数据就阻塞等待,当事件就绪,会将rfds置位(可能有多个位),变为输出型参数,再进行后续逻辑。1.检测就绪O(1),获取就绪O(n)设置文件描述符为非阻塞。

2024-05-27 17:42:37 1007 1

原创 【网络】网络层和数据链路层详解

TCP作为传输层控制协议,其保证的是数据传输的可靠性和传输效率,但TCP提供的仅仅是数据传输的策略,而真正负责数据在网络中传输的则传输层之下的网络层和链路层。IP协议的本质:提供一种能力,将数据跨网络从A主机送到B主机,即数据的路由。

2024-05-21 21:25:43 1182 2

原创 【网络基础】TCP协议2

能防止历史连接的建立,能减少双方不必要的资源开销,能帮助双方同步初始化序列号。奇数次握手,可以确保一般情况握手失败的连接成本嫁接在客户端上。验证全双工的最小次数。不是两次?连接失败的成本会嫁接到服务端,无法防止历史连接的建立,会造成双方资源的浪费,也无法可靠的同步双方序列号。不是四次?三次握手就已经理论上最少可靠连接建立,所以不需要使用更多的通信次数。不是一次?服务端接收到客户端的 SYN 包就认为建立连接成功的话,这样会带来 SYN 洪水攻击问题。

2024-05-13 21:41:40 846

原创 【网络编程】UDP协议和TCP协议1

UDP 报文分为 UDP 报头和 UDP 数据区两部分。报头由 4 个 16 位长(2字节)字段组成,分别说明该报文的源端口、目的端口、报文长度和校验值。

2024-05-10 21:42:16 1088 1

原创 【网络编程】HTTPS协议详解

HTTPS工作过程中涉及到的秘钥有三组:1.非对称加密(CA):用于检验证书是否被篡改,服务器持有(证书的)私钥(在形成CSR文件申请证书时获得),客户端持有公钥(操作系统包含了可信任的CA机构有哪些,同时持有对应的公钥)。服务器在客户端请求时返回携带签名的证书,客户端通过这个公钥进行证书验证,保证证书的合法性。2.非对称加密(协商生成对称秘钥):客户端用收到的CA证书中的公钥(是被信任的)给随机生成的对称秘钥加密,传输给服务器,服务器通过私钥解密获取到对称加密秘钥。3.对称加密(数据传输)

2024-05-08 18:16:41 810 1

原创 【网络编程】http协议

URL(Uniform Resource Locator,统一资源定位符)是用于指定互联网上的资源地址的一种表示方法。它提供了访问互联网资源的路径和定位方式,使得人们可以通过浏览器或其他工具轻松访问这些资源。URL的组成通常包括以下几个部分(用冒号分隔):只有协议和域名(ip地址)是必须的,其余都是可选的当提交或者获取的数据本身可能包含与url中特殊的字符冲突的字符,要求BS(Browser-Server)双方要进行编码和解码。将字符转为16进制,从右向左取4位,每两位做1为,前面加上%。

2024-05-07 20:51:44 1114 1

原创 git操作

⼯作区有⼀个隐藏⽬录 .git它不算⼯作区,⽽是Git的版本库。这个版本库⾥⾯的所有⽂件都可以被Git管理起来,每个⽂件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。三个参数分别对应只回退到版本库(commit),回退到暂存区(add),回退到工作区。默认使用mixed。⼀般存放在.git⽬录下的index⽂件(.git/index)中,我们把暂存区有时也叫作索引(index)。•⼯作区:是在电脑上你要写代码或⽂件的⽬录。本质是回退版本库(commit)的内容。

2024-05-04 21:28:41 390

原创 【网络编程】网络基础

物理层:负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤,现在的 WIFI无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层,它通过物理层的广播方式来转发数据包。当一个计算机需要向另一个计算机发送数据时,它会将数据包发送给集线器,集线器会将这个数据包广播到所有连接到它的端口上。

2024-05-02 20:35:47 704 1

原创 【算法】区间dp

区间dp,简单来说就是从小区间到大区间进行动态规划。从两道题来理解区间dp的方法。

2024-04-30 13:46:00 922 1

原创 9.【Linux】(死锁问题||线程同步||条件变量||生产者消费者模型)

死锁是指在一组进程中各个进程均占有不会释放的资源,但因互相申请被其他进程所占用的不会释放的资源而处于一种永久等待的状态。。

2024-04-30 13:41:17 1358 2

原创 【算法】二分查找(红绿灯法)

给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。=target)这里我们采用的思路是先查找target元素找出如果找不到则返回-1,如果找到则是找到target出现的第一个元素。

2024-04-02 17:00:45 458 6

原创 【算法】记忆化搜索

拿斐波那契数列举例可以发现一般的求解过程中,有很多重复的子问题,递归的本质就是深度优先遍历,如果此时我们可以记录下此时的值然后记录在哈希表中,下一次递归前先去哈希表中查找如果有该值的答案直接返回即可。这样完全二叉树就可以转为单链结构。

2024-03-31 19:21:53 962 2

原创 【MySQL】数据库基础

数据库本质:对数据内容存储的一套解决方案,你给我字段或要求,我直接给你结果。1创建数据库本质就是创建Linux下的一个目录2.创建表本质就是在Linux下创建文件。这些工作是mysqld做的。3.我的理解是数据库提供一层封装,实现对操作系统层面文件相关的操作。

2024-03-31 12:02:32 477

原创 【算法】拓扑排序

有向无环图(DAG图)顶点活动图(AOV图):类似于流程图,顶点表示活动,箭头表示先后顺序找到做事情的先后顺序,拓扑排序的结果可能不是唯一的1.找出图中入度为0的点,然后输出2.删除与改点相连接的边3.重复1、2操作,直到图中没有点。

2024-03-28 20:25:05 631 6

原创 【算法】单源最短路问题之Dijkstra算法

第三次更新时,我们已经确定了s到y权值最小,由y去更新其相连的边t,x,z,如果比dist中的小则更新。第四次更新时,我们已经确定了s到y到z的权值最小,由z去更新其所连的边x,算出来权值13比14小则替换dist中x的值。同时记录父节点z的下标,s中记录2已被使用过。为讲解方便,我们把顶点syztx记为01234.dist表初始值为INT_MAX.,pPath存节点的父节点,一个bool数组s来表示是否以它为顶点遍历过。类似于贪心算法,最开始选取原点s,然后更新dist表0位置,因为s到s权值为0。

2024-03-27 14:31:08 446 9

原创 【CPP】智能指针

什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏的危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死。int _day=0;~Date(){}new[]开空间时编译器会在数组开头多开4个字节,存要调用析构函数的个数。

2024-03-25 21:26:20 1791 7

原创 【算法】回溯与深搜

1.构建决策树2.设计代码:全局变量、dfs函数3.剪枝,回溯。

2024-03-23 19:59:17 530 6

原创 【CPP】C++11多线程

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

2024-03-22 18:36:50 427 9

原创 10.【Linux】(基于信号量和环形队列的生产者消费者模型实现||单例模式的线程池)

本文将通过posix信号量和一个环形队列一步一步实现生产者消费者模型。

2024-03-21 15:17:28 966 9

原创 8.【Linux】线程

具体参考。

2024-03-20 15:24:33 450 7

原创 【算法】欧拉筛(线性筛)模版

试题 B: 双子数本题总分:5 分【问题描述】若一个正整数 x 可以被表示为 p2 × q2,其中 p、q 为质数且 p , q,则 x 是一个 “双子数”。请计算区间 [2333, 23333333333333] 内有多少个 “双子数”?【答案提交】这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

2024-03-18 18:07:13 334 3

原创 7.【Linux】进程间通信2(共享内存||消息队列)

消息队列的本质其实是一个内核提供的链表,内核基于这个链表,实现了一个数据结构向消息队列中写数据,实际上是向这个数据结构中插入一个新结点;从消息队列汇总读数据,实际上是从这个数据结构中删除一个结点消息队列提供了一个从一个进程向另外一个进程发送一块数据的方法消息队列也有管道一样的不足,就是每个数据块的最大长度是有上限的,系统上全体队列的最大总长度也有一个上限。

2024-03-17 13:49:28 450 3

原创 6.【Linux】进程间通信(管道&&命名管道||简易进程池||简易客户端服务端通信)

1.Linux原生支持的管道----匿名和命名管道2.System V-----共享内存、消息队列、信号量3.Posix------多线程、网路通信。

2024-03-16 19:40:38 641 1

原创 【数据结构】并查集

【代码】【数据结构】并查集。

2024-03-14 20:14:56 237

原创 5.【Linux】文件系统(缓冲区||磁盘寻址方式||文件管理方式||软硬链接)

O_RDONLY: 只读打开O_WRONLY: 只写打开 O_RDWR : 读,写打开 这三个常量,必须指定一个且只能指定一个O_CREAT : 若文件不存在,则创建它。需要使用mode选项,来指明新文件的访问权限O_APPEND: 追加写。

2024-03-13 13:36:48 948 3

原创 15.【CPP】C++11(右值引用||移动语义||完美转发||可变参数列表||lambda表达式)

知乎大佬常左值引用可以引用右值。

2024-03-12 13:27:28 874

原创 14.【CPP】哈希的应用(位图||布隆过滤器||哈希切分)

更好的方法是采用哈希切分,通过hash函数将A和B文件的query转化到编号的小文件中,hashii=hashfunc(query)%1000,放在小文件中以后,最终每个文件中存放的都是 hashi 相同的元素,这里的一个小文件就类似于一个哈希桶,里面的这些元素只有两种可能:重复、冲突。哈希切割的话不是平均切割,那就会导致有的小文件比较小,有的比较大,那就有可能存在有的小文件超过了可用内存1G(那其实就是对应的冲突比较多)那这两种不同的情况,我们的处理方式也是不同的。2.没什么重复值,大部分都是不同的。

2024-03-07 16:09:18 1048 2

原创 13【CPP】Hash(闭散列||开散列)

闭散列:也叫开放定址法,当发生哈希冲突时,如果哈希表未被装满,说明在哈希表中必然还有空位置,那么可以把key存放到冲突位置中的“下一个” 空位置中去。

2024-03-06 19:08:46 1206 1

原创 【算法】递归

函数自己调用自己,主问题由相同的子问题组成,子问题又由相同的子问题组成。

2024-03-05 18:02:05 764 3

原创 12.【CPP】map和set

STL总共实现了两种不同结构的管理式容器:树型结构与哈希结构。树型结构的关联式容器主要有四种:map、set、multimap、multiset。这四种容器的共同点是:使用平衡搜索树(即红黑树)作为其底层结果,容器中的元素是一个有序的序列。下面一依次介绍每一个容器。

2024-03-05 17:58:32 809

原创 【数据结构】红黑树(RBTree)

红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保。

2024-03-04 16:44:21 502

原创 【数据结构】一步一步实现AVL树

1.parent->bf等于1||-1,说明parent所在的子树高度变了,(因为插入前parent->bf等于0,插入前左右子树高度相等,现在有一边高了)需要继续向上更新平衡因子。2.parent->bf等于2||-2,parent所在的子树不平衡,需要旋转处理这棵子树。3.parent->bf等于0,parent所在的子树平衡无需更新。我们先定义有以上三种子节点,分别记为x,y,z,以便后文讲解。b变成了30的右边,30变成60的左边,60变成整棵树的根。,若非那么c节点本身就要先旋转调整。

2024-03-04 16:11:31 455

原创 11.【CPP】模版(深入理解模版的实例化,从编译链接的原理理解模版为何无法分离编译)

由于模版实例化是惰性的,编译test.cpp时包含了头文件halo.h(里面有add的声明)编译器就能以为halo.cpp会有add的实现所以能通过编译。编译halo.cpp时,可以解析模板定义并检查语法,但不能生成add函数的代码。因为要生成代码,需要知道模板参数,即需要一个类型,而不是模板本身。拿func函数对比,头文件在预处理时展开,func函数在编译时找到了声明编译器就把函数地址留到了链接时确定。

2024-02-17 23:54:06 1119 2

原创 4.【Linux】进程控制(进程终止||进程等待||程序替换)

父进程通过操作系统检测子进程状态,如果退出了就接收到子进程的退出信息。相反,如果options等于WNOHANG,发现没有子进程退出,那么直接返回0不会阻塞等待子进程退出,而是采用非阻塞的轮询检测的方式。(查看进程的退出码) options: WNOHANG: 若pid指定的子进程没有结束,则waitpid()函数返回0,不予以等待。通过特定接口,加载磁盘上的一个全新的程序(代码和数据),加载到调用进程的地址空间中,修改页表和物理地址的映射关系,以达到让子进程执行一个全新程序的目的。

2024-02-16 18:49:35 921 1

原创 10.【CPP】栈和队列(栈队列互相实现&栈排序||priority_queue||仿函数)

仿函数(Functor)又称为函数对象(Function Object)是一个能行使函数功能的类。仿函数的语法几乎和我们普通的函数调用一样,不过作为仿函数的类,都必须重载operator()运算符。因为调用仿函数,实际上就是通过类对象调用重载后的operator()运算符。编写程序,对栈进行排序使最小元素位于栈顶。最多只能使用一个其他的临时栈存放数据,但不得将元素复制到别的数据结构(如数组)中。1.默认用vector,默认是大堆(大的优先级高)仿函数less。输出hello and world。

2024-02-14 23:40:01 437

空空如也

空空如也

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

TA关注的人

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