java面试总结(第一天)
臨近大學(xué)畢業(yè),出來(lái)試試找工作,學(xué)c#出身,半路出家java,做過(guò)幾個(gè)ssh、stringMVC的項(xiàng)目。基礎(chǔ)知識(shí)不太扎實(shí),勿噴
以下是我面試過(guò)程中遇到的問(wèn)題
------------------------------------------------------------------------------------------------------------------------------
?1)下文摘自《Java?Concurrency?in?Practice》,請(qǐng)譯成中文。
“When used properly, threads can reduce development and maintenance costs and improve the performance of complex applications.
Threads make it easier to model how humans work and interact, by turning asynchronous workflows into mostly sequential ones.?
Threads are useful in GUI applications for improving the responsiveness of the user interface, and in server applications for improving
resource utilization and throughput.”
?
直接懵逼,后來(lái)回來(lái)上網(wǎng)一查《Java并發(fā)編程實(shí)踐》,豆瓣評(píng)分9.3
都說(shuō)是一本極好的并發(fā)入門(mén)書(shū)籍,果斷淘了一本英文的,據(jù)說(shuō)中文版翻譯極爛所以下了一個(gè)pdf加以對(duì)照。
還可以練一下英文水平
------------------------------------------------------------------------------------------------------------------------------
2)請(qǐng)指出下列程序片段的輸出結(jié)果
public class test {
public static void main(String[] args) throws Exception {
String str = "中國(guó)";
System.out.println(str.getBytes("UTF-8").length);
System.out.println(str.getBytes("GBK").length);
System.out.println(str.getBytes("ISO-8859-1").length);
System.out.println(new String(str.getBytes("ISO-8859-1"), "ISO-8859-1"));
System.out.println(new String(str.getBytes("UTF-8"), "UTF-8"));
System.out.println(new String(str.getBytes("GBK"), "GBK"));
}
}
這也是java程序員經(jīng)常碰到的亂碼問(wèn)題,下面是輸出結(jié)果
-----------
6?
4
2
??
中國(guó)
中國(guó)
----------
ISO8859-1,通常叫做Latin-1。Latin-1包括了書(shū)寫(xiě)所有西方歐洲語(yǔ)言不可缺少的附加字符。
gb2312是簡(jiǎn)體中文的碼
gbk支持簡(jiǎn)體中文及繁體中文 big5支持繁體中文
utf-8支持幾乎所有字符
------------------------------------------------------------------------------------------------------------------------------
3)請(qǐng)使用Java語(yǔ)言實(shí)現(xiàn)多線程模式下的生產(chǎn)者與消費(fèi)者問(wèn)題。
這里我就直接把網(wǎng)上的例子鏈接拿過(guò)來(lái)吧,因?yàn)闆](méi)他們寫(xiě)的好23333
? ?? 1.這篇文章主要介紹了java多線程解決生產(chǎn)者消費(fèi)者問(wèn)題的方法,實(shí)例分析了
java采用多線程的方法解決生產(chǎn)者消費(fèi)者問(wèn)題的相關(guān)技巧,需要的朋友可以參考下
http://www.jb51.net/article/67018.htm
2.Java多線程-并發(fā)協(xié)作(生產(chǎn)者消費(fèi)者模型)
http://www.cnblogs.com/linjiqin/p/3217050.html
3.http://blog.csdn.net/thinkpadshi/article/details/8163751
------------------------------------------------------------------------------------------------------------------------------
這道題也是copy某位前輩的,如果涉及到版權(quán)聯(lián)系我我會(huì)刪除,原帖鏈接(完整版)http://jeromecen1021.blog.163.com/blog/static/18851527120117274624888/
4)地球人都知道,Java有個(gè)東西叫垃圾收集器,它讓創(chuàng)建的對(duì)象不需要像c/cpp那樣delete、free掉,你能不能談?wù)?#xff0c;GC是在什么時(shí)候 ,對(duì)什么東西,做了什么事情?
一.回答:什么時(shí)候?
1.系統(tǒng)空閑的時(shí)候。
? ?? 分析:這種回答大約占30%,遇到的話一般我就會(huì)準(zhǔn)備轉(zhuǎn)向別的話題,譬如算法、譬如SSH看看能否發(fā)掘一些他擅長(zhǎng)的其他方面。
2.系統(tǒng)自身決定,不可預(yù)測(cè)的時(shí)間/調(diào)用System.gc()的時(shí)候。
? ?? 分析:這種回答大約占55%,大部分應(yīng)屆生都能回答到這個(gè)答案,起碼不能算錯(cuò)誤是吧,后續(xù)應(yīng)當(dāng)細(xì)分一下到底是語(yǔ)言表述導(dǎo)致答案 太籠統(tǒng),還是本身就只有這樣一個(gè)模糊的認(rèn)識(shí)。
3.能說(shuō)出新生代、老年代結(jié)構(gòu),能提出minor gc/full gc
??? 分析:到了這個(gè)層次,基本上能說(shuō)對(duì)GC運(yùn)作有概念上的了解,譬如看過(guò)《深入JVM虛擬機(jī)》之類的。這部分不足10%。
4.能說(shuō)明minor gc/full gc的觸發(fā)條件、OOM的觸發(fā)條件,降低GC的調(diào)優(yōu)的策略。
??? 分析:列舉一些我期望的回答:eden滿了minor gc,升到老年代的對(duì)象大于老年代剩余空間full gc,或者小于時(shí)被
HandlePromotionFailure參數(shù)強(qiáng)制full gc;gc與非gc時(shí)間耗時(shí)超過(guò)了GCTimeRatio的限制引發(fā)OOM,調(diào)優(yōu)諸如通過(guò)NewRatio
控制新生代老年代比例,通過(guò) MaxTenuringThreshold控制進(jìn)入老年前生存次數(shù)等……能回答道這個(gè)階段就會(huì)給我?guī)?lái)比較高的
期望了,當(dāng)然面試的時(shí)候正常人都不會(huì)記得每個(gè)參數(shù)的拼寫(xiě),我自己寫(xiě)這段話的時(shí)候也是翻過(guò)手冊(cè)的。回答道這部分的小于2%。
總結(jié):程序員不能具體控制時(shí)間,系統(tǒng)在不可預(yù)測(cè)的時(shí)間調(diào)用System.gc()函數(shù)的時(shí)候;當(dāng)然可以通過(guò)調(diào)優(yōu),用NewRatio控制n
ewObject和oldObject的比例,用MaxTenuringThreshold?控制進(jìn)入oldObject的次數(shù),使得oldObject 存儲(chǔ)空間延遲達(dá)到full
gc,從而使得計(jì)時(shí)器引發(fā)gc時(shí)間延遲OOM的時(shí)間延遲,以延長(zhǎng)對(duì)象生存期。
------------------------------------------------------------------------------------------------------------------------------
5)StringBuffer與StringBuilder的區(qū)別
StringBuffer和StringBuilder類都表示內(nèi)容可以被修改的字符串,StringBuilder是線程不安全的,運(yùn)行效率高,如果一個(gè)字符串變量是在方法里面定義,
這種情況只可能有一個(gè)線程訪問(wèn)它,不存在不安全的因素了,則用StringBuilder。如果要在類里面定義成員變量,并且這個(gè)類的實(shí)例對(duì)象會(huì)在多線程環(huán)境下使用,那么最好用StringBuffer。
------------------------------------------------------------------------------------------------------------------------------
6)(參考)String 和StringBuffer的區(qū)別
JAVA平臺(tái)提供了兩個(gè)類:String和StringBuffer,它們可以儲(chǔ)存和操作字符串,即包含多個(gè)字符的字符數(shù)據(jù)。String類表示內(nèi)容不可改變的字符串。
而StringBuffer類表示內(nèi)容可以被修改的字符串。當(dāng)你知道字符數(shù)據(jù)要改變的時(shí)候你就可以使用StringBuffer。典型地,你可以使用StringBuffers來(lái)動(dòng)態(tài)構(gòu)造字符數(shù)據(jù)。
另外,String實(shí)現(xiàn)了equals方法,new String(“abc”).equals(new String(“abc”)的結(jié)果為true,而StringBuffer沒(méi)有實(shí)現(xiàn)equals方法,所以,new StringBuffer(“abc”).equals(new StringBuffer(“abc”)的結(jié)果為false。
------------------------------------------------------------------------------------------------------------------------------
大概就是這么多了明日繼續(xù),如果涉及到版權(quán)問(wèn)題聯(lián)系我,我會(huì)刪掉。
我只是博客的搬運(yùn)工~~~~~
轉(zhuǎn)載于:https://www.cnblogs.com/cbssyf/p/5422847.html
總結(jié)
以上是生活随笔為你收集整理的java面试总结(第一天)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: tiny4412u-boot烧写及根文件
- 下一篇: [洛谷P1439]排列LCS问题