1. 程式人生 > >javaweb面試總結(二、電商專案)

javaweb面試總結(二、電商專案)

電商架構:https://blog.csdn.net/yangbutao/article/details/12242441

九個模組:https://blog.csdn.net/belvine/article/details/79400813

電商類目:https://blog.csdn.net/qq_33620483/article/details/78265969

電商後臺:https://blog.csdn.net/qq_33620483/article/details/78266088

redis主從:https://blog.csdn.net/qq_33620483/article/details/78188673

表設計:https://blog.csdn.net/chaunceyw/article/details/78249954

電商介紹:https://blog.csdn.net/lihang_1994/article/details/74620538

1. 訂單號如何生成?


時間+序號方式



2. redis崩潰怎麼辦?


可以搭建redis叢集;




3. 搶購如何解決高併發?


使用訊息佇列,如:下訂單人數過多,非同步通過訊息佇列進行訂單支付,之後完成後返回到訂單詳情頁面,點選“我已支付”,然後進行支付狀態查詢;
支付的非同步處理請求;
1. (非同步處理請求)後臺獲取使用者請求,將請求資訊儲存到訊息佇列中,然後彈出支付確認框,包含“支付成功”,“支付異常” 資訊給前臺頁面;消費方獲取資料,然後慢慢處理結果;
2. (限制請求次數)訪問併發較大時,可以限制使用者的請求時間,比如每個使用者1分鐘內只能請求一次,將每個使用者請求資訊存入redis中,然後設定1分鐘有效時長即可;避免反覆點選;
3. (秒殺可以關閉介面)庫存為0,或者超出秒殺時間,可以關閉介面;人為關閉,或者使用系統時間作限制;
4. (放入訊息佇列的資料不能過多),如果當前請求人數過多,不能全部放入訊息佇列,則適當關閉請求的介面;
5. (cdn頁面加速)此方法可以將靜態資源快取道比較進的區域伺服器中;





4. 高併發與多執行緒分別是什麼?

高併發 ≠ 多執行緒


方式:多執行緒 - 同一時刻利用計算機閒置資源的一種方式 ; 多執行緒在這裡只是在同/非同步角度上解決高併發問題的其中的一個方法手段;


狀態:高併發 - 短時間內遇到大量操作請求,嚴重消耗伺服器資源;嚴重則OOM異常(java.lang.OutOfMemoryError)
https://blog.csdn.net/qq_33450379/article/details/53731318


如果要想系統能夠適應高併發狀態,則需要從各個方面進行系統優化,包括,硬體、網路、系統架構、開發語言的選取、資料結構的運用、演算法優化、資料庫優化……而多執行緒只是其中解決方法之一。






5. 如何避免多次重複提交訂單?



進入訂單確認頁面前通過redis計數器生成一個唯一code(UUID),


點選確認生成訂單後,後臺獲取此code值存入redis中,並設定expire為60秒;


後臺並生成訂單編號,然後返回給前臺;


每次提交訂單請求前,都需要判斷此值是否存在,如果存在,則說明1分鐘內重複提交過了,不予處理;

否則可以提交,訂單生成結束,頁面迴圈查詢訂單生成變化,如果成功,則跳轉頁面;


 
6. 何時變更資料庫商品庫存?


生成訂單成功,則修改庫存;




7. 如何保證庫存不被超額售賣?

非搶購或秒殺情況,每次修改資料庫庫存,不會出現此問題;




8. 搶購或者秒殺如何避免超賣?


搶購可以利用redis原子性,維護庫存資訊;如果庫存數量為0,則關閉此介面;


提高系統性能可以使用cdn網路加速。

避免重複搶購,同樣在每個搶購頁面生成唯一code,避免重複提交;


搶購傳送請求後,生成訂單號,直接返回“正在搶購,請稍後...”與訂單號




?搶購時,訂單號如何生成 ?
redis.incr 遞增
 redis.decr 遞減

搶購提交商品id,userID,然後放入activeMQ中,等待消費端監聽資料並生成訂單;


後臺根據搶購先後順序生成訂單;


