<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[superjava_的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/superjava_</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; superjava_]]></copyright><item><title><![CDATA[为什么循环队列要浪费一个存储空间]]></title><link>https://blog.youkuaiyun.com/superjava_/article/details/122502809</link><guid>https://blog.youkuaiyun.com/superjava_/article/details/122502809</guid><author>superjava_</author><pubDate>Fri, 14 Jan 2022 21:39:28 +0800</pubDate><description><![CDATA[什么是队列

队列和数组，链表，栈一样都是属于线性数据结构，而队列又和栈比较相似，都属于操作受限的数据结构，其中栈是“后入先出”，而队列是“先进先出”。

和栈一样，队列也仅有两个基本操作：入队和出队（栈则是入栈和出栈）。往队列中放元素称之为入队，往队列中取元素称之为出队，然而相对于栈来说，队列又会复杂一点。

队列中通常需要定义两个指针：head和tail（当然，也有称之为：front和rear）分别用来表示头指针和尾指针。初始化队列时，head和tail相等，当有元素入队时，tail指针...]]></description><category></category></item><item><title><![CDATA[Java中Volatile的原理及使用]]></title><link>https://blog.youkuaiyun.com/superjava_/article/details/122482592</link><guid>https://blog.youkuaiyun.com/superjava_/article/details/122482592</guid><author>superjava_</author><pubDate>Thu, 13 Jan 2022 21:01:04 +0800</pubDate><description><![CDATA[1、简介

volatile是轻量级的synchronized，不会引起线程上下文的切换和调度，因此使用和执行成本更低。

2、Volatile特性

2.1、Volatile保证可见性

当一个线程修改一个共享变量时，另外一个线程能读到这个修改的值
	对一个volatile变量的读，总是能看到任意线程对这个volatile变量最后的写入
2.1.1、可见性举例

下面用一个例子来说明：

线程t1中进行循环，直到tag变成true时才退出，线程t2负责将tag更新为true，先开始t1，后开始t2


p]]></description><category></category></item><item><title><![CDATA[选择了MySQL和SpringData JPA]]></title><link>https://blog.youkuaiyun.com/superjava_/article/details/122482004</link><guid>https://blog.youkuaiyun.com/superjava_/article/details/122482004</guid><author>superjava_</author><pubDate>Thu, 13 Jan 2022 20:30:28 +0800</pubDate><description><![CDATA[今天想跟大家聊聊数据库层面上的事，austin项目继续更新（注：今天聊的数据库都特指关系型数据库）

01、数据库选择

之前发了一张我可能要在austin项目上引入哪些技术栈的图，好多人问我分布式配置中心为什么不选择Nacos，而是用Apollo。却没人问我为什么数据库选择MySQL。

说起来MySQL，在网上看到的各类Java教程，几乎都是使用MySQL作为数据库。日常在群里聊各种数据库上的问题，也差不多都是MySQL，只有个别的可能用PostgreSQL和Oracle或其他

就连我在面试的时候，我]]></description><category></category></item><item><title><![CDATA[为啥春节抢红包总不是运气王？看完微信抢红包算法你就明白了]]></title><link>https://blog.youkuaiyun.com/superjava_/article/details/122476378</link><guid>https://blog.youkuaiyun.com/superjava_/article/details/122476378</guid><author>superjava_</author><pubDate>Thu, 13 Jan 2022 16:13:56 +0800</pubDate><description><![CDATA[前言

春节必不可少的活动就是抢红包啦，从以前的纸质红包到现在互联网红包（以微信红包为首），今天我们就来分析一下抢红包的算法，其中有一些是微信红包的算法，看完你就知道手气最佳是如何产生的啦！



算法一：剩余金额随机法

算法一是不推荐使用的，算法一全称叫剩余金额随机法，听名字就知道这个方法是将剩余的金额进行随机分配，我们先来看代码。


