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

版权声明:本文为博主原创文章,欢迎分享到其它技术社区,分享请标明出处: https://blog.csdn.net/CHENYUFENG1991/article/details/53472284

      笔者参加了2017秋季不少的校招iOS岗位面试,下面我把这些面试题都贴出来和大家共勉:

一.搜狐快站

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.问选择华为项目组的事情;
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。

阅读更多

没有更多推荐了,返回首页