膜拜大牛!HTTPS面试常问全解析,吊打面试官系列!

写在前面

1月初失业,找了近2个多月的工作了,还没找到心仪的工作,感觉心好慌,不知道该怎么办了?找不到工作的时候压力很大,有人说自信会很受打击,还有人说会很绝望,是人生的低谷……尽管很多时候我们自己知道,我不是找不到工作,只是找不到理想中的好工作。但这也不能改变你的空白期正在一天一天变长,不妥协的那份坚定正在一天一天动摇的事实。

朋友推荐给我这份文档,狂刷五遍之后,最近刚刚获得字节跳动等多家公司的offer,今天将这份文档分享给大家,希望正在找工作或准备找工作的朋友都可以获得自己心仪公司的offer。

正文如下

  • Activity面试题
  • Fragment面试题
  • Service面试题
  • Broadcast Receiver面试题
  • WebView面试题
  • Binder面试题
  • Handler面试题
  • AsyncTask面试题
  • HandlerThread面试题
  • IntentService面试题
  • 视图工作机制面试题
  • 事件分发机制面试题
  • ListView面试题
  • Android项目构建面试题(由于篇幅太长,今天就先分享到这里)
  • ANR面试题
  • OOM面试题
  • Bitmap面试题
  • UI卡顿面试题
  • 内存泄漏面试题
  • 内存管理面试题
  • 冷启动和热启动面试题
  • 其他优化面试题
  • 架构模式面试题
  • 插件化面试题
  • 热更新面试题
  • 进程保活面试题
  • Lint面试题
  • Kotlin面试题

Activity面试题

1、Activity是什么

Activity是四大组件之一,它提供一个界面让用户点击和各种滑动操作,这就是Activity

2、Activity四种状态

  • runing
  • paused
  • stopped
  • killed

3、Activity生命周期

  • onCreate()
  • onStart()
  • onResume()
  • onPause()
  • onStop()
  • onDestroy()
  • onRestart()

4、进程的优先级

  • 空进程
  • 后台进程
  • 服务进程
  • 可见进程
  • 前台进程

5、Activity任务栈

  • 先进后出

6、Activity启动模式

  • standard
  • singletop
  • singletask
  • singleinstance

7、scheme跳转协议

Android中的scheme是一种页面内跳转协议,通过定义自己的scheme协议,可以跳转到app中的各个页面

  • 服务器可以定制化告诉app跳转哪个页面
  • App可以通过跳转到另一个App页面
  • 可以通过H5页面跳转页面

Fragment面试题

1、Fragment为什么被称为第五大组件

Fragment比Activity更节省内存,其切换模式也更加舒适,使用频率不低于四大组件,且有自己的生命周期,而且必须依附于Activity

2、Activity创建Fragment的方式

  • 静态创建
  • 动态创建

3、FragmentPageAdapter和FragmentPageStateAdapter的区别

  • FragmentPageAdapter在每次切换页面的的时候,是将Fragment进行分离,适合页面较少的Fragment使用以保存一些内存,对系统内存不会多大影响

  • FragmentPageStateAdapter在每次切换页面的时候,是将Fragment进行回收,适合页面较多的Fragment使用,这样就不会消耗更多的内存

4、Fragment生命周期

  • onAttach()
  • onCreate()
  • onCreateView()
  • onActivityCreated()
  • onStart()
  • onResume()
  • onPause()
  • onStop()
  • onDestroyView()
  • onDestroy()
  • onDetach()

5、Fragment的通信

  • Fragment调用Activity中的方法:getActivity
  • Activity调用Fragment中的方法:接口回调
  • Fragment调用Fragment中的方法:FragmentManager.findFragmentById

6、Fragment的replace、add、remove方法

  • replace:替代Fragment的栈顶页面
  • add:添加Fragment到栈顶页面
  • remove:移除Fragment栈顶页面

Service面试题

1、Service是什么

Service是四大组件之一,它可以在后台执行长时间运行操作而没有用户界面的应用组件

2、Service和Thread的区别

  • Service是安卓中系统的组件,它运行在独立进程的主线程中,不可以执行耗时操作。Thread是程序执行的最小单元,分配CPU的基本单位,可以开启子线程执行耗时操作

  • Service在不同Activity中可以获取自身实例,可以方便的对Service进行操作。Thread在不同的Activity中难以获取自身实例,如果Activity被销毁,Thread实例就很难再获取得到

3、Service启动方式

  • startService
  • bindService

