IOS面试经历

6 篇文章 0 订阅

今天一共面了四家公司,都是面试iOS岗的。今天就说一下面试的问题吧,也算是给自己回顾一下。答案也是我自己的了解跟一些资料结合的,不敢保证百分百就是对的。

第一家:

1.id跟isa是什么,简单说一下?

我:id是可以指向任何一个对象的指针,算是个泛指针。isa平常好像没用到。

答案:id是一个指向某个类的实例的指针,id是一种通用的对象类型,可以用来存储任何类型的对象。也可以理解为“万能指针”。isa是Objeect-C的一个隐藏的数据结构,每个Objeect-C都有,是Objeect-C对象的第一个成员变量,它指向的是该对象的类(class)。

2.深浅拷贝?

浅拷贝:指针拷贝,复制一个新的指针,指向的是同一个内存地址,实际的内存没有发生拷贝。

深拷贝:内容拷贝,拷贝数据到一块新的内存地址,指针指向拷贝的新的内存地址。

对于不可变类型NSString:copy是浅拷贝,mutableCopy是深拷贝;nutableCopy之后变成了NSMutableString。

对于可变变量NSMutableString:copy和mutableCopy都是深拷贝,但是copy之后的数据类型变成了NSString。

结论:copy之后是不可变的,mutableCopy之后是可变的。

3.父类继承问题:子类继承自父类,但是没有写自己的初始化方法,当调用子类初始化的时候返回的时候对象?

答:因为子类没有重写自己的初始化方法,所以该子类进行初始化的时候用的是父类的初始化方法,则返回的对象是父类的对象,那这个子类继承自父类就没有意义了。

4.nil跟NSnull的区别

答:nil:但初始化一个OC对象为空的时候可以赋值为nil

NSnull:NSNull只有一个方法:+ (NSNull *) null;[NSNull null]用来在NSArray和NSDictionary中加入非nil(表示列表结束)的空值.   [NSNull null]是一个对象,他用在不能使用nil的场合。

举例:NSnull就是一个空指针,比如说想要在数组中间添加一个空元素就可是使用它。

5:问二叉树的结果是什么样的,有哪种遍历方式?

二叉树的形态就是一个树形结构,有一个根节点,节点下面有子节点,最底层的节点为叶子节点。子节点最多有两个。像一个金字塔型,跟堆对的结构差不多。遍历的方式有前中后序遍历三种方式。

6.你对红黑树的理解?

这个真的问到我了,学数据结构的时候就是简单的看了一下,我就是实话实话了。

答:

7.冒泡排序跟选择排序的思路?

这个是最简单的了。

答:冒泡排序就是两层循环结构,里面一个if判断大小进行交换,两层循环结束就代表这个数值有序了。

选择排序:每次循环找到一个最小或者最大的值,将它提到最前面,遍历结束就是有序的了。

具体代码我是真的好久没有写了。

到这第一家结束了,我问了一些公司福利,直接表明我的期望工资。

第二家:

1.你知道的设计模式有哪些?

代理模式,MVC模式,单例模式,工厂模式。

代理模式:

应用场景:当一个类的某些功能需要由别的类来实现,但是又不确定具体会是哪个类实现。

MVC模式:

应用场景:是一中非常古老的设计模式,通过数据模型,控制器逻辑,视图展示将应用程序进行逻辑划分。

单例模式:

应用场景:确保程序运行期某个类,只有一份实例,用于进行资源共享控制。

工厂模式:

应用场景:工厂方式创建类的实例,多与proxy模式配合,创建可替换代理类。

2.用什么实现数据持久化?

有四种方式:

属性列表(plist)、数据归档(NSKeyedValueArchiver/NSUserDefaults)、数据库(sqlite)和coreData等

3.单例模式如何运用?

在整个程序中只有一个实例,并且提供一个类方法供全局调用,在编译时初始化这个类,然后一直保存在内存中,到程序(APP)退出时由系统自动释放这部分内存。

在整个应用程序中,共享一份资源(这份资源只需要创建初始化1次),一般用于工具类。例如:登陆控制器,网络数据请求,音乐播放器等一个工程需要使用多次的控制器或方法。

4.用过哪些数据库,如何获取数据库的数据?

宏观的话就是这样

①客户端(用户)向服务器发送请求
②服务器收到请求后,通过sql语言与服务器上运行的服务端(也就是数据库)的数据库管理系统(DBMS)通信得到数据
③查询得到结果再返还给客户端

5.HTTP跟HTTPS的区别?

HTTP 协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息。默认http协议的端口为80,用户访问网站 http://。

HTTPS协议是HTTP经过SSL/TLS加密数据包的,安全性更高,HTTPS 默认工作在 TCP 协议443端口。HTTPS工作流程中就有哪个必问的三次握手。

6.TCP的三次握手

第一次握手:客户端向服务器端发送数据请求连接SYN,

第二次握手:如果服务器端接收到客户端的请求连接,则服务器端知道客户端的发送功能正常。然后发送响应请求,

第三次握手,如果客户端接收到服务器端的响应请求,则客户端知道服务器的读写功能正常,能够接收和发送数据,然后响服务器端发送确认包,这时也可发送些数据。完成三次握手。

7.问了有没有用过第三方库

第三家:

1.block是什么,使用block会遇到什么问题?

block本质是一个结构体,也算是一个函数,一般用于数据回调,block如果都是强持有的话容易出现循环引用的问题,可以week一方跳出循环。

2.有没有过马甲包打包提包?

没有试过自己打包,但是有提过包两次,一次成功了一次没有。

3.runloop跟runtime

runtime即运行时,它是一套比较底层的纯C语言API,属于一个C语言库,包含了许多C语言的API,它是OC的幕后工作者,我们平时写的OC代码在运行过程中都会转为runtime的C语言代码。就是系统在运行的时候的一些机制,最主要的是消息机制。意味着它可以动态创建类和对象进行消息发送和转发等操作。

runloop运行循环的意思,具体查看RunLoop官方文档,主要作用就是保证线程不退出能随时处理事件,实现了线程有工作时忙,没工作时线程进入睡眠,避免资源浪费的目的。

第四家:

一家大厂,想让去北京我没意向。面试也没问什么,我就简单描述一下,问了下我平常怎么学习的,有没有看博客的习惯,runloop跟runtime也问了。让我现场写一个插入排序。这我自己都傻逼了,太久没用算法了,知道逻辑是怎么一回事,但是就是写不出来结构。这一点真不行,我还得重新养成刷力扣得习惯吧,Java也都快忘没了,我觉得这是我目前不太好得地方。

总结:技术方面得知识我还是差的多,还得是多学学,多用用平常没有怎么接触过得控件。学一下app得开发,真的得抽时间时间学习了,大四仔。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值