項目二業務邏輯整理 非常有用


1.項目周期?

答:傳智所學項目的業務邏輯不夠復雜,模塊也不多,所以建議項目周期為5-8個月。

2.項目團隊有多少人,如何分配的?

答:項目團隊一般由6-10個人組成,4-5個人是java后台的,1-2個是前端,2個產品。

3.在項目中充當什么樣的角色?

答:在項目中的職位是組員或者組長,主要負責開發功能模塊,后期配合測試修改bug

看工作時間與入職的時間,在一家公司入職時間少於1年並且從事開發少於2年很少有機會擔任小組領導

4.項目中遇到的最大的問題是什么?

答:這種問題不要說一般的錯誤,盡量說業務上的問題。例如:單點登錄的時候如何解決多系統之間用戶登錄信息同步以及用戶信息共享;登錄需要發送短信驗證碼的時候如何保證消息到達率是100%;如何實現redis與數據庫信息同步;開發環境程序正常,生產環境程序bug

等。

5.如何保證所負責與需求相符合?

答:在做模塊之前,與產品經理確定好需求,再與項目負責人確定好技術選型應用,在開發過程中遇到業務問題與產品經理和項目負責人及時溝通。

6.你覺得做商品模塊(首頁展示、輪播圖、購物車、單點登錄、訂單)時的難點在哪里?

答:商品模塊:添加或者修改商品時,數據庫、redis、靜態頁面如何同步信息。

購物車:添加的商品數量與庫存數量的對比。商品價格變動同步。購物車的存儲。

單點登錄:如何進行多系統之間的信息交互。(主要指驗證登錄信息 )子系統如何保證登錄信息的安全。

訂單:商品數量與庫存的同步,商品價格的准確性。提交訂單的方式,如何驗證訂單。

7.所負責模塊里有哪些功能?(不要上來就說增刪改查)

答:商品模塊的功能:添加商品時,商品圖片的上傳以及存儲,商品價格確保准確性,商品的上下架。也可以簡單介紹下查詢的各種條件或刪除的各種條件。以及商品信息同步(數據庫、redis、靜態頁面等),商品id的生成規則。

8.在項目開發過程中遇到不會的功能是如何處理的?

答:技術問題:首先是谷歌,在網上查看各種資料以及博客。其次是與同事交流。最后再去找領導。

業務問題:業務問題首先找經理溝通,技術問題首先google百度

9.項目中前台與后台是如何進行數據交互的?

答:ajaxhttp請求,socket

10.如何實現數據庫與redis同步?

答:用消息隊列mq實現。具體操作是在添加或者修改數據的時候,用mq來同步到數據庫與redis加上事務,確保reids與數據庫數據一致。

11.在項目開發過程中還有哪些工作內容?

答:與項目經理去客戶公司確定用戶需求,與同事配合完成單元測試,與測試人員配合完成測試並修改bugbug提交

12.項目共有多少張表?所做模塊用到多少張表?表與表之間的關系?

答:180-220(選一個具體數值)。

商品模塊:商品表,庫存表,品牌表,分類表,商品詳情表,規格表,圖片表,商品排序表,商品篩選表,圖片資源類型表,圖片資源表,商品日志表,曬單圖片說明表。

購物車:商品表,品牌表,分類表,庫存表,用戶表,庫房表,購物車表,購物項表,優惠券表,商品推薦表。

訂單:訂單表,用戶表,用戶地址表,商品表,品牌表,分類表,庫存表,庫房表,地區表,物流信息表。

登錄(后台):用戶表,權限表,角色表,用戶角色表,權限角色表,日志表。

13.插入商品的話,要求級聯插入幾張表,你們當時是怎么實現的?

答:商品表,商品詳情表,庫存表,圖片表,日志表。

14.項目中用的注解開發還是手動注入?分別如何實現?為什么?

答:注解開發,在類、屬性、方法上寫注解。因為項目中需要配置的太多,用注解可以簡化開發。

15.錯誤日志的處理?項目中的日志文件存在哪里?保存多長時間?

答:看日志大小存放, 一般是15天或者30天。存放在一個單獨的服務器目錄。

16.生產環境與開發環境在上線部署的時候應該如何配置?

答:生產環境:

1、上線之前備份之前的項目

2、修改上線項目的相關配置

3、關停服務

4、替換之前的項目

