Android面试题(持续更新中)

一、抽象类与接口的区别?

1、抽象类可以提供成员方法的实现细节,而接口中只能存在 public 抽象方法; 2、抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的; 3、接口中不能含有构造器、静态代码块以及静态方法,而抽象类可以有构造器、静态代码块和静态方法; 4、一个类只能继承一个抽象类,而一个类却可以实现多个接口; 5、抽象类访问速度比接口速度要快,因为接口需要时间去寻找在类中具体实现的方法; 6、如果你往抽象类中添加新的方法,你可以给它提供默认的实现。因此你不需要改变你现在的代码。 7、如果你往接口中添加方法,那么你必须改变实现该接口的类。 8、接口更多的为了约束类的行为,可用于解耦,而抽象类更加侧重于代码复用。

二、Java 中深拷贝与浅拷贝的区别?

1、浅拷贝:对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝, 此为浅拷贝。 2、深拷贝:对基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容,此为深拷贝

三、什么是反射机制?反射机制的应用场景有哪些?

Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类中的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为 Java 语言的反射机制。 应用场景:1. 逆向代码,例如反编译2. 与注解相结合的框架,如 Retrofit3. 单纯的反射机制应用框架,例如 EventBus(事件总线)4. 动态生成类框架 例如Gson

四、谈一谈Java成员变量,局部变量和静态变量的创建和回收时机?

成员变量:生命周期伴随类对象,类对象回收时回收,存在堆里。 静态变量:不回收,在方法区随着类的加载而加载,随着类的消失而消失,由于类需要非常长时间的不使用,不利用,不关联,才有可能会被回收机制回收,所以静态成员变量的生命周期特别长,除非是共享数据,否则不建议使用静态; 局部变量:方法调用时创建 方法结束时被标记为可回收,存在栈里

 五、扩展:内部类都有哪些?

有四种:静态内部类、非静态内部类、局部内部类、匿名内部类

六、线程池的好处

1、线程池的重用: 线程的创建和销毁的开销是巨大的,而通过线程池的重用大大减少了这些不必要的开销,当然既然少了这么多消费内存的开销,其线程执行速度也是突飞猛进的提升。
2、控制线程池的并发数: 初学新手可能对并发这个词语比较陌生,特此我也是结合百度百科和必生所学得出最优解释,万万记着并发可跟并行不一样。

七、为什么 Android 要采用 Binder 作为 IPC 机制?

简单来说,Binder 是android系统工程师为android 定制的一个跨进程通信方法,当然它也不是android 系统原创的,是参考了OpenBinder的实现而引进到Google的。Binder是综合了android系统的特点,从性能,设计架构,安全性等几个方面的综合平衡而设计的,具体的关于Binder的实现细节,朋友们可以参考 上面的题目 《描述下Binder机制原理》进行系统学习。

应该从几个方面与传统IPC机制做对比。

  1. 性能方面
  • 拷贝数据需要花时间,Binder只需拷贝一次,共享内存无需拷贝,其他的需要拷贝两次。
  • 从速度上来说,Binder仅次于共享内存,优于Socket,消息队列,管道,信号,信号量等。
  • 特点方面
  • Binder:基于C/S 架构,易用性高。
  • 共享内存:
    • 多个进程共享同一块内存区域,必然需要某种同步机制。
    • 使用麻烦,容易出现数据不同步,死锁等问题。

  • Socket:
    • 主要用在跨网络的进程间通信和本机上进程间的低速通信。
    • socket作为一款通用接口,其传输效率低,开销大。
  1. 安全性方面
  • Binder:(安全性高)
    • 为每个APP分配不同UID,通过UID鉴别进程身份。
    • 即支持实名Binder,又支持匿名Binder。

  • 传统IPC:(不安全)
    • 访问接入点是开放的,任何程序都可以与其建立连接。
    • 完全依赖上层协议,只能由用户在数据包中填入UID/PID。

通过上面几个比较,特别是安全性这块,所以最终Android选择使用Binder机制进行通信。

八、如何避免OOM

1.ArrayMap/SparseArray代替hashmap

