<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Celine921的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Celine921</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Celine921]]></copyright><item><title><![CDATA[git 处理异常操作]]></title><link>https://blog.youkuaiyun.com/Celine921/article/details/155123407</link><guid>https://blog.youkuaiyun.com/Celine921/article/details/155123407</guid><author>Celine921</author><pubDate>Sat, 22 Nov 2025 07:33:17 +0800</pubDate><description><![CDATA[:q`（不保存退出）、:wq（保存退出）或`:q!终端出现多个y,  输入 ctrl+z 回到原本输入行。操作 git 时经常出现以下这种情况，]]></description><category></category></item><item><title><![CDATA[https 加密原理]]></title><link>https://blog.youkuaiyun.com/Celine921/article/details/124844705</link><guid>https://blog.youkuaiyun.com/Celine921/article/details/124844705</guid><author>Celine921</author><pubDate>Wed, 18 May 2022 16:10:50 +0800</pubDate><description><![CDATA[涉及到的一些概念：对称加密、非对称加密、数字签名、数字证书。
为什么要加密？

因为http传输内容是明文的，明文数据在传输过程中，会经历，中间代理服务器、路由器、wifi热点、通信服务运营商等多个物理节点，如果信息传输过程被劫持，传输内容会完全暴露；
劫持者还可以篡改传输信息，而不被对方察觉，这就是中间人攻击；
所以，需要对传输的信息进行加密。

什么是对称加密？
简单说，类似于日常生活中的钥匙，两个人有同一把钥匙，可以开同一把锁。
对称加密中的密钥，可以加密一段信息，也可以对加密后的信息进行解密。
什么]]></description><category></category></item><item><title><![CDATA[记录 markdown 文档的基本常用语法]]></title><link>https://blog.youkuaiyun.com/Celine921/article/details/124768652</link><guid>https://blog.youkuaiyun.com/Celine921/article/details/124768652</guid><author>Celine921</author><pubDate>Sat, 14 May 2022 15:18:37 +0800</pubDate><description><![CDATA[markdown 基本语法]]></description><category></category></item><item><title><![CDATA[这一篇，彻底搞懂浏览器的缓存机制]]></title><link>https://blog.youkuaiyun.com/Celine921/article/details/124697961</link><guid>https://blog.youkuaiyun.com/Celine921/article/details/124697961</guid><author>Celine921</author><pubDate>Tue, 10 May 2022 22:25:52 +0800</pubDate><description><![CDATA[先给出结果，浏览器缓存分两种：强制缓存、协商缓存。
为什么需要缓存？

通过缓存，减少网络请求的数量和体积，页面加载和渲染更快；
网络请求不稳定，加剧页面渲染不稳定性，所以通过缓存，保证页面优先加载；
总结下来就是，使用缓存，可以让页面的加载、渲染更快，提高用户体验度。

有哪些资源可以被缓存？
一般为静态资源，如 css、js、img 等。
强制缓存
强制缓存流程

初次请求，服务器返回资源，和 Cache-Control
若服务器认为该资源可以被缓存，在响应头(Response header)加上 Ca]]></description><category></category></item><item><title><![CDATA[前端面试手写 -- （三）Promise.all 、Promise.race]]></title><link>https://blog.youkuaiyun.com/Celine921/article/details/124527151</link><guid>https://blog.youkuaiyun.com/Celine921/article/details/124527151</guid><author>Celine921</author><pubDate>Sun, 01 May 2022 15:15:02 +0800</pubDate><description><![CDATA[实现 Promise.all

需要注意的点：
1、函数返回一个 promise 对象；
2、promise.all 接收一个数组；
3、接收的数组内元素可能为 promsie 或 常量，注意包装成 promise；
4、针对数组返回的值，注意用数组下标去存储，保证返回结果顺序和数组一致。

