倾心分享BAT、头条、美团iOS程序员面试技巧,如果你此刻还是新手

倾心分享BAT、头条、美团iOS程序员面试技巧,如果你此刻还是新手

前面几天刚不久面试结束,目前已拿头条、百度、腾讯offer,现在给大家可以分享并总结一下经验,关于面试题,可能没那么多时间来总结答案,有什么需要讨论的地方欢迎大家指教,顺便推荐下自己建的iOS交流分享学习组:566712619。主要记录一下我的准备过程,和面试的一些总结,希望能帮助到正在面试或者将要面试的同学吧。

倾心分享BAT、头条、美团iOS程序员面试技巧,如果你此刻还是新手

头条,百度。阿里,腾讯offer

美团一面:

记不太清了23333,主要问项目的一些技术点

  • 如何让一个label靠左,一个label靠右,然后右边的label能够完全显示
  • 算法奇数排在前面,偶数排在后面
  • 智力题,一个骑手送餐,ABCD商店,送给abcd四个人
  • kvo的实现原理
  • 消息调用的过程
  • get和post的区别
  • http有哪些部分
  • tcp和udp的区别
  • 七层模型

总结:美团是视频面,要求手写代码。主要还是问iOS方面的经验吧,算法题很简单也很常见,感觉春招面试算法题基本都是那些常见的,从我这份面试题中也可以看出,很多重复的。那道智力题想清除了也不算难。其它就是一些必备的iOS基础和计网基础吧。


美团二面:

  • 讲一讲响应链
  • 如何通过一个view查找它所在的viewController
  • 如何扩大view的响应范围
  • 微信分享大图如何实现,从进程的角度
  • 进程间的通信方式,并举例
  • 两个进程分别指向同一个地址空间并初始化一个值,分别输出是什么
  • 算法,判断一个字符串是否所有的大写字母都在小写字母前面
  • 修改podfile文件后,怎么用git diff显示出修改后版本和当前版本的不同,让我来设计
  • 程序执行的过程
  • 如果想要删除自己的一段代码,如何删除(在程序执行的过程中删除)
  • 用过脚本编程吗
  • 了解前后端吗

各科成绩,成绩排名

总结:这是我表现得最差的一轮面试吧,美团是我春招面的第一家公司,但是说实话当时准备得还不是很充分,也可以说没有面试经验吧,很多面试官问的问题我都没有get到面试官的点,不过这一面对广度深度都有要求,我面得有点懵逼,以为是一面表现得好二面故意压力面,结果并不是,猝。

倾心分享BAT、头条、美团iOS程序员面试技巧,如果你此刻还是新手

美团一面,美团二面

阿里一面:

  • 先介绍了项目,然后问了一些项目中的问题,然后开始问基础
  • 属性的关键字
  • 浅拷贝和深拷贝的区别
  • Block的循环引用、如何解决、原理
  • 三种Block
  • Block和delegate的比较
  • kvo的实现原理
  • Autorelease pool的实现原理
  • 消息转发机制
  • 线程死锁的四个条件
  • 进程和线程的区别
  • 持久化
  • 事务的特征
  • 中途还讨论了Masonry的约束应该写在哪里,我说应该写在layoutSubViews,他说会调用多次,然后争论了一会儿

总结:阿里一面算是一次中规中矩的一场面试吧,从介绍项目开始,然后由浅入深,主要考察iOS基础,面试官说我表现得不错,这次面试的时候我还在搜狐实习(捂脸)

阿里二面:

介绍项目

性能优化

YYModel和AF源码

如何自己设计json转model

架构

  • 迷之算法题
倾心分享BAT、头条、美团iOS程序员面试技巧,如果你此刻还是新手

总结:阿里的面试效率是真的不提了,二面和一面间隔时间可能相差了一个月吧,我已经从北京回到了学校开始上课了,而且这次面试感觉有点奇怪,最后那道迷之算法题我们也有讨论,实在没搞懂计算两点间的距离的算法还能怎样优化,面试结束后我问了面试官最优解是怎样的,面试官告诉我没有最优,只有更优


