<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[清锋的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Steve_Hao</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Steve_Hao]]></copyright><item><title><![CDATA[缓存失效、穿透和雪崩的处理总结]]></title><link>https://blog.youkuaiyun.com/Steve_Hao/article/details/104236987</link><guid>https://blog.youkuaiyun.com/Steve_Hao/article/details/104236987</guid><author>Steve_Hao</author><pubDate>Sun, 09 Feb 2020 18:49:05 +0800</pubDate><description><![CDATA[1. 缓存失效
问题描述：
缓存第一个经典问题是缓存失效。服务系统查数据、首先会查询缓存，如果缓存数据不存在，就进一步查DB，最后查到数据后回种到缓存并返回。
缓存的性能比DB高50~100倍以上，所以希望数据在查询的时候尽可能命中缓存，这样系统符合最小，性能最佳。
缓存里的数据存储基本上都是以key为索引进行存储和获取的。业务访问的时候，如果大量的key同时过期，很多缓存数据访问都会miss，进...]]></description><category></category></item><item><title><![CDATA[设计缓存架构时需要考虑的因素总结]]></title><link>https://blog.youkuaiyun.com/Steve_Hao/article/details/104236432</link><guid>https://blog.youkuaiyun.com/Steve_Hao/article/details/104236432</guid><author>Steve_Hao</author><pubDate>Sun, 09 Feb 2020 16:32:55 +0800</pubDate><description><![CDATA[1. 缓存组件的选择
在设计架构缓存的时候，首先要选定缓存组件，比如要用Local-Cache，还是Redis、Memcached、Pika等开源缓存组件。
如果业务缓存需求比较特殊，还要考虑是直接定制开发一个新的缓存组件，还是对开源缓存进行二次开发，来满足业务需要。
2. 缓存数据结构设计
确定好缓存组件后，要根据业务访问的特点，进行缓存数据结构的设计。
对于简单的KV读写的业务，将这些业务数据...]]></description><category></category></item><item><title><![CDATA[如何根据业务来选择缓存模式和组件]]></title><link>https://blog.youkuaiyun.com/Steve_Hao/article/details/104234197</link><guid>https://blog.youkuaiyun.com/Steve_Hao/article/details/104234197</guid><author>Steve_Hao</author><pubDate>Sun, 09 Feb 2020 13:57:24 +0800</pubDate><description><![CDATA[如上图，业务系统读写缓存有三种模式：

Cache Aside（旁路缓存）
Read/Write Through（读写穿透）
Write Behind Caching（异步缓存写入）

1. Cache Aside (旁路缓存)

如上图所示，在Cache Aside中：
读/写

对于写，是更新 DB 后，直接将 key 从 cache 中删除，然后由 DB 驱动缓存数据的更新。
对于读，是先...]]></description><category></category></item><item><title><![CDATA[什么是缓存]]></title><link>https://blog.youkuaiyun.com/Steve_Hao/article/details/104233469</link><guid>https://blog.youkuaiyun.com/Steve_Hao/article/details/104233469</guid><author>Steve_Hao</author><pubDate>Sun, 09 Feb 2020 13:28:27 +0800</pubDate><description><![CDATA[缓存的定义
**狭义缓存：**缓存最初的含义，用于加速CPU数据交换的RAM，即随机存取存储器，通常这种存储器使用昂贵但快速的静态RAM（SRAM）技术，用于对DRAM进行加速。
**广义缓存：**任何可以用于数据高速交换的存储介质都是缓存，可以是硬件也可以是缓存。
缓存的意义
缓存存在的意义就是通过开辟一个新的数据交换缓冲区，来解决原始数据获取代价太大的问题，让数据得到更快的访问。
缓存原理
缓...]]></description><category></category></item><item><title><![CDATA[一探究竟：为什么需要JVM，它处在什么位置]]></title><link>https://blog.youkuaiyun.com/Steve_Hao/article/details/104172302</link><guid>https://blog.youkuaiyun.com/Steve_Hao/article/details/104172302</guid><author>Steve_Hao</author><pubDate>Tue, 04 Feb 2020 17:28:24 +0800</pubDate><description><![CDATA[作为一名软件工程师，在日常工作中除了Java这个关键词之外，还有另一个名词经常提及，那就是JVM。提到JVM经常会在面试中遇到下面的问题：

