12 2011 档案

摘要:在我们的项目中遇到这样一个问题:我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库。我们以往在spring和hibernate框架中总是配置一个数据源,因而sessionFactory的dataSource属性总是指向这个数据源并且恒定不变,所有DAO在使用sessionFactory的时候都是通过这个数据源访问数据库。但是现在,由于项目的需要,我们的DAO在访问sessionFactory的时候都不得不在多个数据源中不断切换,问题就出现了:如何让sessionFactory在执行数据持久化的时候,根据客户的需求能够动态切换不同的数据源?我们能不能在sprin 阅读全文
posted @ 2011-12-26 11:31 balaamwe 编辑
摘要:Open Session In View探讨作者 johnsonchen 目标文章项目日志- 2006-05-12提出:session在应用层就关闭,所以持久化要在应用层,但是到了view层持久化则session已经关闭解决:session延迟到view层再关闭原理:session(整个requestScope)FlushMode-->FlushMode.NEVER,(read only 则自动-->FlushMode.AUTO,前提:拥有transaction)。手动解决方案:session.setFlushMode(FlushMode.AUTO);session.save(us 阅读全文
posted @ 2011-12-26 11:08 balaamwe 编辑
摘要:http://www.itivy.com/ivy/archive/2011/3/7/634351294385186067.htmlFlickr.com 是网上最受欢迎的照片共享网站之一,还记得那位给Windows Vista拍摄壁纸的Hamad Darwish吗?他就是将照片上传到Flickr,后而被微软看中成为Vista壁纸御用摄影师。Flickr.com 是最初由位于温哥华的Ludicorp公司开发设计并于2004年2月正式发布的,由于大量应用了WEB 2.0技术,注重用户体验,使得其迅速获得了大量的用户,2007年11月,Flickr迎来了第20亿张照片,一年后,这个数字就达到了30亿, 阅读全文
posted @ 2011-12-25 18:08 balaamwe 编辑
摘要:http://www.ibm.com/developerworks/cn/java/j-jtp11234/十五年前,多处理器系统是高度专用系统,要花费数十万美元(大多数具有两个到四个处理器)。现在,多处理器系统很便宜,而且数量很多,几乎每个主要微处理器都内置了多处理支持,其中许多系统支持数十个或数百个处理器。要使用多处理器系统的功能,通常需要使用多线程构造应用程序。但是正如任何编写并发应用程序的人可以告诉你的那样,要获得好的硬件利用率,只是简单地在多个线程中分割工作是不够的,还必须确保线程确实大部分时间都在工作,而不是在等待更多的工作,或等待锁定共享数据结构。问题:线程之间的协调如果线程之间不 阅读全文
posted @ 2011-12-25 17:35 balaamwe 编辑
摘要:Linux下scp的用法scp就是secure copy,一个在linux下用来进行远程拷贝文件的命令。有时我们需要获得远程服务器上的某个文件,该服务器既没有配置ftp服务器,也没有做共享,无法通过常规途径获得文件时,只需要通过简单的scp命令便可达到目的。一、将本机文件复制到远程服务器上#scp /home/administrator/news.txt root@192.168.6.129:/etc/squid/home/administrator/ 本地文件的绝对路径news.txt 要复制到服务器上的本地文件root 通过root用户登录到远程服务器(也可以使用其他拥有同等权限的用户). 阅读全文
posted @ 2011-12-25 17:32 balaamwe 编辑
摘要:http://www.ladylan.com/?p=137Starling是一个使用Memcached协议的,轻量级的消息队列服务器,从它被开发至今已经有一段时间了。Starling使得为多个进程和多个主机之间的并行作业编写一个可通过网络访问的消息队列(或多个消息队列),变得极其容易。Starling由Twitter开发,并用于处理其系统内的产生的大量的消息队列。Starling 在实际应用中已经得到了验证,并且不仅仅只有Twitter自己在使用,另一家公司FiveRuns也在使用Starling。FiveRuns 甚至创建了他们自己的Starling 版本,按照他们的说法,Starling是 阅读全文
posted @ 2011-12-25 17:30 balaamwe 编辑
摘要:ACID性质是数据库理论中的奠基石,它定义了一 个理论上可靠数据库所必须具备的四个性质:原子性,一致性,隔离性和持久性。虽然这四个性质都很 重要,但是隔离性最为灵活。大部分数据库都提供了一些可供选择的隔离级别,且现在许多库都增加了附加层来创建颗粒度更细的隔离。隔离级别应用范围如此之广 主要是因为放宽隔离约束往往会使得可扩展性和性能提高几个数量级。 并发控制的主要目标是为了确保事务被隔离且不会影响到其他事务。要达到高级别的隔离需以牺牲性能为代价。并发控制可以用悲观或者乐观的机制来实现。 大部分关系型数据库都使用了悲观机制来实现写入优化。悲观机制采用了锁,通过使用锁它可以阻塞一些操作或者进... 阅读全文
posted @ 2011-12-25 13:48 balaamwe 编辑
摘要:转自http://www.cnblogs.com/owenliang/archive/2011/12/05/2276264.html众所周知, 因为现在各个UNIX分支均提供了高效了"I/O复用"接口, 比如Linux下常用的epoll, 支持N万连接仍可保证高效的事件通知 .也正是因为从以前select这种传统的事件驱动接口的存在, 所以依靠的事件驱动思想进行异步服务器开发的思想遍地开花 .Apache是靠进程/线程的数量来撑起并发接入量的, 也就是绝大多数初次接触网络编程的朋友常用的技巧, 一个Client对应一个Thread提供服务.但Apache随着时代的进步也在不 阅读全文
posted @ 2011-12-24 21:01 balaamwe 编辑
摘要:作者:Fenng|可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址:http://www.dbanotes.net/arch/c10k_c500k.html还在谈C10K的问题?这个已经过时了,现在大家已经开始说C500K。国外的Urban Airship公司的工程师在其官方网志上发文章介绍他们在产品环境中做到 50 万并发客户端,Java + Pure NIO 的实现,最近又有文章介绍针对 Linux Kernel 调优的经验:Linux Kernel Tuning for C500k。并且指出了"单个IP最大并发数量上限为64K" 只是一个误解。硬 阅读全文
posted @ 2011-12-24 20:10 balaamwe 编辑
摘要:作者:Fenng|可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址:http://www.dbanotes.net/arch/facebook_arch_note.html在 QCon 2008 (旧金山站) 上Facebook 做的这个技术分享有不少值得借鉴的东西。所以,暂停对 QCon 北京的回顾,临时插播一贴。设计原则尽可能的使用开源软件,并且在需要优化的时候进行优化Unix 哲学。包括,模块化原则;整合化原则;清晰化原则等任何组件具备扩展性最小化故障影响简化,简化,简化!架构概览Facebook 是 LAMP 的坚定支持者,也差不多是用 LAMP (或许用 LAM 阅读全文
posted @ 2011-12-24 20:07 balaamwe 编辑
摘要:来自http://www.cnblogs.com/fll/archive/2008/05/17/1201540.htmlThe C10K problem如今的web服务器需要同时处理一万个以上的客户端了,难道不是吗?毕竟如今的网络是个big place了。现在的计算机也很强大了,你只需要花大概$1200就可以买一个1000MHz的处理器,2G的内存, 1000Mbit/sec的网卡的机器。让我们来看看--20000个客户,每个为50KHz,100Kbyes和 50Kbit/sec,那么没有什么比为这两万个客户端的每个每秒从硬盘读取4千字节然后发送到网络上 去更消耗资源的了。可以看出硬件不再是瓶 阅读全文
posted @ 2011-12-24 20:06 balaamwe 编辑
摘要:搞技术的人,时间长了,就经常会听人说san,nas,到底这两个有什么区别呢?我就知道一点,san比较贵,(当时记不住,后来想sun的服务器也是最贵的,刚好san也是贵的)看了这篇文章,总算明白了san,和nas的区别了http://bbs.51cto.com/thread-28029-1-1.html他们最大的区别就是SAN结构中,文件管理系统(FS)还是分别在每一个应用服务器上;而NAS则是每个应用服务器通过网络共享协议(如:NFS、CIFS)使用同一个文件管理系统。换句话说:NAS和SAN存储系统的区别是NAS有自己的文件系统管理。(我的理解不知道对不对,如果是san,系统是2003,那么 阅读全文
posted @ 2011-12-24 19:54 balaamwe 阅读(273) 评论(0) 推荐(0) 编辑
摘要:LVS和Nginx都可以用作多机负载的方案,它们各有优缺,在生产环境中需要好好分析实际情况并加以利用。 首先提醒,做技术切不可人云亦云,我云即你云;同时也不可太趋向保守,过于相信旧有方式而等别人来帮你做垫被测试。把所有即时听说到的好东西加以钻研,从而提高自己对技术的认知和水平,乃是一个好习惯。下面来分析一下两者:一、lvs的优势: 1、抗负载能力强,因为lvs工作方式的逻辑是非常之简单,而且工作在网络4层仅做请求分发之用,没有流量,所以在效率上基本不需要太过考虑。在我手里的 lvs,仅仅出过一次问题:在并发最高的一小段时间内均衡器出现丢包现象,据分析为网络问题,即网卡或linux2.4... 阅读全文
posted @ 2011-12-24 19:43 balaamwe 编辑
摘要:在实际应用中,我们可能不想仅仅是把客户端的服务请求平均地分配给内部服务器,而不管服务器是否宕机。而是想使Pentium III服务器比Pentium II能接受更多的服务请求,一台处理服务请求较少的服务器能分配到更多的服务请求,出现故障的服务器将不再接受服务请求直至故障恢复等等。 选择合适的负载均衡策略,使多个设备能很好的共同完成任务,消除或避免现有网络负载分布不均、数据流量拥挤反应时间长的瓶颈。在各负载均衡方式中,针对不同的应用需求,在OSI参考模型的第二、三、四、七层的负载均衡都有相应的负载均衡策略。 负载均衡策略的优劣及其实现的难易程度有两个关键因素:一、负载均衡算法,二、对网络... 阅读全文
posted @ 2011-12-24 19:41 balaamwe 编辑
摘要:http://basiccoder.com/memcached-memory-mamagement.htmlMemcached的内存管理在网上也可以搜集到不少不错的文章,新浪的这篇《Memcached深度分析》讲得不错,读别人的文章还是不如自己直接去读源码分析源码来得直接,这里写一下我阅读Memcached源码时对于Memcached内存管理机制的理解。Memcached的代码结构很简单,从main()函数入口进去之后便是几个模块的初始化函数,和内存管理相关的主要有两个函数,一个是assoc_init(),这个是用来初始化哈希表的,关于这个哈希表的作用留在外面讨论,另一个是slabs_init 阅读全文
posted @ 2011-12-24 18:12 balaamwe 编辑
摘要:http://basiccoder.com/thread-model-and-state-machine-of-memcached.htmlMemcached是一种应用较广泛的分布式内存对象缓存系统,应用之余总想了解它的实现机理,这也就是开源的好处,以至于每接触一款优秀的开源软件都有去阅读它源代码的冲动,Memcached-1.4.7的代码量还是可以接受的,只有10K行左右,我比较关心的两个方面还是它的进程(线程)管理机制和内存管理机制,这里先简单写一下我对Memcached进程管理方面的理解。Memcached使用libevent实现事件循环,libevent在Linux环境下默认采用epo 阅读全文
posted @ 2011-12-24 18:10 balaamwe 阅读(716) 评论(0) 推荐(0) 编辑
摘要:原文地址:http://blog.csdn.net/helenhf/archive/2007/03/20/1534573.aspx根据APUE,程序分为下面的段:.text, data (initialized), bss, stack, heap。data/bss/text:text段在内存中被映射为只读,但.data和.bss是可写的。bss是英文Block Started by Symbol的简称,通常是指用来存放程序中未初始化的全局变量的一块内存区域,在程序载入时由内核清0。BSS段属于静态内存分配。它的初始值也是由用户自己定义的连接定位文件所确定,用户应该将它定义在可读写的RAM区内 阅读全文
posted @ 2011-12-24 15:41 balaamwe 编辑
摘要:解决TCP网络传输“粘包”问题作者:杨小平 王胜开原文出处:http://www.ciw.com.cn/当前在网络传输应用中,广泛采用的是TCP/IP通信协议及其标准的socket应用开发编程接口(API)。TCP/IP传输层有两个并列的协议:TCP和UDP。其中TCP(transport control protocol,传输控制协议)是面向连接的,提供高可靠性服务。UDP(user datagram protocol,用户数据报协议)是无连接的,提供高效率服务。在实际工程应用中,对可靠性和效率的选择取决于应用的环境和需求。一般情况下,普通数据的网络传输采用高效率的udp,重要数据的网络传输 阅读全文
posted @ 2011-12-23 17:12 balaamwe 编辑
摘要:(1).窗口机制滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。下面举一个例子(假设发送窗口尺寸为2,接收窗口尺寸为1):分析:①初始态,发送方没有帧发出,发送窗口前后沿相重合。接收方0号窗口打开,等待接收0号帧;②发送方打开0号窗口,表示已发出0帧但尚确认返回信息。此时接收窗口状态不变;③发送 阅读全文
posted @ 2011-12-23 17:06 balaamwe 编辑
摘要:引言分片是分组交换的思想体现,也是IP协议解决的两个主要问题之一。在IP协议中的分片算法主要解决不同物理网络最大传输单元(MTU) 的不同造成的传输问题。但是分组在传输过程中不断地分片和重组会带来很大的工作量还会增加一些不安全的因素。我们将在这篇小论文中讨论IP分片的原因、原理、实现以及引起的安全问题。一、什么是IP分片IP分片是网络上传输IP报文的一种技术手段。IP协议在传输数据包时,将数据报文分为若干分片进行传输,并在目标系统中进行重组。这一过程称为分片(fragmentation)。二、为什么要进行IP分片每一种物理网络都会规定链路层数据帧的最大长度,称为链路层MTU(Maximum T 阅读全文
posted @ 2011-12-23 11:12 balaamwe 编辑
摘要:也许你在学习Linux操作系统,会遇到很多问题,这里为你讲解Linux系统Load average负载的知识,你可能对于 Linux 的负载均值(load averages)已有了充分的了解。负载均值在 uptime 或者 top 命令中可以看到,它们可能会显示成这个样子: load average: 0.09, 0.05, 0.01 很多人会这样理解负载均值:三个数分别代表不同时间段的系统平均负载(一分钟、五 分钟、以及十五分钟),它们的数字当然是越小越好。数字越高,说明服务器的负载越 大,这也可能是服务器出现某种问题的信号。 而事实不完全如此,是什么因素构成了负载均值的大小,以及如何... 阅读全文
posted @ 2011-12-22 14:05 balaamwe 编辑
摘要:http://hi.baidu.com/jabber/blog/item/8b739a456a8a493b87947313.htmlmemcacheq一个国内开发的message queue之性能研究2008-05-07 14:40XMPP中的presence适合用Message Queue的方式来实现,所以一直对快速的message queue实现比较关心。刚好在 memcachedb 上看到了一个memcacheq的项目,从字面上看就是一个mq的实现。因为它也采用memcache的协议,所以将以前做的memcachedb的性能测试程序稍微修改看了下结果,环境和前面一样,测试数据不承担任何责 阅读全文
posted @ 2011-12-22 13:59 balaamwe 编辑
摘要:日志原文:http://blog.sohu.com/people/!a2VmYW5sb3ZleXVuaW5nQHNvaHUuY29t/159962486.htmldu -sh * 查看当前目录下的文件夹大小du 命令用途概述磁盘使用。语法du[-a|-s] [-k] [-m] [-g][-l] [-r] [-x] [-H|-L][File ...]描述du命令显示用于文件的块的数量。如果指定的File参数实际上是一个目录,就要报告该目录内的所有文件。如果没有提供File参数,du命令使用当前目录内的文件。如果File参数是一个目录,那么报告的块的数量就是分配到目录中文件以及分配到目录自身的块之 阅读全文
posted @ 2011-12-21 18:01 balaamwe 编辑
摘要:Linux系统中在应用程序运行过程中经常会遇到程序突然崩溃,提示:Segmentation fault,这是因为应用程序收到了SIGSEGV信号。这个信号提示当进程发生了无效的存储访问,当接收到这个信号时,缺省动作是:终止w/core。 终止w/core的含义是:在进程当前目录生成core文件,并将进程的内存映象复制到core文件中,core文件的默认名称就是“core”(这是Unix类系统的一个由来已久的功能)。 事实上,并不是只有SIGSEGV信号产生coredump,还有下面一些信号也产生coredump:SIGABRT(异常终止)、SIGBUS(硬件故障)、SIGEMT(硬件故障)、S 阅读全文
posted @ 2011-12-21 17:42 balaamwe 编辑
摘要:LinuxCore Dump 配置与调试1.core文件的生成开关和大小限制---------------------------------1)使用ulimit-c命令可查看core文件的生成开关。若结果为0,则表示关闭了此功能,不会生成core文件。2)使用ulimit-cfilesize命令,可以限制core文件的大小(filesize的单位为kbyte)。若ulimit-cunlimited,则表示core文件的大小不受限制。如果生成的信息超过此大小,将会被裁剪,最终生成一个不完整的core文件。在调试此core文件的时候,gdb会提示错误。2.core文件的名称和生成路径------ 阅读全文
posted @ 2011-12-21 17:41 balaamwe 编辑
摘要:http://haobing2005.blog.163.com/blog/static/466678620097180467346/今天调试一个程序, 用到了core dump, 但是不知道是做什么用的,查了一下,明白了些, 记于此.什么是Core Dump?Core的意思是内存, Dump的意思是扔出来, 堆出来.开发和使用Unix程序时, 有时程序莫名其妙的down了, 却没有任何的提示(有时候会提示core dumped). 这时候可以查看一下有没有形如core.进程号的文件生成, 这个文件便是操作系统把程序down掉时的内存内容扔出来生成的, 它可以做为调试程序的参考.core dum 阅读全文
posted @ 2011-12-21 17:40 balaamwe 编辑
摘要:何谓 core? 在使用半导体作为内存的材料前,人类是利用线圈当作内存的材料(发明 者为王安),线圈就叫作 core ,用线圈做的内存就叫作 core memory。如今 ,半导体工业澎勃发展,已经没有人用 core memory 了,不过,在许多情况下, 人们还是把记忆体叫作 core 。 何谓 core dump? 我们在开发(或使用)一个程序时,最怕的就是程序莫明其妙地当掉。虽然系 统没事,但我们下次仍可能遇到相同的问题。于是这时操作系统就会把程序当掉 时的内存内容 dump 出来(现在通常是写在一个叫 core 的 file 里面),让 我们或是 debugger 做为参考。这个动作就 阅读全文
posted @ 2011-12-21 17:40 balaamwe 编辑
摘要:http://www.cnblogs.com/xzpp/archive/2010/08/07/1794745.html1. Git和GitHub简单文字说明Git是一个开源的分布式版本控制系统,用以有效、高速的处理各种规模的项目版本管理, 它是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件,后来得到广泛的使用。GitHub可以托管各种git库,并提供一个web界面,但与其它像 SourceForge或GoogleCode这样的服务不同,GitHub的独特卖点在于从另外一个项目进行分支的简易性。为一个项目贡献代码非常简单:首先点击项目站点的“ 阅读全文
posted @ 2011-12-21 14:20 balaamwe 编辑
摘要:http://www.cnblogs.com/xzpp/archive/2011/10/10/2206619.html1. core dump和heap dump文件core dump保存cpu,jvm相关的信息,主要保存的是java应用各线程在某一时刻的运行的位置,即执行到哪一个类的哪一个方法哪一个行上。javacore是一个文本文件,打开后可以看到每一个线程的执行栈,以stacktrace的方式显示。通过对javacore的分析可以得到应用是否“卡”在某一点上,即在某一点运行的时间太长,如数据库查询,长期得不到响应,最终导致系统崩溃。heap dump保存java程序内存使用情况。heap 阅读全文
posted @ 2011-12-21 14:14 balaamwe 编辑
摘要:http://www.360doc.com/content/11/1024/22/1671317_158816062.shtmlGCC 命令行详解 -L 指定库的路径 -l 指定需连接的库名1。gcc包含的c/c++编译器gcc,cc,c++,g++,gcc和cc是一样的,c++和g++是一样的,(没有看太明白前面这半句是什么意思:))一般c程序就用gcc编译,c++程序就用g++编译2。gcc的基本用法gcc test.c这样将编译出一个名为a.out的程序gcc test.c -o test这样将编译出一个名为test的程序,-o参数用来指定生成程序的名字3。为什么会出现undefined 阅读全文
posted @ 2011-12-13 18:36 balaamwe 编辑
摘要:转载自jackywdx最终编辑jackywdx转载自:http://forum.byr.edu.cn/wForum/disparticle.php?boardName=Linux&ID=14696&pos=11一般来说GDB主要调试的是C/C++的程序。要调试C/C++的程序,首先在编译时,我们必须要把调试信息加到可执行文件中。使用编译 器(cc/gcc/g++)的 -g 参数可以做到这一点。如:> cc -g hello.c -o hello> g++ -g hello.cpp -o hello如果没有-g,你将看不见程序的函数名、变量名,所代替的全是 运行时的内 阅读全文
posted @ 2011-12-13 15:38 balaamwe 编辑
摘要:http://hi.baidu.com/joysoftfan/blog/item/e6deaae459d7ae3ab9382035.html刘连春 关于memcached使用的两个坑2011-03-03 13:11关于slab之间无法共享内存:Memcached里的数据是按不同的size放在不同的slab里,每个slab有一个自己的LRU链表, slab占用内存的方式是只进不出,假设memcached内存上限为1000M,我存入1000M 100k大小的数据,过期时间都是1秒, 1秒后尝试set一条500k的数据就会失败,虽然前期的100k数据都是过期的,也没有办法将其它slab的内存“借”过 阅读全文
posted @ 2011-12-13 13:45 balaamwe 编辑
摘要:http://teamojiao.iteye.com/blog/456851最近在做一个内部测试工具类的优化工作中接触到了连接池, 对象池技术, 将原有的未使用连接池的数据库访问操作改成连接池方式.性能有了非常大的提升, 事实证明, 经过两次改造, 原来一个比较大的测试类需要500多秒, 第一次优化后只需要300多秒, 第二次改用连接池之后同一个测试类只需要80多秒.下面是改造过程中的一些总结.对象池就是以”空间换时间”的 一种常用缓存机制, 这里的”时间”特指创建时间,因此这也给出了对象池的适用范围:如果一种对象的创建过程非常耗时的话, 那么请使用对象池. 内部原理简单的说, 就是将创建的对 阅读全文
posted @ 2011-12-13 13:39 balaamwe 编辑
摘要:http://teamojiao.iteye.com/blog/456866什么是Future?用过Java并发包的朋友或许对Future (interface)已经比较熟悉了,其实Future本身是一种被广泛运用的并发设计模式,可在很大程度上简化需要数据流同步的并发应用开发。在一些领域语言(如Alice ML)中甚至直接于语法层面支持Future。这里就以java.util.concurrent.Future为 例简单说一下Future的具体工作方式。Future对象本身可以看作是一个显式的引用,一个对异步处理结果的引用。由于其异步性质,在创建之初,它所 引用的对象可能还并不可用(比如尚在运 阅读全文
posted @ 2011-12-13 13:37 balaamwe 编辑
摘要:转载自heyuejuan最终编辑heyuejuan/dev/shm/是linux下一个非常有用的目录,因为这个目录不在硬盘上,而是在内存里。因此在linux下,就不需要大费周折去建ramdisk,直接使用/dev/shm/就可达到很好的优化效果。/dev /shm/需要注意的一个是容量问题,在linux下,它默认最大为内存的一半大小,使用df -h命令可以看到。但它并不会真正的占用这块内存,如果/dev/shm/下没有任何文件,它占用的内存实际上就是0字节;如果它最大为1G,里头放有 100M文件,那剩余的900M仍然可为其它应用程序所使用,但它所占用的100M内存,是绝不会被系统回收重新划分 阅读全文
posted @ 2011-12-13 13:28 balaamwe 编辑
摘要:http://hi.baidu.com/rodimus/blog/item/c5455c389b168323b8998f18.html前面讨论的都是在源串里寻找单一的串。如果要同时寻找同个串的话,可以每个串都用一次单串的算法。这是可行的,只是效率上比较低。可以对前面的单串算法作适当的扩展,使它直接适应多串的情况。对于Shift-And算法,可以直接把几个串拼成一个串,当然前题是这些串的长度和小于等于计算机的字长。然后对初始状态作一下修改,对结束时判断是否成功作一下修改。就可以了。代码如下:(未测试)Multiple_Shift_And(char * s, int n, char ** p, i 阅读全文
posted @ 2011-12-12 17:27 balaamwe 编辑
摘要:转自http://happyiww.popo.blog.163.com/blog/static/922448320078682017946/Memcached 结构分析 Memcached是一个分布式的内存缓存库,正好自己想写个cache的模块,那么就偷偷师吧。 功能库看的是实现原理和思路,性能库看的是实现细节,memcahed是属于一个看性能的库(实现cache功能的模块很多,但是性能就有高低了)1、memcached的数据交互协议 memcached是分布式的内存缓存服务器,它是通过socket(tcp/udp/unixsock)与其他程序交换数据的,这样就需要一套协议来保证正常通信。 . 阅读全文
posted @ 2011-12-11 23:55 balaamwe 编辑
摘要:转自http://www.cnblogs.com/kucongzhi/archive/2011/10/27/2226947.htmlMemcached内存管理源码阅读memcache能进行快速地查找和良好的内存管理,得益于良好的hash查找和内存管理技巧.这两项功能主要由assoc.c和slab.c这两个文件来实现. 下面详细地分析一下每行代码实现slab.c#define POWER_SMALLEST 1 //slabclass数组的最小下标(slabclass 主要是来保存分配好的内存)#define POWER_LARGEST 200 //slabclass... 阅读全文
posted @ 2011-12-11 22:29 balaamwe 编辑
摘要:From:http://hi.baidu.com/fywsp/blog/item/b4fa990680129472030881e1.htmlI/O重定向详解及应用实例1、 基本概念(这是理解后面的知识的前提,请务必理解)a、 I/O重定向通常与 FD有关,shell的FD通常为10个,即 0~9;b、 常用FD有3个,为0(stdin,标准输入)、1(stdout,标准输出)、2(stderr,标准错误输出),默认与keyboard、monitor、monitor有关;c、 用 < 来改变读进的数据信道(stdin),使之从指定的档案读进;d、 用 > 来改变送出的数据信道(std 阅读全文
posted @ 2011-12-11 20:54 balaamwe 编辑
摘要:转载自http://www.aspdao.com/5180.htmlLinux下Makefile的automake生成全攻略文/余涛 作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便。一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的Makefile就不那么容易了。 在本文中,将给大家介绍如何使用autoconf和automake两个工具来帮助我们自动地生成符合自由软件惯例的Makefile,这样就可以象常见的GNU程序一样,只要使用“./configure”,“mak... 阅读全文
posted @ 2011-12-08 18:31 balaamwe 编辑
摘要:1.查看机器所有硬件信息:dmidecode |moredmesg |more这2个命令出来的信息都非常多,所以建议后面使用"|more"便于查看2.查看CPU信息 方法一: Linux下CPU相关的参数保存在 /proc/cpuinfo 文件里cat /proc/cpuinfo |more 方法二: 采用命令dmesg | grep CPU可以查看到相关CPU的启动信息 查看CPU的位数:getconf LONG_BIT3.查看Mem信息cat /proc/meminfo |more (注意输出信息的最后一行:MachineMem: 41932272 kB)free -m 阅读全文
posted @ 2011-12-08 16:22 balaamwe 编辑
摘要:中国首届微博开发者大会在北京举行,这是国内微博行业的首场技术盛宴。作为国内微博市场的绝对领军者,新浪微博将在此次大会上公布一系列针对开发者的扶持政策,以期与第三方开发者联手推动微博行业的整体发展。图为微博平台首席架构师杨卫华演讲。以下为演讲实录:大家下午好,在座的大部分都是技术开发者,技术开发者往往对微博这个产品非常关心。最晚的一次,是12点多收到一个邮件说想了解一下微博底层是怎么构架的。很多技术人员对微博的构架非常感兴趣,就是一个明星他有300万粉丝,这个技术怎么来实现?今天在这里跟大家分享一下微博的底层机构,让大家对微博的底层技术有更好的了解。另外不管是做客户端、1.0、2.0、论坛、博客 阅读全文
posted @ 2011-12-08 16:19 balaamwe 编辑
摘要:问:我该如何发现哪种服务正在某个特定端口上监听呢?我如何发现哪一个程序正在一个特定端口上监听呢? 答:在*NIX系统中,你可以使用下面的任何一个命令来得到在一个特定TCP端口上监听的列表。 Lsof:其功能是列示打开的文件,包括监听端口。 netstat :此命令象征性地展示各种与网络有关的数据和信息的内容。 Lsof命令示例 你可以输入下面的命令来查看IPv4端口: # lsof -Pnl +M -i4 你可以输入下面的命令来查看IPv6协议下的端口列示: # lsof -Pnl +M -i6 此例输出: 这里我们不妨解释一 下。第一栏是command,它给出了程序名称的有... 阅读全文
posted @ 2011-12-07 14:56 balaamwe 编辑
摘要:理解 JVM 如何使用 Windows 和 Linux 上的本机内存文档选项打印本页将此页作为电子邮件发送样例代码英文原文级别: 中级Andrew Hall, 软件工程师, IBM2009 年 5 月 11 日Java™ 堆耗尽并不是造成java.lang.OutOfMemoryError的惟一原因。如果本机内存耗尽,则会发生普通调试技巧无法解决的OutOfMemoryError。本文将讨论本机内存的概念,Java 运行时如何使用它,它被耗尽时会出现什么情况,以及如何在 Windows® 和 Linux® 上调试本机OutOfMemoryError。针对 AIX® 阅读全文
posted @ 2011-12-07 14:52 balaamwe 编辑
摘要:http://www.iteye.com/topic/976522目录内存管理简介 GC简介 好的Collector的特性 设计或选择Collector GC性能指标 分代GC Java Collector 快速内存分配GC根集合 Serial Collector Parallel Collector/Throughput Collector Parallel Compacting Collector Concurrent Mark Sweep Collector (CMS) 4种Collector的对比和适用场景。 Ergonomics GC调优 OutOfMemoryError freeM 阅读全文
posted @ 2011-12-07 14:49 balaamwe 编辑
摘要:http://www.open-open.com/lib/view/open1322743689780.htmlJava与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。概述:说起垃圾收集(Garbage Collection,下文简称GC),大部分人都把这项技术当做Java语言的伴生产物。事实上GC的历史远远比Java来得久远,在1960年诞生于 MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语言。当Lisp还在胚胎时期,人们就在思考GC需要完成的3件事情:哪些内存需要回收?什么时候回收?怎么样回收?经过半个世纪的发展,目前的内存 阅读全文
posted @ 2011-12-07 14:43 balaamwe 编辑
摘要:一个很特别的参数,影响关闭socket后的行为,是立即释放,还是进入TIME_WAIT状态并等 待一段时间(单位:秒)才释放。这个参数,在Socket中可以设置,在Mina2的IoService中也有setSoLinger设置。对于新bs3 框架的Service4Mina2s组件,可以通过以下两种方法设置。<prop key="m_solinger">1</prop><!-- ={-1 | 0 | nSec}--><property name="soLinger"><value>1</va 阅读全文
posted @ 2011-12-07 14:38 balaamwe 编辑
摘要:转http://unixboy.iteye.com/blog/174173堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。典型设置:java-Xmx3550m -Xms3550m -Xmn2g-Xss128k-Xmx3550m:设置JVM最大可用内存为3550M。-Xms3550m:设置JVM促使内存为3550m。. 阅读全文
posted @ 2011-12-07 14:24 balaamwe 阅读(270) 评论(0) 推荐(0) 编辑
摘要:http://www.cjsdn.net/post/print?bid=62&id=196304JVM参数调优是一个很头痛的问题,可能和应用有关系,下面是本人一些调优的实践经验,希望对读者能有帮助,环境LinuxAS4,resin2.1.17,JDK6.0,2CPU,4G内存,dell2950服务器,网站是http://shedewang.com一:串行垃圾回收,也就是默认配置,完成10万request用时153秒,JVM参数配置如下$JAVA_ARGS .= " -Dresin.home=$SERVER_ROOT -server -Xms2048M -Xmx2048M -X 阅读全文
posted @ 2011-12-07 14:19 balaamwe 编辑
摘要:JVM参数调优,这是很头痛的问题,设置的不好,JVM不断执行Full GC,导致整个系统变得很慢,网站停滞时间能达10秒以上,这种情况如果没隔几分钟就来一次,自己都受不了。这种停滞在测试的时候看不出来,只有网站pv达到数十万/天的时候问题就暴露出来了。要想配置好JVM参数,需要对年轻代、年老代、救助空间和永久代有一定了解,还要了解jvm内存管理逻辑,最终还要根据自己的应用来做调整。关于JVM参数上网一搜就能搜出一大把,也有很多提供实践的例子,我也按照各种例子测试过,最终还是会出现问题。经过几个月的实践改善,我就网站(要求无停滞时间)的jvm参数调优给出以下几条经验。1:建议用64位操作... 阅读全文
posted @ 2011-12-07 14:18 balaamwe 编辑
摘要:本文主要根据这篇PDF(GCTuningGuidelines)写成。首先是JDK1.5引入的新功能 Ergonomic Settings(自动优化的参数)对于有2块CPU和2GB内存及更佳配置的服务器,Sun的hotspot jdk默认设置了如下参数:-server :服务器模式编译-XX:+UseParallelGC 并行收集-Xms设置为服务器物理内存的1/64-Xmx设置为服务器物理内存的1/4(最大为1G)我在网上发现了这篇文章,也是根据那篇PDF写的,基本都翻译过来了,那我就不再做造轮子的过程了。有些自己的想法会用红色标出。摘自http://unixboy.javaeye.com/原 阅读全文
posted @ 2011-12-07 14:17 balaamwe 阅读(696) 评论(0) 推荐(0) 编辑
摘要:cn && 4star.cn ? pass : fail改为如下代码就好了:cn &amp;&amp; 4star.cn ? pass : failHTML特殊字符显示HTML字符实体(Character Entities)有些字符在HTML里有特别的含义,比如小于号<就表示HTML Tag的开始,这个小于号是不显示在我们最终看到的网页里的。那如果我们希望在网页中显示一个小于号,该怎么办呢?这就要说到HTML字符实体(HTML Character Entities)了。一个字符实体(Character Entity)分成三部分:第一部分是一个&符号 阅读全文
posted @ 2011-12-06 15:44 balaamwe 编辑
摘要:Q: 我正在写一个unix server程序,不是daemon,经常需要在命令行上重启它,绝大多数时候工作正常,但是某些时候会报告"bind: address in use",于是重启失败。A: Andrew Gierthserver程序总是应该在调用bind()之前设置SO_REUSEADDR套接字选项。至于TIME_WAIT状态,你无法避免,那是TCP协议的一部分。Q: 如何避免等待60秒之后才能重启服务A: Erik Max Francis使用setsockopt,比如-------------------------------------------------- 阅读全文
posted @ 2011-12-06 15:37 balaamwe 编辑
摘要:ldconfig是一个动态链接库管理命令,为了让动态链接库为系统所共享,还需运行动态链接库的管理命令--ldconfigldconfig 命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件.缓存文件默认为 /etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表.ldconfig通常在系统启动时运行,而当用户安装了一个新的动态链接库时,就需要手工运行这个命令.ldconfig命令行用法如下 阅读全文
posted @ 2011-12-01 13:53 balaamwe 编辑
摘要:在linux下面工作,有些命令能够大大提高效率。本文就向大家介绍find、grep命令,他哥俩可以算是必会的linux命令,我几乎每天都要用到他们。本文结构如下:find命令find命令的一般形式find命令的常用选项及实例find与xargsgrep命令grep命令的一般形式grep正则表达式元字符集(基本集)grep命令的常用选项及实例1、find命令find命令是一个无处不在命令,是linux中最有用的命令之一。find命令用于:在一个目录(及子目录)中搜索文件,你可以指定一些匹配条件,如按文件名、文件类型、用户甚至是时间戳查找文件。下面就通过实例来体验下find命令的强大。1.1、fi 阅读全文
posted @ 2011-12-01 13:51 balaamwe 编辑
摘要:Linux 共享库 Linux 系统上有两类根本不同的 Linux 可执行程序。第一类是静态链接的可执行程序。静态可执行程序包含执行所需的所有函数 — 换句话说,它们是“完整的”。因为这一原因,静态可执行程序不依赖任何外部库就可以运行。 第二类是动态链接的可执行程序。 静态可执行程序与动态可执行程序比较 我们可以用 ldd 命令来确定某一特定可执行程序是否为静态链接的: # ldd /sbin/sln not a dynamic executable “not a dynamic executable”是 ldd 说明 sln 是静态链接的一种方式。现在,让我们比较 sln 与其... 阅读全文
posted @ 2011-12-01 13:40 balaamwe 编辑