1. 程式人生 > >國際物流傑信專案總結與面試

國際物流傑信專案總結與面試

國際物流傑信專案面試總結

1.面試時如何講解專案?

講出三個層次,
1)講專案的背景,講特色的業務
2)講業務的複雜度
3)從業務角度牽扯出技術亮點

每一層都要挖陷阱,讓面試官問問題。

從面試題中找出十個重點,把它們自己總結一段話,300~500字。
綜合所學的所有知識

2.業務

a)購銷合同

傑信和生產廠家要簽訂一個購銷合同,購銷合同包括三部分內容,包括合同主資訊和多個貨物資訊和多個附件資訊。
合同和貨物是一對多,貨物和附件是一對多。
貨物和附件都有指定的生產廠家,附件還有一個分類需要取自基礎表。大概欄位有近90個。
在購銷合同中還有一個複雜的報表列印,這個表單內容非常複雜,它打印出合同的主資訊,還有多個貨物資訊,一頁紙如果是一個生產廠家,必須另起一頁列印。一個頁使用者可以選擇列印一款貨物,也可以選擇列印兩款貨物。
購銷合同合同數量比較多,積累10年多的資料,客戶要求,將這些資料匯出到excel中備份這些資料。
我就研究實現了一個數百萬海量資料的匯出。

b)出口報運

傑信和客戶簽訂合同後,找到生產廠家開始生產貨物,於此同時向海關申報準備運輸的貨物,貨物的資訊和重量資訊和體積資訊,為裝箱做準備。
出口報運時貨物資訊來自合同下的貨物資訊,本身環境新增了部分貨物的資訊包括重量資訊和體積資訊。
一個報運來自多個合同。在出口報運時,它其他業務的集中體現,在這裡建立一個流程狀態,它能反饋後續流程流轉到哪裡。
在後續流程流轉時,都要回執這個狀態。我們系統給客戶系統也提供了這個貨運流程的跟蹤,讓可以可以在他的系統中實時查詢出他下的訂單的當前訂單流轉到哪裡,是裝箱,是委託,還是走到發票等等。

我們的系統採用的是J2EEE技術實現,客戶的系統採用.net技術實現。
我們系統給它們的系統提供了一個WebService服務,使用Apache CXF實現,它可以異構系統來直接訪問我們的系統,進行訂單的流程查詢。

c)貨運管理流程

貨運管理是傑信專案的二期的核心內容,它包括:購銷合同、出口報運單、裝箱單、委託書、發票通知、財務統計這幾步。

購銷合同是客戶和傑信簽訂合同後,向生產廠家簽訂的合同稱為購銷合同。
然後傑信向海關進行出口報運的申請,海關批准後,傑信找貨代公司訂箱子,傑信找拖車公司訂拖車,拖車拉著空箱到生產廠家指定的倉庫在驗貨員的監督下裝貨,拖車拉著滿箱到海關指定的碼頭指定的區域卸貨。等待裝船。
在裝船前,海關進行抽檢。船來後進行轉船。然後船離開裝運港,我們傑信的這單訂單就順利完成。
船離開前,傑信向客戶快遞一個發票通知,同時附上提單。客戶收到發票,支付剩餘尾款,收到提單,等船到目的港,卸貨後,客戶拿著提單提貨。
傑信最終進行內部財務核算,核算這單生意獲取的利潤,提交給領導稽核。

3.設計

a)冗餘設計

在設計時我們首先遵循三正規化來設計表,然後才用反三正規化的設計。三正規化追求的是節省空間,建立表資訊時,不能有重複的內容,

例如:表必須有主鍵,列不能重複,列資訊不能通過現有欄位資料加工而成。
這樣實現儲存的資料資訊所佔空間比較小,資料出處都唯一。反三正規化,採用冗餘技術實現表資訊在查詢時非常快捷,使用者體驗非常好,使用者滿意度非常高。

b)打斷設計,跳躍查詢

在傑信的業務中,它的貨運管理流程分為6步,關聯表達到10級以上。
系統在建設之初我們就考慮到關聯層級過多後,隨著使用者系統使用,資料線性增長,資料量不斷增加,當資料量越來越大時,系統的訪問會越來越慢。
於是我們在表設計時,遵循一個原則,關聯關係不四層。
具體我們實現時通過主表中加一個欄位,來儲存主表和子表的一對多關係。它們都儲存代理主鍵,它們之間用特殊符號隔開。
這樣在實際開發業務時,需要查詢的時候,就可以跳過中間的層級,直接查詢業務所需要的資訊。在
出口報運中就使用這種設計方式。出口報運單來自多個購銷合同,出口報運單中需要獲取合同下的貨物的部分資訊。
新增時利用報運關聯的合同的編號值,也就是打斷設計的這個欄位值,直接拼接為in子查詢串,直接查詢合同下的貨物,這樣跳過合同表。查詢非常快捷。效率倍增。

