Skip to content

Latest commit

 

History

History
176 lines (109 loc) · 8.44 KB

18苏州蜗牛iOS开发面试题2018年春.md

File metadata and controls

176 lines (109 loc) · 8.44 KB

苏州蜗牛iOS开发面试题2018年春

作者:RocketsChen&&jianshu.com/p/ffc9b1cec635

面试通知邮件:邮件+电话约当天下午的面试

笔试+面试 模式

虽然对笔试有心里准备但是当拿到5页面试题的时候心还是细微的颤抖了下,除了第一张是一道考宏交换的程序判断题和最后一页三条题<纠错,趣味>以外,中间三页题目密度在平均一页7条。总的来说题量还是很感人的!当然接待的人事特意跟我说笔试题是开卷。

笔试

附上如下部分面试题目,总的来说蜗牛的面试题题量涉及的范围还是挺广的。

我大概做了五十几分钟,然后接待的人事和我说不用写了,可以接下来准备下一轮面试。(笔试过程中有人来看过我,下一轮的面试官)

简述itms-services作用

参考内容

备注:iOS14开始,需要IPA包下载地址和plist地址均使用HTTPS

  • 苹果安装app的另一种方式(通过itms-services协议,不通过AppStore,直接安装IOS应用程序)

  • 其实是利用苹果自家的浏览器safari和itms-services协议来实现的:只要在内网布置一个服务器,测试人员只需要通过测试设备的safari浏览器访问特定的url既可以实现安装

POST和GET谁更安全?以及谈谈服务器交互的过程中更安全的保护措施?

参考内容

POST和GET区别

  • GET传输方式将在URL中显示参数,更容易引发一些“不怀好意”人的兴趣,POST相对来说比get方法更加安全。当然是没有绝对的安全的

  • HTTP协议中提到GET是安全的方法(safe method),其意思是说GET方法不会改变服务器端数据,所以不会产生副作用。如果是该用POST的地方用了GET,又说GET不安全,那GET也太冤枉了。也就是说,只要我们正确选择使用GET和POST,那么GET是安全的。

  • 只要我们正确使用二者,因为GET方法中不对数据进行修改,不传送一些保密的信息,而这些需要由POST来传输,所以说GET不存在安全问题,而需要注意的是POST传输的安全问题。

  • 更安全的保护措施[客户端侧]

    • 跟服务器端确认是否需要添加特定的user-agent(添加user-agent的目的:确保服务器安全)。
    • 确认客户端和服务器端交互时是否需要对文件进行加密操作。
    • 跟开发确认请求时是否需要增加重试和具体的超时机制,有无下载的断点续传。
    • 对于异常情况,跟服务器和客户端的开发确定相应的容错处理。
    • 需要注意询问开发,与服务器之间的交互是用什么做的,标准的http协议还是自写的协议。

对于一个xxxx.a的静态库而言,如何使用命令行来查看其支持的CPU架构 ? 苹果在2015年2月之后要求我们必须支持哪一种CPU架构;

参考内容

iOS_StaticLibrary

  • 使用命令: lipo -info .a文件名称, 即可查看静态库所支持的系统架构。

  • arm64

duplicate symbol是什么?谈谈如何避免和产生后解决方案;

参考内容

两个静态库冲突. 文件中重复定义了一个函数、变量(比如全局变量) 工程中包含同名的文件。

  • 在使用import 引入头文件时,由于疏忽,误引入.m 文件
  • 同名文件放在不同的文件夹下
  • 在 Targets 的 Build Phrases 设置里,查看下 Complie Sources这一项,看看出现问题的类是不是重复的.如果是重复的,删除掉重新添加也能解决这个问题
  • 1如果是两个静态库冲突的话,可以将两个.a静态库解压,删除其中一个里面重复的.o文件(编译时产生的临时文件),然后用lipo命令合并两个静态库;比如libx.a文件

时间和空间复杂度(剑指Offer-第五章)