function all(arr){
    //函数返回一个 promise 对象
    return new Promise((resolve,reject) =&gt; {
        let count ]]></description><category></category></item><item><title><![CDATA[leetcode 739.每日温度 -- 单调栈]]></title><link>https://blog.youkuaiyun.com/Celine921/article/details/124488634</link><guid>https://blog.youkuaiyun.com/Celine921/article/details/124488634</guid><author>Celine921</author><pubDate>Fri, 29 Apr 2022 10:00:42 +0800</pubDate><description><![CDATA[单调栈]]></description><category></category></item><item><title><![CDATA[webpack 如何抽离公共代码和第三方库？]]></title><link>https://blog.youkuaiyun.com/Celine921/article/details/124356195</link><guid>https://blog.youkuaiyun.com/Celine921/article/details/124356195</guid><author>Celine921</author><pubDate>Fri, 22 Apr 2022 22:59:22 +0800</pubDate><description><![CDATA[假设有下面三种场景

场景一：index.js 和 other.js 文件同时引入 common.js 文件，打包的时候 index.js 和 other.js 中的 common.js 会打包两次。这种情况如何处理？


场景二：index.js 和 other.js 两个文件同时引入第三方模块 lodash，若 lodash 体积过大，每次打包会打两次。这种情况又如何处理？


场景三：index.js 和 other.js 两个文件同时引入第三方模块 lodash，若每次对 index.js 或 ot]]></description><category></category></item><item><title><![CDATA[Webpack 如何抽离、压缩 CSS 文件？]]></title><link>https://blog.youkuaiyun.com/Celine921/article/details/124142144</link><guid>https://blog.youkuaiyun.com/Celine921/article/details/124142144</guid><author>Celine921</author><pubDate>Wed, 13 Apr 2022 11:12:50 +0800</pubDate><description><![CDATA[webpack 抽离压缩 css]]></description><category></category></item><item><title><![CDATA[Webpack 如何配置多入口？]]></title><link>https://blog.youkuaiyun.com/Celine921/article/details/124135747</link><guid>https://blog.youkuaiyun.com/Celine921/article/details/124135747</guid><author>Celine921</author><pubDate>Tue, 12 Apr 2022 22:27:26 +0800</pubDate><description><![CDATA[关于 Webpack 配置，你了解吗？]]></description><category></category></item><item><title><![CDATA[关于跨域，你知道几种解决方案？]]></title><link>https://blog.youkuaiyun.com/Celine921/article/details/124028177</link><guid>https://blog.youkuaiyun.com/Celine921/article/details/124028177</guid><author>Celine921</author><pubDate>Thu, 07 Apr 2022 23:14:58 +0800</pubDate><description><![CDATA[跨域解决方案]]></description><category></category></item><item><title><![CDATA[关于原型和原型链]]></title><link>https://blog.youkuaiyun.com/Celine921/article/details/123943359</link><guid>https://blog.youkuaiyun.com/Celine921/article/details/123943359</guid><author>Celine921</author><pubDate>Mon, 04 Apr 2022 10:30:00 +0800</pubDate><description><![CDATA[这一次彻底理清楚原型和原型链。]]></description><category></category></item><item><title><![CDATA[关于 js 继承]]></title><link>https://blog.youkuaiyun.com/Celine921/article/details/123938651</link><guid>https://blog.youkuaiyun.com/Celine921/article/details/123938651</guid><author>Celine921</author><pubDate>Sun, 03 Apr 2022 15:47:28 +0800</pubDate><description><![CDATA[关于 js 的继承，在大厂一面中出现频率很高，也是很基础很重点的知识，对于日常工作、项目的理解很有帮助，所以是必须要掌握的一点。
js 的继承有很多方法，先记录三种，原型链继承、构造函数继承、组合继承，后面再更补其他方法。
原型链继承
核心点：让子类的原型对象指向新创建的父类实例。Child.prototype = new Father()
优点：
1、可以继承实例构造函数的属性；
2、可以继承父类构造函数的属性；
3、可以继承父类原型对象上的属性；
缺点：某个实例修改了父类的属性或方法，会影响其他实例，其]]></description><category></category></item><item><title><![CDATA[剑指 offer 63. 股票的最大利润 -- 动态规划]]></title><link>https://blog.youkuaiyun.com/Celine921/article/details/123871881</link><guid>https://blog.youkuaiyun.com/Celine921/article/details/123871881</guid><author>Celine921</author><pubDate>Thu, 31 Mar 2022 15:02:19 +0800</pubDate><description><![CDATA[题目描述

题目分析
1. 状态定义 dp[i]
表示以i结尾的子数组的最大利润；
2. 状态转移
前 i 日的最大利润dp[i]，等于前 i - 1 日的最大利润dp[i-1]和最后一日卖出的最大利润prices[i] - min 取最大值，min代表在价格最低时购入。即
dp[i] = Math.max(dp[i-1],prices[i] - min)

3. 初始化设置
dp[0] = 0，首日利润为0
4. 返回值
return dp[i-1]
Code part
var maxProfit = f]]></description><category></category></item><item><title><![CDATA[关于Vuex中的数据流向]]></title><link>https://blog.youkuaiyun.com/Celine921/article/details/123829486</link><guid>https://blog.youkuaiyun.com/Celine921/article/details/123829486</guid><author>Celine921</author><pubDate>Tue, 29 Mar 2022 19:24:58 +0800</pubDate><description><![CDATA[Vuex几个核心概念

