經歷的面試題,先做下部分總結。


前言

面試了一周了,經歷了各種面試,好的壞的,時間長的時間短的,大公司小公司都有。經歷筆試的公司並不是太多,不過也有,這次就先總結經歷的筆試題,也有些筆試題我沒記錄下來,主要是覺得沒有什么意義,因為有的地方還問一下比較陳舊的技術,這種問題就直接不想答了,比如有的公司還在問JSP的九大內置對象。互聯網公司現在用JSP的已經寥寥無幾了吧。

前期先做一下總結,等找到工作后再做全面的面試經歷總結。為了確保對公司的隱私,公司的名字我就不寫了,以做什么內容代替吧。

筆試

某生鮮互聯網公司

一、單選題

1. 在發布-訂閱(publish-subscribe)消息模型中,訂閱者訂閱一個主題后,當該主題有新消息達到時,所有訂閱者都會受到通知。下面哪個設計模式最適合這個模型?

  A. 適配器(Adapter)  B. (Bridge)橋接模式  C.狀態模式(state)  D. 觀察者模式(Observer)

【答】D.觀察者模式,這個要對這幾個設計模式有了解才能知道是哪個。

2. 棧和隊列的共同特點是

  A. 只允許在端點處插入和刪除元素

  B. 都是先進后出

  C. 都是先進先出

  D. 沒有共同點

【答】A. 只允許在端點處插入和刪除元素。這個了解了這兩種數據結構就明白了,排除法也能排除掉。

3. 下面哪個表達式是不合法的

  A. List<? extends Number> foo = new ArrayList<Double>();

  B. List<? super Number> foo = new ArrayList<Integer>();

  C. List<? super Integer> foo = new ArrayList<Number>();

  D. List<? extends Integer> foo = new ArrayList<Integer>();

【答】B. List<? super Number> foo = new ArrayList<Integer>(); 這個問題我沒有注意到中間兩項泛型里面是super,我看成了四個選項都是extends了,所以當時選的是C。

4. 假如某個JAVA進程的JVM參數配置如下:-Xms1G -Xmx2G -Xmn500M -XX:MaxPermSize=64M -XX:+UseConcMarkSweepGC -XX:SurvivorRatio=3, 請問eden區最終分配的大小是多少?

  A. 64M            B. 500M         C. 300M          D. 100M

【答】C .300M 這題要對JVM內存結構有了解,-Xms1G 代表堆內存默認為1g容量,-Xmx2G 代表堆內存最大為2g容量, -Xmn500M 代表新生代的默認容量為500M, -XXMaxPermSize=64M 表示永久代最大容量64M, -XX:+UserConcMarkSweepGC 代表使用CMS垃圾收集器,-XX:SurvivorRatio=3, 代表eden區和兩個Survivor區的比值是3:1:1,所以eden區的大小為500M的五分之三300M。

5. 下列不屬於網絡層協議的為

  A. TCP             B. IP            C. IPX             D. ICMP

【答】A. TCP  哎。。。,網絡編程這塊是我最薄弱的地方,所以一些基本的只是我也不太清楚,這個沒答對,當時選的是D。

二、多選題

6. 文件aaa的訪問權限為rw-r--r--,現要增加所有用戶的執行權限和同組用戶的寫權限,下列哪些命令正確的是?

  A. chmod a+x g+w aaa

  B. chmod 764 aaa

  C. chmod 775 aaa

  D. chmod o+x g+w aaa

【答】AC , 在linux系統中,drwxrwxrwx —— 第一位表示文件類型,第一個rwx表示所有者的讀/寫/執行權限,第二個rwx表示同組用戶的讀/寫/執行權限,第三個rwx表示其他用戶的讀/寫/執行權限。根據題目要求,修改后的文件權限應該為rwxrwxr-x,即111111101 = 775。

7. ls -l顯示如下:-rwxrw-r-- 1 aaa bbb 0  3月  4 11:21 ccc ,下面哪些說法是正確的?

  A. 該文件是個目錄

  B. 該文件擁有者所在組用戶有權限修改文件

  C. 該文件權限的數字表示是764

  D. 該文件擁有者是bbb

【答】BC,ccc是一個文件,權限數字是764(-rwxrw-r--轉8進制),擁有者是aaa,所在用戶組是bbb,文件大小為0,最后修改時間為3月4日11:21

