热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android开发技巧!给Android程序员的一些面试建议

#Android开发面试的几部分**1、基础知识**基础知识包括几个部分:Java(JDK、JVM)、Android、数据结构和算法、计算机基础、设计模式,有的还会问Flutter

# Android开发面试的几部分
**1、基础知识**
基础知识包括几个部分:Java(JDK、JVM)、Android、数据结构和算法、计算机基础、设计模式,有的还会问Flutter。
![2020Android面经:教你增加拿到BAT等大厂offer几率( 面试技巧)](http://www.icode9.com/i/li/?n=2&i=images/20210711/1626013843552538.jpg)
**Java部分**:
不太推荐这部分只看博客,因为很多博客并不系统也不完整,推荐完整看一遍《深入理解Java虚拟机》这本书,基本上这里面涵盖了JVM相关的所有面试问题,包括内存分区、GC机制、内存模型、锁、字节码、类加载等。JDK的部分会杂一些,基本上可以归类为几种:容器(必问HashMap、CurrentHashMap、ArrayList等)、线程池(必问)、注解、同步工具、动态代理、notify/wait/sleep。这部分可以从一些JDK相关的文章中去整理一遍。
**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等等,这些都可以。开源项目根据面试官的个人经验不同,问的深入程度也不一样,这时候就需要你个人的一些引导技巧,比如面试官可能不是很熟悉这个框架,这时候你能主动表达出这里面设计的一些细节,也能给面试官留下不错的印象。**切忌在简历上写只是用过但是没看过源码的框架。**
![2020Android面经:教你增加拿到BAT等大厂offer几率( 面试技巧)](http://www.icode9.com/i/li/?n=2&i=images/20210711/1626013843243567.jpg)

# 重点项目经历
小厂的项目往往追求业务快速迭代上线,相对比较能容忍一些技术难点,但是这些**技术难点往往是能体现一个人技术能力的**。所以你如果在小厂,就不能过分陷入到业务中,必须跳出来找一些有亮点的技术点,做好做精。这些技术点才是一个程序员安身立命的本钱,否则公司业务陷入困境了,你的价值也就不复存在了。在如何准备面试中项目这部分,小编有几点心得:
**分成三部分:**
1. 为什么要做这个点,
2. 考虑了什么因素并且是如何做的,
3. 取得了什么效果(比如启动速度从1000ms降到200ms,这种具体的数据)
可以把几个小点串起来,这样可以显得更系统和全面一些,比如代码优化和性能优化结合在一起讲。
小厂的一些优化点往往只能做性价比最高的一部分,这时候还可以讲一下业界还有哪些更优的方案
最好再准备一下“如果你没有离职项目中还有有什么不足和可以优化的地方?”(笔者面试中碰到过几次这样的问题)
**小厂跳大厂,技术基础可以准备得很充分,但是项目绝对是一个弱项。**大厂一个App可能就有几十上百人在做,小厂很多所谓的优化在大厂的面试官眼中可能都是他们很早就做过了,这时候项目本身做了哪些东西并不是太重要,需要着重体现你解决问题的思路以及你是一个有追求的程序员,至少你要能做到业界的平均水平,这样才能有机会通过面试。
# 技术以外的东西
大厂面试中技术以外的部分也是非常重要的一部分,这部分大多是一些软技能:
**自我驱动和追求**
这部分主要是在平时工作中的一些自我驱动学习和自主追求一些技术能力,而不仅仅是完成需求就可以了,这样才能体现出你个人的成长性和潜力。
**沟通和协作**
这部分会评估你未来在团队的融入程度以及跟团队跨团队协作和沟通的能力。比如你在工作中是否能正确看待和解决一些跨部门沟通的问题。
# 我的面经总结
主要分为四个方面:
**Android**
1. Android各个版本的特性(例如6.0,动态权限)
2. ANR的原因
3. Android中进程间通信的方式和对比
4. AsyncTask的实现原理及优缺点
5. Handler机制
6. 自定义view三部曲,流程(或者实际场景题,例如实现一个表盘,怎么做)
7. FrameWork层次结构
8. Activity生命周期(A跳转到B,A和B中生命周期的执行顺序)
9. Dvlik、ART、JVM三种虚拟机的区别
10. 能不能在非UI线程更新UI
11. Service和IntentService的区别
12. Thread和HandlerThread的区别
13. Touch事件分发机制
14. 怎么知道一个Activity是否发生了泄露
15. 从点击一个APP图标开始发生了什么
16. Activity启动流程(源码看一遍,能大致讲出来就行)
17. Activity启动模式(四种)
18. Intent启动Activity的方式
19. onStart和onResume的区别
20. LruCache以及实现原理
21. Android中的MVC、MVP、MVVM的区别和联系
22. Parcelable和Serializable的区别
23. Service生命周期
24. Service的启动方式及区别
25. Binder机制
26. onSaveInstanceState和onRestoreInstanceState的调用时机(需要理解,一般会出个场景让你判断)
27. onNewIntent的调用时机(同上)
28. Android中的性能优化和内存优化
29. RxJava说一下(常用操作符,背压,线程切换原理,实际应用)
30. RxAndroid说一下
31. EventBus原理
32. Volley原理
33. OkHttp原理
34. Retrofit原理
35. RxJava和Retrofit结合
36. Dagger2原理
37. 组件化介绍一下(为什么要有组件化,怎么解决合并冲突问题)
38. 快应用介绍一下
39. 屏幕适配的常用方法
40. Service、进程保活
41. Glide原理
42. AsyncTask原理
43. SurfaceView和普通View的区别
44. 依赖注入框架的实现原理
45. Git项目管理
46. 什么是三级缓存
**Java**
1. 常用的设计模式(掌握常见的大约10种就Ok)
2. ThreadLoal的作用及原理
3. 线程的实现方式和实现原理
4. 线程的状态,怎么创建线程,线程状态之间的转化(例如什么情况下线程会由运行变为阻塞)
5. 进程的状态
6. transient关键字的作用
7. sleep()和wait()的区别
8. hashcode()方法的作用
9. ==和equals()方法区别(为什么重写了equals()方法还要重写hashcode方法)
10. Java的三大特性
11. 接口和抽象类的区别
12. 进程和线程的区别
13. 线程池各参数的含义,以及四种常用线程池的应用场景
14. 阻塞队列的特点和原理和应用场景
15. yield()方法的作用
16. 多线程锁的类型,ReentrantLock,Lock,synchrnoized关键字等
17. volatile关键字的作用(在单例中的作用)
18. 闭包的概念
19. 泛型(什么是类型擦除,为什么要有泛型)
20. 锁优化方式(自旋锁、自适应自旋、锁消除、锁粗化、偏向锁)
21. 类执行顺序
22. StringBuffer和StringBuilder的区别
23. HashMap的实现原理(最好是1.8之前和1.8之后都要知道)
24. ConcurrentHashMap的实现原理(同1.8之前和之后都要知道)
25. ArrayList和LinkedList的区别
26. Java内存区域(堆区和栈区的区别,什么是运行时常量池)
27. 装箱和拆箱
28. OOM异常
29. GC机制(GC区域,如何判断一个对象是否可以回收,GC算法,GC策略)
30. 类加载机制(类加载过程双亲委派模型)
31. Java内存模型(主内存与工作内存)
32. 原子性(AtomicInteger原理)、可见性(volatile关键字)、有序性,如何保证
33. 先行发生原则(happens-before原则)
34. 线程安全的实现方法
35. 锁的类型(悲观锁,乐观锁CAS算法,公平锁,非公平锁等怎么实现)
36. StringBuffer和StringBuilder区别
37. 注解(自定义注解)
38. 四种引用的概念和区别
**计算机网络**
1. HTTP协议(头结构,几种请求方法,缓存机制,各版本的区别)
2. HTTPS协议,和HTTP协议的区别,密钥协商的过程,SSL机制
3. 对称加密和非对称加密
4. TCP和UDP的区别
5. TCP的三次握手、四次挥手(包括状态码,以及四次挥手后为什么要等待2*TIME_WAIT)
6. TCP拥塞控制机制
7. TCP滑动窗口机制
8. TCP超时重传机制
9. DNS协议
10. 五层网络模型(物理层,数据链路层,网络层,传输层,应用层)
11. IP头部
12. 在浏览器地址输入一个网址,发生了什么
**数据结构及算法**
1. 链表(单向链表,双向链表)
2. 数组(旋转数组)
3. 队列(双端队列,阻塞队列)
4. 栈
5. 堆(大根堆、小根堆)
6. 二叉树(完全二叉树、满二叉树、二叉排序树、平衡二叉树,红黑树)(深度遍历,层序遍历)
7. 图(重点掌握图的深度优先遍历和广度优先遍历)
8. 七大排序算法(冒泡,选择,插入,归并排序,快速排序,堆排序,希尔排序)
9. 剑指offer上的算法题(能够对照目录,一看题目,能有思路,就ok)
10. 二分查找
11. 两个栈实现一个队列,两个队列实现一个栈
12. 海量数据排序
13. topK问题,有1千万个数,怎么快速找出最大的100个
14. 合并两个有序数组,合并两个有序链表
15. 杨氏矩阵(横向递增,纵向递增)中如何找到指定的数字
16. 翻转一句话,例如I am 3 years old,翻转后,old years 3 am I
17. 有10亿条数据,现在只有200M内存,怎么找出这10亿条数据中出现次数最多的100条数据

### 结尾
**最后,针对上面谈的内容,给大家推荐一个Android资料,应该对大家有用。**
首先是一个知识清单:(对于现在的Android及移动互联网来说,我们需要掌握的技术)
>泛型原理丶反射原理丶Java虚拟机原理丶线程池原理丶
>注解原理丶注解原理丶序列化
>Activity知识体系(Activity的生命周期丶Activity的任务栈丶Activity的启动模式丶View源码丶Fragment内核相关丶service原理等)
>代码框架结构优化(数据结构丶排序算法丶设计模式)
>APP性能优化(用户体验优化丶适配丶代码调优)
>热修复丶热升级丶Hook技术丶IOC架构设计
>NDK(c编程丶C++丶JNI丶LINUX)
>如何提高开发效率?
>MVC丶MVP丶MVVM
>微信小程序
>Hybrid
>Flutter
![](http://www.icode9.com/i/li/?n=2&i=images/20210711/1626013843808461.jpg)
接下来是资料清单:(**敲黑板!!!**)
**领取通道在这里给你们摆上了~**
##### **[点击我的GitHub免费获取](https://github.com/a120464/Android-P7/blob/master/Android%E5%BC%80%E5%8F%91%E4%B8%8D%E4%BC%9A%E8%BF%99%E4%BA%9B%EF%BC%9F%E5%A6%82%E4%BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)**
* * *
**1.数据结构和算法**
![](http://www.icode9.com/i/li/?n=2&i=images/20210711/1626013843536372.jpg)
**2.设计模式**
![](http://www.icode9.com/i/li/?n=2&i=images/20210711/1626013844652363.jpg)
**3.全套体系化高级架构视频**;七大主流技术模块,视频+源码+笔记
![](http://www.icode9.com/i/li/?n=2&i=images/20210711/1626013844269654.jpg)
**4.面试专题资料包**(怎么能少了一份全面的面试题总结呢~)
![](http://www.icode9.com/i/li/?n=2&i=images/20210711/1626013844240299.jpg)
>不论遇到什么困难,都不应该成为我们放弃的理由!共勉~
如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。
![](http://www.icode9.com/i/li/?n=2&i=images/20210711/1626013844463797.jpg)

推荐阅读
  • 本文探讨了如何通过Service Locator模式来简化和优化在B/S架构中的服务命名访问,特别是对于需要频繁访问的服务,如JNDI和XMLNS。该模式通过缓存机制减少了重复查找的成本,并提供了对多种服务的统一访问接口。 ... [详细]
  • 本文是对《敏捷软件开发:原则、模式与实践》一书的深度解析,书中不仅探讨了敏捷方法的核心理念及其应用,还详细介绍了面向对象设计的原则、设计模式的应用技巧及UML的有效使用。 ... [详细]
  • Flutter 核心技术与混合开发模式深入解析
    本文深入探讨了 Flutter 的核心技术,特别是其混合开发模式,包括统一管理模式和三端分离模式,以及混合栈原理。通过对比不同模式的优缺点,帮助开发者选择最适合项目的混合开发策略。 ... [详细]
  • 2023年,Android开发前景如何?25岁还能转行吗?
    近期,关于Android开发行业的讨论在多个平台上热度不减,许多人担忧其未来发展。本文将探讨当前Android开发市场的现状、薪资水平及职业选择建议。 ... [详细]
  • 使用TabActivity实现Android顶部选项卡功能
    本文介绍如何通过继承TabActivity来创建Android应用中的顶部选项卡。通过简单的步骤,您可以轻松地添加多个选项卡,并实现基本的界面切换功能。 ... [详细]
  • JUnit下的测试和suite
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 回顾两年前春节期间的一个个人项目,该项目原本计划参加竞赛,但最终作为练习项目完成。独自完成了从编码到UI设计的全部工作,尽管代码量不大,但仍有一定的参考价值。本文将详细介绍该项目的背景、功能及技术实现。 ... [详细]
  • importjava.io.*;importjava.util.*;publicclass五子棋游戏{staticintm1;staticintn1;staticfinalintS ... [详细]
  • 深入解析WebP图片格式及其应用
    随着互联网技术的发展,无论是PC端还是移动端,图片数据流量占据了很大比重。尤其在高分辨率屏幕普及的背景下,如何在保证图片质量的同时减少文件大小,成为了亟待解决的问题。本文将详细介绍Google推出的WebP图片格式,探讨其在实际项目中的应用及优化策略。 ... [详细]
  • 本文详细介绍了在 CentOS 系统中如何创建和管理 SWAP 分区,包括临时创建交换文件、永久性增加交换空间的方法,以及如何手动释放内存缓存。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 本文介绍了如何通过命令行有效地终止所有 Node.js 进程实例,以解决因端口冲突或其他服务冲突导致的问题。 ... [详细]
  • 入门指南:使用FastRPC技术连接Qualcomm Hexagon DSP
    本文旨在为初学者提供关于如何使用FastRPC技术连接Qualcomm Hexagon DSP的基础知识。FastRPC技术允许开发者在本地客户端实现远程调用,从而简化Hexagon DSP的开发和调试过程。 ... [详细]
  • 在OpenCV 3.1.0中实现SIFT与SURF特征检测
    本文介绍如何在OpenCV 3.1.0版本中通过Python 2.7环境使用SIFT和SURF算法进行图像特征点检测。由于这些高级功能在OpenCV 3.0.0及更高版本中被移至额外的contrib模块,因此需要特别处理才能正常使用。 ... [详细]
author-avatar
jiaqi
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有