1. 程式人生 > >C++程式設計師面試總結

C++程式設計師面試總結

  • 關係型資料庫:儲存的是具有格式化資料結構的資料;
  • mysql的兩種主要儲存引擎:Myisam和InnoDB(預設)。基本只要你寫會用mysql,這個問題是必問的。myisam是不支援事務安全的,但是插入速度非常快,innoDB支援事務安全,但是插入速度相對較低。像12306這種涉及交易的網站,肯定會用到事務的。 具體可以看看視訊的講解:http://www.iqiyi.com/w_19rr0jh7o1.html
  • 事務、事務特點:事務是一個整體,不能分割,比如A向B轉賬100:A-100,B+100,這兩步要一起執行。一起成功、一起失敗。所以事務的特點是:ACID–原子性、一致性、隔離性、永續性。簡單理解一下,原子性就是指一個事務要麼執行,要麼不執行;一致性是指事務的執行並不改變資料庫中資料的一致性;隔離性是指兩個以上的事務不會出現交錯執行的狀態,比如一個事務的操作結果不會讓另外一個事務看到,直到完成;永續性是指事務執行成功以後,吃持久化儲存的,不會無緣無故的回滾。
  • 正規化:1正規化–每一列不可分割;2正規化–非主屬性完全依賴於主屬性;3正規化:每一列資料都和主鍵直接相關,不能傳遞依賴於主鍵;
  • 資料庫查詢優化的常用技巧:(1)索引:優點是讀速度快;帶來的缺點是體積變大、插入效能變差(需要建立索引);(2)快取配置(快取查詢語句,快取查詢資料);(3)分庫分表,分表又分為垂直和水平拆分; (4)子查詢優化。參考:http://blog.csdn.net/zwan0518/article/details/11972853
  • 資料庫中高併發出現的悲觀鎖和樂觀鎖,悲觀鎖假設衝突率相當高,直接佔有;而樂觀鎖假設衝突不是很高,讀的時候有一個版本號,如果寫的時候版本號與讀取的版本號不一致,表示已經被人修改過,樂觀鎖可以用版本號和時間戳來實現。參考:
    http://www.cnblogs.com/Bob-FD/p/3352216.html
  • where 1=1和where 1=0語句的作用:where 1=1是在表單提交中如果有多個查詢條件在拼湊sql語句時如果沒有填查詢條件時可能會出異常,這個語句規範了sql語句。 where 1=0,這個語句恆為false,表示不返回結果集,節省了記憶體,可以用於快速建表,比如:create table newtable as select * from oldtable where 1=0; 參考:http://www.cnblogs.com/junyuz/archive/2011/03/10/1979646.html
  • 資料庫連線池:客戶端呼叫資料庫提供的服務,需要建立到資料庫的tcp連結,然而建立連結是很耗時的,所以,我們可以使用一個池子(容器)來儲存這些連線,客戶端需要連線的時候,從連線池裡取出可用連線即可,用完的時候,把連線放回池子就可以了。參考:
    http://it.deepinmind.com/db/2014/05/04/the-anatomy-of-connection-pooling.html
  • 儲存過程:我們常用的操作資料庫語言SQL語句在執行的時候需要要先編譯,然後執行,而儲存過程(Stored Procedure)是一組為了完成特定功能的SQL語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給定引數(如果該儲存過程帶有引數)來呼叫執行它。優點是:靈活、可程式設計、執行速度快(預編譯)、減少網路流量等。參考:http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html
  • 左連線、右連線、等值連線:left join,會把左表中的資料全部顯示出來,如果右表中有相等的也顯示出來,沒有的話,顯示為NULL。右連線同樣道理。等值連線是隻取相等的。參考:http://blog.csdn.net/wyzxg/article/details/7276979