Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >安卓开发1年背了几十份面经还是连挂了6个面试,拿到最终offer后我总结了这些坑点

安卓开发1年背了几十份面经还是连挂了6个面试,拿到最终offer后我总结了这些坑点

原创
作者头像
Android技术干货分享
修改于 2023-09-25 06:54:55
修改于 2023-09-25 06:54:55
1.4K0
举报
文章被收录于专栏:Android技术分享Android技术分享

刚开始面试的时候我真的是处处碰壁,面一家挂一家,面完之后怀疑自我,是不是自己真的太菜了找不到工作。工作本身就是双向选择,一家不行再换一家,总有合适的,千万不要因为别人的一句话就全盘否定自己,一定要自信。

面试战况(时间排序)

  • 最右二面挂
  • 猿辅导一面挂
  • 伴鱼offer(两轮技术+一轮HR)
  • 顺丰二面挂
  • 百度二面挂
  • 微博一面挂(一面就问意向薪资,面的还行,要多了没有后续了)
  • 老虎证券offer(两轮技术+一轮HR)
  • 滴滴一面挂
  • 快手简历挂
  • 字节offer(三轮技术+一轮HR)
  • 美团HR面(三轮技术)
  • 腾讯HR面(三轮技术)

非技术准备方面

1.离职原因方面

其实大家换工作无非钱少了/环境不好/没成长三种原因,但是面试在讲离职原因的时候一定不要过于实诚,请尽量往个人发展这个方向上靠拢,切忌一定不要说现任公司的坏话,尤其是跳槽频繁或者像我这种第一份工作不满两年的,一定要想好自己的离职理由,我有几家公司明显技术答的还行,但是因为离职理由挂掉的。

2.简历投递顺序方面

如果你对自己很有信心的话,可以直接投你的意向公司,如果信心不够强烈建议跟我一样先面几家体量不那么大的公司涨涨经验看看现在外面的行情,然后再投自己中意的公司。

3.心态准备方面

既然准备了要离职,就不要被任何其他事物影响心态,心态真的很重要。刚开始面试的时候我真的是处处碰壁,面一家挂一家,后来在一家面试过程中被面试官疯狂嘲讽,面完之后怀疑自我,是不是自己真的太菜了找不到工作。后来也辛亏隔天有一家公司给我发了offer,让我明白了不是自己的问题。工作本身就是双向选择,一家不行再换一家,总有合适的,千万不要因为别人的一句话就全盘否定自己,一定要自信。

4.技术准备方面

刚开始面试的时候是准备把面试过的所有家都写详细的题目出来的,后来发现写了面经发在牛客的都挂了,也不知道是什么奇怪的玄学,后来就没发过了,不过其实面过来面过去就那些问题,就像下边这样整体总结一下吧。

Java

  • 怎么判断一个字符串的字符个数,比如说中文
  • Java的异常机制,为什么这么设计,什么时候用什么
  • HashMap,经典的就不一一列举了,说几个可以拓展的
  • 解决hash冲突的方案有哪几种
  • 1.7和1.8有什么区别(链表头插尾插方面)
  • hashmap高并发场景会怎样
  • 高并发链表成环会有什么问题
  • hashmap扩容时到底干了什么(位运算过程)
  • concurrentHashMap原理
  • String,StringBuilder,StringBuffer
  • ArrayList多线程下会有什么问题
  • 内部类持有外部类引用的原理是什么
  • volatile有什么用,原理是什么
  • 为什么会有StackOverflow,stack的大小是多少
  • 虚拟机
  • Java虚拟机和Android虚拟机有什么区别
  • Android两种虚拟机有什么区别
  • 类加载过程
  • 内存模型
  • 四种引用类型
  • class文件格式
  • synchronized底层实现原理
  • synchronized放在普通方法和静态方法上有什么区别
  • synchronized的锁实际是保存在哪里的(对象头)
  • 双亲委派机制,为什么要用双亲委派机制,如何打破双亲委派机制
  • 内存收集整理的算法

Android

Activity

  • Activity的生命周期
  • dialog会不会影响Activity生命周期,为什么
  • Activity的启动模式(还会伴有场景让你说这种场景选哪个合适)
  • Activity任务栈以及taskaffinity

