8年Android老码农现身分享:一个月面试6家大厂屡败屡战,那些面试学习上走过的弯路(2)

  • 事件分发流程;

  • http、https的区别,post、get区别;

  • 算法:两个单链表相交,求相交结点;

  • 算法:获取单链表倒数第k个元素;

著名安全类公司

  • Activity的启动模式和应用场景;

  • Handler机制以及与Message等之间的关系;

  • 与Service通信的几种方式,进程间通信和进程内通信的区别;

  • 手写代码实现线程死锁; 手写两种单利模式,并讲出优缺点;

  • 如何实现RecyclerView的侧滑删除;

  • http、tcp/ip基本认识,post和get区别;

  • 内部类为什么会造成内存泄漏;

  • 怎样给RecyclerView加header和footer,为什么可以这样;

  • RecyclerView如何实现复杂布局;

  • 算法:一个整型数组中,只有两个数出现一次,其余均出现两次,找出这两个数,给出时间复杂度;

著名求职类公司

  • View的回执流程,onMeasure方法的三种模式;

  • 画出Window的层次结构;

  • Handler、Looper原理;

  • 说一下自己设计的图片框架;

  • Glide源码;

  • 对RxJava的理解;

  • 事件分发机制,TouchEvent的down、up和move;

  • 项目中如何实现热修复,或使用了哪个热修复库;

  • 手写实现数据库SQLiteOpenHelper;

  • ActivityThread的main方法中做了些什么;

  • 内存泄漏的原因,常见场景和如何处理;

  • 布局优化,如何防止过度绘制;

一个名字听起来巨有钱的公司

  • RxJava的优劣势;

  • home/user/a/…/b/./c所代表的的路径,手写代码输出绝对路径;

  • 对系统相机的了解;

  • View的回执流程;

  • Glide源码,介绍自己的图片框架;

  • 手写实现快速排序;

  • 介绍代理模式;

  • MVC、MVP各自特点和优缺点;

某大厂下的外卖团队

  • 介绍Activity任务栈;

  • RxJava原理,RxJava同时执行5个任务,是并行还是串行;

  • Activity的启动过程;

  • View的绘制过程,onMeasure方法中两个参数的含义;

  • 自己封装过什么框架,介绍一下原理;

  • ListView和RecyclerView的优化和区别;

  • 如何为RecyclerView的Adapter设置监听,说出最好方案;

  • 介绍一个自己做过的最满意的东西;

  • 泛型中 ? 表示什么含义,若加入不满足条件的类型会怎样;

  • 单例模式中的双检锁,如果把类锁换成内部声明的另一个类,效果会怎么样;

知名在线借款公司

  • Activity的生命周期,启动模式;

  • 如何实现多个Activity同时展示;

  • 手写单例模式并解释为什么这样写;

  • 如何防止过度绘制;

  • 介绍下你阅读过的源码;

  • 磁盘缓存怎么实现;

  • JVM垃圾回收机制;

Android开发到底需要学习哪些?

对于现在的Android及移动互联网来说,我们需要掌握的技术,我做了一个清单:

  • 泛型原理

  • 反射原理

  • Java虚拟机原理

  • 线程池原理

  • 注解原理

  • 注解原理序列化

  • Activity知识体系(Activity的生命周期、Activity的任务栈、Activity的启动模式、View源码、Fragment内核相关、service原理等)

  • 代码框架结构优化(数据结构、排序算法、设计模式)

  • APP性能优化(用户体验优化、适配、代码调优)

  • 热修复

  • 热升级

  • Hook技术

  • IOC架构设计

  • NDK(c编程、C++、JNI、LINUX)

  • 如何提高开发效率?

  • MVC、MVP、MVVM

  • 微信小程序

  • Hybrid

  • Flutter

解析知识点,为什么要学

1.数据结构和算法

数据结构和算法其实是分开的东西,我们需要先掌握各种数据结构,再去加深算法,数据结构和算法其实也属于基础,但是它现在越来越重要,所以我就单独拿出来说了。

数据结构怎么深入同样我也推荐大家去看清华或者浙大《数据结构》公开课,特别是清华的,值得反复研究。

至于算法,首先要做的就是动手,LeetCode上直接干!

第二阶段就是要总结各种算法的思想和套路,像递归、动态规划等这些算法都是有套路的,在LeetCode上也有按数据结构和算法分类的筛选,大家可以针对性练习和总结。