4、Service生命周期

  • startService
    • onCreate()
    • onStartCommand()
    • onDestroy()
  • bindService
    • onCreate()
    • onBind()
    • onUnbind()
    • onDestroy()

Broadcast Receiver面试题

1、Broadcast Receiver是什么

Broadcast是四大组件之一,是一种广泛运用在应用程序之间传输信息的机制,通过发送Intent来传送我们的数据

2、Broadcast Receiver的使用场景

  • 同一App具有多个进程的不同组件之间的消息通信
  • 不同App之间的组件之间的消息通信

3、Broadcast Receiver的种类

  • 普通广播
  • 有序广播
  • 本地广播
  • Sticky广播

4、Broadcast Receiver的实现

  • 静态注册:注册后一直运行,尽管Activity、进程、App被杀死还是可以接收到广播

  • 动态注册:跟随Activity的生命周期

5、Broadcast Receiver实现机制

  • 自定义广播类继承BroadcastReceiver,复写onReceiver()
  • 通过Binder机制向AMS进行注册广播
  • 广播发送者通过Binder机制向AMS发送广播
  • AMS查找符合相应条件的广播发送到BroadcastReceiver相应的循环队列中
  • 消息队列执行拿到广播,回调BroadcastReceiver的onReceiver()

6、LocalBroadcastManager特点

  • 本地广播只能在自身App内传播,不必担心泄漏隐私数据
  • 本地广播不允许其他App对你的App发送该广播,不必担心安全漏洞被利用
  • 本地广播比全局广播更高效
  • 以上三点都是源于其内部是用Handler实现的

WebView面试题

1、WebView安全漏洞

API16之前存在远程代码执行安全漏洞,该漏洞源于程序没有正确限制使用WebView.addJavascriptInterface方法,远程攻击者可通过使用Java反射机制利用该漏洞执行任意Java对象的方法

2、WebView销毁步骤

WebView在其他容器上时(如:LinearLayout),当销毁Activity时,需要在onDestroy()中先移除容器上的WebView,然后再将WebView.destroy(),这样就不会导致内存泄漏

3、WebView的jsbridge

客户端和服务端之间可以通过Javascript来互相调用各自的方法

4、WebViewClient的onPageFinished

WebViewClient的onPageFinished在每次完成页面的时候调用,但是遇到未加载完成的页面跳转其他页面时,就会一直调用,使用WebChromeClient.onProgressChanged可以替代

5、WebView后台耗电

在WebView加载页面的时候,会自动开启线程去加载,如果不很好的关闭这些线程,就会导致电量消耗加大,可以采用暴力的方法,直接在onDestroy方法中System.exit(0)结束当前正在运行中的java虚拟机

6、WebView硬件加速

Android3.0引入硬件加速,默认会开启,WebView在硬件加速的情况下滑动更加平滑,性能更加好,但是会出现白块或者页面闪烁的副作用,建议WebView暂时关闭硬件加速

7、WebView内存泄漏

由于WebView是依附于Activity的,Activity的生命周期和WebView启动的线程的生命周期是不一致的,这会导致WebView一直持有对这个Activity的引用而无法释放,解决方案如下

  • 独立进程,简单暴力,不过可能涉及到进程间通信(推荐)

  • 动态添加WebView,对传入WebView中使用的Context使用弱引用

Binder面试题

1、Linux内核的基本知识

  • 进程隔离/虚拟地址空间:进程间是不可以共享数据的,相当于被隔离,每个进程被分配到不同的虚拟地址中

  • 系统调用:Linux内核对应用有访问权限,用户只能在应用层通过系统调用,调用内核的某些程序

  • binder驱动:它负责各个用户的进程,通过binder通信内核来进行交互的模块

2、为什么使用Binder

  • 性能上,相比传统的Socket更加高效
  • 安全性高,支持协议双方互相校验

3、Binder通信模型

  • Service服务端通过Binder驱动在ServiceManager的查找表中注册Object对象的add方法

  • Client客户端通过Binder驱动在ServiceManager的查找表中找到Object对象的add方法,并返回proxy的add方法,add方法是个空实现,proxy也不是真正的Object对象,是通过Binder驱动封装好的代理类的add方法

  • 当Client客户端调用add方法时,Client客户端通过Binder驱动将proxy的add方法,请求ServiceManager来找到Service服务端真正对象的add方法,进行调用

