自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 资源 (3)
  • 收藏
  • 关注

原创 如何高效地实现查询在一个表而不在另一个表中的记录

面试的时候被考官问到这个问题,不佳思索就想出来一个可以解决这个问题的方法,我说用not in就可以实现,也就是这样:      select   A.*   from   tbl1 A where   A.key   not   in   (select   key   from   tbl2)  然后考官又问,还有没有其他的方法,我说也可以用not exists,然后又问还有吗,我实在也

2013-09-17 11:57:43 1204

原创 Linux多线程编程的时候怎么查看一个进程中的某个线程是否存活

pthread_kill:别被名字吓到,pthread_kill可不是kill,而是向线程发送signal。还记得signal吗,大部分signal的默认动作是终止进程的运行,所以,我们才要用signal()去抓信号并加上处理函数。int pthread_kill(pthread_t thread, int sig);向指定ID的线程发送sig信号,如果线程代码内不做处理,则按照信号默

2013-09-10 17:34:36 2011

原创 水库抽样问题

随机抽样问题表示如下:要求从N个元素中随机的抽取k个元素,其中N无法确定。这种应用的场景一般是数据流的情况下,由于数据只能被读取一次,而且数据量很大,并不能全部保存,因此数据量N是无法在抽样开始时确定的;但又要保持随机性,于是有了这个问题。所以搜索网站有时候会问这样的问题。这里的核心问题就是“随机”,怎么才能是随机的抽取元素呢?我们设想,买彩票的时候,由于所有彩票的中奖概率

2013-09-02 14:52:34 1703

原创 SQL Select语句完整的执行顺序

1、from子句组装来自不同数据源的数据;2、where子句基于指定的条件对记录行进行筛选;3、group by子句将数据划分为多个分组;4、使用聚集函数进行计算;5、使用having子句筛选分组;6、计算所有的表达式;7、使用order by对结果集进行排序

2013-08-29 22:29:17 1158

原创 海盗分硬币问题总结

传说,从前有五个海盗抢得了100枚金币.他们通过了一个如何确定选用谁的分配方案的安排.即:1.抽签决定各人的号码(1,2,3,4,5);2.先由1号提出分配方案,然后5个人表决.当且仅当超过半数人同意时,方案才算被通过,否则他将被扔入大海喂鲨鱼;3.当1号死后,再由2号提方案,4个人表决,当且仅当超过半数同意时,方案才算通过,否则2号同样将被扔入大海喂鲨鱼;4.往下依次类推

2013-08-17 11:19:24 3839

原创 12个球一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就找到那个球(13个呢?)

1,天平一边放四个,平则坏球在余下的四个里,好办(同方法二中的相等处理)。 不平,先将偏重的四个编号为:1、2、3、4。偏轻的编为A、B、C、D(因为不知道轻重)。2。天平一边放三个,比如:左边放1、2、A。右边放3、4、B。 平则坏球是C、D 里偏轻的,不平则根据轻重淘汰1、2、B或 3、4、A。假设是12A>34B,那么一定是12中有一个偏重或者B偏轻,最后一次把12B相称即可,假设称

2013-08-14 22:50:08 1378

转载 B-树和B+树的应用:数据搜索和数据库索引

