|
03 2014 档案
摘要:人一直习惯与自己思维中的世界,却对于变化的事物有种莫名的恐惧。 就拿自己的电脑说事,在大一买好电脑装好系统之后,四年过去了,还是没重装过系统,一来怕麻烦,二来感觉也没有必要,直到自己无意间改变了path,导致编译器罢工了,但是我想path改了,那改回来应该就好了吧。找同学的path改了老半天,实在不行啊,就重新装了编译器,还是最新版的,但就是莫名的错误,这个过程持续了几个月,我就是不想重装系统。直到昨天,有个同学拿来了个系统盘,我就借过来装了下,飞快,以前装系统最怕装各种驱动了,这次下了个软件直接一步到位了。重装后,系统快了很多! 还有件事,在实验室,空出了一个靠窗的位置(靠窗的位置一...
阅读全文
摘要:对于vector的全体排序,我们知道sort(vv.begin(),vv.end())来进行的。 但是对于如果是局部排序的话,比如,vector有100个元素,但我只想对10-80之间的数进行排序,如何处理? 这里考虑使用迭代器,一个迭代器指向10的位置,一个迭代器指向80的位置即可: #include#include#include#include#includeusing namespace std;int main(){ int i,j; vectorvv; for(i=0;i::iterator left,right; left = right = v...
阅读全文
摘要:话说做程序员要多注意自己的身体才是,大学的时候,好歹有篮球课,有基友,运动比较多,现在读研了,感觉打球运动的时候明显少了。 下午的时候看天气不错,就去操场上跑了几圈,感慨下,正儿八经跑步的时光主要集中在初中那会儿,不为别的,就是为了中考,哎,中国的应试教育在这里还是体现出了优势,不然中考不考长袍,还有谁去练习啊,复习文化课都来不及。 跑步的时候还碰到了zwh,呵呵这家伙说吸烟以后身体变差很多,现在一星期来跑3,4次,多锻炼身体,为了可以吸更多的烟,我晕。 不过程序员多运动倒是真的,不是空话。 以后在每周抽出一些时间来跑步吧,加油!
阅读全文
摘要:动态内存管理内存管理的目标是提供一种方法,为实现各种目的而在各个用户之间实现内存共享。内存管理方法应该实现以下两个功能:最小化管理内存所需的时间最大化用于一般应用的可用内存(最小化管理开销)内存管理实际上是一种关于权衡的零和游戏。您可以开发一种使用少量内存进行管理的算法,但是要花费更多时间来管理可用内存。也可以开发一个算法来有效地管理内存,但却要使用更多的内存。最终,特定应用程序的需求将促使对这种权衡作出选择。每个内存管理器都使用了一种基于堆的分配策略。在这种方法中,大块内存(称为堆)用来为用户定义的目的提供内存。当用户需要一块内存时,就请求给自己分配一定大小的内存。堆管理器会查看可用内存的情
阅读全文
摘要:memcpy的实现看起来貌似比较简单,但是也是有注意的地方!void *memcpy(void *dst, const void *src, size_t size){ //check argument assert(null != dst && null != src); if (dst 0) { *pDst++ = *pSrc++; } } else if (dst > src) { byte *pDst = (byte*)dst+size-1; const byte...
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1251又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来节约存储空间,最大限度地减少无谓的字符串比较,查询效率比哈希表高。字典树与字典很相似,当你要查一个单词是不是在字典树中,首先看单词的第一个字母是不是在字典的第一层,如果不在,说明字典树里没有该单词,如果在就在该字母的孩子节点里找是不是有单词的第二个字母,没有说明没有该单词,有的话用同样的方法继续查找.字典
阅读全文
摘要:多个按钮可以对应一个监听器,多个监听器也可以对应一个按钮。protocol类似与java中的接口,类似于C++中的虚基类,只是定义了方法,却没有具体的实现。主函数中的调用按钮:#import #import "Button.h"#import "ButtonListenner.h"int main(int argc, const char * argv[]){ @autoreleasepool { //初始化一个按钮 Button *button = [[[Button alloc]init]autorelease]; //初始化...
阅读全文
摘要:最大类间方差法是由日本学者大津于1979年提出的,是一种自适应的阈值确定的方法,又叫大津法,简称OTSU。它是按图像的灰度特性,将图像分成背景和目标2部分。背景和目标之间的类间方差越大,说明构成图像的2部分的差别越大,当部分目标错分为背景或部分背景错分为目标都会导致2部分差别变小。因此,使类间方差最大的分割意味着错分概率最小。对于图像I(x,y),前景(即目标)和背景的分割阈值记作T,属于前景的像素点数占整幅图像的比例记为ω0,其平均灰度μ0;背景像素点数占整幅图像的比例为ω1,其平均灰度为μ1。图像的总平均灰度记为μ,类间方差记为g。假设图像的背景较暗,并且图像的大小为M×N,图像
阅读全文
摘要:对于普通的程序,在异常发生的时候,程序就会退出,如在做除法的时候,除了个0,就会runtime_error,程序退出,但是,有时就算发生了异常,我们也不希望程序退出,那么就要使用异常处理了。 一般用try{}catch(){}的格式的格式来处理异常: #include#includeusing namespace std;void fun(){ int n = 0; if(0 == n){ throw runtime_error("error"); }}int main(){ try{ fun(); }catch(runtim...
阅读全文
摘要:Buddy算法的优缺点:1)尽管伙伴内存算法在内存碎片问题上已经做的相当出色,但是该算法中,一个很小的块往往会阻碍一个大块的合并,一个系统中,对内存块的分配,大小是随机的,一片内存中仅一个小的内存块没有释放,旁边两个大的就不能合并。2)算法中有一定的浪费现象,伙伴算法是按2的幂次方大小进行分配内存块,当然这样做是有原因的,即为了避免把大的内存块拆的太碎,更重要的是使分配和释放过程迅速。但是他也带来了不利的一面,如果所需内存大小不是2的幂次方,就会有部分页面浪费。有时还很严重。比如原来是1024个块,申请了16个块,再申请600个块就申请不到了,因为已经被分割了。3)另外拆分和合并涉及到 较多的
阅读全文
摘要:TCP的几大模块:分段与流,滑窗,连接,流量控制,重新发送,堵塞控制。1、checksum:在发送TCP报文的时候,里面的信息可能会因为环境的问题,发送变化,这时,接收信号的时候就需要通过checksum,进行校验,一般处理:如果没问题的话,就接受,有问题的话就丢弃。2、超时重传机制:接收端在接受一个到一个TCP包的时候会返回一个ack,如果发送端接收到了这个ack就知道接收端顺利接收到了原先的TCP包;反之在一段时间内(这个计时等待的时间叫做重新发送超时时间(RTO, retransmission timeout)) 说明没收到,发送端会再重新发送。3、快速重新发送:比如接收到乱序片段9的时
阅读全文
摘要:#include#include#includeusing namespace std;template class smartpointer //智能指针的实现{private: T *_ptr;public: smartpointer(T *p) : _ptr(p) //构造函数 { } T& operator *() //重载*操作符 { return *_ptr; } T* operator ->() //重载->操作符 { return _ptr; } ~sma...
阅读全文
摘要:在下有理解不到位,或是有更好的建议,欢迎批评指正! 相同点:关键段和互斥量都可以用来控制线程互斥访问资源。 不同点:关键段只能用于单进程间的多线程互斥,而互斥量可以用于多进程间的多线程互斥,而且互斥量可以处理“遗弃”(即某个个进程的某个线程占用了互斥量,但是它因为某些原因非正常关闭了,互斥量也没有释放,这是系统就是检测,处理这种情况,释放互斥量,以免其他线程一直等待下去)的问题。 按这样理解的话,在单个进程内使用关键段与互斥量应该可以达到类似的结果,真的是这样子吗? 个人用比较常见的生成者消费者模型稍作变型,成了4个生产者,4个消费者,4个临界区资源: 用信号量full,...
阅读全文
摘要:在消费者模型里面,有两个主意点: 1、对于当前消费次数的修改访问需要线程互斥,所以用关键段(也可以是互斥量)进行互斥。 2、需要两个信号量(当然也可以是事件),一个表示缓冲区为空,一个表示缓冲区不为空,用于进程间的同步。 还有一点:注意主线程的结束会导致子线程的结束!!!这里一开始一直没搞清楚,后来才发现在将主线程暂停! #include#include#includevolatile long g_nLoginCount;const int THREAD_NUM = 10;volatile long g_num;CRITICAL_SECTION g_thread;HANDLE...
阅读全文
摘要:形象的理解:关键段与互斥量都有“线程所有权”概念,可以将“线程所有权”理解成旅馆的房卡,在旅馆前台登记名字拥有房卡后是可以多次进出房间的,其它人则无法进入直到你交出房卡。每个线程必须先通过EnterCriticalSection或WaitForSingleObject来尝试获得“线程所有权”才能调用LeaveCriticalSection或ReleaseMutex。否则会调用失败,这就相当于伪造房卡去办理退房手续——由于登记本上没有你的名字所以会被拒绝。互斥量能很好的处理“遗弃”情况,因此在多进程之间可以放心的使用。事件与信号量相当于管停车位的,信号量的大小相当于停车位容量多大,比如一共有5个
阅读全文
摘要:以一个停车场的运作为例。简单起见,假设停车场只有三个车位,一开始三个车位都是空的。这时如果同时来了五辆车,看门人允许其中三辆直接进入,然后放下车拦,剩下的车则必须在入口等待,此后来的车也都不得不在入口处等待。这时,有一辆车离开停车场,看门人得知后,打开车拦,放入外面的一辆进去,如果又离开两辆,则又可以放入两辆,如此往复。在这个停车场系统中,车位是公共资源,每辆车好比一个线程,看门人起的就是信号量的作用。抽象的来讲,信号量的特性如下:信号量是一个非负整数(车位数),所有通过它的线程/进程(车辆)都会将该整数减一(通过它当然是为了使用资源),当该整数值为零时,所有试图通过它的线程都将处于等待状..
阅读全文
摘要:互斥量的用途和临界区很像。它与临界区的差别在于可以跨线程使用,可以用来互斥进行多个线程间的数据访问,但是是以牺牲速度为代价的。只有临界区是非核心对象,那么互斥量就是一个核心对象了。核心对象的特点是有所谓的引用计数。所著一个未被拥有的互斥量,比锁住一个未被拥有的临界区需要花费几乎100倍的时间(数据引用自《Visual C++ 6.0编程学习捷径》)。#include#include#includevolatile long g_nLoginCount;const int THREAD_NUM = 10;volatile long g_num;CRITICAL_SECTION g_thr...
阅读全文
摘要:一到实习校招的时间,大伙儿开始准备笔试面试,还有人搜相应公司的面经,看啥啥所谓的面试宝典。 本人也是俗人一枚,看到大伙儿这么干,自己又有什么不干的理由呢? 尤其是面经,常常感觉面试官问的问题其实也不难啊,如果那个人这样回答可以进公司,自己也可以的,在看看google,facebook的问题,貌似也不是很难,然后又感觉自己飘飘然,实力已经差不多了。 然后也参见实战了,面试去了,才发现面经中出现的只是基础题,然而面试官更希望的是看到你做什么项目,特别是有什么比较有技术含量的项目。可以说面经中呈现的只是冰山一角,你只看到了面试官问的一些基础题,殊不知最后成功的应聘者本身做了多少牛逼的项目,...
阅读全文
摘要:#include#include#includevolatile long g_nLoginCount;const int THREAD_NUM = 10;volatile long g_num;CRITICAL_SECTION g_thread;HANDLE g_Event;unsigned int __stdcall ThreadFun(void *pPM){ int thread_id=*((int *)pPM); SetEvent(g_Event); //触发事件 Sleep(50); EnterCriticalSection(&g_thread); ...
阅读全文
摘要:#include#include#includevolatile long g_nLoginCount;const int THREAD_NUM = 10;volatile long g_num;CRITICAL_SECTION g_thread,g_thread2;unsigned int __stdcall ThreadFun(void *pPM){ LeaveCriticalSection(&g_thread2); int thread_id=*((int *)pPM); Sleep(50); //InterlockedIncrement(&g_num); ...
阅读全文
摘要:之前看到Sleep(0)以为是让线程不等待,字面理解,其实大错特错!!!目的:有时候我们想让线程不被调度一定的时间,也就是说让线程睡眠一段时间。API 接口:在Win32中可以调用Sleep,SleepEx和SwitchToThread三个API。VOIDWINAPISleep(DWORDdwMilliseconds);DWORDWINAPISleepEx(DWORDdwMilliseconds,BOOlbAlertable);BOOlWINAPISwitchToThread();在托管代码中,我们可以调用静态方法Thread.Sleep。分析:Sleep接口均带有表示睡眠时间长度的参数tim
阅读全文
摘要:在多线程的时候,即使i++之类的操作也要谨慎。 观察如下代码: #include#include#includevolatile long g_nLoginCount;const int THREAD_NUM = 50;unsigned int __stdcall ThreadFun(void *pPM){ Sleep(100); g_nLoginCount++; Sleep(50); return 0;}int main(){ g_nLoginCount = 0; HANDLE handle[THREAD_NUM]; int num=20;...
阅读全文
摘要:用CreateThread() 与_beginthreadex()来创建多线程CreateThread创建多线程#include#include #includeDWORD WINAPI ThreadFun(PVOID pM) { printf("ID:%d \n",GetCurrentThreadId()); return 0;}int main(){ printf("test\n"); HANDLE handle[10]; int i; for(i=0;i#include #includeunsigned int __stdcal...
阅读全文
摘要:为了防止网络的拥塞现象,TCP提出了一系列的拥塞控制机制。最初由V. Jacobson在1988年的论文中提出的TCP的拥塞控制由“慢启动(Slow start)”和“拥塞避免(Congestion avoidance)”组成,后来TCP Reno版本中又针对性的加入了“快速重传(Fast retransmit)”、“快速恢复(Fast Recovery)”算法,再后来在TCP NewReno中又对“快速恢复”算法进行了改进,近些年又出现了选择性应答( selective acknowledgement,SACK)算法,还有其他方面的大大小小的改进,成为网络研究的一个热点。TCP的拥塞控制主要
阅读全文
摘要:任何工程产品(注意是任何工程产品)都可以使用以下两种方法之一进行测试。黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。白盒测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否以经过检查。软件的黑盒测试意味着测试要在软件的接口处进行。这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。因此黑盒测试又叫功能测试或数据驱动测试。黑盒测试主要是为了发现以下几类错误:1、是否有不正确或遗漏的功能?2、在接口上,输入是否能正确的接受?能
阅读全文
摘要:作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!计算机开机是一个神秘的过程。我们只是按了开机键,就看到屏幕上的进度条或者一行行的输出,直到我们到达登录界面。然而,计算机开机又是个异常脆弱的过程,我们满心期望的登录界面可能并不会出现,而是一个命令行或者错误信息。了解计算机开机过程有助于我们修复开机可能出现的问题。最初始阶段当我们打开计算机电源,计算机会自动从主板的BIOS(Basic Input/Output System)读取其中所存储的程序。这一程序通常知道一些直接连接在主板上的硬件(硬盘,网络接口,键盘,串口,并口)。现在
阅读全文
摘要:进程:正在执行的程序线程:(1)轻量级的进程(2)进程有独立的运行空间,线程没有(3)线程不能独立存在,它是由进程创建。(fork)1、查看进程psps -aux : 比较详细2、杀死进程kill 进程号 : 试着杀一杀,如果是关键进程的话,就会杀不死kill -9 进程号 : 强杀进程killall 进程号:将该进程及其子进程都杀掉3、动态监控内存 top在 load average 里的三项加起来除以3大于0.6的时候说明系统已经很紧张了!zombie 为僵尸进程:进程终止了以后,没有正常的释放cpu内存资源cpu里的id:空闲cpu资源
阅读全文
摘要:任务调度,有点类似于任务计划1、设置任务。 crontab -e2、我希望每隔一时间去执行 如果希望每分钟去执行: 可以在crontab -e中加入 * * * * * date >> /home/mydate13、怎样去调度多个任务 1)在crontab -e直接写 ( 不推荐 ) 2)可以把所有的任务写入到可执行文件(shell),然后在希望执行文件何时执行放到crontab 中去4、终止任务 crontab -r : 终止任务调度 crontab - l: 列出当前有哪些任务调度参考:http://www.jiaochengku.net/xitong/2012...
阅读全文
摘要:C++没有java的内存垃圾回收机制,在程序短的时候可能比较容易发现问题,在程序长的时候是否有什么检测的方法呢? 假设有一个函数可以某点检测程序的内存使用情况,那是否可以在程序开始的时候设置一个点,在程序结束的时候再设置一个点,比较这两个值是否一样就可以知道内存泄露的情况了。 windows下的内存检测方法:#define _CRTDBG_MAP_ALLOC //一定要加上这一句#include #include #include using namespace std;_CrtMemState s1, s2, s3;void GetMemory(char *p, int num){ ...
阅读全文
|