自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 二叉搜索树

这里写自定义目录标题const Compare = { LESS_THAN: -1, BIGGER_THAN: 1,};function defaultCompare(a, b) { if (a === b) { return 0; } return a < b ? Compare.LESS_THAN : Compare.BIGGER_THAN;}...

2020-03-26 18:51:01 288

原创 HTTPS工作原理总结

HTTPS简介HTTPS 并非是应用层的一种新协议。只是 HTTP 通信接口部分用 SSL(Secure Socket Layer)和 TLS(Transport Layer Security)协议代替而已。通常,HTTP 直接和 TCP 通信。当使用 SSL 时,则演变成先和 SSL 通信,再由 SSL 和 TCP 通信了。简言之,所谓 HTTPS,其实就是身披 SSL 协议这层外壳的 HT...

2019-06-28 15:46:33 448

原创 javascript – 捕获iframe加载完成事件

< iframe>元素有一个负载事件。你如何倾听这个事件取决于你,但一般最好的方法是:1)以编程方式创建iframe它确保您的负载侦听器总是通过在iframe开始加载之前附加它来调用。2)inline javascript,是另一种方式,你可以在你的HTML标记内使用。3)您还可以在元素之后附加事件侦听器,在< script>标记,但请记住,在这种情况下,有...

2019-06-28 15:37:46 2159

原创 docker教程(7)-- k8s(Kubernetes)

什么是k8sk8s是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具,从创建应用,应用的部署,应用提供服务,扩容缩容应用,应用更新,都非常的方便,而且可以做到故障自愈,例如一个服务器挂了,可以自动将这个服务器上的服务调度到另外一个主机上进行运行,无需进行人工干涉。k8s 的基本架构在这张系统架构图中,我们把服务分为运行在工作节点上的服务和组成集群级别控制板的服务。Kuberne...

2019-03-18 13:40:36 488

原创 docker教程(6)--swarm

什么是 swarmSwarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源swarm 架构swarm 中Service 和 Replicas...

2019-03-18 13:28:08 284

原创 docker教程(8)--运维

docker statsdocker top {容器id}通过可视化的工具:Weavescope

2019-03-18 13:21:52 260

原创 docker教程(1)-- image(镜像)和container(容器)以及Registry(镜像仓库)

image(镜像)什么是image获取方式通过 Dockerfile的方式从镜像仓库获取container(容器)什么是container

2019-03-16 15:03:35 723

原创 数据结构与算法--翻转二叉树

