程序员打靶问题及解析

老婆酱 分享 时间: 收藏本文

【简介】感谢网友“老婆酱”参与投稿,以下是小编给大家收集的程序员打靶问题及解析(共7篇),欢迎大家前来参阅。

篇1:程序员打靶问题及解析

面试例题 1:一个射击运动员打靶,靶一共有 10 环,连开 10 枪打中 90 环的可能性有多少种?请用递归算法编程实现。[中国某通信企业 H面试题]

解析:靶上一共有 10 种可能——1 环到 10 环,还有可能脱靶,那就是 0 环,加在一起共 11 种可能。这是一道考循环和递归的面试题。我们在这个程序中将利用递归的办法实现打靶所有可能的演示,并计算出结果。读者会问,难道一定要使用递归?当然不是。我们也可以连续用 10个循环语句来表示程序,代码如下:

for (i1=0;i1 (num+1)*10 ) //次数num 为0~9

{

return;

}

(2)如果满足条件且打到最后一次(因为必须打 10 次),代码如下:

if(num == 0)

{

store2[num] = score;

Output( store2);

return;

}

(3)如果没有出现以上两种情况则执行递归,代码如下:

for(int i = 0; i =0; --i)

{

Console.Write(“ {0}”,store2[i]);

}

Console.WriteLine;

sum++;

}

答案:

用 C#编写的完整代码如下:

using System ;

public class M

