自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

JSP軟件工程師不可不知的10個(gè)概念

開發(fā) 后端
出色的JSP軟件工程師善用設(shè)計(jì)模式,勤于代碼重構(gòu),編寫單元測試,并對簡單有宗教般的追求。除了這些,優(yōu)秀的JSP軟件工程師還要通曉10個(gè)概念,這10個(gè)概念超越了編程語言與設(shè)計(jì)模式,JSP軟件工程師應(yīng)當(dāng)從更廣的范圍內(nèi)明白這些道理。

10.關(guān)系數(shù)據(jù)庫(Relational Databases)

關(guān)系數(shù)據(jù)庫因?yàn)樵诖笠?guī)模Web服務(wù)上缺乏可擴(kuò)充性而頗受微詞,然而,關(guān)系數(shù)據(jù)庫仍然是近20年來計(jì)算機(jī)技術(shù)中最偉大的成就。關(guān)系數(shù)據(jù)庫對處理訂單,公司數(shù)據(jù)方面有著出色的表現(xiàn)。JSP軟件工程師不能不了解關(guān)系數(shù)據(jù)庫。

關(guān)系數(shù)據(jù)庫的核心是以記錄表示數(shù)據(jù),記錄存放在數(shù)據(jù)庫表,數(shù)據(jù)庫使用查詢語言(SQL)對數(shù)據(jù)進(jìn)行搜索與查詢,同時(shí),數(shù)據(jù)庫對各個(gè)數(shù)據(jù)表進(jìn)行關(guān)聯(lián)。

數(shù)據(jù)庫的標(biāo)準(zhǔn)化技術(shù)(normalization)講的是使用正確的方式對數(shù)據(jù)進(jìn)行分存以降低冗余,并加快存取速度。

9.安全(Security)

隨著黑客的崛起與數(shù)據(jù)敏感性的上升,安全變得非常重要。安全是個(gè)廣義的概念,涉及驗(yàn)證,授權(quán)與信息傳輸。

驗(yàn)證是對用戶的身份進(jìn)行檢查,如要求用戶輸入密碼。驗(yàn)證通常需要結(jié)合SSL(secure socket layer)進(jìn)行;授權(quán)在公司業(yè)務(wù)系統(tǒng)中非常重要,尤其是一些工作流系統(tǒng)。最近開發(fā)的OAuth協(xié)議可以幫助Web服務(wù)將相應(yīng)信息向相應(yīng)用戶開放。Flickr便使用這種方式管理私人照片和數(shù)據(jù)的訪問權(quán)限。

另外一個(gè)安全領(lǐng)域是網(wǎng)絡(luò)設(shè)防,這關(guān)系到操作系統(tǒng),配置與監(jiān)控。不僅網(wǎng)絡(luò)危險(xiǎn)重重,任何軟件都是。Firefox被稱為最安全的瀏覽器,仍然需要頻頻發(fā)布安全補(bǔ)丁。要為你的系統(tǒng)編寫安全代碼就需要明白各種潛在的問題。

8.云計(jì)算(Cloud Computing)

RWW最近的關(guān)于云計(jì)算的文章Reaching For The Sky Through Compute Clouds講到了云計(jì)算如何改變大規(guī)模Web應(yīng)用的發(fā)布。大規(guī)模的并行,低成本,與快速投入市場。

并行算法發(fā)明以來,首先迎來的是網(wǎng)格計(jì)算,網(wǎng)格計(jì)算是借助空閑的桌面計(jì)算機(jī)資源進(jìn)行并行計(jì)算。最著名的例子是Berkley大學(xué)的SETI@home計(jì)劃,該計(jì)劃使用空閑的CPU資源分析太空數(shù)據(jù)。金融機(jī)構(gòu)也大規(guī)模實(shí)施網(wǎng)格計(jì)算進(jìn)行風(fēng)險(xiǎn)分析??臻e的資源,加上J2EE平臺的崛起,迎來了云計(jì)算的概念:應(yīng)用服務(wù)虛擬化。就是應(yīng)用按需運(yùn)行,并可以隨著時(shí)間和用戶規(guī)模而實(shí)時(shí)改變。

云計(jì)算最生動(dòng)的例子是Amazon的Web服務(wù),一組可以通過 API 進(jìn)行調(diào)用的應(yīng)用,如云服務(wù)(EC2),一個(gè)用來存儲(chǔ)大型媒體文件的數(shù)據(jù)庫(S3),索引服務(wù)(SimpleDB),序列服務(wù)(SQS)。

