美文网首页Android技术知识Android开发Android开发
Android开发3年,九月份面试12家大厂跳槽成功,我有一些面

Android开发3年,九月份面试12家大厂跳槽成功,我有一些面

作者: Android_until | 来源:发表于2020-09-28 15:16 被阅读0次

    在下2017年毕业,目前从事android开发工作已经3年了,前段时间刚完成一次跳槽,面试了几家公司,将一些面试经验分享给大家,希望对大家有所帮助。

    简历

    首先是简历,一般找一个模板,填写掌握的技能和项目经历即可。

    github上有一个不错的模板,详情可见:github.com/CyC2018/Mar…

    项目clone后,个性Resuem.md即可,然后导出为pdf文件。

    简历建议长度为2页,太长太短都不好。

    建议用掌握与熟练掌握取代了解与精通。

    刷题

    算法题可以说是现在找工作必刷的了。不过根据我面试的经验,算法题总得来说问的还是比较少,还有一些公司是基本不问算法的。

    当然如果碰到字节,快手这种每轮都问算法的公司,如果因为算法题拿不到offer就很可惜了。

    算法题就好像高考语文的古诗词默写一样,分不多,但丢了就很可惜了。

    根据我的经验,大概刷了,掌握100道题就足以应付面试了。

    当然完全掌握需要重复练习,不是刷了一遍就可以的。

    这里推荐一下极客时间上覃超的五遍刷题法:

    五遍刷题法

    1.第一遍,直接看解法

    多解法,比较解法优劣,默写好的解法

    2.第二遍,打开leetcode,直接开始写

    多种解法比较,调优

    3.第三遍,过一天之后,再重复做题

    4.第四遍,过了一周,再来反复练

    5.第五遍,面试前一周,恢复性训练

    通过以上方法重复练习,大概刷100题就足以应付面试,如果每天刷3道,大概准备一个月即可

    题库

    刷题也要注意,不要一题一题刷,比如Leetcode的每日一题。

    建议按知识点分类,这样比较方便重复练习与知识点掌握。

    在知识点刷过一遍后,也可以按照公司分类或者LeetCode热题100刷,一般公司出算法题也是有题库的

    下面推荐几个题库供大家使用:

    按知识点分类

    github.com/yuanguangxi…
    github.com/zhangyixing…

    按公司分类

    github.com/afatcoder/L…

    热题100

    zhuanlan.zhihu.com/p/84230862

    面经

    接下来就是各公司的面经了,分享出来供大家参考。

    尚德公司面试

    • java有什么特性,继承有什么用处,多态有什么用处
    • 反射是什么,在哪里用到,怎么利用反射创建一个对象
    • 代理模式与装饰模式的区别,手写一个静态代理,一个动态代理
    • 对象加载的过程,属性先加载还是方法先加载
    • 垃圾回收机制与jvm结构
    • 自定义View,事件分发机制讲一讲
    • http与https有什么区别
    • Activity启动模式,以及各启动模式生命周期问题
    • 静态方法,静态对象为什么不能继承
    • Activity怎么启动Service,Activity与Service交互,Service与Thread的区别
    • 介绍一下android动画
    • Launcher启动App的流程,中间有几种跨进程通信(socket)
    • Handler通信,Binder通信
    • 你碰到过什么内存泄漏,怎么处理
    • RXJava怎么切换线程
    • Fragment hide show生命周期
    • 平常有用到什么锁,synchronized底层原理是什么

    Vivo公司

    • 简单描述下Handler,Handler是怎么切换线程的,Handler同步屏障
    • Glide的缓存,有用过Glide的什么深入的API,自定义model是在Glide的什么阶段
    • 讲讲mvc,mvp模式,presenter内存泄漏的问题
    • ANR了解过吗?有没有实际的ANR定位问题的经历
    • 性能优化你做过哪些?
    • 有什么实际解决UI卡顿优化的经历
    • 有做过什么Bitmap优化的实际经验
    • 项目搭建过程中有什么经验,有用到什么gradle脚本,分包有做什么操作
    • 组件化有详细了解过吗?ARouter详细原理
    • 讲一下事件分发机制,RecyclerView是怎么处理内部ViewClick冲突的
    • mainfest中配置LargeHeap,真的能分配到大内存吗?

    B站

    • 一个大致有序的数组如何排序,最快时间复杂度
    • 如果叫你实现,你会怎样实现一个多主题的效果
    • 如何自定义实现一个FlexLayout
    • tinker的原理是什么,还用过什么热修复框架,robust的原理是什么?
    • 说说你对注解的了解,是怎么解析的
    • synchronized是公平锁还是非公平锁,ReteranLock是公平锁吗?是怎么实现的
    • 泛型是怎么解析的,比如在retrofit中的泛型是怎么解析的
    • mvp与mvvm的区别,mvvm怎么更新UI,databinding用得多吗,databinding的原理?
    • kotlin ?的原理
    • 在项目中有直接使用tcp,socket来发送消息吗
    • 如何在网络框架里直接避免内存泄漏,不需要在presenter中释放订阅
    • 生命周期都是通过什么调用的?有用过AIDL吗?
    • 讲一下RecyclerView的缓存机制,滑动10个,再滑回去,会有几个执行onBindView
    • 如何实现RecyclerView的局部更新,用过payload吗,notifyItemChange方法中的参数?
    • 讲讲LinkedHashMap的数据结构
    • put post有什么区别
    • A Activity打开B Activity的生命周期变化,会有什么方法打断吗?
    • Fragment hide show生命周期变化
    • Fragment replace生命周期变化

    B站二面

    • 为什么考虑换工作
    • 屏幕适配做过什么工作?
    • 你们网络框架用的什么?为什么?
    • 如果让你来开发B站的一个页面,哪一个页面可以很快入手
    • 性能优化你做过什么工作?
    • h5与native通信你做过什么工作?
    • 插件化的主要优点和缺点是什么?
    • 你觉得B站目前的APP有什么问题?
    • 如果产品要求你开发一个音频播放功能,你会怎么着手?预计会有什么坑?
    • ViewPager切换Fragment什么最耗时?
    • 线程间同步的方法
    • 锁之间的区别

    B站三面

    • 介绍一下你自已和项目
    • 说说为什么考虑离职
    • 说说对你们原来公司的印象
    • 为什么想来B站?你在B站上常常在看什么?
    • 期望薪资是多少?
    • 你对搬到上海有什么想法?

    腾讯

    • 介绍一下你们项目的架构
    • Rxjava是怎么实现线程切换的
    • Rxjava自定义操作符
    • ARouter的原理
    • ARouter怎么实现接口调用
    • ARouter怎么实现页面拦截
    • MVP怎么处理内存泄漏
    • OkHttp怎么实现连接池
    • 如果让你来实现一个网络框架,你会考虑什么
    • 你做过什么性能优化的工作
    • 热修复的原理,资源的热修复的原理,会不会有资源冲突的问题
    • ViewPager中嵌套ViewPager怎么处理滑动冲突
    • android源码中有哪些设计模式
    • 说说binder机制的原理

    腾讯二面

    • 为什么考虑换一份工作?
    • 在你们公司这几年感觉怎么样?
    • 技术选型上,为什么这么考虑?从开发效率,产品性能,产品质量,产品体验等方面考虑
    • 你们的产品为什么被砍掉,从哪方面考虑
    • 在这几年里,你有做过什么觉得最有价值的工作
    • 你还有什么要问我的吗?目前有几个offer,倾向性是怎样的?

    网易云音乐

    • ViewPager2原理
    • LifeCycle的原理是怎样的?
    • ViewModel为什么在旋转屏幕后不会丢失状态
    • Drawable与View有什么区别,Drawable有哪些子类
    • 属性动画更新时会回调onDraw吗?
    • OkHttp网络拦截器,应用拦截器?OKHttp有哪些拦截器,分别起什么作用
    • 自定义实现一个九宫格如何实现
    • PathClassLoader与DexClassLoader有什么区别
    • 这些年有做一些什么比较难的工作?
    • 编译时注解与运行时注解,为什么retrofit要使用运行时注解?什么时候用运行时注解?
    • kotlin lazy使用,lazy viewmodel
    • 有没有看一下Google官方的ViewModel demo
    • ViewModel在Activity初始化与在Fragment中初始化,有什么区别?
    • kotlin与Java互相调用有什么问题?
    • retrofit怎么做post请求
    • 界面优化的一些方法,ConstraintLayout实现三等分,ConstraintLayout动画.
    • CoordinatorLayout自定义behavior,可以拦截什么?

    网易云音乐二面

    • 你们的项目中做过什么比较难的工作?
    • 视频播放,一个player怎么实现预加载,避免loading
    • webView加载本地图片,如何从安全方面考虑
    • http1.0,http1.1,http1.2有什么区别
    • https与http有什么区别
    • 有用过什么加密算法?AES,RAS什么原理?
    • android跨进程通信了解吗?共享内存用过吗?binder怎么验证pid?binder驱动了解吗?
    • SharedParence可以跨进程通信吗?如何改造成可以跨进程通信的.commit和apply的区别.
    • Seriazable与Parceable的区别
    • Bundle是什么数据结构?利用什么传递数据
    • Jvm的内存结构,Jvm的垃圾回收,方法区有什么东西?
    • h5与native交互,webView.loadUrl与webView.evaluateUrl区别

    网易云音乐三面

    • 有没有做过什么WebView秒开的一些优化
    • 你们的项目中有什么难点?
    • native如何对h5进行鉴权,让某些页面可以调,某些页面不能调
    • 有看过哪些框架的源码吗?
    • viewModel是怎么实现双向数据绑定的?
    • viewModel怎么实现自动处理生命周期?
    • 图片加载优化有什么经验吗?
    • viewpager切换掉帧有什么处理经验?
    • 一个wrap_content的ImageView,加载远程图片,传什么参数裁剪比较好?
    • 两个getDrawable取得的对象,有什么区别?
    • 补间动画与属性动画的区别,哪个效率更高?
    • jsBridge实现方式
    • 平常是怎么了解一些新知识与业界动态的,最近有什么印象深刻的文章
    • 平常抓包用什么工具?
    • Mvp与Mvvm有什么区别?

    跟谁学

    • 项目中的Webview与native通信
    • 项目中对WebView的功能进行了怎样的增强
    • synchronized跟ReentranLock有什么区别?
    • synchronized与ReentranLock发生异常的场景.
    • 算法,删除数组中的重复元素
    • 手写双检查单例模式,各个步骤有什么区别
    • Activity生命周期

    快手

    • string,equals,==有什么区别
    • AsyncTask内存泄露
    • dispatchTouchEvent,onInterceptEvent,onTouchEvent顺序,关系
    • onMeasure,onLayout,onDraw关系
    • 算法题,反转数组
    • 算法题,链表求和
    • 说说你对协程的理解
    • 协程怎么取消
    • 说说MVP与MVVM的区别

    快手二面

    • 算法题,二叉树的最大深度
    • 如果android端和IOS端调一个接口,一个通了一个没通,你会如何解决
    • 如果android端和IOS端调一个接口,一个比较慢,一个比较快,有什么思路
    • ARouter的原理是什么?如果不用ARouter,你会怎么去解藕。接口?设计接口有什么需要注意的?
    • h5与native交互做过什么工作?
    • 登陆功能,登陆成功然后跳转到一个新Activity,中间涉及什么?从事件传递,网络请求,AMS交互角度分析
    • AMS交互调用生命周期是顺序的吗?
    • binder进程间通信可以调用原进程方法吗?
    • mvp与mvvm有什么区别?
    • token放在本地如何保存?如何加密比较好?

    快手三面

    • viewModel的原理,为什么可以在Activity销毁后保存数据
    • mvvm双向数据绑定的原理是怎样的?ViewModel
    • 说说你们项目中的难点是怎样的?
    • 伪代码实现一个长按事件
    • 实现一个下载功能的接口

    猿辅导

    • 泛型有什么优点?
    • 动态代理有什么作用?
    • 拉圾回收的GCRoot是什么?
    • Handler机制了解吗?一个线程有几个Looper?为什么?
    • 你了解协程吗?协程有什么作用?可以完全取代rxjava吗?
    • 你们用的什么消息通信机制
    • 你的项目有什么难点?介绍一下?
    • 算法题,二叉树最长结点集合

    猿辅导2面

    • 你们项目中的难点是什么?
    • 编译期注解处理的是字节码还是java文件
    • 你在项目中有用到什么设计模式吗?
    • ARouter的原理是怎样的?
    • 插件化的原理是怎样的?
    • 算法题,K个一组反转链表
    • 广播与RxBus的区别,全局广播与局部广播区别

    猿辅导3面

    • 你们项目中有什么难点?
    • @JavaScriptInterface为什么不通过多个方法来实现?
    • 为什么不利用同步方法来做jsBridge交互?同步可以做异步,异步不能做同步
    • 网络封装怎么实现?
    • 算法题,不同面值的几个硬币,怎么求满足条件的最小值

    斗鱼

    • 说说HashMap的原理
    • 说说Java的内存分区
    • 讲讲你对垃圾回收机制的了解,老年代有什么算法?
    • 说说你对volatile字段有什么用途?
    • 说说事件分发机制,怎么写一个不能滑动的ViewPager
    • 说说你对类加载机制的了解?DexClassLoader与PathClassLoader的区别
    • 说说插件化的原理,资源的插件化id重复如何解决?
    • mvp与mvvm模式的区别是什么?
    • JetPack组件用过哪些?lifeCycle的原理是什么?如果在onStart里面订阅,会回调onCreate吗?
    • 单例模式有什么缺点?
    • 说说App的启动过程,在ActivityThread的main方法里面做了什么事,什么时候启动第一个Activity?
    • 说说你对Handler机制的了解,同步消息,异步消息等
    • 说说你对屏幕刷新机制的了解,双重缓冲,三重缓冲,黄油模型
    • onCreate,onResume,onStart里面,什么地方可以获得宽高
    • 为什么view.post可以获得宽高,有看过view.post的源码吗?
    • attachToWindow什么时候调用?
    • DataBinding的原理了解吗?

    滴滴一面

    • JVM类加载机制了解吗,类什么时候会被加载?类加载的过程具体生命周期是怎样的?
    • Handler内存泄漏的GCRoot是什么?
    • 动画里面用到了什么设计模式?
    • OkHttp里面用到了什么设计模式?
    • OkHttp连接池是怎么实现的?里面怎么处理SSL?
    • 泛型为什么要擦除?kotlin的泛型了解吗?泛型的pecs原则
    • 同步屏障
    • 性能优化做过什么工作?
    • RecyclerView的缓存结构是怎样的?缓存的是什么?cachedView会执行onBindView吗?
    • RecyclerView嵌套RecyclerView,NestScrollView嵌套ScrollView滑动冲突
    • ViewGroup在Action_Move时onIntercept返回true,事件怎么传递
    • Launcher启动图标,有几个进程?
    • JMM可见性,原子性,有序性,synchronized可以保证什么?
    • 源码中有哪里用到了AtomicInt
    • AQS了解吗?
    • Activity内LinearLayout红色wrap_content,包含View绿色wrap_content,求界面颜色
    • ViewModel的使用中有什么坑?
    • 有用DSL,anko写过布局吗?
    • HashMap查找的时间复杂度是多少?
    • 阿里编程规范不建议使用线程池,为什么?
    • 四种线程池原理?
    • 了解哪些算法?
    • IdleHandler用过吗?

    滴滴二面

    • 如何封装一个字符串转数字的工具类
    • 如何求当前Activity View的深度
    • 多进程怎么实现?如果启动一个多进程APP,会有几个进程运行?
    • 反射可以反射final修饰的字段吗?
    • Activity与AppCompactActivity区别,Activity会打包到包里面去吗?
    • 如何让两个线程循环交替打印
    • 怎么中止一个线程,Thread.Interupt一定有效吗?
    • 动画连续调用的原理是什么?
    • 做过一些SDK的操作吗?
    • 协程可以在Java项目中使用吗?
    • SharedPreference原理?读取xml是在哪个线程?
    • 了解APK打包的过程吗?
    • class文件的组成?常量池里面有什么内容?
    • 自动装箱发生在什么时候?编译期还是运行期
    • bugly日志收集的原理是什么?
    • 启动优化做过什么工作?如果首页就要用到的初始化?
    • DataBinding原理

    滴滴3面

    • 插件化的原理是什么?有没有什么非运行时插件化的解决方案?
    • ARouter的原理是怎样的?注解处理器是处理java还是字节码
    • java和字节码有什么区别?
    • kotlin空安全的原理是什么?
    • 性能优化做过什么工作?有用过什么工具?有没有精确测量的工具?
    • kotlinc与javac编译字节码有什么区别?
    • 你在团队中是怎样一个角色?
    • 你有没有做什么推进项目的工作
    • 说说热修复的原理?

    字节跳动

    • 你们的项目中有什么难点?
    • 你们项目的稳定性如何?有做过什么稳定性优化的工作?
    • WebView性能优化做过什么工作?
    • AIDL in out oneWay代表什么意思?
    • 线程池了解多少?拒绝策略有几种,为什么有newSingleThread
    • 跨进程通信了解多少?管道了解吗?
    • 协程介绍一下,讲一个协程的scope与context,协程的+号代表什么
    • Handler休眠是怎样的?epoll的原理是什么?如何实现延时消息,如果移除一个延时消息会解除休眠吗?
    • 算法斐波那契台阶
    • 手写生产者消息者模型
    • IdleHandler应用场景

    字节跳动2面

    • 自定义圆角图片
    • 自定义LinearLayout,怎么测量子View宽高
    • setFactory和setFactory2有什么区别?
    • 插件化换肤方案
    • 插件化的原理,startActivity hook了哪个方法
    • 手势操作ActionCancel后怎么取消
    • 怎么优化xml inflate的时间,涉及IO与反射。了解compose吗?
    • 算法题:二叉树的每一层最左边节点
    • RecyclerView 缓存结构,RecyclerView预取,RecyclerView局部刷新
    • setOnTouchListener,onClickeListener和onTouchEvent的关系

    面试前我是如何复习的?

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

    至于结果也还算满意,拿到几家 offer ,又要开启一段新的征程了。

    这里再分享一下我面试这段时间的复习路线:(以下体系的复习资料是我从各路大佬收集整理好的)

    《Android开发七大模块核心知识笔记》

    《960全网最全Android开发笔记》

    《379页Android开发面试宝典》

    历时半年,我们整理了这份市面上最全面的安卓面试题解析大全
    包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率。

    如何使用它?

    1.可以通过目录索引直接翻看需要的知识点,查漏补缺。
    2.五角星数表示面试问到的频率,代表重要推荐指数

    《507页Android开发相关源码解析》

    只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。

    真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。

    资料太多,全部展示会影响篇幅,暂时就先列举这些部分截图,以上资源均免费分享,以上内容均放在了开源项目:github 中已收录,大家可以自行获取(或者关注主页扫描加微信获取)。

    相关文章

      网友评论

        本文标题:Android开发3年,九月份面试12家大厂跳槽成功,我有一些面

        本文链接:https://www.haomeiwen.com/subject/mbnluktx.html