2017秋季校园招聘iOS开发岗位面试题集锦

标签: iOS面试题   时间:2016-12-07
笔者参加了2017秋季不少的校招iOS岗位面试,下面我把这些面试题都贴出来和大家共勉:希望对IOS开发人员有所帮助。

注:本网站为码农们提供的大量编程教程:java教程java实例php教程mysql教程css教程html教程javascript教程oracle教程等等,如有兴趣,大家可以学习。

一.搜狐快站

1.谈谈你做过的项目;

2.项目中最有成就感的部分;

3.倒计时如何实现?(NSTimer,还有其他的实现方式吗);

4.UIButton的继承关系?

5.iOS中可以进行输入的控件?(UITextView,UITextField);

6.快排的实现原理;

7.短信验证码会有倒计时功能吗?第一次验证失败后还可以再进行验证吗?

8.Android开发和iOS开发的区别; 

 

二.搜狐社交产品中心

1.我们项目中用到的缓存方式;用的是数据库还是归档?

2.我们项目中使用的网络库是什么?

3.TableView的优化和重用;比如不等高的cell如何重用?不同的cell里面包含的UI不同如何重用?滑动太卡如何优化?

4.图片缓存如何优化?圆角图片如何优化?

5.JSON等数据格式如何模型化?使用哪些第三方库?

6.MVC,MVVM?

7.开发中用到的设计模式?单例、MVC、delegate。

8.数据结构堆与栈的区别;栈与队列的区别;

9.用OC如何实现栈与队列;

10.如何防止死锁;

11.GCD如何实现同步任务,即如何执行完一段代码后再去执行另一段代码;(线程组,barrier,信号量)

12.block如何解除循环引用;

13.block的原理是什么,如何去找到这个block;(函数指针)

14.运行时替换系统的设置颜色的方法,但是在某几处还是要使用系统的方法,如何使用运行时实现;

15.OC和Java的区别;

16.面向对象的三大特性,iOS开发时如何体现面向对象的;

17.你们UI使用什么开发方式;

18.H5混编:OC如何调用js的代码;js调用OC的代码;分别是如何进行调用的;

19.分享功能你们是如何实现的;

20.应用之间如何唤起,如何把scheme加入白名单;

 

三.蚂蚁金服

1.在第一家实习公司时做的项目,完成了哪些模块;

2.在当前公司时做的项目,完成了哪些模块;

3.序列化与反序列化;JSON怎么转化为模型;

4.iOS中的数据库,CoreData;

5.开源项目中OnceNote中的技术闪亮点;

6.数学建模时做的题目,是怎么建模的,使用了什么工具;

7.Java和OC的优缺点,与Android中的Java有什么区别;

8.NSString为什么用的copy,copy和strong有什么区别;

9.NSCopying,NSCoding,讲讲这两个东西;

10.面向对象的三大特性,讲讲多态;

11.类A想调用类C的方法,类C继承自类B,需要如何实现;

12.一个类实现的功能是越多越好还是越少越好?单一职责原则; 

1.在两家公司做的项目介绍;

2.内联函数是什么?

3.堆和栈的区别;如何优化堆和栈!!!;哪一种会造成内存碎片;block分配在哪里;

4.block的循环引用;block的代码实现;为什么会造成循环引用;block是如何强引用self的;

5.如何去自己实现一个自动释放池;自动释放池的作用;自动释放池是如何管理对象的;

6.static的作用;static const为什么要加static;static const与#define的区别;

7.项目中做的比较好的部分;

8.block在传递的时候,是否会改变存储位置?比如是否会从栈复制到堆;原来的block是否会被释放; 

 

四.微店

1.Block的实现内部机制,外部的变量是怎么传到Block中去的;

2.快速排序的实现,复杂度;有其他哪些排序算法;

3.判断单向链表中是否有环;

4.iOS的内存管理机制,和GC有什么区别;

5.Runtime;

6.C++中函数是如何调用的;

7.如果不使用UICollectionView,那么如何实现瀑布流,如何设计数据结构,讲讲思路;

8.如果有一个比内存大的大文件,那么如何实现排序;

9.http和https的区别,https使用了什么加密算法;

10.https的效率一定比http低吗,是每一次都低吗?

11.storyboard到手机UI显示,整个过程是怎样的?

12.xib、nib需要被编译吗?它们分别是什么类型的文件?

 

五.网易金融

1.实习期间做的工作,以下问题都是基于实习项目展开的;

2.简单说说你实现哪些功能模块?

3.Autolayout的使用,几个View如何布局,如何设置cell的高度,几个并列的View如何居中?

4.项目中你使用了哪些设计模式?

5.你们项目中是怎样架构的(MVC?MVVM?);

6.你们项目中的多线程是如何实现的?

7.队列有哪些?队列和线程的关系?

8.说说列表功能的实现(涉及cell的自定义等);

9.Block中的循环引用;Block的复制;Block的存储位置;Block如何改变外面的变量;__block修饰符的内部机制!!!;

