自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

我写我所想!

相信与不相信都是矛盾的!

  • 博客(40)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 教你如何把openfire的muc聊天室改造为群

openfire群聊与QQ群对比应该是去年的时候开始接触openfire,当时在分析后发现基于xmpp协议的openfire已经具备了群聊的功能。也就没太当回事,觉得加点功能就可以做成类似于QQ群的那种模式。后来仔细了解后才发现并不是这么简单:muc其实聊天室的形式,房间创建后可以加入聊天,用户离开就退出聊天室了,并没有一个用户固化的功能,所以要单独为这部分开发 muc因为没有固化的成员...

2019-09-17 09:52:48 599

原创 阿里云SLB出现502 Bad Gateway 错误排查解决方法

502 Bad Gateway The proxy server received an invalid response from an upstream server.原本系统是通过一个SLB转发到后端ECS上的nginx,由我们自己的Nginx再反向代理了各类服务器,毕竟使用了SLB了就打算去掉nginx。分拆后发现文件服务器的SLB映射好后报了上面的502错误。负责阿里云申请的同学...

2019-02-21 09:54:10 5712

原创 XMPP协议之消息回执解决方案

苦恼中寻找方法 在开始做即时通信时就知道了消息回执这个概念,目的是解决通讯消息因为各种原因未送达对方而提供的一种保障机制。产生这个问题的原因主要是网络不稳定、服务器或者客户端一些异常导致没有接收到消息。因为产品中使用的是openfire和spark的组合,所以一直就想在这个范围内找一个现成的方案,只不过通过阅读一些开发者的总结提到说openfire没有消息回执的方案。于是也看到了别人的方案:发送者

2017-05-31 17:51:10 5202

原创 使用js在网页上记录鼠标划圈的小程序

Spin-Wheel实现鼠标在网页上转圈时记录转动圈数的小程序,每转一圈记录一次,同时要是顺时针方向的。问题分析与实现这个小程序的难点在于如何知道鼠标完成了一个转圈的动作,而且人工使用鼠标划圈时也不会是一个标准的圆,通常都是很不规律的。这点上我网上找了找发现浏览器的鼠标手势实现了。而且我找了一个人实现的手势识别,是通过计算两个点形成的角度来判断,我开始也觉得这种方法不错。但是我在具体实现的时候想到了

2017-03-09 11:58:05 831

原创 数据库SQL,NoSQL之小感悟

遇到1000万数据表最近遇到一个问题,就是单表数据过的存储及查询问题。举个例子:1000万的数据存在一个表中,字段4-5个样子,日常 开发中难免要做过滤、排序、分页。如果把这几个放在一起即要过滤又要排序,还要分页那么数据量大一些就会发现特别慢。10多年前刚入行时就听许多的人讨论分页,说什么1000万大表分页存储过程啥的。我之后一直工作中也没怎么遇到大数据量的开发工作,也真是惭愧啊,现在算是补补课吧。

2017-02-09 16:49:10 855

原创 MongoDB安装与使用体验

1、获取并安装具体的安装包可以到官方网站下载:http://www.mongodb.org/downloads 我看着教程就下载了linux版本吧,也不是很复杂。包的体积有点大。安装过程比较简单,将文件丢到服务器里,然后解压运行./mongod即可。可以参考:http://www.runoob.com/mongodb/mongodb-linux-install.html2、Shell连接测试我在自

2017-02-08 15:55:45 527

原创 缓存遇到的数据过滤与分页问题

遇到的问题1、最初阶段系统中做了一个监控功能,用于记录所有的请求数据,数据插入频繁,量非常大,比如一天1000万条。考虑到数据插入的效率,就使用内存KV缓存来保存。写入过程是在接收到请求后放入到线程池中,然后线程池异步处理后写入。到这问题基本上没什么事情。2、新的需求后面数据保存了,就需要在运维系统中可以查询到,所以这个缓存还必须是分布式的。于是就换成了redis,这样系统都可以连接到。但是数据量太

2017-01-18 15:55:15 1807

原创 大龄程序员的未来

大龄的困惑一转眼工作已经在10年有余,想想如今的现状,实在有些蹉跎。。这两年开始对自己的未来有了许多的思考,特别是从上一家公司出来的时候感触特别的深。面对家庭与生活的压力,很多的无奈。在自己工作了这么多年的后又重新寻找工作,突然发现投简历(内推、猎头)是件很忧伤的事情。自己的未来是什么?怎么样才是自己最想要的未来?做技术还是做管理?回顾这些年历程,从一个写留言本都困难的垃圾毕业生,慢慢的写了一些软件

2016-12-19 10:55:14 5557 4

原创 Tomcat shutdown执行后无法退出进程问题排查及解决

问题定位及排查上周无意中调试程序在Linux上ps -ef|grep tomcat发现有许多tomcat的进程,当时因为没有影响系统运行就没当回事。而且我内心总觉得这可能是tomcat像nginx一样启动多个进程。后来测试在一次升级后反馈说怎么现在tomcat进程无法shutdown?这让我有点意外,看来这个问题并没有这么简单。于是开始思考问题会出在哪里。复现问题先是另外一台服务器部署,然后shut

2016-11-28 13:55:55 3642

原创 Apache Ignite之集群应用测试

集群发现机制在Ignite中的集群号称是无中心的,而且支持命令行启动和嵌入应用启动,所以按理说很简单。而且集群有自动发现机制感觉对于懒人开发来说太好了,抱着试一试的心态测试一下吧。在Apache Ignite中有三种自有的发现机制:组播、静态IP、组播+静态IP。下面就这几种来试一试吧。测试方法简述测试的方法主要是通过搭建2台tomcat服务器,使用nginx来代理这2台tomcat,tomcat服

2016-11-23 17:06:45 5495 1

原创 Ignite性能测试以及对redis的对比

测试方法为了对Ignite做一个基本了解,做了一个性能测试,测试方法也比较简单主要是针对client模式,因为这种方法和使用redis的方式特别像。测试方法很简单主要是下面几点:不作参数优化,默认配置进行测试在一台linux服务器上部署Ignite服务端,然后自己的笔记本作客户端按1,10,20,50,100,200线程进行测试测试环境说明服务器:[09:36:56] ver. 1.7.0#

2016-11-22 14:54:07 4874 1

原创 学习AOP之深入一点Spring Aop

上一篇《学习AOP之认识一下SpringAOP》中大体的了解了代理、动态代理及SpringAop的知识。因为写的篇幅长了点所以还是再写一篇吧。接下来开始深入一点Spring aop的一些实现机制。上篇中最后有那段代码使用了一个ProxyFactory类来完成代理的工作,从而实现了Aop的Around Advice,代码如下:package aop.demo;import org.springfram

2016-11-11 17:53:40 614

原创 学习AOP之认识一下Spring AOP

心碎之事要说知道AOP这个词倒是很久很久以前了,但是直到今天我也不敢说非常的理解它,其中的各种概念即抽象又太拗口。 在几次面试中都被问及AOP,但是真的没有答上来,或者都在面上,这给面试官的感觉就是java基础不行。可见这还是挺重要的一个概念。在看工作中也遇到了相关的问题,在RPC的一种实现机制里应用了AOP,结果各种类一直绕来绕去看着头都大了,这也就是没有对动态代理和aop有了解导致的。所以要好

2016-11-10 18:17:01 757

原创 ApacheIgnite高性能分布式网格框架-初探

Apache Ignite初步认识今年4月开始倒腾openfire,过程中经历了许多,更学到了许多。特别是在集群方面有了很多的认识,真正开始认识到集群的概念及应用方法。在openfire中使用的集群解决方案是代理+分布式内存。所谓代理便是通过一个入口转发请求到多个服务实例。而分布式内存就是解决服务实例间数据共享问题。通过这两步就可以搭建出一套水平扩展的集群系统。openfire使用的分布式内存计算框

2016-11-04 14:23:41 6522 3

原创 Openfire集群源码分析

如果用户量增加后为了解决吞吐量问题,需要引入集群,在openfire中提供了集群的支持,另外也实现了两个集群插件:hazelcast和clustering。为了了解情况集群的工作原理,我就沿着openfire的源代码进行了分析,也是一次学习的过程。 首先理解集群的一些简单概念集群的目的是让多个实例像一个实例一样运行,这样就可以通过增长实例来增长计算能力。也就是所谓的分布式计算问

2016-10-24 16:50:53 600

原创 Openfire的启动过程与session管理

