1玖姑、面向?qū)ο蟮奶卣饔心男┓矫妫?br> 封裝愕秫,繼承慨菱,多態(tài)
2、訪問修飾符public,private,protected,以及不寫(默認(rèn))時(shí)的區(qū)別戴甩?
全看得見符喝,全看不見,子類能看見甜孤,同一個(gè)包下能看見
3协饲、String 是最基本的數(shù)據(jù)類型嗎?
不是
4缴川、float f=3.4;是否正確茉稠?
不正確,應(yīng)該是float f = 3.4f. 3.4是double
5把夸、short s1 = 1; s1 = s1 + 1;有錯(cuò)嗎?short s1 = 1; s1 += 1;有錯(cuò)嗎而线?
前面有錯(cuò),因?yàn)榈忍?hào)右邊變INT恋日。后面沒錯(cuò)膀篮。
6、Java有沒有g(shù)oto谚鄙?
保留字各拷,未來可能會(huì)用。
7闷营、int和Integer有什么區(qū)別烤黍?
一個(gè)是基本類型,一個(gè)是OBJECT
8傻盟、&和&&的區(qū)別速蕊?
前者會(huì)全部算完。 后者如果表達(dá)式一旦出現(xiàn)一個(gè)FALSE娘赴,后面的就不算了规哲。
9、解釋內(nèi)存中的棧(stack)诽表、堆(heap)和靜態(tài)區(qū)(static area)的用法唉锌。
堆存實(shí)際對(duì)象,棧存指針竿奏,靜態(tài)區(qū)存靜態(tài)常量袄简,CLASS,全局變量泛啸。
10绿语、Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?
12吕粹,-11
11种柑、switch 是否能作用在byte 上,是否能作用在long 上匹耕,是否能作用在String上聚请?
能在BYTE, JDK 6還7后能在STRING,原理用HASHCODE映射到INT泌神。 Long不行良漱。
12、用最有效率的方法計(jì)算2乘以8欢际?
2<<3
13母市、數(shù)組有沒有l(wèi)ength()方法?String有沒有l(wèi)ength()方法损趋?
數(shù)組有l(wèi)ength患久,無(wú)length()方法
String 有
14、在Java中浑槽,如何跳出當(dāng)前的多重嵌套循環(huán)蒋失?
3種吧。第一桐玻, 設(shè)計(jì)一個(gè)標(biāo)志篙挽,BREAK 到那個(gè)標(biāo)志
第二,THROW EXCEPTION
第三镊靴,外層循環(huán)铣卡,加一個(gè)BOOLEAN。 內(nèi)存循環(huán)BREAK前偏竟,把那個(gè)BOOLEAN 給FALSE了煮落。終結(jié)外層循環(huán)
15、構(gòu)造器(constructor)是否可被重寫(override)踊谋?
不可以
16蝉仇、兩個(gè)對(duì)象值相同(x.equals(y) == true),但卻可有不同的hash code殖蚕,這句話對(duì)不對(duì)轿衔?
不對(duì)
17、是否可以繼承String類睦疫?
是FINAL的 繼承不了
18呀枢、當(dāng)一個(gè)對(duì)象被當(dāng)作參數(shù)傳遞到一個(gè)方法后,此方法可改變這個(gè)對(duì)象的屬性笼痛,并可返回變化后的結(jié)果,那么這里到底是值傳遞還是引用傳遞?
引用傳遞缨伊,如數(shù)組
19摘刑、String和StringBuilder、StringBuffer的區(qū)別刻坊?
STRING不可變對(duì)象枷恕;BUILDER是可變STRING,可以動(dòng)態(tài)APPEND谭胚。最后那個(gè)是STRING BUILDER的線程安全版徐块。
20、重載(Overload)和重寫(Override)的區(qū)別灾而。重載的方法能否根據(jù)返回類型進(jìn)行區(qū)分胡控?
重載,就是同樣的方法名 不同傳參旁趟。 不能根據(jù)返回類型區(qū)分昼激。
重寫,就是子類替換掉父類的方法的行為锡搜,和父類同方法名橙困,同參數(shù),同返回類型耕餐。
21凡傅、描述一下JVM加載class文件的原理機(jī)制?
自底向上查有沒有沒加載肠缔,自頂向下去加載這個(gè)類夏跷。
22、char 型變量中能不能存貯一個(gè)中文漢字桩砰,為什么拓春?
能,一個(gè)中文漢子需要16位亚隅,如果一個(gè)CHAR是8位是不夠硼莽。JAVA里一個(gè)CHAR 是16位的,可以存放煮纵。
23懂鸵、抽象類(abstract class)和接口(interface)有什么異同?
abstract class 可以有實(shí)現(xiàn)的方法行疏,可以有屬性匆光,只能被繼承一次。
interface 都是聲明方法酿联,JDK 8 可以有DEFAULT實(shí)現(xiàn)终息《峁可以被實(shí)現(xiàn)多個(gè)≈苷福可以有public static final 屬性柳譬。
24、靜態(tài)嵌套類(Static Nested Class)和內(nèi)部類(Inner Class)的不同续镇?
一個(gè)只能訪問外部靜態(tài)資源美澳。一個(gè)沒有這個(gè)限制虚青。但是必須通過NEW一個(gè)父類饭耳,才能引用的到內(nèi)部類的東西矫夷。
25捆憎、Java 中會(huì)存在內(nèi)存泄漏嗎句惯,請(qǐng)簡(jiǎn)單描述莺禁。
會(huì)幕垦。SOFT REFERENCE 解決的返咱,WEEKHASHMAP解決的 情況逢净。
26哥放、抽象的(abstract)方法是否可同時(shí)是靜態(tài)的(static),是否可同時(shí)是本地方法(native),是否可同時(shí)被synchronized修飾爹土?
全不能甥雕。
27、闡述靜態(tài)變量和實(shí)例變量的區(qū)別胀茵。
一個(gè)一定要有實(shí)例才能用社露。一個(gè)不需要。
28琼娘、是否可以從一個(gè)靜態(tài)(static)方法內(nèi)部發(fā)出對(duì)非靜態(tài)(non-static)方法的調(diào)用峭弟?
除非在靜態(tài)方法里NEW出按個(gè)對(duì)象,不然不行脱拼。
29瞒瘸、如何實(shí)現(xiàn)對(duì)象克隆熄浓?
CLONEABLE接口實(shí)現(xiàn)后情臭,調(diào)用CLONE()
30、String s = new String("xyz");創(chuàng)建了幾個(gè)字符串對(duì)象赌蔑?
2個(gè)俯在,一個(gè)在STRING常量池,一個(gè)在堆娃惯。
31跷乐、接口是否可繼承(extends)接口?抽象類是否可實(shí)現(xiàn)(implements)接口趾浅?抽象類是否可繼承具體類(concrete class)愕提?
1.都可以
32馒稍、一個(gè)".java"源文件中是否可以包含多個(gè)類(不是內(nèi)部類)?有什么限制揪荣?
可以筷黔,其他類不要是PUBLIC的
33、Anonymous Inner Class(匿名內(nèi)部類)是否可以繼承其它類仗颈?是否可以實(shí)現(xiàn)接口?
都可以 椎例。
34挨决、內(nèi)部類可以引用它的包含類(外部類)的成員嗎?有沒有什么限制订歪?
就靜態(tài)內(nèi)部類不行脖祈。只能訪問包含類的靜態(tài)資源。
35刷晋、Java 中的final關(guān)鍵字有哪些用法盖高?
屬性上,JVM final語(yǔ)義眼虱,保證創(chuàng)建時(shí)的內(nèi)存可見性喻奥。其次一旦賦值后,不可變捏悬。
方法上撞蚕,表示該方法不能被重寫
類上,該類不能被繼承过牙。
36甥厦、數(shù)據(jù)類型之間的轉(zhuǎn)換:
?寇钉?刀疙?
37、如何實(shí)現(xiàn)字符串的反轉(zhuǎn)及替換扫倡?
如果是算法谦秧,我就先不寫了。 用工具的話new StringBuilder(s).reverse().toString()
s.replace("from","to");
38镊辕、怎樣將GB2312編碼的字符串轉(zhuǎn)換為ISO-8859-1編碼的字符串油够?
new String(s.getBytes("GB2312"),"ISO-8859-1");
39、日期和時(shí)間:
Date Calendar Time SimpleDateFormat
40征懈、打印昨天的當(dāng)前時(shí)刻石咬。
new Date(new Date().getTime() - 86400*1000)
41、比較一下Java和JavaSciprt卖哎。
一個(gè)有虛擬機(jī)鬼悠,一個(gè)沒有删性。
一個(gè)是強(qiáng)類型,一個(gè)是動(dòng)態(tài)類型焕窝。
42蹬挺、什么時(shí)候用斷言(assert)?
判斷一個(gè)變量應(yīng)該是什么的時(shí)候它掂。比如assert(a!=null)
43巴帮、Error和Exception有什么區(qū)別?
ERROR一般由JVM本身拋出虐秋。
EXCEPTION是程序員自己定義榕茧。
44、try{}里有一個(gè)return語(yǔ)句客给,那么緊跟在這個(gè)try后的finally{}里的代碼會(huì)不會(huì)被執(zhí)行用押,什么時(shí)候被執(zhí)行,在return前還是后?
會(huì)被執(zhí)行靶剑,RETURN 前蜻拨。
45、Java語(yǔ)言如何進(jìn)行異常處理桩引,關(guān)鍵字:throws缎讼、throw、try阐污、catch休涤、finally分別如何使用?
throw 主動(dòng)拋出異常笛辟。
throws 聲明方法可以拋哪些異常
try catch finally 3件套
46功氨、運(yùn)行時(shí)異常與受檢異常有何異同?
運(yùn)行時(shí)異常不用聲明手幢,不要求一定要處理捷凄。
受檢異常要么TRY CATCH 要么THROWS
47、列出一些你常見的運(yùn)行時(shí)異常围来?
數(shù)組越界跺涤,除以0,還有IILEGALARUMENT
48监透、闡述final桶错、finally、finalize的區(qū)別胀蛮。
前者是個(gè)定義院刁。上面回答過。 后者是套代碼粪狼,表示無(wú)論有沒有異常退腥,F(xiàn)INNALY都要做的事任岸。
finalize 是OBJECT的一個(gè)方法,在它被垃圾回收器收集的時(shí)候可以調(diào)用一下這個(gè)方法狡刘。
49享潜、類ExampleA繼承Exception,類ExampleB繼承ExampleA嗅蔬。
請(qǐng)問執(zhí)行此段代碼的輸出是什么剑按?
?澜术?吕座? 是想考就近原則嗎。EAMPLEB 被拋出瘪板,EXAMPLE A 和EXCEPTION catch ,應(yīng)該被CATCH住的是ExampleA這個(gè)方法塊。
50漆诽、List侮攀、Set、Map是否繼承自Collection接口厢拭?
Map 不是
51兰英、闡述ArrayList、Vector供鸠、LinkedList的存儲(chǔ)性能和特性畦贸。
前者適合O1讀,最后那個(gè)適合O1 插楞捂,特別適合插在頭部薄坏。
VECTOR是線程安全的
52、Collection和Collections的區(qū)別寨闹?
前者是個(gè)接口胶坠,后者是工具類
53、List繁堡、Map沈善、Set三個(gè)接口存取元素時(shí),各有什么特點(diǎn)椭蹄?
add,get// put ,get remove// add,remove,contains
后面2個(gè)都有唯一的特性闻牡。有沒有序的問題當(dāng)然TREEMAP,LINKEDHASHMAP另說哈
54绳矩、TreeMap和TreeSet在排序時(shí)如何比較元素罩润?Collections工具類中的sort()方法如何比較元素?
1.KEY得是實(shí)現(xiàn)COMPARABLE的,或者構(gòu)造MAP的時(shí)候傳一個(gè)COMPARATOR
2.同上
55埋酬、Thread類的sleep()方法和對(duì)象的wait()方法都可以讓線程暫停執(zhí)行哨啃,它們有什么區(qū)別?
sleep 不釋放鎖烧栋。而且有時(shí)限
WAIT釋放鎖,要等NOTIFY拳球。
56审姓、線程的sleep()方法和yield()方法有什么區(qū)別?
YIELD是交出CPU調(diào)度權(quán)祝峻,SLEEP 就是線程掛起一段時(shí)間魔吐,同時(shí)能響應(yīng)INTERRUPTED EXCEPTION。
57莱找、當(dāng)一個(gè)線程進(jìn)入一個(gè)對(duì)象的synchronized方法A之后酬姆,其它線程是否可進(jìn)入此對(duì)象的synchronized方法B?
要看這個(gè)方法是不是靜態(tài)方法奥溺。
58辞色、請(qǐng)說出與線程同步以及線程調(diào)度相關(guān)的方法。
synchronized. wait & notify. lock. countdownlatch,cyclicbarrier,semaphore,exchange.
threadpool. fork/join
59浮定、編寫多線程程序有幾種實(shí)現(xiàn)方式相满?
繼承THREAD 類。
實(shí)現(xiàn)RUNABLE接口
匿名內(nèi)部類NEW THREAD桦卒,或傳一個(gè)NEW RUNNABLE
線程池立美。
Timer 定時(shí)器
CALLABLE with FUTURE TASK
60、synchronized關(guān)鍵字的用法方灾?
套實(shí)例方法(實(shí)例對(duì)象)建蹄,靜態(tài)方法(CLASS對(duì)象),或者一個(gè)方法塊(自己申明OBJECT)裕偿。
61洞慎、舉例說明同步和異步。
異步就是你發(fā)了請(qǐng)求击费,可以先去忙別的拢蛋,事后再回調(diào)。同步就是一直等蔫巩,等到那邊響應(yīng)你谆棱。
62、啟動(dòng)一個(gè)線程是調(diào)用run()還是start()方法圆仔?
START
63垃瞧、什么是線程池(thread pool)?
很多線程調(diào)度,線程池會(huì)按需為你動(dòng)態(tài)的分配線程資源和創(chuàng)建線程資源和回收線程資源坪郭。
64个从、線程的基本狀態(tài)以及狀態(tài)之間的關(guān)系?
NEW , RUNNABLE嗦锐,BLOCKED,WAITED,TIME_WAITED,TERMINATE
65嫌松、簡(jiǎn)述synchronized 和java.util.concurrent.locks.Lock的異同?
一個(gè)是JVM內(nèi)置的實(shí)現(xiàn)奕污。
另外一個(gè)需要手動(dòng)調(diào)用萎羔,自己LOCK,UNLOCK。同時(shí)支持公平碳默,可重入贾陷,可中斷,可限時(shí)嘱根。
66髓废、Java中如何實(shí)現(xiàn)序列化,有什么意義该抒?
實(shí)現(xiàn)Serializable,可以變成2進(jìn)制進(jìn)行傳輸慌洪。
67、Java中有幾種類型的流凑保?
InputStream 字節(jié)流蒋譬。byte[]
InputStreamReader 字符流 char[]
68、寫一個(gè)方法愉适,輸入一個(gè)文件名和一個(gè)字符串,統(tǒng)計(jì)這個(gè)字符串在這個(gè)文件中出現(xiàn)的次數(shù)癣漆。
public static void main(String[] args) throws IOException {
FileReader fileReader = new FileReader(new File("1.txt"));
BufferedReader bufferedReader = new BufferedReader(fileReader);
StringBuilder stringBuilder = new StringBuilder();
String s;
while((s = bufferedReader.readLine()) != null){
stringBuilder.append(s);
}
String fileContent = stringBuilder.toString();
String needToSearch = "12";
int cnt = 0;
int idx;
while((idx = fileContent.indexOf(needToSearch)) != -1){
cnt++;
fileContent = fileContent.substring(idx+needToSearch.length());
}
System.out.println(cnt);
}
69维咸、如何用Java代碼列出一個(gè)目錄下所有的文件?
public static void main(String[] args) throws IOException {
File d = new File("D://");
for(File f : d.listFiles()){
System.out.println(f.getName());
}
}
如果需要遞歸的打印的話
public static void main(String[] args) throws IOException {
myPrintFile(new File("E:\\BaiduNetdiskDownload\\liuyubo"),"");
}
private static void myPrintFile(File file,String level) {
System.out.println(level+file.getName());
if(file.isDirectory()){
for(File f:file.listFiles()){
myPrintFile(f,level+"\t");
}
}
}
70惠爽、用Java的套接字編程實(shí)現(xiàn)一個(gè)多線程的回顯(echo)服務(wù)器癌蓖。
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(PORT);
while(true){
final Socket client = serverSocket.accept();
new Thread(new Runnable() {
@Override
public void run() {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter pw = new PrintWriter(client.getOutputStream());
pw.println(br.readLine());
pw.flush();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}).start();
}
}
while(true){
Socket socket = new Socket("localhost",5678);
OutputStream op = socket.getOutputStream();
PrintWriter printWriter = new PrintWriter(op,true);
Random r = new Random();
printWriter.println("hello"+r.nextInt());
InputStream input = socket.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
String line = reader.readLine();
System.out.println(line);
Thread.sleep(5000);
}
71、XML文檔定義有幾種形式婚肆?它們之間有何本質(zhì)區(qū)別租副?解析XML文檔有哪幾種方式?
DTD 和SCHEMA较性。
SCHEMA更強(qiáng)強(qiáng)大一些用僧,支持的語(yǔ)法更多。
DOM 是會(huì)把XML一次性加載進(jìn)內(nèi)存并構(gòu)建一棵樹
SAX是基于流一點(diǎn)一點(diǎn)讀赞咙,碰到需要的就會(huì)響應(yīng)责循。
72、你在項(xiàng)目中哪些地方用到了XML攀操?
SPRING , WEB.XML, webservice 發(fā)數(shù)據(jù)院仿。
73、闡述JDBC操作數(shù)據(jù)庫(kù)的步驟。
1.加載DRIVET歹垫。 2.連接剥汤。 3.拼接SQL語(yǔ)句。 4.執(zhí)行 5.拿到返回結(jié)果排惨。 6.關(guān)閉
74吭敢、Statement和PreparedStatement有什么區(qū)別?哪個(gè)性能更好若贮?
后者更好省有,比前者多3個(gè)優(yōu)點(diǎn)。
1.更安全谴麦,不用字符串拼SQL蠢沿,可以防止SQL注入
2.更高效,執(zhí)行相同的查詢匾效,會(huì)有編譯后的SQL緩存舷蟀。
3.可讀性更好
75、使用JDBC操作數(shù)據(jù)庫(kù)時(shí)面哼,如何提升讀取數(shù)據(jù)的性能野宜?如何提升更新數(shù)據(jù)的性能?
讀數(shù)據(jù)的時(shí)候魔策,可以通過結(jié)果集(ResultSet)對(duì)象的setFetchSize()方法指定每次抓取的記錄數(shù)匈子。
寫數(shù)據(jù)的時(shí)候,批量寫闯袒,一次COMMIT
76虎敦、在進(jìn)行數(shù)據(jù)庫(kù)編程時(shí),連接池有什么作用政敢?
創(chuàng)建和釋放連接都有很大的開銷其徙。可以在啟動(dòng)的時(shí)候喷户,先創(chuàng)建幾個(gè)連接唾那。用完之后還給連接池。這樣不用開和關(guān)褪尝,來提高效率闹获。
77、什么是DAO模式河哑?
DATA映射到OBJECT
78昌罩、事務(wù)的ACID是指什么?
原子性灾馒,一致性茎用,獨(dú)立性,持久性
79、JDBC中如何進(jìn)行事務(wù)處理轨功?
try{setAutoCommit(false) sql,sql commit, setAutoCommit(true)}
catch exception{ rollback(),setAutoCommit(true)}
80旭斥、JDBC能否處理Blob和Clob?
可以
81古涧、簡(jiǎn)述正則表達(dá)式及其用途垂券。
用一個(gè)范式規(guī)則來匹配或查找字符串
82、Java中是如何支持正則表達(dá)式操作的羡滑?
String 里有MATCHES 和 replaceAll
Pattern &Matcher
83菇爪、獲得一個(gè)類的類對(duì)象有哪些方式?
A.class, a.getClass(), Class.forName()
84柒昏、如何通過反射創(chuàng)建對(duì)象凳宙?
a.getClass().newInstance();
85、如何通過反射獲取和設(shè)置對(duì)象私有字段的值职祷?
getDeclaredField('private')
setAccessbile(true)
field.set(obj,xxx);
86氏涩、如何通過反射調(diào)用對(duì)象的方法?
Method m = class.getMethod("methodName")有梆;
m.invoke(obj,args);
87是尖、簡(jiǎn)述一下面向?qū)ο蟮?六原則一法則"。
開閉原則泥耀,最少知道原則饺汹,里式替換,接口分離痰催,合成聚合首繁,單一職責(zé),依賴倒轉(zhuǎn)
88陨囊、簡(jiǎn)述一下你了解的設(shè)計(jì)模式。
適配器夹攒,工廠蜘醋,模板,觀察者咏尝,代理模式压语,責(zé)任鏈,單例编检。
89胎食、用Java寫一個(gè)單例類。
public class Single {
INSTANCE;
public Single getInstance(){
return Single.INSTANCE;
}
}
90允懂、什么是UML厕怜?
統(tǒng)一建模語(yǔ)言
91、UML中有哪些常用的圖?
時(shí)序圖粥航,USE CASE 圖琅捏,類圖
92、用Java寫一個(gè)冒泡排序递雀。
public static void main(String[] args) throws IOException {
int[] A = {9,4,2,8,5,1,0,6,7};
int l = A.length;
for(int i = l-1; i >= 0; i--){
for(int j = 0; j < i; j++){
if(A[j]>A[j+1]) swap(A,j,j+1);
}
}
System.out.println(Arrays.toString(A));
}
private static void swap(int[] A,int i,int j) {
int tmp = A[i];
A[i] = A[j];
A[j] = tmp;
}
93柄延、用Java寫一個(gè)折半查找。
int index = -1;
int s = 0, e = l-1;
while(s<=e){
int mid = (e-s)/2+s;
if(A[mid] < tar){
s = mid+1;
}else if(A[mid]>tar){
e = mid-1;
}else{
index = mid;
break;
}
}
System.out.println(index);
}
94缀程、闡述Servlet和CGI的區(qū)別?
不會(huì)啦
95搜吧、Servlet接口中有哪些方法?
init(servletConfig),service(servletRequest,servletRespone),destory()
getServletConfig(),getServletInfo()
96杨凑、轉(zhuǎn)發(fā)(forward)和重定向(redirect)的區(qū)別滤奈?
轉(zhuǎn)發(fā)是由服務(wù)器去到另一個(gè)URL獲得資源,而對(duì)CLIENT來說是不知道有這件事
REDIRECT蠢甲,CLIENT可以發(fā)現(xiàn)URL被重定向到別的網(wǎng)址了僵刮。
97、JSP有哪些內(nèi)置對(duì)象鹦牛?作用分別是什么搞糕?
不會(huì)啦
98、get和post請(qǐng)求的區(qū)別曼追?
get是請(qǐng)求資源窍仰,可緩存,冪等礼殊。
post 是 修改資源驹吮,不可緩存,不冪等晶伦。
POST發(fā)2次請(qǐng)求碟狞,GET發(fā)一次。
99婚陪、常用的Web服務(wù)器有哪些族沃?
tomcat,redit,ngnix,iis,google server,nginx,apache,jboss