RxJava

Android常见内存泄漏以及优化方案

雨燕双飞 提交于 2020-10-09 04:50:07
单例导致内存泄漏 首先来看一下一种单例的写法: 多种单例写法参考 public class Utils { private static Utils mInstance ; private Context mContext ; private Utils ( Context context ) { this . mContext = context ; } public static Utils getInstance ( Context context ) { if ( mInstance == null ) { Util = new Utils ( context ) ; } return mInstance ; } } 以Activity为例,当我们启动一个Activity,并调用getInstance(Context context)Utils,传入Activity.this作为context,这样Utils类的单例mInstance就持有了Activity的引用,当我们退出Activity时,该Activity就没有用了,但是因为mIntance作为静态单例(在应用程序的整个生命周期中存在)会继续持有这个Activity的引用,导致这个Activity对象无法被回收释放,这就造成了内存泄露。 为了避免这样单例导致内存泄露,我们可以将context参数改为全局的上下文:

金九银十要来了?不要慌,这些Android BAT高级面试题刷一刷

て烟熏妆下的殇ゞ 提交于 2020-10-02 14:22:36
已经九月中旬了,差不多很多程序员都准备在这个时候跳槽或者找工作了。。。 如果想变得优秀那就去看那些优秀的人在学什么,做什么,想尽一切办法和他们交流;多出去看看这个世界,然后把自己逼到往死里学。 这篇攻略是我从事开发工作七八年来,去面试,以及面试别人的经验总结。其中大部分都是大企业面试常问的面试题,可以对照这查漏补缺,当然了,这里所列的肯定不可能覆盖全部方式,希望对大家之后找工作有帮助! 一、性能优化 App稳定性优化 你们做了哪些稳定性方面的优化? 性能稳定性是怎么做的 业务稳定性如何保障? 如果发生了异常情况,怎么快速止损? App启动速度优化 启动优化是怎么做的? 是怎么异步的,异步遇到问题没有? 启动优化有哪些容易忽略的注意点? 版本迭代导致的启动变慢有好的解决方式吗? 开放问题:如果提高启动速度,设计一个延迟加载框架或者sdk的方法和注意的问题 App内存优化 你们内存优化项目的过程是怎么做的? 你做了内存优化最大的感受是什么? 如何检测所有不合理的地方? App绘制优化 你在做布局优化的过程中用到了哪些工具? 布局为什么会导致卡顿,你又是如何优化的? 做完布局优化有哪些成果产出? 你是怎么做卡顿优化的? 你是怎么样自动化的获取卡顿信息? 卡顿的一整套解决方案是怎么做的? TextView setText耗时的原因,对TextView绘制层源码的理解? 开放问题

Android开发3年,九月份面试12家大厂跳槽成功,我有一些面试经验想分享给你们

烈酒焚心 提交于 2020-10-01 17:53:22
在下2017年毕业,目前从事android开发工作已经3年了,前段时间刚完成一次跳槽,面试了几家公司,将一些面试经验分享给大家,希望对大家有所帮助。 简历 首先是简历,一般找一个模板,填写掌握的技能和项目经历即可。 github上有一个不错的模板,详情可见: github.com/CyC2018/Mar… 项目clone后,个性Resuem.md即可,然后导出为pdf文件。 简历建议长度为2页,太长太短都不好。 建议用掌握与熟练掌握取代了解与精通。 刷题 算法题可以说是现在找工作必刷的了。不过根据我面试的经验,算法题总得来说问的还是比较少,还有一些公司是基本不问算法的。 当然如果碰到字节,快手这种每轮都问算法的公司,如果因为算法题拿不到offer就很可惜了。 算法题就好像高考语文的古诗词默写一样,分不多,但丢了就很可惜了。 根据我的经验,大概刷了,掌握100道题就足以应付面试了。 当然完全掌握需要重复练习,不是刷了一遍就可以的。 这里推荐一下极客时间上覃超的五遍刷题法: 五遍刷题法 1.第一遍,直接看解法 多解法,比较解法优劣,默写好的解法 2.第二遍,打开leetcode,直接开始写 多种解法比较,调优 3.第三遍,过一天之后,再重复做题 4.第四遍,过了一周,再来反复练 5.第五遍,面试前一周,恢复性训练 通过以上方法重复练习,大概刷100题就足以应付面试,如果每天刷3道

2020不同层级的Android开发者的不同行为,我们该如何进阶和规划?