当然,对于一个Android程序员,能做到每天在LeetCode上刷题就非常不错了,所以一定要坚持,等你坚持到一定的时间,你会发现你越来越游刃有余,我从18年底开始在LeetCode上刷题,目前已经刷了200多道了,小米的面试也非常注重算法,还要能写。

而且对一些特别注重算法的公司,算法这块的考核非常严苛,对,就是严苛,而不是严格。

2.设计模式

设计模式中包括了设计原则,其实对于Android开发人员来说,设计模式就那23种,知道并了解这些设计模式是第一个阶段,仅仅是到这个阶段是不够的,一般面试也不会问你某个设计模式的概念,而会让你具体的说说你对某一种设计模式的深入了解和使用,它的优缺点,所以,第二阶段就是要运用它们,其次要和Android源码中运用到设计模式地方进行结合学习。

例如建造者模式,Andoird中的Dialog创建就使用到了,还有像单例模式、适配器模式、观察者模式等等都是在Android中非常常用的设计模式,也是在面试中出现频率很高的。

3.语言学习开发语言

Android应用是由Java语音进行开发的,SDK也是由Java语言编写的,所以我们要学习Java语言。另外,虽然说Kotlin语言也得到Android官方的热推,但是Kotlin也是编译成了Java语言在运行的。对于Android开发来说。

只要SDK没有用Kotlin重写,那么Java语言都是需要学习的。而且Android apk的后台服务器程序大概率是Java语言构建,所以学习Java是一个必然。

那么Java中那些东西是我们Android中比较相关的稍微比较难的Java基础几乎是一个门槛,像泛型丶多线程丶反射丶JVM丶JavaIO丶注解丶序列化等等。

4.APP开发框架知识

这块知识是现今使用者最多的,我们称之为Android2013-2016nian 的技术。但是,即使是这样的技术,很多开发者也往往因为网上很多copy代码的习惯而导致对这块的使用的代码熟悉而陌,熟悉的是天天和它们打交道天天在复制,陌生的是天天打交道却没有深入研究过他们,要学习源码,模仿源码,然后在hook源码,这样才能说懂这块的知识。

5.App性能优化

一个app的西能好不好我们需要从两个层面分析:

1、从写代码的时候就注意,让自己的代码是高性能高可用的代码,这个过程是书写高性能代码

2、对已经成型的代码通过工具检测代码问题,通过检查到问题来指导我们进行代码的删改这个过程被称为调优

那如何写出高性能的代码呢?

需要我们具备深厚的代码功底,这就是代码的基础,如:数据结构达到可以根据应用场景写出符合当前场景的特殊结构,比如google针对Android平台特征研发了SparseArray代替HashMap.另外,对常用的算法也有自己独到的见解

6.NDK模块开发

音视频、高清大图片、人工智能、抖音直播等这些年与用户紧密相关,与我们生活最相关的技术一直都在寻找最终的技术落地平台,以前是Windows系统,而现在是移动系统了。而移动系统中Android比例又是最大的。所以NDK可以说是必备要学习的,除此之外,音视频的编解码技术流媒体协议,ffmepeg,c,c++,JNI,linux都是音视频开发必备技能。而且OpenCV \OpenGI这些又是图像处理必备。

7.如何提高开发效率?

工欲善其事必先利其器,如何提高开发效率,很多开发者在开发中由于gradle不会用导致加载代码非常耗时,这些都是你的工作成本的浪费。还有就是git的使用也可以帮助我们管理好我们的代码,这个非常关键,因为这个工具可以让我们修改的代码不会因为错误操作而导致丢失。另外,对移动开发者我们至少需要知道如何抓取网络包。其中,最常用的stetho就是一个非常好用的可以抓取网络包的工具。

8.混合开发

混合开发的flutter现在已经逐渐成了主流的混合开发框架,另外由于阿里系的强大存在,导致阿里系的公司都在用Weex混合架构,这些都是一个Android工程师开拓视野,走向未来必不可少的基本技能的。

写给看到最后同学的话

这些算是我作为过来人对于应届毕业生和刚工作不久的同学的一些小小建议吧。

(1)一定要紧跟技术前进的脚步,尤其是大数据相关的技术,在技术更迭的时候一定要学习熟悉新技术,看源码,哪怕自己在工作中用不到也一定要学。因为这是你下一份工作的敲门砖。

(2)不要给自己设置舒适区,这个就是说,一个公司待久了不要懒惰,不能荒废自己,始终要保持清醒的头脑和进取心,不断学习,不断完善自己的技术,架构设计能力,项目管理能力,交付能力等。

一定要及时从项目中总结经验和不足,最好落实到日记本中,最后通过不断思考,形成自己的做事方法论。

(3)对自己的职业生涯要有一个规划,以后要做哪一块一定要有自己的想法,确定了就要从这个方向完善自己,多学多练。

没有人会专一做某一块,但是自己一定要想好哪一块是自己以后要走的方向,那么这一个方向确定了就要深入的学习这一块的知识,多看源码,多做练习,如果接触到具体项目,要在项目中沉淀自己,最后形成自己的知识体系。

(4)做事情要有担当,不要根据OKR给自己设置界限,有能力有空闲多做一定要多做,这也是别人认可你的最佳途径之一。互联网圈子很小,大家认可你,以后去大厂,换个好工作,也许就更容易。

Android开发如何提升自身技能?

Android学习是一条漫长的道路,我们要学习的东西不仅仅只有表面的 技术,还要深入底层,弄明白下面的 原理,只有这样,我们才能够提高自己的竞争力,在当今这个竞争激烈的世界里立足。

现在竞争这么激烈,只有通过不断学习,提高自己,才能保持竞争力。

对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!

对于一些不知道学习什么,没有一个系统路线的程序员,这里给大家提供一个大概的思路:

  • **架构师筑基必备技能:**深入Java泛型+注解深入浅出+并发编程+数据传输与序列化+Java虚拟机原理+反射与类加载+动态代理+高效IO

  • **Android高级UI与FrameWork源码:**高级UI晋升+Framework内核解析+Android组件内核+数据持久化

  • **360°全方面性能调优:**设计思想与代码质量优化+程序性能优化+开发效率优化

  • **解读开源框架设计思想:**热修复设计+插件化框架解读+组件化框架设计+图片加载框架+网络访问框架设计+RXJava响应式编程框架设计+IOC架构设计+Android架构组件Jetpack

  • **NDK模块开发:**NDK基础知识体系+底层图片处理+音视频开发

  • **微信小程序:**小程序介绍+UI开发+API操作+微信对接

  • **Hybrid 开发与Flutter:**Html5项目实战+Flutter进阶

知识梳理完之后,就需要进行查漏补缺,所以针对这些知识点,我手头上也准备了不少的电子书和笔记,这些笔记将各个知识点进行了完美的总结。

接下来分享的系统学习资源以详解各大互联网公司的 Android 常见面试题为主线,从面试的角度带你介绍必备知识点,以及该知识点在项目中的实际应用

**帮你在现在的基础上,重新梳理和建立 Android 开发的知识体系。**无论是你短期内想提升 Android 内功实力,突破自己工作中的能力瓶颈,还是准备参加 Android 面试,都会在这份资料中有所一些收获。

1.2020大厂面试高频知识点

  • 图片

  • 网络和安全机制

  • 数据库

  • 插件化、模块化、组件化、热修复、增量更新、Gradle

  • 架构设计和设计模式

  • 性能优化

  • Android Framework

  • Android优秀三方库源码

总结

其实要轻松掌握很简单,要点就两个:

  1. 找到一套好的视频资料,紧跟大牛梳理好的知识框架进行学习。
  2. 多练。 (视频优势是互动感强,容易集中注意力)

你不需要是天才,也不需要具备强悍的天赋,只要做到这两点,短期内成功的概率是非常高的。

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。下面资料部分截图是我花费几个月时间整理的,诚意满满:特别适合有3-5年开发经验的Android程序员们学习。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

悍的天赋,只要做到这两点,短期内成功的概率是非常高的。**

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。下面资料部分截图是我花费几个月时间整理的,诚意满满:特别适合有3-5年开发经验的Android程序员们学习。

