Android面试官最喜欢问15道面试题

简介: Android面试官最喜欢问15道面试题

Java中内部类为什么可以访问外部类


1.因为内部类创建的时候,需要外部类的对象,在内部类对象创建的时候会把外部类的引用传递进去


设计移动端的联系人存储与查询的功能,要求快速搜索联系人,可以用到哪些数据结构?

数据库索引,平衡二叉树(B树、红黑树)


红黑树特点

1.root节点和叶子节点是黑色

2.红色节点后必须为黑色节点

3.从root到叶子每条路径的黑节点数量相同


linux异步和同步i/o:


1.同步:对于client,client一直等待,但是client不挂起:主线程调用

2.异步:对于client,client发起请求,service好了再回调client:其他线程调用,调用完成之后进行回调

3.阻塞:对于service,在准备io的时候会将service端挂起,直至准备完成然后唤醒service:bio

3.非阻塞:对于service,在准备io的时候不会将service端挂起,而是service一直去轮询判断io是否准备完成,准备完成了就进行操作:nio、linux的select、poll、epoll

4.多路复用io:非阻塞io的一种优化,javanio,用一个线程去轮询多个 io端口是否可用,如果一个可用就通知对应的io请求,这使用一个线程轮询可以大大增强性能。


1).我可以采用 多线程+ 阻塞IO达到类似的效果,但是由于在多线程+ 阻塞IO中,每个socket对应一个线程,这样会造成很大的资源占用。

2).而在多路复用IO中,轮询每个socket状态是内核在进行的,这个效率要比用户线程要高的多。

5.异步io:aio,用户线程完全不感知io的进行,所有操作都交给内核,io完成之后内核通知用户线程。

1).这种io才是异步的,2、3、4都是同步io,因为内核进行数据拷贝的过程都会让用户线程阻塞。

2).异步IO是需要操作系统的底层支持,也就是内核支持,Java7中,提供AsynchronousIO


ConcurrentHashMap内部实现,HashTable的实现被废弃的原因:


1.HashTable容器在竞争激烈的并发环境下表现出效率低下的原因,是因为所有访问HashTable的线程都必须竞争同一把锁,那假如容器里有多把锁,每一把锁用于锁容器其中一部分数据,那么当多线程访问容器里不同数据段的数据时,线程间就不会存在锁竞争,从而可以有效的提高并发访问效率,这就是ConcurrentHashMap所使用的锁分段技术,首先将数据分成一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问。


2.ConcurrentHashMap是由Segment数组结构和HashEntry数组结构组成。Segment是一种可重入锁ReentrantLock,在ConcurrentHashMap里扮演锁的角色,HashEntry则用于存储键值对数据。一个ConcurrentHashMap里包含一个Segment数组,Segment的结构和HashMap类似,是一种数组和链表结构,一个Segment里包含一个HashEntry数组,每个HashEntry是一个链表结构的元素,每个Segment守护者一个HashEntry数组里的元素,当对


HashEntry数组的数据进行修改时,必须首先获得它对应的Segment锁。


HandlerThread是什么  

1.MessageQueue+Looper+Handler

开发中我们经常会通过创建一个 Thread 去执行任务,有多个任务就多创建几个线程实现,这时候可能出现线程同步的问题。不过有时候我们并不需要很强的并发性,只需保证按照顺序地执行各个任务即可,有什么好办法实现呢?第一反应想到的可能是通过Executors.newSingleThreadExecutor() 方法来创建一个 SingleThreadExecutor,来统一所有的任务到一个线程中,然后按顺序执行。其实,除了这个方法之外,HandlerThread 也可以实现。


IntentService是什么


1.含有HandlerThread的Service,可以多次startService()来多次在子线程中进行 onHandlerIntent()的调用。


class和dex

1.dvm执行的是dex格式文件,jvm执行的是class文件,android程序编译完之后生产class文件。然后dex工具会把class文件处理成dex文件,然后把资源文件和.dex文件等打包成apk文件。

