android 基础面试题

转: http://www.maxiaoguo.com/shipin/390.html

  1. String s = new String("a"+"B");            会生成几个对象  答案:3个
  2. ArrayList<String> l = new ArrayList<String>();
    l.add("a");
    l.add("b");
    l.add("c");
    l.add("d");
    String s  = l.get(0);
    s = null;  

    L 集合有什么变化  答:无变化

  3. switch 类型 int short char byte   ;  long double string boolean 不行  String jdk1.7之后可以
  4. service的两种启动方式有什么不同,以及用处                 http://blog.sina.com.cn/s/blog_68d72c9b01010nfi.html
  5. drawble中 -ldpi -mdpi hdpi -xhdpi  格式

    l 240*320    m 480*800 h 960*800 xhdpi 1024*800

6、aidl 实现 clint 端 server 端

7、content provider 中 query方法中的cursor如何封装,是用数据库中的cursor么

答:String[] columns = new String[] { "_id","_value"};
MatrixCursor cursor = new MatrixCursor(columns);

1、view 的绘制过程
主要分三步,一、onMeasure 计算长宽高 margin等等,二、计算好了 layout布局 三、draw 通过canvas来画

2、tcp udp的区别 什么是长连接 什么是短连接 http是什么连接 ,如何变成长连接


tcp 是连接协议 连接通之后才能传输。 udp 是非连接协议。 
长连接是请求之后连接没有断开继续等待数据的传输,http是短连接, 
把http变成长连接 method.setRequestHeader("Connection" , "Keep-Alive" or "close") 


3、arrayList vector linkList 区别,数组不是不能改变的么,arraylist既然是数组结构的,数组不能改变大小。他是如何改变list中的大小的 


ArrayList,Vector底层是由数组实现,LinkedList底层是由双线链表实现,从底层的实现可以得出它们的性能问题,ArrayList,Vector插入速度相对较慢,查询速度相对较快,而LinkedList插入速度较快,而查询速度较慢。再者由于Vevtor使用了线程安全锁,所以ArrayList的运行效率高于Vector


4、hashmap hashtable 区别 如何遍历,什么是hash hash算法 hashmap treemap  set 和list 特点


HashMap不是线程安全的 hastmap是一个接口 是map接口的子接口  HashTable是线程安全的一个Collection。
Entryset  keySet()  来遍历  hashtable通过 Element


5、oom


6、service是运行在主线程中的么
是的


7、eclipse如何查找某一行的代码

Mat 插件


8、sleep wait 区别 Lock Synchronized 区别
sleep 不会让出cpu  wait会让出来
Lock有比Synchronized更精确的线程予以和更好的性能。Synchronized会自动释放锁,但是Lock一定要求程序员手工释放,并且必须在finally从句中释放。


9数组和链表的优缺点


如果需要快速访问数据,很少或不插入和删除元素,就应该用数组;相反, 如果需要经常插入和删除元素就需要用链表数据结构了。


10、数组问题  
如何将一个有序数组中的字母打乱,输出
答:
String[] arr = new String[] {"1", "2"};
List list = Arrays.asList(arr);
Collections.shuffle(list);


    如何将两个有序链表合并 

如何将两个有序数组合并
答: 把两个数组放到 Arrays.sort(newArray); 

11、树, 如何遍历节点,查找节点所在的层数





### Android 基础面试题及答案 #### Activity 生命周期是什么? Activity 的生命周期是指从创建到销毁过程中经历的不同状态。理解这些状态对于管理应用资源至关重要。以下是主要的状态: - **onCreate()**: 当活动第一次被初始化时调用。通常用于设置视图、绑定数据以及执行其他初始操作。 - **onStart()**: 活动变得可见给用户,但可能还没有获得焦点。 - **onResume()**: 活动开始与用户交互,此时它处于前台并接收事件。 - **onPause()**: 另一个活动已经获取了输入焦点,当前活动即将失去焦点但仍保持大部分状态不变;这是一个保存任何持久化数据的好时机。 - **onStop()**: 活动不再对用户可见,可以释放更多内存和其他资源。 - **onRestart()**: 如果该活动由 onStop 转变为重新启动,则会触发此方法,在 onStart 之前调用。 - **onDestroy()**: 这是最后一个回调函数,表示活动正在关闭。 了解如何处理不同状态下应采取的动作有助于构建更加健壮的应用程序[^2]。 ```java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override protected void onStart(){ super.onStart(); // 处理当activity变成可见的时候要做的事情 } @Override protected void onResume(){ super.onResume(); // 用户现在可以看到并且能跟这个activity互动了 } ``` #### Intent 是什么及其用途有哪些? Intent 对象用来描述应用程序之间的消息传递意图。它可以携带动作名称、类别信息以及其他参数。Intents 主要有两种形式:显式 Intents 和隐式 Intents。 - 显式 Intents 直接指定了目标组件的名字(通常是另一个 activity 或者 service)。这常用于内部通信,比如在一个 app 中打开新的页面。 - 隐式 Intents 不指定具体的接收方而是通过 action 类型或其他属性匹配合适的接收器。这类 intent 更适用于跨应用间的协作,例如发送邮件或分享图片等场景。 使用 `startActivity()` 方法可启动一个新的 activity 实例,并传入相应的 intent 参数作为配置选项[^1]。 ```java // 创建一个显示的intent实例 Intent explicitIntent = new Intent(this, TargetActivity.class); // 启动target activity startActivity(explicitIntent); // 创建一个隐式的intent实例 Intent implicitIntent = new Intent(Intent.ACTION_SEND); implicitIntent.setType("text/plain"); implicitIntent.putExtra(Intent.EXTRA_TEXT,"Hello World"); if (implicitIntent.resolveActivity(getPackageManager()) != null){ startActivity(implicitIntent); } else{ Toast.makeText(this,"No App Available",Toast.LENGTH_SHORT).show(); } ``` #### Service 和 Broadcast Receiver 的区别在哪里? Service 组件运行于后台进程中,主要用于长时间执行的任务而不依赖 UI 界面的存在与否。广播接收器则监听来自系统或者其他应用程序发出的消息/事件通知,并作出响应。两者的主要差异如下表所示: | 特征 | Services | Broadcast Receivers | |--------------------|-----------------------------------|------------------------------| | 执行环境 | 后台线程 | 应用上下文中 | | 使用目的 | 执行耗时较长的操作 | 接收和分发广播消息 | | 生命周期控制 | 自定义 | 系统自动管理 | 服务可以通过 startService() 来激活,而广播接受者则是注册特定类型的广播过滤条件之后等待相应事件的发生[^4]。 ```xml <!-- 在AndroidManifest.xml文件中声明service --> <service android:name=".MyBackgroundService"></service> <!-- 注册broadcast receiver --> <receiver android:name=".NetworkChangeReceiver"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> </intent-filter> </receiver> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值