IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android面经:从小厂跳大厂,【工作感悟】 -> 正文阅读

[移动开发]Android面经:从小厂跳大厂,【工作感悟】

Android开发面试的几部分

1、基础知识

基础知识包括几个部分:Java(JDK、JVM)、Android、数据结构和算法、计算机基础、设计模式。

Java部分:

不太推荐这部分只看博客,因为很多博客并不系统也不完整,推荐完整看一遍《深入理解Java虚拟机》这本书,基本上这里面涵盖了JVM相关的所有面试问题,包括内存分区、GC机制、内存模型、锁、字节码、类加载等。

JDK的部分会杂一些,基本上可以归类为几种:容器(必问HashMap、CurrentHashMap、ArrayList等)、线程池(必问)、注解、同步工具、动态代理、notify/wait/sleep。这部分可以从一些JDK相关的文章中去整理一遍。

Android部分:

建议看《Android开发艺术探索》,最重要的一点是要跟着源码读这本书,书中篇幅所限,很多源码只有部分,只看书的话并不能理解很多机制是怎么样,只有读源码才能完全理解吃透,但是读源码的时候最好是找到线索即可,切忌陷入到具体的逻辑里面不能自拔。

这部分必问的是Handler机制、触摸事件传递、四大组件启动流程、View绘制流程、Binder机制、生命周期。需要彻底读懂源码,这样才能解答很多灵活变通的问题。

经典的问题比如:

  • 触摸事件一定是先传递到Activity然后才传递给View的么?

  • 如果要在Application的onCreate生命周期之前执行一些逻辑,可以放在哪里?

  • draw、onDraw、dispatchDraw执行的顺序如何?

  • View真正显示是在onResume之前还是之后?

  • Activity中嵌套有一个Fragment,startActivity之后,Activity和Fragment的生命周期顺序是如何的?

这些问题可能在不同的面试官会有不同的变形,只有亲自读懂了源码才可以应付这些问题,切忌从一些博客上看到只言片语就以为准备万全了,博客只能作为参考。最重要是源码,源码,源码!

数据结构与算法:

这部分在客户端开发中考察的比例会小一些,不过也有很多公司非常重视手写代码。经常碰到的问题有二叉树遍历、有序二维数组查找,排序等,基本上以《剑指offer》或者《编程之美》为准就可以了。

计算机基础:

这部分涵盖的比较杂,比如计算机网络(7层网络模型、Http和Https)、git工作流和命令、计算机缓存策略、UML、信息安全等等。

设计模式:

在自己的项目中一定要多总结和使用设计模式,面试官问你使用过什么设计模式的时候,如果能回答出比如状态模式、责任链、装饰等等,肯定会加分不少。如果只是回答单例和建造者模式,那就会逊色多了。这部分推荐看《研磨设计模式》。

开源项目:

这个也是必问的环节之一,建议从自己项目使用的开源项目入手,跟着代码,画一遍流程图和架构图,仔细体会这里面设计的优点和缺点。比如OkHttp、LeakCanery等等,这些都可以。开源项目根据面试官的个人经验不同,问的深入程度也不一样,这时候就需要你个人的一些引导技巧,比如面试官可能不是很熟悉这个框架,这时候你能主动表达出这里面设计的一些细节,也能给面试官留下不错的印象。切忌在简历上写只是用过但是没看过源码的框架。

一些不错的博客推荐

基础知识梳理:泽毛
https://www.jianshu.com/u/37baa8a86582

开源框架鉴赏系列:苏策
https://juejin.im/user/5886d699128fe1006c455fb6/posts

系统源码介绍:袁辉辉大佬
http://gityuan.com/page4/

一些面经面试题整理:
https://www.jianshu.com/p/20754b1adb4d

重点项目经历

小厂的项目往往追求业务快速迭代上线,相对比较能容忍一些技术难点,但是这些技术难点往往是能体现一个人技术能力的。

所以你如果在小厂,就不能过分陷入到业务中,必须跳出来找一些有亮点的技术点,做好做精。这些技术点才是一个程序员安身立命的本钱,否则公司业务陷入困境了,你的价值也就不复存在了。在如何准备面试中项目这部分,笔者有几点心得:

  1. 分成三部分:为什么要做这个点,考虑了什么因素并且是如何做的,取得了什么效果(比如启动速度从1000ms降到200ms,这种具体的数据)

  2. 可以把几个小点串起来,这样可以显得更系统和全面一些,比如代码优化和性能优化结合在一起讲。

  3. 小厂的一些优化点往往只能做性价比最高的一部分,这时候还可以讲一下业界还有哪些更优的方案

  4. 最好再准备一下“如果你没有离职项目中还有有什么不足和可以优化的地方?”(笔者面试中碰到过几次这样的问题)

小厂跳大厂,技术基础可以准备得很充分,但是项目绝对是一个弱项。大厂一个App可能就有几十上百人在做,小厂很多所谓的优化在大厂的面试官眼中可能都是他们很早就做过了,这时候项目本身做了哪些东西并不是太重要,需要着重体现你解决问题的思路以及你是一个有追求的程序员,至少你要能做到业界的平均水平,这样才能有机会通过面试。

开放式设计思路

开放式的设计问题需要融会贯通数据结构、设计模式和架构设计等方面的知识,这部分没有固定的答案,笔者总结了一下这些问题可以套用的几个解决问题的思路:

分治法

分治法是现代程序设计中非常重要的一个原则,主要是把大问题化解成小问题,再在小问题中去解决各自的问题。

分层法

把一个大的系统进行分层,比如View层-Controller层-Model层。把一个大的问题,划分成几个层次,每个层次的职责和层次之间之间数据流定义清楚,然后再在各个层次中去实现。

套用常见的模型

比如生产者消费者模型,“池”的模型(例如线程池、对象池)、缓存模型(LRU)等。

比较常见的开放式设计思路问题有如何设计一个网络图片加载框架、如何设计一个文件下载系统、如何设计一个IM组件等等。

这些问题都是非常大的问题,比如图片加载框架就可以套用分层法去化解,参考fresco的设计,划分成View-Controler-DataSource这样的层次。大量文件的下载系统可以套用线程池的模型去设计,这里就不再展开讲了。

技术以外的东西

最后

简历首选内推方式,速度快,效率高啊!然后可以在拉钩,boss,脉脉,大街上看看。简历上写道熟悉什么技术就一定要去熟悉它,不然被问到不会很尴尬!做过什么项目,即使项目体量不大,但也一定要熟悉实现原理!不是你负责的部分,也可以看看同事是怎么实现的,换你来做你会怎么做?做过什么,会什么是广度问题,取决于项目内容。但做过什么,达到怎样一个境界,这是深度问题,和个人学习能力和解决问题的态度有关了。大公司看深度,小公司看广度。大公司面试你会的,小公司面试他们用到的你会不会,也就是岗位匹配度。

选定你想去的几家公司后,先去一些小的公司练练,学习下面试技巧,总结下,也算是熟悉下面试氛围,平时和同事或者产品PK时可以讲得头头是道,思路清晰至极,到了现场真的不一样,怎么描述你所做的一切,这绝对是个学术性问题!

面试过程一定要有礼貌!即使你觉得面试官不尊重你,经常打断你的讲解,或者你觉得他不如你,问的问题缺乏专业水平,你也一定要尊重他,谁叫现在是他选择你,等你拿到offer后就是你选择他了。

金九银十面试季,跳槽季,整理面试题已经成了我多年的习惯!在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

本文在开源项目:【CodeChina】中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…

【CodeChina】中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…**

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-07 10:56:29  更:2021-09-07 10:57:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:53:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码