大厂面试(二)

一、上海青客

1、UIView 于 CALayer 的区别
2、页面布局的方式
3、如何优化TableView的流畅性
4、OC与JS交互所用的方式,并简述一下
5、列举常用的设计模式,并说明使用场景
6、列举数据持久化的几种方式,及优缺点
7、数据库读写中用到的多线程是什么?多线程如何同时操作一个数据库
8、多个线程读取数据如何保证不出错
9、2个app间通讯(调用)方式,及两个app间如何进行数据传输?
10、block与函数有什么区别,block的优点有哪些?声明一个block及实现
11、使用swift3.0写一个单例


二、易车网(2017)

1、讲一下你们的项目结构

  • 使用的设计模式
  • 对比其他项目有什么新的技术
  • 非功能性模块有哪些

2、MVC设计模式中C层需要做哪些工作,对MVVM的理解以及对比MVC中C层中功能拆解位置划分
例如:对于MVC中C层中数据处理转为MVVM是所处的位置VM层还是M层(胖瘦Model的问题)
3、view的frame和bounds.当对view进行旋转之后frame以及bounds有什么变化
4、UIView和CALayer的关系以及各自的继承关系.
5、iOS中的事件响应机制(response Chain)
6、TCP,UDP有什么区别,讲解一些对于Socket的理解
7、Decorator模式与Category,给类添加方法(继承,Category和Runtime添加)
8、动画的种类和实现过程(basic动画,keyFrame动画,Spring动画)

9、Block

  • 根据在内存中所处的位置有哪几种(global,stack,heap)
  • global和stack类型的区别
  • 能不能将block添加到数组或者字典中,会有什么问题

10、RunLoop

  • 解释一下RunLoop
  • RunLoop有几种状态
  • RunLoop的mode有什么作用
  • RunLoop与线程之间的关系
  • 系统是怎么实现RunLoop的mode切换
  • NSTimer与RunLoop的经典问题 怎么解决
  • RunLoop的mode切换需要做什么(自定义的异步线程)PS 可能跟source1和source0有关

三、(滴滴架构师:孙源sunny)DynamicCocoa项目招聘

大厂面试(二)_第1张图片
WechatIMG1408.jpeg

四、广州某公司面试题(2018.07)

简答
1、使用NSLog函数输入一个浮点类型,结果四舍五入,并保留一位小数
2、在一个对象的方法里面:self.name = “object”, 和 name = “object”有什么不同
3、定义属性时,什么情况下使用copy, assign, 和 retain
4、简述object-c内存管理机制,并简述什么时候由你负责释放对象,什么时候不由你释放
5、Object-c的类可以多重继承么?可以实现多个接口么?

程序设计
1、求n个数的和 1/2 + 1/3 + 1/4 + … + 1/n
2、求第N个数是多少 1,1, 2, 3, 5, 8, 13, 21
(a)可用一个数组,把n个数都保存在数据中从而求第n个数
(b)用多个变量循环求第n个数
(c)用递归求第n个数
3、请走完程序,求出数组中,连续几个数字相加和最大

    int num[12] = {2, 7, -10, 8, 22, -2, 13, -9, 5, 3, -8, 7};
    int sum = 0;
    for (int i = 0; i < 12; i ++)
    {
        int temp = 0;
        for (int j = i; j < 12; j ++)
        {
            ____________
            ____________
            ____________
        }
    }
    printf(sum);

算法题
1、一个农夫,买了一头小牛,这头小牛成长到第四年开始,会每年生一头小牛,所出生的小牛成长到第四年开始,也会每年生一头小牛,请问N年后,农夫共有多少头牛。(请写出代码实现)。
2、一个文件中有40亿个 不重复的 unsigned int 整数,没有排过序的,如何快速判断某个数是否在那40亿个数当中?描述关键代码或者主要思路即可。
3、有一个玻璃瓶,里面装了若干糖果。两个人轮流拿,每次只能拿1-3颗。如果让你先拿,你有什么策略保证,每次都能拿到最后一颗。


