自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(107)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 【计算机网络】网络编程---TCP套接字(一)

服务器客户端模型

2017-03-08 21:26:59 1091

原创 【计算机网络】传输层协议TCP

TCP协议概述TCP是面向连接的,面向字节流的传输层协议,每一条连接只能有两个端点,是点对点的。它能提供可靠的传输服务,属于全双工通信。一个TCP报文段的首部格式如下: 首部各字段的意义: 1>源端口和目的端口:通讯的双⽅由IP地址和端口号标识。 2>序号:在一个TCP连接中传送的字节流的每一个字节都需要按顺序编号,若当前序号为120,携带数据100字节,那么下一个报文段就必须从220开始

2017-03-08 19:18:36 508

原创 【计算机网络】循环冗余校验CRC算法原理&计算过程

前言我们知道,一台主机向另外一台主机发送报文的时候,需要一层层经过自己的协议栈进行数据封装,到达最后一层(四层协议的网络接口层)时需要在帧尾部添加FCS校验码(通过CRC算法得出)。当对端主机收到时,在接收端同样通过CRC算法进行验证,确认传输过程中是否出现错误。它只能确认一个帧是否存在比特差错,但没有提供解决措施。 循环冗余校验的原理在发送端,先把数据划分为组(即:一帧)。假定每组 k 个比特

2017-03-04 17:03:33 23440

原创 【Linux】使用gdb调试多进程&多线程

gdb调试多进程多进程时,进入调试状态后,默认调试主进程。 1. 查找fork出子进程的代码在第几行,然后打上断点。 2.运行至断点处,info feriors可查看当前调试的进程 3.设置follow-fork-mode 的值为child,表示只调试的子进程,再查看当前调试进程发现变成了新产生出来的进程,即子进程。follow-fork-mode(默认值是parent)和detach-on-

2017-03-03 23:11:24 840

原创 【Linux】Linux定时任务crond

作业规划进程crond是Linux下用来定期执行命令或指定程序任务的一种服务或软件。运行linux后,开机自启动crond任务,系统会每分钟检查是否有要执行的任务工作(循环检测)。linux系统中定时任务调度的工作可以分为以下两个情况: 1. linux系统自身定期执行的任务工作:系统周期性执行的任务工作,如轮询系统日志,备份系统数据,清理系统缓存等。 2. 用户执行的任务工作:某个用户或系统

2017-03-02 20:31:35 442

原创 【Linux】如何创建daemon进程&fork一次和fork两次有什么区别

前言本文适合对Linux进程有了解过的读者。Linux中有一种进程叫做守护进程,又称精灵进程。它运行在后台,很重要,Linux下大多数服务器就是用守护进程实现的。因为它独立于终端运行,也就是说它的运行不受当前登录或者注销的影响,自成会话,周期性的执行某项任务或者等待处理某些事件。其他进程则是在登录或者运行时创建,在运行结束或者注销用户时终止。守护进程命名通常以d结尾,父进程是1号进程,它其实是属于孤

2017-02-27 17:13:31 1581

原创 【Linux】可重入函数与线程安全

可重入函数1. 概念重入函数: 函数被不同的控制流调用,有可能在第一次调用还没返回时就再次进入该函数,这称为重入函数。 可重入函数:不同的控制流重入函数时,不会造成数据二义性。具体来说就是函数内部的数据都应该来自自身的栈空间,不应该有全局或者静态的变量。 不可重入函数:重入函数会造成数据的二义性,导致对一个变量的操作变得无法预期。称为不可重入函数。 接下来我们简单的分别举上一个可重入函数和不可

2017-02-24 10:54:53 444

原创 【Linux】生产者消费者模型

一、概念生产者:产生数据的的模块。 消费者:处理数据的模块。 那么生产者产生数据之后,消费者怎么拿,从哪拿呢?所以,仅仅有这两个角色是不能完成我们期望的工作的。还需要一个缓冲区,就像超市的货架一样,供货商(生产者)将商品摆到货架(缓冲区)上,购买者(消费者)从货架上拿走,这个货架也是必不可少的。 试想如果没有缓冲区,生产者生产一个数据之后,就必须等待消费者消费完成,生产者才能继续生产,那么如果

