<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Formor_的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Formor_</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Formor_]]></copyright><item><title><![CDATA[Mysql索引结构全维度比较]]></title><link>https://blog.youkuaiyun.com/Formor_/article/details/101560723</link><guid>https://blog.youkuaiyun.com/Formor_/article/details/101560723</guid><author>Formor_</author><pubDate>Fri, 27 Sep 2019 20:59:55 +0800</pubDate><description><![CDATA[前言
在MySQL中，无论是Innodb还是MyIsam，都使用了B+树作索引结构(这里不考虑hash等其他索引)。本文将从最普通的二叉查找树开始，逐步说明各种树解决的问题以及面临的新问题，从而说明MySQL为什么选择B+树作为索引结构。
一、二叉查找树(BST)：不平衡
二叉查找树(BST，Binary Search Tree)，也叫二叉排序树，在二叉树的基础上需要满足：任意节点的左子树上所有节...]]></description><category></category></item><item><title><![CDATA[高级java人员都用过的17个jvm参数]]></title><link>https://blog.youkuaiyun.com/Formor_/article/details/101557546</link><guid>https://blog.youkuaiyun.com/Formor_/article/details/101557546</guid><author>Formor_</author><pubDate>Fri, 27 Sep 2019 20:05:31 +0800</pubDate><description><![CDATA[前言
大家都知道，jvm在启动的时候，会执行默认的一些参数。一般情况下，这些设置的默认参数应对一些平常的项目也够用了。
但是如果项目特别大了，需要增加一下堆内存的大小、或者是系统老是莫明的挂掉，想查看下gc日志来排查一下错误的原因，都需要咱们手动设置这些参数。
各个参数介绍
1.verbose:gc
表示，启动jvm的时候，输出jvm里面的gc信息。格式如下：
[Full GC 178K-&gt;...]]></description><category></category></item><item><title><![CDATA[怎么理解java关键字volatile（附最新阿里面题）]]></title><link>https://blog.youkuaiyun.com/Formor_/article/details/100527132</link><guid>https://blog.youkuaiyun.com/Formor_/article/details/100527132</guid><author>Formor_</author><pubDate>Tue, 03 Sep 2019 20:43:02 +0800</pubDate><description><![CDATA[一、什么是volatile
volatile作为java中的关键词之一，用以声明变量的值可能随时会别的线程修改，使用volatile修饰的变量会强制将修改的值立即写入主存，主存中值的更新会使缓存中的值失效(非volatile变量不具备这样的特性，非volatile变量的值会被缓存，线程A更新了这个值，线程B读取这个变量的值时可能读到的并不是是线程A更新后的值)。volatile会禁止指令重排。
二...]]></description><category></category></item><item><title><![CDATA[redis持久化底层原理-RDB与AOF]]></title><link>https://blog.youkuaiyun.com/Formor_/article/details/100139367</link><guid>https://blog.youkuaiyun.com/Formor_/article/details/100139367</guid><author>Formor_</author><pubDate>Thu, 29 Aug 2019 15:34:17 +0800</pubDate><description><![CDATA[什么是Redis持久化?
Redis作为一个键值对内存数据库(NoSQL)，数据都存储在内存当中，在处理客户端请求时，所有操作都在内存当中进行，如下所示：

这样做有什么问题呢？
其实，只要稍微有点计算机基础知识的人都知道，存储在内存当中的数据，只要服务器关机(各种原因引起的)，内存中的数据就会消失了，不仅服务器关机会造成数据消失，Redis服务器守护进程退出，内存中的数据也一样会消失。

