天天看點

java寶典(1)

說明,為了減輕大家的負擔和節省大家的時間,一些過時知識點和被筆試機率極低的題目不再被收錄和分析。

回答問題的思路:先正面叙述一些基本的核心知識,然後描述一些特殊的東西,最後再來一些錦上添花的東西。要注意有些不是錦上添花,而是畫蛇添足的東西,不要随便寫上。把答題像寫書一樣寫。我要回答一個新技術的問題大概思路和步驟是:我們想幹什麼,幹這個遇到了什麼問題,現在用什麼方式來解決。其實我們講課也是這樣一個思路。

例如,将ajax時,我們希望不改變原來的整個網頁,而知識改變網頁中的局部内容,例如,使用者名校驗,級聯下拉清單,下來樹狀菜單。用傳統方式,就是浏覽器自己直接向伺服器發請求,伺服器傳回新頁面回蓋掉老頁面,這樣就不流暢了。

對于這個系列裡的問題,每個學Java的人都應該搞懂。當然,如果隻是學Java玩玩就無所謂了。如果你認為自己已經超越初學者了,卻不很懂這些問題,請将你自己重歸初學者行列。

答題時,先答是什麼,再答有什麼作用和要注意什麼(這部分最重要,展現自己的心得)

答案的段落分别,層次分明,條理清楚都非常重要,從這些表面的東西也可以看出一個人的習慣、辦事風格、條理等。

要将你做出答案的思路過程,或者說你記住答案的思想都寫下來。把答題想着是辯論賽。答題就是給别人講道理、擺事實。答題不局限于什麼格式和形式,就是要将自己的學識展現出來!

别因為人家題目本來就模棱兩可,你就心裡膽怯和沒底氣了,不敢回答了。你要大膽地指出對方題目很模糊和你的觀點,不要把面試官想得有多高,其實他和你就是差不多的,你想想,如果他把你招進去了,你們以後就是同僚了,可不是差不多的嗎?

關于就業薪水,如果你是應屆生,那不能要高工資,好比大餅的故事,要拿高工資,就去中關村!少數人基礎确實很好,在校期間确實又做過一些項目,那仍然是可以要到相對高的工資的。基礎好的冷桂華的故事。

初級程式員薪水:2000-4500

中級程式員薪水:4000-7000

進階程式員薪水:7000以上

公司招聘程式員更看重的要用到的編碼技術、而不是那些業務不太相關的所謂項目經曆:

1.公司想招什麼樣的人2.公司面試會問什麼,.3.履歷怎麼寫4怎樣達到履歷上的标準(教育訓練中心教項目的目的)

對于一些公司接到了一些項目,想招聘一些國中級的程式員過來幫助寫代碼,完成這個項目,你更看重的是他的專業技術功底,還是以前做過幾個項目的經曆呢?我們先排除掉那些編碼技術功底好,又正好做過相似項目的情況,實際上,這種魚和熊掌兼得的情況并不常見。其實公司很清楚,隻要招聘進來的人技術真的很明白,那他什麼項目都可以做出來,公司招人不是讓你去重複做你以前的項目,而是做一個新項目,業務方面,你隻要進了項目團隊,自然就能掌握。是以,大多數招聘機關在招聘那些編碼級别的程式員時也沒指望能招聘到做過類似項目的人,也不會刻意去找做過類似項目的人,用人機關也不是想把你招進,然後把你以前做過的項目重做一遍,是以,用人機關更看重招進來的人對要用到的編碼技術的功底到底怎樣,技術紮實不紮實,項目則隻要跟着開發團隊走,自然就沒問題。除非是一些非常專業的行業,要招聘特别進階的開發人員和系統分析師,招聘機關才特别注重他的項目經驗和行業經驗,要去找到行業高手,公司才關心項目和與你聊項目的細節,這樣的人通常都不是通過正常招聘管道去招聘進來的,而是通過各種手段挖過來的,這情況不再我今天要讨論的範圍中。

技術學得明白不明白,人家幾個問題就把你的深淺問出來了,隻要問一些具體的技術點,就很容易看出你是真懂還是假懂,很容看出你的技術深度和實力,是以,技術是來不得半點虛假的,必須紮紮實實。

