自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 资源 (77)
  • 收藏
  • 关注

原创 Grep学习笔记

1. grep简介grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Unix的grep家

2011-07-17 19:52:44 834

原创 vim 常用插件推荐

1 程序设计1.1 Tag List下载地址: 官方站点官方描述: The “Tag List” plugin is a source code browser plugin for Vim and provides an overview of the structure of

2011-07-16 03:01:48 1404

原创 IO模式设置网络编程常见问题总结—IO模式设置,阻塞与非阻塞的比较,recv参数对性能的影响—O_NONBLOCK(open使用)、IPC_NOWAIT(msgrcv)、MSG_DONTWAIT(re

非阻塞IO 和阻塞IO:       在网络编程中对于一个网络句柄会遇到阻塞IO 和非阻塞IO 的概念, 这里对于这两种socket 先做一下说明:       基本概念:              阻塞IO::                     socket 的阻塞模式意味着必须要做完IO 操作(包括错误)才会                     返回。              非阻

2011-07-02 19:33:44 22552 6

转载 关于fflush(stdin)清空输入缓存流(C/C++)

<br />作者:蚂蚁的 C/C++ 标准编程<br />1.       为什么 fflush(stdin) 是错的<br /><br /><br /><br />首先请看以下程序:<br /><br /><br /><br />                   #include <stdio.h><br /><br /><br /><br />int main( void )<br /><br />{<br /><br />    int i;<br /><br />    for (;;) {<b

2011-04-30 02:28:00 2389

转载 stl容器学习总结

 <br />stl容器学习总结<br /><br />一 迭代器(iterator)<br />迭代器:<br />迭代器是类似指针的对象,STL算法利用它们对存储在容器中的对象序列进行遍历。<br />5种类别:1、输入迭代器    <br />         2、输出迭代器    <br />         3、前向迭代器    <br />         4、双向迭代器    <br />         5、随机访问迭代器  <br />常用的迭代器:<br /> istream_itera

2011-04-27 01:23:00 642

原创 stl中容器string vector list deque 比较

<br />在stl中基本容器有string vector list deque set map<br /><br /><br />set 和map都是无序的保存元素 只能通过它提供的接口对里面的元素进行访问<br /><br />set 集合, 用来判断某一个元素是不是在一个组里面 使用的比较少<br />map 映射 相当于字典 把一个值映射成另一个值 如果想创建字典的话使用它好了<br /><br /><br />string vector list deque set 是有序容器 <br /><br

2011-04-27 01:22:00 757

原创 AfxGetApp()->m_pMainWnd和AfxGetMainWnd() 的区别

<br />在多线程程序中<br />AfxGetApp()->m_pMainWnd 应用程序主线程的句柄,在一个多线程应用程序中是唯一的<br />AfxGetMainWnd() 调用线程的句柄,暨当前语句所在线程的句柄,不唯一。

2011-03-14 15:55:00 1397

原创 mysql修改表名,列名,列类型,添加表列,删除表列

<br />alter table old_talbe_name  rename new_table_name; --修改表名<br /><br />alter table table_name add  column colum_name varchar(10); --添加表列<br /><br />alter table table_name  drop  column colum_name; --删除表列<br /><br />alter table table_name modify colum_n

2010-12-05 22:57:00 611

转载 MySQL索引的查看创建和删除

1.索引作用 <br />在索引列上,除了上面提到的有序查找之外,数据库利用各种各样的快速定位技术,能够大大提高查询效率。特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍。 <br />例如,有3个未索引的表t1、t2、t3,分别只包含列c1、c2、c3,每个表分别含有1000行数据组成,指为1~1000的数值,查找对应值相等行的查询如下所示。 <br /><br />SELECT c1,c2,c3 FROM t1,t2,t3 WHERE c1=c2 AND c1=c3 <br

2010-11-03 14:56:00 842

转载 gcc命令行详解

<br />1。gcc包含的c/c++编译器 <br />gcc,cc,c++,g++,gcc和cc是一样的,c++和g++是一样的,(没有看太明白前面这半句是什 <br />么意思:))一般c程序就用gcc编译,c++程序就用g++编译 <br /><br />2。gcc的基本用法 <br />gcc test.c这样将编译出一个名为a.out的程序 <br />gcc test.c -o test这样将编译出一个名为test的程序,-o参数用来指定生成程序的名 <br />字 <br /><br />3

2010-10-28 16:37:00 869 1

转载 如何使用gcc编译器?

目录: GCC rules 开始... 预编译 编译 汇编 连接 另外两个重要选项 调试 小结 站点链接 <br /> <br />摘要: <br />要想读懂本文,你需要对C语言有基本的了解,本文将介绍如何使用gcc编译器。首先,我们介绍如何在命令行方式下使用编译器编译简单的C源代码。然后,我们简要介绍一下编译器究竟作了那些工作,以及如何控制编译过程。我们也简要介绍了调试器的使用方法。 <br /><br /> GCC rules <br />你能想象使用封闭源代码的私有编译器编译自由软件吗?你怎么知

2010-10-28 16:30:00 676

原创 在Ubuntu10.04 下编译《UNIX环境高级编程》(第二版)源码

 1、APUE2源代码下载:http://www.apuebook.com/src.tar.gz2、进入apue.2e文件夹下的Make.defines.linux, 修改WKDIR=/home/var/apue.2e为你的apue.2e目录,比如我的apue源码解压在/usr/local,那我就改为:WKDIR=/usr/local/apue.2e3、然后进入apue.2e/std 目录,编辑linux.mk,修改里面所有的nawk为awk4、apue.2e文件夹下的Make.defines.linu

2010-10-28 02:17:00 773

转载 Linux下的动态链接库

<br />动态库(Dynamic Link Library)(Linux下称共享对象技术ShareObject)的使用,其目的是减小程序大小,节省磁盘空间。Linux下的动态库文件命名通常为<name>.so,或<name>.so.<ver>。 下面主要对动态库的制作及使用作一个简单介绍。<br />1,动态库函数的制作.<br />1.1 动态库中的函数定义跟普通函数没什么区别.如下:<br />//func.c<br />void print(char *buf)<br /

2010-10-27 01:20:00 719

原创 linux静态链接库与动态链接库的区别及动态库的创建

一、引言通常情况下,对函数库的链接是放在编译时期(compile time)完成的。所有相关的对象文件(object file)与牵涉到的函数库(library)被链接合成一个可执行文件(executable file)。程序在运行时,与函数库再无瓜葛,因为所有需要的函数已拷贝到自己门下。所以这些函数库被成为静态库(static libaray),通常文件名为“libxxx.a”的形式。其实,我们也可以把对一些库函数的链接载入推迟到程序运行的时期(runtime)。这就是如雷贯耳的动态链接库(d

2010-10-27 01:15:00 605

原创 在Ubuntu10.04 下安装配置 jdk-6u22

<br />在UBUNTU 10.04下安装JDK 的 RPM包比较麻烦,这里我们介绍安装 jdk-6u22-linux-i586.bin 而不是jdk-6u22-linux-i586-rpm.bin.<br /> <br />1、官方网站下载 jdk-6u22-linux-i586.bin 并方到指定位置.<br />下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html<br /> <br /> 2、修改jdk-

2010-10-26 19:33:00 1145

原创 解决unix网络编程(第三版)第一个程序connect dennied.问题&Open 'daytiime' service

<br />到官方网站下载源代码,先看readme.里头教你怎么做的.<br /><br />如果你用ubuntu的话,在测试课本第5页的程序时,可能会遇到一个情况,connect dennied.<br /><br />那是因为你的daytime服务没有开。<br /><br />具体解决方案在<br />http://ubuntuforums.org/showthread.php?t=650791<br />摘录如下:<br />First, you'll need to install xinetd:

2010-10-26 17:06:00 620

转载 Tcpdump的使用

<br />tcpdump采用命令行方式,它的命令格式为:<br />  tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ]<br />          [ -i 网络接口 ] [ -r 文件名] [ -s snaplen ]<br />          [ -T 类型 ] [ -w 文件名 ] [表达式 ]<br /><br />  1. tcpdump的选项介绍<br />   -a    将网络地址和广播地址转变成名字;<br />   -d    将

2010-10-26 17:04:00 401

原创 ubuntu10.04 python django apache mysql mod_python python_mysql

在Ubuntu10.04下配置python django apache mysql开发运行环境。1.开发语言Python,Ubuntu10.04中自带Python2.65版本,如果要用这个基本不用再安装了。2.安装开发框架:Django1.2.1 :这是一个流行的基于Python语言的web开发框架。desktop:$ sudo apt-get install python-django如果使用这个命令,默认安装的是1.1.1版本。想要安装1.2.1或者更高的版本可以直接去网站下载。下面的命令是安装Djan

2010-10-26 17:02:00 1563

Beginning.PHP.and.MySQL,3rd.Edition

Beginning.PHP.and.MySQL,3rd.Edition.。。。。。。。。。。。。。。。。。。。。。

2011-04-29

OpenCV教程_基础篇_源码

OpenCV教程_基础篇_源码.。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

2011-04-29

基于OpenCV的计算机视觉技术实现_源码

基于OpenCV的计算机视觉技术实现_源码。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

2011-04-29

学习OpenCV(中文版) PDF

内容简介 《学习OpenCV》:计算机视觉是在图像处理的基础上发展起来的新兴学科。OpenCV是一个开源的计算机视觉库,是英特尔公司资助的两大图像处理利器之一。它为图像处理、模式识别、三维重建、物体跟踪、机器学习和线性代数提供了各种各样的算法。 本书由OpenCV发起人所写,站在一线开发人员的角度用通俗易懂的语言解释了OpenCV的缘起和计算机视觉基础结构,演示了如何用OpenCV和现有的自由代码为各种各样的机器进行编程,这些都有助于读者迅速入门并渐入佳境,兴趣盎然地深入探索计算机视觉领域。 本书可作为信息处理、计算机、机器人、人工智能、遥感图像处理、认知神经科学等有关专业的高年级学生或研究生的教学用书,也可供相关领域的研究工作者参考。 透过本书,您将置身于迅速发展的计算机视觉领域。本书由自由开源OpenCV的发起人所著,介绍了计算机视觉,并通过实例演示了如何快速生成这样的应用——能使计算机“看到”并根据由此获取的数据做出决策。 计算机视觉无处不在,安全系统、制造检验系统、医学图像分析、无人机等都可以见到它的踪影。它与Google Map和Google Earth紧密结合,它检查LCD屏幕上的像素,它确保衬衫上的每个针脚都能完全缝合。OpenCV提供了一个简易好用的计算机视觉框架和一个丰富的库,后者包含500多个可实时运行视觉代码的函数。 透过各章提供的练习,任何一个开发人员或爱好者都可以迅速掌握如何使用这个框架。本书特色主题如下: 透彻介绍OpenCV 从摄像机获取输入 图像的变换 图像的分割和形状的匹配 模式识别,包括人脸检测 二维和三维场景中的跟踪监测 根据立体视觉进行三维重构 机器学习算法 “让机器来看”是一个富有挑战但也很有意思的目标。不管是想构建简单的视觉应用,还是复杂的视觉应用,都离不开这本入门必备参考,拿起它,开始愉快的学习之旅吧! 媒体推荐 “OpenCV库对从业人员而言非常有用,对初涉该领域的新手而言也不失为一个优秀工具。正如其广而告之的那样,它是一套高效的计算机视觉算法。” ——William T. Freeman,麻省理工学院计算机科学与人工智能实验室 “对计算机视觉领域内任何一个从业人员而言,《学习OpenCV》是他们不可或缺的重要参考。” ——David Lowe,英属哥伦比亚大学计算机科学教授 作者简介 作者:(美国)布拉德斯基 (美国)克勒 译者:于仕琪 刘瑞祯 布拉德斯基,Gary Rost Bradski博士是斯坦福大学人工智能实验室计算机科学系的顾问教授,同时也是Willow Garage的资深科学家,Willow Garage是一家机器人研究机构/孵化器。 目录 出版前言 译者序 写在前面的话 前言 第1章 概述 什么是OpenCV OpenCV的应用领域 什么是计算机视觉 OpenCV的起源 下载和安装OpenCV 通过SVN获取最新的OpenCV代码 更多OpenCV文档 OpenCV的结构和内容 移植性 练习 第2章 OpenCV入门 开始准备 初试牛刀—— 显示图像 第二个程序—— 播放AVI视频 视频播放控制 一个简单的变换 一个复杂一点的变换 从摄像机读入数据 写入AVI视频文件 小结 练习 第3章 初探OpenCV OpenCV的基本数据类型 CvMat矩阵结构 IplImage数据结构 矩阵和图像操作 绘图 数据存储 集成性能基元 小结 练习 第4章 细说HighGUI 一个可移植的图形工具包 创建窗口 载入图像 显示图像 视频的处理 ConvertImage函数 练习 第5章 图像处理 综述 平滑处理 图像形态学 漫水填充算法 尺寸调整 图像金字塔 阈值化 练习 第6章 图像变换 概述 卷积 梯度和Sobel导数 拉普拉斯变换 Canny算子 霍夫变换 重映射 拉伸、收缩、扭曲和旋转 CartToPolar与PolarToCart LogPolar 离散傅里叶变换(DFT) 离散余弦变换(DCT) 积分图像 距离变换 直方图均衡化 练习 第7章 直方图与匹配 直方图的基本数据结构 访问直方图 直方图的基本操作 一些更复杂的策略 练习 第8章 轮廓 内存 序列 查找轮廓 Freeman链码 轮廓例子 另一个轮廓例子 深入分析轮廓 轮廓的匹配 练习 第9章 图像局部与分割 局部与分割 背景减除 分水岭算法 用Inpainting修补图像 均值漂移分割 Delaunay三角剖分和Voronoi 划分 练习 第10章 跟踪与运动 跟踪基础 寻找角点 亚像素级角点 不变特征 光流 mean-shift和camshift跟踪 运动模板 预估器 condensation算法 练习 第11章 摄像机模型与标定 摄像机模型 标定 矫正 一次完成标定 罗德里格斯变换 练习 第12章 投影与三维视觉 投影 仿射变换和透视变换 POSIT:3D姿态估计 立体成像 来自运动的结构 二维和三维下的直线拟合 练习 第13章 机器学习 什么是机器学习 OpenCV机器学习算法 Mahalanobis距离 K均值 朴素贝叶斯分类 二叉决策树 boosting 随机森林 人脸识别和Haar分类器 其他机器学习算法 练习 第14章 OpenCV的未来 过去与未来 发展方向 OpenCV与艺术家 后记 参考文献 索引 关于作者和译者 封面图片

2011-04-29

学习OpenCV Leaning OpenCV (英文版)

内容简介 《学习OpenCV(影印版)》将你置身于迅速发展的计算机视觉领域。《学习OpenCV(影印版)》作者是免费开源0penCV的发起人,《学习OpenCV(影印版)》为你介绍了计算机视觉,例证了如何迅速建立使计算机能“看”的应用程序,以及如何基于计算机获取的数据作出决策。计算机视觉几乎随处可见:安全系统、管理检验系统、医学图像分析、无人机等。它将Google地图和Google地球结合在一起,在LCD屏幕上核对像素,确保衬衫上的每一个针脚都完全缝合。OpenCV提供了一个简易实用的计算机视觉框架以及一个含有超过500种可以实时运行视觉代码的函数的综合库。《学习OpenCV》在每一章里教授任何OpenCV的开发者或热爱者如何在这些实战经验的帮助下迅速掌握该软件。《学习OpenCV(影印版)》包括了如下内容: 对0penCV全面详尽的介绍 从照相机中导入图片 转换图像 分割图像和形状匹配 模式识别,包括人脸检测 两到三个计量单位间的跟踪和运动 立体视觉中的3D再现 机器学习算法 使机器能看见是一个具有挑战却又充满乐趣的目标。无论你是想建立一个简单的还是复杂的视觉应用程序,《学习OpenCV》都是你入门的必备教材。 编辑推荐 《学习OpenCV(影印版)》由东南大学出版社出版。 媒体推荐 “这本宝库对专业人员来讲非常有用,对初涉这个领域的人们也是个绝好的工具。像其宣传的那样,它是一组计算机视觉算法。”   ——William T.Freeman. 麻省理工学院计算机科学与人工智能实验室“《学习0penCV》即将占据每从从事计算机视觉领域的人的书架上最显著的一处。”   ——David Lowe,英属哥 作者简介 作者:(美国) 布拉德斯基 (Bradski.G.) (美国) 克勒 (Kaehler.A.) Gary Rost BradSki,博士,伦比亚大学计算机科学教授,斯坦福大学人工智能实验室的顾问教授,也是Willow Garage公司机器;人学研究协会的资深科学家。Ad rian Kaehler博士,Applied Mind S公司的资深科学家,从事机器学习、统计建模、计算机视觉和机器人学方面的研究。 目录 Preface 1. Overview What Is OpenCV? Who Uses OpenCV? What Is Computer Vision? The Origin of OpenCV Downloading and Installing OpenCV Getting the Latest OpenCV via CVS More OpenCV Documentation OpenCV Structure and Content Portability Exercises 2. Introduction to OpenCV Getting Started First Program——Display a Picture Second Program——AVI Video Moving Around A Simple Transformation A Not-So-Simple Transformation Input from a Camera Writing to an AVI File Onward Exercises 3. Gettingto KnowOpenCV OpenCV Primitive Data Types CvMat Matrix Structure IplImage Data Structure Matrix and Image Operators Drawing Things Data Persistence Integrated Performance Primitives Summary Exercises 4. HighGUI A Portable Graphics Toolkit Creating a Window Loading an Image Displaying Images Working with Video ConvertImage Exercises 5. Image Processing Overview Smoothing Image Morphology Flood Fill Resize Image Pyramids Threshold Exercises 6. Image Transforms Overview Convolution Gradients and Sobel Derivatives Laplace Canny Hough Transforms Remap Stretch, Shrink, Warp, and Rotate CartToPolar and PolarToCart LogPolar Discrete Fourier Transform (DFT) Discrete Cosine Transform (DCT) Integral Images Distance Transform Histogram Equalization Exercises 7. Histograms and Matching Basic Histogram Data Structure Accessing Histograms Basic Manipulations with Histograms Some More Complicated Stuff Exercises 8. Contours Memory Storage Sequences Contour Finding Another Contour Example More to Do with Contours Matching Contours Exercises 9. Image Parts and Segmentation Parts and Segments Background Subtraction Watershed Algorithm Image Repair by Inpainting Mean-Shift Segmentation Delaunay Triangulation, Voronoi Tesselation Exercises 10. Tracking and Motion The Basics of Tracking Corner Finding Subpixel Corners Invariant Features Optical Flow Mean-Shift and Camshift Tracking Motion Templates Estimators The Condensation Algorithm Exercises 11. Camera Models and Calibration Camera Model Calibration Undistortion Putting Calibration All Together Rodrigues Transform Exercises 12. Projection and 3D Vision Projections Affine and Perspective Transformations POSIT: 3D Pose Estimation Stereo Imaging Structure from Motion Fitting Lines in Two and Three Dimensions Exercises 13. Machine Learning What Is Machine Learning Common Routines in the ML Library Mahalanobis Distance K-Means Naive/Normal Bayes Classifier Binary Decision Trees Boosting Random Trees Face Detection or Haar Classifier Other Machine Learning Algorithms Exercises 14. OpenCV's Future Past and Future Directions OpenCV for Artists Afterword Bibliography Index

2011-04-29

高性能MySQL (第2版) 英文版 High Performance MySQL

"" is the definitive guide to building fast, reliable systems with MySQL. Written by noted experts with years of real-world experience building very large systems, this book covers every aspect of MySQL performance in detail, and focuses on robustness, security, and data integrity. "High Performance MySQL" teaches you advanced techniques in depth so you can bring out MySQL's full power. Learn how to design schemas, indexes, queries and advanced MySQL features for maximum performance, and get detailed guidance for tuning your MySQL server, operating system, and hardware to their fullest potential. You'll also learn practical, safe, high-performance ways to scale your applications with replication, load balancing, high availability, and failover. This second edition is completely revised and greatly expanded, with deeper coverage in all areas. Major additions include: Emphasis throughout on both performance and reliability Thorough coverage of storage engines, including in-depth tuning and optimizations for the InnoDB storage engine Effects of new features in MySQL 5.0 and 5.1, including stored procedures, partitioned databases, triggers, and views A detailed discussion on how to build very large, highly scalable systems with MySQL New options for backups and replication Optimization of advanced querying features, such as full-text searches Four new appendices The book also includes chapters on benchmarking, profiling, backups, security, and tools and techniques to help you measure, monitor, and manage your MySQL installations.

2011-04-29

SQl常用语句汇总 PDF

SQl常用语句汇总 ,汇总了最常用的一些SQL语句,方便易用。。。。。。。。。。。。。。。。。

2011-04-29

深入分析Linux内核源码

