自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 PHP文件操作函数

读取整个文件的函数$string = file_get_contents(“test.txt”);……………………将文件内容转换为一整行字符串readfile(“test.txt”) …………………………………………自动将文件写入输出缓冲区$array =file(“test.txt”) …………………………………………返回全部文件体读取一行数据string = fgets()str...

2019-07-25 20:53:30 242

原创 PHP时间和日期函数的使用

array = getdate(时间戳) 将 时间戳 转化为关联数组(ex: “month”=>“07” …)。time() 获取当前时间戳。date(预定于常量) 格式化输出当前时间。microtime() 将当前时间戳划分为msec和sec两个值返回...

2019-07-24 11:59:52 303

原创 排序算法1

冒泡排序  选择排序  堆排序  插入排序直接上代码:#include<stdio.h>#include<stdlib.h>#include<time.h>#include<string.h>#include<unistd.h>#define Maxarr 32void print(int arr[],size_t...

2018-08-28 17:58:10 298

原创 网络基础(对于计算机网络的理解)

1.网络分层及各层的协议网络可以由低向上分为物理层,数据链路层,网络层、传输层和应用层。五层协议。物理层:负责计算机与外部光电信号的传递,例如网线(hub集线器),光纤和wifi无线网络使用的电磁波均属于物理层。物理层的能力决定了网络通信的最大传输速率、传输距离、抗干扰性等相关性能。数据链路层:负责在计算机内部两个设备之间的数据帧的传送和识别。数据链路层的任务有:网卡设备的驱动、帧同步...

2018-08-28 17:47:43 1714

原创 tcp套接字编程

server.c#include<stdio.h>#include<sys/socket.h>#include<netinet/in.h>#include<errno.h>#include<unistd.h>#include<string.h>#include<sys/types.h>#incl

2018-08-28 16:41:52 306

原创 udp编程套接字代码

server.c#include<stdio.h>#include<stdlib.h>#include<string.h>#include<arpa/inet.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>

2018-08-28 16:39:37 365

原创 网络编程套接字

udp套接字代码 tcp套接字代码 两者的区别与优缺点:udp是面向无链接的不可靠的通信,客户端不需要和服务器建立链接,只需要知道服务器的IP和端口号就可以调用sendto函数向服务器发送请求(此时客户端的socket对应的IP和端口号都会被发送给服务器),服务器通过recvfrom函数调用得知了客户端的IP和端口号,可以向客户端发送信息。udp协议通信简单,效率高,但是...

2018-08-28 16:34:41 439

原创 大数据文件处理

1.给定一个大小超过100G的文件,其中存在IP地址,找到其中出现次数最多的地址。我们要对文件进行哈希切分:也就是利用哈希函数的思想,对文件中的IP做%1000计算 ,将余数为0~999的结果(以键值对的方式)分别输出到0~999号文件中。(每个文件的平均大小大约是100M左右) 找出每个文件中出现次数最多的IP,再次进行比较得到最大的IP值。注:操作系统可以依次读取硬盘中的100...

2018-07-18 18:16:01 666

转载 经典的大数据例题

先转载,理解之后再整理。前言:1、说明:一般解决大数据问题有两个思路:1)先将与这道题相关的所有的数据结构进行使用一遍,如果有合适的就直接进行使用2)如果不能直接使用,一般就要进行哈希切分,然后再使用合适的数据结构进行问题的解决2、在这里我先来介绍一种常用于大数据问题的方法:哈希切分1)先估算出要切分的大小2)然后使用哈希的除留余数法进行各个数据的映射 经典题:...

2018-07-17 17:00:04 549

原创 布隆过滤器 实现

bitmap.h#pragma once #include <stddef.h>#include<inttypes.h>typedef struct BitMap { uint64_t* data; size_t capacity; // max bit } BitMap; void BitMapInit(B...

2018-07-16 19:49:54 267

原创 位图相关代码实现

  bitmap.hpragma once #include <stddef.h>#include<inttypes.h>typedef struct BitMap { uint64_t* data; size_t capacity; // max bit } BitMap; void BitMapIni...

2018-07-16 19:42:47 453

原创 哈希表(开散列)

HashOpen.h#pragma once #include<stddef.h>size_t HashMaxSize=1000; typedef int KeyType; typedef int ValType; typedef size_t (*HashFunc)(KeyType key); typedef struct HashElem...

2018-06-19 21:49:14 406

原创 哈希表闭散列(代码实现)

HashClose.h#pragma once #include <stddef.h>size_t HashMaxSize=1000;typedef enum Stat { Empty, Valid, Invalid // 当前元素被删除了 } Stat; typedef int KeyType; typedef int ValType;...

2018-06-19 21:45:27 424

原创 守护进程

