ffcb3e1c229fc282eaf1b58fdf23e33d.png点击上方蓝字关注,获取更多求职咨询

大家好,我是礼包君~

今天给大家分享一篇IOS开发分享帖,希望对大家有所帮助。

▼▼▼

我的背景                      

1.北邮本科+专硕,专业是通信工程+电子通信工程;

2.无实习经历,实验室项目不相关;

3.本科学过C++,玩过一点iOS开发;

4.算法基础薄弱;

5.投递的都是iOS移动客户端开发。

简述一下实习准备的过程,实习面经计划另写一篇贴以作记录,也方便大家按照阶段参考。

2020.2.10 - 2.20

这段时间把C++过了一遍,b站上找的讲课视频;

2020.2.20 - 3.13

在leetcode中开始了《剑指offer》第一题,把主要的题都写(抄)了一遍,大概四五十道的样子,比较花哨的题就没写了,基本上每道题写了自己的题解

2020.3.3 开始

整理牛客上的C++面试宝典,然后还有github上搜的知识点汇总,比如CSNotes 、Skill-Tree。

git上有很多优质的知识点整理,我复习的主要是操作系统和计网,设计模式和数据库都抛了

2020.3.15 开始投递实习

第一个面试是字节跳动,安排在3.31。

2020.3.31 - 4.14

连续面试,字节、腾讯、小米、蘑菇街等。

最后拿到了小米iOS的实习,但是后来北京疫情反复,又不能远程,就干脆投奔秋招了。在如今看来是一个相当后悔的决定。

实习一定要去! 实习转正 = 多一次秋招机会,而且秋招什么神仙打架难度,实习转正真的容易多了。

以上是找实习的总体时间线过程,详细内容和感受以后再展开~

秋招准备                      

实验室的工作持续到07.15才完全放人,但是在7月初就开始着手准备了。

07.07 - 07.15(项目)

找了网上的课程做个简单项目,但是iOS真的不好找。时间都比较久远。最后做了个简单的新闻类iOS APP项目。

总结:这部分的时间显然花的太少了,面试的展开基本从项目开始,上来就是问项目有什么难点?

其实不一定项目要全部完成,面面俱到。可以在一定完成度的基础上,专注于研究一两个点,从优化的角度做一些改善。

在碰壁的过程中才会总结出自己的东西,这样面试有话说,过程真实,只跟着课程走,会缺少那种困扰好几天尝试很多办法才把问题解决的经历。

而且面试问你难点,不是真要有什么技术突破,体现你研究问题解决问题的思维过程比较重要。

07.06 ~ 08.13(刷题)

由于找实习期间笔试感觉很多倒在了动态规划上,所以七月份有大约20天在集中攻克动态规划专题。

然后按照专题来,链表专题,树专题等。最后leetcode大概120道左右,通过的提交次数是230左右(有一些重复刷的题)。

总结:刷题要求看个人情况,算法后端通过算题刷人很严重。但是客户端来说,现在看来,当时刷的那么多动态规划基本没用上过。

客户端面试基本不会问那么难,而笔试遇到的动态规划又不是我能在两个小时内写出来的。所以就有点鸡肋,当然动态规划本身还是很好玩的,以后能用到也不一定。

面试最多的还是《剑指offer》,leetcode上的hot 100中的树、链表、字符串和数组,外加排序,都是基础中的基础。

08.15 - 08.25(计网和操作系统深入理解)

总结:梳理完知识点后,多看面经。面经里会出现一些更深入和细节的问法,多看看,面试的时候才能快速反应过来,不至于尬住。

08.15这几天花时间重新改了简历,开始投递秋招。投递公司按照自己的意愿列了个优先级,因为我想去南方,所以优先选择的是广东和上海的岗位。

总结:简历上措辞要慎重,要确保任何一个点,以及它横向纵向扩展的内容,你都是了然于胸的,不然写上去就是送命题。

08.04 - 08.11 (iOS的OC语言知识点复习)

新浪于海老师的一个课程梳理了一遍完整的。

8月底就返校了,开始宿舍里面试的日子了。