{

//public static int store;

//相当于设置了全局变量

//这个全局变量sum 是包含在M 类中的

public static int sum;

public M

{

int sum =0;

// int store = {1,2,3,4,5,6,7,8,9,0};

}

//打印函数

//符合要求的则把它打印出来

public static void Output(int store2)

{

for(int i = 9; i>=0; --i)

{

Console.Write(“ {0}”,store2[i]);

}

Console.WriteLine;

sum++;

}

//计算总数,返回 sum 值

public static int sum2

{

return sum;

}

public static void Cumput(int score, int num, int store2 )

{

//如果总的成绩超过了90 环(也就是 score (num+1)*10 ) //次数num 为 0~9

{

return;

}

//如果满足条件且达到最后一层

if(num == 0)

{

store2[num] = score;

Output( store2);

return;

}

for(int i = 0; i

using namespace std;

int sum;

int store[10];

void Output

{

for(int i = 9; i>=0; --i)

{

cout (num+1)*10 ) //次数num 为0~9

return;

if(num == 0)

{

store[num] = score;

Output;

return;

}

for(int i = 0; i <= 10; ++i)

{

store[num] = i;

Cumput(score - i, num - 1);

}

}

int main(int argc, char* argv)

{

Cumput(90, 9);

cout<<“总数:”<

return 0;

篇2:程序员打靶问题及解析

。[中国某著名通信企业 H面试题]

解析:靶上一共有 10 种可能——1 环到 10 环,还有可能脱靶,那就是 0 环,加在一起共 11 种可能。这是一道考循环和递归的面试题。我们在这个程序中将利用递归的办法实现打靶所有可能的演示,并计算出结果。读者会问,难道一定要使用递归?当然不是。我们也可以连续用 10个循环语句来表示程序,代码如下:

for (i1=0;i1<=10;i1++)

{

for (i2=0;i2<=10;i2++)

{

for (i3=0;i3<=10;i3++)

{

......

for (i10=0;i10<=10;i10++)

{

if(i1+i2+i3+...+i10=90)

Print;

}

......

}

}

}

但是,上面的循环程序虽然解决了问题,但时间复杂度和空间复杂度无疑是很高的。比较好的办法当然是采用递归的方式,事实上公司也就是这么设计的.。递归的条件由以下 4 步完成:

(1)如果出现这种情况,即便后面每枪都打 10 环也无法打够总环数 90,在这种情况下就不用再打了,则退出递归。代码如下:

if(score < 0 || score >(num+1)*10 ) //次数num 为0~9

{

return;

}

(2)如果满足条件且打到最后一次(因为必须打 10 次),代码如下:

if(num == 0)

{

store2[num] = score;

Output( store2);

return;

}

(3)如果没有出现以上两种情况则执行递归,代码如下:

for(int i = 0; i <= 10; ++i)

{

//这里实际上为了方便把顺序倒了过来,store2[9]是第1 回

//store2[8]是第 2 回⋯⋯store2[0]是第 10 回

store2[num] = i;

Cumput(score - i, num - 1,store2);

}

(4)打印函数,符合要求的则把它打印出来。代码如下:

public static void Output(int[] store2)

{

for(int i = 9; i>=0; --i)

{

Console.Write(“ {0}”,store2[i]);

}

Console.WriteLine();

sum++;

}

答案:

用 C#编写的完整代码如下:

using System ;

public class M

{

//public static int[] store;

//相当于设置了全局变量

//这个全局变量sum 是包含在M 类中的

public static int sum;

public M()

{

int sum =0;

// int[] store = {1,2,3,4,5,6,7,8,9,0};

}

//打印函数

//符合要求的则把它打印出来

public static void Output(int[] store2)

{

for(int i = 9; i>=0; --i)

{

Console.Write(“ {0}”,store2[i]);

}

Console.WriteLine();

sum++;

}

//计算总数,返回 sum 值

public static int sum2()

{

return sum;

}

public static void Cumput(int score, int num, int[] store2 )

{

//如果总的成绩超过了90 环(也就是 score<0),或者如果剩下要打靶

//的成绩大于10 环乘以剩下要打的次数,也就是说即便后面的都打10 环

//也无法打够次数,则退出递归

if(score < 0 || score >(num+1)*10 ) //次数num 为 0~9

{

return;

}

//如果满足条件且达到最后一层

if(num == 0)

{

store2[num] = score;

Output( store2);

return;

}

for(int i = 0; i <= 10; ++i)

{

store2[num] = i;

Cumput(score - i, num - 1,store2);

}

//Console.Write(“ {0}”,store2[5]);

}

}

public class myApp

{

public static void Main( )

{

int[] store;

store = new int[10];

int sum = 0;

//int a=90;

//int b=9;

//Output();

M.Cumput(90,9,store);

sum = M.sum2();

//M.Cumput2(a,b,store);

//Console.Write(“ {0}”,store[3]);

//cout<<“总数:”<

Console.Write(“ 总数: {0}”,sum);

}

}

程序结果一共有 92 378 种可能,

也可以用 C++编写,代码如下:

#include

using namespace std;

int sum;

int store[10];

void Output()

{

for(int i = 9; i>=0; --i)

{

cout<

}

cout<

++sum;

}

void Cumput(int score, int num)

{

if(score < 0 || score >(num+1)*10 ) //次数num 为0~9

return;

if(num == 0)

{

store[num] = score;

Output();

return;

}

for(int i = 0; i <= 10; ++i)

{

store[num] = i;

Cumput(score - i, num - 1);

}

}

int main(int argc, char* argv[])

{

Cumput(90, 9);

cout<<“总数:”<

return 0;

}

篇3:程序员递归面试问题及解析

。该问题是 19 世纪著名的数学家高斯 1850 年提出:在 8×8 格的'国际象棋盘上摆放 8 个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。[英国某著名计算机图形图像公司面试题]

解析:递归实现 n 皇后问题。

算法分析:

数组 a、b、c 分别用来标记冲突,a 数组代表列冲突,从 a[0]~a[7]代表第 0 列到第 7 列。如果某列上已经有皇后,则为 1,否则为 0。

数组 b 代表主对角线冲突,为 b[i-j+7],即从 b[0]~b[14]。如果某条主对角线上已经有皇后,则为 1,否则为 0。

数组 c 代表从对角线冲突,为 c[i+j],即从 c[0]~c[14]。如果某条从对角线上已经有皇后,则为 1,否则为 0。

代码如下:

#include

static char Queen[8][8];

static int a[8];

static int b[15];

static int c[15];

static int iQueenNum=0; //记录总的棋盘状态数

void qu(int i);

//参数i 代表行

int main()

{

int iLine,iColumn;

//棋盘初始化,空格为*,放置皇后的地方为@

for(iLine=0;iLine<8;iLine++)

{

a[iLine]=0; //列标记初始化,表示无列冲突

for(iColumn=0;iColumn<8;iColumn++)

Queen[iLine][iColumn]='*';

}

//主、从对角线标记初始化,表示没有冲突

for(iLine=0;iLine<15;iLine++)

b[iLine]=c[iLine]=0;

qu(0);

return 0;

}

void qu(int i)

{

int iColumn;

for(iColumn=0;iColumn<8;iColumn++)

{

if(a[iColumn]==0&&b[i-iColumn+7]==0&&c[i+iColumn]==0)

//如果无冲突

{

Queen[i][iColumn]='@';

//放皇后

a[iColumn]=1;

//标记,下一次该列上不能放皇后

b[i-iColumn+7]=1;

//标记,下一次该主对角线上不能放皇后

c[i+iColumn]=1;

//标记,下一次该从对角线上不能放皇后

if(i<7) qu(i+1);

//如果行还没有遍历完,进入下一行

else //否则输出

{

//输出棋盘状态

int iLine,iColumn;

printf(“第%d 种状态为:\\n”,++iQueenNum);

for(iLine=0;iLine<8;iLine++)

{

for(iColumn=0;iColumn<8;iColumn++)

printf(“%c ”,Queen[iLine][iColumn]);

printf(“\\n”);

}

printf(“\\n\\n”);

}

//如果前次的皇后放置导致后面的放置无论如何都不能满足要求,则回溯,重置

Queen[i][iColumn]='*';

a[iColumn]=0;

b[i-iColumn+7]=0;

c[i+iColumn]=0;

}

}

}

篇4:java程序员面试问题

1、谈谈final, finally, finalize的区别。

final―修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载

finally―再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。

finalize―方法名。Java 技术允许使用 finalize 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。

2、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现。

3、Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。

Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。具体可见http: //www.frontfree.net/articles/services/view.asp?id=704&page=1

注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象

Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现

HashMap允许将null作为一个entry的key或者value,而Hashtable不允许

还有就是,HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。

最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在

多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap

就必须为之提供外同步。

4、&和&&的区别。

&是位运算符。&&是布尔逻辑运算符。

5、HashMap和Hashtable的区别。

都属于Map接口的类,实现了将惟一键映射到特定的值上。

HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。

Hashtable 类似于 HashMap,但是不允许 null 键和 null 值。它也比 HashMap 慢,因为它是同步的。

Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现

还有就是,HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。

最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在

多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap

就必须为之提供外同步。

6、Collection 和 Collections的区别。

Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。

Collection是个java.util下的接口,它是各种集合结构的父接口.

7、什么时候用assert。

断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true。如果表达式计算为 false,那么系统会报告一个 AssertionError。它用于调试目的:

assert(a >0); // throws an AssertionError if a <= 0

断言可以有两种形式:

assert Expression1 ;

assert Expression1 : Expression2 ;

Expression1 应该总是产生一个布尔值。

Expression2 可以是得出一个值的任意表达式。这个值用于生成显示更多调试信息的 String 消息。

断言在默认情况下是禁用的。要在编译时启用断言,需要使用 source 1.4 标记:

javac -source 1.4 Test.java

要在运行时启用断言,可使用 -enableassertions 或者 -ea 标记。

要在运行时选择禁用断言,可使用 -da 或者 -disableassertions 标记。

要系统类中启用断言,可使用 -esa 或者 -dsa 标记。还可以在包的基础上启用或者禁用断言。

可以在预计正常情况下不会到达的任何位置上放置断言。断言可以用于验证传递给私有方法的参数。不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公有方法都必须检查其参数。不过,既可以在公有方法中,也可以在非公有方法中利用断言测试后置条件。另外,断言不应该以任何方式改变程序的状态。

8、GC是什么? 为什么要有GC? (基础)。

GC是垃圾收集器。Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:

System.gc()

Runtime.getRuntime().gc()

9、String s = new String(“xyz”);创建了几个String Object?

两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。

10、Math.round(11.5)等于多少? Math.round(-11.5)等于多少?

Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;

11、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。

12、sleep() 和 wait() 有什么区别? 搞线程的最爱

sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级

(b)正在运行的线程因为其它原因而阻塞。

wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。

13、Java有没有goto?

Goto―java中的保留字,现在没有在java中使用。

14、数组有没有length()这个方法? String有没有length()这个方法?

数组没有length()这个方法,有length的属性。

String有有length()这个方法。

15、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。

16、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?

Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。

equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。

17、给我一个你最常见到的runtime exception。

ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException,

ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException

18、error和exception有什么区别?

error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。

exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。

19、List, Set, Map是否继承自Collection接口?

List,Set是

Map不是

20、abstract class和interface有什么区别?

声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。

接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与

[java程序员面试问题]

篇5:程序员面试优缺点问题

程序员面试优缺点问题

经验面试优缺点

这里所说的经验不是通过工作了多少年来衡量的,而主要是指面试者的经历,比如,是否完整地实现过一个软件,或作为主要开发者完成过一个项目。经验的重要性在于它能说明一个人的综合能力。从项目的性质、规模和难度,面试官就可以大致判断出面试者的综合能力。如果一个面试者一直在大公司负责一个小模块的开发维护,那么基本可以判断他不具备独立或作为主要开发者承担一个项目的能力,只适合在另一家大公司做类似的事情。对于门槛较高需要长期技术积累的职位,相关经验更显得尤为重要,比如,Linux内核开发,JVM开发,游戏引擎开发,数据库实现,高级UX等。对于这类职位,没有经验的面试者即使综合素质不错也是需要长时间的学习和积累才能胜任。所以,基本上如果确定了你的职位属于此类,那么相关经验毫无疑问应该成为首选因素,换句话说,P(工作好 | 相关经验好)的概率是非常高的。

通过项目经验判断面试者的优劣比通过基础和算法测试更加靠谱,所以,面试过程中面试官应该花比较多的时间听面试者介绍项目经验,并进行深入地探讨交流,了解面试者的知识面、思维能力、表达能力等。同时,可以结合项目提一些基础知识和算法的问题,比如,如果面试者做过C++相关的项目,那就可以问他如何进行内存管理?是否熟悉智能指针?如果面试者的回答不能令人满意,那么就基本上可以判断他的项目做得不是很好。

要注意的是,经验也是一个多维度的事物。比如,C++股票交易中间件系统,这就涉及(C++,中间件,股票) 3个维度。假如面试者A做过C++股票交易客户端,面试者B做过C的股票交易中间件。从语言角度看,A最匹配,从项目性质看,B最匹配,你如何选择?这就是在多个维度中,哪个维度更重要的问题,就这个例子而言,我个人更倾向于B,因为我认为中间件开发经验是主要矛盾,而从C切换到C++并不是问题。所以,面试官需要判断哪一种经验是主要的,而哪一种经验是次要的。比如,我们招聘Android应用开发,这个职位的Android技术门槛并不高,它的真正难点在于做出好的用户体验(UX)。所以,如果一个面试者没有Android的经验我们是可以接受的,但是我希望他在UX方面有经验,至少做过其他平台的移动应用开发。

基础面试优缺点

基础面试是指考察诸如指针使用、进程线程概念等基础知识的面试,十分类似于大学期末考试题。我曾经以为基础面试十分重要,但是现在不这么看了。在工作中基础的确是重要的,但是在面试过程中,它必须具有区分性才有意义,也就是说P(工作好|基础好)的概率要高,那么考察指针使用,进程线程区别这样的基础题目才有它的意义。我的实际经验是,基础面试并不具有很好的区分性,和算法一样, 差不多P(工作好|基础好) = 50%。同时,基础面试是最容易准备的,中国人有长期的应试教育经验,要准备几个把玩指针题目太容易了。

我曾经遇到过这样的面试者,他的C语言基础和编译、链接等原理掌握得非常好,给我留下了深刻的印象,我给的面试结论是:知识面不宽,只会C语言,但基础很扎实,建议录用。后来的事情证明了那个结论的前半部分是对的,但是”建议录用“错了。他在实际工作中表现得一塌糊涂,不理解需求,不理解整体架构;同时,上班时间不是花在项目上,而是花在阅读诸如《程序员的自我修养》之类的书籍上。最后,这位同事由于长期“不出活”离开了公司。

基础不是不重要,而是“基础好”不足以说明面试者能干好工作,因为基础是属于局部性知识,而实际工作需要综合性能力,二者有天壤之别。C语言、操作系统能考高分,但是不会写程序的人在大学我们还见得少吗? 软件开发就像盖房子,综合能力是设计和搭骨架,基础知识是码砖。张小龙原先Foxmail是Delphi开发的,他它不懂C#,你如果要招聘一个开发。NET Email客户端的人,你考察他对CLR掌握得好不好有意义吗? 让张小龙来开发一个C#版的Foxmail真的会有困难吗? 你招一个精通C#但没有Email客户端开发经验的人来真的比张小龙靠谱吗?

我说基础知识不重要,和古人说的“不积洼步无以至千里”是不是矛盾呢?不矛盾!“洼步”与“千里”是一种可累加关系,但再多的“基础知识”都累加不成“综合能力”。学习软件开发要像持续集成一样,一开始就是一个完整的系统,虽然规模不大,问题很多,但它麻雀虽小五脏俱全,从小系统到大系统,从简单系统到复杂系统逐步演化。

所以,基础好本身不足以说明太多的问题,必须进一步考察综合能力。对于基础面试表现不好的面试者,如果时间允许也要进一步考察,有的面试者其实是有能力的,只是没有进行充分的准备。最理想的状态当然是基础和综合能力俱佳,若不能兼顾,应当综合能力优先。

性格面试优缺点

现在,我来谈我认为最重要的因素:性格。这可能是许多初为面试官的朋友所难以想象的,怎么会是性格最重要呢?说实话,当我意识到这一点时,我自己也很惊讶!说白了,还是 P(工作好|性格好)的概率最高啊。我的实际经验是,如果一个人的性格好,他能把工作做好的可能性是最高的,性格好远比基础好、算法好要靠谱。

一个人如果技术上有缺陷,经验上有不足,但性格好,在团队中是很容易由其他人来补位的,他自己也很容易逐渐补起来;相反,如果一个人的性格不好,所有的技术优势经验优势都发挥不出来,甚至还会起到负作用,而且性格缺点很难改变。我一直谈到实际工作所需要的是综合性的能力,这种综合能力的发挥中性格是至关重要的。项目中不止会遇到技术问题,要涉及沟通、协调,不同的人不同的部门既有合作又有磨擦,如何处理这些事情都需要一个良好的性格。可以说,在开发团队里让你与众不同的不是你从哪个学校毕业,也不是你过去的经验,而是你的性格。

当然,性格是一个复杂的东西,它包含了很多的方面,并非所有方面都是程序员面试所需要关注的。我的经验是可以重点考察这些方面:

1) 态度积极还是消极。有的面试者在谈吐中就会自然给你一种积极上进的感觉,或者你可以在他的经历中发现他积极的因素,这些都不是太难看出来的。相反,有的面试者你能明显感觉到他的消极情绪。积极性在工作中是十分重要的,积极的人能给团队带来朝气,也更易于合作。基本上,如果确定面试者属于态度积极的,他通过我这一关的可能性就会大大增加;相反,如果确定属于态度消极的,即使技术能力不错我也会十分谨慎。

2) IQ。我的经验是,总体来看,聪明的人在工作中的表现更为优秀。在面试中要考察一个人是否聪明并不一定要像Google和MS那样找些专门测试IQ的智力题,其实,你只需要看他讨论问题是不是很有逻辑性,思考和说话是不是反应敏捷就可以做出大致的判断。另外,眼睛是人心灵的窗户,一个人聪明与否,眼睛是会说话的。不过,聪明也不完全是优点,比如,当公司或项目遇到困难时,往往是聪明人先跑掉了,坚守的往往是IQ一般的人。

3) 语言表达能力。语言表达能力也是程序员十分重要的一项素质,它关系到项目中的沟通是否顺畅。面试官可以看看面试者能否用简明的语言介绍清楚曾经做过的项目,能否抓住要点,能否考虑到听者的相关背景。一般来讲,语言表达能力强的人综合能力都不会太差。

4) 是否具有用户意识。有人说程序员是做研发的,哪来什么用户?只有销售、市场人员才会和用户打交道。其实,这是完完全全的错误认识。你写一个模块,甚至一个API,只要有别人用,他就是你的用户。有的程序员设计一个模块或是一个软件总是习惯于从使用者的角度来考虑,尽量地方便使用者,这就是一种良好的用户意识。具有良好的用户意识的人更能考虑别人的感受和整体的需要,而不是单纯地从自己和局部来思考问题。当面试者谈及过去的项目经验时,面试官可以常常站在用户的角度对其进行提问,从这个过程中观察其是否具有良好的用户意识。

