<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[szwh1998的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/szwh1998</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; szwh1998]]></copyright><item><title><![CDATA[[JavaScript]剑指offer 12.矩阵中的路径]]></title><link>https://blog.csdn.net/szwh1998/article/details/121039397</link><guid>https://blog.csdn.net/szwh1998/article/details/121039397</guid><author>szwh1998</author><pubDate>Fri, 29 Oct 2021 17:37:15 +0800</pubDate><description><![CDATA[原题来源：力扣官网



思路：

因为word的起点可能在矩阵中的任意一点，所以遍历整个矩阵是必要的一步，对于每一个点开始进行回溯
	从每一个点前进，都会有四个方向，但是这样太复杂，可以在不满足一些必要条件时进行剪枝
	剪枝的条件：行列索引越界，当前字符与word中不匹配
	返回true的唯一条件：前进到word中的最后一个字符
	为了防止走重复的路，应该在回溯的入口处做标记，回溯结束后解除


代码：


/**
 * @param {character[][]} board
 * @param {st]]></description><category></category></item><item><title><![CDATA[[JavaScript]剑指offer 07.重建二叉树]]></title><link>https://blog.csdn.net/szwh1998/article/details/121022339</link><guid>https://blog.csdn.net/szwh1998/article/details/121022339</guid><author>szwh1998</author><pubDate>Thu, 28 Oct 2021 21:04:25 +0800</pubDate><description><![CDATA[原题来源：力扣官网



先复习下前序遍历和中序遍历，对于图中的案例我们能得到：

前序：[根，左，右] =&gt; [3, 9, 20, 15, 7]

中序：[左，根，右] =&gt; [9, 3, 15, 20, 7]



最重要的点在于理清思路，前序与中序的规律

1. 前序首位就是树根节点，而这个根结点在中序中，会出现在任何位置，在这里不难发现，根结点【3】在中序遍历结果中有着不同寻常的意义：根结点【3】的左边，是左子树，根结点的右边是右子树。

2. 返回到前序遍历中去，我们也可以把根和两个子]]></description><category></category></item><item><title><![CDATA[React组件的生命周期]]></title><link>https://blog.csdn.net/szwh1998/article/details/120983447</link><guid>https://blog.csdn.net/szwh1998/article/details/120983447</guid><author>szwh1998</author><pubDate>Tue, 26 Oct 2021 23:21:47 +0800</pubDate><description><![CDATA[首先我们需要对生命周期这个概念有个基本的理解

组件从创建到死亡，会经历一些特殊的阶段
	React组件中包含一系列的钩子函数，会在特定的时机调用
	我们在定义组件时，会在特定的生命周期回调函数


React15和React16是两个不同版本的生命周期，但是其中的架构思想值得我们去思考



旧版本

初始化：由ReactDOM.render()触发，初次渲染

constructor
	componentWillMount
	render
	componentDidMount （常用：做一些初始化的事情]]></description><category></category></item><item><title><![CDATA[React中组件的三大属性（state, props, ref)]]></title><link>https://blog.csdn.net/szwh1998/article/details/120981892</link><guid>https://blog.csdn.net/szwh1998/article/details/120981892</guid><author>szwh1998</author><pubDate>Tue, 26 Oct 2021 22:03:17 +0800</pubDate><description><![CDATA[state

理解：state是组件对象最重要的属性，值是一个对象，包含多个key value组合，也就是说可以包含多个状态。组件也被称为状态机，通过更新组件的state来更新对应的页面显示。

注意：

组件中render方法内的this指向该组件实例对象
	组件自定义的方法需要通过箭头函数来指向该组件实例对象
	状态数据不能直接以赋值的形式修改或者更新，必须通过setState来修改状态，参数是一个state对象。
props

理解：

每个组件对象都会有props属性
	组件标签的所有属性都会保存在]]></description><category></category></item><item><title><![CDATA[ajax跨域问题的一些解决方案]]></title><link>https://blog.csdn.net/szwh1998/article/details/120980473</link><guid>https://blog.csdn.net/szwh1998/article/details/120980473</guid><author>szwh1998</author><pubDate>Tue, 26 Oct 2021 21:31:27 +0800</pubDate><description><![CDATA[同源策略（SOP）

在考虑跨域问题之前，我们得先了解什么是同源策略（Same Origin Policy）。SOP由NetScape公司提出的一种安全策略。简单来讲就是网络资源之间通信需要域名，协议，端口相同，例如http://www.baidu.com中，http是协议，baidu是域名，com是端口。在ajax请求中，如果资源不同域，则会出现跨域问题的报错，因此需要一些解决方案。



CORS跨域资源共享

后台解决跨域问题的一劳永逸的方案：在响应头中设置

response.setHeader(']]></description><category></category></item><item><title><![CDATA[axios库和fetch内置方法发送ajax请求]]></title><link>https://blog.csdn.net/szwh1998/article/details/120979387</link><guid>https://blog.csdn.net/szwh1998/article/details/120979387</guid><author>szwh1998</author><pubDate>Tue, 26 Oct 2021 20:27:09 +0800</pubDate><description><![CDATA[什么是axios？

axios是一个基于promise的http库，可以用来发送get和post请求

axios的特性（转）

1、可以在浏览器中发送 XMLHttpRequests
2、可以在 node.js 发送 http 请求
3、支持 Promise API
4、拦截请求和响应
5、转换请求数据和响应数据
6、能够取消请求
7、自动转换 JSON 数据
8、客户端支持保护安全免受 XSRF 攻击

axios的使用案例

因为是对ajax的封装，所以案例需要涉及到node的使用，来实现前端和服务]]></description><category></category></item><item><title><![CDATA[Javascript实现概率抽奖算法及改进方案]]></title><link>https://blog.csdn.net/szwh1998/article/details/120751994</link><guid>https://blog.csdn.net/szwh1998/article/details/120751994</guid><author>szwh1998</author><pubDate>Wed, 13 Oct 2021 21:11:52 +0800</pubDate><description><![CDATA[最近一次面试被问到一个概率抽奖的问题，记录一下，题目是：实现一个抽奖系统，抽到一等奖的概率为10%，二等奖的概率为20%，三等奖的概率为30%，四等奖的概率为40%。

写出来之后，又让我写一个测试代码，跑1000次，看结果概率是否接近。

作为前端入门的代码萌新，遇到这种问题，只能临场发挥，从来没写过后台的逻辑～

下面是代码：


let _prize = ['A','B','C','D']
let _prop = [0.1, 0.2, 0.3, 0.4]
let a = 0, b = 0, c = 0]]></description><category></category></item><item><title><![CDATA[JavaScript基础部分总结思维导图]]></title><link>https://blog.csdn.net/szwh1998/article/details/120617372</link><guid>https://blog.csdn.net/szwh1998/article/details/120617372</guid><author>szwh1998</author><pubDate>Tue, 05 Oct 2021 19:45:07 +0800</pubDate><description><![CDATA[根据高程设计第四版总结




]]></description><category></category></item><item><title><![CDATA[JS中call、apply和bind的形象对比]]></title><link>https://blog.csdn.net/szwh1998/article/details/120596402</link><guid>https://blog.csdn.net/szwh1998/article/details/120596402</guid><author>szwh1998</author><pubDate>Sun, 03 Oct 2021 17:32:53 +0800</pubDate><description><![CDATA[假设Ryan和Jason正在玩一款新的RPG游戏，Ryan刚刚学会治疗技能，他们开始尝试去打第一个boss，下面是他们俩的基础属性与技能：


let ryan = {
    name: 'ryan',
    hp: 50,
    heal: function(level){
        this.hp += 10 * level;
    }
}
let jason = {
    name: 'jason',
    hp: 30
}

hp是两人当前的血量，heal是Ryan新学的治疗技能，]]></description><category></category></item><item><title><![CDATA[原生JS实现Ajax异步交互]]></title><link>https://blog.csdn.net/szwh1998/article/details/120588124</link><guid>https://blog.csdn.net/szwh1998/article/details/120588124</guid><author>szwh1998</author><pubDate>Sat, 02 Oct 2021 20:21:13 +0800</pubDate><description><![CDATA[原生JS实现Ajax应该是前端开发人员在学习ajax中的第一步，这篇博客需要一些必要的前置知识，会更容易理解：

JS基础，JS DOM操作，JS事件，ES6（熟悉更好）

什么是AJAX

AJAX：全称Asynchronous Javascript And XML，也就是异步的JS和XML的意思。JS我们熟悉，XML可能不熟悉。

XML：XML文件和我们的HTML很类似，都是使用标签结构，但是XML是用来存放数据和传输数据的，且没有像&lt;div&gt;,&lt;a&gt;这样的预定义标签，全部是.]]></description><category></category></item><item><title><![CDATA[JS闭包的由浅入深理解和实例分析]]></title><link>https://blog.csdn.net/szwh1998/article/details/120573327</link><guid>https://blog.csdn.net/szwh1998/article/details/120573327</guid><author>szwh1998</author><pubDate>Fri, 01 Oct 2021 02:46:20 +0800</pubDate><description><![CDATA[网上有各种对闭包的比较靠谱的解释，这里说主流的两种：

1. 闭包是能读取其他函数内部变量的函数，本质上是函数内部和函数外部连接的桥梁。

2. 函数和其周围状态（词法环境）的引用捆绑在一起，形成闭包。



这里第一个说法相对比较好理解，但是第二个说法会比较晦涩，需要有一定的理论基础。

在做具体的分析之前，有几个概念需要提前弄明白：作用域，作用域链，执行上下文，环境变量。最好也能够明白执行栈和任务队列，容易放在一起考察。

环境变量：

全局变量和局部变量，分别声明在全局作用域和函数/块作用域中。

全]]></description><category></category></item><item><title><![CDATA[HTML5和CCS3新增特性总结思维导图]]></title><link>https://blog.csdn.net/szwh1998/article/details/120536568</link><guid>https://blog.csdn.net/szwh1998/article/details/120536568</guid><author>szwh1998</author><pubDate>Tue, 28 Sep 2021 20:08:55 +0800</pubDate><description><![CDATA[喜欢就点个赞吧～




]]></description><category></category></item><item><title><![CDATA[【CSS3动画】从简单动画到实现平抛运动和弹跳效果-贝塞尔曲线的利用]]></title><link>https://blog.csdn.net/szwh1998/article/details/120353730</link><guid>https://blog.csdn.net/szwh1998/article/details/120353730</guid><author>szwh1998</author><pubDate>Fri, 17 Sep 2021 21:30:18 +0800</pubDate><description><![CDATA[基础概念

如果你几乎不了解CCS3动画，下面会介绍一些基本概念，熟悉的朋友可以跳过基础概念部分。

假想想要一个正方形的盒子动起来，我们分别需要在html和css文件中进行设置。html比较简单，创建一个div随意class命名即可。接下来来看CSS，加入动画就需要给盒子设置几个关键帧，而CSS中的@keyframe可以把多个关键帧整合到一起，叫做一个动画序列。它需要一个自定义动画名称，起始状态和终止状态的信息。以下是模版。


@keyframe animationName {
    0% {
   ]]></description><category></category></item><item><title><![CDATA[【JS高程设计学习笔记】第5章-基本引用类型]]></title><link>https://blog.csdn.net/szwh1998/article/details/120293666</link><guid>https://blog.csdn.net/szwh1998/article/details/120293666</guid><author>szwh1998</author><pubDate>Tue, 14 Sep 2021 21:45:07 +0800</pubDate><description><![CDATA[引用值（或者对象）是某个特定引用类型的实例。在ES中，引用类型是把数据和功能组织到一起的结构，引用类型不是“类class”，ES缺少传统的面向对象编程语言所表述的某些基本结构，比如类和借口。

对象被认为是某个特定引用类型的实例，可以通过new操作符后跟一个构造函数来创建。


let now = new Date();

这行代码创建了引用类型Date的一个实例，Date（）在这里就是构造函数。

5.1 Date

在不给Date构造函数传参时，创建的对象将保存当前的日期和时间。

如果要保存一个具体的]]></description><category></category></item><item><title><![CDATA[【JS高程设计学习笔记】第4章-变量、作用域与内存]]></title><link>https://blog.csdn.net/szwh1998/article/details/120242800</link><guid>https://blog.csdn.net/szwh1998/article/details/120242800</guid><author>szwh1998</author><pubDate>Sat, 11 Sep 2021 22:28:45 +0800</pubDate><description><![CDATA[4.1 原始值与引用值

ES变量包括两种不同类型的数据，原始值（primitive value）和引用值（reference value）则是由多个值构成的对象。

六种原始值：Undefined，Null，Boolean，Number，String，和Symbol

保存原始值的变量是按值（by value）访问的，因为我们操作的就是存储在变量中的实际值

引用值是保存在我们内存中的对象，JavaScript不允许直接访问内存，所以不能直接操作对象所在的内存空间。因此保存引用值的变量是按引用（ by r]]></description><category></category></item><item><title><![CDATA[【JS高程设计学习笔记】第3章-语言基础]]></title><link>https://blog.csdn.net/szwh1998/article/details/120208353</link><guid>https://blog.csdn.net/szwh1998/article/details/120208353</guid><author>szwh1998</author><pubDate>Fri, 10 Sep 2021 14:55:59 +0800</pubDate><description><![CDATA[3.1 语法

3.1.1 区分大小写

ECMAScript中一切都区分大小写，无论是变量，函数名还是操作符。

3.1.2 标识符

标识符，就是变量，函数，属性或者函数参数的名称。标识符可以由一个或者多个下列字符组成：

字母，下划线，美元符号，数字。

其中数字不能用做第一个字符。

驼峰命名法：第一个词首字母小写，后面的词首字母大写。例如 var firstSecond = function();

3.1.3 注释

单行注释：//

多行注释：/* */

