<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[马小婧QAQ]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/python8989</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; python8989]]></copyright><item><title><![CDATA[如果面试官问你CAS，你还这么答，可能就要回去等通知了]]></title><link>https://blog.csdn.net/python8989/article/details/122001211</link><guid>https://blog.csdn.net/python8989/article/details/122001211</guid><author>python8989</author><pubDate>Fri, 17 Dec 2021 17:34:14 +0800</pubDate><description><![CDATA[前言

大家好，我是JAVA高级开发之路，一个总在为粉丝解决面试题的程序员。

最近有几个粉丝说在面试面试中遇到了CAS的问题，连着几次面试都没有让面试官满意，区区CAS底层源码，怎能难倒咱们这届程序员们呢？都支棱起来，跟我一起来搞定CAS底层源码。



什么是CAS

CAS的全称是Compare-And-Swap，它是CPU并发原语。

它的功能是判断内存某个位置的值是否为预期值，如果是则更改为新的值，这个过程是原子的

CAS并发原语体现在Java语言中就是sun.misc.Unsafe类的各个方法]]></description><category></category></item><item><title><![CDATA[刷爆LeetCode 字节技术官亲码算法面试进阶神技太香了]]></title><link>https://blog.csdn.net/python8989/article/details/121858688</link><guid>https://blog.csdn.net/python8989/article/details/121858688</guid><author>python8989</author><pubDate>Fri, 10 Dec 2021 16:04:15 +0800</pubDate><description><![CDATA[数据结构与算法

正赶上金三银四，说到数据结构与算法这个词，肯定有不少人会眉头一皱。也不知从什么时候开始，以字节为主的一大波公司面试开始了对算法的连环拷问。如果事前没有系统地刷一波题的话，算法这一关还是比较难过的。





有人欢喜有人愁，对此挺多刚毕业的应届生表示，算法这东西好像并不是他们的拦路虎。相对于一些年龄稍大的程序员仅仅在做题这方面确实是抵不过20出头的小伙子，我们的优势主要工作经验，与项目经验，算法这一方面倒成了我们的短板。

如何补齐这一短板？

现在不管是面试还是工作，大势所趋之下，算法都]]></description><category></category></item><item><title><![CDATA[答应我不要再用Xshell了 这个新开源的终端工具酷炫又好用]]></title><link>https://blog.csdn.net/python8989/article/details/121755284</link><guid>https://blog.csdn.net/python8989/article/details/121755284</guid><author>python8989</author><pubDate>Mon, 06 Dec 2021 20:30:07 +0800</pubDate><description><![CDATA[我工作中用得最多的工具之一就是「终端连接工具」了，因为经常和 Linux 服务器打交道，经常在上面跑代码、排查系统问题等等。

Windows 系统最常用的就是 Xshell 这款终端工具了，但是它只能用于非商业用途，也就是说如果在公司用的话，公司就得掏钱了，当然不是大公司的话，也不会有人查你用盗版的问题。

另外，如果你想和 Linux 服务器传输文件的话，还得再下载个 Xftp，挺费事，而且 Xshell 没有支持 macOS。

那有没有一个，集成了文件传输功能，又支持多个系统，且是免费的终端工具呢？]]></description><category></category></item><item><title><![CDATA[分布式事务（2PC/3PC/TCC 最终一致性详解）]]></title><link>https://blog.csdn.net/python8989/article/details/114078443</link><guid>https://blog.csdn.net/python8989/article/details/114078443</guid><author>python8989</author><pubDate>Thu, 25 Feb 2021 13:48:08 +0800</pubDate><description><![CDATA[在分布式系统中，我们一般会根据业务对服务进行划分，这就会存在一些服务间的调用关系，所以普通的本地事务是满足不了我们的要求了，需要引入分布式事务来实现我们的一致性的要求。

这里对事务进行一个简单的介绍：

