自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

甘焕的博客

专注于大数据及可视化研究

  • 博客(33)
  • 资源 (5)
  • 收藏
  • 关注

原创 JAVA NIO(六):读取10G的文件其实很容易

读取10G的文本文件,我们可能会直接认为,这太难了,这涉及到内存的容量,硬盘的读取速度以及虚拟内存、页失败载入等概念,其实对JAVA,读取10G的文件轻而易举,无论bio(java.io)还是nio,都能轻松完成任务。本次测试的10G文件,来源于上篇文章《JAVA NIO(五):如何在5秒内写入10G的文本数据》的实验结果。1. FileInputStream VS BufferedInputStr

2017-09-30 12:25:31 25561 7

原创 从JAVA到Scala(三):implicit的三种用法

对scala的隐式参数又爱又恨,既强大得让人欢呼雀跃,但繁琐的机制与晦涩的语法又让人望而却步,总结起来,implicit一共有三种用法,一种比一种强大,这里就不讲太深奥的理论,直接进入应用场景实战。1. 默认参数值首先,需要注意的是,在方法参数上添加implicit关键字对方法几乎没有任何影响,原来的调用方式依旧。其次,implicit作为参数声明时,只能作为方法的唯一参数,是的,你没看错,唯一的参

2017-09-29 21:15:42 5164 2

原创 JAVA NIO(五):如何在5秒内写入10G的文本数据

首先说本机的性能,采用AS SSD Benchmark进行评测,写入能力大约在422M每秒,计划连续写入文本数据,直到达到要求为止(5G数据与10G数据),测试环境如下: 环境 版本 JDK 1.8.0_131 操作系统 Windows 10 专业版 x64 CPU Inter i7-3740QM 内存 16G 硬盘 三星512G SSD1. File

2017-09-28 21:29:27 15652 4

原创 JAVA 8函数式编程(六):怎样复用Stream对象

在JAVA 8的Stream方法中,分为两大类,一类是惰性求值,另一类是立刻求值,只要Stream调用了立刻求值,Stream就会自动关闭,如果再次调用,将会提示如下错误:java.lang.IllegalStateException: stream has already been operated upon or closed at java.util.stream.AbstractPi

2017-09-27 22:49:54 4555

原创 从JAVA到scala(二):消失的static关键字

scala在JAVA之上增加了很多深奥的关键,例如match、type、implicit,却抹除了我们无比熟悉的static关键字。既然没有static,那我们怎么在scala中定义类的静态方法与属性呢?真要做起来,其实比JAVA还绕(scala真的简洁吗?),具体分为以下两步: 1. 在这个类的同一份文件中添加伴生对象,也就是同名的object,注意一定要在同一份文件中; 2. 在伴生对象定义

2017-09-27 22:47:00 5250

原创 从JAVA到scala(一):函数也是变量

准确地说,函数也是对象,scala中一切变量都是对象,包括函数,没有例外,之所以要说函数也是变量,是因为scala的函数声明就像普通变量的声明一样——“def”(或者val) + “=”(这两个符号必不可少),格式如下:def 函数变量名[(参数列表)]:[返回值] = 函数体1. 通用函数声明这是最常见的方式,也是最完整的写法,我们以简单的加法为例,如下:def add(a: Int, b: In

2017-09-26 21:54:08 551

原创 scala单元测试“NoSuchMethodError”的解决办法

在scala 2.12.3版本的单元测试中,严格按照ScalaTest的安装步骤,结果在运行单元测试时,提示如下错误:java.lang.NoSuchMethodError: scala.Predef$.refArrayOps([Ljava/lang/Object;)Lscala/collection/mutable/ArrayOps; at org.scalatest.tools.Args

2017-09-26 21:53:14 5145

原创 JDBC进行批量更新的两种方式

对于跨表批量查询,我们可以采用“UNION”关键字,结合子查询还可以进行分页查询,但对于批量更新,JDBC无法对子查询视图进行更新,如下:update-- 子查询视图 (select * from t_security_menu ) as menu set back_url = 'URL_2' where pk = 2-- 提示如下错误:-- [Err] 1288 - The tar

2017-09-25 22:06:32 19496

原创 python总结(六):元类与方法的默认实现

通过元类,可以修改类的方法与实现,根据“_ init_”与“_ new_”方法钩子的不同,可以在类创建后与类创建前添加控制,在类创建前可提供默认实现,在类创建后可以提供方法检查、属性检查与覆盖实现。在大部分的情况下,通过继承可以实现元类的大部分功能,所以在99%的情况下,元类基本都用不上,但是需要对类自身进行操作时,元类就排上了用场,下面是具体步骤。1. 创建元类元类必须要继承types,或者是其他

2017-09-25 22:05:22 1576

原创 python “Use of super on an old style class”的解决办法

在调试代码时,发现引用的第三方架包突然提示如下错误:E1002:<line,row>:Employee.__init__: Use of super on an old style class仔细诊断代码,发现相关的内容如下:class Base: def __init__(self, username, age): self.username = username

2017-09-23 10:02:25 1605

原创 python总结(五):__get__、__getattr__、__getitem__、__getattribute__之间的差异与联系

python的一切数据都是对象,包括函数、基本数据类型、自定义数据类型等等,这其中最复杂的就是对象内部存储的数据结构(引用),包括类属性、数据描述符、实例属性及非数据描述符,不仅它们的优先级不一样,而且它们的回调函数也存在很大的差异,这也是本文需要阐述的地方。如果以前有过Javascript的编程经验,初上Python肯定会对“.”运算符与“[]”之间的差异难以理解,它们不仅不能替换,而且完全不相关

2017-09-23 10:00:43 15233 1

原创 Python判断对象是否是function的三种方法

在Python中,判断一个对象是否是方法有如下三种方法。1. 根据“_ call _”属性判断有时候用python就有这么一种感悟,各种钩子函数就是通过内置的“”属性实现,python学得好不好,就是对“”属性理解得透彻不透彻。python函数在调用时,一定会首先调用其相关“_ call _”函数(没有空格),请参见python总结(四):类装饰器与方法的动态添加中的用法。add = lambda

2017-09-20 22:24:08 27500 5

原创 并发(十六):不要使用Thread.join()——并行变串行

在多线程程序的编写中,为了同步线程的执行状态,我们为了方便,经常会使用Thread.join()方法,须不知此方法有重大的性能缺陷,能将多线程程序变成单线程程序,执行时间瞬间翻倍,示例如下:/** * 用于长时间的任务计算,一般求fabic(40)就会花费1秒的时间 * 花费时间呈指数增长速度 */static long fabic(int n) { if(n < 0) {

2017-09-20 22:23:15 13661 12

原创 python总结(四):类装饰器与方法的动态添加

在python中,装饰器处理作用于方法上用于增强方法外,还可以作用与类,用于类的功能增强与修订,实现代理模式、装饰模式等效果,甚至可以达到继承以及mixin的效果。1. 定义类装饰器定义类装饰器非常简单,仅接受唯一的参数——待装饰的类,这里以统计类的初始化实例为例,每初始化一个实例,则计数加1,如下:def instCounter(cls): oldInit = cls.__init__

2017-09-19 22:47:36 4368

原创 python总结(三):格式化字符串占位符的三种方法

相比与其他动态语言,如scala、javascript(es6版本以上)、groovy等,python处理字符串插值显得较为笨拙,没有在语言中就内置了支持,总结起来,大概有三种方法。1. 字符串format方法这是字符串自身携带的方法,非常高效,并且容易理解,建议作为首选,实现方式如下:# 将函数参数转换为字典def format(**args): tmpl = 'My name is

2017-09-18 21:49:18 13413

原创 Spring Cloud实战(四):微服务质量监控-Hystrix仪表盘

断流器Hystrix不仅提供了微服务的错误与延迟处理机制,还提供了仪表盘用于监控各个微服务程序的健康状态,启用步骤如下。1. 添加健康监控对于每个Eureka客户端(微服务应用程序),默认采用心跳机制确认健康状态,通过启用actuator,可以激活基于事件触发的WebSocket机制,只需要添加相关的依赖即可,如下:<dependency> <groupId>org.springframew

2017-09-18 18:13:56 2145 1

原创 python总结(二):控制台中文乱码的解决办法

在编写bash终端应用程序中,如果字符串里含有中文字符,可能会出现乱码。这里以Win 10为例进行代码测试,utf8.py的内容如下:#!/usr/bin/env python# -*- coding: UTF-8 -*-value = '蚁方阵'print value以Windows的CMD终端运行代码:python utf8.py# 输出 铓佹柟闃 乱码至于乱码的原因,因为python文

2017-09-17 21:22:49 19230

原创 webpack引入jquery插件失败的解决办法

在webpack项目中引入jquery插件jstree时,提示如下错误:TypeError: __WEBPACK_IMPORTED_MODULE_3_jquery___default(...)(...).jstree is not a function at a.mounted (list.vue:104) at _e (vue.min.js:6) at Object.ins

2017-09-17 18:31:40 9556

原创 python总结(一):AOP与装饰器

如果有AOP的编程经验,理解Python的装饰器就是分分钟的事。既然是装饰器,那么对被装饰的对象来说,一定是功能得到了增强,按方法能增强的地方进行划分,又可以分为以下四类: 1. 方法调用前; 2. 方法调用后; 3. 方法调用前后(环绕); 4. 方法调用异常;我们以一个简单的加法运算来进行说明,按方法的增强点依次进行功能增强,首先看加法的代码,非常简单:def add (a, b):

2017-09-17 18:30:11 3197 1

原创 Spring Cloud实战(三):微服务错误处理与延迟处理-Hystrix

Hystrix是为了提高微服务的健壮性而生的,它能起到如下作用: 1. 控制与保护微服务的延迟与失败问题,尤其是通过网络访问依赖的微服务导致的延迟与错误传播问题; 2. 阻止连锁的服务调用失败问题; 3. 快速失败与快速恢复; 4. 优雅的降级(降低服务质量)与反馈; 5. 实时监控、告警与控制;简单点说,因为一个用户请求需要调用多个微服务,那么只要有一个微服务出现问题,那么整个请求都必然

2017-09-16 20:16:20 3797

原创 Spring Cloud实战(二):微服务集成-ZUUL

我们在第一章《 Spring Cloud实战(一):微服务注册与微服务发现》中,讲述了微服务注册与微服务发现,但是对用户来说,每个微服务都有自己独立的入口与访问地址,访问起来实在太不方便,所以我们需要一个统一的入口,协同它们应付所有的访问请求。或者简单来说,我们需要为所有的微服务建立一个代理,就类似于nginx服务器那样,所以今天就要请出我们的主角——ZUUL。1. 创建项目创建MAVEN项目,并引

2017-09-14 16:21:42 5190

原创 Spring Boot(四):利用注解自定义日期格式化

在日期的格式化过程中,我们有时候需要将日期格式化到秒或者微妙,有时候又仅仅需要将日期格式化到日期,所以定义全局的日期格式化肯定难以满足需求,这时就需要一种更灵活的方法。在Spring Boot对JSON的处理类中,定义了annotationIntrospector属性,专用于处理注解,因此自定义日期格式化的步骤分为四步,如下: 1. 定义日期格式化注解,用于盛放格式化样式; 2. 定义日期JSO

2017-09-13 22:41:44 20802 1

原创 Spring Boot(三):RestTemplate提交表单数据的三种方法

在REST接口的设计中,利用RestTemplate进行接口测试是种常见的方法,但在使用过程中,由于其方法参数众多,很多同学又混淆了表单提交与Payload提交方式的差别,而且接口设计与传统的浏览器使用的提交方式又有差异,经常出现各种各样的错误,如405错误,或者根本就得不到提交的数据,错误样例如下:Exception in thread "main" org.springframework.web

2017-09-11 23:13:13 95863 11

原创 Spring Cloud实战(一):微服务注册与微服务发现

没有Spring Cloud,Spring Boot的实用性要大打折扣。单个微服务虽然开发简单、维护方便,但是没有协作功能的微服务,其实在企业里并没有显著的竞争力,跟NodeJS比起来,JAVA开发微服务并没有多大的优势。但是有了Spring Cloud,将多个微服务协作起来工作,充分发挥JAVA在分布式计算的优势,那么改变的不仅仅是开发的方式,而是整个服务框架与计算模式的设计方式。在Spring

2017-09-10 12:24:03 9384 1

原创 Linux(三):创建不可登录的服务账号及启动定制服务

在服务器的管理中,我们经常需要启动mysql、elasticsearch、nginx服务,但又不希望以root的方式启动(有时候是强制性的,比如elasticsearch就禁止使用root账号启动服务),这时候就需要为它们创建单独的服务账号,同时为了安全性的考虑,一般都要禁止这些账号登录Shell,以nginx为例,详细的过程如下:1. 创建用户组与用户既然我们都不需要用户登录,所以也不用创建用户主

2017-09-09 22:38:33 7118 1

原创 Requirejs高级应用(七):模块导出的三种方式及优先级

在Requirejs中,模块导出共有三种方式: 1. 通过return方式导出,优先级最高; 2. 通关module.exports对象赋值导出,优先级次之; 3. 通过exports对象赋值导出,优先级最低;上面的三种优先级是绝对的优先级,无关代码的顺序,例如即使将exports导出放在最后,也会被module.exports覆盖,另外导出的内容只能是优先级最高的那个,而且仅仅包含其内容,绝

2017-09-09 03:13:30 5632

原创 JAVA 8函数式编程(五):收集器详解与自定义实现

在Stream的接口中,最强大的接口就是collect了,当然这也是最难的接口,它对Stream的应用过程可分为四步: 1. 利用Supplier接口,创建存储中间运算结果的容器(不是返回结果),扮演的角色为supplier; 2. 利用BiConsumer// 声明单词集合对象List<String> words = Lists.newArrayList("hi", "Hello", "H

2017-09-07 22:13:26 1208

原创 Requirejs高级应用(六):模块无法加载错误的解决办法

在angular与requirejs的结合中,提示“Module name has not been loaded yet for context: _”,如下:require-lib.js:900 Error: Module name "common/app" has not been loaded yet for context: _http://requirejs.org/docs/erro

2017-09-07 22:12:10 15868

原创 NodeJS总结(四):yield、return与柯里化

对于ES6的生成器函数总结有四点: 1. yield必须放置在*函数中; 2. 每次执行到yield时都会暂停函数中剩余代码的执行; 3. *函数必须通过函数调用的方式(new方式会报错)才能产生自身的实例,并且每个实例都互相独立; 4. 一个生成器函数一旦迭代完成,则再也无法还原,一直停留在最后一个位置;尤其是第二点,是非常强大的功能,暂停代码执行,以前只有在浏览器环境中,alert、co

2017-09-06 21:57:32 11868

原创 NodeJS总结(三):一种快速生成序列的方法

习惯了python、R等编程语言自带序列的写法,突然想把这样的行为移植到JS中,在NodeJS中,如果要快速生成一个[0-9]的数组,那么最快捷的写法是:// 生成[0,1,2,3,4,5,6,7,8,9][...Array[10].keys()]对于上面的写法,理解分为[]步: 1. Array[10]返回一个10个undefined元素的数组; 2. keys()返回数组元素的迭代器,用

2017-09-05 22:55:02 4060

原创 ZooKeeper(一):创建仲裁模式服务器集群

1. 准备配置文件首先进入ZooKeeper的安装目录,复制多份ZooKeeper配置文件,如下:# 创建三份配置文件cp conf/zoo_sample.cfg conf/zoo-1.cfgcp conf/zoo_sample.cfg conf/zoo-2.cfgcp conf/zoo_sample.cfg conf/zoo-3.cfg在每份配置文件“conf/zoo_n.cfg”的末尾

2017-09-04 22:36:44 2577

原创 Linux(二):巧用分号在命令行执行逻辑判断语句

在脚本的执行过程中,分号可以在一行中连接多条命令,如在一条命令中显示今天的日期:# 添加-n表示不换行echo -n "today is "; date +%y%m%d但这只是大材小用,还可以用于控制语句如if的组织结构上,如将then提齐到if语句并列,如下:# 与JAVA语法类似的组织结构if [ -e startup.sh ]; then echo "startup.sh

2017-09-04 22:35:38 6082

原创 NodeJS总结(二):事件响应一定是异步的吗?

事件驱动编程是一种程序流程取决于事件发生次序的编程风格,我们只需要为事件的处理程序注册回调函数,那么在事件发生时,系统就会自动调用这些处理程序,这种编程风格又叫作后继传递风格(Continue-Passing Style,CPS)。因为事件具有不可预知的特性,再加上异步与事件的阐述的亲近性,所以很多人都想当然地认为,事件响应一定都是异步的,例如AJAX、setTimeout,如下:// #! /u

2017-09-03 16:40:23 975

libgcrypt11_1.5.3-2ubuntu4_amd64

libgcrypt11

2016-12-14

Chrome代理快速切换工具

Chrome代理快速切换工具,支持多个代理,以浏览器插件方式进行安装。

2016-12-06

syntaxhighlighter可执行库与示例

syntaxhighlighter是一个强大的语法高亮器,但是需要自己编译,较为繁琐,我把其编译为一个架包,并提供了相关的DEMO。

2016-07-06

Weblogic 兼容JPA相关架包架包

Weblogic不能兼容JPA2.0,引用资源及相关路径设置,内包含详细的操作说明

2016-06-02

空空如也

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

TA关注的人

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