面試題之java基礎

2021-02-20 Java雲筆記

過去的幾個月可以說是網際網路的寒冬了,之前也就是吃瓜群眾一個,看看別人的公司裁員什麼的,可過去一周裡我也算是切身體會到了裁員浪潮的殘酷啊,各種CCC。有的人找不到工作總說是大環境不好的原因,送你一段話:

哈哈哈,就當是網際網路裁員浪潮下的一個笑話吧。

應部分網友的建議,從今天起會逐步的總結一些java、php相關的面試題,由簡單到複雜歸納一個系列:【金三銀四】,中間部分題目的答案來源於網絡,如若不嚴謹還望諒解。

java基礎面試題

1、簡述Java程序編譯和運行的過程:
答:①  Java編譯程序將Java源程序翻譯為JVM可執行代碼--字節碼,創建完源文件之後,程序會先被編譯成 「.class」 文件。
②  在編譯好的java程序得到「.class」文件後,使用命令java 運行這個 .class 文件,系統就會啟動一個jvm進程,並找到主函數的入口,開始執行main函數。

2、值傳遞和引用傳遞的區別:
答:①值傳遞:值傳遞是將進行傳遞的值進行拷貝,然後對拷貝之後的值進行傳遞,傳遞過程前後不改變原值的大小;
②引用傳遞:引用傳遞是將需要傳遞值的地址進行傳遞,傳遞過程前後會改變原值的大小。

3、『==』和equals的區別:
答:「==」操作符專門用來比較兩個變量的值是否相等,也就是用於比較變量所對應的內存中所存儲的數值是否相同,要比較兩個基本類型的數據或兩個引用變量是否相等,只能用==操作符。
equals方法是用於比較兩個獨立對象的內容是否相同,就好比去比較兩個人的長相是否相同,它比較的兩個對象是獨立的。例如,對於下面的代碼:
String a=new String("foo");
String b=new String("foo");
兩條new語句創建了兩個對象,然後用a,b這兩個變量分別指向了其中一個對象,這是兩個不同的對象,它們的首地址是不同的,即a和b中存儲的數值是不相同的,所以,表達式a==b將返回false,而這兩個對象中的內容是相同的,所以,表達式a.equals(b)將返回true。

4、String 和StringBuilder的區別:
 答:①String創新的字符串建的字符串是不可變的,如果改變字符串變量的值,是在內存中創建一個新的字符串,字符串變量將引用新創建的字符串地址,而原來的字符串在內存中依然存在且內容不變,直至java的垃圾回收系統對其進行銷毀;
 ②StringBuilde創建一個可變的字符串,StringBuilder沒有實現線程安全,因此性能較好。

5、java中,throw和throws 有什麼區別:
答:throw 用於拋出 java.lang.Throwable 類的一個實例化對象,意思是說你可以通過關鍵字 throw 拋出一個Exception,如:
throw new IllegalArgumentException(「XXXXXXXXX″)
而throws 的作用是作為方法聲明和籤名的一部分,方法被拋出相應的異常以便調用者能處理。Java 中,任何未處理的受檢查異常強制在 throws 子句中聲明。

6、HashMap的hashcode的作用:
答:hashCode的存在主要是用於查找的快捷性,如Hashtable,HashMap等,hashCode是用來在散列存儲結構中確定對象的存儲地址的。
如果兩個對象相同,就是適用於equals(java.lang.Object) 方法,那麼這兩個對象的hashCode一定要相同。
如果對象的equals方法被重寫,那麼對象的hashCode也儘量重寫,並且產生hashCode使用的對象,一定要和equals方法中使用的一致,否則就會違反上面提到的第2點。
兩個對象的hashCode相同,並不一定表示兩個對象就相同,也就是不一定適用於equals(java.lang.Object) 方法,只能夠說明這兩個對象在散列存儲結構中,如Hashtable,他們「存放在同一個籃子裡」。
7、什麼時候需要重寫?
答:一般的地方不需要重載hashCode,只有當類需要放在HashTable、HashMap、HashSet等等hash結構的集合時才會重載hashCode,那麼為什麼要重載hashCode呢?
要比較兩個類的內容屬性值,是否相同時候,根據hashCode 重寫規則,重寫類的 指定欄位的hashCode(),equals()方法。

