java
文章平均质量分 91
码农Academy
码农Academy,专注分享Java技术干货,包括Java基础、Spring Boot、Spring Cloud、Mysql、Redis、Elasticsearch、中间件、架构设计、面试题、程序员攻略等。
展开
-
拥抱Guava之集合操作
深入了解Google Guava库的集合操作功能,本文介绍了其强大的特性,包括不可变集合和高效工具类。通过实例演示,为Java开发者提供全面的集合操作解决方案原创 2024-01-10 19:00:14 · 1134 阅读 · 0 评论 -
拥抱Guava之字符串操作
本文深度剖析Guava库的字符串处理工具,从基础的判空和拆分到高级的不可变字符串。详解Splitter、Joiner和CharMatcher等工具的使用,强调Guava在大规模数据处理上的性能优势。通过实例和性能考虑,引导开发者充分利用Guava,提高代码效率和可维护性。原创 2024-01-10 18:58:40 · 1143 阅读 · 0 评论 -
Java虚拟机类加载机制探究:生命周期、初始化、使用与验证
深度解析Java虚拟机中类的生命周期,包括加载、验证、初始化等阶段。强调主动和被动使用触发条件,总结类加载器类型和获取方法。原创 2024-01-10 18:25:27 · 909 阅读 · 0 评论 -
Java线程池最全详解
Java线程池是多线程编程中的重要工具,能够有效管理和复用线程,提高系统性能和资源利用率。本文深入探讨了线程池的基础概念、工作原理、参数配置、自定义以及使用示例,并强调了注意事项。原创 2024-01-10 18:23:03 · 1578 阅读 · 0 评论 -
公司新来的同事给出了if-else优化的8种方案
优化庞大if-else语句的多种方法,包括提前return、枚举、Optional、表驱动、策略模式+工厂模式、规则引擎等,强调选择最适合项目的方案,提高代码清晰性、灵活性和维护性。原创 2024-01-10 17:56:46 · 1478 阅读 · 0 评论 -
简述DCL失效原因,解决方法
DCL单例模式针对延迟加载法的同步实现所产生的性能低的问题,我们可以采用DCL,即双重检查加锁(Double Check Lock)的方法来避免每次调用getInstance()方法时都同步。实现方式如下:public class LazySingleton { private int someField; private static LazySingleton instance;转载 2017-04-22 22:52:11 · 5280 阅读 · 4 评论 -
Java内存模型
Java的内存模型JMM(Java Memory Model)JMM主要是为了规定了线程和内存之间的一些关系。根据JMM的设计,系统存在一个主内存(Main Memory),Java中所有实例变量都储存在主存中,对于所有线程都是共享的。每条线程都有自己的工作内存(Working Memory),工作内存由缓存和堆栈两部分组成,缓存中保存的是主存中变量的拷贝,缓存可能并不总和主存同步,也就是缓存中变量转载 2017-04-22 22:46:59 · 1929 阅读 · 0 评论 -
Java中的泛型(Generic)
一、泛型作用* JDK5中的泛形允许程序员在编写集合代码时,就限制集合的处理类型,从而把原来程序运行时可能发生问题,转变为编译时的问题,以此提高程序的可读性和稳定性(尤其在大型程序中更为突出)。* 注意:泛型是提供给javac编译器使用的,它用于限定集合的输入类型,让编译器在源代码级别上,即挡住向集合中插入非法数据。但编译器编译完带有泛形的java程序后,生成的class文件中将不再带有泛形信息,原创 2017-04-22 22:25:44 · 488 阅读 · 0 评论 -
Java中的异常
异常: 子类继承父类的方法重写时,子类抛出异常不能多于父类抛出的异常。子类抛出的异常需要更具体。也就是父类同名方法子异常。异常的父类都是:throwable 子类:error,exception;1、异常(throwable):程序运行过程中出现不正常的现象。 2、子类;error(针对进程,导致jvm停止)、Exception(针对线程) 3、非检查异常(非受检异常、为检查异常)运行时异常原创 2017-04-22 22:19:25 · 2524 阅读 · 1 评论 -
Java虚拟机的组成
Java虚拟机主要分为以下五个区: 一、方法区: 1. 有时候也成为永久代,在该区内很少发生垃圾回收,但是并不代表不发生GC,在这里进行的GC主要是对方法区里的常量池和对类型的卸载 2. 方法区主要用来存储已被虚拟机加载的类的信息、常量、静态变量和即时编译器编译后的代码等数据。 3. 该区域是被线程共享的。 4. 方法区里有一个运行时常量池,用于存放静态编译产生的字面量和符号引用。该常量池原创 2017-04-22 22:56:54 · 5634 阅读 · 0 评论 -
Java中的IO流
1、文件流:I/O流 Java中文件表示:d:/../…或者d:\..\.. File 类没有无参构造方法. 2.i/o流的分类: 输入流,输出流 字节流,字符流 传输的数据单位是字节,也意味着字节流能够处理任何一种文件。 字节流的组成: 类inputStream,子类:fileinputStream outputStream,子类:fileoutputStream InputS原创 2017-04-23 17:25:29 · 1776 阅读 · 0 评论 -
Java中的NIO实现原理
一.java NIO 和阻塞I/O的区别 1. 阻塞I/O通信模型 假如现在你对阻塞I/O已有了一定了解,我们知道阻塞I/O在调用InputStream.read()方法时是阻塞的,它会一直等到数据到来时(或超时)才会返回;同样,在调用ServerSocket.accept()方法时,也会一直阻塞到有客户端连接才会返回,每个客户端连接过来后,服务端都会启动一个线程去处理该客户端的请求。阻塞I转载 2017-04-23 17:30:07 · 3362 阅读 · 0 评论 -
JVM调优
一、堆大小设置 JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。 典型设置: 1. java -Xmx3550m转载 2017-04-23 17:36:57 · 5996 阅读 · 1 评论 -
Java中的垃圾回收
虚拟机中的共划分为三个代:年轻代(Young Generation)、年老点(Old Generation)和持久代(Permanent Generation)。其中持久代主要存放的是Java类的类信息,与垃圾收集要收集的Java对象关系不大。年轻代和年老代的划分是对垃圾收集影响比较大的。年轻代: 所有新生成的对象首先都是放在年轻代的。年轻代的目标就是尽可能快速的收集掉那些生命周期短的对象转载 2017-04-23 17:38:22 · 2562 阅读 · 0 评论 -
基于Apache的poi对导出Excel封装的Util
主要利用了Java反射,导出时不需要在关注单元格、单元格对应的描述、以及单元格的值之间的对应关系。 util方法如下: /** * 导出发票信息到excel * * @param dataList 发票信息list * @param response * @param title 工作表标题 * @param co...原创 2018-05-13 22:36:31 · 979 阅读 · 1 评论 -
Java中的String,StringBuffer,StringBuilder区别
String(大姐,出生于JDK1.0时代) 不可变字符序列 StringBuffer(二姐,出生于JDK1.0时代) 线程安全的可变字符序列 StringBuilder(小妹,出生于JDK1.5时代) 非线程安全的可变字符序列 String源码:public final class String implements java.io.Serializable, Co转载 2017-04-22 22:12:54 · 3319 阅读 · 2 评论 -
Java中的equals和hashCode
equals()和hashCode()方法是用来在同一类中做比较用的,尤其是在容器里如set存放同一类对象时用来判断放入的对象是否重复。 这里我们首先要明白一个问题: equals()相等的两个对象,hashcode()一定相等,equals()不相等的两个对象,却并不能证明他们的hashcode()不相等。换句话说,equals()方法不相等的两个对象,hashCode()有可能相等。(我的理转载 2017-04-22 22:10:16 · 1994 阅读 · 0 评论 -
Java中的值传递与引用传递
1.基本类型和引用类型在内存中的保存 Java中数据类型分为两大类,基本类型和对象类型。相应的,变量也有两种类型:基本类型和引用类型。 基本类型的变量保存原始值,即它代表的值就是数值本身; 而引用类型的变量保存引用值,”引用值”指向内存空间的地址,代表了某个对象的引用,而不是对象本身, 对象本身存放在这个引用值所表示的地址的位置。基本类型包括:byte,short,int,long,char,转载 2017-04-22 22:06:19 · 2657 阅读 · 0 评论 -
反射
反射原创 2016-08-27 20:17:53 · 476 阅读 · 0 评论 -
jdk1.7实现ftp上传文件
jdk1.7实现ftp上传文件原创 2016-09-01 00:27:51 · 712 阅读 · 0 评论 -
java不解压读取linux服务器上的zip以及tar.gz压缩文件
java不解压直接读取linux的服务器上的zip文件以及tar.gz文件原创 2016-09-01 14:27:27 · 7668 阅读 · 4 评论 -
Java四种内部类详解
原文地址:http://blog.csdn.net/qq435757399/article/details/7037007 一般来说,有4中内部类:成员内部类、静态内部类、局部内部类、匿名内部类。 一.成员内部类:成员内部类没有用static修饰且定义在在外部类类体中。 1.成员内部类中的方法可以直接使用外部类的实例变量和实例方法。 2.在成员内部类中可以直接用内部类创建对象转载 2016-11-17 12:08:38 · 328 阅读 · 0 评论 -
JAVA中堆和栈的区别
一、在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。 堆内存用来存放由new创建的对象和数组。 在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。 在堆中产生了一个数组或对象后转载 2016-11-30 17:12:45 · 241 阅读 · 0 评论 -
java获取两个字符串日期之间的时间间隔天数,以及遍历这些天数
public static List<String> getBetweenDays(String stime,String etime){ SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); Date sdate=null; Date eDate=null;原创 2016-11-15 11:42:32 · 6668 阅读 · 3 评论 -
类加载器——ClassLoader
一、java虚拟机与程序的生命周期 在如下几种情况之下,java虚拟机将结束生命周期: 1、执行了System.exit()方法 2、程序正常执行结束 3、程序在执行过程中遇到了异常或者错误而异常终止 4、由于操作系统用出现错误而导致java虚拟机进程终止 二、类的加载,链接,初始化 1、加载:查找并加载类的二进制数据 2、连接: (1)验证:确保被加载的类的正确性(验证字原创 2016-11-28 09:33:22 · 3271 阅读 · 0 评论 -
类加载器的父亲委托机制深度详解
一、类加载器 1、父亲委托机制(Parent Delegation) 类加载器用来把类加载到Java虚拟机中。从JDK1.2版本开始,类的加载过程采用父亲委托机制,这种机制能够更好的保证java平台的安全,在此委托机制中,除了Java虚拟机自带的根类加载器外,其余的类加载器都有且只有一个父类加载器。当java程序请求加载器loader加载Sample类时,loader首先委托自己的父原创 2016-11-22 11:56:01 · 4969 阅读 · 0 评论 -
jdk8下对String类型的参数switch()时编译错误
今天在写一个排序方法时,对方法传过来的String类型的type参数进行switch判断时,出现了一个编译错误: 本人的jdk是1.8 的,查资料说eclipse的编译环境不是1.8,,,这个不知道怎么修改。但是可以把String类型的type修改一个枚举类类型,就可以解决: 编译通过。。。。原创 2016-12-19 10:39:01 · 7048 阅读 · 0 评论 -
List,map排序
一、List排序 List排序要求每个元素必须实现comparable接口,具体Java的8中包装类型都已经实现了该接口。 两种方法:Collections.sort(Collection c) Collections.sort(Collection c,Comparator cmp) 对汉字进行按照拼音排序 Collections.sort(list,Collator.getInstan原创 2016-12-20 14:29:58 · 881 阅读 · 0 评论 -
多线程六种状态
线程可以有如下六种状态: 1、New(新创建) 2、Runable(可运行) 3、Blocked(被阻塞) 4、Waiting(等待) 5、Timed waiting(计时等待) 6、terminated(被终止) 状态图如图: 一、新创建线程 当用new操作符创建一个新线程时,如new Thread(thread),改线程还有没有开始运行,此时他的状态是new。当一个线原创 2017-03-29 01:12:47 · 585 阅读 · 1 评论 -
实现Java线程同步的五种方法
线程同步概念 Java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查),将会导致数据不明确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用,从而保证了该变量的唯一性和准确性。 一、 同步方法 使用synchronized关键字修饰的方法。由于java的每个对象都有一个内置锁,当用关键字修饰此方法时,内置锁会保转载 2017-03-29 01:16:09 · 7634 阅读 · 0 评论 -
生产者/消费者问题的多种Java实现方式
生产者消费者问题是研究多线程程序时绕不开的经典问题之一,它描述是有一块缓冲区作为仓库,生产者可以将产品放入仓库,消费者则可以从仓库中取走产品。解决生产者/消费者问题的方法可分为两类: (1)采用某种机制保护生产者和消费者之间的同步; (2)在生产者和消费者之间建立一个管道。 第一种方式有较高的效率,并且易于实现,代码的可控制性较好,属于常用的模式。第二种管道缓冲区不易控制,被传输数据对象不易于转载 2017-03-29 01:19:11 · 2279 阅读 · 0 评论 -
java多线程: 子线程循环10次,主线程接着循环100次,如此循环50次
package com.view04.alternate.print;/** * 子线程循环10次,主线程接着循环100次,如此循环50次的问题 * @author zhaojw_420 * */public class AlternateThread { public static void main(String[] args) { final Bussies bussi原创 2017-04-01 00:21:24 · 4001 阅读 · 0 评论 -
JDK 1.8下内部类的问题
今天在复习内部类的时候,发现了两个问题: 第一个是方法内部类: JDK 1.7以前,方法内部类中,方法的参数和局部变量,必须有final修饰才可以访问。但是我今天用JDK1.8后发现,貌似不需要用final修饰了。。。public class MethodInnerClass { private String str="我是外部类的成员变量"; private String out原创 2017-04-10 23:06:50 · 3643 阅读 · 2 评论