面试技巧
面试是每个程序猿都会经历的,面试官不只会对你的专业知识进行考察,他也会从你面试的过程中,观察你的言行举止,从而考察你这个人除开专业知识之外的东西。先来说说面试技巧吧。掌握一些面试技巧能让你的面试获得额外的加分。
1.不要总是保持笑脸
面试中一直保持笑脸被看做是紧张和缺乏自信的表现。一直微笑的脸流露出一种虚假的感觉,面试官很容易就会发现这一点。相反,要有思想,且让别人感到愉快。该笑的时候要微笑。在镜子或朋友面前练习一下笑的技巧。
2.不要扯闲话
你的工作是对你将要面试的公司有一个全面的了解。关于昨晚的歌曲“和明星共舞”的小道消息或是你最喜欢的博客的闲谈都不会让你得到工作。永远都不要感觉你必须用闲谈来丰富面试内容。尽量谈谈和产业或公司有关的一些严肃的话题。适当保持沉默也比面试中的瞎扯淡要好。
3.不要流汗
穿一件背心或是多穿了一些衣服都有可能让你失掉工作。手掌流汗或者额头上有汗珠都不会给人好印象。你不是在申请做一个私人教练。流汗会被看做是弱势或者紧张的标志。穿好参加面试的服装在朋友面前排练一下。工作面试是你一定不想感到热的地方。
4.不要做拦路石
面试官想要寻求一些敢于承担有挑战性项目或工作的候选人。犹豫或是爱说不的心态都想红色领结一样明显,那也被看做是负面的表现。联系对那些关于你对工作任务的兴趣或是某项可能让你有所考虑的工作的问题说“是”,“好的”。
5.不要太小节
询问午餐地点或是会议室方位会让面试官觉得你缺乏充足的准备或积极主动性。做好准备。不要问一些关于公司的常规元素或功能的问题,例如:职工在哪,工作室的规模,以及公司关于咖啡时间的政策等。
6.不要说谎
研究证明职工老是在工作地点说谎。说谎不会带给你工作的。在工作面试中即使是轻微的夸张也算是说谎。不要说谎。永远不要凭空夸大你的简历,也不要粉饰自己的成就。和一个适度自信的人谈话,以及和一个吃牛的谈话是不一样的。一个谎言可能就会毁了你的面试。有经验的面试官一眼就能识别你的谎言,然后让你离开。
7.不要成为一个小丑
幽默是很主观的东西。虽然笑话可能对你的面试有帮助,但你需要对你的笑话的内容谨慎一些。你很可能不知道面试官的敏感性,更别说什么能让他们发笑了。另一方面,没有其他东西能够像适当的微笑那样减轻工作面试中的紧张。所以你可以在打趣的说“今天真是面试的好天气啊!”时稍稍礼貌的笑一下。
8.不要太难伺候
如果你开始谈论工作温度要适宜,座椅要适合你的背,冷水器里要装满进口的矿泉水,那么很可能不管你多适合这个工作,面试官都会给你一个礼貌的微笑,然后让你离开。今天在职的任何人都不愿意去雇用一个对自己的工作环境过分挑剔的人。
9.不要浪费时间
在每一个工作面试中,有望被录用的人都会有问问题的时间。要让你的问题机智、切中要点,还要注意观察办公桌对面的面试官的眼神,看看自己问的是不是足够多了。若果你问太多不重要的问题,面试官就会把你看做一个以后会因一些不重要的或是浪费时间的小事而浪费公司资源的人。
10.不要语出伤人
一般说来,语出伤人者被认为是背后出刀的人,他们经常用别人的功劳来得到好评。在面试的情况下,语出伤人的人总是情不自禁的说他的前一位雇主的坏话。如果你把之前的工作地点说得像地球上的地狱一样,那么正在面试你的人会禁不住想要打电话给他们证实一下到底谁是真正的恶魔。
(细节决定成败,有时候求职者们自认为自己有很高的学历,有很牛的技术,却没有把求职过程和求职中应该注意的细节放在心里,这也导致了很多应聘者的失败。)
iOS面试题
话不多说,直接上!(都是收集的网上的一些面试题,希望可以帮助到需要的朋友)
项目流程相关的面试题:
项目的具体流程,技术点在流程中哪些地方使用?
答:项目的具体流程:
(1)可行性分析:这个一般都是做战略的专家来做的,他们更加有市场的前瞻性,俗话说就是看的更远一些,搞市场分析、调研,看看我们的想法到底是否可行,可行性有多大,可能会遇到的问题,我们的优势在哪里,可以利用的资源有哪些,需要引进那些资源,有多少对手,他们都进行到了什么程度等等。
这个阶段的文档成果是:可行性分析报告等
(2)需求分析:这个已经开始具体操作,经过可行性分析,我们有机会,可以进入这个领域。这时候,需要领域专家参与进来,架构师也要参与进来,还有就是需求分析的专业人士,和最少一名文档员,用来记录开发讨论的结果并形成文档。
工作就是分解项目的需求,到底要做些什么,要实现什么功能,就是功能的范围和功能的细节,主要还是业务方面的梳理。
这个阶段的文档成果是:需求分析说明书等
(3)概要设计:经过前面的需求分析,形成了需求分析说明书。这个阶段应该是业务建模,形成业务用例,进一步形成业务用例。这个阶段是分解需求,可以使用数据库建模工具,或者是UML建模工具来辅助一下。
这个阶段的文档成果是:概要设计说明书、业务用例文档等
(4)详细设计:有了概要设计,有了模型,可以定义出数据库模型,甚至是可以定义数据库的字段,然后可以让高级程序员来辅助架构师进行架构设计,普通程序员先写实现的技术用例。或者让他们先看看业务用例,熟悉一下业务流程和项目的目标。
这个阶段的文档成果是:概要设计说明书、技术用例文档等
(5)具体开发:这个阶段就是具体的代码编写了,考验程序员的基本功的时候到了。
关于开发的分工的话,我趋向于分层来分工,这样有以下几个好处:
•不用每个人从数据访问写到界面表现,可以集中精力,精益求精,便于后期优化
•中间层可拔插,可替换,可以优化,增加可扩展性
•可以享受ORM带来的一些好处
•增加可测试性,做得好,甚至可以测试外包
•这个阶段的文档成果是:接口文档,关键算法文档等
可能会有人说,怎么没有测试呢?其实测试时贯穿整个流程的,在需求分析的时候,可以让他们熟悉业务,出来需求之后,他们就可以编写一些手动测试的测试用例,后面产品出来就可以测试了。开发人员的开发的时候,他们就要进行自动化测试的准备。
还有就是一定要形成文档,每个阶段都会有开会,开会大家都有讨论,都需要有结论,有纸质的文档进行保存,可以买录音笔,先录下来,然后整理成文档,因为每个阶段都是后面阶段的基础,如果基础出了问题,后面都会是有问题的,所以后面备查。
专业面试题:
1.Object-c的类可以多重继承吗?可以实现多个接口吗?Category是什么?重写一个类的方式用继承好还是分类好,为什么?
答:Object-c的类不可以多重继承,但是可以实现多个协议接口,通过实现多个协议可以完成c++的多重继承;Category是类别;重写一个类一般用分类好,用Category去重写类的方法,仅对本Category有效,不会影响到其他类与原有类的关系。
2.#import跟#include又什么区别,@class呢,#import<>跟#import”"又什么区别?
答:#import是Objective-C导入头文件的关键字,#include是C/C++导入头文件的关键字,使用#import头文件会自动只导入一次,不会重复导入,相当于#include和#pragma once;@class告诉编译器某个类的声明,当执行时,才去查看类的实现文件,可以解决头文件的相互包含;#import<>用来包含系统的头文件,#import””用来包含用户头文件。
3.属性readwrite,readonly,assign,retain,copy,nonatomic各是什么作用,在那种情况下用?
答:readwrite是可读可写特性;需要生成getter方法和setter方法时
readonly是只读特性只会生成getter方法 不会生成setter方法;不希望属性在类外改变
assign是赋值特性,setter方法将传入参数赋值给实例变量;仅设置变量时;
retain表示持有特性,setter方法将传入参数先保留,再赋值,传入参数的retaincount会+1;
copy表示赋值特性,setter方法将传入对象复制一份;需要完全一份新的变量时。
nonatomic非原子操作,决定编译器生成的setter getter是否是原子操作,atomic表示多线程安全,一般使用nonatomic。
4.对于语句NSString*obj = [[NSData alloc] init]; obj在编译时和运行时分别时什么类型的对象?
答:编译时是NSString的类型;运行时是NSData类型的对象
5.常见的object-c的数据类型有那些, 和C的基本数据类型有什么区别?如:NSInteger和int。
答:object-c 的数据类型有NSString,NSNumber,NSArray,NSMutableArray,NSData等等,这些都是class,创建后便是对象,而C语言的基本数据类型int,只是一定字节的内存空间,用于存放数值;NSInteger是基本数据类型,并不是NSNumber的子类,当然也不是NSObject的子类。NSInteger是基本数据类型Int或者Long的别名(NSInteger的定义typedef long NSInteger),它的区别在于,NSInteger会根据系统是32位还是64位来决定是本身是int还是Long。
6.id声明的对象有什么特性?
答:id 声明的对象具有运行时的特性,就是可以指向任意类型的Objective-c的对象。
7.Objective-C如何对内存管理的,说说你的看法和解决方法?
答:Objective-C的内存管理主要有三种方式ARC(自动内存计数)、手动内存计数、内存池。
8.内存管理的几条原则时什么?按照默认法则.那些关键字生成的对象?需要手动释放?在和property结合的时候怎样有效的避免内存泄露?
答:谁申请,谁释放。遵循Cocoa Touch 的使用原则:
内存管理主要要避免“过早释放” 和 “内存泄漏”,对于“过早释放” 需要注意@property的设置特性时,一定要用对特性关键字。对于“内存泄漏”,一定要谁申请谁释放。关键字alloc或new生成的对象需要手动释放。设置正确的property属性,对于retain需要在合适的地方释放。
9.如何对iOS设备进行性能测试?
答:Profile->Instruments->Time Profiler.
10.Objective-c 中创建线程的方法是什么?如果在主线程中执行代码方法是什么?如果想延时执行代码、方法又是什么?
答:线程创建有三种方法:使用NSThread创建、使用GCD的dispatch、使用子类化的NSOperation,然后将其加入NSOperationQueue;在主线程执行代码、方法是performSelectorOnMainThread;如果想延迟执行代码、方法可以用performSelector:onThread:withObject:waitUntilDone.
11.描述一下iOS SDK中如何实现mvc的开发模式?
答:MVC是模型、视图、控制开发模式,对于iOS SDK,所有的View都是视图层的,它应该独立于模型层,由视图控制层来控制。所有用户数据都是模型层,它应该独立于视图。所有的viewcontroller都是控制层,它应该控制视图,访问模型数据。
有时间再慢慢更新iOS的面试题吧。