自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 序列化与反序列化

serialVersionUID适用于java序列化机制。在反序列化的时候,首先会验证serialVersionUID是否一致,如果不一致会抛出InvalidCastException异常。序列化过程中遇到最多的就是,单方增加了某个字段,而另外一方没有更新。@Datapublic class vector implements Serializable { private st...

2020-03-23 16:30:31 261

原创 UDP聊天室

//client.cstruct message{ long type; char name[20]; char peer_name[20]; char mtext[512]; }; void recv_message(int ); void send_message(int , struct sockaddr_in *, char *, ...

2018-08-08 17:54:21 175

原创 C++复习——多态。

对象的类型对象的类型分为静态类型和动态类型。静态类型:对象声明时的类型,是在编译时确定的。动态类型:目前所指对象的类型,是在运行时确定的。多态静态多态:静态多态是由编译器在编译期间完成的,编译器根据函数实参的类型,推断出需要调用的函数。 动态多态:在程序执行期间,判断所引用对象的实际类型,根据其实际类型调用相应的方法。静态多态就是函数重载和泛型编程了。而要了解动态多...

2018-07-28 13:43:14 123

原创 C++复习——继承。

继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行拓展,增加功能。这样产生的新类成为派生类或者子类,被继承的类称为基类或者父类。继承定义格式:因为类成员访问限定符有三种,所以继承关系也有三种,分别是public、protected和private。具体就不举例了,方便记住就是继承选择更安全的方向,成员安全属性只能提高,不能降低。比如使...

2018-07-27 20:11:11 135

原创 c++复习——动态内存管理。

在C语言中,我们通常都会使用malloc、calloc、realloc和free来进行动态内存管理。malloc、calloc、realloc用来在堆上开辟空间。free用来释放申请的空间。int* ptr1 = (int*)malloc(sizeof(int) * 10); //malloc函数会申请对应大小的空间,返回值类型为void* //需要根据所需要的类型进行强制类型转...

2018-07-27 17:25:10 98

原创 模拟实现atoi和itoa函数。

atoi函数的作用是将字符串变量转换为整形变量。在实现之前我们创建一个枚举类型,来记录目标字符串的特殊类型,空串、全为空格和全为0的情况。enum State { EMPTY, ALLZERO, ALLSPACE,};//创建枚举便于分辨类型int State = EMPTY;int myatoi(const char* arr){ if (*arr == '\0')//...

2018-07-26 16:34:22 152

原创 利用socket接口实现简单的UDP网络程序。

上次我们进行了TCP网络简单程序的实现,这次就来实现一个UDP的网络程序。要实现它我们依然要先了解它的特性。与TCP协议相同,UDP协议也具有四个特点。传输层协议无连接不可靠传输面向数据报在UDP网络程序实现过程中,我们依然是利用socket接口来实现的,在上一篇文章中已经了解过了,我们就不重复描写了,直接来实现它。//client(客户端)#include <stdio.h>#i...

2018-05-22 17:57:32 439

原创 利用socket实现简单的TCP网络程序。

在我们编写程序前,我们需要先了解TCP协议的特点。传输层协议有连接可靠传输面向字节流在了解了TCP协议的特点后,我们就来实现一个简单的TCP网络程序。在实现过程中,我们需要用到最重要的东西就是socket套接字。socket:网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端就称为一个socket。socket本质是编程接                   口,建立网络通信连接...

2018-05-16 20:47:57 1289

原创 Linux线程死锁

死锁死锁是操作系统或软件运行的一种状态:在多任务系统下,当一个或多个进程等待系统资源,而资源又被进程本身或其它进程占用时,就形成了死锁。由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生了一种特殊现象。死锁产生的四个必要条件互斥条件:资源是独占且排他使用的,进程对于资源的使用是互斥的,同一时间,只允许一个进程获取资源。不可剥夺...

2018-05-02 21:41:56 513

原创 Linux进程间关系和守护进程

进程间关系和守护进程进程组。       每个进程除了有一个进程ID外,还属于一个进程组。进程组是一个或多个进程的集合。通常,他们与同一个作业相关联,他们可以接受来自于同一个终端的信号。每个进程组有一个唯一的组ID,每个进程组都可以有一个组长进程,进程组ID就是组长的ID。组长进程可以创建一个进程组,创建该组中的进程,然后终止。只要在某个进程组中一个进程存在,该进程组就存在,这与组长进程是否终止无...

2018-04-18 18:56:38 245

原创 Linux基于链表和循环队列的消费者生产者模型

要模拟出消费者生产者模型,就要先了解他们之间的关系,生活中,我们在买东西时候就是一种生产者消费者模型,供货商就相当于生产者,而我们就是消费者,商店或者超市,就是一种可以促使我们与供货商之间进行交易的场所。总结一下,我们可以简单的记为“321原则“。3是指三种关系,即为消费者与消费者的关系,消费者与生产者的关系,生产者与生产者的关系。2是指两个对象,即为消费者与生产者。1则是指一个交易场所。既然我们...

2018-04-16 21:47:42 604

原创 Linux线程

线程线程是一个进程内部的控制序列,所有进程都至少存在一个执行进程。进程和线程的区别进程是资源竞争的基本单位。线程是程序执行的最小单位。线程共享进程数据,但也拥有自己的一部分数据。每个进程可以拥有多个线程,但至少必须有一个线程。线程的优点创建一个新线程的代价要比创建一个新进程小得多。与进程之间的切换相比,线程之间的切换比较容易。线程占用的资源要比进程少很多。能充分利用多处理器的可并行数量。在等待I/...

2018-04-15 22:06:44 109

原创 Linux进程信号

每一个信号都有一个编号和一个宏定义的名称,这些宏定义可以再signal.h中找到。编号34以上的为实时信号。关于每个信号的作用是什么我们可以通过man指令去查看,例如:man 9 signal。其中数字对应第几号信号。信号产生的方式:用户在终端的某些按键会发送信号给前台进程。例如ctrl+c产生SIGINT信号。硬件异常产生信号。例如如果访问了非法地址,内核将发送一个SIGSEGV发送给进程。一个...

2018-04-14 18:33:10 182

原创 const和static

 const 修饰一个变量后,该变量就变成了常变量,拥有常量的性质,不可以被重新赋值。比如:const int num = 10;          num = 20//就是错误的了。const char* p:p是一个指针,它指向了一个常量字符。char const *p:p是一个常量指针,它指向了一个字符。由两句话的意思我们可以看出,const在不同的位置起到的作...

2018-04-14 18:02:00 120

原创 Linux进程间通信

进程间通信目的:数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源通知事件:一个进程需要向另一个或一组进程发送信息,通知它们发生了某种事件进程控制:有些进程希望完全控制另一个进程的执行,此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及                 时知道它的状态改变常见的几种通信方式管道:Linux进程间通信的几种主要手段,管道可用...

2018-04-09 17:23:40 107

原创 进程控制

一、进程创建要了解进程如何控制,我们首先要创建出一个进程,在这里就要用到一个函数。pid_t fork();fork函数是在进程中,创建一个子进程,创建成功后给父进程返回子进程的id,给子进程返回0,若失败就返回-1。函数使用过程如下代码: 1 #include<stdio.h> 2 #include<sys/types.h> 3 #include<unis...

2018-03-29 21:51:16 95

原创 进程

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

2018-03-23 12:54:40 258

原创 Linux_部分指令和所需要的权限

最近对于Linux有了一定的了解,所以对于常用的一些基本指令做一些记录。-l -d,-ld,-dl:这几个指令是用来访问目录属性的,根据前后不同,访问到的先后顺序也不同。rmdir:删除目录-receive:递归删除,用来删除拥有复杂根目录的目录man:简单来说就跟百度一样,什么不懂的可以问他~cp:对文件进行拷贝-h:同样是访问文件属性(大小)mv:移动文件cat:显示所有内容less:显示所有...

2018-03-22 17:43:06 133

原创 C++实现大小堆

堆是一种数据结构,常用在内存中数据的存储,大小堆的存在便于我们寻找所需要的数据。学习过大小堆后就尝试用C++来实现一个简易的大小堆。#include<iostream>#include<vector>#include<string.h>using namespace std;template <class T>class Heap{pu...

2018-03-19 20:28:54 464

原创 简易实现后缀表达式

同样为栈的应用程序之一,关于后缀表达式的概念我们不在赘述,直接来实现。enum OPERATOR //这个枚举类型是为了更好的存储数据建立的{ ADD,SUB,MUL,DIV,DATA};class Cell{public: Cell(OPERATOR op,int DATA) :_op(op) ,data(DATA) {} OPERATOR _op; int d

2017-11-30 20:25:18 183

原创 实现简单的花括号配对问题

为了判断花括号是否成功匹配的问题,我们依然要使用栈的特性。bool MatchBrackets(char* pStr, int len){ stack Bra; //在这里我们为了存取花括号,创建了一个栈 for(int i = 0;i<len;i++) { if ((pStr[i] == '(')||(pStr[i] == '{')||(pStr[i] == '[')

2017-11-30 20:15:07 285

原创 简易迷宫的实现

经过这段时间对于栈的学习,对于栈也有了一定的了解,所以想使用栈来实现一个简易的迷宫,来考察自己对于栈知识的掌握程度。#define N 10#define M 10 //在这里我们将行和列简单的定义为N,在这里同为10struct postion //定义这个结构是为了更方便的使用和更改位置信息{ postion(int x,int y)

2017-11-30 20:03:19 661

原创 对C语言的小总结

C语言已经学完一段时间了,所以抽段时间对于所学的知识进行一个总结。C语言里有32个关键字。(c99)想了解C语言我们首先要了解他的数据类型:数据长度因所在编译器不同范围会有差异,我所写的都是在32位平台下的范围。char-(-128~127)一个比特位(一个比特位为8位二进制小数,无特别声明的话第一位为符号位)short-(-32768~32767)两个比特位

2017-11-04 21:45:41 180

原创 对于模板的小总结

上次已经对模板和模板函数有了一些提及,在写一下这次内容前先对上次回顾一下。模板:顾名思义是创造一个模具,在需要用到类似东西时使用模具创作,会比重新创作更快,更方便,对于我们来说,就是减少代码量和提高效率的工具。它的关键字为template,比如我现在要写一个通用Add加法的函数,使用方式为:templateT Add(T a, T b){ return a + b;}T就是我在

2017-10-28 16:10:40 163

原创 模板和泛型编程。

在代码编写过程中,有时我们会遇到一些问题,他们有相同或者类似的格式。比如我要编写一个通用的加法函数,针对不同的参数和返回类型需要编写各种函数,比如如下两种:int Add(int a, int b){ return a + b;}char Add(char a, char b){ return a + b;}这两种分别是针对int和char参数的加法函数,如果我需要float

2017-10-16 17:24:36 180

原创 继承与派生

这篇文章是我自己对于继承和派生内容学习的理解和总结。在我看来继承与派生是对于已写代码最大的利用,和对减少新代码的工作量的最好方法之一。在如今的代码编写中,很多时候我们都会面对一些重复的编写,比如我们写一个算法的代码,刚开始他可能会存在一定的不足或漏洞,我们会去不断的完善和修改他,在这个过程中,我们就会编写新的代码去代替他,但是他原本的作用肯定还是存在的,如果我们在从头去编写,就会加大自己的

2017-10-10 22:25:54 148

原创 日期类的创建和一些基本应用。

#includeusing namespace std;class Date{public: Date(int year = 2017, int month = 9, int day = 10) : _year(year) , _month(month) , _day(day) { //这里是判断如果输入内容不符合日期的格式,就会默认为1990

2017-10-01 16:57:50 146

原创 动态开辟文件版通讯录

头文件:#ifndef __CONTACT_H__#define __CONTACT_H__ #include#include#include#define MAX 3 #define NAME_MAX 20 #define SEX_MAX 5 #define ADDR_MAX 30 #define TELE_MAX 12 #define SZ 3#define FI

2017-07-30 21:19:17 261

原创 c语言实现静态顺序表

头文件:#ifndef __SEQLIST_H__ #define __SEQLIST_H__ #include #include #include #define MAX 10 typedef int DataType;typedef struct SeqList{ DataType data[MAX]; int sz;}SeqList, *pSeqList;

2017-07-28 22:26:28 172

原创 c语言模拟实现简易通讯录

#define _CRT_SECURE_NO_WARNINGS#include"text.h"void menu(){ printf("*******************************************\n"); printf("****1、初始化信息 2、增加新用户*****\n"); printf("****3、已存用户 4、删除

2017-07-10 14:40:04 555

原创 初学结构体

刚接触结构体,写一篇博客谈谈自己对于结构体的认识。1、结构的定义   简单来说就是由多种类型相同或者不同的数据组成的数据集合,就是结构。2、结构的初始化   结构的初始化有两种方式,一个是由结构体名称加点的方式直接访问并修改,一个是由结构体指针加箭头的方式访问并修改,修改方式是利用大括号修改。3、结构体的typedef   一般申请结构体时需要这样写

2017-07-07 10:57:38 262

原创 模拟实现printf

#include#includevoid display(int tmp){ if(tmp > 9) { display(tmp / 10); } putchar(tmp % 10 + '0');}void print(const char *format, ...){ va_list arg; va_start(arg, format); while ((*for

2017-05-29 22:11:43 147

原创 模拟strcpy

#include #include#includechar* my_strcpy(char*dest, char*scr){ int *ret = dest; assert((dest != NULL) && (scr != NULL)); while (*(dest++) = *(scr++)) { ; } return ret;}int main()

2017-04-22 17:30:43 145

原创 两个数组找相同元素

#include#includeint binary_search(int key,int right,int left,char arr[]){ while (left <= right) { int mid = left + (right - left) / 2; if (arr[mid] < key) { left = mid + 1; } else if

2017-04-07 20:01:48 404

原创 改不少次,全是小错误

#include#includeint main(){ int x = 2, i = 1, j = x / 1, k = 0; for (x ; i<=5; i++) { k = k + x; x = 10 * x + j; } printf("%d\n", k); system("pause");}数列2+22+222+2222+22222

2017-04-04 22:05:17 140

原创 水仙花数- - 从简单开始

#include#includeint main(){ int x,i,j,k; for (x = 100; x < 1000; x++) { i = x / 100; j = (x - 100 * i) / 10; k = x - 100 * i - 10 * j; if (x == i*i*i + j*j*j + k*k*k) { printf("%d\n", x

2017-03-31 17:22:09 234 2

原创 连问带写

#include #include #pragma warning(disable:4996)#define EPS 0.000000001int main(){ double a = 0.0, b = 0.0, c = 0.0; scanf("%lf %lf %lf", &a, &b, &c); if ((a > -EPS) && (a<EPS)) { printf

2017-03-24 12:35:12 161

原创 第一次写

#include #includevoid main(){ int a = 1, b = 0, i; i = a; a = b; b = i; printf("a=%d\n", a); printf("b=%d\n", b); system("pause");}

2017-03-21 18:16:24 126

空空如也

空空如也

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

TA关注的人

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