- 博客(30)
- 收藏
- 关注
原创 在redis使用过程遇到的一些问题的总结
tpn(taobao push notification)在使用redis计算消息未读数的过程中,遇到了一系列的问题,下面把这个过程整理了一下,也让大家了解这个纠结的过程,供大家以后使用redis或者做类似的功能时进行参考 redis在tpn里面主要是用于计算移动千牛(Android、IOS)上的消息未读数。tpn的未读消息数是基于bizId维度的,即同一个bizId(每条消...
2014-07-07 21:20:25
1226
原创 一个“诡异”的NumberFormatException
前几天线上一个功能莫名其妙没有正常执行,而且奇怪的这个功能模块以及很久没有改动了,而且一直运行的好好的,从没出问题,今天排查看日志,发现是程序在进行一段内存排序时,抛NumberFormatException了。 Exception in thread "main" java.lang.NumberFormatException: For input string: "30d" 这...
2012-06-12 23:34:20
239
原创 由一个UndeclaredThrowableException带来的思考
前段时间在调试项目中某个功能的时候,由于是在测试环境中,所以在通过RPC框架调用某个远程服务获取相关信息的时候,抛出了一个UndeclaredThrowableException。JDK的java doc是这么解释UndeclaredThrowableException的:如果代理实例的调用处理程序的 invoke 方法抛出一个经过检查的异常(不可分配给 RuntimeException 或 ...
2012-05-16 22:06:23
1381
Redis数据结构分析
Redis有内存数据库的赞誉,其支持一下几种数据结构:1. String2. Hashes3. List4. Set本文从源代码角度来分析各种数据结构在Redis内部是如何存储和读取的。在介绍各种数据结构之前,首先来介绍下redis...
2011-12-25 21:00:11
137
Redis代码阅读3--Redis网络监听(3)
是介绍Redis网络监听的最后一篇文章,着重分析定时时间处理函数serverCron,这个函数其实已经和网络监听没多大关系了,当时因为其绑定在Redis自定义的事件库的定时事件上,所以放到一起来讲。serverCron的这个函数对Redis的正常运行来说很重要,对于Redis的使用者来说,最重要的就是能够迅速直观地看到Redis的当前的运行状况(keys,sizes,memory等),server...
2011-12-01 17:26:06
172
Redis代码阅读3--Redis网络监听(2)
这篇文章接上一篇,主要介绍Redis网络监听流程的各个步骤。aeCreateEventLoop:创建用于循环监听的eventLoop,Redis支持主流的三种事件触发机制:select ,epoll, kqueue,可以通过在config.h里面配置HAVE_EPOLL/HAVE_KQUEUE来根据不同的操作系统选择合适的机制:调用ae...
2011-12-01 17:25:13
112
Redis代码阅读3--Redis网络监听(1)
接下来的三篇文章将对Redis的网络监听流程及涉及到事件库和各个主要方法进行介绍。在介绍redis的网络监听流程和事件库之前,我们先设想一下,如果我们不采用libevent等流行的开源库进行基于事件的网络监听,而是自己去实现一套基于事件的库去进行网络监听,需要考虑些什么,然后我们带着这些问题去分析Redis是如果通过少量的代码来完成这个工作的。...
2011-12-01 17:24:32
100
Redis代码阅读1--Redis启动原理
前面写了一篇文章简单介绍Redis的list结构。再写完之后,我觉得有必要熟悉Redis的启动过程和如何读取Redis的命令,因此本文将通过分析代码来介绍Redis的启动过程,通过查看Redis 的启动脚本,得知Redis的启动时从Redis.c的main方法开始的。Redis启动可以分为以下几个步骤:初始化Redis服务器全局配置重置服务器Save参数(具体下文详解)和加载配置文...
2011-11-21 23:03:20
100
Mysql InnoDB的数据库的简易恢复
因为我们项目组和别的项目组共享一台测试机,昨天别的组的一个兄弟在升级mysql的时候把我们测试用的mysql给remove掉了,因此今天捣鼓了一下如何恢复和备份mysql,按惯例,记下来,以便以后查看。 使用过mysql的都知道,在mysql中建立任何一张数据表,在其数据目录对应的数据库目录下都有对应的.frm文件,.frm文件时用来保存每个数据库表的元数据(meta)信息,包括...
2011-11-06 20:32:38
126
ScheduledThreadPoolExecutor的scheduleAtFixedRate方法探究
ScheduledThreadPoolExecutor除了具有ThreadPoolExecutor的所有功能外,还可以延迟执行任务或者周期性的执行某个任务。scheduleWithFixedDelay和scheduleAtFixedRate就是用来完成这个功能的。平常使用scheduleAtFixedRate这个方法时并没有多想,但是这几天在实现一个功能的时候,需要考虑scheduleAt...
2011-10-31 23:04:06
463
Redis代码阅读2--Redis数据结构之链表
Redis是一个开源的高性能key-value数据库,其很大程度上弥补了memeched这类key-value存储的不足(除了支持String外,还支持Hash,Set,sorted set, List),在部分场合对关系型数据库也起到了很好的补充作用。因为Redis的代码量并不多,因为我逐步阅读了其源代码,以期能对其有深入的理解。首先介绍Redis支持的各种数据结构。 ...
2011-10-26 23:42:46
89
Linux下mysql的卸载和安装
工作中要在一台centos系统的机器上装mysql,而且这个机器上以前装过mysql了,所有还要把以前的装得mysql删除,然后再新装。由于以前没在linux上装过mysql,折腾了好一会才整好。因此记录下来,以备以后需要时查看。 第一,删除机器上已装的mysql.查找以前是否有安装过mysql rpm -qa|grep -i mysql删除mysql: rpm...
2011-09-23 22:26:16
88
把秒数转化为:小时:分:秒
今天在工作中有这么一个小功能需要实现,在DB里面,经过转码的video的duration是按秒来统计的,但是我们在页面显示的时候,一般都是这与显示的:小时:分:秒,04:34:45。所以就需要把秒转化为这个格式。代码很简单,这里记录下,以便以后查看 public static String getDuration(int durationSeconds){ int ...
2011-09-16 16:52:24
1442
如何处理网络异常的浅见
虽然说网络连接在大多数情况下,都是正常的,但大家在互联网上冲浪的时候,肯定都遇到过网络不正常的情况,比如大家在上XX网站的时候,经常会被提示:该网站暂不可用/该访问被拒绝/找不到该网站等等,你懂得。因此,网络是不可靠的,我们在网络编程的时候,也要时刻记住,网络是不可能一直正常的,在实现任何涉及网络连接的功能时,都必须考虑到如何处理各种网络异常。比如,有两个业务系统A和B,A需要调用...
2011-09-16 08:58:36
182
异常处理经验小结之二:利用Spring AOP将check exception 转化为unchecked exception
对于Exception的处理,究竟是采用check exception还是unchecked exception,众说纷纭,业绩很多大牛都有不同的意见,本文的关注点不在这个话题上,而是着重于,当我们程序中,需要把各种check exception转化为自定义的和业务逻辑相关的Runtime exceptionn的时候,如何利用Spring AOP来简化这一转化过程。 在实际工作中,如果我们也...
2011-08-14 13:00:22
264
异常处理经验小结之一:不要直接抛出InvocationTargetException
在最近一段时间的工作中,积累了几点异常处理的经验,怕时间久了就淡忘了,因此写下本文记录下来,一遍日后总结和查看。 1.在通过反射执行方法的时,如Method.invoke(),如果被反射执行的方法体抛出了Exception,这个异常会被包装成InvocationTargetException重新抛出,下面是jdk里面的源码: public Object invoke(Obje...
2011-08-14 12:27:40
583
Hadoop MapReduce中如何处理跨行Block和UnputSplit
Hadoop的初学者经常会疑惑这样两个问题:1.Hadoop的一个Block默认是64M,那么对于一个记录行形式的文本,会不会造成一行记录被分到两个Block当中?2.在把文件从Block中读取出来进行切分时,会不会造成一行记录被分成两个InputSplit,如果被分成两个InputSplit,这样一个InputSplit里面就有一行不完整的数据,那么处理这个InputSplit的Mapper会...
2011-06-03 21:41:00
183
Hadoop MapReduce数据流程(上)
本文不涉及MapReduce的原理介绍,只是从源代码的层面讲讲我对Hadoop的MapReduce的执行过程、数据流的一点理解。 首先贴上一张来之于Yahoo Hadoop 教程的图片 由上图可以看出,在进入Map之前,InputFormat把存储在HDFS的文件进行读取和分割,形成和任务相关的InputSplits,然后RecordReader...
2011-06-02 15:27:54
160
虚拟机ubuntu为什么不能上网?
今天在Work Station6.5下搭建了一个Ubuntu11.04,安装的时候网络模式选的是NAT。安装成功后,却发现不能上网,奇怪了,Nat模式是与宿主共享网络,物理机能上网,为什么虚拟机却不能上网。。。纠结啊。。。开始一步步找原因。。。折腾了小半会,终于查到问题。记录下来,以便以后查看。。。。 1. 在NAT模式下,虚拟机是通过VMnet8联网的,因此首先查看虚拟机的...
2011-05-23 21:50:54
339
一道网上流传的Google的多线程面试题的Java实现
逛论坛的看到一个疑似Google的多线程面试题,觉得挺好玩的,思考了一下。题目如下: 启动4个线程,向4个文件A,B,C,D里写入数据,每个线程只能写一个值。 线程1:只写1 线程2:只写2 线程3:只写3 线程4:只写4 4个文件A,B,C,D。 程序运行起来,4个文件的写入结果如下: ...
2011-05-19 15:26:57
152
Java Concurrency In Practice之Java非阻塞算法解析
基于锁得算法会带来一些活跃度失败的风险。如果线程在持有锁得时候因为阻塞I/O,页面错误,或其它原因发生延迟,很可能所有线程都不能前进了。一个线程的失败或者挂起 不应该影响其他线程的失败或挂起,这样的算法称为非阻塞(nonblocking)算法;如果算法的每一步骤中都有一些线程能够继续执行,那么这样的算法称为锁自由(lock-free)算法。在线程间使用CAS进行协调,这样的算法如果能...
2011-05-17 13:28:14
106
Non-Blocking stack和Block stack的插入时间对比
本文通过对实现了两个Stack,一个是基于非阻塞(Non-Blocking)算法,另一个是基于阻塞算法(Blocking)的,然后对这两个队列进行多线程环境下的大量Insert操作,通过比较二者的消耗时间,进而比较基于Volatile和CAS轮询操作的非阻塞算法和基于锁的阻塞算法在时间上的性能差异究竟有多大。 基于非阻塞算法的Stack public class Concurr...
2011-05-17 13:25:29
102
CyclicBarrier解析
CyclicBarrier是一个同步辅助类,允许一组线程相互等待,直到到达一个共同的barrier point。如果一组线程需要不定时地相互等待,这个时候就可以用到CyclicBarrier。CyclicBarrier之所以带“Cyclic”前缀,是因为当所有相互等待的线程释放后,Barrier可以被重复利用。 CyclicBarrier的构造函数为: public Cycl...
2011-05-09 18:39:20
71
如何尽可能地使10个线程同时开始工作
在多线程编程中,我们很难控制线程的具体启动时间,调用线程的Start()只是启动一个线程,使其处于就绪阶段,至于什么时候CPU开始执行线程Run方法,这是操作系统调度决定的,在理论上,如果有多个CPU,操作系统的调度可能使的多个线程真正同时开始,但是在单CPU的机器上,是没法做到多个线程真正同时启动的。我们只能尽可能地使得线程之间的启动间隔很短,模拟多个线程同时启动。下面这个程序模拟一个有10辆...
2011-05-06 22:34:37
1277
原创 Java Concurrency In Practice读书笔记之组合对象
组合对象这一章主要讲述的是如何将线程安全或者非线程安全的组件以一种安全的方式组合成更大的组件或程序,并如何保证不会让程序意外破坏这些组件的线程安全性 设计线程安全类的过程中的三个基本要素 对象状态-----变量 状态----变量---不变约束,后验操作 同步策略 任何一个类都是由各种自身的变量来维护其状态的,因此我们要设计一个线程安全的类必须...
2011-04-28 22:01:51
79
原创 Red5的丢包处理
在多媒体应用中,针对Client端的带宽情况,Server端对Video Data要进行不同的处理,当Client带宽比较差时,需要在Server端对不同的视频帧进行是丢弃处理,如在低带宽条件下,对于非关键帧,为了更好的用户体验性和播放的平滑性,可对其进行丢弃,而关键帧,则一般不给予丢弃。下面结合代码,详细分析下Red5是如何根据Client端的带宽进行丢包处理的。 Re...
2011-04-27 20:32:51
111
原创 为已有代码添加Unit Test Case所引发的问题和思考
因为项目组在实行Scrum,想在下一阶段的开发中实行TDD,因为我就为几个已经功能完善的模块添加Unit Test Case。在此过程中,就发现了一些问题。 问题一 在一个模块的一个主要业务方法中,需要从数据库中读取数据。 AllocateStream(String key, ServetlContext context){ ............
2011-04-23 22:44:31
109
原创 Javascript知识拾遗:动态创建方法+多个异步监测
这几天在做一个Web监测系统,需要对多个Server进行监测,采用的做法就是把需要监测的Server在页面上显示出来,然后通过Ajax对各个Server进行异步监测,开始的时候,针对每个Server,我都采用同一个JS方法循环和后台进行异步通信,结果程序一跑,发现根本不能做到同时异步监测多个Server,因此我想到了在Web页面Load的时候,根据后台返回的Server的个数,动态为每个S...
2010-12-13 21:18:10
104
JavaScript知识拾遗:如何获取动态表格中select控件的选中值
有很长一段时间没做Web前端开发了,这几天工作中做一个小项目需要做几个Web页面,其中涉及到一些JS的知识,很多都不怎么熟悉了,花了不少时间才完成工作需求。因此写几篇blog记录下来。 在一个Web页面中,有一个表格,其是根据Struts2的Iterator标签动态生成的,改表格的Html代码如下: <table width="550" id="serverT...
2010-12-13 19:18:40
403
原创 昨天的一个面试题:如何从存放在A和B中的一亿条URL中找出A中有而B中没有的URL...
A和B中各存放着一亿条不重复的URL,URL存放时无序的,且URL是没有特征的,A和B可以试任意数据结构,也可以是存在数据库中。 如何找出A中有而B中没有的URL。 我当时给出的思路是: 依次遍历A和B,把从A和B里取出来的URL进行hashcode变换,把每条URL转换成key。相同的URL转换成相同的hashcode,然后用这个hashcode充当数组的下标或者map的key,数组的元素或ma...
2010-09-28 11:12:33
143
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人