Service

  • Service存在的意义是什么
  • startService和bindService的生命周期
  • startService和bindService的区别
  • startService和bindService分别适合应用在什么场景
  • Service可以执行耗时操作吗
  • IntentService和Service的区别
  • Service和线程都可以用来执行后台任务,为什么选Service不选线程,明明线程用起来更简单

broadcastreceiver

  • 广播的原理是什么

View的绘制流程

  • 详细讲一下View的绘制流程有哪些
  • View的第一次绘制是怎么调到的
  • View的后续绘制是怎么调用的
  • View的onMeasure,onLayout,onDraw都分别用来干什么
  • 除了上面三个,还有哪些关键的方法
  • invalidate的原理
  • invalidate和requestlayout的区别
  • requestlayout的作用范围是多大
  • 一个View被添加后第一个回调的方法是哪个(onAttacthToWindow)
  • 为什么View.post能拿到view的宽高
  • 讲一些字节做过的自定义VIew的例子

触摸事件分发

  • 讲一下Android事件分发的流程
  • 怎么处理滑动冲突
  • 怎么判断手势
  • 讲一些自己做过的处理滑动冲突的原理
  • 事件分发
  • handler这套机制的原理
  • IdleHandler是什么
  • handler的postDelay怎么实现的
  • Message有个缓存池,缓存池大小是多少知道吗
  • MessageQueue的中没有消息的时候为什么不会ANR
  • 知道epoll的底层原理吗
  • epoll是阻塞的吗

ANR

  • ANR是什么
  • ANR的原理
  • 什么情况下会发生ANR
  • 如何检测是否发生了ANR

SharedPreference

  • SharedPreference原理
  • SharedPreference的优化
  • SharedPreference的commit和apply区别
  • 什么情况下会选择用SharedPreference

序列化

  • Serlizeable和Parceable的区别
  • 什么情况下选择用哪个,为什么
  • 有没有了解过别的序列化方法

RecyclerView

  • RecyclerView的缓存机制
  • RecyclerView和ListView对比
  • Recycler是怎么进行回收和复用的
  • LayoutManager怎么进行布局的

内存泄漏

  • 内存泄漏的常见场景
  • 怎么检查内存泄漏

Binder

  • Binder原理
  • Binder比起其他跨进程的通信方式好在哪

网络

  • HTTP报文格式
  • HTTP在网络体系架构中的意义是什么
  • HTTPS和HTTP的区别
    • 对称加密非对称加密
    • TLS四次握手的过程
    • CA是干什么的
    • 校验证书的详细过程
    • HTTPS一定是安全的吗
  • TCP和UDP的区别(高频)
  • HTTP1.0,1.1,2.0的区别
  • 有没有实际了解过HTTP2.0到底比1.1快了多少
  • 详细解释“Keep-Alive”有什么用
  • UDP为什么比TCP快(存在误导,UDP不一定比TCP快)
  • UDP可以进行广播为什么TCP不行
  • 为什么要三次握手,四次挥手
  • 为什么握手仅需要三次而回收需要四次
  • HTTP是基于什么协议的(一般来说是TCP,可以借此引出QUIC,KCP等协议进行进一步的探讨)

操作系统

  • 线程间通信方式
  • 线程的几种状态
  • 进程间通信方式
  • 线程和进程的区别

设计模式

设计模式没有必要全都看,重要的是你会的几种设计模式他们的优点是什么,缺点是什么,在哪些常见的地方用到了他们,要能够举一反三,例举几个我面试时常说的。

  • 单例——单例一定要特别熟,特别高频,尤其是DCL为什么这么写,synchronized为什么那么加,有什么讲究,volatile在这个地方起到了什么作用,不加会导致什么问题。静态内部类的单例怎么能够保证线程安全。等等。
  • Builder——常见,知道什么时候用就行了
  • 责任链——要能扩展到Android的事件分发,okhttp的拦截链等。
  • 观察者模式——要能知道Android中哪些地方用到了观察者,什么情况下使用。比如广播机制就使用的是观察者
  • 享元模式——要知道享元模式是为了避免重复创建对象而导致的开销,Message,String,线程池都是这样的设计思想。
  • Adapter——要能想到ListView和RecyclerView,以及为什么他们设计的时候要用Adapter
  • 代理模式——静态代理,动态代理

