1 whuhewei

尚未进行身份认证

我要认证

拥抱变化

等级
TA的排名 10w+

设计模式——JavaScript实现单例模式

单例模式的定义保证一个类仅有一个实例,并提供一个访问它的全局访问点。实现的方法为先判断实例存在与否,如果存在则直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象。适用场景一个单一对象。比如:弹窗,无论点击多少次,弹窗只应该被创建一次。js代码class CreateUser { constructor(name) { this.name = name; this.getName(); } getName() {

2020-08-12 11:02:26

刷题——二叉树的镜像(翻转二叉树)

题目描述请完成一个函数,输入一个二叉树,该函数输出它的镜像。例如输入:镜像输出:js代码/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } *//** * @param {TreeNode} root * @return {TreeNode} */var mirro

2020-08-03 08:36:48

刷题——Leetcode98 验证二叉搜索树

题目描述给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。分析可以用二叉树的中序遍历解这道题,由于中序遍历顺序刚好是左-根-右,因此只要中序遍历的结果是升序的,就是二叉搜索树,否则不是二叉搜索树。js代码/** * Definition for a binary tree node. * function TreeNode(val) {

2020-07-25 11:56:26

刷题——LeetCode94 二叉树的中序遍历

题目描述给定一个二叉树,返回它的中序遍历。思路分析中序遍历即以左-根-右的顺序访问节点。经典的方法是使用递归,直截了当。我们可以定义一个辅助函数来实现递归。js代码/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } *//** * @param {TreeNode} root

2020-07-23 14:30:43

刷题——元素计数

题目描述给定一个整数数组arr,计数元素x,使x + 1也在arr。如果在arr中有重复的,分开计数。例1:Input: arr = [1, 2, 3]Output: 2例2:Input: [1, 1, 3, 3, 5, 5, 7, 7]Output: 0例3:Input: [1, 3, 2, 3, 5, 0]Output: 3例4:Input: arr = [1, 1, 2, 2]Output: 2思路分析首先使用字典将数组中的值及其出现的次数按照键值对的形式存储起来,

2020-07-04 08:58:53

刷题——字母异位词分组

题目描述给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入:[“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]输出:[[“eat”, “tea”, “ate”],[“tan”, “nat”],[“bat”]]说明:所有输入均为小写字母。不考虑答案输出的顺序。思路分析此题主要考察对字典操作的应用。ES6中引入了MAP数据解构,我们用它来解这道题目。算法流程:确定单词所包含字母组合——搜索是否已在字

2020-06-27 10:51:52

刷题——买卖股票的最佳时机

题目描述给定一个数组,它的第i个元素是一支给定股票第i天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多比交易(你必须在再次购买前出售掉之前的股票)。Example:输入:[7, 1, 5, 3, 6, 4]输出: 7解释:在第2天(股票价格 = 1)的时候买入,在第3天(股票价格 = 5)的时候卖出,这笔交易所能获得利润 = 5 - 1 = 4。随后,在第4天(股票价格 = 3)的时候买入,在第5天(股票价格 = 6

2020-06-26 11:19:48

刷题——移动零

题目描述给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。Example:Input: [0, 1, 0, 3, 12]Output: [1, 3, 12, 0, 0]要求:不能创建一个新的数组来做操作尽量少的操作次数思路分析我们用js来编写这个函数。要求在原数组上操作,可能我们最先想到的是交换元素位置,但是js的数组提供了很多好用的方法,可以直接拿来用;尽量少的操作次数,要求我们在寻0的时候倒序遍历。简单来说,就是从后往前找0,每当找到一个0

2020-06-25 10:42:24

js使用reduce实现组合函数

题目描述/** * 函数组合运行 * 说明:实现一个方法,可将多个函数方法按从左到右的方式组合运行。 * 如`composeFunctions(fn1,fn2,fn3,fn4)`等价于`fn4(fn3(fn2(fn1))`。 * 示例: * const add = x => x + 1; * const multiply = (x, y) => x * y; * const multiplyAdd = composeFunctions(multiply, add);

2020-06-21 11:31:21

ES5和ES6实现每隔一秒打印一个数字

要求隔一秒打印出一个1,再隔一秒打印出个2,再隔1秒打印出个3…废话不多说,直接上代码:ES6for(let i = 1; i <= 10; i++){ setTimeout(function () { console.log(i); }, 1000 * i);}ES5for(var i = 1; i <= 10; i++){ (function (i) { setTimeout(function () {

2020-06-20 12:30:39

移动App-什么是原生开发和混合开发

原生开发(NativeApp)指的是使用IOS、Android官方提供的工具、开发平台、配套语言进行手机App开发的方式。混合开发(HybirdApp)指的是使用前端已有的技术(HTML+CSS+JS),然后再搭配一些相关的打包编译技术,就能够开发出一个手机App,安装到手机中进行使用。...

2020-05-06 08:30:11

移动App-什么是前端混合移动App

什么是混合移动App开发苹果上的软件是如何开发出来的?使用的是OC或者Swift语言安卓平台上的软件是如何开发出来的?使用安卓相关的语言开发的:Java,安卓的控件苹果和安卓平台上共有的软件是如何开发出来的?企业招两套开发人员(开发组)前端移动App开发技术提供了开发手机端应用程序的体验。通俗的理解,就是把开发Web网站的技术(HTML+CSS+JS),通过某种方式,移植到移动A...

2020-05-05 08:50:04

实现AntDesign组件的按需导入

昨天我们演示了如何为React项目启用AntDesign组件,现在回顾一下,引入方法为:import {DatePicker} from "antd";import "antd/dist/antd.css"虽然我们只用到了DatePicker组件的样式表,但是该方法却全局引入了所有AntDesign组件的样式表。这样做的结果就是将来会打包大量没用的代码。因此我们需要真正地实现按需导入Ant...

2020-05-04 08:05:45

为React项目启用AntDesign组件

AntDesign是蚂蚁金服开发的一个UI框架,为开发人员提供了丰富易用的各种组件。下面我们演示在React中使用AntDesign渲染一个时间选择器组件:首先装包:npm i antd -S按需导入组件:import {DatePicker} from "antd";全局导入css:import "antd/dist/antd.css"使用:像使用一般组件那样使用<DatePick...

2020-05-03 06:23:01

React中匹配路由参数的方式

模糊匹配默认情况下,路由中的规则是模糊匹配的,如果路由可以部分匹配成功,就会展示这个路由对应的组件。看下面的例子:<Link to="/movie/top250/10">电影</Link><Route path="/movie" component={Movie}></Route>虽然Link标签的to属性与Route标签的path不完全相...

2020-05-02 11:26:55

react-router-dom路由的基本使用

在react中启用路由模块,首先要装包:npm i react-router-dom -S,装完之后在根组件中导入:import {HashRouter, Route, Link} from "react-router-dom"。HashRouter:表示一个路由的根容器,将来,所有路由相关的东西,都要包裹在HashRouter里面,而且,一个网站中,只需要使用一次HashRouter就好了。...

2020-05-01 09:37:36

实现js中的new

在实现new方法之前首先我们需要知道在使用new操作符创建对象时发生了什么:创建一个空对象将空对象的隐式原型指向构造函数的显式原型改变构造函数中的this指向并执行构造函数返回这个新对象上面这个过程是针对一般情况的,即构造函数中没有返回值。有时候构造函数中会return一个对象,这个时候我们返回的应该是这个return的对象而不是我们创建的对象。下面给出create()方法的实现:...

2020-04-30 11:30:51

实现js中的instanceof

js中的instanceof操作符用来判断某个对象是否是某个构造函数的实例,使用方法为obj instanceof fun,左侧是一个对象,右侧是一个构造函数,如果该对象是构造函数的实例(含继承),则返回true,否则返回false。下面我们来实现一下instanceof:function instance_of(l, r){ // l代表操作符左侧的对象,r代表操作符右侧的构造函数 wh...

2020-04-29 13:41:53

TCP拥塞控制

TCP的拥塞控制在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏。这种情况就叫做拥塞。若出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降。TCP有四种拥塞控制算法,分别是慢开始、拥塞避免、快重传和快恢复。下面介绍这四种拥塞控制算法的基本原理,假定如下条件:数据是单方向传送,而另一个方向只传送确认。接收方总是有足够大的缓存空间,因而...

2020-04-28 18:26:10

在项目中为scss或less文件启用模块化

在项目当中我们会用到很多第三方样式表,比如bootstrap,可以发现大多数第三方样式表都是.css文件。而之前我们为.css文件启用了模块化,这就导致我们在使用第三方样式表的时候非常不方便。我们希望不为第三方样式表启用模块化,只对自己写的样式表启用模块化。解决思路是:自己写的样式表都要以.scss结尾,只为.scss结尾的样式表启用模块化。安装bootstrap运行npm i bootstr...

2020-04-26 14:25:54

查看更多

勋章 我的勋章
  • 签到达人
    签到达人
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 阅读者勋章Lv3
    阅读者勋章Lv3
    授予在CSDN APP累计阅读博文达到30天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv3
    勤写标兵Lv3
    授予每个自然周发布7篇到8篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。
  • 原力新人
    原力新人
    在《原力计划【第二季】》打卡挑战活动中,成功参与本活动并发布一篇原创文章的博主,即可获得此勋章。
  • 原力探索 · S
    原力探索 · S
    在《原力计划【第二季】》打卡挑战活动中,发布 12 篇原创文章参与活动的博主,即可获得此勋章。(本次活动结束后统一统计发放)
  • 分享学徒
    分享学徒
    成功上传1个资源即可获取