4、AIDL

  • 客户端通过aidl文件的Stub.asInterface()方法,拿到Proxy代理类

  • 通过调用Proxy代理类的方法,将参数进行封包后,调用底层的transact()方法

  • transact()方法会回调onTransact()方法,进行参数的解封

  • 在onTransact()方法中调用服务端对应的方法,并将结果返回

Handler面试题

1、Handler是什么

Handler通过发送和处理Message和Runnable对象来关联相对应线程的MessageQueue

2、Handler使用方法

  • post(runnable)
  • sendMessage(message)

3、Handler工作原理

4、Handler引起的内存泄漏

原因:非静态内部类持有外部类的匿名引用,导致Activity无法释放

解决:

  • Handler内部持有外部Activity的弱引用
  • Handler改为静态内部类
  • Handler.removeCallback()

AsyncTask面试题

1、AsyncTask是什么

它本质上就是一个封装了线程池和Handler的异步框架

2、AsyncTask使用方法

三个参数

  • Params:表示后台任务执行时的参数类型,该参数会传给AysncTask的doInBackground()方法

  • Progress:表示后台任务的执行进度的参数类型,该参数会作为onProgressUpdate()方法的参数

  • Result:表示后台任务的返回结果的参数类型,该参数会作为onPostExecute()方法的参数

五个方法

  • onPreExecute():异步任务开启之前回调,在主线程中执行

  • doInBackground():执行异步任务,在线程池中执行

  • onProgressUpdate():当doInBackground中调用publishProgress时回调,在主线程中执行

  • onPostExecute():在异步任务执行之后回调,在主线程中执行

  • onCancelled():在异步任务被取消时回调

3、AsyncTask工作原理

4、AsyncTask引起的内存泄漏

原因:非静态内部类持有外部类的匿名引用,导致Activity无法释放

解决:

  • AsyncTask内部持有外部Activity的弱引用
  • AsyncTask改为静态内部类
  • AsyncTask.cancel()

5、AsyncTask生命周期

在Activity销毁之前,取消AsyncTask的运行,以此来保证程序的稳定

6、AsyncTask结果丢失

由于屏幕旋转、Activity在内存紧张时被回收等情况下,Activity会被重新创建,此时,旧的AsyncTask持有旧的Activity引用,这个时候会导致AsyncTask的onPostExecute()对UI更新无效

7、AsyncTask并行or串行

  • AsyncTask在Android 2.3之前默认采用并行执行任务,AsyncTask在Android 2.3之后默认采用串行执行任务

  • 如果需要在Android 2.3之后采用并行执行任务,可以调用AsyncTask的executeOnExecutor()

HandlerThread面试题

1、HandlerThread产生背景

当系统有多个耗时任务需要执行时,每个任务都会开启一个新线程去执行耗时任务,这样会导致系统多次创建和销毁线程,从而影响性能。为了解决这一问题,Google提供了HandlerThread,HandlerThread是在线程中创建一个Looper循环器,让Looper轮询消息队列,当有耗时任务进入队列时,则不需要开启新线程,在原有的线程中执行耗时任务即可,否则线程阻塞

2、HanlderThread的特点、

  • HandlerThread本质上是一个线程,继承自Thread
  • HandlerThread有自己的Looper对象,可以进行Looper循环,可以创建Handler
  • HandlerThread可以在Handler的handlerMessage中执行异步方法
  • HandlerThread优点是异步不会堵塞,减少对性能的消耗
  • HandlerThread缺点是不能同时继续进行多任务处理,需要等待进行处理,处理效率较低
  • HandlerThread与线程池不同,HandlerThread是一个串行队列,背后只有一个线程。

IntentService面试题

1、IntentService是什么

IntentService是继承自Service并处理异步请求的一个类,其内部采用HandlerThread和Handler实现的,在IntentService内有一个工作线程来处理耗时操作,其优先级比普通Service高。当任务完成后,IntentService会自动停止,而不需要手动调用stopSelf()。另外,可以多次启动IntentService,每个耗时操作都会以工作队列的方式在IntentService中onHandlerIntent()回调方法中执行,并且每次只会执行一个工作线程

2、IntentService使用方法

  • 创建Service继承自IntentService
  • 覆写构造方法和onHandlerIntent()方法
  • 在onHandlerIntent()中执行耗时操作

小结

有了这么多优秀的开发工具,可以做出更高质量的Android应用。

当然了,“打铁还需自身硬”,想要写出优秀的代码,最重要的一点还是自身的技术水平,不然用再好的工具也不能发挥出它的全部实力。