// 分配红包的算法
private static void testPocket(BigDecimal amount, BigDecima...]]></description><category></category></item><item><title><![CDATA[翻译翻译什么TMD叫EXPLAIN]]></title><link>https://blog.youkuaiyun.com/superjava_/article/details/122462079</link><guid>https://blog.youkuaiyun.com/superjava_/article/details/122462079</guid><author>superjava_</author><pubDate>Wed, 12 Jan 2022 20:49:13 +0800</pubDate><description><![CDATA[其实网上有很多写的很好的sql优化文章，全面细致，但是都遗漏了一个问题，只教了大家怎么治病，没教怎么看病，这就好比一个饱读医书的大夫，病人往这一坐，望闻问切全都不会，一身的本事不知道该用哪个？
急死个人了。
所以今天就聊聊怎么看病，也就是如何看MySQL的执行计划。

EXPLAIN

当客户端发送给服务端一条sql语句后，并不是拿过来就执行的，而是先经过优化器选取最优的方案，比如表的读取顺序，索引实际是否被使用，表之间的引用等。
而优化后的执行方案就称之为执行计划。

EXPLAIN的作用就是查看执行计划]]></description><category></category></item><item><title><![CDATA[一文说清楚ThreadLocal]]></title><link>https://blog.youkuaiyun.com/superjava_/article/details/122460357</link><guid>https://blog.youkuaiyun.com/superjava_/article/details/122460357</guid><author>superjava_</author><pubDate>Wed, 12 Jan 2022 19:14:53 +0800</pubDate><description><![CDATA[ThreadLocal

当多个线程对同一变量进行写操作的时候，容易出现线程安全问题，所以就会用到对应的锁和其他一些方法，我们先不介绍锁，先介绍ThreadLocal, ThreadLocal字面意思本地线程,ThreadLocal使每个线程之间是隔离的，数据是独立的，我们使用过session都知道 session是一个会话，我们可以用它来存储一些用户的基本信息，这样每个用户在服务端都能取到，ThreadLocal也可以做到，ThreadLocal将相应的信息存储在当前的线程中，只有当前线程能够访问，其他线]]></description><category></category></item><item><title><![CDATA[不会一致性hash算法，劝你简历别写搞过负载均衡]]></title><link>https://blog.youkuaiyun.com/superjava_/article/details/122452602</link><guid>https://blog.youkuaiyun.com/superjava_/article/details/122452602</guid><author>superjava_</author><pubDate>Wed, 12 Jan 2022 14:18:55 +0800</pubDate><description><![CDATA[大家好

这两天看到技术群里，有小伙伴在讨论一致性hash算法的问题，正愁没啥写的题目就来了，那就简单介绍下它的原理。下边我们以分布式缓存中经典场景举例，面试中也是经常提及的一些话题，看看什么是一致性hash算法以及它有那些过人之处。



构建场景

假如我们有三台缓存服务器编号node0、node1、node2，现在有3000万个key，希望可以将这些个key均匀的缓存到三台机器上，你会想到什么方案呢？

我们可能首先想到的方案，是取模算法hash（key）% N，对key进行hash运算后取模，N是机]]></description><category></category></item><item><title><![CDATA[IDEA注释模板，惊艳了。动作要快，姿势要帅]]></title><link>https://blog.youkuaiyun.com/superjava_/article/details/122441108</link><guid>https://blog.youkuaiyun.com/superjava_/article/details/122441108</guid><author>superjava_</author><pubDate>Tue, 11 Jan 2022 20:42:06 +0800</pubDate><description><![CDATA[一、类注释

打开 IDEA 的 Settings，点击 Editor--&gt;File and Code Templates，点击右边 File 选项卡下面的Class，在其中添加图中红框内的内容：


/**
 * @author jitwxs
 * @date ${YEAR}年${MONTH}月${DAY}日 ${TIME}
 */

注 意





在我提供的示例模板中，说明了作者和时间，IDEA 支持的所有的模板参数在下方的 Description 中被列出来。

