- 博客(50)
- 资源 (4)
- 收藏
- 关注
原创 Windows下三种唤醒线程的方法
多线程编程经常遇到以下问题:主线程退出前,后台线程也优雅的退出。如果后台线程处于阻塞状态,则需要把阻塞线程激活。本文讨论Windows下面,三种激活阻塞线程的方法。第一种:利用WaitForMultipleObjects函数让线程处于阻塞状态,并设置多个等待对象中的任一对象处于signal状态下都返回。此时向WaitForMultipleObjects传递的等待对象数组要包含一个额外的
2020-03-31 11:23:37
6437
原创 JTI + JNI,为Java程序提供获取JVM内部信息的通道
首先,JTI是啥?HotSpot JVM使用C++写的,在操作系统层面来看,java.exe进程与其他进程并无特别之处。任何一个进程都可以加载第三方的DLL,JTI就是java.exe开放出来的向Java.exe进程注入dll的接口。也就是说,开发者根据JTI定义好的规范,用C++写一个dll,这个dll就可以被java.exe进程加载了【启动jvm的时候要加上-agentlib参数】。J
2015-03-28 22:15:20
2529
原创 Javac编译时报“非法的前向引用”,以及Eclipse自带的Java编译器的缺陷
编译以下类的时候,如果切换WARNING_LEVEL的赋值方式为"= StatusDef.WARNING",javac会报“非法的前向引用”。 Eclipse自带的编译器会编译通过,这是Eclipse编译器的一个缺陷。产生这个编译错误的原因是,cinit方法是按照字段在源码中的声明顺序依次执行各个初始化代码段。 对于ForwardReference类,cinit方法依次执行以下功能:
2015-03-19 20:45:45
2428
转载 Java String类涉及到UTF16编码的几个概念
Java中的String是采用UTF16编码,String类的文档中涉及到了Code Unit、Code Poi
2014-11-08 11:53:20
2920
原创 完整导出IntelliJ IDEA的快捷键
工欲善其事,必先利其器。经常和代码打交道的人,熟练使用IDE快捷键那是必须的,因为快捷键可以把你从各种罗嗦事中解放出来。比如,如果没有快捷键,你就需要经常性的暂停高速运行的大脑,右手凭记忆摸到鼠标,然后在屏幕上翻来翻去,“我擦,这该死的菜单又躲到哪里去了”。本文告诉你如何完整提取出IntelliJ IDEA的快捷键,其中IntelliJ IDEA的版本是13.1。
2014-08-14 08:17:43
17891
原创 Java代码质量监控工具Sonar安装
Sonar是Java的代码质量管理工具,具有代码静态检查、单元测试覆盖率分析、代码复杂度分析、jar依赖关系分析等多种功能。本文记录了其安装过程,以备后查。
2014-08-12 20:41:39
9180
1
原创 Java集合类汇总记录-- apache.commons4(TreeList)
apache-commons库用tree实现了实现了List的接口,也就是TreeList类。与标准的LinkedList相比,TreeList稍微浪费一点空间,但常用操作的时间复杂度均降低到了O(log N),值得在开发中权衡利弊、合理应用。
2014-08-09 22:32:41
6705
1
原创 Windows Server 下安装BugZilla
记录在Windows Server上安装BugZilla遇到的问题,作为BugZilla官网安装指南的重要补充。
2014-07-15 21:04:26
4198
原创 精确计算java中float和double的精度
给定一个double d = XXX,和d最接近的另外两个double值是多少?我用Java写了一个解析原始数据类型float和double的类,给定一个float或者double数值P,它可以计算出与P的绝对值最近的、可以被float/double表示的浮点数。
2014-06-01 17:43:45
6306
原创 Java加上Xtend,满足你对C#语法的所有想象
Java加上Xtend,满足你对C#语法的所有想象好吧,标题言过其实了,Xtend只是在某些方面提供了与C#类似的语法。又或者作为资深Java程序猿,你根本就对这个标题感到愤怒或不屑,“我大Java何时要与屌丝C#做比较了”。但无论如何,Xtend在语法上的清爽还是让我这个非资深程序猿感到了惊喜。如果你偶尔也对Java重复的getter/setter感到无聊,对Java5/6/7缺少Lambd
2014-05-18 21:51:55
4045
翻译 Spring Framework Reference Documentation 3.2.8.RELEASE 第23章中文翻译
23.1 介绍Spring提供了一个JSM集成框架,简化了JMS API的使用。这点很像Spring对JDBC的集成。JMS大致提供生产消息和消费消息两类功能。JmsTemplate类用来生产消息和同步接收消息【译注:接收消息也就是消费消息】。为了异步接收消息(异步接收消息类似于JavaEE的消息驱动Bean(Message-Driven Bean,MDB),Spring提供了一组消息监听器容器(messagelistener containers),用来创建多个消息驱动POJO(Message-D
2014-05-07 11:44:20
4084
原创 利用Wireshark加Lua分析专有网络协议
实战过程:1.安装wireshark、lua。2.利用lua为wirashark写一个协议的dissector,并部署到lua上。 2.1 参照http://wiki.wireshark.org/Lua/Examples中的例子,进行修改。其中要注意的一点是TCP协议中的粘包现象(如果是UDP则不考虑), 解决这点的关键是在dissector(buffer, pinfo, tr
2014-03-15 19:11:46
8949
1
原创 Windows下的Grep工具
一直觉得Windows下搜索文件夹下所有文件的内容不方便,但也没在意。今天试用了Windows Grep这个工具,效果不错。最新版本是2.3,安装之后,打开专家模式,并且做以下设置:图中的"Editor command line:"选项的含义是:1. C:\UltraEdit_V19.10.0.1012\UltraEdit\uedit32.exe是UltraEdit的可执行
2014-02-16 11:10:28
11265
原创 设置VMWare虚拟机可以被外网访问
环境:VMWare 10;主机为Windows7,IP地址通过DHCP获得;虚拟机为Windows XP步骤:Client操作系统(Windows XP)中1.设置为自动获得IPHost操作系统(Windows 7)中1.VMWare--“虚拟网络编辑器”对话框中,选择桥接模式的网卡(一般为VMnet0),然后设置“桥接到”的Combobox为合适的项2.VMW
2014-01-21 19:34:44
4928
原创 JavaScript中的比较操作符
用了一段时间的JavaScript,总是感觉这门语言非常不严谨,其中一个很难完全搞懂的地方就是比较操作符。这几天重翻JavaScript -- The Definitive Guid,做个摘要,加深理解。JavaScript中的类型null:一个类型只有一个值【虽然typeof(null)返回的是’object’,但它的类型仍然不是object】undefined:一个类型
2013-12-26 20:29:10
1898
原创 解决WebBrowser控件打开本地页面报安全提示的问题
今天用C#封装了WebBrowser控件去打开一个本地页面,页面中包含了javascript脚本,该脚本通过WebBrowser的ObjectForScripting属性,访问C#代码。代码非常简单,但没想到打开页面的时候,WebBrowser报安全提示:“为帮助保护你的安全,你的Web浏览器已经限制此文件显示可能访问你的计算机的活动内容。单击此处查看选项…”。尼玛,这是我自己写的本地页面好不好,
2013-12-13 17:09:47
22153
原创 Linux中kfifo数据结构的精妙之处:即使溢出仍然正确
kfifo是linux内核中的环形缓冲区,实现了先进先出的队列数据结构。以下为kfifo的数据结构定义(内核版本2.6.33.20):struct kfifo { unsigned char *buffer; // 环形缓冲区的大小 unsigned int size; // 环形缓冲区的大小,必须是2的冥 unsigned in
2013-11-27 09:28:41
4196
2
原创 用实例证明dll中new的内存不能在exe中释放
VC中新建一个dll工程,设置使用“多线程调试DLL (/MDd)”。该dll导出以下alloc函数:__declspec( dllexport )int* alloc(){ printf("in dll: %p\n", malloc); return new int[100];}VC中新建一个exe工程,设置使用“多线程调试(/MTd)”,并且引用刚才的
2013-10-30 22:24:59
1430
1
原创 通过反汇编分析C语言中volatile关键字的含义
根据C语言标准,volatile关键字的作用是禁止编译器对相关变量的存取进行优化。本文利用VC 2010和GCC 4.4.7,分析volatile关键字对生成的汇编代码的影响,以验证volatile的具体含义。VC 2010以下是基础C代码int gMark = 1;int _tmain(int argc, _TCHAR* argv[]) { while(gM
2013-10-26 21:17:56
2254
原创 汉字从拼音到文字的完整映射表
背景:项目需要用到中文输入。一种方案是调用系统的中文输入法,一种方案是写一个简单的拼音输入法内嵌到软件中。两种方案各有优缺点,此处不讲,但后一种方案需要拼音到文字的完整映射表。网上有工具可以把微软拼音的字库提取出来,但我这里却始终不成功。 后来发现微软为Visual Studio提供过一个亚洲语言工具库Microsoft Visual Studio International Pack(.
2013-10-24 19:00:57
111121
5
原创 Flash在浏览器中调用Javascript时的安全设定
背景:windows下一个本地exe内嵌IE,IE中运行一个网页,该网页中的flash需要调用网页中的javascript。问题:flash调用FsCommand后,IE报错。解决方法:1.检查是否有以下目录,如果没有创建一个 C:\Windows\System32\Macromed\Flash\FlashPlayerTrust2.在该目录中新增一个XXX.cfg文件
2013-10-24 18:50:54
1094
原创 Windows下QtCreator编译过程
QtCreator是QT自带的开发工具,是学习QT非常好的参考资源.本文提供对编译QtCreator的简单描述(理论上官网发布的都是可以编译的,但实际编译时候会遇到一些问题,本文记录下解决方法)编译环境:Windows 7 X64 + Visual Studio 2010 + qt5.0.2编译过程:1.解压缩qt-creator-2.7.0-src(源码从
2013-05-29 23:14:11
7219
原创 C++Test静态分析时,抛出”解析文件失败”错误的原因及解决方法
C++Test可以执行代码静态分析,检验代码是否符合MisraC++等规则。本文讨论了C++Test进行静态分析时候,抛出解析文件失败错误的原因,并提出绕过去的方法。本文内容基于以下软件环境Windows 7 / Visual Studio 2010 / C++Test9.0VS插件版时间仓促,本文文字没有认真组织,以说明清楚问题为主,希望对遇到同样问题的同行提供一些思路。C++Tes
2013-04-07 21:07:37
8262
6
原创 对于用惯了TortoiseSvn的人,TortoiseGit真是用GIT的神器
http://code.google.com/p/tortoisegit/
2013-04-02 08:19:20
8617
原创 Windows运用AVL树对进程地址空间的管理
32位Windows系统中,进程在用户态可用的地址空间范围是低2G(x64下是低8192G)。随着进程不断的申请和释放内存,这个2G的地址空间,有的地址范围是保留状态(reserved),有的地址范围是提交状态(映射到了物理页面,committed),有的地址范围是空闲的。Windows采用平衡二叉树把这些离散的地址范围管理起来。常见的平衡二叉树有红黑树和AVL树两种,其中红黑树应用更广,C#
2012-12-28 18:27:53
3839
原创 VC的Buffer Security Check
C/C++对内存的访问非常自由,也会带来一些问题。比如对一个局部数组变量的越界写入就可能导致栈数据被意外修改。 为了防止线程栈被有意无意错误改写,VC编译器提供了/GS开关,指示编译器在栈的某些变量的前后留出空白内存区。编译器在原函数体代码前面插入代码,向空白内存区中写入某个数值(security cookie),并在原函数体代码后面插入代码检查空白内存区中的数值是否保持不变。如
2012-12-24 18:59:36
2511
原创 VC中捕捉StackOverflow异常
程序中栈溢出通常会导致进程直接关闭。本文分析Windows中栈增长和溢出过程,并提供一种捕捉栈溢出的方法,作为调试程序的参考。栈大小 VC中,栈大小默认为1M,但可以在编译的时候或在创建线程的时候指定其他值。栈增长和溢出 栈底地址在线程生命期内是常量,栈顶地址保存在SP(ESP、RSP)寄存器。栈地址从高向低增长,因此栈增长,对应着SP寄存器减小。 1M空间只
2012-12-24 18:34:52
4258
原创 shared_ptr线程安全性分析
shared_ptr线程安全性分析正如《STL源码剖析》所讲,“源码之前,了无秘密”。本文基于shared_ptr的源代码,提取了shared_ptr的类图和对象图,然后分析了shared_ptr如何保证文档所宣称的线程安全性。本文的分析基于boost 1.52版本,编译器是VC 2010。shared_ptr的线程安全性boost官方文档对shared_ptr线程安全性的正式表述是:
2012-12-13 22:34:40
28505
1
原创 VS 2010 std::list.sort函数实现的非递归merge sort
td::list.sort()采用的是mergesort算法。merge sort的递归实现非常简单,一般为MergeSort(1,n){ MergeSort(1,n/2); MergeSort(n/2,n); Merge(1,n/2,n);}下图为用一个长度为16的序列调用MergeSort形成的归并树(节
2012-12-11 17:26:08
2463
原创 DEBUG下,VS 2010的vector和相关迭代器的安全检查和记录功能
本文分析DEBUG配置下,VS 2010中std::vector和相关迭代器提供的安全检查和记录功能。有的功能非常耗时。幸好在RELEASE配置下,这些功能都被预编译指令去掉了。当然这也说明,针对VC程序的效率测试必须采用RELEASE版本,否则测试结果很难说明问题。 std::vector和std::vector迭代器的类图其中,_Vector_iterator是st
2012-12-10 19:23:27
4888
原创 VC 2010 非标准STL容器hash map代码分析
综述两个主要的文件:xhash和hash_map,所在的目录是C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include。提供hash_map和hash_multimap两个类。在默认情况下的继承关系和模板实例化情况如下图,其中_Kty是Key类型,_Ty是Value类型,由用户指定,Allocator是STL中的内存分配器
2012-12-06 20:59:46
2541
原创 设置win7的驱动调试环境
要开发win7的驱动,首先要设置好win7的调试环境,在网上搜了一下,经过实践和修改,得到了如下方法1.设置windows 7以debug状态启动执行命令:bcdedit /copy {current} /d DebugEntry把下面的{GUID}替换为上条命令的输出后,执行:bcdedit /dbgsettings serial baudrate:115200
2010-01-05 23:25:00
2878
原创 在非开发机器上调试windows驱动和user mode客户端的的方法
host os: Windows 7 with Visual Studio 2008 and vmware installedtarget os: windows xp, running on vmwareNow we are developing a user mode application using vc 2008 and a windows driver using wdk.
2010-01-05 23:15:00
956
原创 VC中的#和##宏替换指令
宏替换中的#是把宏替换成字符串常量,比如:例1:#define MARK(name) printf(#name);MARK(abc)被替换为 printf("abc");例2:#define MARK(name) printf(L#name);MARK(abc)被替换为 printf(L"abc");宏替换中的##是把自身前后的符号连接起来例:#define
2010-01-05 23:14:00
1815
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人