我的ios求职历程

2017-03-24  本文已影响194人  Santorini_ld

        从2016年8月份学习完ios课程,十分自信的我以为找工作很好找 。事实上,从15年下半年ios开发已经走下坡路。凭借着对开发的热情我找工作找到了2017年3月,还是没有入职,现实让我不得不做出选择,看来我的转行了。

以下是我面试的面试题总结:

一、ios中assign,copy,retain之间的区别以及weak和strong的区别?

答:assign:简单赋值,不更改索引计数(Reference Counting)。

      copy:建立一个索引计数为1的对象,然后释放旧对象。

      retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1。

     weak和strong区别:它们两个不同的是,当一个对象不再有strong类型的指针指向它的时候,它会被释放,即使还有weak型指针指向它。

二、程序启动的完整过程

答:1.main函数

2.UIApplicationMain

* 创建UIApplication对象

* 创建UIApplication的delegate对象

3.delegate对象开始处理(监听)系统事件(没有storyboard)

* 程序启动完毕的时候, 就会调用代理的application:didFinishLaunchingWithOptions:方法

* 在application:didFinishLaunchingWithOptions:中创建UIWindow

* 创建和设置UIWindow的rootViewController

* 显示窗口

3.根据Info.plist获得最主要storyboard的文件名,加载最主要的storyboard(有storyboard)

* 创建UIWindow

* 创建和设置UIWindow的rootViewController

* 显示窗口

三、内存分区:

答:内存分区:可以分为5个区。说到内存分区,内存即指的是RAM。

《1》栈区(stack): 这个一般由编译器操作,或者说是系统管理,会存一些局部变量,函数跳转跳转时现场保护(寄存器值保存于恢复),这些系统都会帮我们自动实现,无需我们干预。 所以大量的局部变量,深递归,函数循环调用都可能耗尽栈内存而造成程序崩溃 。

堆区(heap): 一般由程序员管理,比如alloc申请内存,free释放内存。我们创建的对象也都放在这里。

全局区(静态区 static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后有系统释放。注意:在嵌入式系统中全局区又可分为未初始化全局区:.bss段和初始化全局区:data段。举例:int a;未初始化的。int a = 10;已初始化的。

常量区:常量字符串就是放在这里的,还有const常量。

代码区:存放代码,app程序会拷贝到这里。

四、客户端的缓存机制?

答:缓存可以分为:内存数据缓存,数据库缓存,文件缓存

《1》每次想获取数据的时候

《2》先检测内存中有无缓存

《3》再检测本地有无缓存(数据库/文件)

《4》最终发送网络请求

《5》将服务器返回的网络数据进行缓存(没存、数据库、文件),以便下次读取

五、ios常用的存储方式?

《1》NSUserDefaults类

《2》Plist文件

《3》解归档

《4》手动存放沙盒

《5》CoreData

《6》第三方数据存储框架

六:多线程

答:GCD是(Grand Central Dispatch)的缩写 ,从系统级别提供的一个易用地多线程类库,具有运行时的特点,能充分利用多核心硬件。GCD的API接口为C语言的函数,函数参数中多数有Block,关于Block的使用参看这里,为我们提供强大的“接口”,对于GCD的使用参见本文

NSOperation与Queue

NSOperation是一个抽象类,它封装了线程的细节实现,我们可以通过子类化该对象,加上NSQueue来同面向对象的思维,管理多线程程序。具体可参看这里:一个基于NSOperation的多线程网络访问的项目。

NSThread

NSThread是一个控制线程执行的对象,它不如NSOperation抽象,通过它我们可以方便的得到一个线程,并控制它。但NSThread的线程之间的并发控制,是需要我们自己来控制的,可以通过NSCondition实现。

七、界面的生命周期?

答:initWithCoder:(NSCoder *)aDecoder:(如果使用storyboard或者xib)

loadView:加载view

viewDidLoad:view加载完毕

viewWillAppear:控制器的view将要显示

viewWillLayoutSubviews:控制器的view将要布局子控件

viewDidLayoutSubviews:控制器的view布局子控件完成

这期间系统可能会多次调用viewWillLayoutSubviews 、    viewDidLayoutSubviews 俩个方法

viewDidAppear:控制器的view完全显示

viewWillDisappear:控制器的view即将消失的时候

这期间系统也会调用viewWillLayoutSubviews 、viewDidLayoutSubviews 两个方法

viewDidDisappear:控制器的view完全消失的时候

八、SVN管理代码?

答://创建svn服务器

1.svnadmin create /Users//ws/Desktop/svn/mycode

//启动svn服务器

2.svnserve -d -r /Users//ws/Desktop/svn

//初始化服务器

3.svn import /Users//ws/Desktop/ws123 svn://127.0.0.1/mycode/ws123 --username=ws --password=910831 -m "初始化数据"

//从服务器上把代码拿下来

4.svn checkout svn://127.0.0.1/mycode/ws123 --username=ws --password=910831 /Users//ws/Desktop/work

//提交代码(在工作文件夹中)

5.svn commit -m " "

//更新最新版本

6.svn update

九、程序员应聘必备词汇:了解=听过名字;熟悉=知道是啥;熟练=用过;精通=做过东西。

十、就是一些实际遇到的问题(支付,JS交互,蓝牙还有WiFi,推送)。这个的自己去查查

上一篇下一篇

猜你喜欢

热点阅读