Java
文章平均质量分 77
LiTianao88
Hello Java!
展开
-
rabbitMQ本地安装(Mac版)
1.安装homebrew可参考https://baijiahao.baidu.com/s?id=1668544039877443967&wfr=spider&for=pc2.安装rabbitmq mq可参考https://www.cnblogs.com/hellosiyu/p/12464558.html3.启动rabbitmq/usr/local/Cellar/rabbitmq/3.8.3/sbinsudo ./rabbitmq-server...原创 2021-09-22 16:30:10 · 272 阅读 · 0 评论 -
Java浮点数的精确计算及表示
(1)、浮点数精确计算胜利油田三流合一项目中一直存在一个问题,就是每次报表统计的物资金额和实际的金额要差那么几分钱,和实际金额不一致,让客户觉得总是不那么舒服,原因是因为我们使用Java的浮点类型double来定义物资金额,并且在报表统计中我们经常要进行一些运算,但Java中浮点数(double、float)的计算是非精确计算,请看下面一个例子: System.out.println原创 2016-12-12 12:08:46 · 1115 阅读 · 0 评论 -
Java中的浮点数比较 == equals 和 compare
为什么float和double不能直接用==比较?例如:[java] view plain copySystem.out.println(0.1d == 0.1f); 结果会是flase当时我只是简单的回答,因为精度丢失,比较结果是不对的。那么,到底为什么不对呢? 此文略作整理记录。类型升级(原创 2016-12-12 12:15:13 · 1426 阅读 · 0 评论 -
java.lang.Void类涉猎
在一次源码查看ThreadGroup的时候,看到一段代码,为以下: [java] view plain copy /* * @throws NullPointerException if the parent argument is {@code null} * @throws Security转载 2016-12-12 12:23:17 · 289 阅读 · 0 评论 -
java String.split丢失结尾空字符串的问题
Java中的split函数用于将字符串分割为字符数组是很方便的,但由于不是很熟悉,犯了错误如下:String strtest = "1,2,";String arry[] = strtest.split(",");这样得到的数组元素个数只是2两个,为什么呢,最后一个","后没有内容,它没有作为空字符串成为第三个数组元素,结尾的空字符串被丢弃了!这个函数还有另一种转载 2016-12-12 12:26:11 · 1045 阅读 · 0 评论 -
Arrays.asList注意点
最近代码中需要对两个数组求交,想当然便用到了List中的retainAll函数,但要将将数组转换成list。代码如下:String[] abc = new String[] { "abc", "acd", "add" };String[] abd = new String[] {"acd", "cd", "de"};List abcList = Arrays.asList(ab转载 2016-12-12 12:28:33 · 399 阅读 · 0 评论 -
String.getBytes()
在Java中,String的getBytes()方法是得到一个操作系统默认的编码格式的字节数组。这个表示在不通OS下,返回的东西不一样! String.getBytes(String decode)方法会根据指定的decode编码返回某字符串在该编码下的byte数组表示,如 byte[] b_gbk = "中".getBytes("GBK"); byte[] b_utf8转载 2016-12-12 12:35:20 · 341 阅读 · 0 评论 -
Java double 相乘的小问题记录
看下面的一段代码的运行结果:[java] view plain copy public class TestDouble { public static void main(String[] args) { double d =538.8; System.out.println(d*100)原创 2016-12-12 14:20:48 · 693 阅读 · 0 评论 -
JAVA中Long与Integer比较容易犯的错误
今天使用findbugs扫描项目后发现很多高危漏洞,其中非常常见的一个是比较两个Long或Integer时直接使用的==来比较。 其实这样是错误的。因为Long与Ineger都是包装类型,是对象。 而不是普通类型long与int , 所以它们在比较时必须都应该用equals,或者先使用longValue()或intValue()方法来得到他们的基本类型的值然后使用==比较也是原创 2016-12-12 14:23:21 · 408 阅读 · 0 评论 -
深入理解Java:SimpleDateFormat安全的时间格式化
想必大家对SimpleDateFormat并不陌生。SimpleDateFormat 是 Java 中一个非常常用的类,该类用来对日期字符串进行解析和格式化输出,但如果使用不小心会导致非常微妙和难以调试的问题,因为 DateFormat 和 SimpleDateFormat 类不都是线程安全的,在多线程环境下调用 format() 和 parse() 方法应该使用同步代码来避免问题。下面我们通转载 2016-12-12 14:26:36 · 156 阅读 · 0 评论 -
JAVA获取同一路径下所有子类或接口实现类
整个测试代码如下:Java代码 package find; import java.io.File; import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.List; impo转载 2016-12-12 14:29:10 · 436 阅读 · 0 评论 -
在spring的bean中注入内部类
在spring中注入内部类,有可能会遇到如下异常信息:2014-5-14 21:52:45 org.springframework.context.support.AbstractApplicationContext prepareRefresh信息: Refreshing org.springframework.context.support.ClassPathXmlApplication原创 2016-12-12 14:32:23 · 1130 阅读 · 0 评论 -
Java 输出日历格式
[java] view plain copyprint?package com.wonders.task.sample.main; /** * */ import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.ut原创 2016-12-12 14:34:33 · 911 阅读 · 0 评论 -
JAVA字符串格式化 String.format()的使用
常规类型的格式化String类的format()方法用于创建格式化的字符串以及连接多个字符串对象。熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处。format()方法有两种重载形式。format(String format, Object... args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串。format(Lo原创 2016-12-12 14:39:10 · 351 阅读 · 0 评论 -
JAVA中Collections.sort()实现List排序的公共方法和自定义方法
本文是受开源中国中的一篇文章启发而写(找不到连接了,所以暂时木法贴出来,一旦找到立马贴出来),个别内容参考了开源中国会员的讨论,感谢!1.Java提供的默认list排序方法主要代码:?123456789101112131415转载 2016-12-12 14:42:03 · 372 阅读 · 0 评论 -
用java获取本机IP地址
在网上找了几个用java获取本机IP地址的代码,发现都少都有些不完美,自己整理了一下.突然之间很想把自己的IP地址给获取了,虽然用系统自带命令ipconfig可以得到,但自己想写一个程序获取一下,到网上搜索了一下java获取本机IP地址的方法,结果居然发现没有一个是可以用的.这些人闭着眼睛写程序,写完了就往网上发,也不测试一下,害的我以为自己RP问题,老是获取不到正确的IP地址,强烈谴责!原创 2016-12-12 14:44:05 · 392 阅读 · 0 评论 -
Java Double相加出现的怪事
问题的提出: 编译运行下面这个程序会看到什么[java] view plaincopypublic class test { public static void main(String args[]) { System.out.println(0.05 + 0.01);原创 2016-12-12 14:45:54 · 245 阅读 · 0 评论 -
Java Field 详解
一.主要方法getType(): 获取属性声明时类型对象(返回class对象)getGenericType() : 返回属性声的Type类型getName() : 获取属性声明时名字getAnnotations() : 获得这个属性上所有的注释getModifiers() : 获取属性的修饰isEnumConstant() : 判断这个属转载 2016-12-12 14:48:50 · 569 阅读 · 0 评论 -
Java 中int与byte数组转换详解
1、与运算符的理解(&): 参加运算的两个数据,按二进位进行“与”运算。如果两个相应的二进位都为1,则该位的结果值为1,否则为0。即 0&0=0;0&1=0;1&0=0;1&1=1;例子:int x = 62255550; y =0xff; 转二进制:x = 62255550 = 11101101011111000110111110;y转载 2016-12-12 14:51:20 · 303 阅读 · 0 评论 -
java中byte数组与int类型的转换(两种方式
Java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送、者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形int转换成byte数组,同时如何把一个长度为4的byte数组转换为int类型。下面有两种方式。 [java] view plaincopy转载 2016-12-12 14:53:07 · 305 阅读 · 0 评论 -
java获取当前操作系统的信息
从网上收集的一些关于Java获取操作系统信息的方法,现在总结一下:1获取本机的IP地址:Java代码 private static String getIpAddress() throws UnknownHostException { InetAddress address = InetAddress.getLocalHost();转载 2016-12-12 14:54:40 · 309 阅读 · 0 评论 -
Java 将字节数组转化为16进制的多种方案
很多时候我们需要将字节数组转化为16进制字符串来保存,尤其在很多加密的场景中,例如保存密钥等。因为字节数组,除了写入文件或者以二进制的形式写入数据库以外,无法直接转为为字符串,因为字符串结尾有\0,当然肯定还有其他原因。下面提供几种Java中使用的方案:方案一:直接利用BigInteger的方法,应该是最简单的方案了。[java] view plain转载 2016-12-12 14:57:56 · 283 阅读 · 0 评论 -
java中byte转换int时为何与0xff进行与运算
在剖析该问题前请看如下代码public static String bytes2HexString(byte[] b) { String ret = ""; for (int i = 0; i String hex = Integer.toHexString(b[ i ] & 0xFF); if (hex.length() == 1) { hex = '转载 2016-12-12 14:59:49 · 178 阅读 · 0 评论 -
asyn4j -- 异步方法调用框架
asyn4j 是一个java异步方法调用框架,基于消费者与生产者模式。包括了异步方法执行,异步回调执行,异步工作缓存模块.支持Spring. 让我们写异步方法不再写很多的相关多线程代码。用asyn4j轻松搞定异步方法调用.提高程序的响应能力. 设计图 1.调用普通方法 主方法 Java代码 public static void转载 2016-12-12 15:02:00 · 588 阅读 · 0 评论 -
深入研究Java类加载机制
类加载是Java程序运行的第一步,研究类的加载有助于了解JVM执行过程,并指导开发者采取更有效的措施配合程序执行。研究类加载机制的第二个目的是让程序能动态的控制类加载,比如热部署等,提高程序的灵活性和适应性。 一、简单过程 Java程序运行的场所是内存,当在命令行下执行:java HelloWorld命令的时候,JVM会将HelloWorld.class加载到内存中,并转载 2016-12-12 15:02:55 · 124 阅读 · 0 评论 -
Java ClassLoader加载.jar
程序如下:[java] view plaincopypackage yerasel; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFou转载 2016-12-12 15:04:23 · 228 阅读 · 0 评论 -
Java Class的热替换 自定义ClassLoader加载.class
本文是java热替换的实验,参考了Java 类的热替换 —— 概念、设计与实现http://www.ibm.com/developerworks/cn/java/j-lo-hotswapcls/index.html之前的错误是,没有集成ClassLoader,而是直接使用了[java] view plaincopyclassl转载 2016-12-12 15:05:53 · 356 阅读 · 0 评论 -
Java 删除文件或文件夹
[java] view plain copyprint?package book.io; import java.io.File; /** * * @author XWZ * 2007-11-27 * 删除文件或目录 */ public class DeleteFileUtil {原创 2016-12-12 15:07:26 · 180 阅读 · 0 评论 -
Java transient关键字
Volatile修饰的成员变量在每次被线程访问时,都强迫从主内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到主内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。 Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。 这样当多个线程转载 2016-12-12 15:08:58 · 142 阅读 · 0 评论 -
JAVA中clone方法详解
为了理解Java的clone,有必要先温习以下的知识。 java的类型,java的类型分为两大类,一类为primitive,如int,另一类为引用类型,如String,Object等等。 java引用类型的存储,java的引用类型都是存储在堆上的。 Java代码 1. public class B { 2. int a; 3. String b原创 2016-12-12 15:10:33 · 223 阅读 · 0 评论 -
Java开发常用工具类
[java] view plain copyprint?package com.cucpay.tradeportal.util; import java.io.UnsupportedEncodingException; import java.lang.reflect.Field; import java.net.URLDecoder;转载 2016-12-12 15:47:23 · 1123 阅读 · 0 评论 -
JAVA实现快速排序
快速排序的基本思想: 通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分关键字小,则分别对这两部分继续进行排序,直到整个序列有序。 先看一下这幅图:把整个序列看做一个数组,把第零个位置看做中轴,和最后一个比,如果比它小交换,比它大不做任何处理;交换了以后再和小的那端比,比它小不交换,比他大交换。这样循环往复原创 2016-12-12 16:54:21 · 145 阅读 · 0 评论 -
LinkedBlockingQueue
LinkedBlockingQueue是一个基于已链接节点的、范围任意的blocking queue的实现。 此队列按 FIFO(先进先出)排序元素。队列的头部 是在队列中时间最长的元素。队列的尾部 是在队列中时间最短的元素。 新元素插入到队列的尾部,并且队列检索操作会获得位于队列头部的元素。链接队列的吞吐量通常要高于基于数组的队列, 但是在大多数并发应用程序中转载 2016-12-12 16:56:15 · 190 阅读 · 0 评论 -
轻松搞定面试中的二叉树题目
树是一种比较重要的数据结构,尤其是二叉树。二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子),并且二叉树的子树有左右之分,其次序不能任意颠倒。二叉树是递归定义的,因此,与二叉树有关的题目基本都可以用递归思想解决,当然有些题目非递归解法也应该掌握,如非递归遍历节点等等。本文努力对二叉树相关题目做一个较全的整理总结,希望对找工作的同学有所帮助。原创 2016-12-12 17:00:18 · 167 阅读 · 0 评论 -
java实现二叉树的构建以及3种遍历方法
1.树的构建方法 2.具体代码 Java代码 package tree; import java.util.LinkedList; import java.util.List; /** * 功能:把一个数组的值存入二叉树中,然后进行3种方式的遍历 * * 参考资料0:数据结构(C语言版)严蔚敏原创 2016-12-12 17:02:20 · 454 阅读 · 0 评论 -
归并排序
归并排序(Merge)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合原创 2016-12-12 17:03:51 · 180 阅读 · 0 评论 -
Java排序总结
基于下面几个方面来比较各个排序算法的优劣:时间复杂度,空间复杂度,稳定性,适用场景排序算法时间复杂度空间复杂度稳定性适用场景直接选择排序O(n^2)O(1)不稳定时间效率不高,但是空间效率很高,算法实现比较简单堆排序O(nlogn),底数为2O(1)不稳定时间效率很高,但是不稳定冒泡排序原创 2016-12-12 17:05:02 · 215 阅读 · 0 评论 -
搜狗笔试题目:4*5的棋盘,在左下角的格子移动到右上角的格子,求有多少种移动方法
4*5的棋盘,在左下角的格子移动到右上角的格子,求有多少种移动方法。给定一个m*n的格子或棋盘,问从左下角走到右上角的走法总数(每次只能向右或向上移动一个方格边长的距离)解答:把棋盘看做二维坐标,设f(m,n)代表从坐标(0,0)到坐标(m,n)的移动方法,则f(m,n)=f(m-1,n)+f(m,n-1)初始为f(0,0)=0,f(0,1)转载 2016-12-12 17:06:43 · 1621 阅读 · 0 评论 -
程序员应该了解的查找(java实现)
相比较排序来说,今天所说的查找就简单多了,今天我们先来说:1, 顺序查找2, 折半查找 一、顺序查找的基本思想:从表的一端开始,顺序扫描表,依次将扫描到的结点关键字和给定值(假定为a)相比较,若当前结点关键字与a相等,则查找成功;若扫描结束后,仍未找到关键字等于a的结点,则查找失败。 说白了就是,从头到尾,一个一个地比,找着相同的就成功,找不转载 2016-12-12 17:11:04 · 295 阅读 · 0 评论 -
Timing Wheel 定时轮算法
最近自己在写一个网络服务程序时需要管理大量客户端连接的,其中每个客户端连接都需要管理它的 timeout 时间。通常连接的超时管理一般设置为30~60秒不等,并不需要太精确的时间控制。另外由于服务端管理着多达数万到数十万不等的连接数,因此我们没法为每个连接使用一个Timer,那样太消耗资源不现实。最早面临类似问题的应该是在操作系统和网络协议栈的实现中,以TCP协转载 2016-12-12 17:12:37 · 1850 阅读 · 0 评论