<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Jiang216的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Jiang216</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Jiang216]]></copyright><item><title><![CDATA[软件设计师考试内容复习（二）]]></title><link>https://blog.youkuaiyun.com/Jiang216/article/details/123011141</link><guid>https://blog.youkuaiyun.com/Jiang216/article/details/123011141</guid><author>Jiang216</author><pubDate>Tue, 22 Feb 2022 15:51:26 +0800</pubDate><description><![CDATA[一、层次化存储结构



二、Cache

Cache的功能：提高CPU数据输入输出的速率，突破CPU与存储系统间数据传输带宽限制。在计算机存储系统体系中，Cache是访问速度最快的层次。使用Cache改善系统性能的依据是程序的局部性原理。

如果以 h 代表对Cache的访问命中率，t1代表Cache的周期时间，t2代表主存储器周期的时间，以读操作,使用“Cache＋主存储器”的系统的平均周期为t3，则


t3＝h∗t1+(1−h)∗t2


其中（1－h）又称为失效率。
...]]></description><category></category></item><item><title><![CDATA[函数柯里化实现JS bind方法]]></title><link>https://blog.youkuaiyun.com/Jiang216/article/details/121786597</link><guid>https://blog.youkuaiyun.com/Jiang216/article/details/121786597</guid><author>Jiang216</author><pubDate>Wed, 08 Dec 2021 11:18:25 +0800</pubDate><description><![CDATA[一、函数柯里化及其典型应用

函数柯里化（Currying）是JavaScript函数编写中一种高级技巧，柯里化实质上是把接收多个参数的函数转换成接收一个单一参数（也即原函数中第一个参数）的函数，该函数能够返回一个新函数，新函数能够接收原函数的剩余参数并返回对应结果。

简而言之，柯里化对于函数的简化作用在于，通过对首个参数的调用封装，从而返回一个功能不变，但前提明确的函数简易版。如正则表达式的判断：


// 正常正则验证字符串 reg.test(txt)

// 函数封装后
function check]]></description><category></category></item><item><title><![CDATA[JavaScript风格指南]]></title><link>https://blog.youkuaiyun.com/Jiang216/article/details/121414732</link><guid>https://blog.youkuaiyun.com/Jiang216/article/details/121414732</guid><author>Jiang216</author><pubDate>Wed, 08 Dec 2021 10:58:20 +0800</pubDate><description><![CDATA[一、对象

1.对象创建时，属性键名不要使用保留字


// bad
var person = {
  default: { name: 'jl' },
  private: true
};

// good
var superman = {
  defaults: { name: 'jl' },
  hidden: true
};

二、数组

1.向数组增加元素时使用push，避免使用数组位直接赋值


var someStack = [];


// bad
someStack[someStack..]]></description><category></category></item><item><title><![CDATA[前端工程性能优化]]></title><link>https://blog.youkuaiyun.com/Jiang216/article/details/121268068</link><guid>https://blog.youkuaiyun.com/Jiang216/article/details/121268068</guid><author>Jiang216</author><pubDate>Thu, 11 Nov 2021 15:20:05 +0800</pubDate><description><![CDATA[依据雅虎14条性能优化原则，《高性能网站建设指南》及《高性能网站建设进阶指南》中提到的性能优化点，按照优化方向进行分类整合，得到以下优化原则分类表：

优化方向
			优化手段
		请求数量
			合并脚本和样式表，CSS Sprites，拆分初始化负载，划分主域
		请求带宽
			开启GZip，精简JavaScript，移除重复脚本，图像优化
		缓存利用
			使用CDN，使用外部JavaScript和CSS，添加Expires头，
			减少DNS查找，配置ETag，使AjaX可缓存
