<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[LU_ZHAO的博客]]></title><description><![CDATA[明日复明日，明日何其多]]></description><link>https://blog.youkuaiyun.com/LU_ZHAO</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; LU_ZHAO]]></copyright><item><title><![CDATA[一些学习和资源网站]]></title><link>https://blog.youkuaiyun.com/LU_ZHAO/article/details/104972916</link><guid>https://blog.youkuaiyun.com/LU_ZHAO/article/details/104972916</guid><author>LU_ZHAO</author><pubDate>Fri, 17 Apr 2020 16:55:15 +0800</pubDate><description><![CDATA[c++
http://purecpp.org/
https://en.cppreference.com/

]]></description><category></category></item><item><title><![CDATA[The Serenity Prayer]]></title><link>https://blog.youkuaiyun.com/LU_ZHAO/article/details/104935957</link><guid>https://blog.youkuaiyun.com/LU_ZHAO/article/details/104935957</guid><author>LU_ZHAO</author><pubDate>Wed, 15 Apr 2020 16:01:26 +0800</pubDate><description><![CDATA[The Serenity Prayer

God grant me the serenity 
to accept the things I cannot change; 
courage to change the things I can; 
and wisdom to know the difference. 

Living one day at a time; 
Enjoying one...]]></description><category></category></item><item><title><![CDATA[现代cpu的合并写技术对程序的影响]]></title><link>https://blog.youkuaiyun.com/LU_ZHAO/article/details/105269362</link><guid>https://blog.youkuaiyun.com/LU_ZHAO/article/details/105269362</guid><author>LU_ZHAO</author><pubDate>Thu, 02 Apr 2020 14:43:00 +0800</pubDate><description><![CDATA[对于现代cpu而言，性能瓶颈则是对于内存的访问。cpu的速度往往都比主存的高至少两个数量级。因此cpu都引入了L1_cache与L2_cache,更加高端的cpu还加入了L3_cache.很显然，这个技术引起了下一个问题:
如果一个cpu在执行的时候需要访问的内存都不在cache中，cpu必须要通过内存总线到主存中取，那么在数据返回到cpu这段时间内（这段时间大致为cpu执行成百上千条指令的时间，...]]></description><category></category></item><item><title><![CDATA[伪共享（false sharing），并发编程无声的性能杀手]]></title><link>https://blog.youkuaiyun.com/LU_ZHAO/article/details/105265607</link><guid>https://blog.youkuaiyun.com/LU_ZHAO/article/details/105265607</guid><author>LU_ZHAO</author><pubDate>Thu, 02 Apr 2020 11:35:08 +0800</pubDate><description><![CDATA[什么是共享
下图是计算的基本结构。L1、L2、L3分别表示一级缓存、二级缓存、三级缓存，越靠近CPU的缓存，速度越快，容量也越小。所以L1缓存很小但很快，并且紧靠着在使用它的CPU内核；L2大一些，也慢一些，并且仍然只能被一个单独的CPU核使用；L3更大、更慢，并且被单个插槽上的所有CPU核共享；最后是主存，由全部插槽上的所有CPU核共享。