2017-02-23 11:33:36 722

原创 【Linux】使用gcc生成静态库和动态库

1.什么是静态库和动态库?首先,库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。在Linux下分为两种,静态库和共享库(动态库)。对比两者的区别如下: 库的种类 描述 优点 缺点 静态库 目标文件的简单集合,Linux下以.a作为后缀,程序编译时载入 程序所需库被加载后不会发生跨平台不兼容等类似的问题 由于所需的代码被加载到程序中,故体积大,占内存 动态

2017-02-18 19:33:38 382

原创 【Linux】信号量

信号量是进程间通信的一种方式。本质上它不具有数据交换的功能,它相当于一个计数器,对于系统现有资源进行计数以达到使进程互斥的访问资源的目的。当请求一个使用信号量来表示的资源时,进程需要先读取信号量的值来判断资源是否可用。大于0,资源可以请求,分配给进程后,信号量的值加一,这样请求资源的操作称为P操作。等于0,资源不可用,进程会进入睡眠状态直至资源可用。当资源使用完毕被释放时,信号量的值减一,释放

2017-02-17 16:42:08 549

原创 【JAVA】科研信息管理系统

一、前言 本学期学习了JAVA语言,在学期的结束,写一个有操作界面,与数据库关联的管理系统,用来巩固自己本学习所学的知识。 用到的知识:JAVA基础,JAVA界面设计(GUI),Oracle数据库(需要掌握数据库的基本操作语句),链接数据库。 使用的开发工具:MyEclipse Professional 2014 二、设计 我们管理的属性有:项目编号,项目名称,参与人员,负责人,项目开始时

2017-01-12 20:38:32 5006 12

原创 【Linux】Linux下使用stat命令所显示出来的三个时间

在linux系统下,使用stat(显示inode信息)命令可以查看一个文件的某些信息,我们先来尝试一下。 简单的介绍一下stat命令显示出来的文件其他信息: - File:显示文件名 - Size:显示文件大小 - Blocks:文件使用的数据块总数 - IO Block:IO块大小 - regular file:文件类型(常规文件) - Device:设备编号 - Inode:

2017-01-11 21:28:49 12485 2

原创 【Linux】窥探Linux内核task_struct结构体

我们知道,进程是程序的动态运行实例。且CPU会对这些进程进行调度,使得程序得以执行。那么如果有多个进程同时要求执行,CPU如何判断该执行哪一个,执行多长时间等等问题呢。学习过操作系统的话,应该能知道对于每一个进程,都有一个进程控制块(PCB),维护对应进程的一些信息。在Linux内核,这个PCB就是一个名为task_struct的结构体。本篇博客,主要就是介绍构成task_struct结构体的成员。

2017-01-09 19:44:52 2720 1

原创 【Linux】写一个简单的进度条

一、前言为什么要写一个进度条呢?其实就是想通过这个来说明两个问题,一个是printf函数缓冲区的问题,一个是'\n','\r'的区别。那么我们先来弄清楚这两个问题。二、printf缓冲区我们知道,输出到屏幕相当于访问外设,而外设的速度和内存的速度是相差甚远的,如果每次输出都直接去访问外设,一定会造成效率的下降,所以,printf设置了三种缓冲方式。1.全缓冲,即整个缓冲区满才会输出

2016-12-31 19:17:28 346

原创 【Linux】Linux下的find命令详解

Linux下想找到一个文件却不知道放在哪里了怎么办?这时候find命令就派上用场了,与查找相关的命令还有如下这些,我简单的介绍一下。1. which指令会在PATH变量指定的路径中,搜索某个系统命令 的位置,并且返回第一个搜索结果2. whereis只能用于程序名的搜索,而且只搜索二进制文件,源代码文件,说明文件,从Linux数据库中查找,很快,但是由于数据库更新不及时,所以此命令的查找结果也受

2016-12-31 12:33:20 493