同学A给同学B转250块钱，系统首先从同学A的银行卡扣除250块钱，如果上述这个步骤成功了，但是系统往同学B的银行卡上转250块钱的时候失败了，那么就会造成数据对不上的情况了。在这种情况下我们就需要引入事务，保证转钱这两步操作要么同时成功要么同时失败，成功的情况就是同学B银行卡也收到了钱，失败的情况是回滚]]></description><category></category></item><item><title><![CDATA[面试官：小伙子我们先来详细的好好聊一聊NIO的三大组件]]></title><link>https://blog.csdn.net/python8989/article/details/114078400</link><guid>https://blog.csdn.net/python8989/article/details/114078400</guid><author>python8989</author><pubDate>Thu, 25 Feb 2021 13:47:36 +0800</pubDate><description><![CDATA[NIO是啥？

NIO是Java从JDK1.4开始引入的一系列改进版输入输出处理手段，也就是New IO，简称NIO，也有说法叫NonBlocking IO，是同步非阻塞式的IO模型，准确地说它支持阻塞非阻塞两种模式。

本篇主要介绍NIO提供的三大组件的概念及使用：Buffer，Channel，Selector。

Buffer

Buffer可以理解为是一个容器，用于存储数据，本质是个数组，存储的元素类型是基本类型。

无论是发送还是读取Channel中的数据，都必须先置入Buffer。

java.n]]></description><category></category></item><item><title><![CDATA[弯道超车！阿里甩出Spring Security宝典我粉了]]></title><link>https://blog.csdn.net/python8989/article/details/114078364</link><guid>https://blog.csdn.net/python8989/article/details/114078364</guid><author>python8989</author><pubDate>Thu, 25 Feb 2021 13:47:05 +0800</pubDate><description><![CDATA[前言

据有关数据表明Spring Security在Java应用安全领域已经慢慢成为首先被推崇的安全解决方案。虽然它在Java应用安全领域所占比重越来越大，但大多数开发者面对Spring Security这样的“庞然大物”时无从入手，也因为对其不够了解而在实际项目中不敢轻易采用。如何学？怎么把它引入到项目里？已经是每一个开发人员需要考虑的问题。

为了能带大家进入Spring Security的新世界，也本着好东西就是要拿出来分享的原则！今天互联网雷锋（小编我）就把从阿里一位老哥手上得到的Spring S]]></description><category></category></item><item><title><![CDATA[大白话揭秘搞好就能“年薪百万”的SpringCloud微服务]]></title><link>https://blog.csdn.net/python8989/article/details/114078327</link><guid>https://blog.csdn.net/python8989/article/details/114078327</guid><author>python8989</author><pubDate>Thu, 25 Feb 2021 13:46:34 +0800</pubDate><description><![CDATA[微服务基本概念

架构的演变

为什么会有微服务？

假如回到10年前，一天张三入职了电商企业—并夕夕商城。


公司初创，人比较少，公司网站的用户也很少，公司只有一个工程师

项目架构比较简单


1.单体架构





没有想到的是，公司业务越来越好，网站用户量越来越大，单体架构的问题就暴露出来了，随着访问量增加，项目经常宕机


问题：架构简单 难以抗住高并发


于是，招人。对并夕夕商城进行升级优化。


分析升级的方向：

数据库 和 应用代码要放在不同的服务器上

增加应用负载能力【集群】

.]]></description><category></category></item><item><title><![CDATA[MySQL详解：索引的介绍和原理分析]]></title><link>https://blog.csdn.net/python8989/article/details/114078235</link><guid>https://blog.csdn.net/python8989/article/details/114078235</guid><author>python8989</author><pubDate>Thu, 25 Feb 2021 13:45:33 +0800</pubDate><description><![CDATA[索引的定义

MySQL官方对索引的定义为：索引（Index）是协助MySQL高效获取数据的数据结构。

本质上，索引的目的是为了提高查询效率，通过不断地缩小想要获取数据的范围来筛选出最终想要的结果，同时把随机的事件变成顺序的事件，也就是说，有了这种索引机制，我们可以总是用同一种查找方式来锁定数据。

