自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ReentrantLock结合Condition唤醒指定线程

关键字synchronized与notify()/notifyAll()方法相结合可以实现等待/通知模式,类ReentrantLock也可以实现同样的功能,但需要借助于Condition对象。在使用notify()/notifyAll()方法进行通知时,被通知的线程却是由JVM随机选择的。但使用ReentrantLock结合Condition类是可以实现“选择性通知”,这个功能是非常重要的,而且在C

2018-02-25 11:12:04 2801

原创 从单实例部署到负载均衡的演变

还记得刚开始学java ee的时候跑个tomcat然后可以访问就已经很开心和满足了。但是真实的项目部署都是业务服务器多实例部署,通过nginx反向代理,然后代理服务器nginx还需要做主备容灾预防。今天我们就来看一看这其中的演变过程。一、单实例部署单实例的时候我们对用户登录管理一般采用的都是session,毕竟所有用户的登录及其后续操作全部都是在一个实例上,所以他们的session也就在这个实例内

2018-02-25 11:09:52 361

原创 web开发者不可不知的网络知识

作为一名java EE开发者,我们最常用到的可能就是http协议了,但是我们对http协议及其之下的各层协议真的清楚嘛。现在我们就来大概的了解一下。 一、应用层-HTTP 二、传输层-TCP 三、网络层-IP一、应用层-HTTP一个http请求包含三个组成部分: 1. 方法-统一资源标识符(uri)-协议/版本 2. 请求的头部 3. 主体内容以下是一个http

2018-02-25 11:08:33 154

原创 Docker常用命令

Docker常用命令复制镜像 docker tag imageName:latest newName移除镜像 docker rmi imageName查看全部镜像 docker images启动某个镜像 docker run --name containerName -d -p 暴露端口:镜像端口 imageName查看全部容器 ...

2018-02-25 11:06:38 120

原创 Lock接口的使用

在java多线程中,可以使用synchronized关键字来实现线程之间同步互斥,但在jdk1.5中新增加了ReentrantLock类也能达到同样的效果,并且在扩张功能上也更加强大,使用上也比synchronized更加的灵活。示例代码:// class Service01public class Service01 { private Lock lock = new Reentrant

2018-02-25 11:04:03 177

原创 Tomcat工作原理

tomcat就是一个tcp服务器socketServer,一直在监听着指定的端口port。 一个tomcat内可以部署多个项目(app),每一个项目都有自身的应用上下文(context)。 一个上下文容器(Context)代表一个web应用,每一个上下文包括多个包装器(Wrapper),每个包装器代表一个Servlet。tomcat内存在一个process连接池,有请求过来会去连接池内获取pro

2018-02-25 10:59:45 346

原创 NodeJs模块机制

一、CommonJs规范讲到nodejs的模块化就不得不讲CommonJs规范了,在以前的文章里也有讲过CommonJs相关使用,具体使用可以到JavaScript类别下查看,这里就不放传送门了。在这里就不多做赘述了,下面就说一下基本的用法。导出模块 module.exports:// DateUtil.jsclass DateUtil { static getDate() {

2018-02-25 10:58:00 1900

原创 NodeJs异步IO

