自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 剑指offer例题

思路:从最后一列开始查找,如果第一个值都大于所查找的值,列减1,行从第一行开始,如果行列的值小于所找值,行加1,不断缩小查找空间,在最后无法缩小的空间内双for循环来找被查值#include<stdio.h>#include<iostream>#include<vector>using namespace std;class Arry{private: vector<vector<int>> arr;public: Arry(.

2021-11-11 22:36:38 237

原创 软件测试知识

测试

2022-08-18 23:28:22 137 1

原创 http与https

超文本协议

2022-08-03 16:03:42 214

原创 c++线程

共有函数:类名+函数名+对象名thread t(&object::fun,&obj);静态函数:类名+函数名(不用取地址)+引用参数x或者普通x thread t(object::fun,ref(x)/x)t.detch()将主线程与次线程分离,只分离当主线程结束次线程也被迫关闭,因此必须joint.join()等待子线程结束锁:mutextry_mutex(尝试锁)recursive_mutex(递归锁)lock_guard互斥体包装器:自动加锁解锁(raii机制)使用:l

2022-05-08 17:39:56 284

原创 c语言连接数据库

数据库(数据库文件存在磁盘上) 数据库管理系统构成数据库service mysql status 查看数据库服务状态(是否启动)端口号:3306,底层用的是TCP协议mysql -uroot -p 登录成数据库管理员show databases;查看各种数据库show tables;查看具体的一个数据库(表格)quit退出数据库.........

2022-03-17 09:00:53 2985

原创 shell编程,awk,git

编译型:通过编译生成二进制可执行程序,然后直接运行,运行效率高解释型:需要解释器,通过解释器解释执行,开发效率高变量:本地变量,环境变量,参数变量#!/usr/bin/bash变量str=hello给变量赋值val=99echo "str=$str",访问变量值给变量前加$,带""或不带不影响//echo输出同printfstr="hello world"必须加"",有空格只会识别一个mystr=$str拿一个变量给另一个赋值echo 'str=$str' ''只会输出字符串,不会取

2022-03-15 15:20:47 1632

原创 项目:文件传输

功能:1.查看服务端文件,删除,重命名,创建文件夹2.下载文件,断点续传,校验3.上传文件my.conf配置文件#ser 配置文件#这是ip地址ips=127.0.0.1#这是端口port=6000list_max=5socket.h#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<sys/socket.h&

2022-01-21 08:52:33 133

原创 LeetCode

