Android面试题记录

JAva面试题

  1. String ,StringBuffer,StringBuilder的区别?

(1) String字符串常量,StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) (2) String类型和StringBuffer类型的主要性能区别就是String是不可改变的对象,在每次对String 类型进行改变的时候其实都等同于生成一个新的String对象,然后将指针指向新的String对象,会对系统性能产生影响,当内存中无引用对象多了以后,JVM的GC就会开始工作,速度会相当慢; 使用StringBuffer类,每次结果都会对StringBuffer对象本身进行操作,而不是重新生成对象,再改变对象引用。 StringBuffer是可变的,在缓冲区中追加字符串或者插入指定位置字符串,而且线程安全,比String大多数情况要快,而StringBuilder就是StringBuffer的一个替身而已,就是快,而且线程不安全。

  1. 抽象类与接口在语法和使用上有哪些区别?

(1) 抽象类(abstract class);定义:如果一个类没有包含足够多的信息来描述一个具体的对象,这样的类就叫作抽象类。 抽象方法:只声明,不实现。具体的实现需要继承它的子类来实现,抽象类是为了继承而存在的,抽象类不能用来创建对象。也就是说被 abstract修饰的方法 一般抽象方法为public 或者protected 例 如: public acstract String A(); (2) 接口 (interface) 定义: 接口抽象方法的集合,通过继承接口的方式来继承接口中的抽象方法例如:interface A(){} ; 接口只能用public static final 修饰;接口中没有构造方式(接口不是类);接口中的方法必须是抽象的;接口支持多继承(例如:class A implements B,C,...) (3抽象类和接口的区别) 1.抽象类可以提供成员方法的实现,而接口只能存在public abstract方法 2.抽象类中的成员变量可以是各种类型,接口中的成员变量只能是public static final类 3.抽象类可以有静态代码块和静态方法,接口中不能含有静态代码块以及静态方法 4.一个类只能集成一个抽象类,而一个类可以实现多个接口

  1. java中 == 和equals和hashCode的区别?
"=="用来比较两个变量(基本类型和对象类型)的值是否相等,如果是基本类型的比较直接比较值;如果是对象类型比较那么它比较的是两个对象在栈中的引用(地址)
“equals” 通过判断两个对象的地址是否相等
“hashCode”它的作用是获取哈希码,这个哈希码的作用是确定该对象在哈希表中索引位置;是返回对象在类存中地址转换成的一个int值,如果没有重写hashCode方法,任何对象的hashCode都不相等
>https://juejin.im/post/584ac23061ff4b0058d5250f
复制代码

4.ArrayMap,HashMap,ArrayList,LinkedList的数据结构是什么样的? 1. ArrayMap是通过Key-- value 映射数据结构的,ArrayMap保持它的映射到一个数组结构,一个Integer数组来储存每一个item的哈希码,一个对象数组来储存键值对,这样避免了为每一个条目都创建一个额外对象,更有效的控制了数组大小,因为它通过二分查找的方式,所以比hashMap慢。 2. HashMAp 的底层是基于数组和链表来实现的,查询速度快是因为通过计算哈希码来决定储存位置,HashMap主要通过key的HashCode来计算hash值的;HashMap底层通过链表来解决hash冲突。 3. ArrayList 数组集合;ArrayList允许为空;允许重复数据;有序;非线程安全 4. LinkedList 基于双向循环链表实现,随机增删较快,存取时需要遍历查询;非线程安全,适合在单线程下使用;LinkedList实现了Serializable接口,支持序列化。 ArrayMap 替换 HashMap ArraySet 替换 HashSet SparseArray 替换 HashMap SparseBooleanArray 替换 HashMap SparseIntArray 替换 HashMap SparseLongArray 替换 HashMap LongSparseArray 替换 HashMap

4.wait() 和 sleep() 的区别?

wait()用于线程间的通信,wait()只能在同步(synchronize)环境中被调用;进入wait状态的线程能被notify和notifyAll线程唤醒;wait通过有条件的执行,线程会一直处于wait状态;进入wait状态时会释放对象的锁。 sleep()用于短时间暂停当前线程;sleep让线程进入休眠状态;进入sleeping状态的线程不能被notify唤醒;

