1.項目週期?html
答:傳智所學項目的業務邏輯不夠複雜,模塊也很少,因此建議項目週期爲5-8個月。前端
2.項目團隊有多少人,如何分配的?java
答:項目團隊通常由6-10我的組成,4-5我的是java後臺的,1-2個是前端,2個產品。mysql
3.在項目中充當什麼樣的角色?web
答:在項目中的職位是組員或者組長,主要負責開發功能模塊,後期配合測試修改bug。ajax
看工做時間與入職的時間,在一家公司入職時間少於1年而且從事開發少於2年不多有機會擔任小組領導redis
4.項目中遇到的最大的問題是什麼?spring
答:這種問題不要說通常的錯誤,儘可能說業務上的問題。例如:單點登陸的時候如何解決多系統之間用戶登陸信息同步以及用戶信息共享;登陸須要發送短信驗證碼的時候如何保證消息到達率是100%;如何實現redis與數據庫信息同步;開發環境程序正常,生產環境程序bugsql
等。數據庫
5.如何保證所負責與需求相符合?
答:在作模塊以前,與產品經理肯定好需求,再與項目負責人肯定好技術選型應用,在開發過程當中遇到業務問題與產品經理和項目負責人及時溝通。
6.你以爲作商品模塊(首頁展現、輪播圖、購物車、單點登陸、訂單)時的難點在哪裏?
答:商品模塊:添加或者修改商品時,數據庫、redis、靜態頁面如何同步信息。
購物車:添加的商品數量與庫存數量的對比。商品價格變更同步。購物車的存儲。
單點登陸:如何進行多系統之間的信息交互。(主要指驗證登陸信息 )子系統如何保證登陸信息的安全。
訂單:商品數量與庫存的同步,商品價格的準確性。提交訂單的方式,如何驗證訂單。
7.所負責模塊裏有哪些功能?(不要上來就說增刪改查)
答:商品模塊的功能:添加商品時,商品圖片的上傳以及存儲,商品價格確保準確性,商品的上下架。也能夠簡單介紹下查詢的各類條件或刪除的各類條件。以及商品信息同步(數據庫、redis、靜態頁面等),商品id的生成規則。
8.在項目開發過程當中遇到不會的功能是如何處理的?
答:技術問題:首先是谷歌,在網上查看各類資料以及博客。其次是與同事交流。最後再去找領導。
業務問題:業務問題首先找經理溝通,技術問題首先google百度
9.項目中前臺與後臺是如何進行數據交互的?
答:ajax,http請求,socket。
10.如何實現數據庫與redis同步?
答:用消息隊列mq實現。具體操做是在添加或者修改數據的時候,用mq來同步到數據庫與redis,加上事務,確保reids與數據庫數據一致。
11.在項目開發過程當中還有哪些工做內容?
答:與項目經理去客戶公司肯定用戶需求,與同事配合完成單元測試,與測試人員配合完成測試並修改bug,bug提交
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 Runner(LR),輕量級的工具備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.支付是如何作的?
答:與支付寶、微信對接,下載它們兩個的SDK(jar包),須要配置公鑰與私鑰,進行對接,根據官方文檔的API,調用相關支付的藉口,接收回調信息(成功或失敗)。進一步作本身的業務邏輯操做。
33.表是如何設計的?
答:能夠說是項目經理或者架構師設計的。本身所負責模塊能夠根據項目需求來設計有哪些字段,須要關聯到哪些表。儘可能推行單表設計,不定義外鍵約束。
34.面向服務經過什麼樣的方式實現?
答:soa架構,表現層與服務層分離,用dubbo和zookeeper搭配完成。
35.如何提升代碼質量?在項目中如何優化代碼?
答:儘可能減小沒必要要的操做,儘可能不要用到三層以上的for循環與遞歸。寫代碼的時候要給關鍵代碼寫上註釋。相同功能的代碼進行抽取,抽取原則不影響功能的正常運行。
36.商品的審覈如何作的?
答:添加或者修改,商品的價格以及庫存等重要信息要進行二次填寫,以保證準確率。
前臺js校驗,後臺java代碼校驗。
37.在項目中如何調試bug?
答:1.以dug方式運行項目,打斷點調試。2.查看項目中的錯誤日誌。3.測試人員使用專業測試工具進行測試。4.運行腳本對代碼進行測試。
38.查詢商品的時候若是redis沒有數據,能夠拋異常麼?若是不能夠如何作?
答:不能夠用throws拋異常,能夠用trycatch捕獲異常。由於在redis中查詢不到數據,還要對數據庫進行查詢,若是throws拋異常則不能按正常業務運行。
39.購物車如何實現的?未登陸能夠用購物車麼?購物車的存儲?
答:購物車有三種。1.存放在Cookie。2.放在緩存裏面。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的話能夠對系統之間的調用進行解耦,實現系統間的異步通訊。原理就是生產者生產消息,把消息發送給activemq。Activemq接收到消息,而後查看有多少個消費者,而後把消息轉發給消費者,此過程當中生產者無需參與。消費者接收到消息後作相應的處理和生產者沒有任何關係。
Activemq有兩種通訊方式,點到點形式和發佈訂閱模式。若是是點到點模式的話,若是消息發送不成功此消息默認會保存到activemq服務端知道有消費者將其消費,因此此時消息是不會丟失的。若是是發佈訂閱模式的通訊方式,默認狀況下只通知一次,若是接收不到此消息就沒有了。這種場景只適用於對消息送達率要求不高的狀況。若是要求消息必須送達不能夠丟失的話,須要配置持久訂閱。每一個訂閱端定義一個id,在訂閱是向activemq註冊。發佈消息和接收消息時須要配置發送模式爲持久化。此時若是客戶端接收不到消息,消息會持久化到服務端,直到客戶端正常接收後爲止。
50.Tomcat集羣中怎麼實現共享
答:用dubbo與zookeeper配合來實現tomcat共享。
1,tomcat自身提供的session集羣共享
2,編寫tomcat的session插件對session進行存儲
3,使用javaweb規範中的filter對request對象的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/