面试公司:跨越速运面试地点:深圳市宝安区福永街道福园二路深翔物流园
面试时间:2016年04月25日 15:00
先上公司前台照片,临走下楼梯的时候拍的, 很气派,硬汉吴京代言,据说是第一家请明星代言的物流公司, 还听说首单免费,大伙可以试试哦.
差不多2点50分到的公司, 在机场东那边,位置蛮偏, 到公司把简历交给前台美女, 给了一份笔试题, 没拍题目,大概有如下几道:(手写代码-_-)
1.手写一个单例
主要是用dispatch_once保证内存只被分配一次,而且定义一个全局的静态变量, 将初始化的对象赋值给这个全局静态变量
单例出现频率太高了,希望大伙出去面试前都能手下实现下
2.使用NSTimer,需要注意什么?
这里按我的理解就是,主要是涉及runloop了,老师课堂上也提到过, 一是拖动scrollView的时候,runloop处于EventTracking模式,创建的计时器默认是添加在defalut下,而runloop有一个特点只会处理当前mode下的输入源事件和计时器事件, 所以当scrollView滚动的时候,计时器的事件会导致无法触发,这种情况下,只需需将计时器添加到当前runloop下的common mode下即可;二是,子线程的计时器事件,需要主动添加这句[[NSRunLoop currentRunLoop] run]才能触发, 子线程的运行循环默认是没有开启的
3.self.name = nil 和[_name release]的区别;
我当时写的答案是, 前面一句是self.name被释放了, 后面一句是_name 引用计数器减一
好惭愧,后来查了下,答案完全不在点子上,附上别人的解答,大家可以看看http://blog.csdn.net/zhuzhihai1988/article/details/8776609
4.@property中一些属性关键字的作用, 默认下分别是哪些关键字?
这个题目就不赘述了,学iOS的,应该没几个不知道的,大家天天在用
但值得一提的是,默认下的关键字要分ARC和MRC两种情况作答
5.给了两张表,然后按要求写sql语句,查询数据
简单考察数据库的查操作,写好条件就OK
6.这道题就有点坑了,提了一个需求,让用触摸事件的几个方法,实现手势拖拽的效果.手写代码...
很多方法记得不全,只能写伪代码了, 主要是在touchMove中获取前一个点和当前点的坐标,求出坐标偏移,然后设置平移就ok
7.KVO的内部实现
这个老师也讲过,KVO即观察者模式, 当某个类被添加一个监听者来观察它的属性的时候,系统会在运行期间动态创建该类的子类,并重写对应属性的setter方法,在setter方法中调用- willChangeValueForKey 和- didChangeValueForKey:通知监听者
大概就这几道题目了
做完给美女人事,然后一个技术负责人拿着我的简历和笔试题, 一起进了个小办公室
首先是简单的自我介绍...
面试官:做iOS已经两年多了啊,那技术应该还不错了啊
我:是啊,时间太快,搞iOS这两年也成长了不少,从小白到现在自己能独立开发也积累了不少经验
面试官:那你在上家公司平时的工作内容都有什么啊?
我:我上一份工作主要是维护一款理财的app, 主要是修复测试反馈和自己遇到的bug, 帮助后台调下接口什么的,还有就是新功能的添加了, 然后就是app版本的更新了
面试官:嗯,那对app上架流程一定很熟悉吧
我:是的,像app的上架流程,其实涉及到的就是证书的配置,什么真机调试证书,远程推送证书和发布证书,基本做法都一样,而且现在上架界面改为中文了,便利了许多
面试官:既然做过远程推送,能简单说下远程推送吗?
我:首先要做远程推送,就必须配置远程推送证书, 调试的时候我们配的测试证书
然后我们需要在代码里边注册远程推送通知, 这样一来苹果的APNs服务器会返回一个deviceToken给我们,然后我们把deviceToken传给服务器,这个deviceToken能确定到哪一台设备的哪一个app上,当需要推送通知时,服务器会将推送内容和deviceToken一期发给APNs服务器, 最后APNs将内容推送到客户端上
面试官:除了这些还有别的吗?
我:没了啊,就这么多了
面试官:还需要导出.p12文件吧, 然后转成.pem格式, 后台是不是要.pem文件?
我:后面这个细节有点记不得了...
面试官:那我再问你点别的, Xcode7出来了,我们需要做哪些适配啊
我:iOS9将http换成https了,直接造成原来的网络请求有问题,可以在info.plist中添加一个什么security的字典,然后设置成yes
还有就是白名单和应用瘦身, UIStackView就是iOS9才出来的..没用过,但是网上据说很强大,也没法用,我们app的部署版本不可能改成9.0
面试官:github上有一个低版本支持的stackView呢
我:哦,不是很了解呢
面试官:百度工程师写的,还一个全屏侧滑手势支持呢
我:额,这个用过,确实挺方便的,直接集成到代码里头,不用写一句代码
面试官:cell的高度,有尝试过根据其子控件来动态高度吗?
我:(微博里不就是活生生的例子吗)嗯, 可以通过预估高度来弄, 还可以通过一个templatesCell的框架来实现
面试官:哦,你知道"程序猿"(iOS中的一个大神级人物)啊
我:是啊,那两个框架一直用到自己项目中
面试官:那你还使用别的什么第三方框架吗?
我:有啊,之前接手过一个ASI的老项目, 自己用得最多的还是AFN, 还SDWebImage,字典转模型的框架, 去年冒出的YYKit框架中,就有一个YYModel,写demo的时候,测试了一下,没啥问题,关注了那个框架作者的博客
面试官:SDWebImage的内部实现有了解吗?
我:(这个算面试必问的问题了),这里就不赘述了,伙伴们可以自己看下自己做的笔记...
面试官:行吧,基础很是不错的,来看下你自己做的项目吧,手机手有装吧?
我:嗯,有的,面试前都准备好了,说完把手机递给了面试官
面试官:这项目都哪些是你做的啊?说一个你觉得自己做得不错的地方
我:这里边有一个快捷菜单是我做的,总菜单10几个, 总菜单那边勾上的选项会呈现到快捷菜单上, 这里边做了一个数据的持久性存储,就用最简单的偏好设置存储,以cell标题为key,然后存个bool值.我接手这块代码的时候,写得是比较烂的,点击cell跳传控制器做了10多个判断,代码雷同处太多,很冗余, 后来我就把要跳转的控制器名称,存到plist文件中,然后可以直接根据控制器名称来创建控制器, 节省了很多不必要的代码
面试官:仅仅是通过字符串名字创建控制器,这点么?还有别的吗?
我:我觉得,这里虽然只是利用一个字符串来创建一个类,但是我觉得是好在这个思想上
面试官:这里边有一个进度条圆环绘制,怎么实现的啊?
我:贝塞尔曲线,添加一个计时器,让其不断重绘就好了
面试官:你这是理财项目,肯定涉及到第三方支付吧
我:哈哈,不好意思,恰好没有集成了,我们关于资金方面的操作是放在UIWebView上做的
面试官:啊?为什么呢?
我:呵呵,公司决策,不好说呢
面试官:行,这项目里边你是用自动布局还是frame直接写死啊
我:当然自动布局啊,这个是用来做屏幕适配的最佳途径啊,而且frane算得还麻烦. 虽然自动布局有时候会遇到一些冲突缺失的情况,但是多弄几次就好了
面试官:嗯,我们这边也要求是自动布局,Masonry肯定会吧?
我:是的,这个没问题, 苹果原生好恶心-_-!
面试官:嗯,你的情况我基本了解了, 跟你说下我们公司的情况吧,我们项目部门也是成立没多久,之前都是给外包做的,现在就是想招人自己做. 你看看你有什么想要了解的?
我:简单问了下项目部门的人员情况, 和薪资待遇, 工作时间
面试官:那你想要多少薪水?
我:税后能拿到11吧
面试官:行,我跟人事那变说下,三天内给你答复
走之前,拍了几张照片,大家感受下