飞道的博客

Android技术功底不够,面试十家九家难,面霸究竟是怎样炼成的?

287人阅读  评论(0)

最近在网上看许多面经的文章,有拿到Offer的,也有凉凉的,这些文章中都有一个共同的特点,就是单单的只有面试题目。而没有面试过程中需要注意的细节和面试心得。导致有些面试者们在面试来临,就去盲目的去刷这些题目,而没有结合自己做过的那些项目中,遇到的一些技术问题会被面试官问道,回答不上导致面试落选或者薪资上不去。

这是最近我一位做Android 开发的朋友发给我的消息

不过确实,因为疫情情况一些公司倒闭,有部分Android开发者直接原地失业,也有另外一大批开发者在今年这种大环境下依旧难以按捺心中跳槽的小心思。不管是因为什么,

我们需要的只有一个:更高的技术追求,更好的薪酬待遇!

但往往事实却不太尽人意……

因为面试官可不会考虑这些,大批开发者来面试,意味着面试官有了更多选择!

所以,如果技术不过关的话,该被吊打的还是会被吊打!甚至比之前更惨!

大厂的面试题能回答多少

快看看下面这些大厂面试真题,是不是都能答得上来?

  1. HttpUrlConnection 和 okhttp关系?
  2. okhttp的特点、缺点,用到了哪些设计模式?
  3. 说下okhttp原理
  4. okhttp如何处理网络缓存的
  5. okhttp中的线程池的参数为什么要这么设置?
  6. 自己去设计网络请求框架,怎么做?
  7. 说下Glide的优点
  8. Glide中的三级缓存是哪三级?
  9. Glide内存缓存如何控制大小?
  10. 知道活动缓存怎么做的吗?为什么要这样划分层级呢?好处是什么?
  11. ……

还有下面阿里、字节、腾讯的面试题,又有多少会的呢?

阿里

1、插件化。启动activity的hook方式。taskAffity。
2、okhttp支持HTTP2?http2的功能有哪些?tcp方面拥塞控制?tsl的握手和具体的非对称加密算法。非对称名称
3、handler的post(Runnable)如何实现的。callback,runnable,msg的执行优先级。阻塞是怎么实现的?为什么不会阻塞主线程?
4、求二叉树中两个节点之间的最大距离。
5、206含义,未修改资源是哪个,302含义,301含义
6、多进程通信问题。binder优势。aidl生成的java类细节。多进程遇到哪些问题?
7、动态代理传入的参数都有哪些?非接口的类能实现动态代理吗?ASM的原理
8、Application和Activity在Context的继承树上有何区别?二者使用上有何不同?
9、任意一颗二叉树,求最大节点距离
10、设计一个日志系统。
11、内存泄露的分类。怎么查看内存泄露的问题
12、touch事件源码问题。
13、组件化的问题。module和app之间的区别。moduler通信是如何实现的。
14、native奔溃的日志采集,怎么处理?
15、注解实现一个提示功能:如果int的值大于了3需要提示。
16、介绍下flutter的启动流程
17、介绍下flutter与weex的区别
18、组件化介绍一下
19、webview中与js通信的手段有哪些?
20、介绍下flutter_boost的原理

字节跳动

1、多线程加锁的几种方法
2、垃圾回收机制
3、类加载的双亲委派机制
4、c++中,构造函数的调用顺序,析构函数是否需要virtual
5、JNI的注册方法有哪些
6、函数指针如何写?
7、什么是 ANR 如何避免它?
8、Activity 和 Fragment 生命周期有哪些?
9、横竖屏切换时候 Activity 的生命周期?
10、AsyncTask 的缺陷和问题,说说他的原理?
11、onSaveInstanceState() 与 onRestoreIntanceState()?
12、android 中进程的优先级?
13、Bunder 传递对象为什么需要序列化?Serialzable 和 Parcelable 的区别?
14、Context 相关
15、Android 各版本新特性
16、android 中有哪几种解析 xml 的类,官方推荐哪种?以及它们的原理和区别?
17、Jar 和 Aar 的区别
18、Android 为每个应用程序分配的内存大小是多少

腾讯

1、音视频采集编码播放流程
2、Mediacodec编码内部原理与工作流程(什么状态机之类的),使用Mediacodec时遇到过什么问题,怎么解决的
3、ffmpeg怎样编码和解码的,怎么做视频编辑,添加特效
4、怎么取一帧视频画面编辑成图片并将二维码合成到图片中,然后进行压缩处理,压缩要保证图片的清晰度不变
5、平时做过哪些性能优化,怎么做的,已经发布的app怎么监测性能
6、Jetpack会不会,livedata、databinding的使用及原理
7、Kotlin、flutter也提了一下
8、Android中进程通信方式除了aidl,还有什么用的比较多(不包括Linux的)
9、App的启动流程,从点击图标开始
10、一个算法问题
11、app的启动优化方案有哪些(主要是非常规的那些方法)

近期有出去面试过的朋友就该知道,现在的面试从头到尾都是比较有深度的技术问题,虽然那些问题看上去在网上都能查到相关的资料,但面试官基本都是根据你的回答持续深入,如果没有真正对技术原理和底层逻辑有一定的了解是无法通过的。

这也是广大Android开发者感觉 “面试造火箭,工作拧螺丝” 的来源。

所以,从根本上来讲,技术的高低才是决定你是否能够通过面试的核心原因。如果你面试都能对答如流的话,面试10家公司,至少能拿到7家offer。而且一般都能给出较高的薪水和福利待遇。

大厂面试需要具备哪些技能

