[大三iOS实习生面试]—过程+面试知识点

在追求别人认可之前,先追求那些能得到别人认可所需的品质。

过程

楼主最近向Airbnb和字节跳动iOS实习岗投递了简历,很荣幸的获得了他们的笔试面试机会,最后虽然没有能够得到offer,有遗憾,但也获得了很多经验,在此分享出来。

由于具体笔试项目有保密要求,就不好意思透露具体的项目内容了。大概说来,是一个相对全面的项目,给你三天时间。考察了网络接口,界面UI和一些常用的控件。总之,如果进行过一次比较完整的项目开发,这个任务难度相对不是那么大。如果没有开发过项目,努力的话,应该也能完成基本要求。

提交过笔试后,顺利进入进入下一轮面试。

其实比较遗憾的是,因为Airbnb这次面试,是我第一次面试。不知道准备什么,邮件说的是一些开发的常识。我就自负地认为,仗着自己平常开发iOS的经验,应该可以应付得了。可是,面试完那个面试我的哥哥对我说:

“保持联系,后面HR还会联系你”

然后加了一句,

“可能,HR还会联系你”

其实到此我也知道凉了。

具体原因:我平常开发的时候,虽然一方面努力实现功能与设计效果,另一方面也努力去追求优化。但是,部分停留在了我知道该这样写代码,而对底层原因分析详细。这是一个缺憾,当我学c++的时候,我会去研究底层一点的问题,但我没用它去进行应用开发。而我学oc的时候,努力去利用它实现功能。但忽视了代码的深入理解。其实,一个优秀的程序猿。越了解程序代码实现的底层,越能够写出效率高,bug少的代码。

在这次面试收到打击之后,我在网上搜了搜,发现

面试的题目,网上都有啊😢

因此我决定,我就从这些面试题目出发,认真的把iOS的知识看了一遍。虽然不是那么系统,但可以把自己开发过程中遇到的一些疑惑以及自己学的一些知识联系起来。在学习的过程中发现很多问题,我面试没答出来真的很可惜。其实相关的知识都了解,就差那点破了。

复习完之后,想再拼一次。也检验自己一次。于是投了字节跳动的iOS实习岗位。反馈很快,第一天投递,第二天HR联系我准备一面,第三天一面。

两次面试情况对比

复习前:

Airbnb面试官:在使用block的时候,会不会出现循环引用的问题?
我内心:

  • 循环引用,好像在利用引用计数的内存机制里会导致内存泄漏
  • block,里面用self会报错哎。我每次开发都得在外面用声明一个weak self。

会不会有关,要不猜一下?算了,不会就不会。


我说:“不知道哎”

复习后:

字节跳动面试官:在使用block的时候,会不会出现循环引用的问题?
我内心:


我回答:“这个要看情况,对于一般的block。用clang –rewrite-objc源代码文件,将代码转为c++(实际是c代码),可以看到block是一个结构体,他会将全局变量保存为一个属性(__strong的),而self通过可能通过某条路径,强引用了block,这是就会就会造成循环引用。然后内存无法自动回收。使用系统自带的UIView的block,因为是类方法,不是全局变量,self对block没有强引用,就不会造成循环引用。此外GCD(多线程)以及NSURLSession的block不会造成循环引用。”
面试官:“这你都知道🧐”。

我复习的OC知识点

Strong & Weak

ARC未来简化程序员对内存的管理,推出了一套内存管理机制,对象的申请和释放工作会在运行时,由编译器自动添加retain和release

强指针Strong:

被strong修饰的属性一般不会被自动释放,OC中,对象默认是强指针,在实际开发过程中对象也一般用strong来修饰,懒加载的控件一般用strong来修饰。

弱指针Weak:

在使用Storyboard或者xib给控件拖线的时候,拖出来的属性是weak修饰。因为,添加空间的时候,编译器添加子视图是添加到view上面,而[self.view addSubView]会对添加到控件进行强引用,如果再用strong对添加到子控件进行修饰的话,相当于有两条强指针对子控件进行了强引用。

除此,我们用代理的时候,用weak进行修饰,为了防止控件的循环引用。

iOS开发中 Strong 和 weak 的深入理解

循环引用:

两个与多个对象之间,都是强引用,且对象之间的引用形成了一个环状结构,导致对象无法释放,造成内存泄漏。

block循环引用:循环引用通常是block引起的


用clang –rewrite-objc源代码文件,将代码转为c++(实际是c代码),可以看到block是一个结构体,他会将全局变量保存为一个属性(__strong的),而self通过tableview,cell强引用了block就会造成循环引用。

OC中Block使用了__weak和__strong依然不会循环引用原因

解决方法:


使用系统自带的UIView的block,因为是类方法,不是全局变量,self对block没有强引用,就不会造成循环引用。

还有GCD(多线程)以及NSURLSession的block不会造成循环引用。

OC 循环引用(Retain Cycle)

提高tableView的性能

UITableView的性能优化,提升列表滚动的流畅性

1、 使用相同的cell时候,通过单元格ID标示该cell,每次使用的时候就可以重用。其次,定义多个cell时候,也尽量放在一个nib文件里。

2、 当有加载图片的时候,不要同步直接加载。那样会十分卡顿。解决方法:1、缓存加载的图片。2、可以在滑动过程中,进行异步预加载。

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

3、图片显示的时候,最好imageview大小比例与图片相当,避免过多的裁剪缩放。

