现在做Android开发有前途吗?附面试题答案

开头

笼统来说,中年程序员容易被淘汰的原因其实不外乎三点。
1、输出能力已到顶点。这个人奋斗十来年了,依旧碌碌无为,很明显这人的天花板就这样了,说白了,天赋就这样。
2、适应能力越来越差。年纪大,有家庭,老油条,学习能力下降,磨洋工等等。
3、性价比逐渐降低。到了35岁的年薪基本都不会低的,然而输出能力到天花板了,随着年纪的逐渐增大,性价比会越来越低。说来说去就那经典的一句话:可替代性太高。25岁的年轻人便宜且前途可期,35岁已兑现天赋价格还高,这两选谁都差不多的时候,你说企业会怎么选……任何一个当了老板的人都会选前者。而如何增加自己的不可替代性?

正文如下

  • 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()中执行耗时操作

题外话

不管怎么样,不论是什么样的大小面试,要想不被面试官虐的不要不要的,只有刷爆面试题题做好全面的准备,当然除了这个还需要在平时把自己的基础打扎实,这样不论面试官怎么样一个知识点里往死里凿,你也能应付如流啊~

这里我为大家准备了一些我工作以来以及参与过的大大小小的面试收集总结出来的一套进阶学习的视频及面试专题资料包,点击这里免费分享给大家,主要还是希望大家在如今大环境不好的情况下面试能够顺利一点,希望可以帮助到大家~

最后如果马化腾把腾讯给你一天,你会来做什么?欢迎评论区讨论。

tent()中执行耗时操作

题外话

不管怎么样,不论是什么样的大小面试,要想不被面试官虐的不要不要的,只有刷爆面试题题做好全面的准备,当然除了这个还需要在平时把自己的基础打扎实,这样不论面试官怎么样一个知识点里往死里凿,你也能应付如流啊~

这里我为大家准备了一些我工作以来以及参与过的大大小小的面试收集总结出来的一套进阶学习的视频及面试专题资料包,点击这里免费分享给大家,主要还是希望大家在如今大环境不好的情况下面试能够顺利一点,希望可以帮助到大家~

[外链图片转存中…(img-bKz1jA5d-1621870995950)]

最后如果马化腾把腾讯给你一天,你会来做什么?欢迎评论区讨论。

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

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

相关文章

C++开发WPF,Step by Step

C开发WPF,Step by Step 示例代码 使用C来开发WPF,主要是如何在MFC(Win32)的窗口中Host WPF的Page。下面我就做个详细的介绍. 一、创建工程, 由于MFC的Wizard会生成很多用不到的代码,所以我准备从一个空的工程开始创建一…

百度、华为、京东、B站最新面试题汇集,实战篇

前言 回顾一下自己这段时间的经历,因公司突然通知裁员,我匆匆忙忙地出去面了几家,但最终都没有拿到offer,我感觉今年的寒冬有点冷。公司开始第二波裁员,我决定主动拿赔偿走人。后续的面试过程我做了一些准备&#xff…

百度、阿里、滴滴、新浪的面试心经总结,一线互联网公司面经总结

开头 技术的发展产生了程序员这个职位,从这些年各大互联网公司曝光的一些员工收入水平来看,程序员的工资还是相对比较高的,可是我们在互联网上还听到了另外一种声音,很多程序员想转行,特别是大龄程序员,这…

百度、阿里、滴滴、新浪的面试心经总结,源码+原理+手写框架

前言 作为一个程序员,如果你在新知识、新技术面前仍一无所知,依然吃着十多年前的老本,那你在知识技术上肯定落伍,如果又未能进入管理层面,那你肯定就会被长江的后浪拍在沙滩上了。 而不少与时俱进、善于学习的程序员…

目前最全的《Android面试题及解析》!面试真题解析

背景 惯例,先简单陈述一下自己的,91年生人,164年三本毕业后在深圳工作,末流小公司,工资13k,无房,无车,无户口。 那时候感觉生活也还行,父母有退休金,我基本…

有效的形成传感器(执行器)的控制方式

其实为了增加闭环的话需要再增加一个传感器,比如编码器。 转载于:https://www.cnblogs.com/yjphhw/p/11285145.html

直接上干货!技术水平真的很重要!复习指南

