java
_calm
踏实下来,越努力越幸运!
展开
-
java递归实现最大公约数和最小公倍数
第一个最大公约数使用的2300年前被发明的欧几里得算法求得,大致原理为:如果有两个非负整数p、q,若q==0,则最大公约数为p;否则,p和q的最大公约数就是p除以q所得的余数和q的最大公约数。第二个最小公倍数更简单公式:最小公倍数=两整数的乘积÷最大公约数关键代码如下://最大公约数(Greatest Common Divisor)publ原创 2017-06-16 09:43:03 · 4273 阅读 · 1 评论 -
解决Eclipse中无法直接使用Base64Encoder的问题
Base64的加密解密都是使用sun.misc包下的BASE64Encoder及BASE64Decoder的sun.misc.BASE64Encoder/BASE64Decoder类。这个类是sun公司的内部方法,并没有在java api中公开过,不属于JDK标准库范畴,但在JDK中包含了该类,可以直接使用。但是在Eclipse和MyEclipse中直接使用,却找不到该类。解决方法如下:1.右原创 2017-05-25 14:14:03 · 49170 阅读 · 14 评论 -
HashMap解决hash冲突的方法
在Java编程语言中,最基本的结构就是两种,一种是数组,一种是模拟指针(引用),所有的数据结构都可以用这两个基本结构构造,HashMap也一样。当程序试图将多个 key-value 放入 HashMap 中时,以如下代码片段为例:HashMap m=new HashMap(); m.put("a", "rrr1"); m.put("b", "tt9"); m.put("c", "tt转载 2017-03-16 18:55:33 · 727 阅读 · 0 评论 -
单例模式与双重检测
原文地址:http://jiangzhengjun.iteye.com/blog/652440首先要解释一下什么是延迟加载,延迟加载就是等到真真使用的时候才去创建实例,不用时不要去创建。 从速度和反应时间角度来讲,非延迟加载(又称饿汉式)好;从资源利用效率上说,延迟加载(又称懒汉式)好。 下面看看几种常见的单例的设计方式: 第一种:非延迟加载转载 2017-03-15 10:24:51 · 292 阅读 · 0 评论 -
Java并发框架Executor
Java SE5的java.util.concurrent包中的执行器(Executor)将为你管理Thread对象,从而简化了并发编程。Executor在客户端和执行任务之间提供了一个间接层,Executor代替客户端执行任务。Executor允许你管理异步任务的执行,而无须显式地管理线程的生命周期。Executor在Java SE5/6中时启动任务的优选方法。Executor引入了一些功能类来转载 2017-03-14 21:30:04 · 268 阅读 · 0 评论 -
eclipse中java链接mysql步骤
1.下载并安装mysql mysql官网下载链接mysql5.6安装图解SQLyog_Enterprise2.下载mysql驱动程序mysql-connector-java-5.1.39-bin.jar3.在eclipse中导入数据库所需要用的jar包(也就是mysql驱动程序)a.在工程下新建lib文件夹,然后把jar包复制进去b.在j原创 2017-03-14 10:10:06 · 1386 阅读 · 0 评论 -
Java中实现对象的比较:Comparable接口和Comparator接口
在实际应用中,我们往往有需要比较两个自定义对象大小的地方。而这些自定义对象的比较,就不像简单的整型数据那么简单,它们往往包含有许多的属性,我们一般都是根据这些属性对自定义对象进行比较的。所以Java中要比较对象的大小或者要对对象的集合进行排序,需要通过比较这些对象的某些属性的大小来确定它们之间的大小关系。一般,Java中通过接口实现两个对象的比较,比较常用就是Comparable接口和Comp转载 2017-03-07 20:03:37 · 1073 阅读 · 0 评论 -
50个Java多线程面试题
注:出自牛客网 http://www.nowcoder.com/discuss/334不管你是新 程序员还是老手,你一定在面试中遇到过有关线程的问题。Java 语言一个重要的特点就是内置了对并发的支持,让 Java 大受企业和程序员的欢迎。大多数待遇丰厚的 Java 开发职位都要求开发者精通多线程技术并且有丰富的 Java 程序开发、调试、优化经验,所以线程相关的问题在面试中经常会被提到转载 2017-03-07 19:31:30 · 954 阅读 · 0 评论 -
Java面试题:如何对HashMap按键值排序
Java中HashMap是一种用于存储“键”和“值”信息对的数据结构。不同于LinkedHashMap,它不会维持插入元素的顺序。因此,在键或值的基础上排序HashMap是一个很难的面试问题,如果你不知道如何解决的话。下面让我们看看如何解决这个问题。1.创建一个简单的HashMap,并插入一些键和值。Map aMap = new HashMap(); //adding keys and原创 2017-03-10 17:57:25 · 7226 阅读 · 0 评论 -
Java锁类型
转载链接在每个锁类型后边线程锁类型1、自旋锁 ,自旋,jvm默认是10次吧,有jvm自己控制。for去争取锁锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) 。这些已经写好提供的锁为我们开发提供了便利,但是锁的具体性质以及类型却很少被提及。本系列文章将分析JAVA下常见的锁名称以及特性,为大家答疑解惑。转载 2017-03-07 14:00:43 · 6871 阅读 · 0 评论 -
对称加密与非对称加密
(一)对称加密(Symmetric Cryptography)对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)。对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。对称加密通常使用的是相对较小的密钥,一般小于256 bit。因为密钥越大,加密越强,但加密与解密的过程越转载 2017-03-10 15:10:05 · 357 阅读 · 0 评论 -
Java中的线程Thread方法之---suspend()和resume()
前篇说到了Thread中的join方法,这一篇我们就来介绍一下suspend()和resume()方法,从字面意义上可以了解到这两个方法是一对的,suspend()方法就是将一个线程挂起(暂停),resume()方法就是将一个挂起线程复活继续执行。首先看一个例子:package cn.edu.ahui;import java.util.Iterator; import java.util转载 2017-03-18 21:45:16 · 2314 阅读 · 0 评论 -
JVM性能调优
一、JVM内存模型及垃圾收集算法 1.根据Java虚拟机规范,JVM将内存划分为:New(年轻代)Tenured(年老代)永久代(Perm) 其中New和Tenured属于堆内存,堆内存会从JVM启动参数(-Xmx:3G)指定的内存中分配,Perm不属于堆内存,有虚拟机直接分配,但可以通过-XX:PermSize -XX:MaxPermSize 等参数调整其大小。转载 2017-03-05 10:05:42 · 284 阅读 · 0 评论 -
Java实现动态表查找--二叉排序树
定义二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的键值均小于或等于它的根结点的键值; (2)若右子树不空,则右子树上所有结点的键值均大于或等于它的根结点的键值; (3)左、右子树也分别为二叉排序树;如下图:树的遍历方法:(1)层次遍历:按照树的层次进行遍历,如图树:8、3、10、1、6、14、4、7、原创 2017-03-04 15:01:07 · 1782 阅读 · 1 评论 -
Java搞定面试中的二叉树题目
package yao.demo; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Queue; import java.util.Stack; /**转载 2017-03-04 15:56:27 · 493 阅读 · 0 评论 -
Java 中int、String的类型转换
int -> Stringint i=12345;String s="";第一种方法:s=i+"";第二种方法:s=String.valueOf(i);这两种方法有什么区别呢?作用是不是一样的呢?是不是在任何下都能互换呢?String -> ints="12345";int i;第一种方法:i=Integer.parseInt(s);第二种方法:i=Inte转载 2017-02-23 22:16:04 · 545 阅读 · 0 评论 -
静态表查找
静态查找表是指表结构不是在查询过程中动态生成的,它可分为 顺序查找(无序)、二分查找(有序)、分块查找(索引顺序查找)。1.顺序查找时间复杂度(O(n))public static int seqSearch(int[] array, int key){ for(int i = 0; i < array.length; i++){ if(array[i] == key) r原创 2017-03-03 10:19:03 · 701 阅读 · 0 评论 -
最简实例说明wait、notify、notifyAll的使用方法
wait()、notify()、notifyAll()是三个定义在Object类里的方法,可以用来控制线程的状态。转载 2017-03-19 19:13:14 · 566 阅读 · 0 评论 -
约瑟夫问题(java实现)
约瑟夫问题(有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题。在计算机编程的算法中,类似问题又称为约瑟夫环。又称“丢手绢问题”.)在下面的代码中,解决的是n个人排成一圈,这n个人的序号分别是0 ~ n-1, 给定一个数m,从头开始报数,没报到m-1时,这个人出列,然后下个人从0开始报数,知道最后一个人留下,求最后一个人的序号。原创 2017-02-18 14:47:44 · 9146 阅读 · 3 评论 -
使用 JAX-RS 简化 REST 应用开发
REST 简介REST 是英文 Representational State Transfer 的缩写,有中文翻译为“具象状态传输”。REST 这个术语是由 Roy Fielding 在他的博士论文 《 Architectural Styles and the Design of Network-based Software Architectures 》中提出的。REST 并非标准,而是一种...转载 2018-04-09 21:12:22 · 1090 阅读 · 0 评论 -
Java实现二叉树的递归、非递归遍历
在计算机科学里,树的遍历是指通过一种方法按照一定的顺序访问一颗树的过程。对于二叉树,树的遍历通常有四种:先序遍历、中序遍历、后序遍历、广度优先遍历(Breadth Frist Search)(层次遍历)。(前三种亦统称深度优先遍历(Depth First Search))对于多叉树,树的遍历通常有两种:深度优先遍历、广度优先遍历。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍原创 2017-07-23 14:12:02 · 8799 阅读 · 1 评论 -
Java 利用枚举实现单例模式
引言单例模式比较常见的实现方法有懒汉模式,DCL模式公有静态成员等,从Java 1.5版本起,单元素枚举实现单例模式成为最佳的方法。Java枚举基本用法枚举的用法比较多,本文主要旨在介绍利用枚举实现单例模式的原理,所以这里也主要介绍一些相关的基础内容。 首先,枚举类似类,一个枚举可以拥有成员变量,成员方法,构造方法。先来看枚举最基本的用法:enum Type{ A,B,C,D;}转载 2017-08-06 14:28:29 · 975 阅读 · 1 评论 -
反射、枚举与单例
通常我们所使用的单例模式,我们都可以使用反射使它不再单例,如下饿汉式的。而枚举类构造的单例模式却无法通过反射构造新的对象。转载 2017-08-06 11:49:21 · 745 阅读 · 0 评论 -
java实现9大排序算法
排序大的分类可以分为两种:内排序和外排序。在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序。一般来说外排序分为两个步骤:预处理和合并排序。首先,根据可用内存的大小,将外存上含有n个纪录的文件分成若干长度为t的子文件(或段);其次,利用内部排序的方法,对每个子文件的t个纪录进行内部排序。这些经过排序的子文件(段)通常称为顺串(run),顺串生成后即将其写入外存原创 2017-02-28 21:22:31 · 7725 阅读 · 3 评论 -
Java HashMap工作原理及实现
简单地说,HashMap 在底层将 key-value 当成一个整体进行处理,这个整体就是一个 Entry 对象。HashMap 底层采用一个 Entry[] 数组来保存所有的 key-value 对,当需要存储一个 Entry 对象时,会根据hash算法来决定其在数组中的存储位置,在根据equals方法决定其在该数组位置上的链表中的存储位置;当需要取出一个Entry时,也会根据hash算法找到其在数组中的存储位置,转载 2017-08-05 15:00:29 · 436 阅读 · 0 评论 -
JAVA线程间通信的几种方式
今天在群里面看到一个很有意思的面试题:“编写两个线程,一个线程打印1~25,另一个线程打印字母A~Z,打印顺序为12A34B56C……5152Z,要求使用线程间的通信。”这是一道非常好的面试题,非常能彰显被面者关于多线程的功力,一下子就勾起了我的兴趣。这里抛砖引玉,给出7种想到的解法。通用代码:import java.util.concurrent.ExecutorService;转载 2017-08-12 21:55:12 · 43096 阅读 · 10 评论 -
Java的三种代理模式
代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法转载 2017-08-05 09:23:57 · 381 阅读 · 0 评论 -
乐观锁的一种实现方式——CAS
在深入理解乐观锁与悲观锁一文中我们介绍过锁。本文在这篇文章的基础上,深入分析一下乐观锁的实现机制,介绍什么是CAS、CAS的应用以及CAS存在的问题等。转载 2017-08-08 12:55:56 · 6486 阅读 · 0 评论 -
机器人运动范围--《剑指offer》
题目描述:地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?解题思路:用一个boolean原创 2017-06-28 11:04:51 · 404 阅读 · 0 评论 -
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。--《剑指offer》
题目描述:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。有两种解题思路:1.传统的做法,对base和exponent进行讨论,然后迭代运算,代码如下:public class Solution { public double Power(double base, int exponent) {原创 2016-10-08 11:17:23 · 5193 阅读 · 0 评论 -
Java double/float数据类型中的0.0和-0.0问题
double或float数据类型0.0和-0.0的比较问题。转载 2017-07-05 15:14:47 · 11371 阅读 · 0 评论 -
波兰表示法与逆波兰表示法
它们都是对表达式的记法,因此也被称为前缀记法、中缀记法和后缀记法。它们之间的区别在于运算符相对与操作数的位置不同:前缀表达式的运算符位于与其相关的操作数之前;中缀和后缀同理。转载 2017-06-30 14:04:50 · 4986 阅读 · 0 评论 -
PriorityQueue
Java中PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示。本文从Queue接口函数出发,结合生动的图解,深入浅出地分析PriorityQueue每个操作的具体过程和时间复杂度,将让读者建立对PriorityQueue建立清晰而深入的认识。总体介绍前面以Java ArrayDeque为例讲解了Stack和Queue,其实还有一种特殊的队列叫做PriorityQ转载 2017-06-23 11:23:17 · 375 阅读 · 0 评论 -
dcm4chee.archive:service=WADOService is not registered.
在dcm4che里面查看图片时,jboss报错,Unexpected error in WADO service (dcm4chee.archive:service=WADOService):dcm4chee.archive:service=WADOService is not registered.原创 2017-06-02 09:37:23 · 2401 阅读 · 0 评论 -
图解eclipse 查看原始类出现The jar file rt.jar has no source attachment
作为一名菜鸟,查看java 源码非常重要。而在eclipse中查看一个类的源码是非常方便的,直接安装 ctrl + 鼠标点击的那个类或方法,那么这个类或方法的源码就会出现。不过在此之前,需要先在eclipse中导入源码 src.zip.这个源码src.zip不需要下载,只要你安装了jdk,那么在jdk安装的目录下就会有src.zip,无需解压,下面看一下怎么把源码导入eclipse中。1.原创 2016-11-17 10:24:37 · 26536 阅读 · 24 评论 -
JAVA 中BIO,NIO,AIO的理解
在高性能的IO体系设计中,有几个名词概念常常会使我们感到迷惑不解。具体如下: 序号问题1什么是同步?2什么是异步?3什么是阻塞?4什么是非阻塞?5什么是同步阻塞?6什么是同步非阻塞?7什么是异步阻塞?8什么是异步非阻塞?散仙转载 2017-03-17 19:44:13 · 349 阅读 · 0 评论 -
一句话总结java23种设计模式
转载于:http://smallbug-vip.iteye.com/blog/2276470设计模式的六大原则1、开闭原则(Open Close Principle):对扩展开放对修改关闭2、里氏代换原则(Liskov Substitution Principle):父类出现的地方,子类也可出现3、依赖倒转原则(Dependence Inversion Princi转载 2017-03-02 10:08:28 · 474 阅读 · 0 评论 -
Java中的24种设计模式与7大原则
一、创建型模式1、抽象工厂模式(Abstract factory pattern): 提供一个接口, 用于创建相关或依赖对象的家族, 而不需要指定具体类.2、生成器模式(Builder pattern): 使用生成器模式封装一个产品的构造过程, 并允许按步骤构造. 将一个复杂对象的构建与它的表示分离, 使得同样的构建过程可以创建不同的表示.3、工厂模式(factory method p转载 2017-03-02 09:45:02 · 345 阅读 · 0 评论 -
JVM堆内存设置原理
堆内存设置原理JVM堆内存分为2块:Permanent Space 和 Heap Space。Permanent 即 持久代(Permanent Generation),主要存放的是Java类定义信息,与垃圾收集器要收集的Java对象关系不大。Heap = { Old + NEW = {Eden, from, to} },Old 即 年老代(Old Generation),Ne转载 2017-02-18 09:20:04 · 454 阅读 · 0 评论 -
抽象类含有构造器吗?
抽象类可以有构造方法,只是不能直接创建抽象类的实例对象而已。在继承了抽象类的子类中通过super()或super(参数列表)调用抽象类中的构造方法。示例代码如下:package ahu;abstract class Base{ int a=7; public Base(){ a=8; } public Base(int i){ a=i;原创 2016-04-24 11:41:01 · 6566 阅读 · 0 评论