Java
「已注销」
happyjava.cn
展开
-
还在用SimpleDateFormat?Java8都发布N年了,转LocalDateTime吧
前言Java8发布,已有数年之久,但是发现很多人都还是坚持着用SimpleDateFormat和Date进行时间操作。SimpleDateFormat这个类不是线程安全的,在使用的时候稍不注意,就会产生致命的问题。Date这个类,是可以重新设置时间的,这对于一些类内部的属性来说,是非常不安全的。SimpleDateFormat是线程不安全的类在阿里巴巴规约手册里,强制规定SimpleDate...原创 2019-08-17 17:28:06 · 410 阅读 · 0 评论 -
为什么阿里Java手册推荐慎用 Object 的 clone 方法来拷贝对象
前言在阿里Java开发手册中,有这么一条建议:慎用 Object 的 clone 方法来拷贝对象。对象 clone 方法默认是浅拷贝,若想实现深拷贝需覆写 clone 方法实现域对象的深度遍历式拷贝 。Java中的对象拷贝,有浅拷贝和深拷贝两种,如果没有搞清楚这两者的区别,那么可能会给自己的代码埋下隐患。什么是浅拷贝和深拷贝浅拷贝:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其...原创 2019-08-27 21:31:27 · 267 阅读 · 0 评论 -
Java8新特性——Optional
前言在开发中,我们常常需要对一个引用进行判空以防止空指针异常的出现。Java8引入了Optional类,为的就是优雅地处理判空等问题。现在也有很多类库在使用Optional封装返回值,比如Spring Data JPA等。下面,我们就来了解下Optional的常用用法Optional方法列表Optional的方法列表如下:初始化初始化一个Optional有三种方式,如下:// 创建一...原创 2019-08-17 18:10:17 · 99 阅读 · 0 评论 -
你是否还在写try-catch-finally?来使用try-with-resources优雅地关闭流吧
前言开发中,我们常常需要在最后进行一些资源的关闭。比如读写文件流等,常见的,我们会在最后的finally里进行资源的关闭。但是这种写法是很不简洁的。其实,早在JDK1.7就已经引入了try-with-resources来关闭资源的方式,我们今天就来体验一下try-with-resources的简洁之处。旧版关闭资源的一些例子在旧版的写法中(其实现在还有很多程序员是这么写的),资源都放在fin...原创 2019-08-17 17:55:18 · 175 阅读 · 0 评论 -
面试官:说说Spring中的事务传播行为
前言在开发中,相信大家都使用过Spring的事务管理功能。那么,你是否有了解过,Spring的事务传播行为呢?Spring中,有7种类型的事务传播行为。事务传播行为是Spring框架提供的一种事务管理方式,它不是数据库提供的。不知道大家是否听说过“不要在service事务方法中嵌套事务方法,这样会提交多个事务”的说法,其实这是不准确的。了解了事务传播行为之后,相信你就会明白!Spring中七...原创 2019-08-17 17:54:42 · 114 阅读 · 0 评论 -
为什么阿里规约手册要求谨慎使用Arrays.asList方法
前言在开发中,有时候会碰到把多个参数,或者说把数组转成List的需求,通常我们会使用 Arrays.asList()方法。但是该方法在使用的过程中,稍有不慎就会出现严重的异常。有如下代码:@Testpublic void test() { List<String> list = Arrays.asList("a", "a", "2"); System.out.pr...原创 2019-08-17 17:49:49 · 57 阅读 · 0 评论 -
Java中的transient关键字
前言之前写过一篇序列化相关的文章,今天要讲的这个文件自transient也是跟序列化有关系的。但是,挺多人没有了解过该关键字甚至是不知道该关键字的存在。transient关键字介绍在Java中,当一个类实现了java.io.Serializable接口,即表明了该类可以被序列化。我们可以把该类的属性序列化然后保存在外部,或者跟另外一个jvm进行数据传递。但是,我们是否想过,如果一个类包含隐私...原创 2019-08-17 17:49:18 · 55 阅读 · 0 评论 -
Java并发编程:Java内存模型JMM
简介Java内存模型英文叫做(Java Memory Model),简称为JMM。Java虚拟机规范试图定义一种Java内存模型来屏蔽掉各种硬件和系统的内存访问差异,实现平台无关性。CPU和缓存一致性讲JMM之前,我们应该先了解下CPU和缓存一致性的问题。计算机在执行程序的时候,每条指令都是在CPU中执行的,而执行的时候,又要和数据打交道。而计算机上面的数据,是存放在内存当中的。随着CPU的...原创 2019-08-17 17:47:56 · 59 阅读 · 0 评论 -
面试官:说说你知道多少种线程池拒绝策略
前言线程池,相信很多人都有用过,没用过相信的也有学习过。但是,线程池的拒绝策略,相信知道的人会少许多。四种线程池拒绝策略当线程池的任务缓存队列已满并且线程池中的线程数目达到maximumPoolSize时,如果还有任务到来就会采取任务拒绝策略,通常有以下四种策略:ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException...原创 2019-08-17 17:47:17 · 82 阅读 · 0 评论 -
为什么我强烈推荐你用枚举来实现单例模式
单例模式简介单例模式是 Java 中最简单,也是最基础,最常用的设计模式之一。在运行期间,保证某个类只创建一个实例,保证一个类仅有一个实例,并提供一个访问它的全局访问点。下面就来讲讲Java中的N种实现单例模式的写法。饿汉式public class Singleton { private static Singleton instance = new Singleton(); ...原创 2019-08-17 17:45:50 · 68 阅读 · 0 评论 -
为什么阿里Java规约要求谨慎使用SimpleDateFormat
前言在阿里Java开发规约中,有强制性的提到SimpleDateFormat 是线程不安全的类 ,在使用的时候应当注意线程安全问题,如下:其实之前已经介绍过使用JDK1.8的DateTimeFormatter 和LocalDateTime来处理时间了,还在用SimpleDateFormat?Java8都发布N年了,转LocalDateTime吧。今天,就来说说SimpleDateFormat...原创 2019-08-17 17:45:13 · 87 阅读 · 0 评论 -
为什么阿里Java规约要求谨慎修改serialVersionUID字段
serialVersionUID简要介绍serialVersionUID是在Java序列化、反序列化对象时起作用的一个字段。Java的序列化机制是通过判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体类的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出...原创 2019-08-17 17:44:19 · 68 阅读 · 0 评论 -
Java基于redis实现分布式锁(SpringBoot)
前言分布式锁,其实原理是就是多台机器,去争抢一个资源,谁争抢成功,那么谁就持有了这把锁,然后去执行后续的业务逻辑,执行完毕后,把锁释放掉。可以通过多种途径实现分布式锁,例如利用数据库(mysql等),插入一条记录(唯一索引),谁插入成功,谁就持有锁;还可通过zookeeper来实现分布式锁,谁创建节点成功,谁就持有锁。本文介绍通过redis来实现分布式锁。本文使用springboot提供的R...原创 2019-08-17 17:36:11 · 91 阅读 · 0 评论 -
Java8使用Stream优雅地处理集合
说明集合和数组是我们经常会用到的数据结构,在jdk1.8之前,集合和数组的处理并不是很便捷。但是到了JDK1.8之后,使用Stream处理集合会使代码变得更加的简洁明了。作为一名开发者,其实很有必要学习新特性的用法,即使是说项目中没有采用。虽然JDK1.8已经发布数年,但是还是发现很多人都不会使用JDK1.8给我们带来的新的API。比如之前写过的一篇文章还在用SimpleDateFormat?J...原创 2019-08-17 17:34:09 · 244 阅读 · 0 评论 -
别再写getter,setter方法了,用Lombok来简化你的代码吧
前言在实际开发中,有些代码是重复的、IDE一键生成的,不写不行,写了又觉得代码太臃肿,不美观。如果你也有这种体会,那么,请使用Lombok插件吧,真的非常好用。Lombok的使用也非常简单,都是各种各样的注解。引入依赖<dependency> <groupId>org.projectlombok</groupId> <artifactId>...原创 2019-08-17 17:29:11 · 277 阅读 · 0 评论 -
[面试必备]深入理解Java的volatile关键字
前言在Java并发编程中,volatile关键字有着至关重要的作用,在面试中也常常会是必备的一个问题。本文将会介绍volatile关键字的作用以及其实现原理。volatile作用volatile在并发编程中扮演着重要的角色,volatile是轻量级的synchronized,volatile关键字有两个作用:1)保证共享变量的可见性可见性的意思是当一个线程修改一个共享变量时,另外一个线...原创 2019-09-05 21:56:01 · 167 阅读 · 0 评论