自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 面试排序算法总结

转自1.插入排序 1.1直接插入排序     这是一种最简单,最容易理解的排序方式,其排序思路如下:假设待排序数组为R[0,1,2,i...n-1],首先将R[0]看作一个有序的子序列(尽管它只有一个数),从R[1]至R[n-1]开始,逐一向该子序列进行插入操作(由小到大排序),那么左半部分的有序子序列将不断增加,而右半部分的待排序列将不断减少,当有序子序列的长度等于原序列时,...

2018-08-19 17:51:17 254

原创 vim命令汇总

1、vi的基本概念基本上vi可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:1) 命令行模式command mode)控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。2) 插入模式(Insert mode)只有...

2018-05-12 11:01:05 2747 1

原创 C操作Mysql

1.连接数据库。    从C语言连接MySQL数据库包含两个步骤:    a)初始化连接句柄结构;    b)实际创建连接。       首先使用mysql_init初始化连接句柄:        MYSQL * mysql_init (MYSQL *);      通常传递一个空指针给mysql_init这个函数,它会返回一个指向新分配的连接句柄结构的指针。如果传递一个已有的结构,他将被重新初始...

2018-05-09 19:58:57 355

原创 十步完全理解 SQL

十步完全理解 SQL 很多程序员视 SQL 为洪水猛兽。SQL 是一种为数不多的声明性语言,它的运行方式完全不同于我们所熟知的命令行语言、面向对象的程序语言、甚至是函数语言(尽管有些人认为 SQL 语言也是一种函数式语言)。 10个简单步骤,完全理解SQL1、 SQL 是一种声明式语言首先要把这个概念记在脑中:“声明”。 SQL 语言是为计算机声明了一个你想从原始数据中获得什么样的结果的一个范例,...

2018-05-09 19:57:04 226 1

原创 Linux下静态库和动态库的制作与使用

Linux下静态库和动态库的制作与使用    Linux操作系统支持的函数库分为静态库和动态库,动态库又称共享库。linux系统有几个重要的目录存放相应的函数库,如/lib /usr/lib。  静态函数库:   这类库的名字一般是libxxx.a;利用静态函数库编译成的文件比较大,因为整个函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后的执行程序不需要外部的函数库支持,因为...

2018-05-09 19:17:33 185

原创 Linux7个运行级别

Linux 7个运行级别(0:关机,停机模式、1:单用户模式、2:多用户模式、3:完整的多用户文本模式、4:系统未使用,保留一般不用、5:图形化模式、6:重启模式)、重置root密码方法        init是Linux系统操作中不可缺少的程序之一。init进程,它是一个由内核启动的用户级进程。内核会在过去曾使用过init的几个地方查找它,它的正确位置(对Linux系统来说)是/sbin/ini...

2018-04-24 15:26:17 4732

原创 自己实现(strlen,strcpy,strncpy,strcmp,strncmp,strcat,strncat)

废话不多说,直接上代码,能看懂看,看不懂别看了,学习这种事,随缘就好#include<iostream>#include<assert.h>using namespace std;size_t my_strlen(const char *str){ assert(str != NULL); if(*str == '\0') return 0; else ...

2018-04-23 20:57:19 319

原创 自己实现memcpy和memmove,两者的区别及内存重叠问题

memcpy和memmove最大的区别就是,memcpy会出现内存覆盖,而memmove不会废话不多说直接上代码#include<iostream>#include<assert.h>using namespace std;void *my_memcpy(void* dest, const void* src, size_t count)//不考虑内存重叠,若考虑,...

2018-04-23 20:49:58 281

原创 Hash冲突解决方法

一、冲突是如何产生的?哈希函数是指如何对关键字进行编址的规则,这里的关键字的范围很广,可视为无限集,如何保证无限集的原数据在编址的时候不会出现重复呢?规则本身无法实现这个目的。举一个例子,仍然用班级同学做比喻,现有如下同学数据张三,李四,王五,赵刚,吴露.....假如我们编址规则为取姓氏中姓的开头字母在字母表的相对位置作为地址,则会产生如下的哈希表位置字母姓名0a1b2c...10   L    ...

2018-04-23 16:55:38 293

原创 Linux中tcpdump命令用法详解

在Linux中Linux tcpdump是最重要的技术之一,今天就带大家学习一下Linux tcpdump的表达式、Linux tcpdump的输出结果等方面。tcpdump采用命令行方式,它的命令格式为:tcpdump[-adeflnNOpqStvx][-c数量][-F 文件名][-i网络接口][-r文件名][-ssnaplen][-T类型][-w文件名][表达式]Linux tcpdump的选...

