安卓最牛教材!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

相关文章

MySQL 迁移至 Doris 最佳实践方案(最新整理)

《MySQL迁移至Doris最佳实践方案(最新整理)》本文将深入剖析三种经过实践验证的MySQL迁移至Doris的最佳方案,涵盖全量迁移、增量同步、混合迁移以及基于CDC(ChangeData... 目录一、China编程JDBC Catalog 联邦查询方案(适合跨库实时查询)1. 方案概述2. 环境要求3.

SpringSecurity整合redission序列化问题小结(最新整理)

《SpringSecurity整合redission序列化问题小结(最新整理)》文章详解SpringSecurity整合Redisson时的序列化问题,指出需排除官方Jackson依赖,通过自定义反序... 目录1. 前言2. Redission配置2.1 RedissonProperties2.2 Red

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

Python变量与数据类型全解析(最新整理)

《Python变量与数据类型全解析(最新整理)》文章介绍Python变量作为数据载体,命名需遵循字母数字下划线规则,不可数字开头,大小写敏感,避免关键字,本文给大家介绍Python变量与数据类型全解析... 目录1、变量变量命名规范python数据类型1、基本数据类型数值类型(Number):布尔类型(bo

Android DataBinding 与 MVVM使用详解

《AndroidDataBinding与MVVM使用详解》本文介绍AndroidDataBinding库,其通过绑定UI组件与数据源实现自动更新,支持双向绑定和逻辑运算,减少模板代码,结合MV... 目录一、DataBinding 核心概念二、配置与基础使用1. 启用 DataBinding 2. 基础布局