写给有-Android-开发经验的你们,Android面试基础知识

一个怎样的Android工程师才能进入到大厂呢?下面几个方面往往是需要具备的

###2.1 基础

要想拿到大厂的offer,基础好是一个硬性条件,对于计算机相关专业毕业的同学来说,这些基础就是你大学所学的课程,如果不是计算机相关专业毕业的同学,那么就需要在基础知识这个方面下足功夫了,具体来说下面的东西必须掌握:

  1. 操作系统原理(里面有一些计算机组成原理的知识需要简单掌握)
  2. 网络原理

如果你没有掌握这些知识,或者之前学过,但是忘了怎么办?学啊!怎么学呢?去网上找一些大学的公开课,我是看的清华的,至于哪一个学校的适合你,就只有你自己判断了。可能大家会有疑问,面试会问这些知识吗?直接问的很少,但是只有你了解了这些知识,才能更深入的了解一些技术和知识。举两个例子吧,第一个,如果要做Android里的网络优化,你不知道网络里面的一些原理,你怎么知道怎么优化?如果你不知道UDP和TCP的详细区别,技术选择时,你怎么知道选择哪一个作为你通讯的协议?关于网络还有一个出现概率很高的问题就是TCP的三次握手和四次握手,其实它就是网络原理里面的知识。第二个,操作系统中,内存是发挥什么作用的,又是怎么工作的,知道这些,你再去了解Android的内存管理就信手拈来了。

2.2数据结构和算法

数据结构和算法其实是分开的东西,我们需要先掌握各种数据结构,再去加深算法,数据结构和算法其实也属于基础,但是它现在越来越重要,所以我就单独拿出来说了。数据结构怎么深入同样我也推荐大家去看清华或者浙大《数据结构》公开课,特别是清华的,值得反复研究。至于算法,首先要做的就是动手,LeetCode上直接干!第二阶段就是要总结各种算法的思想和套路,像递归、动态规划等这些算法都是有套路的,在LeetCode上也有按数据结构和算法分类的筛选,大家可以针对性练习和总结。当然,对于一个Android程序员,能做到每天在LeetCode上刷题就非常不错了,所以一定要坚持,等你坚持到一定的时间,你会发现你越来越游刃有余,我从15年底开始在LeetCode上刷题,目前已经刷了200多道了,小米的面试也非常注重算法,还要能写。而且对一些特别注重算法的公司,算法这块的考核非常严苛,对,就是严苛,

2.3设计模式

设计模式中包括了设计原则,其实对于Android开发人员来说,设计模式就那23种,知道并了解这些设计模式是第一个阶段,仅仅是到这个阶段是不够的,一般面试也不会问你某个设计模式的概念,而会让你具体的说说你对某一种设计模式的深入了解和使用,它的优缺点,所以,第二阶段就是要运用它们,其次要和Android源码中运用到设计模式地方进行结合学习。例如建造者模式,Andoird中的Dialog创建就使用到了,还有像单例模式、适配器模式、观察者模式等等都是在Android中非常常用的设计模式,也是在面试中出现频率很高的。

2.4 Java

Java我就来直接一点了,如下:

  1. Java集合(HashMap一般必考,通读源码很有必要)
  2. 反射
  3. 多线程
  4. IO、NIO(可选)
  5. 泛型
  6. JVM相关,如内存的管理、内存的回收、类的的加载等等
  7. Java异常

大家可能觉得这些自己多多少少都了解,但是当问到细节就不知道了,所以对于上面的知识还是需要系统的认知,项目中没有机会深入就自己一个一个突破,比如Java集合,首先对集合要有一个宏观的认知。

从常见类的源码开始动手,如HashMap,循序渐进,逐个击破。从这点也可以看出,我们对每一类知识一定要深入的了解,而不是泛泛的知道,比如Android的一些热修复框架,其中就是JVM中类加载和反射等技术。又比如并发中,线程池和ThreadLocal这些都是必要掌握和熟练使用的知识,也是面试经常会被问到的。

###2.5 Android

