node

【集合系列】- 深入浅出分析HashMap

风格不统一 提交于 2019-12-16 22:30:37
一、摘要 在集合系列的第一章,咱们了解到,Map的实现类有HashMap、LinkedHashMap、TreeMap、IdentityHashMap、WeakHashMap、Hashtable、Properties等等。 关于HashMap,一直都是一个非常热门的话题,只要你出去面试,我保证一定少不了它! 本文主要结合JDK1.7和JDK1.8的区别,就HashMap的数据结构和实现功能,进行深入探讨,废话也不多说了,直奔主题! 二、简介 在程序编程的时候,HashMap是一个使用非常频繁的容器类,它允许键值都放入null元素。除该类方法未实现同步外,其余跟Hashtable大致相同,但跟TreeMap不同,该容器不保证元素顺序,根据需要该容器可能会对元素重新哈希,元素的顺序也会被重新打散,因此不同时间迭代同一个HashMap的顺序可能会不同。 HashMap容器,实质还是一个哈希数组结构,但是在元素插入的时候,存在发生hash冲突的可能性; 对于发生Hash冲突的情况,冲突有两种实现方式, 一种开放地址方式(当发生hash冲突时,就继续以此继续寻找,直到找到没有冲突的hash值),另一种是拉链方式(将冲突的元素放入链表) 。 Java HashMap采用的就是第二种方式,拉链法。 在jdk1.7中,HashMap主要是由数组+链表组成,当发生hash冲突的时候

Kubernetes学习-基础架构

三世轮回 提交于 2019-12-16 21:54:19
kubectl是一个Kubernetes提供的客户端工具,是用于操作kubernetes集群的命令行接口,通过利用kubectl的各种命令可以实现各种功能,是在使用kubernetes中非常常用的工具,该工具内部就是对Kubernetes API的调用。 kubecfg是一个命令行客户端,连接到master来管理kubenetes集群 注: 在新版Kubernetes中,所有的操作命令都整合至 kubectl,包括kubecfg、 kubectl.sh、kubecfg.sh等 基础组成架构:Master+Node 1,Master    Master节点上面主要由四个模块组成: APIServer 、 scheduler 、 controller manager 、 etcd 。      APIServer 。APIServer负责对外提供RESTful的Kubernetes API服务,它是系统管理指令的统一入口,任何对资源进行增删改查的操作都要交给APIServer处理后再提交给etcd。kubectl是直接和APIServer交互的。 提供了资源对象的唯一操作入口,其他所有组件都必须通过它提供的API来操作资源数据,只有API Server与存储通信,其他模块通过API Server访问集群状态。 实现集群故障检测和恢复的自动化工作,负责执行各种控制器,主要有: 第一

一、Kubernetes系列之介绍篇

风格不统一 提交于 2019-12-16 21:13:14
•Kubernetes介绍 1.背景介绍   云计算飞速发展     - IaaS     - PaaS     - SaaS   Docker技术突飞猛进     - 一次构建,到处运行     - 容器的快速轻量     - 完整的生态环境 2.什么是kubernetes   首先,他是一个 全新的基于容器技术的分布式架构领先方案 。Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg)。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。   Kubernetes是一个完备的分布式系统支撑平台, 具有完备的集群管理能力,多扩多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和发现机制、內建智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制以及多粒度的资源配额管理能力 。同时Kubernetes提供完善的管理工具,涵盖了包括开发、部署测试、运维监控在内的各个环节。 Kubernetes中,Service是分布式集群架构的核心,一个Service对象拥有如下关键特征: 拥有一个唯一指定的名字 拥有一个虚拟IP(Cluster IP、Service IP、或VIP)和端口号 能够体统某种远程服务能力

nodeJS + grunt +npm 安装

