天天看點

java面試②基礎部分

java面試①整體流程

java面試②基礎部分

java面試③web部分

java面試④資料庫部分

java面試⑤前端部分

java面試⑥架構部分

java面試⑦進階部分

java面試⑧項目和業務部分

由于各作業系統(windows,linux)支援的指令集,不是完全一緻的,就會讓我們的程式在不同的作業系統上要執行不同程式代碼,java開發了适用不同作業系統及位數的java虛拟機來屏蔽系統之間的差異,提供了統一的接口,對于我們java開發者而言,你隻需要在不同的系統上安裝對應的不同java虛拟機,這時你的java程式隻要遵循java規範就可以在所有的作業系統上面運作java程式。

java通過不同的系統,不同版本,不同位數的java虛拟機(jvm),來屏蔽不同系統指令集差異而對外展現統一的接口(java api),對于我們普通java開發者而言,隻需要按照接口開發即可,如果我系統需要部署不同的環境時,隻需要在系統上按照對應版本虛拟機即可。

java開發環境需要些什麼?

1. 适用我們開發環境的jdk

2. 對應開發環境eclipse

3. 需要web伺服器(tomcat)

1)、下載下傳對應元件

2)、安裝

jdk,安裝正常流程即可,配置我們的java_home,因為後面的eclipse和tomcat會依賴這個變量。

eclipse正常解壓就ok,設定workspace的預設編碼

tomcat正常解壓就ok,把tomcat內建到eclipse中,安裝插件就ok,

....

svn/git

java中有幾種基本資料類型?

8種

有四大基本特征:封裝、抽象、繼承、多态

1)封裝,即将對象封裝成一個高度自治和相對封閉的個體,對象狀态(屬性)由這個對象自己的行為(方法)來讀取和改變。

張三這個人,他的姓名等屬性,要有自己提供的擷取和改變的方法來操作,(getter,setter)

2)抽象就是找出一些事物的相似和共性之處,然後将這些事物歸為一個類,這個類隻考慮這些事物的相似和共性之處,并且會忽略與目前主題和目标無關的那些方面,将注意力集中在與目前目标有關的方面。

就是把現實生活中的對象,抽象為類。

3)在定義一個類的時候,可以在一個已經存在的類的基礎之上來進行,把這個已經存在的類所定義的内容作為自己的内容,并可以加入若幹新的内容,或修改原來的方法使之更适合特殊的需要,這就是繼承

4)多态是指程式中定義的引用變量所指向的具體類型和通過該引用變量發出的方法調用在程式設計時并不确定,而是在程式運作期間才确定,即一個引用變量倒底會指向哪個類的執行個體對象,該引用變量發出的方法調用到底是哪個類中實作的方法,必須在由程式運作期間才能決定。

靠的是父類或者接口的引用變量可以指向子類或者具體實作類的執行個體對象,而程式調用的方法在運作期間才動态綁定,就是引用變量所指向的具體執行個體對象的方法,也就是記憶體裡正在運作的那個對象的方法,而不是引用變量的類型定義的方法。

原則:圍着比較抽象問題的時候,要舉例說明

基本資料類型,java中提供了8中基本資料類型,boolean int float等

包裝類型:每一個基本資料類型都會一一對應一個包裝類型,

boolean—boolean

int—integer

裝箱和拆箱

把基本的資料類型轉換成對應的包裝類型,

integer i = 1;自動裝箱,實際上在編譯時會調用integer.valueof方法來裝箱

拆箱:就是把包裝類型轉換為基本資料類型, 基本資料類型 名稱 = 對應的包裝類型。

int j = i 自動拆箱

int j = i.intvalue()手動拆箱

自動拆箱:實際上會在編譯調用intvalue

java是一個面向對象的語言,而基本的資料類型,不具備面向對象的特性。

null integer-->null  int-->0 用integer和int分别表示person這個類的id

max 最大值

min 最小值

緩存值:對象緩存,integer i = 1; integer j = 1;--> i == j;

緩存-128~127

非常經典的一個面試題?先說清楚一個,再說另外一個?

==用來判斷兩個變量之間的值是否相等,變量就可以分為基本資料類型變量,引用類型,如果是基本資料類型的變量直接比較值而引用類型要比較對應的引用的記憶體的首位址。

equals:用來比較兩個對象長得是否一樣,判斷兩個對象的某些特征是否一樣。實際上就是調用對象的equals方法進行比較。

1)在java中提供三個類string、stringbuilder、stringbuffer來表示和操作字元串,字元串就是多個字元的集合。

