- 相关推荐
程序员电话面试常见问题
身为程序员,你肯定知道和其他技术工作面试比起来,编程工作的面试流程略有不同。
本文就程序员在编程面试中应当避免的10个问题进行说明,同时也给出了如何解决这些问题的建议。
1.从未在纸上或白板上写过代码
这是求职者最容易犯的大错之一。绝大多数编程面试都会安排在纸上或白板上。而与电脑上大量的编码练习相比,绝大多数求职者极少在纸上或白板上进行编码练习。
用惯了IDE(或是文本编辑器)的求职者会在如何保持纸间良好代码规范这第一步上磕磕碰碰。众所周知,编码规范是编程面试的必要条件。而且,在纸上 写代码的时候,没有编译器帮你指出明显的编译时错误。此外,在专家组前方的白板上编码时,绝大多数求职者会感到不安。所以面试前,做些纸上或白板上的编码 练习吧。
2.不要硬记代码
很多毕业新生会去背一些常见问题的答案。好比很多程序员都知道如何“用C中的位运算来交换两数”。但并不是所有人都知道那段代码真正做了些什么,又是如何完成这项任务的。
死记硬背并不是C编程面试的捷径。即便你侥幸答对了一两题,如果不了解基础概念还是无法通过整个面试。关键要了解编程背后的概念。重点并不在于你知道多少种语言,而在于你有多了解这些语言。
3.与面试官极少交流
觉得题目有问题或是有其他疑问时,最好和面试官谈谈。
即便不知道某个特定问题的答案,比起静静坐着或是谈些与该问题全然无关之物,诚实地承认不知道会更好。你还可以讲讲其他与原来问题相关的话题,并告诉他们你在这个话题上很擅长。
4.不准备电话面试
近来很多公司在让求职者参与下一轮面试前会安排电话面试以便初步评定。电话面试与面对面面试有很大不同。电话面试要求良好的听说技巧。
保证在回答前认真听问什么。面试官也许会给你一段代码并让你基于这段代码回答一些问题。参加电话面试前手里有只笔,有张纸很重要。
还有,不要用精准的书面用语回答所有问题,因为那样的话,面试官也许会觉得你答题时一直在完全搬照网上资料。
5.代码凌乱
不要低估代码规范的重要性。不管你多博闻强识,多有创造力,记得他们是在为你的编程技巧评定。面试官下任何结论前都要先读懂你的代码,如果你代码很凌乱,面试官也许压根就不想看。
面试官只是一方面,规范编码还有助于求职者写出正确的程序。相比一团糟的代码,规范编码出bug的可能性更小。
6.对思路避而不谈
面试官会对你解决问题的方法很感兴趣。他们不期望你能解决所有提出的问题,但希望你能给出正确的思路。
例如,你正写一个用C指针交换两数的程序,正确的思路(即调用含待交换变量地址的函数并获取指针参数地址)才是真正重要的。面试官应该会在其他卡壳的地方提示你。
所以,答题时大声说出你的思路把。这是让面试官参与其中的好方法。
7.不好的函数、变量命名习惯
无论面试时用哪种语言解决问题,尽量用相关的变量和函数名,这会有助于代码维护。
举个例子,假设你随手为函数和变量命名,写了成千上万行代码。现在,新人要加入并调试这段代码。可调试这种甚至无法理解变量代表什么的代码,纯粹是做梦。
面试官可能认为这是一个缺点,也可能不这样认为,但站在安全的一方总是更稳妥。此外,编写交换两个变量的函数时,明明可以取名为‘swap’非用‘func’做名字的行为是不会被赏识的。
8.简历中有你所不知道的技术
这是新手的另一大错。为了让简历入围,求职者会列很多编程语言以及很多不甚了解的技术名词。虽然这也许能为你赢得面试机遇,但余下的经历肯定不会很愉快。几分钟内,面试官就能了解你的真正水平和技能。
9.没有自信
和任何面试一样,自信在编程面试中也很重要。有时面试官故意让你回答一道错题。这种情况下,如果知识过硬也有信心的话,你可以轻易指出题目中的疏漏并向面试官提。
回答正确却对自己的回答信心不足的话,入选几率不会很高。这是因为没有公司愿意雇佣没有自信的人。
10.压力过大及睡眠不足
面试前不要熬夜准备。面试过程中,你要保证头脑清晰,精力充沛。
很多求职者在答题时头脑一片空白,尤其是站在白板前面对专家组时。面试压力使得这对求职者而言是常事。好好睡一觉,面试前尽量放松。
程序员面试要注意的问题
[导读]当您向一个对象发送一个autorelease消息时,Cocoa就会将该对象的一个引用放入到最新的自动释放池。它仍然是个正当的对象,因此自动释放池定义的作用域内的其它对象可以向它发送消息。当程序执行到作用域结束的位置时,自动释放池就会被释放,池中的所有对象也就被释放。
1、自动释放池是什么,如何工作?当您向一个对象发送一个autorelease消息时,Cocoa就会将该对象的一个引用放入到最新的自动释放池。它仍然是个正当的对象,因此自动释放池定义的作用域内的其它对象可以向它发送消息。当程序执行到作用域结束的位置时,自动释放池就会被释放,池中的所有对象也就被释放。
2、说一说static 关键字(1)函数体内 static 变量的作用范围为该函数体,不同于 auto 变量,该变量的内存只被分配一次,
因此其值在下次调用时仍维持上次的值;
(2)在模块内的 static 全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;
(3)在模块内的 static 函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明
它的模块内;
(4)在类中的 static 成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;
(5)在类中的 static 成员函数属于整个类所拥有,这个函数不接收 this 指针,因而只能访问类的static 成员变量。
3、什么事单件实例Foundation 和 Application Kit 框架中的一些类只允许创建单件对象,即这些类在当前进程中的唯一实例。举例来说,NSFileManager 和NSWorkspace 类在使用时都是基于进程进行单件对象的实例化。当向这些类请求实例的时候,它们会向您传递单一实例的一个引用,如果该实例还不存在,则首先进行实例的分配和初始化。单件对象充当控制中心的角色,负责指引或协调类的各种服务。如果类在概念上只有一个实例(比如
NSWorkspace),就应该产生一个单件实例,而不是多个实例;如果将来某一天可能有多个实例,您可
以使用单件实例机制,而不是工厂方法或函数。
4、说说Objective-C,有哪些优点哪些不足objc优点:
1) Cateogies
2) Posing
3) 动态识别
4) 指标计算
5)弹性讯息传递
6) 不是一个过度复杂的 C 衍生语言
7) Objective-C 与 C++ 可混合编程
不足:
1) 不支援命名空间
2) 不支持运算符重载
3)不支持多重继承
4)使用动态运行时类型,所有的方法都是函数调用,所以很多编译时优化方法都用不到。(如内联函数等),性能低劣。
5、#import和#include的区别,@class代表什么?@class一般用于头文件中需要声明该类的某个实例变量的时候用到,在m文件中还是需要使用#import
而#import比起#include的好处就是不会引起重复包含
6、线程和进程的区别?进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。
进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
7、Object-C的内存管理?1.当你使用new,alloc和copy方法创建一个对象时,该对象的保留计数器值为1.当你不再使用该对象时,你要负责向该对象发送一条release或autorelease消息.这样,该对象将在使用寿命结束时被销毁.
2.当你通过任何其他方法获得一个对象时,则假设该对象的保留计数器值为1,而且已经被设置为自动释放,你不需要执行任何操作来确保该对象被清理.如果你打算在一段时间内拥有该对象,则需要保留它并确保在操作完成时释放它.
3.如果你保留了某个对象,你需要(最终)释放或自动释放该对象.必须保持retain方法和release方法的使用次数相等.
8、属性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