金9银10,分享几个重要的Android面试题

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

于哥在这里只讲多态,其他自己上网体会

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

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

for example

测试结果:

测试结果

oKhttp的 原理

1.同步和异步:

  • 1.异步使用了Dispatcher来将存储在 Deque 中的请求分派给线程池中各个线程执行。
  • 2.当任务执行完成后,无论是否有异常,finally代码段总会被执行,也就是会调用Dispatcher的finished函数,它将正在运行的任务Call从队列runningAsyncCalls中移除后,主动的把缓存队列向前走了一步。

2.连接池:

  • 1.一个Connection封装了一个socket,ConnectionPool中储存s着所有的Connection,StreamAllocation是引用计数的一个单位
  • 2.当一个请求获取一个Connection的时候要传入一个StreamAllocation,Connection中存着一个弱引用的StreamAllocation列表,每当上层应用引用一次Connection,StreamAllocation就会加一个。反之如果上层应用不使用了,就会删除一个。
  • 3.ConnectionPool中会有一个后台任务定时清理StreamAllocation列表为空的Connection。5分钟时间,维持5个socket

3.选择路线与建立连接

  • 1.选择路线有两种方式:

    • 1.无代理,那么在本地使用DNS查找到ip,注意结果是数组,即一个域名有多个IP,这就是自动重连的来源
    • 2.有代理HTTP:设置socket的ip为代理地址的ip,设置socket的端口为代理地址的端口
    • 3.代理好处:HTTP代理会帮你在远程服务器进行DNS查询,可以减少DNS劫持。
  • 2.建立连接
    • 1.连接池中已经存在连接,就从中取出(get)RealConnection,如果没有命中就进入下一步
    • 2.根据选择的路线(Route),调用Platform.get().connectSocket选择当前平台Runtime下最好的socket库进行握手
    • 3.将建立成功的RealConnection放入(put)连接池缓存
    • 4.如果存在TLS,就根据SSL版本与证书进行安全握手
    • 5.构造HttpStream并维护刚刚的socket连接,管道建立完成

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

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

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

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

    • 1.优点:线程被挂起的几率减少,线程执行的连贯性加强。用于对于锁竞争不是很激烈,锁占用时间很短的并发线程。
    • 2.缺点:过多浪费CPU时间,有一个线程连续两次试图获得自旋锁引起死锁
  • 2.阻塞锁:没得到锁的线程等待或者挂起,Sycn、Lock
  • 3.可重入锁:一个线程可多次获取该锁,Sycn、Lock
  • 4.悲观锁:每次去拿数据的时候都认为别人会修改,所以会阻塞全部其他线程 Sycn、Lock
  • 5.乐观锁:每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。cas
  • 6.显示锁和内置锁:显示锁用Lock来定义、内置锁用synchronized。
  • 7.读-写锁:为了提高性能,Java提供了读

3.volatile

  • 1.只能保证可见性,不能保证原子性
  • 2.自增操作有三步,此时多线程写会出现问题

4.cas

  • 1.操作:内存值V、旧的预期值A、要修改的值B,当且仅当预期值A和内存值V相同时,将内存值修改为B并返回true,否则什么都不做并返回false。
  • 2.解释:本地副本为A,共享内存为V,线程A要把V修改成B。某个时刻线程A要把V修改成B,如果A和V不同那么就表示有其他线程在修改V,此时就表示修改失败,否则表示没有其他线程修改,那么把V改成B。
  • 3.局限:如果V被修改成V1然后又被改成V,此时cas识别不出变化,还是认为没有其他线程在修改V,此时就会有问题
  • 4.局限解决:将V带上版本。

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

  • 1.一个线程写,多个线程读的时候,会造成写了一半就去读
  • 2.多线程写,会造成脏数据

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

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

  • 1.ThreadPoolExecutor:通过Executors可以构造单线程池、固定数目线程池、不固定数目线程池。
  • 2.ScheduledThreadPoolExecutor:可以延时调用线程或者延时重复调度线程。
    3.GC相关:重要
  • 1.搜索算法:
    1.引用计数
    2.图搜索,可达性分析
  • 2.回收算法:
    1.标记清除复制:用于青年代
    2.标记整理:用于老年代
  • 3.堆分区:
    1.青年区eden 80%、survivor1 10%、survivor2 10%
    2.老年区
  • 4.虚拟机栈分区:
    1.局部变量表
    2.操作数栈
    3.动态链接
    4.方法返回地址
  • 5.GC Roots:
    1.虚拟机栈(栈桢中的本地变量表)中的引用的对象
    2.方法区中的类静态属性引用的对象
    3.方法区中的常量引用的对象
    4.本地方法栈中JNI的引用的对象