2.避免在android里面使用Enum

3.减少bitmap的内存占用

inSampleSize:缩放比例,在把图片载入内存之前,我们需要先计算出一个合适的缩放比例,避免不必要的大图载入。

decode format:解码格式,选择ARGB_8888/RBG_565/ARGB_4444/ALPHA_8,存在很大差异。

4.减少资源图片的大小,过大的图片可以考虑分段加载

九、ANR 是什么?怎样避免和解决 ANR 

ANR->Application Not Responding

也就是在规定的时间内,没有响应。

三种类型:

1). KeyDispatchTimeout(5 seconds) —主要类型按键或触摸事件在特定时间内无响应

2). BroadcastTimeout(10 seconds) —BroadcastReceiver在特定时间内无法处理完成

3). ServiceTimeout(20 seconds) —小概率类型 Service在特定的时间内无法处理完成

为什么会超时:事件没有机会处理 & 事件处理超时

十、怎么避免ANR 

ANR的关键是处理超时,所以应该避免在UI线程,BroadcastReceiver 还有service主线程中,处理复杂的逻辑和计算而交给work thread操作。

1)避免在activity里面做耗时操作,oncreate & onresume

2)避免在onReceiver里面做过多操作

3)避免在Intent Receiver里启动一个Activity,因为它会创建一个新的画面,并从当前用户正在运行的程序上抢夺焦点。

4)尽量使用handler来处理UI thread & workthread的交互。

十一、如何解决ANR 

首先定位ANR发生的log:

 

04-01 13:12:11.572 I/InputDispatcher( 220): Application is not responding: Window {2b263310com.android.email/com.android.email.activity.SplitScreenActivitypaused=false}.  5009.8ms since event, 5009.5ms since waitstarted  CPUusage from 4361ms to 699ms ago ----CPU在ANR发生前的使用情况  
04-0113:12:15.872 E/ActivityManager(  220): 100%TOTAL: 4.8% user + 7.6% kernel + 87% iowait  
 04-0113:12:15.872 E/ActivityManager(  220): CPUusage from 3697ms to 4223ms later:-- ANR后CPU的使用量

十二、android 应用对内存是如何限制的?我们应该如何合理使用内存? 

activitymanager.getMemoryClass() 获取内存限制。

关于合理使用内存,其实就是避免OOM & 内存泄露中已经说明。

十三、请解释下 Android 程序运行时权限与文件系统权限的区别 

文件的系统权限是由linux系统规定的,只读,读写等。

运行时权限,是对于某个系统上的app的访问权限,允许,拒绝,询问。该功能可以防止非法的程序访问敏感的信息。

十四、多线程间通信和多进程之间通信有什么不同,分别怎么实现 

线程间的通信可以参考第6点。

进程间的通信:bind机制(IPC->AIDL),linux级共享内存,boradcast,Activity 之间,activity & serview之间的通信,无论他们是否在一个进程内。

十五、Android 中的动画有哪几类,它们的特点和区别是什么 

视图动画,或者说补间动画。只是视觉上的一个效果,实际view属性没有变化,性能好,但是支持方式少。

属性动画,通过变化属性来达到动画的效果,性能略差,支持点击等事件。android 3.0

帧动画,通过drawable一帧帧画出来。

Gif动画,原理同上,canvas画出来。 

十六、SurfaceView & View 的区别 

view的更新必须在UI thread中进行

surfaceview会单独有一个线程做ui的更新。

surfaceview 支持open GL绘制。

十七、 Android 开发的四大组件分别是 

活动(activity):用于表现功能。

服务(service):后台运行服务,不提供界面呈现。

广播接受者(Broadcast Receive):用于接收广播。

内容提供者(Content Provider),支持多个应用中存储和读取数据,相当于数据库。 

十八、Android生命周期 

onCreate:当Activity第一次被运行时调用此方法,可用于加载布局视图,获取控件命名空间等一些初始化工作。
onRestart:当Activity被重新启动的时候,调用此方法

