摘要:
Spring是一个强大的JAVA应用框架,广泛地应用于JAVA的应用程序。为Plain Old Java Objects(POJOs)提供企业级服务。Spring利用依赖注入机制来简化工作,同时提高易测性。Spring beans及依赖,以及beans类所需的服务都在配置文件中进行了详细的说明,这个配置文件是典型的XML格式。但是它既冗长又不实用。对于需要定义大量Spring beans的大工程来说,我们难以阅读和管理它。
在这篇文章里,对于Spring XML的配置,我将向你展示12种比较好的XML。其中的一些实践不仅是好的实践,更是必要的实践。除此以外,还有其他因素,例如领域模型的设计,都能影响XML的配置,但是这篇文章重点研究XML配置的易读性和易管理性。 阅读全文
随笔分类 - 转载
[转] Linux-2.6.32 NUMA架构之内存和调度
2012-03-21 13:22 by zhenjing, 9429 阅读, 收藏, 编辑
摘要:
本文将以XLP832通过ICI互连形成的NUMA架构进行分析,主要包括内存管理和调度两方面,参考内核版本2.6.32.9.NUMA(Non Uniform Memory Access)即非一致内存访问架构,市面上主要有X86_64(JASPER)和MIPS64(XLP)体系。
NUMA具有多个节点(Node),每个节点可以拥有多个CPU(每个CPU可以具有多个核或线程),节点内使用共有的内存控制器,因此节点的所有内存对于本节点的所有CPU都是等同的,而对于其它节点中的所有CPU都是不同的。节点可分为本地节点(Local Node)、邻居节点(Neighbour Node)和远端节点(Remote Node)三种类型。
本地节点:对于某个节点中的所有CPU,此节点称为本地节点;
邻居节点:与本地节点相邻的节点称为邻居节点;
远端节点:非本地节点或邻居节点的节点,称为远端节点。
邻居节点和远端节点,称作非本地节点(Off Node)。
CPU访问不同类型节点内存的速度是不相同的:本地节点>邻居节点>远端节点。访问本地节点的速度最快,访问远端节点的速度最慢,即访问速 阅读全文
[转] 大规模服务设计部署经验谈
2011-11-22 19:16 by zhenjing, 1266 阅读, 收藏, 编辑
摘要:
本文中提出的最佳实践,来自于作者多年大规模服务设计和部署的经验,为设计、开发对运营友好的服务提供了一系列良好的解决方案。基本原则:1. 做好发生故障的心理准备。2. 保持简单化。3. 将所有的工作自动化。
非常值得提供互联网服务的相关认识学习参看。 阅读全文
[转] 字符集编码(GBK,BIG5,UNICODE)与C++的string/wstring
2011-08-07 14:09 by zhenjing, 14787 阅读, 收藏, 编辑
摘要:
因处理中午需要,想搞懂如下几个问题:中文是否能够使用C++的string来存储?是否有截断问题?stirng和wstring到底是什么关系?在网上找了几篇文章,得出如下结论:string完全可以存储中文(有效编码只有'\0'=0,其他字符均不为0),但是在显示、字符操作等方面是无法保证的! 阅读全文
[转] Real-World Concurrency
2011-03-15 13:37 by zhenjing, 540 阅读, 收藏, 编辑
摘要:
1. Know your cold paths from your hot paths. 弄清楚代码里的热门执行路径和冷门执行路径。
2. Intuition is frequently wrong—be data intensive. 直觉常常是错的,要靠数据说话。
3. Know when—and when not—to break up a lock. 知道什么时候把一个锁拆成多个,并知道什么时候不必这样做。
4. Be wary of readers/writer locks. 警惕读写锁。
5. Consider per-CPU locking. 考虑用每个 CPU 用一个锁。
6. Know when to broadcast—and when to signal. 知道什么时候用单个唤醒,什么时候用广播唤醒。
7. Learn to debug postmortem. 学会验尸
8. Design your systems to be composable. 设计系统(s),使之能相互组合。
9. Don’t use a semaphore where a 阅读全文
[转] Policies/Binary Compatibility Issues With C++
2011-03-15 11:11 by zhenjing, 758 阅读, 收藏, 编辑
摘要:
C/C++ 的二进制兼容性 (binary compatibility)与ABI (application binary interface)关系甚大。到底如何判断一个改动是不是二进制兼容呢?这跟 C++ 的实现方式直接相关,虽然 C++ 标准没有规定 C++ 的 ABI,但是几乎所有主流平台都有明文或事实上的 ABI 标准。C++ ABI 的主要内容:
* 函数参数传递的方式,比如 x86-64 用寄存器来传函数的前 4 个整数参数
* 虚函数的调用方式,通常是 vptr/vtbl 然后用 vtbl[offset] 来调用
* struct 和 class 的内存布局,通过偏移量来访问数据成员
* name mangling
* RTTI 和异常处理的实现(以下本文不考虑异常处理)
C/C++ 通过头文件暴露出动态库的使用方法,这个“使用方法”主要是给编译器看的,编译器会据此生成二进制代码,然后在运行的时候通过装载器(loader)把可执行文件和动态库绑到一起。如何判断一个改动是不是二进制兼容,主要就是看头文件暴露的这份“使 阅读全文
[转] SQL和C数据类型的映射
2011-03-03 17:01 by zhenjing, 3257 阅读, 收藏, 编辑
摘要:
SQL Data Type 和 SQL和C数据类型的映射 阅读全文
[转] Buffer Overflows and You (下)
2011-03-03 11:59 by zhenjing, 810 阅读, 收藏, 编辑
摘要:
Got root?Gentlemen, we can root it. We have the technology. We have the capability to root yet another poor idiot's server on the int4rw3bs. Steve Austin will be that man. Better than he was before. Better, stronger, faster, errrr...We spent all that time developing a small bit of shellcode. Let 阅读全文
[转] Buffer Overflows and You (上)
2011-03-03 11:48 by zhenjing, 797 阅读, 收藏, 编辑
摘要:
Magical gnomes present: Buffer Overflows and You
Is it the 90's? Are you wondering why your server is running slow? Why it's trying to ping flood some host in California? Why someone else is logged into your machine and you've recently become a prominent porn hosting provider? This site will help you figure it all out. And if you have a time machine, you can probably go back and do it to someone else!
Before continuing, it's important to note that this guide is designed for 64-bit systems. 阅读全文
[转] my.cnf 配置选项
2011-02-25 15:40 by zhenjing, 318 阅读, 收藏, 编辑
摘要:
本文中的配置都是从《MySQL5权威指南(3rd)》中摘抄出来的,个人认为对于使用MySQL十分有用。放在此处方便自己随时查阅,也希望对其他朋友有所助益。 阅读全文
MySQL Transactions, Part III - BDB Tables, Table locking and Savepoints
2011-02-15 13:05 by zhenjing, 529 阅读, 收藏, 编辑
摘要:
MySQL Transactions, Part III - BDB Tables, Table locking and Savepoints 阅读全文
MySQL Transactions, Part II - Transaction Isolation Levels
2011-02-15 11:51 by zhenjing, 1002 阅读, 收藏, 编辑
摘要:
MySQL Transactions, Part II - Transaction Isolation Levels 阅读全文
[转载] 内存越界和泄露调试工具
2011-01-26 14:52 by zhenjing, 3066 阅读, 收藏, 编辑
摘要:
valgrind的介绍性文章,非常好的内存检查工具,且不止为内存工具。 阅读全文
[转载] 内存越界
2011-01-26 14:45 by zhenjing, 21709 阅读, 收藏, 编辑
摘要:
讨论Linux下,常见的内存问题:
1.内存重复释放,出现double free时,通常是由于这种情况所致。
2.内存泄露,分配的内存忘了释放。
3.内存越界使用,使用了不该使用的内存。
4.使用了无效指针。
5.空指针,对一个空指针进行操作。
常见的错误信息:
*** glibc detected *** free(): invalid pointer:
*** glibc detected *** malloc(): memory corruption:
*** glibc detected *** double free or corruption (out): 0x00000000005c18a0 ***
*** glibc detected *** double free or corruption (!prev): 0x0000000000a01f40 ***
*** glibc detected *** corrupted double-linked list: 0x00000000005ab150 *** 阅读全文
UNIX上C++程序设计守则(信号和线程)(下)
2010-12-23 12:01 by zhenjing, 8057 阅读, 收藏, 编辑
摘要:
准则4: 请不要做线程的异步撤消的设计; 准则5: 尽可能避免线程中做延迟撤销的处理; 准则6: 遵守多线程编程的常识 阅读全文
UNIX上C++程序设计守则(信号和线程)(上)
2010-12-22 12:00 by zhenjing, 3161 阅读, 收藏, 编辑
摘要:
Unix/Linux编写程序离不开信号、多进程/多线程,尤其是编写服务器程序。然而正确编写多进程/多线程程序是很难的事情。难不在于写出可工作的程序,而在于写出持续工作的程序。这篇文章是转载,关于这个话题,这是本人见过的最好的文章。推荐之。准则1:不依赖于信号收发的设计;准则2: 要知道信号处理函数中可以做那些处理;准则3:多线程程序里不准使用fork 阅读全文