string是内容不可變的字元串,stirng底層使用了一個不可變的字元數組(final char[]),

string str = new string(“bbb”); ----private final char value[]

而stringbuilder和stringbuffer是内容可以改變的字元串,stringbuilder和stringbuffer底層使用的是可變數組(沒有使用final來修飾)----char value[]

2)最經典就是拼接字元串

1.string進行拼接string c = “a”+”b”;

2.stringbuilder或stringbuffer

  striingbuilder sb = new stringbuilder();sb.append(“a”).append(“b”);

拼接字元串不能使用string進行拼接,要使用stirngbuilder或者stringbudder

3)stringbuilder是線程不安全的,效率較高,而stringbuffer是線程安全的,效率較低。

java中的集合為value,key-value(map)兩種

存值的又分為list和set

list是有序的,可重複的。

set是無序的,不可重複的。根據equals和hashcode判斷,也就是如果一個對象要存儲在set中,必須重寫hashcode方法。

存key-value的為map

list常用的arraylist和linkedlist。差別和使用場景

arraylist底層使用的是數組,linkedlist使用的是連結清單。

數組查詢具有索引查詢特定元素比較快,而插入和删除和修改比較慢(數組在記憶體中是一塊連續的記憶體,如果删除插入需要移動記憶體)

連結清單不要求記憶體是連續的,在目前元素中存放下一個或者上一個的位址,查詢時需要從頭部開始,一個個的找,是以效率低,插入時不需要移動記憶體,隻需改變指向即可,是以插入效率或者删除效率高。

arraylist使用在查詢比較多,但是插入和删除比較少的情況,而linkedlist使用在查詢比較少而插入和删除比較多的情況

  1)hashmap和hashtable都可以使用來存儲key-value的資料。

  2)hashmap是可以把null作為key或者value的,而hashtable是不可以的

  3)hashmap是線程不安全的,效率高。hashtable是線程安全的,效率較低。

通過把整個map分為n個segment(類似hashtable),可以提供相同的線程安全,但是效率提升n倍,預設提升16倍。

我們拷貝的檔案不确定是隻包含字元流,有可能有位元組流(圖檔、聲音、圖像等)。為了考慮通用性,要使用位元組流。

1.實作方式:

  1)通過繼承thread類實作一個線程。

  2)通過實作runable接口一個線程

  繼承擴充性不強,java隻支援單繼承,如果一個類繼承thread就不能繼承其他的類了。

2.啟動方式:

  thread t = new thread();繼承了thread的對象/實作runable的對象。

  t.setname()設定一個線程名稱。

  t.start();

  啟動線程使用start方法,而啟動了以後執行的是run方法。

3.怎麼區分線程,在一個系統中有很多線程,每個線程都會列印日志,我區分哪個線程列印的怎麼辦。

   t.setname()”設定一個線程名稱”;這是一種規範,在建立線程完成後,都需要設定名稱。

  簡單了解過。建立線程池。

java通過excute提供四個靜态方法建立四種線程池,分别為:

newcachedthreadpool建立一個可緩存線程池,如果線程池長度超過處理需要,靈活回收空閑線程,無可回收,則建立線程。

newfixedthreadpool 建立一個定長線程池,可控制線程最大并發數,超出的線程會在隊列中等待。

newscheduledthreadpool 建立一個定長線程池,支援定時及周期性任務執行。

   newsinglethreadexecutor 建立一個單線程化的線程池,它隻會用唯一的工作線程來執行任務,保證所有任務按照指定順序(fifo, lifo, 優先級)執行。

線程池的作用:

1)限定線程的個數,不會導緻由于線程過多導緻系統運作緩慢或者崩潰。

2)線程池不需要每次建立或者銷毀,節約資源。

3)線程池不需要每次建立,響應時間快。

連接配接池也是一樣

設計模式就是經過前人無數次的實踐總結的,設計過程中可以反複使用的,可以解決特定問題設計方法。

單例模式:懶漢模式、 餓漢模式

1)構造方法私有化,讓除了自己類能建立外其他地方都不能建立

2)在自己的類中建立一個單執行個體(餓漢模式是一出來就建立單執行個體,而懶漢模式需要的時候才建立)

3)提供一個方法擷取該執行個體對象(建立需要進行方法同步)

工廠模式:spring ioc 就是使用了工廠模式

對象的建立交給一個工廠去建立

代理模式:spring aop 就是使用的動态代理

包裝模式:

微信搜尋公衆号:javafirst