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、光标的定位及撤消还原功能实现逻辑是怎样的。