onStart :表示Activity正在被启动,已经从不可见到可见状态(不是指用户可见,指Activity在后台运行,没有出现在前台),但还是无法与用户进行交互。
onResume :表Activity已经变为可见状态了,并且出现在前台工作了,也就是指用户可见了
onPause :表示Activity正在暂停,但Activity依然可见,可以执行一些轻量级操作,但一般不会进行太多操作,因为这样会影响用户体验。
onStop :表示Activity即将暂停,此时Activity工作在后台,已经不可见了,可以与onPause方法一样做一些轻量级操作,但依然不能太耗时。
onDestroy :表示活动即将被销毁。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/5326.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【国产NI替代】NI-9235 10 kS/s/ch,120 Ω四分之一桥应变计,8通道C系列应变/桥输入模块

10 kS/s/ch,120 Ω四分之一桥应变计,8通道C系列应变/桥输入模块 NI‑9235可同步测量所有通道的动态应变,从而实现了高速同步测量。 该功能对于需要在特定时刻对多个通道进行比较的应用(例如冲击测试)非常重要。\n\nNI…

Windows Server 2019/2022 开启

我的环境是Windows Serve 2022 Datacenter, 21H2, 需要使用Hyper-V 与 VMWare Workstation共存,但是在服务器管理器中找不到Windows Hypervisor Platform安装选项。在Win10中是启动关闭Windows功能中,而server中找不到。 解决方法: 以管理员…

算法入门ABC

前言 初学算法时真的觉得这东西晦涩难懂,貌似毫无用处!后来的后来,终于渐渐明白搞懂算法背后的核心思想,能让你写出更加优雅的代码。就像一首歌唱的那样:后来,我总算学会了如何去爱,可惜你早已远…

【漏洞复现】若依druid 未授权访问漏洞

0x01 产品简介 若依(Ruoyi)框架是一款基于Spring Boot、Spring Cloud、OAuth2与JWT鉴权等核心技术的快速开发平台。它支持多种安全框架和持久化框架,并采用前后端分离的模式进行开发,具备高度的灵活性和可扩展性。若依框架提供了…

C语言指针和数组的一些笔试题

文章目录 前言一、一维数组二、字符数组-1三、字符数组-2总结 前言 C语言指针和数组的一些笔试题 一、一维数组 #include <stdio.h> int main() {int a[] { 1,2,3,4 };printf("%d\n", sizeof(a));printf("%d\n", sizeof(a 0));printf("%d\n…

经典网络解读——Efficientnet

论文&#xff1a;EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks&#xff08;2019.5&#xff09; 作者&#xff1a;Mingxing Tan, Quoc V. Le 链接&#xff1a;https://arxiv.org/abs/1905.11946 代码&#xff1a;https://github.com/tensorflow/t…

【笔试训练】day15

1.平方数 水题直接看代码 代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> #include<math.h> #include<algorithm> using namespace std; typedef long long ll; int main() {ll x;cin >> x;ll a sqrt(x);if (abs(a * a -…

git 配置相关

问题一&#xff1a;ssh-keygen -t ed25519 -C "Gitee SSH Key" 这个命令中的 ed25519 字符是什么意思&#xff1f; ssh-keygen 是一个用于生成SSH密钥的工具&#xff0c;SSH&#xff08;Secure Shell&#xff09;是一种网络协议&#xff0c;用于加密方式远程登录和其…

Laravel11 路由

基本路由 use Illuminate\Support\Facades\Route;Route::get(/greeting, function () {return Hello World; }); 项目初始自带分组&#xff0c;routes文件夹里有api、auth、console、web四个文件。 api项目是php artisan install:api&#xff0c;routes里没有api.php可以执行…

2024抖音AI图文带货班:在这个赛道上 乘风破浪 拿到好效果

课程目录 1-1.1 AI图文学习指南 1.mp4 2-1.2 图文带货的新机会 1.mp4 3-1.3 2024年优质图文新标准 1.mp4 4-1.4 图文如何避免违规 1.mp4 5-1.5 优质图文模板解析 1.mp4 6-2.1 老号重启 快速破局 1.mp4 7-2.2 新号起号 不走弯路 1.mp4 8-2.3 找准对标 弯道超车 1.mp4 9…

