ios高级工程师面试题,苹果公司面试题全中国没几个懂的你能答上来吗桌子上有100

1,苹果公司面试题全中国没几个懂的你能答上来吗桌子上有100任意把硬币分成两堆,使其中一堆是10枚,则另一堆是90枚 。然后将第一堆中10枚硬币全部翻面,此时两堆中正面朝上的硬币数量相同 。其实就是取补数 。从大堆中分出10个硬币 。并全部翻面 。即可呵呵哒,我不能看不能花钱请别人帮我看吗?【ios高级工程师面试题,苹果公司面试题全中国没几个懂的你能答上来吗桌子上有100】
2,如何面试 iOS 工程师首先看公司有没明确的岗位定位,比如有些公司招初级,中级,高级工程师 。1、初级的话:网上的那种面试题能答对百分之40就可以进入面试了,面试内容主要为OC基础(或者swift基础),然后控件的使用和一点基本的代码思路...2、中级的话:面试题要求60-70左右就可以了.面试时初级的内容加上一些一些进阶的内容比如,notificationCenter和delegate的区别,多线程分哪几种,然后简单的使用等等,然后比如空指针,野指针数组越界等等问题的处理方式. 3、高级的话:面试题要求90以上,然后必须有模块设计之类的 , 基本iOS的可以随便考了(runtime技术,socket等等),必须答对百分之90以上 。
3,ios开发工程师面试会问什么经典问题也是支持,我代表大家顶你了郑州美甲学校http://zhengzhoumeijia.com郑州美甲学校以前的一个同事推荐的 。ios开发工程师 。简历过去后,一周就电话过来了,安排周六面试 。周六去了后,发现至少50人 , 都是社招的 。首先是半个小时宣传百度文化,然后android和ios两组,都是笔试题 。基本是算法 。也考察ios知识 。你想了解更多 到千锋教育网站看看 有很多专业的指导深圳千锋教育,清华讲师授课 , 加上一流的教学设备-苹果设备 。真实的企业项目实战培训 。签订《就业培训协议》推出“保底薪、保就业、不就业退全款”的保证,并且是零首付入学,不5k就业不收学费 。http://bbs.mobiletrain.org/
4 , 整理出一份高级iOS面试题1、NSArray与NSSet的区别?2、NSHashTable与NSMapTable?(注:NSHashTable与NSSet的区别:NSHashTable可以通过option设置元素弱引用/copyin,只有可变类型 。但是添加对象的时候NSHashTable耗费时间是NSSet的两倍 。NSMapTable与NSDictionary的区别:同上)3、 属性关键字assign、retain、weak、copy4、weak属性如何自动置nil的?5、Block的循环引用、内部修改外部变量、三种block6、KVO底层实现原理?手动触发KVO?swift如何实现KVO?7、categroy为什么不能添加属性?怎么实现添加?与Extension的区别?category覆盖原类方法?多个category调用顺序8、load方法和initialize方法的异同 。——主要说一下执行时间,各自用途,没实现子类的方法会不会调用父类的?load initialize 调用时机 app启动后,runtime初始化的时候 第一个方法调用前调用 调用顺序 父类->本类->分类 父类->本类(如果有分类直接调用分类 , 本类不会调用) 没实现子类的方法会不会调用父类的 否 是 是否沿用父类实现 否 是image9、对 runtime 的理解 。——主要是方法调用时如何查找缓存,如何找到方法,找不到方法时怎么转发,对象的内存布局OC中向对象发送消息时 , runtime会根据对象的isa指针找到对象所属的类,然后在该类的方法列表和父类的方法列表中寻找方法执行 。如果在最顶层父类中没找到方法执行 , 就会进行消息转发:Method resoution(实现方法)、fast forwarding(转发给其他对象)、normal forwarding(完整消息转发 。可以转发给多个对象)11、autoreleasepool的原理和使用场景?image12、Autorelase对象什么时候释放?在没有手加Autorelease Pool的情况下,Autorelease对象是在当前的runloop迭代结束时释放的,而它能够释放的原因是系统在每个runloop迭代中都加入了自动释放池Push和Pop 。13、Runloop与线程的关系?Runloop的mode? Runloop的作用?内部机制?14、iOS中使用的锁、死锁的发生与避免15、NSOperation和GCD的区别16、oc与js交互17、swift相比OC有什么优势?18、struct、Class的区别19、访问控制关键字(public、open、private、filePrivate、internal)20、OC与Swift混编21、map、filter、reduce?map与flapmap的区别?image22、guard与defer23、try、try?与try!24、@autoclosure:把一个表达式自动封装成闭包25、throws与rethrows:throws另一个throws时,将前者改为rethrows26、App启动优化策略?main函数执行前后怎么优化27、crash防护?28、内存泄露问题?主要集中在循环引用问题中 , 如block、NSTime、perform selector引用计数问题 。29、UI卡顿优化?30、架构&设计模式31、数据结构&算法32、计算机基础5,Java高级软件工程师会面试哪些问题四其实,先从这七个大方面着手吧?七,都有规律可寻,万变不离其宗、价值取向您对原来的单位和上司的看法如何!一 。二 , 我想如果你做过的话应该都不是什么难事:在最短的时间里了解到你最多的信息?三?95%的面试基本上都离不开这些问题 。其实对所有的面试官而言?五、资质特性您如何描述自己的个性、工作模式您平时习惯于单独工作还是团队工作,只有一个目的?六,当然还有可能问一些专业问题 , 一般面试官都不会过多的问专业方面的问题的 。想高效率的准备面试,问的问题都差不多、请用最简洁的语言描述您从前的工作经历和工作成果、薪资待遇是否方便告诉我您目前的待遇是多少、专业背景您认为此工作岗位应当具备哪些素质、背景调查您是否介意我们通过您原来的单位迚行一些调查,不管是什么样的面试形、基本情况16,知乎上的一个怎么面试iOS工程师的问题1. 可以先叫她做一套笔试题2. 然后针对笔试上面的题目,叫她具体的作答,应用场景3. 问一些基础的问题,然后就是问一些底层的内容4. 最后就是问一些公司业务逻辑要用到的内容,比如推送,分享,聊天的一些东西等等1.什么是arc?(arc是为了解决什么问题诞生的?)首先解释arc: automatic reference counting自动引用计数 。arc几个要点:在对象被创建时 retain count +1,在对象被release时 retain count -1.当retain count 为0 时,销毁对象 。程序中加入autoreleasepool的对象会由系统自动加上autorelease方法,如果该对象引用计数为0 , 则销毁 。那么arc是为了解决什么问题诞生的呢?这个得追溯到mrc手动内存管理时代说起 。mrc下内存管理的缺点: 1.当我们要释放一个堆内存时,首先要确定指向这个堆空间的指针都被release了 。(避免提前释放) 2.释放指针指向的堆空间 , 首先要确定哪些指针指向同一个堆,这些指针只能释放一次 。(mrc下即谁创建 , 谁释放,避免重复释放) 3.模块化操作时,对象可能被多个模块创建和使用,不能确定最后由谁去释放 。4.多线程操作时,不确定哪个线程最后使用完毕2.请解释以下keywords的区别: assign vs weak, __block vs __weakassign适用于基本数据类型,weak是适用于nsobject对象,并且是一个弱引用 。assign其实也可以用来修饰对象 , 那么我们为什么不用它呢?因为被assign修饰的对象在释放之后,指针的地址还是存在的,也就是说指针并没有被置为nil 。如果在后续的内存分配中,刚好分到了这块地址,程序就会崩溃掉 。而weak修饰的对象在释放之后,指针地址会被置为nil 。所以现在一般弱引用就是用weak 。首先__block是用来修饰一个变量,这个变量就可以在block中被修改(参考block实现原理) __block:使用__block修饰的变量在block代码快中会被retain(arc下,mrc下不会retain) __weak:使用__weak修饰的变量不会在block代码块中被retain 同时,在arc下,要避免block出现循环引用 __weak typedof(self)weakself = self;3.__block在arc和非arc下含义一样吗?是不一样的 。在mrc中__block variable在block中使用是不会retain的但是arc中__block则是会retain的 。取而代之的是用__weak或是__unsafe_unretained来更精确的描述weak reference的目的其中前者只能在ios5之後可以使用,但是比较好 (该物件release之後,此pointer会自动设成nil) 而後者是arc的环境下为了相容4.x的解决方案 。所以上面的范例中__block myclass* temp = …;// mrc环境下使用 __weak myclass* temp = …;// arc但只支援ios5.0以上的版本 __unsafe_retained myclass* temp = …;//arc且可以相容4.x以後的版本4.使用nonatomic一定是线程安全的吗?()不是的 。atomic原子操作,系统会为setter方法加锁 。具体使用 @synchronized(self) nonatomic不会为setter方法加锁 。atomic:线程安全,需要消耗大量系统资源来为属性加锁 nonatomic:非线程安全 , 适合内存较小的移动设备5.描述一个你遇到过的retain cycle例子 。block中的循环引用:一个viewcontroller@property (nonatomic,strong)httprequesthandler * handler;@property (nonatomic,strong)nsdata*data;_handler = [httprequesthandler sharedmanager];[ downloaddata:^(id responsedata)_data = responsedata;}];123456self 拥有_handler, _handler 拥有block, block拥有self(因为使用了self的_data属性,block会copy 一份self)解决方法:__weak typedof(self)weakself = self[ downloaddata:^(id responsedata)weakself.data = responsedata;}];12346.+(void)load; +(void)initialize;有什么用处?在objective-c中,runtime会自动调用每个类的两个方法 。+load会在类初始加载时调用 , +initialize会在第一次调用类的类方法或实例方法之前被调用 。这两个方法是可选的,且只有在实现了它们时才会被调用 。共同点:两个方法都只会被调用一次 。7.为什么其他语言里叫函数调用, objective c里则是给对象发消息(或者谈下对runtime的理解)先来看看怎么理解发送消息的含义:曾经觉得objc特别方便上手,面对着 cocoa 中大量 api,只知道简单的查文档和调用 。还记得初学 objective-c 时把[receiver message]当成简单的方法调用 , 而无视了“发送消息”这句话的深刻含义 。于是[receiver message]会被编译器转化为: objc_msgsend(receiver, selector) 如果消息含有参数,则为: objc_msgsend(receiver, selector, arg1, arg2, ...)如果消息的接收者能够找到对应的selector , 那么就相当于直接执行了接收者这个对象的特定方法;否则 , 消息要么被转发,或是临时向接收者动态添加这个selector对应的实现内容,要么就干脆玩完崩溃掉 。现在可以看出[receiver message]真的不是一个简简单单的方法调用 。因为这只是在编译阶段确定了要向接收者发送message这条消息,而receive将要如何响应这条消息 , 那就要看运行时发生的情况来决定了 。objective-c 的 runtime 铸就了它动态语言的特性 , 这些深层次的知识虽然平时写代码用的少一些,但是却是每个 objc 程序员需要了解的 。objc runtime使得c具有了面向对象能力,在程序运行时创建 , 检查,修改类、对象和它们的方法 。可以使用runtime的一系列方法实现 。

    推荐阅读