自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 AVLTree

二叉平衡树 BST树+节点平衡操作(节点平衡 任意节点左右字输的高度不超过1)2.右孩子的右子树太高了。1.左孩子的左子树太高了。3.左孩子的右子树太高了。4.右孩子的左孩子太高了。左-右旋转 左平衡操作。右-左旋转 右平衡操作。

2025-03-24 23:30:14 146 1

原创 C++题目

野指针就是没有被初始化的指针,悬空指针就是最初指向的内存已经被释放的一种指针。产生原因:释放内存后指针不及时置空(野指针),依然指向了该内存,那么可能出现非法访问的错误。这些我们都要注意避免。(1)初始化置NULL(2)申请内存后判空(3)指针释放后置NULL(4)使用智能指针c++类内可以定义引用成员变量,但要遵循以下三个规则:不能用默认构造函数初始化,必须提供构造函数来初始化引用成员变量。否则会造成引用未初始化错误。构造函数的形参也必须是引用类型。

2025-03-24 23:27:50 741 1

原创 【MySQL】基础

指从多张表中查询信息。笛卡尔积:笛卡尔积是指在数学中,两个集合A和集合B的所有组合情况。(在多表查询时,需要消除无效的笛卡尔积)事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。默认MySQL的事务是自动提交的,也就是说,当执行一条DML语句时,MySQL会立即隐式的提交事务。

2025-03-19 01:15:37 1003

原创 【算法】二叉树的递归遍历

递归实现求二叉树的层数,求以node为根节点的子树的高度。递归求二叉树节点的个数。

2025-03-10 23:46:15 287

原创 【算法】BST的非递归插入,删除,查询

对于二叉树上的每一个节点,如果满足左孩子的值 < 父节点的值 < 右孩子的值,把满足上面性质的二叉树就称作BST树,Binary Search/Sort Tree。3.删除的节点有两个孩子,找待删除节点的前驱节点(或者后继节点),用前驱或者后继节点的值把待删除节点的值覆盖掉,然后直接删除前驱或者后继节点就可以了。BST如果不为空,从根节点开始比较,找到合适的位置,生成新的节点,并把节点的地址写入父节点相应的地址域当中。的有序性,它具有快速的查找、插入和删除操作的特点,因此被广泛应用于数据结构和算法中。

2025-03-10 19:49:20 480

原创 【算法】大数据查重

分治思想,把大文件分成小文件,1-10,然后分别查重。

2025-03-09 23:08:28 768

原创 muduo网络库2

Muduo网络库:底层实质上为Linux的epoll + pthread线程池,且依赖boost库。muduo的网络设计核心为一个线程一个事件循环,有一个main Reactor负载accept连接,然后把连接分发到某个sub Reactor(采用轮询的方式来选择sub Reactor),该连接的所用操作都在那个sub Reactor所处的线程中完成。多个连接可能被分派到多个线程中,以充分利用CPU,Reactor poll的大小是固定的,根据CPU的数目确定。

2025-02-25 21:26:02 1159

原创 muduo网络库1

select实现多路复用的方式是,将已经连接的socket都放到一个文件描述符集合中,然后调用select函数将文件描述符集合拷贝到内核里,让内核来检查是否有网络事件产生,检查的方式很粗暴,就是通过遍历文件描述符集合的方式,当检查到有事件产生后,将此socket标记为可读或可写,接着再把整个文件描述符集合拷贝回用户态,然后用户态还需要再通过遍历的方法找到可读或可写的socket,然后对其处理。因此,基于select模型的服务器程序,要达到100万级别的并发访问,是一个很难完成的任务。

2025-02-25 21:10:50 763

原创 Golang初识

Go语言最初由Google公司的Robert Griesemer、Ken Thompson和Rob Pike三个大牛于2007年开始设计发明,他们最终的目标是设计一种适应网络和多核时代的C语言。所以Go语言很多时候被描述为“类C语言”,或者是“21世纪的C语言”,当然从各种角度看,Go语言确实是从C语言继承了相似的表达式语法、控制流结构、基础数据类型、调用参数传值、指针等诸多编程思想。

