Android面試 · 代碼題

Android面試70題



這里整理的都是我在面試過(guò)程遇到的筆試和面試題音诈,基本都參照和對(duì)比了網(wǎng)上的一些解決方案幻碱,修復(fù)了一些bug。有些題的其他解決方案在注釋中有鏈接细溅,希望對(duì)廣大Android戰(zhàn)友們有所幫助褥傍!

/**
     * 編寫(xiě)一個(gè)截取字符串的函數(shù),輸入為一個(gè)字符串和字節(jié)數(shù)谒兄,輸出為按字節(jié)截取的字符串摔桦。
     * 但是要保證漢字不被截半個(gè)社付,如輸入(“我ABC”承疲,4),應(yīng)該輸出“我AB”鸥咖;
     * 輸入(“我ABC漢DEF”燕鸽,6),應(yīng)該輸出“我ABC”而不是“我ABC”+“漢”的半個(gè)
     *
     * 考點(diǎn):漢字截半時(shí)對(duì)應(yīng)字節(jié)的ASCII碼小于0
     */

    public static void main(String[] args) throws Exception {
        String src = "我ABC漢DEF";
        System.out.println(spiltString(src, 4));
        System.out.println(spiltString(src, 6));
    }

    private static String spiltString(String src, int len) throws Exception {
        if (src == null || src.equals("")) {
            System.out.println("The source String is null!");
            return null;
        }
        byte[] srcBytes = src.getBytes("GBK");
        if (len > srcBytes.length) {
            len = srcBytes.length;
        }
        if (srcBytes[len] < 0) {
            return new String(srcBytes, 0, --len);
        } else {
            return new String(srcBytes, 0, len);
        }
    }

<br >

/**
     * 在實(shí)際開(kāi)發(fā)工作中啼辣,對(duì)字符串的處理是最常見(jiàn)的編程任務(wù)啊研。
     * 本題目即是要求程序?qū)τ脩糨斎氲淖址M(jìn)行處理。具體規(guī)則如下:
     * a)把每個(gè)單詞的首字母變?yōu)榇髮?xiě)
     * b)把數(shù)字與字母之間用下劃線字符(_)分開(kāi)鸥拧,使得更清晰
     * c)把單詞中間有多個(gè)空格的調(diào)整為1個(gè)空格
     * 例如:
     * 用戶輸入:
     * you and me what    cpp2005program
     * 則程序輸出:
     * You And Me What Cpp_2005_program
     * 
     * 相關(guān)文章:http://blog.csdn.net/u013091087/article/details/43793149
     */

    public static void main(String[] args) {
        System.out.println("please input:");
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();
        scanner.close();
        String[] ss = s.split("\\s+"); // \s表示空格党远、\t、\n等空白字符
        for (int i = 0; i < ss.length; i++) {
            String up = (ss[i].charAt(0) + "").toUpperCase(); // 大寫(xiě)
            StringBuffer sb = new StringBuffer(ss[i]);
            ss[i] = sb.replace(0, 1, up).toString(); // 首字母替換為大寫(xiě)
            Matcher m = Pattern.compile("\\d+").matcher(ss[i]);
            int fromIndex = 0;
            while (m.find()) {
                String num = m.group();
                int index = ss[i].indexOf(num, fromIndex);
                StringBuffer sbNum = new StringBuffer(ss[i]);
                ss[i] = sbNum.replace(index, index + num.length(),
                        "_" + num + "_").toString();
                fromIndex = index + num.length() + 2;
                if (ss[i].startsWith("_")) { // 去頭"_"
                    ss[i] = ss[i].substring(1);
                }
                if (ss[i].endsWith("_")) { // 去尾"_"
                    ss[i] = ss[i].substring(0, ss[i].length() - 1);
                }
            }
        }
        for (int i = 0; i < ss.length - 1; i++) {
            System.out.print(ss[i] + " ");
        }
        System.out.print(ss[ss.length - 1]);
    }

<br >

