【Android 面经分享】阿里技术专家的 5年 Android 开发的求职之路

news2024/11/27 18:29:10

作者:yechaoa
来源:https://juejin.cn/post/6996551155220217869

前言

前段时间在看机会,本文就是我对求职过程的一个总结。

同时,也作为一个面试官,来说说求职中需要注意的点。

  • 各大厂的面试会考核哪些知识点
  • 5年开发应该具备哪些技术要点
  • 当下市场行情如何,真的很卷吗
  • 写简历需要注意什么
  • 自我介绍怎么准备
  • 关于为什么离职
  • 未来职业规划问题如何避坑
  • 被问到自闭,如何调整心态
  • 我个人的学习方法
  • 其他注意事项

面试题

先上主菜

一面技术

京东

  1. GC原理,有哪几种GC方式
  2. HashMap原理
  3. Hybrid开发流程、机制
  4. WebView内存泄露
  5. 包体积优化
  6. 自定义View需要注意哪些
  7. 事件分发机制
  8. ViewModel原理
  9. 屏幕旋转ViewModel怎么做到保存数据的
  10. LiveData原理
  11. Flutter线程机制,单线程多线程
  12. 组件化开发
  13. 介绍一个自己的开源项目
  14. 有参与过别人的开源项目吗

字节跳动

  1. 浏览器输入一个地址,按下回车,这个过程是什么样的
  2. 简单介绍一下TCP
  3. 简单介绍一下Https
  4. 说说对称加密和非对称加密,说说公钥
  5. 并发操作如何保证线程安全
  6. 锁有哪些
  7. 简单介绍一下HashMap
  8. Arraylist是线程安全的吗
  9. 知道CAS、原子性吗
  10. AtomicBoolean和boolean的区别
  11. 用过哪些设计模式
  12. 介绍一下观察者模式
  13. 用过哪些排序算法
  14. 介绍一下贪心算法
  15. 介绍一下快排原理
  16. 算法,给定一个有序不重复数组,使用时间复杂度小于N方的方法,找到所有两两相加等于target值的组合:

int[] a={1,2,3,4,5,6,7,8} int target=7

美团

  1. Java对象生命周期
  2. GC机制
  3. Glide缓存机制
  4. Glide对Bitmap是怎么优化的
  5. Okhttp请求流程
  6. Retrofit中的设计模式
  7. App启动流程
  8. Apk打包流程
  9. 重构做了哪些工作
  10. 内存泄露,举例场景
  11. LeakCanary实现原理
  12. Handler消息机制
  13. 线程有哪些状态
  14. Hybrid开发介绍
  15. Js功底怎么样
  16. 未来职业规划

哔哩哔哩

  1. MVC,MVP,MVVM的区别
  2. 使用MVVM有遇到什么问题吗
  3. 协程原理
  4. 协程并发怎么处理的
  5. 热修复原理
  6. 用热修复的过程中有遇到什么问题吗
  7. 启动优化
  8. 包体积优化
  9. 绘制优化
  10. 全埋点是怎么做的
  11. Apk更新流程
  12. 多渠道打包
  13. 怎么辨别华为的包更新别的应用市场的包
  14. 算法,插入排序原理

声网

  1. 觉得做的最好的项目
  2. Jetpack用了哪些组件
  3. ViewModel如何数据共享
  4. ViewModel在Activity旋转时如何保存数据的
  5. ViewModel怎么创建的,存在哪
  6. 使用ViewModel过程中有没有遇到什么问题
  7. LiveData原理,怎么派发数据的
  8. postValue是怎么执行的
  9. 使用LiveData的过程中有没有遇到什么问题
  10. 自定义View有哪些注意事项
  11. 简单介绍一下协程
  12. 多个协程怎么保证数据安全的
  13. 算法,输入(H₂O) ×2,输出h4o2