state 相当于Vue中的data
getter 相当于Vue中的computed，可以认为是store的计算属性
mutations 相当于Vue中的methods，定义一些方法，唯一改变state数据的办法是提交mutations
actions  跟mutations类似，可以处理异步逻辑
modules 主要解决的是多个store对外暴露的问题

在src目录下创建store，包含以下js

举例说明
//state.js
export default {
    coun]]></description><category></category></item><item><title><![CDATA[new 一个对象的过程都发生了什么？]]></title><link>https://blog.youkuaiyun.com/Celine921/article/details/123809520</link><guid>https://blog.youkuaiyun.com/Celine921/article/details/123809520</guid><author>Celine921</author><pubDate>Tue, 29 Mar 2022 08:30:00 +0800</pubDate><description><![CDATA[在这个过程中，new做了什么？
1、创建了一个新对象
2、设置原型链，让新对象的_proto_属性指向构造函数的prototype对象
obj._proto_ = Func.prototype;
man._proto_ = Person.prototype 

3、让this指向新对象；
4、使用新对象执行构造函数里面的代码，给新对象添加属性和方法；

...]]></description><category></category></item><item><title><![CDATA[一道经典面试题：从输入url到页面显示经历了什么？]]></title><link>https://blog.youkuaiyun.com/Celine921/article/details/123802020</link><guid>https://blog.youkuaiyun.com/Celine921/article/details/123802020</guid><author>Celine921</author><pubDate>Mon, 28 Mar 2022 18:13:59 +0800</pubDate><description><![CDATA[这道题太经典了，因为它涉及到太多的知识点。重绘重排、回流重绘、浏览器渲染原理、event loop 和 TCP连接断开的方式等。
一、DNS解析：url解析成ip地址和对应的端口号
网络进程会先从DNS数据缓存服务器查找是否缓存过当前域名信息，有则直接返回，否则，会进行DNS解析成对应的ip和端口号。
二、建立TCP连接：通过三次握手与服务器建立连接，然后进行数据传输

第一次握手，发送SYN报文。
客户端主动向服务器发送请求建立连接的报文SYN，客户端会随机初始化一个序列号x，然后把SYN的标志置为1，之]]></description><category></category></item><item><title><![CDATA[Promise 基本使用]]></title><link>https://blog.youkuaiyun.com/Celine921/article/details/123739660</link><guid>https://blog.youkuaiyun.com/Celine921/article/details/123739660</guid><author>Celine921</author><pubDate>Fri, 25 Mar 2022 17:08:21 +0800</pubDate><description><![CDATA[promise 基本使用]]></description><category></category></item><item><title><![CDATA[前端面试手写题 -- (二)深拷贝]]></title><link>https://blog.youkuaiyun.com/Celine921/article/details/123649917</link><guid>https://blog.youkuaiyun.com/Celine921/article/details/123649917</guid><author>Celine921</author><pubDate>Tue, 22 Mar 2022 00:28:44 +0800</pubDate><description><![CDATA[手写深拷贝]]></description><category></category></item><item><title><![CDATA[前端面试手写题 -- (一)防抖、节流]]></title><link>https://blog.youkuaiyun.com/Celine921/article/details/123642677</link><guid>https://blog.youkuaiyun.com/Celine921/article/details/123642677</guid><author>Celine921</author><pubDate>Mon, 21 Mar 2022 18:47:04 +0800</pubDate><description><![CDATA[手写防抖、节流]]></description><category></category></item><item><title><![CDATA[Leetcode105. 从前序和中序遍历构造二叉树 -- 递归]]></title><link>https://blog.youkuaiyun.com/Celine921/article/details/123617952</link><guid>https://blog.youkuaiyun.com/Celine921/article/details/123617952</guid><author>Celine921</author><pubDate>Sun, 20 Mar 2022 18:49:27 +0800</pubDate><description><![CDATA[题目

解题思路

先序遍历顺序：根左右；
中序遍历顺序：左根右；
根据先序得到根节点位置；
根据根节点位置 结合中序，得到左右子树；
先序遍历、中序遍历中左右子树个数相同，可求出先序、中序中左右子树的下标；
利用 map 求出根节点的位置，map始终存的是中序遍历元素（包括 leetcode106也是）；
画图！画图！画图！画图可清楚的看出来左右子树的下标。

画图求左右子树下标

根据左右子树在先序和中序遍历中的个数相同，得出：
x - (preLeft + 1) = pIndex - 1 - inLe]]></description><category></category></item></channel></rss>