当CPU执行运算的时候，它先去L1查找所需的数据、再去...]]></description><category></category></item><item><title><![CDATA[【Golang】如何得知变量是分配在栈（stack）上还是堆（heap）上？]]></title><link>https://blog.youkuaiyun.com/LU_ZHAO/article/details/105264828</link><guid>https://blog.youkuaiyun.com/LU_ZHAO/article/details/105264828</guid><author>LU_ZHAO</author><pubDate>Thu, 02 Apr 2020 11:03:37 +0800</pubDate><description><![CDATA[How do I know whether a variable is allocated on the heap or the stack?
From a correctness standpoint, you don’t need to know. Each variable in Go exists as long as there are references to it. The sto...]]></description><category></category></item><item><title><![CDATA[【Golang】内存池]]></title><link>https://blog.youkuaiyun.com/LU_ZHAO/article/details/105263847</link><guid>https://blog.youkuaiyun.com/LU_ZHAO/article/details/105263847</guid><author>LU_ZHAO</author><pubDate>Thu, 02 Apr 2020 10:49:19 +0800</pubDate><description><![CDATA[Go的内存分配器采用了跟tcmalloc库相同的实现，是一个带内存池的分配器，底层直接调用操作系统的mmap等函数。
作为一个内存池，回忆一下跟它相关的基本部分。首先，它会向操作系统申请大块内存，自己管理这部分内存。然后，它是一个池子，当上层释放内存时它不实际归还给操作系统，而是放回池子重复利用。接着，内存管理中必然会考虑的就是内存碎片问题，如果尽量避免内存碎片，提高内存利用率，像操作系统中的首次...]]></description><category></category></item><item><title><![CDATA[【操作系统】cache直接映射、组相连映射以及全相连映射]]></title><link>https://blog.youkuaiyun.com/LU_ZHAO/article/details/105260472</link><guid>https://blog.youkuaiyun.com/LU_ZHAO/article/details/105260472</guid><author>LU_ZHAO</author><pubDate>Thu, 02 Apr 2020 04:29:30 +0800</pubDate><description><![CDATA[Cache的容量很小，它保存的内容只是主存内容的一个子集，且Cache与主存的数据交换是以块为单位的。为了把信息放到Cache中，必须应用某种函数把主存地址定位到Cache中，这称为地址映射。在信息按这种映射关系装入Cache后，CPU执行程序时，会将程序中的主存地址变换成Cache地址，这个变换过程叫做地址变换。
Cache的地址映射方式有直接映射、全相联映射和组相联映射。假设某台计算机主存容量...]]></description><category></category></item><item><title><![CDATA[【Golang】Go调度器(scheduler)与channel]]></title><link>https://blog.youkuaiyun.com/LU_ZHAO/article/details/105260308</link><guid>https://blog.youkuaiyun.com/LU_ZHAO/article/details/105260308</guid><author>LU_ZHAO</author><pubDate>Thu, 02 Apr 2020 02:21:25 +0800</pubDate><description><![CDATA[go程序的运行，以goroutine为单位，而goroutine实际运行在某个系统线程内。goroutine（可以非常多）和系统线程（相对比较少）并非一一对应。调度时，既有os调度线程，也有go调度器本身调度goroutine。简言之，go原生支持并发，go调度器负责将各个goroutine调度到不同的操作系统线程中取执行。
通过go关键字启动一个协程来运行函数：
go func()

三个定义：...]]></description><category></category></item><item><title><![CDATA[【MySQL】filesort 文件排序]]></title><link>https://blog.youkuaiyun.com/LU_ZHAO/article/details/105257616</link><guid>https://blog.youkuaiyun.com/LU_ZHAO/article/details/105257616</guid><author>LU_ZHAO</author><pubDate>Wed, 01 Apr 2020 22:33:15 +0800</pubDate><description><![CDATA[filesort 文件排序
filesort 并不是说通过磁盘文件进行排序，而只是告诉我们进行了一个排序操作。即在MySQL Query Optimizer 所给出的执行计划(通过 EXPLAIN 命令查看)中被称为文件排序（filesort）
文件排序是通过相应的排序算法,将取得的数据在内存中进行排序: MySQL需要将数据在内存中进行排序，所使用的内存区域也就是我们通过sort_buffer_...]]></description><category></category></item><item><title><![CDATA[【设计模式】业务代表模式（Business Delegate Pattern）]]></title><link>https://blog.youkuaiyun.com/LU_ZHAO/article/details/105256710</link><guid>https://blog.youkuaiyun.com/LU_ZHAO/article/details/105256710</guid><author>LU_ZHAO</author><pubDate>Wed, 01 Apr 2020 22:20:13 +0800</pubDate><description><![CDATA[业务代表模式
业务代表模式（Business Delegate Pattern）用于对表示层和业务层解耦。它基本上是用来减少通信或对表示层代码中的业务层代码的远程查询功能。在业务层中我们有以下实体。