2018-04-14 19:58:04 385

原创 Linux中netstat命令的用法详解

功能说明:Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。语  法:netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]补充说明:利用netstat指令可让你得知整个Linux系统的网络情况。参  数:-a或–all 显示所有连线中的Socket。-A<网络类型>或...

2018-04-14 19:56:28 288

原创 Select函数说明

Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所谓非阻塞方式...

2018-04-14 19:54:04 191

原创 Select技术

Select是一种多路复用IO输入输出模式,在linux的输入输出编程中也可以用到Select技术,通过Select的轮询机制,发现可用、可读或可写的接口,套接字也是一种输入输出机制,所以也可以使用Select方式进行高性能的网络程序设计。  Select技术简介 Select()函数是一种重要的socket编程机制,与传统的编程方法不同,它是用在非阻塞方式的网络应用程序中,顾名思义,非阻塞方式是...

2018-04-14 19:52:45 607

转载 TCP三次握手四次挥手

转自:https://blog.csdn.net/tennysonsky/article/details/45622395三次握手在 TCP/IP 协议中,TCP 协议提供可靠的连接服务,采用三次握手建立一个连接。 第一次握手:建立连接时,客户端发送 syn 包(syn=j)到服务器,并进入 SYN_SEND 状态,等待服务器确认; 第二次握手:服务器收到 syn 包,必须确认客户的 SYN(ac...

2018-04-14 19:51:37 107

原创 柔性数组

#include<stdio.h>typedef struct _SoftArray{ int len; int array[];}SoftArray;int main(){ int len = 10; printf("The struct's size is %d\n",sizeof(SoftArray));}     我们可以看出,_S...

2018-04-11 11:29:48 163

原创 京东4.9笔试编程题

代码:#include<iostream>using namespace std;int youqu(char *str){ int i,n=0; if(strlen(str)==1)//只有一个字符直接返回0 return n; if(str[0]!=str[1])//第一个字符只和右边比 n++; if(str[strlen(str)-1]!=str[str...

2018-04-10 15:08:31 214

原创 exit()函数与_exit()函数的主要区别

主要的区别如下:exit()函数与_exit()函数最大的区别就在于exit()函数在调用exit系统调用之前要检查文件的打开情况,把文件缓冲区中的内容写回文件。exit用于结束正在运行的整个程序,它将参数返回给OS,把控制权交给操作系统;而return 是退出当前函数,返回函数值,把控制权交给调用它的函数。exit是系统调用级别,它表示一个进程的结束;而return 是语言级别的,它表示调用堆栈...

2018-04-10 14:19:18 248

原创 Linux常用命令大全

linux目录架构 / 根目录 /bin 常用的命令 binary file 的目錄 /boot 存放系统启动时必须读取的档案,包括核心 (kernel) 在内 /boot/grub/menu.lst GRUB设置 /boot/vmlinuz 内核 /boot/initrd 核心解壓縮所需 RAM Disk /dev 系统周边设备 /etc 系统相关设定文件 /etc/DIR_COLORS 设定颜...

2018-04-09 21:15:18 115

原创 C++operator new、operator delete