...]]></description><category></category></item><item><title><![CDATA[如何成为更好的自己（一）：引言]]></title><link>https://blog.youkuaiyun.com/Jiang216/article/details/119391243</link><guid>https://blog.youkuaiyun.com/Jiang216/article/details/119391243</guid><author>Jiang216</author><pubDate>Sun, 08 Aug 2021 22:02:19 +0800</pubDate><description><![CDATA[如何成为更好的自己？这个问题萦绕在我的脑海里已经有很长很长的时间了。也许这个问题看起来太过空泛，更像是“我是谁？”“我从哪里来”之类的哲学命题，以至于根本找不到一个简单而又标准的答案，但我想说的是，我并不追求一定要得到某种普适性的答案。更重要的是，我想通过这一整个系列的文章，理清自己的思路，坚定自己的三观，让更多和我类似却同样迷茫的人得到些许的启发与共鸣，这便是我一切努力最大的成就和收获。

缘起

“我以前没得选，现在我选择做个好人。”对我而言，选择权是尤为重要的一种权利，也许也是长久以来努力的寄托。比如]]></description><category></category></item><item><title><![CDATA[为什么Vue组件中的data必须是函数而非对象]]></title><link>https://blog.youkuaiyun.com/Jiang216/article/details/119488504</link><guid>https://blog.youkuaiyun.com/Jiang216/article/details/119488504</guid><author>Jiang216</author><pubDate>Sat, 07 Aug 2021 16:34:47 +0800</pubDate><description><![CDATA[1、对象还是函数？

vue官方文档在声明式渲染这一节中给了我们这样的一个demo:


&lt;div id="app"&gt;
  {{ message }}
&lt;/div&gt;

var app = new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue!'
  }
})


在这个demo中data是一个对象，通过 new Vue 创建的 Vue 实例中，能够直接把data上的message属性通过模板渲染到页面上。

但在官方文档的]]></description><category></category></item><item><title><![CDATA[论亲密关系的持久化]]></title><link>https://blog.youkuaiyun.com/Jiang216/article/details/117331527</link><guid>https://blog.youkuaiyun.com/Jiang216/article/details/117331527</guid><author>Jiang216</author><pubDate>Thu, 27 May 2021 20:25:06 +0800</pubDate><description><![CDATA[今天想说的问题有点大，笔者争取以较为清晰的逻辑思路表述我的观点。

物质与精神

帕斯卡说，“人，是一根会思考的苇草。”人，作为生物的一种，离不开物质环境的支撑。所谓哲学家，都是吃饱了之后才有精力研究哲学，这话虽有些戏谑，但确是事实。从唯物论的角度来看，人的思想境界、水平高低在物质湮灭之时并无明显作用。得道高僧遇到老虎也要逃开，至圣先师患上癌症也命不长久。何故？肉体无法脱离外部物质环境罢了。可是，精神价值就没有意义吗？当然不是。人之所以为人，正是因为思考。若无思想，与禽兽何异？几千年前的前辈，正是借助思想的]]></description><category></category></item><item><title><![CDATA[Synchronized对象锁和类锁]]></title><link>https://blog.youkuaiyun.com/Jiang216/article/details/116653957</link><guid>https://blog.youkuaiyun.com/Jiang216/article/details/116653957</guid><author>Jiang216</author><pubDate>Thu, 13 May 2021 14:49:01 +0800</pubDate><description><![CDATA[Java中的synchronized关键字，用于修饰需要同步的方法或需要同步的代码块，默认以当前对象作为锁的对象。

在学习synchronized关键字时，有以下几点注意事项：

一把锁只能同时被一个线程获取，没有获得锁的线程只能等待；
	每个实例都对应有自己的一把锁(this),不同实例之间互不影响；例外：锁对象是*.class以及synchronized修饰的是static方法的时候，所有对象公用同一把锁；
	synchronized修饰的方法，无论方法正常执行完毕还是抛出异常，都会释放锁。
这里我们]]></description><category></category></item><item><title><![CDATA[Web页面完整请求及渲染过程]]></title><link>https://blog.youkuaiyun.com/Jiang216/article/details/116155760</link><guid>https://blog.youkuaiyun.com/Jiang216/article/details/116155760</guid><author>Jiang216</author><pubDate>Tue, 27 Apr 2021 10:17:20 +0800</pubDate><description><![CDATA[前端技术人员离不开计算机网络通信知识的了解，基础的网络架构模型与TCP、HTTP等相关知识掌握之后，不免会考虑：我们在互联网使用过程中，输入一个网址后，获取网址对应的Web页面信息并成功渲染到浏览器窗口这一整套流程是如何实现的呢？本文就针对这一日常而又复杂的请求渲染流程进行一次较为全面的梳理介绍。