8、Overload和Override的區別?
答:Overload是重載的意思,Override是覆蓋的意思,也就是重寫。
重載Overload表示同一個類中可以有多個名稱相同的方法,但這些方法的參數列表各不相同(即參數個數或類型不同)。
重寫Override表示子類中的方法可以與父類中的某個方法的名稱和參數完全相同,通過子類創建的實例對象調用這個方法時,將調用子類中的定義方法,這相當於把父類中定義的那個完全相同的方法給覆蓋了,這也是面向對象編程的多態性的一種表現。子類覆蓋父類的方法時,只能比父類拋出更少的異常,或者是拋出父類拋出的異常的子異常,因為子類可以解決父類的一些問題,不能比父類有更多的問題。子類方法的訪問權限只能比父類的更大,不能更小。如果父類的方法是private類型,那麼,子類則不存在覆蓋的限制,相當於子類中增加了一個全新的方法。

9、靜態變量和實例變量的區別?
答:在語法定義上的區別:靜態變量前要加static關鍵字,而實例變量前則不加。
在程序運行時的區別:實例變量屬於某個對象的屬性,必須創建了實例對象,其中的實例變量才會被分配空間,才能使用這個實例變量。靜態變量不屬於某個實例對象,而是屬於類,所以也稱為類變量,只要程序加載了類的字節碼,不用創建任何實例對象,靜態變量就會被分配空間,靜態變量就可以被使用了。總之,實例變量必須創建對象後才可以通過這個對象來使用,靜態變量則可以直接使用類名來引用。

10.如果main方法被聲明為private會怎樣?
答:能正常編譯,但運行的時候會提示」main方法不是public的」。


11、說一說Servlet的生命周期?
答:Servlet有良好的生存期的定義,包括加載和實例化、初始化、處理請求以及服務結束。這個生存期由javax.servlet.Servlet接口的init(),service()和destroy方法表達。
 Servlet被伺服器實例化後,容器運行其init方法,請求到達時運行其service方法,service方法自動派遣運行與請求對應的doXXX方法(doGet,doPost)等,當伺服器決定將實例銷毀的時候調用其destroy方法。
web容器加載servlet,生命周期開始。通過調用servlet的init()方法進行servlet的初始化。通過調用service()方法實現,根據請求的不同調用不同的do***()方法。結束服務,web容器調用servlet的destroy()方法。

12、Java的」一次編寫,處處運行」是如何實現的?
答:Java程序會被編譯成字節碼組成的class文件,這些字節碼可以運行在任何平臺,因此Java是平臺獨立的。

13、如果去掉了main方法的static修飾符會怎樣?
答:程序能正常編譯。運行時會拋NoSuchMethodError異常。

14、GC是什麼?為什麼要有GC?
答:GC是垃圾收集的意思(Gabage Collection),內存處理是編程人員容易出現問題的地方,忘記或者錯誤的內存回收會導致程序或系統的不穩定甚至崩潰,Java提供的GC功能可以自動監測對象是否超過作用域從而達到自動回收內存的目的,Java語言沒有提供釋放已分配內存的顯示操作方法。

15、為什麼Java裡沒有全局變量?
答:全局變量是全局可見的,Java不支持全局可見的變量,因為:全局變量破壞了引用透明性原則。全局變量導致了命名空間的衝突。

16、Java支持哪種參數傳遞類型?
答:Java參數都是進行傳值。對於對象而言,傳遞的值是對象的引用,也就是說原始引用和參數引用的那個拷貝,都是指向同一個對象。

17、get 和 post請求的區別
答:get:
1、請求的參數會附加在URL之後,多個參數用 & 連接。
2、因為URL的長度限制,get 方式傳輸的數據大小有所限制。
3、安全性低,因為傳輸的數據會顯示在請求的URL中。
post:
1、將請求參數放置在 HTTP 數據包,發送給伺服器。
2、傳送的數據量比較大
3、安全性較高

18、是否可以從一個靜態(static)方法內部發出對非靜態(non-static)方法的調用?
答:不可以,靜態方法只能訪問靜態成員,因為非靜態方法的調用要先創建對象,然後在調用靜態方法時可能對象並沒有被初始化。


