2020年的第一次面试——电话面试

待岗两个月的我打算在长沙找工作了,要是找到了就不打算北京发展了哈。
其实冥冥之中感觉是老天暗示我要回来了。去年年底其实就有想离职的想法,奈何各种原因就搁置了,今年的疫情又有了一点想回家的想法了。

这几天刷了一会面试题,Boss上投了几家公司,又接到几份面试,第一家公司说要电话面试的时候我拒绝了,因为啥?因为不好意思,加上很久没面试,又没怎么看面试题,怕深受打击呀,哈哈。

昨天一家挺想进的公司也是先电话面试,自己想着还是要尝试一下,结果是面试题看的不仔细,有些问题回答的不是很理想,哈哈。然后安慰自己第一家嘛,试试水哈。今天还是记录下面试题吧~~~

1、UIView和CALayer的区别?

首先UIView可以响应事件,Layer不可以。
View和CALayer的Frame映射及View如何创建CALayer。
UIView主要是对显示内容的管理而 CALayer 主要侧重显示内容的绘制。

总接来说就是如下几点:

每个 UIView 内部都有一个 CALayer 在背后提供内容的绘制和显示,并且 UIView 的尺寸样式都由内部的 Layer 所提供。两者都有树状层级结构,layer 内部有 SubLayers,View 内部有 SubViews.但是 Layer 比 View 多了个AnchorPoint
在 View显示的时候,UIView 做为 Layer 的 CALayerDelegate,View 的显示内容由内部的 CALayer 的 display
CALayer 是默认修改属性支持隐式动画的,在给 UIView 的 Layer 做动画的时候,View 作为 Layer 的代理,Layer 通过 actionForLayer:forKey:向 View请求相应的 action(动画行为)
layer 内部维护着三分 layer tree,分别是 presentLayer Tree(动画树),modeLayer Tree(模型树), Render Tree (渲染树),在做 iOS动画的时候,我们修改动画的属性,在动画的其实是 Layer 的 presentLayer的属性值,而最终展示在界面上的其实是提供 View的modelLayer
两者最明显的区别是 View可以接受并处理事件,而 Layer 不可以。

2、第一个页面传值到第五个页面怎么传值?

1.属性传值
1    属性传值是最简单,也是最常见的一种传值方式
2    只能正向传值(将第一个页面的值传递到第二个页面,但无法从第二个页面回传到第一个页面)
2.Block传值
1    可以实现逆向传值(第二个页面传递到第一个页面)
3.代理传值
1    A页面push到B页面,如果B页面的信息想回传(回调)到A页面,可用代理传值

2    其中B定义协议和声明代理,A确认并实现代理,A作为B的代理
4.单例传值
1    实例化一个单例对象,程序运行期间每个页面都可操作这个对象(可修改值,可取值)
5.通知传值
1    谁要监听值的变化,谁就注册通知(通知的接受者必须存在这一先决条件)
2    当这个值变化时,这个界面可以动态的同步更新数据。

PS:我面试说直接通知,哈哈,面试官居然说传到第五个页面,你用通知?吓死宝宝,还是自己不坚定啊~~

3、KVO和通知的区别?

KVO提供一种机制,当指定的被观察的对像的属性被修改后。
通知:是一种广播机制,在实践发生的时候,通过通知中心对象,一个对象能够为所有关心这个时间发生的对象发送消息,两者都是观察者模式,不同在于KVO是被观察者直接发送消息给观察者,是对象间的直接交互,通知则是两者都和通知中心对象交互,对象之间不知道彼此。
KVO使用:被观察着发生addobserver:forkeyPath:options:context:方法来添加观察者.然后只要被观察者的keypath值发生变化(注意单纯改变值不会调用此方法,只有通过getter和sett来改变值才会触发KVO),就会在观察者里调用方法observerValueForKeyPath:ofobject:change:context:因此实现此方法来对KVO发出的通知做出响应.
通知的使用:通知的发出是由通知中心来统一发出,而不同通知通过唯一标示名notifcationName来区分,标示名由发送通知的类来起.首先被观察者自己在必要的方法A里,通过方法postNotificationName:object:发出通知notificationName这样发送通知着这边的工作就完成了,每次A被调用,就会发送一次通知notificationName

然后谁要监听A的变化,就通过[NSNotificationCenter defaultCenter] 的方法addobserver:sslector:name:object为观察者注册监听name为notificationNmae的通知.

每次发出name为notificationNmae的通知时,注册监听后的观察着就会调用其自己定义的方法notificationselector来进行相应

NSNotification的特点,就是需要被观察者先主动发出通知,然后观察者注册监听后,再来进行响应,比KVO多了发送通知的一步,但是其优点是监听不局限属性的变化,还可以对多种多样的状态变化进行监听,监听范围广,使用灵活。

4、UIViewController的生命周期?

-[ViewController initWithNibName:bundle:];
-[ViewController init];
-[ViewController loadView];
-[ViewController viewDidLoad];
-[ViewController viewWillAppear:];
-[ViewController viewWillLayoutSubviews:];
-[ViewController viewDidLayoutSubviews:];
-[ViewController viewDidAppear:];
-[ViewController viewWillDisappear:];
-[ViewController viewDidDisappear:];
-[ViewController viewWillUnload:];
-[ViewController viewDidUnload:];

5、有没有用过自动化打包?

Jenkins自动化打包。
参考链接:https://www.jianshu.com/p/3c9361dc1d0f

6、怎么处理APP瘦身?

参考链接:https://www.jianshu.com/p/991278b459ff

你可能感兴趣的:(2020年的第一次面试——电话面试)