2025-01-22 23:09:09 855

原创 【HTTP】HTTP协议

超文本传输协议,是一个简单的请求,响应协议,它通常运行在TCP之上,它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应,请求和响应消息的头以ASCII形式给出,而消息内容则具有一个类似MMF的格式,HTTP是万维网的数据通信的基础。

2024-12-02 12:27:12 905

原创 【Linux】select,poll和epoll

select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符fd,一旦某个描述符就绪(一般是读就绪或者写就绪),系统会通知有I/O事件发生了(不能定位是哪一个)。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间。 select、poll和epoll这三个函数是Linux系统中I/

2024-11-27 19:58:11 876

原创 【Linux】网络通信

TCP协议是一个安全的、面向连接的、流式传输协议,所谓的面向连接就是三次握手,对于程序猿来说只需要在客户端调用connect()函数,三次握手就自动进行了。先通过下图看一下TCP协议的格式,然后再介绍三次握手的具体流程。

2024-11-26 20:45:09 1397 1

原创 【Linux】Ubuntu中muduo库的编译环境安装

muduo网络库是C++语言开发的一个非常优秀的网络库,作者陈硕,muduo网络库在多线程环境下性能非常高,该系列文章会分享一些muduo库源码的知识,包括它的线程池源码,TcpServer源码,还有很多muduo库应用的示例代码等,学习一下作者优秀的C++多线程网络编程设计思想。【注意】:如果Linux系统没有安装g++编译器,需要先安装g++,建议g++4.6版本以上,能比较好的支持C++新标准,可以通过命令 g++ --version 查看g++版本号。这就是muduo库的头文件和库文件了。

2024-11-13 17:00:29 1398 1

原创 【Linux】网络编程3

该数组里列出这个进程打开的所有文件的文件描述符。数组的下标是文件描述符,是一个整数,而数组的内容是一个指针,指向内核中所有打开的文件的列表,也就是说内核可以通过文件描述符找到对应打开的文件。然后每个文件都有一个inode,Socket 文件的 inode指向了内核中的Socket 结构,在这个结构体里有两个队列,分别是发送队列和接收队列,这个两个队列里面保存的是一个个struct sk_buff,用链表的组织形式串起来。在TCP通信的过程,服务器端会产生两类不同的文件描述符,一个是监听的文件描述符;

2024-11-12 23:07:13 771

原创 【Linux】网络编程2

TCP是一个面向连接的,安全的,流式传输协议,这个协议是一个传输层协议。面向连接:是一个双向连接,通过三次握手完成,断开连接需要通过四次挥手完成。安全:tcp通信过程中,会对发送的每一数据包都会进行校验, 如果发现数据丢失, 会自动重传流式传输:发送端和接收端处理数据的速度,数据的量都可以不一致。

2024-11-11 19:49:42 1125

原创 【Linux】网络编程1

局域网:局域网将一定区域内的各种计算机、外部设备和数据库连接起来形成计算机通信的私有网络。广域网:又称广域网、外网、公网。是连接不同地区局域网或城域网计算机通信的远程公共网络。IP(Internet Protocol):本质是一个整形数,用于表示计算机在网络中的地址。IP协议版本有两个:IPv4和IPv6。使用一个32位的整形数描述一个IP地址,4个字节,int型也可以使用一个点分十进制字符串描述这个IP地址: 192.168.247.135。

2024-11-10 16:09:35 867

原创 【设计模式】观察者模式

观察者模式也叫做观察者-监听者模式(发布-订阅模式):主要关注的是对象之间的通信,关注的是对象的一对多的关系,也就是多个对象都依赖一个对象,当该对象的状态发生改变时,其他对象都能接收到相应的通知。例子:基于同一组数据,生成了很多不同的界面来显示,有曲线图显示方式,有圆饼图显示方式,有柱状图显示方式等等…,当底层数据发生改变时,所有基于同一组数据的图像显示都需要修改图像,那么此时有两种实现方式:1 .所有图形界面模块都去观察底层数据是否做了改变,如果变化,那么读取数据,修改图像显示。

