自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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

原创 Linux目录下过滤代码文件脚本

平平无奇的工作脚本

2021-12-16 16:48:10 568

原创 《乡土中国》读书笔记

费孝通先生《乡土中国》的脑图,和大家一起分享。

2021-06-11 10:49:37 1107 1

原创 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

原创 如何才能变得幸福

共勉

2021-05-17 23:19:59 211

原创 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

基于arm的开发

基于arm的简单开发,主要实现音乐播放器,视频播放器,电子相册等功能

2018-04-12

空空如也

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

TA关注的人

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