#include <unistd.h>pid_t setsid(void);   //创建一新的Session并且自己成为Session的Leader。该函数调用成功时返回新创建的Session的id(也就是当前进程的ID),出错返回-1;调用这个函数之前,当前进程不允许是进程组的leader否则会出错返回-1.、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、...

2018-06-15 15:01:14 245

原创 进程组、作业、会话与守护进程

1.进程组每个进程除了有一个进程ID外,还属于一进程组。通常进程组与作业相关联,可以收到同一终端的各种信号。 每个进程有唯一的一个进程组ID。组长进程可创建一个进程组,创建该组中的进程,然后终止。只要在某一个进程组中的一个进程存在,该进程组就存在,这与其组长进程是否终止无关。2.作业作业与进程组的区别:1.如果作业中某个进程创建了子进程,则该子进程属于进程组成员但不...

2018-06-15 12:18:45 333

转载 线程死锁

死锁的概念死锁是指两个或两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁。死锁的必要条件虽然线程在运行过程中,可能发生死锁,但死锁的发生也必须具备一定的条件,死锁的发生必须具备以下四个必要条件。1)互斥条件:指线程对所分配到的资源进行排它性使用,即在一段时间内某资源只...

2018-06-14 21:51:25 186

原创 gdb调试多线程

gdb与多线程在多线程编程时,当我们需要调试时,有时需要控制某些线程停在断点,有些线程继续执行。有时需要控制线程的运行顺序。有时需要中断某个线程,切换到其他线程。这些都可以通过gdb实现。下面是gdb常用的功能:info threads:显示可以调试的所有线程。gdb会为每个线程分配一个ID(和tid不同),编号一般从1开始。后面的ID是指这个ID。thread ID:...

2018-06-14 21:36:41 228

原创 生产者消费者模型 、POSIX信号量、读写锁

生产者消费者模型 、POSIX信号量、读写锁 相关代码1. 生产者消费者模型列表内容2.POSIX信号量列表内容3.读写锁列表内容

2018-06-14 21:31:47 348

原创 生产者---消费者 、 读 者-----写者 模型相关代码实现

producter_consumer_model.c #include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<pthread.h>#define CONSUMERS_COUNT 8#define PRODUCERS_COUNT 8pthread_cond_t con...

2018-06-14 21:19:47 309

原创 pthread 函数中create、join 、detach的代码实现和运行结果

create.c#include<stdio.h>#include<unistd.h>#include<pthread.h>void* Entry1(void* arg){ (void)arg; while(1) { printf("hello world1!\n"); sleep(1); } retu...

2018-06-09 20:52:41 401

原创 线程

线程1.线程的定义在一个程序里的一个执行路线就叫做线程,或者说:“一个进程内部的控制序列就是线程。”2.进程和线程的区别进程是资源竞争的基本单位,线程是程序执行的最小单位。在一个进程内的线程共享进程的 正文段和数据段,也就是定义一个函数,在各个线程中个都可以调用,如果定义一个全局变量, 在各线程中都可以访问到。除此之外,线程还共享以下资源和环境:文件描述符表、每种信号...

2018-06-08 18:44:17 315

转载 gdb调试多进程

别人的文章,先复制下,等我有一定理解之后,再做总结。我们先看看我们的测试程序:/* in eg1.c */int wib(int no1, int no2){        int result, diff;        diff = no1 - no2;        result = no1 / diff;        return result;}int main(){        p...

2018-06-05 19:01:29 248

原创 进程信号

信号的概念每个信号都有一个编号和一个宏定义的名称,这些宏定义可以在signal.h中找到。kill -l普通信号 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR111) SIGSEGV 12) SIGUSR2 13) SIG...

2018-06-01 16:50:17 260

原创 进程间通信

1.使用管道进行通信 server 创建管道mypipe,并以只读方式打开.   client 以只写方式打开管道.    两者借助管道进行通信,若有一方退出,则另一方也退出。server.c#include<stdio.h>#include<stdlib.h>#include<sys/types.h>#include<sys/stat.h>...

2018-05-29 17:55:30 263

原创 生成动态库和静态库

add.h#pragma once#include<stddef.h>int add(int a,int b);add.c#include"add.h"int add(int a, int b){ return a+b;}sub.h#pragma once#include<stddef.h>int sub(int a, int b);sub.c#...

2018-05-21 15:26:16 531

原创 myshell支持管道 、输入、输出、追加重定向

强调重要的一点 open 和 dup2 一定要在fork后的子进程中执行。#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<ctype.h>#include<sys/wait.h>#include<s...

2018-05-18 18:45:14 702

原创 二叉搜索树--递归和循环实现

search_tree.h//实现二叉搜索树的递归和非递归版本 #pragma once #include<stddef.h>typedef char SearchTreeType; typedef struct SearchTreeNode { SearchTreeType key; // 关键码 struct SearchTreeNode* lch...

