Android笔试题(金山WPS)

一、简答题

1、char型变量中能不能存储一个中文汉字,为什么?

C语言中char是一个字节的大小,而汉字占2个字节,所以不能存储。

Java中char类型占2个字节,而且java默认采用Unicode编码,一个Unicode吗是16位,所以一个Unicode码占两个字节,Java中无论汉字还是英文字母都是用unicode编码来表示的。所以,在Java中char类型变量可以存储一个中文汉字。

2、 假设对一棵二叉树进行先序遍历,输出结果为:A B D C E G F H J。请写画出一棵符合上述结果的二叉树。

3、使用java工具函数 java.util.Arrays.binarySearch(int[] array, int value),在有序数组{1,4,6,8,10}中搜素整数5,请问返回值是多少,并说明binarySearch返回该值的意义。//-3

并不是心里想的没有找到就返回-1,而是使用二分查找法再不满足情况的条件下返回-(low + 1)

    private static int binarySearch0(int[] a, int fromIndex, int toIndex,
                                     int key) {
        int low = fromIndex;
        int high = toIndex - 1;

        while (low <= high) {
            int mid = (low + high) >>> 1;
            int midVal = a[mid];

            if (midVal < key)
                low = mid + 1;
            else if (midVal > key)
                high = mid - 1;
            else
                return mid; // key found
        }
        return -(low + 1);  // key not found.
    }

4、用Java实现一个多线程死锁的简单例子。

public class TestDeadLock {
   
    public void run() {
        MyThread mt = new MyThread();
        new Thread(mt, "张三").start();
        new Thread(mt, "李四").start();
    }
     
    class MyThread implements Runnable {
        private Object o1 = new Object();
        private Object o2 = new Object();
        private boolean flag = true;
        @Override
        public void run() {
            if (flag) {
                flag = false;
                synchronized (o1) {
                    System.out.println(Thread.currentThread().getName() + " have o1");
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized (o2) {
                        System.out.println(Thread.currentThread().getName() + " have o2");
                    }
                }
            } else {
                flag = true;
                synchronized (o2) {
                    System.out.println(Thread.currentThread().getName() + " have o2");
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized (o1) {
                        System.out.println(Thread.currentThread().getName() + " have o1");
                    }
                }
            }
        }
    }
     
    public static void main(String[] args) {
        new TestDeadLock().run();
    }
}

 

5、写出下列程序的输出结果

public class TryTest {
    public static void hello(){
        System.out.print("hello");
        throw new RuntimeException();
    }
    
    public static void main(String[] args) {
        try{
            ((TryTest)null).hello();
            System.out.print("ok");
        } catch (NullPointerException e){
            System.out.print("nullPointer");
        }catch (Exception e) {
            System.out.print("exception");
        }finally{
            System.out.print("finally");               //helloexceptionfinally
        }
    }

}

 

二 编程题

1、假设有一个int类型数组,其中只有一个元素出现奇数次,其他元素都出现偶数次。例如:{1,3,2,3,1},其中1,3均出现偶数次,2出现了奇数次,结果是2.现在需要写一个函数,把出现奇数次的元素找出来。

2、假设需要设计一个Rect对象缓存池,缓存池有上限。当需要用Rect时,就从缓存池里面取;当用完之后,就归还给缓存池。现在请实现这个缓存池。要求:

a 提供obtain方法获取对象,recycle方法回收对象;

b 不使用集合类,比如ArrayList,LinkedList等;

c 尽量把多线程访问问题考虑进去。

三 设计题

实现一个Android端的文本编辑器,可以保存和读取纯文本文件,同时有简单的编辑功能,即光标定位、删除、插入、复制、粘贴等功能,要求:

1、自定义view实现,不能使用Android的EditView,EditText。

2、编辑文本的同时要求有撤销,还原功能。

3、请描述划分为哪些主要模块。

4、光标的定位及撤消还原功能实现逻辑是怎样的。

猜你喜欢

转载自blog.csdn.net/yao_94/article/details/82667557