低学历没饭吃?一个老Android的心酸面试历程,同是六年菜鸟偏偏我最难熬

前言

因为公司要搬离上海,所以只能出来找工作了,这段时间被虐的够惨的,一个学历就被搞死了,同事工作经验跟我差不多,都是6年的老菜鸟,本科,投了10家面了两家,我投了几十家暂时才面了3家,差距,谁在跟我说学历不是问题,我一砖头拍不死他丫的。废话不多说了,总结了一下:

第一家:A公司 100~500人左右

笔试题:

  1. broadcast 的两种注册方式,两者的区别?LocalBroadcast是什么,实现原理是什么?

  2. Handler Looper Message MessageQueue的原理

  3. 事件传递机制 笔试的话就把网上的那个经典的图画上去就好了,如果不知道的话,自己百度一下好了

  4. 手写快速排序 伪代码实现就好了

  5. 性能优化(先考虑,面试的时候问的)

面试题:

  1. 自我介绍,我一般都是讲讲最近一个项目做的内容,讲讲为什么这么做。

  2. OkHttp的原理,UrlConnection和OkHttp之间的关系

  3. LruCache内部实现

  4. Retrofit的实现,为什么要用动态代理来处理

  5. 讲了一下公司项目里面涉及到录屏的功能,大致讲了一下帧率的控制和音视频的同步问题 (从后面的面试看来,这个一般不会怎么问,毕竟Android搞音视频的还不多)

  6. 组件化,公司项目里组件化,所以就讲了一下如何组件化重构代码,怎么做组件之间通讯的

  7. 插件化原理,公司项目里没怎么用到过,就简单的描述了一下dexclassloader和利用反射机制拿到AssestManager去加载apk中的资源

  8. 约束布局的用法,以及约束布局的内部实现(这个真心不知道,GG了)

  9. 滑动冲突的解决办法(内部拦截和外部拦截)

  10. MediaCodec的版本兼容问题

  11. Android 8.0版本兼容问题(没仔细考虑过,GG了)

  12. 项目里面的IM是怎么实现的,我们当时用的是MQTT的一个开源jar包实现的,他也没细问,估计不是他想要的答案吧

  13. 怎么做内存泄漏检测和滑动卡顿检测的

  14. touch事件的传递机制又问了一遍(我后面面试的公司都问了这个东西,很重要,要彻底吃透他,最好自己写个demo,不同的返回值,看看效果)

最后的结果就是GG了,我也不知道为什么....

第二家:B公司 几个人

没问技术,就问了一下项目和期望薪资,然后说后面再约技术面,估计嫌弃工资开高了。

第三家:C公司 100~500人左右

笔试题

(3页纸的面试题,手都写废了。奇怪的很,为什么Android现在都需要笔试题了....)

  1. Java的四大引用

  2. Java中的泛型理解

  3. Android为什么用Bundle来传递数据而不用简单的Map

  4. 什么是ANR?如何避免ANR?

  5. 转屏是如何保存Activity的状态?

  6. 什么是内存泄漏?什么是内存溢出?有什么区别?如何避免它们?

  7. Java中有哪些设计模式?代码手写一个设计模式的实现.

  8. launchMode

  9. View的绘制流程(重点)

  10. 事件分发机制(重点)

  11. 三级缓存原理

  12. 进程的保活

  13. 如何用intent传递一张图片

  14. 还有几个改错题,基本上都是开发中会遇到的。

一面:

  1. 事件传递

  2. view绘制

  3. 进程保活

  4. AIDL,Messenger 等等,跟笔试题都差不多,聊聊项目,项目上问的都是跟上家公司差不多

二面:

  1. View的绘制

  2. 事件传递,这个问的比较活,A控件消费事件以后,后续的事件怎么传递的,滑动冲突的解决方案, 套嵌滑动的NestedScrolling相关的东西,Behavior(这一块问的太多了,直接拿个效果出来,让你讲讲实现的思路什么的,到最后整个人都蒙了)

  3. 问了一下dex文件格式,Android Runtime里面的classlinker相关的,以前有没有做过逆向,怎么玩脱壳的

HR面:聊项目,聊有成就感的项目,聊管理,聊团队沟通的问题

目前为止还没消息,十有八九是GG了

面试总结一下

总结一下吧主要涉及的几块内容就是:

  1. 四大组件
  2. handler
  3. View的绘制
  4. 事件分发机制
  5. 滑动冲突
  6. 滑动套嵌
  7. 进程保活
  8. 性能优化

面试注意事项

前期准备和知识点

一般外地的面试,前几轮都会选择电话面试的方式。所以大家约好时间后,请记得到时候一定要腾出时间,找个安静的地方,放松心情专心接面试的电话,耐心的听完面试官的问题,快速仔细的分析题目想考的知识点,再结合自己的理解回答面试官的问题。

在面试前,需要给自己定制一个学习计划,一些基础的必问的知识点需要牢牢的记住。

面试的具体思路

一般面试官都会让你先来个自我介绍,可以介绍下自己的学习经历和工作经历。在项目中担任的角色和从事的工作。然后会侧重点让你讲一个你的代表作和用到的技术,然后根据你讲的技术对你深挖。也会问到你项目中碰到的难题和问题是如何解决的,这个就是考验你解决问题的能力。最好可以提前准备好一两个经典的案例到时候好有的讲。

其次就是沟通过程中不要太紧张,尽量让自己充分的思考,把自己所会的和能联想到的用较好的表达方式告诉面试官,让面试官可以走进你的思考方式中。一个拥有好的沟通和表达的程序员会更加受到面试官的喜爱。

面试复习路线

接下来分享的系统学习资源以详解各大互联网公司的 Android 常见面试题为主线,从面试的角度带你介绍必备知识点,以及该知识点在项目中的实际应用

帮你在现在的基础上,重新梳理和建立 Android 开发的知识体系。无论是你短期内想提升 Android 内功实力,突破自己工作中的能力瓶颈,还是准备参加 Android 面试,都会在这份资料中有所一些收获。

从架构基础开始,分了8个模块来逐步从基础进阶到架构师的环节:

多余的话就不讲了,接下来将分享面试的一个复习路线,如果你也在准备面试但是不知道怎么高效复习,可以参考一下我的复习路线,有任何问题也欢迎一起互相交流,加油吧!

架构师筑基语言基础

目前Android APP开发主流语言就是Java语言,Java语言最大的特性就是提高了软件的交互可能性,可以说安卓手机几乎所有应用程序都是利用Java语言来进行编写的。

知识要点:
1、深入理解Java泛型
2、注解深入浅出
3、并发编程
4、数据传输与序列化
5、Java虚拟机原理
6、高效IO

设计思想解读开源框架

随着互联网企业的不断发展,产品项目中的模块越来越多,用户体验要求也越来越高,想实现小步快跑、快速迭代的目的越来越难,插件化技术应用而生。如果没有插件化技术,美团、淘宝这些集成了大量“app”的应用,可能会有几个g那么大。

所以,当今的Android移动开发,不会热修复、插件化、组件化,80%以上的面试都过不了。

知识要点:
1、热修复设计
2、插件化框架设计
3、组件化框架设计
4、图片加载框架
5、网络访问框架设计
6、RXJava响应式编程框架设计

360°全方位性能调优

在不同层次的开发工程师手里,因为技术水平的参差不齐,即使很多手机在跑分软件性能非常高,打开应用依然存在卡顿现象。

另外,随着产品内容迭代,功能越来越复杂,UI页面也越来越丰富,也成为流畅运行的一种阻碍。综上所述,对APP进行性能优化已成为开发者该有的一种综合素质,也是开发者能够完成高质量应用程序作品的保证。

知识要点:
1、设计思想与代码质量优化
2、程序性能优化
启动速度与执行效率优化
布局检测与优化
内存优化
耗电优化
网络传输与数据储存优化
APK大小优化

3、开发效率优化
分布式版本控制系统Git
自动化构建系统Gradle

4、项目实战
启动速度
流畅度
抖音在APK包大小资源优化的实践
优酷响应式布局技术全解析
网络优化
手机淘宝双十一性能优化项目揭秘
高德APP全链路源码依赖分析
彻底干掉OOM的实战经验分享
微信Android终端内存优化实践

Android框架体系架构

Android框架体系架构(高级UI+FrameWork源码) 这块知识是现今使用者最多的,我们称之Android2013~2016年的技术。

Android开发者也往往因为网上Copy代码习惯了而导致对这块经常“使用”的代码熟悉而又陌生:熟悉的是几乎天天在和它们打交道, 天天在复制这些代码 ;陌生的是虽然天天和这些代码打交道,但是并没有深入研究过这些代码的原理,代码深处的内涵。

知识要点:
1、高级UI晋升
2、Android内核组件
3、大型项目必备IPC
4、数据持久与序列化
5、Framework内核解析**

NDK模块开发(音视频开发系列)

NDK(Native Development Kit缩写)一种基于原生程序接口的软件开发工具包,可以让您在 Android 应用中利用 C 和 C++ 代码的工具。通过此工具开发的程序直接在本地运行,而不是虚拟机。

在Android中,NDK是一系列工具的集合,主要用于扩展Android SDK。NDK提供了一系列的工具可以帮助开发者快速的开发C或C++的动态库,并能自动将so和Java应用一起打包成apk。

知识要点:
1、NDK开发之C/C++入门
2、JNI模块开发
3、Linux编程
4、底层图片处理
5、音视频开发
6、机器学习

Flutter学习进阶

2020 年无疑是 Flutter 技术如火如荼发展的一年。现在这门技术也依然非常有价值。

每一个移动开发者都在为 Flutter 带来的“快速开发、富有表现力和灵活的 UI、原生性能”的特色和理念而痴狂,从超级 App 到独立应用,从纯 Flutter 到混合栈,开发者们在不同的场景下乐此不疲的探索和应用着 Flutter 技术,也在面临着各种各样不同的挑战。

知识要点:
1、Flutter跨平台开发概述
2、Windows中Flutter开发环境搭建
3、编写你的第一个Flutter APP
4、Flutter Dart语言系统入门**
……

微信小程序开发

微信小程序作为现在比较火的编程开发应用场景之一,深受市场的青睐,这让不少开发者眼馋不已。但是对于初学者来说,就完全摸不着头脑了,不知道微信小程序开发制作需要学习那些知识,有需要的朋友可以参考本篇。

本篇知识要点:
1、小程序概述及入门
2、小程序UI开发
3、API操作
4、购物商场项目实战

Android相关源码解读

“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 + 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。

主要内含微信 MMKV 源码、AsyncTask 源码、Volley 源码、Retrofit源码、OkHttp 源码等等。

Android BAT高级开发面试题及答案解析

面试前夕,刷题冲刺

面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。

关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三:

以上内容均免费分享给大家,需要完整版的朋友,点这里可以看到全部内容。或者点击 【这里】 查看获取方式。

猜你喜欢

转载自blog.csdn.net/YoungOne2333/article/details/115401121