- 博客(20)
- 收藏
- 关注
原创 js面试题:实现dom结构转换成对象
面试题将以下dom结构转换成js对象,并输出节点个数,最大深度以及最多子节点数 <html> <head></head> <body> <div> <span>f</span> <span>o</span> <span>o</span> </div> </bod
2020-09-21 13:54:51
1893
原创 js实现常见排序算法
1. 冒泡排序时间复杂度:O(n) = n2空间复杂度:O(n) = 1稳定性:稳定 function sort(arr) { for (let i = 0; i < arr.length; i++) { let flag = false; for (let j = arr.length - 1; j >= i; j--) { if (arr[j] > arr[j - 1]) {
2020-09-18 11:33:26
150
原创 js实现常见动态规划问题
1. 0-1 背包问题给定一个数组 weight 代表物品的重量,w 代表背包的总容量,每个物品只能装一次,求背包最多能装下多少重量的物品。物品的重量是 [2, 2, 4, 6, 3],背包重量是 9,这种情况下最优解是 9 var knapsack = function (weight, w) { let n = weight.length let states = [] // 对第一行进行特殊处理 states.push(new Array(w +
2020-09-15 18:16:09
290
原创 js观察者模式和发布订阅模式
观察者模式(Observer Pattern)观察者模式定义了对象间的一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知,并自动更新。观察者模式属于行为型模式,行为型模式关注的是对象之间的通讯,观察者模式就是观察者和被观察者之间的通讯。观察者模式类似于生活中在报社订阅报纸的现象,在一片区域内,报社是唯一的,而订阅者有很多。订阅者想要看报纸都需要去报社进行订阅,当报社生产出报纸后,会将报纸发布给所有的订阅者。代码实现:let Office = { list: [],
2020-09-13 13:57:29
475
1
原创 js实现二叉树常见算法操作
1. 二叉树的中序遍历leetcode94方法一:递归 var inorderTraversal = function(root) { let result = []; let inorder = function(node){ node.left && inorderTraversal(node.left); result.push(node.val); node.right
2020-08-04 18:02:39
560
原创 js实现链表结构以及常见操作
js实现链表结构以及常见操作一、构建Node类通过Node构造函数new的实例表示一个节点,它包含两个属性:element属性用来保存节点上的数据next属性用来保存所指向的节点的地址 // 定义Node类 function Node(element) { this.element = element; this.next = null; }二、构建List类定义header属性作为一个链表的头节点,并定义insert(),find()等实
2020-07-19 15:07:07
496
原创 时间复杂度分析的总结
时间复杂度分析的总结为什么需要复杂度分析?刚接触复杂度分析时,我们可能会有些疑惑,直接把写的代码跑一遍,就能得到算法执行的时间和占用的内存大小。为什么还要做时间、空间复杂度分析呢?事实上,这种评估算法执行效率的方法是正确的,我们将其称为事后统计法。但是,这种统计方法有非常大的局限性。1. 测试结果非常依赖测试环境测试环境中硬件的不同会对测试结果有很大的影响。比如,同样一段代码,i9 处理器要比 i3 处理器执行的速度快很多。2. 测试结果受数据规模的影响很大对同一个排序算法,待排序数据的有序度
2020-07-15 10:15:42
2107
1
原创 输入URL到页面渲染的整个流程的总结
输入URL地址浏览器进行DNS查询,查找域名对应的IP地址2.1 浏览器在本地hosts文件中查找有没有对应的IP地址2.2 发出一个DNS请求到本地DNS服务器2.3 本地服务器查询缓存中是否存在对应关系,若有则返回,没有则向DNS根服务器查询2.4 DNS根服务器返回域名所在的域名服务器2.5 本地DNS服务器向该域名服务器发出请求,域名服务器返回该域名的解析服务器的地址2.6 本地DNS服务器向域名的解析服务器发出请求,收到该域名和IP地址的对应关系,保存到缓存并返回建立TCP连接,.
2020-06-14 19:04:20
140
原创 Event Loop的总结
JS是单线程的JS中的代码都是串行的, 前面没有执行完毕后面不能执行宏任务和微任务在JS的异步代码中又区分"宏任务(MacroTask)“和"微任务(MicroTask)”宏任务: 宏/大的意思, 可以理解为比较费时比较慢的任务微任务: 微/小的意思, 可以理解为相对没那么费时没那么慢的任务常见的宏任务和微任务MacroTask(宏任务): setTimeout, setInterval, setImmediate(IE独有)…MicroTask(微任务): Promise, M..
2020-06-14 17:25:44
113
原创 openCV实现图像艺术化处理
一.实验目的了解各种图像艺术化处理方法的原理。掌握各种艺术化处理方法的实现过程。二.实验内容和要求编程实现三种以下艺术化处理方法,三类效果中每类至少实现一种。三.实验主要仪器设备和材料计算机, VS2015+openCV四.实验原理与实验步骤1. 艺术化效果黑白照片制作我们通常说的黑白照片并不是数字图像中的二值图,而是灰度图。由彩色图像转化为灰度图像的过程叫做灰度化处理。一般情况下彩色图像每个像素用3个字节表示,每个字节对应着R、G、B分量的亮度(红、绿、蓝),转换后的灰度图像的一
2020-06-14 13:53:33
1294
1
原创 openCV实现图像分割
一.实验目的进一步理解图像的阈值分割方法和边缘检测方法的原理。掌握图像基本全局阈值方法和最大类间方差法(otsu法)的原理并编程实现。编程实现图像的边缘检测。二.实验内容和要求编程实现图像阈值分割(基本全局阈值方法和otsu法)和边缘检测。三.实验主要仪器设备和材料计算机,VS2017+OpenCV四.实验原理与方法图像的阈值分割的基本原理图像的二值化处理图像分割中的一个主要内容,就是将图像上的点的灰度置为0或255,也就是讲整个图像呈现出明显的黑白效果。用I表示原图,R表示二值化后
2020-06-14 13:38:00
3632
原创 openCV实现图像的空间域增强
一.实验目的进一步理解图像平滑和图像锐化等空间域增强方法的原理。了解图像平滑和图像锐化的效果和作用。掌握图像模板运算的流程。二.实验主要仪器设备和材料计算机,VS2017+OpenCV三.实验原理图像平滑众所周知,实际获得的图像在形成、传输、接收和处理的过程中,不可避免地存在着外部和内部的噪声干扰。噪声恶化了图像质量,使图像模糊,给分析带来困难。因此,去除噪声,恢复原始图像时图像处理中的一个重要内容。消除图像噪声的工作称之为图像平滑或滤波。图像平滑方法包括空域法和频域法两大类。在空域法中
2020-06-14 13:30:03
631
原创 js this指向的总结
1.直接调用函数 let obj = { a: function() { console.log(this); } } let func = obj.a; func();这种情况是直接调用,this指向window。2. 对象.方法的形式调用 let obj = { a: function() { console.log(this); } } obj.a();这就是对象.方法的情况,this指向这个对象。3. new绑定 functio
2020-06-14 11:17:37
142
原创 js作用域的总结
ES5作用域:ES5定义变量通过varES5没有块级作用域的概念ES5函数外都是全局作用域ES5函数内都是局部作用域ES6作用域:ES6定义变量通过letES6括号外都是全局作用域ES6函数内都是局部作用域,无论是var还是let定义都是局部变量ES6括号和函数没有结合在一起是块级作用域,通过var定义的变量是一个全局变量,通过let定义的变量是一个局部变量注意点:无论是在块级作用域还是在局部作用域, 省略变量前面的let或者var就会变成一个全局变量作用域链:ES5/E
2020-06-14 09:55:36
105
原创 css垂直居中、水平居中方式的总结
水平居中:margin: 0 auto;(适用于块级元素,且必须设置了宽度)text-align: center;(适用于行内元素、行内-块级元素)position: absoluteleft: 50%;transform: translateX(-50%);(适用于定位元素,且没有设置宽度)display: flex;justify-content: center;(适用flex布局)垂直居中:line-height:父元素高度;(适用于单行行内元素)display: table
2020-06-14 09:42:58
113
原创 js数组问题
数组去重方式一:通过Set实现ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。 function unique(arr) { return Array.from(new Set(arr)); }方法二:通过for嵌套实现 function unique(arr){ for(var i=0; i<arr.length; i++){ for(var j=i+1; j<arr.lengt
2020-06-13 19:21:14
117
原创 js深拷贝和浅拷贝的总结
深拷贝修改新变量的值不会影响原有变量的值默认情况下基本数据类型都是深拷贝浅拷贝修改新变量的值会影响原有的变量的值默认情况下引用类型都是浅拷贝Object.assign()方法 let obj1 = { a: { b: 1 }, c: 2 } let obj2 = new Object(); Object.assign(obj2 ,obj1) obj2.a.b = 3; obj2.c = 3 console.log(obj1.a.b); // 3
2020-06-13 16:13:57
117
原创 js实现继承方式的总结
JS继承的实现方式首先,我们定义一个父类: function Person(myName, myAge) { this.name = myName; this.age = myAge; this.arr = [1,2]; this.say = function () { console.log(this.name, this.age); } } Person.prototype.eat =
2020-06-13 15:36:42
211
原创 js原型和原型链的总结
js原型和原型链的总结一、原型对象三角关系Function函数Object函数总结二、原型链一、原型对象三角关系每个"构造函数"中都有一个默认的属性叫做prototype,保存着一个对象, 这个对象我们称之为"原型对象"每个"原型对象"中都有一个默认的属性叫做constructor,指向当前原型对象对应的那个"构造函数"通过构造函数创建出来的对象我们称之为"实例对象",每个"实例对象"中都有一个默认的属性叫做__proto__,指向创建它的那个构造函数的"原型对象"Function函数
2020-06-12 15:38:01
525
原创 对BFC的总结
什么是BFC?一、BFC的定义二、BFC的布局规则三、怎么创建BFC四、BFC的常见作用五、总结一、BFC的定义BFC(Block Formatting Context)全称为块级格式化上下文。简单来说,BFC是一种属性,并且只会作用于Block-level box(块级元素)。设置了这种属性的元素会成为一个独立的渲染区域,让处于 BFC 内部的元素与外部的元素相互隔离,使内外元素的定位不会相互影响。二、BFC的布局规则属于同一个 BFC 的两个相邻 Box 垂直排列属于同一个 BFC 的两个相
2020-06-12 11:59:34
296
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人