可以类比银行的保险柜，比如你要找归属你的保险柜子。如果没有索引，你需要拿着钥匙，一个个的保险柜的试过去才能找到属于你的保险柜。但是如果有了索引，而且保险柜能够以物理分区的方式存在在对应的区域，同时你可以根据钥]]></description><category></category></item><item><title><![CDATA[优秀！阿里甩出GC面试小册，仅7天Github获赞96.9K]]></title><link>https://blog.csdn.net/python8989/article/details/114078194</link><guid>https://blog.csdn.net/python8989/article/details/114078194</guid><author>python8989</author><pubDate>Thu, 25 Feb 2021 13:45:00 +0800</pubDate><description><![CDATA[Java垃圾回收

我们都知道Java在运行时内存分为了五个部分：程序计数器、虚拟机栈、本地方法栈、堆、方法区。其中程序计数器、虚拟机栈、本地方法栈所占用的内存是不需要垃圾收集的，这三个区域的内存随着线程生，随着线程死，我们需要关注的其实只有堆和方法区这两块内存的垃圾收集。这时候就需要用到GC技术了。

对于垃圾回收概念，它一出现常常伴随着一连串的问题：

GC具体做了什么？
	哪些内存需要回收？
	什么时候回收？
	怎么回收？
	垃圾回收算法&amp;垃圾回收器有哪些？
	......
如果你是一个新手，]]></description><category></category></item><item><title><![CDATA[趣谈哈希表优化：从规避 Hash 冲突到利⽤ Hash 冲突]]></title><link>https://blog.csdn.net/python8989/article/details/114078154</link><guid>https://blog.csdn.net/python8989/article/details/114078154</guid><author>python8989</author><pubDate>Thu, 25 Feb 2021 13:44:25 +0800</pubDate><description><![CDATA[导读： 本文从哈希表传统设计与解决思路入手，深入浅出地引出新的设计思路：从尽量规避哈希冲突，转向了利⽤合适的哈希冲突概率来优化计算和存储效率。新的哈希表设计表明 SIMD 指令的并⾏化处理能⼒的有效应⽤能⼤幅度提升哈希表对哈希冲突的容忍能⼒，进⽽提升查询的速度，并且能帮助哈希表进⾏极致的存储空间压缩。

1 背景

哈希表是⼀种查找性能⾮常优异的数据结构，它在计算机系统中存在着⼴泛的应⽤。尽管哈希表理论上 的查找时间复杂度是 O(1)，但不同的哈希表在实现上仍然存在巨⼤的性能差异，因⽽⼯程师们对更...]]></description><category></category></item><item><title><![CDATA[聊聊MySQL架构演进：从主从复制到分库分表]]></title><link>https://blog.csdn.net/python8989/article/details/114078113</link><guid>https://blog.csdn.net/python8989/article/details/114078113</guid><author>python8989</author><pubDate>Thu, 25 Feb 2021 13:43:44 +0800</pubDate><description><![CDATA[背景

业务飞速发展导致数据规模急速膨胀，单机的数据库已经无法满足互联网业务的发展。

传统的将数据集中存储单一数据结节的方案，在容量、性能、可用性和可维护性方面已经难以满足互联网海量数据的场景。

从容量方面考虑，单机数据库容量有限，难以扩容。

从性能方面来说，由于关系型数据库大多数采用B+树类型索引，在数据量超过一定的阈值后，索引的深度增加导致对磁盘的随机IO次数增加，进而导致性能问题。

从可用性方面来说，服务通常设计成无状态的，这必然导致系统的存储压力都集中在数据库层面，而单一的数据节点，或者简单]]></description><category></category></item><item><title><![CDATA[JVM又曾放过谁，垃圾终将被回收]]></title><link>https://blog.csdn.net/python8989/article/details/114078060</link><guid>https://blog.csdn.net/python8989/article/details/114078060</guid><author>python8989</author><pubDate>Thu, 25 Feb 2021 13:43:13 +0800</pubDate><description><![CDATA[背景

在Java中有一个很重要的概念，即一切皆对象。所谓对象，就是将现实中的事物抽象出来，进而可以通过继承、实现和组合的方式把万事万物都给容纳，所以理解对象的概念在学习Java(包括所有的面向对象的语言)的过程中至关重要。

当我们在程序中需要使用某个对象的时候，它就是爷爷，即使采用反射的方法也得把它创建出来；当我们不需要它的时候，它就是个垃圾，即使它能逃过新生代，在老年代也要依然追杀你。