为什么Java研发系统需要JVM？
对JVM的运行原理了解多少？
Java代码到底是如何运行起来的？

想要完美的回答者三个问题，就需要首先了解JVM是什么？它和Java有什么关系？又与JDK有什么渊源？要想拨开这些问题的层层迷雾，需要从三个方面问题去思考：...]]></description><category></category></item><item><title><![CDATA[总结各种设计模式之间的关联]]></title><link>https://blog.youkuaiyun.com/Steve_Hao/article/details/104163210</link><guid>https://blog.youkuaiyun.com/Steve_Hao/article/details/104163210</guid><author>Steve_Hao</author><pubDate>Mon, 03 Feb 2020 23:24:01 +0800</pubDate><description><![CDATA[不要生搬硬套，根据业务场景选择。

不要把简单的事情搞复杂，设计模式用来解决复杂问题。

把复杂的问题变得简单起来（总结利用好前任经验）。

创建型：（只对结果负责，不要三无产品）

工厂模式

	原始社会 --&gt; 农耕社会 --&gt; 小作坊 --&gt; 工厂 --&gt; 流水线生成
		Spring: BeanFactory FactoryBean
	
	单例模式（保证独一无二）...]]></description><category></category></item><item><title><![CDATA[本质上，实现线程的方式只有一种]]></title><link>https://blog.youkuaiyun.com/Steve_Hao/article/details/103045268</link><guid>https://blog.youkuaiyun.com/Steve_Hao/article/details/103045268</guid><author>Steve_Hao</author><pubDate>Wed, 13 Nov 2019 21:38:57 +0800</pubDate><description><![CDATA[实现线程是并发编程中基础的基础，因为只有先实现多线程，才可以继续后续一系列操作。

虽然实现线程看似简单，但实际上却暗藏玄机。

实现线程的的方式到底有几种？2种、3种或是4种，很少人说只有1种。接下来看看它们具体指什么？2种实现方式的描述是最基本的，也是最熟知的，就先以2种线程实现方式的源码为例。

实现Runnable接口


// 代码1
public class RunnableThrea...]]></description><category></category></item><item><title><![CDATA[浏览器页面渲染机制]]></title><link>https://blog.youkuaiyun.com/Steve_Hao/article/details/100122614</link><guid>https://blog.youkuaiyun.com/Steve_Hao/article/details/100122614</guid><author>Steve_Hao</author><pubDate>Wed, 28 Aug 2019 16:53:43 +0800</pubDate><description><![CDATA[浏览器的内核是指支持浏览器运行的最核心的程序，分为两个部分的，一是渲染引擎，另一个JS引擎。渲染引擎在不同的浏览器中也不尽相同。目前市面上常见的浏览器内核可以分为这四种：Trident(IE)、Gecko（火狐）、Blink（Chrome、Opera）、Webkit（Safari）。这里面俺最熟悉的是Webkit内核了，Webkit内核是当下浏览器世界的老大。俺就以Webkit位栗子，对现代浏览器...]]></description><category></category></item><item><title><![CDATA[Java基本数据类型]]></title><link>https://blog.youkuaiyun.com/Steve_Hao/article/details/100073936</link><guid>https://blog.youkuaiyun.com/Steve_Hao/article/details/100073936</guid><author>Steve_Hao</author><pubDate>Mon, 26 Aug 2019 16:38:33 +0800</pubDate><description><![CDATA[变量是申请内存来存储值。当创建变量的时候，需要在内存中申请空间。

内存管理系统根据变量的类型分配存储空间，分配的空间只能用来存储该类型数据。

于是，通过定义不同类型的变量，可以在内存中存储整数、小数或着字符。

Java中有两大数据类型：

内置数据类型
	引用数据类型
内置数据类型

Java语言提供了八种基本数据类型。其中包括：六种数字类型（四个整数型，两个浮点型），一种字符类型，一种布尔...]]></description><category></category></item><item><title><![CDATA[1. 数据库的四个基本概念]]></title><link>https://blog.youkuaiyun.com/Steve_Hao/article/details/90667563</link><guid>https://blog.youkuaiyun.com/Steve_Hao/article/details/90667563</guid><author>Steve_Hao</author><pubDate>Wed, 29 May 2019 15:50:34 +0800</pubDate><description><![CDATA[数据库的四个基本概念

