自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

原创 队列Queue的基本操作

近期用到有关队列 Queue 的api,比如 add/offer,element/peek,remove/poll等方法,有些功能类似的地方,在选择使用时不免有所疑惑,这里简单区别一下:1、add()和offer()区别:add()和offer()都是向队列中添加一个元素。一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,调用 add() 方法就会抛出一个 unchecked 异常,...

2018-12-21 14:23:10 1737

转载 浅析分布式系统的CAP理论

2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想。2年后,麻省理工学院的SethGilbert和Nancy Lynch从理论上证明了CAP。之后,CAP理论正式成为分布式计算领域的公认定理。无论是作为一个系统架构师,还是一个普通开发,当你开发或者设计一个分布式系统的时候,CAP理论是无论如何也绕不过去的。本文就来介绍一下到底什么是CAP理...

2018-12-14 16:27:05 218

转载 详解布隆过滤器的原理、使用场景和注意事项

最近看到一个面试题:有一个非常庞大的数据,假设全是 int 类型,现在给你一个数,如何知道它是否在这个数据中存在(尽量高效)。需求很清晰,只是要判断一个数据是否存在即可。但这里有一个重要的条件:非常庞大的数据。常规做法通常我们很快会想到用HashMap(或HashSet,底层也是通过HashMap实现)实现,因为它写入和查询的效率都比较高,而且写入和判断元素是否存在都有对应的 API,...

2018-12-06 11:11:22 478

转载 Linux常用命令

1.查进程ps命令查找与进程相关的PID号:ps a 显示现行终端机下的所有程序,包括其他用户的程序。ps -A 显示所有程序。ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。ps -e 此参数的效果和指定"A"参数相同。ps e 列出程序时,显示每个程序所使用的环境变量。ps f 用ASCII字符显示树状结构,表达程序间的相互关系。ps -H...

2018-11-21 18:24:24 160

原创 设置springboot项目默认不加载application.properties文件

我们都知道,springboot项目启动时会默认把classpath目录下的application.properties文件作为系统配置文件,但如果我们想根据自己的意愿加载别的文件,比如beans.xml、config.xml等等。设想一个场景,项目中有四个环境的配置,如开发、测试、压测和生产,分别对应下图中标识的四个文件,通过application.properties中的spring.pro...

2018-11-15 14:55:52 5439

原创 解决springboot读取配置文件中文乱码问题

在idea中通过@Value注解读取springboot项目的application.properties文件时,发现读取中文乱码,可采用如下方法解决:配置application.properties:将如下配置加到application.properties文件中server.tomcat.uri-encoding=UTF-8spring.http.encoding.force=tr...

2018-11-15 12:12:07 13188 2

原创 对于Java实现单例(Singleton)的一些思考

1. 什么是单例单例模式是指在java应用中,能够保证一个类只有一个对象实例,并提供一个访问该实例的全局访问点。2. 应用场景比如Windows系统的任务管理器,不管打开多少次任务管理器,只会弹出一个窗口。如果不使用单例机制,将弹出多个窗口,如果这些窗口显示的内容完全一致,则是重复对象,浪费内存资源;如果这些窗口显示的内容不一致,则意味着在某一瞬间系统有多个状态,与实际不符。还有wi...

2018-11-14 10:14:49 198

原创 Spring singleton和prototype的区别

在配置Spring bean元素时,其scope属性取值有如下几个:singleton:单例模式,即该bean对应的类只有一个实例,在spring 中是scope(作用范围)参数的默认值 ;prototype:表示每次从容器中取出bean时,都会生成一个新实例;相当于new出来一个对象;request:基于web,表示每次接受一个请求时,都会生成一个新实例;session:表示在每一个...

2018-11-12 15:13:24 847

原创 浅析 Comparable和 Comparator的区别

简介Comparable和 Comparator都是java.util包下的两个接口,从字面上看这两个接口都是用来做比较用的,但是jdk里面不可能定义两个功能相同的接口,所以他们肯定有不同的用处。1、Comparable1.1 说明Comparable可以认为是一个内比较器,实现了Comparable接口的类有一个特点,就是这些 类是可以和自己比较的,至于具体和另一个实现了Compar...

2018-11-11 16:13:20 29090 25

原创 Java 堆和栈的区别

物理地址a. 堆的物理地址分配对对象是不连续的。因此性能慢些。在GC的时候也要考虑到不连续的分配,所以有各种垃圾收集算法。比如,标记-消除,复制,标记-整理,分代(即新生代使用复制算法,老年代使用标记——压缩)b. 栈使用的是数据结构中的栈,先进后出的原则,物理地址分配是连续的。所以性能快。内存分配a. 堆因为是不连续的,所以分配的内存是在运行期确认的,因此大小不固定。b. 栈是...