2.dvm是基于寄存器的虚拟机,而jvm执行是基于虚拟栈的虚拟机。寄存器存取速度比栈快的多,dvm可以根据硬件实现最大的优化,比较适合移动设备。

3.class文件存在很多的冗余信息,dex工具会去除冗余信息,并把所有的class文件整合到dex文件中。减少了I/O操作,提高了类的查找速度


内存泄漏


1.其他线程持有一个Listener,Listener操作activity。那么在线程么有完毕的时候,activity关闭了,原本是要被回收的但是,不能被回收。


2.例如Handler导致的内存泄漏,Handler就相当于Listener。


3.在activity关闭的时候注意停止线程,或者将Listener的注册取消


3.使用弱引用,这样即使Listener持有了activity,在GC的时候还是会被回收


4.工具:LeakCanary


过度绘制、卡顿优化:

1.过度绘制:

1).移除Window默认的Background:getWidow.setBackgroundDrawable(null);2.移除XML布局文件中非必需的Background

3).减少布局嵌套(扁平化的一个体现,减少View数的深度,也就减少了View树的遍历时间,渲染的时候,前后期的工作,总是按View树结点来)

4).在引入布局文件里面,最外层可以用merge替代LinearLayout,RelativeLayout,这样把子UI元素直接衔接在include位置

5).工具:HierarchyViewer   查看视图层级

2.卡顿优化:16ms数据更新,内存使用是否合理,是否出现内存抖动情况


apk瘦身:  


1.classes.dex:通过代码混淆,删掉不必要的jar包和代码实现该文件的优化

2.资源文件:通过Lint工具扫描代码中没有使用到的静态资源

3.图片资源:使用tinypng和webP,下面详细介绍图片资源优化的方案,矢量图

4.SO文件将不用的去掉,目前主流app一般只放一个arm的so包

5,开启资源压缩


ANR的形成,各个组件上出现ARN的时间限制是多少


1.只要是主线程耗时的操作就会ARN如io

2.broadcast超时时间为10秒 按键无响应的超时时间为5秒 前台service无响应的超时时间为20秒,后台service为200秒


Serializable和Parcelable 的区别

1. Parcelable 消耗内存小

2.网络传输用Serializable 程序内使用Parcelable

3.Serializable将数据持久化方便

4.Serializable使用了反射 容易触发垃圾回收 比较慢

 

Sharedpreferences源码简述


1.储存于硬盘上的xml键值对,数据多了会有性能问题

2.ContextImpl记录着SharedPreferences的重要数据,文件路径和实 例的键值对

3.在xml文件全部内加载到内存中之前,读取操作是阻塞的,在xml文件全部内加载到内存中之后,是直接读取内存中的数据

4.apply因为是异步的没有返回值, commit是同步的有返回值能知道修改是否提交成功

5.多并发的提交commit时,需等待正在处理的commit数据更新到磁盘 文件后才会继续往下执行,从而降低效率;   而apply只是原子更新到内存,后调用apply函数会直接覆盖前面内存数据,从一定程度上提高很 多效率。3.edit()每次都是创建新的EditorImpl对象.

不过目前大部分都是MMKV


操作系统如何管理内存的:


1.使用寄存器进行将进程地址和物理内存进行映射

2.虚拟内存进行内存映射到硬盘上增大内存

3.虚拟内存是进行内存分页管理

4.页表实现分页,就是 页+地址偏移。

5.如果程序的内存在硬盘上,那么就需要用页置换算法来将其调入内存中:先进先出、最近使用最少等等


浏览器输入地址到返回结果发生了什么?

1.DNS解析

2.TCP连接

3.发送HTTP请求

4.服务器处理请求并返回HTTP报文

5.浏览器解析渲染页面

6.连接结束

