- 博客(275)
- 资源 (1)
- 收藏
- 关注
原创 可达鸭刷题记--剑指offer面试题
数组中重复的数字 思路一: 用hash表来实现。遍历数组,同时检查数组中元素是否已经在hash表中,如果在表中的话,说明元素重复,直接返回该数组元素;否则的话添加数组元素进hash表中。时间复杂度O(N),空间复杂度O(N)。 代码一: class Solution { public: int findRepeatNumber(vector<int>& nums) { unordered_map<int, int> mp; for(in
2020-12-10 19:23:02
500
原创 TCP通信端口复用demo
server.c: #include <stdio.h> #include <ctype.h> #include <arpa/inet.h> #include <unistd.h> #include <stdlib.h> #include <string.h> int main(int argc, char *argv[]) { // 创建socket int lfd = socket(PF_INET, SOCK_S
2021-06-01 09:54:22
536
1
原创 多进程的回射服务器
server_thread.c: #include <stdio.h> #include <arpa/inet.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <pthread.h> struct sockInfo{ int fd;//通信的套接字 struct sockaddr_in addr; pthrea
2021-05-29 11:33:47
199
原创 补码表示的16进制数转有符号十进制数 C++
参考了CSDN上一个大佬的代码,学习了做一下记录。 #include <iostream> using namespace std; int hextode(char* hexstr) { if(hexstr ==NULL) return 0; char binary[17]={0};//放二进制字符串 //Convert strings to a long-integer value. long i32=strtol(hexstr,NULL,1
2021-05-27 22:56:51
1031
3
原创 Python的一个小网页练习
首先创建一个gothonweb的文件夹,里面的文件结构如下: 其中index.html: <html> <head> <title>Gothons Of Planet Percal #25</title> </head> <body> {% if greeting %} I just wanted to say <em style ="color: rgb(128, 109, 0);
2021-05-09 15:04:44
254
原创 基于多进程的回射服务器改进
主要的改进就是在服务器端的程序中加入了对子进程退出之后的其资源的回收,并且处理了一个accept()函数的一个报错。详见注释 server_process.c: #include <stdio.h> #include <arpa/inet.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <signal.h> #include <wait
2021-05-09 11:32:14
177
原创 基于多进程的回射服务器
详见注释: server_process.c: #include <stdio.h> #include <arpa/inet.h> #include <unistd.h> #include <stdlib.h> #include <string.h> int main(){ //创建socket int lfd = socket(PF_INET, SOCK_STREAM,0); if(lfd == -1){
2021-05-08 21:43:19
158
原创 笨办法学python3 习题47 自动化测试
本习题是习题46 的拓展,实际的测试了一个简单的类Room。 下面是本习题的目录框架: 上面的.pyc后缀都是运行自动化测试之后,产生的文件。 setup.py: try from setuptools import setup except ImportError: from distutils.core import setup config = { 'description' : 'My Project', 'author' : 'Gabe', 'author
2021-04-23 11:53:48
504
1
原创 Python demo
将一个文件的内容拷贝到另一个文件: # This is a sample Python script. from sys import argv from os.path import exists if __name__ == '__main__': script, from_file, to_file = argv print(f"Copying from {from_file} to {to_file}") in_file = open(from_file) inda
2021-04-16 15:39:19
154
原创 Linux网络编程之字节序的API
常用的主要有四个函数,详见代码: /* 网络通信中一般都要将主机字节学转换成网络字节序, 另外一段获得数据以后根据自己的情况来决定是否转换 */ #include <stdio.h> #include <arpa/inet.h> int main(){ //htons 转换端口 unsigned short a = 0x0102; unsigned short b = htons(a); printf("%0x\n",a);
2021-03-13 11:43:46
177
原创 Linux网络编程之字节序
首先字节序是针对一个一个字节来说的,一个字节以内的话是不涉及字节序的问题的。这里可以类比:古汉语的行文顺序是从右到左的,人们就是从右到左来读的;现代汉语的顺序是从左到右的,人们就是从左到右来读的。 大端:高位字节存在低地址,低位字节存在高地址。 小端:高位字节存在高地址,低位字节存在低地址。 人们规定网络字节序都是大端的,主机字节序可以是小端也可以是大端。在网络中跑的都是大端的字节序,在接收端根据本机的情况决定是否转换。 下面的程序可以用来测试大小端程序: /* 字节序:字节在内存中的存储顺序
2021-03-13 11:40:03
335
原创 生产者消费者改进模型之二(使用信号量+互斥量实现)
使用信号量来实现资源的计数,使得生产者和消费者之间的活动能够有序进行。详见代码注释 code: /* #include <semaphore.h> 信号的类型 sem_t int sem_init(sem_t *sem, int pshared, unsigned int value); -初始化信号量 - 参数: -sem :就是信号量
2021-03-11 15:53:00
782
原创 生产者消费者模型改进一(互斥量+条件量)
生产者只要有数据,每生产一个数据,就用pthread_cond_signal通知消费者; 消费者,有数据的时候就消费,要是没有数据的时候就pthread_cond_wait等待生产者生产出资源; PS:pthread_cond_wait,当这个函数调用阻塞的时候,但是会先对互斥锁进行解锁;当不阻塞的时候,会重新加锁(保证数据的安全问题)。详见注释。 code: /* 条件变量的类型 #include <pthread.h> 条件变量的类型 pthread_con
2021-03-11 15:50:01
307
原创 生产者和消费者模型(简单版本)
综述: 在整个模型中,有三个比较关键的对象:生产者、消费者、和容器。其中生产者被用来生产资源,可以是单线程也可以是多线程;消费者被用来消耗资源也可以是单线程或者多线程;无论是生产还是消费都把容器当做一个介质(中间的交换者的角色)。下面的代码中用多线程进行生产和消费,容器使用链表,链表的操作是头插和头删。详见代码注释 code: /* 生产者消费者模型(粗略版本) */ #include <stdio.h> #include <pthread.h> #include <stdli
2021-03-11 15:41:00
237
原创 Linux之读写锁case
详见代码注释: /* 读写锁 案例 : 8个线程操作同一个全局变量 三个线程不定时写这个全局变量,5个线程不定时地读这个全局变量 */ #include <stdio.h> #include <pthread.h> #include <unistd.h> //创建一个共享数据 int num = 1; //创建一个互斥量 pthread_mutex_t mutex; //创建一个读写锁 pthread_rwlock_t rwlock; void* writeNum(
2021-02-10 13:33:50
207
原创 rand(3)实现rand(5),rand(5)实现rand(3)
//使用Rand5()实现Rand3() int Rand3() { int x; do { x = Rand5(); } while (x >= 3); return x; } //利用Rand3编写Rand5怎么办? int Rand5() { int x; do { x = Rand3() * 3 + Rand3();
2021-01-09 16:03:09
2064
原创 C++重载函数和重载加法运算符
#include <bits/stdc++.h> using namespace std; class printData{ public: void print(int i){ cout<<"整数为:"<<i<<endl; } void print(double f){ cout<<"浮点数为:"<<f<<endl; } void print(ch
2021-01-09 14:34:02
765
原创 Linux编程之管道
匿名管道: /* #include <unistd.h> int pipe(int pipefd[2]); 参数:int pipefd[2],传出参数 pipefd[0] 读端 pipefd[1] 写端 返回值: 成功返回0, 失败返回-1 注意匿名管道只能用于具有亲缘关系之间的通信(父子进程,兄弟进程) 管道默认
2021-01-07 13:16:13
197
原创 Linux进程回收之wait函数和waitpid函数
wait函数的demo #include <sys/types.h> #include <sys/wait.h> #include <stdio.h> #include <unistd.h> #include <stdlib.h> int main(){ pid_t pid; for(int i = 0; i<5;++i){ pid = fork(); if(pid == 0){
2021-01-07 11:42:20
175
原创 Linux之孤儿进程和僵尸进程
孤儿进程: #include <sys/types.h> #include <unistd.h> #include <stdio.h> //孤儿进程 int main(){ pid_t pid = fork(); //判断是父进程还是子进程 if(pid > 0){ //返回的是创建的子进程的进程号 // printf("pid : %d\n",pid); printf(" i am pare
2021-01-06 18:02:21
185
原创 Linux之exec函数
/* #include <unistd.h> int execl(const char *path, const char *arg, ...); -参数: path : 建议写绝对路径,这样在不同的目录下都能执行 a.out /home/gabe/a.out arg : 是可执行文件所需要的参数列表 第一个参数一般没有作用,为了方便,写的是执行程序的名称
2020-12-30 21:06:30
268
原创 两个线程从将一个变量从1增加到100
#include <stdio.h> #include <unistd.h> #include <pthread.h> #define MAX_COUNT 100 static int count = 1; pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t is_odd = PTHREAD_COND_INITIALIZER; pthread_cond_t is_even = PTHREAD
2020-12-27 15:25:42
489
原创 C++轮流打印ABC多线程
代码: 参考大佬的代码 #include <iostream> #include <thread> #include <condition_variable> #include <vector> #include <algorithm> //#include <pthread.h> #include <functional> //using namespace std; std::mutex mtx; std::condit
2020-12-25 16:34:56
877
1
原创 Linux系统编程之fcntl函数
demo: #include <unistd.h> #include <fcntl.h> #include <stdio.h> /* 1.可以复制文件描述符,复制的是第一个参数fd,得到一个新的文件描述符 2.可以获取指定的文件描述符的状态(open函数里面flag函数) 3.设置文件描述符的一个状态flag,必选项:O_RDONLY, O_WRONLY, O_RDWR 可选项:O_APPEND表示追加数据,先获取到
2020-12-25 16:17:20
203
原创 dup和dup2函数
#include<unistd.h> #include<stdio.h> #include<fcntl.h> #include<sys/types.h> #include<sys/stat.h> #include<string.h> int main(){ int fd = open("a.txt", O_CREAT | O_RDWR, 0664); int fd1 = dup(fd);//复制文件描述符,fd1也指
2020-12-22 19:15:59
421
原创 linux目录遍历函数
#include <sys/types.h> #include <dirent.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int getFileNum(const char* path); int main(int argc, char* argv[]){ if(argc < 2){ printf("%s path\n", argv[0]
2020-12-22 17:50:29
265
原创 linux目录操作函数
mkdir函数 #include <stdio.h> #include <sys/stat.h> #include <sys/types.h> int main(){ int ret = mkdir("aaa",0777);//最终的权限mode & (~umask) //目录必须要有可执行权限才能进入 if(ret == -1){ perror("mkdir"); return -1; }
2020-12-22 15:55:56
147
原创 linux文件属性操作函数
access函数 demo: #include <stdio.h> #include <unistd.h> int main(){ int ret = access("a.txt", F_OK); if(ret == -1){ perror("access"); } else { printf("文件存在!!\n"); } return 0; } chmod函数 demo: #include
2020-12-22 14:53:04
236
1
原创 linux拷贝一个文件的实现
#include <unistd.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int main(){ // 打开eng.txt文件 int srcfd = open("english.txt", O_RDONLY); if (srcfd == -1) { perror("
2020-12-22 12:33:17
238
原创 linux ls -l 命令的模拟实现
//模拟实现 ls -l 指令 //-rw-rw-r-- 1 gabe gabe 23 12月 21 20:42 a.txt #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <pwd.h> #include <grp.h> //#include <sys/types.h> #include
2020-12-22 12:31:40
359
原创 归并排序
#include "util.h" using namespace std; void merge_sort_two_vec(vector<int>& sub_vec1, vector<int>& sub_vec2, vector<int>& vec){ int i = 0; int j = 0; while (i < sub_vec1.size() && j < sub_vec2.size())
2020-12-20 11:12:50
138
2
原创 Linux动态库的制作和使用
Linux动态库的制作 首先生成与位置无关的目标文件: gcc -c -fpic add.c div.c mult.c sub.c 然后制作动态链接库: gcc -shared *.o -o libcalc.so Linux动态库的使用 gcc main.c -o main -I ./include/ -l calc -L ./lib/ 这里需要注意,-l后面跟的是动态库的名字 Linux动态库加载失败解决办法 配置环境变量 直接配置: export LD_LIBRARY_PATH=$LD_LIB
2020-12-15 22:07:36
320
1
原创 Linux静态库的制作和使用
Linux静态库的制作 静态库在程序链接阶段被复制到程序中。库的好处代码保密;方便部署和分发。 使用ar命令进行归档。 ar rcs libcalc.a add.o div.o mult.o sub.o 其中ar是归档命令,libcalc.a是静态库文件的名称,calc是静态库的名称。后面的*.o文件是制作静态库文件的物料。 r:将文件插入备存文件中 c:建立备存文件 s:索引 Linux静态库的使用 使用静态库的命令。 gcc main.c -o app -I ./include/ -l calc -
2020-12-15 19:53:30
234
原创 给定三角形ABC和一点P(x,y,z),判断点P是否在ABC内,给出思路并手写代码
#include "util.h" using namespace std; #define ABS_FLOAT_0 0.0001 struct point_float{ float x; float y; }; float GetTriangleSquar(const point_float pt0,const point_float pt1, const point_float pt2){ point_float AB, BC; AB.x = pt1.x - pt0.x
2020-12-14 15:49:48
921
1
原创 2020-11-13每天一刷
力扣 328 奇偶链表 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。 请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。 示例 1: 输入: 1->2->3->4->5->NULL 输出: 1->3->5->2->4->NULL 示例 2: 输入: 2->1->3->5-&
2020-11-13 11:53:04
224
原创 高级数据结构
并查集 用数组实现简单的并查集: #include "util.h" using namespace std; class DisjointSet{ public: DisjointSet(int n){ for (int i = 0; i < n; ++i) { _id.push_back(i); } } int find(int p){ return _id[p]; } void uni
2020-11-09 14:07:38
385
原创 2020-11-04每天一刷
力扣200 岛屿的数量 给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外,你可以假设该网格的四条边均被水包围。 示例 1: 输入:grid = [ [“1”,“1”,“1”,“1”,“0”], [“1”,“1”,“0”,“1”,“0”], [“1”,“1”,“0”,“0”,“0”], [“0”,“0”,“0”,“0”,“0”] ] 输出:1 示例 2: 输入:grid = [ [“1
2020-11-05 10:07:25
310
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