自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

大柳_的博客。

天行健,君子应以自强不息。

  • 博客(37)
  • 收藏
  • 关注

原创 C++ | 不用额外空间反转句子

具体查看:https://blog.csdn.net/weixin_41565755/article/details/88990280。具体查看:https://blog.csdn.net/qq_40968179/article/details/104375849。3.string::nopes(配合第一个函数使用,当没搜索到时返回的数值等于nopes)1.first_of_all()(括号里是查找的值,返回匹配值的下标)给定一个字符串,逐个翻转字符串中的每个单词。2.substr()(切割字符串)

2022-08-25 11:17:45 634 1

原创 C++ | 菱形继承与虚继承

简单介绍一下C++中的菱形继承提示:以下是本篇文章正文内容,下面案例可供参考虚继承主要解决菱形继承中属性存在二义性的问题。

2022-08-08 10:24:40 604

原创 C++ | sort()函数使用详解

力扣347题给你一个整数数组nums和一个整数k,请你返回其中出现频率前k高的元素。你可以按任意顺序返回答案。碰到需要使用sort()函数对二维数组进行排序的情况,这里详细记录一下sort()的用法。提示以下是本篇文章正文内容,下面案例可供参考终于不看题解完成了一道medium的题目,纪念一下!!!...

2022-07-28 18:52:43 5761

原创 C++ | 四种类型转换

简单记录一下C++中常用的四种类型转换。提示以下是本篇文章正文内容,下面案例可供参考RTTI(RunTimeTypeldentification)即通过运行时类型识别,程序能够使用基类的指针或引用来检查着这些指针或引|用所指的对象的实际派生类型。RAII也称为“资源获取就是初始化”,是c++等编程语言常用的管理资源、避免内存泄露的方法。它保证在任何情况下,使用对象时先构造对象,最后析构对象。httpshttpshttpshttpshttpshttpshttpshttpshttps。......

2022-07-21 14:36:38 4802 1

原创 算法 | 二分查找及其变种

刷题时对于二分查找法的一些总结提示以下是本篇文章正文内容,下面案例可供参考二分查找真他妈的是个细节怪!!!https。

2022-07-19 11:41:06 814

原创 C++ | C++中二维数组创建与初始化

刷题时碰到需要用vector创建二维数组的情况,简单记录一下提示以下是本篇文章正文内容,下面案例可供参考由于C11新特性,第二种单个插入元素可以直接写成可以拿{}直接一步插入所有数据。

2022-07-15 10:57:22 1223

原创 C++ | lambda表达式

简单介绍lambda表达式以及使用方法lambda表达式是C++11最重要也最常用的一个特性之一.lambda表达式定义了一一个匿名函数,并且可以捕获一定范围内的变量。lambda 表达式的语法形式可简单归纳如下:其中: capture是捕获列表; params 是参数表; opt 是函数选项; ret 是返回值类型; body 是函数体。因此,一个完整的lambda 表达式看起来像这样:lambda表达式可以通过捕获列表捕获一定范围内的变量:● [ ]不捕获任何变量。● [&]捕获外部作用域中

2022-06-24 11:43:07 392

原创 C++ | shared_ptr与weak_ptr

简单介绍shared_ptr与weak_ptr,仿写系统的shared_ptr与weak_ptr,并解决循环引用的问题.shared_ptr是一种智能指针(smart pointer),作用有如同指针,但会记录有多少个shared_ptrs共同指向一个对象。这便是所谓的引用计数(reference counting)。一旦最后一个这样的指针被销毁,也就是一旦某个对象的引用计数变为0,这个对象会被自动删除。weak_ptr是为配合shared_ptr而引入的一种智能指针。2.Ref_con3.shar

2022-06-23 16:03:08 4737

原创 Linux基础 | 守护进程

守护进程是在后台为用户提供服务且不需要与用户进行交互的一种程序。**会话:**在操作系统中每打开一个中断就伴随着一个会话的产生会话首进程:在一个会话中执行的第一个进程,在Linux中一般是命令解释器**会话ID(SID):**该会话首进程的PID就是该会话的ID进程组:操作系统上每执行一个进程,就会产生一个进程组,该进程为该进程组的组长,该进程的PID为该进程组的ID(获取函数get_pgrp);2.输出结果fork();//退出父进程保留子进程setsid();//子进程移动得新会话里f

