java面試基礎(chǔ)知識(shí)_Java工程師需要具備什么技能 IT知識(shí)
電腦知識(shí) 由優(yōu)爾供稿Java虛擬機(jī)是一個(gè)可以執(zhí)行Java字節(jié)碼的虛擬機(jī)進(jìn)程。Java源文件被編譯成能被Java虛擬機(jī)執(zhí)行的字節(jié)碼文件。下面是9252兒童網(wǎng)小編為大家整理的java面試基礎(chǔ)知識(shí),希望能對(duì)大家有所幫助。
java面試基礎(chǔ)知識(shí)
1、靜態(tài)變量和實(shí)例變量的區(qū)別?
在語(yǔ)法定義上的區(qū)別:靜態(tài)變量前要加static關(guān)鍵字,而實(shí)例變量前則不加。
在程序運(yùn)行時(shí)的區(qū)別:實(shí)例變量是屬于某個(gè)對(duì)象的屬性,必須創(chuàng)建了實(shí)例對(duì)象,其中的實(shí)例變量才會(huì)被分配內(nèi)存空間,才可以使用這個(gè)實(shí)例變量。
靜態(tài)變量不屬于某個(gè)實(shí)例對(duì)象,而是屬于類,所以也稱為類變量,只要程序加載了類的字節(jié)碼,不用創(chuàng)建任何實(shí)例對(duì)象,靜態(tài)變量就會(huì)分配內(nèi)存空間,而且只分配一次,靜態(tài)變量就可以被使用了??傊?,實(shí)例變量必須創(chuàng)建后才可以通過(guò)這個(gè)對(duì)象來(lái)使用,靜態(tài)變量則直接可以使用類名來(lái)調(diào)用。
2、什么是反射機(jī)制?
java反射是在運(yùn)行狀態(tài)中,對(duì)任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法,對(duì)于任何一個(gè)對(duì)象,都能夠調(diào)用它的任意一個(gè)屬性和方法,這種動(dòng)態(tài)獲取信息以及動(dòng)態(tài)調(diào)用對(duì)象的方法的功能稱為java的反射機(jī)制。
3、什么是裝箱?什么是拆箱?
裝箱:自動(dòng)將基本數(shù)據(jù)類型轉(zhuǎn)換為包裝器類型。
拆箱:自動(dòng)將包裝器類型轉(zhuǎn)換為基本數(shù)據(jù)類型。
4、Java 中覆蓋和重載是什么意思?
覆蓋(Override)是指子類對(duì)父類方法的一種重寫,只能比父類拋出更少的異常,訪問(wèn)權(quán)限不能比父類的小,被覆蓋的方法不能是 private的,否則只是在子類中重新定義了一個(gè)新方法。
重載(Overload)表示同一個(gè)類中可以有多個(gè)名稱相同的方法,但這些方法的參數(shù)列表各不相同。
Java工程師需要具備什么技能
1、夯實(shí)的java基礎(chǔ)
當(dāng)前的java新技術(shù)層出不窮,各企業(yè)的有不同的側(cè)重點(diǎn),根據(jù)企業(yè)用人的需求,只有具備堅(jiān)實(shí)的java基礎(chǔ)功底的程序員才能快速掌握新的技術(shù)。需要在核心算法、面向?qū)ο髴?yīng)用、數(shù)據(jù)結(jié)合及集合框架、反射、輸入輸出、多線程、異常處理等方面進(jìn)行深入學(xué)習(xí)。
2、熟悉Linux操作系統(tǒng)
Linux是當(dāng)今用作廣泛的服務(wù)器操作系統(tǒng)。合格的java高級(jí)工程師必須具備熟練地Linux操作技巧,這也正是在企業(yè)面試中獲得加分的重要指標(biāo)之一。
3、深入學(xué)習(xí)數(shù)據(jù)庫(kù)技術(shù)
互聯(lián)網(wǎng)公司對(duì)Java應(yīng)用離不開(kāi)數(shù)據(jù)庫(kù)技術(shù)。任何一個(gè)大中型應(yīng)用,數(shù)據(jù)庫(kù)設(shè)計(jì)的好壞、數(shù)據(jù)庫(kù)訪問(wèn)的效率直接決定了該項(xiàng)目的成敗。當(dāng)前數(shù)據(jù)庫(kù)最主流的技術(shù)有Oracle和MySQL兩種,除了能熟練應(yīng)用數(shù)據(jù)庫(kù)體系結(jié)構(gòu)和SQL語(yǔ)句之外,還要掌握數(shù)據(jù)庫(kù)設(shè)計(jì)、SQL語(yǔ)句優(yōu)化方面。
4、系統(tǒng)的Web前端技術(shù)
隨著互聯(lián)網(wǎng)技術(shù)由Web2.0向Web3.0邁進(jìn),Web前端技術(shù),包括HTML、CSS特別是java script語(yǔ)言越來(lái)越被企業(yè)重視。很多企業(yè)為此設(shè)置“Web前端工程師”崗位,所以作為一名合格的java高級(jí)工程師要不斷學(xué)習(xí)包括java script在內(nèi)的Java知識(shí)還有其相關(guān)的Ajax、JQuery框架、Ext-JS框架。
5、企業(yè)及框架
Java是組件和框架的世界,所有的java程序員都應(yīng)當(dāng)了解java框架。
6、專門的企業(yè)級(jí)開(kāi)發(fā)及部署環(huán)境
企業(yè)在開(kāi)發(fā)、測(cè)試、部署實(shí)際項(xiàng)目時(shí)需要有特定的軟件環(huán)境,但是很多技術(shù)人員往往不太重視這個(gè),所以在工作中會(huì)出現(xiàn)很多問(wèn)題和失誤甚至被淘汰。因此,作為java工程師對(duì)Linux高級(jí)命令集腳本編程、遠(yuǎn)程登錄、Art、單元測(cè)試技術(shù)、Maven構(gòu)建技術(shù)、SVN應(yīng)用技術(shù)等要有所了解。
7、規(guī)范的企業(yè)開(kāi)發(fā)流程及文檔
軟件開(kāi)發(fā)是團(tuán)隊(duì)合作,因此企業(yè)開(kāi)發(fā)流程和文檔規(guī)范尤為重要。這也是區(qū)分“草根程序員”和“正規(guī)程序員”的重要指標(biāo)之一。開(kāi)發(fā)項(xiàng)目項(xiàng)目無(wú)論大小都應(yīng)該按照企業(yè)開(kāi)發(fā)的流程進(jìn)行(需求分析、系統(tǒng)設(shè)計(jì)、編碼實(shí)現(xiàn)、單元測(cè)試、系統(tǒng)測(cè)試、部署上線)。
java基礎(chǔ)知識(shí)面試題及答案
1、static關(guān)鍵字什么意思?java中是否可以覆蓋一個(gè)private或者是static的方法?
“static”表明一個(gè)成員變量或者是成員方法可以在沒(méi)有所屬類的實(shí)例變量的情況下訪問(wèn)。
java中static方法不能被覆蓋,因?yàn)榉椒ǜ采w是基于運(yùn)行時(shí)動(dòng)態(tài)綁定的,而static方法是編譯時(shí)靜態(tài)綁定的。static方法與類的任何實(shí)例都不相關(guān)。
java中不可以覆蓋private方法。因?yàn)閜rivate修飾的變量和方法只能在當(dāng)前類中使用,如果是其他類繼承當(dāng)前類,繼承類中是不能訪問(wèn)到private變量和方法的。
2、能否在static環(huán)境中訪問(wèn)非static變量?
不能。static變量是屬于類的。當(dāng)類被虛擬機(jī)載入時(shí),會(huì)對(duì)static變量進(jìn)行初始化。非static變量是屬于實(shí)例的,這個(gè)時(shí)候?qū)嵗€沒(méi)有被創(chuàng)建,編譯器會(huì)報(bào)錯(cuò)。
3、java基本類型,什么是自動(dòng)拆裝箱?
基本類型:byte,short,int,float,long,double,boolean,char
自動(dòng)裝箱:是java編譯器在基本類型和對(duì)應(yīng)的對(duì)象包裝類型之間做一個(gè)轉(zhuǎn)化。比如把int轉(zhuǎn)化為Integer等等。反之為自動(dòng)拆箱。
4、java的方法覆蓋overriding和方法重載overloading是什么意思?
java中方法重載發(fā)生在同一個(gè)類中有兩個(gè)或者多個(gè)方法名字相同但是參數(shù)不同的情況。方法覆蓋是子類重新定義父類的方法。方法覆蓋必須有相同的方法名,參數(shù)列表和返回類型。
5、java中,什么是構(gòu)造方法?什么是構(gòu)造方法重載?什么是復(fù)制構(gòu)造方法?
當(dāng)新對(duì)象被創(chuàng)建時(shí),構(gòu)造方法會(huì)被調(diào)用。每一個(gè)類都有一個(gè)構(gòu)造方法,在沒(méi)有給類提供構(gòu)造函數(shù)時(shí),編譯器會(huì)自動(dòng)創(chuàng)建一個(gè)默認(rèn)的構(gòu)造方法
java中構(gòu)造方法重載和方法重載很相似??梢詾橐粋€(gè)類創(chuàng)建多個(gè)構(gòu)造方法,每一個(gè)構(gòu)造方法必須有它自己唯一的參數(shù)列表
6、java支持多繼承嗎?
不支持。只能支持單繼承,即一個(gè)類只有一個(gè)父類??梢杂胕mplements實(shí)現(xiàn)多個(gè)接口擴(kuò)展
7、接口與抽象類的區(qū)別
(1)接口中所有方法隱含都是抽象的。而抽象類則可以同時(shí)包含抽象和非抽象的方法
(2)接口中聲明的變量默認(rèn)都是final,而抽象類可以包含非final的變量
(3)接口中成員函數(shù)默認(rèn)都會(huì)public。抽象類的成員函數(shù)可以是private,protected或者public
(4)類可以不實(shí)現(xiàn)抽象類和接口聲明中的所有方法,這種情況下,類也必須聲明為抽象的
8、jdk與jre區(qū)別是什么?
java運(yùn)行時(shí)環(huán)境(jre)是將要執(zhí)行的java程序的java虛擬機(jī),同時(shí)也包含了執(zhí)行applet需要的瀏覽器插件。java開(kāi)發(fā)工具包(jdk)是完整的java軟件開(kāi)發(fā)包,包含了jre,編譯器和其他工具(比如:javadoc,java調(diào)試器),可以讓開(kāi)發(fā)者開(kāi)發(fā),編譯,執(zhí)行java應(yīng)用程序。
9、什么是只傳遞和引用傳遞
值傳遞是對(duì)基本類型變量而言,傳遞是該變量的一個(gè)副本,改變副本不會(huì)影響原變量
引用傳遞一般是對(duì)于對(duì)象型變量而言,傳遞的是該對(duì)象地址的一個(gè)副本,改變副本,會(huì)影響原變量
10、進(jìn)程和線程的區(qū)別?
進(jìn)程是執(zhí)行著的應(yīng)用程序,線程是進(jìn)程內(nèi)部的一個(gè)執(zhí)行序列。一個(gè)進(jìn)程可以有多個(gè)線程
區(qū)別:
(1)地址空間和其他資源:進(jìn)程之間相互獨(dú)立。同一個(gè)進(jìn)程的各個(gè)線程間共享。某進(jìn)程內(nèi)的線程在其他進(jìn)程不可見(jiàn)
(2)通信:進(jìn)程之間通信ipc,線程間可以直接讀寫進(jìn)程數(shù)據(jù)段(如全局變量)來(lái)進(jìn)行通信--需要進(jìn)程同步和互斥手段的輔助,以保證數(shù)據(jù)的一致性
(3)調(diào)度和切換:線程之間上下文切換比進(jìn)程上下文切換快的多
(4)在多線程os中,進(jìn)程不是一個(gè)可執(zhí)行的實(shí)體
11、同步方法和同步代碼塊的區(qū)別
同步方法默認(rèn)是用this或當(dāng)前類對(duì)象作為鎖
同步代碼塊可以選擇以什么來(lái)加鎖,比同步方法更細(xì)粒度。我們可以選擇只同步會(huì)發(fā)生同步問(wèn)題的部分代碼而不是整個(gè)方法
12、什么是死鎖?
死鎖是值多個(gè)線程因資源競(jìng)爭(zhēng)而造成的一種僵局,若無(wú)外力作用,這些線程都無(wú)法向前推進(jìn)。產(chǎn)生死鎖的4個(gè)必要條件
(1)互斥條件
(2)不剝奪條件
(3)請(qǐng)求和保持條件
(4)循環(huán)等待
13、如何確保N個(gè)線程可以訪問(wèn)N個(gè)資源同時(shí)又不導(dǎo)致死鎖?
一種非常簡(jiǎn)單的避免死鎖的方式:指定獲取鎖的順序,并強(qiáng)制線程按照指定的順序獲取鎖。因此如果所有的線程都是以同樣的順序加鎖和釋放鎖,就不會(huì)出現(xiàn)死鎖
14、java集合類框架的基本接口有哪些?
Collection,Set,List,Map
15、HashMap工作原理
hashMap是以鍵值對(duì)的形式存儲(chǔ)。hashmap需要一個(gè)hash函數(shù),它使用hashCode和equals方法來(lái)向集合/從集合添加和檢索元素。當(dāng)調(diào)用put時(shí),HashMap會(huì)計(jì)算key的hash值,然后把鍵值對(duì)存儲(chǔ)在集合中合適的索引上。如果key已經(jīng)存在,value會(huì)被更新成新值。hashMap的一些重要的特性是它的容量,負(fù)載因子和擴(kuò)容極限。
16、hashcode和equals重要性體現(xiàn)在什么地方?
hashmap通過(guò)hashcode和equals確定鍵值對(duì)索引
17、hashmap和hashtable區(qū)別?
hashmap允許鍵和值是null,hashtable不允許鍵或值為null
hashtable同步,而hashmap不是
- C語(yǔ)言基礎(chǔ)知識(shí)_C語(yǔ)言的概述
- IT入門基礎(chǔ)知識(shí)_IT運(yùn)維管理基礎(chǔ)知識(shí)
- 電腦內(nèi)存常見(jiàn)故障及解決方法_電腦常見(jiàn)故障
- Java的語(yǔ)言特點(diǎn)有哪些_java程序員要掌握的
- java核心基礎(chǔ)知識(shí)有哪些_java面試基礎(chǔ)知識(shí)
- IP地址的分類及發(fā)展歷程_IP地址的分配
- HTTP的狀態(tài)碼及請(qǐng)求消息_HTTP的主要特點(diǎn)
- 大數(shù)據(jù)的作用及特點(diǎn)_大數(shù)據(jù)的應(yīng)用
- java語(yǔ)言的分類及發(fā)展前景_java與javac的-c
- java語(yǔ)言的特點(diǎn)及程序設(shè)計(jì)_Java語(yǔ)言技術(shù)的
- c語(yǔ)言基本常識(shí)有哪些_C語(yǔ)言程序架構(gòu)
- IT基礎(chǔ)常識(shí)有哪些_IT基礎(chǔ)架構(gòu)的類型