开头 25岁那年,我从京东离职,入职百度。 在百度认识了当时的架构师久哥(T9级别),因为他的一番话,彻底改变了我的职业生涯,短短三年的时间,我从一枚普通程序员成长为别人眼中的技术…

实战HMM-Viterbi角色标注地名识别

http://www.hankcs.com/nlp/ner/place-names-to-identify-actual-hmm-viterbi-role-labeling.html 命名实体识别(Named Entity Recognition)也是自然语言处理中的一个难关,特别是中文这样没有大小写等固定形态的语言。上次介绍过《实战HMM-Vi…

看完99%的人都学会了!9次Android面试经验总结,我先收藏为敬

我们都是被圈养的人? 我的朋友程序员K,说他在电力行业的一家软件公司做了八年Android开发,用到的各种技术,数据库,网络请求,事件传递,响应框架都很熟悉,甚至JNI/NDK/Framework&…

从外包公司到今日头条offer,含BATJM大厂

前言 最近有不少人问我这样一个问题:「我刚接触编程,准备学习下Android开发,但是担心现在市场饱和了,Android开发的前景怎么样?」 想着可能有很多人都有这样的担心,于是就赶紧写篇文章,来跟你…

PTA -- A1046 Shortest Distance

题意及思路 题意:有N个节点(1至N),求给定的st号到en号的距离最小值,这些点构成一个环,即1->2 ... ->N ->1。 思路:第一步,预处理操作,以dis[ i ] 表示&#xff…

从外包公司到今日头条offer,聪明人已经收藏了!

开头 让我们一起来看看,字节跳动的第三面,面试官都问了什么?(第一二面的题目及答案已整理,需要的可以在文末领取) 从七月中旬开始,我前前后后差不多一共投递了八十份简历,到目前为…

从外包月薪5K到阿里月薪15K,原理+实战+视频+源码

前言 转眼间,2020 年已过去一大半了,2020 年很难,各企业裁员的消息蛮多的,降职,不发年终奖等等。2020 年确实是艰难的一年。然而生活总是要继续,时间不给你丧的机会!如果我们能坚持下来&#x…

C#编写的发送手机短信的类库 C#开发短信的方法和简介 短信编程实例

发送手机短信源代码(针对国内短信编码) / ///文 件:PDUdecoding.cs ///概 要:针对国内短信编码(USC2) ///组成结构:包含四个函数: /// smsDecodedCenterNumber(string srvCenterNumber) …

从新手到Flutter架构师,一篇就够!吐血整理

在开始回答前,先简单概括性地说说Linux现有的所有进程间IPC方式: 1. **管道:**在创建时分配一个page大小的内存,缓存区大小比较有限; 2. 消息队列:信息复制两次,额外的CPU消耗;不合…

从新手到Flutter架构师,一篇就够!学习路线+知识点梳理

前言 IT行业薪水高,这是众所周知的,所以很多人大学都选择IT相关专业,即使非该专业的人,毕业了也想去一个培训机构镀镀金,进入这一行业。 但是有关这个行业35岁就退休的说法,也一直盛传。 加上这几年不断…

从新手到Flutter架构师,一篇就够!帮你突破瓶颈

前言 马上快到金三银四都春招阶段了,在这本就是跳槽、找工作的年后黄金时间,大多数求职者都早早做好年后求职的准备,其中不乏有年前早早辞了工作准备年后跳槽的有经验的职场老人们,也有一批即将毕业的应届毕业生的职场新人们。 …

从新手到Flutter架构师,一篇就够!附赠课程+题库

导语 Android 音视频开发这块目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的。只能通过一点点的学习和积累把这块的知识串联积累起来。 音视频的开发,往往是比较难的,而这个比较难的技术就是NDK里面的技术。音视频/高…

微信小程序之视图容器(swiper)组件创建轮播图

一、视图容器(Swiper) 1、swiper:滑块视图容器 微信官方文档:https://developers.weixin.qq.com/miniprogram/dev/component/swiper.html 二、swiper应用 1、页面逻辑(index.js) Page({data: {imgUrls: [{l…

从草根到百万年薪程序员的十年风雨之路,使用指南

前言 文章篇幅较长,建议耐心食用,相信对你有帮助。码字不易,如果有误,欢迎指出。 前部分是面试经历,后部分是附带的问题笔记/推荐回答/书籍。 我的微信小号有一组特殊的朋友。他们从 CSDN上看到我之前发布的《从阿里到…