1.Java,Kotlin的基本语言

  • 面向对象的基本思想
  • 内部类:内部类的分类、应用场景、内部类编译成class后是怎么样的
  • 抽象类 & 接口:区别、应用场景
  • 注解:注解的基本概念、分类、编译时注解 & 运行时注解
  • 内存模型
  • 垃圾回收
  • 类加载的过程
  • 泛型:分类、通配符 & 上下边界、泛型擦除
  • 反射:使用
  • 多线程,线程池
  • Kotlin的优点,协程

Android基础知识

  • Dalvik、Art虚拟机
  • Activity:生命周期、launchMode
  • Fragment:生命周期、懒加载、两种Adapter之间的区别
  • BroadcastReceiver:基本概念、广播分类、权限
  • Service:生命周期、onStartCommand的返回值、startService和bindService的区别、相同进程 & 不同进程的交互、IntentService实现原理
  • 重要的工具类 & 源码实现:AsyncTask、HandlerThread、Handler、IntentService、LruCache、LinkedHashMap、SparseArray
  • RecyclerView:缓存原理、和ListView的对比、Adapter如何适配多种layout
  • 存储:数据库升级 & 优化、ContentProvider,SharePreference
  • SDK版本升级的兼容问题
  • Android的权限管理机制

3.数据结构

  • 数组,链表,
  • 栈 Stack
  • 队列 Queue
  • 链表 Linked List
  • 数组 Array
  • 哈希表 Hash Table
  • 二叉树 Binary Tree
  • 堆 Heap
  • 并查集 Union Find
  • 字典树 Trie

4.算法

  • 二分搜索 Binary Search
  • 分治 Divide Conquer
  • 宽度优先搜索 Breadth First Search
  • 深度优先搜索 Depth First Search
  • 回溯法 Backtracking
  • 双指针 Two Pointers
  • 动态规划 Dynamic Programming
  • 扫描线 Scan-line algorithm
  • 快排 Quick Sort

5.网络

网络分层模型,TCP/UDP,HTTP/HTTPS

6.设计模式

按照23种网络模型、三个分类进行总结,每种设计模式包含以下三个方面,至少要准备常用的几个:

  • 基本概念:UML图、简单例子、应用场景、优势 & 劣势
  • Android源码中的实现
  • 项目中的应用

7.其他

  • 跨平台:RN,Weex,Flutter
  • 开源库:OKHttp,Retrofit,Glide
  • 组件化,插件化,Gradle

技术外面试后复盘的重要性

面试就像一场战役,要打赢战役应该做如下功课,才能做到胸有成竹。战前需要充分准备,要研究对手,所谓知己知彼,百战不殆。要准备好足够的弹药。战斗时要保持正念、精神焕发,昂首挺胸,眼神坚定、谦虚谨慎。因为我们可能还要打多场战役,所以针对每次战役都要及时进行反思,总结经验教训,用现在流行的说法叫“复盘”。这样才会有进步,下次作战也会更有自信和把握。

面试后的复盘总结与面试前的准备同等重要:

1、对自己的表现有个总结,在总结中成长,发现自己的不足,下次能更好的提高
2、对自己的逻辑和文字编辑能力有个展现和提升
3、对自己的经历有个记录,人生比较重要的转折点
4、提升自己的个人影响力
5、分享出来,可能有更多人跟你一起交流,可能有意想不到的收获

每次面试后都要及时总结、及时“复盘”,否则,这次面试犯过的错,下次面试可能还会犯,多次面试就只是同样表现的来回重复,这样肯定不利于拿offer。

其实,不管是什么岗位的面试,所遇到的问题纵使千奇百怪,也一定会有相通之处。我们不妨将每次面试当成一次经验的积累,在面试后对自己的表现进行全面复盘,对自己的表现做出客观评价,哪些方面做得好,哪些方面没有做好,从中总结经验,吸取教训,获得长进,才能帮助自己在未来的面谈中获得成功。

系统复习,储备技术,重复刷题

很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从那里入手去学习,对此我针对Android程序员,我这边给大家整理了一套学习宝典

  • Android学习路线图

首先,对于没有学习方向,知识不体系的人,我把我工作几年整理的学习路线分享给大家,做一个借鉴作用,还不知道怎么学习的人可以直接照着我这个学习路线一个个的去学习,知识不体系的人可以参考下我整理路线的方式,总之希望能够帮到你们!

  • 模块化学习资源

接下来是每个模块我整理出来的文档学习资料,帮助大家更细致化的学习。

《Android汇总复习资料—Java》

《Android汇总复习资料—Android》

《Android汇总复习资料—Android扩展》

《Android汇总复习资料—Kotlin》

《Android汇总复习资料—Flutter》

《Android汇总复习资料—算法》

除了上面的学习路线,还可以额外的配合以下方式学习,效果翻倍~

Android进阶学习

①看视频进行系统学习

前几年的Crud经历,让我明白自己真的算是菜鸡中的战斗机,也正因为Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去B站进行学习,B站上有很多学习视频,唯一的缺点就是免费的容易过时。

另外,我自己也珍藏了好几套视频,有需要的我也可以分享给你。

②读源码,看实战笔记,学习大神思路

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

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

③面试前夕,刷题冲刺

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

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

④2020大厂面试高频知识点

  • 图片
  • 网络和安全机制
  • 数据库
  • 插件化、模块化、组件化、热修复、增量更新、Gradle
  • 架构设计和设计模式
  • 性能优化
  • Android Framework
  • Android优秀三方库源码

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


转载:https://blog.csdn.net/weixin_44339238/article/details/117260217
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场