保存后，当你创建一个新的类的]]></description><category></category></item><item><title><![CDATA[Spring切面加解密MySQL数据实战]]></title><link>https://blog.youkuaiyun.com/superjava_/article/details/122419010</link><guid>https://blog.youkuaiyun.com/superjava_/article/details/122419010</guid><author>superjava_</author><pubDate>Mon, 10 Jan 2022 20:48:43 +0800</pubDate><description><![CDATA[本篇文章就是如何解决针对字符串进行过滤拦截。mybatis拦截器也可以拦截字符串参数，至于为什么不在Mybatis拦截器里面把字符串参数进行加解密的原因：

不是所有字符串类型数据都需要加解密，只有在用手机号字作为入参和查询结果才加解密数据。而mybatis拦截器无法直接区分本次拦截的字符串是否需要加解密，所以才需要额外配置字符串拦截过滤（这里的字符串包括：手机号，真实姓名，身份证、银行卡号、支付宝账号等数据）
Spring切面拦截

Spring的aop在项目中使用场景还是比较广泛的，这次就使用次来进行字]]></description><category></category></item><item><title><![CDATA[AQS是什么？Java并发编程大师的源码不得不拜读呀]]></title><link>https://blog.youkuaiyun.com/superjava_/article/details/122417395</link><guid>https://blog.youkuaiyun.com/superjava_/article/details/122417395</guid><author>superjava_</author><pubDate>Mon, 10 Jan 2022 19:22:12 +0800</pubDate><description><![CDATA[目录

初识ReentrantLock

什么是AQS

AQS中的同步状态state

CLH变体队列

独占模式

共享模式

公平锁&amp;非公平锁

结语

大家好，我是tin，这是我的第13篇原创文章



​


文章首发于公众号【看点代码再上班】，欢迎围观，第一时间获取最新文章。


今天把ReentrantLock和AQS一起翻一翻，通过源码说一说我们的Java锁。

初识ReentrantLock

首先，我们同时启用5个线程对一个公共变量counter从0开始累加，每个线程只对变量+1]]></description><category></category></item><item><title><![CDATA[Java异步编程的核心类：FutureTask]]></title><link>https://blog.youkuaiyun.com/superjava_/article/details/122385594</link><guid>https://blog.youkuaiyun.com/superjava_/article/details/122385594</guid><author>superjava_</author><pubDate>Sat, 08 Jan 2022 20:15:17 +0800</pubDate><description><![CDATA[话不多说，直接进入正文。

一、FutureTask

1、FutureTask的通俗解释



有一天你饿了，想吃饭，但是你不会做，这时候你就跟你妈说：妈，我饿了，我要吃饭。然后你妈就去厨房做饭，同时你就去看球赛了（但是你不想被打扰，就跟你妈说，饭做好了贴个墙纸就好了）。你妈把饭做好并端到餐桌上了，并贴了个墙纸，也不告诉你，然后你饿的受不了了，看了一下墙，已经有贴纸了，你就去餐桌上吃饭了，如果没有贴纸你就继续看球赛。FutureTask就是这张墙纸。

当然，你要真这么干，估计你妈会打死你。

一句话总.]]></description><category></category></item><item><title><![CDATA[Mybatis拦截器安全加解密MySQL数据实战]]></title><link>https://blog.youkuaiyun.com/superjava_/article/details/122382567</link><guid>https://blog.youkuaiyun.com/superjava_/article/details/122382567</guid><author>superjava_</author><pubDate>Sat, 08 Jan 2022 16:46:53 +0800</pubDate><description><![CDATA[需求背景