19、程序中可以允許多個類同時擁有都有main方法嗎?
答:可以。當程序運行的時候,我們會指定運行的類名。JVM只會在你指定的類中查找main方法。因此多個類擁有main方法並不存在命名衝突的問題。

20、什麼是反射API?它是如何實現的?
答:反射是指在運行時能查看一個類的狀態及特徵,並能進行動態管理的功能。這些功能是通過一些內建類的反射API提供的,比如Class,Method,Field, Constructors等。使用的例子:使用Java反射API的getName方法可以獲取到類名。


21、為什麼重載hashCode方法?
答:一般的地方不需要重載hashCode,只有當類需要放在HashTable、HashMap、HashSet等等hash結構的集合時才會重載hashCode,那麼為什麼要重載hashCode呢?
如果你重寫了equals,比如說是基於對象的內容實現的,而保留hashCode的實現不變,那麼很可能某兩個對象明明是「相等」,而hashCode卻不一樣。
這樣,當你用其中的一個作為鍵保存到hashMap、hasoTable或hashSet中,再以「相等的」找另一個作為鍵值去查找他們的時候,則根本找不到。

22、Final在java中的作用
答:Final可以修飾類,修飾方法,修飾變量。
修飾的類叫最終類。該類不能被繼承。
修飾的方法不能被重寫。
修飾的變量叫常量,常量必須初始化,一旦初始化後,常量的值不能發生改變。

23、為什麼需要hashCode?
答:1.通過hashCode可以很快的查到小內存塊。
2.通過hashCode比較比equal方法快,當get時先比較hashCode,如果hashCode不同,直接返回false。

24、Super與this表示什麼?
答:Super表示當前類的父類對象
This表示當前類的對象

25、Cookie 和 Session 的區別
答:Cookie:是把數據保存在瀏覽器本地,並隨著每一次請求發送到伺服器。
Session:是把用戶數據保存在伺服器端。

26、IO 和 NIO 的區別,NIO的優點
答:1、IO是面向流的,NIO是面向緩衝區的。
2、IO是阻塞的,NIO是非阻塞的。
3、NIO有選擇器機制,可以讓一個線程來監視多個IO通道。
NIO的優點:
1、不需要使用 read() 或者 write() 就可以處理文件內容。
2、NIO的處理效率很快。

27、談談對Java中多態的理解?
答:多態是指允許不同子類型的對象對同一消息作出不同的響應。
多態包括編譯時多態和運行時多態。
方法重載(overload)實現的是編譯時的多態性(也稱為前綁定),而方法重寫(override)實現的是運行時的多態性(也稱為後綁定)。
運行時多態是面向對象最精髓的東西,要實現運行時多態需要:
方法重寫:子類繼承父類並重寫父類中已有的或抽象的方法。
對象造型:將父類型的引用指向子類型的對象,這樣父類的引用調用同樣的方法時即會根據子類對象的不同而表現出不同的行為。


28、Integer內部緩存?
答:Integer類內部有一個staitic 的Integer數組,存儲的是一些已經完成初始化的Integer對象,一般值為(-128~127),若用==比較,則有時候會因為值不在緩存中而返回false,所以應該用equals比較。

29、LinkedList的原理?
答:(1)底層是一個雙向鍊表,維護著一個first指針和一個last指針。
(2)隨機讀寫(get,set)的時間複雜度為O(n)。
(3)插入操作add(object)的時間複雜度為O(1);add(index, object)的時間複雜度為O(n)。
(4)刪除操作remove(object)的時間複雜度為O(1);remove(index)的時間複雜度為O(n)。

30、什麼是拆裝箱?
答:拆箱:把包裝類型轉成基本數據類型
裝箱:把基本數據類型轉成包裝類型