Android其实要说的不多,对于一个有工作经验的Android程序员来说,基础的一些Android技术大家都是掌握了的,而如果要做一个加分的Android程序员,下面的Android技术就需要深入了解了:

  1. Android View的绘制和流程
  2. Android触摸事件分发机制
  3. 性能优化(网络、内存、电量、UI)
  4. 常见Android源码,如Handler、AsyncTask等等
  5. 熟悉Binder原理
  6. 了解一些Framework常见知识,如AMS

同样的,这些都是要系统的掌握和运用。

2.6 JNI

JNI其实属于Android NDK中的一个技术点,但是它不像上面的知识需要系统的了解,JNI我们只需要知道Java怎么调用C或C++的代码,C或C++怎么调用Java的代码,并且相互之前怎么传递各种参数(对象),因为一般Android开会不会涉及到写复杂的C或C++代码,我们使用NDK也更多是为了调用第三方的一些C或C++算法库,如FFmpeg。当然,如果你能写得一手好的C或C++代码,那么就更加分了。

2.7 框架和项目

在Android中会经常使用到一些第三方框架,这也是面试中会经常问到的,具体问题就是它们的原理或设计,像LeakCanary、OkHttp等,当然一般只会问你使用过的,在平时我们使用第三方框架的时,就需要去了解他们,仅仅是为了用而用,是面试官不想看到的现象,因为只会用,不懂原理,就不能控制,而是被框架控制。如何去了解呢,首先要知道这个框架怎么用,然后在找入口,从入口一步一步去探索。自己做的项目也和第三方框架类似,你自己参与的项目的架构如果你都不清楚,那么面试官也就知道你对技术的饥渴度了。比如我之前的公司就使用Netty做终端和服务器的通信,在我的简历中也体现了这点,我有信心将它体现到简历上,是因为我花时间去详细了解过Netty,从NIO到Netty,到Netty常用的类,再到一些慨念的了解,如零拷贝、IO多路复用、粘包、拆包等等。所以当你在项目中使用过了,并且被问到时你能很好的说出来,那一定是加分的。

三.其他

其他都是能为你的简历加分(好学历和好工作背景就不说了):

  1. 有开源项目
  2. 参与过开源项目
  3. 有个人博客(有内容、有深度、有价值)

这些也属于一个人的内功,但是它和上面我要提到的还不一样,因为它不是必须,但又有可能很重要。

四.内功小结

大家看我一会就把Android研发人员需要具备的内功总结完了,但是如果你真的要把这些都真正的掌握、变成自己的东西真的不容易。每个人都有自己的目标和梦想,在走向目标和梦想的道路上,肯定有各种各样的困难。只有克服困难,才能继续前行,所以,坚持吧!

五.知识点详细清单

上面我总结的我怕大家还是觉得太泛泛,没有干货,所以再给大家补一个清单:

  • Activity的生命周期
  • Activity的任务栈
  • Activity的启动模式
  • Fragment的生命周期
  • Fragment的通讯,Fragment之间,Fragment和Activity
  • 什么是Service,和Thread的区别
  • Broadcast的作用和注册方式
  • 什么是本地广播

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

总结

算法知识点繁多,企业考察的题目千变万化,面对越来越近的“金九银十”,我给大家准备好了一套比较完善的学习方法,希望能帮助大家在有限的时间里尽可能系统快速的恶补算法,通过高效的学习来提高大家面试中算法模块的通过率。

这一套学习资料既有文字档也有视频,里面不仅仅有关键知识点的整理,还有案例的算法相关部分的讲解,可以帮助大家更好更全面的进行学习,二者搭配起来学习效果会更好。

部分资料展示:




有了这套学习资料,坚持刷题一周,你就会发现自己的算法知识体系有明显的完善,离大厂Offer的距离更加近。

资料获取方法:点赞+关注+转发,然后进入我的【GitHub】,里面有免费获取途径

系有明显的完善,离大厂Offer的距离更加近。**

资料获取方法:点赞+关注+转发,然后进入我的【GitHub】,里面有免费获取途径

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值