10.简单的需求:几个任务执行完以后再去做某项任务,如何实现?(GCD线程组?)

11.你是如何进行持续学习的?你是学习方式是怎样的?

12.最近你在学习哪些技术,现在你感兴趣的是哪方面?

13.聊了聊iOS安全方面的内容;

14.Swift中的Protocol。。。;

15.你们的项目用的是OC还是Swift;

16.Category和Extension;Category的缺点和优点;如何克服或者弥补这个缺点(不能添加实例变量,用Runtime实现?);

17.属性修饰符:copy,weak。。。

18.NSNotification是同步的还是异步的???(貌似是同步的)

19.NSNotification的使用需要注意什么?(不用时要移除通知?)

20.Block的嵌套使用;

21.iOS安全,如何在客户端实现一些安全措施。比如如何做用户输入密码时的键盘输入安全。

 

六.腾讯

1.算法:一棵多叉树,每个节点上有个值,求一条路径上值的和为sum的路径有哪些;

2.在网络请求中,如何来处理网络速度慢、网络中断网络抖动等等网络问题;

3.你做的项目的难点在哪里?

4.你未来三年的规划是什么? 

 

七.百度

1.用过哪些设计模式,用代码实现单例模式,讲讲代理模式的优点,画出代理模式的类结构图;

2.手写二插搜索树的查找,分别用循环和递归实现,哪一种的效率高,递归的空间复杂度是多少;

3.App端的数据缓存;

4.有哪些查找算法,复杂度分别是多少;

5.哈希查找的时间复杂度是多少,如何解决冲突,如何优化哈希;

6.有哪些进程调度或内存管理的算法?(比如先来先服务,高优先级服务,最近最久未使用等等);

7.使用什么数据结构来实现LRU最近最久未使用,画图来模拟一下;

8.Linux命令行,搜索某个文件的命令; 

1.项目中的图片上传功能如何实现,为什么使用队列上传,为什么不用异步上传;

2.安卓开发与iOS开发的区别和优缺点;

3.转到后台的应用如何保持活跃,而不被系统kill;应用转到后台的整个过程是怎样的?

4.iOS中如何实现单例,用GCD来实现一下;

5.GCD的全拼;

6.Xcode开发中如何创建一个代码块(代码片);

7.iOS10中的新特性,聊了聊WWDC;

8.对项目中用到的图片选择器的优化和自定义,包括图片多选功能;

9.GCD中如何创建异步线程,GCD中是否能stop一个线程执行; 

1.讲讲iOS系统;

2.你们有没有用到什么新的技术;

3.你算法怎么样?

4.讲讲体现你学习能力的事情?

5.为什么从上一家公司实习离职? 

 

八.小红书

1.你实习的项目中哪些是你做的?

2.你觉得我们小红书的App怎么样?

3.手写代码:给定一个字符串,同时给定两个字符,求出包含这两个字符的最小子串的长度;

比如输入:addcddabc    ,a  ,c 

那么包含的子串为:addc,   cdda,   abc  —>最小的子串长度为3;

4.说说iOS和Android开发的区别; 

 

九.网易杭研

1.你们的iOS应用是如何来提高安全性的;

2.应用的砸壳过程;

3.https的秘钥协商过程,证书交换过程;

4.讲讲Runtime,以及消息转发过程;

5.讲讲iOS的内存管理;

6.你们APP中的一些方案选型问题:如网路库选型,页面路由选型;

7.页面的动画或者渲染的优化如何做?讲讲CoreAnimation;

8.讲讲Foundation和CoreFoundation之间的区别;CoreFoundation是不支持ARC的,如何与Foundation之间进行转化。

9.如何实现界面栈的重构,如何移除栈中的界面;

10.如何对UITableView进行优化,你们的cell都是等高的么;

11.如果让你自己实现下拉刷新的功能,你如何实现;

12.MVVM以及代码臃肿问题;

13.简单聊聊ReactiveCocoa以及数据刷新问题; 

 

十.图片社交in

1.项目中的alert sheet的层级,是添加到哪里?以及key window的层级结构;

2.应用中的安全机制;有哪些对称加密、非对称加密算法;

3.进行直播,使用字典存储观众,观众有进入和离开,人数比较多,如何实现这样一个功能;以及如何实现排序;

4.字典中是如何去进行查找的?并发查找;

5.笔记在更新的时候进行修改,如何处理这种情况,如何防止脏数据;

6.GCD中有哪些方法?

7.讲讲runloop;

8.讲讲runtime;

9.本地化持久方案;

10.在什么时候我们需要使用autoreleasepool;什么时候需要我们手动去写一个autoreleasepool;

11.单例的作用,什么场景下才需要使用单例;

12.ARC是一种编译时特性还是运行时特性; 

 

十一.墨迹天气

1.模块化开发框架有哪些用过?

2.weak的作用;

3.有哪些属性修饰符;

4.混合开发中如何传递数据,即js和oc如何传递数据、参数;

5.做过那些优化?

6.说说我们的App中有哪些需要改进的;