Android

1.Activity生命周期?

a. 启动Activity: onCreate() -> onStart() -> onResume() b. Activity退居后台: 当前Activity跳转到新的Activity界面或者按Home键返回主屏: onPause() -> onStop() c. Activity返回前台: onRestart() -> onStart() -> onResume() d. 锁屏: onPause() -> onStop() e. 解锁: onStart() -> onResume() Activity退居后台,且内存不足,系统会杀死这个后台状态的Activity(此时这个activity还在任务栈中,只是引用的对象已经为null),若再次回到这个Activity时会从新走一次启动Activity的生命周期 2.Fragment生命周期?

3.Activity启动模式介绍?

Activity的启动模式有四种: standard,singleTop,singleTask,singleInstance AndroidManifest.xml清单文件 android:launchMode属性来指定启动模式

4.service的启动方式以及区别?怎么停止一个service?

a.在Context中通过 public boolen bindService(Intent service,ServiceConnection conn,int flags)方法进行Service与Context关联并启动;Service的生命周期依附于Context b.通过public ComponentName startService(Intent service)方法启动一个Service,此时Service生命周期与Context无关。 需要注意的是都需要在清单文件 xml中注册Service例如 <service android:name=".a.cService" android:enabled="true/> 停止一个Service: bindService: unBindService() startServicer:只有调用stopService()或stopSelf()才可以将其停止。

5.android在子线程中更新UI有几种方式?

a.Activity.runOnUiThread(Runnable) b.View.post(Runnable) c.广播,子线程中发送广播,主线程接收广播更新UI d.使用Handler(线程间的通信) e. AsyncTask

6.简述Handler机制? 7.ListView优化,多item的重用? 8.如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存数据并恢复?

9.如何提高后台进程存活率? a.Service设置成START_STICKY b.调用startForegound,让Service所在线程成为前台进程 c.Service的onDestroy里面重新启动自己 d.联系厂商加入白名单

10.App启动流程,从点击桌面开始? 11.Android几种进程? a.前台进程: 与用户正在交互的Activity或者Activity用到的Service等,如果系统内存不足前台进程是最后被杀死的 b.可见进程: 处于暂停状态(onPause)的Activity;或者是绑定在其上的Service。可被用户看见,失去焦点就不能与用户交互 c.服务进程: 其中运行使用startService方法启动的service,例如后台播放音乐或者下载网络数据,系统所需要的空间不足运行前台进程和可见进程才会被终止 d.后台进程:包含目前对用户不可见的Activity的进程已调用Activity的onStop()方法,不为用户当前关心,例如后台挂着qq,当这样的进程系统没有内存就会首先被杀死 e.空进程: 不包含任何应用程序的程序组件的进程

12.怎么退出android 应用?

http://www.jianshu.com/p/98a5519d11a3

  1. 谈谈socket,长连接

http://blog.csdn.net/u011240877/article/details/72860483 http://www.jianshu.com/p/089fb79e308b

15.两个Activity之间跳转时的生命周期?

a.比如说有两个Activity A和B,当A跳转到B页面时,A会执行onPause()->B页面执行 onCreate()->onStart()->onResume() ->A页面执行onStop() 备注:B是一个透明的对话框,A就不会调用onStop()方法

相关链接:

https://github.com/GeniusVJR/LearningNotes
https://github.com/JackyAndroid/AndroidInterview-Q-A/blob/master/README-CN.md https://github.com/EbookFoundation/free-programming-books/blob/master/free-programming-books-zh.md https://juejin.im/entry/58cb4e3344d9040069f599aa https://juejin.im/entry/57466b5e71cfe40068cd862a https://juejin.im/entry/57e4e1f40bd1d0005bf034fb https://juejin.im/entry/58ca4c8d128fe1006c7dbc82 https://juejin.im/entry/5942667b61ff4b006cc98a55

转载于:https://juejin.im/post/5a30fc9df265da43333e660e

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值