自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 fork()函数详解

目录1.基本了解:2.fork函数的了解:3.僵死进程:1.基本了解:一个进程,包括代码、数据和分配给进程的资源。fork 函数会新生成一个进程,调用 fork 函数的进程为父进程,新生成的进程为子进程。在父进程中返回子进程的 pid,在子进程中返回 0,失败返回-1。为什么两个进程的fpid不同呢,这与fork函数的特性有关。fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:1)在父进程中,fork返回新创建子进程的进程...

2022-05-12 16:28:52 39934 7

原创 TCP、UDP以及面试常见问题

1.UDP:UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的 I P数据报。这与面向流字符的协议不同,如TCP,应用程序产生的全体数据与真正发送的单个IP数据报可能没有什么联系。1. UDP协议端格式:2.UDP的特性:1.无连接:没有建立连接就发数据2.不可靠:没有类似TCP保证数据传输的安全机制,(连接管理机制,确认应答机制,超时机制)效率更高。3.面向数据报:只能一次接收(系统级别的操作:调用系统函数)4.没有发送缓冲区(发了

2022-04-25 23:51:29 5147 6

原创 系统调用(Linux)

用户态: 运行用户程序内核态:运行操作系统程序,操作硬件简单来说,低权限的资源范围较小,高权限的资源范围更大。

2022-12-21 11:33:47 831 1

原创 单例模式(全)c++

目录一、简单介绍:二、构建步骤:三、懒汉式和饥汉式:1.普通懒汉式:2.普通饥汉式:四、不一样的懒汉式(静态对象和双重判空)1.静态懒汉式:2.双重判空懒汉式: 五、推荐:单例模式(Singleton Pattern)是 最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。注意:意图:保证一个类仅有一个实例,并提供一

2022-12-06 18:38:10 303

原创 C++——vector不定长数组输入与输出

先用getline输入一行的数据,然后进行的是将这一行的字符串转换为数字,也就是一维数组。然后将这个一维数组插入到input中。然后将这个一维数组input插入到二维数组res中,最后将input清空,重复以上操作即可。直到输入的是空,也就是在输入一个回车,循环结束。

2022-10-12 23:00:15 5038 1

原创 智能指针第三篇——weak_ptr

目录1.模拟实现加了weak_ptr后的shared_ptr:1.1代码模拟简单实现:1.2内存分布如图:2.拷贝构造和赋值语句3.解决shared_ptr的相互引用:前边说过可以通过使用weak_ptr来解决shared_ptr的相互引用问题。本篇我们会从weak_ptr的构成和内纯分布来深入了解如何解决的。weak_ptr一般都会和shared_ptr一起使用。weak_ptr的结构只有一个变量_Rep,较为简单,所以我们来看两者结合的shared_ptr。1.2内存分布如图: 此时的

2022-07-10 23:21:39 714

原创 智能指针——2(unique_ptr唯一性智能指针和shared_ptr共享性智能指针)

在unique_ptr里因为其所有权的唯一性,拷贝构造和赋值语句会被删除。但是可以进行移动构造和移动赋值。 还要注意的一点是在调用函数时,因为传参时调用拷贝构造函数,可能传参出现错误。unique_ptr提供两个模板,一个针对一个对象,一个针对一组对象。shared_ptr多出一个结构引用计数,用于计算该对象被多少指针对象拥有。可用use_cout计算。内存分布:拷贝构造和赋值语句都是指向同一块RefCnt,并使其引用计数+1.这里边最难的应该就是移动赋值。在移动赋值时,先确定取出自赋值。如果this

2022-07-07 18:18:57 589

原创 智能指针第一篇——auto_ptr

目录1.RAll:1.1原理:1.2为什么使用智能指针,不使用裸指针:2.c++17已经移除的auto_ptr:2.1智能指针的内存分布: 2.2如何解决->和*来调用成员方法(运算符重载)2.3reset()函数:2.4auto_ptr的缺点:使用局部对象来管理资源的技术称为资源获取即初始化;这里的资源主要是指操作系统中有限的东西如内存,网络套接字,网络套接字,互斥量,文件句柄等等,局部对象是指存储在栈的对象,它的生命周期是由操作系统来管理的,无需人工介入。 但是资源的销毁往往是程序员经常忘记的一个环节,

2022-07-06 22:31:01 849

原创 GET和POST的区别:

GET和POST都是HTTP的请求方法。GET:申请获取资源,而不对服务器产生任何其他影响。POST:客户端向服务器提交数据的方法。这种方法会影响服务器:服务器可能根据收到的数据动态创建新的资源,也可能更新原有的资源。GET和POST的区别:...

2022-06-22 21:15:22 400 1

原创 vscode给远程服务器安装扩展速度慢——安装不上解决方法(在线或离线方式)

先在本地安装扩展,一般来说,本地安装速度很快也一定能成功,然后在本地已安装的目录里边就可以安装到远程服务器上,但是很多人安装时,速度很慢,并且会失败(我就是这种情况,在下载CMake时速度特别慢),这时可以采用离线方式安装。可以采用VSIX安装。先去vscode的扩展下载市场:https://marketplace.visualstudio.com/search?target=VSCode&category=All%20categories&sortBy=Installs 在该市场中搜索到你想下载的插件。

2022-06-15 21:45:40 10147 9

原创 Keil uVision5修改工程名字

目录1.打开文件中mdk的文件夹:2.把Listings和Objects里边东西全部删除:3.删除文件夹之外的东西,并且绿色这个文件改名:4.打开Keil uVision5,点开他那个魔法棒:5.选择这个Output,修改名字点击ok即可:6.把改好的工程重新编译一遍就行了:...

2022-06-13 22:24:21 7263

原创 高性能服务器框架(阻塞I/O和非阻塞I/O)

目录一、服务器模型:1.C/S模型:2.P2P模型:二、服务器编程框架:三、I/O模型:1.阻塞I/O和非阻塞I/O:2.I/O复用:3.SIGIO信号:4.异步I/O:5.I/O模型对比:四、两种高效的事件处理模式:1.Reactor模式:2.Proactor模式:3.使用同步I/O模拟实现Proactor模式: 五、两种高效的并发模式: 1.半同步/半异步模式:2.领导者/追随者模式:六、有限状态机:1.状态独立的有限状态机:2.带状态转移的有限状态机:七、提高服务器性能的其他建议: 1.池:2.数据复

2022-06-08 20:36:44 1205 1

原创 pthread_atfork函数(解决在多线程程序中fork可能造成的死锁问题)

目录1.多线程可能的死锁问题:2.对上述问题举个例子:3.解决方法(pthread_atfork):3.1pthread_atfork函数:3.2加入pthread_atfork后的代码及运行结果:思考这样一个问题:如果一个多线程程序的某个线程调用了fork函数,那么新创建的子进程是否将自动创建和父进程相同数量的线程呢?答案是“否",正如我们期望的那样。子进程只拥有一个执行线程,它是调用fork 的那个线程的完整复制。并且子进程将自动继承父进程中互斥锁(条件变量与之类似)的状态。也就是说,父进程中已经被加锁

2022-06-03 18:25:23 1462 1

原创 计算机网络——运输层(TCP、UDP)

运输层位于应用层和网络层之间,是分层的网络体系结构的重要部分。该层为运行在不同主机上的应用进程提供直接的通信服务起着至关重要的作用。一、概述:运输层协议为运行在不同主机上的应用进程之间提供了逻辑通信功能。应用进程使用运输层提供的逻辑通信功能彼此发送报文,而无须考虑承载这些报文的物理基础设施的细节。在发送端,运输层将从发送应用程序进程接收到的报文转换成运输层分组,用因特网术语来讲该分组称为运输层报文段(segment)。1.运输层和应用层的关系:在协议栈中,运输层刚好位于网络层之上。网络层

2022-05-31 16:53:05 2398

原创 计算机网络——应用层(http、SMTP、DNS)

一、应用层协议原理:1.网络应用程序体系结构:从应用程序研发者的角度看,网络体系结构是固定的,并为应用程序提供了特定的服务集合。在另一方面,应用程序体系结构( application architecture)由应用程序研发者设计,规定了如何在各种端系统上组织该应用程序。在选择应用程序体系结构时,应用程序研发者很可能利用现代网络应用程序中所使用的两种主流体系结构之一:客户-服务器体系结构或对等(P2P)体系结构。1.1 客户-服务器体系:在客户-服务器体系结构(client- serve

2022-05-25 19:48:14 7517 1

原创 计算机网络和因特网

目录一、什么是因特网?1.具体构成:2.服务描述:3.分组交换中的时延、丢包和吞吐量:1.节点时延:2.丢包:3.端到端时延:4.吞吐量:二、什么是协议:三、协议层次:1.分层:2.封装:三、网络攻击:1.病毒和蠕虫植入:2.Dos攻击:3.IP哄骗:一、什么是因特网?什么是因特网?回答这个问题有两种方式:其一,我们能够描述因特网的具体构成,即构成因特网的基本硬件和软件组件;其二,我们能够根据为分布式应用提供服务的联.

2022-05-23 17:22:49 1474 1

原创 I/O复用:select、poll、epoll

目录1.I/O复用:2.select:(1)select的API:(2)处理带外数据:3.poll:(1)poll的API:4.epoll:(1)epoll的不同:(2)epoll_ctl():(3)epoll_wait():(4)LT和ET:5.三种I/O复用方式的比较:(1)从事件集看:(2)从实现方式看:(3)总结:6.写在最后:1.I/O复用:I/O复用使得程序能同时监听多个文件描术符,这对提高程序的性能至关重要。需要指

2022-05-21 20:32:28 489

原创 高并发中的惊群现象

目录1.惊群现象:2.危害:3.解决:1.惊群现象: 惊群效应(thundering herd)是指多进程(多线程)在同时阻塞等待同一个事件的时候(休眠状态),如果等待的这个事件发生,那么他就会唤醒等待的所有进程(或者线程),但是最终却只能有一个进程(线程)获得这个时间的“控制权”,对该事件进行处理,而其他进程(线程)获取“控制权”失败,只能重新进入休眠状态,这种现象和性能浪费就叫做惊群效应2.危害: 因为惊群现象意味着所有等待同一个时间的进程...

2022-05-21 19:15:47 427 2

原创 共享库和静态库

1.什么是库文件:库是一组预先编译好的方法的集合。Linux系统存储的库的位置一般在:/lib 和 /usr/lib。库有两种,一种是静态库,其命令规则为 libxxx.a,一种是共享库,其命令规则为 libxxx.so。两种库函数的使用过程:静态库在链接时,把需要的库函数拷贝粘贴过来。共享库在链接时,把需要的库函数标记,需要时去动态加载。2.静态库的生成和使用(简单举例):1.生成:要先把.c文件变成.o文件才能创建静态库。生成静态库:ar crv ..

2022-05-05 20:30:29 801 7

原创 数据结构——二叉树遍历和常见问题

二叉树遍历二叉树常见问题

2022-04-22 18:18:26 3284 1

原创 Git安装及常用命令

Git是什么?Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。git和svn的区别:1.SVN是集中式版本控制系统,版本库是集中放在中央服务器的。2.Git是分布式版本控制系统,那么它就没有中央服务器的。git和svn的区别:1、Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。2、Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、

2022-04-21 12:05:27 4233 2

原创 结构体和联合体(内存对齐)

结构体内存对齐:1.为什么要进行内存对齐:1)内存大小的基本单位是字节(byte),理论上来讲,可以从任意地址访问变量,但是实际上,cup 并非逐字节读写内存,而是以 2,4,或 8 的倍数的字节块来读写内存,因此就会对基本数据类型的地址作出一些限制,即它的地址必须是 2,4 或 8 的倍数。那么就要求各种数据类型按照一定的规则在空间上排列,这就是对齐。2)有些平台每次读都是从偶地址开始,如果一个 int 型(假设为 32 位系统)如果存放在偶地址开始的地方,那么一个读周期就可以读出这 32bit,