前言 第一章 走进linux 1.1 GNU与Linux的成长 1.2 Linux的开发模式和运作机制 1.3走进Linux内核 1.3.1 Linux内核的特征 1.3.2 Linux内核版本的变化 1.4 分析Linux内核的意义 1.4.1 开发适合自己的操作系统 1.4.2 开发高水平软件 1.4.3 有助于计算机科学的教学和科研 1.5 Linux内核结构 1.5.1 Linux内核在整个操系统中的位置 1.5.2 Linux内核的作用 1.5.3 Linux内核的抽象结构 1.6 Linux内核源代码 1.6.1 多版本的内核源代码 1.6.2 Linux内核源代码的结构 1.6.3 从何处开始阅读源代码 1.7 Linux内核源代码分析工具 1.7.1 Linux超文本交叉代码检索工具 1.7.2 Windows平台下的源代码阅读工具Source Insight 第二章 Linux运行的硬件基础 2.1 i386的寄存器 2.1.1通用寄存器 2.1.2段寄存器 2.1.3状态和控制寄存器 2.1.4 系统地址寄存器 2.1.5 调试寄存器和测试寄存器 2.2 内存地址 2.3 段机制和描述符 2.3.1 段机制 2.3.2 描述符的概念 2.3.3系统段描述符 2.3.4 描述符表 2.3.5 选择符与描述符表寄存器 2.3.6 描述符投影寄存器 2.3.7 Linux中的段 2.4 分页机制 2.4.1 分页机构 2.4.2页面高速缓存 2.5 Linux中的分页机制 2.5.1 与页相关的数据结构及宏的定义 2.5.2 对页目录及页表的处理 2.6 Linux中的汇编语言 2.6.1 AT&T与Intel汇编语言的比较 2.6.2 AT&T汇编语言的相关知识 2.6.3 Gcc嵌入式汇编 2.6.4 Intel386汇编指令摘要 第三章中断机制 3.1 中断基本知识 3.1.1 中断向量 3.1.2 外设可屏蔽中断 3.1.3异常及非屏蔽中断 3.1.4中断描述符表 3.1.5 相关汇编指令 3.2中断描述符表的初始化 3.2. 1 外部中断向量的设置 3.2.2中断描述符表IDT的预初始化 3.2.3 中断向量表的最终初始化 3.3异常处理 3.3.1 在内核栈中保存寄存器的值 3.3.2 中断请求队列的初始化 3.3.3中断请求队列的数据结构 3.4 中断处理 3.4.1中断和异常处理的硬件处理 3.4.2 Linux对异常和中断的处理 3.4.3 与堆栈有关的常量、数据结构及宏 3.4.4 中断处理程序的执行 3.4.5 从中断返回 3.5中断的后半部分处理机制 3.5.1 为什么把中断分为两部分来处理 3.5.2 实现机制 3.5.3数据结构的定义 3.5.4 软中断、bh及tasklet的初始化 3.5.5后半部分的执行 3.5.6 把bh移植到tasklet 第四章 进程描述 4.1 进程和程序(Process and Program) 4.2 Linux中的进程概述 4.3 task_struct结构描述 4.4 task_struct结构在内存中的存放 4.4.1 进程内核栈 4.4.2 当前进程(current宏) 4.5 进程组织的方式 4.5.1哈希表 4.5.2双向循环链表 4.5.3 运行队列 4.5.4 等待队列 4.6 内核线程 4.7 进程的权能 4.8 内核同步 4.8.1信号量 4.8.2原子操作 4.8.3 自旋锁、读写自旋锁和大读者自旋锁 4.9 本章小节 第五章进程调度 5.1 Linux时间系统 5.1.1 时钟硬件 5.1.2 时钟运作机制 5.1.3 Linux时间基准 5.1.4 Linux的时间系统 5.2 时钟中断 5.2.1 时钟中断的产生 5.2.2.Linux实现时钟中断的全过程 5.3 Linux的调度程序-Schedule( ) 5.3.1 基本原理 5.3.2 Linux进程调度时机 5.3.3 进程调度的依据 5.3.4 进程可运行程度的衡量 5.3.5 进程调度的实现 5.4 进程切换 5.4.1 硬件支持 5.4.2 进程切换 第六章 Linux内存管理 6.1 Linux的内存管理概述 6.1.1 Linux虚拟内存的实现结构 6.1.2 内核空间和用户空间 6.1.3 虚拟内存实现机制间的关系 6.2 Linux内存管理的初始化 6.2.1 启用分页机制 6.2.2 物理内存的探测 6.2.3 物理内存的描述 6.2.4 页面管理机制的初步建立 6.2.5页表的建立 6.2.6内存管理区 6.3 内存的分配和回收 6.3.1 伙伴算法 6.3.2 物理页面的分配和释放 6.3.3 Slab分配机制 6.4 地址映射机制 6.4.1 描述虚拟空间的数据结构 6.4.2 进程的虚拟空间 6.4.3 内存映射 6.5 请页机制 6.5.1 页故障的产生 6.5.2 页错误的定位 6.5.3 进程地址空间中的缺页异常处理 6.5.4 请求调页 6.5.5 写时复制 6.6 交换机制 6.6.1 交换的基本原理 6.6.2 页面交换守护进程kswapd 6.6.3 交换空间的数据结构 6.6.4 交换空间的应用 6.7 缓存和刷新机制 6.7.1 Linux使用的缓存 6.7.2 缓冲区高速缓存 6.7.3 翻译后援存储器(TLB) 6.7.4 刷新机制 6.8 进程的创建和执行 6.8.1 进程的创建 6.8.2 程序执行 6.8.3 执行函数 第七章 进程间通信 7.1 管道 7.1.1 Linux管道的实现机制 7.1.2 管道的应用 7.1.3 命名管道(FIFO) 7.2 信号(signal) 7.2.1 信号种类 7.2.2 信号掩码 7.2.3 系统调用 7.2.4 典型系统调用的实现 7.2.5 进程与信号的关系 7.2.6 信号举例 7.3 System V 的IPC机制 7.3.1 信号量 7.3.2 消息队列 7.3.3 共享内存 第八章 虚拟文件系统 8.1 概述 8.2 VFS中的数据结构 8.2.1 超级块 8.2.2 VFS的索引节点 8.2.3 目录项对象 8.2.4 与进程相关的文件结构 8.2.5 主要数据结构间的关系 8.2.6 有关操作的数据结构 8.3 高速缓存 8.3.1 块高速缓存 8.3.2 索引节点高速缓存 8.3.3 目录高速缓存 8.4 文件系统的注册、安装与拆卸 8.4.1 文件系统的注册 8.4.2 文件系统的安装 8.4.3 文件系统的卸载 8.5 限额机制 8.6 具体文件系统举例 8.6.1 管道文件系统pipefs 8.6.2 磁盘文件系统BFS 8.7 文件系统的系统调用 8.7.1 open 系统调用 8.7.2 read 系统调用 8.7.3 fcntl 系统调用 8 .8 Linux2.4文件系统的移植问题 第九章 Ext2文件系统 9.1 基本概念 9.2 Ext2的磁盘布局和数据结构 9.2.1 Ext2的磁盘布局 9.2.2 Ext2的超级块 9.2.3 Ext2的索引节点 9.2.4 组描述符 9.2.5 位图 9.2.6 索引节点表及实例分析 9.2.7 Ext2的目录项及文件的定位 9.3 文件的访问权限和安全 9.4 链接文件 9.5 分配策略 9.5.1 数据块寻址 9.5.2 文件的洞 9.5.3 分配一个数据块 第十章 模块机制 10.1 概述 10.1.1 什么是模块 10.1.2 为什么要使用模块? 10.2 实现机制 10.2.1 数据结构 10.2.2 实现机制的分析 10.3 模块的装入和卸载 10.3.1 实现机制 10.3.2 如何插入和卸载模块 10.4 内核版本 10.4.1 内核版本与模块版本的兼容性 10.4.2 从版本2.0到2.2内核API的变化 10.4.3 把内核2.2移植到内核2.4 10.5 编写内核模块 10.5.1 简单内核模块的编写 10.5.2 内核模块的Makefiles文件 10.5.3 内核模块的多个文件 第十一章 设备驱动程序 11.1 概述 11.1.1 I/O软件 11.1.2 设备驱动程序 11.2 设备驱动基础 11.2.1 I/O端口 11.2.2 I/O接口及设备控制器 11.2.3 设备文件 11.2.4 VFS对设备文件的处理 11.2.5 中断处理 11.2.6 驱动DMA工作 11.2.7 I/O 空间的映射 11.2.8 设备驱动程序框架 11.3 块设备驱动程序 11.3.1 块设备驱动程序的注册 11.3.2 块设备基于缓冲区的数据交换 11.3.3 块设备驱动程序的几个函数 11.3.4 RAM 盘驱动程序的实现 11.3.5 硬盘驱动程序的实现 11.4 字符设备驱动程序 11.4.1 简单字符设备驱动程序 11.4.2 字符设备驱动程序的注册 11.4.3 一个字符设备驱动程序的实例 11.4.4 驱动程序的编译与装载 第十二章 网络 12.1 概述 12.2 网络协议 12.2.1 网络参考模型 12.2.2 TCP/IP 协议工作原理及数据流 12.2.3 Internet 协议 12.2.4 TCP协议 12.3 套接字(socket) 12.3.1 套接字在网络中的地位和作用 12.3.2 套接字接口的种类 12.3.3 套接字的工作原理 12.3.4 socket 的通信过程 12.3.5 socket为用户提供的系统调用 12.4 套接字缓冲区(sk_buff) 12.4.1 套接字缓冲区的特点 12.4.2 套接字缓冲区操作基本原理 12.4.3 sk_buff数据结构的核心内容 12.4.4 套接字缓冲区提供的函数 12.4.5 套接字缓冲区的上层支持例程 12.5 网络设备接口 12.5.1 基本结构 12.5.2 命名规则 12.5.3 设备注册 12.5.4 网络设备数据结构 12.5.5 支持函数 第十三章 启动系统 13.1 初始化流程 13.1.1 系统加电或复位 13.1.2 BIOS启动 13.1.3 Boot Loader 13.1.4 操作系统的初始化 13.2 初始化的任务 13.2.1 处理器对初始化的影响 13.2.2 其他硬件设备对处理器的影响 13.3 Linux 的Boot Loarder 13.3.1 软盘的结构 13.3.2 硬盘的结构 13.3.3 Boot Loader 13.3.4 LILO 13.3.5 LILO的运行分析 13.4 进入操作系统 13.4.1 Setup.S 13.4.2 Head.S 13.5 main.c中的初始化 13.6 建立init进程 13.6.1 init进程的建立 13.6.2 启动所需的Shell脚本文件 附录: 1 Linux 2.4内核API 2.1 驱动程序的基本函数 2.2 双向循环链表的操作 2.3 基本C库函数 2.4 Linux内存管理中Slab缓冲区 2.5 Linux中的VFS 2.6 Linux的连网 2.7 网络设备支持 2.8 模块支持 2.9 硬件接口 2.10 块设备 2.11 USB 设备 2 参考文献

2011-04-29

深入Linux内核架构 英文版

内容简介 《深入Linux内核架构》讨论了Linux内核的概念、结构和实现。主要内容包括多任务、调度和进程管理,物理内存的管理以及内核与相关硬件的交互,用户空间的进程如何访问虚拟内存,如何编写设备驱动程序,模块机制以及虚拟文件系统,Ext文件系统属性和访问控制表的实现方式,内核中网络的实现,系统调用的实现方式,内核对时间相关功能的处理,页面回收和页交换的相关机制以及审计的实现等。此外,《深入Linux内核架构》借助内核源代码中最关键的部分进行讲解,帮助读者掌握重要的知识点,从而在运用中充分展现Linux系统的魅力。《深入Linux内核架构》适合Linux内核爱好者阅读。 编辑推荐 《深入Linux内核架构》:众所周知,Linux操作系统的源代码复杂、文档少,对程序员的要求高,要想看懂这些代码并不是一件容易事。《深入Linux内核架构》结合内核版本2.6.24源代码中最关键的部分。深入讨论Lirnux内核的概念、结构和实现。具体包括进程管理和调度、虚拟内存、进程间通信、设备驱动程序、虚拟文件系统、网络、时间管理、数据同步等。《深入Linux内核架构》引导你阅读内核源代码,熟悉Lirnux妍有的内在工作机理,充分展现Linux系统的魅力。《深入Linux内核架构》适合Linux系统编程人员、系统管理者以及Linux爱好者学习使用。 内容全面深入 全球开源社区集体智慧结晶 领略Linux内核的绝美风光 媒体推荐 “这本书叙述深入浅出,内容全面详尽,是学习掌握Lmux所有内在工作机理最理想的参考书之一”。   ——C.Glovanni,资深Linux程序开发者 作者简介 作者:(德国)莫尔勒(Wolfgang Mauerer) 译者:郭旭 莫尔勒(Woflgang Mauerer),资深Linux专家,有数十年Linux开发经验。从1997年最初发表关于内核的系列文章开始,他就醉心于解释Linux核心的内部机制、编写相关的文档,此外,他还著有LaTex排版方面的图书,其撰写的大量文章已经被释译成7种语言。 目录 第1章 简介和概述1 1.1 内核的任务2 1.2 实现策略2 1.3 内核的组成部分3 1.3.1 进程、进程切换、调度3 1.3.2 UNIX进程4 1.3.3 地址空间与特权级别6 1.3.4 页表9 1.3.5 物理内存的分配11 1.3.6 计时13 1.3.7 系统调用13 1.3.8 设备驱动程序、块设备和字符设备14 1.3.9 网络14 1.3.10 文件系统14 1.3.11 模块和热插拔15 1.3.12 缓存16 1.3.13 链表处理16 1.3.14 对象管理和引用计数17 1.3.15 数据类型20 1.3.16 本书的局限性22 1.4 为什么内核是特别的23 1.5 行文注记23 1.6 小结27 第2章 进程管理和调度28 2.1 进程优先级28 2.2 进程生命周期30 2.3 进程表示32 2.3.1 进程类型37 2.3.2 命名空间37 2.3.3 进程ID号43 2.3.4 进程关系49 2.4 进程管理相关的系统调用50 2.4.1 进程复制50 2.4.2 内核线程62 2.4.3 启动新程序63 2.4.4 退出进程66 2.5 调度器的实现67 2.5.1 概观67 2.5.2 数据结构69 2.5.3 处理优先级74 2.5.4 核心调度器79 2.6 完全公平调度类84 2.6.1 数据结构85 2.6.2 CFS操作85 2.6.3 队列操作89 2.6.4 选择下一个进程91 2.6.5 处理周期性调度器92 2.6.6 唤醒抢占93 2.6.7 处理新进程93 2.7 实时调度类94 2.7.1 性质94 2.7.2 数据结构95 2.7.3 调度器操作96 2.8 调度器增强97 2.8.1 SMP调度97 2.8.2 调度域和控制组101 2.8.3 内核抢占和低延迟相关工作102 2.9 小结106 第3章 内存管理107 3.1 概述107 3.2 (N)UMA模型中的内存组织109 3.2.1 概述109 3.2.2 数据结构111 3.3 页表123 3.3.1 数据结构124 3.3.2 页表项的创建和操作129 3.4 初始化内存管理129 3.4.1 建立数据结构130 3.4.2 特定于体系结构的设置135 3.4.3 启动过程期间的内存管理153 3.5 物理内存的管理159 3.5.1 伙伴系统的结构159 3.5.2 避免碎片161 3.5.3 初始化内存域和结点数据结构167 3.5.4 分配器API172 3.5.5 分配页177 3.5.6 释放页192 3.5.7 内核中不连续页的分配195 3.5.8 内核映射201 3.6 slab分配器205 3.6.1 备选分配器206 3.6.2 内核中的内存管理207 3.6.3 slab分配的原理209 3.6.4 实现212 3.6.5 通用缓存226 3.7 处理器高速缓存和TLB控制228 3.8 小结230 第4章 进程虚拟内存231 4.1 简介231 4.2 进程虚拟地址空间231 4.2.1 进程地址空间的布局232 4.2.2 建立布局234 4.3 内存映射的原理237 4.4 数据结构238 4.4.1 树和链表238 4.4.2 虚拟内存区域的表示239 4.4.3 优先查找树241 4.5 对区域的操作244 4.5.1 将虚拟地址关联到区域245 4.5.2 区域合并246 4.5.3 插入区域247 4.5.4 创建区域248 4.6 地址空间250 4.7 内存映射251 4.7.1 创建映射251 4.7.2 删除映射253 4.7.3 非线性映射254 4.8 反向映射257 4.8.1 数据结构258 4.8.2 建立逆向映射259 4.8.3 使用逆向映射259 4.9 堆的管理261 4.10 缺页异常的处理263 4.11 用户空间缺页异常的校正268 4.11.1 按需分配/调页269 4.11.2 匿名页271 4.11.3 写时复制271 4.11.4 获取非线性映射272 4.12 内核缺页异常272 4.13 在内核和用户空间之间复制数据274 4.14 小结276 第5章 锁与进程间通信277 5.1 控制机制277 5.1.1 竞态条件277 5.1.2 临界区278 5.2 内核锁机制279 5.2.1 对整数的原子操作280 5.2.2 自旋锁282 5.2.3 信号量283 5.2.4 RCU机制284 5.2.5 内存和优化屏障286 5.2.6 读者/写者锁287 5.2.7 大内核锁288 5.2.8 互斥量288 5.2.9 近似的per-CPU计数器290 5.2.10 锁竞争与细粒度锁291 5.3 SystemV进程间通信292 5.3.1 SystemV机制292 5.3.2 信号量292 5.3.3 消息队列300 5.3.4 共享内存303 5.4 其他IPC机制303 5.4.1 信号303 5.4.2 管道和套接字310 5.5 小结311 第6章 设备驱动程序312 6.1 I/O体系结构312 6.2 访问设备316 6.2.1 设备文件316 6.2.2 字符设备、块设备和其他设备317 6.2.3 使用ioctl进行设备寻址319 6.2.4 主从设备号的表示320 6.2.5 注册321 6.3 与文件系统关联324 6.3.1 inode中的设备文件成员324 6.3.2 标准文件操作325 6.3.3 用于字符设备的标准操作325 6.3.4 用于块设备的标准操作325 6.4 字符设备操作326 6.4.1 表示字符设备326 6.4.2 打开设备文件326 6.4.3 读写操作328 6.5 块设备操作329 6.5.1 块设备的表示330 6.5.2 数据结构331 6.5.3 向系统添加磁盘和分区338 6.5.4 打开块设备文件339 6.5.5 请求结构341 6.5.6 BIO343 6.5.7 提交请求345 6.5.8 I/O调度350 6.5.9 ioctl的实现352 6.6 资源分配353 6.6.1 资源管理353 6.6.2 I/O内存355 6.6.3 I/O端口357 6.7 总线系统358 6.7.1 通用驱动程序模型358 6.7.2 PCI总线363 6.7.3 USB370 6.8 小结376 第7章 模块377 7.1 概述377 7.2 使用模块378 7.2.1 添加和移除378 7.2.2 依赖关系380 7.2.3 查询模块信息381 7.2.4 自动加载382 7.3 插入和删除模块384 7.3.1 模块的表示385 7.3.2 依赖关系和引用389 7.3.3 模块的二进制结构391 7.3.4 插入模块396 7.3.5 移除模块403 7.4 自动化与热插拔404 7.4.1 kmod实现的自动加载404 7.4.2 热插拔405 7.5 版本控制408 7.5.1 校验和方法408 7.5.2 版本控制函数411 7.6 小结412 第8章 虚拟文件系统413 8.1 文件系统类型413 8.2 通用文件模型414 8.2.1 inode415 8.2.2 链接416 8.2.3 编程接口416 8.2.4 将文件作为通用接口417 8.3 VFS的结构417 8.3.1 结构概观418 8.3.2 inode419 8.3.3 特定于进程的信息423 8.3.4 文件操作427 8.3.5 目录项缓存431 8.4 处理VFS对象436 8.4.1 文件系统操作436 8.4.2 文件操作450 8.5 标准函数456 8.5.1 通用读取例程457 8.5.2 失效机制459 8.5.3 权限检查461 8.6 小结463 第9章 Ext文件系统族464 9.1 简介464 9.2 Ext2文件系统465 9.2.1 物理结构465 9.2.2 数据结构470 9.2.3 创建文件系统484 9.2.4 文件系统操作485 9.3 Ext3文件系统507 9.3.1 概念508 9.3.2 数据结构509 9.4 小结511 第10章 无持久存储的文件系统512 10.1 proc文件系统512 10.1.1 /proc的内容513 10.1.2 数据结构519 10.1.3 初始化522 10.1.4 装载proc文件系统523 10.1.5 管理/proc数据项525 10.1.6 读取和写入信息528 10.1.7 进程相关的信息530 10.1.8 系统控制机制535 10.2 简单的文件系统542 10.2.1 顺序文件542 10.2.2 用libfs编写文件系统546 10.2.3 调试文件系统547 10.2.4 伪文件系统549 10.3 sysfs549 10.3.1 概述550 10.3.2 数据结构550 10.3.3 装载文件系统554 10.3.4 文件和目录操作556 10.3.5 向sysfs添加内容562 10.4 小结564 第11章 扩展属性和访问控制表565 11.1 扩展属性565 11.1.1 到虚拟文件系统的接口566 11.1.2 Ext3中的实现570 11.1.3 Ext2中的实现576 11.2 访问控制表577 11.2.1 通用实现577 11.2.2 Ext3中的实现580 11.2.3 Ext2中的实现585 11.3 小结585 …… 第12章 网络586 第13章 系统调用655 第14章 内核活动678 第15章 时间管理714 第16章 页缓存和块缓存761 第17章 数据同步793 第18章 页面回收和页交换821 第19章 审计882 附录A 体系结构相关知识899 附录B 使用源代码919 附录C 有关C语言的注记947 附录D 系统启动985 附录E ELF二进制格式 附录F 内核开发过程 参考文献

2011-04-29

Linux Bible: Boot Up to Ubuntu, Fedora, KNOPPIX, Debian, openSUSE, a

The definitive guide to the basics of one of the most popular operating systems in the world Whether you're a first-time Linux user or you're migrating from another operating system, this book is an ideal introductory guide for getting comfortable with the building-block nature of Linux. Written by bestselling author Christopher Negus, this guide is packed with in-depth descriptions on the basics of Linux desktops, servers, and programming tools and gets you up to speed on all the new and exciting features of the newest version: Linux 2010. Negus walks you through transitioning from Windows or Mac and helps you find the Linux distribution that best meets your needs. You'll explore more than 18 Linux distributions, including the latest versions of Ubuntu, Fedora, Debian, OpenSUSE, Slackware, Knoppix, Gentoo, Mandriva, SLAX, and more. Plus, you'll discover how to set up secure, fully functioning Linux server systems and get up-to-date installation advice. Servers as an ideal introduction to the newest version of the Linux operating system, and written by the unparalleled, bestselling author Christopher Negus Features valuable examples that show how people have implemented Linux in the real world Shares hands-on instructions on how to install a Linux server system Offers step-by-step descriptions of key desktop and server components Includes more than 18 Linux distributions on the accompanying CD-ROM and DVD Linux Bible 2010 Edition walks you through the details of the various Linux distributions and updates you on the latest networking, desktop, and server enhancements.

2011-04-29

深入理解LINUX内核(中文版)

内容简介 为了彻底理解GNU/Linux的内部构造以及它为何能在各种系统之上工作得如此这好,那就需要你深入研究操作系统的心脏——Linux内核本身。内核处理各种请求或已完成的I/O操作,并判断哪些程序将分享它的处理时间,会以什么顺序分享。Linux内核肩负着中国管理整个系统的职责,是神奇的Linux高效之根源。 本书将引导你畅游Linux内核中使用的最主要的数据结构、算法和编程技巧,讨论了具体的Intel平台的重要特点。但是本书涵盖的内容绝不限于代码所起的作用,它还阐明了Linux为什么如此运作的理论基础。 本书涵盖Linux 2.4, ●网络 ●内存管理,包括文件缓冲、进程交换以及直接内存访问 ●虚拟文件系统层和第二及第三扩展文件系统 ●进程创建及调度 ●信号、中断及对设备驱动程序的主要接口 ●定时 ●内核中的同步 ●进程间通信 ●程序执行 本书将使读者熟悉Linux所有的内在工作机制,但本书不仅仅是一种学术训练,读者还将知道什么样的条件使Linux产生最好的性能,你会看到Linux如何得以满足(在各种环境下)进程调度、文件访问及内存管理期间提出的快速响应要求。 目录 前言 第一章 绪论 Linux与其他类Unix内核的比较 硬件的依赖性 Linux版本 操作系统基本概念 Unix文件系统概述 Unix内核概述 第二章 存储器寻址 存储器地址 硬件中的分段 Linux中的分段 硬件中的分页 Linux中的分页 第三章 进程 进程、轻量级进程和线程 进程描述符 进程切换 创建进程 撤销进程 第四章 中断和异常 中断信号的作用 中断和异常 中断和异常处理程序的嵌套执行 初始化中断描述符表 异常处理 中断处理 软中断、tasklet及下半部分 从中断和异常返回 第五章 内核同步 内核控制路径 什么时候同步是不必要的 同步原语 对内核数据结构的同步访问 避免竞争条件的实例 第六章 定时测量 硬时钟 Linux计时体系结构 CPU的分时(time-sharing) 更新时间和日期 更新系统统计数 软定时器(Software Timer) 与定时测量相关的系统调用 第七章 存储器管理 页框管理 存储器区管理 非连续存储器区管理 第八章 进程地址空间 进程的地址空间 内存描述符 线性区 缺页异常处理程序 创建和删除进程的地址空间 堆的管理 第九章 系统调用 POSIX API和系统调用 系统调用处理程序及服务例程 内核封装例程 第十章 信号 信号的作用 产生信号 传递信号 与信号处理相关的系统调用 第十一章 进程调度 调度策略 调度算法 与调度相关的系统调用 第十二章 虚拟文件系统 虚拟文件系统(VFS)的作用 VFS的数据结构 文件系统类型 文件系统安装 路径名查找 VFS系统调用的实现 文件加锁 第十三章 管理I/O设备 I/O体系结构 设备文件 设备驱动程序 块设备驱动程序 字符设备驱动程序 第十四章 磁盘高速缓存 页高速缓存 v缓冲区高速缓存 第十五章 访问文件 读写文件 存储器映射 直接I/O传送 第十六章 对换:释放内存的方法 什么是对换 对换区 对换高速缓存 传送对换页 换出页 换入页 回收页框 第十七章 Ext2和Ext3文件系统 Ext2的一般特征 Ext2磁盘数据结构 Ext2的内存数据结构 创建Ext2文件系统 Ext2的方法 管理Ext2磁盘空间 Ext3文件系统 第十八章 网络 主要的网络数据结构 与网络相关的系统调用 向网卡发送包 从网卡接收包 第十九章 进程通信 管道 FIFO System V IPC 第二十章 程序的执行 可执行文件 可执行格式 执行字段 exec函数 附录一 系统启动 附录二 模块 附录三 源码结构 参考书目 源代码索引 索引

2011-04-29

Shell脚本专家指南