?activeMQ 阻塞了怎麼辦 ?
參考:https://blog.csdn.net/sinat_27371767/article/details/45026231
在專案使用activemq時,客戶端傳送訊息而沒有得到回覆(在不考慮消費者是什麼問題的情況下),導致持久化訊息不斷積壓而得不到釋放,最後造成佇列堵塞而。。。
可以在配置檔案中配置訊息的過期時間和死信處理來防止訊息的積壓;


此時前臺頁面通過返回的訂單號,使用ajax每10秒傳送一次請求,查詢搶購結果,並進行處理!


訂單生成之後,修改redis中的庫存資訊;


9. ActiveMQ高併發處理方案
https://wenku.baidu.com/view/9d06e557c1c708a1284a44e5.html


10. jvm調優
JVM調優,是以server模式還是以clien模式執行,如何設定Heap、Stack、Eden的大小,如何選擇GC策略,控制Full GC的頻率等;


11. 常見的oom異常
https://blog.csdn.net/qq_33450379/article/details/53731318




12. 貨到付款流程如何處理


建立貨到付款運單,標記應收費用,生成發貨記錄表;
貨物簽收,物流公司收款;
每週或每月由會計核算運單資訊以及金額;
貨到付款訂單,每天同步運單狀態;



13. 支付過程中用到的表與欄位
訂單表(支付狀態)
收貨地址表
訂單詳情表
支付記錄表(,支付人id,支付人暱稱,支付人頭像,支付型別,訂單id,支付狀態,支付時間) -- 生成訂單後繼續支付 --如果取消支付或者更換支付方式 ,支付完成後修改訂單狀態

訂單中商戶id 交易單號 訂單號 訂單狀態  收款方式  付款方暱稱


 
14. 線上客服怎麼做到?

       購買第三方服務


相關推薦

javaweb面試總結專案

電商架構:https://blog.csdn.net/yangbutao/article/details/12242441九個模組:https://blog.csdn.net/belvine/article/details/79400813電商類目:https://blog.

javaweb面試總結分散式事務CAP原理和BASE思想JDBC事務和JTA事務的區別2PC與TCC區別

CAP原理和BASE思想: http://www.jdon.com/37625分散式事務如何處理?解決方案有很多種!比如事務補償機制:即在事務鏈中的任何一個正向事務操作,都必須存在一個完全符合回滾規則的可逆事務。或者利用訊息系統實現最終一致性;----------------

2018秋招面試問題C++基礎問題

目錄 智慧指標 c語言的程式碼段、資料段、bss段 編譯器在編譯程式的時候,將程式中的所有的元素分成了一些組成部分,各部分構成一個段,所以說段是可執行程式的組成部分。 程式碼段:程式碼段就是程式的可執行部分,

面試總結

百度一面: 1、多型、如何實現、虛擬函式的實現及其作用?哪些可以為虛擬函式,哪些必須,哪些不可以?虛擬函式內部是怎麼實現的? 多型:允許將父物件設定成和一個或多個子物件相等;也就是允許將子類型別的指標賦值給父類型別的指標(一個介面,多種方法,即介面重用);不論傳遞過來的究竟是哪個類的物件,函

如何清晰的高質量的給面試官介紹自己的專案【借鑑】

面試有兩點:1、技術過硬。2、能說會道。   如果自己的技術還過的去,但是表述的不盡人意,其實是吃了很大虧的,下面我來介紹一個大神的面試過程:   面試官:請介紹一下你的電商專案。   大神:該商城是一個綜合性的B2C電商平臺,類似於京東商城,主要針對廣大消費者。   在整個專案中,我們

JavaWeb學習總結:Http協議

一、什麼是HTTP協議   HTTP是hypertext transfer protocol(超文字傳輸協議)的簡寫,它是TCP/IP協議的一個應用層協議,用於定義WEB瀏覽器與WEB伺服器之間交換資料的過程。客戶端連上web伺服器後,若想獲得web伺服器中的某個web資源,需遵守一定的通訊格式,H

Redis使用總結快取和資料庫雙寫一致性問題

首先,快取由於其高併發和高效能的特性,已經在專案中被廣泛使用。在讀取快取方面,大家沒啥疑問,都是按照下圖的流程來進行業務操作。但是在更新快取方面,對於更新完資料庫,是更新快取呢,還是刪除快取。又或者是先刪除快取,再更新資料庫,其實大家存在很大的爭議。目前沒有一篇全面的部落格,

C++面試總結

