- 博客(47)
- 资源 (4)
- 收藏
- 关注
原创 多线程操作数据库
当多线程对同一数据库进行操作的时候会可能发生冲突。读读不会冲突,读写,写读等操作应该会引起冲突(其中的写包括update、delete和insert)。解决冲突的方法:1.使用 select * from 表名 with(nolock) --不对表加锁进行访问。即使有个用户正在delete 表名,也可以查询出当前表的数据 2.常见的并发问题,使用锁和事务来控制
2012-04-24 14:57:00 2493
转载 C++ 静态存储区 栈 堆的区别
很多人都觉得学习C++是特别困难的事情。C++学习是比较复杂的:它的内存分配、指针、以及面向对象思想的实现等等,确实需要一定的技术积累。我们将以专题的形式,为大家逐一剖析c++的技术重点和难点。 本专题讨论的就是内存分配。学习c++如果不了解内存分配是一件非常可悲的事情。而且,可以这样讲,一个C++程序员无法掌握内存、无法了解内存,是不能够成为一个合格的C++程序员的。 一、内
2012-04-23 21:41:27 982
转载 垃圾回收算法历程
拓荒时代国内的程序员大多是在 Java 语言中第一次感受到垃圾收集技术的巨大魅力的,许多人也因此把 Java 和垃圾收集看成了密不可分的整体。但事实上,垃圾收集技术早在 Java 语言问世前 30 多年就已经发展和成熟起来了, Java 语言所做的不过是把这项神奇的技术带到了广大程序员身边而已。如果一定要为垃圾收集技术找一个孪生兄弟,那么, Lisp 语言才是当之无愧的人选。 1960
2012-04-23 21:26:29 887
转载 wTL
WTL库 简介 WTL 是 Windows Template Library 的缩写,由微软的 ATL(Active Template Library) 小组开发,主要是基于 ATL 对 Win32 API 的封装。从 2.0 后,功能逐步完善,成为了一个完整的支持窗口的框架(windows framework)。 WTL 功能不如 MFC 完善,但是比 MFC
2012-04-23 21:04:32 391
转载 类的大小
先看这么个问题——已知:class CBase{ int a; char *p;};那么运行cout这个应该很简单,两个成员变量所占的大小有嘛——8。可由时候人就是爱犯这个错误:这么简单的问题人家会问你?再想想……好像C++类里面有个什么函数指针,也应该占字节吧!?什么指针来着?忘了(还是水平低不扎实)!流汗中……算了姑且认为是构造函数和析
2012-04-23 13:04:24 398
转载 static用法小结
static关键字是C, C++中都存在的关键字, 它主要有三种使用方式, 其中前两种只指在C语言中使用, 第三种在C++中使用(C,C++中具体细微操作不尽相同, 本文以C++为准). (1)局部静态变量 (2)外部静态变量/函数 (3)静态数据成员/成员函数 下面就这三种使用方式及注意事项分别说明 一、局部静态变量 在C/C++中, 局部变量
2012-04-23 12:56:31 284
转载 (线程间通信的四个方法)临界区,互斥量,信号量,事件的区别
临界区(Critical section)与互斥体(Mutex)的区别1、临界区只能用于对象在同一进程里线程间的互斥访问;互斥体可以用于对象进程间或线程间的互斥访问。2、临界区是非内核对象,只在用户态进行锁操作,速度快;互斥体是内核对象,在核心态进行锁操作,速度慢。3、临界区和互斥体在Windows平台都下可用;Linux下只有互斥体可用。 临界区,互斥
2012-04-23 10:28:39 24204
转载 调试时设置条件断点
一个好的调试器,能够帮助程序员处理很多自动化的工作。试想下列的情形:1. 错误是发生在一个循环当中,只在循环遍历了若干次以后,才会出现。2. 错误只在程序中某个变量为一个特定的值,才会出现,而这个变量的值是在程序运行的过程中随机设置的。3. 多个线程都要调用同一个函数,而你只想在某几个线程执行这个函数的时候,中断程序的执行。在上面列出
2012-04-23 09:42:51 1380
转载 closesocket, shutdown, tcp::socket.close()
来,咱们彻底的来讨论一下这个shutdown 和closesocket 从函数调用上来分析(msdn):一旦完成了套接字的连接,应当将套接字关闭,并且释放其套接字句柄所占用的所有资源。真正释放一个已经打开的套接字句柄的资源直接调用closesocket即可,但要明白closesocket的调用可能会带来负面影响,具体的影响和如何调用有关,最明显的影响是数据丢失,因此一般都要在closeso
2012-04-21 21:41:00 6774 1
转载 管道/FIFO/共享内存/消息队列/信号
进程间通讯(IPC)方法主要有以下几种: 管道/FIFO/共享内存/消息队列/信号1.管道中还有命名管道和非命名管道(即匿名管道)之分,非命名管道(即匿名管道)只能用于父子进程通讯,命名管道可用于非父子进程,命名管道就是FIFO,管道是先进先出的通讯方式2.消息队列是用于两个进程之间的通讯,首先在一个进程中创建一个消息队列,然后再往消息队列中写数据,而另一个进程则从那个消息
2012-04-21 21:35:57 1851
转载 数据库索引
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。 索引 数据库索引好比是一本书前面的目录,能加快数据库的查询速度。 例如这样一个查询:select * from table1 where id=44。如果没有索引,必须遍历整个表,直到ID等于44的这一行被找到为止;有了索引之后(必须是在ID这一列上建立的索引),直接在索引里面找44(
2012-04-18 10:05:17 283
转载 六度好友
【最短路径】圆明园的北部有一个迷宫,据说古时候每次有庆典在圆明园的时候,皇帝会派一些宫女走迷宫,看谁最先走到迷宫内的亭子,会有不错的奖赏。迷宫问题对数学家们来讲虽然是小儿科但在计算机课程上却非常重要,因为不同的求解会涉及到递归,广度优先和深度优先等算法。迷宫毕竟是一个放置在2维空间的有限联系的网络,也就是说,迷宫里的每一个点,最多只和周围的4个点(上下左右)发生关系,而且这些点的位置是
2012-04-13 22:27:49 435
转载 深入浅出享元模式
一、引子让我们先来复习下java中String类型的特性:String类型的对象一旦被创造就不可改变;当两个String对象所包含的内容相同的时候,JVM只创建一个String对象对应这两个不同的对象引用。让我们来证实下着两个特性吧(如果你已经了解,请跳过直接阅读第二部分)。先来验证下第二个特性:public class TestPattern { public sta
2012-04-13 18:51:52 264
转载 教你如何迅速秒杀掉:99%的海量数据处理面试题
作者:July出处:结构之法算法之道blog前言 一般而言,标题含有“秒杀”,“99%”,“史上最全/最强”等词汇的往往都脱不了哗众取宠之嫌,但进一步来讲,如果读者读罢此文,却无任何收获,那么,我也甘愿背负这样的罪名,:-),同时,此文可以看做是对这篇文章:十道海量数据处理面试题与十个方法大总结的一般抽象性总结。 毕竟受文章和理论之限,本文将摒弃绝大部分的细节,只
2012-04-13 18:47:51 348
转载 排序算法的稳定性
假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。 常见排序算法的稳定性 快速排序、希尔排序、堆排序、直接选择排序不是稳定的排序算法,而基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法
2012-04-13 16:43:27 432
转载 计算机端口
计算机“端口”是英文port的义译,可以认为是计算机与外界通讯交流的出口。按端口号可分为3大类:公认端口(Well Known Ports);注册端口(Registered Ports);动态和/或私有端口(Dynamic and/or Private Ports) 第一类 公认端口(Well Known Ports):从0到1023,它们紧密绑定(binding)于一些服务。通常这
2012-04-13 16:34:47 355
转载 静态链接库和动态链接库(2)
1:神马是Dll和Lib,神马是静态链接和动态链接大家都懂的,DLL就是动态链接库,LIB是静态链接库。DLL其实就是EXE,只不过没main。动态链接是相对于静态链接而言的。所谓静态链接就是把函数或过程直接链接到可执行文件中,成为可执行程序中的一部分,当多个程序调用同样的函数时,内存里就会有这个函数的多个拷贝,浪费内存资源。而动态链接则是提供了一个函数的描述信息给可执行文件(并没有内存拷
2012-04-12 18:17:19 351
转载 动态链接库和静态链接库(1)
一、分别编译与链接(Linking)大多数高级语言都支持分别编译,程序员可以显式地把程序划分为独立的模块或文件,然后每个独立部分分别编译。在编译之后,由链接器把这些独立的片段(称为编译单元)“粘接到一起”。(想想这样做有什么好处?)在C/C++中,这些独立的编译单元包括obj文件(一般的源程序编译而成)、lib文件(静态链接的函数库)、dll文件(动态链接的函数库)等。静态链接方式:在
2012-04-12 18:11:10 608
转载 异或操作
定义 异或(xor)是一个数学运算符。它应用于逻辑运算。异或符号为“^”。 其运算法则为a异或b=a'b或ab'(a'为非a)。 真异或假的结果是真,假异或真的结果也是真,真异或真的结果是假,假异或假的结果是假。就是说两个值不相同,则异或结果为真。反之,为假。 不同为1,相同为0,如1001异或1010等于0011. 异或也叫半加运算,其运算法则相当于不带进位的二进
2012-04-12 16:54:47 4832
转载 两个数组a[N],b[N],其中A[N]的各个元素值已知,现给b[i]赋值,b[i] = a[0]*a[1]*a[2]...*a[N-1]/a[i];
问题描述:两个数组a[N],b[N],其中A[N]的各个元素值已知,现给b[i]赋值,b[i] = a[0]*a[1]*a[2]...*a[N-1]/a[i];要求:1.不准用除法运算2.除了循环计数值,a[N],b[N]外,不准再用其他任何变量(包括局部变量,全局变量等)3.满足时间复杂度O(n),空间复杂度O(1)算法实现:[cpp] vie
2012-04-12 14:49:18 814
转载 面试题之2个有序数组求合并后的中位数
问题出处: http://fayaa.com/tiku/view/114/ 2个有序数组求合并后的中位数 第一步:假设两个有序数组(已经各自排序完成了)长度相等,试写函数找出两个数组合并后的中位数。第二步:假设两个有序数组长度不等,一样的求出中位数 解析: 这个题目看起来非常简单。第一题的话: 假设数组长度为n, 那么我就把数
2012-04-12 13:49:54 385
转载 面试题之二叉搜索树的中位数
这个问题不算是很常见的问题,基本上在中文的论坛社区没有看到过,遇见这个是因为偶尔在http://www.ocf.berkeley.edu/~wwu/cgi-bin/yabb/YaBB.cgi 上面注册了账号而看到的,题目如下:Given a BST (Binary search Tree) how will you find median in that? Constrai
2012-04-12 13:48:43 821
转载 面试题之二叉树最近公共父亲节点
很流行的一个问题,常见于各种面试中,http://fayaa.com/tiku/view/16/ 这里有一个很好的汇总.找寻二叉树中两个节点的公共父节点中最近的那个节点情况1. 节点只有left/right,没有parent指针,root已知情况2. root未知,但是每个节点都有parent指针情况3. 二叉树是个二叉查找树,且root和两个节点的
2012-04-12 13:47:08 401
转载 面试题之最长回文字串
这个问题也是一个很有名的问题了,在pongba的群里面问起过,还有人引出了suffix tree来解决这样的问题,这个就是最长回文字的问题How will you find the longest palindrome in a string? I.e. if the string is XMADAMYX, Your code should print MADAM这个问题用后缀树解决可以在
2012-04-12 13:43:28 442
转载 程序员面试题----最大公约数
求两个数的最大公约数,相信很多人都遇见过这样的题目,那我们到底怎么样做才能更好的表现出自己的实力呢?以及与别人的不同呢?既然这样我们就要好好的来研究下,这个最大公约数是神马东东?比如 42和30的最大的公约数,就是分别求出42和30的所有的约数,其中两个数的公约数中相同公约数最大的那个。相信这个大家都很清楚,毕竟这个是小学的时候学习的知识。根据上面的知识,我们知道42和30的最大公约数是
2012-04-12 13:39:36 454
转载 如何计算空间复杂度
一般而言,只比较额外空间,来比较算法空间优越性,也就是基础数据所需空间无法避免。比如排序算法中的快速排序,显然会需要一个栈来记录递归返回地址,所以额外空间是O(logn)。堆排序虽然是在原数组中建堆,但是每做一次sift_down操作要同时做一次交换,交换操作一般需要一个临时变量,所以也说额外空间是O(1)还有像2路归并排序,需要一个额外的数组,所以额外空间是O(n)再比如DF
2012-04-10 22:27:46 1234
原创 如何计算时间复杂度
定义:如果一个问题的规模是n,解这一问题的某一算法所需要的时间为T(n),它是n的某一函数 T(n)称为这一算法的“时间复杂性”。当输入量n逐渐加大时,时间复杂性的极限情形称为算法的“渐近时间复杂性”。我们常用大O表示法表示时间复杂性,注意它是某一个算法的时间复杂性。大O表示只是说有上界,由定义如果f(n)=O(n),那显然成立f(n)=O(n^2),它给你一个上界,但并不是上确界,但人们
2012-04-10 22:08:44 2279 1
转载 先序中序建立二叉树
1二叉树中存储的数据范围仅限于26个英文字母2程序要提示用户从键盘分别输入二叉树的先序和中序序列,接受输入后,调用相应的函数完成二叉树的创建3成功创建二叉树后,程序自动输出该二叉树的后序遍历次序#include #include #include #define size 100 typedef struct JD { char data; st
2012-04-10 10:34:43 1351
转载 后序中序建立二叉树
#include using namespace std;char post[20],ins[20];typedef struct BiTNode{ char data; struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;BiTree Build_tree(int post_begin,int post_end,
2012-04-10 10:31:01 832
转载 是否有中序创建二叉树
作者:iampsl@qq.com 先序创建二叉树,数据结构教程中都有很详细的代码说明,但书中并没有提到是否有中序,后序创建二叉树。若有,又应该怎么创建,代码应该怎么写。问题一:是否有中序创建二叉树? 如上图二叉树,若有中序创建二叉树,则输入的字符串应该为:ΦBΦDΦCΦAΦEΦ而下图的二叉树,
2012-04-10 10:29:12 774
转载 C语言中volatile关键字的作用
一.前言1.编译器优化介绍:由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高执行速度。以上是硬件级别的优化。再看软件一级的优化:一种是在编写代码时由程序员优化,另一种是由编译器进行优化。编译器优化常用的方法有:
2012-04-06 14:36:16 293
转载 Write a routine that prints out a 2-D array in spiral order
我的理解,给定2维数组1 2 3三角形判断8 9 47 6 5“螺旋式”顺序输出:1 2 3 4 5 6 7 8 9 private static void PrintNumberasSpiralOrder() { // 1 2 3 4 // 12 13 14 5
2012-04-05 21:58:26 313
转载 位计算的诸多算法(计算二进制1的个数)
讲解一:这个问题很常见,在通信编码中叫hamming weight。求解算法也是多种多样。1.最原始的方法依次探测每一位,很简单。实现可以依次移位,也可以递归。这里就不多说了。2.打表将可能的输入进行求值打表,hash思想,快但是浪费空间,也可以划分为字节(或更小 4-bit)后按字节打表,最后把各字节结果相加。3. 快速方法在位运算
2012-04-05 17:18:14 999
转载 不利用浮点运算,在屏幕上画一个圆 (x**2 + y**2 = r**2,其中 r 为正整数)
考虑到圆的对称性,我们只需考虑第一象限即可。等价于找到一条连接点(0,r)到点(r,0)的一条曲线,曲线上的点距圆心(0,0)的距离最接近 r。我们可以从点(0,r)开始,搜索右(1,r),下(0,r-1),右下(1,r-1)三个点到圆心的距离,选择距圆心距离最接近 r 的点作为下一个点。反复进行这种运算,直至到达点(r,0)。由于不能利用浮点运算,所以距离的比较只能在距离平方的基础上
2012-04-05 17:08:36 823
原创 if(x == 0) y=a else y=b 其它几种实现方法
(1)y=a*(1-x)+ b*x(2)y=x?b:a(3)int y[]={a,b}; x=y[x];
2012-04-05 17:07:22 700
转载 单词反转
/* 单词反转 "I am a student." --> "student. a am I"*/#include #include #include using namespace std;int main(int argc, char** argv){ //* char str[] = "I am a student of BeiHang"; int sz =
2012-04-05 11:17:23 281
转载 给出一个函数来合并两个字符串A和B。字符串A的后几个字节和字符串B的前几个字节重叠
/*给出一个函数来合并两个字符串A和B。字符串A的后几个字节和字符串B的前几个字节重叠。//*/#include #include #include using namespace std;void copystr(char pachar[], char pbchar[], int sza, int szb, char* &result);int main(){ cha
2012-04-05 10:58:53 1024
转载 怎样编写一个程序,把一个有序整数数组放到二叉树中(按行输出)
方法1:#include #include #include "queue.h"struct student { int value; struct student *lchild; struct student *rchild;};void arraytotree(int *a, int len, struct student **p) { if(le
2012-04-03 21:47:04 1500
转载 写一个函数,输出字符串中字符的所有排序。(比如:abc acb bac bca cab cba )
方法1:#include #include void Permutation(char a[], int start, int end){int i,j;char temp;if(start == end){for(i = 0; i printf(" %c ",a[i]);printf("\n");}else{for(i = s
2012-04-03 21:01:41 1467
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人