自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【网络编程】利用互斥量条件变量模拟实现一个生产者消费者模型

1、生产者消费者模型有两个进程:一组生产者进程和一组消费者进程共享一个初始为空、固定大小为n的缓存(缓冲区)。生产者的工作是制造一段数据,只有缓冲区没满时,生产者才能把消息放入到缓冲区,否则必须等待,如此反复; 同时,只有缓冲区不空时,消费者才能从中取出消息,一次消费一段数据(即将其从缓存中移出),否则必须等待。由于缓冲区是临界资源,它只允许一个生产者放入消息,或者一个消费者从中取出消息。...

2018-07-13 23:18:24 569

原创 【计算机网络】计算机网络面试常考知识点整理(三)

判定一个进程是否安全的几种方法:互斥量,条件变量,POSIX信号量,读写锁如何实现一个守护进程32位系统一个进程最多有多少堆内存exit()和_exit()的区别几种常见信号

2018-07-13 20:37:00 966 2

原创 【计算机网络】计算机网络面试常考知识点整理(二)

1、哲学家就餐问题2、进程状态转换图2、线程与进程之间的区别和联系,线程是否具有相同的堆栈4、 操作系统中进程调度策略哪几种

2018-07-10 17:45:48 1807

原创 【计算机网络】超级简单的适合练手的HTTP服务器

简单描述:实现一个超级简单的HTTP服务器,只在网页上输出“Hello World!”,旨在熟悉HTTP协议,按照HTTP协议的要求构造数据,就能实现了!源码:http_hello.c:#include <stdio.h>#include<sys/socket.h>#include<netinet/in.h>#include<ar

2018-07-08 21:11:46 1068

原创 【计算机网络】计算机网络面试常考知识点整理(一)