一、 operator new的三种形式:operator new有三种形式:throwing (1)void* operator new (std::size_t size) throw (std::bad_alloc);nothrow (2)void* operator new (std::size_t size, const std::nothrow_t& nothrow_valu...

2018-04-09 21:10:26 162

原创 数据结构之红黑树(RBTree)图解

红黑树是一棵二叉搜索树,它在每个节点上增加了一个存储位来表示节点的颜色,可以是Red或Black。通过对任何一条从根到叶子节点简单路径上的颜色来约束树的高度,红黑树保证最长路径不超过最短路径的两倍,因而近似于平衡。红黑树是满足下面红黑性质的二叉搜索树:1. 每个节点,不是红色就是黑色的2. 根节点是黑色的3. 如果一个节点是红色的,则它的两个子节点是黑色的(不存在连续的红色节点)4. 对每个节点,...

2018-04-08 16:01:21 476

原创 C++内联函数讲解

1.  内联函数在C++中我们通常定义以下函数来求两个整数的最大值:复制代码 代码如下:int max(int a, int b){ return a > b ? a : b;}为这么一个小的操作定义一个函数的好处有:① 阅读和理解函数 max 的调用,要比读一条等价的条件表达式并解释它的含义要容易得多② 如果需要做任何修改,修改函数要比找出并修改每一处等价表达式容易得多③ 使用函数可以确保...

2018-04-08 15:53:12 119

原创 C++检测内存泄漏

一、前言在Linux平台上 有valgrind可以非常方便的帮助我们定位内存泄漏,因为Linux在开发领域的使用场景大多是跑服务器,再加上它的开源属性,相对而言,处理问题容 易形成“统一”的标准。而在Windows平台,服务器和客户端开发人员惯用的调试方法有很大不同。下面结合我的实际经验,整理下常见定位内存泄漏的方 法。注意:我们的分析前提是Release版本,因为在Debug环境下,通过VLD这...

2018-04-05 16:17:33 641

原创 String用法详解

string类声明string类本不是STL的容器,但是它与STL容器有着很多相似的操作,因此,把string放在这里一起进行介绍。 之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下的需要。我们尽可以把它看成是C++的基本数据类型。 首先,为了在我们的程序...

2018-04-05 16:15:51 174357 8

原创 vector用法详解

vector是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。Vector的数据安排及操作方式与array非常相似,唯一的差别在于array是静态空间,一旦配置了就不能改变;vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。1、vector对象的定义及初始化[html] view plain copyvector<type> vec1;  // ...

2018-04-05 16:14:14 158

原创 小项目之C/C++注释转换

实现功能:(1)C++风格的注释//注释转换为标准C分风格/* */注释(2)/*  */风格的注释保持原样(3)所有的转换需要符合语法规则(4)注释转换需要支持注释嵌套示例:如单行: ① //123 /*456 */                             /*123   456*/ ②//123//456       —— >                  /*123...

2018-04-04 17:32:21 169

原创 Linux系统tcp模式下服务器与客户端通信(仅限一个客户端)

//ser.c#include<stdio.h>#include<unistd.h>#include<string.h>#include<stdlib.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>int m

2018-04-03 16:07:03 506

原创 Linux系统udp模式下服务器与客户端通信(可同时多个客户端一起通讯)

//ser.c#include<stdio.h>#include<unistd.h>#include<stdlib.h>#include<string.h>#include<sys/socket.h>#include<netinet/in.h>int main(){ int sockSer = so...

2018-04-03 15:00:34 8425

原创 套接字设置

套接字设置      利用套接字能完成很多丰富得应用,但要想利用套接字实现更复杂得应用,必定会涉及到调整套接字属性,通过调整套接字属性,能够实现广播、组播、地址重用、数据缓冲区以及数据超时处理等功能。 int getsockopt(int sockfd, int level, int optname,  void *optval, socklen_t *optlen); int setsockop...

2018-04-02 16:55:49 534

原创 网络通信——socket

SOCKET1、 IP地址在互联网上要允许任何两台主机与任何其他的主机进行通讯,TCP/IP为每台主机分配了一个唯一的32位数字,即IP地址,IP地址对网上的某个节点来说是一个逻辑地址,它独立于任何特定的网络硬件和网络配置,IP地址由网络号和主机号两部分组成。Ip地址可划分为5类,分别为A(0)、B(10)、C(110)、D(1110)、E(11110)00000000 ~ 01111111 0~...

2018-04-02 16:49:38 192

原创 Linux使用互斥锁和条件变量实现读写锁(读优先)

本篇博客结合上篇读写锁(写优先)//my_pthread_rwlock.h#pragma once#include<pthread.h>#include<stdio.h>typedef struct{ pthread_mutex_t rw_mutex; pthread_cond_t rw_condreaders; pthread_c...

2018-03-31 11:56:34 988 2

原创 Linux使用互斥锁和条件变量实现读写锁(写优先)

(1)只要没有线程持有某个给定的读写锁用于写,那么任意数目的线程可以持有该读写锁用于读(2)仅当没有线程持有某个读写锁用于读或用于写时,才能分配该读写锁用于写换一种说法就是,只要没有线程在修改(写)某个给定的数据,那么任意数目的线程都可以拥有该数据的访问权(读)。仅当没有其它线程在读或者修改(写)某个给定的数据时,当前线程才可以修改(写)它。因此,读为共享,写为独占。本程序只实现了一种可能,即优先...

2018-03-27 17:42:23 2553 3

转载 Linux下rm和rmdir的区别

转自:https://blog.csdn.net/a804229570/article/details/8211155-d:directory  -f:force  -i:interactive  -r:recursive  -v:verbose 一、rmdir:删除一个空的目录1.-v选项:提示   mkdir -v dirname   rmdir -v dirname   结果: 操作成功后都...

2018-03-27 17:23:45 1165

原创 Linux线程相关基础函数解析

     在一个程序里的多个执行路线就叫做线程。更准确的定义是:线程是“一个进程内部的一个控制序列”。       典型的unix进程可以看成只有一个控制线程:一个进程在同一时刻只做一件事情。有了多个控制线程以后,在程序设计时可以把进程设计成在同一时刻能够做不止一件事,每个线程处理各只独立的任务。1.2.3.4.5.rval_prt是一个无类型指针,与传给启动例程的单个参数类似。进程中的其他线程可...

2018-03-25 12:12:41 189

原创 C++下内存泄漏的检测

内存泄漏也称作"存储渗漏",用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元。直到程序结束。(其实说白了就是该内存空间使用完毕之后未回收)即所谓内存泄漏。在此写了一个检测C++程序内存泄漏的小程序,支持Windows和Linux思想:开辟空间即使用new时将信息储存在链表中,delete时将对应的信息删除,若程序运行结束链表为空,则没有发生内存泄漏,反之则有内存泄漏...

2018-03-24 18:28:19 181

原创 消息队列、信号量、共享内存各个函数

信号量信号量是一个特殊的整数值,主要用来控制多个进程对临界资源的互斥访问,进程根据信号量来判断是否有 访问的资源,这与前面所讲的信号是不同的,信号是一种处理异步事件的方法,而信号量是一种进程同步机制,信号与信号量是两个不同的东西。信号量是一个计数器,可用于同步多进程对共享数据对象得访问,为了获得共享资源,进程需要执行以下操作:1、测试控制该资源的信号量2、若此信号量的值为正,则进程可以使用该资源,...

2018-03-24 16:43:00 398

原创 UNIX网络编程 System V IPC函数、命令解析

信号量函数 semget() semop() semctl()semget()      可以使用系统调用semget()创建一个新的信号量集,或者存取一个已经存在的信号量集:系统调用:semget();原型:intsemget(key_t key,int nsems,int semflg);返回值:如果成功,则返回信号量集的IPC标识符。如果失败,则返回-1:errno=EACCESS(没有权限...

2018-03-22 16:17:11 187

原创 小项目之用C++实现以顺序表存储的大数运算

当前手机最多支持9位数的运算,电脑计算器最多支持16位数运算(1)此程序生成随机数的运算理论上可多至成千上万位(2)自行输入数据,每个数最大可到unsigned long long的最大值18446744073709551615,支持19位,部分20位数的加减乘除运算负数运算目前不支持,还在改进中以顺序表存储大数,0下标先不存储(留作符号位),将数的高位放在高下标,低位放在低下标,(如果数的高位放...

2018-03-22 15:41:37 530

转载 fork()与vfork()区别

转自:http://blog.csdn.net/jianchi88/article/details/6985326fork()与vfock()都是创建一个进程,那他们有什么区别呢?总结有以下三点区别: 1.  fork  ():子进程拷贝父进程的数据段,代码段     vfork ( ):子进程与父进程共享数据段 2.  fork ()父子进程的执行次序不确定     vfork 保证子进程先运行...

2018-03-20 09:05:48 169

原创 命名管道与信号

命名管道管道是指进程直接进行交换数据的通道,可分为普通管道(pipe)和命名管道(FIFO),他们都是通过内核缓冲区按先进先出的方式进行数据传输,管道一端顺序地写入数据,另一端顺序地读入数据,管道最大的一个特点就是半双工性,数据只能向一个方向流动,如果需要进行双方的通信时,则需要建立两个管道。管道和命名管道是最早的进程间的通信机制之一,其中管道用于相互关联的进程之间进行通信,比如父子进程。为了克服...

2018-03-20 09:03:53 241

原创 小项目之个人银行账户管理程序(5)

在基类Account中将账户的公共操作皆声明为虚函数,因此可以通过基类的指针来执行各种操作,因而各种类型的账户对象都可以通过一个指针的数组来访问。//date.h#ifndef _DATE_H_#define _DATE_H_class Date//日期类{private: int year; int month; int day; int totalDays;//该日期是从公元...

2018-03-19 17:03:36 1306

空空如也

空空如也

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

TA关注的人

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