1. 程式人生 > >2017-11-7java(3-4年)面試中遇到的面試題

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

裡面,就是以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是遞迴遍歷的【沒有說錯吧,感覺是】

     主要的面試題大概是這幾個,然後就沒有然後了,樓主明天繼續分享。年底工作不好找,共同分享學習一下