8. 以下有關http協議描述中,哪些是正確的?

  A. Post請求一般用於修改服務器上的資源,對發送的消息數據量沒有限制,通過表單方式提交

  B. http返回碼中302表示永久重定向,需要更新URI

  C. 可以通過206返回碼實現斷點續傳

  D. http1.1實現了持久連接和管線化操作以及主動通知功能,相比http1.0有大幅性能提升

【答】ACD , 這個網絡編程又到了我的軟肋了,這個真的不知道答案,正確答案也是后來在網上搜出來的,當時就蒙了一個D選項。網絡編程的書籍已經准備好了,馬上就要學習起來這塊的知識。

9. 以下哪個函數不能直接出現在WHERE子句中?

  A. SUM            B. COUNT         C. ORDER BY          D. GROUP BY

【答】AB,這個還是比較簡單的,聚合函數不能出現在where后面。

10. 假設系統按單道方式運行且采用短作業優先算法,有J1,J2,J3,J4 共4個作業同時到達,則以下哪幾種情況下的平均周轉時間為10分鍾?

  A. 執行時間:J1: 1分鍾 J2: 5分鍾 J3: 9分鍾 J4: 13分鍾

  B. 執行時間:J1: 1分鍾 J2: 4分鍾 J3: 7分鍾 J4: 10分鍾

  C. 執行時間:J1: 2分鍾 J2: 4分鍾 J3: 6分鍾 J4: 8分鍾

  D. 執行時間:J1: 3分鍾 J2: 6分鍾 J3: 9分鍾 J4: 12分鍾

【答】BC,以A選項為例:四個作業同時達到,由於采用單道方式運行且短作業優先,J1無需等待,執行1分鍾完成;J2等待1分鍾,執行5分鍾完成;J3等待6分鍾,執行9分鍾完成;J4等待15分鍾,執行13分鍾完成。—— 故四個作業平均周轉時間為:(J1*4+J2*3+J3*2+J4)/4 

11. 以下哪些事件會直接導致Linux系統從用戶態切換到內核態?

  A. 響應硬件中斷

  B. 編譯程序源碼

  C. 執行系統調用

  D. 查看系統日志

【答】AC,系統調用、硬件中斷會觸發用戶態到內核態的切換。Linux的知識也不是太了解,這塊內容也是以后要惡補的地方(標注起來)。

12. 以下說法中正確的有?

  A. StringBuilder是線程不安全的

  B. Java類可以同時用abstract和final聲明

  C. HashMap中,使用 get(key)==null可以判斷這個Hasmap是否包含這個key

  D. volatile關鍵字不保證對變量操作的原子性

【答】AD,StringBuilder是線程不安全的是對的,Java類可以同時被abstract和final修飾,abstract修飾類是為了讓子類去實現自己的功能,而final修飾的類是表示不能有子類,這兩個關鍵字相互矛盾所以應該是不可以同時修飾一個類的,HashMap中是可以存在值為null的鍵值對的。所以不可以通過get(key)==null來判斷,volatile可以保證變量的可見性,不能保證變量操作的原子性,(例如:i++這種操作是需要轉變成 new AtomicInteger(i).incrementAndGet())。

13. 下列哪些類型能被throw語句拋出?

  A. Error            B. Exception       C. Throwable          D. Object

【答】ABC,Error也是可以被throw的,只是通常Error出現程序就中斷了,我們並不會去捕獲。

14. 以下不同的數據庫類型中,哪些不屬於關系型數據庫范疇?

A. MongoDB         B. PostgreSQL       C. Redis          D. HBase

 【答】ABD,這個用過這幾個數據庫的應該一下就能分辨出來。

三、主觀題

15. Java如何進行序列化

【答】Java中如果想要將某個對象序列化,該對象的類需要實現Serializable接口或者實現Externalizable接口。不同的是:實現Serializable接口無須實現任何方法,而實現Externalizable接口則必須為 writeExternal() 和 readExternal() 兩個空方法提供實現。—— 在目標類實現了接口以后,就可以通過 ObjectOutputStream 將目標類對象進行序列化並輸出了。

16. Exception,Error,RuntimeException在java異常處理中有什么不同

【答】Java中的異常分為 Error 和 Exception。其中Error一般指與虛擬機相關的錯誤,如系統崩潰、虛擬機錯誤、動態鏈接失敗等,應用程序無法處理這些錯誤;Exception則是指應用程序本身可以處理的異常,它分為Checked Exception和RuntimeException —— Checked異常,也叫編譯時異常,Java編譯器強制要求我們必須對出現的這種異常進行catch處理,否則程序就不能編譯通過;RuntimeException,即運行時異常,編譯器不會檢查運行時異常,我們也可以不處理,當出現這樣的異常時,總是拋出由虛擬機接管。當然運行時異常也是可以catch的。

