自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

旧时光 | YoungChen's 博客

【技术栈 Java & Go,兴趣方向分布式存储,博客地址 chenjiayang.me,公众号 Young_Blog】

  • 博客(14)
  • 问答 (1)
  • 收藏
  • 关注

原创 基于 “不可变类” 实现一个线程安全的 Integer 计数器

ImmutableIntegerCounter// final 修饰,不能继承public final class ImmutableIntegerCounter { // final 修饰,不允许其他线程对其更改 private final int initial; public ImmutableIntegerCounter(int initial) { ...

2019-02-28 19:52:03 544

原创 用 Wait 和 Notify 实现 “生产者-消费者” 模型

生产者-消费者模型import java.util.LinkedList;import java.util.concurrent.TimeUnit;public class ProducerConsumer { public static void main(String[] args) throws InterruptedException { final i...

2019-02-27 20:11:36 437

原创 详解 Java 中的 Wait 和 Notify 机制

写在前面Wait 和 Notify 是 Java 面试中常见的问题,但是在平时工作中可能不常见到。大家或多或少知道些背景知识,例如二者均为 Object 类的方法,而不是 Thread 特有的(因为锁是每个对象都具有的特性,因此操作锁的方法也紧跟对象,没毛病),且都只能在同步代码块中调用(即前提是先获得对象的监视器锁,一般来说在 synchronized 代码块中使用),否则抛出异常 Illeg...

2019-02-26 20:09:42 2663 1

原创 你需要知道的,缓存架构的设计和常见问题

缓存架构的设计缓存层通常架设在 DB 和业务逻辑层之间,核心功能就是从DB生成一条缓存数据,可以在后续若干次查询请求过程中不再访问DB,请求在缓存层直接命中后返回,从而可以达到加快访问速度的作用,同时也能在流量暴增时充当保护层防止DB被打垮。缓存的引入虽然有优势,但也会带来一些问题,例如缓存穿透、缓存雪崩等,所以哪些场景适合使用缓存需要斟酌。读多写少的场景是很适合的,可以显著降低 DB 的压力...

2019-02-23 15:07:55 299

原创 回顾《深入理解 Java 虚拟机》之线程安全与锁优化

什么叫线程安全我之前面试的时候就被问到过这个问题,其实说几句话描述下线程安全估计谁都能做到,问题是如何下一个准确的定义呢?书中选取了 Brain Goetz 的定义:当多线程访问同一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那么这个对象就是线程安全的通俗来讲,就是我们作...

2019-02-17 17:28:55 279

原创 “火箭男孩” 的毕业旅行

这是一篇迟到半年的总结 -_-||孟美岐不出意外的出道了,但看到陈意涵和刘人语落选还是很遗憾。团队叫火箭少女就有点硬核了。。。先说土创6.23 晚我们四个还在重庆去成都的高铁上,当晚是土创的总决选,小赵想在高铁上拿手机看,但因为路上隧道很多,信号时断时续,画面一直卡成 PPT 所以最后没能看成。成都的酒店是在高铁上临时定的,就在成都东站旁边,老板特意到高铁站来接了我们,当晚安顿下来之...

2019-02-17 13:03:23 367

原创 回顾《深入理解 Java 虚拟机》之 Java 和线程

首先,并发不一定要依赖多线程,例如 PHP 中可以存在多进程并发。但是当我们在 Java 里面谈论并发时,一般都与线程脱不了干系,因此我们先来谈谈什么是线程,它跟进程有什么区别。再谈进程与线程如果一个服务器同时只能为一个客户端连接服务,其他都需要阻塞,那么效率定然会很感人,为了让服务器能同时服务更多的客户端连接,会经常应用并发编程。而实现并发的手段有多进程、多线程、IO 多路复用等。例如 L...

2019-02-16 16:48:07 257

原创 回顾《深入理解 Java 虚拟机》 之内存模型和 volatile 关键字

定义 Java 内存模型并不是一件容易的事情,这个模型必须定义得足够严谨,才能让 Java 的并发操作不会产生歧义;但是,也必须得足够宽松,使得虚拟机的实现能有足够的自由空间去利用硬件的各种特性(寄存器、高速缓存等)来获取更好的执行速度。经过长时间的验证和修补,在JDK1.5发布后,Java内存模型就已经成熟和完善起来了。主内存和工作内存Java 内存模型中规定了所有的变量都存储在主内存中,每...

2019-02-12 21:43:22 295

原创 回顾《深入理解 Java 虚拟机》之类加载器

虚拟机团队把类加载阶段中的 “通过一个类的全限定名来获取描述此类的二进制字节流” 这个动作放到 Java 虚拟机外部去实现,以便让应用程序自己去决定如何获取所需要的类,实现这个动作的代码模块称为** “类加载器”**。首先,先要知道什么是类加载器。简单说,类加载器就是根据指定全限定名称将 Class 文件加载到 JVM 内存,转为 Class 对象。如果站在虚拟机的角度来看,只存在两种类加载器...

2019-02-08 22:33:08 192

原创 回顾《深入理解 Java 虚拟机》之类加载机制

虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型,这就是虚拟机的类加载机制。类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段:除却解析之外,其他各个阶段都是严格按顺序执行的,解析则不一定,为了支持 Java 的运行时绑定特性,它有时在初...

2019-02-07 20:53:36 234

原创 回顾《深入理解 Java 虚拟机》之垃圾收集器

GC 并非 Java 的专利,事实上最早 Lisp 语言就有了 GC 和内存动态分配的概念。GC 的重点在于两个:如何判定对象的存活与否如何进行垃圾回收,这里又分为不同的回收算法如何判断对象存活关于GC roots 选取的这个问题,知乎上 R大 有过详细的回答,这里贴上链接:Java 的 GC 为什么要分代?,顺便表达一下对R大的敬仰,简直是知乎清流啊,努力成为 R大 那样的人!这篇...

2019-02-06 19:42:00 187

原创 回顾《深入理解 Java 虚拟机》之 Java 内存区域

过年会把《深入理解 Java 虚拟机》回看一遍,整理下知识点C/C++ 的内存管理都在编码人员自己的手里进行控制,delete/free 虽能让人感受到上帝视角的快感,却也加大了对编码人员的考验。Java、Golang、Nodejs 等现代语言因为有虚拟机这层,所以将内存管理的工作移交给了虚拟机做。JVM 运行时内存区域每个区域的功能如下:对象的创建我们经常使用 new 来创建一...

2019-02-05 19:41:22 298

原创 ThreadPoolExecutor 核心源码深度解析

本文只介绍 ThreadPoolExecutor 源码的关键部分,开篇会先介绍 ThreadPoolExecutor 中的一些核心常量定义,然后选取线程池工作周期中的几个关键方法分析其源码实现。其实,看 JDK 源码的最好途径就是看类文件注释,作者把想说的全都写在里面了。一些重要的常量ThreadPoolExecutor 内部作者采用了一个 32bit 的 int 值来表示线程池的运行状态(...

2019-02-04 20:00:29 422

原创 前端如何优雅地显示 JSON

json.cn 是我们开发过程中,经常用来格式化显示 JSON 字符串的工具网址,那么如何在自己编写的前端界面显示同样风格的、格式化之后 JSON 字符串呢?代码pre {padding: 5px; margin: 5px; } .string { color: #3ab54a; font-weight: bold;} .number { color: #25aae2; fon...

2019-02-01 11:49:32 3907

空空如也

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

TA关注的人

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