对于只...]]></description><category></category></item><item><title><![CDATA[Spring Cloud如何可用于微服务架构]]></title><link>https://blog.youkuaiyun.com/Formor_/article/details/100098132</link><guid>https://blog.youkuaiyun.com/Formor_/article/details/100098132</guid><author>Formor_</author><pubDate>Tue, 27 Aug 2019 13:57:01 +0800</pubDate><description><![CDATA[简介
微服务的发展史
微服务倡导将复杂的单体应用拆分为若干个功能简单、松耦合的服务，这样可以降低开发难度、增强扩展性、便于敏捷开发。当前被越来越多的开发者推崇，很多互联网行业巨头、开源社区等都开始了微服务的讨论和实践。Hailo有160个不同服务构成，NetFlix有大约600个服务。国内方面，阿里巴巴、腾讯、360、京东、58同城等很多互联网公司都进行了微服务化实践。当前微服务的开发框架也非常多...]]></description><category></category></item><item><title><![CDATA[闲赋在家的猿们、接下来怎么走？]]></title><link>https://blog.youkuaiyun.com/Formor_/article/details/99961212</link><guid>https://blog.youkuaiyun.com/Formor_/article/details/99961212</guid><author>Formor_</author><pubDate>Wed, 21 Aug 2019 14:47:31 +0800</pubDate><description><![CDATA[说来惭愧，不怕大家笑话。做开发5年多，到目前还是一名不折不扣的扫地僧。年前的辞职后便一直在家静养中。其实也没什么，就是想趁着这段时间闲赋在家认真的总结一下自己这些年来在外工作与面试等，做一个简单的总结与反思。年龄越来越大了，做一下自己后面一个人生规划。
不过在家每天也是在撸码，还有就是复习与学习现在的架构知识点，学习使人进步嘛！不是么？毕竟技术还是不能落下。
前些天在我群里认识了以为挺有意思的老兄...]]></description><category></category></item><item><title><![CDATA[一文读大厂微服务水平]]></title><link>https://blog.youkuaiyun.com/Formor_/article/details/99735699</link><guid>https://blog.youkuaiyun.com/Formor_/article/details/99735699</guid><author>Formor_</author><pubDate>Tue, 20 Aug 2019 12:58:36 +0800</pubDate><description><![CDATA[微服务架构的系统是一个分布式的系统，按业务进行划分为独立的服务单元，解决单体系统的不足，同时也满足越来越复杂的业务需求。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下，每个任务代表着一个小的业务能力。
微服务就是将一个单体架构的应用按业务划分为一个个的独立运行的程序即服务，每种应用程序都在其自己的进程中运行。它们之间通过轻量级机制（通常是HTTP资源的API）进行通信（也可以采用消...]]></description><category></category></item><item><title><![CDATA[备战金九银十 你必须知道的Mybatis面试题]]></title><link>https://blog.youkuaiyun.com/Formor_/article/details/99680250</link><guid>https://blog.youkuaiyun.com/Formor_/article/details/99680250</guid><author>Formor_</author><pubDate>Fri, 16 Aug 2019 16:10:19 +0800</pubDate><description><![CDATA[1. #{}和${}的区别是什么？
#{}是预编译处理，${}是字符串替换。
Mybatis 在处理#{}时，会将 sql 中的#{}替换为?号，调用 PreparedStatement 的 set 方法来赋值；
Mybatis 在处理时，就是把{}替换成变量的值。
使用#{}可以有效的防止 SQL 注入，提高系统安全性。
2. Mybatis 是如何进行分页的？分页插件的原理是什么？
Mybat...]]></description><category></category></item><item><title><![CDATA[实战分布式之电商高并发秒杀]]></title><link>https://blog.youkuaiyun.com/Formor_/article/details/99616044</link><guid>https://blog.youkuaiyun.com/Formor_/article/details/99616044</guid><author>Formor_</author><pubDate>Wed, 14 Aug 2019 22:31:45 +0800</pubDate><description><![CDATA[何为“秒杀”及其特点
“秒杀”这一业务场景在如今已经不是什么新鲜名词，它本质上属于短时突发性高并发访问问题，业务特点如下：

定时触发，流量在瞬间突增
秒杀请求中常常只有部分能够成功
秒杀商品数量往往有限，不能超卖，但能接受少卖
不要求立即返回真实下单结果