今天，我们要学习的是JVM如何处理垃圾(对象)，在学习之前，我们先思考以下几个问题：

对象的生存周期有哪些阶段？]]></description><category></category></item><item><title><![CDATA[直击面试！阿里技术官手码12W字面试小册在Github上爆火]]></title><link>https://blog.csdn.net/python8989/article/details/114077977</link><guid>https://blog.csdn.net/python8989/article/details/114077977</guid><author>python8989</author><pubDate>Thu, 25 Feb 2021 13:42:32 +0800</pubDate><description><![CDATA[Java面试

临近金三银四，想必有不少老哥已经在为面试做准备了。大家想必也知道现在面试就是看项目经验+基本技术+个人潜力(也就是值不值得培养)。总之就是每一次面试都是对我们能力的检验（无论是软实力还是硬实力）。软实力其实就是简历包装，自我介绍，与面试官交谈技巧等等；所谓硬实力就是我们所掌握的技术情况了。所以每次面试之前需要做好充分的准备，切不可临时抱佛脚。技术基础打好后，面试前算题巩固也是必不可少的！

借此机会，LZ为大家带来了一份近期在Github上爆火的阿里面试小册。小册分别从软实力跟硬实力两方面入]]></description><category></category></item><item><title><![CDATA[干货满满，从一个案例学习k8s基本架构]]></title><link>https://blog.csdn.net/python8989/article/details/113918660</link><guid>https://blog.csdn.net/python8989/article/details/113918660</guid><author>python8989</author><pubDate>Sun, 21 Feb 2021 15:22:02 +0800</pubDate><description><![CDATA[前言

Kubernetes（简称K8S，K和S之间有8个字母）是用于自动部署，扩展和管理容器化应用程序的开源系统。它将组成应用程序的容器组合成逻辑单元，以便于管理和服务发现。Kubernetes 源自Google15年的生产环境的运维经验，同时凝聚了社区的最佳创意和实践。

一、基础组件

在服务器我已经使用kubadm搭建的k8s集群(若想深入学习，一定先搭建一套k8s集群哦)，一主(master)一从(slave)。系统创建的Pod都在namespace为kube-system中，我们可以看到k8s集]]></description><category></category></item><item><title><![CDATA[SpringBoot接口幂等性实现的4种方案，真的够用了]]></title><link>https://blog.csdn.net/python8989/article/details/113918375</link><guid>https://blog.csdn.net/python8989/article/details/113918375</guid><author>python8989</author><pubDate>Sun, 21 Feb 2021 15:04:56 +0800</pubDate><description><![CDATA[一、什么是幂等性

幂等是一个数学与计算机学概念，在数学中某一元运算为幂等时，其作用在任一元素两次后会和其作用一次的结果相同。在计算机编程中，一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数或幂等方法是指可以使用相同参数重复执行，并能获得相同结果的函数。这些函数不会影响系统状态，也不用担心重复执行会对系统造成改变。

二、什么是接口幂等性

在HTTP/1.1中，对幂等性进行了定义。它描述了一次和多次请求某一个资源对于资源本身应该具有同样的结果（网络超时等问题除外），即第一次请]]></description><category></category></item><item><title><![CDATA[什么？编译了三个版本Tomcat源码后，我才发现这个bug]]></title><link>https://blog.csdn.net/python8989/article/details/113918365</link><guid>https://blog.csdn.net/python8989/article/details/113918365</guid><author>python8989</author><pubDate>Sun, 21 Feb 2021 15:04:12 +0800</pubDate><description><![CDATA[背景

一产品是基于多模块开发的 SpringBoot 项目，发布时导出多个 war 包部署在同一个 Tomcat 。模块有五六个，发布时最大的问题就是每个包都很大，主要是各个模块的 WEB-INF/lib 下包含大量相同 jar ，因此有必要将公共包摘出来放到 Tomcat 的共享目录下。

