程序人生
文章平均质量分 63
千山独行
活着是一种修行
展开
-
大数据处理之荷兰三剑客
大数据现在是业内炙手可热的话题,随着技术的发展,大数据存储技术已经不再是难点,但是对大数据如何做好存储后的下一步处理将是未来竞争的焦点,目前比较受欢迎的Storm, Spark, Hadoop三个大数据处理工具都是JVM上的语言写成的。Spark由Scala写成,是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于map red原创 2017-04-25 20:24:36 · 1379 阅读 · 0 评论 -
论架构师的职责
很久以前(4,5年前)当核心码农,只需保质保量完成既定任务。技术选型开会的时候随便yy,反正最后拍板背书的人不是我。完成特定的任务,想算法,做优化,实实在在的产出,很有成就感。 而最近这几年,开始渐渐提升自己,从架构师,技术经理,到技术负责人。现在开会不敢乱说,技术也不敢乱选。因为要给设计做最终拍板,确定最终的技术架构体系。所以会经常焦虑自己做的设计是不是有坑,是不是太low等等。 同时在原创 2016-01-31 20:55:40 · 557 阅读 · 0 评论 -
安装最新Mysql community server 5.7.10社区版的坑爹经历
北京时间昨晚(2015-12-07)22点左右,mysql开发团队发布了最新的5.7.10版本,正好我这里也需要安装mysql,于是开始动作。我的系统环境是centos7,64位系统,所以在http://dev.mysql.com/downloads/mysql/下载页面,可以选择Linux - Generic和Red Hat Enterprise Linux / Oracle Linux两个原创 2015-12-08 23:25:29 · 17737 阅读 · 0 评论 -
Java IDE中Access restriction错误的修订
今天在eclipse mars中导入一个外部项目,在编译时出现了下面的错误:Access restriction: The type 'BASE64Encoder' is not API (restriction on required library 'C:\Program Files\Java\jre1.8.0_20\lib\rt.jar')出现这个错误,是因为调用了Eclip原创 2015-12-19 18:29:34 · 594 阅读 · 0 评论 -
spring 4.x下让http请求返回json串
当前很多应用已经开始将响应返回为json串,所以基于springframework框架开发的服务端程序,让响应返回json字符串成为了一种常用手段。这里介绍一下如何在spring-MVC框架下方便快捷的返回json字符串。首先,需要在controller类的方法名头上加@ReponseBody注解,但是只增加这个注解是不够的,在使用httpclient4.5.x模拟post请求时,出现原创 2015-11-28 11:29:27 · 1582 阅读 · 0 评论 -
HttpClient4.5 使用http连接池发送http请求深度示例
HttpClient 3.x,4.x都提供http连接池管理器,当使用了请求连接池管理器(比如PoolingHttpClientConnectionManager)后,HttpClient就可以同时执行多个线程的请求了。hc3.x和4.x的早期版本,提供了PoolingClientConnectionManager,DefaultHttpClient等类来实现http连接池,但这些类在4.原创 2015-10-21 14:43:19 · 3974 阅读 · 0 评论 -
从命令行及java程序运行MyBatis Generator 1.3.x自动生成MyBatis 3.x代码
近期因为项目需要,调研了myBatis 3.x的使用,当然,顺便也就研究了一下使用Generator来通过逆向工程生成pojo,mapper等文件。使用这个工具之前,要先下载相关的jar包,我使用的是最新的mybatis-generator-core-1.3.2.jar。下面将generatorConfig.xml列出来: <jdbcConnection driverCl原创 2015-09-15 13:10:13 · 17573 阅读 · 0 评论 -
UK 更新惊魂记
本文前提是,因为更容易安装各种webserver,数据库,redis缓存,mq等软件,笔者使用Ubuntu Kylin作为开发系统已经好长时间了。而今天(2015-07-23)下午2时许,系统提示有新的更新包,于是就进行了一下更新,记得只有一个核心组件的更新,更新完要求重启系统。于是进行了重启,然而此时麻烦已悄然而至!系统重启时,发现不能显示选择操作系统的界面了!仅剩左上角一个光标在黑屏上原创 2015-07-25 11:43:33 · 9472 阅读 · 0 评论 -
闭锁CountDownLatch和栅栏CyclicBarrier之异同举例
CountDownLatch和CyclicBarrier的主要联系和区别如下:1.闭锁CountDownLatch做减计数,而栅栏CyclicBarrier则是加计数。2.CountDownLatch是一次性的,CyclicBarrier可以重用。3.CountDownLatch强调一个线程等多个线程完成某件事情。CyclicBarrier是多个线程互等,等大家都完成。4.鉴于上面原创 2015-05-29 09:02:51 · 12886 阅读 · 1 评论 -
Enum枚举类型比值
在编码时,两个Enum实例,直接用==就可以比较它们的值了,而不是比较这两个Object的地址。这显然和通常的Object不一样。而且,在JDK7之后,枚举还能用在switch-case开关语句中。Enum不是primitive类型,却可以用==比较,这是为什么呢?Enum本身可以是多实例的,关键在于,它的每个值对应唯一的Object,因此,它有几个值,就生成几个实例。所有相关的变量都是代原创 2016-02-28 18:10:49 · 607 阅读 · 0 评论 -
论开源<3>---从公司企业的高度看开源
3.从公司企业的高度来看开源首先需要承认,从人类发展史上来说,代码开源确实是极大的推进了社会科技水平的发展,有着积极的进步的意义。但是,从商业公司的高度上来讲,开源还是不开源,公司都会权衡各种利弊,不是做活雷锋的。商业公司开源的大多是基础设施,其目的,一个是让更多的人参与到开发中来,帮助提高开发速度与软件质量,另一个是作为一种低价倾销手段,让这种基础设施霸占市场。商业公司由自己的雇员主导开源软原创 2016-05-11 12:00:03 · 478 阅读 · 0 评论 -
spring-data-jpa原理探秘(3)-QueryMethod类
第三篇,我们来说说JPA规范中的QueryMethod相关类。首先给出类图和继承关系:很简单,是不是,只有区区两个相关类,QueryMethod及其子类JpaQueryMethod。QueryMethod类位于spring-data-commons-***.jar包中;而JpaQueryMethod则位于spring-data-jpa-***.jar包中。也就是说,QueryMetho原创 2017-01-19 22:14:24 · 2656 阅读 · 0 评论 -
spring-data-jpa原理探秘(4)-JpaQueryExecution类概述
spring-data-jpa原理的第四篇,来说说JpaQueryExecution相关类。首先给出类图和继承关系:spring-data-jpa中对JpaQueryExecution有明确说明:包含多个查询运行策略的类的集合。根据大多数org.springframework.data.repository.query.QueryMethod以及AbstractStringBasedJ原创 2017-02-28 14:08:42 · 1774 阅读 · 0 评论 -
spring-data-jpa原理探秘(2)-RepositoryQuery的用途和分类
本系列的第二篇文章,主要讲解在spring-data-jpa中占有重要地位的RepositoryQuery接口的用途和分类。首先我们看看RepositoryQuery接口极其子类的类图上图很清晰的说明,RepositoryQuery接口包含SimpleJpaQuery,NativeJpaQuery,PartTreeJpaQuery,NamedQuery,StoredProcedureJ原创 2016-12-29 23:31:23 · 5748 阅读 · 0 评论 -
spring-data-jpa原理探秘(1)-运行环境创建及加载Repository接口
spring-data-jpa的优点很多,比如继承Repository接口,在注解中书写JPQL语句即可访问数据库;支持方法名解析方式访问数据库;使用Predicate支持动态查询等,在此不一一列举了。这些都是使用spring-data-jpa中的种种优点,要想将之使用的更好更优雅,就要从spring-data-jpa的加载和运行机制进行探秘。此文系作者查看spring-data-jpa源码及原创 2016-11-30 23:29:32 · 9871 阅读 · 4 评论 -
两阶段提交
这篇文章粗略讲一下两阶段提交协议,即2PC,Two Phase Commitment Protocol。之所以称为两阶段提交,是相对于单库的事务提交方式来说的。我们在单库上完成相关的数据库操作后,就会直接提交或者回滚,而在分布式系统中,在提交之前增加了准备的阶段,所以称为两阶段提交。图1显示的就是第一阶段提交的情况,可以看到,参与操作的是事务管理器与两个资源。原创 2016-10-31 19:49:19 · 766 阅读 · 0 评论 -
spring-boot读取props和yml配置文件
最近微框架spring-boot很火,笔者也跟风学习了一下,废话不多说,现给出一个读取配置文件的例子。首先,需要在pom文件中依赖以下jar包 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test原创 2016-09-30 01:31:44 · 25603 阅读 · 1 评论 -
ubuntu单机下安装多mysql 5.7.14
前文已述,因为需要测试mysql的主从配置方案,所以要安装多个mysql。这次是在ubuntu kylin 14.10上安装多个mysql 5.7.14。系统环境:ubuntu kylin 14.10,64位系统 mysql版本:5.7.14社区版 mysql下载地址:http://dev.mysql.com/downloads/mysql/,选择 Linux - Generic,原创 2016-08-01 23:44:40 · 2745 阅读 · 0 评论 -
windows系统下安装最新mysql 5.7.13解压版
最近因为需要测试mysql的多种主从配置方案,所以要安装多个mysql。为了更好的应用机器,干脆就在一台windows机器上安装了多个mysql,用不同的端口号区别开。那么,最好的选择自然就是安装多个mysql解压版,而不是那种msi安装版,可以达到绿色版的用后即焚效果。系统环境:win 7,32位系统mysql版本:5.7.13社区版mysql下载地址:http://dev.my原创 2016-07-25 20:33:09 · 1471 阅读 · 0 评论 -
centos6.5下安装gradle编译环境
现在用gradle替代maven的项目越来越多,下面就描述一下如何在centos服务器环境下安装配置gradle环境。1.在http://www.gradle.org/downloads页面,下载最新版的gradle软件包,撰写这篇文档的时候是2.2.1版。2.下载了gradle-2.2.1-all.zip或者gradle-2.2.1-bin.zip文件之后,将之解压在/usr/l原创 2015-01-20 11:31:01 · 12795 阅读 · 0 评论 -
深入理解oracle的事务隔离性
在Oracle关系数据库中,我们先来看下面这个问题:A事务:select from T where id > 10 and id B事务:update T set id = 45000 where id = 4501两个事务按下面的顺序执行:A事务:|--------------------------------|commitB事务: |----------原创 2014-12-08 13:00:14 · 8898 阅读 · 0 评论 -
svn提交时,邮件通知问题解决的经验谈
svn可以实现在commit提交时,使用hook钩子功能,向指定的邮箱发送提交注释comment/log及内容变化的邮件,以方便对之进行监控。具体的描述就是,1.当某个账号提交代码/文档时,使用钩子功能,调用仓库的hooks目录下的post-commit文件,实际上是执行一个shell文件,因此要求此文件具有执行权限2.在shell文件中,通过显式的编码方式运行mailer.py,根据原创 2015-01-27 15:34:52 · 11022 阅读 · 0 评论 -
使用java反射机制运行时进行Map和POJO的互相转换
java反射机制运行时进行Map和POJO的互相转换,getDeclaredFields和getFields方法的区别原创 2013-09-23 12:08:02 · 3339 阅读 · 1 评论 -
基于JVM规范的并发编程解决方案
在并发的世界里,选择合适的状态处理方法将对并发性和正确性起到决定性的影响。这方面可选的方法有:共享可变性、隔离可变性以及完全不可变性。本文介绍两种较新的基于JVM虚拟机规范的解决方案:软件事务内存STM及基于角色的模型原创 2013-08-20 18:23:01 · 944 阅读 · 0 评论 -
分治和hash-从海量数据大文件中查出某时间段内登陆超过阈值的ip地址
互联网常用功能,从海量数据大文件中查出某时间段内登陆超过阈值的ip地址,常见的比较成熟的解决方案有:分治+Hash,Bloom filter,2-Bitmap等。本文是一个分治与hash实现。原创 2013-07-23 16:30:29 · 1566 阅读 · 3 评论 -
利用JDK7的NIO2.0进行I/O读写和文件操作监控
最近在学习新的jdk 7提供的NIO 2.0,发现这个东东提供的java.nio.file包里的若干类,大大的方便了文件读写操作,而且编码相当简单,做了很好的封装。它的一个核心类就是Path。下面就是windows系统下新增,删除,拷贝,move文件的简单示例,注意,需要JDK7的编译和运行环境import static java.nio.file.StandardCopyOption.COP原创 2012-06-28 12:03:51 · 3707 阅读 · 0 评论 -
CentOS下邮件客户端mutt的使用
由于最近在CentOS5.6下编写shell脚本,要用到发送邮件的功能,于是摸索了一下mutt这个软件。它是一款基于文字界面的邮件客户端,非常小巧,但功能强大,可以用它来读写,回复保存和删除你的邮件,能在linux命令行模式下收发邮件附件。更多的用法请查阅官网:http://www.mutt.org1.mutt的安装安装操作系统时,一般Linux都会默认安装mutt,CentOS也原创 2012-04-09 13:56:51 · 4840 阅读 · 0 评论 -
使用ajax异步回调函数实现服务端图片上传验证
最近开发一个项目,提交表单时,具有上传图片文件的功能。上传图片可以使用当前流行的Apache Fileupload或者struts自带的文件上传功能。但是,当限制为仅能上传最大1M的图片,并且只能是jpg,gif图的时候,如何进行验证呢?前端的js显然是没有权限访问本地文件来进行验证的。经过多方研究,想到了ajax的回调函数ajax_callback。下面是前端jsp文件的部分代码原创 2011-10-23 21:09:23 · 1418 阅读 · 0 评论 -
三权鼎立形式的软件开发方式
<br />什么是三权鼎立形式的软件开发方式?估计所有的开发者都听说过瀑布式开发模式,xp测试驱动开发模式等等,这是从软件的开发方法来说;而我要说的,是催生软件最终成型/上线所需要的公司组织结构模式的,跨部门,跨组协作方式的软件开发方法。二者着眼点完全不同。<br /><br />根据互联网源远流长的来源,几乎从一开始(实际也不长,在国内顶多十几年时间),互联网公司的领导者们就发现了一个尖锐的矛盾,那就是用户体验(UED)和开发出的软件的易用性方面的矛盾。简单来说,就是开发者开发出来的互联网产品,自己觉原创 2011-05-26 00:42:00 · 1091 阅读 · 0 评论 -
好事还是坏事-JDK5对泛型的引入
<br />最近在开发中遇到一个现象,就是在编译时整个代码中使用了泛型,并没有出现任何类型转换上的问题。代码如下:<br />void foo(List<ADto> res) { if(res != null) { List<Integer> resIds = new ArrayList<Integer>(); for (ADto a : res) {//在这一行报java.lang.ClassCastException原创 2011-05-22 02:05:00 · 718 阅读 · 0 评论 -
ActiveMQ的消息重发策略和DLQ处理
ActiveMQ的消息重发策略和DLQ处理,自动丢弃过期消息,将非持久消息(non-persistent messages)放入死信队列原创 2013-12-09 12:56:39 · 2899 阅读 · 0 评论 -
高效判断一个数是否是2的幂次方
一个数是否是2的幂次方,比较常用的是递归和移位运算进行判断。递归算法的思想很简单,就是不断的模上2去判断。如果一个数是2的幂,那么它的二进制表示中就只有一位1,例如:10000,1000,100等等。所以如果对数字1进行移位操作,总会在移到某个位的时候和这个数相等。这就是移位判断的思想。下面给出实现的代码,在实现中,还采用了第三种方式,因为二进制表示的2的幂次方数中只有一个1,后面原创 2013-12-20 13:19:44 · 1401 阅读 · 0 评论 -
双十一前4小时,CentOS 6.5服务器启动错误排查
11月10日晚上8点多,眼看要到双十一了。。。但我要说的这段经历却和双十一毫无关系,哈哈。这天准备向CentOS6.5服务器的svn上传一些文件,结果开机启动时,却出现了下面的界面:这是肿么回事?根据屏幕的提示,先使用root账号登录到系统,然后使用fsck命令手工检测#cd /tmp/.ICE-unix #目录下只有一个X0文件#fsck X0 或者fsck.e原创 2014-11-12 16:05:39 · 11732 阅读 · 0 评论 -
Spring不支持依赖注入static静态变量
在springframework里,我们不能@Autowired一个静态变量,使之成为一个spring bean,例如下面这样:@Autowiredprivate static YourClass yourClass;可以试一下,yourClass在这种状态下不能够被依赖注入,会抛出运行时异常java.lang.NullPointerException,为什么呢?静态变量/类变原创 2014-07-31 15:03:47 · 4872 阅读 · 0 评论 -
httpclient4.3.x模拟post及get请求
在web开发中,我们经常需要模拟post及get请求,现在网上比较多的是使用httpclient3.x,然而httpclient4.x已经发布好几年了,而且4.x之后改名为HttpComponents,显然是今后的趋势.Apache HttpComponents4.x中的HttpClient是一个很好的工具,它符合HTTP1.1规范,是基于HttpCore类包的实现。但是HttpCompone原创 2014-07-28 13:33:40 · 2293 阅读 · 0 评论 -
centos6.x下让redis以服务方式运行
1.从官网下载redis-2.8.9.tar.gz之后,将redis解压在/usr/local下,目录是redis-2.8.9,然后按照官网给出的办法安装redis即可。2.安装完在redis-2.8.9目录下执行src/redis-server然后在另一个shell窗口执行src/redis-cli,可以正确运行。但是我们显然想将之作为服务来启动运行。3.下面是将redi原创 2014-06-09 15:55:09 · 1737 阅读 · 0 评论 -
centos6.5安装apache2.x并修改默认80端口
因目前nginx已经成了主流反向代理软件,所以在linux服务器系统上,我们几乎都会安装nginx这个东东,这就给同时使用apache带来了麻烦,因为apache缺省使用的也是80端口。而更多时候,我们显然不想修改nginx的端口,于是只有修改apache的80端口。1.首先查找apache的httpd服务的配置文件httpd.conf,用rpm,yum等不同方式安装的apache的目原创 2014-05-26 10:41:16 · 1819 阅读 · 0 评论 -
centos6.x误删/sbin/service的恢复方法
因为执行rm命令时,不小心误删了/sbin/service这个非常重要的系统服务启动命令,于是赶紧上网搜索,居然完全搜索不到相关文章。下面是咨询了资深运维人员之后,给出的解决办法,现记录如下:首先执行yum,rpm命令查看一下相关软件包# yum list | grep initscriptsinitscripts.x86_64原创 2014-05-22 14:17:16 · 1733 阅读 · 0 评论 -
CentOS6.5使用yum命令方便快捷安装Nginx
当然,首先要求是可以联网的CentOS系统,因为yum安装需要互联网连接。1.为了追加 nginx 的 yum 仓库,需要创建一个文件 /etc/yum.repos.d/nginx.repo,并将下面的内容复制进去: [nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/$rele原创 2014-04-17 14:00:49 · 1068 阅读 · 0 评论 -
Tomcat7.x时区问题导致时间获取不正确
最近在开发中遇到一个非常罕见的问题,就是centos测试服务器上的时间虽然正确,但是安装在上面的Tomacat7.x的时间时区出现错误。我的程序代码中,恰好使用了对时间查询的sql语句,例如select from table where sendtime = #{nowtime}此时执行远程单步调试,发现代码中new Date()取得的当前时间nowtime,比正确的时间晚13个小时,原创 2014-01-28 11:38:59 · 2807 阅读 · 0 评论