腾讯sng一面面试题-iOS开发
2016-08-29 本文已影响2325人
sonialiu
校招tst内推面试,110分钟:有些问题比较简单,就不贴答案了,有些问题太难,怕自己的理解有误,误了大家,所以也不贴答案了,但是可以交流答案。
- 介绍一下实习的项目,任务分工,做了哪些工作?介绍实习内容
- 网络相关的:项目里面使用到什么网络库,用过ASIHTTP库吗
- 断点续传怎么实现?需要设置什么?
- HTTP请求过程;
- 在杭州HTTP请求服务器响应快,可能离服务器距离近,而在深圳访问就很慢很慢,会是什么原因?如果用户投诉,怎么分析这个问题?
- HTTP请求的哪些方法用过?什么时候选择get、post、put?
- TCP建立连接的过程,断开连接的过程,为什么是四次握手?
- 项目里面的数据存储都用了哪些?知道iOS里面有哪些数据存储方法?什么时候该用哪些方法存储?
- 内存泄露的几种情况分析;(简历上写的解决了一些内存泄露的问题)
- 问题:有A B C D E五个类,都要监听登录和注册的通知,发通知给它们五个控制器麻烦,就写了一个单例类,负责发通知,需要接受通知的就实现delegate,因为单例类里面的数组引用了这几个VC,导致不释放,怎么解决?类似NSTimer,不知道什么时机移除VC(可以从这方面考虑:NSNotificationCenter,直接在dealloc里面remove掉就行)因为VC被引用,所以不会执行到dealloc方法,先看下NSNotificationCenter是怎么实现的吧
- 发布出去的版本,怎么收集crash日志?不使用bugly等第三方平台或者这些第三方平台是怎么收集crash日志的?
- 在block里面使用_property会造成循环引用吗?怎么解决?除了使用self->_property,可以使用valueforkey来访问吗 在block里面可以修改它的值吗setvalueforkey?可以修改它的值,可以用valueforkey来解决,显式的的使用self,block外先持有self的弱引用。
- 说一下runtime?为什么OC里面是发消息,而C/C++是函数调用?
- 说下OC发消息的过程
- 什么是OC对象?union是OC对象吗 block是OC对象吗
每个 Objective-C 对象都是指向某块内存数据的指针,所以在声明变量时,类型后面要跟一个“*”字符:Class的定义:一个结构体
Union不是OC对象
block是特殊的OC对象,定义是个结构体类型,其他OC对象分配在堆上,block是分配在栈上。 - id是什么类型?是一个指针类型的,可以指向任意OC对象类型的通用对象类型。定义也是结构体。
- 解决过的最精彩的crash问题?
- 自定义一个类,有两个方法,一个是以new开头的,另一个不是以new开发的,方法里面都是alloc init方法,这两个方法有什么不同?引用计数变化?ARC下,编译器会插入什么语句?
- ARC和MRC的本质区别是什么?
- NSThread,GCD,NSOperation相关的。开启一条线程的方法?线程可以取消吗?
- 子线程中调用connection方法,为什么不回调?因为没有加入runloop,执行完任务就销毁了,所以没有回调。
- autorelease变量什么时候释放?手动添加的是大括号结束的时候释放,系统自动释放是在当前runloop循环结束的时候。
- 那子线程中的autorelease变量什么时候释放?
- 子线程里面,需要加autoreleasepool吗
- GCD和NSOperation的区别?
- 项目里面遇到过死锁吗?怎么解决?数据库访问本来就是线程安全的,不会造成死锁啊。什么是死锁?
- Viewcontroller的生命周期?
- 在init方法里面,设置背景颜色,会生效吗 会生效。为什么会?
- WWDC2016公布了哪些新特性?对苹果系列的最新特性有关注吗
- 为什么做iOS开发,不做安卓开发?
- C++相关的。什么是虚函数?虚函数是怎么实现的?什么是多态?
- 为什么类的析构函数设置成虚函数?为什么构造函数不设置成虚函数?
- 如果父类有一个成员变量A,子类有A,B两个变量,父类指针指向了子类,父类执行delete方法,子类的变量会被释放吗?怎么才能被释放?执行子类的delete方法,两个变量会被释放吗?
- 数据结构与算法相关。知道哪些数据结构?线性表(具体点 数组)连接、栈、队列、二叉树、堆。
- iOS中哪里用到栈了?开发过程中哪里用到链表了?栈的特点,链表的特点
- 什么是完全二叉树?堆是什么数据结构?
若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。 - 向量和链表的区别?什么时候选择vector?什么时候选择使用链表?
- 100个数,找出其中重复的数?
- 10个数,找出其中最大数和最小数,没有值相等的。
- 归并排序的过程
- 堆排序的过程、快排的过程
- 你最出色的是哪方面?iOS开发,iOS开发的哪一方面?