两种锁的加锁原理互斥锁:线程会从sleep(加锁)——>running(解锁),过程中有上下文的切换,cpu的抢占,信号的发送等开销。自旋锁:线程一直是running(加锁——>解锁),死循环检测锁的标志位,机制不复杂。两种锁的区别互斥锁的起始原始开销要高于自旋锁,但是基本是一劳永逸,临界区持锁时间...
分类:
其他好文 时间:
2014-05-09 04:58:58
阅读次数:
297
圆与扇形的碰撞检测,以前用过一种算法是这样的:
首先把扇形视作一个圆,排除圆与扇形圆不相交的情况,
然后如果圆心在扇形两条边中间,则必然相交,
剩下的就判断圆是否与两条边相交。
这种算法用到了点与直线的关系,圆与线段的碰撞检测,圆与圆的碰撞检测等,算法清晰,实现起来比较简单,但只能适用于扇形夹角小于180度的情况。
今天偶尔想到了一种新的算法:
首先把扇形视作一个圆,排除圆与扇...
分类:
其他好文 时间:
2014-05-09 01:33:18
阅读次数:
618
集合的Jaccard相似度定义:对于两个集合A和B,A和B的Jaccard相似度记为SIM(A,B)=|A∩B|/|A∪B|。
计算文档内容的相似度可以用来检测文档抄袭作弊或者镜像页面等。
为了计算文档内容之间的相似度,首先也将文档进行分词处理,然后计算Jaccard相似度。
shingling用来处理文档内容的分词,需要考虑shingle的大小。
例如,字符串“abcd" , 2个shi...
分类:
其他好文 时间:
2014-05-09 00:41:45
阅读次数:
290
在Python中异常通常可以用于各种用途,下面是最常见的几种。
错误处理
每当运行时检测到错误,Python的默认异常处理行为将启动(停止程序,打印错误信息)。如果不想启动这种默认
行为,就要写try语句捕捉异常并从异常中恢复。当检测到错误是,Python会跳到try处理器,程序在try之后会接着
继续运行。
事件通知
发出有效状态的信号
特殊情况处理
很难调整代码去处理的问题...
分类:
编程语言 时间:
2014-05-09 00:31:33
阅读次数:
394
Fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据.
使用Fiddler无论对开发还是测试来说,都有很大的帮助。阅读目录Fiddler的基本介绍Fiddler的工作原理同类的其它工具Fiddler如何捕获...
分类:
其他好文 时间:
2014-05-08 23:04:52
阅读次数:
453
当前公司nagios已经正常使用,也能报警,但是邮件报警采用的是sendmail,发件人总是nagios@localhost,收到后经常被加入到邮件中的垃圾箱,并且有些邮箱服务器有反垃圾检测,导致用户接收不到邮件。为解决这个问题,决定自己写一个邮件发送程序。过程如下:1、开发发送邮件脚本[..
分类:
移动开发 时间:
2014-05-08 17:08:44
阅读次数:
505
定义alias别名格式:alias新的命令名=‘命令执行的绝对路径‘例如:原本检测nagios配置文件的命令路径为/usr/local/nagios/bin/nagios-v/usr/local/nagios/etc/nagios.cfg那么每次执行检测nagios配置文件的时候就要输入这么长命令实在是不方便。我们可以使用alias别名的方式如下..
分类:
其他好文 时间:
2014-05-08 16:26:42
阅读次数:
616
4K对齐相关联的是一个叫做“高级格式化”的分区技术。“4K对齐”就是符合“4K扇区”定义格式化过的硬盘,并且按照“4K扇区”的规则写入数据。传统硬盘的每个扇区固定是512字节,新标准的"4K扇区"的硬盘,硬盘厂商为了保证与操作系统兼容性,也将扇区模拟成512B扇区,这时就会有..
分类:
其他好文 时间:
2014-05-08 11:01:15
阅读次数:
337
1. 在Linux平台下编译安装wxWidgets和Codeblocks,搭建GUI程序开发平台
2. 编写GUI程序,检测当前计算机的配置:
1) 在工作区以适当的方式输出the description of the current platform, the amount of free memory, the current host machine's name等;
2) 在状态栏实时显示当前时间。
3. 编写GUI程序,实现一个XX信息管理系统。要求用户可以选择进行输入或输出:
1) 可以把对应信...
分类:
其他好文 时间:
2014-05-08 10:48:07
阅读次数:
283
碰撞监听
首先,确保我们创建物理对象的时候,给对象设置了碰撞条件(如果你是一步步按着教程来写的代码,那就是设置好了):
body->setCategoryBitmask(1); // 0001
body->setCollisionBitmask(1); // 0001
body->setContactTestBitmask(1); // 0001
这样我们才能监听到它们的碰撞事件,至于原理,就不说了,以我的唠叨程度,不是一两篇内容能说完的。...
分类:
其他好文 时间:
2014-05-08 10:42:05
阅读次数:
343