内容简介 《Shell脚本专家指南》旨在为Linux、Unix以及OSx系统管理员提供短小精悍且功能强大的shell实现解决方案,教会读者如何使用现有调试器调试shell脚本。全书分为3个部分:脚本技术基础、系统交互和高级技术、有用的脚本实例。主要内容包括如何使小到中型的系统管理任务自动化,分析系统数据并编辑配置文件,使用bash和ksh等编写IAnux、Unix和OSX应用程序的脚本文件等。 《Shell脚本专家指南》面向中高级的shell程序员,以及需要解决日常问题的系统管理员,但假定读者能够读懂一般的shell代码。 编辑推荐 《Shell脚本专家指南》是我多年从事系统管理员一职所积累的非常有用的脚本和技术集合。尽管这些脚本是从一名系统管理员的角度进行编写的。但你几乎可以为任何你能想得到的目的而重用它们。《Shell脚本专家指南》中的所有代码或者是非常有用,或者是非常地独特(甚至可能会有一点与众不同)。不过其中有些解决方案所用到的技术可能是你自己很难想出来的。 当我还在学习shell脚本编程的时候,我会经常参考一些由别人编写出来的实例,以进一步地扩展自己的视野。而结果往往是我发现一些正在困扰着自己的问题,我的同事和朋友们却早已发明了又酷又聪明的解决方案。因此,我便萌生了写这《Shell脚本专家指南》的念头,以易于理解的形式,介绍所有这些关键技术。 我写此书的目的。不是为了创作出一本shelI脚本编程的入门书。而是希望能够提供一些更具深度的内容。它的作用不仅仅是解释sheIl代码的内容,更在于讲述在大多数情况下如何以及为何使用某种特定的编程逻辑。这些脚本将帮助你大大提高编程技能。并提高你解决问题和选择解决方案的能力。《Shell脚本专家指南》中的大部分脚本已经在以可靠性为关键因素的生产环境下,经历了多年的不断锤炼和改进。因此,《Shell脚本专家指南》对于那些希望在案头放一本案例精选的读者来说,将会是最佳的参考资料。 这里囊括了所有你迫切希望解决、却又无处发问的Shell脚本问题。 作者简介 作者:(美国)彼得(Ron Peters) 译者:李晓群 付弘宇 彼得(Ron Peters),在过去的15年中大部分时间都在做系统管理员的工作。他曾是Intel公司的高级管理员,在那些日子里,他总是每周7天、每天24小时不停地工作,他也曾是一个专用于设计工作的大型计算机集群的首席管理员。他现在是Columbia运动服装公司的LinuxRJNIx系统管理员。他喜欢和家人在一起,喜欢修理他的道奇Challenger汽车,还喜欢玩美式壁球。 目录 第1部分 基本脚本编程技术 第1章 shell脚本的错误检测 1.1 shell跟踪选项 1.2 简单输出语句 1.3 根据调试层次控制输出 1.4 用函数简化错误检查 1.5 手动单步执行 第2章 标准函数库 2.1 库文件 2.2 一些有用的函数 2.3 使用库 第3章 日期和时间操作 3.1 用天数来计算日期 3.1.1 自从纪元以来的天数 3.1.2 以秒计算日期的其他方法 3.2 评估当前日期和时间 第4章 比较和测试 比较的基本原理 第5章 接受命令行选项、开关和参数 第6章 测试变量和设置默认值 6.1 设置默认值 6.2 变量替换 6.2.1 :=句法 6.2.2 =句法 6.2.3 :-句法 6.2.4 -句法 6.2.5 :?句法 6.2.6 ?句法 6.2.7 :+句法 6.2.8 +句法 第7章 非直接引用变量 7.1 用非直接变量监控日志文件 7.2 主监控循环 第8章 shell进程树 8.1 用数组实现进程树 8.2 用非直接变量实现进程树 8.3 用Bourneshell实现进程树 第9章 数据重定向 9.1 避免错误 9.2 普通重定向 9.3 访问用户指定的文件句柄 9.4 从shell中访问描述符 第10章 管道输入读 10.1 逐行选项1 10.2 逐行选项2 10.3 逐行选项3 10.4 逐行选项4 10.5 直接管道读 10.6 逐字处理输入 第2部分 系统交互与高级技术 第11章 shell中的数学 11.1 expr 11.2 bc 11.3 de 第12章 cron 12.1 crontab条目 12.2 环境问题 12.3 输出重定向 第13章 自链接脚本 第14章 对并行进程的数量控制 14.1 用ksh实现并行进程 14.2 用bash实现并行进程 第15章 命令行编辑和历史命令 15.1 建立vi编辑环境 15.1.1 bash 15.1.2 ksh 15.2 命令和文件补全 第16章 从命令行编写脚本 例子 第17章 用expect实现用户输出自动化 17.1 为expect脚本定制参数的shell脚本 17.2 让telnet的expect脚本自动执行 第18章 用户输入超时 18.1 手动实现超时 18.2 使用stty实现超时 18.3 一般的超时功能 第19章 即时键盘响应 第20章 目录的复制 20.1 使用cp 20.2 使用tar 20.3 使用find 20.4 使用。rsync 第21章 X显示环境概述 21.1 display变量 21.2 使用ssh处理X流量 21.3 通过第三方系统的X应用 21.4 用户-Profile项 21.5 根-Profile项 21.6 弹出一个临时的根窗口 第22章 X导航窗口 22.1 导航窗口的作用 22.2 建立导航 22.3 浏览窗口 第23章 命令行电子邮件附件 23.1 uuencode 23.2 MIME编码 第24章 单行文本处理 24.1 显示特殊域 24.2 指定域分隔符 24.3 简单的模式匹配 24.4 几个值的匹配域 24.5 确定域的数目 24.6 确定最后一个域 24.7 确定倒数第二个域 24.8 给awk传送变量 24.9 在一定条件下使用给awk传送的变量 24.10 显示域的范围(主要方法) 24.11 显示域的范围(备选方法) 24.12 使用awk确定串的长度 24.13 使用expr确定串的长度 24.14 使用awk显示一个子串 24.15 使用expr显示一个子串 24.16 使用sed进行简单的查找和替换 24.17 忽略文件中的空行和注释行 24.18 使用sed进行双查找和替换 24.19 使用sed过滤行 24.20 使用egrep查找多个串 24.21 查找进程表的一个清理方法 24.22 使用awk进行列求和计算 24.23 使用awk产生随机数字 24.24 从shell中产生随机数字 24.25 使用sed显示基于字符的域 24.26 特殊字符转义 24.27 使用grep从一个模式匹配中返回末尾行 24.28 使用grep返回模式匹配之前的行 第25章 在适当的位置编辑文件 25.1 使用ed进行简单的查找和替换 25.2 使用ed查找和替换、分割 25.3 ed命令的例子 25.4 对一个文件中的特殊字符转义 第26章 平面文件中的变量赋值 第27章 读取管道输入 第28章 使用cat的自由格式输出 第29章 自动交互处理 第3部分 有用的脚本实例 第30章 使用procmail自动处理邮件 30.1.procmailrc文件 30.2 使用示例 30.3 代码 第31章 进程管理监视器 第32章 管理文件的计数 32.1 文件计数监视器 32.2 测试文件数目的计算方法 第33章 从inittab执行进程 第34章 自动RCS 第35章 带颜色的/proc报告 第36章 口令老化通知 36.1 脚本初始化 36.2 开始处理 36.3 确定口令年龄 第37章 伪shadow文件 第38章 搭建Linux金系统 第39章 系统快照 39.1 快照脚本 39.2 快照升级 39.3 创建最新快照 39.4 最后的想法 第40章 删除大文件和日志滚动 第41章 核心探测器 第42章 网络适配器故障转移 42.1 检查网络 42.2 转换接口 附录A 测试开关 附录B 特殊参数 附录C shell脚本编程的其他资源 C.1 手册 C.2 图书 C.2.1 脚本编程图书 C.2.2 补充图书 C.3 shell资源 C.4.网络资源

2011-04-29

Linux内核设计与实现

内容简介 《Linux内核设计与实现》基于Linux2.6内核系列详细介绍Linux内核系统,覆盖了从核心内核系统的应用到内核设计与实现等各方面的内容。主要内容包括:进程管理、系统调用、中断和中断处理程序、内核同步、时间管理、内存管理、地址空间、调试技术等。本书理论联系实践,既介绍理论也讨论具体应用,能够带领读者快速走进Linux内核世界,真正开发内核代码。 本书适合作为高等院校操作系统课程的教材或参考书,也可供相关技术人员参考。 编辑推荐 如果你是一名Linux内核爱好者,《Linux内核设计与实现》的内容可以帮助你大显身手。如果你是一名普通程序员,《Linux内核设计与实现》的内容将会拓宽你的编程思路。如果你初次接触Linux内核,《Linux内核设计与实现》则可以帮助你对内核各个核心子系统有一个整体把握。《Linux内核设计与实现》填补了Linux内核理论和实践细节之间的鸿沟,既有针对Linux2.6内核,包括O(1)调度程序、抢占式内核、块I/O层以及I/O调度程序等,还包含了Linux内核开发者在开发时需要用到的很多信息,包括调试技术、编程风格、注意事项等等。 媒体推荐 译者序 不知不觉涉足Linux内核已经几个年头了,与其他有志(兴趣)于此的朋友一样,我们也经历了学习—实用—追踪—再学习的过程。也就是说,我们也是从漫无边际到茫然无措,再到初窥门径,转而觉得心有戚戚焉这一路走下来的。其中甘苦,犹然在心。   Linux最为人称道的莫过于它的自由精神,所有源代码唾手可得。侯捷先生云:“源码在前,了无秘密”。是的,但是我们在面对它的时候,为什么却总是因为这种规模和层面所造就的陡峭学习曲线陷入困顿呢?很多朋友就此倒下,纵然Linux世界繁花似锦,纵然内核天空无边广阔。但是,眼前的迷雾重重,心中的阴霾又怎能被阳光驱散呢?纵有雄心壮志,拔剑四顾心茫然,脚下路在何方?   Linux内核入门是不容易,它之所以难学,在于庞大的规模和复杂的层面。规模一大,就不易现出本来面目,浑然一体,自然不容易找到着手之处;层面一多,就会让人眼花缭乱,盘根错节,怎能让人提纲挈领?   “如果有这样一本书,既能提纲挈领,为我理顺思绪,指引方向,同时又能照顾小节,阐述细微,帮助我们更好更快地理解STL源码,那该有多好。”孟岩先生如此说,虽然针对的是C++,但道出的也是研习源码的人们共同的心声。然而,Linux源码研究的方法却不大相同。这还是由于规模和层面决定的。比如说,在语言学习中,我们可以采取小步快跑的方法,通过一个个小程序和小尝试,就可以取得渐进的成果,就能从新技术中有所收获;而掌握Linux呢?如果没有对整体的把握,即使你对某个局部的算法、技术或是代码再熟悉,也无法将其融入实用。其实,像内核这样的大规模的软件,正是编程技术施展身手的舞台(当然,目前的内核虽然包含了一些面向对象思想,但还不能让C++一展身手)。   那么,我们能不能做出点什么,让Linux的内核学习过程更符合程序员的习惯呢?   Robert Love回答了这个问题。Robert Love是一个狂热的内核爱好者,所以他的想法自然贴近程序员。是的,我们注定要在对所有核心的子系统有了全面认识之后,才能开始自己的实践,但却完全可以舍弃细枝末节,将行李压到最小,自然可以轻装快走,迅速进入动手阶段。   因此,本书相对于Daniel P. Bovet和Marco Cesati的内核巨著《Understanding the Linux Kernel》,少了五分细节;相对于实践经典《Linux Device Drivers》,又多了五分说理。可以说,本书填补了Linux内核理论和实践之间的鸿沟,真可谓“一桥飞架南北,天堑变通途”。   就我们的经验,内核初学者(不是编程初学者)可以从这本书着手,对内核各个核心子系统有个整体把握,包括它们提供什么样的服务,为什么要提供这样的服务,又是怎样实现的。而且,本书还包含了Linux内核开发者在开发时需要用到的很多信息,包括调试技术、编程风格、注意事项等等。在消化这本书的基础上,如果你侧重于了解内核,可以进一步研究《Understanding the Linux Kernel》和源代码本身;如果你侧重于实际编程,可以研读《Linux Device Drivers》,直接开始动手工作;如果你想有一个轻松的内核学习和实践环节,请访问我们的网站www.kerneltravel.net。   依然记得译第1版时的喜悦,第2版的到来自然就爱不释手了。同事贺炎为两版之间差异所费的心思全部体现在了字里行间,请读者欣赏第2版丰富的内容吧。 作者简介 作者:(美)拉芙 拉芙(Robert Love)是开源社区的名人,很早就开始使用Linux他活跃于Linux内核和GNOME两个社区。最近,他受聘于Novell公司,作为高级内核工程师在ximian桌面组工作。他的内核项目包括抢占式内核、进程调度程序、内核事件层、VM增强以及多任务处理性能优化。他创建和维护的另外两个开源项目是schedutils和GNOME卷管理器。此外,Linux Journal杂志的特邀编辑。 目录 译者序 序言 前言 第1章 Linux内核简介 1.1 追寻Linus的足迹:Linux简介 1.2 操作系统和内核简介 1.3 Linux内核和传统Unix内核的比较 1.4 Linux内核版本 1.5 Linux内核开发者社区 1.6 小结 第2章 从内核出发 2.1 获取内核源码 2.1.1 安装内核源代码 2.1.2 使用补丁 2.2 内核源码树 2.3 编译内核 2.3.1减少编译的垃圾信息 2.3.2衍生多个编译作业 2.3.3安装内核 2.4内核开发的特点 2.4.1 没有libc库 2.4.2 GNU C 2.4.3 没有内存保护机制 2.4.4 不要轻易在内核中使用浮点数 2.4.5 容积小而固定的栈 2.4.6 同步和并发 2.4.7 可移植性的重要性 2.5小结 第3章 进程管理 3.1 进程描述符及任务结构 3.1.1 分配进程描述符 3.1.2 进程描述符的存放 3.1.3 进程状态 3.1.4 设置当前进程状态 3.1.5 进程上下文 3.1.6 进程家族树 3.2 进程创建 3.2.1 写时拷贝 3.2.2 fork() 3.2.3 vfork() 3.3 线程在Linux中的实现. 3.4 进程终结 3.4.1 删除进程描述符 3.4.2 孤儿进程造成的进退维谷 3.5 进程小结 第4章 进程调度 …… 第5章 系统调用 …… 第6章 中断和中断处理程序 …… 第7章 下半部和推后执行的工作 …… 第8章 内核同步介绍 …… 第9章 内核同步工作 …… 第10章 定时器和时间管理 …… 第11章 内在管理 …… 第12章 虚拟文件系统 …… 第13章 块I/O层 …… 第14章 进程地址空间 …… 第15章 页调整缓存和页回写 …… 第16章 模块 …… 第17章 Kobect与sysfs …… 第18章 调试 …… 第19章 可移植性 …… 第20章 补丁、开发和社区 …… 参考资料

2011-04-29

C_C++指针经验总结

C_C++指针经验总结, 很实用的总结

2011-04-28

Windows高级调试 英文版

内容简介 《Windows高级调试》主要讲解Windows高级调试思想和工具,并涉及一些高级调试主题。《Windows高级调试》内容主要包括:工具简介、调试器简介、调试器揭密、符号文件与源文件的管理、栈内存破坏、堆内存破坏、安全、进程间通信、资源泄漏、同步、编写定制的调试扩展、64位调试、事后调试、WindowsVista基础以及应用程序验证器的测试设置等。《Windows高级调试》内容详实、条理清楚。《Windows高级调试》适合Windows开发人员、Windows测试人员和Windows技术支持人员等参考。对Windows开发人员来说,很少有任务比调试程序更具挑战性和重要性。然而,人们却往往很难获得一些关干调试技术的可靠而又实用的信息。现在,两位来自Microsoft的系统级开发工程师,带着他们15年的实践经验,为读者全面而系统地揭示了Windows调试技术。 MarioHewardt和DanielPravat介绍了在应用程序的整个生命周期内需要使用到的各种调试技术,并且展示了如何有效地使用Microsoft提供的强大调试器和第三方解决方案。 为了使你尽快地找到切实可行的解决方案,《Windows高级调试》内容围绕真实的调试场景来组织,并且通过代码示例来讲解和分析专业开发人员所要面对的各种调试问题。作者还介绍了一些新兴的调试主题,例如Windows操作系统的核心概念、安全。WindowsVista以及64位调试等,每个主题都包含细致入微的阐述。 读完《Windows高级调试》,你将能够 掌握当今最强大的Windows调试工具,包括NTSD、CDB、WinDbg、KD以及ADPlus等。 对没有针对调试进行优化的代码进行调试。 理解调试器的”内幕”并高效地管理符号文件和源文件。 调试与栈和堆相关的复杂内存破坏问题。 解决复杂的安全问题。 调试跨进程问题:身份跟踪,RPC调试扩展,以及通过Wireshark来跟踪IPC。 找出并修复资源泄漏,例如内存泄漏和句柄泄漏。 调试常见的线程同步问题。 学习如何编写定制的调试扩展。 通过故障转储来执行”事后调试”,并与Windows错误报告机制集成起来。 通过DebugDiag和调试命令Analyze来自动化调试过程。 无论你是系统层开发人员,还是应用层开发人员,《Windows高级调试》都将使你深入理解Windows中的各种调试技术。《Windows高级调试》或许在下一个项目中就可以帮你节省数周的工作时间。 编辑推荐 《Windows高级调试》主要讲解Windows高级调试思想和工具,并涉及一些高级调试主题。 两位来自Microsoft的系统级开发工程师,带着他们15年的实践经验,为读者全面而系统地揭示了Windows调试技术。 媒体推荐 “谁说你不能学习别人的经验?本书就包含了丰富而翔实的信息,它们非常清晰地阐述了如何通过一种逻辑的方法来找出和修复程序中的问题。对于那些在Microsoft Windows平台上开发、测试和提供技术支持的人员来说,本书绝对是一本不可或缺的参考手册。” ——Bob Wilton,资深工程师就职于Microsoft公司中CPR(Critical Problem Resolution)小组 “我有幸与本书的作者在超高要求系统(Extremely Demanding System)领域共事了8年多的时间。本书包含了非常有价值的知识,我们曾经感叹,要是在项目开始之前就知道这些知识该有多好——这位调试大师或许只有2月29号才会告诉你这些知识,因为他只有在这一天的下午才有空;只有亲自去构建和调试那些复杂的系统项目而不是道听途说,才能获得这些宝贵的知识。在大多数书籍中,一些高级主题总是作为‘留给读者的练习’或者‘请参阅其他高级参考书’,而这些主题似乎从来就没有出现过。本书属于那些‘其他高级参考书’。要买就买两本吧,因为你将经常要借一本给其他人。 ——Raymond McCollum,架构师就职于Microsoft前沿安全产品(Forefront Security Product)部门 “由Microsoft的Mario和Daniel合著的这本书是一本非常棒的参考书,面向的读者包括中级调试人员和高级调试人员。本书通过对一些示例进行深入讲解来阐述如何调试各种错综复杂的问题,例如栈破坏和堆破坏等,这使得本书与目前市面上讲解Win32软件调试的众多书籍相比显得卓尔不群。本书的实用性非常高,包含了丰富的调试技巧和策略。”    ——Kinshuman,开发主管就职于Windows核心操作系统部门   “我非常高兴地看到在这本书中包含了大量非常聪明的调试技巧。它不仅介绍了如何对付那些难以诊断的问题,而且还详细解释了在这些技术后面隐藏的底层机制。本书中介绍的实用方法对于人们理解一些关键的Windows领域是非常有帮助的。” ——Adrian Marinescu,软件架构师就职于Microsoft “本书详细描述了如何调试和修复软件中的各种问题。本书的内容是根据作者在跟踪各种软件问题时所积累的丰富经验而提炼出来的。本书不仅给出了各种问题的代表性示例,而且还介绍了在分析这些问题时所使用的工具,以及这些工具的详细使用说明。无论是软件开发人员还是软件测试人员,在理解了这些示例后都将受益匪浅。”   ——Daniel Mihai,软件设计工程师就职于Microsoft开发人员生产率工具(Developer Productivity Tools)部门 “我编写了WinDbg符号处理器、符号服务器以及源文件服务器。即便如此,我仍然无法教会我妻子使用WinDbg。她认为这个工具非常难用,因此并不了解这个工具的强大之处。我买了这本书送给她,这样她就可以知道如何使用WinDbg。本书中关于事后调试(Postmortem Debugging)和内存破坏等方面的内容,有效地揭示了在程序出错时的运行环境和操作系统的内部状态。Mario和Daniel在调试领域积累了丰富经验,因为他们经常被要求解决陌生程序中一些莫名其妙的问题。这也是具有工业强度的调试技术的真正意义所在。” ——Pat Styles就职于Microsoft 作者简介 作者:(美国)Mario Hewardt (美国)Daniel Pravar

2011-04-28

人月神话 PDF

内容简介 《人月神话》原文:The Mythical Man-Month: The Essays on Software Engineering, 2nd ed.在软件领域,很少能有像《人月神话》一样具有深远影响力并且畅销不衰的著作。 Brooks博士为人们管理复杂项目提供了最具洞察力的见解。既有很多发人深省的观点,又有大量软件工程的实践。本书内容来自Brooks博士在IBM公司System/360家族和OS/360中的项目管理经验。该书英文原版一经面世,即引起业内人士的强烈反响,后又译为德、法、日、俄中等多种语言,全球销量数百万册。确立了其在行业内的经典地位。 在本书第一次出版32年后的今天,我们重新整理了Brooks博士的经典内容,并将国内软件开发领域先行者们对《人月神话》中的实践及系统理论的使用经验和心得集结成册与大家共享,更使本书成为国内从业者的必读经典之一。 编辑推荐 “又见人月神话 重温软工经典” 1.软件领域绝无仅有,32年之后依旧畅销不衰的传奇经典! 2.软件开发人员、软件项目经理、系统分析师必读的一本书! 《人月神话》读者包括:软件开发人员、软件项目经理、系统分析师等IT从业者。 媒体推荐 书评 各路英豪品评人月实践 软工经典再启江湖争论 汇集国内软件开发领域先行者们对《人月神话》中的实践及系统理论的使用经验和心得! Frank Chance 介绍 出版于1975年的《人月神话》是软件开发方面的经典作品。1995年版包括了令人感兴趣的新的几章,但原来的随笔依然是这本书的心脏与灵魂。在这本书中,Brooks解决了如何组织和管理大规模编程项目的问题。这些项目要求成百上千的程序员,产生几百万行代码(想想SAP、Oracle数据库引擎、Windows2000)。这部书由一系列简明的随笔组成。在这篇评论中我将讨论开篇随笔――我的最爱之一。 焦油坑 Brooks将大系统编程作比喻作史前的焦油坑来开始他的第一篇随笔:“记忆中,我们看到恐龙、猛犸象、剑齿虎正在挣脱沥青的魔爪。挣扎得越剧烈,陷入的越深,没有哪只野兽足够强壮或熟练,它们最终都沉没了。大系统编程在过去的十年间就像焦油坑,许多大而强有力的野兽在其中已经惨烈地失败了。大部分已实现并在运行的系统,很少有达到目标、时间表和预算的。大和小、厚重和细实,一个接一个的团队卷入了沥青(陷阱)。没有什么事情似乎会导致这个困难――任何特殊的手掌都能被拉出来。但同时并相互作用的因数的相互聚集导致运动越来越慢。每个人似乎都惊讶于问题的难缠,难于面对它的本质。” 记住,这些话写于1975年。今天它们仍然可用吗?考虑一下WindowsNT5.0。第一次计划于1997年发布,随后延迟到1998年早期,1998年末,然后是1999年(为此它被重新命名为Windows2000)。这儿是一些公开的估计: ● 5,000程序员。 ● 35,000,000行代码。 显然,NT5.0是个大系统编程项目。同样显而易见,Brooks的焦油坑在今天同1975年一样普遍! 让我们继续NT5.0的例子。假设最糟糕的情况,全部35,000,000 行代码都是新编的。有理由假设开发工作大致在1994年开始。所以我们有: ● 5,000 程序员 X 5 年 = 25,000 程序员年 ● 35,000,000 行代码/ 25,000 程序员年 = 1,400 行/程序员年。 如果你是个程序员,或者你只接受过编程课程的教育,这个数字(1,400行每年)似乎令人惊异的低。我们当中的大部分人都能在一两天内堆积出接近一千行的代码。什么使得Microsoft的程序员一整年才产出1,400行代码? 两种可能性跃入我们的脑海: ● Microsoft 雇用了5,000名不合格的程序员去开发NT 5.0。 或者 ● 写一个大规模的程序系统产品远难于堆砌出单一的程序。 Brooks将讨论认为后一个答案是正确的。他由定义术语开始: (1) 程序 一个独立的程序是我们两天编程狂欢的结果。它是准备自己运行于我们编程的那台机器上的。如果我们加上文档、通用化代码、编写测试用例、使得代码可以由其他无关的编程人员来维护,我们就有了: (2) 程序产品 另外,如果我们接受我们的程序,并且完整地定义了它的接口使得它达到预定义的规范,并且测试了它和大量的其它组件的交互作用,我们就有: (3) 程序系统组件 并且如果我们都做了(加上文档、通用化代码、编写测试用例、使得代码可维护、定义了接口、测试了交互作用),我们就有: (4) 程序系统产品组件 Brooks用手边的三倍规则说明在上述每个步骤中的工作要求: (2) =3倍(1)的人力 (3) =3倍(1)的人力 (4)=9倍(1)的人力 或者,换句话说,开发一个独立的程序仅仅要求开发一个程序系统组件的1/9的人力。 回到Microsoft的例子,如果我们将这个9倍的因子乘以1,400行每程序员年的生产力测量,我们得到12,600行每程序员年(举例来说,假设我们掌握每一程序员,并且使得他们独立工作,堆砌在单一的程序上)。在一篇独立的随笔中,Brooks引用一个发现这点的经理的话说,平均他的每个程序员仅能将他的一半时间用于开发――其它时间由文书工作、会议和各种其它任务所占据。把这些因素考虑到Microsoft的例子中,我们达到了25,200行每程序员年。那么,Microsoft的程序员开始看来非常可敬。另一个测量自1975年来有了很小的改变,Brooks引用的估计是1,000行每程序员年。如果上面引用的1,400行每程序员年是精确的,那么,它表现了在1975年到1995年20年间,生产力仅仅提升了1.75%每年。这个结果证实了Brooks的另一个假定——程序员的生产力相对是个常量,它不受开发所用的语言的影响。因此,实际的生产力收获来自于迁移到高级语言编程,这些语言每行表达了更多的实际工作。尽管目标是大系统项目,Brooks的解释常常被广泛的应用。例如,这个第一篇随笔用标有“手艺的快乐”和“手艺的悲哀”的小节来结束。在悲哀中,他讨论了荒废的问题: “…这个人们已经工作了很长时间的产品,显然在完成前将被废弃。同事和竞争者已经在热烈地用新的和更好的主意反击。人们的孩童般想法的取代已经不仅仅在构思,而且付诸时间表。这一切总是似乎比它的实际更糟糕。新的和更好的想法通常在完成之前不被应用;它仅仅被谈论。真老虎永远不能和纸老虎相比。” 小结 Brooks的随笔涉及到了大系统编程所固有的多种挑战,但对任何投身于软件开发的人来说读这本书都是有用的。题名的随笔(《人月神话》)讨论了许多编程任务的不可分割性,和为什么增加人力到软件项目中无法产生效用。我的另一篇最爱是“贵族、民主和系统设计”(概念完整性的讨论)和“计划和投放之路”(在付运前多次交付的明确计划的益处)。一些问题已经因为技术的进步而废弃,例如关于如何在一个大型团队中分发写好的文档。然而,你可能惊讶Brooks面对的许多问题今天如何阻止我们。另外的益处是Brooks简洁、清晰的作品读起来令人愉快。如果你是个程序员,如果你和程序员一起工作,如果你管理程序员,你应该阅读这本书。 作者简介 作者:(美)弗雷德里克·布鲁克斯 译者:汪颖 Frederick P.Brooks,Jr.曾荣获美国计算机领域最具声望的图灵奖(A.M.Turing Award)桂冠。美国计算机协会(ACM)称赞他“对计算机体系结构、操作系统和软件工程作出了里程碑式的贡献”。 Brooks博士是北卡罗莱纳大学Kenan-Flagler商学院的计算机科学教授。他被认为是“IBM 360系统之父”,曾担任360系统的项目经理,以及360系统项目设计阶段的经理。凭借在此项目中的杰出贡献,他与Bob Evans和Erich Bloch在1985年荣获了美国国家技术奖(National Medal of Technology)。Brooks博士早期曾担任IBM公司Stretch和Harvest计算机的体系结构设计师。 Brooks博士创立了北卡罗莱纳大学的计算机科学系,并在1964~1984年期间担任系主任。他还曾任职于美国国家科技局和国防科学技术委员会。Brooks博士目前的教学和研究方向是计算机体系结构、分子模型绘图和虚拟环境设计。 目录 第1章 焦油坑  编程系统产品  职业的乐趣  职业的苦恼 第2章 人月神话  乐观主义  人月  系统测试  空泛的估算  重复产生的进度灾难 第3章 外科手术队伍  问题  Mills的建议  如何运作  团队的扩建 第4章 贵族专制、民主政治和系统设计  概念的完整性  获得概念的完整性  贵族专制统治和民主政治  在等待时,实现人员应该做什么 第5章 画蛇添足  结构师的交互准则和机制  自律——开发第二个系统所带来的后果 第6章 贯彻执行  文档化的规格说明——手册  形式化定义  直接整合  会议和大会  多重实现  电话日志  产品测试 第7章 为什么巴比伦塔会失败  巴比伦塔的管理教训  大型编程项目中的交流  项目工作手册  大型编程项目的组织架构 第8章 胸有成竹 第9章 削足适履 第10章 提纲挈领  第11章 未雨绸缪 第12章 干将莫邪 第13章 整体部分 第14章 祸起萧墙 第15章 另外一面 第16章 没有银弹 第17章 再论“没有银弹” 第18章 《人月神话》的观点:是与非? 第19章 20年后的《人月神话》 结束语:令人向往、激动人心和充满乐趣的50年 注解与参考文献