2022-06-13 16:03:41 360

原创 Linux网络编程 | Libevent库

简单介绍libevent库以及使用Libevent 是开源社区的一款高性能的 I/O 框架库,使用 Libevent 的著名案例有:高性能的分布式内存对象缓存软件 memcached,Google 浏览器Chromium 的 Linux 版本。作为一个I/O 框架库,Libevent 具有如下特点:◼ 跨平台支持。 Libevent 支持 Linux、Unix 和 Windows。◼ 统一事件源。Libevent 对 I/O 事件、信号和定时事件提供统一的处理。◼ 线程安全。Libevent 使用 li

2022-06-13 10:26:49 591

原创 Linux网络编程 | I/O复用之epoll(ET模式)

epoll(ET模式)以及使用方法。epoll 对文件描述符有两种操作模式:LT(Level Trigger,电平触发)模式和 ET(EdgeTrigger,边沿触发)模式。LT 模式是默认的工作模式。当往 epoll 内核事件表中注册一个文件描述符上的 EPOLLET 事件时,epoll 将以高效的 ET 模式来操作该文件描述符。对于 LT 模式操作的文件描述符,当epoll_wait 检测到其上有事件发生并将此事件通知应用程序后,应用程序可以不立即处理该事件。这样,当应用程序下一次调用 epoll_wa

2022-06-07 15:24:27 569

原创 Linux网络编程 | I/O复用之epoll(LT模式)

epoll原理以及使用。epoll 是 Linux 特有的 I/O 复用函数。它在实现和使用上与 select、poll 有很大差异。首先,epoll 使用一组函数来完成任务,而不是单个函数。其次,epoll 把用户关心的文件描述符上的事件放在内核里的一个事件表中。从而无需像 select 和 poll 那样每次调用都要重复传入文件描述符或事件集。但 epoll 需要使用一个额外的文件描述符,来唯一标识内核中的这个事件表。◼ epoll_create()用于创建内核事件表◼ epoll_ctl()用于操作

2022-06-07 15:14:58 286

原创 Linux网络编程 | I/O复用之poll

poll的原理以及使用。poll 系统调用和 select 类似,也是在指定时间内轮询一定数量的文件描述符,以测试其中是否有就绪者。int poll(struct pollfd fds, nfds_t nfds, int timeout)/ poll 系统调用成功返回就绪文件描述符的总数,超时返回 0,失败返回-1nfds 参数指定被监听事件集合 fds 的大小。 timeout 参数指定 poll 的超时值,单位是毫秒,timeout 为-1 时,poll 调用将永久阻塞,直到某个事件发生,timeo

2022-06-07 13:55:56 776

原创 Linux网络编程 | I/O复用之select

select的原理以及使用select系统调用的用途是:在一段指定时间内,监听用户感兴趣的文件描述符的可读、可写和异常等事件。1.int select(int maxfd, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);//select 成功时返回就绪(可读、可写和异常)文件描述符的总数。如果在超时时间内没有任何文件描述符就绪,select 将返回 0。select 失败是返回-1.如果在sel

2022-06-07 10:54:29 1041

原创 Linux网络编程 | HTTP、Web服务器

介绍http协议,实现简单的web服务器。http协议是应用层的协议,是对tcp协议的一种应用请求方法类型:这些方法中,HEAD、 GET、OPTIONS和TRACE被视为安全的方法,因为它们只是从服务器获得资源或信息,而不对服务器进行任何修改。POST、PUT、DELETE和PATCH则影响服务器上的资源。应答码类型:输出:在浏览器中输入www.baidu.com发生了什么?

2022-06-02 11:35:56 205

原创 Linux网络编程 | UDP编程

浅谈UDP。UDP是一种不可靠的、无连接的、数据报服务。发送端应用程序每执行一次写操作,UDP 模块就将其封装成一个 UDP 数据报发送。接收端必须及时针对每一个 UDP 数据报执行读操作,否则就会丢包。并且,如果用户没有指定足够的应用程序缓冲区来读取 UDP 数据,则 UDP 数据将被截断。因此,采用UDP协议时必须要求接收端可以一次性收取完发送端一次发送的数据,不然就会造成数据丢失。2.客户端3.输出结果UDP是一种无连接的传输方式,所以可以多个客户端同时发送。服务器端关闭立马重启,客户

