<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[zem]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/zemprogram</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; zemprogram]]></copyright><item><title><![CDATA[前端面试常问--计算机网络--HTTP3]]></title><link>https://blog.csdn.net/zemprogram/article/details/109472180</link><guid>https://blog.csdn.net/zemprogram/article/details/109472180</guid><author>zemprogram</author><pubDate>Tue, 03 Nov 2020 20:51:22 +0800</pubDate><description><![CDATA[在前端面试中，除了最为重要的JavaScript知识外，计算机网络和操作系统也是尤为重要的（html和css还算比较简单的），而计算机网络中http协议是经常被问到的内容，包括常见的状态码，常见的头部字段，握手过程等等，而这里要说的是其中一个常问的问题，http版本
在之前我已经写过一篇http版本相关的博客HTTP基本学习与演变中（HTTP/0.9，HTTP/1.0，HTTP/1.1，HTTP/2.0，HTTPS）的比较，但里面并没有包含HTTP3，所以这里额外写了个HTTP3的内容
实际上在之前我也没在]]></description><category></category></item><item><title><![CDATA[前端面试常问--计算机网络--网络攻击XSS与CSRF]]></title><link>https://blog.csdn.net/zemprogram/article/details/109451863</link><guid>https://blog.csdn.net/zemprogram/article/details/109451863</guid><author>zemprogram</author><pubDate>Mon, 02 Nov 2020 17:25:39 +0800</pubDate><description><![CDATA[XSS（Cross Site Scripting）
XSS攻击全称跨站脚本攻击，之所以首字母是X，是为了区别于层叠样式表CSS
使用cookie，localStorage，sessionStorage时要注意是否有代码存在XSS注入的风险，攻击者在有XSS缺陷的页面会窃取用户的对应信息
XSS注入的方法
XSS注入实际上就是通过页面设计时的缺陷，利用浏览器对于某处代码的解析，让浏览器去执行恶意代码

在 HTML 中内嵌的文本中，恶意内容以 script 标签形成注入。
在内联的 JavaScript 中，]]></description><category></category></item><item><title><![CDATA[vite学习之路（一）初识vite，vite的使用与工作机制]]></title><link>https://blog.csdn.net/zemprogram/article/details/109403787</link><guid>https://blog.csdn.net/zemprogram/article/details/109403787</guid><author>zemprogram</author><pubDate>Sat, 31 Oct 2020 23:04:27 +0800</pubDate><description><![CDATA[最近闲下来后开始整理之前的知识了，早在vue3.0正式出来之前，尤大就已经提到了做了一个新的web应用开发工具vite
解下来的几篇文章我会对vite的使用，到与webpack（其实应该是webpack-dev-server，后面会解释为什么）的比较，以及源码解析，简单地实现vite部分功能来写，欢迎大家在评论区提出各种建议问题
那么话不多说，开始vite学习之路
vite是什么
首先，vite为什么叫做vite，vite实际上是法语中快的意思，所以顾名思义，这个工具给我们带来的就是更快的开发体验，它实际上]]></description><category></category></item><item><title><![CDATA[前端面试手撕代码小集合（仍在补充中）]]></title><link>https://blog.csdn.net/zemprogram/article/details/109398323</link><guid>https://blog.csdn.net/zemprogram/article/details/109398323</guid><author>zemprogram</author><pubDate>Sat, 31 Oct 2020 10:03:00 +0800</pubDate><description><![CDATA[上岸半个月，开始回来学习写博客，先看了之前自己写的面经，决定先把一些常见的题目总结出来
（以下皆为面试bat字节时遇到的题目）
这里直接上代码，测试有问题的欢迎各位在评论区指出，注释看不懂其中代码也欢迎提出问题
实现promise的API
Promise.all

参数：数组
返回：一个promise对象
功能：该方法接受一个数组作为参数，数组成员为Promise对象，若不是Promise对象，则先使用Promise.resolve方法变为对象。而事实上，数组参数中的每个值都会经过Promise.resol]]></description><category></category></item><item><title><![CDATA[vue中修改数组内容视图没有发生更新问题源码解析]]></title><link>https://blog.csdn.net/zemprogram/article/details/108562230</link><guid>https://blog.csdn.net/zemprogram/article/details/108562230</guid><author>zemprogram</author><pubDate>Sun, 13 Sep 2020 14:32:26 +0800</pubDate><description><![CDATA[改变数组长度无法触发视图更新
在vue中，我们可能会有这种情况，修改了数组的长度，但是视图没有发生更新
&lt;template&gt;
  &lt;div id="app"&gt;
      &lt;div v-for="(item,index) in arr" :key="index"&gt;
        {{index}}:{{item}}
      &lt;/div&gt;
      &lt;button @click="click"&gt;btn&lt;/button&gt;
  &lt]]></description><category></category></item><item><title><![CDATA[Electron开发笔记----前端小白开发桌面应用之路（四）桌面应用中的跳转]]></title><link>https://blog.csdn.net/zemprogram/article/details/108030072</link><guid>https://blog.csdn.net/zemprogram/article/details/108030072</guid><author>zemprogram</author><pubDate>Sun, 16 Aug 2020 13:36:19 +0800</pubDate><description><![CDATA[桌面应用中跳转浏览器链接
