广告
返回顶部
首页 > 资讯 > 精选 >Android面试中重要的面试题有哪些
  • 296
分享到

Android面试中重要的面试题有哪些

2023-06-04 23:06:25 296人浏览 泡泡鱼
摘要

今天小编给大家分享一下Android面试中重要的面试题有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。说一下java多态

今天小编给大家分享一下Android面试中重要的面试题有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

说一下java多态的理解,以及接继承,和接口的理解

对于多态的定义
不同类的对象对统一函数做出不同对的响应或者动作。
作用
主要是消除类之间的耦合性,灵活性比较强,利于代码的编写和修改。尤其在处理大量的运算和操作时,可以灵活地简化,替换或者是修改代码!

三个必要条件
1、一个凳子(继承extends)
2、重写
3、父类引用指向子类对象

for example

Android面试中重要的面试题有哪些

Android面试中重要的面试题有哪些

Android面试中重要的面试题有哪些

Android面试中重要的面试题有哪些

Android面试中重要的面试题有哪些

Android面试中重要的面试题有哪些

**测试结果:

Android面试中重要的面试题有哪些

oKHttp的 原理

同步和异步:

  • 异步使用了Dispatcher来将存储在 Deque 中的请求分派给线程池中各个线程执行。

  • 当任务执行完成后,无论是否有异常,finally代码段总会被执行,也就是会调用Dispatcher的finished函数,它将正在运行的任务Call从队列runningAsyncCalls中移除后,主动的把缓存队列向前走了一步。

连接池:

  • 一个Connection封装了一个Socket,ConnectionPool中储存s着所有的Connection,StreamAllocation是引用计数的一个单位

  • 当一个请求获取一个Connection的时候要传入一个StreamAllocation,Connection中存着一个弱引用的StreamAllocation列表,每当上层应用引用一次Connection,StreamAllocation就会加一个。反之如果上层应用不使用了,就会删除一个。

  • ConnectionPool中会有一个后台任务定时清理StreamAllocation列表为空的Connection。5分钟时间,维持5个socket

选择路线与建立连接

  • 选择路线有两种方式:

  • 代理好处:HTTP代理会帮你在远程服务器进行DNS查询,可以减少DNS劫持。

  • 无代理,那么在本地使用DNS查找到ip,注意结果是数组,即一个域名有多个IP,这就是自动重连的来源

  • 有代理HTTP:设置socket的ip为代理地址的ip,设置socket的端口为代理地址的端口

  • 建立连接

  • 连接池中已经存在连接,就从中取出(get)RealConnection,如果没有命中就进入下一步

  • 根据选择的路线(Route),调用PlatfORM.get().connectSocket选择当前平台Runtime下最好的socket库进行握手

  • 将建立成功的RealConnection放入(put)连接池缓存

  • 如果存在TLS,就根据SSL版本与证书进行安全握手

  • 构造httpstream并维护刚刚的socket连接,管道建立完成

职责链模式:缓存、重试、建立连接等功能存在于拦截器中网络请求相关,主要是网络请求优化。网络请求的时候遇到的问题

线程同步的问题,常用的线程同步

sycn:保证了原子性、可见性、有序性
2.:保证了原子性、可见性、有序性

  • 自旋锁:可以使线程在没有取得锁的时候,不被挂起,而转去执行一个空循环。

  • 优点:线程被挂起的几率减少,线程执行的连贯性加强。用于对于锁竞争不是很激烈,锁占用时间很短的并发线程。

  • 缺点:过多浪费CPU时间,有一个线程连续两次试图获得自旋锁引起死锁

  • 阻塞锁:没得到锁的线程等待或者挂起,Sycn、Lock

  • 可重入锁:一个线程可多次获取该锁,Sycn、Lock

  • 悲观锁:每次去拿数据的时候都认为别人会修改,所以会阻塞全部其他线程 Sycn、Lock

  • 乐观锁:每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。cas

  • 显示锁和内置锁:显示锁用Lock来定义、内置锁用synchronized。

  • 读-写锁:为了提高性能,Java提供了读

volatile

  • 只能保证可见性,不能保证原子性

  • 自增操作有三步,此时多线程写会出现问题