java类加载过程:

  • 1.加载时机:创建实例、访问静态变量或方法、反射、加载子类之前
  • 2.验证:验证文件格式、元数据、字节码、符号引用的正确性
  • 3.加载:根据全类名获取文件字节流、将字节流转化为静态储存结构放入方法区、生成class对象
  • 4.准备:在堆上为静态变量划分内存
  • 5.解析:将常量池中的符号引用转换为直接引用
  • 6.初始化:初始化静态变量

mvc、mvp、mvvm:

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

    • 1.Activity重,很难单元测试
    • 2.View和Model耦合严重
  • 2.mvp:数据、View、Presenter,View将操作给Presenter,Presenter去获取数据,数据获取好了返回给Presenter,Presenter去刷新View。PV,PM双向依赖
    • 1.接口爆炸
    • 2.Presenter很重
  • 3.mvvm:数据、View、ViewModel,View将操作给ViewModel,ViewModel去获取数据,数据和界面绑定了,数据更新界面更新。
    • 1.viewModel的业务逻辑可以单独拿来测试
    • 2.一个view 对应一个 viewModel 业务逻辑可以分离,不会出现全能类
    • 3.数据和界面绑定了,不用写垃圾代码,但是复用起来不舒服

apk瘦身:

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

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

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

Serializable和Parcelable 的区别

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

Sharedpreferences源码简述

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

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

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

apk瘦身:

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

阅读更多

20+个很棒的Android开源项目

我是如何进入Facebook的?

2018年Android面试题含答案—适合中高级(下)

看完你就该会git了(手把手教你用vue+node+mongodb搭建一个小商城

相信自己,没有做不到的,只有想不到的

原文地址:https://www.cnblogs.com/gooder2-android/p/9388874.html

时间: 2024-10-04 12:31:34

金9银10,分享几个重要的Android面试题的相关文章

为Java程序员金三银四精心挑选的五十道面试题与答案

1.面向对象的特征有哪些方面? [基础] 答:面向对象的特征主要有以下几个方面: 1)抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节.抽象包括两个方面,一是过程抽象,二是数据抽象. 2)继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法.对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类继承了原始类的特性,新类称为原始类的派生类(子类),

金九银十,史上最强 Java 面试题整理。

以下会重新整理所有 Java 系列面试题答案.及各大互联网公司的面试经验,会从以下几个方面汇总,本文会长期更新. Java 面试篇 史上最全 Java 面试题,带全部答案 史上最全 69 道 Spring 面试题和答案 史上最全 Java 多线程面试题及答案 史上最全 50 道 Redis 面试题及答案 史上最全 55 道 MySQL 面试题总结 i++ 是线程安全的吗? 高级 Java 面试通关知识点整理 出场率比较高的一道多线程安全面试题 30 个 Java 集合面试问题及答案 Java 中

金九银十收获阿里腾讯实习offer,学习、面试经验分享

今天分享一位大学生实习的面经,再结合我自己的经验总结一些看法和学习方法,希望能对大家有帮助. 先说一下自己的情况,本人今年大四,双非一本学校,计算机相关专业,从大一开始加入学院创业团队的 Android 开发组.? 去年过年后不久开始投简历,前后投了腾讯.阿里.美团.CVTE 这几家公司,拿到了腾讯.阿里和 CVTE 的实习offer,最终选择了腾讯,也算是给自己的第一次找工作之旅画上了圆满的句号.? 今年3月从实习转为正式员工. 这篇文章是去年金九银十之后的总结,主要是分享我自己针对这次面试旺

春节过后就是金三银四求职季,分享几个Java面试妙招,轻松搞定HR!