一、Web页面请求过程

1.DHCP配置主机信息

在上网之前，我必须要让网络知道我是谁，只有网络知道我的身份，才会允许我们对它进行访问。因此，我们首先需要一个自己电脑对应的IP地址。

假设我们最开始没有I]]></description><category></category></item><item><title><![CDATA[Java设计模式精简版总结整理（四）：行为型模式（续）]]></title><link>https://blog.youkuaiyun.com/Jiang216/article/details/116120926</link><guid>https://blog.youkuaiyun.com/Jiang216/article/details/116120926</guid><author>Jiang216</author><pubDate>Sun, 25 Apr 2021 16:15:27 +0800</pubDate><description><![CDATA[本文承接上一篇设计模式总结内容，继续总结介绍行为型模式的后六种模式：观察者模式、中介者模式、迭代器模式、访问者模式、备忘录模式和解释器模式。

一、观察者模式

观察者模式，又叫做发布-订阅模式，是指多个对象之间存在一对多的依赖关系，当一个对象的状态发生改变时，所有依赖于它的对象都会得到通知并被自动更新。现实情境中公众号和订阅者、天气预报和听众等都是观察者模式。

观察者模式包括以下角色：抽象主题、具体主题、抽象观察者、具体观察者。

观察者模式的关键在于将目标与观察者进行分离，通过在目标类中封装观察者对象]]></description><category></category></item><item><title><![CDATA[Java设计模式精简版总结整理（三）：行为型模式]]></title><link>https://blog.youkuaiyun.com/Jiang216/article/details/116116043</link><guid>https://blog.youkuaiyun.com/Jiang216/article/details/116116043</guid><author>Jiang216</author><pubDate>Sun, 25 Apr 2021 11:20:28 +0800</pubDate><description><![CDATA[行为型模式用于描述程序在运行时复杂的流程控制，即描述多个类或对象之间怎样相互协作完成单个对象无法完成的任务。行为型模式包括11种，因篇幅限制，切分为两篇进行总结介绍，本篇介绍前5种行为型设计模式：模板方法模式、策略模式、命令模式、职责链模式与状态模式。

一、模板方法模式

模板方法模式是指定义一个操作中的算法骨架，将算法的一些步骤延迟到子类当中，使得子类可以不改变该算法结构的情况下重新定义该算法的某些特定步骤。现实情境中的论文模板、简历模板等都是模板方法模式。

模板方法模式的关键在于定义一个算法流程的骨]]></description><category></category></item><item><title><![CDATA[Java设计模式精简版总结整理（二）：结构型模式]]></title><link>https://blog.youkuaiyun.com/Jiang216/article/details/116041738</link><guid>https://blog.youkuaiyun.com/Jiang216/article/details/116041738</guid><author>Jiang216</author><pubDate>Fri, 23 Apr 2021 14:38:56 +0800</pubDate><description><![CDATA[结构型模式描述如何将类或者对象结合在一起形成更大的结构，就像搭积木， 可以通过简单积木的组合形成复杂的、功能更为强大的结构。共包含代理模式、适配器模式、桥接模式、装饰器模式、外观模式、享元模式、组合模式7类。

一、代理模式

代理模式是指由于某些原因需要给某对象提供一个代理以控制该对象的访问。这时，访问对象不适合或者不能直接引用目标对象，而是以代理对象作为访问对象和目标对象之间的中介。可以理解为生活情境中中介所扮演的角色。

代理模式的结构主要是通过定义一个继承抽象主题的代理来包含真实主题，从而实现对真实]]></description><category></category></item><item><title><![CDATA[Java设计模式精简版总结整理（一）：创建型模式]]></title><link>https://blog.youkuaiyun.com/Jiang216/article/details/116015859</link><guid>https://blog.youkuaiyun.com/Jiang216/article/details/116015859</guid><author>Jiang216</author><pubDate>Thu, 22 Apr 2021 17:30:32 +0800</pubDate><description><![CDATA[一、单例模式