5) 如何应对质疑和压力。面试官应该对面试者的回答以及以往项目进行合理的质疑,看看他如何应对。曾经有一位面试者谈到做游戏登录服务器的经历,我就问:“如果登录服务器挂了,怎么办呢”?他说原先虽然没有考虑这个问题,但是可以怎么怎么改进。其实,大家都理解项目中有各种不完美,这里面原因很多,只要面对质疑和压力能从容应对努力往好的方向思考解决就可以了,不需要掩饰缺陷,更不应该有情绪。我遇到过有的面试者,一旦你对其项目提出质疑,他马上产生反抗情绪,或不高兴,或不承认有问题,这很容易一下子看出来他在工作中容不得质疑和批评,这种人要想合作就很困难。

6) 个性特点。许多面试者喜欢在简历上写“精通C++/Linux“,这些字眼看得人麻木,如果有人写”喜欢C++/Linux“,我就会有一种眼前一亮的感觉。“精通”是没有感情色彩的叙述,而“喜欢”包含了面试者的个性,我更愿意看到面试者的个性。我相信对某样东西真正的热情远比你当前对它的掌握程度更为重要。其实,N年的经历告诉我们,同一个班的同学,同一个项目组的同事,虽然每天所学的知识,所接触的工作都是相同的,但其实每个人的成绩和表现差异是十分明显的。那么,到底本质的差异是什么呢?其实,就是每个人的个性。是个性使得有的人业余时间去打球,有的人业余时间去看书,有的人喜欢Linux,有的人喜欢Mac。一个人在团队中扮演的角色也和他的个性有很大的关系。面试官应该引导面试者展现自己的个性,并判断其是否有益于团队。