在桌面应用中，我们打开一个链接，有几种不同的情况
1. 直接在应用中跳转到该链接地址
当我们在Electron.js写的桌面应用中写入一个a标签来做跳转时，如下
&lt;a href="https://www.baidu.com"&gt;跳转&lt;/a&gt;

点击这个跳转时，会发现并不是在浏览器中实现跳转，而是在electron应用中打开了这个页面，如下图

2. 在浏览器中打开链接地址
我们有时需要通过浏览器去打开一个链接，像vscode里面，就有当我们写的是一个页面的地址]]></description><category></category></item><item><title><![CDATA[Electron开发笔记----前端小白开发桌面应用之路（三）顶部菜单和右键菜单的创建]]></title><link>https://blog.csdn.net/zemprogram/article/details/107658573</link><guid>https://blog.csdn.net/zemprogram/article/details/107658573</guid><author>zemprogram</author><pubDate>Sat, 01 Aug 2020 13:46:19 +0800</pubDate><description><![CDATA[顶部菜单的编辑

桌面应用的菜单是我们很常用的一个功能，大到各种应用，小到一个小小的记事本，都有自己的菜单，那么接下来就看看如何实现一个菜单
传入模板生成菜单
Electron提供了一个模块Menu来实现菜单功能，我们直接通过一个demo来演示
首先创建如图的目录

这里menu文件夹下的menu.js是用来写菜单的信息，包括菜单的内容，以及菜单的点击事件触发的回调，这里实际上是在主进程中调用的，但是为了可以区分功能和复用，我写在menu.js中，并在主进程中require它
主进程index.js
con]]></description><category></category></item><item><title><![CDATA[Electron开发笔记----前端小白开发桌面应用之路（二）文件的读写和新窗口的创建]]></title><link>https://blog.csdn.net/zemprogram/article/details/107601542</link><guid>https://blog.csdn.net/zemprogram/article/details/107601542</guid><author>zemprogram</author><pubDate>Wed, 29 Jul 2020 11:08:20 +0800</pubDate><description><![CDATA[在本系列的上一篇文章中，我们谈到了如何去搭建一个简单的hello wordl桌面应用，那么这篇文章，来谈谈几个我们在桌面应用中常用的功能
文件的读写
对于一个桌面应用来说，很多信息都会保存在本地的文件，在我们使用该应用时，读取本地对应的文件，去显示不同的内容
这类似于我们在使用web端时，需要去从服务端读取我们想要的配置文件等信息，将信息以各种形式渲染到页面上。对于桌面应用来说，设置一般都是保存在本地的，我们可以将桌面应用读取本地的文件，和web端发起请求的行为对比，其实原理都是一样的。
而这里的读写，我们]]></description><category></category></item><item><title><![CDATA[Electron开发笔记----前端小白开发桌面应用之路（一）聊聊Electron和我的第一个Electron应用]]></title><link>https://blog.csdn.net/zemprogram/article/details/107586136</link><guid>https://blog.csdn.net/zemprogram/article/details/107586136</guid><author>zemprogram</author><pubDate>Sun, 26 Jul 2020 13:59:04 +0800</pubDate><description><![CDATA[Electron
Electron.js是什么，如果你想使用你的前端知识，去开发一个桌面应用，那么你应该会了解到Electron或者是nw，而这两者之间的区别，我在这里就不展开说了，这里主要要说的是Electron.js
Electron是在2013年为了开发Github上可编程的文本编辑器Atom的框架而开发出来的
一、为什么会有Electron

首先，在学习Electron.js之前，我们先来聊聊，为什么会有Electron这种东西
以下为我的个人观点：
我个人觉得，Electron这类框架的出现，是]]></description><category></category></item><item><title><![CDATA[windows apache下php环境的搭建]]></title><link>https://blog.csdn.net/zemprogram/article/details/106818377</link><guid>https://blog.csdn.net/zemprogram/article/details/106818377</guid><author>zemprogram</author><pubDate>Thu, 18 Jun 2020 10:47:35 +0800</pubDate><description><![CDATA[一、	软件下载链接
apache：https://www.apachelounge.com/download/
php：https://windows.php.net/download
二、	安装软件
根据电脑版本到上面的链接安装，然后解压到本地磁盘，存放路径最好不要有中文名，不然可能会报错
以win64为例
apache下载版本为

