美文网首页
我的ios求职历程

我的ios求职历程

作者: Santorini_ld | 来源:发表于2017-03-24 17:13 被阅读194次

            从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,推送)。这个的自己去查查

    相关文章

      网友评论

          本文标题:我的ios求职历程

          本文链接:https://www.haomeiwen.com/subject/sbjvdttx.html