客户端（Client） - 表示层代码可以是 JSP、servlet 或 UI java 代码。
业务代表（Business Delegate） - 一个为客户端实体提供的入口类，它提供了对业务服务...]]></description><category></category></item><item><title><![CDATA[【Golang】反射机制]]></title><link>https://blog.youkuaiyun.com/LU_ZHAO/article/details/105254281</link><guid>https://blog.youkuaiyun.com/LU_ZHAO/article/details/105254281</guid><author>LU_ZHAO</author><pubDate>Wed, 01 Apr 2020 20:33:26 +0800</pubDate><description><![CDATA[反射
在计算机科学领域，反射是指一类应用，它们能够自描述和自控制。也就是说，这类应用通过采用某种机制来实现对自己行为的描述（self-representation）和监测（examination），并能根据自身行为的状态和结果，调整或修改应用所描述行为的状态和相关的语义。
每种语言的反射模型都不同，并且有些语言根本不支持反射。Golang语言实现了反射，反射机制就是在运行时动态的调用对象的方法和属...]]></description><category></category></item><item><title><![CDATA[【可视化】使用 Graphviz 绘画 UML 图]]></title><link>https://blog.youkuaiyun.com/LU_ZHAO/article/details/105244315</link><guid>https://blog.youkuaiyun.com/LU_ZHAO/article/details/105244315</guid><author>LU_ZHAO</author><pubDate>Wed, 01 Apr 2020 14:08:56 +0800</pubDate><description><![CDATA[简介
Graphviz 是 AT&amp;T 实验室开发的一个开源软件，它以一种文本语言去描述图（graph），然后自动排布节点和边去生成图片。它已有近 30 年历史。
UML（unified modeling language，统一建模语言）是一种常用的面向对象设计的方法。其中最常用的是类图（class diagram），用于表示类的构成以及类之间的关系。
利用 Graphviz 去生成 UML...]]></description><category></category></item><item><title><![CDATA[C语言 _Alignof 运算符(C11 起)]]></title><link>https://blog.youkuaiyun.com/LU_ZHAO/article/details/105237225</link><guid>https://blog.youkuaiyun.com/LU_ZHAO/article/details/105237225</guid><author>LU_ZHAO</author><pubDate>Wed, 01 Apr 2020 04:23:15 +0800</pubDate><description><![CDATA[查询其运算数类型的对齐要求。通常通过便利宏 alignof 使用此运算符。
头文件：
#include &lt;stdalign.h&gt;

解释
返回 类型名 所指名的类型的对齐要求。若 类型名 为数组类型，则结果为数组元素的对齐要求。 类型名 不能为函数类型或不完整类型。
结果是 size_t 类型整数常量。
不求值运算数（故用作运算数的外部标识符不必有定义）。
一些 C 编译器允许把 _A...]]></description><category></category></item><item><title><![CDATA[【设计模式】拦截过滤器模式（Intercepting Filter Pattern）详解及源码]]></title><link>https://blog.youkuaiyun.com/LU_ZHAO/article/details/105237117</link><guid>https://blog.youkuaiyun.com/LU_ZHAO/article/details/105237117</guid><author>LU_ZHAO</author><pubDate>Wed, 01 Apr 2020 02:38:47 +0800</pubDate><description><![CDATA[拦截过滤器模式（Intercepting Filter Pattern）用于对应用程序的请求或响应做一些预处理/后处理。定义过滤器，并在把请求传给实际目标应用程序之前应用在请求上。过滤器可以做认证/授权/记录日志，或者跟踪请求，然后把请求传给相应的处理程序。以下是这种设计模式的实体。

过滤器（Filter） - 过滤器在请求处理程序执行请求之前或之后，执行某些任务。
过滤器链（Filter Ch...]]></description><category></category></item><item><title><![CDATA[【操作系统】 为什么说共享内存是最快的一种IPC方式呢？]]></title><link>https://blog.youkuaiyun.com/LU_ZHAO/article/details/105237107</link><guid>https://blog.youkuaiyun.com/LU_ZHAO/article/details/105237107</guid><author>LU_ZHAO</author><pubDate>Wed, 01 Apr 2020 02:15:52 +0800</pubDate><description><![CDATA[在linux进程间通信的方式中，共享内存是一种最快的IPC方式。因此，共享内存用于实现进程间大量的数据传输，共享内存的话，会在内存中单独开辟一段内存空间，这段内存空间有自己特有的数据结构，包括访问权限、大小和最近访问的时间等。
为什么说共享内存是最快的一种IPC方式呢？让我们一起来看一下下面的这张图：