/**
     * 舉1-2個(gè)排序算法富弦,并使用java代碼實(shí)現(xiàn)
     *
     * 冒泡排序沟娱、插入排序、歸并排序腕柜、基數(shù)排序是穩(wěn)定的排序算法
     * 選擇排序济似、快速排序、希爾排序盏缤、堆排序不是穩(wěn)定的排序算法 
     * 通常情況下快速排序最快砰蠢,冒泡最慢
     *
     * http://blog.csdn.net/qy1387/article/details/7752973
     * http://bbs.chinaunix.net/thread-3582599-1-1.html
     */
     
    public static void main(String[] args) {
        int[] array = { 1, 5, 84, 54, 62, 32, 77, 19 };
        selectSort(array);
        bubbleSort(array);
        insertSort(array);

        for (int data : array) {
            System.out.print(data + " ");
        }
    }

    /**
     * 選擇排序
     *
     * 思路:從位置1開(kāi)始每個(gè)數(shù)與第0個(gè)數(shù)比較,如果比第0個(gè)小則互換唉铜,
     * 一輪完成后位置0的數(shù)就是最小的台舱;繼續(xù)從位置2開(kāi)始與位置1的數(shù)比較...
     */
    public static void selectSort(int[] a) {
        for (int i = 0; i < a.length - 1; i++) {
            for (int j = i + 1; j < a.length; j++) {
                if (a[j] < a[i]) {
                    swap(a, i, j);
                }
            }
        }
    }

    /**
     * 冒泡排序
     *
     * 思路:自上而下相鄰兩個(gè)數(shù)比較,大數(shù)往下沉潭流,小數(shù)網(wǎng)上冒竞惋,
     * 一輪完成后最大的數(shù)沉到最底;然后其余的數(shù)重復(fù)操作
     */
    public static void bubbleSort(int[] a) {
        for (int i = 0; i < a.length - 1; i++) {
            for (int j = 0; j < a.length - 1 - i; j++) {
                if (a[j] > a[j + 1]) {
                    swap(a, j, j + 1);
                }
            }
        }
    }

    /**
     * 插入排序
     *
     * 思路:假設(shè)前面(n-1)[n>=2] 個(gè)數(shù)已經(jīng)是排好順序的幻枉,現(xiàn)在要把第n個(gè)數(shù)插到前面的有序數(shù)中碰声,
     * 使得這n個(gè)數(shù)也是排好順序的。如此反復(fù)循環(huán)熬甫,直到全部排好順序
     */
    public static void insertSort(int[] a) {
        for (int i = 1; i < a.length; i++) {
            for (int j = i - 1; j >= 0 && a[j] > a[j + 1]; j--) {
                swap(a, j, j + 1);
            }
        }
    }

    public static void swap(int[] a, int i, int j) {
        int temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }

<br >

/**
     * 請(qǐng)編寫(xiě)一個(gè)多線程程序胰挑,其中一個(gè)線程完成對(duì)某個(gè)對(duì)象的int成員變量的增加操作, 
     * 即每次加1,另一個(gè)線程完成對(duì)該對(duì)象的成員變量的減操作瞻颂,即每次減1;
     * 同時(shí)要保證該變量的值不會(huì)小于0豺谈,不會(huì)大于1,該變量的初始值為0
     */
    public class TestThread {

        public static void main(String[] args) {
            new TestThread().call(new Operation());
        }

        void call(final Operation op) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    while (true) {
                        op.add();
                    }
                }
            }).start();

            new Thread(new Runnable() {
                @Override
                public void run() {
                    while (true) {
                        op.sub();
                    }
                }
            }).start();
        }
    }

    class Operation {

        int i = 0;

        public synchronized void add() {
            if (i < 1) {
                i++;
                System.out.println(i);
            }
        }

        public synchronized void sub() {
            if (i > 0) {
                i--;
                System.out.println(i);
            }
        }
    }

持續(xù)更新...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末贡这,一起剝皮案震驚了整個(gè)濱河市茬末,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌盖矫,老刑警劉巖丽惭,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異辈双,居然都是意外死亡责掏,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)湃望,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)换衬,“玉大人,你說(shuō)我怎么就攤上這事证芭⊥郑” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵废士,是天一觀的道長(zhǎng)叫潦。 經(jīng)常有香客問(wèn)我,道長(zhǎng)湃密,這世上最難降的妖魔是什么诅挑? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮泛源,結(jié)果婚禮上拔妥,老公的妹妹穿的比我還像新娘。我一直安慰自己达箍,他們只是感情好没龙,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著缎玫,像睡著了一般硬纤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赃磨,一...
    開(kāi)封第一講書(shū)人閱讀 51,541評(píng)論 1 305
  • 那天筝家,我揣著相機(jī)與錄音,去河邊找鬼邻辉。 笑死溪王,一個(gè)胖子當(dāng)著我的面吹牛腮鞍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播莹菱,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼移国,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了道伟?” 一聲冷哼從身側(cè)響起迹缀,我...
    開(kāi)封第一講書(shū)人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蜜徽,沒(méi)想到半個(gè)月后祝懂,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡娜汁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年嫂易,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了兄朋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掐禁。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖颅和,靈堂內(nèi)的尸體忽然破棺而出傅事,到底是詐尸還是另有隱情,我是刑警寧澤峡扩,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布蹭越,位于F島的核電站,受9級(jí)特大地震影響教届,放射性物質(zhì)發(fā)生泄漏响鹃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一案训、第九天 我趴在偏房一處隱蔽的房頂上張望买置。 院中可真熱鬧,春花似錦强霎、人聲如沸忿项。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)轩触。三九已至,卻和暖如春家夺,著一層夾襖步出監(jiān)牢的瞬間脱柱,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工拉馋, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留榨为,地道東北人掸茅。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像柠逞,于是被迫代替她去往敵國(guó)和親昧狮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容