自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 算法系列--哈希表

哈希表哈希表(Hash Table,也叫散列表),是根据键(Key)而直接访问在内存存储位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做哈希函数,存放记录的数组称做哈希表。经典例题遍历数组中每个元素,统计比它小的元素的个数leetcode 1365示例:nums[1,2,3,2,1,4], 每个元素小的数组[0,2,4,5], 所以返回[0,2,4,2,0,5]解题思路第一种思路,是排序后, 然后

2020-12-03 17:12:46 269

原创 算法系列--二分查找

二分查找是一种效率较高的查找方法,前提是数据结构必须先排好序,它的平均时间复杂度是O(logn)。碰到排好序的数组,第一时间应该想到用二分法求解。二分查找的递归与非递归实现在有序数组arr中,查找目标值value的元素下标// 递归function biSearch(arr, start, end, value) { if (start > end) return -1 let mid = Math.floor((start + end) / 2) if (arr[mid].

2020-11-12 16:48:17 183

原创 算法系列--排序

根据时间复杂度分类,常见的排序算法有:O(n^2): 冒泡、插入、选择;O(nlogn): 快排、归并;O(n): 桶、计数、基数;冒泡排序时间复杂度: 平均O(n^2)稳定性: 稳定// 普通版function bubbleSort(arr) { let n = arr.length for (let i = 0; i < n; i++) { for (let j = 0; j < n - i - 1; j++) { if (arr[j] &

2020-11-06 11:52:40 216

原创 算法系列--基础知识

基础定义数据结构与算法区别数据结构:一组数据的存储结构;算法:操作数据的一组方法;时间复杂度表示算法的执行时间与数据规模之间的增长关系;只关注循环执行次数最多的代码,这段代码执行次数 n 的量级;乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积;常见时间复杂度多项式量级:O(1), O(logn), O(n), O(nlogn), O(n^k)非多项式量级:O(2^n)、O(n!)空间复杂度表示算法的存储空间与数据规模之间的增长关系;常见空间复杂度O(1)

2020-10-26 17:44:48 99

原创 算法系列--递归

什么类型的问题适合递归求解一个问题可以分解为几个子问题;子问题与父问题求解方法一样;存在递归终止条件;如何编码递归问题写出递推公式;写出终止条件;翻译成代码;递归代码弊端及解决方法堆栈溢出:通过控制递归深度;重复计算:通过散列表存储计算值;函数调用耗时多:通过控制递归深度;空间复杂度高:转成非递归;经典习题LeetCode 70 爬楼梯:一次可以爬1层或者2层,问爬到n层有多少种方法;分析递推公式:爬到最后一层楼梯只有两种可能,从倒数第二层走一步,或者从倒数第

2020-10-23 18:47:58 121

原创 Hybrid通信原理--Jockey源码解析

1. Hybrid通信原理1.1 什么是Hybrid通信本文讲的Hybrid通信指的是:在Hybrid框架中,H5与Native之间的交互。交互包括两部分:H5访问Native,应用场景有设置导航栏,调用Native组件等;Native访问H5,应用场景有H5分享,执行H5回调等;1.2 H5与Native交互实现原理交互分成两中场景:H5访问NativeH5发送Schem...

2020-03-29 15:13:34 1937

原创 Vue源码解析--Virutal Dom