2011-04-28

程序调试思想与实践 PDF

原书名: The Science of Debugging 原出版社: Coriolis 作者: 美特列斯美.元赫 著 邓劲生 等译 出版社: 中国水利水电出版社 书号: 7508410084 出版日期:2002-3-1 开本: 页码: 364

2011-04-28

Windows程序调试 PDF

作者:(美)Everett N.McKay,Mike Wooding 译者:何健辉 许俊娟 董伟 出版社:中国电力出版社 出版日期:2002年5月 内容简介回到顶部↑    调试Windows程序是一件繁琐而又复杂的事情,掌握必要的调试策略却可以使这些工作变得轻松起来。本书精选了进行Windows调试所需的基础调试技巧,共分为三个大部分。第一部分介绍调试策略,帮助理解调试过程,以及如何使用C++语言、断言、跟踪和异常来预防、揭示、诊断和消除错误。第二部分介绍C++和Windows中的调试工具。第三部分介绍调试技术,帮助读者充分利用Visua C++的调试工具,并特别论述了与调试内存相关的问题、多线程问题和COM问题。本书将重点放在调试概念上,而不是简单地介绍工具,因此具有很强的实用性,是您在程序开发时的最佳选择。    本书送合有一定Visual C++基础知识的程序开发员及计算机爱好者阅读。 目录回到顶部↑ 常见问题 前言 简介 第一部分调试策略 第1章 调试的过程 1.1 错误的调试五步曲 1.2 正确的调试五步曲 1.3 确定错误的存在 1.4 收集错误信息 1.5 分析错误信息 1.6 消除错误 1.7 修改的验证 1.8 巧妙地而不是艰苦地调试 1.9 推荐阅读 第2章 编写便于调试的c++代码 2. 1 设计 2. 2 c++编程风格 2.3 c++语言 2.4 visual c++编译器 2. 5 推荐阅读 .第3章 使用断言 3.1 断言的局限性 3.2 断言的类型 3.3 更多的mfc断言宏 3.4 自定义断言 3.5 可移植的断言(portable assertion) 3.6 使用断言的策略 3.7 不变关系 3.8 断言模式 3.9 为你的断言书写文档注释 3.10 实现assertvalid 3.11 防御性的编程(defensive programming) 3.12 错误处理 3.13 各种各样的提示 3.14 推荐阅读 第4章 使用跟踪语句 4.1 跟踪语句的类型 4. 2 自定义的跟踪语句 4. 3 跟踪语句策略 4. 4 各种技巧 4.5 推荐阅读 第5章 使用异常和返回值 5.1 不正确的错误处理结果 5.2 策略的需要 5.3 使用异常 5.4 使用返回值 5.5 异常和错误 5.6 c++异常和windows结构异常处理比较 5.7 将结构异常转化为c++异常 5.8 异常的性能 5.9 异常策略 5.10 使用异常的防御性编程 5.11 调试异常 5.12 各种技巧 5.13 推荐阅读 第二部分调试工具 第6章 在windows中调试 6.1 事后调试 6.2 windows api错误码 6.3 windows异常基础知识 6.4 可移植的可执行文件基础知识 6.5 dll重定位 6.6 汇编语言基础知识 6.7 使用映射文件调试 6.8 使用pdb文件调试 6. 9 使用windows 98崩溃对话框调试 6.10 使用dr.watson调试 6.11 各种技巧 6.12 推荐阅读 第7章 使用visua c++调试器调试 7.1 编译与链接选项 7. 2 调试版本与发布版本 7.3 调试发布版本 7.4 测试版本 7.5 调试符号 7.6 调试窗日 7.7 查看表达式 7.8 数据标签表达式 7.9 寄存器和伪寄存器 7.10 观察窗口的格式化符号 7.11 使用 autoexp.dat 7.12 使用断点调试 7.13 即时调试 7.14 远程调试 7.15 编辑继续调试 7.16 推荐阅读 第三部分调试技术 第8章 基本调试技术 8.1 普通调试技术 8. 2 visualc++调试器技术 8.3 windows调试技术 8.4 mfc调试技术 8. 5 推荐阅读 第9章 内存调试 9.1 内存泄漏为什么不可接受 9.2 内存调试的类型 9.3 使用调试堆 9.4 调试堆是如何工作的 9.5 查看windows内存地址 9.6 调试内存破坏 9.7 调试内存泄漏 9.8 调试windows资源泄漏 9.9 调试 windows线程难栈 9.10 各种技巧 9.11 推荐阅读 第10章 调试多线程程序 10.1 什么是多线程 10.2 多线程程序的几个要点 10.3 书写线程安全的代码 10.4 线程的创建和终止 10.5 理解调试器 10.6 调试技术 10.7 推荐阅读 第11章 com调试 11.1 本章基础 11.2 防御性的com编程实战经验 11.3 调试基com dll 11.4 调试基com exe 11.5 调试配定组件 11.6 调试被asp调用的基com dll 11.7 推荐阅读 第12章 非常规策略 12.1 检查简单的东西 12. 2 开动你的脑筋 12.3 重新检查你的假设 12. 4 检查明显的事物 12.5 检查代码 12.6 检查系统 12.7 再次检查文档 12. 8 依靠其他人 12.9 使用新闻组 12.10 结束危险的生活

2011-04-28

软件调试实战 PDF

软件调试实战 [平装] ~ Thorsten Grotker (作者), Ulrich Holtmann (作者), Holger Keding (作者), 等 (作者), 赵俐 (译者) 出版社: 人民邮电出版社; 第1版 (2010年2月1日) 外文书名: The Developer's Guide to Debugging 丛书名: 图灵程序设计丛书 平装: 190页 正文语种: 简体中文 开本: 16 ISBN: 9787115218858 内容简介 《软件调试实战》主要讲述C/C++程序的调试和分析,书中的调试技术也可以应用于其他语言编写的程序。《软件调试实战》在讲述简单的源代码分析和测试的基础上,讲述了现实的程序中经常遇到的一些问题(如程序链接、内存访问、并行处理和性能分析)并给出了解决方案。 《软件调试实战》适合软件开发人员、调试人员阅读和使用。 编辑推荐 《软件调试实战》是4位深谙软件调试之道的资深开发人员的实战经验总结,不仅讲述了简单的源代码调试,还涵盖了各个领域的最常见的实际问题,包括程序链接、内存存取、并行处理和性能分析。最后几章讨论了静态检查器,介绍了一些较好地运用了调试技巧的代码编写方法。书中讲述的调试技术不仅可以用于C/C++程序,还可以用于其他语言编写的程序。 软件调试是软件开发中最令人苦恼的环节。反复思考每个假设,反复斟酌从需求到实现的每个步骤,将耗费大量时间。最糟糕的是,调试根本无法预测,我们永远无法知道修复一个bug需要多长时间,甚至根本不知道是否还能修复它。然而,如果采用系统的方式并配备合适的工具,调试也会充满乐趣,成功的调试就像解出难题、猜出谜语或破获奇案一样令人激动。这本书就能帮你实现这一惊天逆转。 Amazon五星图书 Synopsys公司专家的调试经验总结 软件调试权威指南 媒体推荐 “如果我最初开始调试程序时就能有这样一本书,该多好啊!我想我会屏息注视,看看这些调试工具将带给我什么惊喜,而且采纳书中的建议必然会节省大量手工调试的时间,可以将这些时间投入到其他工作中。譬如说,我可以使代码更可靠,这样最后可能根本不必做任何调试了。”   ——Andreas Zeller,GNU DDD创始人 “逐页阅读完本书之后,我必须承认这是我读过的最好的一本软件调试图书,在很多方面都是其他书不能匹敌的……强烈推荐软件调试人员阅读。”   ——www.dumpanalysis.org(崩溃转储分析和调试门户网站) 作者简介 作者:(德国)Thorsten Grotker (德国)Ulrich Holtmann (德国)Holger Keding 等 译者:赵俐 Thorsten Grotker,Ulrich Holtmann,Holger Keding,Markus Wloka4位作者均拥有德国或美国著名高等学府的博士学位,目前都任职于EDA(电子设计自动化)软件领导厂商Synopsys(新思)公司,分别担任研发主管、资深软件工程师等职位,负责开发编译器和调试工具,具有解决各种调试问题的丰富经验。 目录 第1章 谁编写软件,谁制造bug(为什么需要本书)1 第2章 系统性调试方法3 2.1 为什么要遵循结构化的过程3 2.2 充分利用机会3 2.3 13条黄金规则5 2.3.1 理解需求5 2.3.2 制造失败6 2.3.3 简化测试用例6 2.3.4 读取恰当的错误消息6 2.3.5 检查显而易见的问题6 2.3.6 从解释中分离出事实7 2.3.7 分而治之7 2.3.8 工具要与bug匹配8 2.3.9 一次只做一项更改9 2.3.10 保持审计跟踪9 2.3.11 获得全新观点9 2.3.12 bug不会自己修复9 2.3.13 用回归测试来检查bug修复10 2.4 构建一个好的工具包10 2.4.1 工具箱11 2.4.2 每天运行测试,防止出现bug11 2.5 认清敌人——遇到bug家族13 2.5.1 常见bug13 2.5.2 偶发性bug13 2.5.3 Heisenbug13 2.5.4 隐藏在bug背后的bug14 2.5.5 秘密bug——调试与机密性14 2.5.6 更多读物15 第3章 查找根源——源代码调试器17 3.1 可视化程序行为17 3.2 准备简单的可预测的示例18 3.3 使调试器与程序一起运行18 3.4 学习在程序崩溃时执行栈跟踪21 3.5 学习使用断点21 3.6 学习在程序中导航22 3.7 学习检查数据:变量和表达式22 3.8 一个简单示例的调试会话23 第4章 修复内存问题27 4.1 C/C++中的内存管理——功能强大但很危险27 4.1.1 内存泄漏27 4.1.2 内存管理的错误使用28 4.1.3 缓冲区溢出28 4.1.4 未初始化的内存bug28 4.2 有效的内存调试器28 4.3 示例1:检测内存访问错误29 4.3.1 检测无效的写访问30 4.3.2 检测对未初始化的内存的读取操作30 4.3.3 检测内存泄漏31 4.4 示例2:对内存分配/释放的不完整调用31 4.5 结合使用内存调试器和源代码测试器33 4.6 减少干扰,排查错误33 4.7 何时使用内存调试器34 4.8 约束34 4.8.1 测试用例应该有很好的代码覆盖率34 4.8.2 提供更多计算机资源35 4.8.3 可能不支持多线程35 4.8.4 对非标准内存处理程序的支持35 第5章 剖析内存的使用37 5.1 基本策略——主要步骤37 5.2 示例:分配数组38 5.3 第1步:查找泄漏38 5.4 第2步:设置期望值38 5.5 第3步:测量内存使用39 5.5.1 使用多个输入39 5.5.2 在固定时间间隔停止程序39 5.5.3 用简单工具测量内存使用40 5.5.4 使用top40 5.5.5 使用WindowsTaskManager41 5.5.6 为testmalloc选择相关输入值42 5.5.7 确定机器上的内存是如何被释放的42 5.5.8 使用内存剖析工具43 5.6 第4步:查明大部分内存被哪些数据结构占用了44 5.7 综合练习——genindex示例45 5.7.1 核实没有大的内存泄漏46 5.7.2 估计内存使用46 5.7.3 测量内存使用46 5.7.4 查找使用内存的数据结构47 第6章 解决性能问题51 6.1 分步查找性能bug51 6.1.1 执行前期分析51 6.1.2 使用简单的时间测量方法52 6.1.3 创建测试用例52 6.1.4 使测试用例具有可再现性53 6.1.5 检查程序的正确性53 6.1.6 创建可扩展的测试用例53 6.1.7 排除对测试用例的干扰54 6.1.8 用time命令测量时可能会发生错误和偏差54 6.1.9 选择一个能够揭示运行时间瓶颈的测试用例55 6.1.10 算法与实现之间的差异56 6.2 使用剖析工具58 6.2.1 不要编写自己的剖析工具58 6.2.2 剖析工具的工作原理58 6.2.3 了解gprof59 6.2.4 了解Quantify63 6.2.5 了解Callgrind64 6.2.6 了解VTune66 6.3 分析I/O性能68 第7章 调试并行程序71 7.1 用C/C++编写并行程序71 7.2 调试竞争条件72 7.2.1 使用基本调试器功能来查找竞争条件73 7.2.2 使用日志文件来查找竞争条件74 7.3 调试死锁76 7.3.1 如何确定正在运行的是哪个线程77 7.3.2 分析程序的线程78 7.4 了解线程分析工具78 7.5 异步事件和中断处理程序80 第8章 查找环境和编译器问题83 8.1 环境变更——问题的根源83 8.1.1 环境变量83 8.1.2 本地安装依赖84 8.1.3 当前工作目录依赖84 8.1.4 进程ID依赖84 8.2 如何查看程序正在做什么84 8.2.1 用top来查看进程84 8.2.2 用ps来查找应用程序的多个进程85 8.2.3 使用/proc/来访问进程85 8.2.4 使用strace跟踪对操作系统的调用85 8.3 编译器和调试器也有bug87 8.3.1 编译器bug87 8.3.2 调试器和编译器兼容性问题88 第9章 处理链接问题89 9.1 链接器的工作原理89 9.2 构建并链接对象89 9.3 解析未定义的符号91 9.3.1 丢失链接器参数91 9.3.2 搜索丢失的符号91 9.3.3 链接顺序问题92 9.3.4 C++符号和名称改编93 9.3.5 符号的反改编94 9.3.6 链接C和C++代码94 9.4 具有多个定义的符号95 9.5 信号冲突96 9.6 识别编译器和链接器版本不匹配96 9.6.1 系统库不匹配97 9.6.2 对象文件不匹配97 9.6.3 运行时崩溃98 9.6.4 确定编译器版本98 9.7 解决动态链接问题100 9.7.1 链接或载入DLL100 9.7.2 无法找到DLL文件101 9.7.3 分析载入器问题102 9.7.4 在DLL中设置断点103 9.7.5 提供DLL问题的错误消息104 第10章 高级调试107 10.1 在C++函数、方法和操作符中设置断点107 10.2 在模板化的函数和C++类中设置断点109 10.3 进入C++方法110 10.3.1 用step-into命令进入到隐式函数中112 10.3.2 用step-out命令跳过隐式函数112 10.3.3 利用临时断点跳过隐式函数113 10.3.4 从隐式函数调用返回113 10.4 条件断点和断点命令114 10.5 调试静态构造/析构函数116 10.5.1 由静态初始化程序的顺序依赖性引起的bug117 10.5.2 识别静态初始化程序的栈跟踪118 10.5.3 在静态初始化之前连接调试器118 10.6 使用观察点119 10.7 捕捉信号120 10.8 捕获异常122 10.9 读取栈跟踪124 10.9.1 带调试信息编译的源代码的栈跟踪124 10.9.2 不带调试信息编译的源代码的栈跟踪124 10.9.3 不带任何调试信息的帧125 10.9.4 实际工作中的栈跟踪125 10.9.5 改编后的函数名称126 10.9.6 被破坏的栈跟踪126 10.9.7 核心转储127 10.10 操纵正在运行的程序128 10.10.1 修改变量130 10.10.2 调用函数131 10.10.3 修改函数的返回值132 10.10.4 中止函数调用132 10.10.5 跳过或重复执行个别语句133 10.10.6 输出和修改内存内容133 10.11在没有调试信息时进行调试135 10.11.1 从栈读取函数参数137 10.11.2 读取局部/全局变量和用户定义的数据类型138 10.11.3 在源代码中查找语句的大概位置139 10.11.4 走查汇编代码140 第11章 编写可调试的代码143 11.1 注释的重要性143 11.1.1 函数签名的注释144 11.1.2 对折中办法的注释144 11.1.3 为不确定的代码加注释144 11.2 采用一致的编码风格144 11.2.1 仔细选择名称145 11.2.2 不要使用“聪明过头”的结构145 11.2.3 不要压缩代码145 11.2.4 为复杂表达式使用临时变量145 11.3 避免使用预处理器宏146 11.3.1 使用常量或枚举来替代宏146 11.3.2 使用函数来替代预处理器宏148 11.3.3 调试预处理器输出149 11.3.4 使用功能更强的预处理器150 11.4 提供更多调试函数151 11.4.1 显示用户定义的数据类型151 11.4.2 自检查代码152 11.4.3 为操作符创建一个函数,以便帮助调试153 11.5 为事后调试做准备153 第12章 静态检查的作用155 12.1 使用编译器作为调试工具155 12.1.1 不要认为警告是无害的156 12.1.2 使用多个编译器来检查代码158 12.2 使用lint158 12.3 使用静态分析工具158 12.3.1 了解静态检查器158 12.3.2 将静态检查器检测到的错误减至(接近)零160 12.3.3 完成代码清理后重新运行所有测试用例160 12.4 静态分析的高级应用161 第13章 结束语163 附录A 调试命令165 附录B 工具资源167 附录C 源代码179 参考文献189 序言 在所有软件开发工作中,调试或许是最令人苦恼的。调试工作极易受到指责,因为技术失败即意味着做人失败,而且矛头直指调试人员,昭示出他们所犯下的错误。由于必须反复思考每个假设,反复斟酌从需求到实现的每个步骤,因此调试将耗费大量时间。最糟糕的是,调试还无法预测,我们永远无法知道修复一个bug需要多长时间,甚至根本不知道是否能够修复它。 问一下开发人员他们生活中最沮丧的时刻,大多数回答将与调试有关。也许现在正是深夜11点,你仍在忙着调试,正当对程序进行走查时,你的家人打电话给你,问你到底什么时候才能回家,而你只希望尽快放下电话,因为好不容易得到的观察结果和推断正要从脑中溜走。此时,你可能最后有两种选择:一是重新调试,二是过后再试图重修旧好。据我个人估计,调试是导致程序员离婚的第一大原因。 然而,调试也蕴含着乐趣,就像解出难题、猜出谜语或破获谋杀案一样令人激动,但前提条件是必须采用系统性的方式并配备正确的工具。这正是本书的用武之地。本书四位作者直接与那些固持己见的开发者对话,直截了当地提出解决调试问题的建议,并给出了真正快速的解决方案。无论是解决内存问题,调试并行程序,还是处理工具链引入的问题,本书都能够提供“急救措施”,书中的建议都是经过反复尝试和验证的。 如果我最初开始调试程序时就能有这样一本书,该多好啊!我想我会屏息注视,看看这些调试工具将带给我什么惊喜,而且采纳书中的建议,必然会节省大量手工调试的时间,并可将这些时间投入到其他工作中。譬如说,可以使代码更可靠,这样最后可能根本不必做任何调试了。 当然,这是专业编程的长期目标,即从一开始就编写正确的代码,通过某种确认或验证方法来杜绝所有错误(或至少检测到错误)。目前,断言和单元测试已经在提高程序可信度方面提供了很多帮助。未来可能会有一些用于行业级系统的成熟验证方法。我们现在尚未实现这样的方法,这可能需要很多年,而且当达到这个目标时,所实现的方法肯定不会适用于现在的编程语言。在处理当今的程序,特别是那些C和C++程序时,我们仍将在调试上花费一定时间——这正是本书的宝贵价值所在。

2011-04-28

Linux内核源代码情景分析 (上下册 高清非扫描 )