B-树1 .B-树定义B-树是一种平衡的多路查找树,它在文件系统中很有用。定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树:⑴树中每个结点至多有m 棵子树;⑵若根结点不是叶子结点,则至少有两棵子树;⑶除根结点之外的所有非终端结点至少有[m/2] 棵子树;⑷所有的非终端结点中包含以下信息数据:      (n,A0,K1,A1,K2,…,Kn,An

2013-08-13 16:31:11 843

原创 在遇到可以用递归解决的问题,但是又不让用递归怎么办

我们知道,用递归方法可以快速,简洁地解决一些问题,但是他的空间开销也比较大,我们习惯于用递归解决各种问题,但是在一些应用场景下要求我们不能使用递归,我们发现这时候举手无措,这时候怎么办呢???记住这时候不用慌张,我们知道,递归的深入过程实际上是逐步入栈的时候,回溯的时候是出栈的时候,在我们知道这个道理的情况下,我们只要自己建立一个栈,然后在栈中模拟函数的调用过程,不是就可以达到目的了。所以在不让用

2013-08-10 21:16:13 1683

转载 memmove源码实现

函数原型: void *memmove(void *dest, const void *src, unsigned int count)参数说明:dest为目的字符串,src为源字符串,count为要拷贝的字节数。所在库名:#include 函数功能:将字符串src中的前n个字节拷贝到dest中。返回说明:dest和src所指内存区域可以重叠,但复制后src内容会被更改。函数返回指

2013-08-08 22:43:01 1617

原创 用c++编写一个不能被继承的类(但是可以在类外部定义该类的对象)

据我们知道,我们只要把类的构造函数和析构函数定义为private类型,那么就不能够在外部建立给类的对象,也就不能以给类为基类进行继承,因为如果继承,建立对象的时候将要调用基类的构造函数,但是因为为private,所以派生类调用基类构造函数的时候,将会连接失败,这样达到不能被继承的任务,但是缺憾是我们不能够在类外部定义该类的对象。那么应该怎么解决呢?????下面给出代码templatecla

2013-08-06 17:19:47 1234

原创 二分查找的感悟

今天在看v_JULY_v写的二分查找实现(Jon Bentley:90%程序员无法正确实现)一文,感悟颇深,在看文章之前自己心想二分查找不是相当的easy,但是真的在读完文章,然后和自己写的比较之后,返现我就是那90%中的一员,深深明白一个道理,看似再简单的问题,没有100%的细心和努力也不可能做好。现在就把原文中的代码展示出来,不知道是属于10%行列还是90%行列?代码来自:http://b

2013-08-05 22:19:20 1181

原创 对linux中多线程编程中pthread_join的理解

在Linux中,默认情况下是在一个线程被创建后,必须使用此函数对创建的线程进行资源回收,但是可以设置Threads attributes来设置当一个线程结束时,直接回收此线程所占用的系统资源,详细资料查看Threads attributes。    其实在Linux中,新建的线程并不是在原先的进程中,而是系统通过一个系统调用clone()。该系统copy了一个和原先进程完全一样的进程,并在这个

2013-08-04 21:32:39 4399

原创 用位运算求一个数的绝对值

我们知道在我们对一个数进行位运算的时候,是在这个数的补码上进行的,对于补码我们知道,正数的补码是原码,负数的补码为原码除了最高位的符号位,取反,然后加1。把补码转换成原码的时候,正数还是原码,负数时把补码除了符号位取反然后加1(我们可以发现如果这时候连符号位也求反,然后加1,与以前不同的只是少了一个符号位,现在实际上就是这个数的绝对值)。所以我们可以得到对一个负数求绝对值的表达式为in

2013-08-04 16:40:24 5125 2

原创 复制构造函数应该注意的问题

拷贝构造函数必须以引用的形式传递(参数为引用值)。其原因如下:当一个对象以传递值的方式传一个函数的时候,拷贝构造函数自动的被调用来生成函数中的对象。如果一个对象是被传入自己的拷贝构造函数,它的拷贝构造函数将会被调用来拷贝这个对象这样复制才可以传入它自己的拷贝构造函数,这会导致无限循环直至栈溢出(Stack Overflow)。除了当对象传入函数的时候被隐式调用以外,拷贝构造函数在对象被函数返回

2013-08-03 20:58:44 1137

原创 信号量的使用步骤

信号量的使用如下步骤小结1.声明信号量sem_t sem1;2.初始化信号量sem_init(&sem1,0,1);3.sem_post和sem_wait函数配合使用来达到线程同步4.释放信号量int sem_destroy (sem_t *sem1);

2013-08-01 21:34:13 1578

原创 父进程和子进程关于数据和文件描述符的继承的理解

用fork()函数建立的子进程几乎与父进程完全一样,子进程中的所有变量均保持他们在父进程中的值(当然fork的返回值除外),因为自己称可用的数据是父进程可用数据的拷贝,并且其占用不同的内存地址空间(当然逻辑地址可能是一样的),这就保证了在一个进程中的变量数据变化不会影响到另外一个进程。这一点非常重要。    但是有一点要特别注意的,在父进程打开的文件,那么在子进程中也会打开,继承了打开的文件描

2013-08-01 17:30:00 4847

原创 #define和printf都不是C语句

语言的语句用来向计算机系统发出操作指令。一个语句经编译后产生若干条机器指令。C语句都是用来完成一定操作任务的。Printf是C语句#define只是一个宏,在预处理是用,不是语句

2013-07-30 19:07:29 10597

转载 placement new

1. placement new的含义placement new 是重载operator new 的一个标准、全局的版本,它不能够被自定义的版本代替(不像普通版本的operator new 和 operator delete能够被替换)。void *operator new( size_t, void *p ) throw()     { return p; }placemen

2013-07-30 19:02:09 791

转载 strcpy函数和mencpy函数的解释和区别分析

strcpy和memcpy的区别strcpy和memcpy都是标准C库函数,它们有下面的特点。strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。已知strcpy函数的原型是:char* strcpy(char* dest, const char* src);memcpy提供了一般内存的复制。即memcpy对

2013-07-30 16:59:15 1996

原创 自己写的atoi函数和itoa函数

atoi函数的实现源码:#include using namespace std;enum status{invalid=0,valid};bool result_status=invalid;//最后最为输入是否违法的标识int strToInt(const char* str){   long long num=0;    bool minus=false; i

2013-07-30 15:49:35 1608

原创 linux文件系统的理解(1)

磁盘在使用之前需要格式化,格式化是在磁盘中建立文件系统,他们将确定文件的存储方式和索引方法,确定磁盘空间分配和回收方法。     在linux系统中文件系统的存储有三级组鞥,其中目录存储了文件的层次结构,数据块存储了文件的具体信息,i节点是连接文件层次结构和数据结构之间的桥梁。    文件系统通过i节点对文件进行控制和管理,通过i节点我们就能找到对应文件的数据块,其中每个文件对应一个i节点

2013-07-29 21:23:08 928

原创 静态链接与动态链接

静态链接是由连接器在链接时将库的内容加入到可执行程序中的做法,全部内容都放到同一个可执行文件中。      静态链接使得不同的程序开发者和部门能够相对独立地开发和测试自己的程序模块,从某种意义上来讲大大促进了程序的开发效率,原先限制程序的规模也随之扩大。但是慢慢地静态链接的诸多缺点也逐步暴露出来,比如浪费内存和磁盘空间、模块更新困难等问题      静态链接的最大缺点是生成的可执行文件太大

2013-07-29 20:59:10 856

转载 gcc/g++基本命令简介

gcc & g++现在是gnu中最主要和最流行的c & c++编译器 。g++是c++的命令,以.cpp为主,对于c语言后缀名一般为.c。这时候命令换做gcc即可。其实是无关紧要的。其实编译器是根据gcc还是g++来确定是按照C标准还是C++标准编译链接。下面以Test.cpp为例:命令: g++ Test.cpp功能:生成默认为a.exe的文件,这个过程包含了编译

2013-07-29 20:06:56 886

原创 在linux的shell脚本中,双引号,单引号,以及反单引号的作用介绍,以及env以及set的作用

首先单引号与双引号的最大不同就是双引号可以保有变量的内容,但是单引号仅能是一般的字符而不会有特殊的字符     如变量str=name    那么str1=“$str is”,之后显示str的结果是name is    如果str2='$str is',那么结果是$str is,可以看出没有用变量str的内容代替str。    在一串指令中,在反引号之内的指令将会被先执行,而其

2013-07-28 17:31:24 1570

转载 等概率随机函数的实现 .

题目:已知随机函数rand(),以p的概率产生0,以1-p的概率产生1,现在要求设计一个新的随机函数newRand(), 使其以1/n的等概率产生1~n之间的任意一个数。解决思路:可以通过已知随机函数rand()产生等概率产生0和1的新随机函数Rand(),然后调用k(k为整数n的二进制表示的位数)次Rand()函数,得到一个长度为k的0和1序列,以此序列所形成的整数即为1--n之间的数字。注

2013-07-28 16:51:14 779

转载 随机数范围扩展方法总结 .

题目:已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10。分析:要保证rand10()在整数1-10的均匀分布,可以构造一个1-10*n的均匀分布的随机整数区间(n为任何正整数)。假设x是这个1-10*n区间上的一个随机整数,那么x%10+1就是均匀分布在1-10区间上的整数。由于(rand7()-1)*7+rand7()可以构造

2013-07-28 16:28:36 855

原创 判断两个链表是否相交

解题思路:首先分别判断两个链表是否存在环。                   (1)如果两个链表都不存在环,则直接比较两个链表的表尾节点是否相等即可,如果相等,则相交,否则不想交。                   (2)如果一个链表存在环,而另一个链表不存在环,则两个链表肯定不相交。                   (3)如果两个链表都存在环。则如果两个链表相交的话则一个链表

2013-07-28 12:15:32 810

转载 找出有环链表中环的起点

问题:        给定一个有环的链表,写一个算法,找出环的起点。例如:输入:A->B->C->D->E->C[与前面的C是同一个节点]输出:C判断一个链表是否存在环有一个简单的方法,就是使用一个快指针、和一个慢指针,快指针每次走两步,慢指针每次走一步,则如果有环,它们最后必然会相遇的。本题的难点在于要找出环的起点。其实也不难,与判断是否有环类似,用两个步长分别为1和

2013-07-28 12:11:37 881

转载 assert()函数

assert() 宏用法注意:assert是宏,而不是函数。在C的assert.h头文件中。assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:12#include void assert( intexpression );assert的作用是先计算

2013-07-28 11:10:04 725

原创 linux网络编程中的pol和epolll函数总结

poll()函数:这个函数是某些Unix系统提供的用于执行与select()函数同等功能的函数,下面是这个函数的声明:      #include       int poll(struct pollfd fds[], nfds_t nfds, int timeout);参数说明:fds:是一个struct pollfd结构类型的数组,用于存放需要检测其状态的Socket描述符

2013-07-28 10:29:54 1306

原创 不用循环,递归,if,switch语句编写从1+2+.....n的结果的程序

在类中声明静态变量,在类外初始化的时候,不用再次加static关键字,否则报错        在类中声明静态函数,类外定义的时候,函数前面也不要加static关键字

2013-07-26 19:57:48 1048

翻译 数据挖掘中的划分聚类简介(k均值和k中心点)

k均值方法介绍:         从中任意选择k个对象作为簇的中心     repeat        根据均值,将每个对象划分到最相似的簇        更新簇均值,计算每个簇对象的均值    until 不再发生变化  存在的缺点;      1.只有簇有均值定义的时候才能使用      2.不适合发现凸形状的簇,或者大小相差很大的簇,适合发掘圆形簇    

2013-07-26 19:36:15 2365

原创 读stl源码解析的感悟(2)

在stl实现的过程中allocate()函数负责内存的分配(注意只是分配内存,并不对内存做初始化操作)deallocate()函数用来释放内存。    内存配置好后的对象构造使用construct()函数实现的,对象的析构使用destroy()函数实现的。一般释放的过程为:先用destroy()函数析构对象    然后用deallocate()函数释放内存。

2013-07-23 21:40:14 707

原创 关于tcp协议断开连接以及在socket编程时候连接的一些理解

要释放一个TCP连接,需要通过四次握手过程,这是由TCP的半关闭特性造成的,因为TCP连接时全双工的,因此,需要TCP两端要单独执行关闭。值得注意的是,主动关闭的一端在发送FIN之后,依然还能正常接收对方的数据,只是通知对方它已经没有数据需要发送了,同理,被动关闭的一端在收到FIN之后,仍然可以发送数据,直到它自身同样发出FIN之后,才停止发送数据。 TCP连接的超时问题:       

2013-07-23 17:57:20 1528

转载 在网络编程的时候使用非阻塞的connect

对于面向连接的socket类型(SOCK_STREAM,SOCK_SEQPACKET)在读写数据之前必须建立连接,首先服务器端socket必须在一个客户端知道的地址进行监听,也就是创建socket之后必须调用bind绑定到一个指定的地址,然后调用int listen(int sockfd, int backlog);进行监听。此时服务器socket允许客户端进行连接,backlog提示没被ac

2013-07-23 17:31:22 1971

原创 读stl源码之后对list容器的一点感想

list容器是以链表的方式实现的,并且是一个循环链表,也就是通过任何一个节点可以遍历完全list。     链表的节点由三部分组成为一个next指针指向下一个节点(当做++操作的时候,直接可以通过next就可以到达下一个节点),prev指针指向前一个节点(当做--的时候直接可以通过prev到达前一个节点),data包括节点中的数据。    同时要注意到的一点,在对迭代器iter做inser

2013-07-20 16:44:20 1032

原创 结合数据挖掘分类谈谈对信息熵的理解

信息是个很抽象的概念。人们常常说信息很多,或者信息较少,但却很难说清楚信息到底有多少。比如一本五十万字的中文书到底有多少信息量。直到1948年,香农提出了“信息熵”的概念,才解决了对信息的量化度量问题。   公式为:H(x)=E[I(xi)]=E[ log(2,1/p(xi)) ]=-∑p(xi)log(2,p(xi)) (i=1,2,..n)该值越大表示信息量越大   在一个系统中,该系

2013-07-19 16:58:57 4585

原创 linux编程中对死锁的一点感想

死锁是由于一系列线程竞争一些列资源产生的永久阻塞。导致死锁的有两种情况:   1.自死锁(往往被忽略)    一个线程在拥有某个资源的情况下又试图申请对该资源的使用,陷入到自死锁。   2.另外一种情况是线程1用于资源A,线程2拥有资源B,这时候线程1申请资源B,线程2申请资源A,陷入了相互等待的境地,造成死锁。

2013-07-17 22:18:42 773

原创 对map和hash_map的一点总结

map内部实现是依据红黑树的,查询的时间复杂度为log(n)。hash_map的内部实现是哈希表,查询的时间复杂度为n(1)。hash可以看成用空间复杂度换取了时间复杂度。    在hash_map中,每个key都对应于一个桶,用来容纳value值。为了实现hash_map,我们需要定义哈希函数和等于比较函数。在没有提供这些函数的时候会用一个缺省的。   有很重要的一点是hash_map需

2013-07-15 19:42:27 768

原创 对程序员面试题目的重要总结

在面试题目中经常要让我们从一个数字序列中找出我们想要的一些信息,针对这样的题目,本人有如下重要总结,希望帮助大家:    1.如果要处理的数字序列是一个无序的数列,那么尽量往快速排序上靠,用快速排序的思想解决此类问题。    2.如果要处理的数字序列是一个有序的数列,那么尽量往二分查找上靠,用二分查找的思想解决此类问题。

2013-07-15 16:14:56 742

Linux下用c编写的一个聊天程序

一个很是个初学者学习的,在Linux下用c开发的聊天程序

2012-11-21

Linux 网络编程

很详细的Linux下网络编程资料,绝对不让你失望的,物有所值

2012-11-16

空空如也

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

TA关注的人

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