参考内容

算法(Algorithm)是指用来操作数据、解决程序问题的一组方法。对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但在过程中消耗的资源和时间却会有很大的区别。

那么我们应该如何去衡量不同算法之间的优劣呢?

主要还是从算法所占用的「时间」和「空间」两个维度去考量。

  • 时间维度:是指执行当前算法所消耗的时间,我们通常用「时间复杂度」来描述。

    • 大O符号表示法,即 T(n) = O(f(n)) 【算法的渐进时间复杂度】
    • 常数阶O(1)
    • 对数阶O(logN)
    • 线性阶O(n)
    • 线性对数阶O(nlogN)
    • 平方阶O(n²)
    • 立方阶O(n³)
    • K次方阶O(n^k)【n的k次方
    • 指数阶(2^n)
  • 空间维度:是指执行当前算法需要占用多少内存空间,我们通常用「空间复杂度」来描述。

    • 如果算法执行所需要的临时空间不随着某个变量n的大小而变化,即此算法空间复杂度为一个常量,可表示为 O(1)

交叉编译?简述一下iOS中开发应用场景;

参考内容 > 在iOS设备上进行音视频的处理,往往要使用市面上比较流行的音视频相关库,比如音频编码的Lame,处理视频的FFmpeg,处理图片的OpenCV等.
  • 编译型语言的源代码,比如C源代码,要能在PC上运行,需要经过编译,链接,成为PC可执行的二进制文件,然后才能在PC上运行.同理,如果要在其他机器上运行,就必须编译,链接成为可以在其他机器上运行的代码.
    • 源代码在机器A上的编译链接得到机器B上运行的代码.
    • 如果机器B==机器A,那么就是本机编译.
    • 如果机器B!=机器A,就是交叉编译.

两个具体上架过程中苹果审核失败返回的信息请问如何解决:翻译过来第一条是:利用邀请奖励制度来诱惑玩家驳回 第二条是:抽奖类的比赛规则驳回;

备注:以下三题原文均无细节

  • 具体的报错Log分析题;
  • 程序输出结果题;
  • 趣味思考题。

面试:

两位面试官:拿着我答题卷和简历开始进行面试:问题整理下大致有如下几个

  • 简单分享下你开源作品中的一个技术点

  • 对于热跟新技术的理解还有雷区

  • 对于项目中的动态性的处理和看法以及组件的运用

  • 对于图片加载的方式和图片展示方式的思考

  • 项目中使用的框架

  • 深入的问了几条我的面试卷上的题目,其中有一条我提出了疑问,面试官简单的给我讲解了下 分析一下趣味题的实现思路

  • 问了下职业规划

  • 对于技术探究和专研方面

  • 最后就是问我有没有什么想问的

这样就算面试都结束了。然后过了大概一周人事给我电话说面试已经通过,可以给offer了。面试过程大概用了两个小时。

总结

  • 总的面试过程还算是比较顺利的,面试官也很友善。对我来说算是来面试的过程中有所学习。开始我在去蜗牛的路上本以为会问一些runtime、Block、MVC、MVP、MVVM、GCD、ARC等等,结果拿到题算是和我想的不太一样,是把技术点运用到实际问题中,比如最后一页的Crash纠错:在一堆报错日志分析下来:简单的来说就是持有的通知对象在生命周期销毁之前没有被释放而或重复使用。是使用KVO常遇到的一种报错。解决:当前持有的被观察对象,在-dealloc中移除观察者。

  • 在面试过程中肯定有会被面试官问道你不会的的题目,可以进一步题目来问清楚具体查考的方面。不要说一堆与题目无关或误关的的东西。

分享最近看的几本书:

  • 《Effective Objective-C 2.0》
  • 《剑指Offer》
  • 《程序员的自我修养》
  • 《Objective-C编程之道》

觉得整理的蛮不错,可以赞赏一下旺仔(收集整理不易,且赞且珍惜)

链接