7.并發(fā)(Concurrency)

并發(fā)是JSP軟件工程師最容易犯錯(cuò)的地方,這可以理解,因?yàn)槲覀円恢弊駨木€形思維,然而并發(fā)在現(xiàn)代系統(tǒng)中非常重要。

并發(fā)是程序中的并行處理,多數(shù)現(xiàn)代編程語言包含內(nèi)置的并發(fā)能力,在Java,指的是線程。關(guān)于并發(fā),最經(jīng)典的例子是“生產(chǎn)/消費(fèi)”模式,生產(chǎn)方生產(chǎn)數(shù)據(jù)和任務(wù),并放入工作線程消費(fèi)或執(zhí)行。并發(fā)的復(fù)雜性在于,線程需要經(jīng)常訪問共同數(shù)據(jù),每個(gè)線程都有自己的執(zhí)行順序,但需要訪問共同數(shù)據(jù)。Doug Lea曾寫過一個(gè)最復(fù)雜的并發(fā)類,現(xiàn)在是core Java的一部分。

6.緩存(Caching)

緩存對現(xiàn)代Web程序不可或缺,緩存是從數(shù)據(jù)庫取回,并存放在內(nèi)存中的數(shù)據(jù)。因?yàn)閿?shù)據(jù)庫直接存取的代價(jià)非常高,將數(shù)據(jù)從數(shù)據(jù)庫取回并放在緩存中訪問就變得十分必要。比如,你有一個(gè)網(wǎng)站,要顯示上周的暢銷書,你可以從數(shù)據(jù)庫將暢銷書榜一次性取回放在緩存中,而不必在每次訪問時(shí)都去數(shù)據(jù)庫讀數(shù)據(jù)。

緩存需要代價(jià),只有最常用的內(nèi)容才可以放入緩存。很多現(xiàn)代程序,包括Facebook,依靠一種叫做Memcached的分布式緩存系統(tǒng),該系統(tǒng)是Brad Firzpatrick在工作于LiveJournal項(xiàng)目時(shí)開發(fā)的,Memcached使用網(wǎng)絡(luò)中空閑的內(nèi)存資源建立緩存機(jī)制,Memcached類庫在很多流行編程語言,包括Java和PHP中都有。

5.散列法(Hashing)

Hashing的目的是加速訪問速度。如果數(shù)據(jù)是序列存儲(chǔ)的,從中查詢一個(gè)項(xiàng)的時(shí)間取決于數(shù)據(jù)列的大小。而散列法對每一個(gè)項(xiàng)計(jì)算一個(gè)數(shù)字作為索引,在一個(gè)好的Hashing算法下,數(shù)據(jù)查找的速度是一樣的。

除了存儲(chǔ)數(shù)據(jù),散列法對分布式系統(tǒng)也很重要。統(tǒng)一散列法(uniform hash)用來在云數(shù)據(jù)庫環(huán)境下,在不同計(jì)算機(jī)之間分存數(shù)據(jù)。Google的索引服務(wù)就是這種方法的體現(xiàn),每一個(gè)URL都被散列分布到特定計(jì)算機(jī)。

散列函數(shù)非常復(fù)雜,但現(xiàn)代類庫中都有現(xiàn)成的類,重要的是,如何對散列法進(jìn)行細(xì)調(diào)以獲得最好的性能。

4.算法的復(fù)雜性(Algorithmic Complexity)

關(guān)于算法的復(fù)雜性,JSP軟件工程師需要理解這樣幾件事。第一,大O標(biāo)記法(big O notation);第二,你永遠(yuǎn)都不應(yīng)該使用嵌套式循環(huán)(循環(huán)里面套循環(huán)),你應(yīng)該使用Hash表,數(shù)組或單一循環(huán);第三,如今優(yōu)秀類庫比比皆是,我們不必過分糾纏于這些庫的效能的差別,我們以后還有機(jī)會(huì)進(jìn)行細(xì)調(diào);最后,不要忽視算法的優(yōu)雅及性能,編寫緊湊的,可讀的代碼可以讓你的算法更簡單,更干凈。

3.分層(Layering)

用分層來討論軟件架構(gòu)是最容易的。John Lakos曾出版過一本關(guān)于大型C++系統(tǒng)的書。Lakos認(rèn)為軟件包含了層,書中介紹了層的概念,方法是,對每個(gè)軟件組件,數(shù)一下它所依賴的組件數(shù)目就可以知道它的復(fù)雜程度。