分析一下这些秒杀场景的典型特点，我们不难看出，秒杀场景属于典型的高并发场景，对系统的冲击较大。我们来对上述特点进行逐一分析：
1.定时触发，...]]></description><category></category></item><item><title><![CDATA[多线程经典面试题]]></title><link>https://blog.youkuaiyun.com/Formor_/article/details/99601200</link><guid>https://blog.youkuaiyun.com/Formor_/article/details/99601200</guid><author>Formor_</author><pubDate>Wed, 14 Aug 2019 20:48:38 +0800</pubDate><description><![CDATA[什么是线程池？ 有哪几种创建方式？
线程池就是提前创建若干个线程，如果有任务需要处理，线程池里的线程就会处理任务，处理完之后线程并不会被销毁，而是等待下一个任务。由于创建和销毁线程都是消耗系统资源的，所以当你想要频繁的创建和销毁线程的时候就可以考虑使用线程池来提升系统的性能。
java 提供了一个 java.util.concurrent.Executor接口的实现用于创建线程池。
四种线程池的创...]]></description><category></category></item><item><title><![CDATA[java线程池——逐步分析]]></title><link>https://blog.youkuaiyun.com/Formor_/article/details/99473126</link><guid>https://blog.youkuaiyun.com/Formor_/article/details/99473126</guid><author>Formor_</author><pubDate>Tue, 13 Aug 2019 21:41:01 +0800</pubDate><description><![CDATA[什么是线程池
很简单，简单看名字就知道是装有线程的池子，我们可以把要执行的多线程交给线程池来处理，和连接池的概念一样，通过维护一定数量的线程池来达到多个线程的复用。
线程池的优点
.我们知道不用线程池的话，每个线程都要通过new Thread(xxRunnable).start()的方式来创建并运行一个线程，线程少的话这不会是问题，而真实环境可能会开启多个线程让系统和程序达到最佳效率，当线程数达到...]]></description><category></category></item><item><title><![CDATA[MySQL 查询优化如何坐到极致？]]></title><link>https://blog.youkuaiyun.com/Formor_/article/details/99446669</link><guid>https://blog.youkuaiyun.com/Formor_/article/details/99446669</guid><author>Formor_</author><pubDate>Tue, 13 Aug 2019 16:55:04 +0800</pubDate><description><![CDATA[什么影响了数据库查询速度
1.1 影响数据库查询速度的四个因素

1.2 风险分析
QPS：QueriesPerSecond意思是“每秒查询率”，是一台服务器每秒能够相应的查询次数，是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。
TPS：是TransactionsPerSecond的缩写，也就是事务数/秒。它是软件测试结果的测量单位。客户机在发送请求时开始计时，收到服务器响应后结...]]></description><category></category></item><item><title><![CDATA[这样是不是就能把系统设计好？？]]></title><link>https://blog.youkuaiyun.com/Formor_/article/details/99428359</link><guid>https://blog.youkuaiyun.com/Formor_/article/details/99428359</guid><author>Formor_</author><pubDate>Tue, 13 Aug 2019 13:52:48 +0800</pubDate><description><![CDATA[一、善用UML工具
用例图
用于需求分析阶段，从用户角度描述系统功能。

静态图：类图、对象图、包图

交互图-时序图（注重时间）
常用组合片段：选项（Opt）、循环（Loop）、并行（Par）、抉择（Alt）、中断（Break）

交互图-协作图（注重对象）

行为图-状态图（注重状态）

行为图-活动图（注重活动）

实现图-组件图

实现图-部署图

二、遵从设计原则
设计模式基础

