自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeetCode Sort List(链表快速排序)

Sort a linked list in O(n log n) time using constant space complexity.看到O(n log n)这个复杂度就想到了快速排序法。快速排序法主要思想为取一个基准点,采用交换+分治法完成快速排序。对于单链表的快速排序,不能从后面开始遍历,因为根据后继找不到其前驱。因此采用以下步骤:1.取每次的头节点为基准节点,然后将这个

2016-10-08 17:17:30 1979 1

原创 LeetCode Odd Even Linked List

Given a singly linked list, group all odd nodes together followed by the even nodes. Please note here we are talking about the node number and not the value in the nodes.You should try to do it in

2016-10-06 23:51:08 465

原创 LeetCode Construct Binary Tree from Traversal

1.Construct Binary Tree from Preorder and Inorder Traversal根据二叉树前序遍历和中序遍历构造一颗二叉树。现在有前序遍历4213769,中序遍历为1234679。根据前序和中序遍历的概念,构造一棵二叉树如下步骤:(1) 设前序遍历的下标为prebegin = 0,preend = preorder.size() - 1。中序遍历下

2016-09-26 10:53:56 410

原创 LeetCode Invert Binary Tree

Invert a binary tree. 4 / \ 2 7 / \ / \1 3 6 9to 4 / \ 7 2 / \ / \9 6 3 1反转二叉树,首先采用递归的方式。先遍历作左子树,当指针指向NULL时,返回,赋值给tmp。接着遍历右子树,指向NULL,返回,并将该返回值赋

2016-09-25 16:09:41 416

原创 LeetCode Pascal's Triangle II

Given an index k, return the kth row of the Pascal's triangle.For example, given k = 3,Return [1,3,3,1].Pascal三角形也叫杨辉三角形。杨辉三角形按如下性质进行排列:              1                         1

2016-09-24 19:51:05 399

原创 LeetCode Rotate Function

Given an array of integers A and let n to be its length.Assume Bk to be an array obtained by rotating the array A k positions clock-wise, we define a "rotation function" F on A as follow:

2016-09-24 11:41:06 418

原创 生产者消费者同步

一个生产者生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和消费者能并发执行,在两者之间设置一个具有多个缓冲区的缓冲池,生产者将它生产的产品放入一个缓冲区中,消费者可以从缓冲区中取走产品进行消费,显然生产者和消费者之间必须保持同步,即不允许消费者到一个空的缓冲区中取产品,也不允许生产者向一个已经放入产品的缓冲区中再次投放产品。1.  一个消费者和一个生产者消费者和生产者分别为两个

2016-09-19 21:44:03 812

原创 进程间通信—管道

1. 管道Linux 使用fork创建子进程,父进程与子进程并不共享堆栈段和数据段,他们之间通过管道进行通信。管道是一种两个进程之间进行单向通信的机制。管道称为半双工管道。管道具有以下特点:(1) 数据只能由一个进程流向另一个进程(一个读管道,一个写管道),如果需要进行全双工通信,需要建立两个管道。(2) 管道只能用于父子进程或者兄弟进程间的通信。除了以上的局限性,管道还有一些不足

2016-09-07 23:26:29 386

转载 Select函数实现原理分析

本文转自http://blog.csdn.net/codejoker/article/details/5404442?locationNum=1select 需要驱动程序的支持,驱动程序实现fops内的poll 函数。 select 通过每个设备文件对应的 poll 函数提供的信息判断当前是否有资源可用 ( 如可读或写 ) ,如果有的话则返回可用资源的文件描述符个数,没有的话则

2016-09-06 10:09:22 1958

原创 Linux等待队列