阿里三面:

一个安卓的面试官。。。。。

  • 主要问了项目的一些东西 和给一些场景问我如何实现
  • 自我介绍 介绍一些项目难点
  • 主线程是相对于什么而言的
  • 一张图片的内存占用大小是由什么决定的
  • 索引的作用
  • 索引的优缺点
  • 在数组中找最小的k个数
  • 淘宝下拉加载更多如何优化
  • 淘宝页面发送HTTP请求的过程
  • 介绍一下MVVM
  • 知道哪些设计模式

总结:三面面试官主要就聊了一些具体场景问题和一些基础,基础我觉得没太大问题。面试过程中我讲到一些东西发现面试官听不懂,才知道面试官是做安卓的,问一些问题其实有点让我无语,但是总的来说还是回答过来了,感觉也没有太大问题,但是后面还是被挂了,很无奈。

倾心分享BAT、头条、美团iOS程序员面试技巧,如果你此刻还是新手

阿里三面

头条一面:

  • MVC的一些缺点
  • 讲一讲其它架构
  • 你知道哪些编码方式
  • 算法字符串翻转
  • HTTPS
  • 多线程的方式和它们的区别
  • 队列和线程的关系
  • 一道线程安全的题
  • 有哪些锁
  • 属性的关键字
  • assign可以用于OC对象吗
  • copy和strong的区别
  • weak如何实现自动赋nil
  • 为什么不可变对象要用copy
  • assing可以使用在对象中吗

头条二面:

  • Pod update和pod install的区别
  • layoutIfNeeded和setNeedsLayout的区别
  • 抓包工具抓取HTTPS的原理
  • isEquel和hash的关系
  • SD的源码
  • bitmap的结构
  • 可变数组的实现原理
  • 如何hook一个对象的方法,而不影响其它对象
  • 如何避免if else
  • 自旋锁和互斥锁的区别

头条三面:

  • 介绍项目,主要介绍自己强项一点的地方
  • 数组cop后里面的元素会复制一份新的吗
  • 数组的浅拷贝与深拷贝
  • TCP为什么是三次握手和四次挥手

头条总结:头条一直都是视频面,而且是一条龙服务。总体来说感觉不错,反正主要就是需要基础足够扎实,不过之前听说的会手撕算法我倒是运气好没有碰到,就一面写了一道算法题。三面面试官等了一会儿没有来,约到了第二天(毕竟大佬都比较忙)。

倾心分享BAT、头条、美团iOS程序员面试技巧,如果你此刻还是新手

头条三面

腾讯一面:

  • 介绍项目的网络层
  • 为什么要使用HTTP???为什么不直接用TCP
  • 如何保证HTTP传输到达
  • HTTP头部有哪些内容
  • 讲一讲拥塞控制
  • MVVM如何实现绑定
  • block和通知的区别,分别适用什么场景
  • 算法。连续问了好几个,都是数组,层层递进的,但是我忘了,只记得最后是找出数组中重复的数字
  • 进程和线程的区别
  • 程序在运行时操作系统除了分配内存空间还有什么
  • 进程间通信的方式
  • 如何检测应用是否卡顿

好像没多少问题了,记不太清,然后他说完了,我感觉好快,以为要挂了,就强行讲了些runloop和性能优化的东西,然后他说好了,你和下一轮面试官再说吧

总结:k神前一天晚上帮我推的简历,第二天就接到电话了,效率还是比较高。打电话的时候我正在上课,面试官上来就要开始面试,我约到了晚上。这次面试其实表现得也不够好,前两个问题有点没get到面试官想问的点,问得很快。最后面试官突然说他问完了,我很虚,以为自己是挂了,然后给面试官说面试是不是太快了,iOS方面的东西好像都没怎么问。面试官说如果你觉得你还有什么没用展现出来的,你就说说吧,然后我强行讲了一些性能优化方面的东西,因为这是我唯一准备的了解得稍微有点深的东西了。最后还没讲完,面试官直接告诉我让我和下一轮面试官再讲。我不知道如果后面我不强行讲的话,这一面会不会挂,所以很多事情还是需要我们自己努力去争取机会的。