从这张图中，我们可以看出，使用管道(FIFO/消息队列)从一个文件传输信息到另外一个文件需要复...]]></description><category></category></item><item><title><![CDATA[【Redis】慢查询日志]]></title><link>https://blog.youkuaiyun.com/LU_ZHAO/article/details/105237083</link><guid>https://blog.youkuaiyun.com/LU_ZHAO/article/details/105237083</guid><author>LU_ZHAO</author><pubDate>Wed, 01 Apr 2020 01:59:58 +0800</pubDate><description><![CDATA[慢查询日志是 Redis 提供的一个用于观察系统性能的功能， 这个功能的实现非常简单， 这里我们也简单地讲解一下。
本章先介绍和慢查询功能相关的数据结构和变量， 然后介绍 Redis 是如何记录命令的执行时间， 以及如何为执行超过限制事件的命令记录慢查询日志的。
相关数据结构
每条慢查询日志都以一个 slowlog.h/slowlogEntry 结构定义：
typedef struct slowl...]]></description><category></category></item><item><title><![CDATA[如何编写高级爬虫？]]></title><link>https://blog.youkuaiyun.com/LU_ZHAO/article/details/105237068</link><guid>https://blog.youkuaiyun.com/LU_ZHAO/article/details/105237068</guid><author>LU_ZHAO</author><pubDate>Wed, 01 Apr 2020 01:50:51 +0800</pubDate><description><![CDATA[根据 网页如何判断一个请求来自于爬虫？
就容易知道做一个爬虫要干啥：

分布式：通常会有一些教材告诉你，为了爬取效率，需要把爬虫分布式部署到多台机器上。这完全是骗人的。分布式唯一的作用是：防止对方封IP。封IP是终极手段，效果非常好，当然，误伤起用户也是非常爽的。
模拟JavaScript：有些教程会说，模拟javascript，抓取动态网页，是进阶技巧。但是其实这只是个很简单的功能。因为，如果对...]]></description><category></category></item><item><title><![CDATA[网页如何判断一个请求来自于爬虫？]]></title><link>https://blog.youkuaiyun.com/LU_ZHAO/article/details/105237041</link><guid>https://blog.youkuaiyun.com/LU_ZHAO/article/details/105237041</guid><author>LU_ZHAO</author><pubDate>Wed, 01 Apr 2020 01:46:54 +0800</pubDate><description><![CDATA[网络爬虫在大多数情况中都不违法，其实我们生活中几乎每天都在爬虫应用，如百度，你在百度中搜索到的内容几乎都是爬虫采集下来的(百度自营的产品除外，如百度知道、百科等)，所以网络爬虫作为一门技术，技术本身是不违法的，且在大多数情况下你都可以放心大 胆的使用爬虫技术。当然也有特殊情况，请看下一章节。

可以从以下几点进行考虑

限制请求/提交次数，比如每分钟最多请求60次，3分钟最多请求100次。如果超...]]></description><category></category></item><item><title><![CDATA[【代理模式】Java的三种代理模式 - 静态代理，动态代理，Cglib代理]]></title><link>https://blog.youkuaiyun.com/LU_ZHAO/article/details/105236810</link><guid>https://blog.youkuaiyun.com/LU_ZHAO/article/details/105236810</guid><author>LU_ZHAO</author><pubDate>Wed, 01 Apr 2020 01:28:13 +0800</pubDate><description><![CDATA[代理(Proxy)是一种设计模式,定义：为其他对象提供一个代理以控制对某个对象的访问，即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。
为什么使用代理
我们在写一个功能函数时，经常需要在其中写入与功能不是直接相关但很有必要的代 码，如日志记录，信息发送，安全和事务支持等，这些枝节性代码虽然是必要的，但它会带来以下麻烦：

枝节性代码...]]></description><category></category></item><item><title><![CDATA[【Redis】Lua 脚本]]></title><link>https://blog.youkuaiyun.com/LU_ZHAO/article/details/105236374</link><guid>https://blog.youkuaiyun.com/LU_ZHAO/article/details/105236374</guid><author>LU_ZHAO</author><pubDate>Wed, 01 Apr 2020 00:36:21 +0800</pubDate><description><![CDATA[Lua 脚本功能是 Reids 2.6 版本的最大亮点， 通过内嵌对 Lua 环境的支持， Redis 解决了长久以来不能高效地处理 CAS （check-and-set）命令的缺点， 并且可以通过组合使用多个命令， 轻松实现以前很难实现或者不能高效实现的模式。
本章先介绍 Lua 环境的初始化步骤， 然后对 Lua 脚本的安全性问题、以及解决这些问题的方法进行说明， 最后对执行 Lua 脚本的两...]]></description><category></category></item></channel></rss>