个人情况

简单介绍一下自己,我是一名末流 985 毕业,自学计算机,如今试图转行Android。浅学过Java、Android,所以基础还算过关。但剩下的 Framework、性能优化、kotlin都是刚入门的水平,仅有一些了解。

关于简历

我的简历没有任何包装,项目经历都是自己做的很简单的东西,技能描述除了java 和 Android 全部写的是 “了解” 字样,不会的都没写、没了解过的也没写、更没有包装工作经验。但这样竟然也通过了简历评估,约了面试。

面试流程

概况

面试流程和网上别人描述的基本一致,问的问题超级多、覆盖知识范围也极广,整个面试下来将近一个小时。

不过问的大部分问题我都不会,或者答得不好,还是准备不够充分吧。

不幸的插曲

约的面试时间是下午 2 点,我提前十分钟进入视频面试系统,但是当自我介绍的时候,我的电脑突然就黑屏了,这次给我弄尴尬了,也很影响心情。我赶快重启电脑,并和面试官说明情况。

自我介绍

介绍了自己的基本情况,比较后悔的一点是没有说自己的项目经验,这直接导致后面面试官没有问我关于项目的任何东西!大家切记,如果有自己项目的话,一定要介绍,要引导面试官去问自己会的东西。

面试题目
  • 自我介绍
  • 讲讲你对 MVVM 的认识?
  • MVVM 的优点有什么呢?
  • MVP 中 Model、View 和 Presenter 的持有关系是怎么样的?
  • MVVM 中的持有关系呢?
  • MVVM 中各个层在 Android 开发中的对应关系?
  • 你的 MVVM 用到了 Jetpack 里的 ViewModel,那么它是如何保持数据的呢?
  • ViewModel 是怎么做到在 Activity 销毁重建新实例之后还能保持不变的呢?
  • 如果用 Kotlin 去调用一个具有返回值的 Java 函数,那么这个返回值是可空的还是非空的呢?
  • Kotlin 中的可见性和 Java 是不一样的,分别讲讲?
  • 你说你用到了协程,讲讲你对于协程的认识?
  • 调用了 cancel() 之后协程的状态变化?
  • 如果子协程中没有通过判断协程状态来决定是否终止工作,那么取消父协程之后会是怎样的?
  • 你提到了协程分为有栈和无栈两种。它们的区别是?
  • 这个“栈”里都保存了什么信息?
  • Kotlin 的协程是无栈的,那这些信息是怎么保存的?
  • 协程该怎么取消呢?
  • 协程会不会和线程一样有共享变量冲突的问题呢?
  • Kotlin 中有一个 inline 关键字,讲讲你的了解?
  • 除了通过内联函数减少函数调用的开销,还有什么用途吗?
  • 如果现在有一个高阶函数被 inline 修饰,我不想让它的参数被内联,该怎么办呢?
  • Kotlin 是可以跨平台编译的,讲讲你的了解?
  • 你刚才提到的编译到“原生平台”,指的是什么?
  • 现在如果让你用 Kotlin 写一个跨平台的项目,你该怎么做?
  • 浏览器里从输入一个网址,到最终看见网页,发生了什么?
  • HTTP 是应用层协议,讲讲是如何建立的?
  • 你说底层是 TCP,那讲讲 TCP 的三次握手?
  • 如果现在要使用 HTTPS,连接的建立会发生什么变化呢?
  • 客户端是如何根据 IP 地址找到服务器对应的主机的呢?
  • LeetCode 518. 零钱兑换 II
结尾

面试官问我有什么问题想问的,我早就被他的问题问傻了。不过还是好奇为什么没问我项目经历,我就问了,结果面试官说忘了。。。

复盘建议

  • 1、大家投简历前(尤其是大厂),还是尽可能准备充分,面经什么的搞起来,不然可能因为准备不到位损失一次面试机会(很多公司都有面试记录)
  • 2、简历要尽力做好(不是做假),好的简历可能会给你带来意想不到的面试机会
  • 3、在自我介绍和回答问题时,学会引导面试官,往自己熟悉的方向和题目带
  • 4、面试前保证设备和环境一切正常,千万不要像我一样因为设备影响了面试

但具体面试的时候问得会有多深,就因人、项目和部门而异了。一般你能答出的题目越深、越详细,面试官可能考察的难度就会更大,当然了,面试通过的概率以及拿到 offer 的薪资水平也会越高。

另外,Android大厂面试中,往往 framework、性能优化是考察的重点,除了光会写代码外,在面试前还是要好好背下八股文的。点击这里即可免费获取!!!

阿里、腾讯、华为、京东、美团、字节跳动、百度、超一线大厂中高级面试题解析合集.jpg
阿里、腾讯、华为、京东、美团、字节跳动、百度、超一线大厂中高级面试题解析合集.jpg

通过失败的面试,我认识到自身的不足,以后坚持学习、不断在面试中发现和改进自己的不足,也祝大家都能在金三银四中拿到心仪的offer,加油!