1、网络体系结构1.1 基本概念:网络体系结构(network architecture):是计算机之间相互通信的层次,以及各层中的协议和层次之间接口的集合。网络协议:是计算机网络和分布系统中互相通信的对等实体间交换信息时所必须遵守的规则的集合。语法(syntax):包括数据格式、编码及信号电平等。语义(semantics):包括用于协议和差错处理的控制信息。定时(t...

2018-07-08 17:04:36 17302

原创 【C++】到底买不买

题目描述[编程|20分] 到底买不买(20) 时间限制:C/C++ 1秒,其他语言 2秒 空间限制:C/C++ 32768K,其他语言 65536K 64bit IO Format: %lld 题目描述 小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖。于是小红要你帮忙判断一 下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么...

2018-06-30 15:35:51 772

原创 【计算机网络】浅析UDP协议

1、了解UDP1.1 UDP是什么UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。传输层的另一个协议是TCP/IP协议。1.2 UDP协议端格...

2018-06-07 23:37:30 718

原创 【C语言】浅析结构体内存对齐

1、结构体内存对齐1.1 结构体内存对齐是用空间换取时间的做法why: 首先结构体中包含不同类型(int,char,int ,int [ ],int [],char (*p) []等等)的数据,而这些数据的大小是完全不同的。如上图所示:在不使用内存对齐规则时,可以看出节省了空间,但当内核要读取数据时会比较麻烦,需要遍历每一个内存块,判断是不是自己要找的数据,时间复杂...

2018-06-06 21:32:18 601

原创 【C语言】模拟实现一个atoi将字符串转换成整形的函数

源码:#include<stdio.h>#include<Windows.h>#include<iostream>#include<string>#include<vector>#include<assert.h>using namespace std;#pragma warning(disable:4996...

2018-06-04 23:26:17 1203

原创 【C语言】所有数据都是成对出现的,找出只出现一次的数据

源码:#include<stdio.h>#include<Windows.h>#include<assert.h>int find_data(int arr[], int size){ int i = 0; int data = arr[0]; for (i = 1; i < size; i++){ da...

2018-05-20 17:25:42 811

原创 【计算机网络】模拟一个基于TCP协议的简单的阻塞式的网络聊天工具

1、socket API 常用函数这些函数都在sys/socket.h中。socket() #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> int socket(int domain, int type, int protocol);domain...

2018-05-20 16:37:14 1085

原创 【C语言】位操作符:一个数组中只有两个数字是出现一次,其他所有数字都出现了两次,找出这两个数字。

一、题目:一个数组中只有两个数字是出现一次,其他所有数字都出现了两次,找出这两个数字。二、解题思路一:遍历法这个方法是将数组遍历两遍,找出只出现一次的数,并输出。 这个方法的缺点是时间复杂度高,为O(N^2),程序并不高效。源码:#include<stdio.h>#include<Windows.h>#include<assert.h&g...

2018-05-15 22:58:57 1108

原创 【操作体统】Linux下浅述线程

1、初识线程什么是线程?线程是进程中的一个实体,进程是资源分配的基本单位,线程是调度/执行的基本单位。简单说来就是在一个程序里的一个执行路线就叫做线程(thread),或者说是:线程是“一个进程内部的控制序列”。在内核中看到的线程也是以PCB为代表的创建的新的PCB和原PCB共用相同的虚拟地址空间。Linux中使用进程来模拟实现线程,这种线程也称之为轻量级进程(ZWP)。“线...

2018-04-27 21:20:17 518

原创 【数据结构】模拟实现红黑树(RBTree)的插入算法

1、红黑树基本概念含义:首先红黑树是一棵二叉搜索树,它在每一个节点上增加了一个存储位来表示节点的颜色(red 或 black)。红黑树通过对任何一条从根节点到叶子节点简单路径上的颜色来约束,红黑树保证最长路径不超过最短路径的两倍,因而近似平衡,而且在实际应用中发现红黑树性能确实比AVL树性能高。【数据结构】二叉搜索树的插入,删除,查找等基本操作的实现【数据结构】AVL树的平衡化...

2018-04-20 18:49:24 1703 1

原创 【操作系统】Linux下进程间通信实现---消息队列

消息队列基本概念消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题。但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制。消息队列就是一个消息的链表。可以把消息看作一个记录,具有特定的格式以及特定的优先级。对消息队列有写权限的进程可以向消息...

2018-04-13 21:29:42 1986

原创 【操作系统】Linux下利用命名管道实现server&client通信

【操作系统】Linux下进程间通信实现–匿名管道(PIPE),命名管道(FIFO)实现源码:server.c#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<fcntl.h>#include<s...

2018-04-12 11:11:04 2166 12

原创 【操作系统】用命名管道实现一个简单的文件拷贝

【操作系统】Linux下进程间通信实现–匿名管道(PIPE),命名管道(FIFO)程序源码:file2fifo.c : (读取文件abc,写入命名管道)#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<errno.h>#include<string.h...

2018-04-12 10:04:20 3378

原创 【操作系统】Linux下进程间通信实现--匿名管道(PIPE),命名管道(FIFO)

进程间通信进程间具有独立性,那么进程间如何进行通信呢?操作系统会提供一个公共资源,进程间通过访问这个公共资源而实现进程间的通信。实现进程间通信的方式:管道消息队列共享内存信号量进程间通信的目的:数据传输:一个进程需要将它的数据发送给另一个进程;资源共享:多个进程之间共享同样的资源;通知事件:一个进程需要向另一个进程或一组进程发送消息,通知它们发生了某种事情(如进...

2018-04-09 22:44:14 1290

原创 【操作系统】浅析Linux下进程通信之信号

1、信号的基本概念Linux下基本信号使用 kill -l命令可以查看系统定义的信号列表:以上就是Linux下的62个基本信号。每个信号都有一个编号和一个宏定义名称,这些宏定义都可以在 signal.h 中找到。其中编号34以上的都是实时信号,这里不做过多讨论。产生信号的几种基本方式:用户在终端按下某些键时,终端驱动程序会发送信号给前台进程。例如Ctrl -C...

2018-04-06 21:33:00 862

原创 2018省赛第九届蓝桥杯C/C++ B组 个人代码 递增三元组

题目:递增三元组给定三个整数数组 A = [A1, A2, … AN], B = [B1, B2, … BN], C = [C1, C2, … CN], 请你统计有多少个三元组(i, j, k) 满足: 1. 1 <= i, j, k <= N 2. Ai < Bj < Ck 【输入格式】 第一行包含一个整数N。 第二行包含N个整数A1, A...

2018-04-02 16:44:51 960 3

原创 【操作系统】进程程序替换之模拟实现一个简易的Shell

1、替换原理用fork创建子进程后执行的是和父进程相同的程序(也有可能执行不同的分支),子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec并不创建新进程,所以调用exec前后该进程的ID并未改变。2、替换函数:exec函数族#include<unist...

2018-03-30 16:15:42 1248 1

原创 【操作系统】进程创建之fork函数

fork函数fork函数会从已经存在的进程中创建出一个新进程。新进程为子进程,而原进程为父进程。 #include <unistd.h> pid_t fork(void); //返回值:子进程返回0,父进程返回子进程pid,出错返回-1;进程调用fork(),当控制转移到内核中的fork代码后,内核做:分配新的内存块和内核数据结构给子进程将父进程部分数据结构...

2018-03-26 16:38:20 964

原创 【操作系统】浅析进程&Linux下进程创建&僵尸进程&孤儿进程

1、进程基本概念进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。进程和程序之间的联系与区别:联系:程序是构成进程的组成部分之一,一个进程的运行目标是执行它所对应的程序,如果没有程序,进程就失去了其存在的意义。从静态的角度看,进程是由程序、数据和进程控制块(PCB)三部分组成。区别:程序是静态的,进程是动态的。 进程是程序的执...

2018-03-20 22:16:56 845

原创 【操作系统】进程调度算法

1、进程调度进程调度即处理机调度。再多道程序环境中,进程数往往多于处理机数,这将导致多个进程互相争夺处理机。进程调度的任务是 控制 ,协调进程对于CPU的竞争,按照一定的调度算法,使某一就绪进程获得CPU的控制权,转换成运行状态。进程调度也叫低级调度。实际上进程调度完成一台物理的CPU转变成多台虚拟的(或逻辑的)CPU的工作。2、调度的层次一个作业从提交开始直到完成,往往要...

2018-03-18 17:55:57 2265

原创 【数据结构】二叉搜索树的插入,删除,查找等基本操作的实现

1、基本概念二叉搜索树:又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树没有键值相等的节点特点:二叉搜索树的最左子树存放最小的值,最右子树存放最大的值;二叉搜索树如果按中序遍历的话,得到的数列是有序的;...

2018-03-14 21:37:20 1099

原创 简述常用编辑器

Emacs:Emacs不仅仅是一个编辑器,他是一个整合环境,或可称它为集成开发环境,这些功能如让使用者置身于全功能的操作系统中,在基于编辑器的功能基础上,Emacs自行开发了一个”bourne-shell-like”的shell: EShell。Emacs还可以:收发电子邮件,通过FTP/TRAMP编辑远程档案,通过Telnet登录主机,上新闻组,登陆IRC和朋友交流,查看日历,撰写文章大...

2018-03-09 20:24:00 755

原创 【读书笔记】C和指针 --- 数组(未完)

1、一维数组数组名:数组名的值是一个指针常量:数组具有确定数量的元素,而指针只是一个标量值。编译器用数组名来记住这些属性。只有当数组名在表达式中使用时,编译器才会为他产生一个指针常量(这里是指针常量而不是指针变量,不能修改常量的值)。因为指针常量所指向的是内存中数组的起始位置,如果修改这个指针常量,唯一可行的操作就是把整个数组移动到内存的其他位置。但是,在程序完成链接之后,...

2018-03-07 22:43:32 414

原创 【C语言】实现一个函数,可以左旋字符串中的K个字符

题目说明:要求实现一个函数,可以左旋字符串中的K个字符; 其中: ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB解法一:解题思路:拿到一组字符串之后,我们首先设置一个临时变量,存放字符串中的第一个字符。 然后把字符串中的其余字符通过循环依次前移一位,最后再把临时变量的值赋给字符串的最后的一位。以上是字符串的一次左旋,要左旋几次就可以通过循环重...

2018-02-26 19:18:32 847 3

原创 【C语言】在杨氏矩阵中查找一个数

题目:有一个二维数组,数组的每行从左到右是递增的,每列从上到下是递增的。在这样的数组中查找一个数字是否存在? 要求:时间复杂度小于O(N);例:数组1 2 3 4 5 6 7 8 9解题思路:首先我们肯定不能用常规的依次遍历来查找,这样做时间复杂度不满足题目要求;那么我们应该从何处下手呢?首先...

2018-02-13 21:11:20 534

原创 【C语言】调整数组使奇数全部都位于偶数前面

题目:输入一个整数数组,实现一个函数,来调整该数组中数字的顺序,使得数组中所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。解题思路:首先我们先设置一个简单的小场景:这里有一个数组arr[9]={1,2,3,4,5,6,7,8,9}.要使数组的奇数在前偶数在后,我们可以设置两个标记,一个start = 0,从数组起始的地方开始向后遍历,一个 end = len - 1...

2018-02-13 17:12:09 625 3

原创 【剑指offer】一、赋值运算符函数

题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数:class CMyString{public: CMyString(char* p_Data = NULL); CMyString(const CMyString& str); ~CMyString(void);private: char* m_pData;};...

2018-01-26 20:30:17 521 6

原创 【数据结构】topK问题,海量数据找出前K个大的数据

topK问题:假如需要从十亿个数据中找出最大的前k个数,也就是海量数据处理问题。一般遇见这种问题,我们肯定会想到先排序,再取前K个数据就可以了。但是海量数据如果这样处理,那就会大大提高时间复杂度了。那么我们应该如何处理呢?首先假如这是一组大数据,取出前K个元素放入小堆里:在小堆里,这前K个元素是有序的,最小的元素放在堆顶。依次取数组里的下一个数据与堆顶元素进行比较,如果数组数据大于堆顶元素,就可以利

2018-01-21 22:14:01 2582 1

原创 【数据结构】优先级队列(用堆完成)

优先级队列的实现插入删除元素个数

2018-01-21 16:35:11 1097

原创 【数据结构】堆结构小根堆,大根堆,插入,删除等操作的实现

一、堆的基本概念【含义】:如果有一个关键码的集合K={k0,k1,k2, … ,k(n-1)},把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足:ki = k2*i+1 且 ki >= k2*i+2 )i=0,1,2 … ,则称这个堆为最小堆(或最大堆)。【最小堆】:任一节点的关键码均小于等于它的左右孩子的关键码,位于堆顶节点的关键码最小。【最大堆】:任一节点

2018-01-21 15:28:20 20213 1

原创 【数据结构】线索化二叉树的基本操作

二叉树的线索化源码:二叉树的前序线索化,二叉树的中序线索化,二叉树的后序线索化,前序非递归遍历线索化后的二叉树,中序非递归遍历线索化后的二叉树,后序非递归遍历线索化后的二叉树,

2018-01-20 16:45:35 1211

原创 【数据结构】二叉树经典面试题解析二:求取二叉树的深度

二叉树的基本操作:二叉树的基本操作 博客例子:源码:size_t _Depth(Node* root) { if (NULL == root) { return 0; } if (NULL == root->_left && NULL == root->_right)

2018-01-08 16:03:27 721

原创 二叉树经典面试题解析一:用非递归实现二叉树的前序遍历,中序遍历,后序遍历

二叉树的基本操作二叉树的基本操作博客地址用非递归实现的二叉树的前序遍历源码: //前序非递归 void _PreOrderNR(pNode _pRoot){ pNode pCur = _pRoot; stack s; while (pCur || !s.empty()){ //将左侧节

2018-01-07 15:12:46 1703

原创 【数据结构】二叉树的基本操作

求取二叉树的深度解析博客用非递归实现二叉树的前序,中序,后序遍历解析博客源码:bintree.h#pragma once#ifndef __BINTREE_H__#define __BINTREE_H__#include#include#include#includeusing namespace std;//二叉树节点templateclass

2018-01-04 19:12:12 898

原创 用频域最小误差平方方法设计线性相位FIR低通数字滤波器

用频域最小误差平方方法设计线性相位FIR低通数字滤波器【C++实现】设计一个20阶的FIR低通数字滤波器,其通带边界频率为0.2,阻带边界频率为0.3,采用一阶样条函数作为过渡带。选择参数: 采样频率=l,tp=1。

2018-01-04 15:07:52 3349 1

原创 【C++】Perm递归全排列函数分析

void Perm(int* array, int size, int N) { if(N == size) { for(int i = 0; i < size; ++i){ cout<<array[i] ; } cout<<endl; } else { for(int i = N; i < size; ++i){ Perm全排列函数过程分析,时间复杂度分析。

2017-12-21 17:28:18 6591

空空如也

空空如也

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

TA关注的人

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