<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    JAVA進行式
    讓我們把JAVA進行到底!
    posts - 13,comments - 21,trackbacks - 0

    1、heapstack有什么區別?
    ??? 棧(stack),是限定僅在表尾進行插入或刪除操作的線性表,棧的修改是按照后進先出(LIFO)原則進行的,因此棧又稱為后進先出線性表。在java中棧駐留于常規RAM(隨機訪問存儲器)區域,可通過“棧指針”獲得處理的直接支持。棧指針若向下移,會創建新的內存;若向上移,則會釋放那些內存。這是一種特別快、特別有效的數據保存方式,僅次于寄存器。創建程序時,Java編譯器必須準確地知道棧內保存的所有數據的“長度”以及“存在時間”。這是由于它必須生成相應的代碼,以便向上和向下移動指針。這一限制無疑影響了程序的靈活性,所以盡管有些Java數據要保存在堆棧里,如對象的引用(句柄)、局部變量、形式參數等,但java對象并不放在其中。?
    ??? 堆(heap),是一種常規用途的內存池(也在RAM區域),其中保存了Java對象。和棧不同之處在于,堆的存儲空間是在程序執行過程中動態分配的,編譯器不必知道要從堆里分配多少存儲空間,也不必知道存儲的數據要在堆里停留多長的時間。因此,用堆保存數據時會得到更大的靈活性。要求創建一個對象時,只需用new命令編制相關的代碼即可。執行這些代碼時,會在堆里自動進行數據的保存。當然,為達到這種靈活性,必然會付出一定的代價:在堆里分配存儲空間時會花掉更長的時間!

    2、error和exception的區別?
    ??? error是指與系統有關的錯誤,這種錯誤一般是不可恢復,或恢復起來很困難的,如內存溢出錯誤,是不可能由程序來處理的。
    ??? exception是指在程序執行過程中發生的,需要程序捕獲和處理的運行時錯誤,在程序運行正常的情況下,是不會發生的。JAVA程序違反了JAVA的語義規則時,JAVA虛擬機就會將發生的錯誤表示為一個異常。違反語義規則包括2種情況。一種是JAVA類庫內置的語義檢查。如數組下標越界,會引發IndexOutOfBoundsException;訪問null的對象時會引發NullPointerException。另一種情況就是JAVA允許程序員擴展這種語義檢查,程序員可以創建自己的異常,并自由選擇在何時用throw關鍵字引發異常。所有的異常都是java.lang.Thowable
    的子類。

    3、
    如果系統要使用超大整數(超過long長度范圍),請你設計一個數據結構來存儲這種超大型數字以及設計一種算法來實現超大整數加法運算)。
    public class BigInt {
    ?
    ??? /** 用于保存超大整數 */
    ??? private int[] intArr = null;
    ???
    ??? /** 無參構造方法構造一個初始化為0的大數 */
    ??? public BigInt() {
    ??????? this("0");
    ??? }
    ???
    ??? /** 構造一個帶參大數 */
    ??? public BigInt(String s) {
    ??????? if(intArr != null) {
    ??????????? intArr = null;
    ??????? }
    ??????? setArr(s);
    ??? }
    ?????
    ??? /** 設置大數 */
    ??? public void setArr(String s) {
    ??????? intArr = new int[s.length()];
    ??????? for(int i=0;i<s.length();i++){
    ??????????? int intTemp = s.charAt(i) - '0';
    ??????????? if(intTemp <= 9) {
    ??????????????? intArr[i] = intTemp;
    ??????????? }
    ??????? }
    ??? }
    ?
    ??? /** 取得數的字符串類型的表示 */
    ??? public String getArr() {
    ??????? StringBuffer strBuf = new StringBuffer();
    ??????? for(int i=0; i<intArr.length; i++) {
    ??????????? strBuf.append(intArr[i]);
    ??????? }
    ??????? return strBuf.toString();
    ??? }
    ?
    ??? /** 返回數的大小 */
    ??? private int length() {
    ??????? int len = 0;
    ??????? if(intArr != null) {
    ??????????? len = intArr.length;
    ??????? }
    ??????? return len;
    ??? }

    ??? private static BigInt fillZero(BigInt arr, int int0){
    ??????? BigInt temp = arr;
    ??????? for(int i=0; i<int0; i++){
    ??????????? temp = new BigInt("0" + temp.getArr());
    ??????? }???????
    ??????? return temp;
    ??? }
    ?
    ??? /** 對兩個BigInt型對象做加法運算,返回結果為BigInt型 */
    ??? public static BigInt add(BigInt one, BigInt two) {
    ??????? BigInt arrSum = null;
    ??????? BigInt arr = null;
    ??
    ??????? if(one.intArr.length > two.intArr.length) {
    ??????????? arrSum = one;
    ??????????? arr = fillZero(two, one.intArr.length - two.intArr.length);
    ??????? } else if(one.intArr.length == two.intArr.length) {
    ??????????? arrSum = two;
    ??????????? arr = one;
    ??????? } else {
    ??????????? arr = two;
    ??????????? arrSum = fillZero(one, two.intArr.length - one.intArr.length);
    ??????? }

    ??????? int i=arr.intArr.length-1;
    ??????? for(; i>=1; i--){
    ??????????? int intTemp = arrSum.intArr[i] + arr.intArr[i];
    ??????????? arrSum.intArr[i] = intTemp%10;
    ??????????? if(intTemp>9){
    ??????????????? arrSum.intArr[i-1] = arrSum.intArr[i-1] + intTemp/10;
    ??????????? }
    ??????? }?

    ??????? int intTemp = arrSum.intArr[0] + arr.intArr[0];
    ??????? arrSum.intArr[i] = intTemp%10;
    ??????? if(intTemp>9){
    ??????????? return new BigInt("1" + arrSum.getArr());
    ??????? } else {
    ??????????? return arrSum;
    ??????? }???
    ???? }
    ?
    ???? /** 程序入口,格式化輸出 */
    ???? public static void main(String[] args) {
    ???????? try {
    ???????????? BigInt one = new BigInt(args[0]);
    ???????????? System.out.println("? " + one.getArr());
    ???????????? BigInt two = new BigInt(args[1]);
    ???????????? System.out.println("+ " + two.getArr());
    ???????????? System.out.println("----------------------------");??
    ???????????? BigInt sum = BigInt.add(one, two);
    ???????????? System.out.println(" " + sum.getArr());
    ???????? } catch(java.lang.ArrayIndexOutOfBoundsException e) {
    ???????????? System.out.println("數組下標越界");
    ????? }
    ?? }
    }

    posted on 2006-03-28 23:58 水秀清靈 閱讀(802) 評論(4)  編輯  收藏 所屬分類: 學習筆記

    FeedBack:
    # re: JAVA面試題(一)
    2006-03-30 00:03 | 水秀清靈
    對于第三道題,我就想到這個答案,誰還能給我一個更好的?先謝謝了!  回復  更多評論
      
    # re: JAVA面試題(一)
    2006-05-10 00:20 | 王志強
    感覺不是很對你的
    99100+900=?你的就有問題  回復  更多評論
      
    # re: JAVA面試題(一)
    2006-05-14 00:40 | 水秀清靈
    王兄說的很對,我已經做了修改,現在你看看還有問題沒?
      回復  更多評論
      
    # re: JAVA面試題(一)
    2007-05-17 16:03 | 游客
    不錯不錯  回復  更多評論
      
    主站蜘蛛池模板: 亚洲精品你懂的在线观看 | 亚洲AV无码专区国产乱码4SE| 最近中文字幕大全免费版在线| 亚洲精品熟女国产| 国产高清免费观看| 免费黄色电影在线观看| 学生妹亚洲一区二区| 久久久久亚洲AV成人网人人软件| 久久精品无码专区免费青青| 无码亚洲成a人在线观看| 亚洲va久久久噜噜噜久久男同 | 乱淫片免费影院观看| 亚洲无删减国产精品一区| 成人永久福利免费观看| 久久精品成人免费网站| 亚洲色偷偷综合亚洲AV伊人蜜桃| 最新精品亚洲成a人在线观看| 波多野结衣在线免费视频| www一区二区www免费| 亚洲人成电影在线观看青青| 无码专区一va亚洲v专区在线| 最近中文字幕完整版免费高清| free哆拍拍免费永久视频 | 香蕉视频在线免费看| 亚洲精品无码成人片久久不卡| 亚洲AV无码欧洲AV无码网站| 四虎影视免费永久在线观看| 91频在线观看免费大全| 18禁在线无遮挡免费观看网站| 美女扒开尿口给男人爽免费视频| 亚洲成人免费网站| 国产日韩亚洲大尺度高清| 啊v在线免费观看| 毛片A级毛片免费播放| 99在线视频免费| 免费看一区二区三区四区 | 成人免费a级毛片无码网站入口| 很黄很污的网站免费| 日韩在线一区二区三区免费视频 | 亚洲av成人片在线观看| 亚洲人成在线精品|