公司为了通过一些金融安全指标（政策问题）和防止数据泄漏，需要对用户敏感数据进行加密，所以在公司项目中所有存储了用户信息的数据库都需要进行数据加密改造。包括Mysql、redis、mongodb、es、HBase等。
	因为在项目中是使用springboot+mybatis方式连接数据库进行增删改查，并且项目是中途改造数据。所以为了不影响正常业务，打算这次改动尽量不侵入到业务代码，加上mybatis开放的各种拦截器接口，所以就以此进行改造数据。
	本篇文章讲述如何在现有项目中尽量不侵入业务方式进行]]></description><category></category></item><item><title><![CDATA[SkyWalking Java Agent 配置初始化流程分析]]></title><link>https://blog.youkuaiyun.com/superjava_/article/details/122382497</link><guid>https://blog.youkuaiyun.com/superjava_/article/details/122382497</guid><author>superjava_</author><pubDate>Sat, 08 Jan 2022 16:41:14 +0800</pubDate><description><![CDATA[基于 SkyWalking Java Agent 8.8.0 版本

今天我们要分析的是 SkyWalking Java Agent 配置相关内容，我们接触到的框架大都需要一些配置文件，比如 SpringBoot 中的 application.yml。 SkyWalking Java Agent 在 premain 方法中首先做的就是通过SnifferConfigInitializer.initializeCoreConfig(agentArgs);初始化核心配置。


