'java面試自我介紹'

"

面試官你好,我叫XX,今年 XX 歲,畢業於XX。從開始從事 java

開發到現在已經有X年的工作經驗了,在這X年當中,大大小小參加了一些項目,對於項目的開發

有一定的基礎, 我最近做的一個項目是 XX項目,這個項目也是我做的比較久的項目,

我很喜歡這種團隊合作的感覺 ,而我也是那種很有耐心,比較嚴謹的人,對於工作有很強的責任感,

在生活中,我也是比較喜歡溝通和表達,比較真誠的一個人 .

在投出這份簡歷之前我也對公司的概況有了一些瞭解,我很感謝貴公司給了我這次面

試的機會,以上就是我的自我介紹,謝謝。

主要負責:註冊及登錄(Sso),後臺管理系統:主要實現活動管理(Quartz)、會員管理、

,購物車模塊(cookie) , 熱門商品秒殺(redis) , 協助搭建商品信息檢索引擎(solr)

我最近做的一個項目是B2C的電商項目, 我們項目主要分為前後臺 ,

前臺包括網站首頁,商品詳細頁, 搜索頁, 會員中心, 訂單與支付相關頁面 , 秒殺頻道等

後臺主要功能是對商品的管理及訂單查詢統計 , 資金結算等功能.

前端部分主要使用 angular.js+bootstrap。Angular 的特徵主要有四個,分別是 MVC

模式,雙向綁定,依賴注入,模塊化設計。常用的指令 ng-app,ng-init,ng-model, $scope

,$http(相當於 jq 中的 ajax 請求)。

我這邊主要負責的模塊是註冊及登錄, 活動管理, 購物車模塊, 商品秒殺 ,以及

協助搭建商品信息檢索引擎.

客戶登錄模塊主要用的是單點登錄來實現的, 用的是CAS.

/*單點登錄 SSO(Single Sign On)說得簡單點就是在一個多系統共存的環境下,

用戶在一處登錄後,就不用 在其他系統中登錄,也就是用戶的一次登錄能得到其他所有系

統的信任。

什麼是CAS?

是一個開源項目, 為Web應用系統提供一種可靠的單點登錄方法

(存儲信任, 驗證信任)

用戶登錄成功後在客戶端生產出Cookie, 用戶在訪問其他系統的時候,攜帶著驗證

過的Cookie就可以免登錄了

把信任存儲在客戶端的Cookie裡,通過加密Cookie來處理安全問題,

如何解決跨域免登問題?

把信任關係存儲在單獨的Sso系統裡,從客戶端移到服務端,

當會員需要登錄的時候,首先進入的是“登錄頁面”,輸入用戶名、密碼、驗證碼

進行登錄,進入單點登錄系統(Controller)---> Service---> Mapper ---> DB--->提交登錄頁面,

用戶信息被提交到單點登錄系統進行校驗。如果登陸信息不正確,校驗錯誤,將錯誤的登陸

信息進行回顯返回給用戶,重新登錄。驗證通過,就將用戶信息保存到 redis 中,並且生成

token 作為一個標識,並將 token 保存到 cookie 裡面,發送給用戶瀏覽器,下次請求的時

候 就會帶回來,獲取 cookie 裡面的 token,根據 token 再去 redis 中查詢對應的用戶信息。

登 錄成功後將重定向到登錄之前的訪問頁面。

每一個系統的訪問域名不一樣,默認的情況下,一個服務中產生的 cookie 只能當前服 務使

用,瀏覽器不會講該 cookie 發送到其他服務。遇到這樣的問題,在 cookie 中有一個屬 性

domain(有效域名)默認為當前的域名,我們需要將有效域名設置成“.taotao.com”結 尾,

以後瀏覽器就會把所有“.taotao.com”結尾的域名都會發送 cookie 信息。

對於多系統共存的環境下,通過 Ajax 跨域判斷用戶是否登錄

我們網站首頁用的是分佈式文件存儲fastDFS,, 我們用的是七牛圖片服務器, 相對於

阿里雲 圖片服務器來說, 七牛圖片服務器在成本上有更好的控制

我們在做商品活動管理的時候,會用到quartz定時任務, 當促銷活動結束後,系統就會

自動修改表中的一個status字段, 一般將值設置為0 ,表示活動已經結束了

//另外在頁面靜態化進行數據同步的時候,也會用到定時更新

實現一個Job接口

創建一個定時器對象 schedule

定義一個工作對象 JobDetail

定義觸發器 Trigger , 最後, 開啟定時任務

1)Job(接口):工作任務,你要做什麼,Job一般自定義實現,由接口JobDetail來創建

2)Trigger執行工作任務,什麼時間執行,多久執行一次

常用的有:SimpleTrigger、CronTrigger

2)Scheduler定時器對象,開啟定時任務

*/

//在安全管理方面我們用的是很流行的安全框架Spring Security

//在 Spring 應用上下文中配置的 Bean,充分利用了 Spring IOC,DI和AOP