在这里我也分享一份大佬自己收录整理的Android学习PDF+架构视频+面试文档+源码笔记,还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料这些都是我闲暇还会反复翻阅的精品资料。在脑图中,每个知识点专题都配有相对应的实战项目,可以有效的帮助大家掌握知识点。

总之也是在这里帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习

造方法和onHandlerIntent()方法

  • 在onHandlerIntent()中执行耗时操作

小结

有了这么多优秀的开发工具,可以做出更高质量的Android应用。

当然了,“打铁还需自身硬”,想要写出优秀的代码,最重要的一点还是自身的技术水平,不然用再好的工具也不能发挥出它的全部实力。

在这里我也分享一份大佬自己收录整理的Android学习PDF+架构视频+面试文档+源码笔记,还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料这些都是我闲暇还会反复翻阅的精品资料。在脑图中,每个知识点专题都配有相对应的实战项目,可以有效的帮助大家掌握知识点。

总之也是在这里帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习

如果你有需要的话,可以点击这里领取

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

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

相关文章

vSphere HA 原理与配置

内容预览: 1. vSphere HA 概述 2. vSphere HA 提供的保护级别 3. vSphere HA运行原理 4. vSphere HA 故障支持场景 5. vSphere HA接入控制策略 6. 如何选择vSphere HA 的接入控制策略 7. 配置vSphere HA的基础条件 8. 虚拟机组件保护 9. 开启vSphere HA功能 1. v…

自学Android!Android高级工程师面试题-字节跳动,附答案

前言 大厂面试一直都是程序员圈内摸鱼时间津津乐道的话题,进大厂想必也是无数程序员的梦想。 关于“原理”的问题,几乎是现如今Android开发岗必问的问题,尤其在大厂面试中更为突出。有过大厂面试经验的小伙伴应该知道:大厂的面试…

被面试官问的Android问题难倒了,成功入职字节跳动

感悟 这个世界有一个“二八原则”在好多地方都发挥着作用,在Android开发上我认为也一样有用。做一个Android开发,你也许只会用到Android开发知识中的20%,有80%其实你学了也不一定会用。 而面试官也一样,他也可能只掌握了20%的知…

被面试官问的Android问题难倒了,系列篇

本篇将由 环境搭建、实现原理、编程开发、插件开发、编译运行、性能稳定、发展未来 等七个方面,对当前的 React Native 和 Flutter 进行全面的分析对比,希望能给你更有价值的参考。 前言 移动端跨平台在经历数年沉浮之后,如今还能在舞台聚光…

覆盖所有面试知识点,持续更新中

我所接触的Android开发者,百分之九十五以上 都遇到了以下几点致命弱点! 如果这些问题也是阻止你升职加薪,跳槽大厂的阻碍。 那么我确信可以帮你突破瓶颈! 应届坎坷求职路 一个广州非985/211普通本科生,计算机科学…

覆盖所有面试知识点,赶紧收藏!

前言 近日,字节跳动正式启动了2021届秋季校园招聘,为应届毕业生开放超过6000个工作岗位。这一数字超过了该公司往年秋招规模,并与其今年春招规模持平。全年校招人数共计超过1万2千人,远高于同类型互联网公司,体现了字…

实现技术3次作业 谢筱 1101220759

3次作业 谢筱 1101220759 作业一 要求: (1) 写一个博客, 列出你发现的微软学术搜索的功能性的缺陷 (bug), 至少一个. 用专业的语言描述 解答: (1) 缺陷一: 缺少中文关键字搜索功能&#…

覆盖所有面试知识点,送大厂面经一份!

自己项目中一直都是用的开源的xUtils框架,包括BitmapUtils、DbUtils、ViewUtils和HttpUtils四大模块,这四大模块都是项目中比较常用的。最近决定研究一下xUtils的源码,用了这么久总得知道它的实现原理吧。我是先从先从BitmapUtils模块开始的。…

MEF初体验之九:部件生命周期

理解MEF容器中部件的生命周期及其含义是非常重要的。鉴于MEF重点在开放端应用程序,这将变得尤其重要的,一旦app ships和第三方扩展开始运行,作为应用程序的开发者将很好地控制这一系列的部件。生命周期可以被解释为这样一个部件期望的共享物&…

ASP.NET MVC中在Action获取提交的表单数据方法总结 (4种方法,转载备忘)

有Index视图如下&#xff1a; 视图代码如下&#xff1a; [html] view plaincopyprint?<% Page Language"C#" MasterPageFile"~/Views/Shared/Site.Master" Inherits"System.Web.Mvc.ViewPage" %> <asp:Content ID"Content1&qu…

