- 博客(104)
- 收藏
- 关注
原创 前端面试官:请使用二分法搜索旋转数组
???? 本文首发于:https://www.shaotianyu.com/,目标是把自己知道的东西讲明白1 基本的二分法是什么样子的二分法的使用场景,其实比较受限,最明显的特点是:绝大情况,查找目标具有单调性质(单调递增、单调递减)有上下边界,并且最好能够通过index下标访问元素1.1 从头开始,基本的二分法使用我们从一个最简单的单调递增数组开始说起,问题如下:在 [1, 2, 3, 4, 5, 6, 7, 8, 9] 中找到 4,若存在则返回下标,不存在返回-1,要求算法复杂度O(
2020-05-27 01:36:09
634
原创 从零开始,使用JS一步步理解并实现链表
文章首发于 www.shaotianyu.com一、数组和链表优缺点1.1、数组(Array)1.1.1 数组的优点线性表的一种。高级数据语言中,对数组内部的元素类型没有严格的要求,这在语言中称为泛型,可以放入任何单元类型。数组的底层的硬件实现,存在一个内存管理器,每当申请一个数组的时候,计算机会在内存中开辟一段连续的地址,每一个地址可以通过内存管理器进行访问,数组访问第一个元素和其...
2020-03-29 21:56:47
818
原创 lodash源码浅析之如何实现深拷贝_.cloneDeep
????本文首发于: lodash-source-learning/一、概要工具库 lodash 在开发过程中为我们封装了丰富便捷的js函数,实现一些常用的功能,在使用过程中就会对lodash的内部实现原理感到好奇。本次文章的主要内容分析阅读了lodash中深拷贝 _.cloneDeep()的实现。二、深拷贝和浅拷贝之间的区别浅拷贝:对于引用类型的数据来说,赋值运算只是更改了引用的指针...
2020-03-21 20:05:07
5686
2
原创 typescript中namespace的tsc编译记录
初始文件目录|-src |-space |-index.ts |-name.ts |-age.tssrc/space/index.ts:/// <Reference path="./name.ts" />/// <Reference path="./age.ts" />console.log(InfoSp...
2019-10-28 16:17:57
508
原创 flex布局介绍(来自小程序文档,供个人记录阅读)
请移步小程序文档,个人觉得介绍地很详细:https://developers.weixin.qq.com/ebook?action=get_post_info&docid=00080e799303986b0086e605f5680a附个人改进:align-items 属性:设置项目在行中的对齐方式。.container{ align-items:stretch(默认值) | ...
2019-01-28 18:22:13
386
原创 Studio 3T for MongoDB 破解教程
转载自:https://blog.csdn.net/justweb/article/details/836196851 创建文件studio3t.bat@echo offECHO 重置Studio 3T的使用日期...FOR /f "tokens=1,2,* " %%i IN ('reg query "HKEY_CURRENT_USER\Software\JavaSoft\Prefs\3...
2019-01-23 19:44:27
4694
2
原创 centos下实现pm2自动化部署
一、先在服务器上实现远程git的免密登陆权限1.生成一组SSH密钥ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' -C "qqq@qq.com"qqq@qq.com是自己的绑定邮箱2.将新生产的私钥生效ssh-agent bash && ssh-add ~/.ssh/id_rsaexit3.将下面命令输出的公钥复制cat ~/...
2019-01-07 21:32:35
1798
原创 从零搭建一个基于React+Nextjs的SSR网站(四):如何搭建服务器并部署Nextjs项目
当然你可以使用免费空间之类的,免费空间本人不太熟悉,这里不做介绍。这里我是自己买的服务器,腾讯云Centos6.8版本的。为什么腾讯云?便宜呗。我是当初拼团买的。其实之前有写过一些博客分享自己的服务器搭建。这里为了方便查看,把之前的文章拷贝过来了。...
2019-01-07 21:24:56
6094
原创 从零搭建一个基于React+Nextjs的SSR网站(三):在Next项目中使用markdown
github很多开源markdown工具,比如react-markdown,marked等等。可以选择一个自己喜欢的,我这里用的marked。代码中使用也比较方便:import marked from 'marked';import hljs from 'highlight.js'; //代码高亮...hljs.configure({ tabReplace: ' ', cl...
2019-01-07 21:09:46
2460
原创 从零搭建一个基于React+Nextjs的SSR网站(二):在Nextjs项目中增加react+redux
具体搭建流程可以参考这篇文章,写得很好也非常详细:用Next.js快速上手React服务器渲染,我就不转载过来了。看完后你会搭建一个自己的本地的静态站点,这个时候我们就可以向这个项目上面添加React和Redux了。与往常的react+redux项目不同的是,以往的react的组件是用Provider容器包裹起来的,可以让容器组件拿到state,比如下面这样...import { Pro...
2019-01-07 20:36:32
3522
原创 mongodb密码特殊字符的解决方法
一般是这么连接的:mongoose.connect("mongodb://username:password@127.X.X.X:27017/db");但是,如果你的密码里面设置了特殊字符,比如‘@’,‘%’,可能使得 mongodb 连接不能被正常解析,字符转义也没什么效果,从而导致连接失败。有2个方法可以规避这个问题:1.更换连接格式mongoose.connect( "mongo...
2019-01-06 16:18:05
12919
1
原创 pm2 --watch下上传文件踩坑
pm2部署在centos上,原本使用的是pm2 start ecosystem.config.js --only prod-server --watch会报错如下,Db.prototype.authenticate method will no longer be available in the next major release 3.x as MongoDB 3.6 will only...
2019-01-02 23:43:48
2749
原创 react中Component和PureComponent比较
import React, { PureComponent } from 'react';class App extends PureComponent {}import React, { Component } from 'react';class App extends Component {}PureCompoent是一个更具性能的Component的版本除了为你提供了一个具有...
2018-12-31 14:12:55
1720
原创 mongoose的findByIdAndUpdate返回更新后数据
A.findByIdAndUpdate(id, update, options, callback) // executesA.findByIdAndUpdate(id, update, options) // returns QueryA.findByIdAndUpdate(id, update, callback) // executesA.findByIdAndUpdate(id, ...
2018-12-27 23:29:42
12414
原创 linux下mongodb设置用户权限
为了保证线上mongodb数据库的安全性以及防止劫持,我们需要给数据库设置权限验证1.创建数据库权限用户进入mongodb的安装目录的bin下,从这里进入MongoDB shell这个是个人的安装路径,仅供参考cd /opt/modules/mongodb/bin./mongomongodb的用户分两种,一种是管理员,一种是普通用户。管理员管理普通用户、普通用户管理数据库数据....
2018-12-20 15:56:02
4040
原创 Centos下安装Mongodb
1.下载安装包远程安装mongodb压缩包wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.4.9.tgz 2.解压缩安装包在/opt下创建modules文件夹mkdir modules然后解压到这里:cd ~tar -xzvf mongodb-linux-x86_64-3.4.9.tgz -C /opt/...
2018-12-20 15:51:42
342
原创 Centos6.8使用nginx配置代理
1.安装nginxyum install nginx2.配置cd /etc/nginx/conf.dvi sty-8081.conf 输入upstream sty{ server 127.0.0.1:8081 } server { #侦听的80端口 listen 80; se...
2018-12-20 15:40:12
819
原创 Centos6.8安装node生产环境
1.安装一些需要用的工具yum install vim openssl build-essential libssl-dev wget curl git2.使用nvm管理node:网址非命令:(github:https://github.com/creationix/nvm)wget -qO- https://raw.githubusercontent.com/creationix/nv...
2018-12-20 15:21:55
989
3
原创 express使用 multer 做文件上传
Multer是Express官方推出的,用于Node.jsmultipart/form-data请求数据处理的中间件。它基于busboy构建,可以高效的处理文件上传,但并不处理multipart/form-data之外的用户请求前端upload代码:async uploadMethod(param) { let formdata = new FormData(); formdata.a...
2018-12-14 00:00:08
3297
原创 next.js中的window is not defined
1.问题描述使用了next+express做SSR,引入了富文本编辑器braft-editor(我也不知道自己为什么要用SSR渲染后台界面),代码如下import React from 'react'import BraftEditor from 'braft-editor'import 'braft-editor/dist/index.css'export default class...
2018-12-11 23:40:25
25459
4
原创 js判断2个值是否相等的规则
假设需要判断的是 x==y?1. 如果 x 不是正常值(比如抛出一个错误),中断执行。2. 如果 y 不是正常值,中断执行。3. 如果 Type(x) 与 Type(y) 相同,执行严格相等运算 x === y 。4. 如果 x 是 null , y 是 undefined ,返回 true 。5. 如果 x 是 undefined , y 是 null ,返回 true 。6. 如果...
2018-11-27 14:10:22
3053
原创 require和import区别
区别1:模块加载的时间require:运行时加载import:编译时加载(效率更高)区别2:模块的本质require:模块就是对象,输入时必须查找对象属性import:ES6 模块不是对象,而是通过 export 命令显式指定输出的代码,再通过 import 命令输入(这也导致了没法引用 ES6 模块本身,因为它不是对象)// CommonJS模块let { exists, read...
2018-11-16 19:28:13
31706
2
原创 ES6中Class的一些个人记录
1.Class的内部所有定义的方法,都是不可枚举的。const funName = 'fun';//类Demo class Demo{ constructor(arg) { } say(){ } speak(){ } [funName](){ }}console.log( Object.keys(Demo.prototype) ) //[...
2018-10-25 22:17:24
272
1
原创 Promise的事件循环
1.Promise 新建后立即执行let promise = new Promise(function(resolve, reject) { console.log('Promise'); resolve();});promise.then(function() { console.log('resolved');});console.log('我是同步任务');打印结果依...
2018-09-26 19:52:43
1959
原创 Proxy 实现观察者模式
以下参考阮老师的《ECMAScript 6 入门》需求:给定一个对象,当对象的属性发生赋值时,打印最新的值。思路: observable 函数返回一个原始对象的 Proxy 代理,拦截赋值操作,触发充当观察者的各个函数。//初始化观察者队列const uniqueObserveList = new Set();//将监听回调加入队列const observe = fn =&gt;...
2018-09-20 21:29:31
851
原创 js中的super
1.this和super的区别:this关键词指向函数所在的当前对象super指向的是当前对象的原型对象2.super的简单应用const person = { name:'jack'}const man = { sayName(){ return super.name; }}Object.setPrototypeOf( m...
2018-09-12 22:27:30
17705
2
原创 Object.assign()扩展-实现原型链拷贝
Object.assign()的基本语法:将源对象(source)的所有可枚举属性的实例属性复制到目标对象(target)。Object.assign( target, source1, source2, ... )所以,Object.assign()复制的属性是有限制的:只复制源对象的自身实例属性,不复制原型属性(继承属性);只复制可枚举属性(enumerable:true)...
2018-09-12 00:03:09
1383
原创 ES5实现Object.is()
ES5中的==和===存在着问题,==会自动转换数据类型;===情况下NaN不等于NaN,+0等于-0NaN === NaN //false+0 === -0 //trueES6中的Object.is() 判断两个值是否相同。即只要两个值是一样的,它们就应该相等。Object.is(NaN, NaN) //trueObject.is(+0, -0)...
2018-09-11 21:10:36
1093
原创 JS类数组转数组方法汇总
一.什么是类数组拥有length属性,其它属性(索引)为非负整数(对象中的索引会被当做字符串来处理,这里你可以当做是个非负整数串来理解)不具有数组所具有的方法经常遇到的类数组:DOM 操作返回的 NodeList 集合、函数内部的 arguments 对象。。。二.类数组转数组假设类数组对象为arrayLikeObject。1.for遍历声明一个空数组,通过遍历伪数组...
2018-09-06 17:41:36
1154
1
原创 一元操作符“++”,“- -” 之强制转换数值
递增和递减分别有前置型和后置型,这里不作区分。下面的代码全部是后置型递增:var str = "z";console.log(str++) //NaNconsole.log(typeof str) //numbervar str = "123abc";console.log(str++) //NaNconsole.log(typeof str) ...
2018-09-03 23:08:20
465
原创 undefined == null的正确解释
console.log( undefined == null ) //true有文章对此进行了解释,大致是下面的意思:undefined的布尔值是false,null的布尔值也是false,所以它们在比较时都转化为了false,所以 undefined == null 。好吧,上面的解释是错误的。可以从Javascript规范中找到答案:规范中提到, 要比较相等性之前,不能将...
2018-08-31 09:38:37
35433
3
原创 ES6参数默认值的单独作用域
1.单独的作用域var val = 1const fun = (val, y=()=&gt;val=2 ) =&gt; { var val = 3 y() console.log(val) //预期是2,结果是3}fun();console.log(val) //1上面代码中,首先看内部val的打印结果:3。原因是一旦设置了参...
2018-08-30 21:59:20
463
转载 字符串的扩展includes(), startsWith(), endsWith()
以下内容全部来源于自阮老师的《ECMAScript 6 入门》,http://es6.ruanyifeng.com/#docs/string#includes-startsWith-endsWith。仅供个人记录学习。传统上,JavaScript 只有indexOf方法,可以用来确定一个字符串是否包含在另一个字符串中。ES6 又提供了三种新方法。includes():返回布尔值,表示是否找...
2018-08-27 23:16:17
921
原创 JS中的函数绑定以及实现函数柯里化
假设页面有个按钮btn,实现点击打印message信息和事件类型(暂只介绍ES5,ES6中函数绑定运算符::以后会补充)。第一步:var handler = { message:'hello world', handleClick:function(e){ console.log(this.message) console.log(e.typ...
2018-08-09 23:38:23
1034
原创 Web Sockets要点小结
下面是最基本的用法示例:var socket = new WebSocket("ws://www.xxx.com/1.php");//WebSocket对象不支持DOM2级事件侦听,所以只能使用DOM0级定义事件处理//在成功建立连接时触发socket.onopen = function(){ console.log('open')}//在发生错误时触发socket....
2018-08-08 21:07:26
295
原创 JS中的FormData基本使用
FormData为序列化表单以及创建与表单格式相同的数据提供了方法。1,、常用的append键值对:其中,append方法接受一个键值对。var data = new FormData();data.append(&amp;quot;key&amp;quot;,&amp;quot;value&amp;quot;)然后可以把data作为传给服务器的数据。2、序列化表单数据(非GET提交)GET提
2018-08-07 21:01:11
7608
原创 JSON.stringify()、JSON.parse()、toJSON()中过滤器的用法(二)
JSON.parse()语法:JSON.parse(text[, reviver])其中,reviver为可选参数,被称为还原函数,规定了原始值如何被解析改造,在被返回之前。var obj = { "username":"hello world", "age":20, "height":"185cm", "address":"Shang
2018-08-06 23:17:41
544
原创 JSON.stringify()、JSON.parse()、toJSON()中过滤器的用法(一)
JSON.stringify()语法:JSON.stringify(value[, replacer [, space]])除了要序列化的javascript对象外,还可以接收另外的2个可选参数。其中,replacer是个过滤器,可以是一个数组或者对象; space控制结果中的缩进和空白符,可以是一个数值或者字符串。我们先定义一个的JSON格式数据,下面会用到:var obj...
2018-08-06 21:26:25
5650
原创 原生JS实现表单序列化serialize()
&amp;lt;html&amp;gt; &amp;lt;head&amp;gt; &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt; &amp;lt;/head&amp;gt; &amp;lt;body&amp;gt; &am
2018-07-27 21:24:46
15830
2
原创 Javascript鼠标滚轮事件兼容写法
1.mousewheel事件(兼容opera,chrome,safari,IE)mousewheel事件对应的event对象包含一个wheelDelta属性。用户滚动鼠标滚轮时,wheelDelta的值是正负120的倍数。 值得注意的是,在opera9.5之前的版本,wheelDelta的正负号是颠倒的,这里不做考虑一般情况下,监听wheelDelta的正负值,就可以确定鼠标滚轮...
2018-07-17 21:08:51
2085
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人