说明 本文源码基于Openfire4.0.2。 Openfire的启动     Openfire的启动过程非常的简单,通过一个入口初始化lib目录下的openfire.jar包,并启动一个XMPPServer实例。 下面就是ServerStarter.start方法的代码片断: Class containerCla

2016-10-24 16:48:12 1001

原创 记一次tomcat线程创建异常调优:unable to create new native thread

测试在进行一次性能测试的时候发现并发300个请求时出现了下面的异常: HTTP Status 500 - Handler processing failed; nested exception is java.lang.OutOfMemoryError: unable to create new native thread看到这个异常有点发慌,毕竟并发程序写的少,突然来这么一个确实有点找不着背

2016-10-24 14:33:20 6079

原创 VisualVM通过jstatd方式远程监控远程主机

配置好权限文件[root@test bin]# cd $JAVA_HOME/bin[root@test bin]# vim jstatd.all.policy grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission;};执行命令启动jstatd -J-D

2016-10-20 17:38:16 1077

原创 也聊聊房价

房价高吗?打开手机新闻客户端就能发现大量的关于房价的讨论,有唱多的,也是唱空的。或许大多数人都会有这个疑问,房价高吗?最有趣的事情是加了一个同事群,大家每天聊的话题基本离不开房子。突然感觉和去年刚来杭州时同事都在聊股票情景如此相似呢?印象比较深的一个事情是群里有位同事几个月前还说着要将手上的一套房子以90万成本价卖掉,结果现在开价已经到130万了,呵呵。看到这个故事不知道心里是什么滋味?房价是否高这

2016-10-11 18:07:01 1365

原创 加深一下BlockingQueue的认识

认识BlockingQueueBlockingQueue是一种可以阻塞线程的队列,java中对这种队列提供了方法抽象,BlockingQueue则是抽象的接口。add:添加元素到队列里,添加成功返回true,由于容量满了添加失败会抛出IllegalStateException异常offer:添加元素到队列里,添加成功返回true,添加失败返回falseput:添加元素到队列里,如果容量满了会阻

2016-10-10 16:44:03 434

原创 java中的锁