//密碼加密方面,我們使用到了BCrypt算法

未登錄狀態購物車:

利用 cookie 中的 value(value 可以是一個 uuid 來保證唯一性)再加上一個前綴

比如 REDIS_CART 做為 redis 的 key,然後將購物車數據轉成 json 存入到 redis 中。

這樣就達到了京 東的未登錄狀態下加入商品到購物車的類似功能。 但是這樣存數據

的話,如果購物車中有很多個商品,而之後要修改購物車中某個商品的數量,

我們就需要將所有的商品取出來遍歷、判斷、修改然後再重新轉換成 json 再存入到

redis 中, 這樣就有點麻煩。因此就採用了 redis 中的 hash 結構的存儲方式。

它的結構方式是:

key - hash field(字段) : value 數據

redis-key 保持不變,然後可以將 itemId 作為字段,然後將數據存入到 value 中。

如果需要修改商品數量的話直接可以通過itemId找到對應的商品修改而不需要全部取出了。

購物車系統主要是登錄狀態購物車,

當客戶在未登錄狀態下下單的時候, 會跳轉到登錄頁面, 客戶登錄成功之後, 會通過

MQ發送消息,然後購物車系統會在監聽到消息之後再處理數據和合並, 在合併之前消息中間件會發送兩個消息 一個是用戶的id, 一個是cookie中的uuid, 通過uuid查詢到用戶在未登錄狀態下

購物車的數據, 就是在之前未登錄狀態下,購物車的數據會存儲到redis中,redis中的key就是uuid,

如果用戶登錄後攜帶的cookie中的uuid和redis中的key一致的話, 那就可以進行數據合併,

然後將合併之後的數據保存到用戶的Id下 , 最後再把redis中的購物車的數據刪除掉

熱門秒殺

1、把商品的數量放到 redis 中。

2、秒殺時使用 decr 命令對商品數量減一。如果不是負數說明搶到。

3、一旦返回數值變為 0 說明商品已售完。

秒殺技術實現核心思想是運用緩存減少數據庫瞬間的訪問壓力!

讀取商品詳細信息時運用緩存,當用戶點擊搶購時減少緩存中的

庫存數量,當庫存數為0時或活動期結束時,同步到數據庫。

產生的秒殺預訂單也不會立刻寫到數據庫中,而是先寫到緩存,

當用戶付款成功後再寫入數據庫。

架構層面:

擴容 說白了加機器

將秒殺系統獨立部署 , 另外申請了單獨的域名,這樣秒殺系統崩潰了,也不會對網站造成影響

將即將被秒殺的數據維護到redis中 ,

採用拍下減庫存的方式

產品層面:

控制秒殺商品頁面搶購按鈕的可用/禁用。 只有在秒殺開始的時候才能點亮,在此之前是灰色的,顯示活動未開始

增加了秒殺答題 , 將請求時間給拉長了

前端層面:

將頁面能夠靜態的部分都靜態化,並將靜態頁面緩存於 CDN

我們的搜索引擎用的是solr技術, 根據IK分詞器 ,對查詢的條件進行查詢,

會創建一個SolrQuery對象設置的查詢條件返回結果集,遍歷後添加得到pojo類,返回

到頁面

這裡有一個問題就是索引庫要同步,當我們添加商品的時候,我們使用了一個消息中間 件 ActiveMQ 來同步索引庫,

添加商品時,發送消息。在搜索模塊中,創建 MessageListener 接口的實現類接收消息,取商品 id,根據商品 id

查詢數據庫,創建一 SolrInputDocument 對象,使用 SolrServer 對象寫入索引庫。 當用戶搜索到自己想要的商品時

,就會去點擊那個商品圖片或者名稱進入商品詳情頁 面。商品詳情展示要查兩個表,一個是商品表,一個是商品描述表

,當訪問量很大時,如熱 門商品,就會頻繁的跟數據庫交互,為了減輕數據庫的壓力,考慮使用緩存。熱門商品訪問

量比較大,需要做緩存,普通商品卻需求不大。要區別對待,我們考慮到使用記錄訪問量來 記錄訪問次數,來區別熱門商品,

針對的做緩存,但這樣操作麻煩。最終我們採用設置 redis 過期時間來處理這個問題, 熱門商品訪問比較深多,過期了又會存進去。

不過我們為了進一步減少數據庫的壓力,商品詳情頁採用了 FreeMarker 模板引擎技術, 生成一個靜態化頁面。

這樣能減輕服務器的壓力。當我們添加商品的時候,我們使用了一個 消息中間件 ActiveMQ 發送消息。

再創建 MessageListener 接口的實現類接收消息,取商品 id 根據商品 id 查詢數據庫,過得商品基本信息和商品描述,

創建商品詳情模板,指定下商品 輸出文件路徑,生成靜態文件,用 nginx 作為 http 服務器來訪問靜態頁面。

如果一臺服務 器不夠,可以採用分佈式擴容,我們還可以使用 nginx 來反向代理,負載均衡。

"

相關推薦

推薦中...