[外链图片转存中…(img-rqFbEAKa-1714256808256)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 28
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我是一位20多码农,我的IT学习之路从大学时期开始,我就立志要成为一名优秀的程序员。那时,我的专业是计算机科学与技术。我通过自学和师的讲解,掌握了基本的编程语言,如C、C++、Java等。 后来,我开始应聘IT公司的工作。工作中,我更深入地了解了软件开发的流程,了解了各种软件开发工具和框架。我也去了解了计算机硬件的结构,学会了如何优化代码以及如何调试代码。 我还参加了很多培训课程和研讨会。这些课程和研讨会涵盖了各种主题,包括算法、数据库、网络、安全、人工智能等。我也参加了各种技术社区和论坛,了解了最新的技术趋势和应用。 除此之外,我还逐渐形成了自己的学习方法和习惯。我会在业余时间阅读相关的书籍和论文,并进行实践和探索。我还会与其他IT从业者交流,分享经验和发现。 今天,我已成为一名有经验的开发者和技术专。通过积累多的实践经验和持续的学习,我对计算机技术的理解和掌握越来越深入。我相信,在未来的IT学习之路上,我将继续保持热情和学习,迎接新的挑战和机遇。 ### 回答2: 作为20多码农,我一直认为学习是一个持续不断的过程。我第一次接触计算机是在1990,那时我还是一名高中生。那时的计算机技术还很落后,我用的是DOS操作系统,还有些简单的软件和一些基本的编程语言。但是,我对计算机技术的兴趣与日俱增,并在大学里学习了计算机科学专业。在大学里,我学到了关于计算机体系结构、编程语言、数据结构和算法等基础知识。 毕业后,我开始在一软件公司工作,并继续学习新的技术知识。在那里,我学会了C++和Java等高级编程语言,并开始做一些大型软件的开发工作,在这个过程中,我还深入研究了数据结构和算法等领域的知识,这些知识对于设计高效的程序非常重要。 随着互联网的发展,我开始学习一些Web技术,如HTML、CSS、JavaScript和PHP等。我还学习了数据库编程和网络编程等知识,这些技能对于Web应用程序的开发非常重要。 尽管我一直在学习新的技术和编程语言,但我也认为,编程不仅仅是掌握语言和技术知识,还需要不断地学习软件工程、代码设计、测试和维护等方面的知识。事实上,我认为软件工程实践是我职业生涯中最重要的经验之一。通过反复的代码测试、优化和维护,我发现自己的代码质量有了很大的提高,这使我更能够理解代码设计和开发有效的软件系统的重要性。 总的来说,我认为,编程是一个持续不断的学习过程,需要不断地学习新的技术和知识,以保持自己的竞争力。但是,对于一个成功的程序员,仅仅掌握技术知识是不够的。在实践中,我们还需要学习如何设计高效的程序和系统、如何测试和维护代码,并与其他开发人员进行协作和沟通。在每个开发项目的过程中,我们都有机会从错误中学习,以及提高自己的技能和知识。 ### 回答3: 作为一个20多码农,我的IT学习之路可谓是经历了许多风雨,对我来说其中所经历的各种挫折与成长都是不可或缺的。 我的IT学习之路从初中开始,那时我对计算机十分感兴趣,每天放学后都会去学校的计算机教室玩电脑。那时候的电脑是286的机器,比较简陋,但我激动的心情却一直没有减退。初中之后我考入了一所职业高中的计算机专业,那时候,我们上课基本都是在实验室里进行,许多同学开始学习C++语言,我也跟着学习了一段时间,但是很快发现自己还需要更多的基础知识,于是我花了许多时间学习了计算机原理、数据结构、算法等基础知识。 高中毕业后,我考入了一所大学,在那里我又接触了更多的知识领域,例如数据库、网络、操作系统等等。这个阶段的学习是比较理论性的,但它为我后来的职业发展打下了很坚实的基础。 大学毕业后,我开始在一小公司工作,那时候我在实际的工作中学习到了更多的技能,例如如何使用版本控制系统、如何与团队协作、面向对象编程等等。这个阶段的学习很实用,它让我能够真正地将我的理论知识用于实际的工作中。 随着我逐渐成长为一个有经验的工程师,我也学会了如何不断地更新自己的技能。我通过参加各种培训、阅读技术书籍、参与技术社区和开源项目,不断地学习新的技术和知识,并将它们应用于我的工作中,这使我的职业生涯不断上升。 总的来说,我的IT学习之路是一个持续不断的过程,从初中到现在,我始终在不断地学习和成长。在过程中,我体验了挫折,但同时也获得了成就感和满足感。通过持续地学习和更新自己的技能,我们可以不断发掘自己的潜力,实现自己的目标。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值