2022-04-20 13:24:55 1657 4

原创 C++——继承和多态

多态:多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。多态性是面向对象程序设计的关键技术之一。若程序设计语言不支持多态性,不能称为面向对象的语言。利用多态性技术,可以调用同一个函数名的函数,实现完全不同的功能。1.1两种多态:1.1.1编译时多态(早绑定):编译时的多态通过函数的重载和运算符的重载来实现的。就像是未出生的男女孩定下的娃娃亲。1.1.2运行时多态(晚绑定)

2022-03-07 16:02:31 2393

原创 继承详解:

一、继承:1.1继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构。体现了由简单到复杂的认识过程。1.2三中继承方式图解:(1)保护成员在继承时等同于公有成员,在类外访问等同于私有属性。(2)基类私有成员在派生类中“不可见”(3)使用继承, 我们的继承方式一般都是public继承, 因为其他继承方式, 没法复用代码,代码利用率低。1.3具有继承

2022-03-03 21:54:51 346 1

原创 leetcode-19.四数之和

一、问题描述:给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):条件:0 <= a, b, c, d < na、b、c 和 d 互不相同nums[a] + nums[b] + nums[c] + nums[d] == target你可以按 任意顺序 返回答案 。示例 1:输入:num

2022-01-28 19:11:35 499