由于項目的種類繁多,涉及到現實生活中的各行各業,什麼五花八門的業務都有,例如,酒店房間預定管理,公司車輛排程管理,學校課程教室管理,超市進銷存管理,知識内容管理,等等……成千上萬等等,但是,不管是什麼項目,采用的無非都是我們學習的那些目前流行和常用的技術。技術好、經驗豐富,則項目做出來的效率高些,程式更穩定和更容易維護些;技術差點,碰碰磕磕最後也能把項目做出來,無非是做的周期長點、返工的次數多點,程式代碼寫得差些,用的技術笨拙點。如果一個人不是完完全全做過某個項目,他是不太關心該項目的業務的,對其中的一些具體細節更是一竅不知,(如果我招你來做圖書管理,你項目經曆說你做過汽車排程,那我能問你汽車排程具體怎麼回事嗎?不會,是以,你很容易蒙混過去的)而一個程式員的整個職業生涯中能實實在在和完完整整做出來的項目沒幾個,更别說在多個不同行業的項目了,有的程式員更是一輩子都隻是在做某一個行業的項目,結果他就成了這個行業的專家(專門幹一件事的家夥)。是以,技術面試官通常沒正好親身經曆過你履歷寫的那些項目,他不可能去問你寫的那些項目的具體細節,而是隻能泛泛地問你這個項目是多少人做的,做了多長時間,開發的過程,你在做項目的過程中有什麼心得和收獲,用的什麼技術等面上的問題,是以,履歷上的項目經曆可以含有很多水分,很容易作假,技術面試官也無法在項目上甄别你的真僞。

履歷該怎麼寫:精通那些技術,有一些什麼項目經曆

教項目是為了鞏固和靈活整合運用技術,增強學習的趣味性,熟悉做項目的流程,或得一些專業課程中無法獲得的特有項目經驗,增強自己面試的信心。講的項目應該真實可靠才有價值,否則,表面上是項目,實際上還是知識點的整合,對鞏固技術點和增強學習的趣味性,但無法獲得實際的項目經驗。(項目主要是增加你經驗的可信度,獲得更多面試機會,真正能不能找到工作,找到好工作,主要看你鍵盤上的功夫了)

建議大家盡量開自己的blog,堅持每天寫技術blog。在履歷上寫上自己的blog位址,可以多轉載一些技術文章。

Java就業教育訓練教程就是小沈陽

1. Java基礎部分

基礎部分的順序:基本文法,類相關的文法,内部類的文法,繼承相關的文法,異常的文法,線程的文法,集合的文法,io 的文法,虛拟機方面的文法,其他

1、一個".java"源檔案中是否可以包括多個類(不是内部類)?有什麼限制?

可以有多個類,但隻能有一個public的類,并且public的類名必須與檔案名相一緻。

2、&和&&的差別。

&和&&都可以用作邏輯與的運算符,表示邏輯與(and),當運算符兩邊的表達式的結果都為true時,整個運算結果才為true,否則,隻要有一方為false,則結果為false。

&&還具有短路的功能,即如果第一個表達式為false,則不再計算第二個表達式,例如,對于if(str != null && !str.equals(“”))表達式,當str為null時,後面的表達式不會執行,是以不會出現NullPointerException如果将&&改為&,則會抛出NullPointerException異常。If(x==33 & ++y>0) y會增長,If(x==33 && ++y>0)不會增長

&還可以用作位運算符,當&操作符兩邊的表達式不是boolean類型時,&表示按位與操作,我們通常使用0x0f來與一個整數進行&運算,來擷取該整數的最低4個bit位,例如,0x31 & 0x0f的結果為0x01。

備注:這道題先說兩者的共同點,再說出&&和&的特殊之處,并列舉一些經典的例子來表明自己了解透徹深入、實際經驗豐富。

3、Java有沒有goto?

java中的保留字,現在沒有在java中使用。

4、在JAVA中,如何跳出目前的多重嵌套循環?

在Java中,要想跳出多重循環,可以在外面的循環語句前定義一個标号,然後在裡層循環體的代碼中使用帶有标号的break 語句,即可跳出外層循環。例如,

ok:

for(int i=0;i<10;i++)

{

for(int j=0;j<10;j++)

System.out.println(“i=” + i + “,j=” + j);

if(j == 5) break ok;

}

}

另外,我個人通常并不使用标号這種方式,而是讓外層的循環條件表達式的結果可以受到裡層循環體代碼的控制,例如,要在二維數組中查找到某個數字。

boolean found = false;

for(int i=0;i<10 && !found;i++)

if(j == 5)

found = true;

break;

5、switch是否能作用在byte上,是否能作用在long上,是否能作用在String上?

在switch(expr1)中,expr1隻能是一個整數表達式或者枚舉常量(更大字型),整數表達式可以是int基本類型或Integer包裝類型,由于,byte,short,char都可以隐含轉換為int,是以,這些類型以及這些類型的包裝類型也是可以的。顯然,long和String類型都不符合sitch的文法規定,并且不能被隐式轉換成int類型,是以,它們不能作用于swtich語句中。

6、short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?

對于short s1 = 1; s1 = s1 + 1; 由于s1+1運算時會自動提升表達式的類型,是以結果是int型,再指派給short類型s1時,編譯器将報告需要強制轉換類型的錯誤。

