目錄
4、final在Java中有什麼作用(這問題我上禮拜線上面試,技術問我着。。)
5、== 和 equals 的區別是什麼?(這個線上面試也問來着)
8、String, Stringbuffer, StringBuilder 的區別?
10、訪問修飾符 public、private、protected、default分別都有什麼作用?
15、針對14的Java序列化問題,談一下serialVersionUID的作用,Transient 關鍵字作用。
21、在 Queue 中 poll()和 remove()有什麼區別?
1、Java的基本數據類型有哪些?各自佔用了多少字節?
1)、四種整數類型(byte、short、int、long): byte:8 位,用於表示最小數據單位,short:16 位,很少用,-32768 ~ 32767 int:32 位、最常用,-2^31-1~2^31 (21 億) long:64 位。
2)、兩種浮點數類型(float、double): float:32 位,後綴 F 或 f,1 位符號位,8 位指數,23 位有效尾數。 double:64 位。浮點數是不精準的,不能對浮點數進行精確比較。
3)、一種字符類型(char): char:16 位,是整數類型,用單引號括起來的 1 個字符。
4)、布爾類型(boolean):true 真 和 false 假。
2、JDK與JRE有什麼區別
通常情況下,我們在電腦上下載安裝Java環境時,都會安裝兩個東西,以1.8版本爲例子,會安裝jdk1.8.0和jre1.8.0,那他們有什麼區別呢?
JDK:簡單來講,他提供了Java的開發環境和運行環境。
JRE:他爲Java的運行提供了相對應的環境。
jdk包含了jre,如果只是運行Java程序的話安裝上jre就夠了,但是咱們基本上都是開發人員,就得把jdk得裝上了,因爲咱得開發呀~
3、Java語言有哪些特點
這個問題,咱看過Java核心技術這本書的都知道,第一章就介紹到了這個知識點。
簡單性、面向對象、分佈式、健壯性、安全性、體系結構中立、可移植性、解釋性、高性能、多線程、動態性。
4、final在Java中有什麼作用(這問題我上禮拜線上面試,技術問我着。。)
1)、final修飾的類是最終類,該類不能被繼承。
2)、final修飾的方法是不能被重寫的。
3)、final修飾的變量叫做常量,他是固定不變的值,必須初始化。
其實挺好記下來的,final英文單字意思是最終的,老末唄,理解下來他修飾的東西就是不能被別人拿走。
5、== 和 equals 的區別是什麼?(這個線上面試也問來着)
1)、功能不同,“==”是判斷兩個變量或者是實例是否是指向同一內存空間。
equals是判斷兩個變量或者是實例所指向的內存空間的值是否相等。
2)、定義不同,equals是Java中的方法,“==”是Java中的運算符。
3)、equals本質上其實就是“==”,但是他是方法,可以重寫,試用equals比較值會返回ture或者false。
6、Java面向對象編程的三大特徵是什麼?
- 封裝
- 繼承
- 多態
7、hashCode 與 equals
其實把hashCode方法跟equals方法,他們倆的作用是一樣的,在Java中都是判斷兩個對象是否一致的。重寫的equal()裏一般比較的比較全面比較複雜,這樣效率就比較低,而利用hashCode()進行對比,則只要生成一個hash值進行比較就可以了,效率很高。
但是這樣就hashCode()中存在着一個問題,那就是他並不準確,有些時候,兩個對象的 hashCode()相同,equals()不一定 true。因爲在散列表中,hashCode()相等即兩個鍵值對的哈希值相等,然而哈希值相等,並不一定能得出鍵值對相等。
8、String, Stringbuffer, StringBuilder 的區別?
1)、運行速度:StringBuilder >StringBuffer >String。
2)、線程安全:StringBuilder是線程不安全的,而StringBuffer是線程安全的。
3)、String:適用於少量的字符串操作的情況、StringBuilder:適用於單線程下在字符緩衝區進行大量操作的情況、
StringBuffer:適用多線程下在字符緩衝區進行大量操作的情況。
9、抽象類與接口的區別
1)、抽象類需要子類使用extend來繼承,接口需要implement來實現。
2)、接口只能作爲方法的重申,不能有相關的構造方法,但是抽象類可以。
3)、類可以有多個接口,但是隻能繼承一個抽象類。
4)、接口裏定義的變量只能是公共的靜態的常量,抽象類中的變量是普通變量。
5)、抽象類主要用來抽象類別,接口主要用來抽象功能。
6)、抽象類前面的訪問修飾符(見9)可以是任何,但是接口默認的是public,(寫代碼的時候可以不寫)
10、訪問修飾符 public、private、protected、default分別都有什麼作用?
1)、public: Java語言中訪問限制最寬的修飾符,一般稱之爲“公共的”。被其修飾的類、屬性以及方法不僅可以跨類訪問,而且允許跨包(package)訪問。
2)、private: Java語言中對訪問權限限制的最窄的修飾符,一般稱之爲“私有的”。被其修飾的類、屬性以及方法只能被該類的對象訪問,其子類不能訪問,更不能允許跨包訪問。
3)、protect: 介於public 和 private 之間的一種訪問修飾符,一般稱之爲“保護形”。被其修飾的類、屬性以及方法只能被類本身的方法及子類訪問,即使子類在不同的包中也可以訪問。
4)、default:即不加任何訪問修飾符,通常稱爲"默認訪問模式"。該模式下,只允許在同一個包中進行訪問。
11、成員變量與局部變量的區別
1)、類中的位置不同,成員變量一般在方法外,類內。局部變量則在方法當中。
2)、作用對象不同,成員變量一般是公有的而局部變量一般只是供給方法去使用的。
3)、生命週期不同,成員變量會隨着對象的創建而創建,對象的消失而消失。局部變量只會在執行到對應方法的時候纔會出現,出了這個區域就會馬上從內存當中消失。
4)、初始值不同,成員變量是有默認的初始值的,但是局部變量沒有,必須要初始化之後才能夠使用。
12、Java異常
轉自https://www.cnblogs.com/wrencai/p/5648442.html,這塊我後面再整理,先看人家的。
13、Java中的IO流
1)、按照數據流方向可以分爲:輸入流(InputStream),輸出流(outputStream)。
2)、按照類型分可以分爲:字節流,字符流。 1字符 = 2字節 、 1字節(byte) = 8位(bit) 、 一個漢字佔兩個字節長度
他們倆有一個關於漢字的問題,字節流:每次讀取(寫出)一個字節,當傳輸的資源文件有中文時,就會出現亂碼。字符流:每次讀取(寫出)兩個字節,有中文時,使用該流就可以正確傳輸顯示中文。
14、Java序列化問題
1)、序列化應用的場景:(1)永久的保存對象,保存對象的字節序列到本地文件或者是數據庫中。(2)通過序列化使對象以字節流的形式再網絡中進行傳遞和接收。(3)通過序列化在進程中傳遞對象。
2)、序列化的好處:(1)實現了數據的持久性,通過序列化可以將數據永久的保存在硬盤內。(2)利用序列化實現了遠程的通信。
3)、Java序列化有兩個接口,分別是Serializable和Externalizable接口。但他們倆也是有些區別的:
(1)Externalizable繼承自Serializable接口
(2)需要我們重寫writeExternal()與readExternal()方法
(3)實現Externalizable接口的類必須要提供一個public的無參的構造器。
15、針對14的Java序列化問題,談一下serialVersionUID的作用,Transient 關鍵字作用。
1)、一句話:其目的是序列化對象版本控制,有關各版本反序列化時是否兼容。如果在新版本中這個值修改了,新版本就不兼容舊版本,反序列化時會拋出InvalidClassException異常。如果修改較小,比如僅僅是增加了一個屬性,我們希望向下兼容,老版本的數據都能保留,那就不用修改;如果我們刪除了一個屬性,或者更改了類的繼承關係,必然不兼容舊數據,這時就應該手動更新版本號,即SerialVersionUid。
serialVersionUID有兩種顯示的生成方式:
一是默認的1L,比如:private static final long serialVersionUID = 1L;
二是根據類名、接口名、成員方法及屬性等來生成一個64位的哈希字段,
2)、Transient 關鍵字的作用是控制變量的序列化,在變量聲明前加上該關鍵字,可以阻止該變量被序列化到文件中,在被反序列化後,transient 變量的值被設爲初始值,如 int 型的是 0,對象型的是 null。
16、深拷貝和淺拷貝的區別是什麼(針對序列化的拓展)
1)、其實對象的克隆也就做對象的拷貝,拷貝來講就分爲了兩種,深拷貝和淺拷貝。
淺拷貝:使用一個已知實例對新創建實例的成員變量逐個賦值,這個方式被稱爲淺拷貝。
深拷貝:當一個類的拷貝構造方法,不僅要複製對象的所有非引用成員變量值,還要爲引用類型的成員變量創建新的實例,並且初始化爲形式參數實例值。這個方式稱爲深拷貝。
淺拷貝存在對象拷貝不徹底問題。
2)、他們倆有什麼區別呢:淺拷貝只複製指向某個對象的指針,而不復制對象本身,新舊對象還是共享同一塊內存。但深拷貝會另外創造一個一模一樣的對象,新對象跟原對象不共享內存,修改新對象不會改到原對象。
17、Java容器有哪些?
18、List、Set、Map 之間的區別是什麼?
- List:有序集合,元素可重複
- Set:不重複集合,LinkedHashSet按照插入排序,SortedSet可排序,HashSet無序
- Map:鍵值對集合,存儲鍵、值和之間的映射;Key無序,唯一;value 不要求有序,允許重複
本截圖來源: https://blog.csdn.net/u012102104/article/details/79235938
19、 哪些集合類是線程安全的?
1、vector:就比arraylist多了個同步化機制(線程安全),因爲效率較低,現在已經不太建議使用。在web應用中,特別是前臺頁面,往往效率(頁面響應速度)是優先考慮的。
2、statck:堆棧類,先進後出。
3、hashtable:就比hashmap多了個線程安全。
4、enumeration:枚舉,相當於迭代器。
20、如何實現數組和 List 之間的轉換?
1、List轉換成爲數組:調用ArrayList的toArray方法。
2、數組轉換成爲List:調用Arrays的asList方法。
21、在 Queue 中 poll()和 remove()有什麼區別?
poll() 和 remove() 都是從隊列中取出一個元素,但是 poll() 在獲取元素失敗的時候會返回空,但是 remove() 失敗的時候會拋出異常。
關於Java多線程問題,我會另外再寫一個的,這邊主要去總結關於Java基礎方面的一些基本知識點,包括面試的時候會用到的知識。
更多詳細的信息,請看這裏:https://blog.csdn.net/qq_41790332/article/details/105254057