一、簡要敘述什么是訪問控制符,列出java中的訪問控制符,并說明各個控制符的控制權(quán)限。
訪問控制符是一組限定類、域或方法是否可以被程序里的其他部分訪問和調(diào)用的修飾符。類的訪問控制符只有一個public,域和方法的訪問控制符有四個,分別是public、private、protected、private protected,另外還有一種沒有定義專門的訪問控制符的缺省情況。
1,公有訪問控制符public:
?Java的類是通過包的概念來組織的,包氏類的一個松散的集合。處于同一個包中的類可以不需要任何說明而方便的互相訪問和引用,而對于不同包中的類,則不行。但當(dāng)一個類被聲明為public時,他就具有了被其他包中的類訪問的可能性,只要這些其他包中的類在程序中使用import語句引入public類,就可以訪問和引用這個類。類中被設(shè)定為public的方法是這個類對外的接口部分,避免了程序的其他部分直接去操作類內(nèi)的數(shù)據(jù),這實際就是數(shù)據(jù)封裝思想的體現(xiàn)。每個Java程序的主類都必須是public類,也是基于相同的原因。用public修飾的類的域稱為公共域。如果公共域?qū)儆诠差?,則它能被所有的其他類所引用。public修飾符會造成安全性的數(shù)據(jù)封裝性下降,所以一般應(yīng)減少public域的使用。
2,缺省訪問控制符:
?缺省訪問控制權(quán)規(guī)定,該類只能被同一個包中的類訪問和引用,而不可以被其他包中的類使用,這種訪問特性又稱為包訪問性。同樣道理,類內(nèi)的域或方法如果美育訪問控制符來限定,也就具有包訪問性。簡單說,定義在同一個程序中的所有類屬于一個包。
3,私有訪問控制符private:
?用private修飾得域或方法只能被該類自身所訪問和修改,而且不能被任何其他類(包括該類的子類)來獲取和引用。private修飾符用來聲明那些類的私有成員,它提供了最高的保護級別。
4,保護訪問控制符protected:
?用protected修飾的成員變量可以被三種類所引用:該類自身、與它在同一個包中的其它類、在其他包中的該類的子類。使用protected修飾符的主要作用是允許其他包中該類的子類來訪問父類的特定屬性。
5,私有保護訪問控制符private protected :
?用private
protected修飾的成員變量可以被兩種類訪問和引用,一種是該類本身,一種是該類的所有子類。把同一個包內(nèi)的非子類排除在可訪問的范圍之外,使得成員變量更專于具有明確繼承關(guān)系的類,而不是松散地組合在一起的包。
二、簡單敘述如何使一個 Java 應(yīng)用程序運行起來,在控制臺方式下,使用什么命令編譯、運行程序。
1.點擊開始--運行--輸入cmd--輸入cd?? “你的java程序所在的地方”---輸入javac?? “java文件名”.java---輸入java? “JAVA文件名”(不加任何后綴名)
2.javac 編譯 java文件java 運行主程序所在的 class 文件或者 java -jar 運行 編譯好的jar文件。
三、java中重寫與重載的區(qū)別。
??? 方法的重寫Overriding和重載Overloading是Java多態(tài)性的不同表現(xiàn)。重寫Overriding是父類與子類之間多態(tài)性的一種表現(xiàn),重載Overloading是一個類中多態(tài)性的一種表現(xiàn)。如果在子類中定義某方法與其父類有相同的名稱和參數(shù),我們說該方法被重寫?(Overriding)。子類的對象使用這個方法時,將調(diào)用子類中的定義,對它而言,父類中的定義如同被“屏蔽”了,而且如果子類的方法名和參數(shù)類型和個數(shù)都和父類相同,那么子類的返回值類型必須和父類的相同;如果在一個類中定義了多個同名的方法,它們或有不同的參數(shù)個數(shù)或有不同的參數(shù)類型,則稱為方法的重載。Overloaded的方法是可以改變返回值的類型。也就是說,重載的返回值類型可以相同也可以不同
四、java開發(fā)中,JDBC連接數(shù)據(jù)庫的代碼與步驟。
1.編寫DBHelper類
2.加載驅(qū)動
? private StringdriverName="com.mysql.jdbc.Driver";
//1.加載驅(qū)動
??? Class.forName(driverName);
3.設(shè)置參數(shù)url user pwd
? private Stringusername="root";
??? private Stringpassword="joy123";
??? private Stringurl="jdbc:mysql://localhost:3306/studentdb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull";
4.連接數(shù)據(jù)庫
?Connection conn;
??? private StringdriverName="com.mysql.jdbc.Driver";
? /**
???? *初使化數(shù)據(jù)庫連接
???? */
??? public void init(){
??????? try {
??????????? //1.加載驅(qū)動
???????????Class.forName(driverName);
??????????? //2.連接數(shù)據(jù)庫
??????????? conn =DriverManager.getConnection(url,username,password);
??????? } catch(ClassNotFoundException e) {
??????????? e.printStackTrace();
??????? } catch (SQLException e) {
??????????? e.printStackTrace();
??????? }
??? }
沒有消息就是好消息,說明連接成功!
五、面向?qū)ο蟪绦蛟O(shè)計的三大特征。
(1)面向?qū)ο蟪绦蛟O(shè)計有三大特征:封裝(Encapsulation)、繼承(Inheritance)、多態(tài)(Polymorphism)。這三個單詞很常見,大家還是記住為好!
(2)封裝(Encapsulation):類包含了數(shù)據(jù)和方法,將數(shù)據(jù)和方法放在一個類中就構(gòu)成了封裝。
(3)繼承(Inheritance):Java是單繼承的(這點和C++有區(qū)別),意味著一個類只能繼承于一個類,被繼承的類叫父類(或者叫基類,base class),繼承的類叫子類。Java中的繼承使用關(guān)鍵字extends。但是,一個類可以實現(xiàn)多個接口,多個接口之間用逗號進行分割。實現(xiàn)接口使用關(guān)鍵字implements。
(4)多態(tài)(Polymorphism):多態(tài)最核心的思想就是,父類的引用可以指向子類的對象,或者接口類型的引用可以指向?qū)崿F(xiàn)該接口的類的實例。多態(tài)之所以是這樣的是因為基于一個事實:子類就是父類!
六、java中的常用的集合:set(集)、list(列表)和map(映射)。
七、索引與視圖的概念與作用。
八、jsp引入jquery框架:
? (1)新建一個Java web項目TestJquery,在WebRoot目錄下創(chuàng)建一個jquery文件夾
? (2)下載jquery-1.8.3.min.js放入jquery文件夾中
? (3)創(chuàng)建jsp頁面
? (4)發(fā)布項目,查看test.jsp
九、JavaScript組成:1.核心(ECMAScript)2.瀏覽器模型(BOM)3.文檔對象模型(DOM){<div>標(biāo)簽-元素節(jié)點?? “id”和“class”-屬性節(jié)點? “DOM示例-文本節(jié)點”
十、JSP九大內(nèi)置對象與四大作用域:1)九大內(nèi)置對象(request?? response? config application? session?exception? page? out pagecounttext);2)四大域(page域?session域?request域?context域)
十一、Linux操作系統(tǒng)桌面應(yīng)用與管理:軟件根據(jù)其提供方式與是否盈利可分為三種:商業(yè)軟件、共享軟件、自由軟件。
十二、Linux系統(tǒng)最早是由赫爾辛基大學(xué)學(xué)生為Minix用戶設(shè)計一個比較有效的UNIX PC 版本,后經(jīng)過各地Linux愛好者的補充修改而成。
十三、軟件工程學(xué)包括的內(nèi)容有:軟件工程原理、軟件工程過程、軟件工程方法、軟件工程模型、軟件工程管理、軟件工程度量、軟件工程環(huán)境、軟件工程應(yīng)用。
十四、100道面試題{
1.什么是B/S架構(gòu)?什么是C/S架構(gòu)
B/S(Browser/Server),瀏覽器/服務(wù)器程序
C/S(Client/Server),客戶端/服務(wù)端,桌面應(yīng)用程序
2.你所知道網(wǎng)絡(luò)協(xié)議有那些?
HTTP:超文本傳輸協(xié)議
FTP:文件傳輸協(xié)議
SMPT:簡單郵件協(xié)議
TELNET:遠程終端協(xié)議
POP3:郵件讀取協(xié)議
IPX:網(wǎng)際數(shù)據(jù)包交換協(xié)議
SPX:序列數(shù)據(jù)包交換協(xié)議
3.Java都有那些開發(fā)平臺?
JAVA SE:主要用在客戶端開發(fā)
JAVA EE:主要用在web應(yīng)用程序開發(fā)
JAVA ME:主要用在嵌入式應(yīng)用程序開發(fā)
4.什么是JVM?java虛擬機包括什么?
JVM:java虛擬機,運用硬件或軟件手段實現(xiàn)的虛擬的計算機,Java虛擬機包括:寄存器,堆棧,處理器
5.Java是否需要開發(fā)人員回收內(nèi)存垃圾嗎?
大多情況下是不需要的。Java提供了一個系統(tǒng)級的線程來跟蹤內(nèi)存分配,不再使用的內(nèi)存區(qū)將會自動回收
6.什么是JDK?什么是JRE?
JDK:java development kit:java開發(fā)工具包,是開發(fā)人員所需要安裝的環(huán)境
JRE:java runtime environment:java運行環(huán)境,java程序運行所需要安裝的環(huán)境
7.什么是數(shù)據(jù)結(jié)構(gòu)?
計算機保存,組織數(shù)據(jù)的方式
8.Java的數(shù)據(jù)結(jié)構(gòu)有那些?
線性表(ArrayList)鏈表(LinkedList)棧(Stack)隊列(Queue)圖(Map)樹(Tree)
9.什么是OOP?
面向?qū)ο缶幊?/p>
10.什么是面向?qū)ο螅?/p>
世間萬物都可以看成一個對象。每個物體包括動態(tài)的行為和靜態(tài)的屬性,這些就構(gòu)成了一個對象。
11.類與對象的關(guān)系?
類是對象的抽象,對象是類的具體,類是對象的模板,對象是類的實例
12.Java中有幾種數(shù)據(jù)類型
整形:byte,short,int,long
浮點型:float,double
字符型:char
布爾型:boolean
13.什么是隱式轉(zhuǎn)換,什么是顯式轉(zhuǎn)換
顯示轉(zhuǎn)換就是類型強轉(zhuǎn),把一個大類型的數(shù)據(jù)強制賦值給小類型的數(shù)據(jù);隱式轉(zhuǎn)換就是大范圍的變量能夠接受小范圍的數(shù)據(jù);隱式轉(zhuǎn)換和顯式轉(zhuǎn)換其實就是自動類型轉(zhuǎn)換和強制類型轉(zhuǎn)換。
14.Char類型能不能轉(zhuǎn)成int類型?能不能轉(zhuǎn)化成string類型,能不能轉(zhuǎn)成double類型
Char在java中也是比較特殊的類型,它的int值從1開始,一共有2的16次方個數(shù)據(jù);Char<int<long<float<double;Char類型可以隱式轉(zhuǎn)成int,double類型,但是不能隱式轉(zhuǎn)換成string;如果char類型轉(zhuǎn)成byte,short類型的時候,需要強轉(zhuǎn)。
15.什么是拆裝箱?
拆箱:把包裝類型轉(zhuǎn)成基本數(shù)據(jù)類型
裝箱:把基本數(shù)據(jù)類型轉(zhuǎn)成包裝類型
16.Java中的包裝類都是那些?
byte:Byte short:Short int:Integer long:Long float:Float double:Double char:Character boolean:Boolean
17.一個java類中包含那些內(nèi)容?
屬性、方法、內(nèi)部類、構(gòu)造方法、代碼塊。
18.例如: if(a+1.0=4.0),這樣做好嗎?
不好,因為計算機在浮點型數(shù)據(jù)運算的時候,會有誤差,盡量在布爾表達式中不使用浮點型數(shù)據(jù)(if,while,switch中判斷條件不使用浮點型)
19.那針對浮點型數(shù)據(jù)運算出現(xiàn)的誤差的問題,你怎么解決?
使用Bigdecimal類進行浮點型數(shù)據(jù)的運算
20.++i與i++的區(qū)別
++i:先賦值,后計算
i++:先計算,后賦值
21.程序的結(jié)構(gòu)有那些?
順序結(jié)構(gòu)
選擇結(jié)構(gòu)
循環(huán)結(jié)構(gòu)
22.數(shù)組實例化有幾種方式?
靜態(tài)實例化:創(chuàng)建數(shù)組的時候已經(jīng)指定數(shù)組中的元素,
1int[] a=new?int[]{1,3,3}
動態(tài)實例化:實例化數(shù)組的時候,只指定了數(shù)組程度,數(shù)組中所有元素都是數(shù)組類型的默認值
23.Java中各種數(shù)據(jù)默認值
Byte,short,int,long默認是都是0Boolean默認值是falseChar類型的默認值是’’Float與double類型的默認是0.0對象類型的默認值是null
24.Java常用包有那些?
Java.lang
Java.io
Java.sql
Java.util
Java.awt
Java.net
Java.math
25.Java最頂級的父類是哪個?
Object
26.Object類常用方法有那些?
Equals
Hashcode
toString
wait
notify
clone
getClass
27.java中有沒有指針?
有指針,但是隱藏了,開發(fā)人員無法直接操作指針,由jvm來操作指針
28.java中是值傳遞引用傳遞?
理論上說,java都是引用傳遞,對于基本數(shù)據(jù)類型,傳遞是值的副本,而不是值本身。對于對象類型,傳遞是對象的引用,當(dāng)在一個方法操作操作參數(shù)的時候,其實操作的是引用所指向的對象。
29.假設(shè)把實例化的數(shù)組的變量當(dāng)成方法參數(shù),當(dāng)方法執(zhí)行的時候改變了數(shù)組內(nèi)的元素,那么在方法外,數(shù)組元素有發(fā)生改變嗎?
改變了,因為傳遞是對象的引用,操作的是引用所指向的對象
30.實例化數(shù)組后,能不能改變數(shù)組長度呢?
不能,數(shù)組一旦實例化,它的長度就是固定的
31.假設(shè)數(shù)組內(nèi)有5個元素,如果對數(shù)組進行反序,該如何做?
創(chuàng)建一個新數(shù)組,從后到前循環(huán)遍歷每個元素,將取出的元素依次順序放入新數(shù)組中
32.形參與實參
形參:全稱為“形式參數(shù)”,是在定義方法名和方法體的時候使用的參數(shù),用于接收調(diào)用該方法時傳入的實際值;實參:全稱為“實際參數(shù)”,是在調(diào)用方法時傳遞給該方法的實際值。
33.構(gòu)造方法能不能顯式調(diào)用?
不能構(gòu)造方法當(dāng)成普通方法調(diào)用,只有在創(chuàng)建對象的時候它才會被系統(tǒng)調(diào)用
34.構(gòu)造方法能不能重寫?能不能重載?
可以重寫,也可以重載
35.什么是方法重載?
方法的重載就是在同一個類中允許同時存在一個以上的同名方法,只要它們的參數(shù)個數(shù)或者類型不同即可。在這種情況下,該方法就叫被重載了,這個過程稱為方法的重載(override)
36.內(nèi)部類與靜態(tài)內(nèi)部類的區(qū)別?
靜態(tài)內(nèi)部類相對與外部類是獨立存在的,在靜態(tài)內(nèi)部類中無法直接訪問外部類中變量、方法。如果要訪問的話,必須要new一個外部類的對象,使用new出來的對象來訪問。但是可以直接訪問靜態(tài)的變量、調(diào)用靜態(tài)的方法;
普通內(nèi)部類作為外部類一個成員而存在,在普通內(nèi)部類中可以直接訪問外部類屬性,調(diào)用外部類的方法。
如果外部類要訪問內(nèi)部類的屬性或者調(diào)用內(nèi)部類的方法,必須要創(chuàng)建一個內(nèi)部類的對象,使用該對象訪問屬性或者調(diào)用方法。
如果其他的類要訪問普通內(nèi)部類的屬性或者調(diào)用普通內(nèi)部類的方法,必須要在外部類中創(chuàng)建一個普通內(nèi)部類的對象作為一個屬性,外同類可以通過該屬性調(diào)用普通內(nèi)部類的方法或者訪問普通內(nèi)部類的屬性
如果其他的類要訪問靜態(tài)內(nèi)部類的屬性或者調(diào)用靜態(tài)內(nèi)部類的方法,直接創(chuàng)建一個靜態(tài)內(nèi)部類對象即可。
37.Static關(guān)鍵字有什么作用?
Static可以修飾內(nèi)部類、方法、變量、代碼塊
Static修飾的類是靜態(tài)內(nèi)部類
Static修飾的方法是靜態(tài)方法,表示該方法屬于當(dāng)前類的,而不屬于某個對象的,靜態(tài)方法也不能被重寫,可以直接使用類名來調(diào)用。在static方法中不能使用this或者super關(guān)鍵字。
Static修飾變量是靜態(tài)變量或者叫類變量,靜態(tài)變量被所有實例所共享,不會依賴于對象。靜態(tài)變量在內(nèi)存中只有一份拷貝,在JVM加載類的時候,只為靜態(tài)分配一次內(nèi)存。
Static修飾的代碼塊叫靜態(tài)代碼塊,通常用來做程序優(yōu)化的。靜態(tài)代碼塊中的代碼在整個類加載的時候只會執(zhí)行一次。靜態(tài)代碼塊可以有多個,如果有多個,按照先后順序依次執(zhí)行。
38.Final在java中的作用
Final可以修飾類,修飾方法,修飾變量。
修飾的類叫最終類。該類不能被繼承。
修飾的方法不能被重寫。
修飾的變量叫常量,常量必須初始化,一旦初始化后,常量的值不能發(fā)生改變。
39.Java中操作字符串使用哪個類?
String,StringBuffer,StringBuilder
40.StringBuffer,Stringbuilder有什么區(qū)別?
StringBuffer與StringBuilder都繼承了AbstractStringBulder類,而AbtractStringBuilder又實現(xiàn)了CharSequence接口,兩個類都是用來進行字符串操作的。
在做字符串拼接修改刪除替換時,效率比string更高。
StringBuffer是線程安全的,Stringbuilder是非線程安全的。所以Stringbuilder比stringbuffer效率更高,StringBuffer的方法大多都加了synchronized關(guān)鍵字
41.String str=”aaa”,與String str=new String(“aaa”)一樣嗎?
不一樣的。因為內(nèi)存分配的方式不一樣。
第一種,創(chuàng)建的”aaa”是常量,jvm都將其分配在常量池中。
第二種創(chuàng)建的是一個對象,jvm將其值分配在堆內(nèi)存中。
42.String str=”aa”,String s=”bb”,String aa=aa+s;一種創(chuàng)建了幾個對象?
一共有兩個引用,三個對象。因為”aa”與”bb”都是常量,常量的值不能改變,當(dāng)執(zhí)行字符串拼接時候,會創(chuàng)建一個新的常量是” aabbb”,有將其存到常量池中。
43.將下java中的math類有那些常用方法?
Pow():冪運算Sqrt():平方根Round():四舍五入Abs():求絕對值Random():生成一個0-1的隨機數(shù),包括0不包括1
44.String類的常用方法有那些?
charAt:返回指定索引處的字符
indexOf():返回指定字符的索引
replace():字符串替換
trim():去除字符串兩端空白
split():分割字符串,返回一個分割后的字符串?dāng)?shù)組
getBytes():返回字符串的byte類型數(shù)組
length():返回字符串長度
toLowerCase():將字符串轉(zhuǎn)成小寫字母
toUpperCase():將字符串轉(zhuǎn)成大寫字符
substring():截取字符串
format():格式化字符串
equals():字符串比較
45.判斷兩個對象是否相同,能使用equlas比較嗎?
不能。Equlas大多用來做字符串比較,要判斷基本數(shù)據(jù)類型或者對象類型,需要使用==
46.==與equlas有什么區(qū)別?
==可以判斷基本數(shù)據(jù)類型值是否相等,也可以判斷兩個對象指向的內(nèi)存地址是否相同,也就是說判斷兩個對象是否是同一個對象,Equlas通常用來做字符串比較。
47.如何將字符串反轉(zhuǎn)?
Stringbuilder或者stringbuffer的reverse方法
48.面向?qū)ο蟮恼Z言有那些特征?
封裝、繼承、多態(tài)
49.Java中的繼承是單繼承還是多繼承
Java中既有單繼承,又有多繼承。對于java類來說只能有一個父類,對于接口來說可以同時繼承多個接口
50.什么是重寫?什么是重載?
重載和重寫都是java多態(tài)的表現(xiàn)。
重載叫override,在同一個類中多態(tài)的表現(xiàn)。當(dāng)一個類中出現(xiàn)了多個相同名稱的方法,但參數(shù)個數(shù)和參數(shù)類型不同,方法重載與返回值無關(guān)
重寫叫overwrite,是字符類中多態(tài)的表現(xiàn)。當(dāng)子類出現(xiàn)與父類相同的方法,那么這就是方法重寫。方法重寫時,子類的返回值必須與父類的一致。如果父類方法拋出一個異常,子類重寫的方法拋出的異常類型不能小于父類拋出的異常類型。
51.構(gòu)造方法能不能重載?能不能重寫?
可以重載,必須重寫
52.如果父類只有有參構(gòu)造方法,那么子類必須要重寫父類的構(gòu)造方法嗎?
必須重寫
53.創(chuàng)建一個子類對象的時候,那么父類的構(gòu)造方法會執(zhí)行嗎?
會執(zhí)行。當(dāng)創(chuàng)建一個子類對象,調(diào)用子類構(gòu)造方法的時候,子類構(gòu)造方法會默認調(diào)用父類的構(gòu)造方法。
54.什么是父類引用指向子類對象?
是java多態(tài)一種特殊的表現(xiàn)形式。創(chuàng)建父類引用,讓該引用指向一個子類的對象
55.當(dāng)父類引用指向子類對象的時候,子類重寫了父類方法和屬性,那么當(dāng)訪問屬性的時候,訪問是誰的屬性?調(diào)用方法時,調(diào)用的是誰的方法?
子類重寫了父類方法和屬性,訪問的是父類的屬性,調(diào)用的是子類的方法
56.Super與this表示什么?
Super表示當(dāng)前類的父類對象
This表示當(dāng)前類的對象
57.抽象的關(guān)鍵字是什么?
Abstract
58.抽象類必須要有抽象方法嗎
不是必須。抽象類可以沒有抽象方法。
59.如果一個類中有抽象方法,那么這個一定是抽象類?
包含抽象方法的類一定是抽象類
60.抽象類可以使用final修飾嗎?
不可以。定義抽象類就是讓其他繼承的,而final修飾類表示該類不能被繼承,與抽象類的理念違背了
61.普通類與抽象類有什么區(qū)別?
普通類不能包含抽象方法,抽象類可以包含抽象方法
抽象類不能直接實例化,普通類可以直接實例化
62.什么是接口?
接口就是某個事物對外提供的一些功能的聲明,是一種特殊的java類
63.JAVA為什么需要接口?
接口彌補了java單繼承的缺點
64.接口有什么特點?
接口中聲明全是publicstaticfinal修飾的常量接口中所有方法都是抽象方法接口是沒有構(gòu)造方法的接口也不能直接實例化接口可以多繼承
65.接口與抽象類有什么區(qū)別?
抽象類有構(gòu)造方法,接口沒有構(gòu)造方法抽象類只能單繼承,接口可以多繼承抽象類可以有普通方法,接口中的所有方法都是抽象方法接口的屬性都是publicstaticfinal修飾的,而抽象的不是
66.Java中異常分為哪兩種?
編譯時異常
運行時異常
67.說幾個常見的編譯時異常類?
NullPointerException:空指針異常
ArrayIndexOutOfBoundsException:數(shù)組下標(biāo)越界
NumberFormatException:數(shù)字轉(zhuǎn)換異常
IllegalArgumentException:參數(shù)不匹配異常
InstantiationException:對象初始化異常
ArithmeticException:算術(shù)異常
68.異常的處理機制有幾種?
異常捕捉:try…catch…finally,異常拋出:throws。
69.如何自定義一個異常
繼承一個異常類,通常是RumtimeException或者Exception
70.在異常捕捉時,如果發(fā)生異常,那么try.catch.finally塊外的return語句會執(zhí)行嗎?
會執(zhí)行,如果有finally,在finally之后被執(zhí)行,如果沒有finally,在catch之后被執(zhí)行
71.Try.catch.finally是必須要存在的嗎?
Try塊必須存在,catch和finally可以不存在,但不能同時不存在
72.Thow與thorws區(qū)別
Throw寫在代碼塊內(nèi),throw后面跟的是一個具體的異常實例Throw寫在方法前面后面,throws后面跟的是異常類,異常類可以出現(xiàn)多個
73.Error與Exception區(qū)別?
Error和Exception都是java錯誤處理機制的一部分,都繼承了Throwable類。
Exception表示的異常,異??梢酝ㄟ^程序來捕捉,或者優(yōu)化程序來避免。
Error表示的是系統(tǒng)錯誤,不能通過程序來進行錯誤處理。
74.使用Log4j對程序有影響嗎?
有,log4j是用來日志記錄的,記錄一些關(guān)鍵敏感的信息,通常會將日志記錄到本地文件或者數(shù)據(jù)庫中。記錄在本地文件中,會有頻繁的io操作,會耗費一些系統(tǒng)資源。記錄在數(shù)據(jù)庫中,會頻繁地操作數(shù)據(jù)庫表,對系統(tǒng)性能也有一定的影響。但是為了程序安全以及數(shù)據(jù)的恢復(fù)或者bug的跟蹤,這點資源消耗是可以承受的。
75.Log4j日志有幾個級別?
由低到高:debug、info、wran、error
76.除了使用new創(chuàng)建對象之外,還可以用什么方法創(chuàng)建對象?
Java反射
77.Java反射創(chuàng)建對象效率高還是通過new創(chuàng)建對象的效率高?
通過new創(chuàng)建對象的效率比較高。通過反射時,先找查找類資源,使用類加載器創(chuàng)建,過程比較繁瑣,所以效率較低
78.Java中集合框架的有幾個?
Coillection、Map。
79.Collection接口下有那些集合框架?
List:線性表、Set:無序集合。
80.List接口有什么特點?
順序存儲、可以有重復(fù)值。
81.Set接口有什么特點
無須存儲、不能有重復(fù)值。
82.ArrayList與LinkedList有什么區(qū)別?
ArrayList與LinkedList都實現(xiàn)了List接口。
ArrayList是線性表,底層是使用數(shù)組實現(xiàn)的,它在尾端插入和訪問數(shù)據(jù)時效率較高,
Linked是雙向鏈表,他在中間插入或者頭部插入時效率較高,在訪問數(shù)據(jù)時效率較低
83.Array與ArrayList有什么不一樣?
Array與ArrayList都是用來存儲數(shù)據(jù)的集合。ArrayList底層是使用數(shù)組實現(xiàn)的,但是arrayList對數(shù)組進行了封裝和功能擴展,擁有許多原生數(shù)組沒有的一些功能。我們可以理解成ArrayList是Array的一個升級版。
84.Map有什么特點
以鍵值對存儲數(shù)據(jù)
元素存儲循序是無須的
不允許出現(xiàn)重復(fù)鍵
85.JDBC操作的步驟
加載數(shù)據(jù)庫驅(qū)動類
打開數(shù)據(jù)庫連接
執(zhí)行sql語句
處理返回結(jié)果
關(guān)閉資源
86.在使用jdbc的時候,如何防止出現(xiàn)sql注入的問題。
使用PreparedStatement類,而不是使用Statement類
87.怎么在JDBC內(nèi)調(diào)用一個存儲過程
使用CallableStatement
88.是否了解連接池,使用連接池有什么好處?
數(shù)據(jù)庫連接是非常消耗資源的,影響到程序的性能指標(biāo)。連接池是用來分配、管理、釋放數(shù)據(jù)庫連接的,可以使應(yīng)用程序重復(fù)使用同一個數(shù)據(jù)庫連接,而不是每次都創(chuàng)建一個新的數(shù)據(jù)庫連接。通過釋放空閑時間較長的數(shù)據(jù)庫連接避免數(shù)據(jù)庫因為創(chuàng)建太多的連接而造成的連接遺漏問題,提高了程序性能。
89.你所了解的數(shù)據(jù)源技術(shù)有那些?使用數(shù)據(jù)源有什么好處?
Dbcp,c3p0等,用的最多還是c3p0,因為c3p0比dbcp更加穩(wěn)定,安全;通過配置文件的形式來維護數(shù)據(jù)庫信息,而不是通過硬編碼。當(dāng)連接的數(shù)據(jù)庫信息發(fā)生改變時,不需要再更改程序代碼就實現(xiàn)了數(shù)據(jù)庫信息的更新。
90.Java的io流分為哪兩種?
按功能來分
輸入流(input),輸出流(output)
按類型來分
字節(jié)流,字符流
91.常用io類有那些?
File
FileInputSteam,F(xiàn)ileOutputStream
BufferInputStream,BufferedOutputSream
PrintWrite
FileReader,F(xiàn)ileWriter
BufferReader,BufferedWriter
ObjectInputStream,ObjectOutputSream
92.字節(jié)流與字符流的區(qū)別
以字節(jié)為單位輸入輸出數(shù)據(jù),字節(jié)流按照8位傳輸以字符為單位輸入輸出數(shù)據(jù),字符流按照16位傳輸
93.final、finalize()、finally
性質(zhì)不同
final為關(guān)鍵字;
finalize()為方法;
finally為區(qū)塊標(biāo)志,用于try語句中;
作用
final為用于標(biāo)識常量的關(guān)鍵字,final標(biāo)識的關(guān)鍵字存儲在常量池中(在這里final常量的具體用法將在下面進行介紹);
finalize()方法在Object中進行了定義,用于在對象“消失”時,由JVM進行調(diào)用用于對對象進行垃圾回收,類似于C++中的析構(gòu)函數(shù);用戶自定義時,用于釋放對象占用的資源(比如進行I/0操作);
finally{}用于標(biāo)識代碼塊,與try{}進行配合,不論try中的代碼執(zhí)行完或沒有執(zhí)行完(這里指有異常),該代碼塊之中的程序必定會進行;
94.抽象類和接口的區(qū)別?
抽象類:
抽象方法,只有行為的概念,沒有具體的行為實現(xiàn)。使用abstract關(guān)鍵字修飾,沒有方法體。子類必須重寫這些抽象方法。
包含抽象方法的類,一定是抽象類。
抽象類只能被繼承,一個類只能繼承一個抽象類。
接口:
全部的方法都是抽象方法,屬型都是常量
不能實例化,可以定義變量。
接口變量可以引用具體實現(xiàn)類的實例
接口只能被實現(xiàn),一個具體類實現(xiàn)接口,必須實現(xiàn)全部的抽象方法
接口之間可以多實現(xiàn)
一個具體類可以實現(xiàn)多個接口,實現(xiàn)多繼承現(xiàn)象
95.線程同步的方法
wait():讓線程等待。將線程存儲到一個線程池中。
notify():喚醒被等待的線程。通常都喚醒線程池中的第一個。讓被喚醒的線程處于臨時阻塞狀態(tài)。
notifyAll(): 喚醒所有的等待線程。將線程池中的所有線程都喚醒。
96.線程與進程的區(qū)別
進程是系統(tǒng)進行資源分配和調(diào)度的一個獨立單位,線程是CPU調(diào)度和分派的基本單位
進程和線程的關(guān)系:
一個線程只能屬于一個進程,而一個進程可以有多個線程,但至少有一個線程。
資源分配給進程,同一進程的所有線程共享該進程的所有資源。
線程在執(zhí)行過程中,需要協(xié)作同步。不同進程的線程間要利用消息通信的辦法實現(xiàn)同步。
線程是指進程內(nèi)的一個執(zhí)行單元,也是進程內(nèi)的可調(diào)度實體。
線程與進程的區(qū)別:
調(diào)度:線程作為調(diào)度和分配的基本單位,進程作為擁有資源的基本單位。
并發(fā)性:不僅進程之間可以并發(fā)執(zhí)行,同一個進程的多個線程之間也可以并發(fā)執(zhí)行。
擁有資源:進程是擁有資源的一個獨立單位,線程不擁有系統(tǒng)資源,但可以訪問隸屬于進程的資源。
系統(tǒng)開銷:在創(chuàng)建或撤銷進程的時候,由于系統(tǒng)都要為之分配和回收資源,導(dǎo)致系統(tǒng)的明顯大于創(chuàng)建或撤銷線程時的開銷。但進程有獨立的地址空間,進程崩潰后,在保護模式下不會對其他的進程產(chǎn)生影響,而線程只是一個進程中的不同的執(zhí)行路徑。線程有自己的堆棧和局部變量,但線程之間沒有單獨的地址空間,一個線程死掉就等于整個進程死掉,所以多進程的程序要比多線程的程序健壯,但是在進程切換時,耗費的資源較大,效率要差些。
97.&和&&的區(qū)別
&是位運算符。&&是布爾邏輯運算符,在進行邏輯判斷時用&處理的前面為false后面的內(nèi)容仍需處理,用&&處理的前面為false不再處理后面的內(nèi)容。
98.重載與重寫
Overload為重載,Override為重寫方法的重寫和重載是Java多態(tài)性的不同表現(xiàn)。重寫是父類與子類之間多態(tài)性的一種表現(xiàn),重載是一個類中多態(tài)性的一種表現(xiàn)。
如果在子類中定義某方法與其父類有相同的名稱和參數(shù),我們說該方法被重寫 (Override)。子類的對象使用這個方法時,將調(diào)用子類中的定義,對它而言,父類中的定義如同被"屏蔽"了。
如果在一個類中定義了多個同名的方法,它們或有不同的參數(shù)個數(shù)或有不同的參數(shù)類型,則稱為方法的重載(Overload)。
重載的方法是可以改變返回值的類型。
99.如果對象的引用被置為null,垃圾收集器是否會立即釋放對象占用的內(nèi)存?
不會,在下一個垃圾回收周期中,這個對象將是可被回收的。
100.串行(serial)收集器和吞吐量(throughput)收集器的區(qū)別是什么?
吞吐量收集器使用并行版本的新生代垃圾收集器,它用于中等規(guī)模和大規(guī)模數(shù)據(jù)的應(yīng)用程序。而串行收集器對大多數(shù)的小應(yīng)用(在現(xiàn)代處理器上需要大概