我们都是被圈养的人?

我的朋友程序员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面试经历,吐血整理相关推荐

  1. 2021大厂Android面试经历,吐血整理

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

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

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

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

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

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

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

  5. 安卓内存监控工具,2021年Android面试心得,系列教学

    前言 19年6月份从网易云音乐离开,放弃了留学机会,开始了人生的第一次创业,前后尝试了两个项目,因为个人能力与时机因素都失败了,虽然没能享受到创业所能够带来高杠杆物质上的回报,但是对个人软技能和自我边 ...

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

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

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

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

  8. 安卓开发权威指南!2021大厂Android面试经验,不吃透都对不起自己

    IT行业的前景 近几年来,大数据.人工智能AI.物联网等一些技术不断发展,也让人们看到了IT行业的繁荣与良好的前景.越来越多的高校学府加大了对计算机的投入,设立相应的热门专业来吸引招生.当然也有越来越 ...

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

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

最新文章

  1. java 中的 viewUtils框架
  2. 帝国Cms批量上传多图morepic上传超过最大文件2m的限制的方法
  3. JavaWeb学习之Spring框架(一)
  4. android x86一键安装,安卓
  5. 【电影】美丽心灵的永恒阳光
  6. tomcat URL乱码问题
  7. java jespa_Jespa实际运用的一点心得
  8. 这些将在新一年改变你的风控内容
  9. 给异地服务器远程ssh重装CentOS系统
  10. python 随机数_python项目实战:实现蒙特卡罗方法,求物体阴影面积
  11. uni-app 行内样式动态背景图 :style 绑定
  12. 区块链 Hyperledger fabric 排序服务Kafka
  13. 为什么redis适合操作小数据,memcache适合操作大数据
  14. python+java家庭理财个人理财管理系统记账系统
  15. 2.安装Clouda框架
  16. 飞思卡尔k66,k60无限重启
  17. 表格标签案例---个人简历
  18. QT之TreeView
  19. java protected_java语言中protected是什么意思
  20. 商务投标的“内卷化”行为,竟无言反驳

热门文章

  1. 微信公众号商城是否需要云服务器,云商城公众号绑定、微信支付配置文档
  2. 关于身份认证和鉴权过程
  3. 预测交通拥堵,TranSEC助力城市交通“智”变
  4. expand linux,整理一下linux系统expand 命令
  5. R语言使用ARIMA模型预测股票收益时间序列
  6. SpringMVC(一)视图解析器
  7. Oracle索引梳理系列(十)- 直方图使用技巧及analyze table操作对直方图统计的影响(谨慎使用)...
  8. Qt窗口设置成透明色方法(窗口设置成透明色结果显示成黑色的解决办法)
  9. iOS10新特性及Xcode8兼容适配资料整理
  10. python-线程池的使用