解析底层原理!Android开发者面试如何系统复习?帮你突破瓶颈

现状 后端转 Android 我该从何处下手&#xff0c;现在学习 android 晚吗&#xff1f; 我的回答是晚还不至于&#xff0c;因为目前是市场趋于稳定正常&#xff0c;这个是市场发展的比如趋势&#xff0c;现在火爆大家都看好的人工智能&#xff0c;大数据&#xff0c;犹如2010年…

解析底层原理!月薪20k+的Android面试都问些什么?深夜思考

正文 Android行业主要问题是初级Android太多了&#xff0c;会写xml和Activity的程序员太多了&#xff0c;初中级程序员面临很大的竞争&#xff0c;现状也就偏于高级开发者。越来越多的初中级Android程序员找不到满意的工作&#xff0c;甚至根本找不到工作&#xff01;所以很多…

解锁Android性能优化的五大误区!满满干货指导

笼统来说&#xff0c;中年程序员容易被淘汰的原因其实不外乎三点。 1、输出能力已到顶点。这个人奋斗十来年了&#xff0c;依旧碌碌无为&#xff0c;很明显这人的天花板就这样了&#xff0c;说白了&#xff0c;天赋就这样。 2、适应能力越来越差。年纪大&#xff0c;有家庭&…

意外收获字节跳动内部资料,一篇文章帮你解答

前言 俗话说“生于忧患&#xff0c;死于安乐”&#xff0c;其实大部分中年危机&#xff0c;就是在安乐中产生的。 有的人或许会反驳&#xff0c;“照你这么说&#xff0c;我还必须奋斗了&#xff0c;不奋斗就要死&#xff0c;难道选择安逸的生活就不对吗&#xff1f;我就没有…

成功跳槽百度工资从15K涨到28K,已整理成文档

开头 在一般的互联网公司的技术人员的面试中&#xff0c;大概会经历3到4轮的面试&#xff0c;差不多2-3轮的技术面&#xff0c;还有1轮的HR面试&#xff0c;有人面试题是有关“目标”&#xff0c;有的关于“方法”&#xff0c;有的关于“算法”&#xff0c;有的关于“基础”。…

我三年开发经验,从字节跳动抖音离职后,吐血整理

前言 前不久写过一篇博客&#xff0c;里面介绍了一位朋友由二本渣渣毕业在外包公司工作两年多后&#xff0c;跳槽逆袭成功&#xff0c;现在进入了OPPO公司的故事。 后面很多朋友私信我&#xff0c;表示想要这位朋友的面经。 其实我觉得&#xff0c;大家对面经完全没必要这么…

熊逸《唐诗50讲》田园篇 - 学习笔记与感想

此篇已加入熊逸《唐诗50讲》学习笔记索引目录。 一、田园篇具体内容 田园牧歌对于在现代社会里打拼的人们来说&#xff0c;距离一万光年&#xff0c;但是身心俱疲的时候&#xff0c;读两首田园诗却是最好的治愈&#xff0c;因为诗里岁月柔软、风物沛然。这一篇里&#xff0c;熊…

我三年开发经验,从字节跳动抖音离职后,满满干货指导

前言 程序员这个行业&#xff0c;日新月异&#xff0c;技术体系更新速度快&#xff0c;新技术新框架层出不穷&#xff0c;所有的技术都像是一个无底洞&#xff0c;当你学得越多就会发现不懂的越多&#xff0c;不懂的越多&#xff0c;需要学习的就更多。 因此&#xff0c;一旦…

我了解到的面试的一些小内幕!顺利通过阿里Android岗面试

前言 从毕业到现在面试也就那么几家公司&#xff0c;单前几次都比较顺利&#xff0c;在面到第三家时都给到了我offer&#xff01;前面两次找工作&#xff0c;没考虑到以后需要什么&#xff0c;自己的对未来的规划是什么&#xff0c;只要有份工作&#xff0c;工资符合自己的要求…

我们究竟还要学习哪些Android知识?吐血整理

前言 闲来无事在家偶然翻到了之前整理的文档和面试要做到准备路线&#xff0c;虽然内容有点多&#xff0c;但是技多不压身&#xff0c;多多益善 本部分内容是关于Android进阶的一些知识总结&#xff0c;涉及到的知识点比较杂&#xff0c;不过都 是面试中几乎常问的知识点&…