我秋招面试过的公司是:腾讯(一面挂)、字节(offer)、虎牙(一面挂)、京东(二面挂)、网易(一面挂)、shopee(一挂)、58同城(offer)和金山WPS(没面了)。

秋招面经汇总                      

这里主要讲字节的7次面试吧,其他公司的单独写好了,方便大家搜索公司名字的时候能查到吧。

08.02 - 字节飞书 一面

1.自我介绍,还问过是否了解swift语言。。。

2.问了UITableView使用时的感受?有什么优缺点?

3.代码的布局是用的代码还是什么?是否做过机型匹配相关的工作?

4.问了网络请求用的什么做的,我回答了session和AFN,然后顺势问了用过哪些第三方库。回答还用过SDwebimage。这里好像还问了做的项目是否是有后台的?

5.问了sdwebimage做了什么工作,和我们直接从网络上拉图片相比有什么不同?

6.然后是get和post的区别,还是幂等性和安全性的问题,这次针对的是安全性,问:我回答post会上传数据修改服务器资源,所以是不安全的,然后反问,难道get不能上传数据吗?

7.问http有哪些头部字段?

8.问了keep alive,keep alive怎么工作?

9.有没有做过断点续传的相关工作?

10.https的工作机制?

11.notification的post与响应会在哪个线程?大概是这么一个问题,这个正好之前被tx问了通知是否为线程安全的?然后回去查了一下。

12.具体问了,如果一个类被销毁了,然后给他发送通知还会响应吗?

13.然后开始C++大礼包

14.C++中的new与malloc有什么区别?

15.C++虚函数工作原理

16.构造函数析构函数是否可以为虚函数

17.重载与重写?

18.vector与list的区别,访问和插入的速度哪个快?为什么?

19.memcopy和strcopy有什么区别???

20.算法题,数组中超过一半的数字。不能用map和set这种可以直接排序的数据结构。剑指原题

一面比较基础,但是当时C++没来得及复习,好在算法题秒了,应该是三天内通知过了约下一面

09.04 - 字节飞书 二面

1.开篇自我介绍针对第三个项目,为什么要做这个项目,是怎么学习这个项目的?感觉是考察做技术的动机,和钻研的热情之类的,

2.三个项目中的难点,以及如何解决

3.h5网页播放是否有性能测试(项目里的)

4.C++ linux项目这个是如何做的,他的意思应该是问系统设计,但是我主要的是回答硬件设计。

5.自相关循环是怎么做?(通信里的)

6.第一个新闻的app,代码规模有多大?数据来源是什么?

7.有没有做过性能优化方面的工作,加载图片,多线程拉取。

8.多线程遇到什么问题?回答了死锁

9.多线程访问同一个资源的冲突问题,加锁,互斥锁信号量。

10.回归到基础问题了:

11.iOS系统分为哪些架构?

12.遇到过哪些crash的情况?

13.了解哪些设计模式?

14.delegate是如何实现的?这个是要怎么回答?我回答的委托机制如何实现,但是感觉他问的是,delegate这个代码逻辑上如何实现的。

15.沙盒机制了解吗?

16.swift了解吗?如果要你用swift,自己开发一个项目,开发周期为一周,你如何做?

17.算法题,链表环入口,用了双指针,分析了一下时间复杂和空间复杂度,问进一步有没有优化空间,回答不知道,面试官解释是希望每个问题都有自己的理解,如何去提升

18.最后补充问了,要设计一个内存池,如何设计?应该实现一些什么功能?

19.知道内存碎片是什么吗?

20.职业规划?

21.反问环节

09.14 - 字节飞书 三面  

1.自我介绍;

2.有哪些View

3.用view的时候如何选择?

4.项目难点;

5.如何解决项目难点,怎么想出解决方案?

6.有没有实习?

7.死锁,死锁避免?

8.算法:最大连续子数组的和。

9.dp,优化空间,我用了原数组,然后不让用,结果改成其他变量的时候出了问题,没调试出来。。。。

三面感觉挂在了算法?09-16问了HR未通过,09-24二志愿捞。