六月ゝ 毕业季﹏ 提交于 2019-12-16 21:09:15
1. 在nodeJS官网下载本地电脑对应的nodeJs版本 官网网址是:https://nodejs.org/en/ 2.双击下载的ims文件,一直点击下一步,直到结束,并配置path路径:到nodejs目录(最后一定要加";"号)。 3.ctrl+R 跳出系统命令窗口:node -v 查看node安装版本;npm -v 查看npm安装版本。//可以使用 npm update -g npm 更新npm包管理器。 4.用test.js文件测试nodeJS是否安装成功:在命令窗口 输入 node D:\test.js 如果最终输出 nodejs start listen 8899 port! 则表示安装成功。    var http = require("http");   http.createServer(function(request, response) {   response.writeHead(200, {"Content-Type": "text/plain"});   response.write("test nodjs");   response.end();   }).listen(8899);   console.log("nodejs start listen 8899 port!"); 5.安装grunt命令行 : npm install -g grunt

vue 之 双向绑定原理

守給你的承諾、 提交于 2019-12-16 17:18:41
一、实现双向绑定    详细版:      前端MVVM实现双向数据绑定的做法大致有如下三种: 1.发布者-订阅者模式(backbone.js) 思路:使用自定义的data属性在HTML代码中指明绑定。所有绑定起来的JavaScript对象以及DOM元素都将“订阅”一个发布者对象。任何时候如果JavaScript对象或者一个HTML输入字段被侦测到发生了变化,我们将代理事件到发布者-订阅者模式,这会反过来将变化广播并传播到所有绑定的对象和元素。 vueJS 的思路流程:发布者dep发出通知 => 主题对象subs收到通知并推送给订阅者 => 订阅者watcher执行相应操作 2.脏值检查(angular.js) 思路:angular.js 是通过脏值检测的方式比对数据是否有变更,来决定是否更新视图,最简单的方式就是通过 setInterval() 定时轮询检测数据变动,angular只有在指定的事件触发时进入脏值检测,大致如下: DOM事件,譬如用户输入文本,点击按钮等。( ng-click ) XHR响应事件 ( $http ) 浏览器Location变更事件 ( $location ) Timer事件( $timeout , $interval ) 执行 $digest() 或 $apply() 3.数据劫持(Vue.js) 思路: vue.js 则是采用数据劫持结合发布者

16.go语言基础学习(上)——2019年12月16日

我的未来我决定 提交于 2019-12-16 17:04:04
2019年12月13日10:35:20 1.介绍 2019年10月31日15:09:03 2.基本语法 2.1 定义变量 2019年10月31日16:12:34 1.函数外必须使用var定义变量 var a=1 b:=5 声明变量的一般形式是使用 var 关键字: var name type 其中,var 是声明变量的关键字,name 是变量名,type 是变量的类型。 2.没有全局变量说法,只有包变量 3.集中定义变量 var ( a int c string d bool ) 4.使用var关键字 var a,b,c bool var s1,s2 string="hello","world" 5.使用:=定义变量 只能在函数体内使用 a,b,c:=1,2,"123" 6.基本类型 Go语言的基本类型有: bool string int、int8、int16、int32、int64 uint、uint8、uint16、uint32、uint64、uintptr byte // uint8 的别名 rune // int32 的别名 代表一个 Unicode 码 float32、float64 complex64、complex128 7.源代码: package main import "fmt" var ( a int c string d bool ) func main()

Node学习笔记 函数自调用和crud增删改查

瘦欲@ 提交于 2019-12-16 16:55:39
处理 post 响应请求 在处理 get 请求方式上,express 可以使用 req.query 获得请求体数据,但是在 post 请求方式 express 并没有提供获得对应请求体的方法 若需要使用 post 处理响应请求,需要利用第三方组件 body-parser 安装 npm install --save body-parser // 简写 npm i -S body-parser 配置 // 对组件进行配置 app.use(bodyParser.urlencoded({ extended: false })) app.use(bodyParser.json()) 使用 // html <form action="接口地址" method="post">表单内容</form> // 将表单提交方式改为 post // js var bodyParser = require('body-parser') // 引入组件 app.use(bodyParser.urlencoded({ // 对组件进行配置 extended: false })) app.use(bodyParser.json()) app.post('/post', (req, res) => { // post 请求体 }) 综上所述,我们就可以利用 express、express-template

