安卓最牛教材!2021大厂Android面试经历,吐血整理

2024-02-15 06:18

本文主要是介绍安卓最牛教材!2021大厂Android面试经历,吐血整理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我们都是被圈养的人?

我的朋友程序员K,说他在电力行业的一家软件公司做了八年Android开发,用到的各种技术,数据库,网络请求,事件传递,响应框架都很熟悉,甚至JNI/NDK/Framework,JS、Server端开发都能玩儿转,个人也是部门骨干。

因为疫情,今年公司项目锐减,已经签的项目,也迟迟不能开始,公司难以运转,就做了一些优化。K原本不在被优化之列,但他觉得留下来也意义不大,就主动申请了一个名额,拿了几个月赔偿金,出来找工作。

K对找工作本来信心满满,谁知道一面试,连“熟悉SSM吗?用它们做过项目吗?”、“微服务架构在项目中用过吗?”这些问题都难以回答,饱受打击。找了一个多月,虽然拿到了两个Offer,但是公司规模、待遇等,都还不如原来,K感到非常沮丧,严重怀疑自己做错了选择,产生了回老东家的想法,K何尝不是很多35岁以上程序员的缩影?

K的情况让我想起2018年,IBM裁员时我所接触到了几个年近四十的程序员,也是类似的情况,原本拿着高薪也不怎么加班,工作和生活都有滋有味,可是忽然间遭遇优化,被抛到市场上找工作,才发现自己竟然在技术、思维等方方面面都跟不上了,连那些自己从前瞧都懒得瞧的小公司,居然也反转过来瞧不上自己了。

我接触到的人非常有限,就遇到了这么多“放心跟着公司发展结果失去竞争力”的情况,那整个职场,还不知道有多少人,像K这样被公司圈养,结果来到自由竞争的市场,忽然发现自己失去了议价能力,面临被淘汰的命运。

内存泄漏是什么?

内存泄漏即 ML (Memory Leak) 指 程序在申请内存后,当该内存不需再使用 但 却无法被释放 & 归还给 程序的现象

内存泄漏有哪些情况,对应的解决方案?

内存泄漏的原因归根到底就是当需要被回收变量的内存被其他变量引用持有,导致内存回收失败

常见的原因有:

1.非静态内部类/匿名类
  • 原因1:非静态内部类/匿名类 Handler持有外部的Activity/Fragment对象的引用,导致Activity/Fragemnt被销毁的时候没有被回收

  • 解决方案:

    1. 将Handler类改为静态内部类 + 弱引用(WeakReference)持有Activity引用(静态类默认不持有外部的引用)
    2. 当外部类(一般是Activity/Fragment)结束生命周期时,清空Handler队列
  • 原因2:非静态内部类的实例(对象) = 静态实例 (其生命周期 = 应用的生命周期)

  • 解决方案:

    1. 将该类改为静态类(静态类默认不持有外部的引用)
    2. 将该类抽出来封装成为一个单例
  • 原因3:多线程 工作线程正在处理任务时外部类需要销毁,此时工作线程持有外部类的引用导致无法被回收

  • 解决方案:

    1. 将该线程类类改为静态类(静态类默认不持有外部的引用)
    2. 当外部类结束生命周期时强制结束线程
2.集合类
  • 原因:集合类添加元素之后持有集合元素的引用,导致该集合元素不可被回收,导致内存泄漏

  • 解决方案:

    1. 集合类使用完元素对象后,必须将该元素从集合中删除(由于一个集合中有多个元素,所以最简单的方案就是清空集合对象(clean)&设置为Null)
3.资源对象使用后未关闭
  • 原因:资源对象使用后未关闭,在Activity/Fragemnt销毁时没有关闭/注销这些资源,将导致无法回收 例如:广播BraodcastReceiver文件流Fire图片资源Bitmap数据库游标

  • 解决方案:

    1. Activity销毁时及时关闭/注销资源