3.1.4 严格模式

ES5增..]]></description><category></category></item><item><title><![CDATA[【计算机基础】数据结构与算法要点总结]]></title><link>https://blog.csdn.net/szwh1998/article/details/120139199</link><guid>https://blog.csdn.net/szwh1998/article/details/120139199</guid><author>szwh1998</author><pubDate>Mon, 06 Sep 2021 16:48:00 +0800</pubDate><description><![CDATA[文章转载自：https://github.com/autoencoder-github/interviewtop

简述数据结构栈

栈是一种线性表，其限制只能在表尾进行插入或删除操作。由于该特性又称为后进先出的线性表。

简述数据结构队列

队列是一种先进先出的线性表。其限制只能在线性表的一端进行插入，而在另一端删除元素。

简述二叉树

二叉树是n个有限元素的集合，该集合或者为空、或者由一个称为根（root）的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成。

简述满二叉树

一个二叉树，如果]]></description><category></category></item><item><title><![CDATA[【计算机基础】计算机网络要点总结]]></title><link>https://blog.csdn.net/szwh1998/article/details/120139120</link><guid>https://blog.csdn.net/szwh1998/article/details/120139120</guid><author>szwh1998</author><pubDate>Mon, 06 Sep 2021 16:46:07 +0800</pubDate><description><![CDATA[文章转载自：https://github.com/autoencoder-github/interviewtop