算法(手撸代码)

就算法来说,其实大部分公司(除了字节和腾讯)问的都不是很难,一般都集中在数组和链表上,基本就是剑指offer难度甚至直接就是原题。

  • 移动零——一个数组有0和其他数,不更改原本其他非0数字的顺序,把0都移到数组最末位(猿辅导)
  • 手写栈(伴鱼)
  • 数组中只出现一次的数字——剑指原题(伴鱼)
  • 判断链表是否有环(顺丰,腾讯,美团)
  • 有环链表环的长度(腾讯)
  • 反转链表(腾讯)
  • 一道贪心——题目太长了且没有原题(腾讯)
  • 字符串转数字(百度)
  • 回字形打印数组(老虎证券)
  • 插入5(老虎证券)
  • 斐波那契数列(美团)
  • 手写DCL单例(字节)
  • 二叉树路径和——从根节点到叶子节点是否有一个路径之和等于给定值(字节)
  • 最短子数组长度——滑动窗口(字节)
  • 手写观察者模式(字节)
  • 两个栈实现队列(字节)
  • 获取一个VIewGroup的最深深度(美团)

设计题

设计题这个部分其实大部分并没有标准答案,更多的是看以你的知识量能够想到什么比较好的解决方案。

  • 设计进程安全的SharedPreference(字节,腾讯)
  • 设计一个gif加载框架(微博)
  • 一个进程只有读操作,一个进程只有写操作,你怎么设计(微博)
  • 如果一个APP需要有闲时加载任务的能力,你怎么设计(美团)
  • 让你设计一个流式标签布局你怎么做,有哪些要考虑的点(最右)
  • 设计一个下拉刷新的RecyclerView你有几种方法(美团)
  • APP使用经常会有弱网环境,怎么确保APP数据的即使同步更新以及正确性(顺丰)
  • 让你设计一个push的框架,你会怎么设计,考虑到哪些问题(百度)
  • 设计一个检测内存泄漏的框架(腾讯)
  • 设计一个事件总线(最右)

项目

在项目上,一定要能做到融汇贯通,不仅从技术上也要从业务上。比如你做过的一个需求,为什么要做这个需求,这个需求的背景是什么,这个需求上线后带来了什么影响或者有哪些收益,虽然你是个技术,但是你能够知道这写得话肯定是更好的。其次在技术细节上,要能知道为什么要这样技术选项,这么做的好处是什么,以及能够横向纵向拓展。

比如说我的项目中有一个地方用JobService实现了定时任务,那么可以横向拓展的点就有,Android中实现定时任务的方式都有哪些,他们都有哪些好处坏处,你的这个场景为什么要选JobService,JobService和普通Service的区别是什么。纵向扩展的话就有,JobService的原理是什么,JobService在参数配置上的一些细节,JobService是不是会严格按照你配置的时间运行。这些都是可以扩展出来的,所以当你在对项目复盘的时候,一定不要只盯着你做的那一部分,还要把自己做的部分横纵拓展一下,这样才能做到无懈可击。

除此之外,良好的表达能力也是非常重要的一环,如果不觉得麻烦的话可以在复盘项目的时候把自己做了什么,为什么这么做打个草稿,自己看自己的逻辑以及表达是否通顺,以此来做调整。

面试前的系统复习路线参考

面试:如果不准备充分的面试,完全是浪费时间,更是对自己的不负责!

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

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

1、看视频进行系统学习

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

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

2、进行系统梳理知识,提升储备

客户端开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

  • 架构师筑基必备技能:深入Java泛型+注解深入浅出+并发编程+数据传输与序列化+Java虚拟机原理+反射与类加载+动态代理+高效IO
  • Android高级UI与FrameWork源码:高级UI晋升+Framework内核解析+Android组件内核+数据持久化
  • 360°全方面性能调优:设计思想与代码质量优化+程序性能优化+开发效率优化
  • 解读开源框架设计思想:热修复设计+插件化框架解读+组件化框架设计+图片加载框架+网络访问框架设计+RXJava响应式编程框架设计+IOC架构设计+Android架构组件Jetpack
  • NDK模块开发:NDK基础知识体系+底层图片处理+音视频开发
  • 微信小程序小程序介绍+UI开发+API操作+微信对接
  • Hybrid 开发与FlutterHtml5项目实战+Flutter进阶

知识梳理完之后,就需要进行查漏补缺,所以针对这些知识点,我手头上也准备了不少的电子书和笔记,这些笔记将各个知识点进行了完美的总结。

主要内容:

Java 基础(★★)

  • 面向对象思想
  • 多态
  • 异常处理
  • 数据类型
  • Java 的 IO
  • 集合
  • Java 多线程

Java 高级(★★)

  • Java 中的反射
  • Java 中的动态代理
  • Java 中的设计模式&回收机制
  • Java 的类加载器

Android 基础(★★★)

  • Android 基本常识
  • Activity
  • Service
  • BroadCastReceiver
  • ContentProvider&数据库
  • Android 中的布局
  • ListView
  • JNI & NDK
  • Android 中的网络访问
  • Intent
  • Fragment

Android 高级(★★★)

  • Android 性能优化
  • Android 屏幕适配
  • AIDL
  • 自定义控件
  • Android 中的事件处理
  • Android 签名
  • Android 中的动画
  • 网络协议
  • 其他

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

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

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

4、面试前夕,刷题冲刺

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

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

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Vue-QuickStarted
概念:指令(Directives)是 Vue 提供的带有 v- 前缀 的 特殊 标签属性。
用户11097514
2024/05/31
1700
Vue-QuickStarted
第一章 : Vue2 技术精讲
① 对象 → 键就是类名,值是布尔值。如果值为 true,有这个类,否则没有这个类
捞月亮的小北
2023/12/01
2360
第一章 : Vue2 技术精讲
Vue基础
注意:使用v-text时,会将标签内部的内容覆盖并且替换成对应的内容,若不希望内容被覆盖,则不可使用v-text的写法,两种写法都支持表达式,如:v-text="message + ‘!’",{{ message + “!” }}。
Cikian.
2022/09/22
2.7K0
Vue基础
Vue(上)
新建一个Html项目(在vscode中输入 ! 加 Tab键 可快速生成一个标准的Html模板);
十玖八柒
2022/08/01
2.5K0
Vue(上)
后端人眼中的Vue(一)
​ Vue是渐进式 JavaScript 框架,啥叫渐进式?渐进式意味着你可以将Vue作为你应用的一部分嵌入其中,或者如果你希望将更多的业务逻辑使用Vue实现,那么Vue的核心库以及其生态系统。比如Core+Vue-router+Vuex+axios,也可以满足你各种各样的需求。
上分如喝水
2023/01/08
1.1K0
后端人眼中的Vue(一)
Vue学习
Vue基础 官网链接 vue简介 JavaScript 框架 简化Dom操作 响应式的数据驱动 Vue导入 `<!-- 开发环境版本,包含了有帮助的命令行警告 --> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> (适合初学者) 或者: <!-- 生产环境版本,优化了尺寸和速度 --> <script src="https://cdn.jsdelivr.net/npm/vue"></script> el介
用户7168270
2020/04/06
1.1K0
Vue学习
vue2基础
半月无霜
2023/10/18
3420
Vue.js 快速上手精华梳理-快速上手核心重点【热门收藏】
vuecli文档 https://cli.vuejs.org/zh/ https://cli.vuejs.org/zh/guide/installation.html
瑞新
2022/01/21
9570
Vue.js 快速上手精华梳理-快速上手核心重点【热门收藏】
Vue.js 快速上手精华梳理-快速上手核心重点【建议收藏】
文章目录 Vue.js 快速上手精华梳理 初体验 条件指令 循环指令 处理用户输入 组件初体验 实例 模板语法 计算属性 监听器 Class绑定 Style绑定 条件渲染 列表渲染 事件处理 表单输入绑定 组件基础 git提交-vue核心基础完结 彩蛋福利 PS:本文福利首发于公众号「让我遇见相似的灵魂」,获取最新Vue教程资源 回复关键字:Vue 左手代码,右手吉他,这就是天下:如果有一天我遇见相似的灵魂 那它肯定是步履艰难 不被理解 喜黑怕光的。如果可以的话 让我触摸一下吧 它也一样孤独得太久。
瑞新
2020/07/07
1.4K0
一篇文章带你了解网页框架——Vue简单入门
如果你以后想从事后端程序员,又想要稍微了解前端框架知识,那么这篇文章或许可以给你带来帮助
秋落雨微凉
2022/10/25
1K0
一篇文章带你了解网页框架——Vue简单入门
2-本地应用:Vue指令
v-text指令用于设置标签的文本值,有两种设置标签文本值的方式,方式一就是通过v-text指令向标签传入值,但这种传入方式会整个替换掉标签内的全部文本信息,如果我们需要特殊化的修改某一部分文本值,就需要用到第二个方式,使用插值表达式传入值
Ywrby
2022/10/27
1.2K0
2-本地应用:Vue指令
10天从入门到精通Vue(一)-vue基本概念和基础语法(v-text、v-bind、v-on、v-model等)
v-text会覆盖元素中原本的内容,但是 插值表达式 只会替换自己的这个占位符,不会把 整个元素的内容清空。v-html会解析文本中的html标签后展示。具体代码如下:
共饮一杯无
2022/11/28
1.5K0
10天从入门到精通Vue(一)-vue基本概念和基础语法(v-text、v-bind、v-on、v-model等)
【Vue】(1)基础知识 | MVVM | 基础指令 | v-model | v-for | v-if | v-show | 实例
首先,你可以在这里下载本文使用到的vue.js文件,使用的是v2.6.10开发版本。
前端修罗场
2023/10/07
3330
【Vue】(1)基础知识 | MVVM | 基础指令 | v-model | v-for | v-if | v-show | 实例
浅谈Vue--直接引入Vue.js实现简单地开发
Vue是一个MVVM的JavaScript框架; ViewModel负责逻辑的实现,把Model里的数据传递给View,实现视图层与数据层的解耦
生南星
2019/07/22
7.8K0
Vue入门 基本使用 与 事务管理【1】
Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式JavaScript框架。
陶然同学
2023/02/24
9230
Vue入门 基本使用 与 事务管理【1】
前端(五)-Vue简单基础
你可以用v-model指令在表单、及元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。尽管有些神奇, 但v-model本质上不过是语法糖。它负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理。   注意:v-model会忽略所有表单元素的value、checked、selected特性的初始值而总是将Vue实例的数据作为数据来源。你应该通过JavaScript在组件的data选项中声明初始值!
化羽羽
2022/10/28
9670
史上最详细vue的入门基础
Vue可以自底向上逐层的应用简单应用:只需一个轻量小巧的核心库复杂应用:可以引入各式各样的Vue插件
楠羽
2022/11/18
9510
史上最详细vue的入门基础
一个后端狗的 Vue 笔记【入门级】
最近找了些教程,顺带着趴在官网上,看了看 Vue 的一些内容,入门的一些概念,以及基础语法,还有一些常用的操作,瞄了一眼,通篇文字+贴了部分代码 9000 多字,入门语法什么的还是很好理解的,以前也有一定做小程序的基础,感觉还是很相似的,不过对于一些稍复杂的点,感觉还是总结的不够细致,例如插槽,和计算属性等,平时前端的东西看的也不是很多,学习过程中整理的笔记,和大家一起分享交流!欢迎各位大大交流意见~
BWH_Steven
2020/09/10
1.4K0
一个后端狗的 Vue 笔记【入门级】
后端人眼中的Vue(三)
​ 在之前的购物车的案例当中,我们已经实现了购物车价格的计算,但是有些时候我们需要在其他很多地方也展示价格,所以每展示一次,我们就需要调用一次计算价格的方法,所以Vue给了一个计算属性,用于在Vue实例中完成相关业务计算的工作。
上分如喝水
2023/01/09
9050
后端人眼中的Vue(三)
简学Vue
官网文档:https://cn.vuejs.org/v2/guide/forms.html#%E5%9F%BA%E7%A1%80%E7%94%A8%E6%B3%95
Rochester
2020/09/01
2.3K0
简学Vue
相关推荐
Vue-QuickStarted
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档