帮5买面试总结

写在前边:时间久远,个数跟次序记不清楚了,挑着印象深刻的来些。 

一、笔试

1.详述delegate , block , notification,KVO

2.分类能否扩展属性,若能则如何实现?

3.常用的设计模式有哪些,如何实现,画出UML图更佳。

4.有一个无序的int数组array,将其排序,再找出比array[0]大的所有元素组成的数组。(算法题)

5.设有一个UIView类型的View,找出这个View所有子视图中第一个subview是UIImageView类型的view。

6.对开源开发社区做过怎么样的共享。

7.简述H5跟Native是如何通信的。

备注:概念的题目可以少写点,把算法题都做了。技术面试还要挨个问一遍。

二、技术面试

1.先详细问了下笔试,口头再阐述一次。

2.autorelease对象是何时释放的?

3.RunLoop是什么,如何工作的?

4.分类能添加方法底层是如何实现的?

5.常用多线程编程有哪几种方式,最喜欢用哪种,为什么?

6.并发队列会产生大量的子线程,如何控制管理?

7.设有operationA,operationB, operationC三个任务,B、C只有在A执行完之后才可以工作,如何实现,有哪几种方式?

8.口述H5跟Native通信。

9.__block的工作原理是什么?

10.KVO是如何实现的?

11.你的期望薪资是多少?

备注:这一轮面试完,技术会让你等会儿,他去汇报,如果过会儿总监没来面试,基本就没戏了。我前边的两个就是等了好久总监都没来,技术让他们回去等通知了。

三、总监面试

1.有没有用别的语言开发的经验?

2.网络编程有没有做过?

3.跟你详细解释下入职之后的工作内容,工作时间等(基本上都是围绕加班。。听他的意思一般要九、十点才好下班吧)

4.你的期望薪资是多少?

5.围绕你的期望薪资开始打听上家公司多少钱;每月要消费多少,留多少;他们公司涨钱有规定等不着边际的砍价。

最后就是回去等通知吧,还有个总经理复议。

备注:我在第5点毫不松口,一点也没让他砍,紧接着他就让我走了。不知道后边还有没有问题。。。。

-------------------------------- 华丽丽的分割线 -------------------------------------------

给出自己面试回答的答案:

一、笔试
1.答:
delegate通过协议进行通信,越来越多的被用于面向接口编程。
block能捕获上下文,广泛的用于回调。
notifaction一对多,无需关注接受者
KVO实施对属性监听。

2.能,使用runtime,associate相关方法。

3.答:
策略 -> 管理通用方法
工厂-> 批量Cell
MVVM -> 抽象ViewModel,轻量级ViewController
单例 -> 管理类
观察者 -> KVO+KVC

4.使用冒泡排序,将最小的放到前边,截取除第一位之外的其他元素。

5.使用递归。(为了方便在Xcode中手码了)

-(void)finView:(UIView*)view

{

    if (!view || !view.subviews.count) {

        return;

    }

    for (int i = 0; i < view.subviews.count; i++) {

        UIView* sub= view.subviews[i];

        if (!i && [sub isMemberOfClass:[UIImageView class]]) {

            [self.views addObject:sub];

        }

        [self finView:sub];

    }

}


6.Code4app上传过两次代码,对第三方库push过BUG。


7.UIWebView可以调用js。H5可以通过插入iFrame或发送ajust请求,通过webView拦截,可以调用响应的插件。


备注:对开源社区的贡献实在让人脸红~我上过的两次代码,其中一份被人喷死了。。


二、技术面试


1.过一遍上述笔试题,口述一次,不过要多说点,我是没闲着


2.autorelease被加入到最近的autoreleasepool,会随着runLoop进行周期性的poolPush 跟 poolPop释放。如果说函数执行完就释放或者过段时间就释放,就可能中招了~


3.RunLoop是运行循环,是控制他所属的线程周期性的执行任务,有任务就工作没任务就休眠。跟RunLoop相关API有NSThread , NSTimer , CATransaction,NSURLConnection,NSURLSession,autoreleasepool,CAAnimation,performSelector等一些列。


4.Objective-C中的类也是个对象,唤作类对象。底层是个结构体。其中有个methodList和propertyList的数据结构.分类其实也是个结构体,它里边有个相应的结构,在类被编译时,类对象会查到它所有的分类,把分类中的methodList跟propertyList加入到自己的methodList和propertyList中。这就是分类能添加方法跟属性的原因。

5.NSThread,NSOperation,GCD。
NSthread对象生成子线程,但是需要手动管理内存,单次任务可使用,不建议执行周期性任务。可以使用performSelectorOnThread,或者detachThread。。。执行单次任务。
最常用的是GCD,高度抽象,使用者只需关注与任务,不需要理会线程和内存管理。
最喜欢的是NSOperation,更加灵活,而且有cancel方法。

6.不知道他想问的时候什么,我只说尽量把任务集中到复用的queue上,减少任务拆分。
(后话,我回头看了看资料,这个queue能产生的线程是由内核决定的,稍后再补~)

7.第一种:使用NSOperationQueue添加依赖
第二种,使用GCD屏障(我不知道barrier怎么拼写)或者dispatch_group
第三种,使用串行的queue,(串行怎么拼?)

8.笔试中一样的,略

9.__block其实会把修饰的变量转换成结构体,修饰的变量会作为一个属性被声明在其中。block其实也是个结构体,会把在块内用到__block变量声明到其中并通过外部变量指针初始化。这样在block内外都可以修改__block修饰的变量了。(口述思路有点乱)

10.被监听的类,会被系统默认的实现一个匿名的子类,重写被监听的属性的setter方法。(我也就了解这么多了。。)

11.XXK

备注:有些问题我想不起来了,不过这轮面试完,他们的总监过来跟我说:我们技术说你很懂底层,很不错~~(瞬间腰板儿就挺直了~~ )

三、总监面试

1.答,C,C++,忘记说cocos-2d了。。

2.上去没搞懂什么算网络编程,只好说iOS这块的网络通信懂~

3.答:9:00 —  6:30 , 9:30 — 7:00,这是他们的工作时间。
        通常要加班到8、9点。
        新团队要招十个人,我去的时候才找到一个新手。需要高手带团队~
        最后问了我老婆多少钱,我每月消费多少钱,大概意思就是能不能少点~我用贷款+欠债妥妥的回绝了他~~然后就是等通知了。

后记: 这是第三天了,估计真的没戏了耶~~,上述的答案都是我自己理解的,并不一定是对的。留言探讨吧~ 



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值