




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、目錄1.2.系統(tǒng)模塊與分工5GoodsSearch 模塊5概述5類圖7類描述8Remover 類8RemoveStrategy 接口8RemoveStrategyA、RemoveStrategyB、類8Seperator 類9SeperateStrategy 接口10SeperateStrategyA、SeperateStrategyB、類10SynonymsMatcher 類10MatchStrategy 接口11MatchStrategyA、MatchStrategyB、類11ISearcher 接口:11Searcher 類:11SearchStrategy 接口12SearchStra
2、tegyA、SearchStrategyB 類12Worker 類13Cache 類13Result 類13重要協(xié)作13設(shè)計(jì)模式14策略模式14模式162.5.2GoodsFilter 模塊163.1 概述163.2 類圖18類描述18Configrable 接口:18NegativeGoodsFilter 類:193.3.3. Filter 接口:19URLFilter 類:19ContentFilter 類:19NegativeGoodsDb 類:19Result 類:20重要協(xié)作20設(shè)計(jì)模式213.5.1 策略模式21GoodsSort 模塊223.4.概述22類圖26類描述26Scor
3、ingFilter 接口26ScoringFilters 類264.3.3. WebGraph 類274.3.4 LinkR類28重要協(xié)作28使用的設(shè)計(jì)模式294.5.1 策略模式29patibler 模塊30概述30類圖31類描述31Shower 類31ShowGoodsArrStrategy 抽象類32ShowGoodsArrStrategyA、ShowGoodsArrStrategyB 類32MyBrowserFunction 接口32MyFunctionAdapterA 類32KernalA 類32重要協(xié)作32使用的設(shè)計(jì)模式33適配器模式33策略模式34橋接模式354.14.24.34
4、.44.55.5.15.25.35.45.5BuyGoods 模塊366.1 概述366.2 類圖36類描述36IshopHandler 接口36ShopHandler 類37Address 類37IB接口376.3.5 B類38重要協(xié)作38設(shè)計(jì)模式38策略模式38MVC 模式38Advertising 模塊387.1 概述387.2 類圖397.3 類描述396.7.IAdManager 接口39AdManager 類397.5 設(shè)計(jì)模式407.4.1 MVC 模式40EaseUse 模塊408.1 概述408.2 類圖40類描述41INavigationHandler 接口41Naviga
5、tionHandler 類41Navigation 類41CSS_Style 類41重要協(xié)作42設(shè)計(jì)模式42MVC 模式42Security 模塊429.1 概述429.2 類圖43類描述44重要協(xié)作44設(shè)計(jì)模式45Cluster 模塊詳細(xì)設(shè)計(jì)4610.1 概述4610.2 類圖48類描述48重要協(xié)作49設(shè)計(jì)模式50ZoneMaster 模塊5111.1 概述5111.2 類圖51類描述52類描述52DBService 類圖55重要協(xié)作56設(shè)計(jì)模式57模式57Factory 模式58CrawlerController 模塊5812.1 概述5812.2 類圖59類描述59重要協(xié)作628.9.1
6、0.11.12.12.5 設(shè)計(jì)模式65模式65中介者模式66策略模式67ContentSort 模塊6713.1 概述6713.2 類圖6913.3 類描述6914.4 重要協(xié)作7015.5 設(shè)計(jì)模式71CommentChecker 模塊7214.1 概述7214.2 類圖7414.3 類描述7513.14.14.3.1 Module 1:CommentProsor 類7514.3.2 Module 2:敏感評(píng)論處理76重要協(xié)作79使用的設(shè)計(jì)模式79xx 模式79WebCrawler 模塊8015.1 概述8015.2 類圖8015.3 類描述8115.CrawController 接口81U
7、RLItem 類81URLQueue 類81CrawIteratorStrategy 類81DepthProIterator 類82WidthProIterator 類82FetchURLStrategy 類8215.3.115.3.215.3.315.3.415.3.515.3.615.3.715.3.815.3.9URL 類82FetchFetchDangDangURL 類8215.3.10 FetchDataStrategy 類82Data 類8315.3.11 Fetch重要協(xié)作83設(shè)計(jì)模式83策略模式83迭代器模式8315.415.51. 系統(tǒng)模塊與分工2. GoodsSearch
8、模塊2.1概述承擔(dān)的需求(主要)要求根據(jù)用戶提供的檢索條件實(shí)現(xiàn)快速的匹配(響應(yīng)時(shí)間過(guò) 2s),根據(jù)對(duì)輸入詞匯處理之后的結(jié)果獲得相應(yīng)的檢索結(jié)果。搜索引擎已經(jīng)建立的索引,并通過(guò)一定的匹配算法,該模塊還需要處理輸入的詞匯,因此包含一個(gè)詞匯處理器:負(fù)責(zé)根據(jù)在系統(tǒng)中的詞匯擴(kuò)展表對(duì)該進(jìn)行引申擴(kuò)展,識(shí)別查詢目的,得到一個(gè)相近詞匯的列表從輸入中去掉一些使用很頻繁但卻沒(méi)有實(shí)際意義的次,比如英文文本中的 a, an, the 等,中文文本中的了,的,吧等。分析輸入的語(yǔ)匯單元,以便從詞 語(yǔ)中去掉一些不必要的字符以找到它們的詞干,然后根據(jù)列表中的詞匯在系統(tǒng)已 有的網(wǎng)頁(yè)列表中進(jìn)行搜索,對(duì)獲得的結(jié)果進(jìn)行合并并且以分頁(yè)的方
9、式返回給用戶。用例圖如下:模塊名設(shè)計(jì)者GoodsSearch GoodsFilter GoodsSortpatibler BuyGoods Advertising EaseUse Security Cluster ZoneMasterCrawlerController ContentSort CommentChecker WebCrawlerDB 表結(jié)構(gòu)設(shè)計(jì)府潔藍(lán)用例圖解釋:詞匯處理模塊把用戶輸入的搜索條目進(jìn)行分析,分成有搜索意義的關(guān)鍵字,并進(jìn)行同義詞處理。索引器從分析模塊得到索引表,返回全文索引目錄。緩存器提供高頻搜索詞匯的檢索結(jié)果,若檢索命中則直接返回檢索結(jié)果;由于用戶高頻詞匯會(huì)產(chǎn)生變更,
10、緩存器還需要定期從索引器提供的倒排索引文件中更新高頻詞匯檢索結(jié)果。檢索器檢測(cè)索引通道的連通性,若能連通再開(kāi)始下面的工作,若不能,則返回異常。檢索器接收詞匯處理器給出的檢索對(duì)象,然后進(jìn)行初始化,準(zhǔn)備開(kāi)始檢索檢索器檢索是,先檢查高頻是否命中,若命中則從緩存中進(jìn)行檢索,若沒(méi)有命中,則向索引器發(fā)出請(qǐng)求,得到索引表后檢索。檢索完畢后,檢索器獲得檢索結(jié)果細(xì)節(jié),將其發(fā)送到排序模塊??赡軙?huì)修改的實(shí)現(xiàn)(次要高頻無(wú)關(guān)詞匯剔除算法 同義詞匹配算法檢索匹配算法角色)1) 檢索功能:從詞匯分析器得到的查詢請(qǐng)求,把其轉(zhuǎn)化成規(guī)范化檢索式,再根據(jù)檢索策略先在緩存中的高頻詞匯檢索結(jié)果中檢索,如果未命中,就到索引數(shù)據(jù)庫(kù)中進(jìn)行匹配
11、,最后將搜索結(jié)果返回給排序模塊。2) 輸入分析功能:對(duì)用戶關(guān)鍵字進(jìn)行處理和分析,可以處理的形式,使得對(duì)索引的檢索成為可能。關(guān)鍵字,并將其轉(zhuǎn)換成建立緩存:為了能在極短的時(shí)間內(nèi)(響應(yīng)時(shí)間2s)響應(yīng)用戶的查詢請(qǐng)求,搜索引擎需要為那些查詢最頻繁的頁(yè)面建立緩存機(jī)制。原因如下:經(jīng)過(guò)統(tǒng)計(jì),關(guān)鍵字查詢的集中現(xiàn)象非常明顯,查詢次數(shù)最多的前 20%的關(guān)鍵字大約占了總查詢次數(shù)的 80%(即著名的 80/20 法則)。因此,只要對(duì)前 20%左右的關(guān)鍵字建立緩存就可以滿足 80%的查詢需求。由于互聯(lián)網(wǎng)中的信息時(shí)刻都在增長(zhǎng),如果搜索引擎每次都返回給用戶同樣的信息,不但用戶得不到高質(zhì)量的信息,其它也不能向用戶展示的高質(zhì)量信
12、息,從而造成信息滯后。因此,搜索引擎還要對(duì)緩存中的內(nèi)容進(jìn)行定期更新。4)角色流程圖:對(duì)外提供接口void request();2.2 類圖2.3 類描述2.3.1 Remover 類該類的職責(zé)是去除高頻無(wú)關(guān)詞匯。如上述類圖所示:有三個(gè)屬性: removed_words(去除高頻無(wú)關(guān)詞匯之后的語(yǔ)句)和 user_words(用戶初始輸入), remove_strategy(剔除算法),并且都是 private 類型。類方法:void setUserWords(String ):設(shè)置成員變量 user_words,保存過(guò)剔除無(wú)關(guān)詞匯操作的字符串。void setRemoveStrategy(Rem
13、oveStrategy ):組合模型表明在 Remove 類的構(gòu)造函數(shù)中其實(shí)就已經(jīng)指定了剔除算法 (RemoveStrategy), 但為了更好地動(dòng)態(tài)指定不同的剔除算法,可以使用setRemoveStrategy 方法來(lái)重設(shè) Remove 對(duì)象的 remove_strategy 成員變量。前置條件:Remove 對(duì)象已經(jīng)被初始化;后置條件:Removed 對(duì)象的remove_strategy 成員變量被重新設(shè)置為新的算法對(duì)象。String performRemove(String):Remove 類的算法。該方法對(duì)傳入的字符串按照算法 remove_strategy 進(jìn)行高頻無(wú)關(guān)詞匯的剔除操作
14、(即調(diào)用 remove_strategy 的 remove()方法),并將剔除無(wú)關(guān)詞匯后的結(jié)果保存到 removed_words 中。前置條件:成員變量 remove_strategy 已經(jīng)被初始化;后置條件: 剔除高頻詞匯后的結(jié)果被保存到了 removed_words 中,并返回。String getRemovedWords() :該方法獲得去除高頻無(wú)關(guān)詞匯之后的字符串,返回成員對(duì)象 removed_words。前置條件:performRemove()方法已被執(zhí)行;后置條件:返回成員變量 removed_words。2.3.2 RemoveStrategy 接口為了使得不同的剔除算法能夠被更
15、好地復(fù)用,以及避免未來(lái)剔除算法可能的變更對(duì)現(xiàn)有的行為類造成影響,使用策略模式將剔除算法抽象成接口,在該接口中方法 remove() ,這由具體的 RemoveStrategy 類( 在此圖中為 RemoveStrategyA、RemoveStrategyB)去實(shí)現(xiàn)該方法。2.3.3 RemoveStrategyA、RemoveStrategyB、類該些類是接口 RemoveStrategy 接口的具體實(shí)現(xiàn)類,它們實(shí)現(xiàn)接口中定義的方法,并且數(shù)量可能在將來(lái)增加。類方法:String remove(String):該方法實(shí)現(xiàn)接口中定義的 remove()方法,參數(shù)為需要被進(jìn)行高頻無(wú)關(guān)詞匯剔除操作的字
16、符串,返回值為剔除過(guò)后的字符串。2.3.4 Seperator 類該類的職責(zé)是將去除了高頻無(wú)關(guān)詞匯后的字符串分解成多個(gè)。如上述類圖所示: 有三個(gè)屬性: removed_words( 去除高頻無(wú)關(guān)詞匯之后的語(yǔ)句) 和 seperated_words(被分解成多個(gè)關(guān)鍵字的 String 列表),seperate_strategy(分解算法),并且都是 private 類型。類方法:void setRemovedWords(String ):設(shè)置成員變量 removed_words,保存過(guò)分解操作的字符串。void setSeperateStrategy(SeperateStrategy ):組合模
17、型表明在 Seperator 類的構(gòu)造函數(shù)中其實(shí)就已經(jīng)指定了分解算法(SeperateStrategy), 但為了更好地動(dòng)態(tài)指定不同的分解算法,可以使用setSeperateStrategy 方法來(lái)重設(shè) Seperate 對(duì)象的 seperate_strategy 成員變量。前置條件:Seperator 對(duì)象已經(jīng)被初始化;后置條件:Seperator 對(duì)象的 seperate_strategy 成員變量被重新設(shè)置為新的算法對(duì)象。String performSeperate(String):Seperate 類的算法。該方法對(duì)傳入的已經(jīng)經(jīng)過(guò)高頻無(wú)關(guān)詞匯剔除操作的字符串按照算法 seperate_
18、strategy 進(jìn)行提取操作(即調(diào)用 separate_strategy 的separate()方法),并將提取后的結(jié)果保存到 seperated_words 中后返回該數(shù)組。前置條件:成員變量 seperated_strategy 已經(jīng)被設(shè)置,傳入的 String 類型的參數(shù)已經(jīng)經(jīng)過(guò)了高頻無(wú)關(guān)詞匯剔除操作;后置條件: 分解后的變量中。被保存到了seperated_words 字符串?dāng)?shù)組類型的成員String getSeperatedWords() :該方法獲得分解過(guò)后保存若干個(gè)seperated_words。前置條件:performSeperate()方法已被執(zhí)行;后置條件:返回成員變量
19、seperated_words。的字符串?dāng)?shù)組, 返回成員對(duì)象2.3.5 SeperateStrategy 接口為了使得不同的分解算法(提取算法)能夠被更好地復(fù)用,以及避免未來(lái)分解算法可能的變更對(duì)現(xiàn)有的行為類造成影響使用策略模式將分解算法抽象成接口,在該接口中方法 seperate(),這由具體的 SeperateStrategy 類(在此圖中為 SeperateStrategyA、SeperateStrategyB)去實(shí)現(xiàn)該方法。2.3.6 SeperateStrategyA、SeperateStrategyB、類該些類是接口 SeperateStrategy 接口的具體實(shí)現(xiàn)類,它們實(shí)現(xiàn)接口中
20、定義的方法,并且數(shù)量可能在將來(lái)增加。類方法:String seperate(String):該方法實(shí)現(xiàn)接口中定義的 seperate()方法,參數(shù)為需要被提取,并且已經(jīng)經(jīng)過(guò)高頻無(wú)關(guān)詞匯剔除的字符串,返回值為提取的列表。2.3.7 SynonymsMatcher 類該類的職責(zé)是匹配同義詞,獲得同義詞列表。如上述類圖所示:有三個(gè)屬性:original_words(被提取出來(lái)的)和 matched_words(對(duì)匹配后的近義詞列表),match_strategy(匹配算法),并且都是 private 類型。類方法:void setOriginalWords(String ):設(shè)置成員變量 origi
21、nal_words,保存要被進(jìn)行同義詞匹配的參數(shù)值。void setMatchStrategy(MatchStrategy ):組合模型表明在 MatchStrategy 類的構(gòu)造函數(shù)中其實(shí)就已經(jīng)指定了同義詞匹配算法(MatchStrategy), 但為了更好地動(dòng)態(tài)指定不同的匹配算法,可以使用setMatchStrategy 方法來(lái)重設(shè)SynonymsMatcher 對(duì)象的match_strategy 成員變量。前置條件:SynonymsMatcher 對(duì)象已經(jīng)被初始化;后置條件:SynonymsMatcher 對(duì)象的match_strategy 成員變量被重新設(shè)置為新的算法對(duì)象。String
22、 performMatch(String):SynonymsMatcher 類的算法。該方法對(duì)傳入的字符串按照算法match_strategy進(jìn)行同義詞匹配操作(即調(diào)用 match_strategy 的 match()方法),并將同義詞轉(zhuǎn)化后獲取的結(jié)果保存到 matched_words 中。前置條件:成員變量 match_strategy 已經(jīng)被初始化;后置條件: 進(jìn)行同義詞轉(zhuǎn)換后獲取的結(jié)果被保存到了matched_words 中并返回該數(shù)組。String getMatchedWords() :該方法獲得對(duì)matched_words。進(jìn)行同義詞轉(zhuǎn)換后的字符串?dāng)?shù)組, 返回成員對(duì)象前置條件:per
23、formMatch()方法已被執(zhí)行;后置條件:返回成員變量 matched_words。2.3.8 MatchStrategy 接口為了使得不同的同義詞匹配算法能夠被更好地復(fù)用,以及避免未來(lái)匹配算法可能的變更對(duì)現(xiàn)有的行為類造成影響,使用策略模式將匹配算法抽象成接口,在該接口中方法 match(), 這由具體的 MatchStrategy 類(在此圖中為MatchStrategyA、MatchStrategyB)去實(shí)現(xiàn)該方法。2.3.9 MatchStrategyA、MatchStrategyB、類該些類是接口 MatchStrategy 接口的具體實(shí)現(xiàn)類,它們實(shí)現(xiàn)接口中定義的方法,并且數(shù)量可能
24、在將來(lái)增加。類方法:String match(String):該方法實(shí)現(xiàn)接口中定義的 match()方法,參數(shù)為需要進(jìn)行同義詞匹配,已經(jīng)被提取出來(lái)的列表。字符串,返回值為對(duì)該進(jìn)行同義詞匹配后的同義詞字符串2.3.10 ISearcher 接口:ISearcher 是檢索器的實(shí)現(xiàn)接口,主要定義了檢索的方法和理對(duì)集群服務(wù)器的請(qǐng)求。的方法。用于處2.3.11 Searcher 類:Searcher 是檢索器的具體實(shí)現(xiàn)類,主要負(fù)責(zé)初始化( init() ), 作為 Remover/Seperator/SynonymsMatcher 類的控制中心,對(duì)用戶輸入進(jìn)行關(guān)鍵字提取和同義詞轉(zhuǎn)換后,檢索緩存,檢索索
25、引表,等方法。目的是為了在搜索時(shí)首先從緩存中找結(jié)果,如果不能命中則去索引表中找。類方法:void init():檢索初始化。前置條件:緩存?zhèn)魉透禄驒z索請(qǐng)求;后置條件:檢索器初始化配置完畢,或者更新緩存完畢。():定期檢測(cè)與索引庫(kù)是否連通。前置條件:系統(tǒng)時(shí)鐘定期倒計(jì)時(shí)結(jié)束;后置條件:調(diào)用之后服務(wù)器集群返回特定信息,表示連接沒(méi)有問(wèn)題。ArrayList performSearch(String, String):該方法為 Searcher 類的方法,它利用成員變量 search_strategy 的 search 方法,對(duì)經(jīng)過(guò)處理后的檢索條件進(jìn)行檢索,先檢索緩存,后檢索索引表。前置條件:在緩存庫(kù)
26、中未命中,且配置已經(jīng)初始化;后置條件:按照請(qǐng)求對(duì)索引表進(jìn)行查詢。ArrayList readFormCache(String ):從 Cache 緩存中檢索結(jié)果前置條件:用戶輸入已經(jīng)被處理成檢索條件;后置條件:從緩存中檢索到的結(jié)果保存在了 ArrayList中。void setSearchStrategy(SearchStrategy ):組合模型表明在 SearchStrategy 類的構(gòu)造函數(shù)中其實(shí)就已經(jīng)指定了檢索算法(SearchStrategy), 但為了更好地動(dòng)態(tài)指定不同的檢索算法,可以使用setSearchStrategy 方法來(lái)重設(shè) Searcher 對(duì)象的 search_str
27、ategy 成員變量。前置條件:Searcher 對(duì)象已經(jīng)被初始化;后置條件:Searcher 對(duì)象的 search_strategy 成員變量被重新設(shè)置為新的算法對(duì)象。2.3.12 SearchStrategy 接口為了使得不同的搜索算法能夠被更好地復(fù)用,以及避免未來(lái)搜索算法可能的變更對(duì)現(xiàn)有的行為類造成影響,使用策略模式將搜索算法抽象成接口,在該接口中方法 search() , 這由具體的 SearchStrategy 類( 在此圖中為SearchStrategyA、SearchStrategyB)去實(shí)現(xiàn)該方法。2.3.13 SearchStrategyA、SearchStrategyB 類
28、該些類是接口 SearchStrategy 接口的具體實(shí)現(xiàn)類,它們實(shí)現(xiàn)接口中定義的方法,并且數(shù)量可能在將來(lái)增加。類方法:ArrayList search(String itemType,String description):該方法實(shí)現(xiàn)接口中定義的 search()方法,參數(shù) str1 為 itemType,檢索商品的類型, str2 為商品描述相關(guān)的關(guān)鍵字,該關(guān)鍵字從用戶的商品描述中提取,已經(jīng)經(jīng)過(guò)高頻無(wú)關(guān)詞匯剔除、息。分解、同義詞的字符串轉(zhuǎn)換,返回值為檢索到的商品信Worker 類2.3.14用來(lái)定時(shí)測(cè)試索引表與檢索器之間的連通性。類方法:void run():測(cè)試索引表與檢索器之間的連通性
29、。2.3.15 Cache 類緩存類,搜索器可以到緩存中去搜索跟關(guān)鍵字匹配的結(jié)果。Cache 類庫(kù)中保存的特定商品的表,它存放著查詢率較高的商品數(shù)據(jù)。類方法:String getDirectory():前置條件:緩存庫(kù)未命名高頻詞匯,需要從索引表中檢出;后置條件: 對(duì)索引表進(jìn)行定位,并準(zhǔn)備進(jìn)行初始化操作。為數(shù)據(jù)ArrayList performSearch(String,String):前置條件:緩存庫(kù)中存在高頻詞匯,且配置已經(jīng)初始化;后置條件:開(kāi)始進(jìn)行緩存庫(kù)中的查詢void refresh():更新緩存表。2.3.16 Result 類Result 為搜索結(jié)果類,代表單條搜索結(jié)果,包括匹配領(lǐng)
30、域(String fields),相關(guān)商品對(duì)象列表(ArrayList goods_arr),所在以判斷是否為高頻結(jié)果。(url),命中數(shù)(hitNum),用2.4 重要協(xié)作順序圖:狀態(tài)圖:2.5 設(shè)計(jì)模式2.5.1 策略模式策略模式定義了一系列的算法,并將每一個(gè)算法封裝起來(lái),而且使它們之間可以相互替換。策略模式讓算法獨(dú)立于使用它的客戶而獨(dú)立變化。它提供了一種替代繼承的方法,而且既保持了繼承的優(yōu)點(diǎn)(代碼重用),還比繼承更靈活(算法獨(dú)立,可以任意擴(kuò)展)。同時(shí)避免程序中使用多重條件轉(zhuǎn)移語(yǔ)句,使系統(tǒng)更靈活,并易于擴(kuò)展。策略模式還遵守大部分 GRASP 原則和常用設(shè)計(jì)原則,聚、低偶合。如下圖所示:在檢
31、索模塊中,由于質(zhì)量屬性中明確提出無(wú)關(guān)詞匯剔除算法、同義詞匹配算法、檢索算法可能會(huì)在以后變更,因此必項(xiàng)將各個(gè)算法模塊封裝起來(lái),實(shí)現(xiàn)同一個(gè)接口 RemoveStrategy,MatchStrategy,SearchStrategy 以便以后可以方便地修改。如果要新增算法,增加一個(gè)算法類,實(shí)現(xiàn)對(duì)應(yīng)接口,并在的時(shí)候?qū)⒅赶蛐碌乃惴惢蛘哒{(diào)用 setStrategy()方法動(dòng)態(tài)綁定即可;如果要移除算法,移除對(duì)應(yīng)的算法類并更新的即可;如果要修改算法,可在不修改接口的前提下修改算法類的類圖體現(xiàn):即可,保證了聚和低耦合。模式2.5.2使用象可以是示:模式可以創(chuàng)造代表對(duì)象,讓代表對(duì)象控制對(duì)某對(duì)象的,被的對(duì)的對(duì)象,
32、創(chuàng)建開(kāi)銷大的對(duì)象,或者需要安全控制的對(duì)象。如下圖所模式與本檢索模塊中本地檢索請(qǐng)求與集群服務(wù)器的關(guān)系是一致的,經(jīng)過(guò)細(xì)致的分析,采用了的設(shè)計(jì)模式。由去控制,使得檢索就像在本地進(jìn)行一樣??梢噪[藏對(duì)象不在本地的事實(shí),處理信,并對(duì)客戶隱藏該通信過(guò)程。類圖體現(xiàn):進(jìn)程實(shí)際對(duì)象需要的通3. GoodsFilter 模塊3.1 概述承擔(dān)的需求(主要)商品信息過(guò)濾模塊是對(duì)搜索模塊初步檢索出來(lái)的結(jié)果集進(jìn)行商品過(guò)濾。又由于系統(tǒng)要符合,且商品信息隨時(shí)可以調(diào)整,因此要求過(guò)濾規(guī)則具有方便快捷的可修改性、可擴(kuò)展性和靈活性。質(zhì)量屬性要求:商品搜索要求具有很高的可修改性、可擴(kuò)展性,而變更的部分主要是待過(guò)濾商品信息的變化。因此該模
33、塊的設(shè)計(jì)就要著重考慮詞庫(kù)的可擴(kuò)展性和可修改性,可以靈活變更又不影響其他模塊的調(diào)用。同時(shí),由于搜索返回結(jié)果往往比較龐大,待過(guò)濾商品庫(kù)也較龐大,因此商品過(guò)濾效率也直接影響到用戶體驗(yàn),需要盡量采用高效的過(guò)濾算法。用戶總共進(jìn)行商品查詢的時(shí)間不能多于 2s。商品過(guò)濾用例圖:用例描述:增刪改表進(jìn)行商品信息列表:能在搜索引擎靈活擴(kuò)充、修改商品信息過(guò)濾:對(duì)初步搜索結(jié)果集的 url進(jìn)行簡(jiǎn)單的比對(duì)過(guò)濾商品信息表,對(duì)初步搜索結(jié)果進(jìn)3)對(duì)結(jié)果集進(jìn)行商品信息過(guò)濾:根據(jù)行全文索引搜索,對(duì)于其中多次出現(xiàn)商品的搜索結(jié)果進(jìn)行過(guò)濾剔除??赡軙?huì)修改的實(shí)現(xiàn)(次要商品信息庫(kù)過(guò)濾算法角色)1.增刪改能在系統(tǒng)商品信息庫(kù)靈活擴(kuò)充、修改商品信
34、息庫(kù)。2.對(duì)結(jié)果集進(jìn)行過(guò)濾篩選主要進(jìn)行過(guò)濾和全文信息檢測(cè)過(guò)濾。對(duì)外提供接口與界面模塊的接口public void updateNegativeGoodsDb (Text NegativeGoods) throws IOException;與進(jìn)程通信相關(guān)的接口public CrawDatum filtrateNegativeGoods (Text url, CrawlDatum datums) throws NegativeGoodsFilterException;3.2類圖3.3類描述過(guò)濾模塊主要基于配置式編程的(適應(yīng)可修改性與可擴(kuò)展性),因此主要的商品過(guò)濾類 NegativeGoodsFil
35、ter 實(shí)現(xiàn)了 Configurable 接口,通過(guò)配置文件來(lái)進(jìn)行商品的比對(duì)過(guò)濾。同時(shí) Filter 的繼承樹(shù)負(fù)責(zé)具體過(guò)濾算法的差異性封裝,而 NegativeGoodsDb 負(fù)責(zé)商品詞庫(kù)的實(shí)時(shí)更新和功能。3.3.1 Configrable 接口:類方法public void config(String configFile) throws IOException:配置文件進(jìn)行初始化前置條件:后置條件:商品信息文件配置完成商品信息庫(kù)正確初始化3.3.2 NegativeGoodsFilter 類:外部模塊調(diào)用其進(jìn)行類方法商品信息過(guò)濾,它實(shí)現(xiàn)了Configurable 接口。public voi
36、d config(String configFile) throws IOException:配置文件進(jìn)行初始化public ArrayListthrows FilterException:前置條件:搜索模塊后置條件:返回進(jìn)行filtrateNegativeGoods (ArrayList result, Text url)完成,輸入初步搜索結(jié)果;商品信息過(guò)濾后的數(shù)據(jù),無(wú)異常錯(cuò)誤警告。3.3.3. Filter 接口:為了使得不同的過(guò)濾算法能夠被更好地復(fù)用,以及避免未來(lái)過(guò)濾算法可能的變更對(duì)現(xiàn)有的行為類造成影響,使用策略模式將過(guò)濾算法抽象成接口,在該接口中類方法方法 filtrate()。pub
37、lic void filtrate(String configFile) throws SensitveWordException:過(guò)濾操作3.3.4 URLFilter 類:負(fù)責(zé)過(guò)濾包含特定類方法的搜索結(jié)果public void setUrlConfig(Configuration config):設(shè)置過(guò)濾規(guī)則和條件3.3.5 ContentFilter 類:負(fù)責(zé)根據(jù)類方法商品詞庫(kù)對(duì)搜索結(jié)果進(jìn)行全文索引過(guò)濾public void setWordConfig(Configuration config):設(shè)置過(guò)濾規(guī)則和條件3.3.6 NegativeGoodsDb 類:負(fù)責(zé)類方法商品詞庫(kù)的實(shí)時(shí)擴(kuò)
38、展和更新同步public void init():初始化過(guò)濾商品詞庫(kù)public void updateNegativeGoodsDb(Text words):更新商品詞庫(kù)前置條件:商品信息需要更改與擴(kuò)展后置條件:無(wú)異常錯(cuò)誤警告3.3.7 Result 類:Result 為搜索結(jié)果類,即模塊 1(高易用性搜索)中傳入的結(jié)果數(shù)據(jù)類型,代表單條搜索結(jié)果,包括匹配領(lǐng)域(String fields),相關(guān)商品對(duì)象列表(ArrayListgoods_arr),所在(url),命中數(shù)(hitNum),用以判斷是否為高頻結(jié)果。3.4 重要協(xié)作順序圖狀態(tài)圖3.5 設(shè)計(jì)模式3.5.1 策略模式策略模式定義了一系
39、列的算法,并將每一個(gè)算法封裝起來(lái),而且使它們之間可以相互替換。策略模式讓算法獨(dú)立于使用它的客戶而獨(dú)立變化。它提供了一種替代繼承的方法,而且既保持了繼承的優(yōu)點(diǎn)(代碼重用),還比繼承更靈活(算法獨(dú)立,可以任意擴(kuò)展)。同時(shí)避免程序中使用多重條件轉(zhuǎn)移語(yǔ)句,使系統(tǒng)更靈活,并易于擴(kuò)展。策略模式還遵守大部分 GRASP 原則和常用設(shè)計(jì)原則,如下圖所示:聚、低偶合。在過(guò)濾模塊中,由于質(zhì)量屬性中明確提出商品過(guò)濾算法可能會(huì)在以后變更,因此必項(xiàng)將算法模塊封裝起來(lái),實(shí)現(xiàn)同一個(gè)接口 Filter 以便以后可以方便地修改。如果要新增算法,增加一個(gè)算法類,實(shí)現(xiàn)對(duì)應(yīng)接口,并在的時(shí)候?qū)⒅赶蚣纯?;新的算法類即可;如果要移除算法?/p>
40、移除對(duì)應(yīng)的算法類并更新的如果要修改算法,可在不修改接口的前提下修改算法類的聚和低耦合。類圖體現(xiàn):即可,保證了4. GoodsSort 模塊4.1 概述承擔(dān)的需求(主要)用戶向系統(tǒng)提交商品描述查詢信息后,系統(tǒng)就在結(jié)果頁(yè)面返回與該關(guān)鍵字相關(guān)的頁(yè)面,這些頁(yè)面按照如下三個(gè)規(guī)則進(jìn)行排序后返回給用戶:根據(jù)與用戶描述的相關(guān)度排序,相關(guān)度越大,越靠前;根據(jù)各大商城之間的統(tǒng)計(jì)越前),依據(jù)如下:(數(shù)據(jù)庫(kù)中關(guān)于商品的爬取數(shù)量,數(shù)量越大,在計(jì)算出與相關(guān)度較高的網(wǎng)頁(yè)中,利用類似的 PageR排序算法(基于“從許多優(yōu)質(zhì)的網(wǎng)頁(yè)過(guò)來(lái)的網(wǎng)頁(yè),必定還是優(yōu)質(zhì)網(wǎng)頁(yè)”的回歸關(guān)系,來(lái)判定所有網(wǎng)頁(yè)的重要性)計(jì)算出頁(yè)面的得分,由得分的大小準(zhǔn)
41、確地排列出頁(yè)面結(jié)果集,并且能靈活快速的支持排序算法的可變性。另外,該模塊需要負(fù)責(zé)對(duì)返回?cái)?shù)據(jù)按照競(jìng)價(jià)規(guī)則進(jìn)行質(zhì)量屬性要求:調(diào)整。能準(zhǔn)確地按照重要性和相關(guān)性排列出結(jié)果,過(guò)順序錯(cuò)誤的文檔數(shù)/文檔總數(shù)來(lái)測(cè)得。商品排序用例圖率不超過(guò) 1%,這個(gè)變量可以通用例圖解釋:1) 此模塊與搜索模塊返回的搜索結(jié)果關(guān)系及其密切,對(duì)外抽象為一個(gè)分?jǐn)?shù)過(guò)濾器 SortingFilter,輸入的為詞。2) 計(jì)算用戶查詢語(yǔ)句中的每一個(gè)每一個(gè)結(jié)果頁(yè)面的相關(guān)度。的搜索結(jié)果集,同時(shí)還傳入了用戶的查詢關(guān)鍵在其所在文檔中的重要性,從而計(jì)算出3) 將結(jié)果集先按相關(guān)度排序,取前面部分進(jìn)行類 PageR算法的得分計(jì)算4) 對(duì)于上述單純基于內(nèi)容
42、正確性的結(jié)果集排序,再根據(jù)競(jìng)價(jià)等商業(yè),對(duì)其中一些商業(yè)的進(jìn)行微調(diào),最終把排序返回給調(diào)用者??赡軙?huì)修改的實(shí)現(xiàn)(次要排序算法競(jìng)價(jià)策略角色計(jì)算相關(guān)度)通過(guò)用戶輸入的進(jìn)行語(yǔ)法分析匹配,計(jì)算文檔中出現(xiàn)的次數(shù)、頻率以及有效性,從而通過(guò)特定公式得出該文檔與的相關(guān)度。計(jì)算得分對(duì)滿足相關(guān)度最低要求的文檔,通過(guò)類 PageR體算法步驟:PageR的具體算法:方法進(jìn)行的得分計(jì)算。具將某個(gè)頁(yè)面的 PageR除以存在于這個(gè)頁(yè)面的正向,由此得到的值分別和的頁(yè)面的 PageR。正向所指向的頁(yè)面的 PageR相加,即得到了被概念圖如下詳細(xì)地研究一下,便可以得出提高 PageR的要點(diǎn),大致有 3 個(gè)。反向反向反向數(shù) (單純的意義
43、上的受歡迎度指標(biāo))是否來(lái)自源頁(yè)面的度高的頁(yè)面 (有根據(jù)的受歡迎指標(biāo))數(shù) (被選中的幾率指標(biāo))PageR算法概念圖PageR計(jì)算方法原理:作為最基本的考慮方法,就是用行列陣的形式來(lái)表達(dá)到另一張頁(yè)面 j 的時(shí),將其成分定義為 1,反之則定義為成分 aij 可以用:關(guān)系。從頁(yè)面 i0 。即,行列陣 A 的來(lái)表示。文件數(shù)用 N 來(lái)表示的話,這個(gè)行列陣就成為 NN 的方陣。這個(gè)相當(dāng)于在圖表理論中的鄰接行列。也就是說(shuō),Web 的關(guān)系可以看做是采用了鄰接關(guān)系有向圖表 S。總而言之,只要建立了,就應(yīng)該有鄰接關(guān)系。(*注)由點(diǎn)和點(diǎn)連接的線的圖形被稱為圖表(graph)。這些點(diǎn)被稱為頂點(diǎn)(vertex)或者節(jié)點(diǎn)(
44、node);這些線被稱為邊(edge)或者弧(arc)。圖表分為兩類,“邊”沒(méi)有方向的圖表被稱為無(wú)向圖表(undirected graph),“邊”帶有方向的圖表被稱為有向圖表(directed graph)。把有向圖表想像成單向通行的道路就可以了。 圖表能用各種的方法來(lái)表示,但一般用在數(shù)據(jù)結(jié)構(gòu)上的是鄰接行列(adjacency matrix)和鄰接列表(adjacency list)。需要注意的是,如果是無(wú)向圖表,鄰接行列 A 就成為了對(duì)稱行列,而如果是有向圖表,A 就會(huì)成為不對(duì)稱行列。以下是用位圖表示的 Apache 的 排列時(shí),表示這個(gè)頁(yè)面有很多正向向排列時(shí),表示這個(gè)頁(yè)面有很多反向手冊(cè)(
45、共 128 頁(yè))的鄰接行列。當(dāng)黑點(diǎn)呈橫向(即向外導(dǎo)出的。);反之,當(dāng)黑點(diǎn)呈縱鄰接行列的例子(采用了 Apache 的手冊(cè))PageR的行列陣是把這個(gè)鄰接行列倒置后(行和列互換),為了將各列(column)矢量的總和變成 1 (全概率), 把各個(gè)列矢量除以各自的數(shù)(非零要素?cái)?shù))。這樣作成的行列被稱為推移概率行列,含有狀態(tài)之間的推移概率。倒置的理由是,PageRN 個(gè)概率變量,各個(gè)行矢量表示并非重視到多少地方而是重視被多少地方。PageR的計(jì)算,就是求屬于這個(gè)推移概率行列最大特性值的固有矢量(優(yōu)固有矢量)。 這是因?yàn)?,?dāng)線性變換系 t 漸近時(shí),能夠根據(jù)變換行列的絕aij1 if(從頁(yè)面 i 向頁(yè)面
46、 j 有 的情況)0 if(從頁(yè)面 i 向頁(yè)面 j 沒(méi)有的情況)對(duì)價(jià)值最大的特性值和屬于它的固有矢量將其從根本上記述下來(lái)。換句話說(shuō),用推移概率行列表示的概率過(guò)程,是反復(fù)對(duì)這個(gè)行列進(jìn)行乘法運(yùn)算的一個(gè)過(guò)程,并且能夠計(jì)算出前方狀態(tài)的概率。再者,雖然聽(tīng)起來(lái)很難,但是求特性值和固有矢量的值是能夠嚴(yán)密分析的一種基礎(chǔ)的數(shù)學(xué)。能夠地給矢量的初始值賦值,但是因?yàn)椴粩嗟貙⑿辛邢喑?,得到的矢量卻會(huì)集中在一些特定數(shù)值的組合中。把那些穩(wěn)定的數(shù)值的組合稱為固有矢量,把固有矢量中特征性的標(biāo)量(scalar)稱為特性值,把這樣的計(jì)算方法總稱為分解特性值,把解特性值競(jìng)價(jià)稱為特性值問(wèn)題。對(duì)上一步計(jì)算了相關(guān)性之后的數(shù)值再考慮根據(jù)商
47、業(yè)規(guī)則競(jìng)價(jià)的,即有一張系統(tǒng)自身提供的可能會(huì)變換的默認(rèn)權(quán)值表,要將得分加上這個(gè)默認(rèn)的權(quán)值,以完成最后的計(jì)算。封裝特定的算法公式和數(shù)據(jù)處理方法,供不同地方的大量數(shù)據(jù)計(jì)算使用。對(duì)外提供接口與爬取模塊的接口:PublicvoidinjectedScore(Texturl,CrawlDatumdatum)throwsScoringFilterException;public void initialScore(Text url, CrawlDatum datum) throws ScoringFilterException;與搜索模塊的接口:public float commerlScore (Text
48、 url, Nhdoc, CrawlDatum dbDatum,CrawlDatum fetchDatum, Parse parse,ScoringFilterException;public CrawlDatum getSortedResult ScoringFilterException;與進(jìn)程通信相關(guān)的接口:Inlinks inlinks, float initScore) throws(Text url, CrawlDatum datum) throwspublic float generatorSortValue(Text url, CrawlDatum datum, float i
49、nitSort) throwsScoringFilterException;publicvoidupdateDbScore(Texturl,CrawlDatumold,CrawlDatumdatum, List inlinked) throws ScoringFilterException;4.2類圖4.3類描述4.3.1 ScoringFilter 接口抽象接口 ScoringFilter 用于封裝網(wǎng)頁(yè)的得分計(jì)算算法,具體的算法子類繼承ScoringFilter接 口 , 包 括 : LinkysisScoringFilter 、 OPICScoringFilter 、TLDScoringF
50、ilter、URLMetaScoringFilter。同時(shí)算法需要調(diào)用 webgraph 中的數(shù)據(jù)類的相關(guān)數(shù)據(jù)結(jié)構(gòu)和圖論算法計(jì)算相關(guān)得分。4.3.2 ScoringFilters 類ScroingFilters 類包含所有的算法集合以及調(diào)用接口,負(fù)責(zé)和其他模塊的交互,對(duì)搜索結(jié)果進(jìn)行排序。類方法publicvoidinjectedScore(Texturl,CrawlDatumdatum)throwsScoringFilterException:在添加新發(fā)現(xiàn)的網(wǎng)頁(yè)時(shí),計(jì)算初始化的得分public void initialScore(Text url, CrawlDatum datum) thro
51、ws ScoringFilterException:在注入新網(wǎng)頁(yè)時(shí),計(jì)算初始化的得分前置條件: 搜索模塊完成并經(jīng)過(guò)了商品信息過(guò)濾;后置條件: 獲得正確詞組,并初始化得分。publicfloatcommerlScore(Texturl,Nhdoc,CrawlDatumdbDatum,CrawlDatum fetchDatum, Parse parse, Inlinks inlinks, float initScore) throwsScoringFilterException:計(jì)算競(jìng)價(jià)前置條件:后置條件:處理后的分?jǐn)?shù)競(jìng)價(jià)權(quán)重的配置文件修改完成;無(wú)異常錯(cuò)誤警告,獲得權(quán)重修改后的分?jǐn)?shù)。public
52、float generatorSortValue(Text url, CrawlDatum datum, float initSort) throwsScoringFilterException:給頁(yè)面計(jì)算新的分?jǐn)?shù)前置條件: 請(qǐng)求計(jì)算得分;后置條件: 無(wú)異常錯(cuò)誤警告,獲得算法計(jì)算后的分?jǐn)?shù)。publicvoidupdateDbScore(Texturl,CrawlDatumold,CrawlDatumdatum,List inlinked) throws ScoringFilterException:更新頁(yè)面的得分到數(shù)據(jù)庫(kù)中前置條件:請(qǐng)求更新數(shù)據(jù);后置條件:無(wú)異常錯(cuò)誤警告。public Craw
53、lDatum getSortedResult (Text url, CrawlDatumScoringFilterException:獲得排序結(jié)果前置條件:正確排序后置條件:正確返回排序后的數(shù)據(jù)datum) throws4.3.3. WebGraph 類排序算法的數(shù)據(jù)類型。類方法public void createWebGraath webGraphDb, Path segments,normalize,filter) throws IOException:創(chuàng)建網(wǎng)頁(yè)圖前置條件:獲取相關(guān)頁(yè)面數(shù)據(jù)之后請(qǐng)求分析后置條件:無(wú)異常錯(cuò)誤4.3.4 LinkR類計(jì)算方法的工具類。類方法public void
54、yze(Path webGraphDb) throws IOException:分析網(wǎng)頁(yè)連接圖的數(shù)前置條件:WebGraph 已經(jīng)生成;后置條件:無(wú)異常錯(cuò)誤4.4 重要協(xié)作順序圖狀態(tài)圖4.5 使用的設(shè)計(jì)模式4.5.1 策略模式策略模式定義了一系列的算法,并將每一個(gè)算法封裝起來(lái),而且使它們之間可以相互替換。策略模式讓算法獨(dú)立于使用它的客戶而獨(dú)立變化。它提供了一種替代繼承的方法,而且既保持了繼承的優(yōu)點(diǎn)(代碼重用),還比繼承更靈活(算法獨(dú)立,可以任意擴(kuò)展)。同時(shí)避免程序中使用多重條件轉(zhuǎn)移語(yǔ)句,使系統(tǒng)更靈活,并易于擴(kuò)展。策略模式還遵守大部分 GRASP 原則和常用設(shè)計(jì)原則,如下圖所示:聚、低偶合。在排
55、序模塊中,由于質(zhì)量屬性中明確提出排序算法可能會(huì)在以后變更,因此必項(xiàng)將各個(gè)算法模塊封裝起來(lái),實(shí)現(xiàn)接口 injectedScore() , initialScore() , commer lScore (),getSortedResult (),generatorSortValue(),updateDbScore(),以便以后可以方便地修改。如果要新增算法,增加一個(gè)算法類,實(shí)現(xiàn)上述接口,并在類并更新類的的時(shí)候?qū)⒅赶蛐碌乃惴惣纯?;如果要移除算法,移除?duì)應(yīng)的算法的即可;如果要修改算法,可在不修改接口的前提下修改算法即可,保證了聚和低耦合。類圖體現(xiàn):patibler 模塊5.5.1 概述承擔(dān)的需求(主
56、要)獲得商品查詢的排序結(jié)果后,向客戶端返回商品信息,并需要兼容不同內(nèi)核的瀏覽器。商品展示用例圖可能會(huì)修改的實(shí)現(xiàn)(次要)瀏覽器的類型在將來(lái)可能會(huì)增加商品展示形式可能在將來(lái)會(huì)變更角色商品搜索排序后的結(jié)果,并以合理的方式顯示;兼容不同內(nèi)核的瀏覽器對(duì)外提供接口JSP/HTML 文件中調(diào)用的 JS 接口:showGoods(ShowGoodsArrStrategy,MyBrowserFun,List)5.2類圖5.3類描述首先,由于 JavaScript 并不支持面象的語(yǔ)言,沒(méi)有提供對(duì)類的支持,因此我們不能像在傳統(tǒng)的語(yǔ)言里那樣用 class 來(lái)定義類,但可以用 js 的閉包封裝機(jī)制來(lái)實(shí)現(xiàn)js 類。同樣,
57、 js 中也不支持類繼承機(jī)制,但可以通過(guò)將父類prototype中的成員方法到子類的 prototype 中來(lái)實(shí)現(xiàn)。因此,圖中描述的 class, abstractclass 都是為了體現(xiàn)設(shè)計(jì)模式的抽象。5.3.1 Shower 類Shower 類確切的來(lái)說(shuō)應(yīng)該算是一個(gè) JavaScript 文件,其中有一個(gè)方法叫做showGoods(ShowGoodsArrStrategy,List)。類方法 showGoods(ShowGoodsArrStrategy,List):其中 ShowGoodsArrStrategy 指定商品展示的形式(以哪種方法展示商品列表),List為商品搜索結(jié)果排序模塊傳
58、入的排序后的商品列表。前置條件:搜索到的商品已經(jīng)排序完畢;后置條件:商品以規(guī)定的格式展現(xiàn)給用戶。5.3.2 ShowGoodsArrStrategy 抽象類ShowGoodsArrStrategy 類封裝了不同的商品顯示算法,它由不同的具體子類實(shí)現(xiàn)。5.3.3 ShowGoodsArrStrategyA、ShowGoodsArrStrategyB 類具體的子類,繼承自 ShowGoodsArrStrategy 抽象類,按照不同的展現(xiàn)形式對(duì)showArray(List,MyBrowserFunction)實(shí)現(xiàn)了不同的算法。5.3.4 MyBrowserFunction 接口接口中定義了 show
59、Goods()中用到的與瀏覽器有關(guān)的對(duì) DOM 文檔的操作方法,它用于封裝不同瀏覽器對(duì)文檔操作的差異,提供的接口。5.3.5 MyFunctionAdapterA 類MyFuctionAdapterA 為一個(gè)適配器,內(nèi)核為 A 類型的瀏覽器,它們對(duì) DOM 文檔的操作接口(由 KernalA 提供)通過(guò) MyFunctionAdapterA 適配器被轉(zhuǎn)化為符合 MyBrowserFunction 的接口。MyFunctionAdapterB 類與 MyFunctionAdapterB 類功能類似。5.3.6 KernalA 類KernalA 確切的來(lái)說(shuō)并不是一個(gè)類,它是內(nèi)核類型為 A 的瀏覽器
60、對(duì) DOM 文檔的各種各樣不同的操作,這些操作方法在 MyFunctionAdapterA 中被調(diào)用,以轉(zhuǎn)化組 符合 MyBrowserFunction 的接口。5.4 重要協(xié)作順序圖5.5 使用的設(shè)計(jì)模式5.5.1 適配器模式適配器模式可以使使用一個(gè)已經(jīng)存在的類,雖然該類的接口不符合的需求,但是通過(guò)適配器對(duì)它進(jìn)行轉(zhuǎn)化,可以將其封裝成需要的接口。在商品信息展示模塊中,不同瀏覽器對(duì)于 DOM 文檔的操作會(huì)因?yàn)闉g覽器內(nèi)核的不同而有所差異,要的接口形式:為了兼容各種瀏覽器,通過(guò) Adapter 將它們轉(zhuǎn)化成需Request(Request(AdapteeSpecificRequestCnt5.5.2
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 棗莊房屋租賃合同范本
- 領(lǐng)帶訂做合同范本
- 上海購(gòu)房合同范本
- 信息產(chǎn)業(yè)合同范本
- 臨時(shí)停車位租用合同
- 入境游貸款協(xié)議
- 怎樣擬定用工合同范本
- 大學(xué)實(shí)驗(yàn)室設(shè)備采購(gòu)協(xié)議
- 注塑項(xiàng)目合同范本
- 勞務(wù)派遣合同履約金條款
- 城市更新暨老舊小區(qū)改造二期項(xiàng)目-初步設(shè)計(jì)說(shuō)明書(shū)
- 礦石買賣協(xié)議書(shū)
- 2024年岳陽(yáng)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)附答案
- 2023新蘇教版六年級(jí)下冊(cè)科學(xué)學(xué)生活動(dòng)手冊(cè)答案
- 【老齡化背景下商業(yè)銀行養(yǎng)老金融發(fā)展探究文獻(xiàn)綜述3400字】
- 精神科護(hù)士進(jìn)修
- 《用戶側(cè)電化學(xué)儲(chǔ)能系統(tǒng)接入配電網(wǎng)技術(shù)規(guī)定》
- 2024年洛陽(yáng)市九年級(jí)語(yǔ)文中考第一次模擬考試卷附答案解析
- 安徽省醫(yī)療保障基金使用違法違規(guī)問(wèn)題檢查指引2023版
- 脾淋巴瘤護(hù)理查房
- (幻燈片)湘教版七年級(jí)下冊(cè)地理復(fù)習(xí)課件
評(píng)論
0/150
提交評(píng)論