高級軟件工程師(面試題) java
出題者:netkiller面試
出處:http://www.netkiller.cn/ajax
高級軟件工程師
下面的面試題不分語言,適用於全部編程語言,更多偏向設計。數據庫
設計一個分類功能
該功用於行政區域劃分,商品分類,等等 例如中國->廣東-深圳 .....編程
要求:windows
- 無限極分類,層次深度不限
- 快速檢索,不能使用遞歸
- 只能使用一個數據庫表實現
- 能夠生成樹形目錄
商品以及屬性功能的設計
一個商品有不少屬性,例如尺寸,顏色這些屬性有固定的值,而另外一些屬性如重量,體積是須要填寫具體數值的,而且還有對應的單位。瀏覽器
要求:緩存
- 商品分類(上一個問題中已經實現)
- 商品屬性,有多個屬性,且數目不肯定,因此須要設計成能夠無限添加
- 商品屬性便可下拉選擇,也能夠填寫具體數值
問題:安全
- 商品搜索怎麼解決,包含商品名稱,屬性,屬性值,描述的搜索
- 商品的庫存怎麼設計
- 分類搜索,怎樣列出全部子分類以及子分類下的全部分類(無限深度)
用戶註冊的功能需求
場景模擬: 用戶開戶註冊時經常填寫了一部分資料,就離開了,有幾種狀況服務器
- 用戶放棄註冊
- 網絡鏈接失敗
- 提交出錯
- 其餘連接吸引了用戶點擊
等等緣由......
需求:
- 要求記錄用戶填寫資料,再次回來(很多天/數月後)點擊註冊的時候,用戶不用從新填寫全部資料,只需完成未完成的部分便可。
- 重要資料例如手機,電郵,即時通信號碼等等須要記錄到數據庫,已被公司回訪客戶。
- 在用戶成功註冊後應該刪除以前保留在數據庫中的手機,電郵,即時通信等等。
請問如何實現?資料怎樣保存?
事務處理相關
簡述什麼是事務處理?
在不能使用數據庫的事務處理以及鎖(表鎖/行級鎖)時,怎麼保持數據一致性?怎麼解決數據庫併發操做?
- 怎樣解決避免多個用戶讀讀取同一條數據記錄?
- 怎樣避免多個用戶更新同一條數據
模擬題一
例若有一個電商網站每一個小時有100個用戶下單,公司須要有10個客服處理用戶的訂單。
問題:
- 當10位員工進入admin後臺,查看訂單會出現什麼問題?
- 怎樣防止一個訂單被一個以上的人看到?
- 若是兩個員工同事看到同一個個訂單,怎樣避免員工,重複審批同一張訂單?
- 若是訂單X最早被員工A點開,這是員工A去忙其餘事情,X定點就會一直掛起,怎樣將訂單從新分配?
開發框架
- 簡述 MVC 原理以及實現
- 怎樣實現 URL 路由
- 怎樣實現類,方法訪問權限控制
請問下面代碼怎麼實現?
用你最熟悉的語言實現。
{% highlight java %}
DB db = new DB() db.select(new field("name","age"...)).from("user").where(new And("xxx=xx", "xxx=xxx")).limit(10).offset(10).orderby("id",DESC)
{% endhighlight %}
進程與多線程
- 什麼是阻塞,什麼是非阻塞?
- 什麼是同步,什麼是異步?
- 什麼狀況下使用線程鎖?
- 進程與線程的區別?
- 進程間通訊有那幾種,線程通訊有那幾種,以及各自的優點?
消息隊列
消息有哪些瓶頸?
序列化
- 什麼是序列化
- 經常使用序列化方式都有哪些
CDN應用
- CDN 緩存的原理?
- CDN 均可能緩存那些內容?
- 網站首頁90%的內容是靜態的,可是用戶登陸狀態,消息狀態是動態的怎麼解決?
- JSON 可能緩存嗎?
- 瀏覽器緩存與CDN緩存的關係,怎樣實現用戶瀏覽器與CDN同時緩存?
面向對象試題?
編寫一個求和程序
s = new Sum();
s.add(10).add(5).add(6)
s.add(10).add(5).add(6)......add(3) 能夠無限的寫下去
obj = new Object()
obj.a()
obj.b()
obj.c()
...
...
obj.z()
obj.a().b().c() ... z()
與上面相似
這是 一個簡單的 OOP 面試題,在作多年的面試經驗中,發現不少人不知道怎樣實現上面的問題
Restfull 試題
Restfull 是基於HTTP協議的RPC系統,對於公共服務不存在安全上面的考慮,調用方法也可能是ajax,因此公共系統是開放的。
若是是私有服務,就須要考慮安全問題了,試題以下:
CQRS 問題
- 什麼是 CQRS
- 能夠在那些地方處理 CQRS
請爲 Restful 增長 HTTP Auth
- 怎樣爲 Restful 增長 HTTP 認證
- 增長 http 認證有哪些方式
- 用戶與密碼安全嗎?
使用 SSL 加密 Restful
- 購買的證書與本身生成的證書有什麼區別
- SSL 怎樣配置,在哪裏配置
- 訪問 SSL 的 Restful 須要注意什麼
數據庫應用
數據庫分割問題
- 什麼是順平分割,什麼是垂直分割
- 分表,分庫有須要主要那些事項
- 分表,分庫後怎麼解決誇庫查詢
- 分表,分庫後怎麼建立索引
數據庫複製問題
- 數據庫複製有哪幾種?
- 簡述主從複製,主主複製,環形複製
- 當選擇主從複製是軟件開發上有哪些注意事項
- 主主如何應用
軟件彈性設計
編譯語言的彈性設計問題
背景模擬: 有一個電商平臺已經開發完畢,編譯打包,上線,運營。 因爲市場瞬息萬變,原有的打折系統設計已經不能知足如今的需求,若是不修改可會會給公司帶來經濟隨時。 如今須要從新修改程序邏輯,但問題來了。目前正在作推廣促銷活動,系統訪問量大不能中斷現有服務,哪怕30都會給公司帶來不可挽回的損失。
個人問題:
- 怎樣在這個系統的設計之初解決後面遇到的問題
- 如何設計一個彈性打折系統
- 在不重啓的狀況下怎樣改編編譯語言的內部運行邏輯
問題延伸: 這個問題能夠延伸到蘋果IOS,例如發佈app到蘋果appstore至少須要半個月,半個月可能存在不少變數,極可能應用被審批經過,程序已經不在適合當前的狀況了。
高可用設計
- 什麼是高可用
- 什麼是雙機熱備,雙機熱備有那些缺陷
- 什麼是雙活
- 請簡述實現軟件高可用要考慮那些因素
軟件設計中的災備問題
請簡述設計一個遠程異地災備系統
- 兩個機房怎樣設計災備系統
- 三個機房怎樣設計災備系統
- 跨境狀況須要考慮那些影響因素
軟件災備開發問題
- 數據庫怎樣實現災備
- 緩存怎樣實現災備
- 應用服務器怎樣實現災備
- Web 服務器怎樣實現災備
- 計劃任務、定時週期運行的程序怎樣災備
- 消息隊列怎樣實現災備
- 雙活的軟件怎樣實現同一時刻只能一個運行,或者交替運行
軟件部署問題
- 怎樣實現軟件自動化部署,實現自動化部署的關鍵幾點是什麼?
- 怎樣處理配置文件
- 怎樣排除沒必要要或者不但願部署的文件
- 怎樣實現增量部署
- 怎樣實現差別部署
- 怎樣部署大文件,例如視頻等。問題:有一個文件有500M,內容隨時有修改,也會不按期追加,怎樣實現差別部署,而不是再次發佈一個500M的文件。
- 怎樣部署編譯軟件
- 怎樣備份
- 怎樣部署windows程序
- 怎樣快速回撤,切換時間點或者指定的版本。
以上不容許使用GIT/SVN實現自動部署。要求自動化不是在30秒內完成。
軟件開發框架
插件的實現原理
- 插件有幾部分組成
- 如何實現插件安裝,卸載,啓用,禁用?
- 安裝,卸載,啓用,禁用怎樣實現不停機,不關閉服務的狀況進行?
口述如何設計一個MVC框架
- 怎樣實現 URL 路由
- 怎樣實現控制器
- 怎樣實現視圖
- 怎樣實現模型
口述如何設計一個SOA框架
- 框架分爲幾個部分?
- 採用什麼協議與框架通訊?
- 若是考慮到性能使用二進制協議你怎樣實現?
- 如何解決併發衝突?
- 如何支持事務?
- 你怎樣與消息隊列集成或者通訊?
口述設計一個分佈式計劃任務系統
背景:計劃任務即週期或定時運行的程序,咱們要解決單點故障問題與負載均衡的問題,在一個分佈式系統中單節點是不容許的。
設計要求:可以實現高可用,負載均衡,橫向擴展
- 怎樣處理同時運行產生的衝突問題?
- 怎樣排隊運行?
- 任務如何持久化?
- 一個節點宕機,另外一個節點怎麼接管沒有完成的任務?
- 如何橫向擴展?
- 擴展,收縮,維護若是能作到不停機,不影響業務?