天天看點

真實面試題之一

本套題目共5頁,請在1個小時内選擇作答,正确率優先。

Java基礎

1、 實作clone方法和equals方法時需要注意什麼?

答:深度clone:實作Serializable

淺度clone:實作Cloneable接口

2、 下面的方法,當輸入為2的時候傳回值是多少?

public static int getValue(int i) {

        int result = 0;

        switch (i) {

        case 1:

            result = result + i;

        case 2:

            result = result + i  * 2;

        case 3:

            result = result + i * 3;

        }

        return result;

    }

答:10

3、 

a.下述代碼在多線程環境中是否存在問題?若有,如何修正?

b.下述代碼中的volatile關鍵字是什麼意思?如果删除對該段代碼有何影響?

class Counter {

private volatile int count = 0;

public int getNext() {

  return ++count;

}

答:存在多線程環境問題,++count不是原子操作,方法:1,在 方法添加synchronized 2,用lock鎖機制使++count操作是一個整體 3,count變量用原子類進行操作。

使用volatile關鍵字確定共享變量能夠呗準确和一緻地更新的關鍵字,保證可見型,隻對變量使用。

4、 Thread.sleep() 可能抛出的 InterruptedException 代表什麼?如何處理?

答:阻塞方法抛出該異常

1,清除中斷狀态。2,捕獲該異常,保留中斷發生的

Spring

1. @Controller中,跳轉(“redirect: url”)和轉發(“forward: url”)有什麼差別?

答:一個跳轉會改變浏覽器的位址,一般用于通路外界資源

轉發是在本伺服器進行位址的轉換,浏覽器的位址不會發生改變。

2. 下面是HTTP請求封包:

POST /example?param1=value HTTP/1.1

Host: www.nowhere123.com

Accept: image/gif, image/jpeg, */*

Accept-Language: en-us

Accept-Encoding: gzip, deflate

Content-Type: application/json; charset=UTF-8

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)

X-Auth-Token: token-xxxxx

{

"param2": "value"

如何在Controller的方法中擷取框中的數值?

答:通過HttpServletRequest擷取到請求頭的集合,周遊,通過鍵擷取值

從request域中擷取集合體,再通過鍵值對擷取資料。

3. 使用注解(如@Component)聲明Bean,如何指定Bean加載順序?

a) 答:通過優先級設定

b) 

4. 多個同類型的Bean,使用注解注入時如何指定?

MyBatis

1. XML映射中,SQL語句的兩種參數注入方法:#和$的差別?

#:使用的是PreparStatement類

$: 使用的是 Statement類(會發升SQL注入問題)

2. XML映射中,如何使用LIKE進行模糊查詢?

答:like “%”#{條件}”%”

3. XML映射中,如何批量插入傳入的集合(Collection<E>)?

即,如何根據集合生成如下SQL?

INSERT INTO TABLE_NAME(a, b, c)

VALUES (a1, b1, c1), (a2, b2, c2) …

4. XML映射中,如何在插入的同時擷取MySQL自增字段(AUTO_INCREMENT)的生成值?

答:插入的時候用selectKey标簽先生成主鍵再進行插入操作

Redis

1. 如何使key對應的值過5秒後失效?

答:expire key 5

設定了失效時間,redis也可能存放在redis 的記憶體中,redis采用的是軟清理的方式,通過以一定的算法進行處理。

2. scan和keys指令的差別?

SCAN:将所有查詢的參數分頁處理,每次處理的條數通過參數傳入

KEYS:将所有查詢的參數進行顯示,資料量大對伺服器性能有影響。

3. 如何開啟和執行事務?

答:通過multi指令開啟事物,

4. 使用管道(Pipeline)有什麼好處?

答:減少伺服器壓力,減少鍊路層中的時間消耗,将大量操作結合成少量的操作。

資料庫

1. 請寫出以下MySQL語句的格式 : 插入 ,更新 ,删除。

表名 students
username tel content date
張三 13801281191 大專畢業 2006-10-11
李四 13612312331 大學畢業 2006-10-15
王五 021-55665566 碩士畢業

a) 有一新記錄(小王 13254748547 高中畢業 2007-05-06)請用SQL語句新增至表中

Insert into students values(‘小王’,‘13254748547’,‘高中畢業’,date(‘2007-05-06’))

b) 請用sql語句把張三的時間更新成為目前系統時間

Update students set date=date(now()) where username=’張三’

c) 請寫出删除名為張四的全部記錄

Delete from student where username in (‘張’,’四’)

d) 請給date 字段列增加一個普通索引

Alter bable ‘student’ add index_name (‘date’)

2. 表連接配接的左關聯和右關聯有什麼差別?

a) 左關聯:查詢以左邊的表條件為主,左邊表的字段全部顯示,右表有就顯示沒有就不顯示。

b) 右關聯:查詢以右邊的表條件為主,右邊表的字段全部顯示,右表有就顯示沒有就不顯示。

3. 下面哪些語句可以使用索引,而哪些不能?為什麼?可以用索引的,怎麼建索引?

a)select account_name from trans where amount!=0

b)select account_name,amount from trans where account_name='amex' and account_type='a'

c)select account_name,amount from trans where account_name like ‘zhang%’

答:第一個不能使用索引, != 會導緻索引失效,進行全局查詢

第二個和第三個可以使用索引