本PDF电子书包含上下两册,共1576页,带目录,高清非扫描版本。 作者: 毛德操 胡希明 丛书名: Linux内核源代码情景分析 出版社:浙江大学出版社 目录 第1章 预备知识 1.1 Linux内核简介. 1.2 Intel X86 CPU系列的寻址方式 1.3 i386的页式内存管理机制 1.4 Linux内核源代码中的C语言代码 1.5 Linux内核源代码中的汇编语言代码 第2章 存储管理 2.1 Linux内存管理的基本框架 2.2 地址映射的全过程 2.3 几个重要的数据结构和函数 2.4 越界访问 2.5 用户堆栈的扩展 2.6 物理页面的使用和周转 2.7 物理页面的分配 2.8 页面的定期换出 2.9 页面的换入 2.10 内核缓冲区的管理 2.11 外部设备存储空间的地址映射 2.12 系统调用brk() 2.13 系统调用mmap() 第3章 中断、异常和系统调用 3.1 X86 CPU对中断的硬件支持 3.2 中断向量表IDT的初始化 3.3 中断请求队列的初始化 3.4 中断的响应和服务 3.5 软中断与Bottom Half 3.6 页面异常的进入和返回 3.7 时钟中断 3.8 系统调用 3.9 系统调用号与跳转表 第4章 进程与进程调度 4.1 进程四要素 4.2 进程三部曲:创建、执行与消亡 4.3 系统调用fork()、vfork()与clone() 4.4 系统调用execve() 4.5 系统调用exit()与wait4() 4.6 进程的调度与切换 4.7 强制性调度 4.8 系统调用nanosleep()和pause() 4.9 内核中的互斥操作 第5章 文件系统 5.1 概述 5.2 从路径名到目标节点 5.3 访问权限与文件安全性 5.4 文件系统的安装和拆卸 5.5 文件的打开与关闭 5.6 文件的写与读 5.7 其他文件操作 5.8 特殊文件系统/proc 第6章 传统的Unix进程间通信 6.1 概述 6.2 管道和系统调用pipe() 6.3 命名管道 6.4 信号 6.5 系统调用ptrace()和进程跟踪 6.6 报文传递 6.7 共享内存 6.8 信号量 第7章基于socket的进程间通信 7.1系统调用socket() 7.2函数sys—socket()——创建插口 7.3函数sys—bind()——指定插口地址 7.4函数sys—listen()——设定server插口 7.5函数sys—accept()——接受连接请求 7.6函数sys—connect()——请求连接 7.7报文的接收与发送 7.8插口的关闭 7.9其他 第8章设备驱动 8.1概述 8.2系统调用mknod() 8.3可安装模块 8.4PCI总线 8.5块设备的驱动 8.6字符设备驱动概述 8.7终端设备与汉字信息处理 8.8控制台的驱动 8.9通用串行外部总线USB 8.10系统调用select()以及异步输入/输出 8.11设备文件系统devfs 第9章多处理器SMP系统结构 9.1概述 9.2SMP结构中的互斥问题 9.3高速缓存与内存的一致性 9.4SMP结构中的中断机制 9.5SMP结构中的进程调度 9.6SMP系统的引导 第10章系统引导和初始化 10.1系统引导过程概述 10.2系统初始化(第一阶段) 10.3系统初始化(第二阶段) 10.4系统初始化(第三阶段) 10.5系统的关闭和重引导

2011-03-27

设计模式:可复用面向对象软件的基础

设计模式:可复用面向对象软件的基础 [平装] ~ Erich Gamma (作者), Richard Helm (作者), Ralph Johnson (作者), John Vlissides (作者), 李英军 (译者), 等 (译者) 出版社: 机械工业出版社; 第1版 (2007年1月1日) 丛书名: 计算机科学丛书 平装: 254页 开本: 16开 ISBN: 7111075757 内容简介 《设计模式:可复用面向对象软件的基础》是引导读者走出软件设计迷宫的指路明灯,凝聚了软件开发界几十年设计经验的结晶。四位顶尖的面向对象领域专家精心选取了最具价值的设计实践,加以分类整理和命名,并用简洁而易于重用的形式表达出来。本书已经成为面向对象技术人员的圣经和词典,书中定义的23个模式逐渐成为开发界技术交流所必备的基础知识和语汇。 编辑推荐 《设计模式:可复用面向对象软件的基础》 自1995年出版以来,本书一直名列Amazon和各大书店销售榜前列。近10年后,本书仍是Addison-Wesley公司2003年最畅销的图书之一。中文版销售逾4万册。

2011-03-12

Linux面试题 200多道

包含200多道最常见的Linux笔试,面试题目,有填空,选择,问题三种类型,对面试笔试非常有用

2011-04-29

深入java虚拟机(第二版)

深入java虚拟机(第二版) 第1章 Java体系结构介绍 1.1 为什么使用Java 1.2 网络带来的挑战和机遇 1.3 体系结构 1.3.1 Java虚拟机 1.3.2 类装载器的体系结构 1.3.3 Java class文件 1.3.4 Java API 1.3.5 Java程序设计语言 1.4 Java体系结构的代价 1.5 结论 1.6 资源页 第2章 平台无关 2.1 为什么要平台无关 2.2 Java的体系结构对平台无关的支持 2.2.1 Java平台 2.2.2 Java语言 2.3.3 Java class文件 . 2.2.4 可伸缩性 2.3 影响平台无关性的因素 2.3.1 Java平台的部署 2.3.2 Java平台的版本 2.3.3 本地方法 2.3.4 非标准运行时库 2.3.5 对虚拟机的依赖 2.3.6 对用户界面的依赖 2.3.7 Java平台实现中的bug 2.3.8 测试 2.4 平台无关的七个步骤 2.5 平台无关性的策略 2.6 平台无关性和网络移动对象 2.7 资源页 第3章 安全 3.1 为什么需要安全性 3.2 基本沙箱 3.3 类装载器体系结构 3.4 class文件检验器 3.4.1 第一趟:class文件的结构检查 3.4.2 第二趟:类型数据的语义检查 3.4.3 第三趟:字节码验证 3.4.4 第四趟:符号引用的验证 3.4.5 二进制兼容 3.5 Java虚拟机中内置的安全特性 3.6 安全管理器和Java API 3.7 代码签名和认证 3.8 一个代码签名示例 3.9 策略 3.10 保护域 3.11 访问控制器 3.11.1 implies()方法 3.11.2 栈检查示例 3.11.3 一个回答“是”的栈检查 3.11.4 一个回答“不”的栈检查 3.11.5 doPrivileged()方法 3.11.6 doPrivileged()的一个无效使用 3.12 Java安全模型的不足和今后的发展 方向 3.13 和体系结构无关的安全性 3.14 资源页 第4章 网络移动性 4.1 为什么需要网络移动性 4.2 一种新的软件模式 4.3 Java体系结构对网络移动性的支持 4.4 applet:网络移动性代码的示例 4.5 Jini服务对象:网络移动对象的示例 4.5.1 Jini是什么 4.5.2 Jini如何工作 4.5.3 服务对象的优点 4.6 网络移动性:Java设计的中心 4.7 资源页 第5章 Java虚拟机 5.1 Java虚拟机是什么 5.2 Java虚拟机的生命周期 5.3 Java虚拟机的体系结构 5.3.1 数据类型 5.3.2 字长的考量 5.3.3 类装载器子系统 5.3.4 方法区 5.3.5 堆 5.3.6 程序计数器 5.3.7 Java栈 5.3.8 栈帧 5.3.9 本地方法栈 5.3.10 执行引擎 5.3.11 本地方法接口 5.4 真实机器 5.5 一个模拟:“Eternal Math” 5.6 随书光盘 5.7 资源页 第6章 Java class文件 6.1 Java class文件是什么 6.2 class文件的内容 6.3 特殊字符串 6.3.1 全限定名 6.3.2 简单名称 6.3.3 描述符 6.4 常量池 6.4.1 CONSTANT_Utf8_info表 6.4.2 CONSTANT_Integer_info表 6.4.3 CONSTANT_Float_info表 6.4.4 CONSTANT_Long_info表 6.4.5 CONSTANT_Double_info表 6.4.6 CONSTANT_Class_info表 6.4.7 CONSTANT_String_info表 6.4.8 CONSTANT_Fieldref_info表 6.4.9 CONSTANT_Methodref_info表 6.4.10 CONSTANT_InterfaceMethodref_ info表 6.4.11 CONSTANT_NameAndType_info 表 6.5 字段 6.6 方法 6.7 属性 6.7.1 属性格式 6.7.2 Code属性 6.7.3 ConstantValue属性 6.7.4 Deprecated属性 6.7.5 Exceptions属性 6.7.6 InnerClasses属性 6.7.7 LineNumberTable属性 6.7.8 LocalVariableTable属性 6.7.9 SourceFile属性 6.7.10 Synthetic属性 6.8 一个模拟:“Getting Loaded” 6.9 随书光盘 6.10 资源页 第7章 类型的生命周期 7.1 类型装载、连接与初始化 7.1.1 装载 7.1.2 验证 7.1.3 准备 7.1.4 解析 7.1.5 初始化 7.2 对象的生命周期 7.2.1 类实例化 7.2.2 垃圾收集和对象的终结 7.3 卸载类型 7.4 随书光盘 7.5 资源页 第8章 连接模型 8.1 动态连接和解析 8.1.1 解析和动态扩展 8.1.2 类装载器与双亲委派模型 8.1.3 常量池解析 8.1.4 解析CONSTANT_Class_info入口 8.1.5 解析CONSTANT_Fieldref_info 入口 S.1.6 解析CONSTANT_Methodref_info 入口 8.1.7 解析CONSTANT_Interface- Methodref_info入口 8.1.8 解析CONSTANT_String_info入口 8.1.9 解析其他类型的入口 8.1.10 装载约束 8.1.11 编译时常量解析 8.1.12 直接引用 8.1.13 _quick指令 8.1.14 示例:Salutation程序的连接 8.1.15 示例:Greet程序的动态扩展 8.1.16 使用1.1版本的用户自定义类装 载器 8.1.17 使用1.2版本的用户自定义类装 载器 8.1.18 示例:使用forName()的动态扩展 8.1.19 示例:卸载无法触及的greeter类 8.1.20 示例:类型安全性与装载约束 8.2 随书光盘 8.3 资源页 第9章 垃圾收集 9.1 为什么要使用垃圾收集 9.2 垃圾收集算法 9.3 引用计数收集器 9.4 跟踪收集器 9.5 压缩收集器 9.6 拷贝收集器 9.7 按代收集的收集器 9.8 自适应收集器 9.9 火车算法 9.9.1 车厢、火车和火车站 9.9.2 车厢收集 9.9.3 记忆集合和流行对象 9.10 终结 9.11 对象可触及性的生命周期 9.11.1 引用对象 9.11.2 可触及性状态的变化 9.11.3 缓存、规范映射和临终清理 9.12 一个模拟:“Heap of Fish” 9.12.1 分配鱼 9.12.2 设置引用 9.12.3 垃圾收集 9.12.4 压缩堆 9.13 随书光盘 9.14 资源页 第10章 栈和局部变量操作 10.1 常量入栈操作 10.2 通用栈操作 10.3 把局部变量压入栈 10.4 弹出栈顶部元素,将其赋给局部变量 10.5 wide指令 10.6 一个模拟:“Fibonacci Forever” 10.7 随书光盘 10.8 资源页 第11章 类型转换 11.1 转换操作码 11.2 一个模拟:“Conversion Diversion” 11.3 随书光盘 11.4 资源页 第12章 整数运算 12.1 二进制补码运算 12.2 Inner Int:揭示Java int类型内部性质 的applet 12.3 运算操作码 12.4 一个模拟:“Prime Time” 12.5 随书光盘 12.6 资源页 第13章 逻辑运算 13.1 逻辑操作码 13.2 一个模拟:“Logical Results” 13.3 随书光盘 13.4 资源页 第14章 浮点运算 14.1 浮点数 14.2 Inner Float:揭示Java float类型内部 性质的applet 14.3 浮点模式 14.3.1 浮点值集合 14.3.2 浮点值集的转换 14.3.3 相关规则的本质 14.4 浮点操作码 14.5 一个模拟:“Circle of Squares” 14.6 随书光盘 14.7 资源页 第15章 对象和数组 15.1 关于对象和数组的回顾 15.2 针对对象的操作码 15.3 针对数组的操作码 15.4 一个模拟:“Three—Dimensional Array” 15.5 随书光盘 15.6 资源页 第16章 控制流 16.1 条件分支 16.2 五条件分支 16.3 使用表的条件分支 16.4 一个模拟:“Saying Tomato” 16.5 随书光盘 16.6 资源页 第17章 异常 17.1 异常的抛出与捕获 17.2 异常表 17.3 一个模拟:“Play Ball!” 17.4 随书光盘 17.5 资源页 第18章 finally子句 18.1 微型子例程 18.2 不对称的调用和返回 18.3 一个模拟:“Hop Around” 18.4 随书光盘 18.5 资源页 第19章 方法的调用与返回 19.1 方法调用 19.1.1 Java方法的调用 19.1.2 本地方法的调用 19.2 方法调用的其他形式 19.3 指令invokespecial 19.3.1 指令invokespecial和[init]()方法 19.3.2 指令invokespecial和私有方法 19.3.3 指令invokespecial和super关键字 19.4 指令invokeinterface 19.5 指令的调用和速度 19.6 方法调用的实例 19.7 从方法中返回 19.8 随书光盘 19.9 资源页 第20章 线程同步 20.1 监视器 20.2 对象锁 20.3 指令集中对同步的支持 20.3.1 同步语句 20.3.2 同步方法 20.4 Object类中的协调支持 20.5 随书光盘 20.6 资源页 附录A 按操作码助记符排列的指令集 附录B 按功能排列的操作码助记符 附录C 按操作码字节值排列的操作码助 记符 附录D Java虚拟机的一个模拟:“Slices of Pi”

2011-04-28

Robust Java中文版:Java异常处理测试与调试

Robust Java中文版:Java异常处理测试与调试 内容简介 处理异常涉及开发、设计和体系结构等方面的知识。本书共分3个部分。   第Ⅰ部分介绍Java异常的产生机理和用法,介绍一些最佳实践,讲述各类异常处理使用的一般API和技术。   第Ⅱ部分阐述可测试性设计,介绍故障模式分析,讨论常见API的异常及起因,分析J2EE体系结构和分布式API的异常模式。   第Ⅲ部分讨论在软件开发周期执行异常和错误处理,分析软件体系结构、设计模式、测试和调试,列举成熟的设计模式,介绍处理策略对系统体系结构的影响,讲述如何构建健壮系统。 编辑推荐 本书讲解了Java异常的原理及处理方法,系统地阐述了体系结构、设计、开发、测试和调试等主题,并讨论了如何构建健壮的系统,是编程人员、测试人员、项目经理和架构师的必备读物。 媒体推荐 书评 本书讲解了Java异常的原理及处理方法,系统地阐述了体系结构、设计、开发、测试和调试等主题,并讨论了如何构建健壮的系统,是编程人员、测试人员、项目经理和架构师的必备读物。 作者简介 Stephen Stelting,拥有十多年的软件开发、咨询和技术培训经验,目前在Sun公司的Broomfield培训中心任职,他为全球数以万计的开发人员提供了各类Java技术指导。Stephen参与了Applied Java Patterns(Sun Microsystems Press/Prentice Hall PTR)一书的编写,并经常在、JavaOne、SunNetwork和Colorado Software Summit等会议上发表演讲。 目录 第1章 异常概述/1 1.1 简介/1 1.2 异常概念/3 1.3 异常类层次结构/4 1.4 异常的处理或声明选项/5 1.5 可检测异常和非检测异常/7 1.6 异常的API /8 1.7 小结/10 第2章 异常处理技术和实践/11 2.1 简介/11 2.2 选择处理或声明/11 2.3 标准异常处理选项/12 2.4 异常处理注意事项/18 2.5 处理异常时提倡的事项/18 2.6 处理异常时忌讳的事项/19 第3章 高级异常处理概念/22 3.1 简介/22 3.2 自定义异常/22 3.3 链表异常/25 3.4 异常的本地化和国际化/26 3.5 子类/30 3.6 接口和抽象类的异常声明/30 3.7 异常栈跟踪/31 3.8 低级异常处理/34 第4章 异常和线程/39 4.1 简介/39 4.2 多线程系统中的异常/40 4.3 同步代码块中的异常/40 4.4 线程活动的异常风险/42 4.5 基于线程的通信的异常/43 4.6 死锁/46 4.7 取消线程/47 第5章 记录和断言/48 5.1 记录API /48 5.2 断言/56 第Ⅱ部分 异常处理和设计/59 第6章 异常处理和设计/59 6.1 简介/59 6.2 面向对象设计的原理/59 6.3 小结/70 第7章 Java核心语言中的异常/71 7.1 简介/71 7.2 基本数据类型/71 7.3 0bject类和JaVa中的对象/74 7.4 数组/79 7.5 jaVa.1ang包中的接口/80 7.6 String类和StringBuffer类/81 7.7 BigDecimal类和BigInteger类/82 7.8 包装类/83 第8章 集合和I/O /84 8.1 简介/84 8.2 集合架构/84 8.3 I/O API /89 8.4 I/O子类的异常和错误/94 8.5 新I/O API——NIO /100 8.6 NIOAPI中的异常/101 第9章 分布式Java API /108 9.1 简介/108 9.2 分布式通信的基本原理/108 9.3 远程方法调用(RMI) /112 9.4 Java命名和目录接口/121 9.5 Java数据库连接/125 9.6 小结/132 第10章 J2EE /133 10.1 简介/133 10.2 基本J2EE应用程序模型/133 10.3 客户层/136 10.4 Web层/137 10.5 EJB层/147 10.6 J2EE和EJB的事务/157 10.7 J2EE和异常处理的全局考虑事项/160 10.8 J2EE异常处理要考虑的因素/161 第Ⅲ部分 有效使用异常、错误和处理 第11章 体系结构、设计和异常模型/165 11.1 简介/165 11.2 架构师必须考虑异常和错误/166 11.3 体系结构、设计和开发/167 11.4 异常模型的关键体系结构决策/168 11.5 异常模型的体系结构决策/169 11.6 编写健壮的JaVa代码/174 第12章 模式/176 12.1 简介/176 12.2 体系结构模式/177 12.3 设计模式/179 12.4 创建模式/179 12.5 结构模式/182 12.6 行为模式/187 12.7 J2EE模式/191 12.8 集成层/192 12.9 表示层/194 12.10 业务层/196 12.11 小结/198 第13章 测试/199 13.1 测试的目的和意义/199 13.2 对测试的一些误解/199 13.3 盒外和盒内测试类型/201 13.4 JaVa的测试难点/204 13.5 测试实践/204 13.6 如何管理和运行测试/210 13.7 测试何时结束/212 第14章 调试/214 14.1 简介/214 14.2 调试的含义/214 14.3 调试原理和实践/215 14.4 调试策略/216 14.5 调试所见和方法/219 14.6 调试面临的特殊挑战/223 附录A 分析处理-声明的测试结果/226 附录B JUnit简明指南/230 B.1 基本信息/230 B.2 安装JUnit /230 B.3 运行JUnit /230 B.4 JUnit测试架构的体系结构/231 B.5 编写JUnit测试/232 B.6 测试设计的指导原则/238 附录C MyBuggySenrvlet——组件验证问题/239

2011-04-28

JSP设计(第二版) PDF

内容简介 从1999年开始,企业级Java风暴般席卷了整个Java编程社区,开发者们都已认识到它在构建分布式应用程序方面的潜力。而现在,JSP(JavaServer Pages )继续协调网页设计者和程序员之间的工作,让他们共同创建动态网站。JSP基于特定的Java Servlet技术而构建,用它可以更加轻松地开发动态Web应用程序,即使您是一位硬核程序员也无妨。《JSP设计(第二版)》得到了彻底的修订和更新,包括了JSP规范1.2版本中的重大变化,它包括关于JSP Standard Tag Library (JSTL)的详细内容——JSTL是一组殷切加入的JSP元素规范,用于多数JSP应用程序中需要的任务。本书开篇阐述了JSP如何充分利用Java servlet来创建高效、可移植的Web应用程序。书中还展示了如何用Apache Tomcat服务器启动JSP,并详细讲述了JSP语法和功能、错误处理和调试、身价验证和个性化,以及如何将JSTL用于数据库访问、XML处理及国际化等。 本书可以满足两类想学习JSP的专业人士的不同需要:一类是网页设计师,他们对如何在网页中使用JSP元素很感兴趣;另一类是程序员,他们对JSP API极为关注,并关心如何在企业级应用程序中有效地使用JSP。如果你是后者,本书还将指导你研究一些更深入的课题,诸如用普通的Apache Struts MVC框架将servlet和JavaBeans 与JSP集成在一起等。最后,本书作者展示了如何用逼真的示例开发自定义标记库,读者可将其用作自己JSP库的出发点。 媒体推荐 书评 “这是一本很棒的书。它是由一位不仅在JSP规范方面,而且在JSP和Servlet参考实现方面都做出了重要贡献的学者精心编写的。书中提供了大量有用的实例,是JSP领域一本极具收藏价值的书。”         ——Eduardo Pelegri-Llopart,JSP规范首席工程师     Hans Bergsten是Gefion Software的创始人,其主要成果是适用于Web应用程序开发的、基于JSP的组件。从servlet和JSP规范形成的时候开始,Hans始终是工作组中的积极参与者,作为Apache Jakarta项目管理委员会中的成员,他为用于两个规范的Apache Tomcat参考实现的开发做出了重要贡献。 作者简介 Hans Bergsten是Gefion Software的创始人,其主要成果是适用于Web应用程序开发的、基于JSP的组件。从servlet和JSP规范形成的时候开始,Hans始终是工作组中的积极参与者,作为Apache Jakarta项目管理委员会中的成员,他为用于两个规范的Apache Tomcat参考实现的开发做出了重要贡献。 目录 前言 第一部分 JSP应用程序基础  第一章 JSP介绍   什么是JSP?   为什么要使用JSP?   开始学习所需要的东西  第二章 HTTP和servlet基础   HTTP请求/应答模型   servlet   将Java Web应用程序打包  第三章 JSP概览   servlet所带来的问题   JSP页面剖析   JSP处理过程   使用MVC设计JSP应用程序  第四章 构建JSP环境   安装Java软件开发工具包   安装Tomcat服务器   测试Tomcat   安装本书的例子   Web应用程序例子概览 第二部分 JSP应用程序开发  第五章 产生动态内容   现在是几点?   输入和输出  第六章 使用脚本元素   Java启蒙   JSP隐含对象   条件处理   显示数值   使用表达式来设置属性   声明变量和方法  第七章 错误处理和调试   处理语法错误   对基于JSP的应用程序进行调试   处理运行时的错误  第八章 在JSP页面、请求和用户间共享数据   在页面间传递控制和数据   共享会话和应用程序数据   使用自定义行为   在线购物   内存使用策略  第九章 数据库访问   从JSP页面访问数据库   在不使用bean的情况下进行输入验证   使用事务   应用程序特定的数据库行为  第十章 身份验证和个性化   由容器提供的身份验证   应用程序控制的身份验证   另外一些安全问题  第十一章 国际化   Java是如何支持国际化和本地化的   产生本地化的输出   比特简史   处理本地化的输入  第十二章 拾遗补缺   缓冲   引入页面片段   XML和JSP   混合客户端代码和服务器端代码   对JSP页面进行预编译   防止JSP页面被缓存   URL是如何被解释的 第三部分 J2EE中的JSP和JSP组件开发  第十三章 Web应用程序模型   J2EE模型   MVC模型   可缩放性  第十四章 将servlet和JSP组合使用   将servlet用作控制器   使用Action对象来实现一个更加模块化的设计   在servlet和JSP页面间共享信息   对所有的运行时错误使用同一个JSP错误处理页面  第十五章 开发用于JSP的JavaBeans   作为JSP组件的JavaBeans   JSP bean 的例子   意想不到的行为  第十六章 开发JSP自定义行为   标记扩展基础   开发一个简单的行为   处理行为体   让行为互相协作   通过行为创建新的变量   开发迭代行为   创建TLD   语法验证   如何重用标记处理程序   打包和安装标记库  第十七章 开发数据库访问组件   使用连接和连接池   使用通用数据库bean   开发通用数据库自定义行为   开发应用程序特有的数据库组件 第四部分 附录   附录一 JSP元素的语法参考   附录二 JSP的API参考   附录三 本书例子中的自定义行为和类的参考   附录四 Web应用程序结构和配置描述符参考   附录五 JSP资源参考  词汇表

2011-04-28

JAVA多线程设计模式

