自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Python 实用脚本 实现文件重复去重

如果文件夹中有着重复的文件内容,就会白白占用许多空间,所有可以自制一个清除重复文件的脚本。

2023-02-01 16:46:41 1457 1

原创 Python 实用脚本 实现文件自动分类

文件夹的文件很杂乱,我们应该怎么去自动整理并且分类呢?写个简单的python脚本进行整理吧!今天主要使用python写了一个简单的文件分类功能的脚本。

2023-02-01 16:36:34 1362

原创 C++设计模式——观察者模式

设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。主要实现了观察者模式。

2022-10-14 12:09:12 406

原创 C++设计模式——适配器模式

设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。主要实现了适配器模式。

2022-10-14 12:05:35 521

原创 C++设计模式——装饰器模式

设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。主要实现了装饰器模式。

2022-10-14 12:01:23 1360 1

原创 C++设计模式——代理模式

这篇文章主要实现了代理模式。

2022-10-14 11:56:52 285

原创 C++设计模式——工厂模式

设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。本文主要实现了简单工厂和抽象工厂。

2022-10-14 11:51:42 803

原创 C++设计模式——单例模式

*设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。**这就是单例模式的实现,主要分为饿汉式单例模式和懒汉式单例模式的实现。

2022-10-14 11:12:27 297

原创 Linux C/C++本地套接字通信

文章目录一、实现流程二、代码实现1.服务器2.客户端一、实现流程本地套接字的作用:进程间通信有关系的进程间通信没有关系的进程间通信本地套接字实现和网络套接字类似,一般采用TCP通信流程//本地套接字的流程 - TCP//服务器端1.创建监听的套接字 int lfd = socker(AF_UNIX/AF_LOCAL,SOCK_STREAM,0);2.监听的套接字绑定本地的套接字文件 ->server端 struct sockaddr_un addr; //

2022-05-23 16:59:17 553

原创 Linux C/C++组播

文章目录一、流程实现二、代码实现1.服务器2.客户端一、流程实现二、代码实现1.服务器代码如下(示例):#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <arpa/inet.h>int main(){ // 1.创建一个通信的socket int fd = socket(PF_INET,

2022-05-23 00:48:21 692 2

原创 Linux C/C++广播

文章目录一、流程实现二、代码实现1.服务器2.客户端一、流程实现二、代码实现1.服务器代码如下(示例):#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <arpa/inet.h>int main(){ // 1.创建一个通信的socket int fd = socket(PF_INET,

2022-05-23 00:46:29 539

原创 Linux C/C++UDP通信实现

文章目录一、UDP通信流程二、代码实现1.服务器2.客户端一、UDP通信流程二、代码实现1.服务器代码如下(示例):#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <arpa/inet.h>int main(){ // 1.创建一个通信的socket int fd = socket(PF

2022-05-23 00:43:13 2612

原创 Linux C/C++ epoll的工作模式

文章目录一、LT模式(水平触发)服务器代码客户端代码二、ET模式(边沿触发)服务器代码客户端代码一、LT模式(水平触发)假设委托内核检测读事件->检测fd的读缓冲区​ 读缓冲区有数据->epoll检测到了会给用户通知​ a.用户不读数据,数据一直在缓冲区,epoll会一直通知​ b.用户只读了一部分数据,epoll会通知​ c.缓冲区的数据读完了,不通知LT(level-triggered)是缺省的工作方式,并且同时支持block和no_block so

2022-05-23 00:39:41 479

原创 Linux C/C++ I/O多路复用(epoll)

文章目录一、参数介绍二、代码实现1.服务器2.客户端一、参数介绍#include<sys/epoll.h>//创建一个新的epoll实例。在内核中创建了一块数据,这个数据中有两个比较重要的数据,一个是需要检测的文件描述符的信息(红黑树),还有一个是就绪列表,存放检测到数据发送改变的文件描述符信息(双向链表)。int epoll_create(int size); -参数: size:现在不起作用了,必须大于0 -返回值 -1:失败

2022-05-23 00:31:48 323

原创 Linux C/C++ I/O多路复用(poll)

文章目录一、参数介绍二、代码实现1.引入库2.读入数据一、参数介绍#include<poll.h>struct pollfd{ int fd; /*委托内核检测的文件描述符*/ short events; /*委托内核检测文件描述符的什么事件*/ short revents; /*文件描述符实际发生的事件*/};int poll(struct pollfd* fds,nfds_t nfds,int timeout); -参数: fds:是

