自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(86)
  • 收藏
  • 关注

原创 Vue 响应式原理模拟以及最小版本的 Vue的模拟

在模拟最小的vue之前,先复习一下,发布订阅模式和观察者模式对两种模式有了了解之后,对Vue2.0和Vue3.0的数据响应式核心原理1.Vue2.0和Vue3.0的数据响应式核心原理(1). Vue2.0是采用Object.defineProperty的方式,对数据进行get,set方法设置的, 具体可以详见Object.defineProperty的介绍浏览器兼容 IE8 以上(不兼...

2022-12-18 21:12:00 144

原创 发布订阅模式和观察者模式

1.发布/订阅模式订阅者发布者信号中心  假定,存在一个"信号中心",某个任务执行完成,就向信号中心"发布"(publish)一个信号,其他任务可以向信号中心"订阅"(subscribe)这个信号,从而知道什么时候自己可以开始执行。这就叫做"发布/订阅模式"(publish-subscribe pattern)  个人理解,就是,订阅者是学生家长 , 老师是发布...

2022-12-13 22:53:00 126

原创 gulp涉及的自动化构建的插件gulp-load-plugins,gulp-sass,gulp-imagemin等以及启动服务browser-sync相关操作...

学习的过程中,给我最明显的感受就是如果版本过新,会导致很多不必须要的麻烦(各种缺modules以及依赖),把趟过的路记录一下,以及一个工程的规划设计工程想要使用gulp,需要gulpfile.js的入口文件,先建个,之后初始化工程yarn init --dev直接把gulpfile的文件提上,注释啥的都在里面了,以及需要注意的const { src, dest, parallel, se...

2022-12-03 22:05:00 458

原创 模拟Promise的功能

模拟Promise的功能, 按照下面的步骤,一步一步1. 新建是个构造函数2. 传入一个可执行函数 函数的入参第一个为 fullFill函数 第二个为 reject函数; 函数立即执行, 参数函数异步执行3. 状态一旦更改就不可以变更 只能 pending => fulfilled 或者 pending => rejected4. then 的时候要处理入参的情况 su...

2022-11-30 22:35:00 173

原创 JS的函数式编程范式

一、认识函数式编程为什么学习函数式编程?学吧,不学干啥,js太原始了,得接收新事物,就很帅,里面的概念,学的晕乎乎,最直观的感受就是,套娃函数式编程是随着React的流行受到关注的Vue3开始拥抱函数式编程函数式编程可以抛弃this打包过程中可以更好利用tree shaking过滤无用代码方便测试,方便并行处理有很多库可以帮助开发者进行函数式开发, lodash,undersco...

2022-11-24 23:17:00 260

原创 学习js的apply()方法的使用,记录一下

网上大牛,说的很直接,劫持另外一个对象(a)的方法,继承a的属性., 我个人理解,就是把你的变成我的.1.对象的继承,一般的做法是复制:Object.extend下面是prototype.js的实现方式是:传入两个对象,把source里的属性,放到destination里,很直白Object.extend = function(destination, source) { for (...

2022-11-22 13:08:00 142

原创 Json文件转换为Excel文件!涉及读文件,时间戳转化,写文档

一.思路今天接到个小任务,让把json文件转换成excel文件,按照列展开.思路:既然json已经都已经是现成的,那直接将json文件做读操作,在通过不同的key,找到对应的信息,在存到单元格中,在写操作,生成excel文档二.jar包涉及到的jar包,阿里的fastjson和poi的jar包三.代码我的json文档里数据的格式是这样的[ { "total":...

2021-04-25 21:43:00 659

原创 HashMap面试必问的数据结构相关知识总结

  如果在看这篇文章时,对HashMap的结构还不是很了解,建议你参考前段时间写的《刨死你系列——HashMap剖析(基于jdk1.8)》,可能会对下面的提及到知识点有些帮助。1:HashMap 的数据结构?A:哈希表结构(链表散列:数组+链表)实现,结合数组和链表的优点。当链表长度超过8时,链表转换为红黑树。transient Node<K,V>[] table...

2019-09-14 19:37:00 140

原创 Redis的最常被问到知识点总结

1.什么是redis?   Redis 是一个基于内存的高性能key-value数据库。2.Reids的特点     Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是...

2019-09-14 09:28:00 213

原创 DML、DDL、DCL是什么?

一、DML  DML(data manipulation language)数据操纵语言:    我们经常会用到的 INSERT、DELETE、UPDATE、SELECT语句。 主要用来对数据库的数据进行一些操作。INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)DELETE FROM 表名称 WHERE ...

2019-09-13 14:40:00 127

原创 手撕ArrayList

不多BB,直接上代码:public class MyArrayList { //创建数组对象 private Object[] elements; //已使用数组长度 private int size = 0; //初始化数组长度 private final static int INIT_LENGTH = 10; ...

2019-09-08 22:04:00 123

原创 刨死你系列——手撕ArrayList

不多BB,直接上代码:public class MyArrayList { //创建数组对象 private Object[] elements; //已使用数组长度 private int size = 0; //初始化数组长度 private final static int INIT_LENGTH = 10; ...

2019-09-08 22:04:00 121

原创 刨死你系列——LinkedHashMap剖析(基于jdk1.8)

一、概述  1.8版本的LinkedHashMap 继承自 HashMap,在 HashMap(数组链表+红黑树) 基础上,通过维护一条双向链表,解决了 HashMap 不能随时保持遍历顺序和插入顺序一致的问题。除此之外,LinkedHashMap 对访问顺序也提供了相关支持。在一些场景下,该特性很有用,比如缓存。在实现上,LinkedHashMap 很多方法直接继承自 HashMa...

2019-09-07 19:42:00 173

原创 mysql架构与存储引擎 (Myisam与Innodb)

mysql抽象架构:可以分为SQL Layer和Storage Engine Layermysql的engine层是基于表的,不是基于库的,创建表的语句可以指定engineMysql的架构Mysql 架构器中各个模块都是什么?(1)、连接管理与安全验证是什么?每个客户端都会建立一个与服务器连接的线程,服务器会有一个线程池来管理这些 连接;如果客户端需要连接到 M...

2019-09-07 09:35:00 108

原创 面试有关TCP常问的几个问题

在面试中网络问题是一定会考察的,而TCP协议则是考察网络知识的重点。经常会被问道的问题如下:请讲一下TCP协议建立连接的过程请介绍TCP协议中的三次握手和四次挥手是怎么样的为什么TCP协议要三次握手来确立连接,而不是两次,也不是4次TCP连接发起是的syn序号为什么不能从同一个序号开始,比如说1三次握手过程首先需要服务器监听特定的端口,等待客户端来请求连接...

2019-09-06 10:25:00 149

原创 刨死你系列——HashMap(jdk1.8)

本文的源码是基于JDK1.8版本,在学习HashMap之前,先了解数组和链表的知识。数组:数组具有遍历快,增删慢的特点。数组在堆中是一块连续的存储空间,遍历时数组的首地址是知道的(首地址=首地址+元素字节数 * 下标),所以遍历快(数组遍历的时间复杂度为O(1) );增删慢是因为,当在中间插入或删除元素时,会造成该元素后面所有元素地址的改变,所以增删慢(增删的时间复杂度为O(n) )...

2019-09-06 09:30:00 223

原创 刨死你系列——HashMap剖析(基于jdk1.8)

本文的源码是基于JDK1.8版本,在学习HashMap之前,先了解数组和链表的知识。数组:数组具有遍历快,增删慢的特点。数组在堆中是一块连续的存储空间,遍历时数组的首地址是知道的(首地址=首地址+元素字节数 * 下标),所以遍历快(数组遍历的时间复杂度为O(1) );增删慢是因为,当在中间插入或删除元素时,会造成该元素后面所有元素地址的改变,所以增删慢(增删的时间复杂度为O(n) )...

2019-09-06 09:30:00 102

原创 基于LinkedhashMap实现的LRU算法

LRU全称是Least Recently Used,即最近最久未使用的意思。LRU算法的设计原则是:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。也就是说,当限定的空间已存满数据时,应当把最久没有被访问到的数据淘汰。解决的实际问题:当做数据缓存时,缓存的数据会随着时间的推移越来越多,如果没有缓存清除策略,那么会出现俩个问题:1、缓存越来越大挤爆内存。2、很多不...

2019-09-06 08:28:00 318

原创 Java 并发:内置锁 Synchronized

在多线程编程中,线程安全问题是一个最为关键的问题,其核心概念就在于正确性,即当多个线程访问某一共享、可变数据时,始终都不会导致数据破坏以及其他不该出现的结果。而所有的并发模式在解决这个问题时,采用的方案都是序列化访问临界资源 。在 Java 中,提供了两种方式来实现同步互斥访问:synchronized 和 Lock。本文针对 synchronized 内置锁 详细讨论了其在 Java ...

2019-08-30 08:56:00 79

原创 Java 并发:学习Thread 类

Java 中 Thread类 的各种操作与线程的生命周期密不可分,了解线程的生命周期有助于对Thread类中的各方法的理解。一般来说,线程从最初的创建到最终的消亡,要经历创建、就绪、运行、阻塞 和 消亡 五个状态。在线程的生命周期中,上下文切换通过存储和恢复CPU状态使得其能够从中断点恢复执行。结合 线程生命周期,本文最后详细介绍了 Thread 各常用 API。特别地,在介绍会导致线程...

2019-08-29 22:01:00 79

原创 Java并发的背景

在操作系统中,并发是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。并发与操作系统的生命历程息息相关。进程的出现,使得程序状态的保存变为现实,为进程间的切换提供了可能,实现了操作系统的并发,大大提高资源利用率。虽然进程的出现解决了操作系统的并发问题,但人们对实时性又有了更高的要求。由于一个进...

2019-08-29 15:34:00 54

原创 进程上下文切换与和线程上下文切换有什么不同?

1.首先,需要搞明白什么是上下文切换?上下文切换就是从当前执行任务切换到另一个任务执行的过程。但是,为了确保下次能从正确的位置继续执行,在切换之前,会保存上一个任务的状态。2. 然后,需要明白进程与线程的区别?(网上很多,这里简单说明) 1).线程是进程的一部分。进程是表示资源分配的基本单位,又是调度运行的基本单位,是程序执行的一个实例; 线程是进程中执行运算的最小单位,即执行处理机...

2019-08-24 10:52:00 704

原创 深入学习Java对象创建的过程:类的初始化与实例化

  在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的。在实例化一个对象时,JVM首先会检查相关类型是否已经加载并初始化,如果没有,则JVM立即进行加载并调用类构造器完成类的初始化。在类初始化过程中或初始化完毕后,根据具体情况才会去对类进行实例化。本文试图对JVM执行类初始化和实例化的过程做一个详细深入地介绍,以便从Java虚拟机的角度清晰解剖一个Ja...

2019-08-21 17:34:00 98

原创 JVM类生命周期概述:加载时机与加载过程

  一个.java文件在编译后会形成相应的一个或多个Class文件,这些Class文件中描述了类的各种信息,并且它们最终都需要被加载到虚拟机中才能被运行和使用。事实上,虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型的过程就是虚拟机的类加载机制。本文概述了JVM加载类的时机和生命周期,并结合典型案例重点介绍了...

2019-08-15 18:22:00 93

原创 Java回收机制概述

Java技术体系中所提倡的自动内存管理最终可以归结为自动化地解决了两个问题:给对象分配内存以及回收分配给对象的内存,而且这两个问题针对的内存区域就是Java内存模型中的 堆区。垃圾回收机制的引入可以有效的防止内存泄露、保证内存的有效使用,也大大解放了Java程序员的双手,使得他们在编写程序的时候不再需要考虑内存管理。本文着重介绍了判断一个对象是否可以被回收的两种经典算法,并详述了四种典...

2019-08-13 20:11:00 81

原创 JVM 内存模型概述

 我们都知道,Java程序在执行前首先会被编译成字节码文件,然后再由Java虚拟机执行这些字节码文件从而使得Java程序得以执行。事实上,在程序执行过程中,内存的使用和管理一直是值得关注的问题。Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,这些数据区域都有各自的用途,以及创建和销毁的时间,并且它们可以分为两种类型:线程共享的方法区和堆,线程私有的虚拟机栈、本...

2019-08-12 10:12:00 54

原创 Java之反射

内容介绍类加载器反射构造方法反射成员变量反射成员方法反射配置文件运行类中的方法1 类加载器1.1 类的加载当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。 加载就是指将class文件读入内存,并为之创建一个Class对象。任何类被使用时系统都...

2019-08-10 11:23:00 59

原创 Java网络编程

内容介绍网络通信协议UDP通信TCP通信1 网络通信协议通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样。在计算机网络中,这些连接和通信的规则被称为网络通信协议,它对数据的传输格式、传输速率、传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据...

2019-08-09 20:06:00 273

原创 Java学习多线程第二天

内容介绍线程安全线程同步死锁Lock锁等待唤醒机制1 多线程1.1 线程安全如果有多个线程在同时运行,而这些线程可能会同时运行这段代码。程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。我们通过一个案例,演示线程的安全问题:电影院要卖票,我们模拟电影院的卖票过程。假设...

2019-08-09 08:46:00 132

原创 Java学习多线程第一天

内容介绍Thread线程创建线程池线程状态图1多线程1.1 多线程介绍学习多线程之前,我们先要了解几个关于多线程有关的概念。进程:进程指正在运行的程序。确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能。线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有...

2019-08-08 14:59:00 84

原创 Java几种常见的排序算法

 一、所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个优秀的算法可以节省大量的资源。在各个领域中考虑到数据的各种限制和规范,要得到一个符合实际的优秀算法,得经过大量的推理和分析。  二、排序算法可以分为内部排序和外部排序。    内部...

2019-08-05 08:29:00 122

原创 IO流的Properties集合,序列化流与反序列化流,打印流及commons-IO

内容介绍 Properties集合序列化流与反序列化流打印流commons-IO Properties类Properties类介绍Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。特点:1、Hashtable的子类,map集合中的方法都...

2019-08-02 16:20:00 92

原创 Java学习IO流第三天

内容介绍 Properties集合序列化流与反序列化流打印流commons-IO Properties类Properties类介绍Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。特点:1、Hashtable的子类,map集合...

2019-08-02 16:20:00 95

原创 String a=new String("abc")创建了几个对象

String str=new String("abc"); 紧接着这段代码之后的往往是这个问题,那就是这行代码究竟创建了几个String对象呢?相信大家对这道题并不陌生,答案也是众所周知的,2个。接下来我们就从这道题展开,一起回顾一下与创建String对象相关的一些JAVA知识。我们可以把上面这行代码分成String str、=、"abc"和new String()四部分来看待...

2019-07-31 08:16:00 2408

原创 Java_转换流和缓冲流

今日内容介绍 转换流 缓冲流 1 转换流在学习字符流(FileReader、FileWriter)的时候,其中说如果需要指定编码和缓冲区大小时,可以在字节流的基础上,构造一个InputStreamReader或者OutputStreamWriter,这又是什么意思呢?OutputStreamWriter类查阅OutputStreamWriter的AP...

2019-07-30 16:50:00 83

原创 Java学习IO流第二天

今日内容介绍 转换流 缓冲流 1 转换流在学习字符流(FileReader、FileWriter)的时候,其中说如果需要指定编码和缓冲区大小时,可以在字节流的基础上,构造一个InputStreamReader或者OutputStreamWriter,这又是什么意思呢?OutputStreamWriter类查阅OutputStreamWrit...

2019-07-30 16:50:00 55

原创 Java_IO流

今日内容介绍 字节流 字符流 1 字节流在前面的学习过程中,我们一直都是在操作文件或者文件夹,并没有给文件中写任何数据。现在我们就要开始给文件中写数据,或者读取文件中的数据。1.1 字节输出流OutputStreamOutputStream此抽象类,是表示输出字节流的所有类的超类。操作的数据都是字节,定义了输出字节流的基本共性功能方法。输出流中定...

2019-07-29 17:53:00 77

原创 java中switch的用法

switch关键字对于多数java学习者来说并不陌生,由于笔试和面试经常会问到它的用法,这里做了一个简单的总结:能用于switch判断的类型有:byte、short、int、char(JDK1.6),还有枚举类型,但是在JDK1.7后添加了对String类型的判断case语句中少写了break,编译不会报错,但是会一直执行之后所有case条件下的语句而不再判断,直到default语句...

2019-07-29 16:27:00 206

原创 Java_IO

今日内容介绍 File 递归 File IO概述回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下次再想使用这些数据,可是已经没有了。那怎么办呢?能不能把运算完的数据都保存下来,下次程序启动的时候,再把这些数据读出来继续使用呢?其实要把数据持久化存储,就需要把内存中的数据存储到内存以外的其他持久化设备(硬盘、光盘、U盘等)上。...

2019-07-28 14:14:00 63

原创 Java学习IO流第一天

内容介绍 File 递归 File IO概述回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下次再想使用这些数据,可是已经没有了。那怎么办呢?能不能把运算完的数据都保存下来,下次程序启动的时候,再把这些数据读出来继续使用呢?其实要把数据持久化存储,就需要把内存中的数据存储到内存以外的其他持久化设备(硬盘、光盘、U盘等...

2019-07-28 14:14:00 37

空空如也

空空如也

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

TA关注的人

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