1.struct和class的區別 C++中的struct對C中的struct進行了擴充,它已經不再是一個包含不同資料型別的資料結構了。 struct與class 的區別是預設的訪問控制。 預設的繼承訪問許可權,struct是public的,class是private的。  &

Javaweb學習總結—— HttpServletResponse物件

HttpServletResponse物件、用Servlet生成驗證碼圖片。 web伺服器根據每一次請求,建立相對應的請求物件request、和代表響應的物件response。 通過請求物件,我們獲取資料。 通過響應物件,我們傳送資料。 Http

JAVA與大資料面試總結

Java基礎知識 Java中常用演算法:冒泡、選擇、快速 冒泡:兩兩比較,每一輪(0~length-i)挑出一個最值,並將其移除,迴圈遍歷1~length   選擇:外面定義從0~length-1,先選定一個最先面的下目標作為最小下標,將其所對應的值逐一與其他比較,如果

javaweb學習總結Spring4+SpringMVC4+Hibernate5框架搭建

前言: 由於某種原因,突然想自己搭一個屬於自己的專案框架出來,框架選擇時大致瞭解了市場上流行的SSM(Spring+SpringMVC+MyBatis)和SSH(Struts2+Spring+Hibernate)框架。只是做了簡單瞭解,深層次的瞭解以我現在的水平暫時還達不

測試開發工程師面試總結——演算法篇

演算法也屬於常見面試內容之一,但基本不會超過《劍指offer》的範圍,在此附上一篇簡書上整理的內容: 第二版java解法 常見的面試題包括以下幾類:字串操作,檔案輸入輸出流及統計,矩陣操作,單例模式等。 1.針對字串的操作:如字串反轉、

CentOS7 LNMP+phpmyadmin環境搭建LNMP環境搭建

用戶 lib 關聯 cin 特殊 get deb 分號 yum 上一篇博客我們在虛擬機上安裝了centos7,接下來,就開始安裝lnmp環境吧。 還是跟之前一樣,進入命令行後,先使用su命令切換到root權限。 首先配置防火墻 CentOS 7.0默認使用的是firewa

前端自動化測試之UI RECORDERPC錄制

啟動服務 域名 run ports shadow 科學 兼容 webp htm PC錄制教程 準備工作: NodeJs環境 請自行先安裝好nodejs環境,在命令行執行node -v命令成功說明已經安裝成功 Chrome瀏覽器 JAVA環境 UI Recorder We

JPA學習JPA_基本註解

自增 簡化 留言 uniq 產生 規範 pri blob 時間 框架學習之JPA(二) JPA是Java Persistence API的簡稱,中文名Java持久層API,是JDK 5.0註解或XML描述對象-關系表的映射關系,並將運行期的實體對象持久化到數據庫中。 Sun

laravel5.5源碼筆記服務提供者provider

字符串 bst 啟動 osi bee bootp 系統初始 bootstra min laravel裏所謂的provider服務提供者,其實是對某一類功能進行整合,與做一些使用前的初始化引導工作。laravel裏的服務提供者也分為,系統核心服務提供者、與一般系統服務提供者。

vmware horizon 6.0搭建-支援的作業系統

1.vmware horizon 6.0各部分元件建議使用windows server 2008 R2(安裝功能.net framework 3.5)。 2.上述模板機制作完成之後為防止Windows網路安全ID(SID)相同:“C:\windows\System32\Sysprep\Syspr

Hadoop學習記錄hdfs shell命令

在/usr/local/hadoop-2.9.2/bin目錄下執行命令 1.檢視根目錄: ./hdfs dfs -ls / 2.檔案上傳:上傳到根目錄 ./hdfs dfs -put /tmp/test.txt /   3.檢視檔案內容 ./hdfs df

Zookeeper學習zookeeper命令操作

1.zookeeper的四字命令 [[email protected] ~]# zkServer.sh start zoo1.cfg JMX enabled by default Using config: /usr/local/zk/bin/../conf/zoo1.cfg S

Day01專案介紹

1、簡介 品優購網上商城是一個綜合性的 B2B2C 平臺,類似京東商城、天貓商城。網站採用商家入駐的模式,商家入駐平臺提交申請,有平臺進行資質稽核,稽核通過後,商家擁有獨立的管理後臺錄入商品資訊。商品經