1. 瀑布流(如微信朋友圈)的場景下, 如何不查詢總數來得知是否到最後一頁(不能再往下加載數據) ,或針對數據庫分頁查詢;
我的現場回答:面試
- 使用Ajax,定義一個屏幕,判斷裏面是否有內容,而後加載數據,當對屏幕進行下拉操做時,獲取下拉的高度和顯示數據的高度,進行內容追加,經過判斷滾動距離來得知是否到最後一頁。
- 數據庫查詢:若是最後返回來的條數不足查詢條件設置的數量,便可知道已經到底,例如:設定返回10條,若是隻返回8條表示已經到底,若是恰好返回10條,再查一次看看是否返回空則能夠判斷是否是到底。
面試官提醒:
當恰好返回10條時,能夠改變下條件增長爲11條,若是返回10條說明已經到底sql
總結:數據庫
應當從多角度考慮實現場景;緩存
2. 說MyBatis和Hibernate的區別 :
我的回答:微信
mb相對於hib而言,mb須要咱們本身編寫sql語句,屬於半自動化,經過xml和註解配置,hib本身封裝生成sql,咱們僅須要管理對象之間的關係映射。hib因爲自動化高,有些性能沒法本身控制,myb本身編寫sql,能夠控制一些查詢。項目運用myb適合小巧一些的項目多線程
總結:此問題需繼續深耕思考性能
3. 相似MyBatis的@Select註解 或者 SpringDataJPA的@Query註解, 他們寫在接口(interface)的方法上, 可是這個接口(interface)沒有對應的實現類, 那他們是經過什麼方式來實現查詢的呢?
我的回答:spa
經過反射生成藉口對象,再進行動態代理 線程
4. 如朋友圈同樣, 有朋友圈的內容, 每一個內容有對應的評論, 有對應的點贊, 如何設計這個功能? 從表設計 緩存設計 API設計出發考慮
我的回答:設計
按照現有朋友圈功能場景,存在是否爲雙面好友關係(存在A刪除B,B沒刪除A)才能看到評論,A是否對B屏蔽,這裏應該創建一個雙方關係關聯表。衍生用戶內容表,只有在好友關係表中有權限看朋友圈的人才能看獲得。性能考慮緩存朋友圈,用戶刷新朋友圈讀取緩存
5. 若是有200萬個圖片須要作加水印處理, 如何加快處理的速度呢?
我的回答:
進行批量處理,將200W分紅幾份,縮小sql執行時間 。單機模式下,單線程分批處理時間會比一次性處理200W時間短,或者開啓多線程提升效率。集羣模式下,由一臺機器調度,其他機器進行處理。