腾讯二面:

  • OC中对象的结构
  • 多态
  • Ping是什么协议
  • 知道MTU吗
  • TCP头部多长,IP呢
  • 线程同步的方式
  • iOS中有哪些锁
  • MVC和MVVM的区别
  • 了解哪些设计模式
  • 存一个通讯录,包括增删改查,用什么数据结构
  • 看过哪些源码,讲讲思路
  • 两个链表找第一个相同结点
  • 字符串旋转
  • 找链表的倒数第k个结点
  • 把一个链表比某个值大的放在左边,比它小的放在右边
  • 二叉树的中序遍历,非递归

总结:主要还是基础,腾讯是真的喜欢问计网和数据结构。这一轮面试我可以说是裸面了,那几天都在放飞自我,因为那时候已经拿了头条offer,也没有其它想法了,就想着随便面面吧,不过也无所谓。还好面试的时候还能进入状态,虽然面得不是特别好,不过基本上还是能答出来,最后的二叉树遍历,由于平常都想的是递归,一直没怎么注意非递归的实现,我卡了一会儿,还好最后还是想出来了(请不要嘲笑我)。

中间有个小插曲,就是过了几天我在公众号上面查发现我的状态已经挂了,都已经“心灰意冷”了,结果昨天收到一个广东深圳的电话,当时心里就挺激动的,接通后果然是腾讯的HR,意外惊喜。

百度一面:

  • 大概回忆一下
  • 进程和线程的区别
  • 一个进程有哪些区
  • 拥塞控制
  • 进程间通信的方式
  • 七层模型
  • TCP和UDP的区别
  • 传输层和网络层分别是做什么的
  • UDP可以实现一对多??
  • 算法 求数组的最长子数组
  • Http2.0如1.x的区别

总结:开始是把我推给的一个偏网络层做C++的部门,所以面试基本都是计算机基础,也讲了一些iOS的东西,但是我猜面试官可能也不是做iOS的。本来打算问我C++,我果断说自己没怎么写过C++,如果问C++我肯定hold不住。

百度二面:

  • 发送一个HTTP请求的过程
  • TCP是如何保证可靠的
  • 内核态和用户态的区别
  • 在一个10G的数据里面找出最大的100个数
  • 讲一下我最满意的一个项目
  • 然后讲了一下网络造成卡顿的原因

总结:这一面是把我转到做APM的那个组后面的,感觉面试官时间很急,面得有些突兀,不过没有太大的问题,所以基本就让我过了吧。

百度三面:

全是问得iOS方面的问题,问得真的很细,需要基础很扎实,对各个机制真的足够理解,不然确实有点难回答。我只列举一下大概方向,这些东西也是iOS开发必须掌握的基础吧

  • 属性的关键字方面的
  • 内存管理方面的
  • 多线程
  • 各种队列
  • 线程锁
  • MVVM

总结:本来前一面面完都说我技术面已经通过了,我还很诧异,结果发现是搞错了,所以补了这一面,就是考察一下我iOS方面的能力到底是否有水分吧。问得很细,确实需要基础足够扎实才行。

写在最后

以上的面试题肯定是不完整的,只能根据我的印象记录我能想起来的了,而且即时是一个看似简单的题,你如果没有真正弄明白它的原理的话,在面试过程中你也很有可能被问懵,所以一定要打好基础,要知其然并知其所以然。如果你能把上面的问题搞得很清楚的话,我觉得BAT的offer应该都是没有问题的。当然有时候面试还是要看一点运气的,所以我们还需要抓住每一次面试机会。希望面试的同学一切顺利。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值