Java
小柴的生活观
重来一次认真的阅读和写作!
展开
-
加密强随机数 SecureRandom 详解
加密强随机数 SecureRandom原创 2022-06-12 23:32:14 · 2199 阅读 · 0 评论 -
java Comparable和Comparator 比较 详解
Comparable : 对实现它的每个类的对象进行整体排序。若一个类实现 Comparable 接口,实现 Comparable 接口的类的对象的 List 列表 (或数组) 可以通过 Collections.sort (或 Arrays.sort) 进行排序。此外,实现 Comparable 接口的类的对象可以用作 “有序映射(如TreeMap)” 中的键或 “有序集合(TreeSet)” 中...原创 2018-03-11 17:30:12 · 173 阅读 · 0 评论 -
EhCache 详解
EhCache 是一个纯Java 进程内缓存框架,具有快速、精干等特点,是 Hibernate 中默认 CacheProvider。Ehcache 是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE 和 轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个 gzip缓存 servlet过滤器,支持REST和SOAP api等特点Spring 提供对缓...原创 2018-03-11 17:27:07 · 634 阅读 · 0 评论 -
Java RMI 详解
Java RMI 用于不同虚拟机之间的通信,这些虚拟机可以在不同的主机上也可以在同一个主机上。一个虚拟机中的对象调用另一个虚拟上中的对象的方法,只不过是允许被远程调用的对象要通过一些标志加以标识。这样做的特点如下 :优点 : 避免重复造轮子缺点 : 调用过程很慢,而且该过程是不可靠的,容易发生不可预料的错误,比如网络错误等在 RMI 中的核心是远程对象 (remote object),除了对象本身...原创 2018-03-11 17:25:35 · 3077 阅读 · 0 评论 -
Java Copy-On-Write容器 详解
Copy-On-Write 简称 COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容 Copy 出去形成一个新的内容然后再改,这是一种延时懒惰策略。从 JDK1.5 开始 Java并发包 里提供两个使用 CopyOnWrite 机制实现的并发容器,它们是 CopyOnWriteArrayList 和 CopyOnWr...原创 2018-03-15 08:43:09 · 1225 阅读 · 0 评论 -
Java SPI 详解
SPI 的全名为 Service Provider Interface,因为这个是针对厂商或者插件的,所以使用的比较少,主要使用的是 java.util.ServiceLoaderJava SPI 机制思想是 系统里抽象的各个模块,往往有很多不同的实现方案,比如日志模块的方案,xml解析模块、jdbc模块的方案等。在面向的对象的设计里,一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一...原创 2018-03-15 08:32:25 · 372 阅读 · 0 评论 -
Mac 卸载 JDK 详解
执行以下 JDKsudo rm -fr ~/Library/Application\ Support/Javasudo rm -rf /Library/Java/JavaVirtualMachines/jdk<version>.jdksudo rm -rf /Library/PreferencePanes/JavaControlPanel.prefPanesudo rm -fr /Li...原创 2018-02-13 21:31:04 · 2926 阅读 · 0 评论 -
Java synchronized 对象锁与类锁的区别、同步代码块与同步方法的区别 详解
java 内置锁 : 每个 java对象 都可以用做一个实现同步的锁,这些锁成为内置锁。线程进入同步代码块或方法的时候会自动获得该锁,在退出同步代码块或方法时会释放该锁。获得内置锁的唯一途径就是进入这个锁的保护的同步代码块或方法。java 内置锁是一个互斥锁,这就是意味着最多只有一个线程能够获得该锁,当 线程A 尝试去获得 线程B 持有的内置锁时,线程A 必须等待或者阻塞,直到 线程B 释放这个锁...原创 2018-03-07 09:33:26 · 1947 阅读 · 0 评论 -
Java 序列化 详解
序列化,简单来讲,就是以“流”的方式来保存对象,至于保存的目标地址,可以是文件,可以是数据库,也可以是网络,即通过网络将对象从一个节点传递到另一个节点。在 Java 的 I/O结构中,有 ObjectOutputStream 和 ObjectInputStream,它们可以实现将对象输出为二进制流,并从二进制流中获取对象,那为什么还需要序列化呢?这需要从 Java变量 的存储结构谈起,对Java来原创 2017-09-30 09:34:15 · 429 阅读 · 0 评论 -
Java 接口 详解
接口中的默认方法Java 8中允许接口中包含具有具体实现的方法,该方法称为“默认方法”,默认方法使用 default 关键字修饰默认方法不能直接调用,可以通过其实现类调用这个默认方法,默认方法接口中的默认方法接口默认方法的” 类优先” 原则若一个接口中定义一个默认方法,而另外一个父类或接口中又定义一个同名的方法时1> 选择父类中的方法。如果一个父类提供了具体的实现,原创 2017-09-29 17:25:04 · 450 阅读 · 0 评论 -
java 时间日期 详解
在 JDK1.8 之前都使用时将相关的操作存在多线程问题,可以通过 ThreadLocal 来解决public classDateFormatThreadLocal { private static final ThreadLocaldf = new ThreadLocal() { @Override protected原创 2017-09-29 17:01:11 · 580 阅读 · 0 评论 -
Java synchronized 对象锁与类锁的区别、同步代码块与同步方法的区别 详解
java 内置锁 : 每个 java对象 都可以用做一个实现同步的锁,这些锁成为内置锁。线程进入同步代码块或方法的时候会自动获得该锁,在退出同步代码块或方法时会释放该锁。获得内置锁的唯一途径就是进入这个锁的保护的同步代码块或方法。java 内置锁是一个互斥锁,这就是意味着最多只有一个线程能够获得该锁,当 线程A 尝试去获得 线程B 持有的内置锁时,线程A 必须等待或者阻塞,直到 线程B 释放这个锁...原创 2018-03-11 17:28:09 · 3566 阅读 · 0 评论 -
Java REPL工具 详解
产生背景 : 像 Python 和 Scala 之类的语言早就有交互式编程环境 REPL (read - evaluate - print - loop),以交互式的方式对语句和表达式进行求值。开发者只需要输入一些代码,就可以在编译前获得对程序的反馈。而之前的 Java 版本要想执行代码,必须创建文件、 声明类、 提供测试方法方可实现设计理念 : 即写即得、快速运行Java 9 中终于拥有 REP...原创 2018-03-11 17:29:26 · 1084 阅读 · 0 评论 -
MapStruct 详解
GitHub 访问地址 : https://github.com/mapstruct/mapstruct/使用例子 : https://github.com/mapstruct/mapstruct-examples MapStrcut与其它工具对比以及使用说明 : http://www.tuicool.com/articles/uiIRjai BeanUtils.copyPro...原创 2018-10-27 13:18:07 · 35732 阅读 · 4 评论 -
分布式重建缓存的并发冲突 详解
在分布式系统中,如果缓存服务在本地的 Ehcache 中都读取不到数据,此时需要重新到源头的服务中去拉去数据,拉取到数据之后,赶紧先给 Nginx 的请求返回,同时将数据写入 Ehcache 和 Redis中。此时会出现分布式重建缓存的并发冲突问题重建缓存 : 比如数据在所有的缓存中都不存在 (如使用 LRU算法 给清理掉),就需要重新查询数据写入缓存,重建缓存分布式的重建缓存 : 在不同的机器上...原创 2018-05-29 21:53:46 · 1708 阅读 · 0 评论 -
Java 产生随机数 详解
Math.random() 方法可以随机生成一个 [0, 1) 直接的数,包括 0,不包括 1生成 0 到 10 之间的整数# 使用 Math.round(Math.random() * 10))ExecutorService executorService = Executors.newFixedThreadPool(10);for (int i = 0; i < 100; i++) { ...原创 2018-04-28 14:39:08 · 772 阅读 · 0 评论 -
JVM 命令参数 详解
JVM 启动时会带有很多的启动参数,Java命令本身就是一个多参数的启动命令java 启动命令java [options] classname [args]java [options] -jar filename [args]命令参数一下为 Java8 参数设置1> 标准参数 (Standard Option)-client-server指定 JVM 的启动模式是client模式还是serv...原创 2018-04-28 14:38:47 · 791 阅读 · 0 评论 -
SpringBoot @ConfigurationProperties参数绑定 详解
1> 引入 spring-boot-configuration-processor 库<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> ...原创 2018-05-09 16:13:29 · 10719 阅读 · 1 评论 -
Java 创建对象以及类加载 详解
java 创建对象有多种方式 :方式1> new方式2> 使用 Object 的 clone 方法 <1> 实现 clone类 首先实现 Cloneble接口,Cloneable接口 实质上是一个标识接口 类似于 Serializable 接口,没有任何方法 <2> 重写 Object 中的 clone方法 <3> 在 clone方...原创 2018-03-26 08:31:00 · 677 阅读 · 0 评论 -
Spring 缓存注解 详解
从 3.1 开始,Spring 引入对 Cache 的支持。其使用方法和原理都类似于 Spring 对事务管理的支持。Spring Cache 是作用在方法上的,其核心思想是 : 当调用一个缓存方法时会把该方法参数和返回结果作为一个键值对存放在缓存中,等到下次利用同样的参数来调用该方法时将不再执行该方法,而是直接从缓存中获取结果进行返回。所以在使用 Spring Cache 时候要保证缓存的方法对...原创 2018-03-11 18:49:13 · 3054 阅读 · 0 评论 -
Java 引用 详解
从 Java SE2 开始,就提供了四种类型的引用 : 强引用、软引用、弱引用和虚引用。Java中提供这四种引用类型主要有两个目的 : 第一是可以让程序员通过代码的方式决定某些对象的生命周期;第二是有利于 JVM 进行垃圾回收1> 强引用 : 强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,JVM 宁愿抛出OutOfMemoryError 错误,使...原创 2018-03-11 17:31:23 · 494 阅读 · 0 评论 -
Java Nashorn 详解
Nashorn,发音 “nass-horn”,是德国二战时一个坦克的命名,同时也是 java8 新一代的 javascript 引擎,目前 JDK 8 中 Nashorn 只支持 ES5 标准,后续版本将会支持 ES6 等标准。javascript 可运行在 jvm ,Rhino 在 jdk6 的时候已经存在,但是 Rhino 相比其他 javascript引擎 (比如google的V8) 实在太...原创 2018-03-11 17:30:50 · 3073 阅读 · 1 评论 -
Java 并发集合 详解
Java 提供两类适用于并发应用的集合 :1> 阻塞式集合 : 当集合已满或为空时,被调用的添加或移除方法不能立即执行,此时这个线程阻塞,一直到该方法可以被成功执行2> 非阻塞式集合 : 如果方法不能被立即执行,则返回 null 或抛出异常,但是调用这个方法的线程不会被阻塞ConcurrentLinkedDeque 类非阻塞式线程安全列表,线程安全的双向链表pu原创 2017-09-21 11:23:14 · 1230 阅读 · 0 评论 -
Java 并发集合 详解
Java 提供两类适用于并发应用的集合 :1> 阻塞式集合 : 当集合已满或为空时,被调用的添加或移除方法不能立即执行,此时这个线程阻塞,一直到该方法可以被成功执行2> 非阻塞式集合 : 如果方法不能被立即执行,则返回 null 或抛出异常,但是调用这个方法的线程不会被阻塞ConcurrentLinkedDeque 类非阻塞式线程安全列表,线程安全的双向链表public int siz...原创 2018-03-16 23:29:56 · 636 阅读 · 0 评论 -
SpringMVC 视图 详解
请求处理方法执行完成后,最终返回一个 ModelAndView 对象。对于那些返回 String、View 或 ModelMap 等类型的处理方法,Spring MVC 会在内部将它们装配成一个 ModelAndView 对象,它包含视图逻辑名和模型对象的信息SpringMVC 借助视图解析器 (ViewResolver) 得到最终的视图对象 (View),该视图可以是 JSP、基于FreeM原创 2017-07-05 08:27:04 · 646 阅读 · 0 评论 -
SpringMVC 文件上传 详解
SpringMVC 为文件上传提供直接支持,通过 MultipartResolver 实现配置 MultipartResolver,在 spring-mvc.xml 文件中beanid="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipar原创 2017-07-05 08:21:56 · 782 阅读 · 0 评论 -
SpringMVC 静态资源处理 详解
需要先调整 web.xml 中 DispatcherServlet 的配置,例如如下配置 :servlet> servlet-name>springServletservlet-name> servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class> init原创 2017-07-05 08:20:01 · 3608 阅读 · 1 评论 -
java 发送邮件 详解
常见的邮件协议包括 :SMTP : 简单邮件传输协议,用于发送电子邮件的传输协议POP3 : 用于接收电子邮件的标准协议IMAP : 互联网消息访问协议,是 POP3 的替代协议这三种协议都有对应 SSL 加密传输的协议,分别是 SMTPS、 POP3S 和 IMAPSJavaMail 体系结构除 JavaMail 的核心包之外, JavaMail 还需要原创 2017-06-30 11:02:05 · 2895 阅读 · 0 评论 -
Java 注解 详解
Java注解是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用,起到说明、配置的功能注解起到辅助性的作用,包含在 java.lang.annotation 包中@Deprecated : 用于表示某个程序元素(类、方法等)已过时,当其它程序使用已过时的类、方法时,编译器将会给出警告@SuppressWarnings : 指示被Annotation标识的程序元素原创 2017-06-20 08:55:37 · 412 阅读 · 0 评论 -
OpenSSL生成证书进行iOS加密,java解密的RSA非对称加密 详解
MAC、Linux 上自带 openssl,windows上没有需要安装相关证书生成过程1> 使用 cd 指令让终端进入到相应的目录中2> 终端输入openssl,进入openssl状态3> 生成一个1024位的私钥:genrsa -out rsa_private_key.pem 10244> 利用私钥生成JAVA支持的P原创 2016-09-02 12:50:00 · 1927 阅读 · 0 评论 -
Java内存模型 详解
Java内存模型概念Java平台自动集成线程以及多处理技术。内存模型描述了程序中各个变量(实例域、静态域和数组元素)之间的关系,以及在实际计算机系统中将变量存储到内存和从内存中取出变量这样的底层细节,对象最终是存储在内存里面的,这点没有错,但是编译器、运行库、处理器或者系统缓存可以有特权在变量指定内存位置存储或者取出变量的值。JMM(Java Memory Model)允许编译器和缓存以数据在原创 2016-03-20 10:02:39 · 2668 阅读 · 2 评论 -
Java 代码特殊注释详解
TODO,FIXME ,XXX 用于标记,方便返回处理操作TODO : 在标识处有功能代码待编写,待实现的功能在说明中会简略说明注:点击右边蓝色标记处,回到标记处FIXME : 标识处代码需要修正,甚至代码是错误的,不能工作,需要修复,如何修正会在说明中简略说明XXX : 标识处代码虽然实现功能,但是实现的方法有待商榷,希望将来能改进,要改进的原创 2015-07-12 19:10:08 · 1142 阅读 · 0 评论 -
JUnit 详解
添加的包:hamcrest-core.jar hamcrest-library.jar junit.jar注:一般不使用 MyEclipse 自带的JUnit的方法JUnit的各种断言JUnit 提供了一些辅助函数,用于帮助你确定某个被测试函数是否工作正常。通常而言,把所有这些函原创 2016-03-13 10:22:48 · 625 阅读 · 0 评论 -
Spring 任务调度
QuartzSpring 创建 Quartz 的 Schedule、Trigger 和 JobDetail 提供便利的 FactoryBean类,就能够使用 Spring 注入方式。概括起来提供两方面支持 :1> 为 Quartz 的重要组件类提供更具 Bean 风格的扩展类2> 提供创建 Schedule 的 BeanFactory类,方便在 Spring 环境下创建对应的组建对象,原创 2017-07-05 08:29:28 · 280 阅读 · 0 评论 -
SpringMVC 拦截器 详解
HandlerExecutionChain 是一个执行链,包含一个请求的处理器,同时包括若干个对该请求的拦截器。当 HandlerMapping 返回 HandlerExecutionChain 后,DispatchServlet 将请求交给定义在 HandlerExecutionChain 中的拦截器和处理器一并处理HandlerExecutionChain 的结构原创 2017-07-05 08:58:44 · 1128 阅读 · 1 评论 -
Java 字符相关String, StringBuffer, StringBuilder, StringTokenizer,StringJoiner,strman-java 详解
String该类不能被继承,以下是 Java8 String 部分源码 :public final classString implementsjava.io.Serializable, Comparable, CharSequence常见 Java String API1> 获取int length() : 获取字符串的长度char charAt(int原创 2017-06-28 08:47:14 · 980 阅读 · 0 评论 -
Java StreamAPI 详解
Java8中有两大最为重要的改变。第一个是 Lambda 表达式;另外一个则是 Stream API(java.util.stream.*)。Stream 是 Java8 中处理集合的关键抽象概念,它可以指定对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。也可以使用 Stream API 来并行执原创 2017-09-29 13:01:21 · 4774 阅读 · 1 评论 -
Lambda表达式 详解
使用 Lambda 表达式原因Lambda 是一个匿名函数,可以把 Lambda表达式 理解为是一段可以传递的代码 (将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升Lambda 表达式的基础语法 : Java8 中引入了一个新的操作符 "->" 该操作符称为箭头操作符或 Lambda 操作符,箭头操作符将 La原创 2017-09-28 13:03:30 · 52975 阅读 · 11 评论 -
Java 线程执行器 详解
线程执行器 分离任务的创建和执行,通过食用执行器,仅需要使用 Runnable接口对象然后将这些对象发送给执行器即可。执行器通过创建所需线程,来负责这些 Runnable对象的创建、实例化以及运行。当一个任务发送给执行器,执行器会尝试使用线程池中的线程来执行这个任务,避免不断地创建、销毁线程而导致系统性能下降执行框架,有 Callable接口功能类似于 Runnable 接口,但是功能原创 2017-09-11 13:58:22 · 1181 阅读 · 0 评论 -
ThreadLocal 详解
ThreadLocal 翻译比较准确的叫法应该是 : 线程局部变量应用场景 : 当很多线程需要多次使用同一个对象,并且需要该对象具有相同初始化值的时候最适合使用 ThreadLocal当使用 ThreadLocal 维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。从线程的角原创 2017-09-01 17:16:01 · 424 阅读 · 0 评论