Lakos認(rèn)為,一個(gè)好的軟件擁有金字塔結(jié)構(gòu),就是說,軟件組件擁有層層積累的復(fù)雜度,但每個(gè)組件本身必須簡單,一個(gè)優(yōu)秀的軟件包含很多小的,可重復(fù)使用的模塊,每個(gè)模塊有自己的職責(zé)。一個(gè)好的系統(tǒng)中,組件之間的依賴性不可交叉,整個(gè)系統(tǒng)是各種各樣的組件堆積起來,形成一個(gè)金字塔。

Lakos在軟件工程的很多方面都是先驅(qū),最著名的是 Refactoring(代碼重構(gòu))。代碼重構(gòu)指的是,在編程過程中需要不斷地對代碼進(jìn)行改造以保證其結(jié)構(gòu)的健壯與靈活。

2.慣例與模板(Conventions and Templates)

命名慣例和基礎(chǔ)模板在編程模式中常被忽視,然而它可能是最強(qiáng)大的方法。命名慣例使軟件自動(dòng)化成為可能,如:Java Beans框架在getter和setter 方法中,使用簡單的命名慣例。del.icio.us網(wǎng)站的URL命名也使用統(tǒng)一的格式,如[url]http://del.icio.us/tag/software[/url]會(huì)將用戶帶到所有標(biāo)簽為 software 的頁。

很多社會(huì)網(wǎng)絡(luò)均使用簡單命名,如:你的名字是 johnsmith,那你的頭像可能命名為johnsmith.jpg,而你的rss聚合文件的命名很可能是johnsmith.xml。 養(yǎng)成良好的命名習(xí)慣是JSP軟件工程師的必修課。

命名慣例還用于單元測試,如:JUnit單元測試工具會(huì)辨認(rèn)所有以test開頭的類。

我們這里說的模板(templates)指的并不是C++或Java語言中的constructs,我們說的是一些包含變量的模板文件,用戶可以替換變量并輸出最終結(jié)果。

Cold Fusion是最先使用模板的程序之一,后來,Java使用JSP實(shí)現(xiàn)模板功能。Apache近來為Java開發(fā)了非常好用的通用模板,Velocity。PHP 本身就是基于模板的,因?yàn)樗С謊val函數(shù)。

1.界面(Interfaces)

軟件工程中最重要的概念是界面。任何軟件都是一個(gè)真實(shí)系統(tǒng)的模型。如何使用簡單的用戶界面進(jìn)行模型化至關(guān)重要。很多軟件系統(tǒng)走這樣的極端,缺乏抽象的冗長代碼,或者過分設(shè)計(jì)而導(dǎo)致無謂的復(fù)雜。

在眾多軟件工程書籍中,Robert Martin寫的《敏捷編程》值得一讀。

關(guān)于模型化,以下方法對你會(huì)有幫助。首先,去掉那些只有在將來才可能用得著的方法,代碼越精練越好。第二,不要總認(rèn)為以前的東西是對的,要善于改變。第三,要有耐心并享受過程。

【編輯推薦】

  1. 選擇JSP網(wǎng)站空間的三點(diǎn)注意事項(xiàng)
  2. 分析JSP后臺文件管理源代碼
  3. MySQL手冊中查到的JSP中文亂碼解決方法
  4. JSP中文亂碼問題的描述及解決方法
  5. 實(shí)例說明JSP打印報(bào)表的方法
責(zé)任編輯:彭凡 來源: 51CTO博客
相關(guān)推薦

2023-11-13 14:19:57

Golang編程語言

2011-07-08 16:37:20

2018-06-12 11:05:33

2018-07-05 09:12:39

前端開發(fā)編程

2020-06-02 00:00:00

開源云安全安全工具

2011-06-24 14:18:40

Firefox 5

2024-03-21 08:57:39

語言軟件開發(fā)

2010-06-11 14:46:38

可路由協(xié)議

2015-05-25 19:13:13

KPI開發(fā)者

2020-06-23 17:30:44

前端Sublime

2023-09-20 09:00:00

2023-09-22 12:14:33

2021-08-12 16:02:22

Jupyter NotPython命令

2009-07-16 13:28:14

2015-01-15 09:34:28

2020-11-30 13:12:04

Linux文本命令

2019-10-31 16:10:48

Windows 10Windows技巧

2015-06-10 10:56:50

iOS開發(fā)技巧

2023-06-15 11:01:43

Java工具開源

2010-08-10 13:22:41

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號