2022-06-01 16:20:58 2961

原创 Linux网络编程 | TCP详解

总结TCP相关问题TCP是一种面向链接的,可靠的,流式服务。TCP 字节流的特点,发送端执行的写操作次数和接收端执行的读操作次数之间没有任何数量关系,应用程序对数据的发送和接收是没有边界限制的。此时可以看到此时可以看到,发送端分别发送了hello world linux,而在接收端一次性收取完成,无法有效区分出三个单词,这就造成粘包问题解决方法:1.发送端每次发送之后要收到接收端的回复再进行下一次发送2.制定协议,比如长宽高分别用【长】【宽】【高】表示。可靠性:超时重传,应答确认,乱序重排流量控

2022-06-01 14:44:06 3560 1

原创 Linux多线程 | 线程安全、多线程中执行fork()

本篇文章主要讲述怎么保证线程安全。线程安全即就是在多线程运行的时候,不论线程的调度顺序怎样,最终的结果都是一样的、正确的。那么就说这些线程是安全的。要保证线程安全需要做到:期待输出结果:主函数依次输出 1 2 3 4 5…线程函数依次输出 a b c d e…实际输出结果:原因:因为strtok内部实现有一个全局的指针,该指针会自动记录下一次分割的位置,而在多线程中该指针可能会被同时访问,因此出现错误的情况。此时我们需要用strtok_r这个线程安全函数。输出:分析:此时子进程

2022-06-01 09:21:06 240

原创 Linux多线程 | 线程同步

文章目录前言主要介绍四种常用的线程同步方式以及相关的函数接口。一、线程同步二、同步方法1.互斥锁2.信号量3.条件变量4.读写锁总结前言主要介绍四种常用的线程同步方式以及相关的函数接口。提示:以下是本篇文章正文内容,下面案例可供参考一、线程同步线程同步指的是当一个线程在对某个临界资源进行操作时,其他线程都不可以对这个资源进行操作,直到该线程完成操作,其他线程才能操作,也就是协同步调,让线程按预定的先后次序进行运行。线程同步的方法有四种:互斥锁、信号量、条件变量、读写锁。二、同步方法1.互斥锁

2022-05-28 16:45:16 1379

原创 Linux多线程 | 线程与进程

文章目录一、线程与进程1.什么是线程2.线程的实现方式3.线程与进程的区别二、多线程使用1.代码如下(示例):2.运行结果总结一、线程与进程1.什么是线程线程是进程内部的一条执行序列或执行路径,一个进程可以包含多条线程。2.线程的实现方式在操作系统中,线程的实现有以下三种方式:◼ 内核级线程:由内核构建,可以分配到多个核心上。◼ 用户级线程:由用户创建,只能分配到一个核心上。◼ 组合级线程3.线程与进程的区别◼进程是资源分配的最小单位,线程是 CPU 调度的最小单位◼进程有自己的独

2022-05-27 19:40:43 149

原创 Linux进程间通讯 | 信号量、共享内存、消息队列

文章目录前言一、临界资源与临界区二、信号量三、信号量使用方法1.常用接口2.使用示例2.输出结果四、共享内存1.什么是共享内存2.代码示例五、消息队列总结前言进程间通信的一种方式:信号量提示:以下是本篇文章正文内容,下面案例可供参考一、临界资源与临界区同一时间段只允许一个进程或线程访问的资源叫做临界资源。访问临界资源的代码段叫临界区。二、信号量信号量是一个特殊的变量,一般取正数值。它的值代表允许访问的资源数目,获取资源时,需要对信号量的值进行原子减一,该操作被称为 P 操作当信号量值为

2022-05-27 14:34:40 421

原创 Linux进程间通讯 | 管道

文章目录一、管道二、使用步骤1.有名管道2.无名管道总结一、管道有名管道无名管道区别:有名管道在任意两个进程间通信,无名管道一般在父子进程间通信。二、使用步骤1.有名管道代码如下(示例)://////////mkfifo//首先创建管道文件 fifo//创建a.c,向文件中写入”hello“int main(){ int fd=open("./fifo",O_WRONLY)//打开管道文件,只写方式 assert(fd!=-1); printf("fd=%d\n",fd

