<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

 <title>Youngbye blog</title>
 <link href="https://github.com/kidbai/atom.xml" rel="self"/>
 <id>https://github.com/kidbai</id>
 <updated>2021-03-22T08:43:17+00:00</updated>
 <author>
   <name>Youngbye</name>
   <uri>https://github.com/kidbai</uri>
   <email>ybooty@@gmail.com</email>
 </author>

 

 <entry>
   <title>前端架构是什么？</title>
   <link href="https://github.com/kidbai/%E5%89%8D%E7%AB%AF%E6%9E%B6%E6%9E%84%E6%98%AF%E4%BB%80%E4%B9%88"/>
   <id>https://github.com/kidbai/前端架构是什么？</id>
   <updated>2021-01-21T00:00:00+00:00</updated>
   <content type="html">
</content>
 </entry>

 

 <entry>
   <title>设计模式六大原则</title>
   <link href="https://github.com/kidbai/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E5%85%AD%E5%A4%A7%E5%8E%9F%E5%88%99"/>
   <id>https://github.com/kidbai/设计模式六大原则</id>
   <updated>2020-12-30T00:00:00+00:00</updated>
   <content type="html">&lt;h1 id=&quot;引言&quot;&gt;引言&lt;/h1&gt; &lt;p&gt;本文主要讲解设计模式的设计原则，以及通过一些样例去详解（通篇还是偏稿子的形态，并没有好好整理，而是想到的就写下&lt;/p&gt; &lt;h1 id=&quot;六大原则&quot;&gt;六大原则&lt;/h1&gt; &lt;ul&gt; &lt;li&gt;单一职责原则&lt;/li&gt; &lt;li&gt;开闭原则&lt;/li&gt; &lt;li&gt;里氏替换原则&lt;/li&gt; &lt;li&gt;依赖倒置原则&lt;/li&gt; &lt;li&gt;接口隔离原则&lt;/li&gt; &lt;li&gt;迪米特原则&lt;/li&gt; &lt;/ul&gt; &lt;h1 id=&quot;单一职责&quot;&gt;单一职责&lt;/h1&gt; &lt;h2 id=&quot;单一职责原则的定义类方法接口&quot;&gt;单一职责原则的定义（类、方法、接口）&lt;/h2&gt; &lt;p&gt;首先先看概念&lt;/p&gt; &lt;p&gt;单一职责原则（Single Responsibility Principle，SRP）又称单一功能原则。这里的职责是指类变化的原因，单一职责原则规定一个类应该有且仅有一个引起它变化的原因，否则类应该被拆分（There should never be more than one reason for a class to change）。&lt;/p&gt; &lt;p&gt;归纳总结，就是一个类不应该承担过多的职责，而是专注类自身的职责&lt;/p&gt; &lt;h2 id=&quot;优点&quot;&gt;优点&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;降低类的复杂度&lt;/li&gt; &lt;li&gt;提高类的可读性&lt;/li&gt; &lt;li&gt;提高系统的可维护性&lt;/li&gt; &lt;li&gt;降低变更的风险&lt;/li&gt; &lt;/ul&gt; &lt;h2 id=&quot;样例&quot;&gt;样例&lt;/h2&gt; &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;//user.js class...</content>
 </entry>

 

 <entry>
   <title>Nuxt ssr如何做性能优化</title>
   <link href="https://github.com/kidbai/Nuxt-SSR%E5%A6%82%E4%BD%95%E5%81%9A%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96"/>
   <id>https://github.com/kidbai/Nuxt SSR如何做性能优化</id>
   <updated>2020-11-26T00:00:00+00:00</updated>
   <content type="html">&lt;h1 id=&quot;nuxt的背景&quot;&gt;Nuxt的背景&lt;/h1&gt; &lt;p&gt;Nuxt.js 是一个基于 Vue.js 的通用应用框架。&lt;/p&gt; &lt;p&gt;通过对客户端/服务端基础架构的抽象组织，Nuxt.js 主要关注的是应用的 UI 渲染。&lt;/p&gt; &lt;p&gt;我们的目标是创建一个灵活的应用框架，你可以基于它初始化新项目的基础结构代码，或者在已有 Node.js 项目中使用 Nuxt.js。&lt;/p&gt; &lt;p&gt;Nuxt.js 预设了利用 Vue.js 开发服务端渲染的应用所需要的各种配置。&lt;/p&gt; &lt;p&gt;除此之外，我们还提供了一种命令叫：nuxt generate ，为基于 Vue.js 的应用提供生成对应的静态站点的功能。&lt;/p&gt; &lt;p&gt;我们相信这个命令所提供的功能，是向开发集成各种微服务（Microservices）的 Web 应用迈开的新一步。&lt;/p&gt; &lt;p&gt;作为框架，Nuxt.js 为 客户端/服务端 这种典型的应用架构模式提供了许多有用的特性，例如异步数据加载、中间件支持、布局支持等。&lt;/p&gt; &lt;h2 id=&quot;nuxt-特性&quot;&gt;Nuxt 特性&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;基于 Vue.js&lt;/li&gt; &lt;li&gt;自动代码分层&lt;/li&gt; &lt;li&gt;服务端渲染&lt;/li&gt; &lt;li&gt;强大的路由功能，支持异步数据&lt;/li&gt; &lt;li&gt;静态文件服务&lt;/li&gt; &lt;li&gt;ES2015+ 语法支持&lt;/li&gt; &lt;li&gt;打包和压缩 JS 和 CSS&lt;/li&gt; &lt;li&gt;HTML 头部标签管理&lt;/li&gt; &lt;li&gt;本地开发支持热加载&lt;/li&gt; &lt;li&gt;集成...</content>
 </entry>

 

 <entry>
   <title>第95个百分位数(95th Percentile)是什么</title>
   <link href="https://github.com/kidbai/%E7%AC%AC95%E4%B8%AA%E7%99%BE%E5%88%86%E4%BD%8D%E6%95%B0(95th-percentile)%E6%98%AF%E4%BB%80%E4%B9%88"/>
   <id>https://github.com/kidbai/第95个百分位数(95th-percentile)是什么</id>
   <updated>2020-06-05T00:00:00+00:00</updated>
   <content type="html">&lt;h1 id=&quot;95th-percentile&quot;&gt;95th-percentile&lt;/h1&gt; &lt;p&gt;什么是第95个百分位数？我们先看看wiki上的解释：&lt;a href=&quot;https://en.wikipedia.org/wiki/Burstable_billing#95th_percentile&quot;&gt;https://en.wikipedia.org/wiki/Burstable_billing#95th_percentile&lt;/a&gt;&lt;/p&gt; &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;The 95th percentile is a widely used mathematical calculation to evaluate the regular and sustained use of a network connection. The 95th percentile method more closely reflects the needed capacity of the link in question than tracking by other methods such as...</content>
 </entry>

 

 <entry>
   <title>$path和$home是什么？</title>
   <link href="https://github.com/kidbai/$PATH%E5%92%8C$HOME%E6%98%AF%E4%BB%80%E4%B9%88"/>
   <id>https://github.com/kidbai/$PATH和$HOME是什么？</id>
   <updated>2019-12-20T00:00:00+00:00</updated>
   <content type="html">&lt;p&gt;$PATH和$HOME都是 Linux 系统下的环境变量，一般 Linux 系统的变量在调用时会加 $ 符号，并且按规范都为大写&lt;/p&gt;

