iOS开发面试(2020-04-15)

参考资料:(https://juejin.im/post/5d7f35976fb9a06b20059680)

开发小知识(二)::http://www.cocoachina.com/articles/26507

一、基础

1、static & const & extern
static修饰局部变量:将局部变量的本来分配在栈区改为分配在静态存储区,静态存储区伴随着整个应用,也就延长了局部变量的生命周期。
static修饰全局变量:本来是在整个源程序的所有文件都可见,static修饰后,改为只在申明自己的文件可见,即修改了作用域。
const:修饰变量主要强调变量是不可修改的。            
extern:主要是用来引用全局变量,先在本文件中查找,本文件中查找不到再到其他文件中查找。常把 extern 和 const 联合使用在项目中创建一个文件,这个文件中包含整个项目中都能访问的全局常量。
2、 NSString / NSArray / NSDictionary 经常使用 copy 关键字,为什么?如果改用strong关键字,可能造成什么问题?
因为他们有对应的可变类型:NSMutableString、NSMutableArray、NSMutableDictionary,他们之间可能进行赋值操作(就是把可变的赋值给不可变的),为确保对象中的字符串值不会无意间变动,应该在设置新属性值时拷贝一份。如果我们使用是 strong ,那么这个属性就有可能指向一个可变对象,如果这个可变对象在外部被修改了,那么会影响该属性。
总结:使用copy的目的是,防止把可变类型的对象赋值给不可变类型的对象时,可变类型对象的值发送变化会无意间篡改不可变类型对象原来的值。
3、单个viewController的生命周期?
- initWithCoder:(NSCoder *)aDecoder:(如果使用storyboard或者xib)
- loadView:加载view
- viewDidLoad:view加载完毕
- viewWillAppear:控制器的view将要显示
- viewWillLayoutSubviews:控制器的view将要布局子控件
- viewDidLayoutSubviews:控制器的view布局子控件完成  
- viewDidAppear:控制器的view完全显示
- viewWillDisappear:控制器的view即将消失的时候
- viewDidDisappear:控制器的view完全消失的时候
- dealloc 控制器销毁
4、CADisplayLink、 NSTime和GCD定时器。

参考:https://blog.csdn.net/pearl0922/article/details/99169088?depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-12&utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-12

5、OC与swift的区别

二、高级

1、Shell 脚本
2、卡顿检测原理。

卡顿检测:
1、监听runloop状态为before waiting状态下是否卡顿。
2、监听runloop状态在after waiting和before sources之间。
(kCFRunLoopBeforeSources和kCFRunLoopAfterWaiting的runloop状态检测判断app是否卡顿。)

3、weak 原理说明。

一个对象可能会被多次弱引用,当这个对象被销毁时,我们需要找到这个对象的所有弱引用,所以我们需要将这些弱引用的地址(即指针)放在一个容器里(比如数组)。当对象不再被强引用时需要销毁的时候,可以在SideTable中 通过这个对象的地址找到引用值,清空引用值。同时, SideTable结构中还有weak_table_t结构,该结构也是一个散列表,key 为对象地址,value 为一个数组,里面保存着指向该对象的所有弱指针。当对象释放的时候,先清空引用哈希表RefcountMap对应的引用值,遍历弱指针数组,依次将各个弱指针置为 nil。

4、自旋锁 & 互斥锁

线程安全中为了实现线程阻塞,一般有两种方案:一种是让线程处于休眠状态,此时不会消耗 CPU 资源;另一种方案是让线程忙等或空转,此时会消耗一定的 CPU 资源。前者属于互斥,后者属于自旋。自旋在线程加锁的情况下,会一直尝试是否解锁,如果没有解锁,会一直循环判断,如果锁已经放开,则继续执行,不再是空转状态。OSSpinLock 属于自旋锁,Pthred 库中相关的锁,以及 NSLock、@synchronized 等都属于互斥锁。OSSpinLock目前已经不再安全,因为会出现优先级反转问题。 现代操作系统一般采用 时间片轮转算法 调度进程或线程,按照线程的优先级为不同的线程分配不同的时间,优先级越高分配的时间片越多。假设有两个线程 thread1 和 thread2,其中 thread1 的优先级高于 thread2,即thread1 分配的时间片多余 thread2。如果 thread2 正在锁内安全执行,一段时间后 thread1 执行任务时,发现锁未打开,于是会处于忙等状态。由于thread1 的优先级高于 thread2,此时系统会分配更多的时间片给 thread1,thread2 时间片减少,迟迟不能完成,thread1 却一直等待。如此就造成线程优先级反转。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,492评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,048评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,927评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,293评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,309评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,024评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,638评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,546评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,073评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,188评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,321评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,998评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,678评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,186评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,303评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,663评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,330评论 2 358

推荐阅读更多精彩内容

  • 本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。 首先讲...
    李欣阳阅读 2,458评论 1 15
  • Java多线程学习 [-] 一扩展javalangThread类 二实现javalangRunnable接口 三T...
    影驰阅读 2,963评论 1 18
  • ​ 前言:这可能是史上最全面的一篇iOS 多线程博客了(王婆卖瓜一番😄),从多线程的基本概念,进程的概念,引出i...
    阿饼six阅读 849评论 2 11
  • 九种基本类型及封装类 基本类型booleanbytecharshortintlongdoublefloat 二进制...
    0f43ee70035e阅读 309评论 1 0
  • 一、线程状态转换新建(New)可运行(Runnable)阻塞(Blocking)无限期等待(Waiting)限期等...
    达微阅读 587评论 1 2