5、啟動服務,觀察日志,是否異常

17.開發時數據庫中數據從哪來?數據量有多大?

答:開發時數據庫數據部分來自客戶或者運營,部分自己添加,部分來自網絡爬蟲扒的數據。

18.如何保證庫存?

答:用mq+redis

19.如果日志存儲量過大如何處理?

答:定期清除日志,日志一般存放在另一台服務器上15-30天清理一次。

20.在項目開發過程中如何進行測試?壓力測試如何做?

答:對自己所負責模塊進行單元測試,然后交給公司測試人員進行測試。一般壓力測試都是測試人員做,Visual Studio 自帶的工具,還有Loader RunnerLR),輕量級的工具有Apache項目中的ApacheBench

21.項目的並發量有多大?用了多少台服務器?

答:並發量500-1000,服務器數量一般是10-20台左右,具體數量看圖

 

22.在項目中,是如何分配開發任務的?

答:開會時,由項目經理與組長分配到個人需要負責開發的功能模塊。

23.項目中的技術選型的依據是什么?

答:1.什么技術更適合當前項目的業務需求,例如互聯網項目查詢條件比較多,數據庫框架選用mybatis;傳統項目查詢條件比較單一,選用hibernate比較合適。

2.如果兩個技術都適用於項目,就看架構師更熟悉哪個技術,因為如果大部分開發人員都不會,企業會負擔很高的學習成本。

24.項目的安全問題是如何解決的?

答:單點登錄用token來校驗。或者可以說有專門負責項目安全的人員。或者說花錢買服務。

環境安全:初期通過購買雲服務

程序安全;token +簽名

25.用戶分為幾種?每種所對應的權限?權限具體是如何實現的?

答:一般后天項目中普通用戶、普通管理員、超級管理員。用shiro框架具體實現。

普通用戶:訪問普通管理員:管理后台信息超級管理員:所有權限。

26.電商項目是否上線?用戶量有多少?

答:可以說上線(找一個地方性的小型電商網站)或者測試沒有完成,項目還沒有上線。可以說用戶量有日活量:幾千。

27.商品的屬性是如何進行存儲的?

答:需要存儲到商品表,商品詳情表,庫存表,日志表等。

28.工作之余有沒有在研究一些流行的技術?

答:有,再看一些技術博客。比如說跨域,如何解決高並發,不同系統之間的通信。

29.在項目中如何實現頁面跳轉並把當前頁面數據傳遞到跳轉頁面?

答:把要傳遞的數據放在request域中(轉發)。

30.所負責模塊的查詢都有那些條件?那些是靜態條件、哪些是動態條件?

答:商品的價格區間,商品的品牌,商品的分類,型號,顏色,大小,男/女,商品名稱。

靜態條件:商品的價格區間,商品的品牌,商品的分類,型號,顏色,大小,男/

動態條件:商品名稱,商品類型

31.所負責模塊中刪除數據的時候直接刪除就可以么?如果不是需要做哪些操作?

答:如果單表的可以進行邏輯刪除,不會進行物理刪除。級聯刪除,刪除該條數據不影響到其他表中的數據就可以直接刪除,否則要進行級聯刪除,這里也是指的邏輯刪除。

32.支付是如何做的?

答:與支付寶、微信對接,下載它們兩個的SDKjar包),需要配置公鑰與私鑰,進行對接,根據官方文檔的API調用相關支付的借口接收回調信息(成功或失敗)。進一步做自己的業務邏輯操作

33.表是如何設計的?

:可以說是項目經理或者架構師設計的。自己所負責模塊可以根據項目需求來設計有哪些字段,需要關聯到哪些表。盡量推行單表設計,不定義外鍵約束。

34.面向服務通過什么樣的方式實現?

答:soa架構,表現層與服務層分離,用dubbozookeeper搭配完成。

35.如何提高代碼質量?在項目中如何優化代碼?

答:盡量減少不必要的操作,盡量不要用到三層以上的for循環與遞歸。寫代碼的時候要給關鍵代碼寫上注釋。相同功能的代碼進行抽取,抽取原則不影響功能的正常運行。

36.商品的審核如何做的?

答:添加或者修改,商品的價格以及庫存等重要信息要進行二次填寫,以保證准確率。

前台js校驗,后台java代碼校驗。

37.在項目中如何調試bug

答:1.dug方式運行項目,打斷點調試。2.查看項目中的錯誤日志。3.測試人員使用專業測試工具進行測試。4.運行腳本對代碼進行測試。

38.查詢商品的時候如果redis沒有數據,可以拋異常么?如果不可以如何做?

答:不可以用throws拋異常,可以用trycatch捕獲異常。因為在redis中查詢不到數據,還要對數據庫進行查詢,如果throws拋異常則不能按正常業務運行。

39.購物車如何實現的?未登錄可以用購物車么?購物車的存儲?

答:購物車有三種。1.存放在Cookie2.放在緩存里面。3.放到數據庫里面。

未登錄的時候可以放在cookie中,但是有的電商網站針對未登錄用戶不提供購物車功能。(例如天貓、淘寶添加商品到購物車的時候必須先登錄)

40.購物車里面商品種類可以無限添加么?同一種商品的數量有限制么?

答:不可以,京東最多只可以添加八十種(足夠使用了),避免占用太多存儲空間;商品數量根據商品類型來控制,一般不超過200種。

41.如果庫存數量少於購物車用戶添加的數量如何處理?

答:每次用戶訪問購物車的時候,都發送ajax請求查詢一遍redis或者數據庫,如果存庫數量少於購物車中商品數量,發送消息進行提示,並做相應修改。

42.生成訂單具備的條件?如何保證這些條件?

答:商品數量不能超過限制數量和庫存數量。限制數量在前台用js校驗,后台查詢數據庫校驗庫存。

 

43.首頁展示的輪播圖,在頁面中是如何存放的?在數據庫中是如何存放的?

答:頁面中存放的是圖片地址,在數據庫中存放的也是圖片的地址。圖片存放在另一台服務器上面。

44.用戶地址是如何保存實現的?(具體)

答:用戶的地址是單獨存放在一張數據庫表中的,需要綁定用戶的id,還需要設置默認路徑。

45.在電商項目中如何針對不同的用戶做推送?

答:對用戶的瀏覽內容做一下記錄,然后在頁面的下方或者右方做商品的推送。還有一種就是針對用戶購物車或者關注商品做促銷信息推送  

46.如何遷移數據庫(mysql)?

答:這里介紹的是mysql數據庫,如果被問到其他的可以說只知道mysql的。

1.數據庫直接導出,拷貝文件到新服務器,在新服務器上導入。

2.使用【MySQL GUI Tools】中的 MySQLMigrationTool

3.數據文件和庫表結構文件直接拷貝到新服務器,掛載到同樣配置的MySQL服務下。

我在我的電腦上用虛擬機測試后,選中了占用時間最少的第三種方案。下面是三種方案的對比:第一種方案的優點:會重建數據文件,減少數據文件的占用空間。
      第一種方案的缺點:時間占用長。(導入導出都需要很長的時間,並且導出后的文件還要經過網絡傳輸,也要占用一定的時間。)

  第二種方案的優點:設置完成后傳輸無人值守
     第二種方案的缺點:設置繁瑣。傳輸中網絡出現異常,不能及時的被發現,並且會一直停留在數據傳輸的狀態不能被停止,如不仔細觀察不會被發現異常。 傳輸相對其他fang時間長。 異常后很難從異常的位置繼續傳輸。

   第三種方案的優點:時間占用短,文件可斷點傳輸。操作步驟少。(絕大部分時間都是在文件的網絡傳輸) 
     第三種方案的缺點:可能引起未知問題,暫時未發現。

47.服務器宕機如何處理?全部宕機如何處理?

答:配置主從服務器,運維人員搭建集群后,從服務器會給主服務器發送信息,如果主服務器沒有響應,那就啟用從服務器。一般不會全部宕機,如果全部掛掉,就重啟。

48.一件商品只有2件,現在被他人購買一件,這邊如何修改當前用戶的商品信息?

答:這個考察的是對庫存的安全校驗。商品上架多少 庫存  講庫存緩存在redis    下單 就在redis  減少,異步 在庫存數據庫中也減少商品 查詢只查詢redis  中的  商品庫存更新后 更新redis  庫存;在用戶點擊添加到購物車按鈕時,發送ajax查詢redis

dubbo服務開發流程,運行流程?zookeeper注冊中心的作用?端口是多少?

答:dubbo主要是發布服務和調用服務。

