- 博客(69)
- 收藏
- 关注
翻译 Scala之旅(TOUR OF SCALA)——目录(CONTENTS)
Scala之旅(TOUR OF SCALA)——基础(BASICS)Scala之旅(TOUR OF SCALA)——统一类型(UNIFIED TYPES)Scala之旅(TOUR OF SCALA)——类(CLASSES)Scala之旅(TOUR OF SCALA)——特征(TRAITS)Scala之旅(TOUR OF SCALA)——通过混合组成类(CLASS COMPOSITION ...
2018-05-13 10:48:30 685
原创 对闭包的理解
MDN:闭包就是函数与它目前所在的词法环境一起的统称。主要应用在使用访问函数内部变量时,返回包含访问函数内部变量的子函数。这样子函数与它的词法环境就构造成了闭包。闭包的优点:可以隔离外部的直接访问。只能通过返回的函数访问或者修改内部变量。让函数与数据(环境)关联起来。类似于class的功能。参考资料:MDN闭包:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/FunctionszMDN函数:https://de.
2022-04-24 16:37:13 232
原创 UDP与IP分片
一、UDP1. UDP特点[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lUf1OSBA-1642486941260)(r5ub5agkh.hb-bkt.clouddn.com/pic/1.jpg)]它不提供差错纠正、队列管理、重复消除、流量控制和拥塞控制。它提供差错检测,包含我们在传输层中碰到的第一个真实的端到端(end-to-end)校验和。我们可能考虑到这种可靠性和保护性的缺失,而会一般认为使用UDP一点好处也没有。但是,这是不对的。因为它的无连接特征,它要比其
2022-01-18 14:22:26 5011
原创 《你不知道的JavaScript(上卷)》第一部分:作用域与闭包的读书笔记
《你不知道的JavaScript(上卷)》第一部分:作用域与闭包的读书笔记作用域和闭包1、介绍了作用域,主要说明了RHS和LHS这两个概念。RHS是读取值,LHS是赋值。2、词法作用域:有两个机制可以动态改变词法作用域:eval和with。eval可以运行字符串代码,动态修改已经存在的词法作用域。with可以在属性不存在的时候,将此属性泄漏到全局作用域3、介绍了词法作用域里面的函数作用域和块作用域。函数作用域本质上是隐藏函数内部的变量和函数,符合最小暴露原则。块作用域必须要使用let关键字才能生
2021-11-04 16:36:02 401
原创 LeetCode-1962 从优先队列想到堆排序
(二叉)堆的定义与性质什么是(二叉)堆?《算法导论》上说可以看成一个近似的完全二叉树,除了最底层,树应该是完全充满的。而且这棵树还必须满足堆的性质。根据堆不同的形式,堆的性质也不同。最大堆的性质是:在任一子树中,该子树包含的所有结点的值都不大于该子树的根结点,也就是说堆中最大元素保存在堆的根结点上。最小堆性质则相反。具体有堆性质的二叉树才能叫堆。也就是说堆其实是一类特别的二叉树。那为什么堆是这样拥有的性质呢?我感觉很形象,想像有一堆东西,里面的东西有大有小,你要把它们放在一个平地上,在你放的过程中,大的
2021-08-23 16:49:20 164
原创 学习webpack的基本配置和splitChunks配置
学习webpack的基本配置和splitChunks配置与模块的同步异步导入文章目录学习webpack的基本配置和splitChunks配置与模块的同步异步导入entry 入口配置output 出口配置处理vue文件处理CSS文件配置文件压缩公共库代码分离参数chunksentry 入口配置entry表示入口,一般是一个字符串,表示入口文件的路径。如果是多入口就需要将entry变成一个对象,属性名就是每个入口的名字,值是每个入口的路径。// 单入口entry: './src/main.js'//
2021-06-30 14:29:49 930
原创 JavaScript里面的Map与Object和WeakMap区别
Map与ObjectObject 结构提供了“字符串—值”的对应,Map 结构提供了“值—值”的对应。键的类型不仅仅可以是字符串,也可以是对象,甚至是null,undefined。而在Object对象这样的键转会被转成字符串WeakMap和WeakSet键名与Map和Set相比,只能是对象。而且对键的引用是弱引用,不会干扰内存的回收。...
2021-06-16 16:30:48 210
原创 事件循环:Promise与宏任务,微任务
宏任务与微任务宏任务:script,setTimeout,setInterval,MessageChannel,I/O(文件,网络)相关API,DOM事件监听,setImmediate(Node.js)。微任务:process.nextTick(Node.js)MutationObserver(浏览器),Promise.prototype.then()/catch()/finally()。requestAnimationFrame是宏任务还是微任务?有4种不同的情况:宏任务里面新建宏任务:加入宏任
2021-06-02 17:57:47 809 1
原创 JavaScript里面的模块化4种方式(CommonJS,AMD,CMD,es6Module)
JS的模块化大致有CommonJS,AMD,CMD,es6Module四种。那么它们到底有什么相同和不同之处呢?CommonJSCommonJS:在Node中使用,同步加载模块。在esModule还没有出现时,为Node主要模块化解决方案。导入:const moduleA = require("./modulePath") const { moduleB } = require("./modulePath") 导出:module.exports = moduleA // 默认模块modu
2021-05-25 16:44:20 1364 1
翻译 通过例子解释防抖和节流
这是一篇译文,是一篇我感觉对防抖和节流解释比较好懂的博客。原文在这里防抖和节流是两个相似的技术去控制很多次我们允许一个函数去执行在一定时间内有防抖和节流的函数是特别有用的,当我们把这个函数绑到DOM事件时。为什么?因为我们有了一个控制层在事件和执行函数之间。记住,如果我们不去控制DOM事件的冒泡,它的数量可以非常巨大。例如,让我们看看滚动事件,看下面的例子:当我们使用触摸板,滚轮或者仅仅是拖动滚动条时每秒就能触发30次滚动事件。而且在手机上缓慢的滚动每秒能触发100次滚动事件在我的测试中。你的.
2021-05-25 15:54:05 382
原创 Vue 源码解析(二):依赖更新(Watcher对象,nextTick和更新队列)
第一篇,新建watcher对象时运行的getter函数,会调用data属性的get修饰器从而触发dep.depend()函数,完成了watcher与dep依赖的收集。让watcher和data建立了联系。那么这一次,让我们看一下依赖收集完成之后,是如何完成依赖更新的。让我们从还是在initData() 方法里面的defineReactive()方法再次开始吧!export function defineReactive (obj: Object, key: string, val: any, custo
2021-05-25 14:08:18 881 2
原创 Vue 源码解析(一):依赖收集(Observer,Dep与Watcher对象)
Vue 实例新建流程Vue源码目录结构说明srccompiler 解析模板生成AST和render函数corecomponents 目前只有keep-alive组件global-api 向Vue对象注入全局方法:Vue.use(),Vue.extend()等instance 向Vue实例对象注入方法:this.$emit(),this.$forceUpdate()等observer 实现data与Watch对象的依赖收集与更新util 工具类vdom Vdom有关方法entr
2021-05-25 11:39:33 1468
翻译 深入CORS:历史,工作原理和最好的例子
学习同源策略和CORS(Cross-Origin-Resource-Sharing)(跨域资源共享)的历史的演变,深入理解CORS和不同类型的跨域访问策略以及一些最好的例子。文章目录你的浏览器控制台报错了起点:第一个子资源标签域与跨域跨域请求的危害同源策略进入CORS跨域写预请求跨域读如何使用好CORS一些好例子所有请求都允许Keeping it in the familyNULL域跳过Cookies,如果你能的话附加阅读你的浏览器控制台报错了我确定你在浏览器的控㓡台见过上面的报错或者它们的变体
2021-05-25 09:24:50 348
原创 VSCode快捷键(Windows)
基础编辑Ctrl+X:剪切光标所在行(没有选择内容时)Ctrl+C:复制光标所在行(没有选择内容时)Alt+↑/↓:光标所在行向上/下移动Shift+Alt+↑/↓:光标所在行向上/下复制插入Ctrl+Shift+K:删除光光标所在行Ctrl+Enter:向光标所在行下一行插入新行Ctrl+Shift+Enter:向光标所在行上一行插入新行Ctrl+Shift+\:跳到最近的成对括号上去(各种()[]{}<>括号)(先到尾括号,再到首括号)Ctrl+]/[:光标所在行增加/减少
2021-05-24 16:05:19 785
原创 异步函数发展史:Promise对象,Generator函数,Thunk函数和自动流程管理
异步函数发展史:Promise对象,Generator函数,Thunk函数和自动流程管理文章目录异步函数发展史:Promise对象,Generator函数,Thunk函数和自动流程管理1、回调地狱2、Promise对象3、Promise对象 + Generator函数4、Promise对象 + Generator函数 + 基于Thunk函数的自动化流程管理4.1、Thunk函数4.2、基于Thunk函数的Generator函数自动化流程管理5、Promise对象 + Generator函数 + 基于Pro
2020-11-20 14:49:30 332
原创 git 常用功能
清空工作区需要两个命令:git checkout . 清空已经修改的文件git clean -d 清空新建文件和文件夹清空暂存区命令:git reset . 清空暂存区想从远程拉一个新的分支git pull origin 刷新所有分支git checkout 切换到对应的分支上反做某一次提交git revert -n <commitid> 可以反做某一次提交复制某一些提交git cherry-pick <commitid-a>^…<co
2020-09-01 14:02:38 127
原创 Vue3第一次使用:ref与reactive的区别和注意事项
今天使用Vue3写了一个todo的例子Vue3对我最大的感觉:1、template标签下面可以有多个节点了,终于不用先写一个DIV了2、setup函数可以代替之前的data,methods,computed,watch,Mounted等对象,但是props声明还是在外面。不过我总是忘记在return里面写声明好的变量或者方法,导致报错没有这个变量或者函数。这一点还需要适应。希望以后能有方便的插件出现。const todoList = reactive([])const todoItem = r
2020-08-24 15:30:22 15086
原创 我对技术的态度是什么样的?
我对技术的态度是什么样的?技术解放了我们的双手,让我们花在生存上的时间大大减少,可以使用更多的时间去思考自己真正的热爱。这是技术积极的一面。现在无论你想得到什么样的信息都可以在技术的加持下,比较轻松的找到。信息获取的成本前所未有的低,人们比任何时候都要接近自己的梦想。消极的一面也是有的。我认为是技术与人类的主次关系。现在的人的闲暇时间都被技术生成各种娱乐消息填满了。 人们现在越来越被动的接受,而不是自己主动去思考自己的需要了。也就是说人们现在不思考了。把思考的权力也交给了技术。这是不对的。我认为只有时
2020-08-20 13:48:58 1075
原创 Vue的每一个发行版竟然都是动漫
Vue目前所有发行版v2.6.0 Macross 超时空要塞v2.5.0 Level E Level Ev2.4.0 Kill la Kill 斩服少女v2.3.0 JoJo’s Bizarre Adventure JoJo的奇妙冒险v2.2.0 Initial D 头文字Dv2.1.0 Hunter X Hunter 全职猎人v2.0.0 Ghost in the Shell 攻壳机动队v1.0.0 Evangelion EVAv0.12.0: Dragon Ball 龙珠v0.11.
2020-08-11 16:30:12 631
原创 有关ES6中Symbol数据类型的理解
Symbol是一种基本数据类型,一种在ES6引入的新的数据类型。目的是为了防止属性名的冲突,保证对象中每一个属性名都是独一无二的。let s1 = Symbol('foo');let s2 = Symbol('foo');s1 === s2 // falseSymbol类型可以有一个字符串参数,表示对Symbol实例的描述。所以相同描述的两个Symbol类型实例也是不相等的。如何在对象中使用let s = Symbol();// 第一种写法let a = {};a[mySymb
2020-05-30 10:10:39 887
原创 Webpack mode三种模式配置说明(production,development,none)
我们都知道webpack的配置文件 webpack.config.js 文件中 mode 表示webpack当前的环境以及对不同的环境的配置。虽然官方文档写明了三种不同的模块的配置,但是没有具体说明是什么意思,我就注释一下对应的模块到底进行了什么操作。development(开发模式)下面是从官方上得到的开发模式的全部配置,// webpack.development.config.jsm...
2020-04-06 17:30:25 11262
原创 使用Weex中遇到的坑
这篇文章主要总结这两年来,我使用weex开发前端页面时遇到的问题,weex也使用vue语法,但是只实现了vue的一部分,因为weex是最后是要渲染成原生页面的,所以weex其实就是用前端的语法来开发原生页面。标签部分1、div标签如果没有宽高在手机上就不会显示。2、文本必须写在text标签里面,而且不能嵌套3、input标签如果高度不够,光标就不会显示4、scroller标签使用refr...
2020-04-04 16:25:52 568
原创 LeetCode-21 合并两个有序链表
LeetCode-21 合并两个有序链表题目这次题目很简单,就是将两个有序链表合并成一个有序链表。将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4思路这个题目的思路,一开始,我想到的是在一个链表上...
2020-02-28 13:47:27 189
原创 LeetCode-1 两数之和
LeetCode-1 两数之和今天做了这道题,本来是很简单的一个题,但是能知道自己在思路上与厉害的人的差距。题目给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], targe...
2020-02-27 17:43:51 129 1
翻译 Scala之旅(TOUR OF SCALA)——自类型(SELF-TYPE)
自类型是声明一个特征必须继承另一个特征,甚至没有直接继承它的一种方式。这使得依赖成员在没有导入时就可以使用。自类型就是一种缩小 this 类型或 this 别名的类型。语法看起来像普通函数的语法但是意思完全不同。在特征中使用自类型,定义一个标识符,是另一个类型的特征和一个 => 。(例如: someIdentifier: SomeOtherTrait =>)。trait U...
2018-08-01 20:15:14 284
翻译 Scala之旅(TOUR OF SCALA)——复合类型(COMPOUND TYPES)
有时要表达对象的类型是其它几种类型的子类型。在 Scala 中使用复合类型来表达,它是对象类型的交集。trait Cloneable extends java.lang.Cloneable { override def clone(): Cloneable = { super.clone().asInstanceOf[Cloneable] }}trait R...
2018-08-01 12:50:27 255
翻译 # Scala之旅(TOUR OF SCALA)——抽象类型(ABSTRACT TYPES)
特征和抽象类可以有抽象类型的成员。这意味着实际的类型定义具体的实现。这里有一个例子:trait Buffer { type T val element: T}这里我们定义了一个抽象 type T 。它被用来描述 element 的类型。我们能在抽象类中继承这个特征,添加 T 的类型上限让它更明确。abstract class SeqBuffer extends B...
2018-08-01 11:28:42 179
翻译 Scala之旅(TOUR OF SCALA)——内部类(INNER CLASSES)
在 Scala 中,让类中有其它类作为成员是可能的。与类 Java 的语言内部类作为封闭类的成员相反,,在 Scala 中内部类是被绑定到外部对象上的。假设编译器在编译时想阻止我混合哪些结点属于哪些类。路径依赖类型提供了一个解决方案。为了演示不同, 我们迅速实现一个图的数据类型:class Graph { class Node { var connectedNo...
2018-05-18 10:12:32 245
翻译 Scala之旅(TOUR OF SCALA)——类型下限(LOWER TYPE BOUNDS)
当类型上限限制了一个类型是另一个类型的子类时,类型下限则声明了一个类型是另一个类型的父类。这个表达式 B >: A 表示类型参数 B 或抽象类型 B 是类型 A 的父类。在大部分例子中, A 将成为类的类型参数, B 将成为方法的类型参数。下面是一个有用的例子:trait Node[+B] { def prepend(elem: B): Node[B]}case c...
2018-05-18 10:08:58 314
翻译 Scala之旅(TOUR OF SCALA)——类型上限(UPPER TYPE BOUNDS)
在 Scala 中,类型参数和抽象类型可以使用类型界限限制。一个类型上限 T <: A 声明了类型变量 T 是类型 A 的子类。这里有一个例子演示了一个有类型上限的类型参数的 PetContainer 类:abstract class Animal { def name: String}abstract class Pet extends Animal {}cl...
2018-05-18 10:07:01 329
翻译 Scala之旅(TOUR OF SCALA)——FOR 关键字的理解(FOR COMPREHENSIONS)
Scala 提供了一个轻量级的 for 来表达序列的理解。理解从 for (enumerators) yield e 结构开始,enumerators 指得是一个分号分隔列表的迭代。每次迭代既会产生一个新变量,又是一个过滤器。 e 的理解就是迭代中的每一个序列中的值。 这段不是很理解,所以帖出原文,希望指正 Scala offers a lightweight notation
2018-05-13 10:19:02 299
翻译 Scala之旅(TOUR OF SCALA)——变化 (VARIANCES)
class Foo[+A] // 协变类class Bar[-A] // 逆变类class Baz[A] // 不变类协变类(Covariance)泛型类的类型参数 A 可以使用 +A 注解来协变。
2018-05-12 22:28:11 239
翻译 Scala之旅(TOUR OF SCALA)——泛型类(Generic Classes)
泛型类是一种带了一个类型作为参数的类。他们对集合类是非常有用的。定义一个泛型类(Defining a generic class)泛型类使用中括号 [] 接收类型参数,虽然类型参数可以是任何名字,但是一个惯例是使用字母 A 作为类型参数标识符。class Stack[A] { private var elements: List[A] = Nil def push(
2018-05-12 22:23:21 391
翻译 Scala之旅(TOUR OF SCALA)——解析器对象(EXTRACTOR OBJECTS)
解析器对象一个拥有 unapply 方法的对象。正如 apply 方法像一个构造器一样将参数加工成一个对象,unapply 方法将一个对象解析并返回参数。这经常用于模式匹配和局部函数。import scala.util.Randomobject CustomerID { def apply(name: String) = s"$name--${Random.nextLong}"
2018-05-09 10:07:03 276
翻译 Scala之旅(TOUR OF SCALA)——正则表达式匹配(REGULAR EXPRESSION PATTERNS)
正则表达式是用来寻找在数据中符合某个模式的字符串。任何字符串都可以使用 .r 方法转换成正则表达式。import scala.util.matching.Regexval numberPattern: Regex = "[0-9]".rnumberPattern.findFirstMatchIn("awesomepassword") match { case Some(_) =
2018-05-09 10:05:56 293
原创 Gson框架的使用
主要是有三种不同类型的数据之间需要相互转换。对象(包括普通对象,还有数组,列表,集体,映射等对象)Json对象(有JsonObject和JsonArray,还有一个基类JsonElement)Json字符串(就是一个遵循了JSON标准的字符串)对象与JSON字符串其中最简单的就是对象到JSON字符串,使用 Gson 实例中的 toJson() 方法,可以直接将一个对象转换成JSON字符串。
2018-05-02 17:12:51 736
翻译 Scala之旅(TOUR OF SCALA)——单例对象(SINGLETON OBJECTS)
一个对象是一个只有一个实例的类。当它在被引用时将使用懒加载,就像一个懒加载的常量(只有要使用这个常量时,它才会被加载)。作为一个顶级变量,一个对象就是一个单例。作为一个类或局部变量的成员,它的行为几乎与就像一个懒加载的常量相同。定义一个单例对象 (Defining a singleton object)一个对象就是一个值。定义一个对象就像定义一个类一样。但是使用 object 关键
2018-04-20 14:12:39 342
翻译 Scala之旅(TOUR OF SCALA)——模式匹配(PATTERN MATCHING)
模式匹配是一种检查值是否匹配某种模式的机制。成功的匹配也可以将价值解构成其组成部分(这句翻译有问题)[6]。这是一个比 Java 中的 switch 更强大的版本,也同样被用来代替一系列的 if/else 结构。语法 (Syntax)一个 match 表达式有一个待匹配的值, match 关键字和至少一个 case 表达式组成。import scala.util.Random...
2018-04-11 15:17:07 252
翻译 Scala之旅(TOUR OF SCALA)——条件类(CASE CLASSES)
条件类很像普通的类,就只有一点点我们之前说过的关键性的不同。条件类擅长构造不可变数据。下一步,我们将条件类在 模式匹配 中的大用处。定义条件类(Defining a case class)一个最小条件类需要关键字 case class,一个类名和一个参数列表(可能为空):case class Book(isbn: String)val frankenstein = Book("
2018-04-11 09:18:28 378
原创 整合 Spring 与 Mybatis 框架
所有的配置文件配置 log4j.properties 属性文件配置 db.properties 属性文件配置 mybatis-config.xml 配置文件配置 applicationContext.xml 配置文件一个实例编写实体类编写操作接口类编写 Mapper 文件在 applicationContext.xml 文件中继续进行配置方法一、使用SqlSessio...
2018-04-09 17:25:48 163
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人