【JDK1.8】HashMap源码详解:

早过忘川 提交于 2019-12-16 16:46:00
一、HashMap概述 在JDK1.8之前,HashMap采用数组+链表实现,即使用链表处理冲突,同一hash值的节点都存储在一个链表里。但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依次查找的效率较低。而JDK1.8中,HashMap采用数组+链表+红黑树实现,当链表长度超过阈值(8)时,将链表转换为红黑树,这样大大减少了查找时间。 下图中代表jdk1.8之前的hashmap结构,左边部分即代表哈希表,也称为哈希数组,数组的每个元素都是一个单链表的头节点,链表是用来解决冲突的,如果不同的key映射到了数组的同一位置处,就将其放入单链表中。 jdk1.8之前hashmap结构图 jdk1.8之前的hashmap都采用上图的结构,都是基于一个数组和多个单链表,hash值冲突的时候,就将对应节点以链表的形式存储。如果在一个链表中查找其中一个节点时,将会花费O(n)的查找时间,会有很大的性能损失。到了jdk1.8,当同一个hash值的节点数不小于8时,不再采用单链表形式存储,而是采用红黑树,如下图所示。 jdk1.8 hashmap结构图 说明:上图很形象的展示了HashMap的数据结构(数组+链表+红黑树),桶中的结构可能是链表,也可能是红黑树,红黑树的引入是为了提高效率。 二、涉及到的数据结构:处理hash冲突的链表和红黑树以及位桶 1、链表的实现

vue+express+mysql项目总结(node项目部署阿里云通用)

对着背影说爱祢 提交于 2019-12-16 12:49:53
原文发布于我的个人博客上: 原文点这里   前面经历千辛万苦,终于把博客的所有东西都准备好了,现在就只等部署了。下面我介绍下我的部署过程: 一、购买服务器和域名   如果需要域名(不用域名通过ip也可以访问,虽然不方便,但可以节约一年几十块钱的域名费用,哈哈),建议提前购买,因为域名备案的时间比较长。   我是在 阿里云 上购买的服务器和域名,服务器是在 阿里云 手机端上购买的活动产品,半年¥9.9(半年后续费好像就是原价了!!!下面是购买的截图),域名是¥55一年(.com比较贵), 点这里 去挑选合适你的服务器吧~~ 二、服务器环境搭建   新购买的服务器什么都没有,需要根据自己的须要搭建环境,我的博客服务端是用node搭建的,所以我给服务器搭建的是node环境,其他环境请自行百度~~~(我的服务器是 CentOS 7)。 我的远程连接工具是用的是: XShell ,文件上传用的是: FileZilla 。当然也可以用其他的工具,请自行下载~~ 1. 格式化和挂载数据盘 先放原文地址《 Linux 格式化和挂载数据盘 》,照着教程一步一步来就好了。   在教程的第6步执行完之后,我执行了这条命令: mkdir /brand ,创建了一个 brand 的文件夹来存放我自己上传的东西,没有放在教程的那个 /mnt 文件夹中,从第7步开始把 /mnt 换成 /brand 就好了

webpack的配置

旧巷老猫 提交于 2019-12-16 12:39:23
安装 由于webpack依赖node环境,所以在安装webpack之前需要先安装Node! Node下载地址 这里我就使用局部方法安装webpage 3.6.0版本,如下: npm install --save-dev webpack@3.6.0 node_modules/.bin/webpack -v //查看版本 npm init //初始化项目 然后新建src、dist文件夹与index.html文件,并在src文件夹里新建main.js、math.js,如下图所示: 打包命令如下: node_modules/.bin/webpack ./src/main.js ./dist/bundle.js 配置webpack.config.js与package.json来使用便捷命令打包 webpack.config.js配置 在根目录创建名为 webpack.config.js 的文件 内容如下: const path = require('path') module.exports = { entry: './src/main.js', output: { path: path.resolve(__dirname, 'dist'), filename: 'bundle.js' } } 然后直接输入以下命令即可完成打包: node_modules/.bin/webpack