2016.12面试分享

今天有幸去某知名视频公司面试, 所以想用笔记下来整个过程, 方便自己对过往基础知识的回顾和收集2016年编程行业的面试题(貌似2016已经剩下0.5/12).
一进去二话不说肯定是做笔试, 这次笔试是英文版技术题目, 都是比较基础的东西, 不难.
接下来是两个技术大牛VS菜鸡的我. 问的问题我写在下文.有的我写了我的答案,有的由于篇幅和时间问题我就暂时先不写答案,有的我想过后专门写一个文章来聊聊.

我希望各位看官都能挑自己熟悉或者感兴趣的问题在评论里写上自己的答案. 因为每个人的语言组织和对一个问题的看法层面都不一样. 也欢迎纠正我的错误. 集思广益嘛.

UIView/runloop/runtime/动画/多线程/数据库

如何处理约束冲突问题?

答:
1.最普通的就是靠自己强大的逻辑能力来逐条约束检查,以及看一下报错信息, 报错信息那里会说到哪几个类(控件)的约束有问题.
2.巧用约束优先级priority. 当约束冲突时候系统会自动抛弃掉引起约束冲突的优先级比较低的那个约束来解决问题.所以我们逐个把约束的优先级设置低一些如998, 就可以排查出是哪个约束发生了冲突.
3.有时候明明检查了约束是没有问题的,却还是报了约束冲突的错误, 不妨把autoresizingMask这个属性设置为NO试一下, 可能有奇效.

当控件A相对于控件B添加了一个约束, 但是在程序运行过程中控件B会消失怎么办?

答:
这个需要根据需求文档来,既然可以知道控件B会消失, 那我的控件A可以不必相对于控件B来设计.
假如真的控件A必须相对控件B添加一个约束,而控件B可能消失, 那么我们可以给控件A再添加一个优先级比较低的约束,当相对于控件B的那条约束失效了之后, 就会执行这个优先级比较低的约束, 从而解决约束问题.

约束是怎么实现(添加)的?约束的优先级有几个等级?

答:
1.可以在storyboard或者xib里面直接添加,这样也是最直接方便的.
2.如果纯代码的话,可以使用友好度非常高的masonry框架.
约束是根据一个万能公式来实现的: y = m * x + b
x, y 代表view的attribute, attribute可以分为left right top bottom leading trailing width height centerX centerY baseline m 是倍数, 即multiplier b 常数, 即 constant.
每一条约束都代表着上面这个公式.masonry的语句也是根据这个公式来设计的,所以非常直观.
约束的优先级priority为0-1000直接, 0代表不会生效, 1000代表必须生效. 常用的等级有250(low), 750(high), 1000(required).

masonry里面有什么常用方法添加约束?如何进行约束更新?

答:
明白那个约束公式之后, masonry添加约束的语句非常通俗易懂, 如下

//y = m * x + d
[view mas_makeConstraints:^(MASConstraintMaker *make) {
make.xxx.equalTo(self.view).xxxxxxxx;
//更新约束
[self.view updateConstraintsIfNeeded];
//约束马上生效
[self.view layoutIfNeed];
}

约束更新:
在storyboard或者xib里面可以直接选update constraints来更新约束.
纯代码用masonry来进行约束更新的话, 需要调用父控件的两个方法(注意是父控件):1、updateConstraintsIfNeeded 2、layoutIfNeeded, 约束更新的内容需要写入mas_updateConstraints中.

在我说到用collectionView代替scrollView来优化离屏渲染问题时候(iOS10以后系统有属性可以优化了), 面试官问我什么是离屏渲染

答:
Off-Screen Rendering(离屏渲染), 顾名思义就是当view离开屏幕后还会被渲染.这涉及到GPU的屏幕渲染问题, 这样会消耗性能.
离屏渲染机制我也不是很懂, 可以参考以下链接
关于离屏渲染的研究

为什么tableView在滚动时候广告轮播图不轮播了? 怎么解决这个问题?

答:
这是由于runloop的模式问题.轮播图也就是定时器, 我们把定时器添加进runloop里面时候一般情况都是用NSDefaultRunLoopMode的, 而当tableView在滚动时候会切换成UITrackingRunLoop这个模式.所以在tableView在滚动时候定时器就会停止了工作. 解决办法就是我们在tableView里面创建定时器NSTimer时候把这个定时器的添加进runloop的模式设置成UITrackingRunLoopMode即可.
这里想在说两句NSTimer, NSTimer的创建方法有两种,如下:

    //创建NSTimer方式一 创建timer并自动把它以默认的模式添加进runloop
//    NSTimer *timer1 = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(doNothing) userInfo:nil repeats:nil];
    
    //创建NSTimer方式二 创建timer但是不会帮我们加进runloop, 需要我们手动添加进runloop, 但是这样我们可以自己定义runloop模式
    NSTimer *timer2 = [NSTimer timerWithTimeInterval:2 target:self selector:@selector(doNothingAgain) userInfo:nil repeats:YES];
    [[NSRunLoop currentRunLoop] addTimer:timer2 forMode:UITrackingRunLoopMode];

更多的NSTimer的知识可以参考:
NSTimer的使用

深拷贝和浅拷贝?

答:
浅拷贝就是只拷贝内存地址,让两个对象共用一个内存地址, 访问同一个内容, 这种类似我们桌面的快捷方式.
深拷贝就是拷贝内容,并且分配新的内存空间, 即两个对象内容一样,但是地址不一样, 这种类似我们把一个文件拉进U盘里面.

你谈一下runtime?什么时候用到?

答:
这个问题我想过后用一篇文章来聊聊.

你怎么做视频这个功能?

答:
以后用一篇文章来聊聊音视频问题.

你平时怎么做动画的

答:
动画分为UIView的动画和核心动画,还有一个比较常用的POP这个做动画的框架.
核心动画相对于UIView的动画来说会流畅一点.
UIView动画: 直接调用animation

    [UIView animateWithDuration:2 animations:^{
        
        /*
         这里写要改变的frame或者约束等,来实现动画效果
         */
    }

核心动画Core Animation: 这个我想有空用一篇文章来聊聊.
最简单的用CABasicAnimation/CAKeyframeAnimation这个类,三部曲完成简单动画(代码略)
1.创建动画 2.设置动画属性 3.把动画添加到layer中
POP框架: 这个开源框架是来自Facebook的动画引擎,它是独立于核心动画Core Animation的, 功能非常强大.该框架提供了API主要能处理4种动画效果:
1.普通变换 2.带有阻尼效果的 3.带有弹簧效果的 4.自定义动画
关于如何使用POP, 各位感兴趣的可以自己去搜一下.

很累, 今天先更到这, 古白.

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

推荐阅读更多精彩内容