09.29 - 字节抖音创作工具 一面

1.最近的这个新闻APP,你负责的是什么工作?

2.有什么难点?这里应该有一个简洁版的说法

3.有没有用第三方框架?图片缓存?

4.NSCache有什么特点?

5.NSCache和字典有什么区别?

6.多线程,访问会有什么问题;

7.信号量和互斥锁

8.互斥锁的特点以及和信号量的区别

9.属性的多读单写

10.然后getter方法中sync的话,不是同步吗,怎么多读?然后说现在往广度扩展一下,实际上就是深度不挖了的意思。

11.死锁是什么?条件?避免?

12.举一个OC中死锁的例子,或者写一段代码?这里我举例例子是dipatch_sync main queue

13.内存映射?mmap是个什么函数?

14.计算机是怎么存储0.1这个数的?

15.怎么理解TCP的连接 ,可靠和字节流

16.拥塞控制

17.什么时候进入Close Wait状态?

18.c++中vector 和 list 有什么区别

19.map和unoder _map实现原理有什么区别?为什么有了map还要由一个unoder map?

20.快排的复杂度,简述,然后是否稳定?

21.算法题,池塘面积,输入输出debug遇到了一点点问题

09.30 - 字节抖音创作工具 二面

下午三点
无自我介绍,直接开怼

1.先评价之前的面试有哪些表现不足?

2.我说广度和深度上都有不足,然后让我举例。

我说浮点数这个,他说这是基础。

4.tableview的优化有总结吗?在性能和内存上

5.内存复用,背后的数据结构,设计原则中一般会设计一个对象池,这个是怎么做?

6.cell高度动态计算

7.KVO的原理

8.C++ 11 了解吗还是停留在03左右,

9.值引用,引用和指针的区别?

10.如果一个类存在父类,基类的虚构函数要用virtual修饰为什么?这里我回答时举例了,如果子类具有父类没有的一些成员变量,需要调用子类的析构函数去释放空间

11.如果子类没有额外的成员变量,如果子类是个空实现,没有变量没有方法,会有问题吗?

12.声明为虚函数有什么变化?多了虚表指针和虚函数表

13.虚表生成和地址引用发生在什么时期?

14.OC里面怎么解决多态问题?

15.先问了多态的定义是什么?

16.分类为什么可以用来做多继承?怎么实现?

17.菱形继承问题怎么解决?什么是菱形继承?

18.OC内存管理了解?引用计数的原理是什么?(OC有更高级的GC,但是iOS上只考虑引用计数)

19.引用计数为什么会导致循环引用?

20.一般怎么解决循环引用?

21.weak怎么置nil?原理了解吗?

22.其他的高级内存管理,其他的GC了解吗

23.JAVA的GC机制了解吗?

24.深浅拷贝?

25.C++怎么做深拷贝?

26.OC深拷贝

27.对于string 的copy和array的copy 是一样的吗?面试官的意思是,copy实际上调用的是copywithZone,所以不同子类复写的实现应该是不一样的。

28.限定NSArray的copy

29.那引用一个NSArray 和copy 一个NSArray的区别在哪?

30.IOS怎么加载一个进程?

31.iOS的虚拟内存了解吗?不了解的话说一下普通的虚拟内存。

32.缺页中断和页置换算法

33.用户态和内核态切换发生在什么时候?切换时机?

34.智力题

    1.random7 求 random5

    2.3L 5L 杯子 4L 水

35.算法题:

给定一个char数组,使用字符+次数的方式进行压缩,次数为1时只保留字符。返回新的char数组

in:['a','a','b','b','c','c','c','d']

out:['a', '2', 'b', '2', 'c', '3', 'd']

问:如果某个字符超过10个怎么处理?

10.15 - 字节抖音创作工具三面

上午十一点,终面面试官不是做iOS的。。。

1.这次是一个简单的自我介绍;

2.项目难点

3.缓存大概的策略,什么时候使用缓存,缓存的什么周期

4.二级缓存是还没有实现吗?我应该说还没有实现完

5.如果实现这个二级缓存的话要考虑到哪些点呢?

