高階軟體工程師(面試題)
高階軟體工程師(面試題)
出題者:netkiller
出處:http://www.netkiller.cn/
高階軟體工程師
下面的面試題不分語言,適用於所有程式語言,更多偏向設計。
設計一個分類功能
該功用於行政區域劃分,商品分類,等等 例如中國->廣東-深圳 .....
要求:
- 無限極分類,層次深度不限
- 快速檢索,不能使用遞迴
- 只能使用一個數據庫表實現
- 可以生成樹形目錄
商品以及屬性功能的設計
一個商品有很多屬性,例如尺寸,顏色這些屬性有固定的值,而另一些屬性如重量,體積是需要填寫具體數值的,並且還有對應的單位。
要求:
- 商品分類(上一個問題中已經實現)
- 商品屬性,有多個屬性,且數目不確定,所以需要設計成可以無限新增
- 商品屬性即可下拉選擇,也可以填寫具體數值
問題:
- 商品搜尋怎麼解決,包含商品名稱,屬性,屬性值,描述的搜尋
- 商品的庫存怎麼設計
- 分類搜尋,怎樣列出所有子分類以及子分類下的所有分類(無限深度)
使用者註冊的功能需求
場景模擬: 使用者開戶註冊時常常填寫了一部分資料,就離開了,有幾種情況
- 使用者放棄註冊
- 網路連線失敗
- 提交出錯
- 其他連結吸引了使用者點選
等等原因......
需求:
- 要求記錄使用者填寫資料,再次回來(數日/數月後)點選註冊的時候,使用者不用重新填寫所有資料,只需完成未完成的部分即可。
- 重要資料例如手機,電郵,即時通訊號碼等等需要記錄到資料庫,已被公司回訪客戶。
- 在使用者成功註冊後應該刪除之前保留在資料庫中的手機,電郵,即時通訊等等。
請問如何實現?資料怎樣儲存?
事務處理相關
簡述什麼是事務處理?
在不能使用資料庫的事務處理以及鎖(表鎖/行級鎖)時,怎麼保持資料一致性?怎麼解決資料庫併發操作?
- 怎樣解決避免多個使用者讀讀取同一條資料記錄?
- 怎樣避免多個使用者更新同一條資料
模擬題一
例如有一個電商網站每個小時有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框架
- 框架分為幾個部分?
- 採用什麼協議與框架通訊?
- 如果考慮到效能使用二進位制協議你怎樣實現?
- 如何解決併發衝突?
- 如何支援事務?
- 你怎樣與訊息佇列整合或者通訊?
口述設計一個分散式計劃任務系統
背景:計劃任務即週期或定時執行的程式,我們要解決單點故障問題與負載均衡的問題,在一個分散式系統中單節點是不允許的。
設計要求:能夠實現高可用,負載均衡,橫向擴充套件
- 怎樣處理同時執行產生的衝突問題?
- 怎樣排隊執行?
- 任務如何持久化?
- 一個節點宕機,另一個節點怎麼接管沒有完成的任務?
- 如何橫向擴充套件?
- 擴充套件,收縮,維護如果能做到不停機,不影響業務?