我们都是被圈养的人?

我的朋友程序员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-QG5z3udQ-1622025584390)]

[外链图片转存中…(img-v2ypOiOu-1622025584392)]

2021大厂Android面试经历,吐血整理相关推荐

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

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

  2. 2021大厂Android面试经历,震撼来袭免费下载!

    互联网现状 今年的互联网,延续了去年的态势.虽然前些年,每到年底的时候大环境都不好,然而来年照样春暖花开.但是2020下半年的颓势,在2021年春天并未得到缓解,所以现在的互联网环境是真的不好了. 首 ...

  3. 安卓android刷机工具!2021大厂Android面试经历,值得收藏!

    从基础到架构进阶,包含了腾讯.百度.小米.阿里.乐视.美团.58.猎豹.360.新浪.搜狐等一线互联网公司面试被问到的题目,涵盖了初中高级安卓技术点. 文章中所列主要为大纲部分,详细内容可以在文末自行 ...

  4. 2021大厂Android面试经历,内含福利

    前言 大家应该看过很多分享面试成功的经验,但根据幸存者偏差的理论,也许多看看别人面试失败在哪里,对自己才更有帮助. 最近跟一个朋友聊天,他准备了几个月,刚刚参加完字节跳动面试,第二面结束后,嗯,挂了- ...

  5. 上海大厂Android面试经历;华为+小米+映客+抖音

    前言 面试:如果不准备充分的面试,完全是浪费时间,更是对自己的不负责. 文末会给大家分享下我整理的Android面试专题及答案其中大部分都是大企业面试常问的面试题,可以对照这查漏补缺,当然了,这里所列 ...

  6. 【不仅仅有面经】2020大厂Android面试经历,Android从入门到精通

    本人985学校本科毕业,非科班出身,三年多Android开发经验,半年iOS开发经验,和一个JavaScript小游戏开发经验.技术水平,略低于百度T5的样子(去百度面过,止步第四轮技术面).一直在创 ...

  7. 上海大厂Android面试经历:史上最通俗计算机网络分层详解,通用流行框架大全

    前言: 笔者出生在江西一个偏远的山村.虽然出生时已经不是那个温饱都是问题的年代,但是也谈不上有个幸福的童年.家里很穷.幼儿园并没有读,因为家里觉得花那个钱没有必要,小学才开始学拼音字母.我的童年,就是 ...

  8. 腾讯T3大牛亲自教你!2021大厂Android面试经验,经典好文

    本篇将由 环境搭建.实现原理.编程开发.插件开发.编译运行.性能稳定.发展未来 等七个方面,对当前的 React Native 和 Flutter 进行全面的分析对比,希望能给你更有价值的参考. 前言 ...

  9. 2021大厂Android面试经验,经典好文

    本篇将由 环境搭建.实现原理.编程开发.插件开发.编译运行.性能稳定.发展未来 等七个方面,对当前的 React Native 和 Flutter 进行全面的分析对比,希望能给你更有价值的参考. 前言 ...

最新文章

  1. 异常检测算( OneClassSVM、EllipticEnvelope、IsolationForest、LocalOutlierFactor)法比较,基于四个仿真数据集
  2. VS Code 2022路线图:大量Spring Boot优化提上日程!难道是被JB Code吓到了?
  3. html插入javascript变量,javascript如何引用变量?
  4. java 仿百度文库源码_java开发_模仿百度文库_SWFTools_源码下载
  5. 【mybatis】mybatis多表联查,存在一对多关系的,实体中使用List作为字段接收查询结果的写法...
  6. apscheduler 脚本执行失败_在脚本中使用 Bash 信号捕获 | Linux 中国
  7. MySQL学习笔记_3_MySQL创建数据表(中)
  8. 赵明晒荣耀20青春版三色真机图:哪款会是你的菜?
  9. Robocode教程4——Robocode的游戏物理
  10. centos7.4 update git
  11. ICP备案和经营性ICP有何不同
  12. 巧妙设置excel透明字体
  13. MyBatis中使用的一些特殊符号标识(大于等于、小于等于、等于、不等于)
  14. io-nio-socket步步为营(七) IO模型-心得体会
  15. 思维导图工具---Xmind使用方法和快捷键汇总(精简版)
  16. 代数基础 | Kronecker积
  17. 快速剪辑视频,每个视频按秒数快速分割,并保留原声
  18. 在windows7下农业银行网银(金e顺)不能使用
  19. Qt ——QSound播放wav格式音乐
  20. 一个来自内蒙 正式工作两年的攻城狮的独白以及总结

热门文章

  1. 警惕感冒不仅会头痛脑热,还可能引发致盲性眼病
  2. python程序设计江红答案_python程序设计江红上机答案
  3. squid代理介绍----传统代理
  4. [ 数据结构 - C++] AVL树原理及实现
  5. 清华、北大、浙大的计算机课程资源集都在这里了
  6. 自动装配之@Enablexxx
  7. 大雁塔,青龙寺,樱花舞,落尘香
  8. 理解linux cpu load
  9. 机器学习入门三剑客之Matplotlib
  10. 通过api向外发送报告清单邮件