1. 程式人生 > >記一次大三秋季成都某公司Java電話面試經歷和總結

記一次大三秋季成都某公司Java電話面試經歷和總結

簡歷是在一個招聘app上投的。感興趣的童鞋也可以試試~

本來HR是準備直接過去面試的,但是由於本人不在本地原因,所以直接約了時間面試

面試官是技術部的Leader,總共面試時間是40分鐘左右吧!

好的,下面就直接進入正題吧!


面試官問:之前看到過你做的筆試題,做的很好,想了解下你現在學的情況

答:可以


面試官問:大學的主修課程是Java嗎?有學過其他課程嗎?

答:   學過什麼就說什麼,主修是Java~


面試官問:現在的課程是不是還在學? (他大體意思就是就職時間吧)

答:學校的課程到這個月底結束,後面就沒有課程了,現在就是要準備就業的。


面試官問:看過你以前寫過Android,學的怎麼樣?

答:(這裡如實說的,本來就是在校的學生,學了一年安卓,雖然主修Java,但是安卓比Java學的更好一些)


面試官問:那你自己覺得自己做前端多得好還是後端做的好一些?

答:(我說的後端,Java是最好的語言)


面試官問:看到你的簡歷上有做過app和Java前後端結合的專案,大致是怎麼做的,用了哪些技術?

答:這個專案是去年的實訓專案,在老師的帶領下完成的(這裡巴拉巴拉說了一些.....,我現在還覺得這裡回答得不好,因為不管一個專案怎麼做的,和誰完成的,你都要自己的想法說出來。)


面試官問:執行緒和程序的區別和聯絡   

答: (這裡我答的比較輕鬆,因為最近在複習這塊的內容)

程序是系統進行資源分配和排程的一個獨立單位,執行緒是CPU排程和分派的基本單位

程序和執行緒的關係:

  1. 一個執行緒只能屬於一個程序,而一個程序可以有多個執行緒,但至少有一個執行緒。

  2. 資源分配給程序,同一程序的所有執行緒共享該程序的所有資源。

  3. 執行緒在執行過程中,需要協作同步。不同程序的執行緒間要利用訊息通訊的辦法實現同步。

  4. 執行緒是指程序內的一個執行單元,也是程序內的可排程實體。

執行緒與程序的區別:

  1. 排程:執行緒作為排程和分配的基本單位,程序作為擁有資源的基本單位。

  2. 併發性:不僅程序之間可以併發執行,同一個程序的多個執行緒之間也可以併發執行。

  3. 擁有資源:程序是擁有資源的一個獨立單位,執行緒不擁有系統資源,但可以訪問隸屬於程序的資源。

  4. 系統開銷:在建立或撤銷程序的時候,由於系統都要為之分配和回收資源,導致系統的明顯大於建立或撤銷執行緒時的開銷。但程序有獨立的地址空間,程序崩潰後,在保護模式下不會對其他的程序產生影響,而執行緒只是一個程序中的不同的執行路徑。執行緒有自己的堆疊和區域性變數,但執行緒之間沒有單獨的地址空間,一個執行緒死掉就等於整個程序死掉,所以多程序的程式要比多執行緒的程式健壯,但是在程序切換時,耗費的資源較大,效率要差些。


面試官問:你用過哪些執行緒的方法呢?(他說的沒有這麼直接,理解出來是這樣)

答:run()、sleep()等等   這裡我說了很多,列一下吧

sleep()方法屬於Thread類,主要的作用是讓當前執行緒停止執行,把cpu讓給其他執行緒執行,但不會釋放物件鎖和監控的狀態,到了指定時間後執行緒又會自動恢復執行狀態

wait()方法屬於Object類,與sleep()的區別是當前執行緒會釋放鎖,進入等待此物件的等待鎖定池。比方說,執行緒A呼叫Obj.wait(),執行緒A就會停止執行,而轉為等待狀態。至於等待多長時間? 那就看其他執行緒是否呼叫Obj.notify().其優勢顯而易見,成為多個執行緒之間進行通訊的有手段!

join()方法在某些情況下,子執行緒需要進行大量的耗時運算,主執行緒可能會在子執行緒執行結束之前結束,但是如果主執行緒又需要用到子執行緒的結果,換句話說,就是主執行緒需要在子執行緒執行之後再結束。這就需要用到join()方法

