自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

cm_cyj_1116的博客

个人学习总结

  • 博客(58)
  • 资源 (2)
  • 收藏
  • 关注

原创 Python实现字母验证码图片

   本文主要是使用Python的第三方库Pillow,使用其中的Image、ImageDraw、ImageFont、ImageFilter模块实现了一个字母验证码图片的生成。一、Pillow的安装pip install Pillow注:pip工具需要自己安装;pillow的官网链接:https://pillow.readthedocs.io/en/5.2.x/二、项目的代码...

2018-08-27 14:43:37 1491

原创 基于UDP的聊天系统的实现

基于UDP使用Python实现了一个聊天系统。客户端的代码实现(使用键盘对于数据的读入):#!/usr/bin/python# -*- coding: UTF-8 -*-import socketserver_addr=('127.0.0.1',8080)s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)while True: ...

2018-08-24 13:17:40 1147

原创 python的面向对象编程(一)

一、类和实例 类是抽象的模板,而通过类可以实例出来对象。1、创建类:class Person(object): passclass 类名(继承的类的类名)通常情况下:当一个类没有要继承的类的情况下,就继承 object类,object是所有的类都会继承的类;2、创建类的对象并且为类的对象绑定属性p1 = Person() #创建一个Perso...

2018-08-16 17:42:03 606

原创 CMake的安装及其简单使用

一、CMake的安装 (本文是在Ubuntu 17.04下的安装,安装的版本为 2.8.9)1、卸载原有系统上安装的cmake,便于安装更高版本的cmake。(如果不卸载系统自带的,直接安装,可能会出现错误。)     apt-get autoremove cmake2、去官网下载cmake的最新版的安装包   官网地址: https://cmake.org/download/   注:下载和自己...

2018-02-12 13:33:27 86362 6

原创 I/O多路转接之select

selectselect系统调用是用来让我们的程序监视多个文件句柄的状态变化的,程序会对于句柄关心的事件进行等待,直到被监视的文件句柄一个或者多个的状态发生了变化。注:文件句柄,其实就是文件在所对应的进程中的文件描述符。文件句柄关心的事件:(1)读事件------------->数据;(2)写事件------------->存放数据的缓冲区;(3)异常事件-----

2017-07-29 16:50:31 705 1

原创 初识TCP/IP及使用套接字进行网络编程

通过对于TCP/IP协议以及套接字的学习,编写了最简单的客户端/服务器端程序:1.单进程版本的服务器:#include#include#include#include#include#include#include#include#includeint startup(char* ip,int port){ int sock = socket(AF_INET,

2017-07-25 21:48:01 1347

原创 你的出栈顺序合法吗?