apache解压内容如下

php下载版本为

php解压内容如下

三、	配置php
在php根目录找到php.ini-development文件，改名为php.ini，然]]></description><category></category></item><item><title><![CDATA[从node.js的文件监听到webpack的热编译实现]]></title><link>https://blog.csdn.net/zemprogram/article/details/106353485</link><guid>https://blog.csdn.net/zemprogram/article/details/106353485</guid><author>zemprogram</author><pubDate>Wed, 27 May 2020 15:36:27 +0800</pubDate><description><![CDATA[我们知道，webpack可以通过配置实现热更新，让我们在编写代码时不需要手动去执行一些编译命令，而是在保存的时候就可以自动更新视图，那么这些功能是怎么做到的呢
首先，我们分解一下要做的事情，我们需要去监听文件的更新，当文件更新时，去修改对应的视图部分，那么，我们先看看如何去监听文件的更新
node.js实现监听文件更新
使用node.js实现监听文件更新，既然是和文件有关，那么盲猜fs中可能有相关的API。
对于文件的监听，fs提供了两个API，watch和watchFile，这两个API最简单的区别，在于]]></description><category></category></item><item><title><![CDATA[透过V8深入理解JavaScript的函数]]></title><link>https://blog.csdn.net/zemprogram/article/details/106190332</link><guid>https://blog.csdn.net/zemprogram/article/details/106190332</guid><author>zemprogram</author><pubDate>Mon, 18 May 2020 12:12:35 +0800</pubDate><description><![CDATA[函数
什么是函数
在JavaScript中，函数其实也是一个对象，所以函数也可以有自己的属性和值，它与对象不同的地方在于，它可以被执行，执行时会创建函数作用域。
V8如何去执行函数
我们知道，在执行函数的时候，我们只需要在函数名后面，加上一个括号，在括号里传入参数，就可以执行这个函数了，但是，V8是怎么做到执行这个函数的，V8如何找到这个函数的相关代码
既然函数是一个对象，那么它就有自己的属性，除了我们给它添加的属性，函数本身有两个属性，分别是name和code。
name属性存储着函数的名字，而code以]]></description><category></category></item><item><title><![CDATA[透过V8深入理解JavaScript的对象]]></title><link>https://blog.csdn.net/zemprogram/article/details/106148326</link><guid>https://blog.csdn.net/zemprogram/article/details/106148326</guid><author>zemprogram</author><pubDate>Fri, 15 May 2020 19:27:32 +0800</pubDate><description><![CDATA[我们知道，V8是Chrome用来编译执行JavaScript的JavaScript引擎，所以如果我们要了解JavaScript，那么结合V8能让我们更好地理解，这篇博客将结合V8，来谈谈JavaScript种的对象
对象
什么是JavaScript的对象
什么是JavaScript的对象， JavaScript中的对象，并不是单单指Object，JavaScript这门语言本身，是基于对象的，可以说，JavaScript里面的大部分内容，都是由对象构成的。比如函数，数组，这些都是由对象构成的，甚至一些基本类]]></description><category></category></item><item><title><![CDATA[从V8来谈谈JavaScript代码的执行]]></title><link>https://blog.csdn.net/zemprogram/article/details/106148140</link><guid>https://blog.csdn.net/zemprogram/article/details/106148140</guid><author>zemprogram</author><pubDate>Fri, 15 May 2020 19:10:28 +0800</pubDate><description><![CDATA[我们知道，V8引擎是Google开发的开源JavaScript引擎，目前用在Chrome浏览器和Node.js中，核心功能是将JavaScript解析成机器能理解的机器码，供机器执行。
什么是V8
我们可以把V8看成一个虚拟机，其通过模拟实际计算机的各种功能来实现代码的执行，如模拟计算机的CPU，堆栈，寄存器等，此外，虚拟机还有自己的一套指令系统
有这样的虚拟机带来的好处是，只要我们按照虚拟机的规范去编写代码，那么即使我们在不同的操作系统，相同的代码执行出来的结果也能是相同的。可能Java虚拟机大家也都听过]]></description><category></category></item><item><title><![CDATA[手写webpack部分功能实现ES module语法的编译]]></title><link>https://blog.csdn.net/zemprogram/article/details/105985747</link><guid>https://blog.csdn.net/zemprogram/article/details/105985747</guid><author>zemprogram</author><pubDate>Fri, 08 May 2020 17:50:39 +0800</pubDate><description><![CDATA[我们知道，webpack是一个强大的打包工具，能通过引入各种插件依赖来对代码进行处理，今天就简单实现以下webpack里面的一部分核心内容
手写webpack
所需的babel npm 包
这里给一个package.json，可以先把相关的npm包安装下来
{
  "name": "mywebpack",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Er]]></description><category></category></item><item><title><![CDATA[前端面试题 我在面试bat字节时被问的ES6相关问题]]></title><link>https://blog.csdn.net/zemprogram/article/details/105926769</link><guid>https://blog.csdn.net/zemprogram/article/details/105926769</guid><author>zemprogram</author><pubDate>Tue, 05 May 2020 23:40:07 +0800</pubDate><description><![CDATA[做为前端开发，应该都知道，ES6是我们必学的，而之所以强调ES6，是因为在ES6那个版本增加了很多东西，以至于阮一峰大佬还写了本书，也因此，我们经常会在面试里面被问到，你了解ES6吗，知道哪些新特性，而在你说出来之后，就会引来一系列的问题，这篇博客就从我面试bat字节时被问到的一些问题和网上的面经结合做一些总结和问题的回答，同时也会谈到如何从被问的问题里面“引导”面试官去问你其他的问题