多路IO复用select采用等待队列机制让用户程序没有资源读/写时睡眠,有资源读/写时唤醒用户程序。等待队列以双向循环链表为基础数据结构,与进程调度紧密结合,用于实现内核的异步事件通知机制,也可用于同步对系统资源的访问。1. 数据结构(1) 每个等待队列都有一个等待队列头,该结构定义如下:struct __wait_queue_head {spinlock_t lock;

2016-09-06 09:19:23 642

原创 Linux自旋锁

1. 自旋锁自旋锁最初是为了在多处理系统(SMP)设计,实现在多处理器情况下保护临界区。自旋锁的实现是为了保护一段短小的临界区代码,保证这个临界区的操作是原子的。在Linux内核中,自旋锁通常用于包含内核数据结构的操作(如wait_queue等),用于保证操作内核中的数据结构的原子性。如果内核控制路径发现自旋锁可用,则“锁定”被设置,而代码继续进入临界区。相反,如果内核控制路径发现锁运行在

2016-09-04 19:11:03 450

原创 网络大数运算之传输表达式和结果

客户端每次可以发送一个表达式到客户端,客户端解析该表达式字符串,进行相应的运算结果求解。客户端表达式传输采用结构体,结构体定义如下:由于使用TCP协议进行传输,采用send()发送该结构体,需要对结构体指针转化为char*,发送一个字符流。但因为结构体内存对齐原因,两个变量之间可能存在空白区,这样会造成服务端在解析该字符流的时候,会出现乱码的情况。因此使用#pragma pack(1)

2016-08-30 19:57:50 472

原创 整数大数乘法

整数大数据进行运算的时候并不能简单使用一个变量去存储结果,因为运算结果可能超出该变量能存储的最大字节数。因此可以使用一个SeqList或者STL中的vector对数据进行存储。在进行乘法运算时,根据乘法的运算规则,每次对一列求和即可,求和完成要求的进位。最后每一列求和完的结果和即为乘法结果。1. 求出列数与被乘数个数相同各列的和。(1) 被乘数从i位置开始,乘数从j位置开始

2016-08-28 09:35:52 676

原创 MySQL Query Cache机制

MySQLQuery Cache保存查询返回的结果集。当查询命中缓存时,MySQL跳过解析、优化和执行阶段,直接返回查询结果。Query Cache系统会跟踪查询中涉及的每一张表,如果这些表发生变化,那么和这个表相关的所有缓存数据都会失效。这种机制效率看起来比较低,因为在数据表变化时,查询到的结果可能没有发生变化。QueryCache对应用程序是透明的,应用程序无需关心MySQL是通过Qu

2016-08-21 22:30:48 630

原创 MySQL 哈希索引

哈希索引基于哈希表实现,只有精确匹配索引所有列的查询才有效。对于每一行数据,存储引擎都会对所有的索引列计算一个哈希码,哈希码是一个较小的值,并且不同键值计算出来的哈希码也不同。哈希索引将所有哈希码存放在索引中,同时在哈希表存放指向数据行的指针。在哈希索引中,采用桶(bucket)来表示一条或多条记录的存储单元。令K表示搜索码的集合,B表示所有桶地址的集合。哈希函数h是一个从K中的找出B中的一个

2016-08-19 22:49:44 914

原创 MySql数据库的连接和事务处理

在写聊天工具的服务端的时候,需要使用到数据库对客户端相关信息的存储,例如用户信息、用户相关的好友信息、用户所加入的群,讨论组、聊天时的离线消息,消息的历史记录等。用户在对相应的操作时候,后台数据库要进行实时的更新。本次主要描述使用QT库进行MySql数据的连接和相关的事务处理。1.  MySql数据库连接QSqldatabase进行对数据库的连接。QT使用驱动程序与MySql的接口进行

2016-08-16 23:22:53 1305

原创 旋转数组的最小元素

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如有如下数组旋转之后如下此时需要找出当前旋转数组的最小值,由于数组是递增的,所以旋转之后前面的数组元素会大于后面数组的元素,也就是数组{4, 5}大于{1,2,3}。因此采用二分查找的方法找出最小元素。标记数组的开头left与结尾righ

2016-08-04 23:16:22 472

原创 C++智能指针auto_ptr

auto_ptr用来防止内存泄露,通过管理指针对空间的拥有权来进行动态管理内存。尤其是在拷贝和赋值的时候容易出现内存泄漏或者多次释放同一内存空间。template auto_ptr(auto_ptr & __a) : _M_ptr(__a.release()) { }element_type * release() { element_t

2016-07-31 21:22:54 410

原创 C++ 继承

1. 隐藏如果继承一个类并且对它的函数进行重新定义,可能会出现两种情况。(1)在派生类中和基类定义的函数函数名,返回值和参数类型一致,这叫做函数的重定义(2)如果基类的成员函数为虚函数,派生类定义的同名同参同返回值的函数叫做重写。针对重定义,有如下代码:class Base { public: void fun() const {

2016-07-30 21:17:19 400

原创 浅析C++const

1.值替代在使用宏#define进行常量替换时,仅仅只是文本替代,不进行类型检查。#define BUFFSIZE 100int buf[BUFFSIZE]进行预处理kernel@Ubuntu:~/Desktop/const$ cpp const.cpp const.ikernel@Ubuntu:~/Desktop/const$ cat const.i# 1 "const

2016-07-24 23:31:54 442

原创 静态链接之与静态库的链接

1. 静态库链接器读取一组可重定位目标文件,并把它们组合称为一个单一的可执行文件。可以通过将所有相关的可重定位目标文件打包成为一个单独的文件,这个文件就叫做静态库。在链接时,链接器只拷贝被程序引用的目标模块。减少了可执行文件在磁盘和存储器中的大小。Unix系统中,静态库以一种称为存档的特殊文件格式存放在磁盘。例如在ubuntu上,在路径/usr/lib/x86_64-linux-gnu/l

2016-07-24 23:21:22 3937

原创 静态链接之符号解析

一.  链接1.  链接是将各种代码和数据部分收集起来组合成为一个单一文件,这个文件可被加载或拷贝到存储器并执行。静态链接是在生成可执行文件的时候,将所有需要的函数的二进制代码都包含到可执行文件中去。链接器需要知道参与链接的目标文件需要哪些函数,同时也要知道每个目标文件都能提供什么函数。这样链接器才能知道是不是每个目标文件所需要的函数都能正确地链接。2  现在有两个程序main.c和

2016-07-23 23:08:00 3351

原创 C++构造函数

一.  构造函数1.    每个类都分别定义了它的对象被初始化的方式,通过一个或几个特殊的函数来控制其对象的初始化过程,这些函数叫做构造函数。构造函数的任务是初始化类对象的数据成员。2.      #include using namespace std;class Test { private: int data; public:

2016-07-14 18:19:38 336

原创 TCP三次握手和四次挥手

一、TCP 连接TCP是一个面向连接的协议,是因为在一个应用进程开始向另一个进程发送数据时,这两个进程必须先建立连接,也称之为“握手”,即它们必须发送些预备报文段,以建立确保数据传输的参数。TCP连接提供的是全双工服务,也就是单个发送方与单个接收方之间的连接。比如客户端的进程A和服务端的进程B存在一条TCP连接,那么A的数据可以发送到B,B的数据可以发送到A。二、建立TCP连接

2016-06-04 19:08:50 475

原创 Linux中fork()函数

一、什么是进程进程是正在执行的程序实例。执行程序时,内核会将程序代码载入虚拟内存,为程序变量分配空间,在内核中建立相应的数据结构,以记录与进程有关的各种信息(比如,进程ID、用户ID、组ID以及终止状态等)。简单来说,就是”执行一个程序或命令“就可以出发一个事件而获取一个进程ID。也就是说,程序被触发后,执行者的权限与属性、程序代码与数据等会被加载到内存,操作系统并给予这个内存单元一个标识

2016-05-27 11:31:54 451

原创 数据流重定向

对于内核而言,所有打开的文件都是通过文件描述符引用。文件描述符是一个非负整数,当进程打开或创建一个文件时,内核向进程返回一个文件描述符。当读写文件时,文件描述作为一个标志,标识该文件(如系统调用read和write函数)。        UNIX系统shell把文件描述符0与进程的标准输入相关联,把文件描述符1与进程的标准输出相关联,把文件描述符2与进程的标准错误关联。这些描述符被宏定义为符号

2016-05-20 00:07:51 469

原创 Ubuntu14.04实现简单日志文件服务器

在Linux日志的配置文件中,可以将指定服务类型(auth,cron,mail,syslog等)和相应服务的信息等级(info,notice,warn,err,crit等)的日志数据发送到打印机或者远程主机(即将配置日志文件服务器的server端)。万一有人入侵你的系统,并将系统/var/log/删掉了(但我们可以使用chattr增加隐藏属性,使文件在root下都不能被删除,除非入侵者获取当前ro

2016-05-12 23:37:22 7053 1

空空如也

空空如也

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

TA关注的人

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