内容简介 《JAVA多线程设计模式》中包含JAVA线程的介绍导读,12个重要的线程设计模式和全书总结以及丰富的附录内容。每一章相关线程设计模式的介绍,都举一反三使读者学习更有效率。最后附上练习问题,让读者可以温故而知新,能快速地吸收书中的精华,书中最后附上练习问题解答,方便读者学习验证。 编辑推荐 《JAVA多线程设计模式》通过浅显易懂的文字与实例来介绍JAVA线程相关的设计模式概念,并且通过实际的JAVA程序范例和UML图示来一一解说,书中有代码的重要部分加上标注使读者更加容易解读,再配合众多的说明图解,无论对于初学者还是程序设计高手来说,这都是一本学习和认识设计模式非常难得的好书。 作者简介 译者:博硕文化 编者:(日本)结城浩 目录 漫谈UML UML 类图 类和层次结构的关系 接口与实现 聚合 访问控制 类间的关联性 顺序图 处理流程和对象间的协调 时序图 Introduction 1 Java语言的线程 Java语言的线程 何谓线程 明为追踪处理流程,实则追踪线程 单线程程序 多线程程序 Thread类的run方法和start方法 线程的启动 线程的启动(1)——利用Thread类的子类 线程的启动(2)——利用Runnable接口 线程的暂时停止 线程的共享互斥 synchronized方法 synchronized阻挡 线程的协调 wait set——线程的休息室 wait方法——把线程放入wait set notify方法——从wait set拿出线程 notifyAll方法——从wait set拿出所有线程 wait、notify、notifyAll是Object类的方法 线程的状态移转 跟线程有关的其他话题 重点回顾 练习问题 Introduction 2 多线程程序的评量标准 多线程程序的评量标准 安全性——不损坏对象 生存性——进行必要的处理 复用性——可再利用类 性能——能快速、大量进行处理 评量标准的总结 重点回顾 练习问题 第1章 Single Threaded Execution——能通过这座桥的,只有一个人 第2章 Immutable——想破坏它也没办法 第3章 Guarded Suspension——要等到我准备好喔 第4章 Balking——不需要的话,就算了吧 第5章 Producer-Consumer——我来做,你来用 第6章 Read-Write Lock——大家想看就看吧,不过看的时候不能写喔 第7章 read-Per-Message——这个工作交给你了 第8章 Worker Thread——等到工作来,来了就工作 第9章 Future——先给您这张提货单 第10章 Two-Phase Termination——快把玩具收拾好,去睡觉吧 第11章 Thread-Specific Storage——每个线程的保管箱 第12章 Active Object——接受异步消息的主动对象 总结 多线程程序设计的模式语言 附录A 练习问题的解答 附录B Java的内存模型 附录C Java线程的优先级 附录D 线程相关的主要API 附录E 参考文献

2011-04-28

Java程序员面试宝典 125道题

Java程序员面试宝典 125道题,还不错,基本上常见的JAVA 面试题都包含了吧。。。。。。。。。。。

2011-04-28

Java编程艺术 PDF

内容简介 本书揭示了Java程序员如何创建高质量软件的奥秘。Herbert Schildt 和James Holmes两位编程大师通过将Java应用于某些有趣、实用的计算机问题和编程任务中,全面展示了Java语言的强大功能、敏捷性、多样性和艺术性。本书各章内容分别涉及到Java精髓、递归下降的表达式解析器、用Java实现语言解释器、用Java创建下载管理器、用Java实现E-mail客户端和Internet搜索、用Java修饰HTML、显示统计图表、金融应用中的Applet和Servlet、基于AI的问题求解等,每章给出的示例代码都可以直接运行,无需修改,而且读者可以从www.osborne.com站点上免费下载这些代码。本书是亚马逊网站上的五星级图书,相信读者能够通过研读本书大大提高自己的Java开发能力。本书代码示例易懂有趣,设计思想独特,定会使您受益匪浅! 目录 第1章 Java精髓 1 1.1 简单数据类型和对象:完美的平衡 2 1.2 通过垃圾回收实现内存管理 3 1.3 完美的简单多线程模型 3 1.4 完全集成的异常机制 4 1.5 对多态性支持的改进 5 1.6 通过字节码保证可移植性和安全性 5 1.7 丰富的Java API 6 1.8 Applet 7 1.9 继续变革 7 第2章 递归下降的表达式解析器 9 2.1 表达式 10 2.2 解析表达式 11 2.3 表达式的解析 11 2.4 表达式的分解 13 2.5 一个简单的表达式解析器 16 2.6 向解析器中添加变量 24 2.7 递归下降解析器中的语法检查 34 2.8 计算器Applet 34 2.9 一些尝试 37 第3章 使用Java实现语言解释器 38 3.1 解释何种计算机语言 39 3.2 解释器概述 40 3.3 Small BASIC解释器 41 3.4 Small BASIC表达式解析器 61 3.4.1 Small BASIC的表达式 61 3.4.2 Small BASIC的标识符 62 3.5 解释器 66 3.5.1 InterpreterException类 67 3.5.2 SBasic构造函数 67 3.5.3 关键字 68 3.5.4 run()方法 70 3.5.5 sbInterp()方法 71 3.5.6 赋值 72 3.5.7 PRINT语句 73 3.5.8 INPUT语句 75 3.5.9 GOTO语句 76 3.5.10 IF语句 78 3.5.11 FOR循环 79 3.5.12 GOSUB 82 3.5.13 END语句 83 3.6 Small BASIC的使用 83 3.7 对解释器进行增强和扩展 86 3.8 创建自己的计算机语言 86 第4章 使用Java创建下载管理器 88 4.1 深入理解Internet下载流程 89 4.2 下载管理器概述 89 4.3 Download类 90 4.3.1 Download类的变量 94 4.3.2 Download类的构造函数 94 4.3.3 download()方法 95 4.3.4 run()方法 95 4.3.5 stateChanged()方法 99 4.3.6 Action和Accessor方法 99 4.4 ProgressRenderer类 99 4.5 DownloadsTableModel类 100 4.5.1 addDownload()方法 103 4.5.2 clearDownload()方法 103 4.5.3 getColumnClass()方法 103 4.5.4 getValueAt()方法 104 4.5.5 update()方法 104 4.6 DownloadManager类 105 4.6.1 DownloadManager类的变量 111 4.6.2 DownloadManager类的构造函数 111 4.6.3 verifyUrl()方法 111 4.6.4 tableSelectionChanged()方法 112 4.6.5 updateButtons()方法 113 4.6.6 动作事件的处理 114 4.7 编译并运行下载管理器 114 4.8 改进下载管理器 115 第5章 用Java实现E-mail客户端 116 5.1 E-mail内幕 117 5.1.1 POP3 117 5.1.2 IMAP 117 5.1.3 SMTP 118 5.1.4 发送和接收E-mail的一般过程 118 5.2 JavaMail API 118 5.3 一个简单的E-mail客户端 120 5.3.1 ConnectDialog类 121 5.3.2 DownloadingDialog类 126 5.3.3 MessageDialog类 128 5.3.4 MessagesTableModel类 135 5.3.5 EmailClient类 139 5.4 编译并运行E-mail客户端 156 5.5 对基本E-mail客户端的扩展 157 第6章 使用Java搜索Internet 158 6.1 Web搜索程序基础 159 6.2 遵守Robot协议 160 6.3 Search Crawler概述 161 6.4 SearchCrawler类 162 6.4.1 SearchCrawler类的变量 179 6.4.2 SearchCrawler类的构造函数 179 6.4.3 actionSearch()方法 180 6.4.4 search()方法 182 6.4.5 showError()方法 185 6.4.6 updateStats()方法 185 6.4.7 addMatch()方法 186 6.4.8 verifyUrl()方法 187 6.4.9 isRobotAllowed()方法 188 6.4.10 downloadPage()方法 190 6.4.11 removeWwwFromUrl()方法 191 6.4.12 retrieveLinks()方法 192 6.4.13 searchStringMatches()方法 198 6.4.14 crawl()方法 199 6.5 Web搜索程序的编译与运行 202 6.6 对Web搜索程序的思考 203 第7章 使用Java提交HTML 205 7.1 使用JEditorPane提交HTML 206 7.2 处理超链接事件 206 7.3 编写Mini Web浏览器 207 7.3.1 MiniBrowser类 208 7.3.2 MiniBrowser类的变量 213 7.3.3 MiniBrowser类的构造函数 214 7.3.4 actionBack()方法 214 7.3.5 actionForward()方法 215 7.3.6 actionGo()方法 215 7.3.7 showError()方法 216 7.3.8 verifyUrl()方法 216 7.3.9 showPage()方法 217 7.3.10 updateButtons()方法 218 7.3.11 hyperlinkUpdate()方法 219 7.4 Mini Web浏览器的编译与运行 220 7.5 HTML提交程序的应用前景 221 第8章 统计. 图表与Java 222 8.1 样本. 总体. 分布与变量 223 8.2 基本统计值 223 8.2.1 平均数 224 8.2.2 中位数 224 8.2.3 众数 225 8.3 方差和标准差 227 8.4 回归方程式 228 8.5 Stats类的完整代码 232 8.6 绘图数据 235 8.6.1 数据的缩放 236 8.6.2 Graphs类 236 8.6.3 Graphs类的final变量和实例变量 241 8.6.4 Graphs类的构造函数 242 8.6.5 paint()方法 244 8.6.6 bargraph()方法 247 8.6.7 scatter()方法 247 8.6.8 regplot()方法 248 8.7 一个统计表的应用 248 8.7.1 StatsWin类的构造函数 253 8.7.2 itemStateChanged()事件处理器 254 8.7.3 actionPerformed()方法 255 8.7.4 shutdown()方法 255 8.7.5 createMenu()方法 255 8.7.6 DataWin类 255 8.7.7 联合使用 256 8.8 创建一个简单的统计Applet 258 8.9 一点尝试 260 第9章 金融应用中的Applet和Servlet 261 9.1 计算贷款的定期还款额 262 9.1.1 RegPay的成员 266 9.1.2 init()方法 266 9.1.3 actionPerformed()方法 269 9.1.4 paint()方法 269 9.1.5 compute()方法 270 9.2 计算投资的长期收益 270 9.3 计算达到某项长期收益目标所需的投资本金 274 9.4 计算达到某项期望年金所需的初始投资 278 9.5 根据给定投资计算年金的最大值 282 9.6 计算某项贷款的账户余额 286 9.7 创建用于金融类计算的Servlet 290 9.7.1 使用Tomcat 291 9.7.2 测试Servlet 291 9.7.3 把RegPay转换成Servlet 292 9.7.4 RegPayS程序 292 9.8 一些尝试 296 第10章 基于AI的问题求解 297 10.1 表示法和相关术语 298 10.2 组合爆炸问题 299 10.3 搜索技术 300 10.4 问题的描述 301 10.5 FlightInfo类 303 10.6 深度优先搜索 304 10.7 广度优先搜索 313 10.8 添加启发信息 316 10.8.1 爬山搜索 317 10.8.2 爬山搜索的分析 322 10.8.3 最小代价搜索 323 10.8.4 最小代价搜索的分析 324 10.9 查找多个解 324 10.9.1 路径删除 325 10.9.2 节点删除 326 10.10 查找最优解 331 10.11 回到丢失钥匙的例子 336

2011-04-28

Java 2宝典 Java 2 Bible

While there are plenty of good introductory texts on the subject, IDG's Java 2 Bible distinguishes itself with an easy-to-understand yet thorough tour of today's Java. Newly revised for the latest standards from Sun, this book can help virtually any reader who has some previous programming experience learn Java efficiently. This book does a good job of maintaining an informal and engaging writing style as it presents Java's essentials. Early on, it introduces key object-oriented design techniques, making Java accessible even if you don't have a background in C/C++ (although it certainly helps). The discussion on the foundation of Java syntax covers basic keywords, variables, data types, and flow control. Both the old and the new in Java are covered, with chapters on the collection classes that are available in both JDK 1.1 and 1.2, and the simpler AWT component library alongside the newer Swing standard. Short code samples are the rule here, with excerpts demonstrating important programming concepts. Readers will appreciate also the nuts-and-bolts explanation of compiling and running Java programs by using Sun's JDK command-line tools. (This title, therefore, will meet the needs of both Windows and Unix users.) Sections on designing interfaces that work on multiple platforms (including Windows and Unix) will help you create more flexible software that runs successfully even on slower Internet connections. The Java 2 Bible offers practical tips for deploying Java applets and applications, including how to use the Java 2 plug-in and JAR files for distributing your finished software. Chock full of examples and never dull, the new Java 2 Bible can help virtually anyone get started with Java. --Richard Dragan Topics covered: Overview and history of Java The Java Virtual Machine (JVM) Applets and applications Java tools Java and C/C++ compared Designing with Java objects (abstraction, encapsulation, interfaces, modularity, composition, and polymorphism) Object-oriented analysis and design Designing cross-platform applications in Java (bandwidth, network, and designing images for fast downloads) Source-code conventions in Java Tour of Java syntax (keywords, tokens, data types, expressions, operators, control flow, arrays, and strings) Java interfaces Packages Exception handling JDK 1.1 and 1.2 collection classes Tour of Java stream classes (including console, file I/O, filtered streams, reader, and writers) Multithreading Networking basics in Java (IP addresses, TCP/IP, sockets, URLs, and RMI basics) JDBC for database programming (queries, updates, prepared statements, stored procedures, and transactions) UI design and component programming by using AWT and Swing Event handling and inner classes Java graphics Deploying applets and applications (including JAR files and digital signing) Installing and running the Sun JDK Product Description If Java 2 can do it, you can do it too... This completely revised and updated guide offers you everything you need to write object-oriented programs using the latest Java release. You'll be able to build your programming skills using expert advice on the newest features of Java, including the latest JFC and Swing packages. These pages are also packed with plenty of code examples, which illustrate all the basic techniques of OOP, from encapsulation to inheritance interfaces. And, if you want to stay current on the latest Java information, you'll like The Future of Java, a "living chapter" that will be updated quarterly at the companion Web site! From the Publisher Inside you'll find complete coverage of Java 2: Learn your way around the Java 2 environment Integrate frequently used Java class methods Customize pre-made classes to fit your needs Build sophisticated applications with primitive data types Master error and exception handling Create cross-platform plug-and-play GUIs Implement Java handlers in your Web-based programs Employ code to generate automatic documentation

2011-04-28

J2EE核心模式 PDF