原创 tcp协议和socket编程

tcp协议:特点面向连接 可靠 流试服务 会产生粘包可靠性:应答确认,超时重传 乱序重排 去重 滑动窗口 流量控制tcp编程流程:三次握手四次挥手:connect()建立连接后进行三次握手,close()进行四次挥手。三次握手:connect成功则证明三次握手成功。四次挥手:第一条是通知关闭,第二条是回复确定。listen():两个队列,一个放置未完成握手的,一个放置完成握手的,accept:处理完成握手的(c=accept)线程实现多客户端链接服

2021-12-11 15:50:48 2293

原创 泛型算法和函数对象

1.泛型算法:泛型算法copyfindsortfind_if1.1copy:copy(v.begin(), v.end(), inserter(v2, v2.begin()));//把v的begin---end区间拷贝到对象v2(从v2.begin开始)//v.begin()和v.end()返回是临时量,具有常属性,传参是要传入const和&。vector<int> v; for (int i = 0; i < 10; i++

2021-11-27 16:31:12 566

原创 STL迭代器

1.顺序迭代器—遍历型迭代器1.1:iterator 正向迭代器//正向打印模板函数//正向打印模板函数template <typename T>void show_it(T& con){ typename T::iterator it = con.begin(); for (; it != con.end(); it++) { cout << *it << " "; } cout << endl;}vector&lt

2021-11-26 21:25:35 414

原创 STL容器

STL容器模板打印函数:template<typename CON>void show_con(CON& con){ typename CON::iterator it = con.begin(); for (; it != con.end(); it++) { cout << *it << " "; } cout << endl;}1.近容器:1.1string:这类容器中只能放入字符串,故称为近容器,arr[]也是如此

2021-11-26 20:29:58 198

空空如也

空空如也

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

TA关注的人

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