2022-05-23 00:28:08 274

原创 Linux C/C++ I/O多路复用(select)

文章目录一、参数介绍二、使用步骤1.服务器端2.客户端一、参数介绍#include<sys/time.h>#include<sys/types.h>#include<unistd.h>int select(int nfds,fd_set* readfds,fd_set* writefds,fd_set* exceptfds,struct timeval* timeout); -参数: nfds:指定被监听文件的文件描述符的总数。通常被设置为

2022-05-23 00:24:19 310

原创 Linux C/C++多进程和多线程实现并发服务器

文章目录一、客户端二、服务器1.多进程2.多线程总结一、客户端代码如下:// TCP通信客户端#include<stdio.h>#include<arpa/inet.h>#include<unistd.h>#include<string.h>#include<stdlib.h>int main(){ //1.创建套接字 int fd = socket(AF_INET, SOCK_STREAM, 0);

2022-05-19 22:56:35 682

原创 Linux C/C++TCP通信实现

文章目录一、TCP通信流程二、使用步骤1.TCP(客户端)2.TCP(服务器端)总结一、TCP通信流程二、使用步骤1.TCP(客户端)// TCP通信客户端#include<stdio.h>#include<arpa/inet.h>#include<unistd.h>#include<string.h>#include<stdlib.h>int main(){ //1.创建套接字 int fd = s

2022-05-17 23:11:20 2592 1

原创 Linux C/C++字节序转换函数

文章目录一、字节序转换函数二、使用步骤总结一、字节序转换函数转换端口uint16_t htons(uint16_t hostshort); //主机字节序->网络字节序uint16_t ntohs(uint16_t netshort); //网络字节序->主机字节序转IPuint32_t htons(uint32_t hostlong);//主机字节序->网络字节序uint32_t ntohs(uint32_t netlong);//网络字节序->主机字节序

2022-05-16 23:09:38 951

原创 Linux C/C++字节序

文章目录一、字节序1.小端字节序(主机字节序)2.大端字节序(网络字节序)二、检测当前主机字节序总结一、字节序1.小端字节序(主机字节序)数据的高位字节序存储在内存的高位地址,低位字节存储在内存的低位地址2.大端字节序(网络字节序)数据的低位字节序存储在内存的高位地址,高位字节存储在内存的低位地址二、检测当前主机字节序代码如下(示例):#include<stdio.h>int main(){ union { short value

2022-05-16 22:27:29 484

原创 快速入门Go语言(二)