1.Virtual Dom是什么Virtual Dom, 又叫虚拟dom,本质是一个js对象,是用来描述一个dom节点信息。例如,一个普通的dom节点:<div class="wrap">i am text</div>它的virtual dom 是:const divVdom = { tag: 'div', attrs: { cl...

2020-03-29 00:49:16 220 1

原创 koa2源码解析一

占个坑,接下来要完成这篇文章~一、koa2是什么1.1 定义1.2 为什么要用koa21.3 怎么用koa2二、koa2实现了哪些重要功能2.1 启动http服务2.2 装载中间件2.3 错误异常处理2.4 重写request,response,上下文对象三、koa2源码实现细节3.1 起服务3.2 洋葱流程3.3 实例上挂载上下文对象四、koa2源码相关疑问4.1 ...

2019-02-28 20:54:37 335

原创 Seneca:NodeJS 微服务框架入门(一)

Seneca是什么?(1)官网是这样介绍的:Seneca is a microservices toolkit for Node.js.It helps you write clean, organized code that you can scale and deploy at any time.大概意思是:Seneca是一个库,在Node平台上开发微服务时用的,它能够帮助开发人员...

2019-01-29 16:37:17 13477

原创 如何在Node中充分利用cpu

1. 背景Node.js在官网上是这样定义的: “ 一个搭建在Chrome JavaScript运行时上的平台,用于构建高速、可伸缩的网络程序。Node.js采用的事件驱动、非阻塞I/O模型使它既轻量又高效,是构建运行在分布式设备上的数据密集型实时程序的完美选择。”用Node.js处理I/O密集型任务相当简单,只需要调用它准备好的异步非阻塞函数就行了。然而数据密集型实时(data-intens...

2018-12-28 16:51:59 1041

原创 web 安全入门(一)

一、XSS1.1 定义XSS(Cross Site Scripting),即为跨站脚本攻击,恶意攻击者向web页面中植入恶意js代码,当用户浏览到该页时,植入的代码被执行,达到恶意攻击用户的目的。1.2 危害场景通过document.cookie盗取cookie使用js或css破坏页面正常的结构与样式流量劫持配合csrf攻击完成恶意请求…1.3 分类(1)反射型 XSS反...

2018-11-30 15:34:42 413 3

原创 微服务介绍与consul应用入门

1. 什么是微服务1.1 微服务的由来微服务最早由Martin Fowler与James Lewis于2014年共同提出,微服务架构风格是一种使用一套小服务来开发单个应用的方式途径,每个服务运行在自己的进程中,并使用轻量级机制通信,通常是HTTP API,这些服务基于业务能力构建,并能够通过自动化部署机制来独立部署,这些服务使用不同的编程语言实现,以及不同数据存储技术,并保持最低限度的集中式管...

2018-11-07 16:12:47 1387

原创 如何使用ab做接口压力测试

一、什么是压力测试压力测试是通过不断向被测系统施加“压力”,测试系统在压力情况下的性能表现,考察当前软硬件环境下系统所能承受的最大负荷并帮助找出系统瓶颈所在,也就是我们可以模拟巨大的工作负荷以查看应用程序在峰值使用情况下如何执行操作。压力/负载/性能测试之间的区别压力测试(StressTesting),也称为强度测试,通过模拟实际应用的软硬件环境及用户使用过程的系统负荷,长时间或超大负荷...

2018-10-30 16:34:29 10065

转载 JavaScript 工作原理(一)——内存管理与四种常见内存泄漏的处理方法

转载:JavaScript 工作原理(一)——内存管理与四种常见内存泄漏的处理方法 几周前,我们新开了一系列文章,旨在深入 JavaScript,探寻其工作原理。我们认为通过了解 JavaScript 的构建方式和其运行规则,我们能写出更好的代码和应用。第一篇文章重点介绍了引擎、运行时和调用栈的概述。第二篇文章仔细地分析了 Googl...

2018-10-22 18:43:22 146

原创 Javascript单元测试及接口测试

文章概要什么是单元测试为什么要做单元测试javascript测试框架对比koa2中如何使用ava做单元测试vue中如何使用ava做单元测试koa2中如何使用ava做接口测试单元测试是什么单元测试(unit testing)指的是以软件的单元(unit)为单位,对软件进行测试。单元可以是一个函数,也可以是一个模块或组件。它的基本特征就是,只要输入不变,必定返回同样的输出。单元测...

2018-09-30 16:15:25 4257 1

原创 Node.js 中 mysql 应用 -- 连接池的优势

引言从事 Node 开发 web 服务也有一段时间了, 访问数据库用的是 mysql, 每次执行数据库操作如下:创建一个连接, 执行 sql 语句, 然后关闭连接。 当用户量不大,并发请求数不多的时候, 一切都是正常的运转。 当写一个爬虫功能时候,同时执行2000+入库操作时, 系统报错,提示超时了。 意识到问题的重要性后,努力学习了一番, 在此, 分享并记录数据库连接池相关知识。安装 ...

2018-08-31 18:29:02 2768

原创 Javascript正则表达式--应用篇

在学习了上一篇正则语法篇,是不是迫不及待想知道正则如何在工作中应用呢? 应用1难度:**题目描述判断输入是否是正确的邮箱格式function isAvailableEmail(sEmail) {}给自己5分钟,尝试一下…解题思路: 1. 把一个正常的邮箱格式拆成4部分,分别定义正则难点: 1. 如何拆分邮箱格式答案:functio...

2018-07-31 18:31:02 289

原创 Javascript正则表达式--语法篇

使用正则的过程中可能对Js正则的语法记得不太牢,顺便也整理了一下,列在这里。 正则对象(1)构造函数方式var reg = new RegExp('abc', 'gi');第一个参数是正则的内容,第二个参数是修饰符,修饰符通常有三种,i,g,m,i表示的含义是忽略大小写进行匹配,g表示全局匹配即匹配到第一个之后不停止继续匹配,m表示多行匹配,更改^和$的含义,匹配任意一行...

2018-07-25 18:19:23 191

原创 node开发脚手架工具

引言曾经接触过vue-cli脚手架,发现真的很神奇,能够短短几分钟,构建出一个vue框架的初始项目。今天, 就来揭开脚手架神秘的面纱, 自己也可以编写脚手架,提高工作效率。脚手架使用流程回忆一下vue-cli脚手架, 我们使用的流程:全局安装vue-cli: npm install -g vue-cli初始化项目: vue create my-project根据提示选择:...

2018-06-26 20:13:49 1625

原创 es6 类class入门

什么是类? 类是面向对象程序设计中的概念,是面向对象编程的基础。 - - 百度百科简单介绍下,面向对象编程中几个基本概念:(1)对象一切事物皆为对象,生活中看到的,听到的,闻到的等东西都是对象。准确的说, 对象是一个自包含的实体,用一组可识别的特性和行为来标识。(2)类定义: 类是对现实生活中一类具有共同特征的事物的抽象, 换句话说,类就是具有相同属性和功能的对...

2018-05-31 20:45:05 274 1

原创 Javascript 遍历中异步操作

引言JS遍历中异步操作,指的是JS循环遍历中,每一次循环都有异步操作。 如经典的闭包应用,每次循环, 在异步操作中输出索引。for (var i = 0; i &lt; 3; i++) { setTimeout(() =&gt; { console.log('i', i); }, 10);}// i 3// i 3// i 3结果发现,每次输出的都是3,并不是...

2018-05-03 17:43:01 4158

原创 webpack构建优化实战

背景随着项目的推移, 第三库使用数量增加,业务代码更是成倍增加,不知不觉发现webpack构建速度却越来越慢,从当初的30s,变成5分钟以上。 与此同时,一个同学的项目也遇到了打包慢的问题。 于是下定决心,花两周潜心研究下如何提升webpack构建性能。初步成果两周后,收获满满的。初步战果如下: (1) 自己的项目: vue2(全家桶)+element-ui+axios+echa...

2018-03-30 20:20:52 1001 1

原创 零配置打包工具Parcel 快速入门 -- vue示例

新的打包工具parcel,号称零配置,开箱即用,今天迫不及待入手看看~ 以vue作为示例: demo 目录结构src├── App.vue├── index.js├── router.js└── components├── ├── Home.vue├── └── ....babelrcindex.htmlpackage.jsonreadme.md(1)创...

2018-02-27 22:06:36 660

原创 Angualar 1 自定义指令的使用--消息框

最近,维护一个Angular 1项目,在用过vue中element-ui后, 想自己也写一些类似组件;同时对比下angular的指令,与vue的单文件组件的用法。 今天的主题就是编写一个消息框 messageBox. 如何开始构思组件(1)组件的结构(html)分析消息框组件的结构,首先想到的是,头部(标题+关闭按钮), 主体(提示内容),底部(取消,确认按钮);后来考虑

2018-01-29 20:45:51 483

原创 前端自动化之Grunt

前端技术不断更新, 自动化工具也在迭代, grunt在一些项目中依然会用到。接下来主要分享下用grunt如何使用babel, 能够直接在前端写 es6 语法, 特别是如何能够使用 es6 中模块化语法import, export。如何配置grunt配置grunt特别简单,一个Gruntfile.js 配置文件,安装相应的包。 具体参见grunt官网入门:http://www.gruntjs.net

2017-12-28 14:33:25 383

原创 js检查ie低版本浏览器,并跳转更新页面

引言现在我们用的一些主流前端框架,如vue, angular, react等对低版本的ie浏览器支持不好,一般指的是ie9以下的。如果低版本ie浏览器,打开我们的网站页面时, 我们希望给用户温馨的提示,去升级浏览器,而不是页面混乱,各种报错。 更新页面效果: 更新页面demo怎么做为了实现以上需求,我们分两步来完成。 1. 用 js 检查当前浏览器版本,如果是ie9以下,跳转

2017-11-13 17:48:13 6144

原创 无缝轮播图的实现对比---CSS3版, JS版

概述什么是轮播图: 网页顶部自动切换图片的区域. 什么是无缝轮播图: 切换图片到最后一张时, 继续点击下一张,左滑至第一张,无缝衔接的感觉。 糊涂了没, 直接看效果图: http://www.bobgao.cn/#!/demo/banner2实现思路无缝轮播图, 有几个要点: 1. 待轮播图片依次铺开,轮播区域只显示一张; (css即可完成, 轮播区域overflow: hidden

2017-11-02 18:11:16 1280

原创 aes对称加密 -- node版

概念对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)。 主流的有 AES, DES。 非对称加密为数据的加密与解密提供了一个非常安全的方法,它使用了一对密钥,公钥(public key)和私钥(private key)。私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。主流的有RSA,DSA。

2017-10-23 18:34:49 1227

原创 跨域通信--JSONP和CORS的node版

什么是跨域因为浏览器有个同源策略的限制,只要发送url请求的协议、域名、端口三者与当前页面(location.origin)的地址有一个不同, 即为跨域。 协议不同: http 和 https; 域名: 主域或者子域不同;跨域通信的两种方式JSONP因为浏览器对 script 标签没有同源限制,所以通过它来加载不同域下的数据。

2017-10-23 15:42:07 313 2

原创 mysql -- 递归查询所有子节点

背景有个需求,查询一个文件中的所有子目录的文件及文件夹。实现1. 数据库设计首先, 建立一张 t_files 表, 模拟文件树结构。 create table `t_files` ( id int auto_increment, file_name varchar(100) default '', file_type tinyint(4) default 0, parent_id

2017-09-26 17:09:16 22444 7

原创 mysql -- 先排序再分组的sql语句实现

最近项目中有一个需求, 需要先分组,再排序的功能。 搞了好久,经过敏大大(后台兄弟)指导, 终于搞出来了,分享给大家(demo)。一、 例子学生信息表 需求: 获取每个学生同一科(type)下的历史最高分数及相关信息。 如, Bob同学语文这科,历史最高分数是123第一时间想到 sql: select *from t_test group by name, type order by

2017-09-22 19:05:29 7887 1

原创 移动端 初体验

最近,有个H5宣传页的任务, 就是在手机上查看一个网站的推广活动。 记录下我遇到的几个问题:(1) 移动端开发是什么, 需要什么框架吗刚开始,也不清楚这些概念,就百度了这几个概念,发现移动端开发一般分为三类:移动端web app,移动端网页,Hybrid开发。 我这种h5宣传页,应该属于移动端网页吧。框架什么的就没查了。 移动和web开发区别:https://www.zhihu.com/quest

2017-08-25 12:02:17 333

原创 JS 遍历数组,遍历对象遇到的坑

最近在项目中发现了一些遍历数组,对象时遇到的坑,一起来看看.. **一、遍历数组**(1) forEach 不能跳出循环 (return, break, continue失效)var arr = [1,2,3];arr.forEach(i => { console.log(i); if (i === 2) return;});// 输出结果:// 1// 2// 3当时我就懵了

2017-08-22 19:50:31 3928 1

原创 JS窗口间通信--localStorage

【引言】我们知道浏览器有个同域限制,就是说出于安全考虑,浏览器只允许脚本与同样协议、同样域名、同样端口的地址进行通信。上篇提到html5新的api window.postMessage 可以解决这个问题;最近看到localStorage也可以实现,就做了个例子。【原理】浏览器同时打开一个域名下面的多个页面,当其中的一个页面改变 sessionStorage 或 localStorage 的数据时,

2016-03-29 20:22:26 1071

原创 js窗口间通信--postMessage

why我们知道:浏览器限制不同窗口之间的通信,除非同一个域名下的网页。为了解决这一问题,HTML5新出了一个API window.postMessage, 实现了不同域名的窗口通信。whatMDN上webAPI语法: otherWindow.postMessage(message, targetOrigin);otherWindow: 其他窗口的一个引用,比如iframe的conten

2016-03-28 20:32:38 11543 4

原创 2016 使用seajs时如何模块化jquery

【前言】最近接触 seajs ,遇到了下面问题:  var $ = require('jquery');  // error:$为null【找原因】1. 调试了一下,发现jquery的路径没有问题,但是$却是null,初步判断require()这个函数没有理解清楚。2. 百度了一下,发现是seajs中 require() 的参数一定要是遵循cmd规范的文件, 而jquery正常

2016-03-04 16:19:02 3383 2

空空如也

空空如也

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

TA关注的人

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