2018-05-17 12:51:10 288

原创

heap.h// 1. 堆是一个完全二叉树 // 2. 堆有两种, 一种叫小堆(小根堆, 最小堆), // 一种叫大堆(大根堆, 最大堆). // 3. 以小堆为例, 这个树的根节点是这个树中的最小的元素 // 对于任意一个子树来说, 子树的根节点, 小于左右孩子节点的值. // 4. 以大堆为例, 这个树的根节点是这个树中的最大元素 // 对于任意一个子树来说, 子树的根...

2018-05-17 12:46:37 170

原创 二叉树

引用文件stack_seq.h   #pragma once#include<stdlib.h>#include"binary_tree.h"typedef TreeNode* TypeStack;typedef struct SeqStack{ TypeStack* data; size_t size; size_t capacity; ...

2018-05-15 18:20:47 167

原创 栈和队列笔试题

两种方式实现最小栈minstack.c  引用 stcak_seq.h(详见栈的实现文章)https://blog.csdn.net/Alsnoa/article/details/80216882#include<stdio.h>#include"stack_seq.h"#define TEST_HEADER printf("==================%s========...

2018-05-11 20:07:16 379

原创 顺序队列和链式队列

queue_seq.h#pragma once#define MaxSize 1024typedef char TypeQueue;typedef struct SeqQueue{ TypeQueue data[MaxSize]; int front; int rear;}SeqQueue;void SeqQueuePush(SeqQueue* se...

2018-05-06 20:07:52 499

原创 顺序栈和链式栈的实现

stack_seq.h#pragma once#define MaxStack 1000typedef char TypeStack;typedef struct SeqStack{ TypeStack data[MaxStack]; TypeStack *top; size_t stacksize; }SeqStack;void InitSeqSt...

2018-05-06 18:33:28 496

原创 带头结点带环的双向链表

#pragma oncetypedef char DLinkType; typedef struct DLinkNode { DLinkType data; struct DLinkNode* next; struct DLinkNode* prev; } DLinkNode; void DLinkListInit(DLinkNode** head); DLinkNode...

2018-05-05 12:30:49 195

原创 myshell(支持管道)

首先总结一下思路:1. 如果要支持管道就首先需要分析命令中是否包含管道。(使用stringcmp函数)2.如果包含管道就将管道符号位置为NULL,然后将管道符号前后的命令分到两个指针数组中 即:tmp1[ ]和tmp2[ ]3.这个时候需要执行两个execvp函数,我们为了保证循环的进程不会被替换,需要fork两次,分别用孙子进程执行tmp1[ ]和子进程执行tmp2[ ]。4.关于管道创建的位置...

2018-05-02 23:44:39 927

原创 链表笔试题1

#include "linkedlist.h"/** * * @brief 逆序打印单链表. * * * * @param head * */ void LinkListReversePrint(LinkNode* head){ if(head==NULL) { return; } Lin...

2018-04-20 11:50:42 208

原创 进程控制 简单myshell的实现

#include<unistd.h>#include<sys/wait.h>#include<stdio.h>#include<stdlib.h>#include<string.h> void do_parse(char *buf,char* argv[]){ int i; int argc=0; ...

2018-04-19 17:19:24 323

原创 单链表操作

include<stdio.h>#include<stdlib.h>#include<string.h> typedef char LinkType; typedef struct LinkNode { LinkType data; struct LinkNode* next; } LinkNode; /** * ...

2018-03-25 20:52:51 136

原创 进程的调度算法、task_struct结构体、虚拟内存

先来先服务 (FCFS,first come first served) 在所有调度算法中,最简单的是非抢占式的FCFS算法。 算法原理:进程按照它们请求CPU的顺序使用CPU.就像你买东西去排队,谁第一个排,谁就先被执行,在它执行的过程中,不会中断它。当其他人也想进入内存被执行,就要排队等着,如果在执行过程中出现一些事,他现在不想排队了,下一个排队的就补上。此时如果他又想排队了,只能站到队尾去。...

2018-03-23 19:00:19 648

原创 顺序表2

#include<stdio.h>#include<stdlib.h> #include<string.h>#define SeqListMaxSize 1000 typedef char SeqType; typedef struct SeqList { SeqType data[SeqListMaxSize]; si...

2018-03-18 20:43:21 208

原创 实现基于静态数组的顺序表的以下基本操作:

1. 初始化 2. 尾插 3. 尾删 4. 头插 5. 头删 6. 读任意位置元素 7. 修改任意位置元素 8. 查找指定元素值的下标 9. 在任意位置插#include <stdio.h>#include <stdlib.h>#include<string.h>#define max 100 typedef struct Seqlist { ...

2018-03-17 19:51:39 292

空空如也

空空如也

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

TA关注的人

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