毕业好几年了,上周发送了简历给腾讯,参加了腾讯面试。具体部门这边就不说了。此次面试仍是收获到了不少。面试
一面电话面试:算法
面试官主要是针对iOS相关的基础问题。数据库
先简单自我介绍一下本身缓存
对mrc和arc的理解性能优化
谈谈对自动释放池的理解网络
自动释放池在mrc和arc区别多线程
多层自动释放池嵌套的对象在哪一层释放框架
对于block,理解,mrc和arc下有什么区别,使用注意事项oop
对于深拷贝和浅拷贝的理解性能
对于strong weak,atomic等等理解
weak原理
若是属性彻底不加修饰词入weak,atomic,系统会怎么处理
简述下block的实现
描述下IM系统如何保证消息不丢
IM数据库如何设计表
C++引用和指针有什么区别
Http协议30x的错误是什么
谈谈你懂runloop得理解:由浅入深
谈谈对多线程理解:由浅入深
谈谈category和extension区别,系统如何底层实现category
谈谈消息转发机制实现
谈谈事件响应链,如何响应view以外的事件
界面性能优化
整个面试大约1个半小时。总体上,回答的还算OK,自动释放池这块,不够清楚底层实现。另外atomic是在属性没有写的状况下系统默认的。Block的底层实现也表达的不够准确。
一面以后过了几天,给了二面通知。
二面视频面试:
此次面试官相对于一面,更加侧重于过往项目。
1.开头都是简短的自我介绍 2.聊一聊过往项目中你以为收获最大的一个模块。
忽然遇到这个问题,心理是有点懵逼的呀,我不由反想了一下,过去这些个项目,零零散散收获了很多知识和经验,但是具体到哪个模块,完整的思考仍是没有过的。
答: 就说了上个项目作相似朋友圈的优化思路,谈到了空间换时间,缓存,渲染相关的技术点。
不得不惊叹腾讯的面试官的逻辑条理,很快抓住了问题的本质。
需求痛点:界面卡顿,体验很差 解决方案:探索的思路-》解决方案。
该模块引伸到的新话题还涉及到了增量更新,内存缓存,本地缓存。
细节上还谈到了富文本绘制,Coretext框架的使用,哎,说来惭愧,上次使用coretext已是两年前,连框架的核心API都已经不记得了。再加上项目中使用的是YYLabel的开源框架。最后只能凭借印象大概说了下绘制的流程,其实面试官都是由浅入深的,若是这边回答的不够深刻。那么后面也就不会有更深刻的探讨了。
3.上个项目中存在视频裁剪,录制等功能。 面试官对这块有些兴趣,就聊到了视频裁剪的实现,由于咱们项目中使用了ffmpeg作的裁剪功能。包括视频下载,数据裁剪封装,引伸聊到了边预览边裁剪,由于我以前的项目并无作到预览裁剪这块。也就没有深刻聊下去了。期间简单谈到了rstp协议,和HLS,rtmp等协议的对比,信令协议。虽然以前都有看过协议的大体实现和预览,可是实际使用的是SDK,没有实践加持。这部分知识是很容易忘记的。大体聊了下整体差异。
4.项目中有用到过DLNA投屏协议 说来又是惭愧,本身完整作过的项目,过去了两年,竟然连流程,协议都只是零零散散的记起来了,很勉强的说出了大概实现流程。知道最后才记起来是soap协议。当初为了作这个但是研究了整整两周的。面试官应该也实现过这个需求,提到了视频盒子断线如何检测作处理,什么缘由致使的。因为以前咱们的产品需求比较简单,没有特别完善。这里我也只能说了大概。
5.项目作过视频播放需求,使用的AVPlayer框架(重点聊) 面试官问到,AVPlayer怎么监听视频缓冲状态的,有哪几种状态。说来又是惭愧,我只记得是KVO监听的。具体的API已经记不清了。 接着面试官问到这个需求遇到过哪些坑,怎么解决的。 这个还真的有,首先是回调播放进度在拖动时候错乱,加载某些小视频的适配,首帧出图很慢。KVO的模式不灵活。缓冲进度不受咱们控制。短视频可能直接迅速缓冲到底。 仍是以前的思路 需求痛点有了 解决方案:探索的思路-》解决方案。 不得不说以前作的产品,都是需求驱动,解决了需求,不少时候就没有极客精神,在深刻的去探讨。这块真的是差!
发散问到了:若是网络很差,首帧出图以后,如何优化后续播放不卡顿 当时已经一脸懵逼了:就提到了能够适当加大缓冲区,等到足够的I帧数据再开始播放。
甚至连常规的码率切换思路都没想到。做为作音视频相关产品的我太不该该了。
6.项目聊完了以后,又追问了iOS的一些基础问题,属性和成员变量区别,strong,atomic关键字,怎么理解runloop,runloop有几种状态等等。
7.最后给出了一个很是有意思的算法题
有15个瓶子,其中最多有一瓶有毒,如今有四只老鼠,喝了有毒的水以后,次日就会死。如何在次日就能够判断出哪一个瓶子有毒 答:开始我想到的是常规思路二分法,717,和面试官说了,发现四只老鼠根本不够,面试官友好的提示从老鼠面去想,这时候很快想到了一个老鼠有死和不死,也就0和1两个状态,四只老鼠有16个组合,正好是足够的。可是怎么分配瓶子,还没想好,演算了一下子,由于面试官这边时间有限,就说思路是正确的。下面有兴趣在看怎么分哈。面试就到此结束了。
二面持续了大约一个小时多一点。 二面本身感受了不少欠缺,不够深刻。
面试总结
腾讯的面试官都很是的友好,逻辑性很是强。综合素质很高。面试过程当中虽然针对的都是技术问题,可是考察的包含了逻辑思惟和产品思惟以及沟通能力等综合素质。特别是二面。
认识到了本身的不足:
1.不够极客精神:仍是需求驱动,以前的项目不少设计优化由于对产品的需求没有那么高精度,遇到痛点的时候:仅仅作了初步的探讨,没有造成完整的闭环
每每是作了必定的优化知足了需求就结束整个过程了。这对于自个人成长是很很差的。好比一个API了解到百分之70,没有到100.
虽然每一个环节都有去学习,也都知道流程,可是这是不够。要深刻进去。即便本身的项目没有这块实践需求。也要自我驱动去作。
3.自我总结欠缺:之前都是浑浑噩噩的快乐开发,也自学了很多。每一个项目,或者每一个自我学习的过程走一段,都应该站在更高点去总结一下。
例如项目,要站在产品角度,自我学习,要站在总体框架角度。不然学习到的东西一段时间不用就忘记了。高度也不够。没有彻底消化透。感受什么都懂一些,可是什么都差一点火候
怎么改善提升
多写Blog分享,东西会作,和能写出来是两个层面。即便网上已经有不少实现了。消化好以后,用本身的思路表达出来,也有很大提升
遇到问题,不管是项目仍是本身实践,都要多问几个为何,不能浅尝辄止,站在产品角度。从原理层面理解问题,最重要是给出解决问题方案。demo不等于工程。
阶段性总结知识点。古语: 学而时习之。
反思了不少:也清楚认识到本身的一些优势,有技术热情,爱好学习。很好的逻辑思惟。沟通能力。相信只要坚持努力。必定能得到好的结果。也给本身打打气。共勉之。
本文为第三方转载。 原文连接:mp.weixin.qq.com/s/rj3G4vaaR…