容简介 《J2EE核心模式》(原书第2版)讲解使用J2EE核心技术实现企业应用过程中的模式、最佳实践、设计策略以及经过验证的解决方案,涵盖了JSP、servlet、EJB、JMS等技术,其中J2EE模式目录包括21个模式以及大量策略,帮助读者迅速熟练掌握J2EE技术,从而构建出健壮、高效的企业应用。《J2EE核心模式》(原书第2版)是计算机应用开发人员、架构师、技术经理等人员的必备参考书。 编辑推荐 《J2EE核心模式》(原书第2版):“Java领域的版图上撒满了各种类库、工具和技术规范。而缺乏的则是把这些内容融合在一起、解决真实情况下的问题的专业能力。本书中的这些模式,成为了J2EE软件建设过程中的智能水泥。 ——John Vlissides,《设计模式》的作者之一   “《J2EE核心模式》的作者们提取了一组真正实用的模式。他们介绍了应该如何应用这些模式、如何重构你的系统以便从模式中获益。这就像有一个专家组坐在你旁边一样。 ——Grady Booch,Rational软件公司首席科学家   “作者们介绍了大量对于应用架构极有帮助的模式,这是一项了不起的工作。单单是书中的‘重构’部分就值整本书的价钱!” ——Craig McClanahan,Struts首席架构师,JavaServer Faces技术规范组负责人   开发者们常常把“学会一种技术”和“学会使用这种技术进行设计”混为一谈。在本书中,Sun Java中心的资深架构师们分享了他们多年积累的使用J2EE技术进行设计的经验。   本书关注的主要内容,是使用J2EE的核心技术蜒包括JSPTM、Servlet、EJBTM、JMSTMAPI等蜒实现企业应用过程中的模式、最佳实践、设计策略以及经过验证的解决方案。其中的J2EE模式目录包括21个模式以及大量策略,有助于记录、促成运用以上技术的最佳实践。 媒体推荐 书评 “Java领域的版图上撒满了各种类库、工具和技术规范。而缺乏的则是把这些内容融合在一起、解决真实情况下的问题的专业能力。本书中的这些模式,成为了J2EE软件建设过程中的智能水泥。 ——John Vlissides,《设计模式》的作者之一 “《J2EE核心模式》的作者们提取了一组真正实用的模式。他们介绍了应该如何应用这些模式、如何重构你的系统以便从模式中获益。这就像有一个专家组坐在你旁边一样。 ——Grady Booch,Rational软件公司首席科学家 “作者们介绍了大量对于应用架构极有帮助的模式,这是一项了不起的工作。单单是书中的‘重构’部分就值整本书的价钱!” ——Craig McClanahan,Struts首席架构师,JavaServer Faces技术规范组负责人 开发者们常常把“学会一种技术”和“学会使用这种技术进行设计”混为一谈。在本书中,Sun Java中心的资深架构师们分享了他们多年积累的使用J2EE技术进行设计的经验。 本书关注的主要内容,是使用J2EE的核心技术蜒包括JSPTM、Servlet、EJBTM、JMSTMAPI等蜒实现企业应用过程中的模式、最佳实践、设计策略以及经过验证的解决方案。其中的J2EE模式目录包括21个模式以及大量策略,有助于记录、促成运用以上技术的最佳实践。 前言 自从本书第1版出版以来,关于最初那15个模式,我们收到了大量反馈意见。最近几年来,J2EE模式社区目录服务器(JPCLS)上的活动一直都非常活跃、非常成功,每天都有很多精彩的意见交流。在这段时间里,我们也和客户一起进行了不少重要的大型J2EE架构设计、开发项目。把这段时期的经验和反馈植入到原有模式的更新工作和新模式的归档工作中,也确实是一个费力而艰苦的过程。我们特别关注了反馈中提及最多的内容:对J2EE技术规范和Web Service最新版本的支持。 我们完全修订、更新了最初的15个模式,使得本书覆盖了J2EE技术1.4版的规范。我们在这些最初的模式中加入了很多新的策略。另外,我们还记录了6种新模式,以便改进模式语言,为构建、理解、使用J2EE框架提供更好的概念抽象。虽然这些模式中的每一个本身都极为实用,但我们还进一步相信,当开发者将其组合起来解决大型问题时,它们更能显出威力。因此在本书的新版中,引入了一个我们正在探究的、与此相关的全新领域,我们称此为“微架构”。 所谓“微架构”,就是搭建应用程序和系统的积木块。与列入目录的那些单独模式相比,这个概念是一种更高层面的抽象,它常常表现为一组相互关联的模式组合,用于解决在应用架构中经常重现的一些共通问题。 我们乐于把“微架构”当作一种由相互关联的模式组成的网络,由此形成一种现成的解决方案,用于解决一个粒度更大的问题,比如子系统的设计。 本版中包括了一个叫Web Worker的微架构。它所解决的问题是:一个J2EE应用怎样与一个工作流系统集成。它特别讨论了使用系统集成模式让工作流系统中的用户与J2EE应用进行交互的问题。 本书讲述的是Java 2企业版平台(J2EE)的模式。本书新版中记录的J2EE模式,能够用于解决在J2EE平台下进行软件应用开发的设计者常常遇到的那些问题。在这个模式目录中记录的模式都是在设计实战中发现的,正是因为使用了它们,我们才能为自己的客户创建出了成功的J2EE应用。 本书描述了很多在J2EE平台下证明可行的解决方案,重点强调了以下核心J2EE技术: JavaServer Pages (JSP)、servlet、Enterprise JavaBeans (EJB) 组件、Java Message Service (JMS,Java消息服务)、JDBC以及 Java Naming and Directory Interface (JNDI,Java命名与目录接口)。对于那些在J2EE平台下经常重现的问题,我们通过J2EE模式目录和J2EE重构给出了解决方案。在开发新系统或是改进现有系统的设计时,你可以应用这些想法。本书记录的这些模式能够有助于你迅速熟练地掌握J2EE技术,从而构建出健壮、高效的企业应用。 今天,正如以往一样,我们中间有很多人天真地以为,学会了一种技术,也就等于是学会了用这种技术进行设计。诚然,对于利用某一技术进行设计来说,懂得这种技术是成功的重要元素之一。但现在有很多Java图书,对技术细节(比如API的一些专门用法等等)做出了出色的讲解,但对如何应用这种技术却未作深入考察。要想学会设计,就需要实际设计经验,需要和其他开发者一起分享关于最佳实践和不佳实践的知识。 本书中传达的经验来自我们的工作实战。我们属于Sun公司的Sun Java中心(SJC)咨询机构。在工作当中,我们经常遇到一些情况,因为技术发展过于迅速,设计者和开发者都仍然在奋力理解技术本身,而无暇理解如何使用该项技术进行设计。 因此,简单地告诉设计者和开发者怎样写出优秀代码,或是建议他们使用servlet和JSP开发表现层,用EJB组件开发业务层,这都是不够的。 那么,在这样的情况下,一个热心的J2EE架构师又怎样才能不单单是学到“做什么”、还能学到“不做什么”呢?哪些实践构成了最佳实践?哪些是不佳实践?怎样完成从问题到设计,再到实现的整个过程?Sun Java中心与J2EE模式目录 从初创时期以来,Sun Java中心的架构师们就在与来自全球的客户一起合作,致力于成功地设计、规划、构建、部署各种不同类型的基于Java和J2EE的系统。Sun Java中心是一个快速成长的咨询机构,一直在招募新员工,加入它经验丰富的架构师队伍。 目前已经有大量已验证有效的设计和构架,将这些设计经验固化下来并和其他人一起分享,是我们行业的一项重要需要。我们很早就认识到了这种需要,从1999年就开始以模式的形式记录我们在J2EE平台下的工作经验。虽然我们翻阅了各种现有文献,却没能发现有哪个模式目录是专门记载J2EE平台下的模式的。有很多书论及J2EE技术中的一种或多种,出色地介绍了技术,剖析了技术规范中的微妙细节。我们发现其中有些书还提供了一些设计上的考虑思路,因此也特别有益。 在2000年6月的JavaOne大会上,我们第一次公开发表了我们关于J2EE模式的想法。从那以来,我们收到了来自架构师和开发者的大量热忱反馈。其中一些人表示特别乐意进一步学习模式,还有一些人则说,他们使用过这些模式,只不过没有加以命名、也没有记录下来罢了。人们体现出来的对J2EE模式的兴趣鼓励我们进行进一步的工作。 因此,我们整理出了J2EE模式目录,在2001年3月,这个目录的beta版通过Java开发者联盟(JDC)首次公布给了J2EE社区。基于整个社区的大量反馈,那一份beta版的文稿最终发展成了你现在见到的这本书。 我们希望这些在J2EE平台下的模式、最佳实践、策略、不佳实践和重构能让大家从中受益。本书的讨论范围 本书讨论的内容包括: * 在J2EE平台下使用模式。 基于我们在J2EE平台的经验,我们编纂了本书中的模式目录。这一份J2EE模式目录描述了在J2EE平台下架构和设计应用的最佳实践。本书着重考察了以下J2EE技术:servlet、JSP、EJB组件和JMS。 * 通过最佳实践来设计应用了servlet、JSP、EJB组件和JMS技术的应用系统。 仅仅学会了技术本身和API还不足够,同样重要的是要学会怎样使用技术进行设计。我们记录了在我们的经验中应用这些技术的最佳实践。 * 防止在J2EE平台的设计和架构中“重新发明轮子”。 模式鼓励设计的重用。重用现成的解决方案,能够缩短设计开发应用程序的周期—这也当然包括J2EE应用。 * 鉴别出现存系统中的不佳实践,并利用J2EE模式重构这些设计,以形成更好的解决方案。 知道哪些做法有效,这是一件好事。但知道哪些做法无效也同样重要。我们在本书中记录了自己在设计J2EE应用时遇到的一些不佳实践。本书不讨论的内容 本书没有讨论以下内容: * 如何使用Java或J2EE技术编程 本书讨论的不是编程。虽然很多内容都基于J2EE技术,但我们没有描述API细节。如果你希望学习Java编程,或是学习使用J2EE中的任何一种技术,现有很多种出色的著作,还有不少在线资源,都可以作为教程。如果你想要学习某一门特定的技术,我们强烈推荐Java官方主 * 采用哪种开发过程和方法论 我们并不特别推荐任何一种开发过程或方法论,因为本书讨论的内容与这两方面都关系不大。所以,本书不会教授任何可以用于开发项目的过程或方法论。如果你想要学习过程和方法论的话,现已有很多论著讨论各种面向对象的方法论,对于那些轻量级的过程,比如极限编程,也有不少新书论及。 * 怎样使用统一建模语言(UML) 本书不会教你如何使用UML。我们大量地使用了UML(特别是类图和序列图)来记录模式,描述静态和动态交互关系。如果要学习UML,请参考Grady Booch、Ivar Jacobson 和James Rumbaugh的著作《UML用户指南》[Booch]以及《UML参考手册》[Rumbaugh]。谁应该读这本书 本书写给所有热心关注J2EE的人,程序员,架构师,开发者以及技术经理。简单地说,就是任何对在J2EE平台下设计、架构、开发应用程序有点儿兴趣的人。 我们力图让这本书成为一部写给J2EE架构师和设计者的培训指南。我们认为良好的设计、架构得当的项目具有很高的重要性,所以我们需要优秀的架构师达到这个水准。 对于那些开发者水准参差不齐的开发团队,如果我们把模式、最佳实践和不佳实践都做出详尽的归档,以此在团队中实现知识与经验的共享和传播,这可能会起到难以估价的帮助作用;我们也希望本书能部分地满足类似需求。本书的组织 本书的组织分为两部分。 第一部分 第一部分“模式和J2EE”是一个关于J2EE和模式的导论。它考察了开发JSP、servlet和EJB时的设计考虑。这一部分也包括了J2EE平台下的不佳实践和重构。 第1章“导论”简要地讨论了多个问题,包括模式、J2EE平台、模式的定义以及模式的归类。最后引入了J2EE模式目录。 第2章“表现层设计考虑和不佳实践”、第3章“业务层设计考虑和不佳实践”分别讨论了表现层以及业务/集成层的设计考虑和不佳实践。这里所说的设计考虑,是指在J2EE平台下工作时,一个J2EE开发者/设计者/架构师需要考虑的问题。在阅读这两章中的论题时,可以参照其他的多种资源(比如官方技术规范以及一些出色的相关论著)来获得相关问题的一些细节信息。 第4章“J2EE重构”考察了一些重构,我们在自己的实际工作中遇到了这些重构,它们也确实帮助我们把原本不够理想的设计提升为更好的方案。这些重构也提供了看待本书其他内容的另一种思路,我们认为这对于模式目录是一种有价值的补充材料。本章体现出Martin Fowler和他的著作《重构》[Fowler]对我们的影响。对于熟悉《重构》一书的读者,本章的形式也应该相当眼熟。但是,这一章的内容完全基于J2EE技术,而Martin Fowler在他的论著中则是在另一个层面考察重构的。第二部分 第二部分“J2EE模式目录”列出了J2EE模式目录。目录中包含的模式构成了本书的核心内容。 第5章“J2EE模式概览”,是J2EE模式目录的一个综述。这一章一开始对模式的理念进行了高层次的讨论,并且解释了我们按照系统的分层对模式进行归类的原因。该章也介绍了我们用来记录本书所有模式的“J2EE模式模板”。该章考察了所有的J2EE模式,并且用一张图描述了模式之间的相互关系。另外该章还包括了一种我们称为“模式目录路线图”的东西。这张路线图列举了一些与J2EE设计和架构相关的常见问题,并且把这些问题与特定的模式或重构关联起来,通过这些模式、重构给出了问题的解决方案。理解模式之间的关系以及这张路线图,对于实际应用这些模式至关重要。 第6章“表现层模式”描述了8种模式,它们处理的是在J2EE平台的Web应用设计中,怎样使用servlet、JSP、JavaBeans和定制标记的问题。在这些模式中描述了多种实现策略,并且也提出了一些常见问题,比如请求处理、应用分隔、生成复合视图等。 第7章“业务层模式”,描述了9种模式,它们处理的是怎样应用EJB在J2EE平台下设计业务组件的问题。该章介绍的模式提供了应用EJB和JMS技术的最佳实践。另外,这些模式的相关部分还涉及了其他技术—比如JNDI、JDBC等—的讨论。 第8章“集成层模式”描述了4种模式,它们处理的是怎样把J2EE应用与资源层和各种外部系统集成起来的问题。这些模式使用了JDBC和JMS技术在业务层和资源层之间实现集成。 “尾声”讨论的是一个高层次的主题:怎样利用多个模式一起解决一个大型问题。该章详尽地讨论了“Web Worker微架构”这个示例,展示了如何通过多个模式来集成一个J2EE应用和一个工作流系统。本书的官方网站和联络信息 在本书的官方网站上,我们会提供内容的更新信息以及其他一些资料。网址是: 这个网站也附属于Sun Java蓝图网站: 你的评论、建议、反馈都可以通过以下邮箱寄给作者: [email protected] 另外还有J2EE模式社区邮件列表服务,邮箱为[email protected],可以免费订阅和参与。通过以下网址,你可以订阅兴趣小组的邮件,也可以浏览以往的讨论存档: 我们想感谢Sun全球软件服务副总裁Cheryln Chin、Sun杰出工程师和首席服务架构师James Baty,如果没有他们的支持、远见以及他们对我们工作的信赖,本书的工作就不可能完成。 我们愿将最大的感激和谢意致予Rajmohan“Raj”Krishnamurthy。如果没有他的帮助,本书就不会有这么多示例代码,而且我们也从他出色的评论意见中受益匪浅。他对本书新版的规划、开发、评审工作做出了不可或缺的帮助。 本书内容经过多位专家的审读,他们的深刻见解、评论意见、反馈建议,为本书的最终成型做出了重要贡献,通过他们的帮助,各个模式的表述比初稿更加清晰、实用;因此我们也愿对以下专家表示谢意:ThoughtWorks公司首席科学家Martin Fowler;Sun J2EE 蓝图团队的Sean Brydon和Inderjeet Singh;Sun公司的Craig Russel,他是 Java数据对象(JDO)技术规范的负责人/产品架构师;ObjectIdentity公司的JDO专家David Jordan;Sun公司的JSP技术规范负责人Mark Roth;Domain Language的 Eric Evans;BEA系统公司的解决方案架构师Mario Kosmiskas;LogicLibrary负责技术的副总裁Brent Carlson;Macromedia 的Sean Neville;Sun Java中心的Java架构师Sameer Tyagi;Chris Steel;Bill Dudney;Gary Bollinger;以及ThoughtWorks公司的Gregor Hohpe。 像这样一本书,肯定需要来自各方面的难以计数的帮助才能得以完成,所以我们很难面面俱到地感谢每一个人为此做出的贡献。 我们想感谢James Gosling和Michael Van de Vanter 领导的Sun Jackpot团队,他们的工作将本书推进到了全新的舞台上。 我们还想感谢Chuck Geiger领导的eBay.com V3团队、Terry Bone领导的福特金融中心的ATD框架团队,他们在企业中实际应用了J2EE模式来构建下一代的系统架构和平台。 感谢Sun Java中心的同事Murali Kaundinya、Ashok Mollin、Ramesh Nagappan和Heidi Schuster。 我们想感谢JetBrains公司提供的IntelliJ IDEA开发工具,为本书编写示例代码时我们使用了这种工具,相当满意。 我们还想感谢J2EE模式社区邮件列表([email protected])上的很多成员,多年以来他们的讨论和反馈一直很有帮助。 特别要对本书的技术编辑Solveig Haugland说一声“谢谢”。她是我们团队的重要一员。她在技术上的编辑工作大大提高了本书终稿的质量。 我们想感谢Prentice Hall出版社的Greg Doench和Debby Van Dijk给予我们的信任和鼓励。 特别感谢无糖红牛饮料提供的动力,让我们能每天写作16小时。第1版致谢 我们想感谢Sun全球Java中心的主管Stu Stern和负责.COM咨询的副总裁Mark Bauhaus,如果没有他们的支持、远见以及对我们工作的信赖,本书的工作就不可能完成。 我们想感谢Ann Betser,要不是她的支持、鼓励和循循善诱的建议,我们的工作也不会成功。 我们想对Sun Java中心(SJC)PSA/iWorkflow参考实现开发团队的架构师们表达诚挚的感谢,他们是:Fred Bloom、Narayan Chintalapati、Anders Eliasson、Kartik Ganeshan、Murali Kalyanakrishnan、Kamran Khan、Rita El Khoury、Rajmohan Krishnamurty、Ragu Sivaraman、Robert Skoczylas、Minnie Tanglao和Basant Verma。 我们想感谢Sun Java中心J2EE模式工作组的成员们: Mohammed Akif、Thorbi歳n Fritzon、 Beniot Garbinato、Paul Jatkowski、Karim Mazouni、Nick Wilde和Andrew X. Yang。 我们想感谢Sun Java中心的首席方法专家Brendan McCarthy,他令我们的工作诸事协调,并提出了大量建议。 我们想感谢把这些模式介绍给客户的Jennifer Helms和John Kapson。 我们想对以下来自世界各地的Sun Java中心架构师表达谢意,他们的支持、反馈、建议都令我们受益匪浅,他们是:Mark Cade、Mark Cao、Torbj歳n Dahl巒、Peter Gratzer、Bernard Van Haecke、Patricia de las Heras、Scott Herndon、Grant Holland、Girish Ippadi、Murali Kaundinya、Denys Kim、Stephen Kirkham、Todd Lasseigne、Sunil Mathew、Fred Muhlenberg、Vivek Pande、John Prentice、Alexis Roos、Gero Vermaas、Miguel Vidal。 我们想对支持、鼓励我们的管理者Hank Harris、Dan Hushon、Jeff Johnson、Nimish Radia、Chris Steel和Alex Wong表达谢意。 我们还想感谢在Sun公司中与我们合作的以下同事: Sun软件系统组的Bruce Delagi;Sun软件工程部门的Mark Hapner、Vlada Matena; Forte产品组的Paul Butterworth和Jim Dibble;iPlanet产品组的Deepak Balakrishna;J2EE蓝图团队的Larry Freeman、Cori Kaylor、Rick Saletta和Inderjeet Singh;Heidi Dailey;Java开发者联盟的Dana Nourie、Laureen Hudson、Edward Ort、Margaret Ong和Jenny Pratt。 我们想感谢以下各位对本书的反馈、建议和支持: ThoughtWorks公司的Martin Fowler和Josh Mackenzie;Richard Monson Haefel; Goldman Sachs公司的 Phil Nosonowitz 和Carl Reed;Rational软件公司的Jack Greenfield、Wojtek Kozaczynski和Jon Lawrence;TogetherSoft的Alexander Aptus;Zaplets.com 的Kent Mitchell ;Bill Dudney; David Geary; Hans Bergsten; J2EE模式兴趣小组 (j2eepatterns-interest@ java. sun.com) 的成员。 我们想对本书的首席技术编辑Beth Stearns表示特别的谢意和感激,她负责整理我们的手稿,让全书明了可读,与此同时还要随时掌控我们的工作进度,同我们一道完成一个高强度的工作计划。 我们想感谢技术编辑Daniel S. Barclay、Steven J. Halter、Spencer Roberts和Chris Taylor,他们出众的专业能力、细致的评审反馈对本书的完成非常重要。 我们想感谢Prentice Hall出版社的Greg Doench、Lisa Iarkowski、Mary Sudul和Debby Van Dijk;Sun公司出版社的Michael Alread和Rachel Borden,他们使本书的诞生成为可能。 作者简介 作者:(美国)阿卢 译者:刘天北 等 Deepak Alur是Sun Java中心的企业Java架构师,具有14年以上的开发经验。他的主要研究兴趣在于利用面向对象技术、模式、Java和J2EE技术完成大型企业应用的架构、设计和实现。 John Crupi是Sun Java中心的杰出工程师和首度Java架构,他有17年以上的分布式对象开发经验,他的主要研究兴趣在于创建可重用的、可扩展的J2EE架构,以及进一步提升J2EE模式的水准。 Dan Malks是Sun Java中心的主任工程师。他有16年以上的开发经验,他的主要研究兴趣在于面向对象技术以及这种技术在企业级的、基于Web Service的项目中的应用。他发表过很多作品,其中既有在行业杂志上发表的论文,也有讨论Jave、J2EE技术及模式的专著。 目录 第一部分 模式和J2EE 第1章 导论 什么是J2EE 什么是模式 历史回顾 模式的定义 模式的分类 J2EE模式目录 演化过程 怎样使用J2EE模式目录 使用模式的益处 模式、框架和重用 小结 第2章 表现层设计考虑和不佳实践 表现层设计考虑 会话管理 控制客户端访问 验证 助手类属性—完整性和一致性 表现层不佳实践 多个视图中都包括控制代码 把表现层的数据结构暴露给业务层 把表现层数据结构暴露给业务领域对象 允许重复提交表单 把敏感资源暴露给客户端的直接访问 假定 会重置Bean属性 创建出“胖控制器” 把视图助手当成scriplet使用 第3章 业务层设计考虑和不佳实践 业务层设计考虑 使用session bean 使用entity bean 缓存EJB的远程引用和句柄 业务层和集成层不佳实践 把对象模型直接映射为entity bean模型 把关系型模型直接映射为entity bean模型 把每个用例映射为一个session bean 通过Getter/Setter方法暴露EJB的所有属性 在客户端中包括服务寻址代码 把entity bean当成只读对象使用 把entity bean当成细粒度对象使用 存储entity-bean的整个从属对象拓扑结构 把EJB相关的异常暴露给非EJB客户端 使用entity bean finder方法返回大型结果集 客户端负责聚合来自业务组件的数据 把EJB用于长时间持续的事务 每次调用无状态session bean都要重建 对话状态 第4章 J2EE重构 表现层的重构 引入控制器 引入同步器令牌 隔离不同逻辑 对业务层隐藏表现细节 去除视图中的转换 对客户端隐藏资源 业务层和集成层的重构 用session bean包装entity bean 引入业务代表 合并session bean 减少entity bean之间的通信 将业务逻辑移至session bean 一般的重构 分离数据访问代码 按层重构系统架构 使用连接池 第二部分 J2EE模式目录 第5章 J2EE模式概览

2011-04-28

Ivor Horton's Beginning Java 2, JDK

内容简介 What is this book about? This book is a comprehensive introduction to the Java programming language, updated thoroughly (more than 35% new and updated) for the latest SDK 1.5 release. This book shows readers how to build real-world Java applications using the Java SDK. No previous programming experience is required. The author uses numerous step-by-step programming examples to guide readers through the ins and outs of Java development. In addition to fully covering new features of SDK 1.5, such as generic types, the author has also added new chapters on Java database programming with JDBC and Java programming with XML. 媒体推荐 Combining simplicity with power, Java has become the object-oriented language of choice for Internet programming and cross-platform applications. This comprehensive and easy-to-use guide provides you with the essential information you'll need to know in order to develop dynamic programs using the Java 2 Standard Edition 5.0 or later. You'll be introduced to the fundamental ideas about the structure of Java programs and how they work. You'll gain a clear understanding of all the latest features of the Java language as well as the key packages in the Java class library. And with the help of numerous working examples, you'll find out how to apply the material so you can write your own full-featured applications and applets. This book teaches you how to start programming in Java, covering everything from putting together statements and performing calculations to applying the capabilities provided by the Java class libraries, and much more. What you will learn from this book The basics of how the Java language works Ways to apply key language elements Methods for storing data in a program How to define and utilize classes How to create applets for use in interactive Web pages Techniques for implementing an application with a graphical user interface How to use the JDBC capability to work with relational databases All the skills to become a knowledgeable Java programmer Who this book is for This book is for anyone who wants to explore how Java works and discover how to write fully featured and effective Java programs. No previous Java experience is necessary.

2011-04-28

Effective STL中文版:50条有效使用STL的经验

内容简介   meyers的一本经典著作,其实际价值在于说明了STL的有效用法,这本书和EC,MEC一样是伟大的,绝对需要一读的。本书充满了从实践中总结出来的智慧,它清晰、简明、透彻的风格必将使每一位STL程序员受益匪浅!著名译者潘爱民最新译作,值得信赖!   你已经熟悉STL了。你知道怎样创建容器、怎样遍历容器中的内容,知道怎样添加和删除元素,以及如何使用常见的算法,比如find和sort。但是你并不满意。你总是感到自己还不能充分地利用STL。本该很简单的任务却并不简单;本该很直接的操作却要么泄漏资源,要么结果不对;本该更有效的过程却需要更多的时间或内存,超出了你的预期。是的,你已经知道如何使用STL了,但是你并不能确定自己是否在有效地使用它。 编辑推荐   你已经熟悉STL了。你知道怎样创建容器、怎样遍历容器中的内容,知道怎样添加和删除元素,以及如何使用常见的算法,比如find和sort。但是你并不满意。你总是感到自己还不能充分地利用STL。本该很简单的任务却并不简单;本该很直接的操作却要么泄漏资源,要么结果不对;本该更有效的过程却需要更多的时间或内存,超出了你的预期。是的,你已经知道如何使用STL了,但是你并不能确定自己是否在有效地使用它。 媒体推荐 带着审视的目光 回顾STL的使用 ——评Effective STL 评论人:Alan Bellingham from ACCU 等级:高度推荐(Highly Recommended) 针对C++的标准库的一部分——标准模版库(Standard Template Library,STL)的书已经有好几本了。它们中的一些已经在以前的ACCU书评中获得了“高度推荐”,并且它们名副其实。那么这本书是为谁而写的呢?又为什么要写呢? 让我先来告诉你这本书不属于哪类。它不是指南,如果你还并不知道如何使用STL,那么从本书中也无法学会。它也不是一本覆盖STL的边边角角的参考书。对于这种参考书,我推荐两本:Nicolai Josuttis的The C++ Standard Library 和Angelika Langer Standard C++ IOStreams and Locales。然而,如果你已经使用过STL一段时间,如果你已经了解容器、迭代器和算法结合到一起方法,并且如果你喜欢当自己知道还有很多东西可以学习时所拥有的那种表现力,那么本书非常适合你。本书的目标在它的副书名中已经说清楚了:50条提高STL应用能力的具体方法。 就像Soctt Meyers以前的书Effective C++和More Effective C++一样,本书也是以一组短小精炼的文章的方式组织的,尽管这些文章被称为条款(item),但它们每一个都是独立完整的。它们被组织为7章:容器、vector和string、关联容器、迭代器、迭代器、函数子、函数子类、函数及其他。 每一章有一个大概半页的简短介绍,文章剩下的内容通常有两到三页,而当作者深入说明某些问题的时候,篇幅会多达12页甚至更多。 即便在最简单的文章里,如“条款44 容器的成员函数优先于同名的算法”,作者也很仔细地说明了他为什么要给出这个建议,以及何时不要采用这个建议。这不是一组盲目遵从的规则,作者情愿你能理解他为什么说到这条规则,以便你能够判断什么时候不要遵从。这就是一个单纯的讲师和一位真正的老师之间的区别。实际上,我发现作者对C++标准的态度令人耳目一新,他在尊重的同时指出了STL的设计中的不好的选择。 本书从表现形式上也安排得很好(指原版),值得一提的是,使用了简洁明了的色彩来说明代码中的特别指出。我们常常会认为所看到的代码的一般形式都是很不明显的。本书中,这些地方会用红色印刷。这样显得清晰而不俗气,我觉得其他的书应该效仿。 本书中有一两处印刷错误(指原版书),但是无伤大雅。而且这些错误并不多见,在正文中并没有出现,那都是经过专家的技术审阅的。 另外,还有几个话题确实没有设计到。例如,关于STL的书通常不会涉及iostreams,但是,这也许只是意味着还将有一本More Effective STL要出版。我当然希望是这样,这本书已经让我回过头去审视我使用STL的经历了。 总的来说,如果每天基本上都要用到STL,并且如果你希望用的更好,那么我强烈推荐你现在就去买一本Effective STL。如果你还不相信我,可以自己去网上查看一些条款。 作者简介 作者:(美)迈耶斯 译者:潘爱民 陈铭 邹开红 目录 引言 第1章 容器 第1条:慎重选择容器类型。 第2条:不要试图编写独立于容器类型的代码。 第3条:确保容器中的对象拷贝正确而高效。 第4条:调用empty而不是检查size()是否为0。 第5条:区间成员函数优先于与之对应的单元素成员函数。 第6条:当心C++编译器最烦人的分析机制。 第7条:如果容器中包含了通过new操作创建的指针,切记在容器对象 析构前将指针delete掉。 第8条:切勿创建包含auto_ptr的容器对象。 第9条:慎重选择删除元素的方法。 第10条:了解分配子(allocator)的约定和限制。 第11条:理解自定义分配子的合理用法。 第12条:切勿对STL容器的线程安全性有不切实际的依赖。 第2章 vector和string 第13条:vector 和string优先于动态分配的数组。 第14条:使用reserve来避免不必要的重新分配。 第15条:注意string 实现的多样性。 第16条:了解如何把vector和string数据传给旧的API。 第17条:使用“swap技巧”除去多余的容量。 第18条:避免使用vector。 第3章 关联容器 第19条:理解相等(equality)和等价(equivalence)的区别。 第20条:为包含指针的关联容器指定比较类型。 第21条:总是让比较函数在等值情况下返回false。 第22条:切勿直接修改set或multiset中的键。 第23条:考虑用排序的vector替代关联容器。 第24条:当效率至关重要时,请在map::operator[]与map::insert 之间谨慎做出选择。 第25条:熟悉非标准的哈希容器。 第4章 迭代器

2011-04-28

STL源码剖析 PDF

内容简介 学习编程的人都知道,阅读、剖析名家代码乃是提高水平的捷径。源码之前,了无秘密。大师们的缜密思维、经验结晶、技术思路、独到风格,都原原本本体现在源码之中。在你仔细推敲之中,迷惑不解之时,恍然大悟之际,你的经验、思维、视野、知识乃至技术品位都会获得快速的成长。 本书所呈现的源码,使你踏上了基度山岛。源码之前了无秘密,你将看到vector的实现、list的实现、heap的实现、deque的实现、Red Black tree的实现、hash table的实现、set/map的实现;你将看到各种算法(排序、查找、排列组合、数据移动与复制技术)的实现;你甚至能够看到底层的memory pook和高阶抽象的traits机制的实现。 编辑推荐 学习编程的人都知道,阅读、剖析名家代码乃是提高水平的捷径。源码之前,了无秘密。大师们的缜密思维、经验结晶、技术思路、独到风格,都原原本本体现在源码之中。在你仔细推敲之中,迷惑不解之时,恍然大悟之际,你的经验、思维、视野、知识乃至技术品位都会获得快速的成长。 本书所呈现的源码,使你踏上了基度山岛。源码之前了无秘密,你将看到vector的实现、list的实现、heap的实现、deque的实现、Red Black tree的实现、hash table的实现、set/map的实现;你将看到各种算法(排序、查找、排列组合、数据移动与复制技术)的实现;你甚至能够看到底层的memory pook和高阶抽象的traits机制的实现。 媒体推荐 书评 学习编程的人都知道,阅读、剖析名家代码乃是提高水平的捷径。源码之前,了无秘密。大师们的缜密思维、经验结晶、技术思路、独到风格,都原原本本体现在源码之中。在你仔细推敲之中,迷惑不解之时,恍然大悟之际,你的经验、思维、视野、知识乃至技术品位都会获得快速的成长。 目录 疱丁解牛(侯捷自序) 目录 前言 第1章 STL概论与版本简介 第2章 空间配置器(allocator) 第3章 迭代器(iterators)概念与traits编程技法 第4章 序列式容器(sequence containers) 第5章 关联式容器(associattive containers) 第6章 算法(algorithms) 第7章 仿函数(functors,另名 函数对象function objects) 第8章 配接器(adapters) 附录A 参考书籍与推荐读物 附录B 候捷网站(本书支持站点简介) 附录C STLPort 的移植经验(by孟岩) 索引

2011-04-28

深度探索C++对象模型

内容简介 《深度探索C++对象模型》重点:探索"对象导向程序所支持的C++对象模型"下的程序行为。对于"对象导向性质之基础实现技术"以及"各种性质背后的隐含利益交换"提供一个清楚的认识。检验由程序变形所带来的效率冲击。提供丰富的程序范例、图片,以及对象导向观念和底层对象模型之间的效率测量。Inside The C++ Object Model专注于C++对象导向程序设计的底层机制,包括结构式语意、暂时性对象的生成、封装、继承,以及虚拟——虚拟函数和虚拟继承。这《深度探索C++对象模型》让你知道:一旦你能够了解底层实现模型,你的程序代码将获得多么大的效率。Lippman澄清了那些关于C++额外负荷与复杂度的各种错误信息和迷思,但也指出其中某些成本和利益交换确实存在。他阐述了各式各样的实现模型,指出它们的进化之道及其本质因素。 编辑推荐 《深度探索C++对象模型》涵盖了C++对象模型的语意暗示,并指出这个模型是如何影响你的程序的。C++成山似海的书籍堆中,这一本不是婴幼儿奶粉,也不是较大婴儿奶粉,它是成人专用的低脂高钙特殊奶粉。 对于C++底层机制感兴趣的读者,这《深度探索C++对象模型》会给你"漫卷诗书喜欲狂"的感觉。 了解C++ Object Model,是学习Component Object Model的最短路线。 如果你是一位C++程序员,渴望对于底层知识获得一个完整的了解,那么Inside The C++ Object Model正适合你。 媒体推荐 前言 差不多有10年之久,我在贝尔实验室(Bell Laboratories)埋首于C++的实现任务。最初的工作是在cfront上面(Bjarne Stroustrup的第一个C++编译器),从1986年的1.1版到1991年9月的3.0版,然后移转到Simplifier(这是我们内部的命名),也就是Found~ion项目中的C++对象模型部分。在Simplifier设计期间,我开始酝酿这本书。 Foundation项目是什么?在Bjarne的领导下,贝尔实验室中的一个小组探索着以C++完成大规模程序设计时的种种问题的解决之道。Foundation项目是我们为了构造大系统而努力定义的一个新的开发模型;我们只使用C++,并不提供多重语言的解决方案。这是个令人兴奋的工作,一方面是因为工作本身,一方面是因为工作伙伴:Bjarne、Andy Koenig、Rob Murray、Martin Carroll、Judy Ward、Steve Buroff、Peter Juhl,以及我自己。Barbara Moo管理我们这一群人(Bjarne和Andy除外)。Barbara Moo常说管理一个软件团队,就像放牧一群骄傲的猫。 我们把Foundation想象成一个核心,在那上面,其它人可以为使用者铺设一层真正的开发环境,把它整修为他们所期望的UNIX或Smalltalk模型。私底下我们把它称为Grail(传说中耶稣最后的晚餐所用的圣杯),人人都想要,但是从来没人找到过! Grail使用一个由Rob Murray发展出来并命名为ALF的面向对象层次结构,提供一个永久的、以语意为基础的表现法。在Grail中,传统编译器被分解为数个各自分离的可执行文件。parser负责建立程序的ALF表现法。其它每一个组件(比如type checking、simplification,code generation)以及工具(比如browser)都在程序的一个ALF表现体上操作(并可能加以扩展)。Simplifier是编译器的一部分,处于typechecking和codegeneration之间。Simplifier这个名称是由Bjarne所倡议的,它原本是cfront的一个阶段(phase)。 在type checking和code generation之间,Simplifier做什么事呢?它用来转换内部的程序表现。有三种转换风味是任何对象模型都需要的: 1.与编译器息息相关的转换(Implementation,dependent transformations) 这是与特定编译器有关的转换。在ALF之下,这意味着我们所谓的“tentative”nodes。例如,当parser看到这个表达式: fct(); 它并不知道是否(a)这是一个函数调用操作,或者(b)这是overloaded call operator在class object fct上的一种应用。默认情况下,这个式子所代表的是一个函数调用,但是当(b)的情况出现时,Simplifier就要重写并调换call subtree。 2.语言语意转换(Language semantics transformations) 这包括constructor/destructor的合成和扩展、memberwise初始化、对于memberwise copy的支持、在程序胫邪膊錭onversion operators、临时性对象,以及对constructor/destructor的调用。 3.程序代码和对象模型的转换(Code and object model transformations) 这包括对virtual functions、virtual base class和inheritance的一般支持、new和delete运算符、class objects所组成的数组、local static class instances、带有非常量表达式(nonconstant expression)之global object的静态初始化操作。我对Simplifier所规划的一个目标是:提供一个对象模型体系,在其中,对象的实现是一个虚拟接口,支持各种对象模型。 最后两种类型的转换构成了本书的基础。这意味着本书是为编译器设计者而写的吗?不是,绝对不是!这本书是由一位编译器设计者针对中高级C++程序员所写的。隐藏在这本书背后的假设是,程序员如果了解C++对象模型,就可以写出比较没有错误倾向而且比较有效率的代码。 作者简介 Stanley Lippman目前是华特迪斯尼主题动画公司(Walt Disney Feature Animation)的主要软件工程师。他曾经在AT&T贝尔实验室领导cfront 3.0和2.1版的编译器开发小组。他也是贝尔实验室中由Bjame Stroustrup所领导的Foundation专案组中的一员,负责对象模型并研究C++程序开发环境。Stan著有极为成功的C++ Primer一书,也发表过许多C++方面的论文。Stan最近刚从C++ Report的编辑位置上“退隐”,他曾在那个位置上做了4年。他的C++论述遍及全球。 侯捷,海峡两岸著名的电脑技术自由作家,对于技术的钻研和发表,有独特的品性与坚持。作品涵盖著、译、评三方面,散见于各种刊特、媒体、网站论坛,深受读者喜爱和尊敬。 目录 本立道生(侯捷 译序) 目录 前言(Stanley B.Lippman) 第0章 导读(译者的话) 第1章 关于对象(Object Lessons) 加上封装后的布局成本(Layout Costs for Adding Encapsulation) 1.1 C++模式模式(The C++ Object Model) 简单对象模型(A Simple Object Model) 表格驱动对象模型(A Table-driven Object Model) C++对象模型(The C++ Object Model) 对象模型如何影响程序(How the Object Model Effects Programs) 1.2 关键词所带来的差异(A Keyword Distinction) 关键词的困扰 策略性正确的struct(The Politically Correct Struct) 1.3 对象的差异(An Object Distinction) 指针的类型(The Type of a Pointer) 加上多态之后(Adding Polymorphism) 第2章 构造函数语意学(The Semantics of constructors) 2.1 Default Constructor的建构操作 “带有Default Constructor”的Member Class Object “带有Default Constructor”的Base Class “带有一个Virual Function”的Class “带有一个virual Base class”的Class 总结 2.2 Copy Constructor的建构操作 Default Memberwise Initialization Bitwise Copy Semantics(位逐次拷贝) 不要Bitwise Copy Semantics! 重新设定的指针Virtual Table 处理Virtual Base Class Subobject 2.3程序转换语意学(Program Transformation Semantics) 明确的初始化操作(Explicit Initialization) 参数的初始化(Argument Initialization) 返回值的初始化(Return Value Initialization) 在使用者层面做优化(Optimization at the user Level) 在编译器层面做优化(Optimization at the Compiler Level) Copy Constructor:要还是不要? 摘要 2.4 成员们的初始化队伍(Member Initialization List) 第3章 Data语意学(The Semantics of Data) 3.1 Data Member的绑定(The Binding of a Data Member) 3.2 Data Member的布局(Data Member Layout) 3.3 Data Member的存取 Static Data Members Nonstatic Data Member 3.4 “继承”与Data Member 只要继承不要多态(Inheritance without Polymorphism) 加上多态(Adding Polymorphism) 多重继承(Multiple Inheritance) 虚拟继承(Virtual Inheritance) 3.5 对象成员的效率(Object Member Efficiency) 3.6 指向Data Members的指针(Pointer to Data Members) “指向Members的指针”的效率问题 第4章 Function语意学(The Semantics of Function) 4.1 Member的各种调用方式 Nonstatic Member Functions(非静态成员函数) Virtual Member Functions(虚拟成员函数) Static Member Functions(静态成员函数) 4.2 Virtual Member Functions(虚拟成员函数) 多重继承下的Virtual Functions 虚拟继承下的Virtual Functions 4.3 函数的效能 4.4 指向Member Functions的指针(Pointer-to-Member Functions) 支持“指向Virtual Member Functions”之指针 在多重继承之下,指向Member Functions的指针 “指向Member Functions之指针”的效率 4.5 Inline Functions 形式对数(Formal Arguments) 局部变量(Local Variables) 第5章 构造、解构、拷贝 语意学(Semantics of Construction,Destruction,and Copy) 纯虚拟函数的存在(Presence of a Pure Virtual Function) 虚拟规格的存在(Presence of a Virtual Specification) 虚拟规格中const的存在 重新考虑class的声明 5.1 无继承情况下的对象构造 抽象数据类型(Abstract Data Type) 为继承做准备 5.2 继承体系下的对象构造 虚拟继承(Virtual Inheritance) 初始化语意学(The Semantics of the vptr Initialization) 5.3 对象复制语意学(Object Copy Semantics) 5.4 对象的功能(Object Efficiency) 5.5 解构语意学(Semantics of Destruction) 第6章 执行期语意学(Runting Semantics) 6.1 对象的构造和解构(Object Construction and Destruction) 全局对象(Global Objects) 局部静态对象(Local Static Objects) 对象数组(Array of Objects) Default Constructors和数组 6.2 new和delete运算符 针对数组的new语意 Placement Operator new的语意 6.3 临时性对象(Temporary Objects) 临时性对象的迷思(神话、传说) 第7章 站在对象模型的类端(On the Cusp of the Object Model) 7.1 Template Template的“具现”行为(Template Instantiation) Template的错误报告(Error Reporting within a Template) Template中的名称决议方式(Name Resolution within a Template) Member Function的具现行为(Member Function Instantiation) 7.2 异常处理(Exception Handling) Exception Handling快速检阅 对Exception Handling的支持 7.3 执行期类型识别(Runtime Type Identification,RTTI) Type-Safe Downcast(保证安全的向下转型操作) Type-Safe Dynamic Cast(保证安全的动态转型) References并不是Pointers Typeid运算符 7.4 效率有了,弹性呢? 动态共享函数库(Dynamic Shared Libraries) 共享内存(Shared Memory)

2011-04-28

解析C++虚函数表 PDF

解析C++虚函数表,很有深度的,每逢C++面试必问的,看了很有收获的 。。。。。。。。。。。。。。。。

2011-04-28

高质量程序设计指南 PDF

高质量C++/C编程指南 林锐之作

2011-04-28

彻底搞定C指针 PDF

姚云飞先生的大作《彻底搞定C指针》是互联网上中文C/C++界内为数不多的专门阐述C指针问题的优秀文献资源之一。 正如书名所示,对于那些学习了C基础知识却始终对C指针不得要领的读者,或者那些已经长期被C指针困扰的读者,作者致力于彻底解决他们在这方面的难题。为了达到这个目的,作者运用了许多生动与亲切的例子,深入浅出地讲透了C指针的原理与机制,并辅以编程实践中最常用的惯例和技巧作为示范。 《彻底搞定C指针》是互联网上下载次数最多的针对C指针问题的中文资源之一。现在,经由修订者的重新修订、编辑与排版,本书的《完全版·修订增补版》全新登场。新版本中的技术用语更加清楚严谨,行文的结构层次更加分明,例子中的程序代码均通过编译以测试其精准性。修订者希望这份新的成果能够令各位读者在C编程方面获得更多的益处,同时也期待着读者们宝贵的反馈信息。 再次向姚云飞先生致敬!

2011-04-28

More Effective C++

内容简介   More Effective C++一书充满了实用性高且掷地铿锵的忠告,为你每天可能面对的问题带来帮助。和其前一本兄弟书籍 Effective C++一样,More Effective C++对每一位以C++为开发工具的程序员而言,都必备读物。   继 Effective C++ 之後,Scott Meyers 於 1996 推出这本「续集」。条款变得比较少,页数倒是多了一些,原因是这次选材比「第一集」更高阶,尤其是第五章。Meyers 将此章命名为技术(Techniques),并明白告诉你,其中都是一些 patterns,例如 virtual ctors、smart pointers、reference counting、proxy classes,double dispatching┅等等。这一章的每个条款篇幅都在 15~30 页之谱,实在让人有「山穷水尽疑无路,柳暗花明又一村」之叹。   虽然出版年代稍嫌久远,本书并没有第二版,原因是当其出版之时(1996),C++ Standard 已经几乎定案,本书即依当时的标准草案而写。其间与现今之 C++ 标准规格几乎相同。可能变化的几个弹性之处,Meyers 也都有所说明与提示。读者可以连结作者提供的网址,看看上下两集的勘误与讨论(数量之多,令人惊恐。幸好多是技术讨论或文字斟酌,并没有什麽重大误失)。 编辑推荐 继 Effective C++ 之後,Scott Meyers 於 1996 推出这本「续集」。条款变得比较少,页数倒是多了一些,原因是这次选材比「第一集」更高阶,尤其是第五章。Meyers 将此章命名为技术(Techniques),并明白告诉你,其中都是一些 patterns,例如 virtual ctors、smart pointers、reference counting、proxy classes,double dispatching┅等等。这一章的每个条款篇幅都在 15~30 页之谱,实在让人有「山穷水尽疑无路,柳暗花明又一村」之叹。 虽然出版年代稍嫌久远,本书并没有第二版,原因是当其出版之时(1996),C++ Standard 已经几乎定案,本书即依当时的标准草案而写。其间与现今之 C++ 标准规格几乎相同。可能变化的几个弹性之处,Meyers 也都有所说明与提示。读者可以连结作者提供的网址,看看上下两集的勘误与讨论(数量之多,令人惊恐。幸好多是技术讨论或文字斟酌,并没有什麽重大误失)。 媒体推荐 书评   这是一本多方面发人深省的 C++ 书籍:不论在你偶尔用到的语言特性上,或是在你自以为十分熟悉的语言特性上。只有深刻了解 C++ 编译器如何解释你的码,你才有可能以 C++ 语言写出稳健强固的软体。本书是协助你获得此等层级之了解过程中,一份极具价值的资源。读过本书之後,我感觉像是浏览了 C++ 程式大师所检阅过的码,并获得许多极具价值的洞见。 - Fred Wild, Vce President of Technology, Advantage Software echnologies   本书内含大量重要的技术,这些技术是撰写优良 C++ 程式所不可或缺的。本书解释如何设计和实作这些观念,以及潜伏在其他某些替代方案中的陷阱。本书亦含晚近加入之 C++ 特性的详细说明。任何人如果想要好好地运用这些新特性,最好买一本并且放在随手可得之处,以备查阅。 - Chrisopher J. Van Wyk, Professor Mahematics and Computer Science, Drew University   这是一本具备工业强度的最佳书籍。对於已经阅读过 Effetive C++ 的人,这是完美的续集。 - Eric Nagler, ++ Instructor and Author, Univesity of California Santa Cruz Extension   More Effective C++ 是一本无微不至而且价值不扉的书籍,是 Scott 第一本书 Effective C++ 的续集。我相信每一位专业的 C++ 软体开发人员都应该读过并记忆 Effective C++ 和 More Effective C++ 两本书内的各种招式,以及其中重要(并且有时候不可思议)的语言面向。我强烈推荐这两本书给软体开发人员、测试人员、管理人员┅,每个人都可以从 Scott 专家级的知识与卓越的表达能力中获益。 - Steve Burkett, Software Consutant 作者简介 作者:(美)迈耶斯 译者:侯捷 作者Scott Meyers,是C++领域公认的权威,并对全球客户提供咨询服务。他是Effective C++ 的作者,C++REPORT的知名专栏作家,全球各技术研讨会上级具号召力的讲师。他于1993年拿到布朗大学的计算机科学博士学位。 目录 译序(侯捷) 目录(Contents) 致谢(Acknowledgments. 中文版略) 导读(Introduction) 001 基础议题(Basics) 009 条款1:仔细区别 pointers 和 references 009 Distinguish between pointers and references 条款2:最好使用 C++ 转型操作符 012 Prefer C++-style casts 条款3:绝对不要以polymorphically(多态)方式来处理数组 016 Never treat arrays polymorphically 条款4:非必要不提供 default constructor 019 Avoid gratuitous default constructors 操作符(Operators) 024 条款5:对定制的型别转换函数保持警觉 024 Be wary of user-defined conversion functions 条款6:区别 increment/decrement 操作符的 前置(prefix)和后置(postfix)型式 031 Distinguish between prefix and postfix forms of increment and decrement operators 条款7:千万不要重载 &&, ||, 和 , 操作符 035 Never overload &&, ||, or , 条款8:了解各种不同意义的 new 和 delete 038 Understand the different meanings of new and delete 异常(Exceptions) 044 条款9:利用 destructors 避免泄漏资源 045 Use destructors to prevent resource leaks 条款10:在 constructors 内阻止资源泄漏(resource leaks) 050 Prevent resource leaks in constructors 条款11:禁止异常(exceptions)流出 destructors 之外 058 Prevent exceptions from leaving destructors 条款12:了解「掷出一个 exception」与「传递一个参数」 或「调用一个虚函数」之间的差异 061 Understand how throwing an exception differs from passing a parameter or calling a virtual function 条款13:以 by reference 方式捕捉 exceptions 068 Catch exceptions by reference 条款14:明智运用 exception specifications 072 Use exception specifications judiciously 条款15:了解异常处理(exception handling)的成本 078 Understand the costs of exception handling 效率(Efficiency) 081 条款16:谨记 80-20 法则 082 Remember the 80-20 rule 条款17:考虑使用 lazy evaluation 085 Consider using lazy evaluation 条款18:分期摊还预期的计算成本 093 Amortize the cost of expected computations 条款19:了解暂时对象的来源 098 Understand the origin of temporary objects 条款20:协助完成「返回值优化(RVO)」 101 Facilitate the return value optimization 条款21:利用重载技术(overload)避免隐式型别转换 105 Overload to avoid implicit type conversions 条款22:考虑以操作符复合型式(op=)取代其独身型式(op)107 Consider using op= instead of stand-alone op 条款23:考虑使用其它程序库 110 Consider alternative libraries 条款24:了解 virtual functions、multiple inheritance、virtual base classes、 runtime type identification 所需的成本 113 Understand the costs of virtual functions, multiple inheritance, virtual base classes, and RTTI 技术(Techniques, Idioms, Pattern) 123 条款25:将 constructor 和 non-member functions 虚化 123 Virtualizing constructors and non-member functions 条款26:限制某个 class 所能产生的对象数量 130 Limiting the number of objects of a class 条款27:要求(或禁止)对象产生于 heap 之中 145 Requiring or prohibiting heap-based objects 条款28:Smart Pointers(智能指针) 159 条款29:Reference counting(引用计数) 183 条款30:Proxy classes(替身类、代理类) 213 条款31:让函数根据一个以上的对象型别来决定如何虚化 228 Making functions virtual with respect to more than one object 杂项讨论(Miscellany) 252 条款32:在未来时态下发展程序 252 Program in the future tense 条款33:将非尾端类(non-leaf classes)设计为 抽象类(abstract classes) 258 Make non-leaf classes abstract 条款34:如何在同一个程序中结合 C++ 和 C 270 Understand how to combine C++ and C in the same program 条款35:让自己习惯于标准 C++ 语言 277 Familiarize yourself with the language standard 推荐书目 285 auto_ptr 实现代码 291 索引1(General Index) 295 索引2(Index of Example Classes, Functions, and Templtes) 313

2011-04-28

Effective C# exe

内容提要 本书围绕一些关于C#和.NET的重要主题,包括C#语言元素、.NET资源管理、使用C#表达设计、创建二进制组件和使用框架等,讲述了最常见的50个问题的解决方案,为程序员提供了改善C#和.NET程序的方法。本书通过将每个条款构建在之前的条款之上,并合理地利用之前的条款,来让读者最大限度地学习书中的内容,为其在不同情况下使用最佳构造提供指导。   本书适合各层次的C#程序员阅读,同时可以推荐给高校教师(尤其是软件学院教授C#/.NET课程的老师),作为C#双语教学的参考书。 作者简介 Bill wagner是世界知名的.NET专家,微软C#领域的MVP,并荣获微软Regional Director称号。他是著名软件咨询公司SRT Solutions的创始人,有20多年软件开发经验,曾经领导了众多成功的Windows平台产品的开发。他是微软开发社区的活跃人物,长期担任MSDN Magazine、ASP.NET Pro、Visual Studio Magazine等技术杂志的专栏作者。他的blog是http://www.srtsolutions.com/public/blog/20574,可以通过[email protected]与他联系。 编辑推荐 业界专家经验荟萃,讲述从优秀到卓越的秘诀,涵盖C#2.0。 “一直以来,读者们总在不停地问我,什么时候写Effective C#?本书的出版使我如释重负。令人高兴的是,我本人已经从阅读Bill的著作中获益良多,相信读者也会和我一样。” ——Scott Meyers,Effective C++作者,世界级面向对象技术专家   C#与C++、Java等语言的相似性大大降低了学习难度。但是,C#所具有的大量独特的特性和实现细节。有时又会使程序员适得其反:他们往往根据既有经验,错误地选用了不恰当的技术。从而导致各种问题。与此同时,随着数年来C#的广泛应用,业界在充分利用C#的强大功能编写快速、高效和可靠的程序方面也积累了丰富的最佳实践。   本书秉承了Scott Meyers的Effective C++和Joshua Bloch的Effective Java所开创的伟大传统.用真实的代码示例,通过清晰、贴近实际和简明的阐述,以条款格式为广大程序员提供凝聚了业界经验结晶的专家建议。   本书中,著名.NET专家Bill Wagner就如何高效地使用C#语言和.NET库。围绕C#语言元素、.NET资源管理、使用C#表达设计、创建二进制组件和使用框架等重要主题,讲述了如何在不同情况下使用最佳的语言构造和惯用法,同时避免常见的性能和可靠性问题。其中许多建议读者都可以举一反三。立即应用到自己的日常编程工作中去。

2011-04-28

C++编程思想 第1卷 标准C++引导

《C++编程思想》(第1卷) 基本信息 出版社: 机械工业出版社; 第1版 (2005年11月1日) 丛书名: 计算机科学丛书 平装: 479页 开本: 16开 ISBN: 7111108078 内容简介 《C++编程思想》(第1卷)(第2版)是C++领域一本权威的著作,书中的内容、讲授方法、选用例子和跟随练习既适合课堂教学,又适合读者自学。无论是高等院校计算机及相关专业的学生,还是业界的专业人员,以及广大的计算机爱好者,都可从阅读《C++编程思想》(第1卷)(第2版)中获得宝贵的收益。第2版与第1版相比,在章节安排上有以下改变。增加了两章:“对象的创建与使用”和“C++中的C”,前者与“对象导言”实际上是第1版“对象的演化”一章的彻底重写,增加了近几年面向对象方法和编程方法的最瓣研究与实践的有效成果,后者的添加使不熟悉C的读者可以直接使用《C++编程思想》(第1卷)(第2版)。删去了四章:“输入输出流介绍”、“多重继承”、“异常处理”和“运行时类型识别”,删去的内容属于C++中较复杂的主题,作者将它们连同C++标准完成后又增加的一些内容放到《C++编程思想》(第1卷)(第2版)的第2卷中,使得《C++编程思想》(第1卷)(第2版)的第1卷内容更加集中,供不同程度的读者选择阅读。需要强调的是,第2版的改变不仅体现在这些章节的调整上,更多的改变体现在每一章的字里行间中,包括例子的调整和练习的补充。与众不同的精心选材和认真推敲的叙述使得第2版更趋成熟。 编辑推荐 《C++编程思想》(第1卷)(第2版)第1版荣获"软件开发"杂志评选的1996年度最佳图书震撼大奖,中文版自2000年推出以来,经久不衰,获得了读者的充分肯定和高度评价。 媒体推荐 书评 本书的内容、讲授方法,选用例子和跟随的练习,别具特色。作者Bruce Eckel不是按传统的方法讲解C++的概念和编程方法,而是根据他自己过去学习C++的亲身体会,根据他在多年教学实践中发现的问题,用一些非常简单的例子和简练的叙述,阐明了在学习C++中特别容易混淆的概念。特别是,他经常通过例子引导读者从C++编译实现的汇编代码的角度反向审视C++的语法和语义,常常使读者有‘心有灵犀一点通’的奇特效果。 作者简介 作者:(美国)埃克尔 译者:刘宗田 等 Bruce Eckel 《Thinking in Java》(Java编程思想)作者。Eckel有20年专业编程经验,并自1986年起教育人们如何撰写面向对象程序,足迹遍及全球,成为一位知名的C++教师和顾问,如今兼涉Java。他是C++标准委员会拥有表决权的成员之一,曾经写过另五本面向对象编程书籍,发表过150篇以上的文章,是多本计算机杂志的专栏作家。Eckel开创Software Development Conference的C++、Java、Python等多项研讨活动。拥有应用物理学学士和计算机工程学硕士学位。 目录 目 录 第1章对象导言 1.1抽象的过程 1.2对象有一个接口 1.3实现的隐藏 1.4实现的重用 1.5继承:重用接口 1.5.1is-a关系和is-like-a关系 1.6具有多态性的可互换对象 1.7创建和销毁对象 1.8异常处理:应对错误 1.9分析和设计 1.9.1第0阶段:制定计划 1.9.1.1任务陈述 1.9.2第1阶段:我们在做什么 1.9.3第2阶段:我们将如何建立对象 1.9.3.1对象设计的五个阶段 1.9.3.2对象开发准则 1.9.4第3阶段:创建核心 1.9.5第4阶段:迭代用例 1.9.6第5阶段:进化 1.9.7计划的回报 1.10极限编程 1.10.1先写测试 1.10.2结对编程 1.11为什么C++会成功 1.11.1一个较好的C 1.11.2延续式的学习过程 1.11.3效率 1.11.4系统更容易表达和理解 1.11.5尽量使用库 1.11.6利用模板的源代码重用 1.11.7错误处理

2011-04-28

空空如也

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

TA关注的人

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