1.有趣的程序员面试问题

2.面试的优缺点的问题怎么回答

3.程序员面试过程中的经典问题

4.Java程序员面试题集合

5.美的面试问题

6.护士面试问题

7.小升初面试问题

8.军校面试问题

9.预测面试问题

10.大学面试问题

篇6:程序员面试最常问的10个问题解析

程序员面试最常问的问题

1.你最喜欢的编程语言是什么?

2.你讨厌哪些编程语言?为什么?

3.如果让你在自己最常用的编程语言上面添加功能,你希望是什么功能?

4.说一个你曾经参与过的项目,在这过程中经历了哪些困难,最后如何克服? 你有没有干过什么事情最后却铩羽而归?

5.在某个休息天,突然有同事打电话来要你快速回复有关于你最近写的代码片段的问题,你会不会觉得生气烦躁?

6.你被要求去搞定一堆艰巨的代码,但是你却不知道它是如何工作的,没有文档也没有测试,你会怎么做?

7.在zelda系列中你最喜欢什么游戏?你还喜欢哪些?你

8.是否曾想过如果是你先开发的minecraft,那会怎么样?

9.你喜欢什么网站? 你会推荐什么书作为必读?

10.最后一个但并非是最不重要的,请解释以下名词:dry、solid、yagni、乐观锁与悲观锁)、mvc与mvvm(可自行添加)

