
Java基础
文章平均质量分 59
zero__007
这个作者很懒,什么都没留下…
展开
-
Java获取泛型T的类型 T.class
直接上代码:public interface CrudRepository<T> { Iterable<T> findAll();}public class BaseImpl <T> implements CrudRepository<T> { @Override public Iterable<T> findAll() { Class<T> c = getTClass();原创 2022-03-03 21:09:45 · 8109 阅读 · 0 评论 -
数据存储引擎结构介绍
转载自:https://zhuanlan.zhihu.com/p/247953550介绍在存储系统的设计中,存储引擎属于底层数据结构,直接决定了存储系统所能够提供的性能和功能。常见存储算法结构涵盖:哈希存储,B 、B+、B*树存储,LSM树存储引擎,R树,倒排索引,矩阵存储,对象与块,图结构存储等等。哈希存储引擎是哈希表的持久化实现,一般用于键值类型的存储系统。而大多传统关系型数据库使用索引来辅助查找数据,用以加速对数据库数据的访问。考虑到经常需要范围查找,因此其索引一般使用树型结构。譬如MySQL、转载 2022-01-29 14:33:17 · 962 阅读 · 0 评论 -
Java日常开发会遇到的坑(转载)
转载自:https://mp.weixin.qq.com/s/FY5rlDjxcCNqnCJbnULwSA1. 六类典型空指针问题包装类型的空指针问题级联调用的空指针问题Equals方法左边的空指针问题ConcurrentHashMap 这样的容器不支持 Key 和 Value 为 null。集合,数组直接获取元素对象直接获取属性1.1包装类型的空指针问题public class NullPointTest { public static void main(String[]转载 2020-12-29 14:17:23 · 409 阅读 · 0 评论 -
编解码
Base64建议使用org.apache.commons.codec.binary.Base64类库。注意标准和url safe的base64。DES /** * DES 加密 * @param password * @param data * @return */ @SneakyThrows public static byte[] encrypt(String password, String data) {原创 2020-11-20 19:51:58 · 121 阅读 · 0 评论 -
BigDecimal 精确计算的坑
转载自:https://blog.csdn.net/chenssy/article/details/105760343https://juejin.im/post/5e86085ce51d4547153d0769前言通常商业计算涉及到小数的,我们都会使用 BigDecimal 来完成加减乘除运算。但是利用 BigDecimal 进行浮点数精确运算时,需要注意使用正确的方法。如果方法选择不当,依旧会发生错误。发现问题 public class Test { public static v转载 2020-07-27 15:28:07 · 421 阅读 · 0 评论 -
自增序列生成
生成毫秒数+3位自增: private static AtomicLong sequence = new AtomicLong(); public static String generSeq() { for (; ; ) { long oldSeq = sequence.get(); long curMS = System.currentTimeMillis() * 1000; long newSe原创 2020-05-26 11:38:45 · 709 阅读 · 0 评论 -
forEach无法跳出循环的解决思路
如果使用过forEach方法来遍历集合,会发现在lambda表达式中的return并不会终止循环,这是由于lambda的底层实现导致的,看下面的例子:public static void main(String[] args) { List<String> list = Lists.newArrayList(); list.add("a"); list.a...原创 2020-01-13 20:08:02 · 1047 阅读 · 0 评论 -
快速幂
顾名思义,快速幂就是快速算底数的n次幂。其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高。 假设求a^b,按照朴素算法就是把a连乘b次,这样一来时间复杂度是O(N),快速幂能做到O(log₂N)。 它的原理如下:把b转换成二进制数,该二进制数第i位的权为2^(i-1),例如当b==11时,11的二进制是1011,11 = 2³×1 + 2²原创 2017-05-23 19:49:27 · 290 阅读 · 2 评论 -
Java 不同压缩算法的性能比较
转载自:https://mp.weixin.qq.com/s/df1y0KbMShZveTKNBJ3aPA本文将会对常用的几个压缩算法的性能作一下比较。进行比较的算有:JDK GZIP ——这是一个压缩比高的慢速算法,压缩后的数据适合长期使用。JDK中的java.util.zip.GZIPInputStream / GZIPOutputStream便是这个算法的实现。JDK defla...转载 2018-04-01 22:25:51 · 15603 阅读 · 0 评论 -
查找结构(二叉树、红黑树、B树、B+树、LSM)
转载自:https://blog.csdn.net/laiwenqiang/article/details/40893157 https://www.cnblogs.com/bonelee/p/6244810.html二叉查找树 二叉查找树(BST)又叫二叉排序树,二叉搜索树。二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: 若左子树不空,则左子树...转载 2018-09-06 21:26:36 · 1376 阅读 · 0 评论 -
通用并发对象池的实现
转载自:http://it.deepinmind.com/java/2014/02/28/concurrent-object-pooling-in-java.html 这篇文章主要讨论下如何在Java里实现一个对象池,关键是设计思路。 在开始写代码前,先来梳理下一个对象池需要完成哪些功能:如果有可用的对象,对象池应当能返回给客户端。 客户端把对象放回池里后,可以转载 2017-04-11 19:38:44 · 1127 阅读 · 0 评论 -
Java枚举类型的原理
转载自:http://blog.csdn.net/tanggao1314/article/details/53150298public enum Color{ RED{ public String getName(){ return "红色"; } } ,GREEN{ public String getName(){ return "绿色"; } }转载 2017-02-19 16:58:42 · 551 阅读 · 0 评论 -
annotation
转载自:http://blog.csdn.net/pzw_0612/article/details/54089793 http://blog.csdn.net/pzw_0612/article/details/54089919元注解: 元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来转载 2017-02-19 16:51:16 · 375 阅读 · 0 评论 -
wait-notify机制
转载自:http://www.ticmy.com/?p=219 http://www.ticmy.com/?p=394 在调用wait、notify的时候,必须先持有锁,且状态变量须由该锁保护,而内置锁对象与内置条件队列对象又是同一个对象。也就是说,要在某个对象上执行wait,notify,先必须锁定该对象,而对应的状态变量也是由该对象锁保护的。如果在调用wait、notify的时候没有转载 2016-11-20 15:25:06 · 605 阅读 · 0 评论 -
serialVersionUID的作用
转载自:http://blog.csdn.net/zzjjiandan/article/details/32336079 凡是实现Serializable接口的类都有一个表示序列化版本标识符的静态变量: private static final long serialVersionUID = …; 序列化运行时使用一个称为serialVersionUID转载 2016-09-27 21:08:37 · 1310 阅读 · 0 评论 -
instanceof与isAssignableFrom
instanceof 用于检 查左边的实例(不能是基础变量)是不是右边的类或其之类。如果被测对象是null值,则测试结果总是false。Integer i = new Integer(1);// int i = 0; error!System.out.println(i instanceof Integer); // trueSystem.out.println(i instan...原创 2018-05-03 23:13:19 · 207 阅读 · 0 评论 -
Java的byte数组和Integer、Long互转
byte[] -> intint result = ByteBuffer.wrap(bytes).getInt();或者: public static byte[] intToBytes(int i) { byte[] targets = new byte[4]; targets[3] = (byte) (i & 0x...原创 2018-07-12 22:50:11 · 12230 阅读 · 0 评论 -
jce异常
Caused by: java.lang.SecurityException: Can not initialize cryptographic mechanismat javax.crypto.JceSecurity.(JceSecurity.java:93)... 33 moreCaused by: java.lang.SecurityException: Cannot locate p...原创 2018-07-06 23:20:29 · 4507 阅读 · 1 评论 -
Process#waitFor()阻塞问题
有时需要在程序中调用可执行程序或脚本命令:Process process = Runtime.getRuntime().exec(shPath);int exitCode = process .waitFor(); Runtime.getRuntime()返回当前应用程序的Runtime对象,该对象的exec()方法指示Java虚拟机创建一个子进程执行指定的可执行程序,并返回与...原创 2019-04-02 20:01:15 · 5224 阅读 · 0 评论 -
Java反射
JAVA反射机制是在运行状态中,对于任意一个类,都能够得到这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 简而言之,反射就是可以通过名称来得到对象(类,属性,方法)的技术。一.获取类对应的Class对象getClass()方式: Object类中的方法,每个类都拥有此方法,如:Str...原创 2019-06-08 17:09:51 · 205 阅读 · 0 评论 -
Java编程时值得注意的地方
01.尽量避免随意使用静态变量 当某个对象被定义为stataic变量所引用,那么GC通常是不会回收这个对象所占有的内存,如:public class A{ static B b = new B();} 此时静态变量b的生命周期与A类同步,如果A类不会卸载,那么b对象会常驻内存,直到程序终止。 02.尽量避免过多过常的创建java对象 尽量避免在经常调用的方法,...原创 2019-06-11 22:05:35 · 288 阅读 · 0 评论 -
面向对象设计的 SOLID 原则
转载自:https://blog.csdn.net/yongwan5637/article/details/80482743文章目录单一责任原则(SRP)开放封闭原则(OCP)里氏替换原则(LSP)接口隔离原则(ISP)依赖倒置原则(DIP) 编程最基本的原则就是要追求高内聚和低耦合的解决方案和代码模块设计。SOLID 是面向对象设计5大重要原则的首字母缩写:SRP...转载 2019-07-22 12:09:50 · 496 阅读 · 0 评论 -
减少该死的 if else 嵌套
转载自:https://www.jianshu.com/p/57c065b124c4 写在前面 不知大家有没遇到过像“横放着的金字塔”一样的if else嵌套:if (true) { if (true) { if (true) { if (true) { if (true) { ...转载 2019-09-23 20:08:59 · 458 阅读 · 0 评论 -
+=与=..+..的区别
转载自:http://www.ticmy.com/?p=285在继续之前,来温故一点基础: 1、做基本运算(如+、-、*、/、<<、>>、>>>、~、^等),当两个操作数的类型是byte,short,char,int之一的时候,结果的类型是int; 2、做整数基本运算时,当一个操作数是long,结果是long; 3、不加任何修饰的整数字面值默认就是int类型。下面对上面的几点举例说转载 2016-11-03 20:28:58 · 529 阅读 · 0 评论 -
Java对象clone
转载自:http://blog.csdn.net/jdluojing/article/details/6963112Java里的clone分为: 浅复制(浅克隆): 浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。 深复制(深克隆): 深复制把要复制的对象所引用的对象都复制了一遍。 Java中对象的克隆,为了获取对象的一份拷贝,可以利用Object类转载 2015-09-10 18:02:43 · 418 阅读 · 0 评论 -
内部类的实例化
内部类分为两种,一种是静态内部类,一种是非静态内部类。 静态内部类不用产生外部类的实例化对象即可产生内部类的实例化对象,非静态内部类必须先产生外部类的实例化对象,才能产生内部类的实例化对象。示例:public class InnerClassTest { public static void main(String[] args) { // TODO Auto-g原创 2015-08-26 09:29:57 · 5907 阅读 · 0 评论 -
ShutdownHook
转载自:http://www.cnblogs.com/nexiyi/p/java_add_ShutdownHook.html 在线上Java程序中经常遇到进程程挂掉,一些状态没有正确的保存下来,这时候就需要在JVM关掉的时候执行一些清理现场的代码。Java中得ShutdownHook提供了比较好的方案。 JDK在1.3之后提供了Java Runtime.addShut...转载 2015-08-23 20:24:56 · 672 阅读 · 0 评论 -
类彩票选号算法
转载自: http://blog.csdn.net/lovingprince/article/details/2627759 彩票选号,例如36选7,从36个数字中随机选取7个,这在算法上如何实现呢? 最简单的想法就是,每次都从1~36随机选取一个数,一共选7次,不就可以了吗? 但这样会有一个问题——重复,彩票选号是不能重复的。 下面介绍一种算法转载 2015-07-08 19:05:10 · 5366 阅读 · 0 评论 -
WatchService文件监听
package com.zero.file;import java.io.IOException;import java.nio.file.*;import java.util.List;public class WatchServiceTest { public static void main(String[] args) throws Exception {原创 2016-09-04 11:06:47 · 1103 阅读 · 0 评论 -
重写hashCode()方法
一个好的散列函数通常倾向于"为不相同的对象产生不相等的散列码"。理想情况下,散列函数应该把集合中不相等的实例均匀地分布到所有可能地散列值上。 下面是一种简单的散列方法: 1、把某个非零的常数值,比如17,保存在一个名为result的int类型的变量中。2、对于对象中每个关键域f(指equals方法中涉及的每个域),完成以下步骤: a、为该域计算int类型...原创 2015-08-31 15:26:49 · 913 阅读 · 0 评论 -
Java中的逆变与协变
转载自:http://blog.csdn.net/z69183787/article/details/51598345看下面一段代码:// public final class Integer extends NumberNumber num = new Integer(1); List list = new ArrayList<>();list.add(new Integer转载 2016-08-18 22:25:45 · 8496 阅读 · 0 评论 -
深入理解Java对象序列化
转载自:http://www.blogjava.net/jiangshachina/archive/2012/02/13/369898.html1.什么是Java对象序列化使用Java对象序列化,在保存对象时,会把其状态保存为一组字节,在未来,再将这些字节组装成对象。必须注意地是,对象序列化保存的是对象的"状态",即它的成员变量。由此可知,对象序列化不会关注类中的静态变量。除了在持转载 2016-08-19 22:37:01 · 3499 阅读 · 0 评论 -
获取classpath和当前类的绝对路径
获取需要的资源的绝对路径(使用gradle构建的项目):1. Test.class.getResource("") 返回:file:/C:/Users/git/javatest/build/classes/main/test/2.Test.class.getResource("/") 返回:file:/C:/Users/git/javatest/build/clas原创 2016-04-23 10:32:31 · 8917 阅读 · 0 评论 -
BigInteger、BigDecimal、数字格式化
BigInteger与BigDecimal的目的是用来精确地表示大整数和小数,常用于商业计算中。BigInteger:支持任意精度的整数,可以精确地表示任意大小的整数值,同时在运算过程中不会丢失任何信息。BigDecimal:可以精确地表示任意精度的小数,同时在运算过程中不会丢失任何信息。BigInteger与BigDecimal都是不可变的(immutable)的,在进行每一步运原创 2016-05-05 21:33:16 · 12010 阅读 · 0 评论 -
int和Integer有什么区别?
Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java为每 一个基本数据类型都引入了对应的包装类型(wrapper class),int的包装类就是Integer,从Java 5开始引入了自动装箱/拆箱机制,使得二者可以相互转换。Java 为每个原始类型提供了包装类型: - 原始类型: boo转载 2016-04-25 21:10:08 · 8949 阅读 · 1 评论