1、 请写出下列代码的输出内容
Int main(void){
Int a,b,c,d;
A=10;
B=a++;
C=++a;
D=10*a++;
Print(“a,b,c,d:%d,%d,%d,%d”,a,b,c,d);
Return 0;
}
答案
13 10 12 120
2、 写出下面程序输出结果
Void test(int a){
If(a>0){
Test(a-1);
}
System.out.print(a);
}
Test(4);
答案 01234
3、 List、Map、Set三个接口,存取元素时各有什么优缺点?
| 有序否 | 允许元素重复否 | |
List | 是 | 是 | |
Set | AbstractSet | 否 | 否 |
HashSet | |||
TreeSet | 是(用二叉树排序) | ||
Map | AbstractMap | 否 | 使用key-value来映射和存储数据,Key必须惟一,value可以重复 |
HashMap | |||
TreeMap | 是(用二叉树排序) |
窗体底端
4、 请阐述一下Android中Activity的生命周期
5、 Android提供哪几种数据持久化方式,分别是什么?
http://www.cnblogs.com/ITtangtang/p/3920916.html#type5
(1)使用SharedPreferences存储数据
适用范围:保存少量的数据,且这些数据的格式非常简单:字符串型、基本类型的值。SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过SharedPreferences.edit()获取的内部接口Editor对象实现。 SharedPreferences本身是一 个接口,程序无法直接创建SharedPreferences实例,只能通过Context提供的getSharedPreferences(String name, int mode)方法来获取SharedPreferences实例,该方法中name表示要操作的xml文件名
(2)文件存储数据
核心原理: Context提供了两个方法来打开数据文件里的文件IO流 FileInputStream openFileInput(String name); FileOutputStream(String name , int mode),这两个方法第一个参数 用于指定文件名,第二个参数指定打开文件的模式。
读写sdcard上的文件
其中读写步骤按如下进行:
1、调用Environment的getExternalStorageState()方法判断手机上是否插了sd卡,且应用程序具有读写SD卡的权限,如下代码将返回true
Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)
2、调用Environment.getExternalStorageDirectory()方法来获取外部存储器,也就是SD卡的目录,或者使用"/mnt/sdcard/"目录
3、使用IO流操作SD卡上的文件
(3)SQLite存储数据
SQLite是轻量级嵌入式数据库引擎,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。
(4)ContentProvider
管理android以结构化方式存放的数据,以相对安全的方式封装数据(表)并且提供简易的处理机制和统一的访问接口供其他程序调用。
(5)网络存储数据
HttpUrlConnection是Java.NET包中提供的API,HttpUrlConnection这种最原始最基本的API,其实大多数开源的联网框架基本上也是基于JDK的HttpUrlConnection进行的封装罢了。
6、 请说说对Android线程的理解
android遵守的就是单线程模型,一个应用对应一个主线程,在单线程的模型下,一些耗时的操作就要交给其它子线程去执行。
尽管你可以把你的应用程序限制于一个单独的进程中,有时,你仍然需要衍生出一个线程以处理后台任务。因为用户界面必须非常及时的对用户操作做出响应,所以,控管activity的线程不应用于处理一些诸如网络下载之类的耗时操作。所有不能在瞬间完成的任务都应安排到不同的线程中去。线程在代码中是以标准Java Thread对象创建的。Android提供了很多便于管理线程的类:Looper用于在一个线程中运行一个消息循环,Handler用于处理消息,HandlerThread 用于使用一个消息循环启用一个线程。
7、 Android应用容易发生ANR错误,请简述几种避免ANR错误的办法?
ANR定义:在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”。所以一个流畅的合理的应用程序中不能出现anr,而让用户每次都要处理这个对话框。因此,在程序里对响应性能的设计很重要,这样系统不会显示ANR给用户。
默认情况下,在android中Activity的最长执行时间是5秒,BroadcastReceiver的最长执行时间则是10秒。
避免方法:
1、运行在主线程里的任何方法都尽可能少做事情。特别是,Activity应该在它的关键生命周期方法(如onCreate()和onResume())里尽可能少的去做创建操作。(可以采用重新开启子线程的方式,然后使用Handler+Message的方式做一些操作,比如更新主线程中的ui等)
2、应用程序应该避免在BroadcastReceiver里做耗时的操作或计算。但不再是在子线程里做这些任务(因为 BroadcastReceiver的生命周期短),替代的是,如果响应Intent广播需要执行一个耗时的动作的话,应用程序应该启动一个 Service。(此处需要注意的是可以在广播接受者中启动Service,但是却不可以在Service中启动broadcasereciver,关于原因后续会有介绍,此处不是本文重点)
3、避免在Intent Receiver里启动一个Activity,因为它会创建一个新的画面,并从当前用户正在运行的程序上抢夺焦点。如果你的应用程序在响应Intent广 播时需要向用户展示什么,你应该使用Notification Manager来实现。
8、 选下面任何一题编写程序,编程语言自选
编写一个二分查找算法
1. public static int binarySearch(Integer[]srcArray,int des){
2. //第一个位置.
3. int low=0;
4. //最高位置.数组长度-1,因为下标是从0开始的.
5. int high=srcArray.length-1;
6. //当low"指针"和high不重复的时候.
7. while(low<=high){
8. //中间位置计算,low+ 最高位置减去最低位置,右移一位,相当于除2.也可以用(high+low)/2
9. int middle=low+((high-low)>>1);
10. //与最中间的数字进行判断,是否相等,相等的话就返回对应的数组下标.
11. if(des==srcArray[middle]){
12. return middle;
13. //如果小于的话则移动最高层的"指针"
14. }else if(des<srcArray[middle]){
15. high=middle-1;
16. //移动最低的"指针"
17. }else{
18. low=middle+1;
19. }
20. }
21. return-1;
22. }
23.
24. }
25. 递归二分查找算法
26. int BinSearch(int Array[],int low,int high,int key)
27. {
28. if (low<=high)
29. {
30. int mid = (low+high)/2;
31. if(key == Array[mid])
32. return mid;
33. else if(key<Array[mid])
34. //移动low和high
35. return BinSearch(Array,low,mid-1,key);
36. else if(key>Array[mid])
37. return BinSearch(Array,mid+1,high,key);
38. }
39. else
40. return -1;
41. }
编写任何一种排序算法
http://www.codeceo.com/article/10-sort-algorithm-interview.html
9、 有一串字符串如下text=“深圳市dsafdaf”,编写程序统计每个字符出现的频率。
public class CharNumber {
Set<Character> charSet = new HashSet<Character>();
Map<Character,Integer> charMap = new HashMap<Character,Integer>();
public static void main(String[] args) {
CharNumber c = new CharNumber();
String a="abcdea";
c.show(a);
}
public void find(String tofind){
for(int i=0;i<tofind.length();i++){
if(i==0){
char temp = tofind.charAt(i);
charSet.add(temp);
charMap.put(temp, 1);
}
else{
char temp = tofind.charAt(i);
int flag =0;
for(char a :charSet){
if(a==temp){
int num= charMap.get(temp);
charMap.remove(temp);
charMap.put(temp, num+1);
flag=1;
}
}
if(flag==0){
charSet.add(temp);
charMap.put(temp, 1);
}
}
}
}
public void show(String tofind){
find(tofind);
for(char a:charMap.keySet()){
System.out.println(a+"的出现次数是"+charMap.get(a));
}
}
}