4.Static关键字修饰成员变量
  • 原因:Static关键字修饰成员变量的生命周期 = 应用的生命周期 例如 private static Context mContext = context 那么context上下文对应的Activity则无法被回收

  • 解决方案:

    1. 尽量不要使用Static成员变量引用,使用弱引用代替强引用
    2. 使用单例模式
4.其他使用
  • 原因1:Context:当拥有Activity context的引用的对象仍在使用,则该Activity需要销毁时无法回收

  • 解决方案:

    1. context的引用不要超过它的生命周期
    2. 使用ApplicationContext代替
  • 原因2:WebView:不再使用WebView对象后没有及时销毁,导致内存占用

  • 解决方案:

    1. 通过多线程对不再使用的WebView对象进行销毁
  • 原因3:Adapter:滑动ListView、RecycleView获取新View时 都在getView()中重新实例化一个View对象,浪费资源,使内存占用越来越大

  • 解决方案:

    1. 使用缓存的convertView
    2. 直接使用ViewHolder

学习分享

①「Android面试真题解析大全」PDF完整高清版+②「Android面试知识体系」学习思维导图压缩包——————可以点击我的【腾讯文档】免费下载,最后觉得有帮助、有需要的朋友可以点个赞

]

[外链图片转存中…(img-IKsdhxDn-1621849860668)]

[外链图片转存中…(img-heGY3aQS-1621849860672)]

这篇关于安卓最牛教材!2021大厂Android面试经历,吐血整理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

JAVA数组中五种常见排序方法整理汇总

《JAVA数组中五种常见排序方法整理汇总》本文给大家分享五种常用的Java数组排序方法整理,每种方法结合示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录前言:法一:Arrays.sort()法二:冒泡排序法三:选择排序法四:反转排序法五:直接插入排序前言:几种常用的Java数组排序

Spring Boot 常用注解整理(最全收藏版)

《SpringBoot常用注解整理(最全收藏版)》本文系统整理了常用的Spring/SpringBoot注解,按照功能分类进行介绍,每个注解都会涵盖其含义、提供来源、应用场景以及代码示例,帮助开发... 目录Spring & Spring Boot 常用注解整理一、Spring Boot 核心注解二、Spr

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

Android与iOS设备MAC地址生成原理及Java实现详解

《Android与iOS设备MAC地址生成原理及Java实现详解》在无线网络通信中,MAC(MediaAccessControl)地址是设备的唯一网络标识符,本文主要介绍了Android与iOS设备M... 目录引言1. MAC地址基础1.1 MAC地址的组成1.2 MAC地址的分类2. android与I

Android 实现一个隐私弹窗功能

《Android实现一个隐私弹窗功能》:本文主要介绍Android实现一个隐私弹窗功能,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 效果图如下:1. 设置同意、退出、点击用户协议、点击隐私协议的函数参数2. 《用户协议》、《隐私政策》设置成可点击的,且颜色要区分出来res/l

Android实现一键录屏功能(附源码)

《Android实现一键录屏功能(附源码)》在Android5.0及以上版本,系统提供了MediaProjectionAPI,允许应用在用户授权下录制屏幕内容并输出到视频文件,所以本文将基于此实现一个... 目录一、项目介绍二、相关技术与原理三、系统权限与用户授权四、项目架构与流程五、环境配置与依赖六、完整

Android 12解决push framework.jar无法开机的方法小结

《Android12解决pushframework.jar无法开机的方法小结》:本文主要介绍在Android12中解决pushframework.jar无法开机的方法,包括编译指令、框架层和s... 目录1. android 编译指令1.1 framework层的编译指令1.2 替换framework.ja

Android开发环境配置避坑指南

《Android开发环境配置避坑指南》本文主要介绍了Android开发环境配置过程中遇到的问题及解决方案,包括VPN注意事项、工具版本统一、Gerrit邮箱配置、Git拉取和提交代码、MergevsR... 目录网络环境:VPN 注意事项工具版本统一:android Studio & JDKGerrit的邮

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE