flutter全屏时钟!3年内被辞退5次,35岁程序员该何去何从?大厂内部资料

前言

程序员,近年来十分火爆的职业,凭着巨大的市场缺口和高额的薪水吸引着大量毕业生加入程序员的队伍。这其中就包括各类专业的学生,像我这种自动化专业的也在其内。这些不是计算机科班出身的可以看作是半路出家了。那么半路出家程序员和计算机专业出身学生有什么区别呢?

先来看一张计算机专业的大学课程表:数据结构与算法、计算机组成原理、汇编语言程序设计、Java语言程序设计、C/C++程序设计、操作系统、计算机系统结构、数据库系统原理、网络编程与计算技术、软件工程、计算机网络、软件开发方法等。

惭愧的说,就上过一门c语言程序设计。毕业找工作也是靠自学编程,然后牛客网(巨牛刷题网站)刷题,看某些面试宝典,做一些小项目才搞定一份工作。像面试某个知名公司时候,当场手写链表逆序程序,以及IP地址的划分规则,感觉是当场就被秒了。既然认识到差距,总是要弥补的。结合自己的学习过程总结了以下几方面。

内存泄漏是什么?

内存泄漏即 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

建议

当我们出去找工作,或者准备找工作的时候,我们一定要想,我面试的目标是什么,我自己的技术栈有哪些,近期能掌握的有哪些,我的哪些短板 ,列出来,有计划的去完成,别看前两天掘金一些大佬在驳来驳去 ,他们的观点是他们的,不要因为他们的观点,膨胀了自己,影响自己的学习节奏。基础很大程度决定你自己技术层次的厚度,你再熟练框架也好,也会比你便宜的,性价比高的替代,很现实的问题但也要有危机意识,当我们年级大了,有哪些亮点,与比我们经历更旺盛的年轻小工程师,竞争。

  • 无论你现在水平怎么样一定要 持续学习 没有鸡汤,别人看起来的毫不费力,其实费了很大力,这四个字就是我的建议!!!!!!!!!

  • 准备想说怎么样写简历,想象算了,我觉得,技术就是你最好的简历

  • 我希望每一个努力生活的it工程师,都会得到自己想要的,因为我们很辛苦,我们应得的。

  • 有什么问题想交流,欢迎给我私信,欢迎评论

【附】相关架构及资料

Android高级技术大纲

面试资料整理

资料领取

点击这里免费获取

内含往期Android高级架构资料、源码、笔记、视频。高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter全方面的Android进阶实践技术

内含往期Android高级架构资料、源码、笔记、视频。高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter全方面的Android进阶实践技术**

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值