五、一个不知名的公司面试题

基础题
1、二选一(20%)

  • 利用rand5 生成 rand7(randN等概率随机输入1、2、…、N)
  • 单次批量生成100个不重复的 0—200的随机数(即不可逐个记录已选出的数)

2、二选一(20%)

  • 判断一个链表是否有环,并定位环的位置
  • 单链表原地逆制,不使用递归,复杂度O(n)

编程题 (60%)
快速、归并、堆排序(三选一)


六、某公司二面

1、写二叉树的先序遍历,然后用非递归写
2、写快排,并分析原理
3、http协议
4、http为什么底层是tcp不是udp ?
5、tcp是基于流式传输的,怎么设计协议,进行协议的解析?
6、tcp为什么要进行三次握手?不是2次,4次?
7、抓包工具的原理是啥?
8、socket异常断开时,设计一个合理的重连机


七、

1、说下线程和进程的区别
2、如何保证线程安全
3、写个算法,输出2~100的素数(然后问你怎么优化,还可以怎么优化,然后还可以怎样优化.....)
4、了解哪些设计模式
5、MVC设计模式的思想是什么?在项目中的运用,然后对比MVVM设计模式
6、堆和栈的区别,工程项目中的哪些数据是储存在堆哪些在栈中
7、iOS中的NSCopying协议,copy,MutableCopy的区别
8、解释属性修饰关键词的作用(weak,strong,copy,readOnly,assgin,nonatomic等)
9、最近看过哪些书?目录结构是怎样的?哪部分内容印象最深?了解过作者吗?
10、你还有什么问题问我?


八、

1、解释一下keywords的区别:assign weak __block, __weak
2、__block在arc和非arc下含义相同么
3、使用atomic一定是线程安全吗
4、描述一个你遇到过的retain cycle
5、+(void)load; +(void)initalize有什么用处.
6、为什么其他语言里叫函数调用,oc里则是给对象发消息(或者谈一下对runtime理解)
7、什么是method swizzling
8、UIView 和 CALayer的关系
9、如何高性能的给UIImageView加圆角
10、讲讲你用Instrument优化动画性能的经历
11、loadView是干什么用的。


九、一个2015年的老篇面试题

1、什么是arc?(arc是为了解决什么问题诞生的?)
2、请解释以下keywords的区别: assign vs weak, __block vs __weak
3、__block在arc和非arc下含义一样吗?
4、使用atomic一定是线程安全的吗?
5、描述一个你遇到过的retain cycle例子。(别撒谎,你肯定遇到过)
6、+(void)load; +(void)initialize;有什么用处?
7、为什么其他语言里叫函数调用, objective c里则是给对象发消息(或者谈下对runtime的理解)
8、什么是method swizzling?
9、UIView和CALayer是啥关系?
10、如何高性能的给UIImageView加个圆角?(不准说layer.cornerRadius!)
12、使用drawRect有什么影响?(这个可深可浅,你至少得用过。。)
13、ASIHttpRequest或者SDWebImage里面给UIImageView加载图片的逻辑是什么样的?(把UIImageView放到UITableViewCell里面问更赞)
14、麻烦你设计个简单的图片内存缓存器(移除策略是一定要说的)
讲讲你用Instrument优化动画性能的经历吧(别问我什么是Instrument)
15、loadView是干嘛用的?
16、viewWillLayoutSubView你总是知道的。。
17、GCD里面有哪几种Queue?你自己建立过串行queue吗?背后的线程模型是什么样的?
18、用过coredata或者sqlite吗?读写是分线程的吗?遇到过死锁没?咋解决的?
19、http的post和get啥区别?(区别挺多的,麻烦多说点)
20、我知道你大学毕业过后就没接触过算法数据结构了,但是请你一定告诉我什么是Binary search tree? search的时间复杂度是多少?我很想知道!

你可能感兴趣的:(大厂面试(二))