2. 两数相加给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。class Solution {public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode* tail = NULL; ListNode* l3=N

2022-01-15 17:08:30 160

原创 泛型算法和函数对象(待完善),智能指针

泛型算法和函数对象头文件:#include#include泛型算法:copyfindsortfind_if函数对象:less <greater >binderlstbinder2ndint main(){ vector<int> v1; for(int i=0;i<10;++i) { v1.push_back(); } copy copy(v1.begin(),v1.end(),ostr

2022-01-13 21:42:29 111

原创 迭代器iterator

顺序迭代器:iterator正向迭代器reverse_iterator 反向迭代器const_iterator常量正向迭代器const_reverse_iterator常量反向迭代器插入型迭代器:(关联容器无法使用)insert_iterator 随机插入型迭代器back_insert_iterator 后插型迭代器front_insert_iterator 前插型迭代器流迭代器:ostream_iteratoriterator:正向迭代器=v1.begain(),end()reve

2022-01-12 21:36:36 163

原创 使用Libevent库的方法代替poll epoll select

Reactor模式:主线程只监视是否有客户端链接,创建一个新线程来进行其他服务使用该库的代码编译时需指定库 -levent#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<string.h>#include<assert.h>#include<event.h>#include<signal.h>void sig_fun(int

2022-01-12 16:36:55 169

原创 会话,守护进程

守护进程特点:运行周期长,在后台运行,不用和用户交互(脱离终端)会话:每打开一个终端就建立了一个会话会话首进程:该会话运行的第一个进程(bash)(用该bash的PID来标识该会话(id))进程组:每运行一个命令,就是一个进程组(进程组的id是该命令的PID或父进程的PID(父子进程))组长进程:父子进程中父进程为组长进程getsid(0):会话idgetpgrp():进程组idsetsid():创建一个新会话(从别的会话中拿出的子进程).此时子进程的PID就是该进程组id,也是新会话的组员(

2022-01-12 15:24:31 167

原创 I/O复用的方法select,poll,epoll

I/O复用使得程序能同时监听多个文件描述I/O复用的方法:select poll epollselectFD_ZERO()清零FD_SET()添加描述符(将描述符数字的位数值1)FD_CLR()清除FD_ISSET()检测某个位是否为1#include<stdio.h>#include<unistd.h>#include<stdlib.h>#include<string.h>#include<sys/select.h>#d

2022-01-06 23:01:49 424

原创 udp协议 http协议

tcp的TIME_WAIT存在的意义可靠地终止TCP连接保证让迟来的TCP报文段有足够的时间被识别并丢弃挥手可以是3次但是握手必须为3次udp无连接 不可靠 数据报实时性用udp,可靠性用TCPudp可以和TCP使用同意端口且同时运行,因为UDP无状态,收发数据时可以分清是那个协议同一个进程可以创建多个套接字代码:服务端代码#include<stdio.h>#include<stdlib.h>#include<unistd.h>#includ

2022-01-02 22:12:25 1982

原创 银行家算法

#include<iostream>#include<vector>using namespace std;class banker{private: vector<vector<int>> All; vector<vector<int>> Need; vector<int> Ava; vector<int> t;public: static int x; static int y; b

2021-12-28 22:21:56 384

原创 欧几里德最大公约数,取模,地址字节,标准输入输出,关键字

求最大公约数int gcb(int a,int b){ if(b==0) return a; else return gcb(b,a%b);}对于浮点数 float double ++,只会对整数的部分加1,不会对小数点后的值+int main(){ float x=12,25; x++; printf("%d",x);x=13.25}取模运算只能对整型进行取模(char, short, int ,long int, long long)地址字节的大小in

2021-12-28 22:19:55 348

原创 网络编程,tcp协议

OSI 七层:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层tcp/ip协议族:应用层,传输层,网络层,数据链路层网络:把不同的主机链接起来就构成了网络互联网:将网络与网络链接起来ip地址:ipv4(32位) ipv6(会变化)ipv4 eg:192.168.31.1 —每个数都不能超过255,因为它们只占8个比特位,网络号+主机号ifconfig:查看ip地址MAC地址:物理地址(不会变化)端口号:标识一个进程协议:tcp http ip udptcp 编程流程服

2021-12-05 10:52:02 1483

原创 继承和多态,菱形继承,纯虚继承

类与类之间的关系:嵌套,代理,继承组合,嵌套:一个类中声明了另一个类,一个类是另一个类的一部分代理:一个类的接口是另一个类的接口的子集,一个类的功能需要依赖另一个类的功能实现继承:一个类是另一个类的一种构造析构顺序:先构造父类再构造子类,析构先子类后父类父类的构造函数如果需要传参,就必须在子类的构造函数中初始化列表初始化同名隐藏:子类会隐藏父类的同名成员(与参数类型无关),对派生类的类外也隐藏,因此在类内类外访问都必须加::作用域父类的指针指向子类的对象:Base* pb=new Derive

2021-11-29 12:57:00 146

原创 STL容器:vector,list,deque 容器适配器:stack,queue关联容器:map set

string: 近容器vector:容器(数组)resize:resize(n),减少或扩大到n个,不管有没有值reserve:n大于本身的值就开辟到个空间,但size不会变,本身的值大于n,就不工作了,还是本身的值pop_back():从尾出一个值back():取最后一个值template<typename T>class Myvector{ private: T* _arr; int _len; int _val_len;pub

2021-11-28 21:39:10 276

原创 new和delete重载,模板

new和deleteTmp* p=new Tmp();------new operator(不可重载)申请内存(调用operator new)可以重载调用构造delete p ;-----delete operator(不可重载)调用析构内存释放(operator delete)可以重载void* operator new(size_t size)重载函数{ cout<<"void* operator new(size_t size)"<<endl;

2021-11-28 17:30:48 281

原创 线程安全,读写锁,条件变量

多线程不能调用strtok函数,它内部是用一个静态全局变量来记住当前位置,所以在main函数结束之前,线程和主函数用的是一个strtok,因此是错误的,下面是错误的代码。#include<stdio.h>#include<stdlib.h>#include<>string.h#include<semaphore.h>#include<pthread.h>void* fun(void* arg){ char arr[128]=

2021-11-27 21:41:24 402

原创 消息队列,线程,生产者消费者

消息队列发送消息:类型(long)和数据获取消息:类型(long)#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<string.h>#include<sys/msg.h>a程序发送消息struct mess{ long type;必须>0 char buff[32];};int main(){ int msgid=msgg

2021-11-25 21:40:46 135

原创 信号量,共享内存

临界区:访问临界资源的代码临界资源:同一时刻只允许一个进程访问的资源p:获取资源v:释放资源前台只能执行一个进程,后台可以执行多个所以a和b程序必须得放在后台,结果还是在前台显示a程序#include<stdlib.h>#include<stdio.h>#include<assert.h>#include<unistd.h>#include<string.h>#include<sys/sem.h>信号量头文件

2021-11-23 21:19:03 431

原创 进程间的通信

进程间通信:管道 信号量 共享内存 消息队列 套接字管道文件:读端只能读,写端只能写,写入管道的数据在内存中,但管道文件的属性等都在外存(必须两个文件打开)管道文件分为有名管道(mkfifo)和无名管道(pipe)mkfifo fifo:创建管道文件fifo管道为空,读阻塞;管道写满,写会阻塞。写端关闭,读端返回0read()=0 。管道读端关闭,写端写入数据触发异常有名管道:可以在任意两个进程间通信无名管道:只能在父子进程间使用管道的通信方式:半双工(相当于对讲机)某时

2021-11-22 22:49:10 158

原创 信号及代码

信号:进程收到信号并捕捉它做出响应(默认,自定义,忽略)#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<assert.h>#include<signal.h>#include<string.h>void sig_fun(int sig)自定义{ printf("sig=%d\n",sig);sig=2,2是SIGINT的序号(它俩等价是一个

2021-11-21 22:30:45 265

原创 mybash和pwd,ls函数的实现

strtok(buff," ");对buff中字符串用空格进行分割(第一步)strtok(NULL," ")剩下的都是传的空ps,ls这些命令就相当于main.c,是程序员写好的可以直接调用的命令(有执行文件)可以fork替换成它cd.exit,这些命令是shell内置的命令(无执行文件,是shell自带的命令),因此下面的程序有多个if语句。#include<stdio.h>#include<stdlib.h>#include<unistd.h>#incl

2021-11-17 21:45:25 760

原创 操作系统的底层系统掉用,exec

open()打开一个文件read()从文件中读数据write()向文件中写入数据close()关闭文件打开文件int open(const char* pathname,int flags);文件存在时打开文件的方法第一个参数是文件的路径加名称(无路径时默认当前位置),第二是打开文件后的权限是只读/只写flags=O_RDONLY只读/O_WRONLY只写/O_RDWR读写int open(const char* pathname,int flags,mode_t mode);文件不存在时打

2021-11-17 15:39:41 335

原创 库文件,静态库,共享库,fork,僵死进程

库文件:预先编译好的文件静态库:libxx.a共享库:libxx.so静态库gcc -c add.cgcc -c max.car crv libfoo.a add.o max.o 建静态库foo.hvi foo.h在foo.h的文件写的是max和add的声明头文件都是声明在usr/include实现是在usr/lib当在main中使用上面所建库时,因为是自己所建的库得链接,下面是方法gcc -o main main.c -L. -lfoo .代表当前位置,foo是库名,L指定路径

2021-11-13 15:15:02 684

原创 c语言的基础内容:类型,变量,常量,枚举,转义字符,字符0和0存储区别,泛型算法

类型及字节大小整形:char:1short:2int:4long int:4long long :8浮点型:float:4double:8long double:32位的4个字节,64的是8个bool:1void:无大小变量:可读可写常量:可读,不可写变量及作用范围在主函数之外定义的变量成为全局变量,在主函数的称为局部变量,全局变量可以从定义的时候起就有效,,局部只在当时的函数内有效,语句块变量,只在语句内有效#include<stdio.h>int g_ma

2021-11-11 20:37:34 292

原创 进程命令及gdb以及多文件编译的make file文件

操作系统管理进程:一个正在执行的程序程序:由一条条的指令构成pcb 进程控制块struct task_structint pid 唯一标识一个进程进程状态:就绪 运行 阻塞ps 查看进程都有啥PID TTY TIME CMD4833 ------------- bash4843 --------------- pswhich ps 可以查看ps在哪里存着,结果是 /usr/bin/psp

2021-11-10 15:32:44 847

原创 linux系统的基本命令

常用命令打开终端:ctrl+ alt +t或者右键在终端中打开退出终端:exit切换到到管理员(#):sudo su退出exitls: 一个可执行的二进制文件,可查看当前目录下的文件都有啥ls -l查看文件类型(普通 管道 目录 套接字…)ls -a :显示隐藏文件touch 创建普通文件:touch a.cmkdir 创建目录:mkdir tmpcd:进入文件cd~:进入家目录下用户的家ldd:可执行文件使用了那些库文件pwd:显示当前的位置cd ..回到上一层rm a.c

2021-11-06 17:44:23 245

原创 暴力求解和Kmp

#include<stdio.h>#include<iostream>using namespace std;int BF_search(const char* arr,const char* brr){ int lena = strlen(arr); int lenb = strlen(brr); int i = 0, j = 0; while (i < lena && j < lenb) { if (arr[i] == brr[

2021-11-05 09:00:31 50

原创 顺序表题

在A中删除B和C共有的(BC)递增有序#include<stdio.h>#include<iostream>using namespace std;void del_com(int* arr, int* brr, int* crr, int n1,int n2, int n3)//A先后跟B和C相比,小的向后跑{ int i = 0; int j = 0; int k = 0; while (i < n1&&j<n2&&k

2021-11-04 18:38:42 44

原创 单链表题型

#include<stdio.h>#include<iostream>#include<assert.h>using namespace std;typedef struct Node{ int data; Node* next;}Node, Pnode;两个递增有序的单链表AB,排成一个递减有序的表C,必须用原节点()允许有相同的值Node* merge(Node* plist1, Node* plist2){ Node* p1 = plist1

2021-11-04 18:25:25 52

原创 分糖果问题和删除节点(力扣)

删除结点请编写一个函数,用于 删除单链表中某个特定节点 。在设计函数时需要注意,你无法访问链表的头节点 head ,只能直接访问 要被删除的节点 。题目数据保证需要删除的节点 不是末尾节点 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/delete-node-in-a-linked-list这道题与B-树的删除节点的思路相同,力扣中传入的这个节点已经指向了被删节点,采用找个替死鬼方法:因为无法找到前驱,所以只能想办法改值,将next的值赋给

2021-11-03 15:01:02 106

原创 两个队列实现栈

#include<stdio.h>#include<iostream>using namespace std;#define MAXSIZE 10class Queue{private: int* base; int front; int tail; int length;public: Queue() { base = (int*)malloc(sizeof(int) * MAXSIZE); front = 0; tail = 0; len

2021-10-31 21:15:02 56

原创 两个栈实现一个队列

#include<stdio.h>#include<iostream>using namespace std;#define MAXSIZE 10class stack{private: int* base; int data; int length;public: stack() { base = (int*)malloc(sizeof(int) * MAXSIZE); length = 0; } void push(int val) {

2021-10-31 17:55:01 39

原创 队列(循环队列和链式队列)

顺序表栈#include<stdio.h>#include<iostream>#include<assert.h>#define MAXSIZE 6using namespace std;typedef int Elemtype;typedef struct Queue{ Elemtype* base;//用于接收malloc开辟的内存 int front; int tail;}Queue,*Pqueue;void Init(Queue* ps)

2021-10-31 15:20:40 47

原创 栈(顺序栈和链式栈)

顺序栈#include<stdio.h>#include<iostream>#include<assert.h>#define INT_SIZE 10using namespace std;//顺序栈typedef struct stack{ int* base; int top;//待入的地方 int stacksize;//容量}Stack,*Psatck;void Init(Stack* ps){ ps->base = (int*

2021-10-30 15:58:16 43

原创 单链表(带头结点和不带头结点)

带头结点#include<stdio.h>#include<iostream>#include<assert.h>using namespace std;//带头结点不需要二级指针typedef struct Node{ int data; struct Node* next;}Node,*PNode;Node* BuyNode(){ Node* s = (Node*)malloc(sizeof(Node)); memset(s, 0, si

2021-10-30 15:53:31 219

空空如也

空空如也

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

TA关注的人

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