cas

  • 操作:内存值V、旧的预期值A、要修改的值B,当且仅当预期值A和内存值V相同时,将内存值修改为B并返回true,否则什么都不做并返回false。

  • 解释:本地副本为A,共享内存为V,线程A要把V修改成B。某个时刻线程A要把V修改成B,如果A和V不同那么就表示有其他线程在修改V,此时就表示修改失败,否则表示没有其他线程修改,那么把V改成B。

  • 局限:如果V被修改成V1然后又被改成V,此时cas识别不出变化,还是认为没有其他线程在修改V,此时就会有问题

  • 局限解决:将V带上版本。

线程不安全到底是怎么回事:

  • 一个线程写,多个线程读的时候,会造成写了一半就去读

  • 多线程写,会造成脏数据

    Asynctask和线程池,GC相关(怎么判断哪些内存该GC,GC算法

Asynctask:异步任务类,单线程线程池+Handler
2.线程池:

  • ThreadPoolExecutor:通过Executors可以构造单线程池、固定数目线程池、不固定数目线程池。

  • ScheduledThreadPoolExecutor:可以延时调用线程或者延时重复调度线程。 3.GC相关:重要

  • 搜索算法: 1.引用计数
    2.图搜索,可达性分析

  • 回收算法: 1.标记清除复制:用于青年代
    2.标记整理:用于老年代

  • 堆分区: 1.青年区eden 80%、survivor1 10%、survivor2 10%
    2.老年区

  • 虚拟机栈分区:
    1.局部变量表
    2.操作数栈
    3.动态链接
    4.方法返回地址

  • GC Roots:
    1.虚拟机栈(栈桢中的本地变量表)中的引用的对象
    2.方法区中的类静态属性引用的对象
    3.方法区中的常量引用的对象
    4.本地方法栈中JNI的引用的对象

java类加载过程:
  • 加载时机:创建实例、访问静态变量或方法、反射、加载子类之前

  • 验证:验证文件格式、元数据、字节码、符号引用的正确性

  • 加载:根据全类名获取文件字节流、将字节流转化为静态储存结构放入方法区、生成class对象

  • 准备:在堆上为静态变量划分内存

  • 解析:将常量池中的符号引用转换为直接引用

  • 初始化:初始化静态变量

mvc、mvp、mvvm:
  • mvc:数据、View、Activity,View将操作反馈给Activity,Activitiy去获取数据,数据通过观察者模式刷新给View。循环依赖

  • Activity重,很难单元测试

  • View和Model耦合严重

  • mvp:数据、View、Presenter,View将操作给Presenter,Presenter去获取数据,数据获取好了返回给Presenter,Presenter去刷新View。PV,PM双向依赖

  • 接口爆炸

  • Presenter很重

  • mvvm:数据、View、ViewModel,View将操作给ViewModel,ViewModel去获取数据,数据和界面绑定了,数据更新界面更新。

  • viewModel的业务逻辑可以单独拿来测试

  • 一个view 对应一个 viewModel 业务逻辑可以分离,不会出现全能类

  • 数据和界面绑定了,不用写垃圾代码,但是复用起来不舒服

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

只要是主线程耗时的操作就会ARN 如io
2.broadcast超时时间为10秒 按键无响应的超时时间为5秒 前台service无响应的超时时间为20秒,后台service为200秒

Serializable和Parcelable 的区别

P 消耗内存小
2.网络传输用S 程序内使用P
3.S将数据持久化方便
4.S使用了反射 容易触发垃圾回收 比较慢

Sharedpreferences源码简述

储存于硬盘上的xml键值对,数据多了会有性能问题
2.ContextImpl记录着SharedPreferences的重要数据,文件路径和实例的键值对
3.在xml文件全部内加载到内存中之前,读取操作是阻塞的,在xml文件全部内加载到内存中之后,是直接读取内存中的数据
4.apply因为是异步的没有返回值, commit是同步的有返回值能知道修改是否提交成功
5.多并发的提交commit时,需等待正在处理的commit数据更新到磁盘文件后才会继续往下执行,从而降低效率; 而apply只是原子更新到内存,后调用apply函数会直接覆盖前面内存数据,从一定程度上提高很多效率。 3.edit()每次都是创建新的EditorImpl对象.

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

只要是主线程耗时的操作就会ARN 如io
2.broadcast超时时间为10秒 按键无响应的超时时间为5秒 前台service无响应的超时时间为20秒,后台service为200秒

apk瘦身:

classes.dex:通过代码混淆,删掉不必要的jar包和代码实现该文件的优化
2.资源文件:通过Lint工具扫描代码中没有使用到的静态资源
3.图片资源:使用tinypng和WEBP,下面详细介绍图片资源优化的方案,矢量图
4.SO文件将不用的去掉,目前主流app一般只放一个arm的so包

以上就是“Android面试中重要的面试题有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

--结束END--

本文标题: Android面试中重要的面试题有哪些

本文链接: https://www.lsjlt.com/news/240275.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android面试中重要的面试题有哪些
    今天小编给大家分享一下Android面试中重要的面试题有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。说一下java多态...
    99+
    2023-06-04
  • Android面试的重点要点题有哪些
    这篇文章给大家分享的是有关Android面试的重点要点题有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。正文整个面试题分为三个部分:Java、Android和项目经验。Java技术Java基础对抽象、继承、多...
    99+
    2023-06-04
  • Android的面试题都有哪些
    今天就跟大家聊聊有关Android的面试题都有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Android基础View的绘制流程;自定义View如何考虑机型适配;自定义View的...
    99+
    2023-05-30
    android
  • android中高级面试题有哪些
    今天小编给大家分享一下android中高级面试题有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、Activity生命...
    99+
    2023-06-04
  • Android基础面试题有哪些
    本文小编为大家详细介绍“Android基础面试题有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android基础面试题有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一 性能优化1.如何对 Andro...
    99+
    2023-06-04
  • Android布局面试题有哪些
    本篇内容介绍了“Android布局面试题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Android 中常用的布局都有哪些? Fram...
    99+
    2023-06-19
  • java面试中有哪些基础面试题
    这篇“java面试中有哪些基础面试题”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“java面试中有哪些基础面试题”文章吧。作...
    99+
    2023-06-03
  • Java面试中有哪些关于String类的面试题
    这篇文章将为大家详细讲解有关Java面试中有哪些关于String类的面试题,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。比较两个字符串时使用“==”还是equals()方法?当然是equal...
    99+
    2023-05-31
    java 中有 string
  • 必须要会的React面试题有哪些
    本篇内容主要讲解“必须要会的React面试题有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“必须要会的React面试题有哪些”吧!基本知识1. 区分Real...
    99+
    2022-10-19
  • net面试题有哪些
    这篇文章给大家分享的是有关net面试题有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。  1、现场编码。  要求写出:缓存类+SqlHelper类(30分钟内,然后由代码引向面象对象或设计模式)。  2、数据...
    99+
    2023-06-03
  • HTML5面试题有哪些
    这篇文章主要介绍“HTML5面试题有哪些”,在日常操作中,相信很多人在HTML5面试题有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”HTML5面试题有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-06-05
  • java面试题有哪些
    这篇文章将为大家详细讲解有关java面试题有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、什么是ARQ协议自动重传请求(Automatic Repeat-reQuest,ARQ)是OSI模型中数据...
    99+
    2023-06-20
  • tomcat面试题有哪些
    这篇文章主要为大家展示了“tomcat面试题有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“tomcat面试题有哪些”这篇文章吧。一. Tomcat的缺省端口是多少,怎么修改?找到Tomca...
    99+
    2023-06-20
  • Redis面试题有哪些
    这篇文章给大家分享的是有关Redis面试题有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Redis 面试题1、什么是 RedisRedis 是完全开源免费的,遵守 BSD ...
    99+
    2022-10-18
  • MySQL面试题有哪些
    本篇内容介绍了“MySQL面试题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!非关系型数据库和关系型...
    99+
    2022-10-19
  • Hibernate面试题有哪些
    这篇文章主要介绍“Hibernate面试题有哪些”,在日常操作中,相信很多人在Hibernate面试题有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Hibernate面...
    99+
    2022-10-19
  • jQuery面试题有哪些
    这篇文章将为大家详细讲解有关jQuery面试题有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。  1、jQuery库中的$()是什么  答:$() 函数是 jQuer...
    99+
    2022-10-19
  • JavaScript有哪些面试题
    这篇文章主要讲解了“JavaScript有哪些面试题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript有哪些面试题”吧!1.创建JavaSc...
    99+
    2022-10-19
  • JavaScript面试题有哪些
    这篇文章主要为大家展示了“JavaScript面试题有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript面试题有哪些”这篇文章吧。问题1:J...
    99+
    2022-10-19
  • 有哪些Vue面试题
    这篇文章主要讲解了“有哪些Vue面试题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“有哪些Vue面试题”吧!  一、什么是MVVM  MVVM是Model-...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作