程式設計師面試乾貨:如何講解自己做過的項目

程序員面試乾貨:如何講解自己做過的項目

說到簡歷,對於IT這種比較偏重技術的崗位,企業最看重的就是項目經驗,尤其是曾經做過的項目,用過的技術越匹配越好!

一封好的簡歷就是事業的敲門磚,如果你目前正在處於找工作的階段,如何給面試官來講一個項目呢,希望這篇文章可以幫助你。

先彙總:

我們這個項目是基於SOA的架構來實現的。採用的是dubbo中間件來實現表現層跟服務層之間的通信。我們項目分為前臺後臺,前臺提供內容展示,商品展示,商品搜索,購物車,訂單等模塊,支付,客服中心等模塊,後臺提供管理商品,內容管理,訂單管理,採購財務管理等模塊。

下面我給您具體介紹一下:

首先進入我們的網站首頁:最上面是我們的網站的logo,搜索框,下面左邊是測分類欄對商品進行分類,中間是輪播圖廣告位,跟著下面是新聞公告欄,再下面是一些熱門商品的展示。這上面內容都是動態的展示出來的,所以我們要有一個後臺來管理這些內容。

我介紹下我參與的兩個模塊:

比如說廣告位的展示吧,我們後臺要管理這些內容,在後臺頁面最左邊就會有一個網站內容管理模塊,內容模塊包含內容分類管理,內容管理。

當我們點擊內容分類,在右邊就會顯示所有商品的一個分類,在點擊子節點,比如說我們這裡的廣告位,就會異步加載數據的顯示查出廣告內容。我們再在這個基礎上對廣告進行增刪改查。考慮高併發量,為了避免頻繁的與數據庫交互,我們將數據存在了redis中,當在首頁中點擊廣告時,我們將不再直接去數據庫中查找數據,而是先判斷緩存中是否有數據,如果有直接返回數據,如果沒有就去查數據庫並將數據緩存在radis中,另外我們修改內容後,會將原來的緩存刪除掉,來同步數據庫。

後臺模塊還有商品管理模塊,這一塊是對商品的列表展示,以及增刪改查操作,分頁採用的是pagehelp插件,將商品信息查詢出來的信息放到pageinfo對象裡面,設置分頁信息,返回數據給datagrid;新增商品的話,在商品添加界面錄入商品信息,商品的id,商品標題,商品賣點,商品價格,庫存數量,商品條形碼,商品圖片,商品類別,商品狀態(1-正常,2-下架,3-刪除'),創建時間,更新時間,商品的描述。其中圖片存儲考慮到數量比較多,採用的是分佈式文件存儲系統(fastdfs),圖片多了可以搭建集群。商品的描述採用的是富文本編輯器,將錄入的商品信息分別插入對應的不同的表。

然後我們再來說下首頁的其他部分,最上面有個搜索框,當用戶在首頁沒有看到想要的商品時,可以有針對性的進行搜索,使用了solr技術,根據IK分詞器,對查詢的條件進行查詢,首先創建一個SolrQuery對象作為商品搜索的查詢條件,設置分頁條件,指定默認的搜索域,設置高亮,執行查詢,計算出總頁數和總條數,返回一個QueryResponse結果集,在將結果集循環遍歷添加到自己定義的集合裡面,返回給頁面,一個商品的圖片有多個地址,需要將圖片的地址分切轉化成數組,頁面顯示的時候取數組的下標為0,取出一張圖片就可以了,這樣我們就搜索到我們想要的一些商品。

這裡有一個問題就是索引庫要同步,當我們添加商品的時候,我們使用了一個消息中間件ActiveMQ來同步索引庫,添加商品時,發送消息。在搜索模塊中,創建MessageListener接口的實現類接收消息,取商品id,根據商品id查詢數據庫,創建一SolrInputDocument對象,使用SolrServer對象寫入索引庫。

當用戶搜索到自己想要的商品時,就會去點擊那個商品圖片或者名稱進入商品詳情頁面。商品詳情展示要查兩個表,一個是商品表,一個是商品描述表,當訪問量很大時,如熱門商品,就會頻繁的跟數據庫交互,為了減輕數據庫的壓力,考慮使用緩存。

熱門商品訪問量比較大,需要做緩存,普通商品卻需求不大。要區別對待,我們考慮到使用記錄訪問量來記錄訪問次數,來區別熱門商品,針對的做緩存,但這樣操作麻煩。最終我們採用設置redis過期時間來處理這個問題, 熱門商品訪問比較深多,過期了又會存進去。

不過我們為了進一步減少數據庫的壓力,商品詳情頁採用了FreeMarker模板引擎技術,生成一個靜態化頁面。這樣能減輕服務器的壓力。當我們添加商品的時候,我們使用了一個消息中間件ActiveMQ發送消息。再創建MessageListener接口的實現類接收消息,取商品id。

根據商品id查詢數據庫,過得商品基本信息和商品描述,創建商品詳情模板,指定下商品輸出文件路徑,生成靜態文件,用nginx作為http服務器來訪問靜態頁面。如果一臺服務器不夠,可以採用分佈式擴容,我們還可以使用nginx來反向代理,負載均衡。

我再講下購物車模塊:

當客戶查看商品詳情後,想購買了,就會加入購物車。為了減少用戶流失量,在不登陸的情況下,可以把購物車信息寫入cookie,這樣用戶體驗好。讀寫cookie我們封裝了CookieUtils工具類來實現。加入時先判斷商品id在商品列表中是否存在。如果存在,商品數量相加。不存在,根據商品id查詢商品信息,把商品添加到購車列表,把購車商品列表寫入cookie。購物車列表轉換成json數據。需要對數據進行編碼。Cookie的有效期:保存7天。展示購物車列表時,從cookie中取商品列表把,商品列表傳遞給頁面。修改商品數量時,頁面發送一個異步請求,後臺接收兩個參數商品id和數量,再從cookie中取商品列表,遍歷商品列表找到對應商品,更新商品數量,把商品列表寫入cookie。這裡有個問題時,數量有上線,當庫存不足時,我們是在提交訂單時,去查詢數據庫,當庫存不足時,給用戶提醒。

最後我講一下訂單模塊:

購物車完成後要生成訂單,訂單中有配送信息,因此我們必須要求用戶登錄。我們使用的是單點登錄,使用redis模擬Session,實現Session的統一管理,這樣用戶只需要登錄一次就可以訪問所有相互信任的應用。用戶登錄成功後,生成token,相當key, 把用戶對象轉換成json當value存入redis,模擬Session的過期時間。一般半個小時,最後把token寫入cookie中(Cookie需要跨域)。

當點擊生成訂單時,先配置一個springmvc的攔截器,實現接口HandlerInterceptor,從cookie中取token,沒有token,需要跳轉到登錄頁面;有token,調用sso系統的服務,根據token查詢用戶信息,如果查不到用戶信息,說明用戶登錄已經過期。需要跳轉到登錄頁面,查詢到用戶信息,放行。放行後,提交購物車OrderInfo,接收表單的數據,不全一些數據,生成訂單id,向訂單表插入數據。向訂單明細表插入數據,向訂單物流表插入數據。返回邏輯視圖展示訂單生成成功,在調用第三方接口,完成訂單支付。

同學們,你們在面試中都遇到哪些問題呢?評論區可以留言給播妞,和眾多同學一起切磋。


分享到:


相關文章: