android面试题2019

答案

Java

基础

String、StringBuffer、StringBuilder的区别

03

进程和线程的区别;多线程与线程池

16

java中equals和==的区别

04

集合类以及集合框架;HashMap与HashTable实现原理,线程安全性,hash冲突及处理算法;ConcurrentHashMap

 

静态属性和静态方法是否可以被继承?是否可以被重写?原因

12

抽象类与接口的区别;应用场景;抽象类是否可以没有方法和属性

 

Java中实现多态的机制是什么?

11

Android

基础

activity的启动生命周期方法流程

activity在屏幕旋转时的生命周期

activity的四种启动模式和与其对应使用场景

如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状

态?

17

如何启用Service,如何停用Service?

IntentService和Service有什么区别?

10

注册广播有几种方式及其优缺点?谈谈Android引入广播机制的用意

 

android的动画有哪几类,它们的特点和区别是什么?

07

android的数据存储的方式有哪些?

01

android进程间通信的方式有哪些?

05

Service和Thread的区别?

进程和线程的区别?

IntentService和Service的区别?IntentService原理

 

如何做SQLite升级?

 

JNI和NDK的区别?

 

自定义控件

View的绘制流程

自定义View如何考虑机型适配

 

touch事件传递机制

View和ViewGroup分别有哪些事件分发相关的回调方法

 

性能优化

什么是内存泄漏?内存泄漏有哪些代码场景,如何解决

 

什么是ANR,如何避免它?

如何分析一个anr的日志

 

系统源码&

三方SDK源码

Handler机制

 

Binder机制

02

其他(技术广度)

如何减少对第三方框架的耦合

 

MVP,MVVM,MVC的区别是什么

mvc模式的原理

 

Java Memory Model的内存模型

 

热修复的原理

18

你对设计模式的理解,简单说几种?

06

死锁的四个必要条件

14

常见的设计模式;写出观察者模式的代码

 

TCP的3次握手和四次挥手;TCP与UDP的区别

21

HTTP与HTTPS的区别以及如何实现安全性

19

Http位于TCP/IP模型中的第几层?为什么说Http是可靠的数据传输协议?

20

Android进阶

当点击一个应用图标以后,都发生了什么,描述一下这个过程?

 

Lru算法的原理?

08

混合开发,RN,weex,H5,flutter如何选型

22

Art和Dalvik对比

 

内存回收机制与GC算法(各种算法的优缺点以及应用场景);GC原理时机以及GC对象

 

Activity,Window,View三者的联系?

15

hashmap的基本原理,如何减少hash冲突 如何增大hash冲突

 

数据结构与算法

堆和栈在内存中的区别是什么(数据结构方面以及实际实现方面)

 

冒泡、选择、快排有没有相似之处?简单说一下他们的原理?

09

写出你所知道的排序算法及时空复杂度,稳定性

 

android面试题答案

01

Android的数据存储方式

SharedPreferences存储数据;文件存储数据;SQLite数据库存储数据;使用ContentProvider存储数据;网络存储数据

02

Binder机制

为了实现Binder IPC机制,Android在Linux内核挂载了一个虚拟的设备/dev/binder;Client和Server进程运行在用户空间,使用Binder机制进行进程间通信时,双方看起来是“直接”通信的,实际上通过/dev/binder的驱动程序即Binder驱动进行了数据的中转,Binder机制的本质是共享内存,共享内存区的管理完全由Binder驱动来完成,对应用层的Client和Server来说是完全透明的。(驱动是控制来访问内存的一段小应用程序,但是驱动控制的是硬件内存的读写 )

03

String、StringBuffer、StringBuilder的区别

String:字符串常量,每次修改都相当于生成一个新的对象,所以不适合经常变更值的场景. StringBuffer:字符串变量,线程安全适用于多线程. StringBuilder:字符串变量,线程不安全适用于单线程,效率略快于StringBuffer.

速度上面String不断的复制和更改是创建不同的对象来进行操作,这里涉及到GC垃圾回收机制,会影响速度;而StringBuffer和StringBuilder则处理同一个对象不存在JVM的GC回收。

线程安全与否:如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法则没有该关键字,所以不能保证线程安全,不能同步的问题。

04

java中equals和==的区别

基本数据类型==比较的是值,非基本数据类型==比较的是内存地址

equals比较的是内存地址(但在一些类库中已经重写了这个方法(一般都是用来比较对象的成员变量值是否相同),比如:String,Integer,Date 等类中,所以他们不再是比较类在堆中的地址了)

05

进程间通信有哪些方式?

Intent,访问其他程序的Activity或者调用系统电话、短信

Content Provider,多个App共享数据

AIDL(Android Interface Define Language)服务,客户端定义接口暴露给服务端使用

BroadCast

Socket

06

你对设计模式的理解,简单说几种?

一共23种,随便说几种就行,然后一般会问一些互相之间的区别啊,使用它们的好处之类的。

Builder模式(方便维护,使用者可以不用清楚内部构成情况就能直接调用方法;比如系统弹窗)

观察者模式(被观察者与观察者,只要有订阅关系,当被观察者发生改变时,就能通知观察者们;比如Event )

单例模式(一个进程/项目中只存在1个实例,为了节约内存资源)

工厂模式

07

Android动画有几类,它们的特点和区别是什么?

帧动画:类似于一帧帧图片组成的电影,xml中多张图片组成,在UI线程中播放这个xml形成的动画。

补间动画:补间动画分为四种形式,分别是 alpha(淡入淡出),translate(位移),scale(缩放大小),rotate(旋转)。补间动画的实现,一般会采用xml 文件的形式;当然也可以用Java代码直接实现。

属性动画:这是3.0之后加入的动画,为了弥补前面两种动画的不足。属性动画可以实现很多数学函数的路径动画。属性动画的运行机制是通过不断地对值进行操作来实现的,而初始值和结束值之间的动画过渡就是由ValueAnimator这个类来负责计算的。它的内部使用一种时间循环的机制来计算值与值之间的动画过渡,我们只需要将初始值和结束值提供给ValueAnimator,并且告诉它动画所需运行的时长,那么ValueAnimator就会自动帮我们完成从初始值平滑地过渡到结束值这样的效果。除此之外,ValueAnimator还负责管理动画的播放次数、播放模式、以及对动画设置监听器等。

08

Lru算法的原理?

LRU(Least Recently Used)最近最少使用,LRU使用的是LinkedHashMap,如果链表中存在一个数则将其置顶,如果没有则直接在顶部加入这个数并将其底部的数移除。大致可以这样理解,具体可以再搜索一下LRU算法

09

冒泡、选择、快排有没有相似之处?简单说一下他们的原理?

冒泡:(原理看水桶里面的泡泡,从下到上冒泡,每次确定一个最大的泡到最上面)

选择: (选择第i个数依次与后面的数进行比较得到相对最小的数来替换第i个数)

10

IntentService和Service有什么区别?

Service不是独立的进程,也不是独立的线程,它是依赖于应用程序的主线程(比喻成没有界面的activity),也就是说,在更多时候不建议在Service中编写耗时的逻辑和操作,否则会引起ANR。

IntentService是Service的子类,IntentService在执行onCreate操作的时候,内部开了一个线程,去你执行你的耗时操作。通过Handler looper message的方式实现了一个多线程的操作,同时耗时操作也可以被这个线程管理和执行,同时不会产生ANR的情况。

11

Java中实现多态的机制是什么?

方法的重写Overriding和重载Overloading是Java多态性的不同表现

重写Overriding是父类与子类之间多态性的一种表现

重载Overloading是一个类中多态性的一种表现

12

静态属性和静态方法是否可以被继承?是否可以被重写?原因

可继承 不可重写 而是被隐藏

如果子类里面定义了静态方法和属性,那么这时候父类的静态方法或属性称之为"隐藏"。如果你想要调用父类的静态方法和属性,直接通过父类名.方法或变量名完成。

13

List,Set,Map的区别 

Set是最简单的一种集合。集合中的对象不按特定的方式排序,并且没有重复对象。 Set接口主要实现了两个实现类:HashSet: HashSet类按照哈希算法来存取集合中的对象,存取速度比较快

TreeSet :TreeSet类实现了SortedSet接口,能够对集合中的对象进行排序。

List的特征是其元素以线性方式存储,集合中可以存放重复对象。

ArrayList() : 代表长度可以改变得数组。可以对元素进行随机的访问,向ArrayList()中插入与删除元素的速度慢。

LinkedList(): 在实现中采用链表数据结构。插入和删除速度快,访问速度慢。

Map 是一种把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象。 Map没有继承于Collection接口 从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象。

HashMap:Map基于散列表的实现。插入和查询“键值对”的开销是固定的。可以通过构造器设置容量capacity和负载因子load factor,以调整容器的性能。

LinkedHashMap: 类似于HashMap,但是迭代遍历它时,取得“键值对”的顺序是其插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一点。而在迭代访问时发而更快,因为它使用链表维护内部次序。

TreeMap : 基于红黑树数据结构的实现。查看“键”或“键值对”时,它们会被排序(次序由Comparabel或Comparator决定)。TreeMap的特点在 于,你得到的结果是经过排序的。TreeMap是唯一的带有subMap()方法的Map,它可以返回一个子树。

WeakHashMao :弱键(weak key)Map

14

死锁的四个必要条件?

互斥条件:一个资源每次只能被一个进程使用,即在一段时间内某 资源仅为一个进程所占有。此时若有其他进程请求该资源,则请求进程只能等待。

请求与保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源 已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。

不可剥夺条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能 由获得该资源的进程自己来释放(只能是主动释放)。

循环等待条件: 若干进程间形成首尾相接循环等待资源的关系

这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。

15

Activity,View,Window三者关系

1:Activity构造的时候会初始化一个Window,准确的说是PhoneWindow。

2:这个PhoneWindow有一个“ViewRoot”,这个“ViewRoot”是一个View或者说ViewGroup,是最初始的根视图。

3:“ViewRoot”通过addView方法来一个个的添加View。比如TextView,Button等

4:这些View的事件监听,是由WindowManagerService来接受消息,并且回调Activity函数。比如onClickListener,onKeyDown等

16

进程和线程的区别 

进程是cpu资源分配的最小单位,线程是cpu调度的最小单位。

进程之间不能共享资源,而线程共享所在进程的地址空间和其它资源。

一个进程内可拥有多个线程,进程可开启进程,也可开启线程。

一个线程只能属于一个进程,线程可直接使用同进程的资源,线程依赖于进程而存在。

17

activity四种LaunchMode

standard

可以有多个相同的实例,也允许多个相同Activity叠加

singleTop

可以有多个实例,但是不允许多个相同Activity叠加

singleTask

只有一个实例。在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法

singleInstance

只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。

18

热修复的原理

我们知道Java虚拟机 —— JVM 是加载类的class文件的,而Android虚拟机——Dalvik/ART VM 是加载类的dex文件,

而他们加载类的时候都需要ClassLoader,ClassLoader有一个子类BaseDexClassLoader,而BaseDexClassLoader下有一个

数组——DexPathList,是用来存放dex文件,当BaseDexClassLoader通过调用findClass方法时,实际上就是遍历数组,

找到相应的dex文件,找到,则直接将它return。而热修复的解决方法就是将新的dex添加到该集合中,并且是在旧的dex的前面,

所以就会优先被取出来并且return返回。

19

HTTP与HTTPS的区别以及如何实现安全性

1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

https实现原理:

(1)客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。

(2)Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。

(3)客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。

(4)客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。

(5)Web服务器利用自己的私钥解密出会话密钥。

(6)Web服务器利用会话密钥加密与客户端之间的通信。

20

Http位于TCP/IP模型中的第几层?为什么说Http是可靠的数据传输协议?

tcp/ip的五层模型:

从下到上:物理层->数据链路层->网络层->传输层->应用层

其中tcp/ip位于模型中的网络层,处于同一层的还有ICMP(网络控制信息协议)。http位于模型中的应用层

由于tcp/ip是面向连接的可靠协议,而http是在传输层基于tcp/ip协议的,所以说http是可靠的数据传输协议。

21

TCP和UDP的区别

tcp是面向连接的,由于tcp连接需要三次握手,所以能够最低限度的降低风险,保证连接的可靠性。

udp 不是面向连接的,udp建立连接前不需要与对象建立连接,无论是发送还是接收,都没有发送确认信号。所以说udp是不可靠的。

由于udp不需要进行确认连接,使得UDP的开销更小,传输速率更高,所以实时行更好。

22

混合开发,RN,weex,H5,flutter如何选型

Hybrid (H5): 通过浏览器内核引擎渲染执行.(代表框架:Cordova (PhoneGap),微信小程序)原生渲染: 由JavaScript开发但是由原生控件渲染(代表框架:React Native,Weex,快应用)

自绘UI: 通过在不同平台实现统一的渲染引擎来绘制UI,而不依赖系统平台的原生控件(代表框架:Flutter)