掌门教育

  1. 笔试逻辑题
  2. Java有哪些数据结构
  3. Arraylist是线程安全的吗
  4. String,StringBuilde,StringBuffer的区别
  5. Java中的锁介绍一下,同步锁举例
  6. 四大引用区别,场景举例
  7. Activity生命周期
  8. Fragment生命周期
  9. Fragment销毁生命周期执行顺序
  10. 自定义流程,举例
  11. 自定义View刷新方式有哪些,执行流程
  12. 事件分发原理,举例,延伸
  13. 滑动冲突怎么解决
  14. 怎么自己实现一个长按事件
  15. Service是哪个线程,怎么通信
  16. Handler消息机制
  17. Handler发送消息是一定立即执行的吗
  18. Handler运行在哪个线程
  19. 子线程可以创建Handler吗,写法有哪些区别
  20. Kotlin定义变量的方式有哪些
  21. lateinit怎么确保使用时已经初始化
  22. let,run,apply介绍,区别
  23. inline原理
  24. 简单介绍下协程
  25. 协程并发怎么处理
  26. 协程底层是怎么实现的
  27. 内存泄露原理,举例场景
  28. 启动优化

传音控股

  1. 做的最有成就感的项目是哪个
  2. 印象最深刻的项目是哪个
  3. LiveData底层实现原理
  4. 启动优化
  5. 包体积优化
  6. 自定义View流程
  7. View异步加载
  8. 有用过哪些设计模式
  9. 介绍一下单例,饿汉式,懒汉式,双重锁
  10. 代理模式和装饰模式的区别
  11. 策略模式和状态模式的区别
  12. 说说观察者模式
  13. 有看过哪些三方库的源码
  14. Glide四层缓存机制
  15. AMS了解多少

得物

  1. 简单介绍一下HashMap
  2. HashMap调用put的执行流程
  3. Activity启动流程
  4. Binder机制
  5. Handler消息机制
  6. Handler是怎么实现主线程和子线程的通信的
  7. Looper卡死为什么不会造成主线程的阻塞
  8. 了解过内存泄露吗
  9. 是怎么发现内存泄露的,怎么处理的
  10. 线上的内存泄露是怎么监控的
  11. LeakCanary实现原理
  12. 软引用和弱引用的区别
  13. 了解过ANR吗
  14. 什么原因会造成ANR
  15. Activity的响应时间为什么是5s
  16. 事件分发机制
  17. 怎么解决滑动冲突的
  18. 录音功能是怎么做的
  19. 编码解码相关
  20. 包体积优化做了哪些工作

哈啰出行

  1. 挑一个项目详细说一下,以及相关技术栈
  2. 介绍一下协程机制
  3. 说一下Dispatchers,withContext,Scope他们的作用
  4. 说一下你理解的MVP,MVVM
  5. Flutter相关
  6. 性能优化做了哪些工作
  7. 编译速度怎么提升的
  8. 内存泄露
  9. LeakCanary检测原理
  10. 热修复,Sophix原理,ClassLoader
  11. Apk打包流程
  12. 多线程并发,如何保证线程安全
  13. synchronized修饰方法和修饰代码块有什么区别

小红书

  1. 技术调研你是怎么做的,会考虑哪些因素
  2. 说一下MVVM
  3. 用过Jetpack中的哪些组件
  4. LiveData是怎么做数据派发的
  5. ViewModel屏幕旋转的时候怎么做到不丢失数据的
  6. 使用MVVM的过程中有遇到什么问题吗
  7. 性能优化做了哪些工作
  8. 内存泄露有哪些场景
  9. LeakCanary检测原理
  10. 如果让你做一个自动化的工具去检测图片过大并自动压缩你会怎么做
  11. 自定义View画板是怎么做的
  12. 怎么检测页面的FPS
  13. Handler在onCreate中发送大量数据会导致主线程卡顿吗
  14. LayoutInflater.inflate有几个参数,分别是什么意思

