自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

codingtu的博客

本博客只原创Java相关文章,不做转载。用心写,让你有所收获!

原创 Java并发的实现和应用

线程安全的概念,怎么保证线程安全 线程的同步异步,阻塞非阻塞 线程的并发和并行 Java内存模型(原子性,可见性,有序性) 线程状态及流转 线程死锁和避免 synchronized和volatile关键字? 线程的3种实现方式 线程的交互方式,中断通知等待等 线程池用的队列原理分析 线程池的种类里...

2019-08-28 09:27:27 74 0

原创 常用的设计模式Java实现及解析

以下说明(部分)解释摘录/参考自《Head First设计模式》 design-patterns observer pattern 观察者模式 my implementation 观察者模式:在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。 my i...

2019-05-02 11:57:30 216 0

原创 CacheLoader returned null for key分析和解决

背景 今天在使用的时候使用GuavaCache的refreshAfterWrite的功能时,发现在少数场景下会报错CacheLoader returned null for key。但是如果把refreshAfterWrite去掉时,又不会报错。具体错误内容是这样的。 com.google.com...

2019-04-26 21:44:46 5396 0

原创 设计模式-观察者模式

前言 关于观察者模式比较简单,网上解释的很多很多,解释的都挺好理解的,因此这里并不打算说明太多,有关实现和案例源码已上传至https://github.com/zhuzhenke/design-patterns,提供了两种实现方案,一种是jdk实现,一种是我自己实现了可多观察者观察多主题。 本文重...

2019-04-19 09:03:18 1120 0

原创 比AtomicLong更高效的并发计数类LongAdder

比AtomicLong更高效的并发计数类LongAdder (本文为原创文章,未经博主同意,禁止任何形式转载!) 最近在看https://github.com/alibaba/Sentinel(轻量级的流量控制、熔断降级 Java 库)源码的时候,看到在统计数量的时候使用了LongAdder。这个...

2019-04-05 20:34:25 2624 0

原创 ForkJoin框架使用和原理剖析

ForkJoin使用和原理剖析 相信大家此前或多或少有了解到ForkJoin,ForkJoin框架其实就是一个线程池ExecutorService的实现,通过工作窃取(work-stealing)算法,获取其他线程中未完成的任务来执行。可以充分利用机器的多处理器优势,利用空闲的线程去并行快速完成一...

2019-03-21 23:49:59 8671 1

原创 Java8新特性学习(三)- Stream类

Java8新特性学习(三)- Stream类

2019-03-12 23:16:50 2660 0

原创 Java8新特性学习(二)- Optional类

背景 Optional是一个容器,用来管理一个对象。主要是用来解决null和NullPointerException问题。 Java7 -> Java8 Optional是如何简化你的代码 假设有一个Student类 @Data public class Student { ...

2019-02-20 22:03:33 2757 0

原创 Java8新特性学习(一)- 开篇介绍

背景 随着工作的深入,用到的知识是越来越多,代码中用到Java8的特性也越来越多,如果只是知道几个简单的用法而不从本质上去知道其背景、实现原理,理解代码是一件相对困难的事情。基于此,接下来将相对系统的去学习Java8的一些新特性,也算是用自燃的方式来点燃各位想要掌握新知识的同学,一起进步! 新特性...

2019-02-18 23:38:09 2738 0

原创 Guava Cache expireAfterWrite 与 refreshAfterWrite区别

前面的文章缓存篇(一)- Guava有讲到Guava Cache有区别于ConcurrentHashMap的使用,就是因为其自带有自动刷新和自动失效的功能,避免我们去自己编写刷新和失效的后台线程程序。Guava Cache提供了简单便捷的api给我们使用,但是研究源码发现这里的自动刷新缓存和自动失...

2019-02-17 12:42:43 7185 0

原创 别踩坑!使用MySQL唯一索引请注意

背景 在程序设计中了,我们往往需要确保数据的唯一性,比如在常见的注册模块,我们需要确保一个手机号只能注册为一个账号。这种情况下,我们的程序往往是第一道关卡,用户来注册之前,首先判断这个手机号是否已经注册,如果已经注册则返回错误信息。但是我们不能确保同时有两个人使用同一个手机号注册到我们的系统中,因...

2019-01-28 21:33:14 14971 7

原创 HashMap的算法解析及高并发下死循环分析

HashMap是一个以空间换时间,内部以数组+链表\红黑树实现的散列表。HashMap的具体原理我们不做深入仔细分析,这类文章网上较多,且HashMap在面试中命中率极高。本文以jdk1.8为例,只分析里面我认为值得拿出来分析的有关数据结构和算法的部分来讲解。 HashMap的长度 HashMap...

2018-12-06 08:59:34 2727 0

原创 排序算法总结(含动图演示和Java代码实现)

本文将围绕冒泡排序、桶排序、计数排序、堆排序、插入排序、并归排序、快速排序和选择排序,按照描述、时间复杂度(最坏情况)、动态图展示和代码实现来讲解。本文默认排序为从小到大。 本文相关代码已上传至github,欢迎关注https://github.com/zhuzhenke/common-algor...

2018-12-03 08:10:15 3416 1

原创 MySQL基本原理和使用技巧

本文是我在大半年前在前公司做团队分享时的一个文档,写得比较挫,当时分享讲了2个小时,自己感觉讲得还可以。最近前同事跑来问我还有没有文档保存,翻了旧电脑和硬盘才找出来,于是就想着分享一下。 一、MySQL整体结构 服务器层(负责客户端连接、授权认证、安全、线程管理等) 核心层(缓存查询、解...

2018-11-13 23:51:37 2757 0

原创 缓存篇(四)- Memcache(未完成)

 缓存篇(四)- Memcache

2018-10-28 23:52:44 234 0

原创 缓存篇(三)- Spring Cache框架

前两篇我们讲了Guava和JetCache,他们都是缓存的具体实现,今天给大家分析一下Spring框架本身对这些缓存具体实现的支持和融合,使用Spring Cache将大大的减少我们的Spring项目中缓存使用的复杂度,提高代码可读性。本文将从以下几个方面来认识Spring Cache框架 背景...

2018-10-15 08:11:03 8847 0

原创 缓存篇(二)- JetCache

本文将由浅入深,从基本特性介绍,从简单demo使用,到JetCache源码分析,到Spring Aop的源码分析,到如何利用这些知识去自己尝试写一个自己的cache小demo,去做一个全面的概括。 *背景和特性 *用法demo *JetCache源码分析 *Spring Aop的支持和源码...

2018-09-28 19:27:25 6521 1

原创 缓存篇(一)- Guava

接下来几篇给大家分享一下缓存相关的内容,包括但不限于Guava,JetCache和Spring Cache等。       Guava产生的背景       最常见最简单的方式就是我们使用HashMap或者ConcurrentHashMap,在内存中缓存数据,通过key存放value,通过ke...

2018-08-04 17:41:52 2881 0

原创 RPC框架(二) - Dubbo

    Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。dubbo目前已经有apache托管,官方文档查看请点击http://dubbo.apache.org/books/dubbo-user-bo...

2018-06-11 11:41:14 1038 0

原创 RPC框架(一) - Java自带的RMI

    接下来的文章中,我将会去分析Java语言中常用的RPC框架,包括但不限于RMI、dubbo、Hessian、Spring Remoting框架。这篇文章将简要介绍Java语言自带的RMI协议。       RMI(Remote Method Invocation),远程方法调用,程序调...

2018-05-21 11:44:12 1235 0

原创 Ocean设计思路和架构设计

最近看了杨传辉的《大规模分布式存储系统:原理解析与架构实战》,里面讲了分布式文件系统的经典设计案例和oceanbase的整体设计,看完之后,对于分布式系统的理解有了一个新的层次。单机系统首先将一下我们接触比较多的单机系统。对于一些业务很小流量不大的系统,我们经常只会给应用部署到一个机器上。在这个系...

2018-04-17 18:17:13 771 0

原创 解决亚马逊调用频率限制问题的sdk框架

先给急着用的人:项目地址:https://github.com/zhuzhenke/invoke-limit-api针对调用亚马逊AWS服务,对于亚马逊针对每个接口有不同的频率调用限制,设计了这个对调用者可以同步和异步调用的sdk框架,把因为频率限制的错误进行重试的封装,调用调用者处理因频率限制出...

2018-03-27 23:26:41 2245 0

原创 Mysql explain-Extra(using where,using index)使用详解

下面是测试用例,楼主的测试使用的MySQL版本是5.6.27-log。show  create table user_man;CREATE TABLE `user_man` (  `manid` bigint(20) NOT NULL AUTO_INCREMENT,  `manname` varc...

2018-03-13 11:27:48 4410 0

原创 Mysql explain-type使用详解

下面是测试用例,楼主的测试使用的MySQL版本是5.6.27-log。show  create table user_man;CREATE TABLE `user_man` (  `manid` bigint(20) NOT NULL AUTO_INCREMENT,  `manname` varc...

2018-03-13 11:26:30 801 0

原创 Spring IOC循环依赖解决方案分析

Spring IOC循环依赖解决方案分析这里Spring主要用了三层缓存来完成对循环依赖的实现。下面的属性来源于DefaultSingletonBeanRegistry类 /** Cache of singleton objects: bean name --> bean insta...

2018-03-11 13:28:09 6340 0

原创 ConcurrentSkipListMap高并发原理探究和源码分析

TreeMap、ConcurrentSkipListMap的关系TreeMap是支持key有序排列的一个key-value数据结构,不过是在单线程情况下使用,并发下不是线程安全的。ConcurrentSkipListMap是基于跳表的实现,也是支持key有序排列的一个key-value数据结构,在...

2018-03-01 14:05:47 1012 0

原创 内部类实现原理

关于内部类的定义和使用,这里不做过多介绍,不太清楚的请先行了解。自己写了一个类,里面有内部类和局部内部类。通过javac和javap去了解内部类的大体实现过程。先附上代码public class Use { private String name; private Integer...

2018-02-18 23:21:18 2748 0

原创 Dubbo Filter原理和使用场景

Dubbo Filter是为了开发者在未全局方法调用时统一添加额外参数时使用到的。 主要场景有: 1、传递线程上下文信息 2、方法上的共同参数统一传递,避免每次方法调用时去设置 比如:一个web应用有会话信息,这个web应用需要调用另外一个dubbo服务(这里是内部管理比较紧密的项...

2018-01-08 16:53:59 2579 0

原创 Java SPI机制原理和使用场景

SPI的全名为Service Provider Interface.这个是针对厂商或者插件的。一般来说对于未知的实现或者对扩展开放的系统,通常会把一些东西抽象出来,抽象的各个模块,往往有很多不同的实现方案,比如日志模块的方案,xml解析模块、jdbc模块的方案等。这个可以通过我们的抽象工厂方法来理...

2018-01-08 16:46:15 6768 0

原创 从Socket编程看HTTP服务器设计

从常用的telnet命令,了解Socket的设计和用途。我们会经常使用telnet来测试一个ip上某个端口是否能够连得通,这里中间其实就是利用socket连接返回数据。这里我们在linux服务器上输入telnet taobao.com 80命令后,得到了Connected to taobao.co...

2017-12-29 19:32:43 285 0

原创 非对称加密RSA算法解密

本文将从RSA加密解密过程,详细介绍RSA非对称加密算法的原理。RSA算法用到了大学数学中的一些定理和概念欧拉定理欧几里得定理模逆元概念java使用示例public static void main(String[] args) throws Exception { rrss();...

2017-12-29 19:30:39 301 0

原创 mysqldump原理分析

测试库:mysqldump_test 命令:mysqldump -u root -p mysqldump_test > /User/admin/Desktop/mysqldump_test.sql 准备工作: 1、创建一个mysqldump_test的数据库       ...

2017-12-10 10:30:33 313 0

原创 mysql 建表设计建议

这里的建表建议是在MySQL数据库的innodb存储引擎下使用。1、一定要设置主键,且主键尽量用自增ID去实现。对于innodb,并没有强制我们使用主键,但是其实innodb内部的实现是必定含有主键的,因为我们的数据是存放在主键索引的B+树上的。对于没有建立主键的表,innodb会默认生成一个主键...

2017-12-09 09:07:58 2824 1

原创 Java wait()和await() notify()和signal() notifyAll()和signalAll()了解和区别

Java wait()和await() notify()和signal() notifyAll()和signalAll()了解和区别

2017-11-03 07:35:20 5169 1

原创 sping代码优化建议

这里提两点我项目中真正用到的建议,后面会陆续把其他的分享出来。1、controller返回数据大体格式在BaseController统一定义例如返回给前端的格式是{ "data":{}, code:0 }那么我们可以统一在BaseController中定义一个方法public ...

2017-10-11 15:29:40 435 0

原创 Java并发知识点汇总

Java并发知识点汇总 Java并发相关的教程很多,其一是并发一直是开发人员必备技能,其二是并发本身涉及内容较多。但是网上关于Java并发相关的博客均比较散乱,没有自成一体。本文尝试从并发知识体系上相关的做一个汇总,并推荐2-3篇在这个技能点上写得好的文章。并发这块建议大家在下面的博客指导下多看...

2017-09-22 11:22:34 11394 1

原创 正确理解Spring事务和数据库事务和锁

Lock wait timeout exceeded; try restarting transaction解决方案

2017-09-20 21:59:02 49720 3

原创 如果 TCP 协议中三次握手不携带序列号,会造成什么样的后果

之所以需要三次握手,其实就是要双方相互确认彼此能够通信。 一般要与对方确认可以通信,就要确认自己能够跟对方通信(1),且能够收到对方的通信(2),反过来对方也能够和自己通信(3),且能收到自己的通信(4)。基于这一点,流程就简化为3次握手通信。 首先,client发送一个SYN=1,seq...

2017-08-30 09:54:47 17685 2

原创 从NoSuchMethodError看jvm编译和class加载方式

今天在写自己的项目的时候出现了一个Exception in thread "main" java.lang.NoSuchMethodError的异常,但是我的代码在编译过程中是没有任何问题的。 先来讲一下我的项目关键的结构 我的项目引用了两个jar包,暂定为jarA(ver...

2017-08-16 21:33:02 35845 2

原创 Netty的基础架构模型

Netty是高性能的异步非阻塞NIO框架!下面先来理解一下两组关键的概念。同步和异步拿方法调用来说,同步是指调用一个方法能够在方法结束时立即得到方法的结果,异步就是方法调用时没有返回结果,由另外的线程去做方法中的事情,当前线程可以去做其他的事情。异步调用的结果会通过中间状态改变或者回调函数等来通知...

2017-08-14 00:24:21 6366 0

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