java
文章平均质量分 87
Lebron_Chen
这个作者很懒,什么都没留下…
展开
-
带你详细了解clone方法
说到clone,工作中可能使用到的不多,所以今天就给大家讲一下。clone方法是Object类的一个方法可能大家都知道,但是可能很多人都没有注意到clone方法的修饰符,我们来看一下源码public class Object { * @throws CloneNotSupportedException if the object's class does not ...原创 2018-07-18 00:24:53 · 962 阅读 · 0 评论 -
深入了解序列化writeObject、readObject、readResolve
说到Java的序列化,大多数人都知道使用ObjectOutputStream将对象写成二进制流,再使用ObjectInputStream将二进制流写成文件实现序列化和反序列化。今天这篇文章将深入分析一下序列化。1.Serializable通常我们序列化一个对象的目的是为了可以再序列化回来,使用场景有很多,比如说: - 把对象保存到文件中,然后可以再恢复 - 使用网络IO传递一个对象 ...原创 2018-08-08 23:48:00 · 9644 阅读 · 1 评论 -
什么是微服务,微服务相对于单体服务的利弊
什么是微服务微服务一种系统架构的设计风格,主旨是将原本复杂的系统拆分成多个独立的小型服务,每个服务维护着自身的业务逻辑、数据处理以及部署,服务和服务之间通过简单的通信协议进行通信(比如说Restful API),不要求每个微服务使用同一种变成语言编写。单体服务和微服务的优缺点微服务的概念上面已经介绍了,至于单体服务,就是我们企业系统架构中目前常用的一个单体项目,分为前端-后端-数据...原创 2018-08-07 20:01:50 · 2868 阅读 · 0 评论 -
Spring Boot自动配置的原理
简单介绍Spring Boot首先先给大家简单介绍一下Spring Boot直接上Spring Boot官方文档的介绍 - Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”. - We take an o...原创 2018-08-07 20:00:33 · 477 阅读 · 0 评论 -
Java集合基本介绍
在Java中我们经常使用到集合,集合是帮我们存储数据的,可以理解为一个容器。在JDK中集合类都在java.util包中,下面按照容器特性区分一下我们常用的集合: - Collection: 集合中存储的是普通对象 - List: 有序,可重复 - Set:不可重复 - Queue: 有序,先进先出 - Map: 集合中存储的是成对出现的”键值对”对象我们先...原创 2018-08-02 22:41:17 · 301 阅读 · 0 评论 -
单例模式的几种实现方式
1.饿汉如果应用程序总是创建并使用单例实例或在创建和运行时开销不大class Single { private Single(){} private static Single single= new Single(); public static Single getInstance(){ return single; }}...原创 2018-08-02 22:40:48 · 888 阅读 · 5 评论 -
什么是XSS攻击,怎么防御
定义XSS(Cross Site Scripting),翻译过来就是跨站脚本。指的是在用户浏览器上,在渲染DOM树的时候,执行了不可预期的JS脚本,从而发生了安全问题。上面简单给了XSS攻击的定义,但光看定义还是很难理解,所以下面结合实际情况来介绍一下XSS攻击。我们查询XSS攻击的时候,经常会查到“反射型 XSS”、“存储型 XSS”、“DOM XSS”等等,基于数据存储位置的不同角...原创 2018-08-02 22:40:03 · 4238 阅读 · 1 评论 -
线程池ThreadPoolExecutor的使用和原理
引子通常我们在需要异步调用一个任务的时候,会手动创建一个线程去执行异步任务,但是每次手动启动一个线程,使用完毕就丢弃了,太浪费资源。所以线程池的概念就出来了,就跟数据库连接池一样。通常创建和销毁比较耗费资源的连接都会使用“池”来管理。线程池的好处降低资源消耗:通过已创建的线程来执行异步任务,降低了线程创建和销毁的消耗提高响应速度:异步任务不需要等待线程创建的时间,直接使用创...原创 2018-08-02 22:37:57 · 230 阅读 · 0 评论 -
ThreadLocal的原理和使用
引子前几天有一篇文章分享了SimpleDateFormat类在多线程情况下不安全的问题,文章中也提到了使用ThreadLocal来解决的这种办法,今天就来给大家介绍一下ThreadLocal。由于SimpleDateFormat类线程不安全,所以我们不能用public static修饰一个SimpleDateFormat变量来共多个线程使用。既然多个线程不能公用同一个SimpleDat...原创 2018-08-02 22:35:23 · 217 阅读 · 0 评论 -
JDK动态代理和CGlib代理的区别
我们通常说的动态代理主要有JDK的动态代理和CGLIB代理,Spring的AOP也是基于这两种代理实现的。下面我们先从代码上来了解一下这两种代理。被代理类public class Teacher implements Person { public void sleep(){ System.out.println("sleeping"); }...原创 2018-08-06 20:56:45 · 331 阅读 · 0 评论 -
如何判断一个单链表是否有环以及环入口
这是一个在我们学习数据结构的时候经常会遇到的问题,今天给大家带来这个问题的几种解法。方法一最容易想到的办法就是遍历单链表,如果单链表有环的话那么会进入死循环,但是我们不知道单链表的长度,所以如果单链表长度很长,我们一直向下遍历,也无法分辨出是单链表还没遍历完还是进入了死循环。所以这种解法不靠谱。方法二我们可以在遍历单链表中的每个元素的时候,每遍历一个新的节点,就从头再开...原创 2018-08-05 14:18:55 · 8321 阅读 · 4 评论 -
缓存穿透、缓存并发、缓存雪崩、缓存预热
缓存穿透、缓存并发和缓存雪崩是常见的由高并发引起的缓存问题,而缓存预热是缓存雪崩的一种解决方案。这篇文章将来带大家讲解一下这四个概念。1.缓存穿透缓存穿透指的是并发使用大量缓存中不存在的key进行查询,由于缓存无法命中,大量的查询会穿过缓存直接查询数据库,使得数据库压力太大,导致数据库可能被拖垮。一般是受到了恶意的攻击才会导致这种问题,所以一旦遇到了缓存穿透的问题就会非常棘手,...原创 2018-08-05 14:18:21 · 514 阅读 · 0 评论 -
怎样让线程停止
上一篇文章讲到了interrupt()、interrupted()、isInterrupted()这三个方法,最后留了个尾巴,那么今天这一篇文章就给大家讲一下怎样停止线程。stop()方法说到线程停止,第一个想到的办法就是Thread类的stop()方法,下面就先讲一下stop()方法。@Deprecatedpublic final void stop() { ......原创 2018-07-22 23:33:05 · 1163 阅读 · 0 评论 -
如何区分interrupt()、interrupted()、isInterrupted()
看到标题上那三个兄弟了吗,看起来跟孪生兄弟一样,傻傻分不清楚。很多人可能都知道这些方法,但是又不太能分清,所以给大家带来这篇文章,带大家一起区分一下这三个方法。首先这三个方法都是Thread类的方法,按照惯例,介绍方法,先看源码interrupt()public void interrupt() { if (this != Thread.currentThread(...原创 2018-07-22 23:32:36 · 640 阅读 · 0 评论 -
Spring Boot自动配置原理
简单介绍Spring Boot首先先给大家简单介绍一下Spring Boot直接上Spring Boot官方文档的介绍 - Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”. - We take an o...原创 2018-07-19 23:29:23 · 207 阅读 · 0 评论 -
死锁问题的出现和解决
什么是死锁死锁是多线程编程中会遇到的一个问题,下面就先来讲一下什么是死锁。首先,大家都知道的是,当一个线程持有一个锁的时候,其他尝试获取这个锁的线程都会阻塞。那么如果,线程A持有了锁A,并且尝试获取锁B,线程B持有了锁B,并且尝试获取锁A。那么这两个线程将会永远阻塞下去,这就是最简单的死锁。示例下面给出简单的死锁代码实现:public class DeadLockT...原创 2018-07-25 10:02:27 · 1801 阅读 · 0 评论 -
finalize()方法总结
class Object { ... protected void finalize() throws Throwable { }}finalize()方法是Object类的一个protected方法,所以所有的类都可以调用Object类的finalize()方法,也可以自己去重写finalize()方法。GC对不可达对象的两次扫描首先需要知道的是大多数虚拟机会使...原创 2018-08-13 23:31:05 · 1885 阅读 · 1 评论