2024-11-09 14:31:37 973

原创 【设计模式】单例设计模式

为什么会产生设计模式这样的东西呢?就像人类历史发展会产生兵法。最开始部落之间打仗时都是人拼人的对砍。后来春秋战国时期,七国之间经常打仗,就发现打仗也是有。

2024-11-09 13:38:52 1602

原创 【C++】C++11之函数对象,Lambda表达式和functional函数对象类型

知识的学习在于点滴记录,坚持不懈。

2024-11-07 21:58:28 1223

原创 【C++11】智能指针

学习C++的人,一直在接触裸指针,一边感受着它的强大,一边感受着它的坑爹。当然,坑不坑爹在于开发者,指针本身近乎完美,但奈何用的人比较猥琐,给自己埋下无数的坑,还哭喊着指针不好用,那么今天要介绍的智能指针可以释放大家在使用裸指针时的一些压力,当然智能指针无法替代裸指针的全部功能。那么,我们在使用裸指针的时候会遇到哪些问题呢??

2024-11-07 13:31:28 996

原创 【C++】类和对象背后调用的方法

以上的代码,在后面注释中写了,C++在创建对象时所调用了什么构造函数,以及销毁对象时要调用析构函数。

2024-11-06 18:50:00 358

原创 【STL】STL之容器适配器

设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结)。容器适配器分为stack(栈),queue(队列)和priority_queue(优先级队列)

2024-11-05 20:13:43 1010

原创 【C++】C++四种类型转换方式

C++语言级别提供了四种类型转换方式。C风格的转换格式很简单,但是有不少缺点的:1.隐式类型转化有些情况下可能会出问题:比如数据精度丢失2.显式类型转换将所有情况混合在一起,代码不够清晰因此C++提出了自己的类型转化风格,注意。

2024-11-05 13:04:51 332

原创 【C++】继承的理解

无论派生出多少个子类,都只有一个static成员实例。

2024-11-04 22:51:14 812

原创 【C++】Any类的介绍和构建

在java或c#中,Object类型对象可以指向任意类型的变量,因为所有的类默认都从Object类继承。但是在c++中,没有类似Object类这样的类型,而很多时候,为了设计出通用的程序,往往需要类似于Object类型作为参数或者返回值。这种类型十分好用,所以在C++17钟就引入了Any类(上帝类),类似与Java中的Object类,是所有类类型的基类,也就是父类。我们很容易想到使用template模板。

2024-10-28 21:57:26 899

原创 【Linux】Linux之多线程2

上篇我们讲了Linux线程的控制,现在我们来看看Linux如何实现线程同步。

2024-10-26 14:56:18 673

原创 【Linux】Linux之多线程1

在一个程序里的一个执行路线叫做线程(thread),更准确的定义是:线程是一个进程内部的控制序列。一切进程至少都有一个执行线程。线程在进程内部运行,本质是在进程地址空间内运行。在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化。透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流。

2024-10-24 22:26:29 827

原创 【Linux】Linux进程间通信

管道是Unix中最古老的进程间通信的形式。我们把从一个进程连接到另一个进程的一个数据流成为一个“管道”。

2024-10-24 14:02:51 901

原创 【Linux】Linux之基础IO

pathname:要打开或创建的目标文件;flags:打开文件时,可以传入多个参数选项,用下面的一个或者多个常量进行"或“运算,构成flags。参数:O_RDONLY: 只读打开O_WRONLY: 只写打开O_RDWR : 读,写打开这三个常量,必须指定一个且只能指定一个O_CREAT : 若文件不存在,则创建它。需要使用mode选项,来指明新文件的访问权限O_APPEND: 追加写返回值:成功:新打开的文件描述符失败:-1open。

2024-10-17 19:51:14 992

