2013年7月4日
摘要: 1、线程与进程的区别联系2、进程通信方式有哪些?3、同步的方式有哪些?4、ThreadLocal与其它同步机制的比较5、进程死锁的条件第一题:(1)线程是进程的一个实体,一个进程可以拥有多个线程,多个线程也可以并发执行。一个没有线程的进程也可以看做是单线程的,同样线程也经常被看做是一种轻量级的进程。并且进程可以不依赖于线程而单独存在,而线程则不然。(2)进程是并发程序在一个数据集合上的一次执行过程,进程是系统进行资源分配和调度的独立单位,线程是进程的实体,它是比进程更小的能够独立执行的基本单元,线程自己不拥有任何系统资源,但是它可以访问其隶属进程的全部资源。(3)与进程的控制表PCB相似,线程 阅读全文
posted @ 2013-07-04 21:51 猿人谷 阅读(1786) 评论(0) 推荐(0) 编辑
摘要: 以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba” 1 #include 2 #include 3 4 int main() 5 { 6 char str[]="abcde"; 7 int len = strlen(str); 8 char t; 9 for(int i = 0 ; i < len/2 ; i++)10 {11 t = str[i];12 str[i] = str[len-i-1];13 str[len-i-1] = t;14 }15 printf("%s\n... 阅读全文
posted @ 2013-07-04 21:34 猿人谷 阅读(553) 评论(0) 推荐(0) 编辑
摘要: 首先是我之前写的程序,同时这也是处理第一类的字符串反转问题,也就是输入This is a string.,输出为.gnirts a si sihT:#include #include /*我之前的这个代码,有一个很致命的BUG,在字符串长度为奇数的时候运行时正确的 *但是在字符串长度为偶数的时候运行却是错误的, *比如“ab”,str的地址为0x89,ptr的地址为0x8A,当str++,ptr--执行以后 *str和ptr都是不会相等的,也就是不会结束while循环!!!直到碰巧两者相等 *循环结束,但此时程序已经得不到原先想要的结果了!!! */void RevStr(char*str){ 阅读全文
posted @ 2013-07-04 20:49 猿人谷 阅读(874) 评论(0) 推荐(0) 编辑
摘要: 性能调优的第一步是性能分析,下面从性能分析着手进行一些介绍,尤其对Linux性能分析工具vmstat的用法和实践进行详细介绍。 1、性能分析的目的 1)找出系统性能瓶颈(包括硬件瓶颈和软件瓶颈); 2)提供性能优化的方案(升级硬件?改进系统系统结构?); 3)达到合理的硬件和软件配置; 4)使系统资源使用达到最大的平衡。(一般情况下系统良好运行的时候恰恰各项资源达到了一个平衡体,任何一项资源的过渡使用都会造成平衡体系破坏,从而 造成系统负载极高或者响应迟缓。比如CPU过渡使用会造成大量进程等待CPU资源,系统响应变慢,等待会造成进程数增加,进程增加又会造成内存使用增加, 内存耗尽又... 阅读全文
posted @ 2013-07-04 20:18 猿人谷 阅读(795) 评论(0) 推荐(1) 编辑
摘要: 转自:http://www.blogjava.net/qileilove/archive/2012/08/22/386010.html1、什么是进程(Process)和线程(Thread)?有何区别?进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。线程是进程的一个实体,是CPU调度和 分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和 栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一个进程 阅读全文
posted @ 2013-07-04 20:15 猿人谷 阅读(1186) 评论(0) 推荐(0) 编辑
摘要: 转自:http://blog.csdn.net/shandianling/article/details/8785269问题描述:两个数组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) 1 #include 2 #include 3 4 void pr_arr(int s[],int len) 5 { 6 for... 阅读全文
posted @ 2013-07-04 14:48 猿人谷 阅读(590) 评论(0) 推荐(0) 编辑
摘要: /* 用加法模拟乘法 */ #include #include //#define T(O,R,N,i) (N&(1<<i)) && (O+=(R<<i)) #define T(o,a,b,i) (b&1<<i) && (o+=a<<i) int simulateMutiply(int a,int b) { int out=0; T(out, a, b, 0); T(out, a, b, 1); T(out, a... 阅读全文
posted @ 2013-07-04 14:46 猿人谷 阅读(569) 评论(0) 推荐(0) 编辑
摘要: 1.C++模板的作用。将算法与具体对象分离,与类型无关,通用,节省精力 2.socket编程,如果client断电了,服务器如何快速知道???有以下几个技术:使用定时器(适合有数据流动的情况); 使用socket选项SO_KEEPALIVE(适合没有数据流动的情况);3.fork()一子进程程后 父进程癿全局变量能不能使用???fork后子进程将会拥有父进程的几乎一切资源,父子进程的都各自有自己的全局变量。不能通用,不同于线程。对于线程,各个线程共享全局变量。4.4G的long型整数中找到一个最大的,如何做????我的想法是要找到最大的肯定要遍历所有的数的,而且不能将数据全部读入内存,可能不足 阅读全文
posted @ 2013-07-04 14:43 猿人谷 阅读(4872) 评论(0) 推荐(0) 编辑
摘要: 查看cpu信息# cat /proc/cpuinfo说明: 1.process会从0开始计数,一直持续到结束。可以清楚的看到机器的cpu数目。 2.查看物理cpu关注physical id的值,该值相同的话则表示为同一颗CPU。 3.查看flag标志,如果有ht标志,则说明支持超线程技术。【详情见本文末尾】常用的组合命令 1.查看cpu个数及型号# cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c 2.查看物理cpu个数# cat /proc/cpuinfo | grep physical | uniq –c查看内存消息# cat /p 阅读全文
posted @ 2013-07-04 14:42 猿人谷 阅读(262) 评论(0) 推荐(0) 编辑
摘要: 数组乘积(15分)输入:一个长度为n的整数数组input输出:一个长度为n的整数数组result,满足result[i] = input数组中除了input[i]之外所有数的乘积(假设不会溢出)。比如输入:input = {2,3,4,5},输出result = {60,40,30,24}程序时间和空间复杂度越小越好。 1 /* 2 * 一个长度为n的整数数组result,满足result[i]=除input[i]之外所有数的乘积(不溢出),比如 3 * 输入input={2,3,4,5};输出 result={60,40,30,24}; 4 */ 5 /* 6 * 方法一... 阅读全文
posted @ 2013-07-04 14:34 猿人谷 阅读(1236) 评论(0) 推荐(0) 编辑
摘要: 背包问题。 不过就这道题目本身而言,由于集合a中只要6个元素,而不是成千上万,所以可以使用更直观的办法: 只要你能通过程序给出数组a中元素所组成的集合的所有的子集合(幂集),那么只需在这些集合中搜索等于10的就可以了。 而6个元素构成的集合的幂集可以通过6位二进制数来表示,对于从0到2的6次方减1(63)之间的所有的数,让其每一位比特位代表一个元素,当该位为0时表示该数所表示的子集中没有这个元素,否则表示拥有这个元素,这样就能对应出所有的组合,然后在这些所有的组合中检测和是否为10就可以了。 1 #include 2 3 #define ARRAY_SIZ... 阅读全文
posted @ 2013-07-04 09:32 猿人谷 阅读(505) 评论(0) 推荐(0) 编辑