单例模式是指一个类只有一个实例，且该类能自行创建这个实例的一种模式。适合需要频繁创建的类或只要求生成一个对象等情况，如ServletContext 、ServletContextConfig、Spring框架应用中的 ApplicationContext、数据库中的连接池等也都是单例模式。

单例模式的关键在于：

类构造方法的私有化：避免类在外部被实例化
	线程安全：懒汉式单例需要保证线程安全

public class LazySingleton {
    
    private..]]></description><category></category></item><item><title><![CDATA[程序设计面向对象思想笔记]]></title><link>https://blog.youkuaiyun.com/Jiang216/article/details/116001947</link><guid>https://blog.youkuaiyun.com/Jiang216/article/details/116001947</guid><author>Jiang216</author><pubDate>Thu, 22 Apr 2021 10:57:56 +0800</pubDate><description><![CDATA[一、三大特性

封装

封装是指利用抽象数据类型将数据和基于数据的操作封装在一起，使其构成一个不可分割的独立实体。数据被保护在抽象数据类型的内部，尽可能地隐藏内部的细节，只保留一些对外的接口使其与外部发生联系。通过封装能够让对象使用者无需关心对象内部的细节，同时又可以通过对象对外提供的接口来访问该对象。

封装的优点包括：

减少耦合：可以独立地开发、测试、优化、使用、理解和修改。
	减轻维护的负担：可以更容易得被理解，并且在调试的时候可以不影响其他模块。
	有效地调节性能：可以通过剖析来确定哪些模块影响了]]></description><category></category></item><item><title><![CDATA[Web App开发经验总结]]></title><link>https://blog.youkuaiyun.com/Jiang216/article/details/114576612</link><guid>https://blog.youkuaiyun.com/Jiang216/article/details/114576612</guid><author>Jiang216</author><pubDate>Tue, 09 Mar 2021 14:15:23 +0800</pubDate><description><![CDATA[前端这个领域，上手很快，只需要短期学会html,css,js就可以开始写常规网页了。但另一方面，入门简单对应的是广泛、复杂、快速迭代的前端知识体系、框架、工具等一个又一个难题。以移动端开发为例，至今Web App开发仍然处于一个你方唱罢我登场的群雄割据时代，缺少一个绝对主流、统一的开发工具或规范。本文也仅仅基于个人有限的移动端开发经验及网上各路技术经验分享内容对Web App开发进行部分经验总结，供大家参考。

一、不要刻意模仿移动端系统原生的默认样式和交互

毕竟 WebApp 缺乏原生支持，肯定有模仿不]]></description><category></category></item><item><title><![CDATA[CSS在移动端适配中的部分问题总结]]></title><link>https://blog.youkuaiyun.com/Jiang216/article/details/112881655</link><guid>https://blog.youkuaiyun.com/Jiang216/article/details/112881655</guid><author>Jiang216</author><pubDate>Wed, 20 Jan 2021 16:27:39 +0800</pubDate><description><![CDATA[一、像素

CSS即浏览器的渲染，而浏览器的渲染一定是基于像素而言的。对于像素，首先需要明确两个概念，即物理像素与逻辑像素。

1.物理像素

物理像素就是反映显示屏的硬件条件，反映的就是显示屏内部led灯的数量，可以简单理解，一组三色led代表一个物理像素，当然根据屏幕物理属性以及处理led的方法不一样。强调这是物理的，因为这是一个纯硬件指标。比如我把屏幕锯了一半，物理像素就只有一半。

2.逻辑像素

逻辑像素是为了调和距离不一样导致的差异，将所有设备根据距离，透视缩放到一个相等水平的观看距离之后得到的]]></description><category></category></item><item><title><![CDATA[装修经验前期准备]]></title><link>https://blog.youkuaiyun.com/Jiang216/article/details/110918201</link><guid>https://blog.youkuaiyun.com/Jiang216/article/details/110918201</guid><author>Jiang216</author><pubDate>Wed, 09 Dec 2020 15:56:55 +0800</pubDate><description><![CDATA[一、整体