单一职...]]></description><category></category></item><item><title><![CDATA[Redis之实现持久化与恢复]]></title><link>https://blog.youkuaiyun.com/Formor_/article/details/99332889</link><guid>https://blog.youkuaiyun.com/Formor_/article/details/99332889</guid><author>Formor_</author><pubDate>Mon, 12 Aug 2019 20:14:48 +0800</pubDate><description><![CDATA[一、前言
本文主要讲了 Redis 的持久化相关功能，持久化一直是影响 Redis 性能的高发地，也是面试中经常被问到的。
包括 RDB 相关的特定和优缺点，AOF 的优缺点，事实上，由于 RDB 的数据实时性问题，目前用 AOF 比较多了，而持久化恢复也是优先 AOF。
RDB 是旧的模式，现在基本上都使用 AOF。
二、AOF
由于 RDB 的数据实时性问题，AOF（append only f...]]></description><category></category></item><item><title><![CDATA[入行这么久？ 真正理解了缓存吗]]></title><link>https://blog.youkuaiyun.com/Formor_/article/details/99327347</link><guid>https://blog.youkuaiyun.com/Formor_/article/details/99327347</guid><author>Formor_</author><pubDate>Mon, 12 Aug 2019 19:41:23 +0800</pubDate><description><![CDATA[今天跟大家分享的缓存是指软件层面的缓存。大家都知道的一点是，缓存可以让原本打开很慢的页面，变得能“秒开”。你平时访问的 APP 与网站几乎都有涉及到缓存的运用。
那么，缓存除了能加速数据的访问之外，还有什么作用呢？
另外，任何事物都有两面性，我们如何才能将缓存的优点发挥得淋淋尽致，同时避免掉到它的弊端中呢？
缓存能做什么？
正如前面所说，大家最普遍的理解就是当我们遇到某个页面打开很慢的时候，会想到...]]></description><category></category></item><item><title><![CDATA[谈谈JVM-深堆、浅堆]]></title><link>https://blog.youkuaiyun.com/Formor_/article/details/98878893</link><guid>https://blog.youkuaiyun.com/Formor_/article/details/98878893</guid><author>Formor_</author><pubDate>Thu, 08 Aug 2019 17:34:40 +0800</pubDate><description><![CDATA[浅堆表示一个对象结构所占用的大小（对象头+实例数据+对齐填充，不包括内部引用 对象大小）
深堆表示一个对象被 GC 回收后，可以真实释放的内存大小（保留空间）
对象
对象 = 对象头 + 实例数据 + 对齐填充
对象头
对象头 = 标记部分 + 原始对象引用
标记部分包括 hashcode、gc 分代年龄、锁状态标志、线程持有锁、偏向线程锁id，偏向时间戳，这一部分在32位机器上为 4 byte，...]]></description><category></category></item><item><title><![CDATA[线程池-打开方式]]></title><link>https://blog.youkuaiyun.com/Formor_/article/details/98498511</link><guid>https://blog.youkuaiyun.com/Formor_/article/details/98498511</guid><author>Formor_</author><pubDate>Mon, 05 Aug 2019 16:52:17 +0800</pubDate><description><![CDATA[为什么不推荐使用Executors
底层确实是通过LinkedBlockingQueue实现的，默认不设置队列大小的话，将是一个无边界的阻塞队列，最大长度为Integer.MAX_VALUE，而创建这么多线程，必然就有可能导致OOM，报错如下：
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exce...]]></description><category></category></item><item><title><![CDATA[程序猿面试十家，只斩获两家]]></title><link>https://blog.youkuaiyun.com/Formor_/article/details/98489935</link><guid>https://blog.youkuaiyun.com/Formor_/article/details/98489935</guid><author>Formor_</author><pubDate>Mon, 05 Aug 2019 15:18:57 +0800</pubDate><description><![CDATA[在这里给大家分享一位程序员面试的经历，希望小伙伴们喜欢!

2018年3月刚入职一家公司，2019年3月又跳了出来。其实这家公司并没有亏待过我，只是每家公司都有自己的企业文化，而我不能接受此公司企业文化，离开是我考虑过之后最好的决定。
既然离职了肯定就需要找工作，这里我与大家分享下个人找工作的经历(这里不会透露每家公司的面试题，也尽量不透露公司信息)。
第一天出来找工作，共有三家面试：百度 XX...]]></description><category></category></item><item><title><![CDATA[java虚拟机-正解姿势]]></title><link>https://blog.youkuaiyun.com/Formor_/article/details/98244344</link><guid>https://blog.youkuaiyun.com/Formor_/article/details/98244344</guid><author>Formor_</author><pubDate>Fri, 02 Aug 2019 21:46:17 +0800</pubDate><description><![CDATA[一、什么是JVM
JVM是Java Virtual Machine（Java 虚拟机）的缩写，JVM是一种用于计算设备的规范，它是一个虚构出来的计算机，是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
Java语言的一个非常重要的特点就是平台无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行，至少需要编译成不同的目标代码。而引入Java语言虚拟机后，Ja...]]></description><category></category></item><item><title><![CDATA[Redis对象的底层实现及数据结构字符串]]></title><link>https://blog.youkuaiyun.com/Formor_/article/details/98102649</link><guid>https://blog.youkuaiyun.com/Formor_/article/details/98102649</guid><author>Formor_</author><pubDate>Thu, 01 Aug 2019 21:55:35 +0800</pubDate><description><![CDATA[Redis是一种key/value型数据库，其中，每个key和value都是使用对象表示的。
每次当我们在redis的数据库中新创建一个键值对时，我们至少会创建两个对象，一个对象用作键值对的键(键对象)，另一个对象用作键值对的值(值对象)。
redis的每种对象都由对象结构(redisObject)与对应编码的数据结构组合而成，redis支持5种对象类型。每种对象类型至少对应两种编码方式，不同的编...]]></description><category></category></item></channel></rss>