yield()方法一個執行緒呼叫yield()意味著告訴虛擬機器自己非常樂於助人,可以把自己的位置讓給其他執行緒(這只是暗示,並不表絕對)。但得注意,讓出cpu並不代表當前執行緒不執行了。當前執行緒讓出cpu後,還會進行cpu資源的爭奪,但是能不能再次分配到,就不一定了

isAlive():測試執行緒是否處於活動狀態。

setPriority(intnewPriority):更改執行緒的優先順序。

getName():返回該執行緒的名稱。

currentThread():返回對當前正在執行的執行緒物件的引用。

面試官問:那你再說一下你用到了執行緒上的哪些東西,怎麼用的?

答:這裡我是舉例說明,把自己做的專案搬出來說的


面試官問:靜態變數、區域性變數區別

答:這裡窸窸窣窣說了一些。。

靜態變數

靜態變數也稱作類變數,是在類之中,方法之外,以static關鍵字申明的變數,其獨立在物件之外,有許多物件共享的變數。靜態變數在物件產生之前產生,並長駐於記憶體,其在JVM關閉時銷燬。

成員變數

成員變數也稱作例項變數、屬性, 申明在類之中,方法之外的變數,隨物件銷燬而銷燬。

區域性變數

在方法或語句塊中申明的變數,生命週期只在定義的{}之中,不能跨方法或語句塊使用。

面試官問:怎麼理解抽象方法,做的專案裡有用過嗎?

答:abstract....  抽象方法是用過的,和private一起,最近寫的專案裡沒有怎麼用到抽象方法,抽象方法裡的私有方法用的比較多

一、使用abstract修飾符修飾的類被稱為抽象類;

        抽象類不能例項化物件,只能被繼承;

二、使用abstract修飾符修飾的方法被稱為抽象方法;

        抽象方法不能有方法體,子類必須重寫抽象類中所有的抽象方法;

三、抽象類中不一定包含抽象方法,但包含抽象方法的類一定是抽象類;


面試官問:佇列和棧的不同點和相同點

答:之前學過資料結構,所以這塊憑著記憶還能說上幾句靠譜的

棧與佇列的相同點:

1.都是線性結構。

2.插入操作都是限定在表尾進行。

3.都可以通過順序結構和鏈式結構實現。、

4.插入與刪除的時間複雜度都是O(1),在空間複雜度上兩者也一樣。

5.多鏈棧和多鏈佇列的管理模式可以相同。

棧與佇列的不同點:

1.刪除資料元素的位置不同,棧的刪除操作在表尾進行,佇列的刪除操作在表頭進行。

2.應用場景不同;常見棧的應用場景包括括號問題的求解,表示式的轉換和求值,函式呼叫和遞迴實現,深度優先搜尋遍歷等;常見的佇列的應用場景包括計算機系統中各種資源的管理,訊息緩衝器的管理和廣度優先搜尋遍歷等。

3.順序棧能夠實現多棧空間共享,而順序佇列不能。

4.棧先進後出,佇列先進先出

面試官問:JavaScript的一些原理 現在更新的情況  面向物件中繼承的實現

答:(當時電話聽得不太清楚,所以說了幾遍才知道在說JavaScript了)我說那天得到筆試題,裡面有兩道演算法,三道指令碼語言的題,但是第四題我是沒做的,因為對JavaScript指令碼語言其實不是很熟悉,只是在課餘的時候看過這些,也不敢說都會。。emmm差不多就是這樣說的

這裡面試官其實在我回答得基礎上,補充了一些東西,幫我引導


面試官問:Java的回收機制、虛擬機器。。(類似這樣的基礎知識)

答:(我說的是其實大學裡沒有注重學底層知識,比如微機原理啊這類的,但是我在課餘時間有看這方面的書,然後就大致的說了一下,然後就說了在實際程式設計中感受到的Java回收機制的優點,和C相比較)  

這裡附帶一份關於回收機制的部落格:Java回收機制


面試官問:get與post方法

答:  (http協議請求...  後面說了一堆  什麼安全、長度之類的。)

1.本質

Get是向伺服器發索取資料的一種請求,而Post是向伺服器提交資料的一種請求

2.伺服器端獲取值的方法

get方式提交的資料,伺服器端使用request.QueryString獲取變數的值

post方式提交的資料,伺服器端使用request.Form獲取資料

3.安全性

get方式安全性低,post方式較安全。但是post方式執行效率要比get方式差一些。

4.機制

get是把引數資料佇列加到提交表單的action屬性所指的URL中,如:http://www.xxx.com?sessonid=db23434&name=hongten&age=20。在URl中,值和表單南日各個欄位一一對應,並且這些在URl中對使用者來說是可見的,即使用者時可以看到的。如:name=hongten。