6.APP的开发周期大概是多久?

7.代码量大概多少?评估过吗?

8.过程中有哪些收获呢?

9.项目中新闻视频的资源怎么获取的?

10.Json和XML有什么区别,优劣势?

11.Cell复用的原理

12.和MVC MVP MVVM?

13.了解过设计模式吗?

14.项目中有用到过观察者模式吗?

15.还有其他的设计模式吗?

16.工厂模式,描述一下?

17.依赖注入了解吗?

18.iOS学习过程?通过哪些途径去学习呢?

19.看过第三方库源码吗?

20.最近有在学什么吗?

21.接触iOS多长时间了?什么时候开始学?

22.git的命令了解吗?

23.git的机制,怎么实现代码的管理的?思想?

24.C++智能指针

25.网络里边HTTP状态码?

26.断点续传的概念?

27.输入网址的过程,DNS解析

28.数据库了解吗?查询语句之类的?

29.写个代码

反转单词,hello word变为word hello,空间复杂度O(1)

这次真的很可惜,隔了一个国庆假期都还是倒下了。最后算法题其实很简单,可是我太紧张了。

设计模式答的也不好。本来到这里打算放弃了,第二天HR告诉我没通过,但是另一个部门有意.

我想着还要煎熬三轮就想婉拒了,但是HR告诉我是另个部门的业务终面,然后我又打起精神刷了几天题,开始第七面。

10.21 - 字节抖音创作工具 终面

1.tableView和collectionView,如果有数据变更的时候,是这个数据源的reload还是有定向的更新?

2.开发的环境是linux的C++,c++的标准?

3.操作系统的文件系统?

4.还记得操作系统的哪些内容?

5.项目中多线程场景

6.对自己的评价?在这个软开的领域有什么擅长的地方?优势。我答了比较喜欢钻研原理。然后让举个例子

7.举个例子,我就说了之前研究事件响应链的时候,在进入到APP的响应链之前,操作系统怎么做的,IOKit 到SpringBoard,然后mach port的这个流程。

8.其他公司的offer情况?什么时候能来实习?

9.后面对自己的定位,想发展成为什么样的工程师?

10.觉得读研究对自己的最大的帮助是?

11.反问,工作时间安排之类的

12.面试官补充问:喜欢什么样的工作的团队氛围和节奏?沟通上的倾向。

13.哪里人?

11.03号HR谈了offer,如释重负,一瞬间有些恍惚,我真的熬过来了。

总结                      

还是按照时间线来总结一下吧?

对于将来要找工作的朋友们,有一个较为明确的职业规划,或者职业方向真的很重要

对于通信电气大类的伙伴们,无非就是

1.互联网(算法、后端、前端、客户端、测开);

通信类设备公司(华为、中兴、高通、OPPO、VIVO),职能种类更多大家可自查

2.国企、央企、事业单位等(不要小看这个选择,隐形福利很多很多,而且国企大牛同样很多,只是确实氛围和互联网不一样,考验人的自我驱动能力,但是轻松不少。能不能解决户口看具体公司)

3.公务员系列(不同地区有各自的公务员岗位校招分配政策,要求一般有:党员、成绩排名前30%,国奖得主等,满足其一即可,大家多去学校的就业指导中心了解,老师们知道很多信息)

4.其他,比如外企,我身边没有直接例子的我就不展开了

身边有提前想好要去互联网工作的同学,早早的在考研的时候就选择了偏向互联网的实验室,项目经历与工作岗位匹配,研一就开始刷题,最后不出意外轻轻松松拿到阿里的offer。  

也有开始就想好去国企的,提前准备申论和行测的考试。

机会真的只留给有准备的人。而我的时间都花在偏向通信的项目,最后又不想去搞通信。

且通信的话,基本上只能去华为的无线通信,中兴的基带软开,OPPO的通信协议等岗位。

相对来说岗位少,待遇还是比互联网差点。而且身边充斥着去互联网的氛围,也算是被迫驱动,随波逐流吧。

