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