其他厂整理补充

  1. Android中的Context了解多少
  2. Application里面可以弹窗吗
  3. Activity、Window、View三者的关系
  4. OkHttp中有哪些设计模式
  5. Retrofit中有哪些设计模式
  6. Retrofit.create做了哪些工作
  7. 自定义一个圆角View
  8. 协程launch有哪些参数
  9. 说说by关键字
  10. 代理和委托的区别
  11. 双亲委托模式
  12. 有几种获取view宽高的方式
  13. view.post为什么可以获取到
  14. getWidth和getMesureWidth的区别
  15. 手写遍历二叉树
  16. 手写双重锁单例
  17. 手写插入排序
  18. 手写双数组去重并排序
  19. 如何判断链表有环

还有一些公司的没有记,比如蔚来、中欧基金、阿里等,如果上面这些你能掌握大部分,自然也不在话下。

二面、三面技术

都是偏项目和综合能力,因人而异就直接整理了。

  1. 你负责项目中的哪些模块
  2. 介绍一下xx功能的流程
  3. 项目的架构是怎样的
  4. Kotlin和Java混编有哪些需要注意的
  5. 项目中有遇到哪些难点
  6. 如果让你重构,你会怎么做
  7. 学习的途径有哪些
  8. 你觉得什么样的代码是好代码
  9. 团队是怎么分工的
  10. 怎么做需求管理
  11. 期望什么样的团队
  12. 怎么看待大前端方向
  13. 一个新技术如何在团队里推广
  14. 未来的规划是什么,你打算怎么实现
  15. 认为自己的优点是什么,缺点是什么
  16. 为什么离职

HR面

整理。

  1. 为什么离职
  2. 介绍一下过往的工作经历
  3. 在上家公司你有什么收获吗
  4. 目前看机会会考虑哪些因素
  5. 你在之前的团队中是怎样一个角色
  6. 有什么兴趣爱好吗
  7. 最有成就感的一件事
  8. 有没有做过什么不可思议的事
  9. 你认为自己的优点是什么
  10. 最近有在看什么书吗,有什么感想
  11. 你一般遇到问题都是怎么解决的
  12. 未来的职业规划是什么
  13. 你对未来的公司有什么期望吗
  14. 目前薪资
  15. 期望薪资
  16. 还有什么想要问我的吗

技术要点