题目:根据入栈顺序判断出栈顺序是否合法;例如:入栈的序列(1,2,3,4,5),出栈序列为(4,5,3,2,1),则合法。入栈的序列(1,2,3,4,5),出栈序列为(4,5,2,3,1),则不合法。图示理解:代码:bool CheckTheStackOutputIsLow(int in[],int out[],int in_len,int out_len){

2017-07-21 21:14:26 798

原创 NAT技术和代理服务器

NAT技术:产生的原因:(1)由于IPv4版本的IP地址数量现在已经比较紧缺,不能满足正常的使用,NAT技术可以让局域网中的中的主机拥有少量合法的公有IP,使用NAT将内部地址转换为合法的公有地址;(2)防止外部主机对于内部主机的攻击;定义:NAT(Network Address Translation),网络地址转换;属于接入广域网技术,是一种将私有地址转化为合法IP地址

2017-07-20 20:00:55 1321

原创 守护进程

守护进程概念:守护进程也成精灵进程,是运行在后台的一种特殊的进程,也就是一个后台作业,独立于控制终端并且周期性的执行某种任务或者等待处理某些发生的事件。Linux系统启动时会启动很多系统服务进程,这些系统服务没有终端,不能直接和用户交互。其他进程都是在用户登录或运行程序时创建,在运行结束或用户注销时终止,但系统服务进程不受用户登录注销的影响,7*24小时一直运行。特点:

2017-06-21 11:26:09 380

原创 CRC循环冗余校验

CRC(循环冗余校验码)校验循环冗余校验码(Cycle Redundancy Check)是一种被广泛采用的多项式编码,又称多项式码。循环冗余校验码具有良好的数学结构,易于实现,发送端编码器和接受器端检测译码器的实现较为简单;同时,具有十分强的检错能力,特别适合于检测突发性的错误。计算主要用到两个多项式:f(x) 和G(x)。f(x)是一个k阶多项式,其系数是待发送的k+1

2017-06-19 23:49:48 835

原创 网络端口号

网络端口一.提出的背景:在多进程的环境下,为了解决两个主机之间的通信,但是源主机不知道要发送消息给目的主机的哪一个进程,所以,必须使用端口号来确定目的主机上的唯一的一个进程。注:此篇文章所谈的是协议端口,也就是软件端口。端口号应用于传输层。二.分类:(一)按照端口号分为3类 (1)公共端口:从0-1023,总共1024个这些端口的通讯都明确表明了某种服务的协议;

2017-06-19 21:38:13 1338 2

原创 进程等待

进程等待:(一)pid-t wait(int* status);参数:status为一个输出型参数,用于获得所等待进程的退出信息;返回值:成功返回的是所等待进程的pid,大于0。             失败返回-1.(二)pid_t waitpid(pid_t pid,int* status,int options) ;参数:pid 为所等待进程的pid;

2017-06-11 15:05:12 459

原创 Java学习第一课

Java学习:一.安装JDK和Eclipse:JDK的安装:第一步:在Sun公司的官网上下载和自己的电脑版本以及操作系统相匹配的安装包;           链接:http://java.sun.com/javase/downloads/index.jsp;下载成功后然后安装 ;第二步:JDK的环境变量的配置:(1)新建环境变量:JAVA_HOME:C:\ProgramFi

2017-06-05 21:06:58 388

原创 信号的产生以及处理

信号kill -l :查看系统中的信号列表。 1 -31号信号为普通信号; 34-64号信号为实时信号;信号产生的方式:(1)键盘产生信号:eg:ctl + c(2)异常产生:异常产生信号导致进程终止;当一个进程由于异常被终止时:可以选择把进程的用户空间数据保存到硬盘上,文件名通常是core;这叫做 core Dump(核心转储);注:a:保存这些数据可

2017-06-05 17:01:55 846

原创 生产者---消费者模型之信号量

信号量:(1)定义信号量:sem_t semaphore; //定义一个名为semaphore的信号量;(2)初始化信号量 int sem_init(sem_t *sem, int pshared, unsigned int value);

2017-06-04 15:09:01 1145 2

原创 生产者--消费者模型之互斥锁和条件变量

生产者-消费者模型三种关系:(1)生产者与生产者:互斥关系;(2)生产者与消费者:互斥与同步的关系;(3)消费者与消费者:互斥关系;两种角色:(1)生产者;(2)消费者;一种交易场所:单链表;注:交易场所通常指的是生产者生产的数据以及消费者消费的数据所保存的数据结构;互斥锁:定义互斥锁:全局定义以及初始化;pthread_mutex_t mutex =

2017-06-01 23:53:50 2033 1

原创 线程的互斥

线程需要互斥的原因:由于多个线程同时在进程的地址空间内部运行,所以进程的大部分资源相对于线程而言都是共享的,所以当多个线程同时对于某个临界资源进行操作时,就会出现问题,所以,线程之间对于临界资源的访问需要互斥的进行访问,以便造成不确定的结果。范例:#include#includeint _val = 0;void* thread_run(){ int i=0; while

2017-05-30 18:43:15 1489 5

原创 进程间通信之共享内存(四)

共享内存共享内存是将同一份物理内存映射到不同进程的地址空间中去;共享内存是不带任何互斥和同步机制的进程间通信;共享内存是所有进程间通信中最快的;注:共享内存不需要数据的拷贝;共享内存的生命周期随内核;共享内存可以实现进程间的双向通信;(一)创建共享内存int shmget(key_t key,size_t size,int shmflg);参数:key: k

2017-05-24 21:14:00 732

原创 进程间通信之信号量(三)

信号量信号量是记录和统计临界资源数目的计数器;(一)创建信号量:信号量的申请是以信号量集为单位的;int semget(key_t key,int nsems,int semflag);返回值:信号量集的标识符;参数:key:用key_t ftok(const char* pathname,int proj_id)来获取;nsems:表示要创建的这个信号

2017-05-22 19:26:07 435

原创 进程间通信之消息队列(二)

消息队列消息队列是基于消息的,且读取方式不一定是FIFO;消息队列提供了一种从一个进程向另一个进程发送一个有类型数据块的方法;消息队列可以实现双向通信;消息队列是用链表实现的;消息队列数据结构 : struct msqid_ds { struct ipc_perm msg_perm; /* Ownership and permiss

2017-05-19 21:14:29 914

原创 进程间通信之管道通信(一)

管道Pipepipe是系统调用;pipe只能进行进程间的单向通信;(1)创建管道:         匿名管道的创建:int pipe(fd[2]);         当一个进程调用pipe成功后,则这个进程以读方式和写方式分别打开一个pipe文件,那么:fd[0]保存读方式打开的文件描述符,fd[1]保存以写                       方式打开的文件描述符

2017-05-18 09:28:21 943

原创 辨析文件描述符和文件指针

文件指针文件指针C语言中用一个指针变量指向一个文件,这个指针称为文件指针。定义说明文件指针的一般形式为:FILE *指针变量名文件指针的类型为FILE*类型的,FILE为C库中定义的一种结构体,包含文件的各种信息。FILE结构体的定义:typedef struct{ short level; unsigned flags; char fd;

2017-05-07 11:25:19 633

原创 Shell工具之sed

shell小工具之sedsed:流式文本编辑器sed工具的原理:sed编辑命令的格式为:sed ‘/pattern/action’filepattern是正则表达式,action是编辑操作注:当一条命令只有action没有正则匹配时:对于所操作文件的每一行都进行action操作;sed有两种规范:Basic规范和Extend规范;sed默认是Basic规范,es

2017-04-24 13:06:09 575

原创 调整数组顺序使奇数位于偶数前面

面试题14:调整数组顺序使奇数位于偶数前面 题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序。使得所有奇数位于数组的前半部分,所有偶数位于奇数的后半部分;思路:(1)维护两个指针分别指向数组的头和尾;          (2)移动两个指针,当头指针指向的数字为偶数并且尾指针指向的数字为奇数时;交换两个指针指向的值;          (3)以此进行,直到头指针等

2017-04-13 19:54:59 452

原创 Linux之进程的PCB——task_struct

task_struct:task_struct是Linux系统中的任务结构指针,定义在头文件include/linux/sched.h中,保存着用于控制和管理进程的所有信息,主要包括进程当前的运行状态信息,信号,进程号,父进程号,运行时间累计值,正在使用的文件和本任务的局部描述符一级卡任务状态段信息。task_struct结构:struct task_struct{ long

2017-04-10 17:29:51 713

原创 打印1到最大的N位数

题目:输入数字n,按顺序打印出从1到到最大的n位十进制数。例如:输入3,则打印出1,2,3一直到最大的三位数999;思路:(1)对于n位数,可以用int或者long long存储时,直接计算打印即可;        (2)对于n位数,用int 或者long long都存储不了时,这便是一个大数问题;         大数问题:字符串表示法和数组表示法;//当数字不足够大的时候,使用

2017-04-10 09:36:17 709

原创 Shell脚本中命令代换

Shell脚本中的` `:

2017-03-24 11:00:38 573

原创 Linux命令之cd

cd 命令格式:cd [dirname]作用:切换当前目录到dirname;cd ~:进入用户目录;cd -:返回最近访问目录;cd ..:返回上级目录;cd进一个目录,需要啥权限?cd进入一个目录之后可以创建普通文件并且可以显示普通文件什么的权限?cd进入一个目录之后可以创建文件,需要用户对于该目录有‘w’写权限,查看普通文件的权限则对于该

2017-03-23 20:41:03 749

原创 位运算相关面试题

面试题一:在Excel2003中,用A表示第一列,B表示第二列...........Z表示第26列,AA表示第27列,AB表示第28列..............以此类推。请写出一个函数,输入字母表示的列好编码,输出她是第几列。思路:把十进制数字用A-Z表示成二十六进制。面试题二:二进制中1的个数题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制位1

2017-03-22 12:12:07 757

原创 旋转数组中的最小数字

面试题8:旋转数组的最小数字题目:把一个数组的最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增数组的旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1.算法:(1)当输入的旋转数组非法时:处理!(2)当输入的旋转数组正常时,index1 = 0;index2=length-1:   a:如果ar

2017-03-21 23:26:08 715

原创 重建二叉树

题目:输入某二叉树的前序遍历结果和中序遍历结果,请重建出该二叉树。假设输入的前序遍历结果和中序遍历结果都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出该二叉树,并输出头结点。

2017-03-20 18:23:24 538

原创 从尾到头打印单链表

题目:输入一个链表的头结点,从尾到头反过来打印每个节点的值。链表节点的定义:typedef struct LinkNode{ int _value; struct LinkNode* _next;}LinkNode,*pLinkNode;链表定义:typedef struct LinkList{ LinkNode* _phead;}LinkList,*pLinkLis

2017-03-19 18:16:13 1096 2

原创 栈和队列的相互实现

栈和队列的相互实现算法:代码:两个栈实现一个队列://题目:使用两个栈实现一个队列#pragma once#include#includeusing namespace std;template class Queue{public: stack stack1; stack stack2;public: Queue() {} ~Queue() {}

2017-03-18 22:44:44 657

原创 找出数组中的“单身狗”

(一)数组中的元素除一个只出现一次外,其余均成对出现,找出这个只出现一次的元素;        算法:对于数组中的所有元素进行异或操作,便可得到这条单身狗;(二)数组中的元素除了两个只出现一次外,其余均出现一次,找出这两个只出现一次的元素;       算法 : (1)对于数组中的所有元素进行异或处理,得到异或的结果result;                 (2)找到resu

2017-03-17 09:11:41 1535 2

原创 数组中重复的数字

题目:在一个长度为n的数组里的所有数字都在0-n-1的 范围内。数组中某些数字是重复的,但是不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3.解法1:对于数组进行排序,之后对于已经排序的数组进行遍历便可知道数组中重复的数字。时间复杂度;O(nlogn);解法

2017-03-15 09:22:16 909 2

原创 Linux下的粘滞位详解

1.产生粘滞位的原因:Linux下有一个用于存放临时文件的目录 /temp,每一个用户产生的临时文件都存放在 /temp目录下面,而且每个用户都对于这些文件具有写权限,为了防止用户对于除自己外的其他用户的文件进行删除操作,所以产生了粘滞位。2.什么是粘滞位:上图所示的t就是所谓的粘滞位;对于权限为777的目录设置粘滞位以后,每个用户只能删除自己创建的文件,可以保护用户的文件

2017-01-01 21:53:28 1372

原创 Linux命令之find命令详解

find命令(1)find命令用于在结构目录(文件树)中搜索文件,并执行指定的操作;(2)find命令在一个较大的文件系统中查找文件时,时间消耗非常大,因此大多数情况下:对于find命令的执行放在后台          执行;(3)命令格式:find pathname -optionsfind

2017-01-01 19:20:34 1953

原创 Linux之touch命令详解

在Linux中,touch命令主要是用于新建一个不存在的文件或者是对于文件的时间戳进行修改;(1)使用touch命令新建一个不存在的文件使用touch新建了一个文件,然后使用ls -a进行文件目录进行打印,没有找到change.txt文件;(2)使用touch指令对于文件的时间戳进行修改;touch -a:touch -a test.c对于文件的存取时间进行修改

2016-12-28 00:13:37 3516 1

原创 Linux命令之stat的三个时间详解

stat的使用及其解释stat命令是查看文件的详细信息的Linux的命令。File为stat文件的名称 ;Size为文件的大小;Access: 2016-12-27 23:28:44.309995899 -0500:时间指的是最后一次访问文件的时间(没有进行任何操作,仅仅是访问);Modify:2016-12-27 23:28:44.309995899 -0500:

2016-12-27 23:10:32 1098

原创 磁盘的访问机制及其相关算法

一.磁盘的性能1.磁盘的结构磁盘设备包括一个或者多个物理盘片,每个盘片分为一个或者两个存储面,每个盘面上有若干个磁道,每个磁道间有一定的间隙。

2016-12-20 22:43:09 2084

HTTP协议的分析和理解

详细分析HTTP协议消息报头,以及请求和响应,使用Telnet了解HTTP的整个通讯过程。

2018-07-20

SIM900A开发板原理图

SIM900A的官方文档,GPRS的SIM900A模块的开发板原理图。

2018-07-20

空空如也

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

TA关注的人

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