在2019年5月初,公司倒闭,无奈走上找工作的道路,不想自己平时图安逸,不思进取,再次找工作才发现,Android行业也不是站在风口上,猪也能吹上天的世道了.作为技术小菜的我,在找工作那段时间真是战战兢兢,被打击得信心全无.最后用了2个月的时间去复习和学习,历经了几个月的时间,最终拿到了今日头条的offer。
本篇文章记录下我的学习方法和面试经历,分享给需要的人.勉励自己要时时进步,才不会被淘汰.
面经
从老公司倒闭后开始准备面试的东西,在5月底开始投,投递的公司有:
- 钉钉
被捞+面试* 网易
被捞+面试* 滴滴出行
沉* 腾讯视频
被捞+面试* 华为
沉* 今日头条
被捞+面试* 饿了么
沉
钉钉、网易和腾讯视频都挂在了二面,今日头条是在复习了2个月后才去面试的,经过了3面(不包括HR面)拿到了offer。
钉钉面经
一面(50分钟)
- MVC具有什么样的优势,各个模块之间怎么通信,比如点击 Button 后 怎么通知 Model?
- 两个无限长度链表(也就是可能有环) 判断有没有交点
- UITableView的相关优化
- KVO、Notification、delegate各自的优缺点,效率还有使用场景
- 如何手动通知KVO
- Objective-C 中的copy方法
- runtime 中,SEL和IMP的区别
- autoreleasepool的使用场景和原理
- RunLoop的实现原理和数据结构,什么时候会用到
- block为什么会有循环引用
- 使用GCD如何实现这个需求:A、B、C 三个任务并发,完成后执行任务 D。
- NSOperation和GCD的区别
- CoreData的使用,如何处理多线程问题
- 如何设计图片缓存?
- 有没有自己设计过网络控件?
二面(40分钟)
- 怎么判断某个cell是否显示在屏幕上
- 进程和线程的区别
- TCP与UDP区别
- TCP流量控制
- 数组和链表的区别
- UIView生命周期
- 如果页面 A 跳转到 页面 B,A 的viewDidDisappear方法和 B 的viewDidAppear方法哪个先调用?
- block循环引用问题
- ARC的本质
- RunLoop的基本概念,它是怎么休眠的?
- Autoreleasepool什么时候释放,在什么场景下使用?
- 如何找到字符串中第一个不重复的字符
- 哈希表如何处理冲突
网易面经
一面(30分钟)
- TCP的三次握手说一下?为什么是三次握手?为什么是四次挥手?
- Service用过吗?生命周期说一下?当内存不足时Service被杀死了,如何重启这个Service。
- Fragment用过吗?Activity如何传参给Fragment?为什么用setArgument传参,而不是使用带有参数的构造器?
- 知道系统杀进程吗?如果栈中从底到顶现在是A,B,C,然后系统把应用杀了,重新点击,显示的是哪个Activity?这时如果C里面有Fragment是怎样恢复的?
- Android的持久化方式?ContentProvider自身是否存储数据?
二面(40分钟)
- 算法:实现String的endWith()方法。
- 创建线程的方式?线程同步方法?
- 垃圾回收机制说一下?
- 多态说一下?重载和重写说一下?
- Android启动模式说一下?如果我要实现网页一样的效果,需要使用哪个模式?
- Android的适配了解吗?
- 用过哪些第三方库?说一下Okhttp的优点?
腾讯视频面经
一面(40分钟)
- mmap + native 日志优化?
- 广播和 EventBus 的区别?
- 常用设计模式你了解哪些?
- 跨进程通信有哪些?
- 简单讲讲 binder 驱动吧?
- 跨进程传递大内存数据如何做?
- 说说 ConcurrentHashMap 的实现原理说下,初始化大小是多少?
- 启动优化怎么优化?
- 你写的 rxpay 和 rxlogin 具体怎么实现的?
- kotlin + fullter 方面的
二面(50分钟)
- 单例设计模式都写写,静态内部类是怎么保证线程安全的?
- synchronized 底层实现原理,ReentrantLock 公平锁与非公平锁。
- 主线程等待所有线程执行完毕,再执行某个特定任务怎么实现?原理和源码看过没?
- 自定义 view 的一般流程,要注意些什么如何优化,点击事件和长按事件分别是怎么实现的?
- 四种启动模式,在源码分析中的原理是怎样的?
- 讲讲 bindService 的过程,你当初是怎么优化后台服务进程的?
- 开发中你都用到了哪些设计模式?说说当时具体的场景。为什么你要用方法工厂,另外两种呢?
- RxJava 在使用过程中碰到了某些不友好的错误一般怎么解决?发现了内存泄露一般怎么解决分析,有没有碰到过系统服务内存泄露的问题?
- 给你个数 1 吧,比如 1000011 里面有几个 1 ?
- 快排了解不?最坏的情况是怎样?如果有大量重复数据怎么优化?
今日头条面经
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
要如何成为Android架构师?
搭建自己的知识框架,全面提升自己的技术体系,并且往底层源码方向深入钻研。
大多数技术人喜欢用思维脑图来构建自己的知识体系,一目了然。这里给大家分享一份大厂主流的Android架构师技术体系,可以用来搭建自己的知识框架,或者查漏补缺;
对应这份技术大纲,我也整理了一套Android高级架构师完整系列的视频教程,主要针对3-5年Android开发经验以上,需要往高级架构师层次学习提升的同学,在这里点击GitHub免费分享,希望能帮你突破瓶颈,跳槽进大厂;
最后我必须强调几点:
1.搭建知识框架可不是说你整理好要学习的知识顺序,然后看一遍理解了能复制粘贴就够了,大多都是需要你自己读懂源码和原理,能自己手写出来的。
2.学习的时候你一定要多看多练几遍,把知识才吃透,还要记笔记,这些很重要! 最后你达到什么水平取决你消化了多少知识
3.最终你的知识框架应该是一个完善的,兼顾广度和深度的技术体系。然后经过多次项目实战积累经验,你才能达到高级架构师的层次。
你只需要按照在这个大的框架去填充自己,年薪40W一定不是终点,技术无止境
还要记笔记,这些很重要! 最后你达到什么水平取决你消化了多少知识
3.最终你的知识框架应该是一个完善的,兼顾广度和深度的技术体系。然后经过多次项目实战积累经验,你才能达到高级架构师的层次。
你只需要按照在这个大的框架去填充自己,年薪40W一定不是终点,技术无止境