&lt;p&gt;PATH是指系统指可执行命令的环境变量，比如常用的ls&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;➜  ~ whereis ls
/bin/ls
➜  ~ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
➜  ~
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;该执行命令就在 /bin/ 下&lt;/p&gt;

&lt;p&gt;同理 HOME 是指当前用户的主目录环境变量&lt;/p&gt;

&lt;p&gt;另外一个，Bash 的默认命令是不在 $PATH 里的，比如 cd 这种&lt;/p&gt;
</content>
 </entry>

 

 <entry>
   <title>Macos catalina(v10.15) 如何安装 node Gyp</title>
   <link href="https://github.com/kidbai/macOS-Catalina(v10.15)-%E5%A6%82%E4%BD%95%E5%AE%89%E8%A3%85-node-gyp"/>
   <id>https://github.com/kidbai/macOS Catalina(v10.15) 如何安装 node-gyp</id>
   <updated>2019-11-27T00:00:00+00:00</updated>
   <content type="html">&lt;h2 id=&quot;在-catalina-中下载node-gyp&quot;&gt;在 Catalina 中下载node-gyp&lt;/h2&gt;

&lt;p&gt;node-gyp 的 repo 地址 &lt;a href=&quot;https://github.com/nodejs/node-gyp&quot;&gt;https://github.com/nodejs/node-gyp&lt;/a&gt;，阅读后其实会发现对 Catalina(v10.15) 之后的系统版本有一个md的地址 &lt;a href=&quot;https://github.com/nodejs/node-gyp/blob/master/macOS_Catalina.md&quot;&gt;https://github.com/nodejs/node-gyp/blob/master/macOS_Catalina.md&lt;/a&gt; 里头有完整的处理方案就不赘述了&lt;/p&gt;