7.讲讲MVC,MVVM;

8.atomic一定是线程安全的吗?

9.iOS中多线程的实现方式;

10.碰到过内存泄露吗?如何查看或者检测内存泄露;

11.你们是如何封装网络请求库的;

 

十二.同花顺

1.KVO的实现原理;

2.UITableView的复用,如果UITableView的高度很高,即frame的高度超过屏幕高度,会怎么进行复用;

3.weak、assign的区别;

4.什么是死锁;

5.二叉树的搜索,搜索二叉树中所有值为2的节点,并返回,代码实现;

6.讲讲runtime;

7.weak为什么比assign安全,其实现原理是怎样的;

8.消息推送如何实现,整个过程是怎样的;

9.缓存图片如何实现,缓存到哪里;如果图片显示有破损,可能是什么原因造成的;

 

十三.华为

1.算法:str = “4213523…..54”很长的数字字符串,如何判断是否能被6整除;

2.安卓有哪些特性可以提高安全性;

3.C/C++中有哪些会导致安全问题;

4.你的获奖是什么时候获得的,研究生有没有获得什么奖学金;

5.简单介绍了加壳,混淆,安全,逆向,hook等;

6.学习成绩怎么样?班级前几?

7.你擅长哪种语言; 

1.介绍了自己的Android项目;

2.为什么要上线自己的Android应用;

3.问选择项目组的事情,选2012还是防火墙;

4.上家公司实习情况;

5.Android应用有哪些收费模式,如何实现收费; 

 

十四.搜狐集团

1.iOS做过哪些渲染优化;

2.二叉树非递归中序遍历代码实现;

3.合并两个已经有序的链表代码实现; 

---------------------

1.Android应用是否可以读取本机号码;iOS应用是否可以读取本机号码;

2.使用位运算符实现两个整型加法代码实现,不考虑溢出; 

 

十五.今日头条

1.算法:二叉树的左右子树交换代码实现;

2.页面路由如何实现,如何去维护一张路由表;页面是如何去进行跳转的(runtime);路由表中的键和值分别是什么?如何根据服务器下发的数据加载页面;

3.js和OC如何调用;(js是怎样调用oc的);

4.GCD和NSOperation的区别;哪一个的复用性更好;NSOperation的队列可以cancel吗,里面的任务可以cancel吗;

5.block和self的循环引用;到底是如何循环引用的;

6.SDWebImage的缓存策略,是如何从缓存中hit一张图片的;使用了几级缓存;缓存如何满了如何处理,是否要设置过期时间;

7.讲讲RunLoop;

8.讲讲iOS动画,比如CoreAnimation;

9.屏幕上点击一个View,事件是如何去响应的;

10.深拷贝与浅拷贝;

11.有哪几种类型的block;什么情况下block会从栈区复制到堆区;

12.在一个函数中的局部变量,需要return,那么这个局部变量什么时候会被释放;它是分配在哪里?

13.CALayer和UIView的区别;动画可以作用于CALayer和UIView吗?

14.讲讲runtime,以及hook,以及如何进行方法交换;

15.讲讲逆向工程; 

1.算法:double power(double  x, int n)函数实现,最好是O(long)复杂度;

2.使用关联对象把属性添加到category中,具体步骤是怎样的;

3.如何去手动触发KVO,如何让KVO去监听一个方法;

4.weak和assign的区别;

5.weak在它指向的对象被释放后,会被置为nil,该机制是如何实现的;

6.NSString为什么要修饰成copy;block为什么要修饰为copy;

7.哪些属性需要修饰为weak;

8.NSMutableArray在block中修改时,是否要修饰为__block;   int类型呢; 

1.讲讲JSPatch;使用了iOS的什么原理;

2.讲讲MVC,MVVM,MVP;MVP是哪三个单词的缩写;

3.操作系统进程间通讯的方式;

4.讲讲共享锁和互斥锁;

5.进程和线程的区别;

6.UIViewController的生命周期;

7.UITableView滑动卡顿如何解决优化;

8.iOS多线程有哪几种方式;

9.让你印象深刻的学到的技术;安全?

10.Linux和Unix相关知识;

11.http和https的区别;

12.get和post的区别;

13.非对称加密方式有哪些,数字签名如何实现; 

 

十六.中国移动杭研

(1)群面题目:移动支付安全;

(2)实习中的开发流程;

(3)当前手头offer情况; 

1.bad_access这个bug是如何出现的?

2.NSString为什么用weak修饰,如果使用strong修饰会怎样?

3.讲讲单例设计模式,在什么情况下使用单例模式?

4.iOS响应链;

5.isa指针的作用;

6.列表中图片缓存与内存优化,有没有出现过OOM的情况;

7.手头的offer情况;

8.技术上和生活上有哪些缺陷和不足;

9.默认的属性修饰符有哪些;

10.了解socket吗; 

 

最后真诚希望大家都能拿到心仪的offer。

原文地址:http://www.manongjc.com/article/1612.html

分享到