JAVA学习
文章平均质量分 69
常戚戚
学习ing
展开
-
Java 并发编程实战笔记1
为什么要多线程 优点: - 提高CPU资源利用率 - 异步化,提高程序响应 问题: - 安全性,多线程对同一变量并发读写 - 性能问题,从一个线程切换到另一个线程会带来上下文切换的问题如果一个变量是共享并且可变的,则多线程访问时,需要采用同步机制来协调。原创 2017-09-10 19:34:59 · 336 阅读 · 0 评论 -
Java 内存泄露以及几种不同的引用
参考: http://blog.csdn.net/renfufei/article/details/14138099#comments http://xgtxxxx.iteye.com/blog/1622236 http://www.blogjava.net/zh-weir/archive/2011/02/23/345007.html http://www.cnblogs.com/dolph转载 2015-09-01 10:24:32 · 1331 阅读 · 0 评论 -
Junit4 框架学习
参考:http://blog.csdn.net/wangjunjun2008/article/details/17242749 http://blog.csdn.net/wangjunjun2008/article/details/17242749 http://tonl.iteye.com/blog/1948869 http://my.oschina.net/pangyangyang/blo原创 2015-07-22 21:09:24 · 442 阅读 · 0 评论 -
Java 实现基本的排序算法
用 Java 写的几个排序算法:插入排序,选择排序,冒泡排序,快速排序(双边扫描),归并排序,堆排序。归并算法参考了用Java写算法之四:归并排序, MergeSort(归并排序)算法Java实现归并算法的主要思想是 divide and conquer。将数组从中间分开,直到数组分组中只剩一个数据,此时单个数据可以很轻松的比较大小了。比较完大小后,再两两合并。归并效率很高,由于递归划分为子序列只原创 2015-07-30 10:46:32 · 578 阅读 · 0 评论 -
内部排序算法
参考: 八大排序算法 外部排序 三种线性排序算法 计数排序、桶排序与基数排序 浅谈排序算法实现 (计数排序、基数排序) 堆排序时间复杂度的理解 快速排序及优化排序分为内部排序与外部排序。内部排序:数据比较少,直接在内存中进行排序外部排序:大量数据排序,待排的数据保存在外存储器上(比如硬盘),带排序文件无法一次装入内存,需要在内存与硬盘之间进行多次数据交换,以达到排序整个文件的目的原创 2015-07-14 21:10:10 · 740 阅读 · 0 评论 -
归并算法及其优化
转载:勇幸|Thinking (http://www.ahathinking.com) 归并排序采用分治法(Divide and Conquer)的一个应用,先使每个子序列有序,再使子序列段有序。需要一个辅助数组,时间复杂度是O(nlogn)1,原地归并排序因为需要一个辅助数组,所以归并排序的空间复杂度是O(n),对其 进行优化后可以进行原地排序,额外空间为O(1)。原地归并排序对Sort()函数进转载 2015-07-31 17:14:55 · 3382 阅读 · 1 评论 -
Java中String不可变性以及通过反射进行修改
Java中 String 类时不可变的。但刚开始一直不清楚不可变是什么意思。 ## 区分对象和对象引用 ##```String s = "abc"; System.out.println("s = " + s); s = "123";原创 2015-03-27 15:48:50 · 889 阅读 · 0 评论 -
JDK6和JDK7中String的substring()方法
JDK6 与JDK7中的 substring(int beginIndex, int endIndex) 方法存在不同。substring作用substring(int beginIndex, int endIndex) 方法返回一个以beginIndex 开始,endIndex-1 结束的string。String x = "abcdef";x = x.substring(1,3);Syste转载 2015-06-19 12:32:11 · 619 阅读 · 1 评论 -
反射
转载:http://www.cnblogs.com/lianghe01/p/4215208.html; http://blog.csdn.net/ljphhj/article/details/12858767**Java反射机制是Java语言被视为准动态语言的关键性质。**Java反射机制的核心就是允许在运行时通过Java Reflection APIs来取得已知名字的class类的相关信息,动态转载 2015-03-24 14:06:45 · 360 阅读 · 0 评论 -
Object 源码
在源码中可以看到该类是在java.lang 包中。 首先看Object中的方法:public final native Class<?> getClass(); public native int hashCode(); public boolean equals(Object obj); protected native Object clone() throws CloneNotS原创 2015-07-14 16:49:45 · 444 阅读 · 0 评论 -
HashMap的面试题
参考链接: http://www.importnew.com/7099.htmlHashMap的工作原理是近年来常见的Java面试题。几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道Hashtable和HashMap之间的区别,那么为何这道面试题如此特殊呢?是因为这道题考察的深度很深。这题经常出现在高级或中高级面试中。投资银行更喜欢问这个问题,甚至会要求你实现HashM转载 2015-07-11 16:15:33 · 2559 阅读 · 0 评论 -
笔试中遇到的求质数
参考:http://blog.csdn.net/program_think/article/details/7032600/昨天笔试遇到这个求质数的笔试题,自己用的纯暴力的解法,只考虑奇数,判断n 是否是素数的时候直接 3-n-1 来试除的。 后续还有优化,但是没有想出来。。。 参考这里:求质数算法的N种境界 (N > 10) ,竟然有这么多的优化。1,试除法在判断n 是否是质数的时候,只要循环原创 2015-10-18 00:37:24 · 456 阅读 · 0 评论 -
深入Java虚拟机笔记----类的生命周期
一,类的生命周期编写一个Java源文件之后,经过编译生成可以在虚拟机中运行的字节码文件(.class文件),Java类的生命周期就是指一个class文件从加载到卸载的过程。Java类的完整生命周期:加载-连接-初始化-使用-卸载 也有没有初始化就直接被使用的情况。 二,类加载类加载包括类生命周期中:加载(Loading):由类加载器执行,查找字节码,并在堆中创建(只创建)一个java.lang原创 2015-05-17 21:58:41 · 687 阅读 · 0 评论 -
理解ThreadLocal
程序中需要全局变量,想要直接用一个全局的变量,但涉及到多线程的问题,改用ThreadLocal ,codeReview 时,被指出没有显示的调用 ThreadLocal 的remove 方法,可能会造成内存泄漏。但是对ThreadLocal 为什么会造成内存泄漏并不了解。原创 2017-09-23 21:10:26 · 313 阅读 · 0 评论 -
maven 介绍
这篇文章是入职之初为了解maven,查资料写在未知笔记中,整理下转到这里来1,Maven简介1.1 maven 是什么maven 是一个项目构建和管理工具,通过maven可以实现: 版本 – maven有自己的版本定义和规则 依赖关系 – 对依赖关系的特性进行分析和划分,避免开发过程中的依赖混乱和相互污染行为 项目关系 – 一个大型的项目通常有几个小项目或者模块组成,用maven可以很方便地原创 2017-08-06 22:19:21 · 375 阅读 · 0 评论 -
zookeeper 学习笔记-zookeeper的应用
最近组里分享zookeeper,在这里记录下在网上找的资料以及看书的笔记 。zookeeper 是一个高效可靠的分布式协调服务,分布式应用程序可以基于它实现数据发布订阅,zookeeper 可以实现:配置管理,分布式锁,分布式队列,master 选举,屏障等等。使用的核心技术主要有watcher,以及zookeeper丰富的数据节点类型:持久节点,持久顺序节点,临时节点,临时顺序节点。系统模型数据模原创 2017-08-05 14:09:38 · 433 阅读 · 0 评论 -
final static public---Java
参考链接一, finalfinal:”不可更改的”,可以修饰非抽象类,变量或者方法。一旦将引用声明为final,就不可以改变这个引用了。final 修饰的常量只能被初始化一次,一旦初始化之后就不能再次重新赋值(重新指向其他对象)final StringBuffer s = new StringBuffer("string"); //这里 s 指向的对象本身可以修改转载 2015-03-10 21:06:50 · 650 阅读 · 0 评论 -
什么是跳表
储存数据时,数组容量有限且有序数组增加元素时效率比较低,所以存储数据时常选用链表。但是链表的查询效率O(n)。 有没有可以提高链表查找效率的方式呢?跳表就是这样一种结构。利用空间换时间的方式,提高查询效率。原创 2017-08-10 23:49:27 · 15264 阅读 · 0 评论 -
CopyOnWriteArrayList
转载:http://blog.sina.com.cn/s/blog_605f5b4f0100qsgf.html http://www.cnblogs.com/dolphin0520/p/3938914.htmlCopy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容, 当某个人想要修改这个内容的时候,才会真正把内容Cop转载 2015-10-16 09:57:47 · 465 阅读 · 0 评论 -
深入Java虚拟机笔记---ClassLoader
一,ClassLoader 概念Java中实例化一个类等操作之前需要把类装入虚拟机中。这个国政就是类加载,即加载,连接,初始化。其中的加载过程就是由类加载器 ClassLoader 完成的。基本上所有的类加载器都是java.lang.ClassLoader 类的一个实例。二,ClassLoader分类Java中的类加载器可以分成两类系统提供的开发人员自己编写系统提供的类加载器主要由三个:启动原创 2015-10-02 21:15:05 · 631 阅读 · 0 评论 -
Java 中 try...catch...finally
try..catch..finally 介绍1、finally 块用于清除 try 块中分配的任何资源,以及运行任何即使在发生异常时也必须执行的代码。 控制总是传递给 finally 块,与 try 块的退出方式无关。2、catch 用于处理语句块中出现的异常,而 finally 用于保证代码语句块的执行,与前面的 try 块的退出方式无关。3,catch 和 finally 一起使用的常见方式原创 2015-03-18 17:01:27 · 529 阅读 · 0 评论 -
深入Java虚拟机笔记---垃圾回收算法,Java垃圾收集
Java中一个重要的特性就是通过垃圾回收机制来自动的进程内存管理。Java的垃圾回收器主要完成3个任务:分配内存,确保被引用的对象的内存不被错误回收以及回收不再被引用的对象的内存空间。一,垃圾回收算法垃圾收集算法就是将活动的对象和已经死掉的对象分别出来,然后将死掉对象的内存回收。而且为了更好的利用内存,有的算法还会对内存碎片进行压缩。1,引用计数 每个对象有个计数器,当添加一个对他的引用时,计数器加原创 2015-04-15 11:10:40 · 424 阅读 · 0 评论 -
Java 深拷贝与浅拷贝
## 1 Java 中对象的创建 ##clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象。**所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象**。那么在java语言中,创建对象可以通过:1,使用new操作符创建一个对象2,使用clone方法复制一个对象原创 2015-04-12 13:48:13 · 509 阅读 · 0 评论 -
搜索二叉树
二叉树的基本问题:二叉树是递归定义的,因此相关问题基本都可以用递归实现。递归在本质上就是一个栈。二叉搜索树:对于树中的每个节点X,它的左子树中所有项的值都小于X,右子树所有值都大于X。定义一个二叉树:原创 2015-04-06 17:09:00 · 1412 阅读 · 0 评论 -
Java中基本的数据结构
数组在java中有很多方式来存储一系列数据,而且在操作上面比数组方便的多。但是数组与其他种类的容器之间的区别有:效率,类型和保存基本类型的能力。在Java 中,数组是一种效率最高的存储和随机访问对象引用序列的方式。for each 循环 for(int element : a) {//...... }Arrays.toString() 打印数组中的所有值int [] a={1,2,3};原创 2015-03-17 10:46:02 · 434 阅读 · 0 评论 -
String字符串拼接效率比较
字符串进行拼接方法:加号、contact方法和StringBuffer(StringBuilder) 也可以用 String.valueOf( ): public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString(); }1.“+”方法拼接字符串在基础类前面加一个转载 2015-03-26 17:13:06 · 3653 阅读 · 0 评论 -
字符反转以及涉及到的 StringBuilder
参考链接:http://www.programcreek.com/2014/02/leetcode-reverse-words-in-a-string-java/; http://blog.csdn.net/ithomer/article/details/7669843#comments; http://www.wikihow.com/Reverse-the-String-in-Java反转反转转载 2015-02-09 16:58:31 · 1111 阅读 · 0 评论 -
类方法,实例方法(Fibonacci实现)
Fibonacci 数列,f0=1,f1=1,fn=fn-1 + fn-2;可以用递归 以及递推实现:/* * 斐波那契数列 * */package com.fibonacci;import java.util.Scanner;public class MyFibonacci { //递归实现---是实例方法 public int fibonacci(int n)原创 2015-01-21 15:19:32 · 529 阅读 · 0 评论 -
Java --乘方
链接:http://www.programcreek.com/2012/12/leetcode-powx-n/;http://ios.pianshen.com/article/60382128733/;/* * 计算乘方 * */package com.divide;public class DEevide { public static void main(String[] args)转载 2015-02-08 16:43:56 · 5719 阅读 · 0 评论 -
Java 中的随机数
参考链接 两种获得随机数的方法: 1. 随机类,生成一定范围内的随机 integers,doubles,longs 等等; 2. 使用 Math.random( ) 方法,生成0-1之间的随机 doubles 。 看到next() 以及nextInt()两个方法可以传入参数。package com.something;import java.util.Random;public转载 2015-03-10 17:08:38 · 407 阅读 · 0 评论 -
Java中基本数据类型和包装类
一 java内存分配这里只是在网上找的一些资料; Java 中的数据类型分为 1. 基本类型(原始数据类型) byte short int long float double char boolean 基本类型的变量持有原始值。 2. 符合数据类型(引用类型),引用类型持有引用值(即对某个对象的引用,而非对象本身)。一般Java在内存分配时会涉及到以下区域:原创 2015-03-25 14:52:35 · 4457 阅读 · 0 评论 -
嵌套类
Java 程序语言允许在一个类里再声明另外一个类,这样成为一个嵌套类(nested class)。class OuterClass { ... class NestedClass { ... }}nested class 共有4种: 1. static nested class 静态嵌套类 2. inner class 3. local cla原创 2015-03-16 16:00:10 · 684 阅读 · 0 评论 -
UML类图符号及其关系
最近在看设计模式,发现每个模式都有自己的UML类图,之前没了解过。UML 类图中的关系分为4种,继承,实现,依赖,关联;1,继承 实线+空心箭头,箭头指向父类泛化是父类和子类之间的关系。表示类与类之间的继承关系,接口之间的继承关系,或者对接口的实现关系。 注意: 1. 类图分为3部分,类名,属性,方法 2. <<..>>中的为注释信息 3. 修饰符 + 代表public,- 代表转载 2015-06-29 14:11:46 · 1861 阅读 · 0 评论 -
Java 动态绑定(多态)和静态绑定,隐藏
在这篇 《访问者模式讨论篇:java的动态绑定与双分派》,中看到作者说的, Java的动态绑定就是在运行期间判断做引用对象的实际类型,根据实际类型调用对应的方法。继承体系中的重写就是动态绑定的。 静态绑定是指编译期就确定执行哪一个方法,Java 中,方法的重载就是静态绑定(根据不同的方法签名)多态多态是同一个行为具有多个不同表现形式或形态的能力。Java中所有对象都具有多态性,因为都有一个超类原创 2015-03-12 11:19:34 · 509 阅读 · 0 评论 -
Java中的多线程
转自: http://blog.csdn.net/axman/article/details/420890; http://www.cnblogs.com/DreamSea/archive/2012/01/16/sleepandwaitdifferent.html; http://blog.csdn.net/zyplus/article/details/6672775 一 线程对象和线程 线转载 2015-03-18 20:17:05 · 433 阅读 · 0 评论 -
Java 中的equals
一, equals之前只知道String中的equals 方法和 == 的区别,后来发现超类Object 中有equals() 方法,String中只是对equals 方法的重写。Java 中每个类都使用Object 作为超类,因此没有重写的话就是使用默认的equals()方法:public boolean equals(Object obj) { return (this == ob原创 2015-04-28 09:08:10 · 540 阅读 · 0 评论 -
Java 传值引用
<h2>1,按值传递和按引用传递</h2> 按值传递:当将一个参数传递给另一个函数时,函数接收的是原始值的一个副本。因此,如果函数修改了该参数,仅改变副本,而原始值不受影响。 按引用传递:意味着一个参数传递给一个函数时,函数接收的是原始值的内存地址,而不是值的副本。因此函数修改该参数,原始值也会改变。原创 2015-04-20 19:21:18 · 424 阅读 · 0 评论 -
多数投票算法
两种方法,一种通过hashMap 记录出现次数,时间空间o(n),这种方法也可以计算数组中元素出现个数等等;还有一种投票算法,设置一个计数器和一个临时存储当前元素的变量。1,如果count==0,则临时变量设为当前元素,count=12,如果临时变量与现在数组元素值相同,则count++,反之count-- 3,检验value的票数是否过半原创 2015-04-07 21:04:54 · 1467 阅读 · 0 评论 -
Java 中 String 的 equals 与 ==
在 JAVA 语言中有8中基本类型和一种比较特殊的类型String。这些类型为了使他们在运行过程中速度更快,更节省内存,都提供了一种常量池的概念。常量池就类似一个JAVA系统级别提供的缓存。在 jdk6中,常量池是放在 Perm 区中的,Perm 区和正常的 JAVA Heap 区域是完全分开的。jdk7中,将String常量池 从 Perm 区移动到了 Java Heap区。8种基本类型的常量池都原创 2015-03-26 14:13:15 · 417 阅读 · 0 评论 -
Java中内存,成员变量,局部变量
一 java内存分配这里只是在网上找的一些资料; Java 中的数据类型分为 1. 基本类型(原始数据类型) byte short int long float double char boolean 基本类型的变量持有原始值。 2. 符合数据类型(引用类型),引用类型持有引用值(即对某个对象的引用,而非对象本身)。一般Java在内存分配时会涉及到以下区域:转载 2015-04-05 21:21:25 · 3959 阅读 · 0 评论