2017-11-7java(3-4年)面試中遇到的面試題
今天去了一家公司,名字叫圖譜天下
廢話少說:
1.自定義表字段如何實現
第一次聽到這個問題覺得比較簡單,我說直接將所有的表和所有的列儲存到資料庫表結構裡,用表來管理使用者建立的表和欄位。
我這樣回答之後,對面並不是很滿意,說:如果欄位多了怎麼辦?並且我這種做法每次查詢都要先查詢到需要的表,在查詢到需要的列,才能執行最終的查詢。這樣做不好。 我就沒啥辦法了,以前覺得這種方式還不錯。那怎麼辦呢?
網上有幾種方法:
1. 動態新增屬性欄位。
2. 先預留欄位,到時再用。
3. 使用 XML 欄位儲存。
4. JSON 格式儲存。
5. 屬性欄位行儲存【推薦方式】
這個部落格寫的不錯:http://blog.csdn.net/kk185800961/article/details/53208667
2.類似於dobbo這種服務框架,如何實現多節點session共享
類似於這種問題樓主確實沒有真正解決過,我先回答使用filter來實現,他又問我有沒有其他的想法,我就說可以使用mq訊息推送到不同的節點,給session單獨在設定一個ID用作唯一標示【顯然不是這樣的】
網上出的答案:
1.使用資料庫來同步session[感覺這中方法不是很好,該不贅述]
2.使用cookie來同步session
session是檔案的形勢存放在伺服器端的,cookie是檔案的形勢存在客戶端的,怎麼實現同步呢?
方法很簡單,就是把使用者訪問頁面產生的session放到cookie
你訪問web伺服器A,產生了session把它放到cookie裡面了,你訪問被分配到web伺服器B.
這個時候,web伺服器B先判斷伺服器有沒有這個session
如果沒有,在去看看客戶端的cookie裡面有沒有這個session
如果也沒有,說明session真的不存,如果cookie裡面有,就把cookie裡面的sessoin同步到web服務器B,這樣就可以實現session的同步了。
說明:這種方法實現起來簡單,方便,也不會加大資料庫的負擔,但是如果客戶端把cookie禁掉了的話,那麼session就無從同步了,這樣會給網站帶來損失;
cookie的安全性
3.使用memcache同步session【薦】
memcache可以把web中多節點的伺服器的記憶體結合起來,形成記憶體池,這樣的話無論是哪個伺服器產生的session,其他伺服器都可以使用。
缺點:memcache將記憶體分為不同的儲存塊,並且大小不同且固定,如果儲存不足就會產生記憶體洩露
3.多節點事務【分散式事務】如果實現事務的一致性
這個問題沒有回答出來。。。
這個事務有兩種特點:1.最終一致性 2.過程一致性
最終一致性很好理解,就是最終的事務保持一致即可。(使用mq來推送事務訊息就行)
過程一致性:在執行一些列業務中部分事務保持一致(這個暫時還沒有遇到也沒有很好的想法。。求分享)
4.js遍歷html節點是如何遍歷的
我先說的是從上到下的順序,接著他說按照ID獲取節點的原理是什麼,我說:從html的文件開頭開始查詢,找到就返回,不會繼續向下查詢。然後他給我寫了一個例子問我按照id=one獲取到的是哪個節點
<div>
<div id="one"></div>
</div>
<div id="one">
<div>
5.sql語句方面的優化有哪些:
我先說了些簡單的:
1.儘量不使用*
2.為列建立合適的索引
3.使用儲存過程或者檢視來儲存比較複雜的sql
4.sql使用佔位符,防止sql注入(他說阿里巴巴的一個數據庫中介軟體可以解決這個問題,好像是這個Cobar)
面試官覺得這些太簡單了,問我有沒有其他的優化了。。。然而
他的提示:
如果一個表中有個age,查詢的時候寫>age 好還是>=age好(當時蒙圈),因為>=比>少了一次遍歷【god】
網上:
http://www.jb51.net/article/39221.htm這裡mysql給出了好多優化方案
回答:獲取到one節點。問我為什麼不是先獲取外層的div,我說html是遞迴遍歷的【沒有說錯吧,感覺是】
主要的面試題大概是這幾個,然後就沒有然後了,樓主明天繼續分享。年底工作不好找,共同分享學習一下