4、减少subview的层级,少用透明图层,和重叠图层。

copy与mutableCopy

copy是浅拷贝,生存一个指向原对象的指针。如NSString,则这个对象不能改变。而mutablCopy是深拷贝,是在内存另外开辟一段空间,获得一个数据与原对象一样的对象。是可以改变的。

属性中的copy,retain,assign

OC中属性关键字(retain, assign, copy...)

在iOS中关于深拷贝和浅拷贝以及copy属性的理解

assign:简单赋值,不更改索引计数,当属性为基础数据类型和C数据类型的时候使用。

copy:建立一个索引计数为1的对象,然后释放旧对象。这样无论传入的是一个可变对象还是不可变对象,本身持有的就是一个不可变副本。如果使用如strong,传入的对象被改变后,就会相应被改变。

retain:释放旧对象,将旧对象赋值予输入对象,在将输入对象的索引计数++

oc atomic与nonatomic

[OC]之 atomic 与 nonatomic的区别

区别:在属性的set,get方法里用了互斥锁。

atomic能够保证读写互斥,但不能说是线程安全的。因为比如当有很多对象要对atomic的属性进行修改的时候,他们会排队等待信号量。如果前面的某个对象在读写之后释放了该属性的对象,后面排队的对象就找不到对象,程序崩溃。

OC category 与extension

OC中Category和Extension以及继承的用法和区别

category:利用oc的动态运行时机制,可以对一个类的功能进行拓展,包括NSString,Button等。运行时决议的,所以对象内存布局已经确定,如果添加实例变量会破坏类的内部布局。

extension:编译时决议,与h文件的@interface与m文件的@implement一起形成一个完整的类,随着类的消失而消失。

OC单例:一个类仅有一个实例,并且自行实例化向整个系统提供。

iOS中的单例你用对了么?

view与layer的区别

1、 直观上,view可以处理事件,比如触摸事件等。layer 不可以。

2、 CALayer为UIVIew在背后提供内容绘制和显示。

autoLayout & autoSize

iOS Autolayout 介绍

为了对不同大小,分辨率的屏幕进行显示适配。比如可以设置align来规定靠近父view的边多少px。

controller的生命周期

ViewController的生命周期分析和使用

当你alloc并init了一个ViewController时,这个ViewController应该是还没有创建view的。ViewController的view是使用了lazyInit方式创建,就是说你调用的view属性的getter:[self view]。在getter里会先判断view是否创建,如果没有创建,那么会调用loadView来创建view。loadView完成时会继续调用viewDidLoad。loadView和viewDidLoad的一个区别就是:loadView时还没有view。而viewDidLoad时view以及创建好了。
当view被添加其他view中之前时,会调用viewWillAppear,而之后会调用viewDidAppear。
当view从其他view中移出之前时,会调用viewWillDisAppear,而之后会调用viewDidDisappear。
当view不在使用,而且是disappeared,受到内存警告时,那么viewController会将view释放并将其指向nil。

总结

面试

1、一定得做充足的准备,说白了。面试其实也是考试,对付考试最好的方法,还是我们熟悉的应试教育方法。网上有很多经验可循。这不是说,只需要应试就可以了。没有平常的积累,是很难快速看懂所要准备的知识的。
2、不要回答不知道,而是尽自己所能回答。就算搭错也不要紧。其实大部分时候,听到题目心里冒出的第一想法,已然靠近正确答案了。
3、自信,当然这是建立在良好准备的基础上的。🤓

发展

1、无论是求学还是求职,基础是最重要的。不仅仅是编程基础,还有计算机基础如计算机组成原理,操作系统,计算机网络等。这些能决定我们最终能走多远。
2、无论做什么类型程序猿,算法功底一定要好。
3、平时编码过程中,每实现一个需求,解决一个bug。要弄清深层次的原因,这样不仅能让我们对这项技术更加熟悉,说不定还能联系到其他课程的知识,增强基础。
4、利用好每一段经历,其实这一次的求职虽然失败。但是从中还是能够学到很多知识。比如Airbnb的工程师看我的代码非常仔细,提出了一些改进意见。面试后,我按照意见对代码进行了修改,这也是一种学习。

我为什么只投大公司?

我当初想,我投递的是iOS开发,我自己已经做过一些项目。如果去小公司,作坊式的软件开发。可能我还是会按我过去的编程习惯进行开发,完成他们的需求,这样只是把已有的知识重复以及可能学习一点新知识。而进入一个真正的大互联网公司,能学习到良好的代码开发过程以及提高自己的代码质量。
不过现在想起来,当时还是自大了些。其实,就算是小公司,也肯定是有我学习的空间的。

最后

如果你看到了这里,我十分感激!

                                       Your CJJ
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,094评论 1 32
  • 基础 1. 为什么说Objective-C是一门动态的语言? 2. 讲一下MVC和MVVM,MVP? 3. 为...
    波妞和酱豆子阅读 3,313评论 0 46
  • 1.属性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作...
    曾令伟阅读 1,049评论 0 10
  • 把网上的一些结合自己面试时遇到的面试题总结了一下,以后有新的还会再加进来。 1. OC 的理解与特性 OC 作为一...
    AlaricMurray阅读 2,557评论 0 20
  • 地北天南曲万旋, 一回屈指一潸然 心悉不解罗绡透, 忍遗情思向花烟。
    温柔的坚持_阅读 204评论 0 0