春节过后就是金三银四,分享几个Java面试妙招,轻松搞定HR!2020年了,先祝大家新年快乐!今年IT职位依然相当热门,特别是Java开发岗位.软件开发人才在今年将有大量的就业机会.春节过后,金三银四求职季到来,下面教你8个"妙招",希望能帮你顺利面试成功.1.知道如何写算法如果你申请的是软件工程师的工作,那么显然你需要知道如何编码.写代码脚本其实与写算法来解决软件问题略有不同.用人单位可能会提出这样的问题,"写一个算法,可以从链表中找到某个元素,并将此元素挪到列表末尾.&q

金三银四季,阿里工作10多年Java大牛的“心得”,献给迷茫中的你

当你从事Java一年后,重新找工作时,才会真实的感受到"金三银四"这四个字背后的意思. 工作第一年,往往是什么都充满新鲜感,什么都学习,冲劲十足的一年:WEB行业知识更新特别快,今天一个框架的新版本,明天又是另一个新框架,有时往往根据项目的需要来不断学习新东西:所以,很多时候感觉,自己用过的东西很多呀!但是真正深入研究的东西却不多. 面试,是跳槽后第一个需要面对的问题:而且不同公司面试的着重点不同:但是却有一个共同点:Java基础是必考的. 工作第一年,可能问你String对象创建的理

金三银四,我面试七家公司拿到四个offer,面试历程和感悟分享

人人都说金三银四,由于一些个人的原因,博主也在今年的四月份抽空面了几家公司,这里来总结下学习到的东西. 先简单的说下博主的情况: 2015年7月份毕业,到现在加上实习可以算三年工作经验 base武汉,相比于北上广深,工作机会少了点 目前就职于驾考/汽车行业的互联网公司 大概就这么多,给出自身的情况是想给大家一个参考.由于并没有敢裸辞,所以边上班边去面试.今年找工作给我的感受是:市场貌似已经饱和,自己投递的很多简历都没了下文,面试很多走的内推,也没了之前很多的猎头电话,一个字形容就是 "惨&quo

北京别墅市场提前入冬 金九银十成色不足

北京别墅市场提前入冬 金九银十成色不足 行业动态每日经济新闻[微博]王杰2014-11-13 01:00 我要分享 2 [摘要]普宅市场有所回暖,但豪宅市场却提前“入冬”. 亚豪机构提供的统计数据显示,今年“金九银十”这两个月期间,北京别墅市场共实现成交320套,相比去年同期减少了38%,也创造了历年“金九银十”的成交新低. 而从月度走势来看,10月北京别墅市场共实现成交171套,相比9月增加15%,但是成交面积4.88万平方米,环比却出现2.4%的下滑.别墅市场成交依旧在低位持续徘徊. 上海易

金三银四,磨砺锋芒;剑指大厂,扬帆起航(2020年最全大厂WEB前端面试题精选)下

金三银四,磨砺锋芒:剑指大厂,扬帆起航(2020年最全大厂WEB前端面试题精选)下 引言 元旦匆匆而过,2020年的春节又接踵而来,大家除了忙的提着裤子加班.年底冲冲冲外,还有着对于明年的迷茫和期待!2019年有多少苦涩心酸,2020年就有更多幸福美好,加油,奥利给!怀着一颗积极向上的心,来面对未来每一天的挑战! 所谓"兵马未动,粮草先行",我们打响明天的战役也需要精神食粮来做后勤保障才是.在此我整理了多位从业者和我在2019年底至2020年初的一厂面试精选题,希望对磨砺锋芒.奋发向上

金三银四季!测试一下Java 面试题,能答对60%就去BAT~~~

2019,相对往年我们会发现今年猎头电话少了,大部分企业年终奖缩水,加薪幅度也不如往年,选择好offer就要趁早,现在开始准备吧,刷一波Java面试题,能回答70%就去BATJTMD大胆试试~ 以下是2018年发布过的Java面试真题.BATJ等各大互联网公司的面试真经,为方便大家查看,特意做了个导航集合(见文末). 一.面试真题 涵盖内容:Java常考题目.JVM.多线程.MySQL.Redis.Kafka.Docker.RocketMQ.Nginx.MQ队列.数据结构.并发编程.并发压测.秒