■課程描述:如果您希望編寫的網游服務器,或者通過重寫代碼來調整新浪的web服務器性能,就應該選擇這門課程。目前是云計算的時代,Google、百度、騰訊、阿里巴巴等公司都在部署自己的云計算平臺,而除了微軟自己,毫無例外所有的成規(guī)模的云計算平臺都是UNIX/Linux平臺下的軟件架構。而網絡游戲等熱門公司也大量采用UNIX/Linux平臺的系統(tǒng)及網絡程序,所以本課程為目前最熱門的研發(fā)職業(yè)生涯打下堅實的技術基礎。
■教學目標:強調全真Linux平臺開發(fā)環(huán)境,完全企業(yè)真實開發(fā)項目,讓學員通過9個以上的實際項目全面演練UNIX/Linux平臺下POSIX規(guī)范,以及Socket網絡編程的技能,讓學員真正達到云計算企業(yè)以及網游、實時消息服務商等企業(yè)的技術要求。
■面向行業(yè)及崗位:
面向職位:服務器軟件研發(fā)工程師、網游軟件工程師、互聯(lián)網開發(fā)工程師、云計算開發(fā)工程師
學員就業(yè)公司有:互聯(lián)網公司,如騰訊(國互聯(lián)網中心(服務器端程序)百度 等;網游公司,如巨人網絡、北之辰游戲公司;系統(tǒng)集成公司,如聯(lián)想利泰等
■ 培養(yǎng)對象
希望掌握UNIX/Linux平臺的服務器端程序開發(fā)技術的學員;以及希望從事網絡游戲開發(fā)、VOD視頻點播系統(tǒng)、視頻廣播系統(tǒng)的愛好者、工程師、程序員、已及相關行業(yè)的工程技術人員;有志于從事C/S架構、云計算架構研發(fā)的軟件開發(fā)技術人員和正在學習計算機、軟件、通信專業(yè)的學生,以下是主要應用方向
◆ 網絡游戲軟件開發(fā);
◆ 類似span>開發(fā);
◆ UNIX/Linux系統(tǒng)級服務軟件開發(fā);
■ 課程特色
◆本課程設計者為Chinaunix C/C++版資深版主Johnbull
◆全部Linux平臺開發(fā)環(huán)境最接近真實的企業(yè)開發(fā)環(huán)境
◆為云計算提供直接的知識積累
◆全新案例教學,自己編寫不少于9個實際項目
◆高強度授課,全部項目型教學,每個環(huán)節(jié)都有案例,全程計算機教學
■課程大綱:
(UDA 高級部分 共360學時,每天8學時,共9周全部上機
開發(fā)E級課程初級部分 共176學時,每天8學時,共5周全部上機 )
◆UDA- UNIX/Linux應用開發(fā)整體概述
● UNIX/Linux高級I/O編程
● UNIX/Linux進程與線程開發(fā)
● UNIX平臺多線程開發(fā)
● 進程間通信 TCP/IP協(xié)議棧的設計與實現
● UNIX/Linux Socket網絡編程與實例
● C/S結構UNIX服務器編程實例
實際項目1:自助點菜系統(tǒng)
實際項目2:自己寫一個UNIX文件復制程序
實際項目3:自己寫一個文件操作的命令
實際項目4:高效數據中繼引擎
實際項目6:UNIX任意定時器
實際項目5:自己動手寫一個命令解釋器(shell)
實際項目7:利用多線程技術重寫 實際案例4:高效數據中繼引擎
實際項目8:利用多線程技術重寫 實際項目6:UNIX任意定時器
實際項目9:數字媒體廣播系統(tǒng)
■課程詳細大綱
-------- 第二部分 UDA A級高級部分(E基礎部分在后部)-------
◆ UNIX/Linux I/O開發(fā)及實例
■標準I/O庫
重要數據類型和常量
標準I/O庫作為ASNI C定義的一部分,不僅僅定義了I/O行為,還定義了若干常量和宏,對我們認識C語言編程有很重要的意義。
兩種I/O操作風格及其適用場合
標準I/O庫提供了格式化I/O和原始I/O兩種操作風格,完整掌握這兩種風格的操作,并學會在日常碰到的各種問題中,選擇合適的風格予以解決是C程序員的入門技能之一。
緩沖及其帶來的問題和收益
標準I/O庫定義了一個用戶態(tài)的buffer,這個buffer讓絕大多數初學者頭疼,如何正確看待和使用這個機制對于程序效率和穩(wěn)定性很重要。
■實際項目1:自助點菜系統(tǒng)
很多學C的初學者總是抱怨"我已經學會C語言了,可是為什么還是什么都寫不出來呢?" 這個項目就會給你一個完整的答案!我們僅僅利用前面學過的標準I/O技術(相當于"譚C"),構造一個實際的應用程序。看看我們與實際程序之間相距多遠。
項目描述:本項目的目標是實現一個基于WEB的自助點菜系統(tǒng),系統(tǒng)具備與網內應用服務器提取菜單信息以及將客戶點菜信息發(fā)往服務器的功能。
要求:
.WEB界面
.數據庫訪問
.支持點菜、退菜、帳單結算
說明:
增進對Apache WEB服務體系的理解
設計并實現一個真實而完整的WEB應用程序,涉及到數據庫訪問、HTTP協(xié)議、標準I/O庫、CGI等編程技術。
強化對標準I/O庫的理解,強化Browser/Server軟件架構的理解。
■系統(tǒng)I/O庫
文件描述符
使用I/O系統(tǒng)調用的最關鍵參數,認識文件描述符是認識UNIX內部設計的*步。
系統(tǒng)I/O操作
系統(tǒng)調用層的I/O操作相對簡單,但是非?;A,必須練得非常扎實才行。
描述符操作
理解了文件描述符之后,就可以利用若干系統(tǒng)調用對I/O行為進行更細微的操作了,如dup(2)、fcntl(2)、ioctl(2)等等
性能的問題
與標準I/O操作相比,系統(tǒng)調用層的I/O少了一層buffer,那么我們研究一下什么強況下使用什么接口進行操作。
■文件系統(tǒng)操作
stat(2)及其相關問題
獲取文件的詳細信息,并分析結果。
■UNIX文件系統(tǒng)的原理
利用傳統(tǒng)的UFS文件系統(tǒng),了解UNIX文件系統(tǒng)的架構和設計思想,我們可以完整地看到諸如i-node的具體意義,并通過對ext2的分析,實踐我們在算法與數據結構課上學到的知識。
文件亞數據操作
我們可以了解到coreutil包中的大部分命令的實現內幕。
連接
有了對文件系統(tǒng)的理解,我們可以完整地掌握硬連接和符號連接的具體意義。
目錄操作
這是程序員的基本技能之一。我們將了解兩種操作方式。
■實際項目2:自己寫一個UNIX文件復制程序
復制文件這件事情說起來簡單,做起來是另一回事!你可以用含空洞的文件仔細測試一下系統(tǒng)內置cp的行為,你會發(fā)現不是那么簡單。我們在這里就要模仿一個coreutil中的cp命令。
項目描述:可靠地實現一個系統(tǒng)基本命令cp。
要求:
.可靠
.設備無關
.命令行參數解析
.支持文件空洞
說明:
實現一個真實的console應用程序,涉及到對各種IO異常的預見和處理、命令行參數的解析、各種類型文件的處理。
強化對系統(tǒng)I/O的理解、強化對目錄訪問。
■實際項目3:自己寫一個文件操作的命令
項目描述:可靠地實現一個系統(tǒng)基本命令
要求:
.可靠
.設備無關
.命令行參數解析
.支持顏色顯示
說明:
實現一個真實的console應用程序,涉及到stat(2)、命令行參數解析、目錄訪問、ANSI終端規(guī)程。
強化對stat(2)系統(tǒng)調用的理解。
■高級I/O操作
非阻塞I/O
I/O多路復用
Linux提供的高性能epoll
信號驅動I/O
POSIX異步I/O
mmap(2)
■實際項目4:高效數據中繼引擎
項目描述:可靠地實現一個通用描述符對數據中繼引擎,這是一個經常用于高密度服務(如網游、中間件等)的算法。
要求:
.可靠
.靈活適應各種流程
.使用epoll(2)
.支持至少4000對套接字、管道或終端描述符間并發(fā)操作
.封裝成動態(tài)庫模塊
說明:
實現一個對大量文件描述符對進行數據中繼的模塊,利用epoll實現。
強化對select(2)、poll(2)、epoll(2)(LT與ET)、aio_*系統(tǒng)調用的理解。掌握實現類似功能時的一般設計思路,推廣后實現任意協(xié)議的有限狀態(tài)機編碼。
◆UNIX進程與線程設計與實例
■進程環(huán)境
進程的開始和終止
進程的內存布局
Intel X86函數調用規(guī)范
環(huán)境變量
動態(tài)庫技術解析
長跳轉及其應用
進程資源限制
■多進程編程
主要介紹多進程編程的原理,乃至shell運作的原理。
進程創(chuàng)建
裝載外部命令
回收僵尸進程
進程的身份標識 理解UNIX如何實現多用戶權限隔離,并掌握u+s權限實現的細節(jié),以及如何編寫u+s權限的程序。
解釋器文件的原理
為什么UNIX下幾乎所有的腳本語言都以“#”作為注解符號,僅僅是巧合嗎?本部分做解釋。
進程時間
進程關系
進程組、會話組的概念奇跡應用。
■實際項目5:自己動手寫一個命令解釋器(shell)
項目描述:本項目的目標是實現一個交互式shell程序。
要求:
.簡單可靠
.支持環(huán)境變量
.支持基本的內部命令
.支持IO重定向
說明:
設計并實現一個交互式shell,設計進程環(huán)境、進程控制、系統(tǒng)IO操作。
強化對多進程編程的理解以及對標準shell的理解。
■信號
信號的概念
信號是UNIX提供的重要異步構件,所有UNIX程序員都要掌握這個機制,同時也是學習難點。
信號的操控
對信號最基本的操作就是發(fā)送和捕獲,利用信號我們可以大大提高代碼的表達能力,做到以前做不到的事情。
不可靠的信號語義
可靠的信號語義
關于信號的可靠與不可靠,很多人抱有錯誤的想法。信號的可靠與否和網絡傳輸的可靠與否完全不同!
幾個重要信號的典型應用
重點介紹鬧鐘信號和子進程改變信號。
POSIX對信號語義的發(fā)展
POSIX從BSD的信號機制出發(fā),發(fā)展了更精確、更強大的信號操控接口,也是我們學習和日后主要使用的方法。
POSIX實時信號
彌補了傳統(tǒng)信號的缺憾,讓信號能夠更承載更廣泛的應用。
■實際項目6:UNIX任意定時器
有人在BBS上發(fā)過牢騷,說UNIX給每個進程設計一個定時器太少了,復雜的定時不夠用...這是一個不求甚解的觀點,用一個時鐘當然可以實現任意多個定時器。
項目描述:本項目的目標是利用進程的單一定時器實現任意多定時操作
要求:
.簡單可靠
.支持至少1024個定時作業(yè)
.定時器精度在0.1秒內
.封裝成動態(tài)庫模塊
說明:
設計并實現一個任意定時器,具有很高的實踐意義,很多應用程序中都有這個要求。涉及到信號操作、數據結構的使用。
強化信號的使用技巧。
■多線程編程
線程的概念
什么是線程?為什么會出現線程?線程的實現方式?
線程與進程的性能比較分析
是不是一個多進程程序改用多線程實現就會提高性能呢?這是個非常不確定的問題,很多情況下答案是出乎意料的。
POSIX線程接口
面試的時候,有的同學曾被問到“POSIX線程是1:1的還是1:N的?”這是個陰險的陷阱...
線程的同步
很簡單,但是極其重要!多線程算法多數BUG的來源。我們將學會互斥體、條件變量等線程互斥機制的應用。
線程屬性
OpenMP線程接口
POSIX線程接口太繁瑣了,有沒有簡單的線程并發(fā)方案呢?OpenMP就是一個,我們可以利用這套標準簡潔地表達并發(fā)邏輯。
POSIX線程在Linux上的實現
Linux的NPTL一直是它的亮點,我們認識一下Linux對線程的實現有助于我們在Linux平臺開發(fā)程序的時候做出正確的決策。
■實際項目 7:利用多線程技術重寫 實際案例4:高效數據中繼引擎
■實際項目 8:利用多線程技術重寫 實際項目6:UNIX任意定時器
◆ UNIX進程間通信設計與開發(fā)
■文件鎖
最基礎的進程互斥機制,很常用,很好用。但是一定不能跟線程間的互斥體混為一談,二者基本不可互換。
■管道
匿名管道
作為UNIX世界最經典、最簡潔的通訊機制,每個程序員都必須熟練掌握。在很多情形下,這些簡單而基礎的機制其實是*的選擇。
命名管道
■XSI(SYS V)IPC
消息隊列
信號量數組
共享內存段
對于這三個IPC手段,常見的一個錯誤問題就是“這三個哪個更好?”,這三個機制設計出來是為了解決不同問題的,三者各有特色,所以不存在誰更好的問題,我們要學會的是在什么場合應該使用什么機制。
■套接字
可以說,學習這門課的人,絕大多數就是為了學習這部分課程。但是實際上,當這門課學到這個階段的時候,你應該已經覺得套接字根本不是什么難點了,大部分問題已經在前面解決了,只要記住有數的幾個流程就行了。在寫網絡程序的時候,主要精力其實并不放在這里。
流式套接字操作流程
報式套接字操作流程
基于TCP/IP的套接字
IPv4廣播和多播套接字
加密傳輸和壓縮傳輸
通過OpenSSL和zlib庫進行加密和壓縮傳輸實際上很簡單,這里主要是介紹SSL的原理和部署配置。
■實際項目9:數字媒體廣播系統(tǒng)
要求:
.C/S結構
.基于IPv4多播實現
.支持至少256個節(jié)目頻道
.具有基本的用戶驗證功能
.客戶端界面與功能高度分離,以便采用不同語言開發(fā)
.開環(huán)式流控
.認證流程加密傳輸(采用SSL或者其他方案)
.方便的頻道內容管理策略
說明:
設計并實現一個真實和完整的Client/Server軟件系統(tǒng),可基于LAN(或VLAN、MBone)實施的數字音頻廣播系統(tǒng),涉及到流式和報式網絡套接字通訊、MP3解碼、插件化設計方法以及存儲系統(tǒng)設計編程技術。
帶領大家建立起團隊開發(fā)和協(xié)同工作的企業(yè)項目開發(fā)模式的概念和流程,強化學員對編寫項目概要設計文檔和詳細設計文檔的理解,為就業(yè)前的職業(yè)技能和素質訓練做好充分準備。
--------------------- *部分 基礎部分------------------
一、Linux系統(tǒng)基礎 (3天)
教學目標: 能比較熟練的安裝、操作Linux系統(tǒng), 并能配置開發(fā)環(huán)境與常用服務.
1.Linux基礎
. 系統(tǒng)安裝
. 幫助系統(tǒng)
. 文件管理
. 用戶組
. 文本處理與編輯
2. Linux常用命令
. 查找
. 壓縮
. 輸入/出重定向
. 管道
. 啟動腳本
. 軟件安裝
. x-window
3. Linux網絡配置
. TCP/IP簡介
. 網卡配置
. DNS配置
. nfs
. ssh
二、shell程序設計(2天)
教學目標:能用Shell處理簡單的批量化工作
1.Bash Shell初步
. 變量
. 運算符
. 流程控制
. 環(huán)境變量
2、Bash Shell進階
. 文件操作
. 函數
. 輸入輸出
三、C語言程序設計 (10天)
教學目標: 能設計普通的應用程序
案例教學: a、指法練習程序
b、漢諾塔游戲
1.C語言基礎
. C語言的特點
. 數據類型
. 運算符
. 表達式
. 關系運算符
. if 語句
. switch 語句
. 循環(huán)語句
2. 函數
. 函數的聲明和定義
. 形參與實參
. 遞歸 .
3. 數組
. . 數組的定義
. 整型數組
. 字符數組
. 字符串
. 數組名的意義
. 多維數組
4. 指針
. 指針的定義
. 指針運算符
. 指針的加減
. 動態(tài)內存分配
. 堆與棧
5、數組指針
. 指針數組
. 數組指針
6. 預編譯與VT控制碼
. 聲明與頭文件
. 靜態(tài)鏈接庫
. 動態(tài)鏈接庫
. ANSI VT控制碼
7. 組合數據類型
. 結構體
. 結構體指針
. 枚舉
. 共用體 (聯(lián)合)
8. 指針高級應用
. 二級指針
. 三級指針
. 多級指針
. 函數指針
. C語言與面向對象
9.文件操作
. 標準I/O (fopen)
10、輔助開發(fā)工具
. Makefile的編寫
. GDB的使用
. CVS與配置管理
四、數據結構 (7天)
教學目標: 熟悉常用的數據結構與算法
教學案例: 1、成績管理系統(tǒng)
2、計算器
3、電子詞典
4、文件壓縮器
1.單向鏈表
. 鏈表的創(chuàng)建
. 鏈表的遍歷
. 結點的添加、刪除
. 基于函數指針的查找
2、Linux內核鏈表
. 雙向鏈表
. Linux內核鏈表的創(chuàng)建
. List結構的作用
. 有頭與無頭鏈表
3、排序及查找
. 冒泡排序
. 快速排序
. 選擇排序
. 查入排序
4、Hash表
. Hash算法
. Hash表的創(chuàng)建
. 遍歷
5、隊列和堆棧
. 數組存儲
. 鏈式存儲
6、樹與二叉樹
. 數組存儲
. 鏈式存儲
. 權值的概念
. Huffman樹
. Huffman編碼
7、廣義表
. 組合鏈表的應用
. 廣義表
■ 實驗環(huán)境:
處理器:Intel X86處理器
內存:SDRAM 1G 以上
存儲器:SATA 操作系統(tǒng):Red Hat企業(yè)版5
■ 適用對象:
熟練使用UNIX或者Linux平臺開發(fā)工具
熟練使用C語言及數據結構