数据，数据库，数据库管理系统和数据库系统是与数据库技术密切相关的4个基本概念。

1). 数据（data）

描述事物的符号记录，譬如：数字、文字、图形、图像、音频、视频等，多种表现形式，均可以经过数字化存入计算机之中。

数据的表现形式还不能完全表达其内容，需要经过解释，数据的解释是指数据含义的说明，数据含义称为语义，数据与其语义是密不可分的。

2). 数据库（Data...]]></description><category></category></item><item><title><![CDATA[Java性能优化（上）]]></title><link>https://blog.youkuaiyun.com/Steve_Hao/article/details/89886509</link><guid>https://blog.youkuaiyun.com/Steve_Hao/article/details/89886509</guid><author>Steve_Hao</author><pubDate>Mon, 06 May 2019 16:54:57 +0800</pubDate><description><![CDATA[Java性能优化的50个细节1. 尽量在合适的场合使用单例2. 尽量避免随意使用静态变量3. 尽量避免过多过常地创建Java对象4. 尽量使用final修饰符5. 尽量使用局部变量6. 尽量处理好包装类型和基本类型两者的使用场所7. 慎用synchronized，尽量减小synchronize的方法8. 尽量不要使用finalize方法9. 尽量使用基本数据类型代替对象10. 多线程在未发生线程安...]]></description><category></category></item><item><title><![CDATA[web以及网络基础总结（上）]]></title><link>https://blog.youkuaiyun.com/Steve_Hao/article/details/88816799</link><guid>https://blog.youkuaiyun.com/Steve_Hao/article/details/88816799</guid><author>Steve_Hao</author><pubDate>Wed, 27 Mar 2019 17:44:59 +0800</pubDate><description><![CDATA[Web是建立在何种技术之上，以及HTTP协议是如何诞生并发展的，从其背景入手，深入了解这部分内容。

1. 使用HTTP协议访问web

当我们在网页浏览器(Web browser)的地址栏中输入URL时，Web页面是如何呈现的吗？



Web页面当然不是凭空显示出来的。根据Web浏览器地址栏中指定的URL，Web浏览器从Web服务器端获取文件资源（resource）等信息，从而显示出Web页面...]]></description><category></category></item><item><title><![CDATA[桥梁『桥接』模式]]></title><link>https://blog.youkuaiyun.com/Steve_Hao/article/details/86687003</link><guid>https://blog.youkuaiyun.com/Steve_Hao/article/details/86687003</guid><author>Steve_Hao</author><pubDate>Wed, 30 Jan 2019 15:08:08 +0800</pubDate><description><![CDATA[引子

谁都梦想能够成为亿万富翁。假设你有两家公司，一家是房地产公司，另一个家是服装制造公司。这两家公司都很赚钱，天天帮你积累财富。其实你并不关心公司类型，你关心的是它们赚不赚钱，赚了多少。商人嘛，唯利是图是其本性，偷税漏税是方法，欺上瞒下，压榨员工血汗是常用的手段。使用类图表示这两个公司，如图1所示：



类图很简单，首先声明了一个Crop的抽象类，定义一个公司的抽象模型，公司首要是赚钱的，做...]]></description><category></category></item><item><title><![CDATA[完全卸载node.js]]></title><link>https://blog.youkuaiyun.com/Steve_Hao/article/details/86673789</link><guid>https://blog.youkuaiyun.com/Steve_Hao/article/details/86673789</guid><author>Steve_Hao</author><pubDate>Mon, 28 Jan 2019 11:14:47 +0800</pubDate><description><![CDATA[node在安装后无法实现使用命令行卸载，需要手动删除一些文件夹。

1. Mac

方法一：


1. 删除/usr/local/lib中所有node和node_modules的文件夹

2. 如果是从brew安装的，运行brew uninstall node

3. 检查~/中所有的local、lib或者include文件夹，删除里面所有node和node_modules

4. 在/usr/l...]]></description><category></category></item><item><title><![CDATA[shell script的默认变量（$0,$1...）]]></title><link>https://blog.youkuaiyun.com/Steve_Hao/article/details/84478801</link><guid>https://blog.youkuaiyun.com/Steve_Hao/article/details/84478801</guid><author>Steve_Hao</author><pubDate>Sun, 25 Nov 2018 12:08:42 +0800</pubDate><description><![CDATA[Linux的命令可以带有参数，例如ls -al可以查看包含隐藏文件的所有属性与权限。那么shell script能不能在脚本文件名后面带有参数呢。举例子：重启系统注册表文件的功能：



