- 博客(92)
- 收藏
- 关注
原创 maven安装基础学习
Meven安装基础学习1.maven基本介绍Maven(翻译为”专家”,”内行”)是跨平台的项目管理工具。 - 主要作用:服务于基于Java平台的项目构建,依赖管理和项目信息管理。 - 优点:使用Maven可以进行项目高度自动化构建,依赖管理(这是使用Maven最大的好处),仓库管理。只需要定义一个pom.xml,然后把源码放到默认的目录,Maven帮我们处理其他事情。项目构建...
2018-09-16 22:00:17
273
原创 java方法调用原理——虚拟机中方法调用
为了更加深入的理解方法的覆盖和覆写原理需要了解java方法的调用原理首先解释一下方法调用: 方法调用不等同于方法执行,方法调用阶段的唯一任务就是确定被调用方法的版本(即确定具体调用那一个方法),不涉及方法内部具体运行。java虚拟机中提供了5条方法调用的字节码指令:invokestatic:调用静态方法invokespecial:调用实例构造器<init>方法、私有方法、父类方法invokev
2017-09-16 15:02:03
3335
1
原创 虚拟机字节码的执行
虚拟机栈栈帧栈帧:虚拟机栈中的每个栈帧对应着每个方法,是进行方法调用和方法执行的数据结构,每一个方法从调用开始至执行完成的过程,都对应着一个栈帧在虚拟机里边从入栈到出栈的过程。一个栈帧包含的内容(注意:这个只是概念模型,实际存储不太一样):局部变量表:主要存储局部变量操作栈:方法具体执行过程,如两个局部变量相加动态连接:一个指向运行时常量池中该栈帧对应的所属方法的引用返回地址:方法返回调用位
2017-09-16 12:20:41
371
原创 java自动向上转型问题
java中各个类型所占字节为:byte: 8bitchar: 16bitshort: 16bitint: 32bitfloat: 32bitdouble : 64bitlong: 64bit 关于boolean类型具体在java中占用多少字节JAVA规
2017-09-15 16:41:23
2954
原创 哈夫曼树
路径长度:从树中一个结点到另一个结点之间的分支构成两个结点之间的路径,路径上的分支数目称作路径长度。树的路径长度就是从根到每一结点的路径长度之和。这个树的路径长度长度:1+2+3+3+2+1+2+2=16如果考虑结点带有权值,注意只有叶子节点带有权值,树的带权路径长度为树中所有叶子节点的带权路径长度(树的带权路径长度为从该节点到根节点的路径长度与节点上权值的乘积)和。其中带权路径长度WPL最小二叉树
2017-09-12 21:43:44
310
原创 工厂模式
简单工厂模式class SimplePizzaFactory{ public Pizza createPizza() { return new Pizza(); }}这便是最简单的工厂模式,可以将这个返回对象的方法设置为static的,常称为静态工厂方法(通常都设置为静态的)。简单工厂模式实际上并不是真正意义上的工厂模式。真正的工厂模式通过
2017-09-06 23:13:26
228
原创 装饰者模式
装饰者模式:动态的将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方式。实际上装饰者模式就是将继承和组合结合在了一起。继承:通过继承子类可以拥有自己定义的方法的同时,还能使用父类方法。但继承不便于扩展父类方法的功能。 组合:是将一个对象传入另一个对象中,由另一个对象的方法调用该对象的方法,并扩展响应功能。与继承相比,组合关系的优势就在于不会破坏类的封装性,且具有较好的松耦合性,可
2017-09-04 23:59:30
312
原创 观察者模式
观察者模式是一个1对多的关系,也就是1个对象发生改变,其他多个依赖对象都会收到通知。具体例子,就像事件处理一样,一个按键或点击会触发好几条事务共同处理。观察者模式:1、主题接口(被观察者接口)interface Subject{ void registerObserver();// 注册观察者 void removeObserver();// 移出观察者 void notif
2017-09-02 22:55:21
234
原创 单例模式
作用:确保一个类只有一个实例对象。 实现方式有:饿汉模式、懒汉模式饿汉模式:加载类时就已经新建号对象了,这个对象就是全局唯一存在的对象,使用时只需要调用对应的方法将这个对象返回给使用者public class Singleton { private static Singleton singleton = new Singleton(); public static Sin
2017-09-02 21:15:48
216
原创 JVM类加载机制
概述虚拟机把描述类的数据的Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是虚拟机的类加载机制。java语言里,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开销,但是会为java应用程序提供高度灵活性。1、类加载的时机类从被加载到内存中开始,到卸载出内存为止,他的整个
2017-08-31 15:32:23
524
原创 java中引用的用法
java中引用分为四种强度:强引用,软引用、弱引用、虚引用强引用:就是像Object obj = new Object()这种引用;软引用:SoftReference类来实现只有当内存快要溢出时才会回收这部分内存,经常应用在缓存技术中。可以关联一个引用队列,当出现溢出时JVM回收这部分内存后,会将这个引用放入这个关联的引用队列。 // 软引用 public static void tes
2017-08-30 11:57:05
682
原创 java虚拟机垃圾回收
1、概述1)、java虚拟机的垃圾回收(Garbage Collection,GC)主要解决三个问题:有哪些内存是需要回收?什么时候进行回收?如何进行回收?2)、然后是垃圾回收器的工作区域:一般情况程序计数器、虚拟机栈和本地方法栈三个区域随线程生灭,这几个区域的内存分配回收都是确定的。所以垃圾回收器主要工作区域在堆和方法区以下内容先从原理上来说明如何解决这三个问题,最后介绍实际中的垃圾回收器
2017-08-29 18:29:05
545
原创 gc日志打印
eclipse启动gc日志打印需要在eclipse.ini文件中配置(eclipse根目录下)1、在eclipse.ini配置文件中添加以下参数: -verbose:gc (开启打印垃圾回收日志) -Xloggc:eclipse_gc.log (设置垃圾回收日志打印的文件,文件名称可以自定义) -XX:+PrintGCTimeStamps (打印垃圾回收时间信息时的时间格式) -XX:+Pri
2017-08-29 17:06:04
1201
原创 java内存溢出问题处理
java出现内存溢出,首先看异常报的是那个区的内存溢出 1、堆内存溢出(Java heap space): 通过内存映像分析工具(如Eclipse Memory Analyzer)分析,确认是发生了内存泄漏还是内存溢出。 如果是内存泄漏,可以进一步分析出泄漏对象,然后修改确保垃圾回收器能回收。 如果是内存溢出,则需要看能否减少代码中的对象创建,或者设置给堆内存分配更大空间2、虚拟机栈或本地方
2017-08-28 18:37:33
394
原创 java简介
java发展历史java最初叫做Oak(橡树),诞生于1991年4月,开始的目的是应用于消费电子产品上(如机顶盒、冰箱、收音机)的程序架构,但并未成功。 1995年Oak改名为java,并提出自己的口号“Write Once,Run Anywhere” 1996年JDK1.0发布 2006年Sun公司宣布将java开源,建立了OpenJDK组织对这些源代码进行管理。OpenJDK几乎包含了JD
2017-08-28 16:37:01
661
原创 java多线程
1、线程进程概念1)进程:进程是受操作系统管理的基本单元。任何多道程序设计系统中,CPU由一个进程快速切换到另一个进程,严格说,在某一个瞬间CPU(指单核)只能运行一个进程。但在1s内可以切换多个进程运行,这样就产生并行错觉。这种快速切换称为多道程序设计。进程有三种状态:运行、阻塞、就绪。 运行状态:进程占用CPU正常运行; 就绪状态:可以运行,只是因为CPU被其他进程占用,等待CPU空闲;
2017-08-27 17:08:46
456
原创 幸运的袋子
一个袋子里面有n个球,每个球上面都有一个号码(拥有相同号码的球是无区别的)。如果一个袋子是幸运的当且仅当所有球的号码的和大于所有球的号码的积。 例如:如果袋子里面的球的号码是{1, 1, 2, 3},这个袋子就是幸运的,因为1 + 1 + 2 + 3 > 1 * 1 * 2 * 3 你可以适当从袋子里移除一些球(可以移除0个,但是别移除完),要使移除后的袋子是幸运的。现在让你编程计算一下你可以获
2017-08-12 11:14:00
808
原创 final关键字、抽象类、接口
final关键字final修饰类:表示该类不能被继承 final修饰方法:表示该方法不能被重写 final修饰变量:表示该变量值不能被修改了重写与重载区别 重写是子类的方法覆盖父类的方法,要求方法名和参数都相同 重载是在同一个类中的搜索两个或两个以上的方法,拥有相同的方法名,但是参数却不相同,方法体也不相同接口中的属性的默认是public static final 、方法是public ab
2017-08-11 12:16:54
325
原创 二叉树深度
求二叉树深度class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}// 方式一class Solution { public int TreeDep
2017-08-07 23:29:41
312
原创 C语言中二级指针使用
C/C++中使用指针可以减少函数传递的参数 例如:typedef struct{ int r[MAX]; int length;}SqList;调用void test(SqList s)函数时,会把结构体SqList拷贝一份传入函数,这样就使得效率变低。 使用指针可以传递结构体,或者数组二维指针主要用在在子函数中有新生成的变量需要回传回主函数。void main(){
2017-08-07 18:17:48
5947
2
原创 oracle学习(一)
1、Oracle登录Oracle连接有三种客户端工具使用sqlplus工具连接使用sqldeveloper图形界面连接使用第三方工具Oracle登录有两种方式用户名和密码使用用户名和角色登录>sqlplus / as sysdbaOracle安装好时已经创建提供了许多用户用户名:sys 角色:dba 这个用户是活的,即可以直接使用(其他用户需要
2017-08-02 11:34:43
6434
原创 排序(二)
1.希尔排序希尔排序其实就是插入排序的改进,插入排序可以看做每次比较的步长为1,而希尔排序设置一个初始的步长,步长迭代缩减,最后以1结束。希尔排序的复杂度主要和设置这个初始步长有关。当步长选择的比较差时复杂度就接近插入排序的复杂度。这是插入排序的代码void InsertSort(SqList *L){ int i,j; for(i=2;i<=L->length;i++)// 从第
2017-07-28 18:06:20
219
原创 排序
排序算法主要有冒泡排序(时间复杂度为O(n^2))选择排序(时间复杂度为O(n^2),单比冒泡排序稍微好点,主要是交换次数少)直接插入排序(时间复杂度为O(n^2),比选择排序稍微好点)希尔排序堆排序归并排序快速排序
2017-07-28 14:30:40
211
原创 查找三 多路查找树(2-3树,2-3-4树,B树、B+树)
应用场景:解决在硬盘中的大量数据中的查找。因为大量数据存储在硬盘中,不能一次全部加载到内存中,而每次查一个数据读一次硬盘,读取速度太慢,这时就需要使用一种数据结构一部分一部分读入,这就是多路查找树的作用。2-3树2结点:每个几点包含一个元素和两个孩子(或者没有孩子)。其中左孩子小于该节点元素,右孩子大于该节点元素。 3结点:每个节点包含两个元素和三个孩子(或者没有孩子)。其中左孩子小于节点中较小元
2017-07-26 00:01:22
2080
原创 查找 二(二叉排序树、平衡二叉树、)
1、二叉排序树二叉排序树又称为二叉查找树。是一个具有下列属性的二叉树:若左子树不为空,则左子树上所有节点值均小于它的根节点的值若右子树不为空,则右子树上所有节点的值均大于它的根节点的值当对树进行中序遍历时,我们就会得到一个从小到大的序列。 构造二叉排序树的目的:提高查找和插入删除关键字的速度。 注意:二叉排序树中不允许有重复或相等的key值出现。1)删除操作当删除的节点为叶子节点时,直接
2017-07-25 23:33:17
562
原创 查找(一)
1、查找的简介查找分为:静态查找和动态查找 静态查找:只做查找操作 动态查找:在查找的过程中同事2插入查找表中不存在的数据元素,或者删除存在的元素查找的算法:顺序查找(加入哨兵优化)折半查找,插值查找,斐波那契查找(针对有序表的查找)线性索引查找;稠密索引、分块索引、倒排序索引2、查找算法的具体思路1)顺序查找顺序查找就是最简单的查找办法,通过for循环,遍历整个表,直到找到对应
2017-07-25 23:11:34
287
原创 C++中vector的使用
1、vector的基本增加、删除、访问#include<iostream>#include<vector>using namespace std;int main(){ vector<double> score; for (int i = 0; i < 5; i++) { score.push_back(i); } // 访问修改值
2017-07-24 17:32:45
327
原创 VS快捷键的设置使用
VS 快捷键设置 的位置: 工具->选项->键盘(环境) 代码自动提示补全,在eclipse叫做Content Assist 在这里,叫做Edit.CompleteWord 默认的代码自动补全是Alt+右方向键
2017-07-19 17:25:45
586
原创 RANSAC
RANSAC算法的输入是一组观测数据,一个用于解释观测数据的参数化模型以及一些可信的参数。 主要思想是:通过在数据集中随机选定几个数据用来确定一个模型;观察剩余点,哪些点在可接受误差范围符合这个模型,符合模型的称为内点,不符合的称为外点;然后,用所有假设的局内点去重新估计模型(譬如使用最小二乘法),因为它仅仅被初始的假设局内点估计过。最后,通过估计局内点与模型的错误率来评估模型。 上述过
2017-07-11 11:58:26
414
原创 opencv中三角剖分
三角剖分简介主要介绍Delaunay三角剖分 在opencv源码sources/samples下c++/c目录下都有三角剖分的示例代码delaunay 1. 最大化最小角,“最接近于规则化的“的三角网。 2. 唯一性(任意四点不能共圆)。 【定义】Delaunay边:假设E中的一条边e(两个端点为a,b),e若满足下列条件,则称之为Delaunay边:存在一个圆经过a,b两点,圆内(注意是圆
2017-07-11 10:33:03
1967
原创 opencv中关于sift匹配
opencv提供一个knnMatch函数,可以获取两个图片sift特征点的最近匹配距离以及次近匹配距离。BruteForceMatcher< L2<float> > matcher;vector<DMatch> good_matches;matcher.knnMatch(description2, description1, ratio_matches, 2);match函数的参数中位置在前面的
2017-07-07 16:58:41
906
原创 大数问题-打印1到最大的n位数
问题描述输入数字n,按顺序打印出从0到最大的n为十进制数。比如输入4,则需要输出0,,1,2,3,···, 9999思路需要注意两点:直接使用int或long类型,当n比较大时会溢出如何快速的判断出到达了最大的n位数为解决第一点,我们需要使用字符串模拟加法,这样就不会溢出。第二点快速判断到达最大n位数,只需要我们对每次进位位进行判断,看进位位是否是最高位,如果是表示已经到了最大n位数。代码实现
2017-07-05 23:15:46
559
原创 排列组合(一)全排列
问题描述输出一个字符数组元素的全排列 如输入:'a','b','c'结果:a,b,c b,a,c c,b,a a,c,b b,c,a c,a,b 6解决思路这个问题是一个全排列问题,数学计算为A(n,n)。数学思路为,n个元素,第一位可以为n种可能,第二位可以有n-1种可能,以此类推所以全排列的种类一共有n!个。 以此为思路,我们可以
2017-07-05 22:40:15
3192
原创 设计模式(一)-策略模式
策略模式:定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。代码示例每种类型的鸭子具有不同属性行为,我们把每种类型行为定义为接口,然后每种行为具体的类型就是实现这些接口的具体类。鸭子父类使用每种行为的接口类型来接收具体的行为类,然后调用具体行为的方法。需要更改某个具体鸭子的行为时,只需要更改注入的相关具体行为实现类飞行行为/** * 鸭子飞的行为接
2017-07-05 11:08:36
253
原创 数据结构
线性表1. 顺序存储结构define MAXSIZE 20typedef int ElemType;typedef struct{ ElemType data[MAXSIZE]; int length;}SqList2. 链式存储结构单链表typedef struct Node{ Elemtype data; struct Node *next;}Nod
2017-06-20 16:23:25
241
原创 数组工具
Arrays是一个数组的工具类 提供如下方法Arrays.binarySearch(int[]); // 二分查找数组必须有序Arrays.sort(int[]) // 数组排序Arrays.toString(int[]) // 将数组变成字符串Arrays.copyOf(int[] ,length); // 复制数组Arrays.copyOfRange(int[] ,start,
2017-06-17 21:07:04
351
原创 java集合总结
关于java集合可以分为两类单列集合(根接口Collection )双列集合(分根接口Map)单列集合| Collection 单列集合的根接口----| List 实现了List接口的集合类,具备的特点: 有序,可重复--------| ArrayList ArrayList 底层是维护了一个Object数组实现 的, 特点: 查询速度快,增删慢,是线
2017-06-17 20:54:40
261
原创 链表反转
2017年亚马逊实习生招聘时的题目问题描述:实现一个链表,反转后一半,如果链表长度是基数则从(N+1)/2开始反转;想到的思路:1、可以设置两个指示节点的标记,一个标记每次前进一个节点,一个每次前进两个节点,这样循环N/2次就可以找到中间节点,然后从这里开始链表反转; 2、直接设置一个数组,将链表拷贝入数组中,然后从头开始新建一个链表,将数组前半段按顺序拷贝到新链表,后半段反序拷贝。实现代码思路1
2017-06-16 11:07:08
367
原创 单链表反转
关于链表反转是招聘笔试中经常考的题,而且经常是让直接写在纸上,感觉在纸上写程序比使用IDE写难好多,可能还是自己不太熟练,所以整理了一下链表的反转的方法。 关于链表反转个人想到了三种方法,后续看到新方法会补充……链表反转##1. 新链表从最后一个节点向前新建,依次拷贝原链表的数据。 ##2. 先将链表中的数据拷贝到一个数组中,从数组最后一个元素依次向前新建链表,这个链表新建的方式是从前向后新建
2017-06-15 23:19:37
261
原创 java对象创建过程
1、对象创建的整个流程:step1: 当虚拟机遇到一个new指令时,首先去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并检查这个符号引用代表的类是否被加载、解析和初始化过。如果没有,那么必须先执行相应的类加载过程。step2: 类加载检查过后,方法信息、常量、静态变量等保存在一块称为方法区的内存中,接下来虚拟机将为新生对象分配内存。对象所需内存大小在类加载完成后便可以完全确定,为对象分
2017-06-13 22:07:19
1105
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人