/**
 * The main ..]]></description><category></category></item><item><title><![CDATA[基于Netty手写一个远程连接Redis的IDEA插件]]></title><link>https://blog.youkuaiyun.com/superjava_/article/details/122368875</link><guid>https://blog.youkuaiyun.com/superjava_/article/details/122368875</guid><author>superjava_</author><pubDate>Fri, 07 Jan 2022 17:21:59 +0800</pubDate><description><![CDATA[前言

前几天一直在学习Netty框架,写了几个Demo,然后就想着可以用它来写点什么,然后又对编写idea的插件有点兴趣,那么就准备写一个idea插件.

写什么好呢,想起可以写一个Redis连接客户端的插件,这个也可以用上Netty,虽然市面上已经有很多redis的客户端,例如:Redis Desktop Manager这类的,不过很多是付费的,想白嫖需要找破解版,自己写的功能上虽然简陋,不过胜在使用方便,不用另开程序.很多时候也仅仅是想看看redis里数据有没有保存上,所以也够用了.

想要完...]]></description><category></category></item><item><title><![CDATA[咦，为什么我的事务回滚不了？]]></title><link>https://blog.youkuaiyun.com/superjava_/article/details/122365294</link><guid>https://blog.youkuaiyun.com/superjava_/article/details/122365294</guid><author>superjava_</author><pubDate>Fri, 07 Jan 2022 15:21:15 +0800</pubDate><description><![CDATA[MySQL 事务小伙伴们都懂，通过 begin 开启事务，通过 commit 提交事务或者通过 rollback 回滚事务。

在前面的文章中，松哥也和大家聊了一些事物原理以及相关的细节，小伙伴们可以回顾一下：

MVCC 水略深，但是弄懂了真的好爽！
	一致性视图是啥时候建立的？
	四个案例看懂 MySQL 事务隔离级别
正常来说，当我们开启一个事务之后，需要 commit 或者 rollback 来结束一个事务的，但是有时候，一些操作会自动帮我们提交事务，如果大家不了解隐式事务的话，那么在具体使用事务的]]></description><category></category></item><item><title><![CDATA[为什么索引可以让查询变快？终于有人说清楚了]]></title><link>https://blog.youkuaiyun.com/superjava_/article/details/122364079</link><guid>https://blog.youkuaiyun.com/superjava_/article/details/122364079</guid><author>superjava_</author><pubDate>Fri, 07 Jan 2022 14:39:44 +0800</pubDate><description><![CDATA[概述

人类存储信息的发展历程大致经历如下：





由于是个人凭着自己理解总结的，因此可能不一定精确，但是毋庸置疑的是，在当代，各大公司机构部门的数据都是维护在数据库当中的。

数据库作为数据存储介质发展的最新产物，必然是具有许多优点的，其中一个很大的优点就是存储在数据库中的数据访问速度非常快。

数据库访问速度快的一个很重要的原因就在于索引index的作用。也就是这篇文章的主要想介绍的内容，为什么索引可以让数据库查询变快？

计算机存储原理

在理解索引这个概念之前，我们需要先了解一下计算机存储方面的]]></description><category></category></item><item><title><![CDATA[全方位、多角度理解 ThreadLocal，还有谁不会？]]></title><link>https://blog.youkuaiyun.com/superjava_/article/details/122352408</link><guid>https://blog.youkuaiyun.com/superjava_/article/details/122352408</guid><author>superjava_</author><pubDate>Thu, 06 Jan 2022 20:38:38 +0800</pubDate><description><![CDATA[来源：blog.youkuaiyun.com/zzg1229059735/article/details/82715741



本次给大家介绍重要的工具ThreadLocal。讲解内容如下，同时介绍什么场景下发生内存泄漏，如何复现内存泄漏，如何正确使用它来避免内存泄漏。

ThreadLocal是什么？有哪些用途？
	ThreadLocal如何使用
	ThreadLocal原理
	ThreadLocal使用有哪些坑及注意事项
1. ThreadLocal是什么？有哪些用途？

首先介绍Thread类中属性thread]]></description><category></category></item><item><title><![CDATA[聊聊如何通过自定义注解实现springmvc和sentinel整合]]></title><link>https://blog.youkuaiyun.com/superjava_/article/details/122351968</link><guid>https://blog.youkuaiyun.com/superjava_/article/details/122351968</guid><author>superjava_</author><pubDate>Thu, 06 Jan 2022 20:16:43 +0800</pubDate><description><![CDATA[前言

今天我们就来聊下如何通过自定义注解把springmvc请求的功能和sentinel功能给整合起来

实现思路

核心思路通过一个注解把springmvc的@RequestMapping具备的功能 + @SentinelResource具备的功能给聚合起来

实现步骤

1、自定义注解


@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
pu]]></description><category></category></item><item><title><![CDATA[困扰程序员的7个“雷区”，只要遇上一个，都是崩溃的瞬间]]></title><link>https://blog.youkuaiyun.com/superjava_/article/details/122347361</link><guid>https://blog.youkuaiyun.com/superjava_/article/details/122347361</guid><author>superjava_</author><pubDate>Thu, 06 Jan 2022 16:37:17 +0800</pubDate><description><![CDATA[谈到程序员，不得不提那些让程序员们崩溃的几件事，简直就是噩梦!下面这几条，从业编程人员的你，有没有遇到过呢?



1、技术大牛帮不上忙

“emmmm……遇到了个技术难题，去 GitHub 和Google 上找找答案”，然后就没有然后了……

每个程序员浏览器书签里肯定有几个优秀的技术官网或论坛社区，用里面的资源来提高自己的编程技术。

但是!!!有些问题大牛也帮不上什么忙，真的是恐怖的噩梦!

2、断网掉线

“没有网，就没办法 Google，不能 Google 就不能解决问题，解决不了问题，公司就能解]]></description><category></category></item><item><title><![CDATA[这个 SpringCloud 微服务商城值得推荐]]></title><link>https://blog.youkuaiyun.com/superjava_/article/details/122343276</link><guid>https://blog.youkuaiyun.com/superjava_/article/details/122343276</guid><author>superjava_</author><pubDate>Thu, 06 Jan 2022 14:42:37 +0800</pubDate><description><![CDATA[一个基于Spring Cloud、Nacos、Seata、Mysql、Redis、RocketMQ、canal、ElasticSearch、minio的微服务B2B2C电商商城系统，采用主流的互联网技术架构、全新的UI设计、支持集群部署、服务注册和发现以及拥有完整的订单流程等，代码完全开源，没有任何二次封装，是一个非常适合二次开发的电商平台系统。

前言

本商城致力于为中大型企业打造一个功能完整、易于维护的微服务B2B2C电商商城系统，采用主流微服务技术实现。后台管理系统包含平台管理，店铺管理...]]></description><category></category></item></channel></rss>