此外,写代码能力也是不可忽视的。可以让他们展示自己写的代码或者实现一个你现场要求的功能。真正有能力的程序员会为自己的代码感到骄傲,所以可以好好观察一下,看看他们是否乐意并勇于展示自己的代码。

面试的技巧与注意事项

亲友团:不带为妙

在应聘面试时,“亲友团”还是不带为妙。千万不要以“情侣档”或父母陪同的方式求职,这样会让考官认为你依赖性太强、独立性太差,继而对你的能力产生怀疑。

微笑:始终如一

做好面试前的形象准备,掌握面试礼仪全攻略,微笑应贯穿应聘全过程。应聘者进了公司,从跟前台打交道开始,就不妨以笑脸示人。见到面试官之后,不管对方是何种表情,都要微笑着与其握手、自我介绍。在面试过程中,也要始终注意,不要让面部表情过于僵硬,要适时保持微笑。

自我介绍:两分钟秀自我

有一位公共关系学教授说过这样一句话:“每个人都要向孔雀学习,两分钟就让整个世界记住自己的美。”自我介绍也是一样,只要在短时间内让考官了解自己的能力、特长,就已经足矣,千万别干“画蛇添足”的蠢事。

倾听:聚精会神

面试时,应聘者的目光应正视对方,在考官讲话的过程中适时点头示意。因为这既是对对方的尊重,也可让对方感到你很有风度,诚恳、大气、不怯场。当考官介绍公司和职位情况时,更要适时给予反馈,表明你很重视他所说的内容,并且记在心里了。