针对上面的问题,我总结了一下面试前需要掌握的一些知识点:

  1. Java基础、Kotlin基础、Android基础( 重要
  2. App启动流程
  3. Handler消息机制
  4. View绘制流程
  5. 事件分发机制
  6. Jetpack常用组件原理
  7. Kotlin协程原理
  8. 性能优化
  9. 多线程、并发
  10. 组件化开发
  11. 热修复原理
  12. 常用三方库原理
  13. 常见的设计模式
  14. 数据结构和算法

建议面前多练练手写算法,最好是拿笔在纸上写。

关于算法,不过是基于数据结构去操作数据的思想而已。 如果说限制了复杂度而想不出来的话,可以先写再看如何优化。

Author : yechaoa

市场行情

目前并不是招聘旺季,但机会还是有的。

可能有些同学看了上面的面试题觉得卷,正常的。

现在市场越来越成熟稳定,对面试者的要求也更高,加上技术更新又快,从Java到Kotlin、到Flutter、到Compose等等,确实有很多东西要学,很多同学都表示学不动了,我觉得,盲目跟风不如好好沉淀。

另外,再从面试官的角度聊聊。

虽然说大部分面试确实是各种底层实现、底层原理、手写算法什么的,不过作为面试官来说,其实有些也并不是要你都掌握的,问的深,一方面是校验八股文,另一方面主要是技术摸底,看看你的技术边际在哪,所以说,一场面试下来,能答上大部分即是通过了,当然,越多越加分。

只要技术够硬,都是机会。

如何写好简历

简历是开启面试的第一步,重要性不言而喻,一方面反应你的实力,另一方面也反应跟目标岗位的匹配度,不过很多JD都是复制粘贴,我个人也没有动态改简历。

如何写好简历,一定要简洁且突出重点。我也面过不少人了,看过7-8页的简历,有些项目经历是没必要全都往上写的,面试官也看不过来,最好是保持在3页左右比较合适,项目经历比较丰富的同学,可以挑重点来写。

我个人简历大概模板:

  • 个人信息
  • 技能清单
  • 工作经历/项目经历
  • 开源项目/博客
  • 教育经历

我是MD排版,PDF格式,参考模板

投简历时有一个建议,不要开放简历,要主动投递。开放简历会有各种邀请面试,也不好拒绝,就可能会因为没准备好而错失一些机会。可以先去其他公司找找感觉,再面心仪的公司。

另外,一定要对自己简历上写的东西做到熟练,没用过的,不会的就别写了,万一问了不会,就是在给自己挖坑。

自我介绍

自我介绍需要好好准备,因为这可能是你整个面试环节中唯一的主动机会,也是引导面试官的第一步,可以介绍最近的项目经历啥的,以及相关技术栈等等,引导面试官往你擅长的领域提问。

挑重点不要啰嗦,时间控制在两分钟左右。

离职原因

这个其实大家都心知肚明,但是回答的时候还是委婉些的好,不抱怨原则。

不过HR总是有很多种问法,比如:

  • 你在上家公司才做了一年多,为什么选择离职呢?
  • 你在上家公司已经做了四年多,为什么选择离职呢?

回答建议:

  • 想去更好的平台
  • 薪资与个人付出不成正比
  • 公司业务方向与个人职业规划出现偏离

关于公司倒闭,我个人觉得没问题,但如果是干一家倒一家,那HR可能会否你…

职业规划

很多都会问这个问题,相似问题,你最近在学什么技术,看什么书。

这块很多同学其实会放松警惕,看似无关紧要,实则暗藏玄机,因为在求职过程中,在学在看的,可能是自己薄弱的地方。

比如你说未来想研究一下主流三方库的源码,学习优秀的设计理念,看似好像很努力很上进,其实面试官听到的是,主流三方库我只会用,不知道原理,我就是个API调用师。(尬不尬?)

所以这块的回答一定要有深度或者广度,要有想象空间,但是不能太离谱,需要好好斟酌。

回答建议:

  • 技术方向:要么全要么精,全栈或细分领域专家
  • 管理方向:有较强的沟通能力、协作能力,希望能做团队的领头羊

关于心态

  • 准备前,可能有些同学看到面试题已经不自信了,感觉自己一半都答不上来,这是正常的,人的记忆是有限的,慢慢复习就好了,放平心态。
  • 面试中,可能有些同学会被问到自闭,其实大可不必,东边不亮西边亮,总有面试官会挖掘出你的亮点。而且面试中除了技术之外,也有很多客观因素,比如面试官的心情、你的状态等等。
  • 面试后,好与坏都坦然接受,及时做好复盘,查漏补缺,才能在下一次面试中有更好的发挥,这也是一个愈战愈勇的过程。

学习方法

我个人是梳理知识树,不会的就去补充,制定学习计划。

我个人的学习方式:

  1. 看官方文档,比如Kotlin文档,第一遍快读,有个大概印象,第二遍精读,关注一些细节。
  2. 看书,还是Kotlin,先快读,再重点精读。我觉得比看视频方便,可以划重点记笔记,随时可以停下来进入思考状态,也很方便反复阅读,主要是没有干扰。
  3. 看相关开源项目,学习优秀的设计理念、代码风格,三人行必有我师。
  4. 看一些针对性的博客。
  5. 实践 ,这个很重要,纸上得来终觉浅,绝知此事要躬行。

其他注意事项

  • 尽量不要迟到,不管是现场还是视频。
  • 如果是现场面试,记得关注当天的天气,提前查一下路线。
  • 如果要修改面试时间,提前一天跟HR沟通。
  • 如果不去,不要直接放鸽子,跟HR说一声。
  • 手机电量保持充足,面前可以临阵磨枪。
  • 面试登记,字尽量写的好认一些,个人作为面试官时,不好认的扣分,字如其人,代码同理。
  • 不要作假,编造一个谎言往往需要更多的谎言去圆它。
  • 大厂一般面试周期较长,注意时间安排。
  • 保持自信,保持自信,保持自信。

寄语

多思考,看问题尽量看透本质。

技术上的问题都能找到解决办法,如何在思维上打通才是需要思考的。

举个例子:

说一下Android系统启动流程。

可能很多同学对这个问题没有头绪,或者看了也记不住。

回想一下Android平台架构,相信大家对下面这张图应该是很熟悉了。

image

ok,再次回到问题,简单流程就是从电源键触发唤醒Linux内核,然后虚拟机、Framework,最后System Apps。

先理解大致流程,再去串联细节,比如其中涉及到的Zygote、AMS、Launcher等等。

最后

ok,终于啰嗦完了,不过句句发自肺腑,真心希望能帮助到一些同学。

祝大家都能在心仪的公司,拿着不错的薪水,开心的写bug~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/537979.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能Python-pycharm取消venv

PyCharm取消venv:一种更简便的虚拟环境管理方式 虚拟环境是Python开发中的重要组成部分之一。它可以让您在同一台机器上使用不同的Python版本、不同的库以及不同的项目而不会干扰彼此之间的功能独立性。而在Python开发中,venv是创建虚拟环境的常用方式之…

chatgpt赋能Python-pycharm怎么关联

Pycharm怎么关联——提高Python开发效率的关键步骤 作为一名有10年Python编程经验的工程师,我深知在日常开发中如何提高Python的编程效率至关重要。而Pycharm则是Python领域最常用的IDE之一,其强大的代码编辑和调试功能,深受开发者的喜爱。 …

Linux驱动开发 --- CCF时钟框架

0. CCF时钟框架概览 linux内核的CCF时钟框架可以分为三层,每一层的职责以及彼此的关系如下图所示 对CCF框架的分析也将以如下几个方向入手: consumer(也就是device driver)如何使用CCFprovider如何借助CCF管理系统的时钟资源CC…

前端BFC

一、首先我们要先了解常见的定位方案,总共3种(普通流、浮动、绝对定位) 而BFC是属于普通流的 我们可以把BFC看作为页面的一块渲染区域,他有着自己的渲染规则 简单来说BFC可以看作元素的一种属性,当元素拥有了BFC属性…

ChatGPT:2. 使用OpenAI创建自己的AI网站:1. 初探API

使用OpenAI创建自己的AI网站 如果你还是一个OpenAI的小白,有OpenAI的账号,但想调用OpenAI的API搞一些有意思的事,那么这一系列的教程将仔细的为你讲解如何使用OpenAI的API制作属于自己的AI网站。博主只能利用下班时间更新,进度慢…

自学spring个人笔记

目录 如何学习spring? 如何查看自己电脑是否安装了spring boot Spring Boot CLI安装成功 springboot的版本2.7.12(SNAPSHOT)与2.7.11有什么区别? 报错解决 Plugin org.springframework.boot:spring-boot-maven-plugin:not found 在maven pom.xml中…

【AFNetWorking源码(二)AFURLSessionManger和AFHTTPSessionManager】

前言 学习了Mananger的初始化和以GET请求为例的过程,发现整个过程离不开AFHTTPSessionManager和AFURLSessionManger的某些方法。这两个是AFN的重要的网络通信模块内容,对它们作揖详细的学习。 AFURLSessionManager和AFHTTPSessionManager都是AFNetwork…

chatgpt赋能Python-mac电脑安装python

在Mac电脑上轻松安装Python Python是一种高级编程语言,常用于数据科学、机器学习和Web开发等领域。如果你是一名Mac电脑用户,那么安装Python将会让你受益匪浅。本文将提供详细的操作步骤,让你轻松安装Python并开始学习编程。 第一步&#x…

【Linux】进程地址空间(带你认清内存的本质)

🔥🔥 欢迎来到小林的博客!!       🛰️博客主页:✈️小林爱敲代码       🛰️博客专栏:✈️Linux之路       🛰️社区 :✈️ 进步学堂       &a…

Linux:chmod chown 权限管理

基础权限有以下三个 r 读 4 w 写 2 x 执行 1 - 无此权限 0 开头的第一个字母是这个的类型 d 目录 - 普通文件 l 链接文件 常见的三种 只不过今天不讲这个 从第二个字母开始看起 三个字母为一组 一共…

【EfficientDet】《EfficientDet:Scalable and Efficient Object Detection》

CVPR-2020 文章目录 1 Background and Motivation2 Related Work3 Advantages / Contributions4 Method4.1 BiFPN4.2 EfficientDet 5 Experiments5.1 Datasets5.2 EfficientDet for Object Detection5.3 EfficientDet for Semantic Segmentation5.4 Ablation Study 6 Conclusio…

RocketMQ你不得不了解的 Rebalance机制源码分析

这里是weihubeats,觉得文章不错可以关注公众号小奏技术,文章首发。拒绝营销号,拒绝标题党 RocketMQ版本 version: 5.1.0 RocketMQ中consumer消费模型 在了解RocketMQ的Rebalance机制之前,我们必须先简单了解下rocketmq的消费模型 我们知道…

chatgpt赋能Python-left函数_python

Left 函数在Python中的使用及其优点 在Python编程语言中,字符串处理是不可避免的任务。Python提供了许多内置函数来处理字符串,其中left()函数是其中一个非常重要的函数。本文将介绍left()函数的用法、优点和一些实例,以便更好的理解该函数。…

redis高级篇(2)---主从

一)搭建主从架构: 单节点Redis的并发能力是有限的,所以说要想进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离,因为对于Redis来说大部分都是读多写少的场景,更多的要进行读的压力,最基本都要是…