17. wait(), notify()和notifyAll()在使用的時候需要放在同步方法/代碼塊中嗎?為什么?

【答】需要放在同步方法/同步代碼塊中,因為這三個方法必須由同步監視器對象來調用。在同步代碼塊中,同步監視器對象就是 synchronized() 括號中的對象;在同步方法中,同步監視器對象則是隱式的當前對象 this。—— 在調用wait()之前,當前線程已經通過synchronized獲得了同步監視器的對象鎖,調用了wait()以后,線程進入阻塞狀態,並釋放對象鎖;其他線程獲得了同步監視器的對象鎖以后,就開始執行它的同步方法/代碼塊了,在同步方法/代碼塊中如果調用了notify(),則會喚醒在同步監視器對象上wait的任一線程,等剩余的代碼執行完后,釋放對象鎖;被喚醒的線程嘗試獲取對象鎖,獲取到了以后線程繼續向下執行。notifyAll()和notify()類似,只不過notifyAll()是喚醒在同步監視器對象上wait的所有線程,這些線程后續會爭奪對象鎖,誰得到對象鎖誰繼續執行。

18. 編程:在一個整數的數組中刪除另外一個整數數組中的元素,並保留原數組的次序

輸入包括兩行:

1. 第一行是被刪除的整數列表(記為列表A),每個整數之間使用空格分隔
2. 第二行是需要刪除的整數列表(記為列表B),每個整數之間使用空格分隔

輸出只有一行,即列表A中刪除列表B元素后的整數列表,輸出元素按照在列表A中的次序排列,每個整數之間使用空格分隔

樣例輸入:
1 2 3 4 5
2 4
樣例輸出:
1 3 5

這道題的答案不唯一,我給出的思路是,兩個數組轉為兩個ArrayList然后通過兩次遍歷,把第一行數組中和第二行數組中相等的元素放到一個新的list中,最后直接用第一個數組的list調用removeAll刪除到新生成的list中的元素。

某SASS(人力方向的企業服務)公司

/*以下代碼通過給定某LinkedList的第一個元素firstNode,查找第倒數第n個元素,請補全代碼,並糾正其中的錯誤,讓它能夠通過java命令行直接運行,TestUtil不必實現*/

public abstract class Test {

    class LinkedListNode{
        //不用自己實現
    }

    LinkedListNode findTheLastElement(int n,LinkedListNode firstNode){

        LinkedListNode found = firstNode;
        //TODO:具體實現



        System.out.println("done");

        return found;
    }

    static void main(String[] args){

        LinkedListNode candidate = TestUtils.init();

        Test.findTheLastElement(3,candidate);
    }
}

【答】待糾正的錯誤是findTheLastElement方法不是靜態方法,不能直接使用Test類名調用,main方法沒有使用public修飾符。

具體的實現我一開始覺得比較簡單的,因為LinkedList是雙向鏈表,所以知道了第一個,要求倒數第3個的數量,就直接從第一個往前倒退三個元素就可以了。調用第一個元素的prev獲得倒數第一個元素,再調用倒數第一個元素的prev獲取倒數第二個,然后同樣方法就可以獲取到倒數第三個了。

后來在和第一個面試官聊的時候,如果說現在雙向鏈表改成單向鏈表了,怎么實現這個功能,我想了想,那就通過兩次遍歷來實現,第一次遍歷,知道了LinekedList的長度,長度減3就是目標元素,在第二次遍歷的時候遍歷到目標元素直接就可以取出來了。

后來這個面試官說我這樣雖然可以實現功能,但是麻煩了一些,還有其他的方式嗎?他給出了一種思路,例如:要獲得倒數第3個元素,可以在把前3個元素保存起來,遍歷完后3個元素后,保存的元素就變成了后3個元素,然后知道遍歷到最后一個元素為null,這樣如果說最后一組里遍歷到第一個元素就結束了,那保存起來的三個元素中間那個就是倒數第3個。

這樣一次遍歷就可以找出倒數第3個元素了。

某互聯網教育公司(做中小學生教育培訓的)

這家公司比較奇葩,筆試題七八頁,而且做完了面試題后就和HR聊了聊就讓回去了,我問為什么是先和HR聊,得到的結果是,我們每天約很多人來面試,如果面試官每個都和應聘者面試的話,那面試官一天就只能只面試了。我就呵呵了,面試官的時間是時間應聘者的時間就不是時間了?HR不懂裝懂的還問了問技術的問題,我也是醉了。好了有點跑偏,這家公司的面試題有點多,我就印象最深就是最后的3個邏輯題,其他的題都記不得了。所以就只把最后的3個邏輯推理題寫出來吧。