2018-11-08 12:15:16 131

原创 JVM 垃圾收集器

根据不同的应用,所产生的内存对象不同,要满足的业务场景也不一样,因此没有完美的垃圾收集器,需要根据实际情况去选择。垃圾收集器是垃圾收集算法的具体实现。Java的堆内存根据对象的生命周期也会分为新生代和老年代。新生代的对象朝生夕死,回收率高,老年代的对象存活时间长,回收率低。 两者往往会使用不同的垃圾收集器。新生代收集器Serial 收集器:单线程,简单而高效(与其他收集器的单线程比),...

2018-11-08 11:46:44 183

原创 Java 垃圾回收算法

1、标记—清除算法(Mark-Sweep)标记—清除算法是最基础的收集算法,它分为“标记”和“清除”两个阶段:首先标记出所需回收的对象,在标记完成后统一回收掉所有被标记的对象,它的标记过程其实就是前面的可达性分析算法中判定垃圾对象的标记过程。标记—清除算法的执行情况如下图所示:回收前状态回收后状态该算法有如下缺点:标记和清除过程的效率都不高标记清除后会产生大量不连续的内存碎片,空...

2018-11-08 11:25:12 143

原创 JVM运行时内存分区

JVM所管理的内存分为以下几个运行时数据区:程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区。1、线程私有区顾名思义,所谓线程私有区,就是每个线程运行时独享的内存区域,每个线程独享的内存区域又可分为三个部分。1.1、程序计数器(Program Counter Register)几乎所有的程序里都需要一个程序计数器,来选取下一条需要执行的指令。这里可把它看做是线程所执行字...

2018-11-08 09:18:50 327

原创 springboot 发送邮件

发送邮件应该是网站必备的功能之一,在没有框架之前,我们是通过Java自带的JavaMail类来发送邮件的,后来spring推出了JavaMailSender类大大简化了发送邮件的过程,再到现在的Spring Boot又对其进行封装从而出现了 spring-boot-starter-mail。使用springboot发送邮件主要分为以下几步:pom.xml 配置<dependency&...

2018-11-07 15:40:21 149

原创 使用Executors创建线程池的思考

最近遇到了发优惠券相关的业务,由于量大自然想到了使用多线程和线程池,但是在使用中阿里的插件出现了这样的提示“手动创建线程池,效果会更好哦。”仔细一看,它是这样说的:线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,这样处理的方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。Executors各个方法的弊端newFixedThrea...

2018-11-03 13:57:36 1148

转载 Redis的并发竞争问题如何解决

什么是Redis的并发竞争问题Redis的并发竞争问题,主要是发生在并发写竞争,考虑到redis没有像db中的sql语句,update val = val + 10where …,无法使用这种方式进行对数据的更新。假如有某个key = “price”, value值为10,现在想把value值进行+10操作。正常逻辑下,就是先把数据key为price的值读回来,加上10,再把值给设置回...

2018-11-01 17:51:50 334

原创 redis的高级事务CAS - 乐观锁

Optimistic locking using check-and-set(乐观锁)乐观锁介绍:watch指令在redis事物中提供了CAS的行为。为了检测被watch的keys在是否有多个clients同时改变引起冲突,这些keys将会被监控。如果至少有一个被监控的key在执行exec命令前被修改,整个事物将会回滚,不执行任何动作,从而保证原子性操作,并且执行exec会得到null的回复。...

2018-11-01 17:25:12 180

转载 Java8系列之重新认识HashMap

Java8系列之重新认识HashMap

2018-11-01 15:02:55 163

原创 怎么理解无界队列和有界队列

有界队列:就是有固定大小的队列。比如设定了固定大小的 LinkedBlockingQueue,又或者大小为 0,只是在生产者和消费者中做中转用的 SynchronousQueue。无界队列:指的是没有设置固定大小的队列。这些队列的特点是可以直接入列,直到溢出。当然现实几乎不会有到这么大的容量(超过 Integer.MAX_VALUE),所以从使用者的体验上,就相当于 “无界”。比如没有设定固定大...

2018-11-01 14:53:11 22673 6

原创 常用的线程池和使用线程池的好处

近期项目中涉及到使用多线程和线程池,但是可能不少人知道怎么用却不知道这样做的好处是什么,了解一下:1、提高资源利用率线程池可以重复利用已经创建了的线程2、提高响应速度因为当线程池中的线程没有超过线程池的最大上限时,有的线程处于等待分配任务状态,当任务到来时,无需创建线程就能被执行。3、具有可管理性线程池会根据当前系统特点对池内的线程进行优化处理,减少创建和销毁线程带来的系统开销。...

2018-11-01 14:05:15 508

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除