五金件要选择质量好、耐用度高的

客厅卧室选择浅色地砖

150cm的高度线上要有景观

整体底色选择黑白灰或大地色，少量暖色，鲜艳色用软装饰品点缀

色彩搭配要统一，可以使用挂画、靠枕、家具等颜色进行重复式协调（出现三次即形成色彩风格的统一）

插座选择带开关的错位型五孔插座

可以给冰箱单独留一根线路

网线布六类

强弱电要全部换新，弱电箱要买大的有风扇的

瓷砖勾缝不要选择白水泥勾，美缝可以自己做

甲醛污染测试公司不要相信

如果客厅和卧室地板是一样的，完全可以通铺，不要扣条，或者选择]]></description><category></category></item><item><title><![CDATA[《小家：越住越大2》]]></title><link>https://blog.youkuaiyun.com/Jiang216/article/details/110879629</link><guid>https://blog.youkuaiyun.com/Jiang216/article/details/110879629</guid><author>Jiang216</author><pubDate>Tue, 08 Dec 2020 20:29:05 +0800</pubDate><description><![CDATA[第一章 餐厅如何避免杂乱

一般家庭的餐桌物品占用餐桌桌面面积普遍较高，显得餐桌杂乱。可以采用餐边柜与餐桌零距离接触方式方便杂物摆放（也可以采用移动是多层收纳车）

如何避免孤单在厨房做饭：厨房与餐厅采用玻璃吊轨门连接

可以使用卡座代替普通餐椅

餐厅小贴士：

1.餐桌吊灯太小或离地太远，一般底端离地不宜超过1600mm，挂的太高就失去了空间中心的意义，失去了聚拢感

2.如果只是偶尔会来客人，完全没必要一口气买六把椅子，可以使用牛皮纸凳子代替（可以折叠）

3.餐桌边需要预留插座（高度不能太低），可以]]></description><category></category></item><item><title><![CDATA[《小家：越住越大》]]></title><link>https://blog.youkuaiyun.com/Jiang216/article/details/110874170</link><guid>https://blog.youkuaiyun.com/Jiang216/article/details/110874170</guid><author>Jiang216</author><pubDate>Tue, 08 Dec 2020 16:41:54 +0800</pubDate><description><![CDATA[第一章 二八定律

房子单价很贵，但却像人一样，慢慢被不必要的杂物堆积，变得杂乱、空间不足。人需要减肥，房子也需要减负，常用的东西（20%）放在随手可及的地方，不常用的东西（80%）合理收纳，这就是隐藏与显示的二八定律。收纳百分之八十的生活杂物，展示百分之二十的家具陈设，这就是收纳的意义。

浴室柜（镜柜）：人总是习惯把常用的放在触手可及的位置，所以镜柜不可以做全面镜，左右两侧或下侧应当留出开放式层便于物品放置。



鞋柜：常换常穿的鞋应当避免放在柜门内，可以在鞋柜下侧留出空间。

茶几：茶几作为室内动线]]></description><category></category></item><item><title><![CDATA[前端单页面应用路由实现原理]]></title><link>https://blog.youkuaiyun.com/Jiang216/article/details/109195703</link><guid>https://blog.youkuaiyun.com/Jiang216/article/details/109195703</guid><author>Jiang216</author><pubDate>Wed, 21 Oct 2020 11:13:41 +0800</pubDate><description><![CDATA[一、前端单页面路由本质

HTML5中对浏览器history对象方法进行了扩展，前端单页面应用的路由实现本质上都是基于history对象方法的封装实现用户url访问的存储记录与页面更新。

二、history对象新增方法

1.pushState(state,title,url)

该方法会在历史记录中新增一条记录，改变浏览器的url，但是不刷新页面。

pushState方法接受三个参数，

state：一个与添加的记录相关联的状态对象，主要用于popstate事件。该事件触发时，该对象会传入回调函数。也]]></description><category></category></item></channel></rss>