自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

个人前端记录

https://github.com/shaotianyu

  • 博客(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 553

原创 从零开始,使用JS一步步理解并实现链表

文章首发于 www.shaotianyu.com一、数组和链表优缺点1.1、数组(Array)1.1.1 数组的优点线性表的一种。高级数据语言中,对数组内部的元素类型没有严格的要求,这在语言中称为泛型,可以放入任何单元类型。数组的底层的硬件实现,存在一个内存管理器,每当申请一个数组的时候,计算机会在内存中开辟一段连续的地址,每一个地址可以通过内存管理器进行访问,数组访问第一个元素和其...

2020-03-29 21:56:47 720

原创 lodash源码浅析之如何实现深拷贝_.cloneDeep

????本文首发于: lodash-source-learning/一、概要工具库 lodash 在开发过程中为我们封装了丰富便捷的js函数,实现一些常用的功能,在使用过程中就会对lodash的内部实现原理感到好奇。本次文章的主要内容分析阅读了lodash中深拷贝 _.cloneDeep()的实现。二、深拷贝和浅拷贝之间的区别浅拷贝:对于引用类型的数据来说,赋值运算只是更改了引用的指针...

2020-03-21 20:05:07 5263 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 431

原创 flex布局介绍(来自小程序文档,供个人记录阅读)

请移步小程序文档,个人觉得介绍地很详细:https://developers.weixin.qq.com/ebook?action=get_post_info&amp;docid=00080e799303986b0086e605f5680a附个人改进:align-items 属性:设置项目在行中的对齐方式。.container{ align-items:stretch(默认值) | ...

2019-01-28 18:22:13 340

原创 Studio 3T for MongoDB 破解教程

转载自:https://blog.csdn.net/justweb/article/details/836196851 创建文件studio3t.bat@echo offECHO 重置Studio 3T的使用日期...FOR /f &quot;tokens=1,2,* &quot; %%i IN ('reg query &quot;HKEY_CURRENT_USER\Software\JavaSoft\Prefs\3...

2019-01-23 19:44:27 4255 2

原创 centos下实现pm2自动化部署

一、先在服务器上实现远程git的免密登陆权限1.生成一组SSH密钥ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' -C "[email protected]"[email protected]是自己的绑定邮箱2.将新生产的私钥生效ssh-agent bash &amp;&amp; ssh-add ~/.ssh/id_rsaexit3.将下面命令输出的公钥复制cat ~/...

2019-01-07 21:32:35 1746

原创 从零搭建一个基于React+Nextjs的SSR网站(四):如何搭建服务器并部署Nextjs项目

当然你可以使用免费空间之类的,免费空间本人不太熟悉,这里不做介绍。这里我是自己买的服务器,腾讯云Centos6.8版本的。为什么腾讯云?便宜呗。我是当初拼团买的。其实之前有写过一些博客分享自己的服务器搭建。这里为了方便查看,把之前的文章拷贝过来了。...

2019-01-07 21:24:56 5935

原创 从零搭建一个基于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 2337

原创 从零搭建一个基于React+Nextjs的SSR网站(二):在Nextjs项目中增加react+redux

具体搭建流程可以参考这篇文章,写得很好也非常详细:用Next.js快速上手React服务器渲染,我就不转载过来了。看完后你会搭建一个自己的本地的静态站点,这个时候我们就可以向这个项目上面添加React和Redux了。与往常的react+redux项目不同的是,以往的react的组件是用Provider容器包裹起来的,可以让容器组件拿到state,比如下面这样...import { Pro...

2019-01-07 20:36:32 3360

原创 mongodb密码特殊字符的解决方法

一般是这么连接的:mongoose.connect("mongodb://username:[email protected]:27017/db");但是,如果你的密码里面设置了特殊字符,比如‘@’,‘%’,可能使得 mongodb 连接不能被正常解析,字符转义也没什么效果,从而导致连接失败。有2个方法可以规避这个问题:1.更换连接格式mongoose.connect( "mongo...

2019-01-06 16:18:05 12310 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 2652

原创 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 1643

原创 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 12261

原创 linux下mongodb设置用户权限

为了保证线上mongodb数据库的安全性以及防止劫持,我们需要给数据库设置权限验证1.创建数据库权限用户进入mongodb的安装目录的bin下,从这里进入MongoDB shell这个是个人的安装路径,仅供参考cd /opt/modules/mongodb/bin./mongomongodb的用户分两种,一种是管理员,一种是普通用户。管理员管理普通用户、普通用户管理数据库数据....

2018-12-20 15:56:02 3920

原创 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 267

原创 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 750

原创 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 922 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 3231

原创 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 24782 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 2968

原创 require和import区别

区别1:模块加载的时间require:运行时加载import:编译时加载(效率更高)区别2:模块的本质require:模块就是对象,输入时必须查找对象属性import:ES6 模块不是对象,而是通过 export 命令显式指定输出的代码,再通过 import 命令输入(这也导致了没法引用 ES6 模块本身,因为它不是对象)// CommonJS模块let { exists, read...

2018-11-16 19:28:13 31314 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 231 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 1865

原创 Proxy 实现观察者模式

以下参考阮老师的《ECMAScript 6 入门》需求:给定一个对象,当对象的属性发生赋值时,打印最新的值。思路: observable 函数返回一个原始对象的 Proxy 代理,拦截赋值操作,触发充当观察者的各个函数。//初始化观察者队列const uniqueObserveList = new Set();//将监听回调加入队列const observe = fn =&amp;gt;...

2018-09-20 21:29:31 786

原创 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 17472 2

原创 Object.assign()扩展-实现原型链拷贝

Object.assign()的基本语法:将源对象(source)的所有可枚举属性的实例属性复制到目标对象(target)。Object.assign( target, source1, source2, ... )所以,Object.assign()复制的属性是有限制的:只复制源对象的自身实例属性,不复制原型属性(继承属性);只复制可枚举属性(enumerable:true)...

2018-09-12 00:03:09 1275

原创 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 1046

原创 JS类数组转数组方法汇总

一.什么是类数组拥有length属性,其它属性(索引)为非负整数(对象中的索引会被当做字符串来处理,这里你可以当做是个非负整数串来理解)不具有数组所具有的方法经常遇到的类数组:DOM 操作返回的 NodeList 集合、函数内部的 arguments 对象。。。二.类数组转数组假设类数组对象为arrayLikeObject。1.for遍历声明一个空数组,通过遍历伪数组...

2018-09-06 17:41:36 1058 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 376

原创 undefined == null的正确解释

console.log( undefined == null ) //true有文章对此进行了解释,大致是下面的意思:undefined的布尔值是false,null的布尔值也是false,所以它们在比较时都转化为了false,所以 undefined == null 。好吧,上面的解释是错误的。可以从Javascript规范中找到答案:规范中提到, 要比较相等性之前,不能将...

2018-08-31 09:38:37 34935 3

原创 ES6参数默认值的单独作用域

1.单独的作用域var val = 1const fun = (val, y=()=&amp;gt;val=2 ) =&amp;gt; { var val = 3 y() console.log(val) //预期是2,结果是3}fun();console.log(val) //1上面代码中,首先看内部val的打印结果:3。原因是一旦设置了参...

2018-08-30 21:59:20 416

转载 字符串的扩展includes(), startsWith(), endsWith()

以下内容全部来源于自阮老师的《ECMAScript 6 入门》,http://es6.ruanyifeng.com/#docs/string#includes-startsWith-endsWith。仅供个人记录学习。传统上,JavaScript 只有indexOf方法,可以用来确定一个字符串是否包含在另一个字符串中。ES6 又提供了三种新方法。includes():返回布尔值,表示是否找...

2018-08-27 23:16:17 852

原创 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 963

原创 Web Sockets要点小结

下面是最基本的用法示例:var socket = new WebSocket(&quot;ws://www.xxx.com/1.php&quot;);//WebSocket对象不支持DOM2级事件侦听,所以只能使用DOM0级定义事件处理//在成功建立连接时触发socket.onopen = function(){ console.log('open')}//在发生错误时触发socket....

2018-08-08 21:07:26 202

原创 JS中的FormData基本使用

FormData为序列化表单以及创建与表单格式相同的数据提供了方法。1,、常用的append键值对:其中,append方法接受一个键值对。var data = new FormData();data.append(&amp;amp;quot;key&amp;amp;quot;,&amp;amp;quot;value&amp;amp;quot;)然后可以把data作为传给服务器的数据。2、序列化表单数据(非GET提交)GET提

2018-08-07 21:01:11 7518

原创 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 469

原创 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 5521

原创 原生JS实现表单序列化serialize()

&amp;amp;lt;html&amp;amp;gt; &amp;amp;lt;head&amp;amp;gt; &amp;amp;lt;title&amp;amp;gt;&amp;amp;lt;/title&amp;amp;gt; &amp;amp;lt;/head&amp;amp;gt; &amp;amp;lt;body&amp;amp;gt; &am

2018-07-27 21:24:46 15660 2

原创 Javascript鼠标滚轮事件兼容写法

1.mousewheel事件(兼容opera,chrome,safari,IE)mousewheel事件对应的event对象包含一个wheelDelta属性。用户滚动鼠标滚轮时,wheelDelta的值是正负120的倍数。 值得注意的是,在opera9.5之前的版本,wheelDelta的正负号是颠倒的,这里不做考虑一般情况下,监听wheelDelta的正负值,就可以确定鼠标滚轮...

2018-07-17 21:08:51 2015 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除