简述OSI七层协议

OSI七层协议包括：物理层，数据链路层，网络层，运输层，会话层，表示层， 应用层

简述TCP/IP五层协议

TCP/IP五层协议包括：物理层，数据链路层，网络层，运输层，应用层

物理层有什么作用

主要解决两台物理机之间的通信，通过二进制比特流的传输来实现，二进制数据表现为电流电压上的强弱，到达目的地再转化为二进制机器码。网卡、集线器工作在这一层。

数据链路层有什]]></description><category></category></item><item><title><![CDATA[【计算机基础】操作系统要点总结（转）]]></title><link>https://blog.csdn.net/szwh1998/article/details/120138070</link><guid>https://blog.csdn.net/szwh1998/article/details/120138070</guid><author>szwh1998</author><pubDate>Mon, 06 Sep 2021 16:16:02 +0800</pubDate><description><![CDATA[本文转载自https://github.com/autoencoder-github/interviewtop

什么是操作系统？请简要概述一下

操作系统是管理计算机硬件和软件资源的计算机程序，提供一个计算机用户与计算机硬件系统之间的接口。

向上对用户程序提供接口，向下接管硬件资源。

操作系统本质上也是一个软件，作为最接近硬件的系统软件，负责处理器管理、存储器管理、设备管理、文件管理和提供用户接口。

操作系统有哪些分类？

操作系统常规可分为批处理操作系统、分时操作系统、实时操作系统。

若一个操作]]></description><category></category></item><item><title><![CDATA[【算法】二分查找]]></title><link>https://blog.csdn.net/szwh1998/article/details/120131213</link><guid>https://blog.csdn.net/szwh1998/article/details/120131213</guid><author>szwh1998</author><pubDate>Mon, 06 Sep 2021 15:40:08 +0800</pubDate><description><![CDATA[二分查找适用的场景

1. 在有序的数组中查找一个目标值

2. 不适合频繁插入和删除的数列；重新排序或者有序进行插入删除都需要时间开销

3. 不适合数据量太小或者太大的数列；太小的数据量不如直接遍历，太大的数据量系统不一定有那么大的连续内存空间

4. 需要时间复杂度在O(nlogn)的时候

二分查找的经典实现

参考LC 704题，二分查找。(有序，元素不重复）

题目：

给定一个n个元素有序的（升序）整型数组nums 和一个目标值target ，写一个函数搜索nums中的 targ...]]></description><category></category></item></channel></rss>