拟墨画扇 提交于 2020-10-01 11:51:37
一、心里话 这篇文章有点长,但是我是真心希望大家可以认真看完,因为只要你是开发者无论你现在处在哪个阶段,都不可避免的需要进阶学习,而一般到这个瓶颈期,却是很多人无法突破的,你会开始迷茫不知所措,然后可能觉得学不下去而转行,我以我12年的开发经验告诉大家,其实转行,或者跳槽要付出的时间,精力成本比你们想的远远要多的多! 放弃比坚持简单的多, 希望大家以后迷茫的时候,第一想法是去解决问题,而不是放弃! 接下来进入正题 四个层级如下: 第一层:普通程序员 第二层:熟练开发者、高级开发工程师、技术组长 第三层:技术专家、架构师、一线经理 第四层:科学家、研究员、首席(资深)架构师、部门研发总监 二、Android开发者的四个层级 按我的理解,无论是Android开发者还是其他的开发者都可以分为四个层级,可依次对应 普通、熟练、优秀、卓越 这四个词。 一、 普通 普通开发者,能够使用一定的专项技术,完成别人分配的模块的开发。在工作当中,他们很少有机会决定自己做什么和怎么做,通常是在他人指导和安排下编码实现特定的细分功能。 这部分人中的大部分人,一般比较注重经济利益,有一定的经济压力。尚未把编程作为自己的一种爱好和自我实现的途径。多半感兴趣的是怎么找到一份好工作,怎么得到一份好薪水。但是他们忽视了,从长远来看,中国的软件职场,最终的发展方向肯定不是“五分运气,三分做人,两分技术”

RxJava2.0(转载)

放肆的年华 提交于 2020-08-15 05:39:06
零、来源 来源: Carson_Ho-简书 一、基础知识 角色 作用 类比 被观察者(Observable) 产生事件 顾客 观察者(Observer) 接收事件,并给出响应动作 厨房 订阅(Subscribe) 连接 被观察者 & 观察者 服务员 事件(Event) 被观察者 & 观察者 沟通的载体 菜式 二、基础使用 1.导入连接 implementation 'io.reactivex.rxjava2:rxjava:2.2.19' implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' 2.创建被观察者 //创建被观察者,产生事件 public Observable<Integer> createObservable() { Observable<Integer> observable = Observable.create(new ObservableOnSubscribe<Integer>() { @Override public void subscribe(ObservableEmitter<Integer> e) throws Exception { e.onNext(1); e.onNext(2); e.onNext(3); e.onComplete(); } }); return observable; } 3

详谈字节跳动2020年Android开发岗社招真题,看看你能走到哪一步?

こ雲淡風輕ζ 提交于 2020-08-12 04:20:33
首先说一下,今日头条的面试主要分为 三轮到四轮 ,如果是 旺季面三轮 ,首先是基础面试, 基本面试一般10个题左右 ,最近 面试了一下字节跳动的移动Android资深工程师 , 记录下博客 。 现在 网络疯传都2020年了,Android开发早凉了!是真的吗? 我相信 很多朋友对职业规划很迷茫! 推荐阅读 :( 2020年Android开发人员打破寒冬期的利器在哪里?是转行还是进阶? ) 这篇文档会帮你在迷茫中指明方向! 第一面是 北京的开发进行视频面试 ,有 理论和编程题 组成。用的是在线编程工具,如下图。 第一面 1、请你编程实现单例模式,懒汉和饱汉写法? //饱汉写法public static Singleton getInstance() { if (singleton == null) { synchronized (Singleton.class) { if (singleton == null) { singleton = new Singleton(); } } } return singleton; } //懒汉写法 private static final Singleton1 single = new Singleton1(); //静态工厂方法 public static Singleton1 getInstance() { return single; }

记第一次面试之被面试官毒打--android开发实习岗位

…衆ロ難τιáo~ 提交于 2020-08-11 20:44:14
一、前言 记本人第一次面试的经历,希望能给即将面试的小伙伴一些经验。 对于面试完以后,我的心态是这样的。 委屈的话不多说,说多了都是自己技术不到家,不怪别人。接下来我来复盘一下这次面试的一些内容和知识点,给大家看看,也给我自己以后”以史明鉴“,顺便充充电。 废话不多说,接下来进入正文。 二、面试ing part 1 - 自我介绍 面试官:先自我介绍一下。 我:我叫***… 事后总结:由于一开始没有准备如何更好的介绍自己,所以这段自我介绍就是很平淡无奇了,没有什么突出的地方。所以我建议小伙伴们在面试前能准备一段比较有想法的自我介绍,让面试官能够记住你,有一个良好的第一印象。 part 2 - 知识问答环节 2-1:安卓开发中的的布局 面试官:说说你用过哪些安卓开发中的布局。 我:我常用的布局有线性布局、相对布局、帧布局。 事后总结:我回答得也太简短了吧。是不是应该把安卓的常用布局都列出来,每种布局的特点都简单讲一下。然后再说自己常用的布局。由于知识储备匮乏,和问一句答一句,导致这场视频面试只用了17分钟不到就结束了。(心里顿时凉了半截) 2-2:viewHolder 面试官:简单说一下viewHolder。 我:这个好像没有用过。 事后总结:WTF???怎么就会答了没用过呢???ListView、RecyclerView的适配器里不是都用到了嘛??这组件平时也没算少用啊

接地气的面试记录:记一次Android面试心得

家住魔仙堡 提交于 2020-08-10 04:47:44
最近看到很多人都在找工作, 而且很多人都感觉今年找工作比去年难很多, 竞争力也增加不少, 因此激发我整理这份资料, 希望能帮到正在找或者准备找工作的童鞋们. 首先我们能否获得一个面试机会, 那肯定是从简历开始, 简历需要做好功夫, 一份好的简历才足够吸引企业得到面试机会, 接着就是面试了, 面试前必须要先做好准备, 多看一下前辈们总结面试题, 有哪一方面不足的地方赶紧补充一下, 还有要了解一下你即将面试那家公司. 一、简历 网上有很多对程序员简历的一些指导,这里就不重述,大家可以搜下网上其他大神的总结,结合自身情况修改下。我有几点建议: 1.尽量不要花哨,程序员和设计师或者产品运营还不一样,我们的简历成功与否决定权还是在技术面试官那,而他们 看重的是你的项目经验内容和技术等描述。 2. 技能描述这块尽量只写你懂得而且理解深刻的, 可以适当加入一些新技术或流行框架,不过这块需要理解,没来得及看源码的可以看看大神们对它的总结,网上一大堆。 3. 项目经验这块尽量加入关键词, 比如使用了什么技术、用到哪些设计模式、优化数据对比、扩展总结之类的。而非一味地介绍这个项目内容(那是产品经理的描述),比如性能优化这块,分为UI性能优化、内存优化、数据库优化、网络优化、耗电优化等等。可以从 1).如何发现问题 2).怎么解决问题 3).解决效果对比,这几个方面去描述。举个简单例子——UI优化

探索Java9 模块系统和反应流

↘锁芯ラ 提交于 2020-08-09 21:27:09
Java9 新特性 ,Java 模块化,Java 反应流 Reactive,Jigsaw 目录 模块系统 模块描述符 模块化应用程序示例 编译和执行 向后兼容 反应流 Flow类 内部实现 一个简单的应用 应用Processor API使用 总结 模块系统 Java平台模块系统(JPMS)是Java9中的特性,它是Jigsaw项目的产物。简而言之,它以更简单和易于维护的方式来组织包和类型。 直到Java8,系统仍面临与类型系统相关的两个问题: 1.所有的组件(大多是Jar包)都处在classpath中,没有任何的显式依赖申明。诸如Maven之类的构建工具可以在开发过程中帮助组织这些构件。然而,在运行时却没有这样的支持工具。你最终可能会遇到calsspath中缺少某个类,或者更严重的是存在同个类的两个版本,向这样的错误很难诊断。 2.在API级别上不支持封装。所有的public的类在整个应用中都可以访问,经管事实上这些类只是想供一部分其他类调用。另一方面,私有的类和私有的成员也不是私有的,因为你可以使用反射来绕过访问限制。 这些就是Java 模块系统要应对的地方。Oralce的Java平台首席架构师Mark Reinhold描述了Java模块系统的目标: 1.可靠的配置 - 用程序组件相互声明显式依赖的方法替换脆弱,容易出错的类路径机制。 2.强大的封装 -

8年Android程序员一个月面试6家大厂的面试题整理和建议

不想你离开。 提交于 2020-08-06 07:21:32
前言 我不是什么大牛,我只是一个有八年工作经验的Android老兵,既没有非常亮眼的学历,也没有牛逼大厂的履历。 这个冬天,在孩子得病从急诊转住院的时候,我得到了年前将被优化的消息,作为家里唯一经济来源的我整个人蒙了,一时间茫然和无助差点毁了我。 最后我还是和家人如实说了,受到了他们的极大的鼓励,也找到了重新开始的勇气。 可惜这场疫情来的如此凶猛,职位少、要求高、电话面试、视频面试、在线coding、屡战屡败、屡败屡战,构成了我这一个月的常规生活。 我一开始也焦虑、茫然,甚至对自己的能力和工作经验深深怀疑。 后来经过几个好朋友的鼓励打气,也看了很多面试文章,认真总结自己面试中不足的地方,查漏补缺,终于在这周确定了offer。 接下来我就对我面过公司的面试题做一下总结,权当抛砖引玉,希望对大家有帮忙。 面试问题汇总 某知名在线教育公司 介绍一下自己项目中MVP如何实现; 自定义View流程; 说说项目中遇到的性能优化、内存泄漏和内存溢出; native和h5交互怎么做; 事件分发流程; http、https的区别,post、get区别; 算法:两个单链表相交,求相交结点; 算法:获取单链表倒数第k个元素; 著名安全类公司 Activity的启动模式和应用场景; Handler机制以及与Message等之间的关系; 与Service通信的几种方式,进程间通信和进程内通信的区别;