一如我考研的时候一般,随大流考个通信原理。本科和研究生一直没有长远一点的职业目标和方向,时间投入很分散,最后找工作就比较被动。

如果你不知道想干什么,那更不应该每天混日子了

你应该去花时间了解自己适合什么,最好的方式就是去实习。

不知道自己是否适合互联网奋斗,那花几个月时间找个实习感受一下。

有不少同学就是互联网实习了之后被劝退,转头就去国企的。而且多看看公司的招聘网站,了解职位要求的技能,对自己哪些方面欠缺也能有个概念。

对于互联网秋招本身,总结一下踩过的坑和个人的心得,希望能改大家带来些许帮助。

1.互联网秋招开始的时间

往年都说金九银十,但是实不相瞒,我今年听到的最早的提前批,是06.05的VIVO研发招聘。

我当时都惊了。然后应该是7月份的字节提前批,8月初的腾讯提前批,至此秋招全面开启。

因此,大佬们都是金8银9的。当然,10月也是主要招聘时段,只是大厂少了些坑。

11月基本上接近尾声,开始全面开奖,比offer、毁offer、签三方等等。

所以秋招是一个比较漫长的持久战,首先复习要开始的早。而且对于有些在实习的同学来讲,这是最艰难的时候,可能论文+实习+准备秋招都堆在了一起,但是似乎大家都是这么过来的。

其次是抱好团,信息共享,面试问题集中讨论,一人面试等于多人都有收获,互相模拟面试,查漏补缺。

对了,牛客网上有个ai模拟面试,可以多试试,听听自己回答的录音,肯定会有收获的。

然后心态要平和,不要因为一时的面试表现而妄自菲薄,面试成长性也是一个重要的特质。

最后坚持就是胜利。

2.投递简历的顺序安排

我其实是想按照自己的意愿,将想去的公司分梯队投递,先面小公司练练手。

奈何大厂开始的早而且普遍效率高,最后先面试的一般都是大厂。

而像tx这样的基本就只有一次机会(大佬除外),所以还是要珍惜好每一次面试的机会,并且每次面试的表现都会被记录在案的哈。

3.关于内推

现在一般都是视频远程面试,牛客网上撕代码。我一般会录个音方便后续复盘。

自我介绍可以稍微简要一些,重在表现概括能力,稍微引导一下前面的几个问题

对自己的项目要熟悉,各种引申的知识点要覆盖到。

基础知识点就是背诵八股文了,不过也不能完全照着网上的背诵,理解过这个知识点然后用自己的话概括是最好的,回答的时候要有一些停顿。

但是真的要熟练,如果问了个基础题然后还支支吾吾想半天,真的挺减分(比如我,背的太差了)。

常见的算法题也要刷的熟练,最好是看到就有思路。不然,面试的时候写代码真的超级紧张,跟平时写题的水平差挺多。

这个就无他,唯手熟尔。不知道怎么开始的先在leetcode上多混迹一段日子,有很多大佬经常出现在高赞题解中,他们一般有自己的公众号,跟着学学套路也是不错的。

面试完马上复盘总结,你不知道下一次面试是不是就在明天。基本上面来面去问题都在哪些范围里,从自己的面试经历沉淀自己,提升来的最直接。

面试究竟集中在一段时间好,还是分散好。这个事情我觉得可以拿出来说一下

集中的好处在于,背过的知识不用每次都重新捡起来,还热乎着,坏处是没有太多时间复盘,上次不会的这次又不会,很亏。

分散的缺点就是上次背过的这次又要拿出来背一背。我之前面试的时候总喜欢把面试推迟,安排的错开,但是这样感觉并不好,每次复习的也不会问,反而丢了面试状态。

我个人觉得,还是准备的差不多就冲了,拖拖拉拉也不是个事

好像讲得够多了,先到这里收一收吧,希望大家都能拿到心仪的offer

——END——

ba73bfe72d76ccd354b6365ab0a63e6b.png扫码关注我们 实习、校招、内推 面试经验 职场心得 查看下方精选文章 94278eff6417a81df124c1d5a8020623.png  你有在看吗↓ 
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