操作系统
前言杂烩
int fork();
创建进程。正确返回:等于0表示是子进程,大于0表示当前进程是父进程;错误返回:小于0,表示进程创建失败。
int getpid();
取得当前进程的标识符(进程ID)。
int getppid();
取得当前进程的父进程ID。
int getpgrp();
取得当前进程的组标识符。
int getpid(int pid);
将当前进程的组标识符改为当前进程的ID,使其成为进程组中的首进程,并返回这一新的组标识符。
pid_t wait()/waitpid();
wait()函数会使父进程暂停执行,直到它的一个子进程结束为止,返回值为子进程的PID;
waitpid()用于等待某个特定进程的结束。
在子进程结束前,wait()可以使调用者堵塞,而waitpid()可以通过选项使调用者不堵塞,wait()是waitpid()的一个特例。
exit(int status);
释放程序所占的资源并通知父进程删除,此时该进程处于僵死状态,status是调用进程终止时传递给其父s进程的值,若调用进程还有子进程,则将所有子进程的父进程改为1号进 ...
cqhttp机器人
前言 闲着无聊又碰上chatgpt大火,想尝试着搭建一个qq机器人玩玩
参考链接(179条消息) 使用go-cqhttp搭建一个简易的QQ机器人(入门)_sanananana的博客-CSDN博客_go-cqhttp
OneBot 事件和 API | NoneBot
碰到的问题端口号没处理好,导致运行错误
string容器
string容器参考链接:https://www.bilibili.com/video/BV1et411b73Z?p=189
(157条消息) C++入门——string容器_cqu_shuai的博客-CSDN博客_子串插入
1.string基本概念本质:
· string是c++风格的字符串,而string本质上是一个类
string和char*区别:
· char*是一个指针
· string是一个类,类内部封装了char,管理这个字符串,是一个char型的容器
特点****:
string类内部封装了很多成员方法
例如:查找find,拷贝copy,删除delete,代替replace,插入insert
string管理char*所分配的内存,不用担心赋值越界和取值越界等,由类内部进行负责。
string构造函数构造函数原型:
string(); //创造一个空的字符串string(const char*s) //使用字符串s初始化string(const string& str); //使用一个string对象初 ...
STL
参考链接:基础篇:STL容器和算法 - 知乎 (zhihu.com)
1.STL基本概念⚪STL(Standard Template Library,标准模板库)
⚪STL从广义上分为:容器(container)算法(algorithm)迭代器(iterator)
⚪容器和算法之间通过迭代器进行无缝衔接
⚪STL几乎所有的代码都采用了模板类或者函数模板
2.STL六大组件1.容器:各种数据结构,如vector,list,deque,set,map等,用来存放数据。
2.算法:各种常用算法。如sort、find、copy、for_each等。
3.迭代器:扮演了容器和算法之间的粘合剂
4.仿函数:行为类似函数,可以作 为算法的某种策略。
5.适配器:一种用来修饰容器或者仿函数或者迭代器接口的东西
6.空间适配器:负责空间的配置与管理
3.STL中容器、算法、迭代器STL容器就是将运用最广泛的一些数据结构实现出来。容器用来管理某类对象。常用的数据结构:数组(array) , 链表(list), tree(树),栈(stack), 队列(queue), 集合(set),映射表(map), 根 ...
链表
链表1.什么是链表链表是结构体变量与结构变量连接的一起
2.怎么动态创建链表动态内存申请+模块化设计
(1)创建链表(创建一个表头表示整个链表)struct Node{ int data; //数据域 struct Node* next; //指针域}struct Node* createList(){ struct Node* headNode=(struct Node*)malloc(sizeof(Node)); //headNode成为了结构体变量,变量使用前必须被初始化 //headNode->data=1 headNode->next=NULL; return headNode;}
(2)创建节点struct Node* createNode(int data){ struct Node*newNode=(struct Node*)malloc(sizeof(struct Node)); newNode->data=data; newN ...
文件上传
前言 首先部署upload-labs
1.绕过js验证(1)js验证代码分析
查看源码可知存在checkFile检测,剔除该检测即可上传shell文件
(2)burp剔除响应js在proxy中的options中勾选remove all Javascript,设置代理
(3)浏览器审计工具剔除js好麻烦。。。。。。删除onsubmit,保存文件,添加action以及地址,使用浏览器打开
(4)上传webshell,蚁剑连接一句话木马:
上传shell,复制图片链接,加入蚁剑连接即可。
2.绕过MIME-Type验证(1)MIME-Type介绍
参考链接:MIME 类型 | 菜鸟教程 (runoob.com)
(2)验证MIME-Type代码分析is_upload = false;$msg = null;if (isset($_POST['submit'])) { if (file_exists($UPLOAD_ADDR)) { if (($_FILES['upload_file']['t ...
微信小程序实战
云开发基础//查询数据 getData(){ db.collection("demolist").get({ success:res=>{ console.log(res) this.setData({ dataObj:res.data }) }, }) },
//插入数据 addData(){ wx.showLoading({ title:'数据加载中', mask:true }) db.collection("demolist").add({ data:{ title:"测试1", author:"张三", cont ...
十大排序
十大排序交换变量的方式可采用异或(^)(前提是两变量的指向不是同一块地址空间)
原理:
int a=甲; int b=乙;a=a^b; //a=a^b=甲^乙;b=a^b; //b=a^b=甲^乙^乙=甲;a=a^b; //a=a^b=甲^乙^甲=乙;
应用:挑选出一堆数中出现奇数次的一种或两种数
实现原理:将数全部进行异或,出现偶数次的数进行异或得到0,剩下的便是出现奇数次的数,若是有两个出现奇数次的数,则找出两数的异或值为1的那一位,再分离出再那一位为1的数,最后分离出来的数再异或上原始两数的异或值即可.
各排列的复杂度:
(1)选择排序算法思想选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。
算法步骤首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。重复第二步,直到所有元素均排序完毕。
动图演示
c代码实现#include <bits/stdc++.h>usi ...