二叉搜索树的第K大节点是一个很好的题目,我原本想的是直接对二叉搜索树进行遍历而解。...
首先,最长递增子序列,中的序列二字如何理解,序列值得是可以不连续的
首先,最长递增子序列,中的序列二字如何理解,序列值得是可以不连续的,也就是
为什么需要TypeScript?TypeScript主要是用于静态类型的检查。使用JS的时候,我们必须要知function test2(person: string,date: Date) {
为什么要了解扫码登录的原理?通过扫面二维码进行登录已经成为了一种常见的登录方式,这种方式可以在不输入用户名和密码的情况下快速的实现登录,其背后涉及到PC端、移动端和服务端三者之间的交互,无论是对前端开发者还是后端开发者而言,掌握了扫码登录的原理都可以很好的帮助我们设计一套登录机制为我们自己的应用服务。
为什么需要模块化?假如没有模块化,在前端开发时可能存在下面的问题:变量和方法不容易维护,容易污染到全局作用域。通过script标签进行大量引入资源,代码可读性和可维护性都比较差。代码一多就比较复杂。多人合作的场景下,资源的引入会带来比较大的困难。JS模块化的演变史1. CommonJS我们熟知的Node.js在模块化方面就是遵守的CommonJS规范。CommonJS模块化具有下面几个特点:模块内的代码运行在模拟作用域中,不会污染到全局作用域中。模块可以多次引入,但只会在第
手写常用的数组方法是面试中的常考题目,同时学会这些API的原理也能更好的帮助我们去理解这些API并加运用,下面让我们来一起手写reduce吧~原生reduce接收几个参数?原生的reduce是在Array的原型对象上的一个方法,其接收两个参数:一个回调函数。这个回调函数的前两个参数,分别表示累积值和当前值。初始值。实现原生reduce的思路通过slice原型方法获取到调用reduce的数组。定义一个临时结果变量和开始的索引。如果传入了初始值,res就等于这个初始值,没有传入re.
请先看一段代码下面的这段代码输出的是undefined吗?var haha = '666';var haha;console.log(haha);上面的这段代码实际输出的是666,而不是undefined,这是为什么呢?为什么var又可以重复定义呢?var为什么可以重复定义?我们首先介绍下JS代码的运行机制:引擎负责整个代码的编译和执行。编译器负责语法分析、词法分析、代码生成等。作用域负责维护所有的标识符变量。编译器在对代码进行拆解的时候,遇到了var定义的变量会
核心区别:获取的内容不同for…in主要获取对象的key和数组的下标,同时for…in还能够遍历原型链上的可枚举属性。for…of主要获取对象的value值。const obj = {'a' : '111','b':'222'};for (let key in obj) { console.log(key); // a b}// 没有部署原生的iterator接口的对象不能直接遍历for (let value of Object.keys(obj)) { consol
keep-alive的使用场景及其特点用于Vue性能优化。缓存组件。频繁切换,不需要重复渲染。keep-alive有include和exclude属性,这两个属性决定了哪些组件可以进入缓存。keep-alive还有一个max属性,通过它可以设置最大缓存数,当缓存的实例超过max的时候,vue会删除最久没有使用的缓存,属于LRU缓存策略。keep-alive其内部所有嵌套的组件都具有两个生命周期钩子函数,分别是activated和deactivated,它们分别在组件激活和失活的时候触发。
一、$nextTick有什么用?Vue是异步渲染的框架。data改变之后,DOM不会立刻渲染。$nextTick会在DOM渲染之后被触发,以获取最新
如何动态加载组件?引入可能被使用的组件import slotDemo from './components/slotDemo'import HelloWorld from './components/HelloWorld'通
一、methodsmethods中存放的是事件的回调函数,具有以下几个特点:可以通过Vue实例访问方法,在方法中最好不要使用箭头函数,因为涉
什么是函数柯里化?函数柯里化主要用于给函数分步传递参数,每次传递参数进行处理,并返回一个更具体的函数来接受剩下的参数,这中间可以嵌套多层,直至返回最后的结果。实现思路接收一个处理数据的函数。定义一个数组用于接收所有的参数。返回一个函数,如果返回的函数接收的参数的长度是0,则返回fn执行的结果,如果不是0,则将参数push进数组中,并返回函数。代码实现// 手写函数柯里化const curring = function(fn) { const args = []; re
前言vue的组件通信无论是在工作中还是在面试中都是经常考到的知识,这一次让我们一起来系统的梳理下Vue的组件通信都有哪些方式吧~一、父组件向子组件进行传值核心:通过props就行传递。在父组件中引入子组件。通过在子组件的标签上进行传递。子组件中通过声明props进行接收。二、子组件向父组件传值核心:通过this.$emit('父组件中的函数名',传递参数)父组件给子组件绑定函数。子组件通过this.$emit出发父组件给子组件绑定的函数。三、子组件通过$parent来获取父
方式一:通过Set// 借助Set实现数组去重c
原生map方法的特点map不会对原数组产生影响。map返回的是一个新数组。一个数组一旦调用map方法,每一个元素都会执行map中的回调函数。map方法会跳过被delete删除或者未定义的元素。原生map接收的两个参数都有什么用?第一个参数:callbackmap接收的第一个参数是一个回
什么是进程?进程是系统进行资源调度和分配的基本单位,每个进程都有自己独立的一块内存空间,在Windows系统中,一个运行的exe程序就是一个进程。什么是线程?线程是进程的子任务,是CPU调度和分配的基本单位,用于保证程序的实
题目描述题目解读题目让我们去查找二叉搜索树的第K大的节点,我们首先要搞懂下面几个问题:RQ:二叉搜索树和普通二叉树的区别在哪里?二叉搜索树的特点是左子节点都比根节点小,右子节点都比根节点大。解题思路根据搜索二叉树的特点,我们可以进行一次逆中序遍历,中序遍历我们都知道是左根右的遍
前言HTML5已经被提出多年,关于HTML5到底带来了哪些新特性?和之前的HTML版本有什么区别?这经常是面试官考到的题目,下面让我们来深刻的总结这个问题吧~HTML新特性1:语义化标签通过语义化标签,可以让页面有更加完善的结构,让页面的元素有含义,同时利于被搜索引擎解析,有利于SEO,主要
网址://hatchful.shopify.com/
41. 输出是什么?!!null!!''!!1答:B,本题属于考查让我们判断哪些属于真值,哪些属于假值。三个语句全都采用了两次非,所以我们直接可以看除去!的元素即可,null,’'均属于假值,1则属于真值,所以本题选B。42. setInterval方法的返回值是什么?setInterval(() => console.log('Hi'), 1000)答:A,本题考查我们对循环定时器的熟系程度,循环定时器之所以要返回一个id,是因为在很多时候,我们卸载组件后,同时需要将循环
56. 输出是什么?const set = new Set([1, 1, 2, 3, 4]);console.log(set);答:D、本题考查集合的用法,集合有去重的功能,所以答案是打印出集合形式的1 2 3 4.57. 输出是什么?// counter.jslet counter = 10;export default counter;// index.jsimport myCounter from "./counter";myCounter += 1;consol
46. 输出是什么?let person = { name: "Lydia" };const members = [person];person = null;console.log(members);答:D,很多朋友认为person改为了null,members中的person也应该变为null,其实person中存放的是对象的地址,members[0]中存放的也是这个对象的地址,person只是将地址置为了null,并不影响members[0]中存放的地址,所以本题选D。47. 输
76. 输出是什么?const { name: myName } = { name: "Lydia" };console.log(name);答:D,题目中的解构方式相当于将字符串的值赋给了myName,而不是name,所以下文调用name,相当于调用一个没有声明的变量。77. 下面的函数是纯函数吗?function sum(a, b) { return a + b;}答:A,因为同样的输入是同样的输出,且不受输入值以外的其他信息影响。78. 输出是什么?const
题目描述解题思路暴力法首先遍历每一个链表元素,然后将其值存入到一个数组中。将第一步获得的数组进行排序。遍历第二步的数组,分别生成节点,然后存入一个临时数组。以第三步获得的临时数组为基础,依次修改指针的指向,最后返回头指针即可。解题代码var mergeKLists = function(lists) { // 暴力法 if (lists.length === 0) return null const res = []; for (let v of l
这篇文章解决了我很久的困惑,也希望能够解决看到的小伙伴的困惑,谢谢。Promise的三种状态到底是什么?pendingfulfilledrejected下面我们先看下三种状态的产生1.pending状态的Promiseconst promise1 = new Promise((resolve,reject) => { })console.log(promise1);2. fulfilled状态的Promiseconst promise1 = new Promise(.
126. 输出什么?function getFine(speed, amount) { const formattedSpeed = new Intl.NumberFormat({ 'en-US', { style: 'unit', unit: 'mile-per-hour' } }).format(speed) const formattedAmount = new Intl.NumberFormat({ 'en-US', { style: 'currenc
136. 以下哪一项会对对象person有副作用?const person = { name: "Lydia Hallie" };Object.seal(person);答:A,首先我们要明白Object.seal的作用,是防止添加新属性或者对原有属性进行删除,B属于添加新属性,C属于删除原有属性,D属于将所有可枚举对象的属性的值从源对象分配到目标对象,并返回目标对象,所以属于添加,所以只有A项对person对象产生了副作用。137. 以下哪一项会对对象person产生副作用?const
React中将元素转换为列表类似map的方法const numbers = [1, 2, 3, 4, 5];const doubled = numbers.map((number) => number * 2);console.log(doubled);渲染多个组件将数组中的每个元素变为li标签const numbers = [1, 2, 3, 4, 5];const listItems = numbers.map((number) => <li>{number
Copyright © 2005-2023 51CTO.COM 版权所有 京ICP证060544号