原创 【数据结构】对一个数组按给定的下标排序,仅使用两两交换的方式,要求不能对数组进行扩容尽可能使用额外少的空间

题目描述:    对一个数组按给定的下标排序,仅使用两两交换的方式,要求不能对数组进行扩容尽可能使用额外少的空间。例如:原数组为:A,B,C,D,E,现给定新的位置为:3,0,1,4,2,那么排序后为D,A,B,E,C。问题分析:    为什么分类为数据结构,因为其实这个题就是快排的挖坑法的变形。如果你还不清楚什么是快排的挖坑法:参见这里。解决思路:    保存第一个位

2016-12-15 22:39:00 727 3

原创 【C++】强制类型转换

在C语言中我们知道,类型转换有隐式的类型转换和显示的强制类型转换。而C++中提供了一下四个关键字分别用于不同场景下的类型转换。普通的类型转换void TestCommenCast(){ int i = 0; double d = i; //隐式类型转换 printf("%d,%.2f\n", i, d); int*p = &i; int adress = (int)p;

2016-12-08 17:59:47 310

原创 【路由与交换】交换机和集线器

交换机1.交换模式交换机将数据从一个端口转发至另外一个端口的处理方式称为交换模式,分为以下几种直通交换:交换机只读数据帧的前6个字节,查找目标地址,将数据帧转发到对应的端口。特点:较小的延迟,转发速率快,提高整体吞吐量,为整个网络带来很多垃圾通讯报。适用环境:错误数据包较小的网络存储转发:将数据包存储到缓存,进行CRC循环冗余校验。有错误则丢弃,完整则查询地址映射表将包转发到相应的

2016-12-08 10:46:50 422

原创 【STL】SGI版STL空间配置器剖析+简单实现

简单认识STLSTL是C++的一个标准库,提供六大组件:容器,算法,迭代器,仿函数,配接器,配置器。这里介绍的就是配置器。它负责空间配置与管理,分为两级,一级空间配置器和二级空间配置器。上一篇博客也提到过,当频繁的申请和释放小块内存空间的时候,会产生外碎片和效率低的问题。所以,STL把空间配置分为两级,大于128字节使用一级空间配置器,一级空间配置器只是简单的对系统的malloc和free做了

2016-12-07 17:37:03 390

原创 【小项目】内存池的实现

1.为什么会有内存池的出现。我们在频繁的开辟和释放小块空间时,很有可能造成内存外碎片的问题。为什么呢?看下图:上图中还回来的20k和剩下的20k就可以称之为内存外碎片问题。除了外碎片的问题,频繁的在内存申请和释放小块空间是相当耗时的,那当需要频繁的申请和释放小块内存时,如何才能高效一点呢?所以就有了内存池的概念。2.怎么设计一个内存池。明确了要解决的问题,然后就是怎

2016-12-04 20:42:24 1274

原创 【数据结构】二叉树部分面试题解法

1.问题描述:根据给定的二叉树前序中序遍历结果,重建出这颗二叉树。例如:前序遍历结果:1,2,3,4,5,6。中序遍历结果:3,2,4,1,6,5。2.问题分析:我们知道,前序遍历的顺序是:当前结点,左子树,右子树。那么,前序遍历的第一个数字就是根节点。而中序遍历的顺序是:左子树,当前结点,右子树。所以,对于中序序列来说,根节点的左右分别就是左子树的结点和右子树的结点。故,我的做法是:

2016-11-30 22:23:48 409

原创 【数据结构】快速排序

一、快排的几种实现方法1.左右指针法a>算法思想:选定数组的最后一个数作为关键值(key),从左边开始遍历找比key大的,从右边找比key小的,找到后交换左右指针,让比key大的数据向后调,比key小的数据调到前面,等到左右指针相等的时候,把数组的最后一位和指针所指位置交换,这样一趟排序过后,key值的前面都是比它小的数,后面都比它大。此时key相当于划分了它左右两个区间,那么两个区间再次

2016-11-27 15:12:01 970

原创 【数据结构】几种常见的排序算法

一、排序算法的分类    下图是我掌握的一些排序算法,我将他们做了分类,当然,排序算法远不止这些。本篇博客主要记录插入,选择,以及交换排序的冒泡排序,因为快排和归并算法相对复杂,所以,下一篇博客再细细讲述。二、各种算法的基本思想,分析及其代码实现1.直接插入排序    a>算法思想:假设第一个数是有序的,那么把后面的数拿出来插入到这个有序数的合适位置,假设是升序(比第一

2016-11-26 23:06:40 8015

原创 【数据结构】浅析B树

一、B树的概念B树,概括来说是一个节点可以拥有多于2个子节点的平衡多叉树。特点:1> 根节点至少有两个子节点2>每个节点有M-1个key

2016-11-15 21:36:13 1347

原创 【小项目】用Huffman树实现文件压缩并解压

一、前言        如果你学习数据结构,就一定会学到Huffman树,而Huffman编码实际上上就是zip压缩的核心部分,所以,如果已经学习了Huffman树,为何不尝试写一个压缩程序出来呢?如果你没有学习Huffman树,那咱们就一起先学习一下Huffman树吧。二、Huffman树压缩文件定义:Huffman树,又称为最优二叉树,是加权路径长度最短的二叉树。建立:

2016-11-09 20:55:23 14137 8

原创 【数据结构】大数据处理面试题解法

大数据处理的思路一般是这样的:把一个内存中放不下的文件按照一定的方法切分成小文件,再看是否有合适的数据结构能解决这个问题。当然,有时候不用切分,用位图也可以解决,根据具体问题而定。接下来我们看看下面几道大数据的面试题,这种题一般面试官也只是需要一个思路。1)给一个超过100G大小的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址?问题分析:    100G普

2016-11-08 22:44:07 714

原创 【数据结构】AVL树详解

1.什么是AVL树AVL树又称平衡二叉搜索树,它能保证二叉树高度相对平衡,尽量降低二叉树的高度,提高搜索效率。单纯的二叉搜索树在最坏的情况下插入查找删除等操作时间复杂度会是O(N),例如:所以,AVL树就能避免这种情况,使得增删查改的时间复杂度为O(lgN). (ps:这里的lgN指的是log以2为底的N。)那么AVL树是怎么做到的呢,看看它的特点你就大概知道了:1> 左子

2016-11-02 21:41:34 9608 2

原创 【数据结构】二叉搜索树的递归与非递归实现

一.什么是二叉搜索树1. 每个节点都有一个作为搜索依据的关键码(key),所有节点的关键码互不相同。2. 左子树上所有节点的关键码(key)都小于根节点的关键码(key)。 3. 右子树上所有节点的关键码(key)都大于根节点的关键码(key)。4. 左右子树都是二叉搜索树。二.二叉搜索树的代码实现(这里我们主要关心增删查改)#pragma onceusing

2016-10-25 19:41:23 497

原创 【数据结构】堆,堆实现优先级队列,堆排序

1.什么是堆?堆是一种数据结构,底层是一种数组对象,它可以被视为一棵完全二叉树结构 最大堆:每个父节点的都大于孩子节点; 最小堆:每个父节点的都小于孩子节点。2.堆数据结构二叉树存储。如图所示是个大堆,只能保证父节点比孩子节点大。所以下标为0是整个堆最大的,但无法确定下标为1,2的数据哪个更大3.堆数据结构和优先级队列的代码实现思想:从第一个非孩子节点的下标开始

2016-10-11 21:08:44 689

原创 购买阿里云服务器和域名之后需要做的事

近期想做一个网站,于是购买了阿里云的服务器和域名,之后却遇到了不少困难,这里把之后的过程梳理一下。我买的是阿里云学生机ECS服务器,下载客户端后通过绑定支付宝成功认证学生身份即可购买,但是只能购买一个月,之后需要连续签到10天即可获得优惠券,在续费时享受每个月10元左右的价格。一.买服务器需要注意的事情1.网络选择,一般会让你选是经典网络还是专有网络。    如果你的网站访问量不是很大

2016-10-10 12:58:22 25824

原创 【数据结构】中序线索化二叉树后实现一个迭代器来遍历二叉树

1.创建二叉树的结点#pragma once#include#includeusing namespace std;enum PointerTag{ THREND, LINK,};templatestruct BinaryTreeThdNode{ typedef BinaryTreeThdNode Node; BinaryTreeThdNode(T data) :

2016-10-10 09:22:21 585

原创 【java】写一个公交车类,包含乘客类数组,实现乘客上车下车等方法。

本示例主要练习java构造函数和数组的使用package 作业3;public class test { public static void main(String[] args) { // TODO Auto-generated method stub Bus b=new Bus("001",30000,30); b.setDriver("司机"

2016-10-06 17:35:58 8499 1

原创 【java】简单继承练习

1.package 上机3;public class test { public static void main(String[] args) { // TODO Auto-generated method stub Bird bird=new Bird("公"); bird.shout(); Dog dog=new Dog("

2016-10-06 17:30:10 1394

原创 【数据结构】二叉树的递归与非递归创建和遍历

下面代码所用到的测试用例画成树的样子长这样:创建树时给的是数组,用‘#’代表非法值,即该结点为空。二叉树的递归实现:#pragma once#include#includeusing namespace std;templatestruct BinaryTreeNode{ BinaryTreeNode(T value=0) :_value(value), _l

2016-10-05 17:04:15 461

原创 【STL】 vector 模拟实现

上一篇博客说了一下list的使用,其实vector用法基本上和list是一样的,所以此篇博客就只模拟实现以下vector。vector你可以把它理解成一个顺序表或者数组。只是STL里的vector是由三个迭代器来维护的:_start(数据存放开始的位置),_finish(数据存放结束位置的下一个),_endofstorage(容量的最后一个位置)。vector里的迭代器其实就是个指针。来看看代码实

2016-09-23 19:55:07 2010 2

原创 【STL】list的应用和模拟实现

1.认识STL    STL(标准模板库)是C++标准库的重要组成部分,共六大组件:容器,算法,迭代器,仿函数,适配器,空间配置器。此篇博客主要讲容器里的list的应用和简化版的模拟实现。2.list的相关应用    list可以说是我们平常所写的链表,但是不完全相同,库里的list是一个用模板实现的双向循环链表。除此之外还包括迭代器的一些操作。我们先来看看list它都包含些什么:

2016-09-16 19:28:55 923

原创 【C++】学习、复习知识框架

近期对C++的知识体系做了一个总结,希望以后在复习C++时可以用到,分享给大家~

2016-09-08 10:24:36 577

原创 【操作系统】C语言模拟操作系统实现磁盘调度算法——电梯调度算法

#include#include#includeint *Init(int arr[]){ int i = 0; srand((unsigned int)time(0)); for (i = 0; i < 15; i++) { arr[i] = rand() % 200 + 1; printf("%d ", arr[i]); } printf("\n"); ret

2016-09-01 17:45:18 10526

原创 【操作系统】C语言模拟操作系统实现动态分区分配算法

#define _CRT_SECURE_NO_WARNINGS 1 #include#include#include#include#define N 10000int n1;//空闲分区的个数int n2;//作业区的个数struct kongxian{ int start; //起址 int end; //结束 int length; //长度}kongxi

2016-09-01 17:39:08 11321 1

原创 【操作系统】C语言模拟操作系统优先数调度算法

——————————————————————————————————头文件————————————————————————————————————————#define _CRT_SECURE_NO_WARNINGS 1 #ifndef _SCHEDULING_H__#define _SCHEDULIHG_H__#define N 5#include#include#includ

2016-09-01 17:34:00 7756

软件测试讲解.pdf

测试用例中一个必需部分是对预期输出或结果进行 定义  程序员应避免测试自己编写的程序  编写软件的组织不应当测试自已编写的软件  应当彻底检查每个测试的执行结果  测试用例的编写不仅应当根据有效和预料到的输入 情况,而且也应当根据无效和未预料到的输入情况

2019-06-10

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

TA关注的人

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