一直有这么个想法,列一下我个人认为在学习和使用Java过程中可以推荐一读的书籍,给初学者或者想深入的朋友一些建议,帮助成长。推荐的的都是我自己读过,也会推荐一些朋友读过并且口碑不错的书籍。
1、《Thinking in java》(阅读2遍),入门第一位是建立正确的概念。
2、《Core Java》,我没系统读过,这本书更贴近实践,更多API的介绍,同样,更新也更频繁。(可以选重点章节读一下)
(1) O’Reilly的《Java nio》,很多人都推荐,我个人觉的一般,基本上只是个API更详细的说明文档,O’reilly的java系列很多都是这样。
(2)我更推荐这本《Fundamental networking in java》,由浅入深教你怎么做java网络编程,并且介绍很多背景知识,甚至介绍了各种最佳实践、网络编程模型以及Java socket在不同平台之间的差异等等。
(3) Netty
1、《敏捷软件开发》
2、《测试驱动开发》(1遍),你不一定要TDD,但是你一定要学会做单元测试。
3、《Agile Java》,也可以作为java入门读物。
4、《快速软件开发》
5、《面向对象分析与设计》,OO设计必读。
6、《Unix编程艺术》(1遍),打开你的眼界。
哪本书适合推荐给Java初学者? http://www.zhihu.com/question/19848946?rf=19752221
最近想写点有用的东西,发现自己最拿手的java用起来真是笨手笨脚的。
碰到好多实现起来巨繁琐的问题,比如操作底层库,和OS framework交互,做个用户体验好点的本地图形程序等等,这些都是java的软肋。
其实,我一直对底层颇感兴趣,工作中也只能接触一下JVM,但VM毕竟是VM,始终与底层失之交臂。
Linux、Mysql、Memcached、Boost、Apache、JVM、ACE... ... 很多基础服务都是用C/C++实现的,要像了解他们原理、能看懂代码、可以修改bug、增加新功能模块
开发嵌入式、中小型项目C/C++项目,维护C/C++项目... ...
加深对系统底层的理解
下文是我整理的一些C++图书列表,按顺序阅读,可涵盖入门到精通。
《The C programming language》必读
《C++ Primer》,号称是一本可以让你从C或JAVA程序员转为一个真正的C++程序员的入门参考书,必读。
《The C++ programming language》,C++之父,人称B教主著作,在看过C++ primer后,应该可以跳章选读。
《Think in c++》,网上说此书的中文版翻译质量奇差,推荐看影印版,选读。
《Effective c++》,类似 Effective java,讲的是最佳实践,程序员必读。
《More effective c++》,上书的补充。
《The C++ standard library》,会写C,不会用标准库怎么行。这就跟java程序员不会用java.util包一样,必读。
《Effective STL》,STL库的最佳实践。Effective C++作者又一力作,必读。
《The annotated STL source》,STL源码分析,这本书应该算是深入/精通类了,选读。
《Generic programming and STL》,号称C++编程里,就是跟模板,泛型打交道,那么精通泛型是势在必行。
《C++ Template》,C++模板编程,代码复用的经验之道,必读。
《Exceptional C++》,跟Effective C++类似,属于最佳实践和难题解析,书中列出了许多应用场景和实例代码供读者揣摩,选读。
《More Exceptional C++》,上书的补充。
《Exceptional C++ Style》,上上书的补充
《Inside The C++ Object Model》,有了上面这些书做铺垫,那么终于可以读此神书了。它会带你游览C++对象模型的底层实现机制。读完此书,任何C++代码看起来如同行云流水,必读。
OS: Linux kernel LVS、Linux应用程序
DB: Mysql、PostgreSQL
Complier: JVM、GCC
Framework: OpenSip、SipProxy、
Net: ACE(Java Mina、Netty)、TCP/IP、HTTP协议栈
Cache: Memcached、Redis、
Library: STL(java util package)、Boost、Qt(UI)、
balance: Apache、Nginx
... ...
部分转载请注明原文链接:http://kenwublog.com/a-java-programmer-learning-cpp
推荐的一些C\C++书籍:http://blog.jobbole.com/61308/
Linux C++全科班课程,专注Linux/UNIX服务器端软件开发(后台开发),培养企业所需的专业Linux/UNIX C++软件工程师。课程涉及UNIX/Linux服务器端软件开发的各个方面:Linux/UNIX、C++、Boost、ACE、Oracle /MySQL、企业级的实战项目等。
全日制脱产学习、历时4个月(120天 * 10小时 = 1200小时)。
Linux C++全科班课程由以下模块组成:
由于本系列课程基于Linux(或UNIX),熟悉Linux操作系统是必要的前提。 该模块的课程包含以下方面的内容:
一、课程目标
本次课程涵盖Linux系统编程的几个主要方面,通过本次课程的学习,学员将具备以下能力:
了解Linux系统调用和类库的区别;
熟悉文件I/O、文件和目录、进程管理、进程间通信(IPC)、信号、时间与定时器的编程。
二、参训要求
参加本次课程的学员须具备以下能力:
本次课程使用 C语言 教学,所以学员需拥有较好的C语言基础;
能熟练使用常用的Linux命令;
能熟练使用gcc、gdb、熟练撰写makefile;
最好熟练使用vi、emacs等文本编辑器其中的一种。
三、课程实践环境
学员自备电脑
操作系统:GNU/Linux 2.6+(建议使用Redhat AS 5+或Ubuntu、Fedora)
编译器:GCC v4.1+、GDB v7.0+
可选IDE:Eclipse CDT
四、课程大纲
本次课程由以下几个部分构成:
1、预备知识
UNIX历史和标准
UNIX; BSD & System V
GNU project; Linux Kernel
POSIX, SUSv3, SUSv4
Linux系统相关概念
系统调用和库函数
错误处理
特性测试宏
系统数据类型
系统限制和选项 (sysconf(), pathconf())
系统参数: /proc文件系统
2、文件I/O
Linux I/O系统调用与C标准库stdio的比较
I/O系统调用: open(), close(), read(), write()
控制I/O的Buffer
读写指针的定位:lseek()
I/O控制:ioctl()
原子操作和数据竞态
文件控制: fcntl()
文件打开的状态标志(status flags)
文件描述符
复制文件描述符:dup(), dup2()
3、文件和目录
文件属性
获取文件的属性:stat()
文件的时间戳
文件的所有权:chown()
文件的操作权限:chmod()
目录和连接文件
硬连接和软连接 (符号连接)
目录
迭代目录树
当前工作目录(CWD)
路径名
监控文件系统的事件:inotify
inotify API
inotify事件
inotify限制
4、进程控制
进程属性
进程ID(PID)和父进程ID(PPID)
进程内存布局
栈 (Stack)
堆 (Heap)
命令行参数和环境变量列表
非局部goto (nonlocal goto):setjmp() 和 longjmp()
创建和终止进程
创建进程:fork()
fork() 后的多进程数据竞态
进程终止:exit(3) 和 _exit(2)
退出处理器:atexit()
等待子进程的退出:wait(), waitpid(), waitid()
SIGCHLD 信号
执行程序
execve()
exec() 系列库函数
解释脚本
文件描述符和 exec()
信号和 exec()
执行Shell命令:system()
守护进程 (Daemons)
创建守护进程的几个步骤
使用 SIGHUP 信号使一个进程变成守护进程
系统中守护进程的示例:syslog
进程权限相关
文件 /etc/passwd 和 /etc/group
User ID, and Group ID
Real, effective, and saved set IDs
其它 group IDs
Set-user-ID and set-group-ID programs
获取或修改进程权限
5、信号 (Signals)
信号类型和默认动作
信号处理方式
信号处理器
发送信号
信号集
阻塞信号(signal mask)
系统调用的中断和重新执行
等待信号
6、时间和定时器(Timers)
时间相关的数据类型
POSIX Clock
获取当前时间
设置当前时间
C标准库 时间函数
Sleep
定时器(Timers)
简单的定时器:alarm()
interval Timers
高级定时器
7、进程间通信 (Interprocess Communication, IPC)
传统UNIX IPC
管道和优先队列 (Pipe and FIFO)
SYSV 消息队列 (SYSV Message Queue)
SYSV 信号量 (SYSV Semaphore)
SYSV 共享内存 (SYSV Shared Memory Segments)
内存映射文件 (Memory Mapping Files)
POSIX IPC
POSIX IPC的优势
POSIX 消息队列 (POSIX Message Queue)
POSIX 信号量 (POSIX Semaphore)
POSIX 共享内存 (POSIX Shared Memory Segments)
五、时间安排
课程时间:3天,以每天6小时计,具体安排如下:
Day1
1 - 预备知识
2 - 文件I/O
3 - 文件与目录
Day2
4 - 进程控制
5 - 信号
6 - 定时器
Day3
7 - 进程间通信
课程回顾与总结
六、课程资源
不同系统平台下的开发工具、开发环境各有不同。该模块课程关注的是Linux C++/C开发所必需的一系列工具:
一、课程目标
本次课程深入讲解Linux下的socket编程,并以此为基础,着重讨论如何提高网络服务端应用的性能,通过本次课程的学习,学员将收获以下方面的成果:
熟练使用socket系列函数进行网络编程;
深刻理解服务端应用的性能要求;
利用Linux提供的各种机制,有效地解决服务端应用的性能瓶颈。
二、参训要求
参加本次课程的学员须具备以下能力:
了解TCP/IP协议,有网络编程概念。
本次课程使用 C语言 教学,所以学员需拥有较好的C语言基础;
能熟练使用常用的Linux命令;
能熟练使用gcc、gdb、熟练撰写makefile;
最好熟练使用vi、emacs等文本编辑器其中的一种。
三、课程实践环境
学员自备电脑
操作系统:GNU/Linux 2.6+(建议使用Redhat AS 5+或Ubuntu、Fedora)
编译器:GCC v4.1+、GDB v7.0+
可选IDE:Eclipse CDT
四、课程大纲
本次课程由以下几个部分构成:
1、POSIX Thread - 多线程
线程管理
线程创建:pthread_create()
线程终止:pthread_exit()
线程连接和分离:join and detach
线程同步机制
互斥体:mutex
读写锁:read-write lock
条件变量:condition variable
线程属性控制
mutex属性控制
2、Socket 简介
Socket地址数据结构:struct sockaddr,struct sockaddr_in
字节序以及字节序操作:ntohl(), ntohs(), htonl(), htons()
Internet地址操作:inet_aton(), inet_addr(), and inet_ntoa(), inet_pton(), inet_ntop()
3、TCP Socket
socket():创建socket
bind():绑定地址
listen():开始侦听
accept():接受来自客户端的连接
connect():连接到服务器
getsockname()和getpeername():获取本地和对端地址
I/O 操作:read(), write()
更高效的I/O 操作:readv(), writev()
TCP Server编程步骤
TCP Server v1:迭代式Echo Server
TCP Server v2:多进程并发式Echo Server,使用fork()和exec*()
TCP Server v3:多线程并发式Echo Server,使用pthread
TCP Client编程步骤
TCP Client:Echo Client
4、UDP Socket
recvfrom()和sendto():收发UDP数据报
UDP Echo Server
UDP Echo Client
组播(Multicast)和广播(Broadcast)
5、Socket Options和 IP Options
常用的Socket Options
常用的IP Options
Socket选项和IP选项对网络应用的影响
6、I/O多路复用:构建反应式(Reactive)网络应用
UNIX I/O多路复用机制概要
为什么I/O 多路复用对于网络应用很重要
I/O 多路复用与多线程(反应式模型和并发模型)
select / poll
在TCP Server和UDP Server中使用select和poll
Linux特有I/O 多路复用机制:Event poll (epoll)
在TCP Server和UDP Server中使用epoll
7、异步I/O:构建前摄式(Proactive)网络应用
相关概念:同步I/O和异步I/O、Proactor模式
异步I/O 是如何提高I/O 性能的
异步I/O系列操作
使用异步I/O的机制构建TCP Server
8、高性能网络编程讨论
考究高性能网络编程中应该遵循的原则,讨论并发、同步、事件多路分离等机制的适用场合
网络应用的瓶颈何在
事件多路分离 vs 一连接一线程 (Event demultiplexing vs One thread per connection)
同步I/O vs 异步I/O (Synchronous I/O vs Asynchronous I/O)
如何适当地使用多线程
什么时候需要多个 事件多路分离线程
9、应用层协议定义与实现
为什么要自定义应用层协议
定义应用层协议 (以XMMEP协议为例)
用C++实现自定义的协议 (以XMMEP协议为例)
注:XMMEP为X-Messenger Message Exchanging Protocol
五、时间安排
课程时间:2天,以每天6小时计,具体安排如下:
Day1
1 - POSIX Thread - 多线程
2 - Socket 简介
3 - TCP Socket
4 - UDP Socket
5 - Socket Options和 IP Options
Day2
6 - I/O多路复用:构建反应式(Reactive)网络应用
7 - 异步I/O:构建前摄式(Proactive)网络应用
8 - 高性能网络编程讨论
9 - 应用层协议定义与实现
课程回顾与总结
六、课程资源
一、课程目标
I/O常常是现代应用程序的性能瓶颈,为突破这个瓶颈,现代操作系统不断推出新的I/O机制,使高性能的I/O编程变成可能。本次课程将讨论Linux下几种高性能I/O的机制,这些功能都是基于成熟的系统调用,通过本次课程的学习,学员将掌握以下内容:
传统File I/O;
散/聚 I/O (Scatter/Gather I/O);
阻塞式和非阻塞式I/O;
I/O多路复用;
select() , poll();
Event poll (epoll);
异步I/O;
运用I/O多路复用机制和异步I/O机制提高网络应用的并发响应和性能。
二、参训要求
参加本次课程的学员须具备以下能力:
本次课程使用 C语言 教学,所以学员需拥有较好的C语言基础;
能熟练使用常用的Linux命令;
由于本次课程涉及socket编程,所以学员需有Linux下socket编程的经历;
能熟练使用gcc、gdb、熟练撰写makefile;
最好熟练使用vi、emacs等文本编辑器其中的一种。
三、课程实践环境
学员自备电脑
操作系统:GNU/Linux 2.6+(建议使用Redhat AS 5+或Ubuntu、Fedora)
编译器:GCC v4.1+、GDB v7.0+
可选IDE:Eclipse CDT
四、课程大纲
本次课程由以下几个部分构成:
1、预备知识
理解:UNIX下一切皆文件
I/O的实质和I/O的步骤
2、文件I/O
Linux I/O系统调用与C标准库stdio的比较
I/O系统调用: open(), close(), read(), write()
控制I/O的Buffer
读写指针的定位:lseek()
I/O控制:ioctl()
原子操作和数据竞态
文件控制: fcntl()
文件打开的状态标志(status flags)
文件描述符
复制文件描述符 (dup(), dup2())
3、散/聚I/O (Scatter/Gather I/O)
什么是散/聚 I/O,为什么需要散/聚 I/O
系统调用:readv(), writev()
4、I/O多路复用 (I/O Multiplexing)
什么是I/O多路复用
I/O多路复用和多线程并发处理I/O的区别
select(), poll():传统的UNIX I/O多路复用机制
select(), pselect()
poll(), ppoll()
Epoll:Linux系统新的I/O多路复用机制
Event poll介绍
创建epoll实例
控制epoll
等待I/O事件
epoll的两种触发方式:水平触发(level-triggered)、边缘触发(edge-triggered)
5、异步I/O
关于同步I/O:阻塞式I/O和非阻塞式I/O
什么异步I/O
理解同步I/O和异步I/O的差别
异步I/O重要数据结构:异步I/O控制块--struct aiocb
异步读、写操作:aio_read(), aio_write()
检查异步操作的结果:aio_error(), aio_return()
取消异步操作:aio_cancel()
异步文件同步:aio_fsync()
6、使用高性能I/O机制提高网络服务端应用的性能
为什么传统的I/O机制会导致服务端应用的性能瓶颈
使用select()和poll()实现ACE中的Reactor模式
使用epoll实现ACE中的Reactor模式
在网络应用中使用异步I/O机制:模拟ACE中Proactor模式和框架
实例演示,区别传统I/O机制和高性能I/O机制对于服务端应用的重要性
五、时间安排
课程时间:2天,以每天6小时计,具体安排如下:
Day1
1 - 预备知识
2 - 文件I/O
3 - 散/聚 I/O
4 - I/O多路复用
Day2
5 - 异步I/O
6 - 高性能I/O机制和网络服务端应用
深入讲解C++编程语言的各个方面,即完整的C++语法讲解:
完整地讲解STL各大组件:容器、算法、函数对象、容器适配器、迭代器、迭代器适配器等;另外还包括string、I/O stream;为了更好地了解STL容器的特性、排序算法,额外安排:数据结构简介和常用排序算法简介2个部分的内容。
C++作为一门多风格的程序设计语言,除了强大的面向对象支持外,泛型编程(模板机制)的支持更是极大程度上提高了C++的表现能力,现在模板的运用已成为C++类库、应用程序中自然且不可分割的一部分,渗透到各个角落。本次课程将深入、细致的讲解C++模板机制、STL、Boost相关类库的实现思路、手法以及其表现出的智慧,以企通过本次课程的学习,将这些经验自如地用到后续的软件开发中。这次课程关注:
C++模板机制
STL和Boost部分类库的剖析
参加本次课程的学员须具备以下能力:
本次课程假定学员有编程经历,使用C/C++、Java或其它语言实际编写过代码;
能熟练使用Windows或Linux下的编译器(如g++)、调试器(如gdb)。
学员自备电脑
实践平台 (以下二者之一):
Win32 / Visual Studio 2008 (或更新)
Linux 2.6.18+ x86-32 / GCC 4.1.2+ / Eclipse CDT 、vi
本次课程由以下几个部分构成:
1、C++ 模板机制
关于C++模板
类模板
函数模板
模板实例化
模板参数
使用模板参数指定策略
特征类 (Traits classes)
模板特化
完全特化
部分特化
类模板的派生
Curiously Recurring Template Pattern (CRTP)
依赖名字:关键字typename和template的另一种用处
2、STL 概要
什么是STL
STL组件
容器
算法
迭代器
函数对象
适配器
分配器
STL的能力与限制
3、STL容器
序列容器
Vector
Deque
List
有序关联容器
Multisets
Sets
Multimaps
Maps
无序关联容器
Unordered Multisets
Unordered sets (Hashsets)
Unordered Multimaps
Unordered maps (Hashmaps)
4、STL迭代器
关于迭代器
迭代器的操作
迭代器类别
Input Iterators
Output Iterators
Forward Iterators
Bi-directional Iterators
Random Access Iterators
Constant Iterators
Reverse Iterator
5、STL算法
STL算法一览
算法类别
各类算法介绍
非修改性算法
修改性算法
排序算法
集合算法
堆算法
6、预与定义STL数对象
预定义一元函数对象
预定义二元函数对象
判断式(Predicates)
7、STL适配器
适配器的概念
容器适配器
Stack
Queue
迭代器适配器
Inserters
函数对象适配器
Binders
Function Adapters
Negaters
Boost是由C++标准委员会成员发起、众多C++业界高人参与设计并实现的一个涉及面广、质量高且业已广泛使用的C++标准后备库,其中 TR1已经被纳入C++0x标准库。不论从风格和内容组织上讲,都可以认为Boost项目是C++标准库的延伸。截止到boost 1.43版本,boost项目拥有大约100个用途广泛的实用库。这部分课程将介绍服务器端开发所需要的几个组件:
ACE是一个被广泛使用、设计优雅、高性能的C++通信框架(不仅仅是通信框架),其设计及实现被众多开源框架所借鉴。是构建稳定、高性能、高吞吐量、跨平台的服务器端程序的优秀框架。本模块的课程包含以下几个方面:
本次课程针对使用ACE工具包进行高性能网络应用开发,通过本次课程的学习,学员将具备以下能力:
了解ACE的架构和组件;
理解现代操作系统线程模型、并发以及同步机制;
熟练使用ACE线程管理和同步机制接口开发并发应用;
熟练使用ACE基本的IPC SAP接口,如SOCK_Stream、SOCK_Dgram等;
深刻理解现代操作系统中事件多路分离和分派机制如select、epoll等、了解异步I/O以及完成事件的分派;
熟练使用ACE Reactor组件、Acceptor-Connector组件、Proactor组件等构建稳定、高效和灵活的网络应用。
二、参训要求
参加本次课程的学员须具备以下能力:
熟练掌握C++语法,理解C++面向对象和泛型(模板)机制;
了解TCP/IP协议,有网络编程概念。
三、课程实践环境
学员自备电脑
实践平台 (以下二者之一):
Win32 / Visual Studio 2008 (或更新)
Linux 2.6.18+ x86-32 / GCC 4.1.2+ / Eclipse CDT 、vi
ACE 6.0.0+
四、课程大纲
本次课程由以下几个部分构成:
1、 ACE简介
什么是ACE?
ACE的使用范围;
ACE工具包的架构层次;
ACE的组件简介。
2、ACE基础的网络I/O对象
详细介绍ACE_SOCK、ACE_SOCK_Acceptor、ACE_SOCK_Connector、ACE_INET_Addr等class的使用。
ACE Socket基类:ACE_SOCK;
TCP主动连接对象:ACE_SOCK_Connector;
基于TCP、面向连接的Socket:ACE_SOCK_Stream;
TCP被动连接对象:ACE_SOCK_Acceptor;
基于UDP、无连接的Socket:ACE_SOCK_Dgram (Unicast)、ACE_SOCK_Dgram_Mcast (Multicast)、ACE_SOCK_Dgram_Bcast (Broadcast)。
3、ACE并发编程:线程与同步
线程与进程之区别;
用户线程与内核线程;
不同操作系统中的线程模型;
ACE线程管理:Thread_Manager;
ACE线程同步:ACE_Guard、ACE_Thread_Mutex等;
ACE Task框架:Message_Block、Message_Queue、ACE_Task。
4、ACE Reactor框架
ACE Reactor框架简化事件驱动程序的开发,而事件驱动是很多网络化应用的基本特征,这些应用常见的事件源包括I/O事件、Posix信号或 Windows句柄激发以及定时器到期等。
关于ACE Reactor框架;
关于事件多路分离和分派 (Event demultiplexing and dispatching );
Linux下 I/O事件多路分离机制:select、epoll;
事件处理器 ACE_Event_Handler:
I/O事件(输入、输出)、信号、超时事件、异常事件的捕获和处理;
ACE_Timer_Queue和ACE_Time_Value:
定时器的应用;
ACE_Reactor:ACE的反应器为ACE Reactor框架的核心,负责事件的检测、多路分离和事件处理器的分派;
例程:基于ACE Reactor框架实现一个多人聊天室。
5、ACE Acceptor-Connector框架
ACE Acceptor-Connector框架实现了Acceptor-Connector模式,这种模式通过解除:1,网络化应用中相互协作的对等服务的连接和初始化所需的活动、2,以及它们一旦连接和初始化后所执行的处理的耦合,增强了软件复用和可扩展性。
集成了Message_Queue的ACE_Event_handler:ACE_Svc_Handler;
接受器:ACE_Acceptor;
连接器:ACE_Connector;
例程:基于Acceptor-Connector框架实现一个转发服务器。
6、ACE Proactor框架
Proactor框架引入异步I/O机制,既保留了Reactor框架的事件多路分离,避免多线程的开销,同时还缓和了反应式的同步I/O的瓶颈效应。
关于Proactor模式和Proactor框架;
关于异步I/O;
异步I/O工厂类:
ACE_Asynch_Read_Stream和ACE_Asynch_Write_stream;
ACE_Handler;
前摄式Acceptor-Connector;
前摄器:ACE_Proactor;
例程:基于Proactor框架重新实现多人聊天室。
7、ACE实用工具
ACE日志实用工具:ACE_Log_Msg;
读写配置文件:ACE_Configuration_Heap;
Singleton模式 (单例模式) 的ACE实现:ACE_Singleton类模板。
8、高性能网络编程讨论
考究高性能网络编程中应该遵循的原则,讨论并发、同步、事件多路分离等机制的适用场合。
网络应用的瓶颈在何处?
事件多路分离 vs 一连接一线程 (Event demultiplexing vs One thread per connection);
同步I/O vs 异步I/O (Synchronous I/O vs Asynchronous I/O);
如何适当地使用多线程?
什么时候需要多个 事件多路分离线程?
9、应用层协议定义与实现
为什么要自定义应用层协议?
定义应用层协议 (以XMMEP协议为例);
用C++实现自定义的协议 (以XMMEP协议为例)。
注:XMMEP为X-Messenger Message Exchanging Protocol。
五、时间安排
课程时间:3天,以每天6小时计,具体安排如下:
Day1
1 - ACE简介
2 - ACE基础的网络I/O对象
3 - ACE并发编程
Day2
4 - ACE Reactor框架
5 - ACE Acceptor-Connector框架
Day3
6 - ACE Proactor框架
7 - ACE实用工具
8 - 高性能网络编程讨论
9 - 应用层协议定义与实现
课程回顾与总结
数据库作为服务器端应用数据持久化的最重要的部件,在服务器端应用开发中占有非常重要的地位。本模块主要针对Oracle 10g和MySQL 5.1两种关系型数据库管理系统。本模块包含以下内容:
课程结束后,学员需基于C++、Boost或ACE实现以下2个项目:
http://www.xuanyuan-soft.cn/zh/personal/projects
轩辕高端IT培训中心的所有项目均围绕Linux、C++、高性能服务器端应用而设置,主要涉及C++、网络、多线程、数据库等方面。以C++ STL、Boost、ACE等优秀的类库和框架来实现项目所定义的功能。
与普通的教学项目不同,轩辕高端IT培训中心的所有最终项目均以企业应用的强度来要求和架构,不仅仅停留在Demo项目的层次,只有这样的要求才能考验学员对项目开发的整个过程的理解和对企业级项目的确切认识,从而保证在实现过程中能学习到真实企业项目所要求的安全性、稳定性 、高性能以及代码的规范性和大项目的分工合作。
可获取的课程资源见:教学资源。
企业高端课程
C++高级编程
4 C++面向对象编程高级培训 查看公开课计划
3 C++泛型编程与STL高级培训 查看公开课计划
1 Boost核心类库精讲 查看公开课计划
2 ACE核心框架精讲 查看公开课计划
Linux系统编程
1 Linux环境高级编程 查看公开课计划
2 Linux高级I/O机制 查看公开课计划
高性能网络编程
1 ACE高性能网络编程 查看公开课计划
2 Boost高性能网络编程 查看公开课计划
3 Linux高性能网络编程 查看公开课计划
4 高性能服务器编程 查看公开课计划
多核与并行编程
1 OpenMP多核编程高级培训 查看公开课计划
2 POSIX Threads编程高级培训 查看公开课计划
3 ACE并发编程精讲 查看公开课计划
4 C++2011多线程编程高级培训 查看公开课计划
《C++ Primer》
最新版本:第三版(第四版国外已上架, 国内一些网上书店也在预订中)
适合有丰富C经验,缺乏C++经验的。不过我个人一直认为此书带着过于强烈的C语言的痕迹,对于C++的学习未必是 好事。
《The C++ Programming Language》/《C++程序设计语言》
最新版本:第三版特别版
简称 TC++PL,有其他语言的丰富经验的。(也有人简称之为“TCPL”,但需与另一本《The C Programmer Language》区分开来)
《Essential C++》
《Accelerated C++》
这两本薄一些,都是不错的选择。《Accelerated C++》本人没有读过,从各方面的评价来看,完全值得推荐。
以上几本书都有相应的中文版,而且翻译的质量都不错。上面的书未必都需要读一遍,但无论如何,TC++PL是应该阅读的。
这个路线侧重于语言本身
《Effective C++》
最新版本:第二版(第三版国外已上架,国内一些网上书店也在预订中)
简称EC。C++程序员必读! 很多时候,我们说C++圣经不是指TC++PL,而是这一本。《The Pragmatic Programmer》一书中写到:“一旦你发现自己要参与C++项目的开发,赶快跑(不要走)到书店去购买Scott Mayer的《Effective C++》,可能还要《More Effective C++》”。
《C++ Coding Standards: 101 Rules, Guidelines, and Best Practices》/《C++ 编程规范》
个人认为此书应为C++程序员必备的案头书。几乎Effective系列和Exceptional系 列都在这里得到了总结。最新的模版、异常的业界经验都在这里的到了体现。可能的唯一缺陷就是对一个新手而言,关于“为什么这么做”的问题,解释的不够。
我 的看法是:如果你不理解其中的条款,记忆,并且照做;如果你理解其中的条款,我猜你一定会同意书中的观点。我认为这本书中的内容至少在2009年以前都不 会过时,人们将广为传诵它制定的101条戒律。
还不知道他的简称,也许“101”会成为一个候选者?
提到《Effective C++》,那么另外三本书一一浮出水面:
《More Effective C++》
《Exceptional C++》
《More Exceptional C++》。
新书《Exceptional C++ Style》也是值得一看的好书。
上 述几本书,一本也不应该放过。
个人建议上述书籍按顺序阅读。并且,在将来反复阅读这几本书。
这 个路线侧重于程序库。
《The C++ Standard Library》/《C++标准程序库—自修教程与参考手册》
听说过STL吗?这本书会教你最基本 的,也是最重要的STL的使用。这本书,应该是必读的。
《Effective STL》
会使用STL还不够,还必须知道什么时候选择什么STL组件,这是STL使用的必读书。
《Generic Programming and the STL: Using and Extending the C++ Standard Template Library》/《泛型编程与STL》。
这本书理论性较强,但是真的很严谨,而且并不是非常难懂。理解其 中对于Concept的解释,将是非常重要的。
《C++ STL》
这不是讲述使用程序库的,而是讲述程序库实现原理的。肠胃不好的,需要慢慢吸收。
这个路线的书,仍然是建议按顺序阅读。
进阶A、进阶B两个路线应该是可以并行的。
提 出这些参考书,只是避免争议,也为开阔视野,笔者并不曾完全读过所有的。
《Thinking in C++》/《C++编程思想》
这本书及其中文版传言好坏都有,没有认真看过,不做评价,如果确有兴趣,不妨尝试 一下该书。
以下几本书基本上涉及的都是语言本身,大体上可以按照以下的顺序阅读。
《C++必知必会》
如果早一年,这本书将是重量级的,然而它被101和《Exceptional C++ Style》盖过一头。
《C++ Gotchas: Avoiding Common Problems in Coding and Design》/《C++程序设计陷阱》
这又是一本我未曾读过,而且广受好评的书。
《STL 源码剖析》
这本书我刚到手,就被人"借"走,以至于到现在也没有看过。看过这本书的朋友,可以给一个合适的评价。
高级:
《The Design and Evolution of C++》/《C++语方的设计和演化》
简称D&E,内 容并不艰深,Bjarne的书,仅此,就值得一读。
前段时间,互动网曾8块一本(人民币)贱卖此书,现在好像没了。
《Inside The C++ Object Model》/《深度探索C++对象模型》
C程序员读后一定会觉得C++原来并不神秘。
《C++ Template》
在阅读STL、Boost或者Loki的源代码之前,请仔细阅读本书,它可以减轻一些阅读的烦恼。这本书是讨 论C++模版的权威。
《Modern C++ Design Generic Programming and Design Patterns Applied》/《C++设计新思维——泛型编程与设计模式之应用》
简称MCD。在阅读MCD之前,建议先阅读一下《C++ Template》。
《对象揭秘:Java、Eiffel和C++》
你对C++不满吗?这本书可以部分地帮你完成抱怨的目标。也许它还可以让你不迷信C++。
最后,一份C++标准文档也是应该加以咀嚼的。
还有一些书籍,并不能简单的归于C++,也难以在纯粹的书本学习中加以掌握。 《Design Patterns》/《设计模式》一书就归于此类。
**************************************************************
《Multi-Paradigm Design For C++ 》,这本书有些陈旧,也许在出版的年代还是很优秀的,现在,这样的书已经完全可以被推荐书目覆盖了。最重要的是,书中的某些观点今天已经不合时宜了。
《C++编程惯用法》这是一本如雷贯耳的书,可惜,这本书是1992年出版的,书中的很多内容,已经被后来的作品覆盖,而且讲述得更全面严谨。另 外,该书中对于C++的认识,在今天看来,已经过时甚至成为错误的观点。因此,只适合已经通晓C++的人参考。
《深入浅出MFC》
这是一本讲述如何使用MFC库的书。今天,MFC日渐式微,而且,MFC所使用的C++技术也是一直为人所诟病的。书确实是不错的,但是,学习C++并不 一定要学习MFC。因此,对于学习C++而言,这本书不是必须。
《The Art Of C++》
老实说,我对这本书的评价一般般。而且,“Art”名不副实,有翻译成《C++实战》,到是更确切一些。
《大规模C++编程》
这是一本重要的书,特别是对于缺乏大规模C++软件开发的人来说,尤其如此。但是,这本书的中文版翻译太差劲了。这是一本关于工程的书,因此,并不是 C++学习必备的。另外,书中的观点略嫌保守,对于最新的C++技术运用不多。
《Imperfect C++》
这是一本基础于实践结合的书,确实很优秀,而且所讲内容并不很难。但是从学习C++的角度而言,理解这本书需要许多的实践经验。推不推荐,属于两难的一本 书。
《C++ Primer》和《TC++PL》都不适合初学者
这个书目的目标是:帮助一个人在C++领域尽快地登堂入室,帮助一个人成为合格的C++程序员。
这个书目不适合下列目标:应付各类计算机考试,应付面试,快速了解C++。
《C语言参考手册(原书第5版)》 ---- 作为参考书,没错的
引用China-pub上的介绍:
本书是经典C语言参考手册的最新版,在强调正确性、可移植性和可维护性的基础上,对C语言的具体细节、运行库以及C语言编程风格做了完整、准确的描述。本 书涵盖了传统C语言、C89、C95、C99等所有C语言版本的实现,同时讨论了C++与C语言兼容的部分。全书自上而下介绍了C语言的词法结构、预处理 器、声明、类型表达式、语句、函数和运行库,是所有C语言编程人员必备的参考书。 这本畅销的权威参考手册对C语言的基本概念和运行库提供了完整的描述,同时还强调了以正确性、可移植性和可维护性为根本出发点的良好的C语言编程风格,被 国外众多高校广泛采用为教材或教学参考书,本书描述了C语言各个版本的所有细节,是C语言编程人员和实现者惟一必备的参考手册。最新的第5版经过修订和更 新,融入了最新C语言标准ISO IEC 9899:1999的完整描述,包括强大的语言扩展和新的函数库。 Web站点www.CAReferenceManual.com中包 含了本书较长示例的源代码、对C语言争论点的深入讨论、最新ISO IEC语言标准修订以及其他重要C语言资源的链接。本书作为参考手册,提供了非常详细、清晰的c语言描述:
●标准C语言(1999):是标准C语言的新版本,支持复数类型与布尔类型、变长数组、精确浮点 数编程和具有可移植性与国际化的新的库函数
●标准以C语言(1989):当前大多数编程人员使用的C语言版本
●传统C语言:1990年之前常用的版本,还有几百万行代码正在使用
●C++兼容C语言:可以同时在C语言与C++中使用的代码
●所有C语言版本的完整运行库
《C语言的科学与艺术》 --- 非常好的一本书,现在也有中文版
引用China-pub上的介绍:
本书是计算机科学的经典教材,介绍了计算机科学的基础知识和程序设计的专门知识。本书以介绍ANSI C为主线,不仅涵盖C语言的基本知识,而且介绍了软件工程技术以及如何应用良好的程序设计风格进行开发等内容。本书采用了库函数的方法,强调抽象的原则, 详细阐述了库和模块化开发。此外,本书还利用大量实例讲述解决问题的全过程,对开发过程中常见的错误也给出了解决和避免的方法。本书既可作为高等院校计算 机科学入门课程及C语言入门课程的教材,也是C语言开发人员的极佳参考书。
《C语言接口与实现:创建可重用软件的技术》
引用China-pub上的介绍:
本书概念清晰、内容新颖、实例详尽,是一本有关设计、实现和有效使用C语言库函数,掌握创建可重用C语言软件模块技术的参考指南。本书倡导基于接口的C语 言设计理念及其实现技术,深入详细地描述了24个C语言接口及其实现。
本书通过叙述如何用一种与语言无关的方法将接口的设计与实现独立开来,从而形成一种基于接口的设计途径来创建可重用的API,本书是一本针对C语言程序员 的不可多得的好书,也是值得所有希望掌握可重用软件模块技术的读者阅读的参考书籍。关于如何设计、实现和有效使用库函数的指南少之又少(如果说还有的 话)。这本力作填补了这个空白。它可以作为下一代软件的工具书.所有的C语言程序员都应该阅读。 ——W.Richard Stevens
“我向每位专业C语言程序员推荐这本书。C语言程序员们忽视书中所描述的各种技术已经太长时间了。” ——Norman Ramsey,贝尔实验室研究员
《C程序设计语言(第2版·新版)》
引用China-pub上的介绍:
本书是由C语言的设计者Brian W. Kernighan和Dennis M. Ritchie编写的一部介绍标准C语言及其程序设计方法的权威性经典著作。全面、系统地讲述了C语言的各个特性及程序设计的基本方法,包括基本概念、类 型和表达式、控制流、函数与程序结构、指针与数组、结构、输入与输出、UNIX系统接口、标准库等内容。
本书的讲述深入浅出,配合典型例证,通俗易懂,实用性强,适合作为大专院校计算机专业或非计算机专业的C语言教材,也可以作为从事计算机相关软硬件开 发的技术人员的参考书。 在计算机发展的历史上,没有哪一种程序设计语言像C语言这样应用如此广泛。
本书原著 即为C语言的设计者之一Dennis M.Ritchie和著名的计算机科学家Brian W.Kernighan合著的 一本介绍C语言的权威经典著作。我们现在见到的大量论述C语言程序设计的教材和专著均以 此书为蓝本。原著第1版中介绍的C语言成为后来广泛使用的C语言版本—— 标准C的基础。人们熟知的“hello, World”程序就是由本书首次引入的,现在,这一程序已经成为所有程序设计语言入门的第一课。原著第2版根据1987年制定的ANSIC标准做了适当的 修订.引入了最新的语言形式,并增加了新的示例,通过简洁的描述、典型的示例,作者全面、系统、准确地讲述了C语言的各 个特性以及程序设计的基本方法。对于计算机从业人员来说,本书是一本必读的程序设计语言方面的参考书。