- 博客(24)
- 收藏
- 关注
原创 使用jdb和gdb同时调试java native code
主要流程:1.使用jdb启动生成的java字节码或jar包;2.在java源码中适当的位置设置断点,如main方法;3.使用run指令,使代码跑起来。(jdb命令只是进入调试环境,jvm还没有运行起来,当然我们的代码也没有运行起来,run指令之后,才有创建一个jvm,在进程列表中会发现多出一个java进程。)4.另起一个终端,使用查询新生成的java进程的进程id。
2015-09-17 15:40:33
3412
原创 Java native HelloWorld
native方法的声明只需要在签名式前添加native关键字。在java中实现一个native方法的主要流程如下:1.声明native方法;2.使用javac编译java源码文件,生成字节码文件(.class);3.使用javah生成native方法的头文件(.h);4.创建相应的.c文件,实现.h文件中声明的native函数;5.使用gcc编译.c
2015-09-17 15:32:16
551
原创 邻位互换生成全排列算法
/** 本算法的思想也是希望以(12…n)作为n个元素1,2,…,n的第一个排列, 然后按照某种方法,由一个排列(p)=(p1p2…pn)直接生成下一个排列, 直到全部排列生成完毕为止。 以n=4为例,开始在排列1234的各数上方加一个左箭头“←”, 当一个数上方箭头所指的一侧,相邻的数比该数小时,便称该数处于活动状态。 从排列(p)=(p1p2…pn)生成下一个排列的算法如下
2014-07-16 16:34:57
2718
原创 字典序法生成排列
/** 顾名思义,这种方法的思想就是将所有n元排列按“字典顺序”排成队, 以12…n为第一个排列,排序的规则,也就是由一个排列(p)=(p1p2…pn) 直接生成下一个排列的算法可归结为(1) 求满足关系式P[k-1]<P[k]的k的最大值,设为i,即 i = max{k|P[k-1] < P[k]};(2) 求满足关系式P[i-1]<P[k]的k的最大值,设为
2014-07-16 16:29:09
1085
原创 打印1到最大的n位数
《剑指offer》面试题第12题。题目:输入数字n,按顺序打印出从1最大的n位十进制数。比如输入3,则打印1、2、3一直到最大的3位数即999书中给出了两套方案,在字符串上模拟数字加法的解法,和把问题转换成数字排列的解法,第二种方法看起来思路更清晰,代码也更简洁,然则两种方共同使用PrintNumber函数由于每次调用时都需要遍历依次数组以便找的第一位有效数字的下标,进而输出表示有效数字的
2014-06-26 22:45:43
720
原创 单例模式
单例模式(SingletonPattern)是一个比较简单的模式,其定义为确保一个类只有一个实例,而且自行实例化并向整个系统提供这个示例。类的使用者一般都是通过构造函数来生成实例,如果将构造函数设为私有成员,那么类的使用者就不能随便构造实例了。单利模式中这唯一的一个实例一般是以静态成员的身份出现在类中的,当然类就得提供一个静态的公有接口来初始化并向使用者返回这个实例。单例模式结构图单例
2014-06-24 21:55:28
425
原创 桥梁模式
桥梁模式(BridgePattern)也叫做桥接模式,定义为将抽象和实现解耦,使得两者可以独立地变化。桥梁模式的重点是在“解耦”上。桥梁模式通用类图
2014-06-24 21:48:28
417
原创 解释器模式
解释器模式(InterpreterPattern)给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。解释器模式通用类图
2014-06-23 19:24:02
483
原创 访问者模式
定义 访问者模式(Visitor Pattern)表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 访问者模式通用类图 Visitor ——抽象访问者 抽象类或者接口,声明访问者可以访问哪些元素,具体到程序汇中就是visit方法的参数定义哪些对象是可以被访问的。 ConcreteVisitor——具体访问者 它影响访问者访问
2014-06-16 22:57:08
386
原创 备忘录模式
备忘录模式(Memento Pattern)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 备忘录模式通用类图 Originator 发起人角色 记录当前时刻的内部状态,负责定义哪些属于备份范围的状态,负责创建和恢复备忘录数据。 Memento 备忘录角色 负责存储Originator发起人对象的内部状态,在
2014-06-16 22:53:31
346
原创 观察者模式
观察者模式定义 观察者模式(Observe Pattern)也叫做发布订阅模式(Publish/subscribe),定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。 观察者模式通用类图 Subject被观察者 定义被观察者必须实现的职责,它必须能够动态地增加(Attach),取消观察者(Detach),并通知观察者(Notify
2014-06-16 22:48:33
425
原创 外观模式
定义 外观模式(Facade Pattern)要求一个子系统的外部与其内部的通信必须通过一个统一多的对象进行。外观模式定义了一个高层次的接口,使得子系统更易于使用。 外观模式通用类图 Facade 外观角色,客户端可以调用这个角色的方法。此角色知晓子系统的所有功能和责任。一般情况下,本角色会将所有从客户端发来的请求委派到相应的子系统去,也就是说该角色没有实际的业务逻辑,只是一个委托类。
2014-06-16 22:47:52
390
原创 组合模式
定义组合模式(Composite Pattern)将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。组合模式也叫合成模式,有时又叫做部分——整体模式(Part-Whole),主要是用来描述部分与整体的关系。组合模式跟数据结构中树的结构定义很相似,事实上它就是通过树形结构来组织系统中功能相同但层次分明的子构件的。组合模式通用类图Co
2014-06-09 22:02:51
377
原创 迭代器模式
定义 迭代器模式(Iterator Pattern)提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象内部细节。 迭代器模式通用类图 Iterator抽象迭代器 抽象迭代器负责定义访问和遍历元素的接口,而且基本上是有固定的3个方法:First()获取第一个元素,Next()访问下一个元素,IsDone()是否已经访问到底部。 ConcreteIterator具体迭代器
2014-06-08 23:28:30
422
原创 动态链接
动态连接基本上分三步 启动动态连接器本身 装载所有需要的共享对象 重定位和初始化 动态连接器本身也是一个共享对象,但其不依赖于其他任何共享对象,其本身所需的全局和静态变量的重定位工作由它本身完成。动态链接器必须在启动时有一段非常精巧的代码可以完成这项工作而同时保证不用到全局和静态变量。这种具有一定限制条件的启动代码往往被称为自举(Bootstrap)。 实际上动态连
2014-06-07 22:08:48
501
原创 适配器模式
适配器模式将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起的两个类能够在一起工作。适配器模式通用类图Target 目标角色,该角色定义把其他类转换为何种接口,也就是期望的接口。Adaptee 源角色,是已经存在的,但与当前系统接口不兼容的数据类型设计,需要被转换。Adapter 适配器角色, 适配器模式的核心角色,负责把源角色转换为目标角色。
2014-06-07 21:28:07
422
原创 C++ 多重继承
写在之前:C++是支持多重继承的,但一定要慎用,因为很容易出现各种各样的问题。<div class="cnblogs_code" style="border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; border-bottom: #cccccc 1px solid; padding-bottom: 5p
2014-06-07 11:39:11
787
原创 C++ Primer 学习笔记(一)
书是第四版,人民邮电出版社出版的。感兴趣的朋友可以一同交流下。希望能坚持下去! =================================================================== 命名空间: 在C++语言中,唯一使用完整的命名空间前缀(eg: std::)的情况是在头文件中发生的,例如cout写作std::cout,这是为了不使同一个using声明出现在多
2014-05-08 11:21:35
413
原创 查找 之 散列表查找(哈希表)
基础概念散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key).这里对应关系f称为散列函数,又称为哈希(Hash)函数。采用散列技术将记录存储在一块连续的存储空间中,这块连续存储空间称为散列表或哈希表(Hash table)。散列技术既是一种存储方法,也是一种查找方法。散列技术最适合的求解问题是查找与给定值相等的记录。不
2014-05-07 21:54:20
777
原创 VS环境中进行内存泄漏的检测
根据MSDN中的介绍,亲测整理。本篇比较长,如不愿花费太多时间,可只看第一段和第四段,甚至只看第四段。内存泄漏,即未能正确释放以前分配的内存,是 C/C++ 应用程序中最难以捉摸也最难以检测到的 Bug 之一。借助 Visual Studio 调试器和 C 运行时 (CRT) 库,可以检测和识别内存泄漏。检测内存泄漏的主要工具是调试器和 C 运行库 (CRT) 调试堆函数。
2014-05-07 20:05:10
546
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人