自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 问答 (1)
  • 收藏
  • 关注

原创 Vue3计算属性和异步计算属性

文章目录一、简要介绍二、计算属性核心源码三、异步计算属性核心源码一、简要介绍不论是计算属性,还是异步计算属性,都是依托于Vue3整体的响应式原理实现的。其核心依旧是ReacetEffect类。如果对响应式原理不清楚,建议先看响应式原理章节。计算属性和常规的动态响应区别在于它不会主动的去执行ReacteEffect所关联的回调方法,而是用一个标记来表示当前的值是否有改变,如果有改变,则重新调用回调方法获取,如果没改动,则直接获取直接计算的值。二、计算属性核心源码export type Computed

2021-10-18 22:26:53 2350

原创 Vue3响应式原理

文章目录一、简介二、响应核心1.核心源码2.逐步分析上述示例代码3.收集依赖和触发依赖更新(1).收集依赖(2).触发依赖更新三、V3.2的响应式优化四、后话一、简介本章内容主要通过具体的简单示例来分析Vue3是如何实现响应式的。理解本章需要了解Vue3的响应式对象。只注重原理设计层面,细节不做太多讲解。二、响应核心1.核心源码export class ReactiveEffect<T = any> { //是否激活 active = true //依赖列表 deps:

2021-10-18 17:11:20 643

原创 Vue3响应式对象Reactive和Ref

Vue3响应式对象Reactive和Ref一、内容简介二、Reactive1.关键源码2.源码流程分析三、代理拦截操作1.数组操作(1).关键源码(2).源码流程分析2.Get操作(1).关键源码(2).源码流程分析3.Set操作(1).关键源码(2).源码流程分析4.其余和行为拦截操作(1).关键源码(2).源码流程分析四、Ref对象1.思考一个问题2.简要说明3.关键源码四.源码解析五、总结1.收集依赖和触发依赖的本质2.响应式对象本质是对数据进行了包装,拦截了读写操作。3.上述篇幅并未讲到集合类型代理

2021-10-17 17:08:03 2499 2

原创 尾调用优化

文章目录一.尾调用概念二.尾调用优化的意义1.调用栈简述2.尾调用优化意义(1).理解上述示例(2).意义三.思想转变四.限制五.举例一.尾调用概念简单点说,指某个函数的最后一步是调用另外一个函数。但实际情况肯定不会这么简单。下面会详细阐述。二.尾调用优化的意义1.调用栈简述正常情况下,当进入某一个函数时,会在内存中形成一个"调用记录",又叫"调用帧"。连续的多个"调用帧"就形成了常说的"调用栈"。在每个"调用帧"内,会形成一个局部上下文对象。这个对象保存了当前作用域内的变量和函数等属性。当调用栈

2021-08-04 20:03:16 602

原创 XHR请求与fetch请求

文章目录一.XMLHttpRequest对象1.使用XHR(1).代码示例(2).GET请求(3).POST请求(4).注意事项2.XMLHttpRequest Level 2(1).FormData(2).超时(3).overrideMimeType二.XMLHttpRequest事件1.事件类型2.load事件3.progress事件三.特殊网络请求1.跨域请求(1).简要说明(2).请求体和响应头交互(3)注意事项2.预检请求3.凭据请求四.Fetch API五.Streams API一.XMLHt

2021-07-28 00:12:01 7826

原创 Promise对象和async异步函数

文章目录一.同步与异步介绍二.Promise对象1.对象介绍2.使用方式(1)Promise.prototype.then方法(2)Promise.prototype.catch方法(3)Promise.prototype.finally方法3.链式调用1.示例2.解析4.Promise.all和Promise.race(1)Promise.all(2)Promise.race5.正确理解执行器函数的同步执行,异步回调三.async异步函数1.声明方式2.返回值3.await关键字4.理解await关键字四

2021-07-26 18:07:18 320

原创 代理Proxy和反射Reflect

文章目录一.简述二.反射API三.捕获器不变式四.捕获器1.get捕获器(1)返回值(2)处理程序参数(3)捕获器不变式(4)示例2.set捕获器(1)返回值(2)处理程序参数(3)捕获器不变式(4)示例3.has捕获器(1)返回值(2)处理程序参数(3)捕获器不变式(4)示例4.defineProperty捕获器(1)返回值(2)处理程序参数(3)捕获器不变式(4)示例5.getOwnPropertyDescriptor捕获器(1)返回值(2)处理程序参数(3)捕获器不变式(4)示例6.deletePro

2021-07-26 00:59:41 301 1

原创 javascript基础问题整理(持续更新)

文章目录1.Number运算操作2.空位数组行为差异3.Object和Map的选择对比内存占用插入性能查找速度删除性能4.weakMap特性1.Number运算操作Javascript浮点值采用得是IEEE-754双精度标准模型。因此是占用8个字节的内存空间,因为设计精度问题,所以不能测试特定的浮点值,比如:0.1+0.2 != 0.3。具体的计算流程和原因可以参考这篇Number类型详解博客 。js高程第四版有说存储整形值比浮点值的内存空间减少一半,但javascript数值只有Number类型,并且

2021-07-25 14:52:21 545 3

原创 Web前端性能优化整理(持续更新)

性能优化一.效率优化1.V8隐藏类2.尾调用优化二.内存优化1.解除无用变量的引用2.闭包注意事项3.Dom事件委托与删除事件一.效率优化1.V8隐藏类V8在将解释后的JavaScript代码编译为实际的机器码时会利用“隐藏类”提升性能。共享同一个构造函数和原型的实例会共享相同的隐藏类,动态添加属性和delete删除属性会导致实例不在共享同一“隐藏类”。因此,尽可能使用赋值null替代delete,这样可以保持隐藏类共享,养成良好的编程习惯,同时也能达到删除引用值供垃圾回收程序回收。2.尾调用优化

2021-07-25 14:52:09 132

原创 web开发平稳退化思想

1.平稳退化思想 "javascript:"伪协议 语法示例:<a href="javascript:function(){}">Example</a>; 内嵌事件处理

2020-09-25 20:56:32 88

原创 Servlet事件监听器

Servlet事件监听器是Servlet规范中定义的一种特殊的类,监听Web应用程序中的ServletContext、HttpSession和ServletRequest等域对象的创建和销毁事件,以及监听这些域对象中的属性发生修改的事件。1.按监听对象划分,监听器可以分为以下三种类型用于监听ServletContext的事件监听器 用于监听HttpSession的事件监听器 用于监听S...

2018-12-06 21:23:47 1760

原创 Filter过滤器

一.Filter基本工作原理Filter程序必须时间javax.servlet.Filter接口,Filter程序必须在web.xml中进行注册和设置拦截资源的值,不管任何类型的资源,最终都是以Servlet程序的形式来运行的,所以,可以使用Filter来拦截任何资源。1.Filter工作原理图通常情况下,当浏览器直接访问某个页面时,是直接由web容器和Servlet程序进行交互,...

2018-12-05 16:08:07 171

原创 详解JSP页面jsp:setProperty标签使用表达式赋值报500错误的原因

错误示例:&lt;%@ page contentType="text/html;charset=UTF-8" language="java" %&gt;&lt;html&gt;&lt;head&gt; &lt;title&gt;Title&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&lt;js

2018-11-27 15:25:43 1658

原创 JSP页面out隐式对象和pageContext隐式对象

一.out隐式对象out隐式对象是通过调用pageContext对象的getOut方法返回的,其作用与ServletResPonse.getWriter方法返回的PrintWriter对象非常相似,但两者为不同类型的对象。JSP页面的out对象类型为JspWriter,相当于一种带缓存的PrintWriter,可以在page指令里设置缓存的大小甚至关闭它的缓存。out对象会在满足某种条件时去调...

2018-11-22 12:19:08 1449

原创 JSP指令-include指令

include指令用于通知JSP引擎在翻译当前JSP页面时将其他页面的内容合并进当前JSP页面转换成的Servlet源文件中,这种在源文件级别引入的方式称之为静态引入。以下为include指令的注意事项1.被引入的文件必须遵循JSP语法,可以包含静态HTML、JSP脚本元素、JSP指令和JSP行为元素等普通JSP页面所具有的一切内容。2.被引入的文件可以使用任意的扩展名,即使扩展名是....

2018-11-21 16:13:18 2843

原创 JSP指令-page指令

JSP一共包含3种指令,分别为page,include,taglib,指令必须嵌套在&lt;%@ 和%&gt;之中,基本语法如:&lt;%@ 指令 属性名="值" %&gt;,大小写敏感。page指令的完整语法如下,以JSP2.0规范为例&lt;%@ page          [ language="java" ]          [ extends="package.class"...

2018-11-21 15:00:46 1123

原创 Session理解

Cookie和Session都可以实现会话跟踪,将上一次的请求传入下一次内,但它们的实现方式有一个显著的区别,如下:Cookie:将当前会话的信息存在浏览器端,每次请求时将Cookie信息传入服务器 Session:将会话的信息存在服务器端,浏览器保存一个JSESSIONID,每次传入JSESSIONID去取信息很显然,2种会话跟踪的实现方式,Session是在服务器端保持状态的方案,Co...

2018-11-08 11:54:46 243

原创 Cookie理解

Cookie属性Comment:描述这个Cookie用途的一些注释 Domain:指定Cookie有效的域,意味着在指定域名系统区域的服务器可以看到这个Cookie,默认只返回给发送Cookie的服务器 Max-Age:指定Cookie在服务器保存的时间。如果为0,表示立即删除这个Cookie;为负,表示存在内存中,默认存在内存中 Path:指定Cookie作用的URL目录及其子目录,默...

2018-11-06 21:21:15 182

原创 关于Request的InputStream.read()读取数据的一个细节

关于InputStream.read()方法,我今天发现了这样一段代码。 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletInputStream in=req.getInputStre...

2018-11-06 12:07:39 2147

原创 BASE64编码

今天偶尔看到关于BASE64编码的原理,便去了解了一下关于字符编码的知识,这儿有篇链接讲得十分详细清晰http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html,如果有想了解关于2进制数据编码显示的具体过程,可以去看这篇博客。如果计算机没有将二进制数据编码显示的功能的话,那么我们看到的都只是一串串的01而已,不同的编码...

2018-11-02 21:25:12 432

原创 缺省servlet的缓存问题

今天看书,无意间发现缺省servlet缓存相关的问题,记录下来,以免自己以后出错找不到原因。在servlet的访问原则里面,只要访问没有在web.xml上配置过路径的servlet都是使用缺省servlet调用的,假如存在如下一种调用情形。一个入口HTML有多个超链接,访问同一个servlet,servlet根据参数的不同使用文件流生成不同的html文档,在通过转发访问这个文档。如果访...

2018-11-02 20:20:50 140

原创 HttpServletResponse.sendRedirect和RequestDispatcher.foward的区别(重定向与转发)

foward只能在同一个Web应用内转发,相对URL为“/”时是相对于当前Web应用程序的根目录。 sendRedirect可以重定向到同一Web站点上的其他Web应用上,相对URL为”/“时是相对于当前Web站点。 sendRedirect重定向后浏览器的URL请求地址会发生改变,相当于二次请求。 foward转发后URL请求地址也不会发生改变,一次请求。 foward转发前后的...

2018-11-02 20:01:52 334

原创 request.include和request.foward后是否共享Request和Response的问题

这两天在细看&lt;深入体验Java_Web开发内幕-核心基础&gt;一书,书比较老了,使用的tomcat和servlet版本差距都比较大。书中提及在foward转发过程中,request对象和response对象一直都是同一个。但我总觉得有些问题,做了以下测试:@WebServlet("/Test")public class ForwardingServlet extends HttpS...

2018-11-01 16:18:45 188

原创 关于Servlet,JSP,HTML中文乱码的问题

首先说明一点,以下的测试方法只有一个HttpServletRequest.forward,但是基于原理上的讲解,其他乱码问题应该也可以从中得到一些启示。不敢保证百分百正确,但能提供一个大致的方向。下面为测试入口servlet的代码,其中的getWriter被注释掉,后面讲其作用。 protected void doGet(HttpServletRequest req, HttpSe...

2018-11-01 12:20:58 1064 2

原创 Web项目访问资源文件

同一个Web程序的所有Servlet都共享同一个ServletContext对象,这个对象可以看作为Servlet的共享内存区域,在关于路径文件方面的API有如下4个:getResourcePaths 返回的是一个Set集合,参数必须以“/”为头,集合里面包含某一个目录的所有子目录和文件的路径名称,都用"/"开头,目录有"/"结尾,某一个目录是“根目录+参数”所代表的目录。Set的键是路径,值...

2018-10-26 20:29:59 931

原创 Servlet类装载器

一.类装载器Java虚拟机使用每一个类的第一件事情就是将类的字节码装载进来,装载类字节码是由类装载器完成的。类装载器首先将一个类转换成一个.class文件,然后读取文件的内容,.class文件的内容是utf-8编码的,转换成Unicode编码后装载入Java虚拟机,当一个类被加载后,Java虚拟机将其编译为可执行的代码存储在内存中,索引信息存储进HashTable中,索引关键字为类的完整名称,...

2018-10-25 20:58:38 123

原创 Http协议(续)

请求头(1)Accept用于指定客户端能够处理的MIME类型,如Accept:text/html,image/*(2)Accept-Charset用于指出客户端程序可以使用的字符集。(3)Accept-Encoding用于指定客户端能够进行解码的数据编码方式,通常指某种压缩方式(4)Accept-Language用于指定客户端期望服务器返回那个国家语言的文档。可以指...

2018-10-25 13:57:27 266

原创 Http协议

一.Http消息的格式一个完整的请求消息包括:一个请求行,若干消息头,以及实体内容,某些消息头和实体内容是可选的。消息头和实体内容之间用空行隔开,用以表示消息头结束,格式如下:   当在浏览器直接输入某个URL地址或点击网页上的一个超链接时,发送的时GET请求,不包含实体内容,当发送POST、PUT、DELETE时才包含实体内容。  一个完整的响应消息包括:一个状态行,若干...

2018-10-24 21:00:45 176

原创 Tomcat上部署web项目的目录问题

记录下最近学习Tomcat关于目录的问题。首先明确一个概念,从浏览器访问服务器的URL是映射到了服务器上的一个目录的某一个资源文件,打一个比方,有如下一条URL:http://192.168.2.99:8000/book/test.html,在不考虑内容协商的情况下,解释如下。192.168.2.99:这是服务器的IP地址。 8000:是Tomcat服务监听的端口号。 /book:这个...

2018-10-24 12:01:20 894

原创 Thinking in java:多线程

关于多线程,看了许多大佬的帖子,自己也思索了很久,虽然许多地方还是不清楚,但还是有必要记录一下自己的所得。首先贴上状态图:(1)New:创建一个线程时,线程进入这个状态(2)Runnable:调用start()后,进入这个状态(3)Running:执行run()时,进入这个状态(4)Blocked:阻塞状态,分3种情况等待阻塞:调用wait()后进入等待阻塞。 同步阻...

2018-09-15 10:56:50 171

原创 Thinking in java:RTTI和反射机制

摘抄别人的一句话:要想理解反射的原理,首先要了解什么是类型信息。Java让我们在运行时识别对象和类的信息,主要有2种方式:一种是传统的RTTI,它假定我们在编译时已经知道了所有的类型信息;另一种是反射机制,它允许我们在运行时发现和使用类的信息一.RTTI为理解RTTI在Java里如何工作,首先必须了解类型信息在运行期是如何表示的。这时要用到一个名为“Class对象”的特殊形式的对象,其中包...

2018-09-14 16:17:56 177

原创 Thinking in java自读笔记:传递对象与克隆

前提:对于常规数据类型而言,可以分为值类型和引用类型,值类型为我们常说的”主类型”,”值类型”直接将内存存储在栈内,由系统自动释放资源的数据类型;引用类型是由类型的实际值引用(类似于指针)表示的数据类型,即一个在栈上的引用指向一个在堆上的实例的类型。一.值的传递当将应用类型和值类型作为参数进行传递时,会制作一个本地副本(引用类型我认为也是有一个副本,只不过是引用的副本),以下为2种情形...

2018-09-14 11:09:35 144

原创 Thinking in java自读笔记:常用输入输出流

这次总结以用法为主,涉及的深入原理暂不理会1 继承与InputStream的常用输入流 (1). 文件输入流FileInputStream (2). 管道输入流PipedInputStream (3). 缓冲输入流BufferedInputStream (4). 合并输入流SequenceInputStream (5). 对象输入流ObjectInputStream (...

2018-09-13 19:53:07 139

原创 关于java原码,补码,反码和移位运算的一些总结

整数的原码,补码,反码是一致的 负数的反码=原码取反(符号为不变) 负数的补码=负数的反码+1; 重点:在JAVA里,使用8进制和16进制给一个int值赋值时,是直接存的补码!!!并且运算时也是采取补码的形式运算。 下面为测试例子: 0x82表示为2进制:10000010,如果0x82是原码的话,那么输出应该为-2,如果0x82为补码,那么原码为11111110,输出应该为-126。...

2018-09-13 15:09:00 2058 1

原创 Thinking in java自读笔记:HashMap,TreeMap和Hashtable

HashMap于HashTable的异同: 相同点:HashMap和Hashtabel的存储元素都是键值对,实现原理都是哈希表。 主要不同点: 1.继承父类不同,Hashtable继承与Dictionary(已废弃),HashMap继承于AbstractMap 2.Hashtabel是线程安全的,HashMap是非线程安全的,不过如今即便使用多线程也不推荐使用Hashtabel,可以使用C...

2018-09-13 11:30:56 186

原创 Thinking in java自读笔记:HashSet与TreeSet

Set集合不能存入相同的元素,HashSet是根据equals()与hashCode()方法来判定元素是否相同,TreeSet是根据compareTo()方法来判定元素是否相同,也可以根据compare方法来判定,因为compareTo()和compare()方法并不定义于根类,因此要使用TreeSet必须实现compareTo()方法或者compare方法。TreeSet可以得到一个顺序列表,H...

2018-09-12 21:01:52 109

原创 Thinking in java自读笔记:Iterator的实现

迭代器是一种比较“轻量级”的对象,因为创建代价较小,而且比较方便,因此都喜欢使用迭代器来遍历集合,但不建议使用迭代器来删除元素下面进行分析一下迭代器的3个主要方法: 1.Iterator.hasNext() public boolean hasNext() { return nextIndex &amp;amp;lt; size; }这个较为简单...

2018-09-12 19:44:25 130

原创 Thinking in java自读笔记:内部类

首先推荐一篇内部类讲解详细的博客地址:https://www.cnblogs.com/dolphin0520/p/3811445.html一.内部类的四种类型成员内部类局部内部类匿名内部类静态内部类(一)成员内部类是最普通的内部类,直接在一个外部类里面定义一个成员类(即内部类)。class OutClass{ class InnerClass { ...

2018-09-12 16:25:25 125

原创 Thinking in java自读笔记:finalize()方法的作用

关于finalize与垃圾回收的两个注意点: (一)finalize是在垃圾回收之前被调用,但不一定会被调用 (二)垃圾回收只与内存有关一旦垃圾收集器准备好释放对象占用的存储空间,它首先调用finalize(),而且只有在下一次垃圾收集过程中,才会真正回收对象的内存。但值得注意的一点是,并不是所有的废弃对象都会被垃圾收集器收集,如果不是内存即将耗尽,垃圾收集器不会去自动释放内存,因为释放内...

2018-09-12 11:58:37 188

原创 Thinking in java自读笔记:标签的使用

在java中,虽然没有使用goto的程序控制结构,但依旧能在break和contine中看到一些goto的影子,这就是标签。标签的声明方式如:Lable1: 测试代码如下:public class Test{ public static void main(String[] args) { int i=0; outer: wh...

2018-09-11 21:15:25 96

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除