java中有哪些锁这个问题在我看了一遍synchronized首先来看看用的比较多的synchronized,我的日常工作中大多用的也是它。synchronized是用于为某个代码块的提供锁机制,在java的对象中会隐式的拥有一个锁,这个锁被称为内置锁(intrinsic)或监视器锁(monitor locks)。线程在进入被synchronized保护的块之前自动获得这个锁,直到完成代码后(也可能

2016-09-28 17:34:05 1314

原创 Http状态码之:301、302重定向

概念 301 Moved Permanently 被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个URI之一。如果可能,拥有链接编辑功能的客户端应当自动把请求的地址修改为从服务器反馈回来的地址。除非额外指定,否则这个响应也是可缓存的。 新的永久性的URI应当在响应的Location域中返回。除非这是一个HEAD请求,否则响应的实体中应当包含指向新

2016-09-26 10:57:59 30274

原创 学点HTTP知识

不学无术又一次感觉到不学无术,被人一问Http知识尽然一点也没答上来,丢人丢到家了啊。平时也看许多的技术文章,为什么到了关键时刻就答不上来呢?确实发现一个问题,光看是没有用的,需要实践。看别人说的头头是道自己也觉得理解了,但发现再让自己复述一遍可能完全就答不上来。这就是因为看别人的文章更像看小说,脑子里跟着作者的思路感觉好像挺懂的,其实也就是过眼云烟。所以想要学好技术一方面是要看别人的总结,比如文

2016-09-23 11:00:05 575

原创 java中的字符串相关知识整理

字符串为什么这么重要写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生。每学一门编程语言就会与字符串这个关键词打不少交道。看来它真的很重要。字符串就是一系列的字符组合的串,如果写过C/C++的应该就了解,在字符串的操作上会有许多操作的函数与类,用于简化代码的开发。一方面是因为字符串在代码中会频繁用到,另一方面是因为字符串的操作非常麻烦。最初我知道String的特殊待遇就是在del

2016-09-21 14:45:10 471

原创 在Openfire上弄一个简单的推送系统

推送系统说是推送系统有点大,其实就是一个消息广播功能吧。作用其实也就是由服务端接收到消息然后推送到订阅的客户端。思路对于推送最关键的是服务端向客户端发送数据,客户端向服务端订阅自己想要的消息。这样的好处就是有消息后才向客户端推送,相比于拉取数据不会产生许多无效的查询,实时性也高。xmpp这种即时通信协议基于TCP长连接还是比较符合这种场景的。只需要在服务端增加一个模块用于接收用户订阅与数据的推送就完

2016-09-13 09:52:16 2651 3

原创 ThreadLocal简单理解

在java开源项目的代码中看到一个类里ThreadLocal的属性:private static ThreadLocal clientMode = new ThreadLocal印象中在看书的时候见到过ThreadLocal,但突然就想不起它的用处了。。心里一惊感觉当时书白看了。于是马上网上查了查。 原来它的意思是线程的本地变量,ThreadLocal更

2016-08-22 14:57:57 444

原创 聊聊从web session的共享到可扩展缓存设计

先从web session的共享说起 许多系统需要提供7*24小时服务,这类系统肯定需要考虑灾备问题,单台服务器如果宕机可能无法立马恢复使用,这必定影响到服务。这个问题对于系统规模来说,从小到大可能面临的难度会相差很大。但对于原理来说其实就是需要准备备份系统随时可以替代正在服务的系统,也就是无论何时都有服务器可以提供服务。也就是灾备系统或者负载均衡。 提供灾备系统或者负载均衡系

2016-08-19 18:43:22 1413

原创 学习笔记:java线程安全

首先得明白什么是线程安全:线程安全是编程中的术语,指某个函数 (计算机科学)、函数库在多线程环境中被调用时,能够正确地处理各个线程的局部变量,使程序功能正确完成。这是维基百科里的资料,看完后还不是特别的明白。我自己的理解就是在多线程环境下,某块代码中访问的资源不会发生冲突。 写这篇笔记的起因是上周的支付宝电话面试中问了我一个线程安全的问题,就是有一个类,他的方法A是加了syn...

2015-03-06 09:50:41 128

原创 (程序)八荣八耻

以动手实践为荣,以只看不练为耻。以打印日志为荣,以出错不报为耻。以局部变量为荣,以全局变量为耻。以单元测试为荣,以手工测试为耻。以代码重用为荣,以复制粘贴为耻。以多态应用为荣,以分支判断为耻。以定义常量为荣,以魔法数字为耻。以总结思考为荣,以不求甚解为耻。

2007-06-08 22:44:00 882

原创 快乐的IT时代

     IT这个词汇不知道是从何时道起,已经伴随着人类走到了2007年.如今的IT业已经是传统行业大军中的一位干将,充斥着世界各个角落.作为一个“IT人”,心中盹感快意!     记得有一次与同事聊天说道其家里的产业,我叫他去接受并发展下,没想同事却回道:“我爸那份黄昏产业有什么做头!”,我哑然!~~~ 这让我想起了一个久未提及的词汇:“朝阳行业”,IT业可以说是一个实足的“朝阳行业”啦!有

2007-02-27 22:59:00 1029

原创 写博客后感

 写博客后感——GOOGLE现象将走向何方? 后续  前两天写了一篇GOOGLE现象将走向何方?得到了一些关注,有网友说看我的文章看不懂,有朋友也说我写的好抽象。我在写这篇文章时比较突然,只是兴起!写完没有检查,直接就发出去了。没想过有这么多朋友会去注意。第二天查看博客访问量后才知道上了CSDN的头条,于是马上修改了一下,文章才有了一些可读性。呵呵。  不仅仅是这篇文章,以前也过类似的

2007-01-20 02:08:00 1013

原创 Vista初体验之后续

上一次我写了有关使用VISTA的一点点感受,微软做的东西还是挺不错的,只是世界上各种情况太多了,他也无法做完美,当然,微软过失也是不少的............................回到正题.这两天拿VISTA想娱乐一下, IE7是没问题了,不知道其他的浏览器是否能在VISTA中使用呢?此时想到FireFox2,我在XP下安装有,于是直接就打开,哈哈,果然可以使用,没有出现什么情况,

2007-01-14 00:00:00 1063

原创 VISTA初体验

 前几天装了个VISTA体验了下,确实比较爽,相比以前版本的WINDOWS确实有了些质的改变。以下我说几点我感觉到的方面吧。       下面我就说几点有关界面的一些感觉吧:         1、整个的Explorer在界面上确实有了比较大的改变,界面华丽了不少,窗口有了透明效果。但我觉得这个没有什么太多的意思。只不过窗口有了动画效果,让用户不会感觉到窗口在状态改变中的一些迟延。      2

2007-01-07 04:46:00 1047

原创 2006年最后的发表

2006年最后的发表!不写东西,就是留做纪念! 

2006-12-31 23:59:00 860

原创 CSDN的BLOG怎么要进入管理界面搞的这么麻烦?

CSDN的BLOG怎么要进入管理界面搞的这么麻烦?不能在个人首页上加个连接直接到后台吗?是否有其他方法可以到后台????郁闷呀.. 

2006-12-28 12:53:00 1021

原创 BT下载 BitComet

这两天为了下VISTA,弄了BT下载,传说中这玩意神奇,这两天果然让我见识了..是挺爽,但是就是条件太多. 我是上海市有线通网络,1M的带宽.平时HTTP,FTP下载最大速度在120K/S.感觉一般.前两天周未突然想起下个VISTA玩下(刚买了个电脑,试下新系统),在网上找了半天都是BT版的下载,有点郁闷,之前我对这玩意不是很在意,几乎是不用,所以也没有细了解这里面的原理,只知道是个点对点的传输罢

2006-12-26 23:07:00 2075

转载 关于代码规范我想说这些。

引用CSDN社区的一个贴子。关于说DELPHI代码规范的问题。http://community.csdn.net/Expert/topic/5241/5241608.xml?temp=.8488123 看完之后,我觉得挺有意思,其实这些东西平时都跟大家讨论的一样,都是这么过来的,反正嘛觉得对于新手来说很有意义。所以就转来,与大家一起分享下。。顺便也献上本人的一些支言片句:1、关于WIT

2006-12-21 19:56:00 993

原创 关于学历我想说这些

今天看见一篇谈及中专生年收入过10W的文章,看完文章及讨论之后,有感而发.在这里来两句!         我个人认为在现在的社会学历上无需太看重,重应在于学与进。基本上你目前的状况无不与你自己的努力有关,也许你会想说“我努力过,但是现实社会不接受我们!”,我想这可能主要问题还是出在自己身上,谁不接受你(我不仅仅指一些低学历,在这同指高学历)?我记得以前看过一篇文章,介绍说自己是从美国回来的,大体就

2006-12-19 21:39:00 1203 3

原创 关于初学面向对象的几点表述

面向对象是做软件开发的基础,如果这一个最最重要的思想都没有掌握的话,估计谈不上是程序员!在此本人吹吹牛皮,嘿嘿,谈谈我学习面向对象的一些方法和建议!只是初级的哦!        第一,找准一种面向对象的语言,目前来说,JAVA,PASCAL,C++,C#都是比较好的,只不过JAVA和C++之类过于烦琐,而且难度相对于来说高些。所以本人建议用PASCAL 或者C#来说,C#就要做VS。NET了,所以

2005-02-05 15:48:00 1218

原创 学生必读!!~~~

        有些言过其实了。        目前在各大技术论坛中,在广大的开发人员中,在全面的学生团体中,都在讨论一个问题:“什么开发工具好?”这个问题无数人都为之迷茫过,也有无数的人又接着迷茫。        其实我个人认为,有此迷茫是正常的,在MS和BROLAND之间在开发工具的争抢之下,让广大的开发人员都失去了思想,失去了理性,各说各的好,试问:“难道都不好?难道又都好?”在目前没有哪个

2005-02-03 23:04:00 1350

MiniGrid,一款基于delphi TStringGrid的支持单元格合并的控件

一款基于delphi TStringGrid的表格控件,主要目的是提供一个可以非常简单易用且容易使用的单元格合并表格。 已经实现: 单元格合并 可以支持单元格的合并,使用方法示例: miniGrid.MergeCells(1, 1, 1, 1);//以第一列第一行为准,合并1列和1行 miniGrid.MergeCells(3, 3, 0, 1);//以第三列第三行为准,合并0列和1行 单元格自动超链接自动识别 使用示例: miniGrid.Cells[4,1] := 'http://www.cnblogs.com/5207/'; miniGrid.Cells[4,2] := 'mini188';

2016-01-26

空空如也

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

TA关注的人

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