31、Static關鍵字有什麼作用?
答:Static可以修飾內部類、方法、變量、代碼塊
Static修飾的類是靜態內部類
Static修飾的方法是靜態方法,表示該方法屬於當前類的,而不屬於某個對象的,靜態方法也不能被重寫,可以直接使用類名來調用。在static方法中不能使用this或者super關鍵字。
Static修飾變量是靜態變量或者叫類變量,靜態變量被所有實例所共享,不會依賴於對象。靜態變量在內存中只有一份拷貝,在JVM加載類的時候,只為靜態分配一次內存。
Static修飾的代碼塊叫靜態代碼塊,通常用來做程序優化的。靜態代碼塊中的代碼在整個類加載的時候只會執行一次。靜態代碼塊可以有多個,如果有多個,按照先後順序依次執行。

32、為什麼equals()相等,hashCode就一定要相等,而hashCode相等,卻不要求equals相等?
答:1.因為是按照hashCode來訪問小內存塊,所以hashCode必須相等。
2.HashMap獲取一個對象是比較key的hashCode相等和equal為true。
之所以hashCode相等,卻可以equal不等,就比如ObjectA和ObjectB他們都有屬性name,那麼hashCode都以name計算,所以hashCode一樣,但是兩個對象屬於不同類型,所以equal為false。

33、heap和stack有什麼區別。
答:java的內存分為兩類,一類是棧內存,一類是堆內存。棧內存是指程序進入一個方法時,會為這個方法單獨分配一塊私屬存儲空間,用於存儲這個方法內部的局部變量,當這個方法結束時,分配給這個方法的棧會釋放,這個棧中的變量也將隨之釋放。

堆是與棧作用不同的內存,一般用於存放不在當前方法棧中的那些數據,例如,使用new創建的對象都放在堆裡,所以,它不會隨方法的結束而消失。方法中的局部變量使用final修飾後,放在堆中,而不是棧中。

34、String 是最基本的數據類型嗎?
答:不是。Java中的基本數據類型只有8個:byte、short、int、long、float、double、char、boolean;除了基本類型(primitivetype)和枚舉類型(enumeration type),剩下的都是引用類型(reference type)。


35、數組有沒有length()這個方法? String有沒有length()這個方法
答:數組沒有length()這個方法,有length的屬性。String有有length()這個方法

36、接口有什麼特點?
答:接口中聲明全是public static final修飾的常量
接口中所有方法都是抽象方法
接口是沒有構造方法的
接口也不能直接實例化
接口可以多繼承

37、JDK 中常用的包有哪些?
答:java.lang、java.util、java.io、java.net、java.sql。


38、Collection 和 Collections的區別
答:Collection是集合類的上級接口,繼承與他的接口主要有Set 和List.Collections是針對集合類的一個幫助類,他提供一系列靜態方法實現對各種集合的搜索、排序、線程安全化等操作

39、什麼是 Java 的反射機制
答:反射機制:是指程序可以在運行時 訪問 或 修改 它本身狀態和方法的這種能力。

40、JDK、JRE、JVM 分別是什麼關係?
答:JDK 即為 Java 開發工具包,包含編寫 Java 程序所必須的編譯、運行等開發工具以及 JRE。開發工具如:用於編譯 Java 程序的 javac 命令、用於啟動 JVM 運行 Java 程序的 Java 命令、用於生成文檔的 Javadoc 命令以及用於打包的 jar 命令等等。
JRE 即為 Java 運行環境,提供了運行 Java 應用程式所必須的軟體環境,包含有 Java 虛擬機(JVM)和豐富的系統類庫。系統類庫即為 Java 提前封裝好的功能類,只需拿來直接使用即可,可以大大的提高開發效率。
JVM 即為 Java 虛擬機,提供了字節碼文件(.class)的運行環境支持。簡單說,就是 JDK 包含 JRE 包含 JVM

總結

面試難度:簡單,基礎
適合群體:2019畢業生,春招

☞什麼是5G?居然有人用漫畫把它講得如此接地氣!

☞為啥程式設計師下班後只關顯示器從不關電腦?

☞崩潰!史上最難的一道Java面試題來了....