文章目录一、指针二、结构体三、结构体方法四、错误处理五、字符串操作六、字符串格式化七、JSON处理八、时间处理九、数字解析十、进程信息总结一、指针package mainimport "fmt"func add2(n int) { n += 2}func add2ptr(n *int) { *n += 2}func main() { n := 5 add2(n) fmt.Println(n) // 5 add2ptr(&n) fmt.Println(n) //

2022-05-10 20:24:41 174

原创 快速入门Go语言(一)

文章目录前言一、Hello World二、变量三、if else四、循环五、switch六、数组七、切片八、map九、range十、函数前言Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style并发计算。一、Hello Worldpackage mainimport ( "fmt

2022-05-10 20:17:09 226 1

原创 Linux C/C++生产者消费者模型-条件变量-信号量

文章目录一、生产者消费者模型1.生产者消费者模型是什么2.生产者消费者简单代码案例(互斥锁解决)二、条件变量解决1.条件变量是什么2.条件变量常用函数3.条件变量解决问题三、信号量解决1.信号量是什么2.信号量函数3.信号量解决总结一、生产者消费者模型1.生产者消费者模型是什么生产者消费者模式 是Controlnet网络中特有的一种传输数据的模式。用于两个CPU之间传输数据,即使是不同类型同一厂家的CPU也可以通过设置来使用。2.生产者消费者简单代码案例(互斥锁解决)#include<

2022-04-25 22:13:44 1770

原创 Linux C/C++互斥锁和读写锁

文章目录一、互斥锁1.1互斥锁是什么?1.2互斥锁参数介绍1.3互斥锁案例二、读写锁2.1读写锁是什么?2.2读写锁函数介绍2.3读写锁案例总结一、互斥锁1.1互斥锁是什么?在编程中,引入了对象互斥锁的概念,来保证共享数据操作的完整性。每个对象都对应于一个可称为" 互斥锁" 的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象。1.2互斥锁参数介绍1.3互斥锁案例#include<stdio.h>#include<pthread.h>#include&

2022-04-25 22:04:58 1720

原创 Linux C/C++线程

文章目录一、线程是什么?二、线程创建三、线程终止四、线程分离五、线程连接六、线程属性总结一、线程是什么?(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread

2022-04-25 21:54:29 1075

原创 Linux C/C++守护进程(精灵进程)

文章目录前言一、编程规则二、案例实现总结前言精灵进程(daemon)是生存期长的一种进程。它们常常在系统引导装入时起动,在系统关闭时终止。因为它们没有控制终端,所以说它们是在后台运行的。UNIX系统有很多精灵进程,它们执行日常事物活动。一、编程规则(1) 首先做的是调用fork,然后使父进程exit。这样做实现了下面几点:第一,如果该精灵 进程是由一条简单 shell命令起动的,那么使父进程终止使得 shell认为这条命令已经执行完成。 第二,子进程继承了父进程的进程组ID,但具有一个新的进程

2022-04-20 23:46:42 829

原创 Linux C/C++共享内存

文章目录一、共享内存二、案例实现总结一、共享内存共享存储允许两个或多个进程共享一给定的存储区。因为数据不需要在客户机和服务器之间复制,所以这是最快的一种 I P C。使用共享存储的唯一窍门是多个进程之间对一给定存储区的同步存取。若服务器将数据放入共享存储区,则在服务器做完这一操作之前,客户机不应当去取这些数据。通常,信号量被用来实现对共享存储存取的同步。常用函数#include<sys/ipc.h>#include<sys/shm.j>int shmget(key_t

2022-04-20 23:37:32 3175

原创 Linux C/C++信号6

文章目录一、SIGCHLD信号二、代码示例(使用SIGCHLD信号解决僵尸进程问题)总结一、SIGCHLD信号SIGCHLD信号产生的3个条件:1.子进程结束2.子进程暂停了3.子进程继续运行他们都会给父进程发送该信号,父进程默认忽略该信号。二、代码示例(使用SIGCHLD信号解决僵尸进程问题)#include<stdio.h>#include<unistd.h>#include<sys/types.h>#include<sys/stat.h

2022-04-20 17:31:31 2627

原创 Linux C/C++信号5

文章目录一、sigprocmask函数和sigpending函数二、代码示例总结一、sigprocmask函数和sigpending函数int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);调用函数sigprocmask可以检测或更改(或两者)进程的信号屏蔽字。参数:how:如何对内核阻塞信号集进行处理SIG_BLOC :该该进程新的信号屏蔽字是其当前信号屏蔽字和 set指向信号集的并集。set包含了我们希望阻塞的

2022-04-20 17:25:19 312

原创 Linux C/C++信号4

文章目录一、信号集二、代码实例总结一、信号集我们需要有一个能表示多个信号——信号集( signal set)的数据类型。将在 sigprocmask这样的函数中使用这种数据类型,以告诉内核不允许发生该信号集中的信号。如前所述,信号种类数目可能超过一个整型量所包含的位数,所以一般而言,不能用整型量中的一位代表一种信号。POSIX.1定义数据类型sigset _ t以包含一个信号集,并且定义了下列五个处理信号集的函数。int sigemptyset(sigset_t *set) ;int sigfil

2022-04-20 17:13:30 533

原创 Linux C/C++信号3

文章目录一、signal和sigaction信号捕捉函数二、signal使用三、sigaction使用总结一、signal和sigaction信号捕捉函数sighandler_t signal(int signum, sighandler_t handler);其功能为设置某个信号的捕捉行为参数:signum为要捕捉的信号,handler为捕捉到信号要如何处理SIG_IGN:忽略信号SIG_DEF:使用信号默认的行为指定函数地址:信号捕捉函数返回值成功:返回上一次注册的信号处理函数的

2022-04-20 17:02:34 590

原创 Linux C/C++信号2

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、定时器alarm和定时器setitimer二、alarm的案例三、setitimer的案例总结一、定时器alarm和定时器setitimeralarm使用a l a r m函数可以设置一个时间值(闹钟时间),在将来的某个时刻该时间值会被超过。当所设置的时间值被超过后,产生 S I G A L R M信号。如果不忽略或不捕捉此信号,则其默认动作是终止该进程。unsigned int alarm(unsigned int.

2022-04-19 23:44:23 218

原创 Linux C/C++信号1

文章目录一、信号是什么?二、基础函数二、使用案例总结一、信号是什么?在计算机科学中,信号是Unix、类Unix以及其他POSIX兼容的操作系统中进程间通讯的一种有限制的方式。它是一种异步的通知机制,用来提醒进程一个事件已经发生。当一个信号发送给一个进程,操作系统中断了进程正常的控制流程,此时,任何非原子操作都将被中断。如果进程定义了信号的处理函数,那么它将被执行,否则就执行默认的处理函数。二、基础函数int kill(pid_t pid, int sig); -功能:给任何的进程

2022-04-19 23:29:25 224

原创 Linux C/C++内存映射

文章目录一、什么是内存映射??二、内存映射的优势三、a,b通信代码实现(Linux)四、父子进程通信代码实现(Linux)五、匿名映射代码实现(Linux)六、文件映射进行拷贝代码实现(Linux)内存映射注意实现以及面试常见题一、什么是内存映射??内存映射是将磁盘上某文件的一部分或整个文件映射到应用程序地址空间内某个地址范围的一种机制。然后,应用程序可采用与访问动态内存相同的方法访问磁盘上的文件。与使用fread 和 fwrite 等函数相比,这会加快文件的读取和写入速度。二、内存映射的优势

2022-04-18 16:50:34 2682

原创 Linux C/C++管道实现简单聊天

文章目录前言一、进程间的通信二、实现的代码总结前言如何实现简单的通信,在一台主机上,可以通过管道实现进程间的通信。一、进程间的通信我们通过有名管道即可实现简单的聊天,实现的思想如下,但是这样的会导致,一次只能发送一个,所以我们再添加了父子进程,一个接受,一个发送。二、实现的代码chatA.c#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<sys/typ

2022-04-16 22:02:55 1170

原创 C++笔试面试必知必会-基础排序算法

文章目录一、冒泡排序(稳定)二、选择排序(不稳定)三、插入排序(稳定)四、希尔排序(不稳定)总结一、冒泡排序(稳定)void BubbleSort(int arr[],int size){ for (int i = 0; i < size-1; i++) { bool flag = false; for (int j = 0; j < size-1-i; j++) { if (arr[j] > arr[j + 1]) { swap(arr[j]

2022-04-14 00:07:08 1100

原创 C++面试笔试必知必会-二分搜索算法

文章目录一、非递归实现二、递归实现总结提示:以下是本篇文章正文内容,下面案例可供参考一、非递归实现int BinarySearch(int arr[], int size, int val){ int left = 0; int right = size - 1; while (left <= right) { int mid = (left + right) / 2; if (arr[mid] == val) { return mid; } else

2022-04-11 23:36:03 502

原创 C++面试笔试必知必会-栈实现队列队列实现栈

文章目录一、用栈实现队列(力扣232题)二、用队列实现栈(力扣225题)一、用栈实现队列(力扣232题)class MyQueue {public:MyQueue() {}void push(int x) { s1.push (x);}int pop() { if(s2.empty()) { while(!s1.empty()) { s2.push(s1.top()); s1.po

2022-04-09 22:58:05 1141

原创 C++面试笔试必知必会-队列的实现

文章目录一、环形队列二、链式队列总结一、环形队列#include<iostream>using namespace std;//环形队列 queue push pop front back empty sizeclass Queue{public: Queue(int size1=10) :cap(size1) ,front(0) ,rear(0) ,size(0) { pQue = new int[cap]; } ~Queue() {

2022-04-09 22:54:43 1165

原创 C++面试笔试必知必会-栈的常见问题

文章目录一、有效的括号(力扣20题)二、逆波兰表达式求值(力扣150题)三、中缀转后缀表达式总结一、有效的括号(力扣20题)bool isValid(string s) { int n=s.size(); if(n%2!=0) return false; stack<char> cs; for(char ch : s) { if(ch=='('||ch=='['||ch=='{')

2022-04-08 23:42:59 572

空空如也

空空如也

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

TA关注的人

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