自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 DB2错误信息【按照sqlcode排序】

sqlcodesqlcodesqlstate说明00000000SQL语句成功完成 01xxxSQL语句成功完成,但是有警告+01201545未限定的列名被解释为一个有相互关系的引用+09801568动态SQL语句用分号结束+10002000没有找到满足SQL语句的行

2017-04-04 17:44:37 685

原创 【Linux】 进程通信--消息队列

一.概念       消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。  每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值。我们可以通过发送消息 来避免命名管道的同步和阻塞问题。消息队列与管道不同的是,消息队列是基于消息的, 而管道是基于字节流的,且消息队列的读取不⼀定是先入先出。消息队列与命名管道有一样的不足,就是每个消息的最大长度是有上限的(MSGMA

2016-07-07 22:09:29 1599

原创 【Linux】 进程通信--命名管道

在之前的博客中介绍了进程通信中的无名管道通信pipe,也对无名管道的局限性进行了剖析。在这里,提出命名管道的概念FIFO,可解决无名管道的局限性,命名管道到底是通过什么机制进行通信的?请看下面命名管道(FIFO)                          ————顾名思义,first input first output,按照先进先出的原则工作,第一个被写入的数据将

2016-07-05 16:55:29 581

原创 【Linux】 进程通信--匿名管道

进程通信每个进程各⾃自有不同的⽤用户地址空间,任何⼀一个进程的全局变量在另⼀一个进程中都看不到 ,所以进 程之间要交换数据必须通过内核,在内核中开辟⼀块缓冲区,进程A把数据从⽤用户空间 拷到内核缓冲区,进程B再从内核缓冲区把数据读⾛走,内核提供的这种机制称为进程间通信 (IPC,InterProcess Com)画出简单的示意图:

2016-07-05 15:36:48 729

原创 【Linux】 常见的进程调度算法

常见的进程调度算法

2016-06-10 22:38:57 1189

原创 【Linux】 进程PCB的描述(task_struct)

task_struct是进程描述符。操作系统通过task_struct感知进程的存在。在linux中每一个进程都由task_struct 数据结构来定义.task_struct就是我们通常所说的PCB。 ta是对进程控制的唯一手段也是最有效的手段. 当我们调用fork() 时,系统会为我们产生一个task_struct结构。然后从父进程,那里继承一些数据, 并把新的

2016-05-30 15:23:54 4743

原创 【Linux】 配置vim

Linux的学习历程中,我们难免遇到vim,vim本来就是很强大,很方便的编辑器,加上我的代码后肯定会如虎添翼,或许读者使用其他编程语言,可以根据自己的需要进行修改,配置文件里面已经加上注释。一.     .vimrc的配置读者感兴趣的话直接复制下面的代码到文本文件,然后把文件改名为“ .vimrc” (不要忘记前面的“.”),然后把文件放到用户文件夹的根目录下面即可。重新打开vi

2016-05-27 14:58:49 2648

原创 【Linux】 find指令(文件查找)

每一种操作系统都有成千上万的文件组成,对于linux这样“一切皆文件”的操作系统来说更不例外,大家应该都能很轻松使用windows下的文件查找功能,但是对linux这一功能可能并不是很熟悉,其实想玩linux的你更要牢牢掌握这个命令,因为linux不像windows那样有固定的文件名后缀,并且因为linux阵营下百家争鸣的特性,一个相同的文件在不同的发行版,可能会有不同,所以如果能牢牢掌握find

2016-05-26 12:26:22 2163

原创 【数据结构】 二叉树

二叉树概念在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2^{i-1}个结点;深度为k的二叉树至多有2^k-1个结点;对任何一棵二叉树T

2016-05-26 12:26:19 393

原创 【C语言】 字符串操作函数及内存拷贝函数归总

今天在这里把零散的一些常用的字符串操作函数和内存拷贝函数进行一下归总实现。一 . 字符串操作函数字符串操作函数有很多,这里我列举一些常用的函数,以及自实现的代码:字符串拷贝函数:函数原型:char* my_strcpy(char* dst,const char* src)strcpy():char* my_strcpy(char* dst,const char* src){    assert

2016-05-26 12:26:16 900

原创 【数据结构】 栈

栈结构,通俗易懂,特点:先进后出,后进先出。以下,仅对于栈结构常用的操作进行实现包括:        入栈(push),出栈(pop),判空(empty),栈顶元素(GetTop)#include using namespace std;templateclass Stack{public:    Stack(T size) // 初始化数组大小        :top(0)  /

2016-05-26 12:26:13 296

原创 【数据结构】 一个数组实现两个栈【面试】

以前,我们实现一个栈,轻轻松松,无需考虑太多因素,即可实现。现在,要求在一个数组里实现两个栈,那么在数组里怎么实现栈呢?无非就是下标索引,方法也不局限一种,例如:用奇数下标作为栈s1的结构,用偶数作为s2的结构;再者:一前一后的结构,栈s1从前往后,栈s2从后往前。650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/7F/17/wKi

2016-05-26 12:26:10 690

原创 【数据结构】 两个栈实现一个队列【面试】

栈结构:先进后出,后进先出,只允许在栈尾操作。队列:先进先出,在队尾入队,在队头出队。要想用两个栈实现一个队列,就需要使用一个相当于中间量的结构进行队列的入队和出队操作。用图形象化为:650) this.width=650;" src="http://s1.51cto.com/wyfs02/M01/7F/17/wKiom1cTKdyAGgZmAAAdDuQIW7Q496.png" title="出

2016-05-26 12:26:07 317

原创 【数据结构】 出栈序列的合法性【面试】

之前我们对栈已经有所了解,先进后出,后进先出这是栈的两大特性,那么,我们经常会碰到这种题,例:有一组元素abcdef,按先后顺序进栈,那么出栈时哪些情况是非法的?A.   fedcbaB.   abdcefC.   acbdefD.   abcdef选哪个呢???很明显,根据栈的两大特性:先进后出,后进先出,即可判断,答案:C剖析: 先看C选项acb这样的出栈序列,那么进栈肯定是abc,那么显然出

2016-05-26 12:26:05 822 1

原创 【C++】 斐波那契数列

斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:       F(0)=0,(n = 0)       F(1)=1,(n = 1)     

2016-05-26 12:26:01 816

原创 【C++】 浅析智能指针

引言:由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete。程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见。RAII(Resource Acquisition Is Initialization)资源分配即初始化,定义一个类来封装资源的分配和释放,在构造函数完成资源的分配和初始化

2016-05-26 12:25:59 413

原创 【C++】 浅析异常

所谓异常,顾名思义就是不正常,有问题。对于人来说有不正常的时候即生病身体不适,那么对于程序也一样,也有不正常即代码“有病”。那么,既然有病就要治疗,就要对症下药!这样才能恢复正常。废了这么多话,还是引出我们C++的“异常”概念。异常,让一个函数可以在发现自己无法处理的错误时抛出一个异常,希望它的调用者可以直接或者间接处理这个问题。而传统的异常处理方法:1.终止程序2.返回一个表示错误的值(很多系统

2016-05-26 12:25:55 249

原创 【C++】 浅析深浅拷贝

C++中深拷贝和浅拷贝的问题是很值得我们注意的知识点,如果编程中不注意,可能会出现疏忽,导致bug。本文就详细讲讲C++深浅拷贝的种种。  我们知道,对于一般对象:    int a = 1;    int b = 2;  这样的赋值,复制很简单,但对于类对象来说并不一般,因为其内部包含各种类型的成员变量,在拷贝过程中就会出现问题例如:#include using namespace std;

2016-05-26 12:25:53 337

原创 【C++】 双向链表.cpp

双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表,因为双向链表解决了单向链表的不足和问题,而单链表因为出现的问题多,所以在面试中经常会考到单链表的问题。在这里,我用  .cpp对双向链表的基本操作进行实现。具体代码如下:  List.h文件:#pr

2016-05-26 12:25:49 524

原创 【C++】 单链表 .cpp

之前,在C语言阶段使用了C编写单链表,简单易懂,那么,今天使用C++再次编写单链表,旨在对比两者之间的区别和异同:下面就是cpp实现的代码:SList.h文件:#pragma oncetypedef int DataType;class SListNode{    friend class SList;public:    SListNode(DataType x)      

2016-05-26 12:25:46 456

原创 【C++】 复数类操作

复数的概念我们高中已经接触过,包含是实部和虚部,For example:2i + 3J;实部和虚部值可为整型,亦可浮点型,那在此实现一下简单的复数类的操作代码如下:class Complex{public:    Complex(double real,double imag)    {        _real = real;        _imag = imag;    }

2016-05-26 12:25:43 947

原创 【c语言】 单链表

单链表,顾名思义是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。我们在这里使用C语言实现:.h 文件:#pragma once#include#include typedef int DataType;t

2016-05-26 12:25:41 334

原创 【c语言】 单链表

单链表,顾名思义是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。我们在这里使用C语言实现:.h 文件:#pragma once#include#include typedef int DataType;

2016-05-26 12:25:38 297

原创 【C语言】 简易通讯录

我们使用多文件进行编写实现"contact.h"#ifndef __CONTACT_H__#define __CONTACT_H__#define MAX_NAME   20#define MAX_SEX 3#define MAX_TELE 12#define MAX_ADDR 20#define MAX 1000#define INIT_SIZE 100#defin

2016-05-26 12:25:35 315

原创 【C语言】 动态开辟二维数组

#include #include int main(){//int arr[3][4];int **arr = (int**)malloc(sizeof(int*) * 3);int i = 0;int j = 0;int k = 1;for(i = 0;i<3;i++){ arr[i] = (int *)malloc(sizeof(int) * 4);//  me

2016-05-26 12:25:32 758

原创 【C语言】 使用回调函数实现冒泡排序

实现功能:既能排序整型数,也可以排序字符串代码如下:#include #include int int_cmp(const void *p1, const void *p2){ if (*(int *)p1 > *(int *)p2) { return 1; } else if (*(int *)p1 == *(int *)p2) { return 0; }

2016-05-26 12:25:29 506

原创 【C语言】 函数指针小谈

指针可以指向变量、数组,也可以指向函数,函数指针就是指向函数的指针函数名实际是程序在内存中的起始地址。而指向函数的指针可以把地址传递给函数也可以从函数返回给指向函数的指针。例如这个例子:通过一个函数求两个数的和并通过函数指针调用该函数。#includeint sum(int a,int b);//求和函数的声明void main(){ int a,b; int (*fun)(i

2016-05-26 12:25:26 293

原创 【C语言】 模拟计算器

#include #include int _add(int a, int b){    return a + b;}int _sub(int a, int b){    return a - b;}int _mul(int a, int b){    return a*b;}int _div(int a, int b){    if (b == 0)    {

2016-05-26 12:25:23 3327

原创 【C语言】 浅谈指针

指针是就是地址,是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。 要搞清一个指针需要搞清指针的四方面的内容:指针的类型、指针所指向的 类型、指针的值或者叫指针所指向的内存区、指针本身所占据的内存区。让我们分别说明。首先,先罗列出几种常见的类型:int p;   //这是一个普通的整型变量int *p;  //首先从P处开始,先与*结合,所以说明P是一个指针,然后再与int结合,说明指

2016-05-26 12:25:20 2293

原创 【C语言】 检测大小端存储

#include int sys_check(){    int i = 1;    char *pi = (char *)&i;  //强制类型转换为char *,取首字节的内容,用以判断条件    //if (1 == *(char *)&i)    if (*pi == 1)    { return 1;    }    else    { return 0;  

2016-05-26 12:25:17 477

原创 【C语言】 实现strncpy,strncat,strncmp

//strncpy与strcpy无异,只是拷贝的块大小不一样,strncpy只是向后拷贝n个字节的内容#include#includechar *my_strncpy(char *dest,const char *src,size_t n){ char *ret = dest; assert(dest); assert(src); while(n--)   // 用字节数

2016-05-26 12:25:14 398

原创 【C语言】 实现memset

void *memset(void *s, int ch, size_t n);函数解释:将s中后n个字节(typedef unsigned int size_t)用 ch 替换并返回 s memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。#include#includevoid *my_memset(void *arr,int 

2016-05-26 12:25:11 391

原创 【C语言】 实现memcmp

内存比较函数memcmp:比较内存区域buf1和buf2的前count个字节,函数原型为int memcmp(const void *buf1, const void *buf2, unsigned int count)#include#includeint *my_memcmp(const void *str1,const void *str2,unsigned int n){ 

2016-05-26 12:25:08 687

原创 【C语言】 实现memmove

内存重叠拷贝函数memmove:用于从src拷贝count个字符到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。但复制后src内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。由src所指内存区域复制count个字节到dest所指内存区域#include#includevoid my_memmo

2016-05-26 12:25:05 1205

原创 【C语言】 实现memcpy

memcpy属内存操作函数,实现内存拷贝功能,但其参数类型为void,意思是任意类型都可以,但是在函数内要进行强制类型转换,并且其与strcpy相比多了一个参数size_t count(字节数)memcpy的函数原型是void *memcpy(void *dest, const void *src, size_t n),其功能是从源src所指的内存地址的起始位置开始拷贝count个字节到目标de

2016-05-26 12:25:03 311

原创 【C语言】 冒泡排序子例

调整数组使奇数全部都位于偶数前面实现以下功能:输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分代码实现:#includevoid swap(int *a,int *b){ int t = *a; *a = *b; *b = t;}int adjust_num(int arr[],int n){

2016-05-26 12:25:00 268

原创 【C语言】 冒泡排序

#include int main(){ int arr[9] = {1,5,2,7,6,3,8,9,4}; int i = 0; int j = 0; int tmp; int len=sizeof (arr)/sizeof(arr[0]); for(j=0;j<len-1;j++)   //控制循环的次数 { for(i=0;i<len-1-j;i++) //控制数组的

2016-05-26 12:24:57 332

原创 【C语言】 实现strcmp

#include #include int my_strcmp(const char * str1, const char * str2)      { assert(str1); assert(str2); while ((*str1 == *str2) && *str1 && *str2) { str1++; str2++; //while (!(*str1 && *

2016-05-26 12:24:54 1238

原创 【C语言】 实现strncat

#include #include char *my_strncat(char *strDest,const char *strSrc,int i){ char *start = strDest;  //为了将这个函数的返回值作为其他函数的参数,即链式访问 assert((strDest != NULL) && (strSrc != NULL)); while(*strDest++)

2016-05-26 12:24:51 458 1

原创 【C语言】实现strcat

Strcat函数原型如下:char *strcat(char *strDest, const char *strScr) //将源字符串加const,表明其为输入参数{       char * address = strDest;             //该语句若放在assert之后,编译出错       assert((strDest != NULL) && (strScr !=

2016-05-26 12:24:48 364

空空如也

空空如也

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

TA关注的人

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