一、异步的应用对于前端开发人员来说,异步编程再普遍不过了(ajax)。对于服务端(java)开发人员来说,也存在异步编程,相关编写可参见Java分类下的“java编写异步处理方法提升系统性能”该篇文章,这里也就不放传送门了。对于移动端所有的触发事件也都是异步的,相关开发人员应该也都是很熟悉的。二、异步和同步的比较在java中如果需要发起网络请求,假设我们已经封装好了一个方法,如下:Log.log("

2018-02-25 10:57:15 792

原创 阅读历程

专业相关阅读已读《TCP/IP原理》《Java多线程编程核心技术》《深入剖析TOMCAT》《白帽子讲web安全》《RabbitMQ实战 高效部署分布式消息队列》《第一行代码》《redis的设计与实现》《JavaScript高级程序设计》《深入分析java web技术内幕》《深入理解 JVM》《大型网站系统架构与java中间件》《深入浅出NodeJs》《高性...

2018-02-25 10:56:24 222

原创 V8垃圾回收机制

一、NodeJs执行环境我们都知道在chrome浏览器内JavaScript是在v8上解释执行的,NodeJs就是基于JavaScript环境和语言编写的,它的执行环境也就离不开v8了。放张图来说明一下浏览器和NodeJs执行环境的对比。上图可用看到,在浏览器中因为需要渲染UI界面(HTML,CSS),所以多出来了浏览器的WebKit内核以及底层也会调用到显卡来显示渲染界面。而NodeJs的使用场景

2018-02-25 10:55:42 1309

原创 thymeleaf模块取消HTML5强校验

一、pom.xml添加以下依赖<dependency> <groupId>net.sourceforge.nekohtml</groupId> <artifactId>nekohtml</artifactId> <version>1.9.22</version> </dependency> 二、spring配置文件添加以下配置信息spring

2018-02-24 13:47:17 2093

原创 electron 提供SDK接口注入到远端页面使用

一、加载远端页面在main.js内通过 BrowserWindow 对象加载远端页面,如下所示:'use strict';const electron = require('electron')const globalShortcut = electron.globalShortcut;// Module to control application life.const app = elec

2018-02-24 13:46:33 7741 1

原创 JS Object静态方法讲解

一、Object.assign()将多个对象的可枚举属性拷贝到目标对象上,并且返回赋值后的目标对象。 Object.assign(target, …sources)target:目标对象…sources:源对象测试如下:var source1 = { name1: 'source1', age1: 18};var source2 = { name2: 'source2',

2018-02-24 13:46:00 1426

原创 qbian-express

照着node的express框架我自己也封装了一个很简单的拥有基础功能的qbian-express框架。一、项目目录结构:- app.js- qbian/- qbian/index.js- qbian/MIME.js- static/- static/index.html- static/login.html- static/css/- static/css/index.css-

2018-02-24 13:45:26 212

原创 JavaScript exec()

使用exec方法多次匹配一段文本中指定格式的内容。例如将文本内的 <img class="emoji smile" title="微笑"/> 替换为 [微笑]let reg = new RegExp(/<img[^>]*title="([^"]*)"[^>]*/>/, 'g'); var result; while ( (result = reg.exec(text)) != nul

2018-02-24 13:44:50 1777

原创 JS this取值的四种模式

一、函数简介在JavaScript中每一个函数的内部,除了声明时定义的形式参数外,每个函数还附加了两个参数:this 和 arguments。参数arguments是一个数组类型的变量,数组中的值就是实际调用函数时传进来的参数列表。在定义函数时会有函数的形式参数parameters,在具体调用函数时,当实际参数arguments的个数与形式参数parameters的个数不匹配时,不会导致运行时错误。

2018-02-24 13:44:15 6017

原创 JS_模块模式

一、js模块化规范js在es6之前是没有模块化的,所以后来有了nodejs的commonjs规范以及amd规范等的出现。二、模块模式的产生根据YUI规约,我们不应该定义更多的对象在window上。所以就需要将不同功能模块的js定义在同一个对象上。这就促使了模块模式的出现。三、代码示例window.qbian = window.qbian || {};window.qbian.module1 = (f

2018-02-24 13:43:29 522

原创 JS_观察者模式

一、js中观察者模式的使用js是一门事件驱动的语言,所以在其语言内部存在大量的观察者模式的使用案例。 例如各种dom事件的监听函数等。其与观察者模式配合使用也是最完美的。二、代码示例下面我们定义一个供继承使用的Events功能模块,如下所示:function Events() {}Events.prototype = { events: {}, emit: function(name, ..

2018-02-24 13:42:47 233

原创 JS_发布订阅模式

一、发布订阅模式的由来发布订阅模式是在观察者模式的基础上又抽象了一层,上一篇文章《JS_观察者模式》中我们也有说过,触发事件的对象和观察事件的对象必须是同一个对象,这也是观察者模式的不足所在,正是在此缺点的基础上,发布订阅模式由此产生。发布订阅模式不要求发布消息的生产者和订阅消息的消费者是同一个对象,更不会限制发布者的个数以及生产者的个数。也就是说我们可以创建多个发布者对象共同发布消息,发布到多个主

2018-02-24 13:42:06 1160

原创 微信分享

好多情况下我们会将高质量的网页分享给微信好友或分享到朋友圈供更多的朋友看到。这里就需要用到微信提供的jssdk的分享接口了。今天刚好做了这功能,期间也遇到了一些坑,在这里纪录一下。在开始之前你的准备工作有哪些微信公众号平台有域名的服务器一、在公众号平台绑定域名登录微信公众号,在左侧的菜单栏:公众号设置 -> 功能设置 -> js接口安全域名(如下图所示)。在这里绑定你的域名,需要注意的是,微信

2018-02-24 13:40:45 220

原创 我的白板

出于某种个人原因,本人一直很想做一个可以多方协作使用的白板,类似桌面共享一样,但是可以多方都可以在上面标注的白板。可访问地址:http://qbian.me:8082/github地址:https://github.com/Qbian61/whiteBoard没有做浏览器兼容,仅测试了 chrome 浏览器一、功能列表画布等比缩放改变线条颜色改变线条宽度画笔工具画直线画矩形画圆填

2018-02-23 15:06:06 1157 1

原创 webkit 页面渲染

一、HTML 文档的解析1、当用户输入网页 url 的时候,webkit 调用其资源加载器加载该 url 对应的网页。2、加载器依赖网络模块建立连接,发起请求并接收答复。3、webkit 接收到各种网页或者资源的数据,其中某些资源可以是同步或者异步获取的。4、网页被交给 html 解析器转变成一系列的词语(token)。5、解析器根据词语构建节点(node),形成 dom 树。6、如果节点是 jav

2018-02-23 15:05:05 538

原创 PDF、PPT、PPTX转图片

一、PDF转图片1.1 maven 配置<dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox-app</artifactId> <version>2.0.2</version></dependency>1.2 具体代码package com.qbian.util;import org.apa

2018-02-23 15:03:33 671 2

原创 ElasticSearch创建索引(index)和添加映射(mapping)

es的数据保存会根据你对每一个字段添加的映射去做过滤处理,处理完成后再做索引保存,所以在集群搭建完成后就想要创建索引,然后对需要处理的字段添加相应的映射。一、创建索引 indexcurl -XPUT 'http://localhost:9200/index' -d '{ "settings": { "analysis": { "analyzer": { "m

2018-02-23 14:52:00 24129

原创 Elasticsearch中文分词器安装

Elasticsearch中,内置了很多分词器(analyzers),例如standard (标准分词器)、english (英文分词)和chinese (中文分词)。分词的操作也称为“分析(analysis)”. analysis过程由两个步骤的操作组成:首先将文本切分为terms(词项)以适合构建倒排索引,其次将各terms正规化为标准形式以提升其“可搜索度”。这两个步骤由分词器完成。一个分词器

2018-02-23 14:50:53 614

原创 ElasticSearch数据的输入和输出相关接口

创建索引时设置主分片和副本分片PUT /blogsrequest:{ "settings" : { "number_of_shards" : 3, "number_of_replicas" : 1 }}对运行中的集群调整副本分片数量PUT /blogs/_settingsrequest:{ "number_of_replicas" : 2}

2018-02-23 14:49:32 340

原创 ElasticSearch相关接口

1.查看集群健康状态GET /_cluster/health{ "cluster_name": "elasticsearch", "status": "green", "timed_out": false, "number_of_nodes": 1, "number_of_data_n

2018-02-23 14:47:56 293

原创 ElasticSearch集群配置

cluster.name: testnode.name: node-1network.host: 192.168.1.112discovery.zen.ping.unicast.hosts: ["192.168.1.112:9300", "192.168.1.113:9300"]# 以下两项配置是为了head插件方便查看集群情况http.cors.enabled: true http.co

2018-02-23 14:45:58 188

原创 ElasticSearch数据存储

es集群数据存储分配文档到不同的容器 或 分片 中,文档可以储存在一个或多个节点中按集群节点来均衡分配这些分片,从而对索引和搜索过程进行负载均衡复制每个分片以支持数据冗余,从而防止硬件故障导致的数据丢失将集群中任一节点的请求路由到存有相关数据的节点集群扩容时无缝整合新节点,重新分配分片以便从离群节点恢复es在创建集群的时候默认初始化的分片是5个,可通过调用接口设置分片数量,一个分片对应一个

2018-02-23 14:43:36 1372

原创 ElasticSearch名词概念讲解

一、ElasticSearch与DataBase对比理解ElasticSearch => DataBaseindex -> databasetype -> tabledocument -> column二、概念讲解1、索引(index)ES将数据存储在一个或多个索引中,且索引的名称必须为全小写字符,并通过索引名对文档进行curd操作。一个ES集群中可以按需创建任意数目的索引。类比数据库,在我们的一个

2018-02-23 14:42:04 455

空空如也

空空如也

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

TA关注的人

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