post是通過HTTP post機制,將表單內各個欄位與其內容放置在HTML HEADER內一起傳送到action屬性所指的URL地址,對於使用者來說,這是透明的。

5.大小

URL不存在引數上限的問題,HTTP協議規範沒有對URL長度進行限制。這個限制是特定的瀏覽器及伺服器對它的限制。IE對URL長度的限制是2083位元組(2K+35)。對於其他瀏覽器,如Netscape、FireFox等,理論上沒有長度限制,其限制取決於作業系統的支援。

理論上講,POST是沒有大小限制的,HTTP協議規範也沒有進行大小限制,說“POST資料量存在80K/100K的大小限制”是不準確的,POST資料是沒有限制的,起限制作用的是伺服器的處理程式的處理能力。

對於ASP程式,Request物件處理每個表單域時存在100K的資料長度限制。但如果使用Request.BinaryRead則沒有這個限制。

由這個延伸出去,對於IIS 6.0,微軟出於安全考慮,加大了限制。我們還需要注意:

1).IIS 6.0預設ASP POST資料量最大為200KB,每個表單域限制是100KB。
2).IIS 6.0預設上傳檔案的最大大小是4MB。
3).IIS 6.0預設最大請求頭是16KB。
IIS 6.0之前沒有這些限制。[參2]

總結:

one:get方式的安全性較post方式要差一些,所以,包含一些重要的資訊的話,簡易使用post資料提交方式

two:在做查詢統計的時候,使用get方式要更好一些;而在做資料的新增,修改或刪除操作時,建議使用post資料提交方式

面試官問:例項化物件的方式除了new以外,還沒有什麼其他方法?

答:

  1. 用new語句建立物件
  2. 運用反射機制
  3. 呼叫物件的clone()方法
  4. 運用反序列化手段

面試官問:過載和重寫的區別?

  1. Overload為過載,Override為重寫方法的重寫和過載是Java多型性的不同表現。重寫是父類與子類之間多型性的一種表現,過載是一個類中多型性的一種表現。
  2. 如果在子類中定義某方法與其父類有相同的名稱和引數,我們說該方法被重寫 (Override)。子類的物件使用這個方法時,將呼叫子類中的定義,對它而言,父類中的定義如同被"遮蔽"了。
  3. 如果在一個類中定義了多個同名的方法,它們或有不同的引數個數或有不同的引數型別,則稱為方法的過載(Overload)。
    過載的方法是可以改變返回值的型別。

面試官問:抽象類和介面的區別?


答:抽象類:

  1. 抽象方法,只有行為的概念,沒有具體的行為實現。使用abstract關鍵字修飾,沒有方法體。子類必須重寫這些抽象方法。
  2. 包含抽象方法的類,一定是抽象類。
  3. 抽象類只能被繼承,一個類只能繼承一個抽象類。

       介面:

  1. 全部的方法都是抽象方法,屬型都是常量
  2. 不能例項化,可以定義變數。
  3. 介面變數可以引用具體實現類的例項
  4. 介面只能被實現,一個具體類實現介面,必須實現全部的抽象方法
  5. 介面之間可以多實現
  6. 一個具體類可以實現多個介面,實現多繼承現象

面試官問:有沒有了解過node.js

答:我說的是去年就在用了,但是也是初級,不能說很熟悉它


面試官後面說的就是一些閒聊吧,然後說了一些他們公司的情況,還有我的方向性的一些問題,整體給我的評價就是基礎還是可以,但是應用上要比較弱一些,最後也問了 我還沒有什麼想問他的? 我問的如果我去公司上班,有不懂的地方,有沒有同事之類的教一下。。這樣 ,其實還有更好的問法吧,但是我認為只是第一次,說了這些,他應該大體是有數的,並且我也是剛畢業的大學生,更應該謙虛一點,而不是張口就要求什麼吧。

面試官人很好,在問問題的過程中,也在我的基礎中做了一些技術上的補充和解釋,我個人覺得是有很好的幫助的,最後就是等他和他的部門商定再通知我後面的情況,最後說了謝謝。

以上就是大致的面試對話,不管有沒有成功,有了這次的總結,個人認為自己的理論知識還需要更加鞏固和深入去了解,多看書、去寫程式碼、還有多做專案,很多經驗也是在專案開發中得到的。其次就是禮貌、謙虛很重要!

歡迎各位博友對我的總結提出更好的建議,多多指點,多多指教