公司倒闭,面试被怼,闭关 2 个月拿下头条 offer,flutter 整合百度地图 sdk
一面(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 底层实现原理,ReentrantLoc
k 公平锁与非公平锁。3. 主线程等待所有线程执行完毕,再执行某个特定任务怎么实现?原理和源码看过没?4. 自定义 view 的一般流程,要注意些什么如何优化,点击事件和长按事件分别是怎么实现的?5. 四种启动模式,在源码分析中的原理是怎样的?6. 讲讲 bindService 的过程,你当初是怎么优化后台服务进程的?7. 开发中你都用到了哪些设计模式?说说当时具体的场景。为什么你要用方法工厂,另外两种呢?8. RxJava 在使用过程中碰到了某些不友好的错误一般怎么解决?发现了内存泄露一般怎么解决分析,有没有碰到过系统服务内存泄露的问题?9. 给你个数 1 吧,比如 1000011 里面有几个 1 ?10. 快排了解不?最坏的情况是怎样?如果有大量重复数据怎么优化?
今日头条面经
一面(40 分钟)
hashmap 实现原理;
自定义 view 的步骤;
给出一个 activity 的布局:activity 里包含 viewgroup1,viewgroup1 里包含 viewgroup2,viewgroup2 里包含 button,问 touch 事件的传递和处理机制;
Looper 和 handler 的关系;
activity 从后台进程切换到前台经历的生命周期;
有两个数字非常大已经超出了 long 型的范围,现在以链表的方式存储其中链表头表示最高位,例如 1->2->3->4 表示 1234,请设计一个算法求出两数之和;
二面(50 分钟)
怎样检测内存泄露,生产上怎么定位内存泄 r>2、怎样定位 native 层叠内存泄 r>3、bindservice 和 startservice 的区别
怎样不让别人绑定我的 service 服务
音乐播放器怎样实现退出页面还可以播放
contentprovider 插入一条数据要做那些操作
数据库事务和普通操作的区别,自己怎样实现事务
内存泄露有哪些,handler,单例,webview,具体场景,怎样解决
touch 的事件传递
怎样在子线程启动 handler
浮窗是怎么实现的,window 是由什么管理的
什么时候复写 measure layout draw
measure 方法是怎样将大小传递给系统的
自定义控件的时候,canvas 的 savecanvas 和 restorecanvas 的作用
home 按键的事件是怎么处理的
音量键是怎样传递的
aidl 的 oneway 的作用
三面(1 小时)
算法题 两个栈实现队列
算法题 输入一个数组,想一种方法让这个数组尽可能的乱序,保证功能能实现的情况下时间复杂度和空间复杂度尽可能的小,可使用随机数函数。(面试官最后说了 O(n)的时间复杂度能实现)
写一个单例(自己写一种就行)
ActivityA -> Activity B -> Activity A,Activity A 启动模式为 singleTask,Activity B 启动模式为常规模式,问 A 启动 B,B 又启动 A 的生命周期调用顺序?
你刚才提到 onsaveinstancestate() ,说一下调用时机,它用来干什么的。
onsaveinstancestate() 保存的那个参数叫什么?Bundle 里面都放一些什么东西?怎么实现序列化?Parcelable 和 Serializable 有什么区别?
数组和链表的区别
HashMap 的结构以及原理
了解 View 的绘制机制吗,能说一下吗
我看你项目里用的 Fragment 能说一下 Fragment A 启动了 Fragment B,Fragment B 中按下返回键只退出 Fragment B 怎么实现。
你还有什么要问的吗?
评论