相關焦點

  • Java面試總結之Java基礎
    無論是工作多年的高級開發人員還是剛入職場的新人,在換工作面試的過程中,Java基礎是必不可少的面試題之一。能不能順利通過面試,拿到自己理想的offer,在準備面試的過程中,Java基礎也是很關鍵的。對於工作多年的開發人員來說,Java基礎往往是會被大家所忽略的,但在面試的過程中,確是必不可少的問題。在這篇文章裡就來為大家總結一下經常會被問到的Java基礎題。
  • 學了1年java的程式設計師面試,掛在了這道基礎算法題!
    這都是java的算法題,應該來講都是些比較簡單的算法題,但是我敢說很多基礎的學習的,或者想去面試的人都會不能完整的寫出來,現在
  • Java SSM框架相關基礎面試題整理
    一、Spring面試題1、Spring 在ssm中起什麼作用?
  • Java 最常見的 200+ 面試題:面試必備
    聊回面試題這件事,這份面試清單原本是我們公司內部使用的,可到後來有很多朋友在微信上聯繫到我,讓我幫他們找一些面試方面的資料,而且這些關係也不太好拒絕,一呢,是因為這些找我,要面試題的人,不是我的好朋友的弟弟妹妹,就是我的弟弟妹妹們;二呢,我也不能馬馬虎虎的對付,受人之事忠人之命,我也不能辜負這份信任。
  • 2019 最新 200 道 Java 面試題
    ,我做了大量的「功課」,首先我研究了幾乎所有大廠的面試題,還和負責招聘工作的幾個朋友,詳細的探討了 Java 面試所要涉及的知識點,於是就有了今天大家看到的這 200 多道面試題。原因二:節省招聘雙方彼此的時間,有些來公司面試人,無論是有幾年工作經驗的還是剛畢業的,就連這些最基礎的面試題都搞不定,這確實讓人很遺憾。常言道「一屋不掃何以掃天下」,也是同樣的道理,如果連基礎的概念都搞不明白,又怎麼讓面試官相信你能寫出高質量的程序呢?與其浪費彼此的時間,還不如花點時間把自己的基礎知識掌握牢固。
  • Java 基礎知識面試題與知識點總結!(100題)
    Java 基礎知識面試題與知識點知識點:Java基礎知識JavaJDK 監控和故障處理工具Java類文件結構 Java類加載過程 Java類加載器 Java雙親委派模型 自定義類加載器 程序計數器 虛擬機棧 本地方法棧 jvm-堆Java IO BIO NIO AIO面試題
  • 10個經典的 Java main 方法面試題
    以下是筆者認為比較經典的關於Java main方法的面試題,與其說是Java面試題,其實也是Java的一些最基礎知識問題,分享給大家,如有錯誤,請指出。1.不用main方法如何定義一個類?package com.instanceofjava;public class A{public static int main(String[] args){ return 1;    }}4.main()方法為什麼必須是靜態的?main()方法一定是靜態的。
  • Java典型面試題 ——談談你對Java平臺的理解?
    題目本身是非常開放的,往往考察的是多個方面,比如,基礎知識理解是否很清楚;是否掌握 Java 平臺主要模塊和運行原理等。很多面試者會在這種問題上吃虧,稍微緊張了一下,不知道從何說起,就給出個很簡略的回答。對於這類籠統的問題,你需要儘量表現出自己的思維深入並系統化,Java 知識理解得也比較全面,一定要避免讓面試官覺得你是個「知其然不知其所以然」的人。
  • 「軟帝學院」:20道經典Java程式設計師編程面試基礎題
    對於很多初入編程行業的程式設計師來說,第一次面試編程工作時是最緊張最無助的,因為他們從來沒有面試過這類工作,不知道主考官會問什麼。那麼一般初級Java面試時會問哪些問題呢?廣州華信智原在這裡為大家準備了20道經典Java面試基礎題。1、如果main方法被聲明為private會怎樣?
  • 每周 10 道 Java 面試題 : 面向對象, 類加載器, JDBC, Spring 基礎概念
    (點擊上方公眾號,可快速關注)來源:lmportNew - 唐尤華每周10道 Java 面試題由 ImportNew
  • 面試前必看Java線程面試題
    下面是Java線程相關的熱門面試題,你可以用它來好好準備面試。1.面向對象的特徵有哪些方面?答:面向對象的特徵主要有以下幾個方面:- 抽象:抽象是將一類對象的共同特徵總結出來構造類的過程,包括數據抽象和行為抽象兩方面。
  • Java經典面試題答案解析(1-80題)
    所以感覺沒有答案的面試題是沒有靈魂的,於是今天先整理基礎篇的前80道答案出來哈~所有的Java面試題已經上傳github,答案也上傳了一部分~https://github.com/whx123/JavaHome/tree/master/Java%E9%9D%A2%E8%AF%95%E9%A2%98%E9%9B%86%E7%BB%93%E5%8F%B7Java 基礎
  • String是java的基礎變量嗎?
    面試過的人都知道,面試會隨著時間越來越基礎,但是也不要這麼基礎呀!面試官看似隨意的拋出了下一個問題:「String是java的基礎變量嗎?」String是java的基礎變量嗎?不是的。什麼?!確實不是的,8個基礎變量裡只有char,沒有String。為什麼?!問高司令,他規定的。那String是什麼?!!String是引用變量,是一個類,自動裝箱拆箱。他自動拆裝箱的基礎變量是,給你1秒鐘...
  • java基礎編程題之String字符串練習
    以下是剛開始學習java的基礎編程題,每天持續更新java每個知識點的題目,持續練習,不斷提高java基本功,培養編程能力。
  • 一些經典Java面試題&答案解析 || 附《Effective Java》中文版
    我們給大家準備了一些面試題,所有題目都是經過精心挑選的,很基礎又考驗求職者的基本功,應該說被面試到的機率很大。希望能對你有所幫助。1、下列代碼輸出內容是什麼?(2) 運用反射手段,調用java.lang.Class或者java.lang.reflect.Constructor類的newInstance()實例方法。(3) 調用對象的clone()方法。(4) 運用反序列化手段,調用java.io.ObjectInputStream對象的 readObject()方法。
  • java程式設計師面試遇到string題如何不涼?
    最近看到好多同學都在儲備面試知識,以備來年輕鬆應對面試官,拿到心儀offer,之前好多同學反映遇到string,都只能送給自己一首涼涼。別涼,今天小編就為大家準備了面試中常遇到的string題,讓你輕鬆愉快拿offer~首先跟大家說說如何創建string~創建字符串較簡單的方式如下String str = "Runoob";在代碼中遇到字符串常量時,這裡的值是 "Runoob"",編譯器會使用該值創建一個 String 對象。
  • 給Java程式設計師的20個鍊表面試題
    謹記:如果你不具備任何數據結構基礎知識,或近期沒有對其進行重溫,那麼解決這些基於鍊表的編程問題是沒有意義的。答案:http://www.java67.com/2016/07/how-to-reverse-singly-linked-list-in-java-example.html7. 如何找到單鍊表中的倒數第三個節點?
  • Java 線程面試題 Top 50
    掌握了這些技巧,你就可以輕鬆應對多線程和並發麵試了。許多Java程式設計師在面試前才會去看面試題,這很正常。因為收集面試題和練習很花時間,所以我從許多面試者那裡收集了Java多線程和並發相關的50個熱門問題。我只收集了比較新的面試題且沒有提供全部答案。想必聰明的你對這些問題早就心中有數了, 如果遇到不懂的問題,你可以用Google找到答案。若你實在找不到答案,可以在文章的評論中向我求助。
  • 你見過老外的 Java 面試題嗎 (上)?
    前言最近無聊的在逛某 tube 網站,本來想看看大家是怎麼吐槽川普的,結果無意間點進了一個老外面試 Java 的視頻,對於常年面試被吊打的我瑟瑟發抖,於是決定進去一探究竟。畢竟不是專業的後臺開發,所以我在面試到後臺知識的時候果斷的退了出來,才讓自己免受了侮辱。不過鑑於我手速出眾,飛速的記錄下了 Java 的基礎題,所以準備貢獻出來,供大家享樂。
  • Java基礎面試題簡單總結
    Java基礎方面:1、作用域public,private,protected,以及不寫時的區別答:區別如下:寫時默認為friendly 2、Anonymous Inner Class (匿名內部類)派生類可以從它的基類那裡繼承方法和實例變量,並且類可以修改或增加新的方法使之更適合特殊的需要。封裝:封裝是把過程和數據包圍起來,對數據的訪問只能通過已定義的界面。