c)一對一的特殊設計

在傑信系統中有個很有特點的地方,裝箱、委託、發票、財務它們都是一對一的關係。
一個委託來自一個裝箱,一個發票來自一個委託,一個財務來自一個發票。它們每個業務都需要取報運下的貨物資訊。
我們設計時,將委託、發票、財務的主鍵都存放裝箱的ID。
委託、發票、財務表主外來鍵合一。這樣設計後,實現業務只要獲取到其中一個物件的ID,不論是裝箱、還是委託的,還去其他的。都可以直接查詢其他的物件。操作更加靈活。可以實現跳躍查詢,本來財務需要報運下的貨物和附件資訊,本來要通過發票,委託,裝箱,在找到關聯的多個報運,在找到多個貨物,在找到多個附件。
我們新的設計後,直接找到裝箱,找到裝箱的打斷欄位,直接查詢貨物資訊和附件資訊。中間跳過5、6層。查詢效率極高。

4.技術亮點

a)工作流

我們專案中採用工作流,Activiti 5,在貨運管理中使用它,先實現貨運管理流程,從購銷合同銷售人員的申請開始,銷售人員處理完,提交給銷售部領導進行稽核;
銷售部領導稽核通過後,提交到船運部門,船運專責進行報運處理,處理完提交給船運部報運領導進行稽核,船運部報運領導稽核通過後,提交給裝箱專責,裝箱處理完,提交給船運部裝箱領導,船運部裝箱領導稽核通過後,提交給委託專責,委託處理完,提交給船運部發票專責,發票專責處理完, 提交給船運部發票領導,船運部發票領導稽核通過後,提交給財務專責,財務專責進行統計分析後,交給財務部領導稽核,財務部稽核通過後,流程結束。如果其中的環節領導稽核不通過,打回上一個流程。上一個流程補充缺失內容,重新提交稽核。

b)百萬海量資料的匯出

採用poi來實現,開始時我們採用HSSF物件來實現,當我們匯出6萬5千多條資料時,系統報錯,記錄數超出excel 2003版本的限制,它支援65536行資料。遠遠不夠存放我們的記錄。
我查閱了相關資料,將jar包升級poi 3.9版本,升級workbook物件為XSSF物件,它可以操作2007以上版本,這樣將資料擴充到1048576行,列擴充到65536列。
這樣我們就實現一個sheet支援百萬資料。然後列印又出現了一個問題,當列印將近30萬時,系統越來越慢,CPU佔用率很高,記憶體佔用率很高,列印到40萬,系統崩潰,報堆溢位錯誤。
然後我專案組研究查閱資料,發現高版本的poi提供SXSSF物件它支援大資料量的匯出,我們換成這個物件後,列印非常順暢,CPU佔用率不高,記憶體佔用率不高。順利完成資料的匯出。

c)全文檢索

購銷合同查詢非常頻繁,使用者要查,銷售要查,船運要查,各個業務都需要檢視合同資料,合同又有很多項,可以按合同號進行查詢,按客戶名稱模糊查詢,等等。
我們系統採用lusece實現全文檢索,我們將核心的查詢的條件都作為分詞索引,構建分詞索引庫,這樣實現購銷合同的一個全文檢索,為各個業務提供查詢。

d)Aapche CXF

現今最強大的一個WebService實現。我們專案使用maven,依賴jar。修改報運的Service將其改造為一個WebService,對其不需要對客戶開發的公用方法進行遮蔽,只留它查詢某個報運資訊的介面方法,然後配置cxf-servlet.xml。
釋出我們的報運狀態跟蹤的服務。這樣服務端完成。客戶從它的系統中使用ajax訪問我們的系統,從系統中獲取資料,提交一個SOAP requestXML,獲得資料後,來解析xml,從中摘出資料,顯示到他們的系統中。

e)Maven

我們系統都採用Maven構建,我們公司搭建了一個私服,我們專案採用maven 工程,寫好jar包的座標,儲存pom.xml檔案時,myeclipse進行jar搜尋。
它先到本地倉庫進行搜尋,找到就引入專案中,如果找不到,它會去我們的公司的私服去搜索,搜尋到,下載到本地倉庫;搜尋不到,它自動去遠端maven中央倉庫下載,下載到公司的私服中,再下載到本地倉庫。