上面的命令可以重新启动/etc/init.d/network这个程序。如果在其后面加个stop呢，很明显，就可以直接关闭该服务了！

如果想要依据程序的执行给予一些变量去进行不同的任务时（虽然可以使用read命令...]]></description><category></category></item><item><title><![CDATA[shell script的判断式]]></title><link>https://blog.youkuaiyun.com/Steve_Hao/article/details/84141616</link><guid>https://blog.youkuaiyun.com/Steve_Hao/article/details/84141616</guid><author>Steve_Hao</author><pubDate>Sun, 25 Nov 2018 11:01:03 +0800</pubDate><description><![CDATA[如果想要判断一个目录是否存在，可以使用命令ls搭配数据流重定向，再配合$?来决定后续的命令进行与否。

但是还有跟简单的方式开进行“条件判断”。他们是&quot;test&quot;命令和判断符合[]「中括号」

1.利用test命令的测试功能

当检测系统上面某些文件或者相关的属性时，利用test这个命令的效果非常令人满意。

当我要检查“/test”是否存在时，使用：



执行的结果不会显示任何信息，但是通过$...]]></description><category></category></item><item><title><![CDATA[script的执行方式区别(source,shscript,./script)]]></title><link>https://blog.youkuaiyun.com/Steve_Hao/article/details/84108014</link><guid>https://blog.youkuaiyun.com/Steve_Hao/article/details/84108014</guid><author>Steve_Hao</author><pubDate>Fri, 16 Nov 2018 12:02:37 +0800</pubDate><description><![CDATA[不同的script执行方式会造成不一样的结果。尤其对bash的环境影响很大。脚本执行方式除了sh方式之外，还可以利用source或小数点来执行。这三种执行方式有何不同，如下：

1. 利用直接执行的方式(shscript,./script)

利用这两种命令执行（无论是绝对路径还是相对路径甚至$PATH内），该script是在子进程的bash内执行的。根据父进程和子进程的概念可知，当子进程完成后，...]]></description><category></category></item><item><title><![CDATA[Linux文件属性总结]]></title><link>https://blog.youkuaiyun.com/Steve_Hao/article/details/84032567</link><guid>https://blog.youkuaiyun.com/Steve_Hao/article/details/84032567</guid><author>Steve_Hao</author><pubDate>Tue, 13 Nov 2018 17:36:10 +0800</pubDate><description><![CDATA[Linux的文件权限是如何针对“用户”与“用户组”设置的呢？

1. Linux文件属性

查看文件属性的命令：ls

命令英文原意：list


[root@www ~]# ls -al
total 36
dr-xr-x---.  2     root     root     4096      Nov 13 14:51     .
drwxr-xr-x. 18     root     ro...]]></description><category></category></item><item><title><![CDATA[linux用户与用户组]]></title><link>https://blog.youkuaiyun.com/Steve_Hao/article/details/84032430</link><guid>https://blog.youkuaiyun.com/Steve_Hao/article/details/84032430</guid><author>Steve_Hao</author><pubDate>Tue, 13 Nov 2018 17:23:15 +0800</pubDate><description><![CDATA[linux用户与用户组

Liunx最优秀的地方之一，在于它的多用户、多任务环境。而为了让各个用户具有有效的保密文件数据，文件的权限管理就变得非常的重要了。

Liunx一般将文件可存取访问的身份分为3个类别，分别是owner、group、others，且三种身份各有read、write、execute等权限。

若管理不当，Linux主机将变得非常令人不舒服！

Linux下面辣么多的目录、文件...]]></description><category></category></item><item><title><![CDATA[大型项目架构演进过程及思考的点]]></title><link>https://blog.youkuaiyun.com/Steve_Hao/article/details/84026278</link><guid>https://blog.youkuaiyun.com/Steve_Hao/article/details/84026278</guid><author>Steve_Hao</author><pubDate>Tue, 13 Nov 2018 11:40:41 +0800</pubDate><description><![CDATA[转载自慕课网Geely老师的手记：大型项目架构演进过程及思考的点

原文地址：https://www.imooc.com/article/17545]]></description><category></category></item></channel></rss>