应答:思考5秒钟 如何应对面试后的等待?

掌握情景面试技巧,当面试官问及一个重要问题,尤其是有关工作业绩方面的,在回答之前,应适当停顿5秒钟,留出一段思考的时间。这样做,除了可以组织一下要表达的内容,重要的是告诉对方你正在认真回忆过去的经历,并可以给对方留下真实性的感觉。

语言:讲普通话

普通话是求职时的语言通行证。不会讲普通话,就不能顺畅地与人交流,也就谈不上取得考官的信任与好感了。所以,如果你仍乡音未改的话,赶快下功夫学普通话,否则,求职可能会寸步难行。

面试的技巧攻略

一、面试前的准备

1、信息准备。在面试之前,要尽可能多地收集有关招聘单位的详细资料, 做到心中有数。所获得的信息应准确、真实。

2、材料准备。准备好自荐材料(包括各种证书和成果等), 充分考虑面试中可能提出的问题。

3、仪表准备。头发应整洁,男学生最好在面试前一周理发,面试前一天修面。女学生可以化淡妆,但不宜太浓或过于夸张。服装应干净、得体,不宜穿家常服装和运动服面试。男学生可以带公文包,女学生可以带手袋,面试时应放置一旁,切勿放在自己与面试人之间。

4、心理准备 择业前要客观认识自己,正确分析自我,根据自身的特长,选择适当的就业位置;要保持积极、主动的择业心态,敢于竞争,敢于自荐;要增强心理承受能力。