1. 李娜、葉楠和趙芳三位女性的特點符合下面的條件:

(1)恰有兩位非常學識淵博,恰有兩位十分善良,恰有兩位溫柔,恰有兩位有錢;

(2)每位女性的特點不能超過三個;

(3)對於李娜來說,如果她非常學識淵博,那么她也有錢;

(4)對於葉楠和趙芳來說,如果她十分善良,那么她也溫柔;

(5)對於李娜和趙芳來說,如果她有錢,那么她也溫柔。

哪一位女性並非有錢?

【答】如果李娜有錢,那她也溫柔。根據條件1、2,如果李娜既沒有錢也不學識淵博,那她也是溫柔。因此,無論哪一種情況,李娜總是溫柔。

根據條件4,如果趙芳非常善良,那她也溫柔;根據條件5,如果趙芳有錢,那她也溫柔;根據條件1、2,如果趙芳既不富有也不善良,那她也是溫柔。因此,無論哪一種情況,趙芳總是溫柔。

根據條件1,葉楠並非溫柔,根據條件4,葉楠並不善良,從而根據條件1、2,葉楠既學識淵博又有錢。再根據條件1,李娜和趙芳都非常善良。

根據條件2、3,李娜並不學識淵博。從而根據條件1,趙芳很學識淵博。最后,根據條件1、2,李娜應該很富有,而趙芳並非有錢。

2. 孫某和張某是考古學家老李的學生。有一天,老李拿了一件古物來考驗兩人,兩人都無法驗證出來這件古物是誰的。老李告訴了孫某擁有者的姓,告訴張某擁有者的名,並且在紙條上寫下以下幾個人的人名,問他們知道誰才是擁有者?紙條上的名字有:沈萬三、岳飛、岳雲、張飛、張良、張鵬、趙括、趙雲、趙鵬、沈括。

孫某說:如果我不知道的話,張某肯定也不知道。

張某說:剛才我不知道,聽孫某一說,我現在就知道了。

孫某說:哦,那我也知道了。

請問:那件古物是誰的?

【答】根據孫某說:如果我不知道的話,張某肯定也不知道。這句話可以判斷出來,張某拿到的名字肯定不是“萬三”、“良”;而且可以確定孫某知道的姓肯定不是“沈”和“張”,(因為如果張某拿的是“萬三”,張某肯定知道了答案,而孫某能確定張某肯定不知道,則孫某知道的那個“姓”肯定不是“沈”,同理亦不是“張”),

 則剩下的名字還有 趙括、趙雲、趙鵬;岳飛、岳雲。

根據張某說:剛才我不知道,聽孫某一說,我現在就知道了。可以確定他知道的那個名字不是“雲”,(如果是“雲”,聽張某說了之后他還是不能確定答案,因為帶“雲”的名字有兩個)。

剩下的名字還有 趙括、趙鵬;岳飛。

第三句孫某說,他也知道了,可以確定是“岳飛”(如果是兩個“趙”姓 的 “趙括” 或者是 “趙鵬”,則孫某還是判斷不出來)

 3. 填數字

13 

1113

3113

132113

1113122113

(       )

請問最后一個括號里應該填哪個數字?

這種找規律的題,一般問總會找一下相加、相乘、相除、或是前后相乘得后面等等這種規律,但是這個題的規律還是比較有意思的,規律是數數字。

還是簡單寫一下吧。

3      3

13       1個3

1113     1個1,1個3

3113          3個1,1個3

132113       1個1,1個3,1個2,2個1,1個3

1113122113    (把這個數字讀出來就得到最后的結果了) 3個1,1個3,1個1,2個2,2個1,1個3

所以最后的結果是:311311222113

 

 

 

寫在最后 

其實做面試總結是對自己通過面試來認識到的不足,進行的補充,其實在沒有面試的時候已經認識到自己有哪些方面的不足了,但是臨時補也來不及了,有些東西也並不是臨時補充就能行的,還是要以后要檢查學習,堅持總結,通過認識到自己的不足來制定未來的學習計划,現在的計划是,設計模式->java網絡編程->Linux知識->數據結構與算法->深入理解微服務->spring以及mybatis等開源項目的源碼閱讀。

明天就又要繼續面試了,越挫越勇,加油吧!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM