试题集合Android 面试专辑Interview

安卓面试突破专题

2017-02-24  本文已影响1053人  小鱼爱记录

来自:动脑学院-安卓面试突破专题课程

Android 基础与底层机制

  1. 数据库的操作类型有哪些,如何导入外部数据库?(Ricky)
  2. 是否使用过本地广播,和全局广播有什么差别?(Ricky)
  3. 是否使用过 IntentService,作用是什么, AIDL 解决了什么问题? (小米) (Ricky)
  4. Activity、 Window、 View 三者的差别, fragment 的特点?(360)(Ricky)
  5. 描述一次网络请求的流程(新浪)(Jason)
  6. Handler、 Thread 和 HandlerThread 的差别(小米)(Jason)
  7. 低版本 SDK 实现高版本 api(小米)(Ricky)
  8. launch mode 应用场景(百度、小米、乐视)(Ricky)
  9. touch 事件传递流程(小米)(Ricky)
  10. view 绘制流程(百度)(Ricky)
  11. 什么情况导致内存泄漏(美团)(Ricky)
  12. ANR 定位和修正(Ricky)
  13. 什么情况导致 oom(乐视、美团)(Ricky)
  14. Android Service 与 Activity 之间通信的几种方式(Ricky)
  15. Android 各个版本 API 的区别(Ricky)
  16. 如何保证一个后台服务不被杀死,比较省电的方式是什么?(百度)(Ricky)
  17. Requestlayout, onlayout, onDraw, DrawChild 区别与联系(猎豹)(Ricky)
  18. invalidate()和 postInvalidate() 的区别及使用(百度)(Ricky)
  19. Android 动画框架实现原理(Ricky)
  20. Android 为每个应用程序分配的内存大小是多少?(美团)(Ricky)
  21. Android View 刷新机制(百度、美团)(Ricky)
  22. LinearLayout 对比 RelativeLayout(百度)(Ricky)
  23. 优化自定义 view(百度、乐视、小米)(Ricky)
  24. ContentProvider(乐视)(Ricky)
  25. fragment 生命周期(Ricky)
  26. volley 解析(美团、乐视)(Ricky)
  27. Android Glide 源码解析(Ricky)
  28. Android 属性动画特性(乐视、小米)(Ricky)
  29. Handler 机制及底层实现(Danny)
  30. Binder 机制及底层实现(Danny)

Java 基础

  1. 接口的意义(百度)(Jason)

1、重要性:在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力。
2、简单、规范性:如果一个项目比较庞大,那么就需要一个能理清所有业务的架构师来定义一些主要的接口,这些接口不仅告诉开发人员你需要实现那些业务,而且也将命名规范限制住了(防止一些开发人员随便命名导致别的程序员无法看明白)。
3、维护、拓展性:比如你要做一个画板程序,其中里面有一个面板类,主要负责绘画功能,然后你就这样定义了这个类。可是在不久将来,你突然发现这个类满足不了你了,然后你又要重新设计这个类,更糟糕是你可能要放弃这个类,那么其他地方可能有引用他,这样修改起来很麻烦。
如果你一开始定义一个接口,把绘制功能放在接口里,然后定义类时实现这个接口,然后你只要用这个接口去引用实现它的类就行了,以后要换的话只不过是引用另一个类而已,这样就达到维护、拓展的方便性。
4、安全、严密性:接口是实现软件松耦合的重要手段,它描叙了系统对外的所有服务,而不涉及任何具体的实现细节。这样就比较安全、严密一些(一般软件服务商考虑的比较多)。

  1. 抽象类的意义(乐视)(Jason)

抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。具体分析如下:
1.因为抽象类不能实例化对象,所以必须要有子类来实现它之后才能使用。这样就可以把一些具有相同属性和方法的组件进行抽象,这样更有利于代码和程序的维护。
2.当又有一个具有相似的组件产生时,只需要实现该抽象类就可以获得该抽象类的那些属性和方法。

  1. 内部类的作用(百度,乐视) (Jason)

定义:放在一个类的内部的类我们就叫内部类。
作用:
1.内部类可以很好的实现隐藏,一般的非内部类,是不允许有 private 与protected权限的,但内部类可以
2.内部类拥有外围类的所有元素的访问权限
3.可是实现多重继承
4.可以避免修改接口而实现同一个类中两种同名方法的调用。

  1. 父类的静态方法能否被子类重写,为什么?(猎豹)(Jason)

父类的静态方法是不能被子类重写的,其实重写只能适用于实例方法,不能用于静态方法,对于上面这种静态方法而言,我们应该称之为隐藏。
Java静态方法形式上可以重写,但从本质上来说不是Java的重写。因为静态方法只与类相关,不与具体实现相关。声明的是什么类,则引用相应类的静态方法(本来静态无需声明,可以直接引用)。并且static方法不是后期绑定的,它在编译期就绑定了。换句话说,这个方法不会进行多态的判断,只与声明的类有关。

  1. 举 1-2 个排序算法,并使用 java 代码实现(美团)(Danny)

  2. 列举 java 的集合和继承关系(百度、美团)(Jason)

  3. java 虚拟机的特性(百度、乐视)(Jason)

  4. 哪些情况下的对象会被垃圾回收机制处理掉(乐视、美团、小米)(Jason)