原创 【Linux】Linux进程控制

在之前我们认识了fork()函数,fork函数从一个已存在进程中创建了一个新进程,新进程为子进程,而原进程为父进程。进程调用fork,当控制转移到内核中的fork代码后,内核做:分配新的内存块和内核数据结构给子进程将父进程部分数据结构内容拷贝至子进程添加子进程到系统进程列表中fork返回,开始调度器调度当一个进程调用fork之后,就有两个二进制代码相同的进程。而且它们都运行到相同的地方。但每个进程都将可以开始它们自己的旅程,看如下程序。注意到进程17944没有打印出以前的pid,为什么呢??

2024-10-17 15:11:53 796

原创 【STL】STL之vector

1. vector是表示可变大小数组的序列容器。2.就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。3.本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。

2024-10-15 21:35:52 742

原创 【Linux】Linux进程概念

计算机管理硬件1.描述起来,用struct结构体2.组织起来,用链表或其他高效的数据结构。

2024-10-15 19:21:47 1267

原创 【Linux】Linux常见指令及权限理解

目录的可执行权限是表示你可否在目录下执行命令。如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd进入目即使目录仍然有-r读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。

2024-10-14 22:27:18 1414

原创 【STL】STL之string

这种拷贝方式,称为浅拷贝。浅拷贝。

2024-10-14 19:11:58 965

原创 【C++】C/C++内存管理

什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内 存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对 该段内存的控制,因而造成了内存的浪费。内存泄漏的危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现 内存泄漏会导致响应越来越慢,最终卡死。

2024-10-13 12:48:10 1163

原创 【C++】类和对象3

如果想要让计算机认识现 实生活中的实体,用户必须通过某种面向对象的语言,对实体进行描述,然后通过编写序,创 建对象后计算机才可以认识。之后,在计算机中就有了一个洗衣机类,但是洗衣机类只是站在计算机的角度对洗衣 机对象进行描述的,通过洗衣机类,可以实例化出一个个具体的洗衣机对象,此时计算才。即在人为思想层面对洗衣机进行认识,洗衣机有什 么属性,有那些功能,即对洗衣机进行抽象认知的一个过程。operator>>友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员。

2024-10-13 01:00:00 950

原创 【C++】类和对象2

作用:实现两个自定义数据类型相加的运算。总结1:对于内置的数据类型的表达式的的运算符是不可能改变的总结2:不要滥用运算符重载。

2024-10-12 19:35:21 263

原创 【C++】类和对象1

生活中充满了对象之间反复出现的模式、关系和层次结构。通过探索和理解这些,我们可以深入了解现实生活中物体的行为方式,从而增强我们对这些物体的理解。例如,假设有一天您走在街上,看到一个亮黄色的物体附着在一个绿色的灌木物体上。你可能会认出亮黄色的东西是花,而绿色的灌木是植物。即使你以前从未见过这种特殊类型的植物,你也会知道绿色的东西是树叶,收集阳光。你会知道花有助于植物自我繁殖。你也会知道,如果你杀死了植物,花也会死去。

2024-10-12 16:18:52 1095

原创 【STL】深入STL,泛型编程,为何要使用迭代器??

就是这样,假设有8个容器类,需要支持10种操作,如果每个类都有自己的成员函数,则需要定义8*10个成员函数,而STL方式,只需要定义10个非成员函数即可,使用泛型编程,不同的容器,不同的数据类型,不同的数据结构,只需要使用这些函数就能来执行查找、排序等操作。从实现细节上看,这两个find函数是不同的,一个使用数组索引来遍历整个数组,另一个是tur = tur->next,但广义上来说,这两种算法是相同的,都是将值与容器中每个元素进行比较,找到一样的为止。我们先来看看为两种数据结构表示的find函数,

2024-10-11 18:05:34 829

原创 【数据结构】数组

数组可以方便的通过下标索引的方式获取到下标对应的数据。

2024-10-10 20:26:57 1031

空空如也

空空如也

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

TA关注的人

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