二、面试礼仪 面试要讲究礼仪。

在求职面试过程中,切不可忽视礼节和举止,面试中的礼仪至少有几个方面值得认真对待:

一是服饰要得体。要给人以整洁、大方的感觉,穿着以庄重一点为好;

二是要遵守时间。面谈时一定不能迟到,同时要遵守面试约定的时间长度,在约定的时间内体现你的办事效率;

三是表情要自然,举止要文雅,讲究文明礼貌。进入面试场合不要紧张,要从容、自然;

四是面谈时,眼睛要真诚地注视对方,表示对他的话感兴趣,不要东张西望,心不在焉。要显得具有自信心,对对方谈话的反应要自然坦率,不能作出大惊小怪的表情。

篇7:重点问题解析

重点问题解析

1.介绍张思德。

张思德同志是中共中央警卫团的战士,四川仪陇人。16岁参加革命,同年加入共产主义青年团,后又加入中国共产党。他在长征途中受过伤,始终全心全意为人民服务。1944年9月5日,在陕北安塞县山中烧炭时,因炭窑崩塌而牺牲。他虽然只活了28岁,但他短暂的一生是完全、彻底为人民服务的一生。他的死比泰山还要重。9月8日,中央警备团为他举行了追悼会。毛泽东同志在会上作了著名的讲演,这就是《为人民服务》。