相关文章
|
6天前
|
Android开发
Android面试题之Activity的启动模式和flag
Android Activity的四种启动模式:standard(默认,每次启动创建新实例),singleTop(栈顶复用,不走onCreate,调用onNewIntent),singleTask(栈内唯一,清除上方Activity)和singleInstance(单独栈内唯一)。启动模式在AndroidManifest.xml中配置,Intent Flags如FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_SINGLE_TOP可实现类似功能。了解这些对于处理Activity栈管理至关重要。
12 0
|
3天前
|
Android开发 Kotlin
Android面试题之kotlin中怎么限制一个函数参数的取值范围和取值类型等
在Kotlin中,限制函数参数可通过类型系统、泛型、条件检查、数据类、密封类和注解实现。例如,使用枚举限制参数为特定值,泛型约束确保参数为Number子类,条件检查如`require`确保参数在特定范围内,数据类封装可添加验证,密封类限制为一组预定义值,注解结合第三方库如Bean Validation进行校验。
15 6
|
3天前
|
Android开发
Android面试题之自定义View注意事项
在Android开发中,自定义View主要分为四类:直接继承View重写onDraw,继承ViewGroup创建布局,扩展特定View如TextView,以及继承特定ViewGroup。实现时需注意:支持wrap_content通过onMeasure处理,支持padding需在onDraw或onMeasure/onLayout中处理。避免在View中使用Handler,使用post系列方法代替。记得在onDetachedFromWindow时停止线程和动画以防止内存泄漏。处理滑动嵌套时解决滑动冲突,并避免在onDraw中大量创建临时对象。
13 4
|
1天前
|
Android开发
Android面试题之View的invalidate方法和postInvalidate方法有什么区别
本文探讨了Android自定义View中`invalidate()`和`postInvalidate()`的区别。`invalidate()`在UI线程中刷新View,而`postInvalidate()`用于非UI线程,通过消息机制切换到UI线程执行`invalidate()`。源码分析显示,`postInvalidate()`最终调用`ViewRootImpl`的`dispatchInvalidateDelayed`,通过Handler发送消息到UI线程执行刷新。
11 1
|
4天前
|
Android开发 Kotlin
Android面试题之 Kotlin中退出迭代器的方式有哪些
在Android和Kotlin中,遍历集合时可使用迭代器结合`break`提前终止循环。例如,使用`while`和迭代器,或用`forEach`配合`return@forEach`来中断遍历。若需退出外层函数,可定义自定义标签。在遍历并删除元素时,这些技巧尤其有用。
11 3
|
5天前
|
存储 安全 Java
Java面试题:Java内存管理、多线程与并发框架:一道综合性面试题的深度解析,描述Java内存模型,并解释如何在应用中优化内存使用,阐述Java多线程的创建和管理方式,并讨论线程安全问题
Java面试题:Java内存管理、多线程与并发框架:一道综合性面试题的深度解析,描述Java内存模型,并解释如何在应用中优化内存使用,阐述Java多线程的创建和管理方式,并讨论线程安全问题
8 0
|
5天前
|
存储 并行计算 安全
Java面试题:Java内存管理、多线程与并发框架的面试题解析与知识点梳理,深入Java内存模型与垃圾回收机制,Java多线程机制与线程安全,Java并发工具包与框架的应用
Java面试题:Java内存管理、多线程与并发框架的面试题解析与知识点梳理,深入Java内存模型与垃圾回收机制,Java多线程机制与线程安全,Java并发工具包与框架的应用
10 0
|
6天前
|
消息中间件 前端开发 Android开发
Android面试题自定义View之Window、ViewRootImpl和View的三大流程
Android开发中,View的三大核心流程包括measure(测量)、layout(布局)和draw(绘制)。MeasureSpec类在测量过程中起到关键作用,它结合尺寸大小和模式(EXACTLY、AT_MOST、UNSPECIFIED)来指定View应如何测量。onMeasure方法用于自定义View的测量,布局阶段,ViewGroup调用onLayout确定子元素位置,而draw阶段按照特定顺序绘制背景、内容、子元素和装饰。整个流程始于ViewRootImpl的performTraversals,该方法触发测量、布局和绘制。
13 0
|
存储 缓存 Java
Android--面试中遇到的问题总结(一)
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/56479430 一、handl...
1311 0
|
Android开发 容器 缓存
Android--面试中遇到的问题总结(二)
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/56480392 一、开发中都...
1229 0