使用流程:

第一步:要在系統中使用dubbo應該先搭建一個注冊中心,一般推薦使用zookeeper

第二步:有了注冊中心然后是發布服務,發布服務需要使用spring容器和dubbo標簽來發布服務。並且發布服務時需要指定注冊中心的位置。

第三步:服務發布之后就是調用服務。一般調用服務也是使用spring容器和dubbo標簽來引用服務,這樣就可以在客戶端的容器中生成一個服務的代理對象,在action或者Controller中直接調用service的方法即可。

Zookeeper注冊中心的作用主要就是注冊和發現服務的作用。類似於房產中介的作用,在系統中並不參與服務的調用及數據的傳輸。

 

 

49.******消息中間件acitveMQ的作用、原理?幾種模式,每種的特點及使用問題?MQ發送消息失敗怎么辦?

答:Activemq的作用就是系統之間進行通信。當然可以使用其他方式進行系統間通信,如果使用Activemq的話可以對系統之間的調用進行解耦,實現系統間的異步通信。原理就是生產者生產消息,把消息發送給activemqActivemq接收到消息,然后查看有多少個消費者,然后把消息轉發給消費者,此過程中生產者無需參與。消費者接收到消息后做相應的處理和生產者沒有任何關系。

Activemq有兩種通信方式,點到點形式和發布訂閱模式。如果是點到點模式的話,如果消息發送不成功此消息默認會保存到activemq服務端知道有消費者將其消費,所以此時消息是不會丟失的。如果是發布訂閱模式的通信方式,默認情況下只通知一次,如果接收不到此消息就沒有了。這種場景只適用於對消息送達率要求不高的情況。如果要求消息必須送達不可以丟失的話,需要配置持久訂閱。每個訂閱端定義一個id,在訂閱是向activemq注冊。發布消息和接收消息時需要配置發送模式為持久化。此時如果客戶端接收不到消息,消息會持久化到服務端,直到客戶端正常接收后為止。

50.Tomcat集群中怎么實現共享

答:用dubbozookeeper配合來實現tomcat共享。

1,tomcat自身提供的session集群共享

2,編寫tomcatsession插件對session進行存儲

3,使用javaweb規范中的filterrequest對象的getSessio()進行攔截替換實現集群共享

51.前台做過靜態頁面么?Freemark如何生成靜態頁面?生成模板的命令?

答:做過。

第一步:創建一個Configuration對象,直接new一個對象。構造方法的參數就是freemarker對於的版本號。

第二步:設置模板文件所在的路徑。

第三步:設置模板文件使用的字符集。一般就是utf-8.

第四步:加載一個模板,創建一個模板對象。

第五步:創建一個模板使用的數據集,可以是pojo也可以是map。一般是Map

第六步:創建一個Writer對象,一般創建一FileWriter對象,指定生成的文件名。

第七步:調用模板對象的process方法輸出文件。

第八步:關閉流。

@Test

public void genFile() throws Exception {

// 第一步:創建一個Configuration對象,直接new一個對象。構造方法的參數就是freemarker對於的版本號。

Configuration configuration = new Configuration(Configuration.getVersion());

// 第二步:設置模板文件所在的路徑。

configuration.setDirectoryForTemplateLoading(new File("D:/workspaces-itcast/term197/e3-item-web/src/main/webapp/WEB-INF/ftl"));

// 第三步:設置模板文件使用的字符集。一般就是utf-8.

configuration.setDefaultEncoding("utf-8");

// 第四步:加載一個模板,創建一個模板對象。

Template template = configuration.getTemplate("hello.ftl");

// 第五步:創建一個模板使用的數據集,可以是pojo也可以是map。一般是Map。

Map dataModel = new HashMap<>();

//向數據集中添加數據

dataModel.put("hello", "this is my first freemarker test.");

// 第六步:創建一個Writer對象,一般創建一FileWriter對象,指定生成的文件名。

Writer out = new FileWriter(new File("D:/temp/term197/out/hello.html"));

// 第七步:調用模板對象的process方法輸出文件。

template.process(dataModel, out);

// 第八步:關閉流。

out.close();

}

 

52.什么是存儲過程?好處?

答:存儲過程可以說是一個記錄集吧,它是由一些T-SQL語句組成的代碼塊,這些T-SQL語句代碼像一個方法一樣實現一些功能(對單表或多表的增刪改查),然后再給這個代碼塊取一個名字,在用到這個功能的時候調用他就行了。