Android应用面试题及答案汇总相关推荐

  1. Android面试题及答案整理(2022年最新Android面试题大全带答案)

    Android面试题及答案(2022年最新Android面试题大全带答案),发现网上很多Android面试题整理都没有答案,所以花了很长时间搜集,本套Android面试题大全,Android面试题大汇 ...

  2. 21年最新Python面试题及答案汇总详解(上)

    错过三月找工作的机会,还要错过四月的好时期吗?Python面试你做准备了吗?下面小编整理了一套2021年最新Python常见面试题目,及Python面试题目答案汇总.希望能够帮助到大家. 21年最新P ...

  3. Spring常见面试题及答案汇总1000道(春招+秋招+社招)

    Spring面试题以及答案整理[最新版]Spring高级面试题大全(2021版),发现网上很多Spring面试题都没有答案,所以花了很长时间搜集,本套Spring面试题大全,汇总了大量经典的Sprin ...

  4. Java多线程常见面试题及答案汇总1000道(春招+秋招+社招)

    Java多线程面试题以及答案整理[最新版]Java多线程高级面试题大全(2021版),发现网上很多Java多线程面试题都没有答案,所以花了很长时间搜集,本套Java多线程面试题大全,汇总了大量经典的J ...

  5. MySQL常见面试题及答案汇总1000道(春招+秋招+社招)

    MySQL面试题以及答案整理[最新版]MySQL高级面试题大全(2021版),发现网上很多MySQL面试题都没有答案,所以花了很长时间搜集,本套MySQL面试题大全,汇总了大量经典的MySQL程序员面 ...

  6. Jvm常见面试题及答案汇总1000道(春招+秋招+社招)

    Jvm面试题以及答案整理[最新版]Jvm高级面试题大全(2021版),发现网上很多Jvm面试题都没有答案,所以花了很长时间搜集,本套Jvm面试题大全,汇总了大量经典的Jvm程序员面试题以及答案,包含J ...

  7. Dubbo常见面试题及答案汇总1000道(春招+秋招+社招)

    Dubbo面试题以及答案整理[最新版]Dubbo高级面试题大全(2021版),发现网上很多Dubbo面试题都没有答案,所以花了很长时间搜集,本套Dubbo面试题大全,汇总了大量经典的Dubbo程序员面 ...

  8. 最新Java面试题2021年,常见面试题及答案汇总

    2021最新Java面试题[附答案解析]java面试题及答案2021,java2021最新面试题及答案汇总,2021最Java面试题新答案已经全部更新完了,有些答案是自己总结的,也有些答案是在网上搜集 ...

  9. 大数据面试题及答案 汇总版

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/albg_boy/article/det ...

最新文章

  1. 数学:统计:基本概念
  2. C++中特定宏_FUNCTION_
  3. AnkhSVN 1.0.2778 简体中文版发布
  4. 使用transform和transition制作CSS3动画
  5. [转]IIS 允许/禁止 目录浏览
  6. python自动化框架测试实操_自动化框架之 python+selenium+pytest
  7. 计算机应用能力power,全国专业技术人员计算机应用能力考试专用教材——PowerPoint 2003中文演示文稿5日通题库版(双色)(附光盘) - 中国考研网...
  8. Android导入第三方jar包
  9. memcached在Java中的应用以及magent的配置-每天进步一点点
  10. iOS 抓包工具限免,速度下载!【附使用教程】
  11. 吉吉影音播放器v2.7.2.4官方版
  12. 哈密顿图 哈密顿回路 哈密顿通路(Hamilton)
  13. html隐藏地址栏,js新打开页面隐藏地址栏
  14. 测试无损音乐软件,无损音乐一定靠谱?/无损检测方法
  15. boxy 你用了吗??
  16. 双目视觉焦距_双目视觉成像原理
  17. 2018 10 12 校内模拟 字符串模拟+平面距离+线段树
  18. 给北上奋进的你一份礼物(java面试知识储备攻略)
  19. Mac全自动安装brew一键配置国内镜像源
  20. linux nvcc未找到命令,NVCC CUDA编译流程

热门文章

  1. 删除提示框 MessageBox弹框
  2. 软件测试基础理论2-产品模型
  3. 如何创建数据链接文件
  4. 计量经济学之时间序列的平稳性、单位根检验、协整检验、时间序列数据的一般处理流程
  5. 交叉编译-16:live555交叉编译(Windows和君正平台)
  6. ActiveMQ消费者断开重连
  7. Credential Provider
  8. 剪辑视频怎么学?手把手教你自学视频剪辑
  9. TTL反相器、OC门、TS门、推挽输出、开漏输出
  10. nrf24l01工作原理