對于short s1 = 1; s1 += 1;由于 += 是java語言規定的運算符,java編譯器會對它進行特殊處理,是以可以正确編譯。

7、char型變量中能不能存貯一個中文漢字?為什麼?

char型變量是用來存儲Unicode編碼的字元的,unicode編碼字元集中包含了漢字,是以,char型變量中當然可以存儲漢字啦。不過,如果某個特殊的漢字沒有被包含在unicode編碼字元集中,那麼,這個char型變量中就不能存儲這個特殊漢字。補充說明:unicode編碼占用兩個位元組,是以,char類型的變量也是占用兩個位元組。

備注:後面一部分回答雖然不是在正面回答題目,但是,為了展現自己的學識和表現自己對問題了解的透徹深入,可以回答一些相關的知識,做到知無不言,言無不盡。

8、程式設計題: 用最有效率的方法算出2乘以8等於幾?

2 << 3,

因為将一個數左移n位,就相當于乘以了2的n次方,那麼,一個數乘以8隻要将其左移3位即可,而位運算cpu直接支援的,效率最高,是以,2乘以8等於幾的最效率的方法是2 << 3。

9、請設計一個一百億的電腦

首先要明白這道題目的考查點是什麼,一是大家首先要對計算機原理的底層細節要清楚、要知道加減法的位運算原理和知道計算機中的算術運算會發生越界的情況,二是要具備一定的面向對象的設計思想。

首先,計算機中用固定數量的幾個位元組來存儲的數值,是以計算機中能夠表示的數值是有一定的範圍的,為了便于講解和了解,我們先以byte 類型的整數為例,它用1個位元組進行存儲,表示的最大數值範圍為-128到+127。-1在記憶體中對應的二進制資料為11111111,如果兩個-1相加,不考慮Java運算時的類型提升,運算後會産生進位,二進制結果為1,11111110,由于進位後超過了byte類型的存儲空間,是以進位部分被舍棄,即最終的結果為11111110,也就是-2,這正好利用溢位的方式實作了負數的運算。-128在記憶體中對應的二進制資料為10000000,如果兩個-128相加,不考慮Java運算時的類型提升,運算後會産生進位,二進制結果為1,00000000,由于進位後超過了byte類型的存儲空間,是以進位部分被舍棄,即最終的結果為00000000,也就是0,這樣的結果顯然不是我們期望的,這說明計算機中的算術運算是會發生越界情況的,兩個數值的運算結果不能超過計算機中的該類型的數值範圍。由于Java中涉及表達式運算時的類型自動提升,我們無法用byte類型來做示範這種問題和現象的實驗,大家可以用下面一個使用整數做實驗的例子程式體驗一下:

int a = Integer.MAX_VALUE;

int b = Integer.MAX_VALUE;

int sum = a + b;

System.out.println(“a=”+a+”,b=”+b+”,sum=”+sum);

先不考慮long類型,由于int的正數範圍為2的31次方,表示的最大數值約等于2*1000*1000*1000,也就是20億的大小,是以,要實作一個一百億的電腦,我們得自己設計一個類可以用于表示很大的整數,并且提供了與另外一個整數進行加減乘除的功能,大概功能如下:

()這個類内部有兩個成員變量,一個表示符号,另一個用位元組數組表示數值的二進制數

()有一個構造方法,把一個包含有多位數值的字元串轉換到内部的符号和位元組數組中

()提供加減乘除的功能

public class BigInteger

int sign;

byte[] val;

public Biginteger(String val)

sign = ;

val = ;

public BigInteger add(BigInteger other)

public BigInteger subtract(BigInteger other)

public BigInteger multiply(BigInteger other)

public BigInteger divide(BigInteger other)

備注:要想寫出這個類的完整代碼,是非常複雜的,如果有興趣的話,可以參看jdk中自帶的java.math.BigInteger類的源碼。面試的人也知道誰都不可能在短時間内寫出這個類的完整代碼的,他要的是你是否有這方面的概念和意識,他最重要的還是考查你的能力,是以,你不要因為自己無法寫出完整的最終結果就放棄答這道題,你要做的就是你比别人寫得多,證明你比别人強,你有這方面的思想意識就可以了,畢竟别人可能連題目的意思都看不懂,什麼都沒寫,你要敢于答這道題,即使隻答了一部分,那也與那些什麼都不懂的人差別出來,拉開了距離,算是矮子中的高個,機會當然就屬于你了。另外,答案中的架構代碼也很重要,展現了一些面向對象設計的功底,特别是其中的方法命名很專業,用的英文單詞很精準,這也是能力、經驗、專業性、英語水準等多個方面的展現,會給人留下很好的印象,在程式設計能力和其他方面條件差不多的情況下,英語好除了可以使你獲得更多機會外,薪水可以高出一千元。