2022-05-27 09:43:58 203

原创 Linux基础 | 信号

文章目录一、信号是什么?二、常用信号二、改变信号响应方式1.代码如下(示例)2.仿写系统的kill指令总结一、信号是什么?信号是系统响应某个条件而产生的事件,进程接收到信号会执行相应的操作。与信号有关的系统调用在“signal.h”头文件中有声明。二、常用信号二、改变信号响应方式这里改变函数Linux上ctrl+c这个操作的响应1.代码如下(示例)输出:2.仿写系统的kill指令//传入参数3个 1.程序名字 2.要结束进程的pid 3.发送的信号值int main(int a

2022-05-25 11:53:52 67

原创 Linux基础 | 库函数、系统调用以及文件操作

文章目录前言本文简单介绍记录一下系统调用和库函数的区别一、什么是系统调用与库函数二、区别与联系1.区别2.一些文件操作常使用的系统调用3.调用过程三、父子进程共享同一文件1.文件描述符2.代码示例总结前言本文简单介绍记录一下系统调用和库函数的区别提示:以下是本篇文章正文内容,下面案例可供参考一、什么是系统调用与库函数系统调用是在程序中能用类似函数调用方式调用的操作系统服务的集合;库函数(Library function)是将函数封装入库,供用户使用的一种方式。二、区别与联系1.区别系统调用

2022-05-25 10:46:58 493

原创 C++ | auto_ptr与unique_ptr

文章目录前言一、RAII二、裸指针1.裸指针是什么2.裸指针所带来的问题、三、智能指针1.智能指针的种类2.unique_ptr总结前言浅谈智能指针提示:以下是本篇文章正文内容,下面案例可供参考一、RAII二、裸指针1.裸指针是什么由类型直接定义的指针。比如:2.裸指针所带来的问题、1.难以区分指向的是单个对象还是一个数组;2.使用完指针之后无法判断是否应该销毁指针, 因为无法判断指针是否"拥有” 指向的对象;3.在已经确定需要销毁指针的情况下,也无法确定是用delete关键字

2022-05-24 16:36:03 884

原创 Linux基础 | 孤儿进程与僵死进程