JMeter 请求头信息配置详解

在进行 Web 测试和 API 测试时&#xff0c;正确配置 HTTP 请求头是关键步骤之一&#xff0c;尤其当使用诸如 JMeter 这样的强大工具时。在本文中&#xff0c;我将详细介绍如何在 JMeter 中有效地配置和管理HTTP请求头。 在 JMeter 中添加和配置 HTTP 请求头 步骤 1: 打开 HTT…

Sy8网络管理命令(ubuntu23.10和centos8)

前言、 本次实验主要是扩展学习&#xff0c;不仅限在课本的内容。毕竟课本的内容太过于陈旧了。需要的童鞋看看。 说明&#xff1a;&#xff08;书本中sy9”第3.实验内容“大家还是要做下。&#xff09; 1、使用ubuntu做实验的童鞋只要看第二、三、四、七章节的部分内容。 2、使…

文件分块+断点续传 实现大文件上传全栈解决方案(前端+nodejs)

1. 文件分块 将大文件切分成较小的片段&#xff08;通常称为分片或块&#xff09;&#xff0c;然后逐个上传这些分片。这种方法可以提高上传的稳定性&#xff0c;因为如果某个分片上传失败&#xff0c;只需要重新上传该分片而不需要重新上传整个文件。同时&#xff0c;分片上传…

21.哀家要长脑子了!

1.21. 合并两个有序链表 - 力扣&#xff08;LeetCode&#xff09; 我做过啊&#xff0c;为什么还是不能独立做出来&#xff0c;为什么为什么啊啊啊 嘻嘻奔向五一 是这样的&#xff1a; 要按升序连接&#xff0c;以链表2头结点作为开端&#xff0c;哪个小就先连接哪个&#xff…

CarEye 智能叉车管理系统

CarEye 团队在智能车辆管理平台基础上&#xff0c;专门针对叉车管理特殊性开发了叉车管理系统。以下是叉车管理系统的一些主要介绍&#xff1a;

ONVIF协议,DVR和NVR的区别

&#xff0e; 为什么要用ONVIF协议&#xff1a; 一.IPC厂商主流的遵循的是RTSP协议进行推流&#xff0c;那么RTSP最重要的就是RTSP的URL地址。但是各个厂商的URL地址格式都不一样&#xff0c;所以就诞生了一个标注协议—ONVIF。ONVIF协议的出现&#xff0c;解决了不同厂商之间…

【数据分析面试】35.20个机器学习问答题

在数据分析领域&#xff0c;机器学习是一个至关重要的技术&#xff0c;它可以帮助分析师从数据中发现模式、预测趋势和做出推断。机器学习模型可以自动学习并改进其性能&#xff0c;从而为业务决策提供有力支持。在面试中&#xff0c;了解面试者对机器学习的理解和应用能力是至…

使用 ArcGIS 对洪水预测进行建模

第一步 — 下载数据 所有数据均已包含在 Esri 提供的项目压缩文件中。我将创建一个名为“Stowe_Hydrology.gdb”的新地理数据库,在其中保存这些数据以及创建的所有后续图层。 1-0。斯托市边界 斯托城市边界是佛蒙特州地理信息中心提供的矢量要素类面。我将这一层称为“Stow…

呆马科技——智慧应急执法监管平台

在当今社会&#xff0c;安全生产的重要性日益凸显。对于各级政府和企事业单位&#xff0c;当务之急是如何高效地对突发事件进行执法管理。平台应运而生&#xff0c;旨在通过信息化、智能化技术&#xff0c;提升安全管理的效率与准确性。 一、平台特点 整合各类平台的信息资源&…

Linux-进程间通信(进程间通信介绍、匿名管道原理及代码使用、命名管道原理及代码使用)

一、进程通信介绍 1.1进程间通信的目的 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程资源共享&#xff1a;多个进程之间共享同样的资源。通知事件&#xff1a;一个进程需要向另一个或一组进程发送消息&#xff0c;通知它&#xff08;它们&#xff09;发生了某…