好處:1.由於數據庫執行動作時,是先編譯后執行的。然而存儲過程是一個編譯過的代碼塊,所以執行效率要比T-SQL語句高。2.一個存儲過程在程序在網絡中交互時可以替代大堆的T-SQL語句,所以也能降低網絡的通信量,提高通信速率。3.通過存儲過程能夠使沒有權限的用戶在控制之下間接地存取數據庫,從而確保數據的安全。

53.Shiro如何進行權限控制?

答:1.通過瀏覽器訪問路徑,配置文件查看,是否需要認證等,如果不需要,直接訪問controller

2.如果需要認證,通過配置文件的loginUrl,跳到這個地址,輸入用戶名、密碼等

3.登錄1.訪問自定義的form表單過濾器FormAuthenticationFilter(自己起的名字和shiro一樣了,所以。。)的createToken方法,裝配token;如果沒有自定義表單過濾器,默認的FormAuthenticationFilter會自動裝配表單token2.訪問自定義realms的認證方法doGetAuthenticationInfo(),查庫(或者緩存),判斷用戶名和密碼是否正確。

4.如果登錄之后訪問的url,通過配置文件里的配置需要權限:調用自定義realms的授權方法:doGetAuthorizationInfo(),查庫(或者緩存),查出用戶權限,判斷是否擁有權限,沒權訪問,跳到響應的refuse配置的路徑,有權訪問,跳到響應的url

54.solr的原理?分詞器的原理?如何設置高亮顯示?

答:Solr是基於Lucene開發的全文檢索服務器,而Lucene就是一套實現了全文檢索的api,其本質就是一個全文檢索的過程。全文檢索就是把原始文檔根據一定的規則拆分成若干個關鍵詞,然后根據關鍵詞創建索引,當查詢時先查詢索引找到對應的關鍵詞,並根據關鍵詞找到對應的文檔,也就是查詢結果,最終把查詢結果展示給用戶的過程。

IK分析器的分詞原理本質上是詞典分詞。現在內存中初始化一個詞典,然后在分詞過程中逐個讀取字符,和字典中的字符相匹配,把文檔中的所有的詞語拆分出來的過程。

55.秒殺功能能否與正常的商品購買放在同一台服務器上?

答:可以,但是盡量不要這么做。因為秒殺商品,搶購的用戶會比較多,並發量過高容易引起宕機,導致正常購買商品功能也不能正常使用,所以建議放在不同服務器上。

56.redis是內存數據庫,如果宕機了,如何解決數據丟失的問題?

答:方案一:redis擁有兩種不同形式的持久化方法,它們都可以用小而緊湊的格式將存儲在內存中的數據寫入硬盤:第一種持久化方法為時間點轉儲,轉儲操作既可以在“指定時間段內有指定數量的寫操作執行”這一條件被滿足時執行,又可以通過條用兩條轉儲到硬盤中命令中的任何一條來執行;第二種持久化方法將所有修改了數據庫的命令都寫入一個只追加文件里面,用戶可以根據數據的重要程度,將只追加寫入設置為從不同步、每秒同步一次或者每寫入一個命令就同步一次。

方案二:使用redis集群。Redis實現了主從復制的特性:執行復制的從服務器會連接上主服務器,接受主服務器發送的整個數據庫的初始副本;之后主服務器執行的寫命令,都會被發送給所有連接着的從服務器去執行,從而實時地更新從服務器的數據集。因為從服務器包含的數據會不斷地進行更新,所以客戶端可以向任意一個從服務器發送讀請求,以此來避免對主服務器進行集中式的訪問。

57.商品存入數據庫怎么保證數據庫數據安全?

答:設置后台用戶的權限,並對數據庫修改做好記錄(日志),保證責任到人。

58.項目中商品小圖片點開后,單品頁面是大圖片,這些圖片是如何處理的?

答:在小圖片上設置連接,點擊小圖片后,加載大圖片

62.項目中的網絡安全是怎么做的?

答:設置防火牆,買服務。

63.solr優化怎么實現?

答:http://blog.csdn.net/kuyuyingzi/article/details/17651451

64concurrent這個包有什么特性?

答:http://blog.csdn.net/defonds/article/details/44021605/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM