<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[codingtu的博客]]></title><description><![CDATA[本博客只原创Java相关文章，不做转载。用心写，让你有所收获！]]></description><link>https://blog.youkuaiyun.com/codingtu</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; codingtu]]></copyright><item><title><![CDATA[Java并发的实现和应用]]></title><link>https://blog.youkuaiyun.com/codingtu/article/details/100112725</link><guid>https://blog.youkuaiyun.com/codingtu/article/details/100112725</guid><author>codingtu</author><pubDate>Wed, 28 Aug 2019 09:27:27 +0800</pubDate><description><![CDATA[线程安全的概念，怎么保证线程安全
线程的同步异步，阻塞非阻塞
线程的并发和并行
Java内存模型(原子性，可见性，有序性)
线程状态及流转
线程死锁和避免
synchronized和volatile关键字？
线程的3种实现方式
线程的交互方式，中断通知等待等
线程池用的队列原理分析
线程池的种类里用法(单实例，固定线程池等基础实现，ForkjoinPool)
线程安全的单实例实现方式
线程池的同步...]]></description><category></category></item><item><title><![CDATA[常用的设计模式Java实现及解析]]></title><link>https://blog.youkuaiyun.com/codingtu/article/details/89743736</link><guid>https://blog.youkuaiyun.com/codingtu/article/details/89743736</guid><author>codingtu</author><pubDate>Thu, 02 May 2019 11:57:30 +0800</pubDate><description><![CDATA[以下说明(部分)解释摘录/参考自《Head First设计模式》
design-patterns
observer pattern 观察者模式
my implementation
观察者模式：在对象之间定义一对多的依赖，这样一来，当一个对象改变状态，依赖它的对象都会收到通知，并自动更新。
my implementation of many observers to many subjects
jd...]]></description><category></category></item><item><title><![CDATA[CacheLoader returned null for key分析和解决]]></title><link>https://blog.youkuaiyun.com/codingtu/article/details/89577316</link><guid>https://blog.youkuaiyun.com/codingtu/article/details/89577316</guid><author>codingtu</author><pubDate>Fri, 26 Apr 2019 21:44:46 +0800</pubDate><description><![CDATA[背景
今天在使用的时候使用GuavaCache的refreshAfterWrite的功能时，发现在少数场景下会报错CacheLoader returned null for key。但是如果把refreshAfterWrite去掉时，又不会报错。具体错误内容是这样的。
com.google.common.cache.CacheLoader$InvalidCacheLoadException: Ca...]]></description><category></category></item><item><title><![CDATA[设计模式-观察者模式]]></title><link>https://blog.youkuaiyun.com/codingtu/article/details/89392812</link><guid>https://blog.youkuaiyun.com/codingtu/article/details/89392812</guid><author>codingtu</author><pubDate>Fri, 19 Apr 2019 09:03:18 +0800</pubDate><description><![CDATA[前言
关于观察者模式比较简单，网上解释的很多很多，解释的都挺好理解的，因此这里并不打算说明太多，有关实现和案例源码已上传至https://github.com/zhuzhenke/design-patterns，提供了两种实现方案，一种是jdk实现，一种是我自己实现了可多观察者观察多主题。
本文重点
本文的关注点在于领域模式的封装，重点在于jdk的实现，和自己实现的区别，各自优势分析。下面是我在分...]]></description><category></category></item><item><title><![CDATA[比AtomicLong更高效的并发计数类LongAdder]]></title><link>https://blog.youkuaiyun.com/codingtu/article/details/89047291</link><guid>https://blog.youkuaiyun.com/codingtu/article/details/89047291</guid><author>codingtu</author><pubDate>Fri, 05 Apr 2019 20:34:25 +0800</pubDate><description><![CDATA[比AtomicLong更高效的并发计数类LongAdder
(本文为原创文章，未经博主同意，禁止任何形式转载!)
最近在看https://github.com/alibaba/Sentinel(轻量级的流量控制、熔断降级 Java 库)源码的时候，看到在统计数量的时候使用了LongAdder。这个LongAdder是jdk1.8新增的，出自Doug Lea之手，伟大的Java并发大师的鼻祖。在没有...]]></description><category></category></item><item><title><![CDATA[ForkJoin框架使用和原理剖析]]></title><link>https://blog.youkuaiyun.com/codingtu/article/details/88729498</link><guid>https://blog.youkuaiyun.com/codingtu/article/details/88729498</guid><author>codingtu</author><pubDate>Thu, 21 Mar 2019 23:49:59 +0800</pubDate><description><![CDATA[ForkJoin使用和原理剖析
相信大家此前或多或少有了解到ForkJoin，ForkJoin框架其实就是一个线程池ExecutorService的实现，通过工作窃取(work-stealing)算法,获取其他线程中未完成的任务来执行。可以充分利用机器的多处理器优势，利用空闲的线程去并行快速完成一个可拆分为小任务的大任务，类似于分治算法。ForkJoin的目标，就是使用所有可用的处理能力来提高程序...]]></description><category></category></item><item><title><![CDATA[Java8新特性学习（三）- Stream类]]></title><link>https://blog.youkuaiyun.com/codingtu/article/details/88380197</link><guid>https://blog.youkuaiyun.com/codingtu/article/details/88380197</guid><author>codingtu</author><pubDate>Tue, 12 Mar 2019 23:16:50 +0800</pubDate><description><![CDATA[Java8新特性学习（三）- Stream类

]]></description><category></category></item><item><title><![CDATA[Java8新特性学习（二）- Optional类]]></title><link>https://blog.youkuaiyun.com/codingtu/article/details/87826793</link><guid>https://blog.youkuaiyun.com/codingtu/article/details/87826793</guid><author>codingtu</author><pubDate>Wed, 20 Feb 2019 22:03:33 +0800</pubDate><description><![CDATA[背景
Optional是一个容器，用来管理一个对象。主要是用来解决null和NullPointerException问题。
Java7 -&amp;amp;gt; Java8 Optional是如何简化你的代码
假设有一个Student类
@Data
public class Student {
    private String name;
    private Integer age;

    publ...]]></description><category></category></item><item><title><![CDATA[Java8新特性学习（一）- 开篇介绍]]></title><link>https://blog.youkuaiyun.com/codingtu/article/details/87655804</link><guid>https://blog.youkuaiyun.com/codingtu/article/details/87655804</guid><author>codingtu</author><pubDate>Mon, 18 Feb 2019 23:38:09 +0800</pubDate><description><![CDATA[背景
随着工作的深入，用到的知识是越来越多，代码中用到Java8的特性也越来越多，如果只是知道几个简单的用法而不从本质上去知道其背景、实现原理，理解代码是一件相对困难的事情。基于此，接下来将相对系统的去学习Java8的一些新特性，也算是用自燃的方式来点燃各位想要掌握新知识的同学，一起进步！
新特性
Oracle在2014年就发布了Java8，Java8是Java语言的一个重要的版本。Java8支持...]]></description><category></category></item><item><title><![CDATA[Guava Cache expireAfterWrite 与 refreshAfterWrite区别]]></title><link>https://blog.youkuaiyun.com/codingtu/article/details/87525761</link><guid>https://blog.youkuaiyun.com/codingtu/article/details/87525761</guid><author>codingtu</author><pubDate>Sun, 17 Feb 2019 12:42:43 +0800</pubDate><description><![CDATA[前面的文章缓存篇（一）- Guava有讲到Guava Cache有区别于ConcurrentHashMap的使用，就是因为其自带有自动刷新和自动失效的功能，避免我们去自己编写刷新和失效的后台线程程序。Guava Cache提供了简单便捷的api给我们使用，但是研究源码发现这里的自动刷新缓存和自动失效原理，并非是Guava Cache帮我们去添加了类似后台线程自动刷新或失效逻辑的代码，而是用另外一种...]]></description><category></category></item><item><title><![CDATA[别踩坑！使用MySQL唯一索引请注意]]></title><link>https://blog.youkuaiyun.com/codingtu/article/details/86683000</link><guid>https://blog.youkuaiyun.com/codingtu/article/details/86683000</guid><author>codingtu</author><pubDate>Mon, 28 Jan 2019 21:33:14 +0800</pubDate><description><![CDATA[背景
在程序设计中了，我们往往需要确保数据的唯一性，比如在常见的注册模块，我们需要确保一个手机号只能注册为一个账号。这种情况下，我们的程序往往是第一道关卡，用户来注册之前，首先判断这个手机号是否已经注册，如果已经注册则返回错误信息。但是我们不能确保同时有两个人使用同一个手机号注册到我们的系统中，因此这里就需要在更深的层次去确保手机号的唯一性了。不同存储方案，解决方式不一样，这里以MySQL为例，我...]]></description><category></category></item><item><title><![CDATA[HashMap的算法解析及高并发下死循环分析]]></title><link>https://blog.youkuaiyun.com/codingtu/article/details/84846220</link><guid>https://blog.youkuaiyun.com/codingtu/article/details/84846220</guid><author>codingtu</author><pubDate>Thu, 06 Dec 2018 08:59:34 +0800</pubDate><description><![CDATA[HashMap是一个以空间换时间，内部以数组+链表\红黑树实现的散列表。HashMap的具体原理我们不做深入仔细分析，这类文章网上较多，且HashMap在面试中命中率极高。本文以jdk1.8为例，只分析里面我认为值得拿出来分析的有关数据结构和算法的部分来讲解。
HashMap的长度
HashMap的初始默认长度是16.HashMap在jdk1.8上做了一层优化，创建时并没有创建Node数组，只有首...]]></description><category></category></item><item><title><![CDATA[排序算法总结(含动图演示和Java代码实现)]]></title><link>https://blog.youkuaiyun.com/codingtu/article/details/84741942</link><guid>https://blog.youkuaiyun.com/codingtu/article/details/84741942</guid><author>codingtu</author><pubDate>Mon, 03 Dec 2018 08:10:15 +0800</pubDate><description><![CDATA[本文将围绕冒泡排序、桶排序、计数排序、堆排序、插入排序、并归排序、快速排序和选择排序，按照描述、时间复杂度(最坏情况)、动态图展示和代码实现来讲解。本文默认排序为从小到大。
本文相关代码已上传至github，欢迎关注https://github.com/zhuzhenke/common-algorithms
公用方法
SortUtils
public class SortUtils {

    ...]]></description><category></category></item><item><title><![CDATA[MySQL基本原理和使用技巧]]></title><link>https://blog.youkuaiyun.com/codingtu/article/details/84038530</link><guid>https://blog.youkuaiyun.com/codingtu/article/details/84038530</guid><author>codingtu</author><pubDate>Tue, 13 Nov 2018 23:51:37 +0800</pubDate><description><![CDATA[本文是我在大半年前在前公司做团队分享时的一个文档，写得比较挫，当时分享讲了2个小时，自己感觉讲得还可以。最近前同事跑来问我还有没有文档保存，翻了旧电脑和硬盘才找出来，于是就想着分享一下。

一、MySQL整体结构


服务器层(负责客户端连接、授权认证、安全、线程管理等)


核心层(缓存查询、解析器、查询优化器、函数)(存储过程，触发器，视图)


存储引擎层(MyISAM、InnoDB、Mem...]]></description><category></category></item><item><title><![CDATA[缓存篇（四）- Memcache(未完成)]]></title><link>https://blog.youkuaiyun.com/codingtu/article/details/83480129</link><guid>https://blog.youkuaiyun.com/codingtu/article/details/83480129</guid><author>codingtu</author><pubDate>Sun, 28 Oct 2018 23:52:44 +0800</pubDate><description><![CDATA[ 缓存篇（四）- Memcache]]></description><category></category></item><item><title><![CDATA[缓存篇（三）- Spring Cache框架]]></title><link>https://blog.youkuaiyun.com/codingtu/article/details/83053628</link><guid>https://blog.youkuaiyun.com/codingtu/article/details/83053628</guid><author>codingtu</author><pubDate>Mon, 15 Oct 2018 08:11:03 +0800</pubDate><description><![CDATA[前两篇我们讲了Guava和JetCache，他们都是缓存的具体实现，今天给大家分析一下Spring框架本身对这些缓存具体实现的支持和融合，使用Spring Cache将大大的减少我们的Spring项目中缓存使用的复杂度，提高代码可读性。本文将从以下几个方面来认识Spring Cache框架

背景

SpringCache产生的背景其实与Spring产生的背景有点类似。由于Java EE 系统框架...]]></description><category></category></item><item><title><![CDATA[缓存篇（二）- JetCache]]></title><link>https://blog.youkuaiyun.com/codingtu/article/details/82888891</link><guid>https://blog.youkuaiyun.com/codingtu/article/details/82888891</guid><author>codingtu</author><pubDate>Fri, 28 Sep 2018 19:27:25 +0800</pubDate><description><![CDATA[本文将由浅入深，从基本特性介绍，从简单demo使用，到JetCache源码分析，到Spring Aop的源码分析，到如何利用这些知识去自己尝试写一个自己的cache小demo，去做一个全面的概括。

*背景和特性

*用法demo

*JetCache源码分析

*Spring Aop的支持和源码分析

*写一个简单的cache框架demo

 

背景和特性

对于一些cache框架或产品，我们...]]></description><category></category></item><item><title><![CDATA[缓存篇（一）- Guava]]></title><link>https://blog.youkuaiyun.com/codingtu/article/details/81298229</link><guid>https://blog.youkuaiyun.com/codingtu/article/details/81298229</guid><author>codingtu</author><pubDate>Sat, 04 Aug 2018 17:41:52 +0800</pubDate><description><![CDATA[接下来几篇给大家分享一下缓存相关的内容，包括但不限于Guava，JetCache和Spring Cache等。

      Guava产生的背景

      最常见最简单的方式就是我们使用HashMap或者ConcurrentHashMap，在内存中缓存数据，通过key存放value，通过key读取我们需要的value数据。但是这里存在一个问题，value是会过期的。所以我们还得需要设置一个定...]]></description><category></category></item><item><title><![CDATA[RPC框架（二） - Dubbo]]></title><link>https://blog.youkuaiyun.com/codingtu/article/details/80648489</link><guid>https://blog.youkuaiyun.com/codingtu/article/details/80648489</guid><author>codingtu</author><pubDate>Mon, 11 Jun 2018 11:41:14 +0800</pubDate><description><![CDATA[    Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架，使得应用可通过高性能的 RPC 实现服务的输出和输入功能，可以和 Spring框架无缝集成。dubbo目前已经有apache托管，官方文档查看请点击http://dubbo.apache.org/books/dubbo-user-book/    下面针对dubbo服务框架，针对几个重要的点作针对性的介绍。    1、注册中心的作用，...]]></description><category></category></item><item><title><![CDATA[RPC框架（一） - Java自带的RMI]]></title><link>https://blog.youkuaiyun.com/codingtu/article/details/80389860</link><guid>https://blog.youkuaiyun.com/codingtu/article/details/80389860</guid><author>codingtu</author><pubDate>Mon, 21 May 2018 11:44:12 +0800</pubDate><description><![CDATA[    接下来的文章中，我将会去分析Java语言中常用的RPC框架，包括但不限于RMI、dubbo、Hessian、Spring Remoting框架。这篇文章将简要介绍Java语言自带的RMI协议。

 

    RMI（Remote Method Invocation），远程方法调用，程序调用方无需关心跨机器跨进程的协议调用，更多的把精力放在业务上，而且这也隐藏了服务器实现的细节。

   ...]]></description><category></category></item></channel></rss>