新增声明符...]]></description><category></category></item><item><title><![CDATA[Vue3.0都快发布了，还不看看Vue和React的区别]]></title><link>https://blog.csdn.net/zemprogram/article/details/105881126</link><guid>https://blog.csdn.net/zemprogram/article/details/105881126</guid><author>zemprogram</author><pubDate>Fri, 01 May 2020 19:08:51 +0800</pubDate><description><![CDATA[现在常用的三大框架中，常常会拿Vue和React来做比较，上周尤大又开了个Vue3.0beta的直播，所以就想着写篇两者比较的博客，拖着拖着拖到五一，总算整出来了。
实际上之所以会想去写这篇文章，也是尤大在直播里提到了好几次React的内容，在更新Vue3.0上参考了很多React的功能，而之前虽然学过React，但也就只是做个todo-list玩玩而已，没做过实际的项目，所以也借此来熟悉一下Re...]]></description><category></category></item><item><title><![CDATA[笔记中的笔记，聊聊尤大在vue3.0 beta直播里说了什么]]></title><link>https://blog.csdn.net/zemprogram/article/details/105726956</link><guid>https://blog.csdn.net/zemprogram/article/details/105726956</guid><author>zemprogram</author><pubDate>Sat, 25 Apr 2020 23:22:20 +0800</pubDate><description><![CDATA[在vue3.0 beta直播过后一天，掘金就有了别人家的笔记，确实笔记做的很好，但是我想在这份笔记上，加上我看直播时的一些感受，去做自己的笔记
（我还是推崇多做自己的笔记，而不是单单只看别人的笔记，写笔记会让自己对知识点更加深刻，即使会花比较多的时间，但一些知识做笔记是很有必要的）
因为直播过后那两天有事，所以今天才把这份笔记整理出来
事实上一个月前我才重新看了去年和前年的vue conf并整理了...]]></description><category></category></item><item><title><![CDATA[React学习笔记（十）React Hook]]></title><link>https://blog.csdn.net/zemprogram/article/details/105702747</link><guid>https://blog.csdn.net/zemprogram/article/details/105702747</guid><author>zemprogram</author><pubDate>Thu, 23 Apr 2020 11:09:42 +0800</pubDate><description><![CDATA[Hook是React16.8的新增特性，让我们能在不使用class的情况下使用state和其他的React属性
Hook 是一些可以让你在函数组件里“钩入” React state 及生命周期等特性的函数。Hook不能在class中使用。
React提供了一些内置的Hook，也允许我们去自定义Hook，useState就是其中的一个内置Hook
（有关内置Hook API，请移步https://z...]]></description><category></category></item><item><title><![CDATA[在React中如何判断组件是函数还是类]]></title><link>https://blog.csdn.net/zemprogram/article/details/105671057</link><guid>https://blog.csdn.net/zemprogram/article/details/105671057</guid><author>zemprogram</author><pubDate>Tue, 21 Apr 2020 23:39:06 +0800</pubDate><description><![CDATA[在React中，支持使用class和function来声明一个组件，而实际上，我们在使用这个组件时，因为class和function的不同，所以我们的使用也存在不同
我们知道，function是可以直接调用的，但是class是需要通过new去创建一个实例来使用的
function
// 你的代码
function Greeting() {
  return &lt;p&gt;Hello&lt;/p...]]></description><category></category></item></channel></rss>