Android------记录面试遇到的Interview-qu
我们用什么方式去对待时光 , 它就会用什么方式来回报我们
-----啊小.
其实人们口中说的金三银四,金九银十,是找工作的最佳时令。但只要你技术流弊,无论哪个季节,都会是你的金子。
趁今天阳光正好,记录记录Android中与到的笔试题,方便以后查阅。
1.下面程序的输出是,
class Program{
static void Main(String[] args){
}
static void print(){
try {
Console.WriteLine("thank you");
}
finally {
Console.WriteLine("I am sorry");
}
}
输出:
A. thank you
B. Iam sorry
C. thank you I am sorry
D.代码不能编译
2.B
void Complicated(){
int x=50,y=60;
boolean b;
b=x>50&&y>80||x>50&&y<-80||x<-50&&y>80||x<50&&y<80;
Log.e("TAG",b+"");
}
A、true B、false C、I D、011
3.HashMap,Hashset,ArrayList 以及LinkedList集合的区别,以及各自的用法?
HashMap:HashMap实现了Map接口,底层使用的是Hash算法存储数据。HashMap将数据以键值对的方式存储。
HashSet:HashSet实现了Set接口,底层也是用的是Hash算法存储数据。而且HashSet内部有HashMap类型的成员变量,方法也调用了HashMap的方法,存储的时候只不过值为null.
ArrayList:ArrayList实现了List接口,底层使用的是数组,存储空间上是相邻的,所以查询起来会很方便,效率也会比LinkedList要高
LinkedList:实现了List接口,底层使用的是使用双向链表的形式,存储的数据在空间上很可能不相邻,但是他们都有一个引用连在一起,所以增删起来会很方便
Vector与ArrayList十分相似,区别就是就是vector是一种线程安全类,它的方法都带有Synchronized关键字,实际中很少用到。如果遇到多线程的问题,JAVA提供了一个Collections工具类,可以把ArrayList转换成线程安全的类。
4.描述Androld的数据存储方式?
(1) 使用SharedPreferences存储数据
(2) 文件存储数据
(3) SQLite数据库存储数据
(4) 使用ContentProvider存储数据
(5) 网络存储数据
5.请解释下在单线程模型中Messnge. Handler. Messnge Queue. Laoper 之间的关系?
简单的说,Handler获取当前线程中的looper对象,looper用来存放从MessageQueue中取出的Message,再由Handler进 行Message分发和处理,按照先进先出执行。
MessageQueue(消息队列):用来存放通过Handler发送的消息,通常附属于某一个创建它的线程,可以通过 Looper.myQueue()得到当前线程的消息队列。
Handler:是Message的主要处理者,负责Message的发送,Message内容的执行处理。例如将消息发送到消息队列(sendMessage),更新UI组件(实现该类的handleMessage方法)
Looper:是Handler和消息队列之间的通讯桥梁,程序组件首先通过Handler把消息传递给Looper,Looper把消息放到队列。Looper也把消息队列里的消息广播给所有的Looper。
Message:消息的类型,理解为线程间交流的信息,处理数据后台线程需要更新UI,在Handler类中的handleMessage方法中得到单个的消息进行处理。(博主链接 https://www.cnblogs.com/xs104/p/4831047.html)
6.AIDL 的全称是什么?如何工作?能处理哪些类型的数据?
AIDL全称Android Interface Definition Language(AndRoid接口描述语言)是一种借口描述语言; 编译器可以通过aidl文件生成一段代码,通过预先定义的接口达到两个进程内部通信进程跨界对象访问的目的.AIDL的IPC的机制和COM或CORBA类似, 是基于接口的,但它是轻量级的。它使用代理类在客户端和实现层间传递值. 如果要使用AIDL, 需要完成2件事情: 1. 引入AIDL的相关类.; 2. 调用aidl产生的class.理论上, 参数可以传递基本数据类型和String, 还有就是Bundle的派生类, 不过在Eclipse中,目前的ADT不支持Bundle做为参数。(原文:https://blog.csdn.net/ry_19920916/article/details/78128721)
7.Activity 的启动模式
(1)Standard
特点:1.Activity的默认启动模式
2.每启动一个Activity就会在栈顶创建一个新的实例。例如:闹钟程序
缺点:当Activity已经位于栈顶时,而再次启动Activity时还需要在创建一个新的实例,不能直接复用。
什么时候用standard模式呢?standartd模式是activity的默认模式,大部分情况下,都应该使用这种模式,也就是在配置文件中什么都不用做,当确实有特殊需求时,再考虑其他模式。
(2)SingleTop
特点:该模式会判断要启动的Activity实例是否位于栈顶,如果位于栈顶直接复用,否则创建新的实例。 例如:浏览器的书签
缺点:如果Activity并未处于栈顶位置,则可能还会创建多个实例。
(3) SingleTask
特点:使Activity在整个应用程序中只有一个实例。每次启动Activity时系统首先检查栈中是否存在当前Activity实例,如果存在 则直接复用,并把当前Activity之上所有实例全部出栈。例如:浏览器主界面
(4)singleInstance
特点:该模式的Activity会启动一个新的任务栈来管理Activity实例,并且该势力在整个系统中只有一个。无论从那个任务栈中 启动该Activity,都会是该Activity所在的任务栈转移到前台,从而使Activity显示。主要作用是为了在不同程序中共享一个Activity
8.谈谈final, finally, finalize的区别?
final 可以用来修饰类、方法、变量,分别有不同的意义,final 修饰的 class 代表不可以继承扩展,final 的变量是不可以修改的,而 final 的方法也是不可以重写的(override)。
finally 则是 Java 保证重点代码一定要被执行的一种机制。我们可以使用 try-finally 或者 try-catch-finally 来进行类似关闭 JDBC 连接、保证 unlock 锁等动作。
finalize 是基础类 java.lang.Object 的一个方法,它的设计目的是保证对象在被垃圾收集前完成特定资源的回收。finalize 机制现在已经不推荐使用,并且在 JDK 9 开始被标记为 deprecated。
9.编程实现n!是多少位数?如4!的结果是两位数,因为4!=24, 24 是两位
https://blog.csdn.net/xyisv/article/details/54709207
10.写一段Singleton模式的代码,并简要说明?
https://www.cnblogs.com/warmwei818/p/5350837.html
11.

12.请描述Android系统的架构,并简要说明或用图形表示?
从上往下一共是四层:
应用程序层、应用程序框架层、函数库与Android运行时层、Linux内核层。

13.在铁路的牵引供电系统中,为了确保牵引供电的可靠性,通过系列的开关组合, 确保对
某一段牵引区间进行供电。如图示:

在图上黑色粗线表示牵引供电区段没电,红色表示有点,在生产环境中哪段牵引供电区段有电哪段没电是需要经过计算才能得出的。
如果你现在是一个 负责编写计算轨道带电情况的程序员,请简述你会采用什么思路来解决这个问题。
14.企业的个优秀员工所具有的条件中(如下选项),假如你只能选择其中你认为最重要的三项,你选择哪三项
A. 团队意识 B. 敬业精神 C.专业技能 D.学习能力E. 接受新事物能力F.健康的身体 G.明确的职业规划
15.一楼到十楼的每层电梯门口都放着 颗钻石, 钻石大小不一。你乘坐电梯从楼到十楼,每层楼电梯门都会打开一次,只能 拿次钻石, 问怎样才能拿到最大的颗
是一道没有标准答案的试题,实际上它考的是你的开放性思维和逻辑推理能力。有一位应聘者答道:选择前五层楼都不拿,观察各层钻石的大小,做到心中有数。后面五个楼层再选择,选择大小接近前五层楼出现过最大钻石大小的钻石。她的想法得到了微软中国有限公司人力资源部招聘经理尹冬梅的肯定。类似的试题还有“你认为北京有多少公共汽车站?”等,你可以随便给出答案,5家或者5000家,但你得有理由。
15. 请翻译以下英文:
The MessageQueue class provides a reference to a Message Queuing queue. You can specifya path in the MessageQueue constructor to connect to an existing resourcc, or you can createa new queue on the server. Before you can call Send(Object), Peek, or Receive, you mustassociate the new instance of the MessageQueue class with an exist ing queue. At that point,you can manipulate the queue properties such as Category and Label.
message queue类提供对消息队列队列的引用。可以在messagequeue构造函数中指定一个路径以连接到现有资源,也可以在服务器上创建一个新队列。在调用send(object)、peek或receive之前,必须将messagequeue类的新实例与现有队列相关联。此时,您可以操作队列属性,如类别和标签。
-------sihaiyizhi
1.组件间传递数据时,下列的数据类型不可以被传递的是( D)
A.Serialzable B、Fie C、 Parcelable D.Tread
2、下列代码中邮个是隐式intent的例子? ( B)
A Intent intent = new intent(this, TestActity.class);
intent. setData(Uri.parse(fileUri),
startActivity(downloadintent);
B. intent intent= new intent(Intent.ACTION_SEND);
intent.putlExtra(inten. EXTRA_TEXT .TextMessage);
intent. setType( text/plain");
startActivity(intent);
C. Intent intent=new Intent();
intent.setClassName(context.getPackageName(),”com.google sample. TestActivity");
startActivity(intent);
D. Intent intent=new Intetn();
intent. setComponent(new ComponentName(context.getPackageName(),"com.google. sample,TestActivity");
startActivity(intent);
3、在一个布局文件中,对一个EditText进行设置以下哪项设置能实现输入框默认提示内容的效果(B )
A、android:capitalize B、android:hint C、android:singleLine D、android:text
4、下列哪些情况下系统会程序抛出异常,强制退出(BC )
A、 应用运行时,Main线程进行了耗时操作
B. 成用道行时模出T OutOMemoryeEror
C.应用运行时抛出了Runtime xcoption
D.应用运行时,用户操作过于频繁
AD:产生ANR,程序没有响应,有可能程序会再次响应
BC:程序抛出异常,会强制退出
5、Activity从可 见状态变为半透明遮盖状态时,生命周期中哪个方法被调用(B)
A onStop() B. onPause() C onRestart()D.onStart
简答题
6、动态权限申请是Google在Android多少版本引入的机制?
Google在 Android 6.0 开始引入了权限申请机制,将所有权限分成了正常权限和危险权限。应用的相关功能每次在使用危险权限时需要动态的申请并得到用户的授权才能使用。
正常权限不会直接给用户隐私权带来风险。如果您的应用在其清单中列出了正常权限,系统将自动授予该权限。
危险权限会授予应用访问用户机密数据的权限。如果您的应用在其清单中列出了正常权限,系统将自动授予该权限。如果您列出了危险权限,则用户必须明确批准您的应用使用这些权限。
7、是否使用过本地广播,和全局广播有什么差别?
本地广播:
广播事件的发送和接收都在本应用,不影响其他应用也不受其他应用影响,只能被动态注册,不能静态注册,主要用法都在LocalBroadcastManager类中。
全局广播:
可以接收其他应用发的广播,也可以发送广播让其他应用接收,全局广播既可以动态注册,也可以静态注册,接受其他应用和系统广播是全局广播的一个重要应用点。总体来说两者应用场景不同。
BroadcastReceiver是针对应用间、应用与系统间、应用内部进行通信的一种方式
LocalBroadcastReceiver仅在自己的应用内发送接收广播,也就是只有自己的应用能收到
8、invalidate()和 postinvalidate() 的区别及使用
Android中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate,其中前者是在UI线程自身中使用,而后者在非UI线程中使用。
Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用。
Android程序中可以使用的界面刷新方法有两种,分别是利用Handler和利用postInvalidate()来实现在线程中刷新界面。
https://www.cnblogs.com/rayray/p/3437048.html
9、Android中如何捕获未捕获的异常。
https://www.cnblogs.com/xinaixia/p/7646290.html
10.如何在子线程创建一个handler
主线程不用创建Looper,而子线程需要
https://blog.csdn.net/qq_41673194/article/details/80022875
10.service和intentService的区别
首先,IntentService是继承的Service
IntentService 中的 onCreate方法中开启了一个线程处理耗时的操作,所以Service需要有耗时操作的可以用IntentService。另外IntentService中在onHandleIntent方法中处理耗时操作,处理完成之后会自动的结束自己。
11.GreenDao数据库升级
https://blog.csdn.net/qq_35956194/article/details/79167897
12.Android实现Fragment与Activity之间的数据交互
https://blog.csdn.net/xingchenhy/article/details/81457300
13.自定义广播
https://www.jianshu.com/p/225ead6f30ad
14.集合
https://blog.csdn.net/dbpggg/article/details/80825294
15.ArrayList和LinkedList的区别
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
16.HashMap和HasTable的区别
https://www.cnblogs.com/heyonggang/p/9112731.html
17.动画
https://blog.csdn.net/dream_caoyun/article/details/78814466
18.Activity A跳到 Activity B 的生命周期是什么?B返回A的生命周期
首先A进来的生命周期

点击按钮 A执行的生命周期

A跳到B,B的生命周期

如果A加 finish(),生命周期会执行onStop(),onDestroy,不加只执行onStop()。如果B也加finish(),其一致的
B回到A,B执行的生命周期

B回到A,A执行的生命周期



19.Activity的onRestart()方法在什么时候调用
(1)启动这个demo执行如1;onCreate()--->onStart()--->onResume()这三个方法
(2)按下home键执行如2;onPause()--->onStop()这两个方法
(3)再次打开这个demo执行如3;onRestart()--->onStart()--->onResume()三个方法。

20.onPause()和onStop()的区别
https://www.jianshu.com/p/fb44584daee3