(1)超出对象的引用句柄的作用域时,这个引用句柄引用的对象就变成垃圾。
(2)没有超出对象的引用句柄的作用域时,给这个引用句柄赋值为空时,这个引用句柄引用的对象就变成垃圾。
(3)创建匿名对象时,匿名对象用完以后即成垃圾。

  1. 进程和线程的区别(猎豹)(Jason)

进程和线程都是一个时间段的描述,是CPU工作时间段的描述,不过是颗粒大小不同。

  1. 简而言之,一个程序至少有一个进程,一个进程至少有一个线程.
  2. 线程的划分尺度小于进程,使得多线程程序的并发性高。
  3. 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
  4. 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
  5. 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。
  1. Java 中==和 equals 的区别, equals 和 hashCode 的区别(乐视)(Jason)
  2. ArrayList 和 HashMap 的实现原理(美团,百度)(Danny)
  3. java 中 int char long 各占多少字节数(Jason)
  4. java int 与 integer 的区别(Jason)
  5. string stringbuffer stringbuilder 区别(小米、乐视、百度)(Jason)
  6. Java 多态(乐视)(Jason)
  7. 什么导致线程阻塞(58、美团)(Jason)
  8. 抽象类接口区别(360)(Jason)
  9. 容器类之间的区别(乐视、美团)(Jason)
  10. Java 中 HashMap 和 HashTable 的区别(乐视、小米)(Danny)
  11. ArrayMap VS HashMap(Danny)

数据结构与算法

  1. 堆和栈在内存中的区别是什么(数据结构方面以及实际实现方面) (Danny)
  2. 最快的排序算法是哪个?给阿里 2 万多名员工按年龄排序应该选择哪个算法?堆和树
    的区别;写出快排代码;链表逆序代码(阿里)(Danny)
  3. 求 1000 以内的水仙花数以及 40 亿以内的水仙花数(百度)(Danny)
  4. 子串包含问题(KMP 算法)写代码实现(Danny)
  5. 万亿级别的两个 URL 文件 A 和 B,如何求出 A 和 B 的差集 C,(Bit 映射->hash 分组->多文(Danny)
    件读写效率->磁盘寻址以及应用层面对寻址的优化) (Danny)
  6. 蚁群算法与蒙特卡洛算法(Danny)
  7. 写出你所知道的排序算法及时空复杂度,稳定性(小米)(Danny)

其他

  1. 死锁的四个必要条件(Jason)

1)互斥条件,即某个资源在一段时间内只能由一个线程占有,不能同时被两个或两个以上的线程占有
2)不可抢占条件,线程所获得的资源在未使用完毕之前,资源申请者不能强行地从资源占有者手中夺取资源,而只能由该资源的占有者线程自行释放
3)占有且申请条件,线程至少已经占有一个资源,但又申请新的资源;由于该资源已被另外线程占有,此时该线程阻塞;但是,它在等待新资源之时,仍继续占用已占有的资源。
4)循环等待条件,存在一个线程等待序列{P1,P2,...,Pn},其中P1等待P2所占有的某一资源,P2等待P3所占有的某一源,......,而Pn等待P1所占有的的某一资源,形成一个线程循环等待环
解决死锁的办法:加锁顺序,死锁检测

  1. 常见编码方式; utf-8 编码中的中文占几个字节;数字几个字节(Jason)

一个utf8数字占1个字节,一个utf8英文字母占1个字节,少数是汉字每个占用3个字节,多数占用4个字节。

  1. 实现一个 Json 解析器(可以通过正则提高速度) (Jason)
String json = "{name:\"jason\",father:\"jason\",age:18}";
//name:"jason"
//age:18
//\"\\w+\" 字符串属性
Pattern p = Pattern.compile("\\w+:(\"\\w+\"|\\d*)");
Matcher m = p.matcher(json);
while(m.find()){
    String text = m.group();
    int dotPos= text.indexOf(":");
    String key = text.substring(0, dotPos);
    String value = text.substring(dotPos+1, text.length());
    //替换字符串的开始结束的双引号
    value = value.replaceAll("^\\\"|\\\"$", "");
    System.out.println(key);
    System.out.println(value);
}
  1. Android App 的设计架构: MVC,MVP,MVVM 与架构经验谈(搜狐)(Jason)

  2. 写出观察者模式的代码(Jason)
    触发联动

  3. TCP 的 3 次握手和四次挥手; TCP 与 UDP 的区别(Jason)

http://blog.csdn.net/whuslei/article/details/6667471
1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的
UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP首部开销20字节;UDP的首部开销小,只有8个字节
6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

  1. HTTP 协议; HTTP1.0 与 2.0 的区别;HTTP 报文结构(Jason)
  2. HTTP 与 HTTPS 的区别以及如何实现安全性(Jason)
上一篇下一篇

猜你喜欢

热点阅读