經過壓力測試可以支援3000左右的併發,可以滿足目前的業務需求。由於我們的系統是分布式架構,支援水平擴充套件,如果將來併發量提高的話,可以增加伺服器來提高併發量。
產品經理:3人,確定需求以及給出產品原型圖。
專案經理:1人,專案管理。
前端團隊:5人,根據產品經理給出的原型製作靜態頁面。
後端團隊:20人,實現產品功能。
測試團隊:5人,測試所有的功能。
運維團隊:3人,專案的發布以及維護。
採用迭代開發的方式進行,一般一次迭代的週期為乙個月左右。
最小庫存量單位。
sku==商品id
redis中儲存的都是key-value格式的。拿商品資料來說,key就是商品id,value是商品相關資訊的json資料。
portal系統在高併發的情況下如果每次請求都請求都查詢資料庫確實會出現資料庫的瓶頸。為了降低資料庫壓力,在服務層會新增乙個快取,用redis實現,這樣的話請求先到快取中查詢是否有快取的內容,如果有直接從快取中取資料,如果沒有再到資料庫中查詢。這樣資料庫的壓力就不會那麼大了。
回答:淘淘**現階段使用的僅僅是把購物車的商品寫入cookie中,這樣服務端基本上麼有儲存的壓力。但是弊端就是使用者更換電腦後購物車不能同步。打算下一步這麼實現:當使用者沒有登入時向購物車新增商品是新增到cookie中,當使用者登入後購物車的資訊是儲存在redis中的並且是跟使用者id向關聯的,此時你更換電腦後使用同一賬號登入購物車的資訊就會展示出來。
當前我們使用cookie的方式來儲存購物車的資料,所以當使用者往購物車中新增商品時,並不對資料庫進行操作。將來把購物車商品放入redis中,redis是可以持久化的可以永久儲存,此時就算是頻繁的往購物車中新增資料也沒用什麼問題。
1、確定乙個基準時間。可以使用乙個sql語句從資料庫中取出乙個當前時間。select now();
2、活動開始的時間是固定的。
3、使用活動開始時間-基準時間可以計算出乙個秒為單位的數值。
4、在redis中設定乙個key(活動開始標識)。設定key的過期時間為第三步計算出來的時間。
5、展示頁面的時候取出key的有效時間。ttl命令。使用js倒計時。
6、一旦活動開始的key失效,說明活動開始。
7、需要在活動的邏輯中,先判斷活動是否開始。
1、把商品的數量放到redis中。
2、秒殺時使用decr命令對商品數量減一。如果不是負數說明搶到。
3、一旦返回數值變為0說明商品已售完。
使用流程:
第二步:有了註冊中心然後是發布服務,發布服務需要使用spring容器和dubbo標籤來發布服務。並且發布服務時需要指定註冊中心的位置。
第三步:服務發布之後就是呼叫服務。一般呼叫服務也是使用spring容器和dubbo標籤來引用服務,這樣就可以在客戶端的容器中生成乙個服務的**物件,在action或者controller中直接呼叫service的方法即可。
zookeeper註冊中心的作用主要就是註冊和發現服務的作用。類似於房產中介的作用,在系統中並不參與服務的呼叫及資料的傳輸。
1)redis是key-value形式的nosql資料庫。可以快速的定位到所查詢的key,並把其中的value取出來。並且redis的所有的資料都是放到記憶體中,訪問的速度非常快,一般都是用來做快取使用。
2)專案中使用redis一般都是作為快取來使用的,快取的目的就是為了減輕資料庫的壓力提高訪問的效率。
3)在網際網路專案中只要是涉及高併發或者是存在大量讀資料的情況下都可以使用redis作為快取。當然redis提供豐富的資料型別,除了快取還可以根據實際的業務場景來決定redis的作用。例如使用redis儲存使用者的購物車資訊、生成訂單號、訪問量計數器、任務佇列、排行榜等。
activemq的作用就是系統之間進行通訊。當然可以使用其他方式進行系統間通訊,如果使用activemq的話可以對系統之間的呼叫進行解耦,實現系統間的非同步通訊。原理就是生產者生產訊息,把訊息傳送給activemq。activemq接收到訊息,然後檢視有多少個消費者,然後把訊息**給消費者,此過程中生產者無需參與。消費者接收到訊息後做相應的處理和生產者沒有任何關係。
activemq在專案中主要是完成系統之間通訊,並且將系統之間的呼叫進行解耦。例如在新增、修改商品資訊後,需要將商品資訊同步到索引庫、同步快取中的資料以及生成靜態頁面一系列操作。在此場景下就可以使用activemq。一旦後台對商品資訊進行修改後,就向activemq傳送一條訊息,然後通過activemq將訊息傳送給訊息的消費端,消費端接收到訊息可以進行相應的業務處理。
activemq有兩種通訊方式,點到點形式和發布訂閱模式。如果是點到點模式的話,如果訊息傳送不成功此訊息缺省會儲存到activemq服務端知道有消費者將其消費,所以此時訊息是不會丟失的。
如果是發布訂閱模式的通訊方式,預設情況下只通知一次,如果接收不到此訊息就沒有了。這種場景只適用於對訊息送達率要求不高的情況。如果要求訊息必須送達不可以丟失的話,需要配置持久訂閱。每個訂閱端定義乙個id,在訂閱是向activemq註冊。發布訊息和接收訊息時需要配置傳送模式為持久化。此時如果客戶端接收不到訊息,訊息會持久化到服務端,直到客戶端正常接收後為止。
目前淘淘**的sso系統的解決方案中直接把token儲存到cookie中,確實存在安全性問題。但是實現簡單方便。如果想提高安全性可以使用cas框架實現單點登入。
如果沒有深入研究就直接回答不知道就可以了。
可以設定文件中域的boost值,boost值越高計算出來的相關度得分就越高,排名也就越靠前。此方法可以把熱點商品或者是推廣商品的排名提高。
ik分析器的分詞原理本質上是詞典分詞。現在記憶體中初始化乙個詞典,然後在分詞過程中逐個讀取字元,和字典中的字元相匹配,把文件中的所有的詞語拆分出來的過程。
支付寶:
先說總體的業務流程,然後再說具體業務的實現方法及使用的技術。最後說你在系統中負責的內容。不需要說表結構。
如果禁用cookie可以使用url中帶引數,把token傳遞給服務端。當然此方法涉及安全性問題,其實在cookie中儲存token同樣存在安全性問題。推薦使用sso框架cas實現單點登入。
單點登入並不是為移動端準備的,移動端有自己的登入方式。單點登入是解決在同乙個公司內部多個互信**之間進行跳轉時不需要多次登入,多個系統統一登入入口。
單點登入的核心是如何在多個系統之間共享身份資訊。
這是什麼狗屁問題?除了單點登入那就是普通登入方式,使用者在同乙個公司的多個系統之間跳轉時需要多次登入。
http是無狀態的,如果別人模仿瀏覽器傳送http請求,一般後台是無法識別的。如果對安全要求高的情況下應該是https協議。可以保證在通訊過程中無法竊取通訊內容。
單位時間內請求次數超過某個閾值就讓輸入驗證碼,可以極大降低抓取的速度,如果多次超過某個閥值可以加入黑名單。還有就是頁面內容使用json返回,資料經常變一變格式,或者js動態生成頁面內容。
1)對使用者安全管理
使用者運算元據庫時,必須通過資料庫訪問的身份認證。刪除資料庫中的預設使用者,使用自定義的使用者及高強度密碼。
2)定義檢視
為不同的使用者定義不同的檢視,可以限制使用者的訪問範圍。通過檢視機制把需要保密的資料對無權訪問這些資料的使用者隱藏起來,可以對資料庫提供一定程度的安全保護。實際應用中常將檢視機制與授權機制結合起來使用,首先用檢視機制遮蔽一部分保密資料,然後在檢視上進一步進行授權。
3)資料加密
資料加密是保護資料在儲存和傳遞過程中不被竊取或修改的有效手段。
4)資料庫定期備份
5)審計追蹤機制
審計追蹤機制是指系統設定相應的日誌記錄,特別是對資料更新、刪除、修改的記錄,以便日後查證。日誌記錄的內容可以包括操作人員的名稱、使用的密碼、使用者的ip位址、登入時間、操作內容等。若發現系統的資料遭到破壞,可以根據日誌記錄追究責任,或者從日誌記錄中判斷密碼是否被盜,以便修改密碼,重新分配許可權,確保系統的安全。
分庫情況下:可以使用mycat資料庫中介軟體實現多個表的統一管理。雖然物理上是把乙個表中的資料儲存到多個資料庫中,但是邏輯上還是乙個表,使用一條sql語句就可以把資料全部查詢出來。
服務端是無法阻止偽造cookie的,如果對安全性要求高的話可以可使用cas框架。
可以使用mysql的行鎖機制,實現樂觀鎖,在更新商品之前將商品鎖定,其他使用者無法讀取,當此使用者操作完畢後釋放鎖。當併發量高的情況下,需要使用快取工具例如redis來管理庫存。
如果資料庫壓力確實很大的情況下可以考慮資料庫分片,就是將資料庫中表拆分到不同的資料庫中儲存。可以使用mycat中介軟體。
使用者登入後需要在session中儲存使用者的id。當使用者登入時,從當前所有的session中判斷是否有此使用者id的存在,如果存在的話就把儲存此使用者id的session銷毀。
solr使用的是lucene api實現的全文檢索。全文檢索本質上是查詢的索引。而資料庫中並不是所有的字段都建立的索引,更何況如果使用like查詢時很大的可能是不使用索引,所以使用solr查詢時要比查資料庫快。
首先solr是不會丟失個別資料的。如果索引庫中缺少資料,那就向索引庫中新增。(靠!什麼狗屁問題!!!)
直接使用lucene實現全文檢索已經是過時的方案,推薦使用solr。solr已經提供了完整的全文檢索解決方案。
商城面試題
a 如果cookie被禁用了怎麼辦?b 如果拿到了cookie裡面的ticket是不是就能登入了?c 如果乙個使用者賬號在兩台電腦登入會有什麼問題?怎麼解決?d 單點登入系統用的是什麼框架做的?一般都是說自己寫的 沒用框架怎麼做?e 單點登入系統做了多久?學員大部分回答是2 4個月 都做了哪些功能 ...
企業面試題
當 jar 在客戶端進行spark submit的時候spark流程就開始了,先概括的介紹一下流程,在講述一下流程中的重要元件 2 首先需要初始化的是sparkcontext,sparkcontext 要構建出dagscheduler,taskscheduler 4 現在可以進行我們編寫的的業務了,...
面試題整理
2014.3.19日整理 1.建立一張表hack 裡面就乙個欄位num,然後用sql語句從1開始插入到100,怎麼寫?oracle 答 1.create tablehack num number 建表語句 2.begin for i in1.100loop insert intohack num v...