【Android学习专题】java基本语法和概念(学习记录)

学习记录来自菜鸟教程 Java 变量 Java 中主要有如下几种类型的变量 局部变量 在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁类变量(静态变量) 类变量也声…

chatgpt赋能Python-libreoffice_python宏

介绍 LibreOffice是一套免费开源的办公软件,其中包含一个强大的Python宏系统,可以使用Python编写脚本来增强办公软件的功能。本文将介绍LibreOffice Python宏是什么,如何使用Python编写宏,并提供一些示例,以便读者可以…

去付款--支付宝沙箱的简单测试

alipay-demo 进入开发者中心–开发工具–沙箱–设置公钥 搜索电脑网上支付–查看Demo–查看配置类–查看业务逻辑 我们的基础配置类主要是初始化我们的alipay客户端 真正去付款的时候是提交了一个form表单达到一个真正的支付jsp,java代码首先初始化我买的Alipay客户端&#xf…

瑞吉外卖 - 新增分类功能(11)

某马瑞吉外卖单体架构项目完整开发文档,基于 Spring Boot 2.7.11 JDK 11。预计 5 月 20 日前更新完成,有需要的胖友记得一键三连,关注主页 “瑞吉外卖” 专栏获取最新文章。 相关资料:https://pan.baidu.com/s/1rO1Vytcp67mcw-PD…

网安学习踩坑经验篇

回想学习网络安全一年来,踩了不少坑走了不少弯路,在此稍作总结,希望可以帮助那些想要入门 web 安全或者是想打CTF的同学们一些建议 坑点 先总结一下,我在学习中遇到的坑点 只看视频,眼高手低,不练习&…

【嵌入式Linux】设备树基本语法

设备树基本语法 1_总领-本期设备树视频要怎么讲?讲什么?_哔哩哔哩_bilibili 基本的 特殊的 中断控制 描述GIC控制器 时钟 CPU GPIO 个数,保留范围(起始、长度),个数对应的名字 GPIO映射-这个脚被用了换一…