&lt;h2 id=&quot;node-gyp-是什么&quot;&gt;node-gyp 是什么？&lt;/h2&gt;

&lt;p&gt;这里有一份关于 node-gyp 的讲解，&lt;a href=&quot;https://github.com/tsy77/blog/issues/5&quot;&gt;刨根问底之node-gyp&lt;/a&gt;。&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;node-gyp是一个跨平台的命令行工具，目的是编译node addon模块。

常用的命令有configure和build，configure 原理就是利用gyp生成不同的编译配置文件，build则根据不同平台、不同构建配置进行编译。
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;简单的说noe-gyp是编辑C++扩展用的，node addon中存在有很多不同语言编写的工具，所以需要预先编译一下，否则就会有跨平台的问题。&lt;/p&gt;

</content>
 </entry>

 

 <entry>
   <title>Ssl本地自建流程（mac）</title>
   <link href="https://github.com/kidbai/SSL%E6%9C%AC%E5%9C%B0%E8%87%AA%E5%BB%BA%E6%B5%81%E7%A8%8B-mac"/>
   <id>https://github.com/kidbai/SSL本地自建流程（mac）</id>
   <updated>2019-07-03T00:00:00+00:00</updated>
   <content type="html">&lt;h3 id=&quot;找到自己openssl配置的位置&quot;&gt;找到自己openssl配置的位置&lt;/h3&gt; &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;find / -name openssl.cnf&lt;/code&gt;&lt;/p&gt; &lt;h3 id=&quot;打开opensslcnf&quot;&gt;打开openssl.cnf&lt;/h3&gt; &lt;p&gt;把&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[ req ]&lt;/code&gt;下的&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#req_extensions = v3_req # The extensions to add to a certificate request&lt;/code&gt;注释去掉，启用v3_req&lt;/p&gt; &lt;p&gt;在&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[ v3_req ]&lt;/code&gt;下配置 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;subjectAltName=IP:127.0.0.1&lt;/code&gt;，更多配置方法可以参考 &lt;a href=&quot;https://www.openssl.org/docs/man1.0.2/apps/x509v3_config.html#Subject-Alternative-Name&quot;&gt;https://www.openssl.org/docs/man1.0.2/apps/x509v3_config.html#Subject-Alternative-Name&lt;/a&gt;。&lt;/p&gt; &lt;p&gt;还可以将 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;subjectAltName=@alternate_names&lt;/code&gt; 在openssl.cnf中额外增加一个新的配置&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[ alternate_names ]&lt;/code&gt;&lt;/p&gt; &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div...</content>
 </entry>

 

 <entry>
   <title>Rabbitmq上手(node)</title>
   <link href="https://github.com/kidbai/RabbitMQ%E4%B8%8A%E6%89%8B(Node)"/>
   <id>https://github.com/kidbai/RabbitMQ上手(Node)</id>
   <updated>2019-06-28T00:00:00+00:00</updated>
   <content type="html">&lt;h1 id=&quot;大纲&quot;&gt;大纲&lt;/h1&gt; &lt;ul&gt; &lt;li&gt;介绍&lt;/li&gt; &lt;li&gt;安装以及编码&lt;/li&gt; &lt;/ul&gt; &lt;h2 id=&quot;介绍&quot;&gt;介绍&lt;/h2&gt; &lt;p&gt;RabbitMQ 是一个消息代理，其主要思想比较简单。允许接收和转发消息。你可以把RabbitMQ想成是一个邮局，当你发一份邮件到邮箱，你相当确定邮递员最终会把这封信送到你的收件人那边。 使用这个比喻，RabbitMQ可以是一个邮箱，或一个邮局，或一个邮递员。 其与邮局主要的不同是实际上RabbitMQ并不处理内容，而是接收，存储然后转发二进制数据–消息（message）&lt;/p&gt; &lt;p&gt;在RabbitMQ的消息传递上，我们用一些术语来解释：&lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;p&gt;生产（Producing） 意味着只做发送的事情。一个发送消息（message）的程序可以作为一个生产者（producer）.图如下，代号‘P’&lt;/p&gt; &lt;p&gt;&lt;img src=&quot;https://www.rabbitmq.com/img/tutorials/producer.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt; &lt;/li&gt; &lt;li&gt; &lt;p&gt;队列（queue）是一个邮箱的名字，存在在 RabbitMQ中。尽管消息（messages）是在RabbitMQ和你的应用中传递，但是它们只能被存到一个队列中。这个队列没有任何限制，可以存储你想要的任何多的消息，实际上，它就是一个无限的Buffer，大量生产者可以把消息发送到一个 队列中，消费者们可以尝试从一个队列中去接收数据。一个队列可以画成下图所示：上方是它的名字&lt;/p&gt; &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;img src=&quot;https://www.rabbitmq.com/img/tutorials/queue.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;消费（Consuming）和接收的意思类似。一个等待接收消息的程序是一个消费者（Consumer）。如下图所示，代号“C”：&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;img src=&quot;https://www.rabbitmq.com/img/tutorials/consumer.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;生产者-队列-消费者&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;img src=&quot;https://www.rabbitmq.com/img/tutorials/python-one.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt; &lt;h2 id=&quot;安装以及编码&quot;&gt;安装以及编码&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;安装部署RabbitMQ&lt;/li&gt;...</content>
 </entry>

 

 <entry>
   <title>本地自建ssl流程</title>
   <link href="https://github.com/kidbai/%E6%9C%AC%E5%9C%B0%E8%87%AA%E5%BB%BASSL%E6%B5%81%E7%A8%8B"/>
   <id>https://github.com/kidbai/本地自建SSL流程</id>
   <updated>2018-05-26T00:00:00+00:00</updated>
   <content type="html">&lt;h3 id=&quot;找到自己openssl配置的位置&quot;&gt;找到自己openssl配置的位置&lt;/h3&gt; &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;find / -name openssl.cnf&lt;/code&gt;&lt;/p&gt; &lt;h3 id=&quot;打开opensslcnf&quot;&gt;打开openssl.cnf&lt;/h3&gt; &lt;p&gt;把&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[ req ]&lt;/code&gt;下的&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#req_extensions = v3_req # The extensions to add to a certificate request&lt;/code&gt;注释去掉，启用v3_req&lt;/p&gt; &lt;p&gt;在&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[ v3_req ]&lt;/code&gt;下配置 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;subjectAltName=IP:127.0.0.1&lt;/code&gt;，更多配置方法可以参考 &lt;a href=&quot;https://www.openssl.org/docs/man1.0.2/apps/x509v3_config.html#Subject-Alternative-Name&quot;&gt;https://www.openssl.org/docs/man1.0.2/apps/x509v3_config.html#Subject-Alternative-Name&lt;/a&gt;。&lt;/p&gt; &lt;p&gt;还可以将 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;subjectAltName=@alternate_names&lt;/code&gt; 在openssl.cnf中额外增加一个新的配置&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[ alternate_names ]&lt;/code&gt;&lt;/p&gt; &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div...</content>
 </entry>

 

 <entry>
   <title>重读《javascript高级程序设计》第三版笔记 变量、作用于和内存问题</title>
   <link href="https://github.com/kidbai/%E9%87%8D%E8%AF%BB-JavaScript%E9%AB%98%E7%BA%A7%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1-%E7%AC%AC%E4%B8%89%E7%89%88%E7%AC%94%E8%AE%B0-%E5%8F%98%E9%87%8F-%E4%BD%9C%E7%94%A8%E4%BA%8E%E5%92%8C%E5%86%85%E5%AD%98%E9%97%AE%E9%A2%98"/>
   <id>https://github.com/kidbai/重读《JavaScript高级程序设计》第三版笔记-变量、作用于和内存问题</id>
   <updated>2018-01-05T00:00:00+00:00</updated>
   <content type="html">&lt;h1 id=&quot;变量作用域和内存问题&quot;&gt;变量、作用域和内存问题&lt;/h1&gt; &lt;p&gt;该章节主要讲解了以下三个重点内容：&lt;/p&gt; &lt;ul&gt; &lt;li&gt;理解基本类型和引用类型的值&lt;/li&gt; &lt;li&gt;理解执行环境&lt;/li&gt; &lt;li&gt;理解垃圾回收&lt;/li&gt; &lt;/ul&gt; &lt;h1 id=&quot;基本类型和引用类型的值&quot;&gt;基本类型和引用类型的值&lt;/h1&gt; &lt;p&gt;首先JavaScript中的变量分为基本类型和引用类型。&lt;/p&gt; &lt;p&gt;基本类型就是保存在栈内存中的简单数据段，而引用类型指的是那些保存在堆内存中的对象。&lt;/p&gt; &lt;h2 id=&quot;基本类型&quot;&gt;基本类型&lt;/h2&gt; &lt;p&gt;基本类型有Undefined、Null、Boolean、Number 和String。这些类型在内存中分别占有固定大小的空间，他们的值保存在栈空间，我们通过按值来访问的。&lt;/p&gt; &lt;h2 id=&quot;引用类型&quot;&gt;引用类型&lt;/h2&gt; &lt;p&gt;引用类型的值大小不固定，因此不能把它们放在栈内存中，但是内存地址的大小是固定的，可以把内存地址存在栈内存中，在堆中为这个地址分配空间。那么我们如果访问一个引用类型的变量，流程就是先从栈内存中读取变量的地址，通过这个地址去找到存储在堆内存中的值。对于这种方式，叫做引用访问&lt;/p&gt; &lt;p&gt;&lt;img src=&quot;https://kidbai.github.io/img/stack.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt; &lt;h1 id=&quot;执行环境&quot;&gt;执行环境&lt;/h1&gt; &lt;p&gt;每个函数都有自己的执行环境。当执行流进入一个函数时，函数的环境就会被推入一个环境栈中。 而在函数执行之后，栈将其环境弹出，把控制权返回给之前的执行环境。ECMAScript 程序中的执行流 正是由这个方便的机制控制着。 5 当代码在一个环境中执行时，会创建变量对象的一个作用域链(scope chain)。作用域链的用途，是 &lt;strong&gt;保证对执行环境有权访问的所有变量和函数的有序访问&lt;/strong&gt;。作用域链的前端，始终都是当前执行的代码所 在环境的变量对象。如果这个环境是函数，则将其活动对象(activation object)作为变量对象。活动对 6 象在最开始时只包含一个变量，即 arguments 对象(这个对象在全局环境中是不存在的)。作用域链中 的下一个变量对象来自包含(外部)环境，而再下一个变量对象则来自下一个包含环境。这样，一直延 续到全局执行环境;全局执行环境的变量对象始终都是作用域链中的最后一个对象。&lt;/p&gt; &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;var color = &quot;blue&quot;; function...</content>
 </entry>

 

</feed>