1. 程式人生 > >記一次電話面試的題目

記一次電話面試的題目

ports tps prop 整理 怎麽 說了 構造 語句 htm

昨天下午六點正準備關電腦下班去和對象約定好的地方吃飯的時候,突然接到了一個電話面試邀請,於是內心快速糾結了一下,還是同意了這次電話邀約(其實內心是拒絕的,但是轉念一想剛好通過這個電話面試對自己查漏補缺),聊了接近一個小時的通話,公司的人都走的差不多了。別的不多說了,下面就整理下面試題吧。(文末公布下lz是怎麽解決晚飯······聰明的你們應該能猜到結局了)

1.自我介紹 2.為什麽離職

這些不關技術的事情我就不敘述了(把lz的經歷的公司都問了個遍,就問為什麽離職。。。好煎熬)

下面正式切入技術問題,只記了個大概,暫且寫出來,並附上答案(只是lz拙見,不做深入探討)。

3.集合HashMap、HashTable、ConcurrentHashMap區別

面試官:你了解集合嗎?

lz:了解呀!

面試官:說說HashMap、HashTable有什麽不同?

lz:首先最大的不同就是HashMap線程不安全,效率高、HashTable線程安全,效率低,還有HashMap允許k、v為null,HashTable不允許

面試官:HashTable為什麽是線程安全的?

lz:因為HashTable內部為所有的操作都加了同步鎖(synchronized)

面試官:為什麽加了synchronized鎖會導致效率降低?

lz:因為加了同步鎖(synchronized)其他線程再想訪問的話,必須等到前一個線程釋放了鎖才能使用。比如十個線程,只能一個一個排隊等候執行,所以效率會降低。

面試官:我們公司有些大數據量等需要用到HashTable,但又想保證執行效率,怎麽辦?還有其他可用的集合嗎?

lz:有啊ConcurrentHashMap。

面試官:ConcurrentHashMap是如何保證線程安全的?

lz:因為使用了分段鎖segment。

面試官:為什麽分段鎖比同步鎖效率高?

lz:分段鎖就是把Map分成了多個segment去處理,進行put操作時,根據hashcode找到相應的鎖,彼此之間不受影響,所以效率高。而同步鎖--鎖住的是整個HashTable,因此效率會低。

面試官:知道HashMap的實現原理嗎?了解hash碰撞嗎?

lz:HashMap是一個數組+鏈表的數據結構。采用hashing原理,在進行put 操作時根據Key計算出它的hashcode,根據hashcode找到相應的桶的位置。在進行get 時也是根據hashcode 找到相應位置的數據的。當發生hash碰撞時,即hashcode相同。那麽會在相應的桶中形成一個鏈表結構進行存儲。

4.如何保證訂單重復提交的問題(當發生網絡延遲等情況)

lz:樓主只回答了前端校驗和後端校驗具體其他操作不是很清楚,下面答案引用自百度百科只列舉幾個經典的(力爭為園友提交較可信的答案)

  更詳細的答案可以參考:http://www.bkjia.com/jingyan/471187.html

  1:在前端進行校驗,當表單提交後,把提交按鈕置灰

  2:表單提交後進行頁面重定向,轉到處理結果頁面。

  3:在session中存放一個標識符(當表單數據被請求時,在session中生成一個標識符放在表單隱藏域中,當後端處理表單數據時,檢查標識符是否存在,如果存在則表明第一次提交並從session中清除標識,如果不存在則表明重復提交)

  4:在數據中添加約束

5.防止訂單重復支付問題

lz:我們公司的支付都是跳到微信或支付寶的(--把此問題拋給了騰訊和阿裏);但是我們自己應該也能想到一種解決方法:就是同一筆訂單我們可以設置它的支付狀態。

  更詳細的答案可參考:https://www.jianshu.com/p/530228b71888

6.Spring原理(Ioc、Aop、動態代理)

lz:Ioc呢就是不需要我們手動創建new對象,把這個動作交給了Spring容器去管理,大大降低了程序的耦合度。

  Aop采用的就是動態代理的技術來實現切面編程的。

面試官:djk動態代理和cglib動態代理有什麽不同?

lz:JDK只能代理實現了接口的類,cglib采用繼承的方式 兩種類都可以代理。(註意final類和靜態方法是不能被代理的,因此aop也不能織入靜態方法)

7.對事物了解多少(主要是特性、傳播機制、隔離級別)

lz:事物主要的特性就是:原子性、一致性、隔離性、永久性

  隔離級別:default數據庫默認的隔離級別、未提交讀、已提交讀、重復讀、串行化。

  傳播特性:PROPAGATION_REQUIRED 、PROPAGATION_SUPPORTS 、PROPAGATION_MANDATORY、PROPAGATION_REQUIRES_NEW、PROPAGATION_NOT_SUPPORTED、PROPAGATION_NEVER、PROPAGATION_NESTED;

具體請參考:https://blog.csdn.net/weixin_38070406/article/details/78157603

lz拋個問題:假如一個沒有事務的方法調用了有事務的方法然後有事務的方法又調用了其他無事務的方法。那麽請問事務還生效嗎?(歡迎留言評論)

8.MySQL索引

lz:主鍵索引、唯一索引、普通索引、組合索引

具體請參考:https://blog.csdn.net/goodsave/article/details/78018174

再拋個問題:假如表中建立了一個組合索引(name、city、age)當查詢時采用city、age時索引生不生效?

9.數據庫執行計劃

lz:具體一些細節就是怎麽優化sql、還有查看sql語句性能,當然就是采用執行計劃(explain)的方式了。

具體可參考:https://blog.csdn.net/wangpeng047/article/details/12849331

10.線程池

lz:主要就是ThreadPoolExecutor類的使用構造函數,4種構造函數裏各參數代表的意思。

  corePoolSize:核心池大小

  maximumPoolSize:線程池最大線程數。

  keepAliveTime:線程沒有任務執行時最多存活時間。

  unit:為keepAliveTime設置時間的單位。

還有幾種常見的線程池:newFixedThreadPool、newSingleThreadExecutor、newCachedThreadPool、newScheduledThreadPool

具體線程資料可參考:

https://www.cnblogs.com/dolphin0520/p/3932921.html

https://www.cnblogs.com/superfj/p/7544971.html

好了,目前lz只能記得這麽多了,所以就寫到這吧。(還有一些lz做的模塊的細碎問題也不贅述)

ps: 最後lz完美的錯過了飯局,自己一個人隨便吃了點飯,然後等著對象一起愉快的回家了

記一次電話面試的題目