/** * 翻转二叉树 * @param root * @returns {*} */function revertTree(root) { if (root === null) return null; revertTree(root.left); // 翻转左子树 revertTree(root.right); // 翻转右子树 // 交换左右子树 swap(ro...

2018-10-24 14:27:02 387

原创 数据结构与算法--二分查找法

/** * 二分搜索首先要保证数组有序 * @param arr * @param val */function binarySearch(arr, val) { let low = 0; let high = arr.length - 1; // 需要控制好循环变量 // 在 [low, high] 之间寻找 while (low &lt;= high) { ...

2018-10-24 10:26:44 204

转载 Socket.io

Socket.io提供了基于事件的实时双向通讯Browser和WebServer间的实时数据传输是一个很重要的需求,但最早只能通过AJAX轮询方式实现。在WebSocket标准没有推出之前,AJAX轮询是一种可行的方案。AJAX轮询原理是设置定时器,定时通过AJAX同步服务端数据。这种方式存在延时且对服务端造成很大负载。直至2011年,IETF才标准化WebSocket - 一种基于TCP套接...

2018-10-23 15:24:18 388

转载 你不知道的Node

翻译:https://houxingyi.github.io/2018/10/20/2018-10-10-you-dont-know-Node/原文:https://webapplog.com/you-dont-know-node/你不知道的Node:核心特性的快速介绍dog这篇文章是由Kyle Simpson的系列书籍You-Dont-Know-JS所启发。它们是很好的JavaScrip...

2018-10-23 11:54:18 392

转载 js增量更新算法研究

原文链接:https://caelumtian.github.io/2017/09/18/js增量更新算法研究/serviceWorker 方案 - js增量更新算法研究调研背景根据之前 serviceWorker 的调研,当服务端文件更新后,serviceWorker 会做对比,并请求这些新的文件。所有发生变化的文件都会被更新。现在 new-mini 内嵌页面,js 都被压缩成了一个文件。...

2018-10-19 11:41:19 1499

转载 pm2源码分析

原文链接:https://www.jianshu.com/p/ac843b516fdaNode ClusterNodejs的设计架构和nginx类似,是多进程单线程模型。由于Node单线程的限制,在多核服务器上,需启动多个进程才能最大化地利用服务器的性能。Node V0.8以后引入了cluster模块,它通过一个主进程(Master)管理多个子进程(Worker)的方式实现集群功能。 下面是一...

2018-10-19 11:01:10 844

原创 大前端--多端开发

1、React Nativehttps://www.jianshu.com/p/5cc61ec04b39

2018-10-15 14:12:07 973

原创 node高性能运维资料

https://yq.aliyun.com/articles/33342?spm=a2c4e.11153940.blogcont618108.17.17e332deBeR6VS

2018-10-14 21:29:16 465

原创 数据结构与算法--排列(数组全排列)

/** * 求数组的全排列 * @param nums * @returns {Array} */function permute(nums) { const resPms = []; const used = Array(nums.length).fill(false); // 需要对已经参与排列的元素进行记录;但要注意在递归回调结束时要记得回溯 /** * 向...

2018-09-30 17:42:36 768

原创 数据结构与算法---动态规划( 9宫格数字序列对应的字母组合)

const assert = require('assert');/** * 9宫格数字序列对应的字母组合 * @param digits */function letterCombinations(digits) { const letterMap = { 0: ' ', 1: '', 2: 'abc', 3: 'def', 4: 'ghi...

2018-09-30 17:00:00 3808

原创 数据结构与算法--动态规划资源

爬楼梯:http://www.sohu.com/a/149075950_68444501背包问题:https://juejin.im/post/5affed3951882567161ad511

2018-09-27 18:13:29 262

原创 原生js实现Ajax方法及promise封装

/*1. open(method, url, async) 方法需要三个参数:  method:发送请求所使用的方法(GET或POST);与POST相比,GET更简单也更快,并且在大部分情况下都能用;然而,在以下情况中,请使用POST请求:无法使用缓存文件(更新服务器上的文件或数据库)向服务器发送大量数据(POST 没有数据量限制)发送包含未知字符的用户输入时,POST 比 GET 更稳...

2018-09-25 00:48:52 2690

转载 JavaScript实现私有属性

源地址JavaScript被很多人认为并不是一种面向对象语言,原因有很多种,比如JavaScript没有类,不能提供传统的类式继承;再比如JavaScript不能实现信息的隐藏,不能实现私有成员。本文并不是为了打破以上误解(实际上笔者自己也有困惑),只是简单介绍几种JavaScript实现私有属性的方式,以及各自的优劣。基于编码规范约定实现方式很多编码规范把以下划线_开头的变量约定为私有成...

2018-09-25 00:06:05 933

转载 koa 原理实现

源地址koajs是最流行的nodejs后端框架之一,有很多网站都使用koa进行开发,同时社区也涌现出了一大批基于koa封装的企业级框架。然而,在这些亮眼的成绩背后,作为核心引擎的koa代码库本身,却非常的精简,不得不让人惊叹于其巧妙的设计。在平时的工作开发中,笔者是koa的重度用户,因此对其背后的原理自然也是非常感兴趣,因此在闲暇之余进行了研究。不过本篇文章,并不是源码分析,而是从相反的角度,...

2018-09-24 23:53:42 1164

原创 数据结构与算法--优先队列

/** * 优先队列:元素的添加和删除是基于元素的优先级的 * * 两种实现方式: * (1)设置优先级,然后再正确的位置添加元素; * (2)入列添加元素,按照元素的优先级移除他们 * @constructor */function PriorityQueue() { let items = []; function QueueElement(element, pr...

2018-09-24 23:45:14 237

原创 数据结构与算法--二叉搜索树

/** * 二叉搜索树(BST): * 只允许左侧节点存储小的值,右侧节点存储大(大于或等于)的值 * @constructor */function BinarySearchTree() { function Node(key) { this.key = key; this.left = null; this.right = null; } le...

2018-09-24 23:38:06 387

原创 JavaScript工具函数--数组相关

/** * 数组去重 * @param arr * @returns {*[]} */function deDuplication(arr) { return [...new Set([...arr])];}/** * 数组平铺 * @param arr * @returns {Array} */function flattenArray(arr) { retu...

2018-09-23 15:38:06 235

原创 数据结构与算法--排序(冒泡、选择、归并、快速排序、堆排序)

/** * 冒泡排序 * @param arr */function bubbleSort(arr) { let len = arr.length; for (let i =0; i &amp;amp;lt; arr.len; i++) { for (let j = 0; i &amp;amp;lt; len - i - 1; j++) { if (arr[j] &amp;amp;gt; arr[j+1]) ...

2018-09-23 14:20:13 473

原创 对象创建与拷贝--new运算符、Object.create、Object.assign、Object.defineProperty

对象创建方式(1)字面量(2) new 运算符// new 运算符实现function NEW() { const func = arguments[0]; // 构造函数 const params = [].slice.call(arguments, 1); // 获取传入的参数,调用构造函数时使用 // 继承构造函数中的属性 const o = Object.cr...

2018-09-23 14:17:19 612

原创 JavaScript函数实现--call、apply、bind

1、call函数实现Function.prototype.newCall = function(context, ...args) { if (typeof context === 'object') { context = context || window; } else { context = Object.create(null); } const fn...

2018-09-23 12:50:07 333

转载 工具函数--防抖和节流

防抖和节流窗口的resize、scroll,输入框内容校验等操作时,如果这些操作处理函数较为复杂或页面频繁重渲染等操作时,如果事件触发的频率无限制,会加重浏览器的负担,导致用户体验非常糟糕。此时我们可以采用debounce(防抖)和throttle(节流)的方式来减少触发的频率,同时又不影响实际效果。【搜索框的请求优化】:将多个请求合并为一个请求防抖debounce(防抖),简单来说就...

2018-09-23 12:22:14 335

原创 数据结构与算法--最大堆

/** * 最大堆:完全二叉树,用数组保存, * 从数组下标 0 开始,即 父元素节点为 i, 子元素节点为 2*i+1, 2*i+2 * 子节点为 i(i &amp;gt;= 1) , 则父节点为 (i-1)/2 * * count: 最大堆的有效数据长度 */module.exports = (function () { const items =...

2018-09-17 17:40:57 338

转载 手把手教你搭建一套可自动化构建的微服务框架

本文将以原理+实战的方式,首先对“微服务”相关的概念进行知识点扫盲,然后开始手把手教你搭建这一整套的微服务系统。这套微服务框架能干啥?这套系统搭建完之后,那可就厉害了:微服务架构你的整个应用程序将会被拆分成一个个功能独立的子系统,独立运行,系统与系统之间通过RPC接口通信。这样这些系统之间的耦合度大大降低,你的系统将非常容易扩展,团队协作效率提升

2018-02-07 10:39:25 2424 3

转载 Nodejs 代码热更新实现

实现原理:利用node file system模块的watch接口监视文件夹的文件变更事件事件触发后,移除require.cache内的对应的缓存使用vm模块编译新加载的代码(基础检查语法,后续可在vm content内测试运行)成功后 使用require加载代码,新代码就会缓存在 require.cache内如果失败 恢复require.cache的缓存数据代码如下:const fs = r

2018-01-26 17:28:24 6467 1

转载 Shell 编程入门

什么是 Shell ? 计算机需要代码和指令才可以执行,但是我们操作计算机不能每次都写一段 C 的代码,然后编译给计算机执行,所以需要一种方法能够完成特定的任务 计算机开始是提供给科学计算实验和教育领域使用的,而最初它们经常被用于处理文本,所以我们发现一切都是文本的形式操作常见的 shell 有 sh, bash, zsh, fish-shell and moreShell 本身就是一个二

2018-01-10 10:25:20 271

转载 跟我一起写 Makefile

该篇文章为转载,是对原作者系列文章的总汇加上标注。支持原创,请移步陈浩大神博客:http://blog.csdn.net/haoel/article/details/2886makefile很重要      什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和profes

2018-01-05 14:56:22 284

转载 使用Travis进行持续集成

出处:https://www.liaoxuefeng.com/article/0014631488240837e3633d3d180476cb684ba7c10fda6f6000其他相关文章:https://www.jianshu.com/p/c80b37f775a0持续集成:Continuous Integration,简称CI,意思是,在一个项目中,任何人对代码库的

2018-01-05 14:48:54 383

原创 云计算和DevOps

云计算概念、定义云计算是基于互联网的相关服务的增加、使用和交付模式,通常涉及通过互联网来提供动态的易扩展且经常是虚拟化的资源。 美国国家标准与技术研究院对于云计算的定义:云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池(资源包括网络、服务器、存储、应用软件和服务),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互。分

2018-01-04 18:45:06 1818

转载 PM2实用入门指南

原文地址:https://segmentfault.com/a/1190000006793571简介PM2是node进程管理工具,可以利用它来简化很多node应用管理的繁琐任务,如性能监控、自动重启、负载均衡等,而且使用非常简单。下面就对PM2进行入门性的介绍,基本涵盖了PM2的常用的功能和配置。安装全局安装,简直不能更简单。npm install -g

2017-12-13 00:08:43 563

原创 docker教程(5)--compose

Docker Compose 概念Docker Compose 是一个用来定义和运行复杂应用的Docker工具。使用Compose,你可以在一个文件中定义一个多容器应用,然后使用一条命令来启动你的应用。 一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose,不再需要使用shell脚本来启动容器。在配置文件中,所有的容器通过sevices来定义,然后使用docker-

2017-12-11 21:34:46 420

原创 docker教程(4)--网络

registry概念registry有关的常用操作docker 国内镜像registry概念Docker镜像的仓库,是一个Sass服务,与github类似。registry有关的常用操作docker search: 搜索镜像docker pull:拉取镜像docker push: 提交镜像docker 国内镜像daocloudaliyun时速云

2017-12-11 18:59:25 284

原创 docker教程(3)--volume

volume概念volume的创建从容器中挂在volume从宿主机中挂在volume通过容器创建volume使用Dockfile创建volumevolume概念Docker 的镜像是由一系列的只读层组合而来,当启动一个容器的时候,Docker加载镜像的所有制度层,并在最上层加一个读写层。这个设计使得Docker可以提高镜像构建、存储和分发的效率,节省了时间和存储空间,然而也存在如下问题:

2017-12-11 18:42:49 620

原创 docker教程(2)--Dockerfile

在上一篇blog中我们使用了docker commit来创建一个新的镜像,其实我们还有一种更方便和个性化的方式来创建docker镜像。使用Docker创建容器创建目录:mkdir dockerfile_test && cd dockerfile_test创建文件:vim index.html, 文件内容:<html> <h1>Hello Dockerfile!</h1></html>

2017-12-11 15:02:26 1615 1

空空如也

空空如也

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

TA关注的人

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