2.这篇讲话的中心思想是什么?这个中心是怎样一层一层表达出来的?

全文是围绕着全心全意为人民服务这个中心,分五层表达出来的。

第一层讲我们党及其领导的军队,根本的宗旨就是为人民服务。为人民服务就要完全、彻底。也就是说,除了为人民服务之外,再没有别的目的,不管在什么时候,不管做什么工作,都应该是为人民谋利益,而不是为个人或小团体谋利益。只有这样做,才称得上是名副其实的革命者,一个人活着才有意义。

第二层讲人死的两种不同的意义。为人民利益而死,就比泰山还重;替法西斯卖力,替剥削人民和压迫人民的人去死,就比鸿毛还轻。张思德同志是为人民利益而死的,他的死就比泰山还重,虽死犹生。这里毛泽东通过讲革命者对生死的看法,揭示了革命的生死观。

第三层讲要为人民的'利益坚持好的,改正错的。在我们的工作中,难免出现一些错误和问题,不管是什么人,谁向我们指出都行。不管是同志、朋友,还是反对过自己的人,谁的意见都听得进去。只要你说得对,对人民有好处,我们都要改正,都要照办。衡量是非的标准只有一个,那就是是否符合人民的利益。毛泽东同志用李鼎铭先生提出“精兵简政”的例子,说明要采纳一切符合人民利益的建议和批评。

第四层讲要为人民的利益搞好团结,提高勇气,不怕牺牲,互相爱护。革命队伍的人来自全国各地,都是为了一个共同的革命目标――为人民服务。既然目标一致,就没有理由不搞好团结。团结的人越多越好,因为只有人民才是创造世界历史的动力。只要坚定地相信人民,紧紧地依靠人民,就什么样的困难都能克服,什么样的敌人都能打败。为了人民的利益要不怕牺牲,这种牺牲是有意义、有价值的。一方面要不怕牺牲,当人民利益需要的时候,勇敢地挺身而出,毫不犹豫地献出自己的生命,视死如归;另一方面,要尽量地减少不必要的牺牲。为了做到这一点,毛泽东同志提出三个“互相”,充分体现了革命队伍内应有的同志情谊。

第五层讲开追悼会的目的。开追悼会对死者表示怀念、哀悼。开追悼会还因为死者是为人民服务的,值得人们沉痛地怀念他。这样的人虽然死了,但他们永远活在人们心中。

3.理解下面一段话的意思。

因为我们是为人民服务的,所以,我们如果有缺点,就不怕别人批评指出。不管是什么人,谁向我们指出都行。只要你说得对,我们就改正。你说的办法对人民有好处,我们就照你的办。这段话一共有三句、每一句都是复句。

第一句“因为……所以……”是因果关系。

第二句“不管……都……”是条件关系,表示不论什么样的条件,都有这样的结果。

第三句“只要……就……”也是条件关系,表示只要有这样的条件,就有这样的结果。

三个句子连接很紧,论述层层深入,我们从中可以体会到毛泽东同志思维的严密。

重点问题解析由本站会员分享,版权归作者所有,转载请注明出处!

相关专题 程序员问题