文章目录前言一、孤儿进程是什么?二、僵死进程1.代码示列2.僵死处理方法总结前言`Linux操作系统中经常会听到孤儿进程和僵死进程,今天就简单介绍一下两者的概念。提示:以下是本篇文章正文内容,下面案例可供参考一、孤儿进程是什么?孤儿进程是在linux中,父进程早与子进程结束,且子进程没有被pid==1的进程接管。二、僵死进程僵死进程是指子进程先于父进程结束,且父进程没有接受到子进程的结束码,此时子进程会变成僵死进程。1.代码示列执行时输入ps命令查看进程状态。输出结果:我们

2022-05-19 14:21:45 348

原创 Linux基础 | fork()

文章目录前言Liunx中fork用来产生一个子进程。一、进程是什么二、操作系统如何管理进程三、fork四、写时拷贝五、常考面试题目题目1题目2总结前言Liunx中fork用来产生一个子进程。一、进程是什么二、操作系统如何管理进程pcb又叫进程管理块,其中有一个Pid唯一标识一个进程,并通过链表的结构将进程串接起来。三、fork其父进程的返回值为子进程的PID,子进程的返回值为0;四、写时拷贝传统的fork()系统调用直接把所有的资源复制给新创建的进程。这种实现过简单并且效率低下,因

2022-05-19 11:36:15 378

原创 C++ | 对象创建限制在堆或栈

提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、对象的建立二、限制对象只能建立在堆上:1.解决方法 1:2.解决方法 2:二、限制对象只能建立在栈上:前言如何限制类的对象只能在堆上创建?如何限制对象只能在栈上创建?一、对象的建立说明:C++ 中的类的对象的建立分为两种:静态建立、动态建立。静态建立:由编译器为对象在栈空间上分配内存,直接调用类的构造函数创建对象。例如:A a;动态建立:使用 new 关键字在堆空间上创建对象,底层首先调用 operator .

2022-05-18 15:42:14 1220 2

原创 Linux基础 | 静态库与共享库

文章目录一、库文件是什么?二、共享库与静态库的区别三、共享库与静态库的创建方法1.静态库的生成方法2.共享库的生成方法三、共享库与静态库的使用实例总结一、库文件是什么?库是预先编译好的方法的集合。二、共享库与静态库的区别Linux上静态库一般以.a结尾。动态库一般以.so结尾三、共享库与静态库的创建方法1.静态库的生成方法2.共享库的生成方法三、共享库与静态库的使用实例静态库共享库需要注意的是此时main函数并不能运行成功,因为只是在main程序中标记了共享库中的方法,当

2022-05-18 14:27:51 362

原创 Linux基础 | GDB调试

文章目录一、GDB是什么二、GDB常用指令三、GDB调试例程总结一、GDB是什么GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)3、当程序被停住时,可以检查此时你的程序中所发生的事。4、动态的改变你程序的执行环境。二、GDB常用指令三、GDB调试例程加上调试信息之后文件的容量比release版本下要大很多。这里可以看到先运行m

2022-05-18 09:56:27 286

原创 C语言基础 | .c文件怎么通过编译连接变成可执行文件

前言在Linux下进行程序的编译链接调试,查看在整个过程中发生了哪些事情。

2022-05-17 16:18:44 289

原创 Linux基础 | 系统目录和文件类型

Linux下系统目录和文件类型的简单介绍一、系统目录bin存放常用的命令(大多为二进制)boot存放系统的内核dev存放系统的硬件设备

2022-05-15 15:41:45 389

原创 C++ | 引用与const

文章目录前言一、引用二、使用引用需注意的事项1.引用必须初始化2.没有所谓的空引用3.没有引用的引用,即引用不分级,要与二级指针区别三、const前言C++中引用的本质以及使用,const的使用。一、引用#include<iostream>int main(){ int a=10; int b=20; int c=30; a&&b;//与运算 a&b;//位与运算 int &d=a;//引用,d为a的别名}二、使用引用需注意的事.

2022-05-15 14:59:18 161

原创 Linux网络编程 | TCP客户端与服务器编程流程

前言TCP协议下服务器与客户端编程流程。提示:以下是本篇文章正文内容,下面案例可供参考一、TCP是什么?TCP是一种可靠的,面向连接的流式服务。二、使用步骤服务器端代码如下(示例):```ser.c``#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<sys/socket.h>#include<net

2022-05-13 17:04:07 551

原创 Linux网络编程 | 计算机网络体系结构概述

Linux网络编程 | 计算机网络体系结构概述前言简述计算机网络编程的相关基础知识。一、网络网络是由若干结点和连接这些结点的链路组成,网络中的结点可以是计算机,交换机、路由器等设备。网络设备有:交换机、路由器、集线器传输介质有:双绞线、同轴电缆、光纤把多个网络连接起来就是所谓互联网。二、网络的七层/四层模型OSI模型从低到高分别是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。应用层:网络服务与最终用户的一个接口,常见的协议有:HTTP FTP SMTP SNMP DNS

2022-05-13 14:57:52 488

原创 C语言基础 | 函数、逻辑表达式、跳转指令

C语言3-31bool类型逻辑表达式的结合性三目运算符例如:max=(a>b)?a:b 若a>b,则将a的值给max,反之,则将b的值给max;空语句:例如这里的打印命令不管if真假,都会执行。因为空语句(;)与if组成了循环体,真假情况下都会执行空语句而跳过if继续执行打印命令。在while()添加空语句的影响:在for添加空语句的影响:函数函数调用过程...

2021-04-14 18:14:02 412

原创 C语言基础 | 变量、关键字、数据类型大小

文章目录一、文件类型二、编译链接过程三、进制转换四、数据类型大小五、定义和声明的区别六、变量和常量1.局部变量和全局变量2.C语言中的的常量。3.常变量与宏常量4.枚举常量七、定界符八、程序和进程的区别九、作用域(可见性)和生存期十、函数的声明和定义十一、指针十二、关键字1.extern:2.static:3.const:4.typedef5.sizeof一、文件类型除了.exe文件,其他的文件格式都不可执行。二、编译链接过程三、进制转换(103)10->(0110 0111)2-&g

2021-03-31 16:30:21 573

空空如也

空空如也

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

TA关注的人

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