年度总结

         最近过年来打算换工作,因为搭档一直请假在家的原因没法进行交接,就临时替公司面试了二十来个人,发现过年来找工作的人好多呀,顿时觉得心里压力好大。我也在网上看了一些面试题和笔试题。想来总结一下这几天面试的心得。

一,在网上看面试题发现出题人对于面试者关于多线程的问题还是比较重视的。比如线程的任务和队列问题是比较多的。我们平时常用的是GCD,分为同步执行(sync)和异步执行(async)和队列组(dispatch_group)问题。

在队列组中,重点考察了队列组notify的使用,比如在多线程的异步执行中,当添加的任务都已经执行完毕以后,再回到主线程执行任务。

例如:

dispatch_group_notify(group, dispatch_get_main_queue(), ^{

// 等前面的异步任务1、任务2都执行完毕后,回到主线程执行下边任务for(inti =0; i <2; ++i) { [NSThreadsleepForTimeInterval:2];// 模拟耗时操作NSLog(@"3---%@",[NSThreadcurrentThread]);

// 打印当前线程}NSLog(@"group---end"); });

还有一个线程信号的问题,dispatch_semaphore,通过控制计数的问题来控制线程的执行。

二,为了增加一点面试的难度,在网上找了几个坑用来面试的时候提问,

1.在GCD找了一个线程队列组组,在其中一个异步线程中还包含了一个异步线程,然后使用队列组notify,结果基本上全部面试者中了埋伏,都觉得是执行notify的时候,各个线程组里面的线程已经执行完毕,结果打印显示,先执行了各个队列线程组的第一个异步线程,然后走的最后的notify,最后才进了队列线程组里面的异步线程里面的异步线程。其实也算大家一起学习了。然后就想到了应该使用线程信号dispatch_semaphore问题来解决,当然使用NSOperationQueue能更好的解决这个问题。

2.封装了一个网络请求,在每次网络请求前我都加了一个SVP的菊花来增加显示效果,在每次请求成功或者失败以后通过SVP的提示消除菊花,然后在一个界面里面是有2个网络请求,我通过创建新线程在2个请求结束以后才能回到主线程更新UI界面,然后让面试者找问题。结果真是问题藏得比较深,只有3.4个人看出了问题。因为网络请求是在分线程中进行的,而网络封装里面因为加了菊花展示,所以就是在分线程中修改了UI,就会有报错提示。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • NSThread 第一种:通过NSThread的对象方法 NSThread *thread = [[NSThrea...
    攻城狮GG阅读 859评论 0 3
  • 背景 担心了两周的我终于轮到去医院做胃镜检查了!去的时候我都想好了最坏的可能(胃癌),之前在网上查的症状都很相似。...
    Dely阅读 9,277评论 21 42
  • 本文首发于我的个人博客:「程序员充电站」[https://itcharge.cn]文章链接:「传送门」[https...
    ITCharge阅读 349,141评论 308 1,926
  • 一天二十四小时 整座城市醒着 看绅士们酒吧外站着碰杯 聊一天或一生的故事 Fish&Chips 已经备好 想像海洋...
    Calvin张家渝阅读 477评论 0 2
  • 一 我从小就是在父母的争吵声中长大的,所以特别渴望有一个温馨和睦的家,但是我不相信爱情,我觉得男人没有一个好人,我...
    紫翼天葵阅读 110评论 0 1