然而，在捣鼓了两天后，我对 Tomcat 的多应用部署时共享公共包的能力产生了怀疑。理论上，同一个 Tomcat 下部署多个应用时，可以将所有共享 jar 放在 shared/lib 目录下，然后配置 shared.]]></description><category></category></item><item><title><![CDATA[系统的数据一致性到底是在说什么？我到今天才算真明白了]]></title><link>https://blog.csdn.net/python8989/article/details/113918359</link><guid>https://blog.csdn.net/python8989/article/details/113918359</guid><author>python8989</author><pubDate>Sun, 21 Feb 2021 15:03:31 +0800</pubDate><description><![CDATA[作为一名程序员，你是不是经常在很多场景，例如看博客、聊天吹水等等时候听到这样一个词"系统数据一致性"，是不是有时候感觉到了迷糊，不知道这个"系统数据一致性"到底是在说什么？其实，你可能只是不明白这个词，但是你肯定在实际工作中发现、解决过这样的问题。





单体架构下系统数据一致性问题

在传统的系统应用中，一般都是使用单体架构来构建系统的。即所有的功能模块都放在一起实现，打成一个WAR包部署在Tomcat中，数据一般存放在关系型数据库中，如MySQL数据库。





前面我说过即使这种单体架构的系..]]></description><category></category></item><item><title><![CDATA[又被“教育”了，Java中那些让我傻傻分不清楚的7个小细节]]></title><link>https://blog.csdn.net/python8989/article/details/113918351</link><guid>https://blog.csdn.net/python8989/article/details/113918351</guid><author>python8989</author><pubDate>Sun, 21 Feb 2021 15:02:59 +0800</pubDate><description><![CDATA[前言

最近我们通过sonar扫描代码的时候，发现了很多问题。除了常规的bug和安全漏洞之外，还有几处方法用法错误，引起了我极大的兴趣。我为什么会对这几个方法这么感兴趣呢？因为它们极具迷惑性，可能会让我们傻傻分不清楚。

1. replace会替换所有字符？

很多时候我们在使用字符串时，想把字符串比如：ATYSDFA*Y中的字符A替换成字符B，第一个想到的可能是使用replace方法。

如果想把所有的A都替换成B，很显然可以用replaceAll方法，因为非常直观，光从方法名就能猜出它的用途。

那么问]]></description><category></category></item><item><title><![CDATA[追根溯源，有点意思，关于MySQL更新“丢失”问题]]></title><link>https://blog.csdn.net/python8989/article/details/113918324</link><guid>https://blog.csdn.net/python8989/article/details/113918324</guid><author>python8989</author><pubDate>Sun, 21 Feb 2021 15:01:36 +0800</pubDate><description><![CDATA[人生苦短，不如养狗


一、问题现场

趁着这几天过节，复盘了一下去年的一些历史遗留问题，其中有这样一个关于数据库的小问题让我忍不住翻出来又回味了一下，下面就让我们一起品味品味。

首先，先来看下问题现场，操作数据库的执行流程如下图：   





这里对原有的业务逻辑进行简化，简化后的代码实现如下：


public void finishSubTask(SubTask subTask){
  // 进行子任务状态更新
  subTaskService.updateFinish(subTask);
..]]></description><category></category></item><item><title><![CDATA[一次并发插入死锁带来的“教训”，我才清楚这些MySQL锁知识]]></title><link>https://blog.csdn.net/python8989/article/details/113918316</link><guid>https://blog.csdn.net/python8989/article/details/113918316</guid><author>python8989</author><pubDate>Sun, 21 Feb 2021 15:01:04 +0800</pubDate><description><![CDATA[最近遇到一个由于唯一性索引，导致并发插入产生死锁的场景，在分析死锁产生的原因时，发现这一块还挺有意思的，涉及到MySql中不少的知识点，特此总结记录一下。





一、MySql常见的锁

谈到mysql的锁，可以说的就比较多了，比如行锁、表锁、页锁、元数据锁等，当然我们这里没打算把所有的都细列出来，我们这里主要针对行锁、gap锁进行拓展，以方便分析第二节中，为什么并发插入同样的数据会产生死锁的问题

0. 锁分类

我们最常说的锁，可以区分为共享锁(S)和排它锁(X)，在mysql的innodb引擎中.]]></description><category></category></item></channel></rss>