最近面试了好几家公司,大部分都是面试正规的大企业,所以感想挺多的,下面就几个问题谈谈面试的问题。通常注重基础也就比较多,当然面试的问题也就相当基础。比较有体会。由于本人有六七年工作经验,大部分时间面试基本就是面谈,很少有笔试,但还是有一些公司要求笔试。要求笔试的公司职位基本是程序员和软件工程师,部分高级程序员,程序分析员和少部分公司系统分析员职位。下面就本人碰到的问题和大家交流交流(本人只专一ERP,MRP,MIS系统的开发与设计,只能碰到这方面的问题)。
第一点:程序问题。
此问往往考的都是基础问题,同时考你对这个问题的理解是否会考虑全面(这种问题往往比较简单,但要做好,得有一些生活常识)。更多的不会考你对哪个组件很了解,就这个问题。我曾经问过一些招聘面试人(本人面试别人也是这样的主张),答案基本一样:基础才是根本,组件的东西,看看Window的MSDN在线文档很快就可以解决了。给个台湾一大型企业面试高级程序员C#试题来说明:
下表是台北市下列十年的天气变化状况,请用你所熟悉的语言程序求出十年平均气温的平均值,十年最低气温的最低值及年份,十年最高汽温的最高值及年份。
台北近十年气温变化表
年份 | 平均气温 | 最低气温 | 最高气温 |
1991 | 4 | 1.1 | 9.3 |
1992 | 3 | 2.2 | 5.1 |
1993 | 7 | 3.1 | 8.2 |
1994 | 5 | 1.5 | 7.4 |
1995 | 3 | 2.1 | 7.1 |
1996 | 4 | 4.3 | 8.9 |
1997 | 2 | 2.9 | 9.1 |
1998 | 3 | 1.2 | 9.2 |
1999 | 5 | 2.7 | 9.4 |
2000 | 5 | 3.5 | 9.5 |
注:数值是大概的,但记住基规律,最低气温乱,最高气温都是乱的,但没有重复值。.
这个问题需要注意几点:
第一、平均气温没得说,只一个值,这个没得说。
第二、如果你只看其最低气温和最高气温没有重复值,很多人会想只会有一个最高、最低值,这样用两个循环就可以求得。这样往往出来的结果有错,因为最高气温和最低气温可能不只一条记录(这点大家最容易出错,很多人都只有一个值,以前本人招人时经常碰到这样的事)。
第三、就是考数据对象创建。主要用来存储表的值。
第四、考程序语言。所以一定要用程序语言,而不是用SQL语句,也不是存储过程(用SQL语句和在座过程太简单了,没那么容易考你),所以本人在前面加了粗体。
考查知识点:对象、数组、集合类、循环、算法(就本人理解是这样)
就这样问题,写了一个小示例,不是最简的,但能说明问题就OK。大家可以简化。
using System.Collections;
namespace TestSample
... {
class Sample
...{
static void Main(string[] args)
...{
//定义数组用来存储数据
T[] t= ...{new T("1991",1,1,32),
new T("1992",3,5,31),
new T("1993",2,3,33),
new T("1994",3,2,32),
new T("1995",4,21,31),
new T("1996",9,2,38),
new T("1997",3,1,38),
new T("1998",4,24,37),
new T("1999",1,21,38)};
//定义变量
double temperatureTempSum=0;
double MaxTemperature;
double MinTemperature;
string MaxYear;
string MinYear;
//将数组第一个值赋给各变量
MaxTemperature=t[0].MaxT;
MinTemperature=t[0].MinT;
MaxYear=t[0].Year;
MinYear=t[0].Year;
int minOrder=0;//定义最低气温最小值的序号
int maxOrder=0;//定义最高气温最大值的序号
int[] inm=new int[t.Length];
for(int i=0;i<t.Length;i++)
...{
temperatureTempSum=temperatureTempSum+t[i].AT;
for(int j=i;j<t.Length;j++)
...{
//取得最大值的序号
if(MaxTemperature<t[j].MaxT)
...{
maxOrder=j;
}
//取得最小值的序号
if(MinTemperature>t[j].MinT)
...{
minOrder=j;
}
}
}
//定义最低气温最小值的存储重复的值
ArrayList minTAL=new ArrayList();
//定义最高气温最大值的存储重复的值
ArrayList maxTAL=new ArrayList();
for(int i=0;i<t.Length;i++)
...{
if(t[i].MaxT==t[maxOrder].MaxT)
...{
maxTAL.Add(new T(t[i].Year,t[i].AT,t[i].MinT,t[i].MaxT));
}
if(t[i].MinT==t[minOrder].MinT)
...{
minTAL.Add(new T(t[i].Year,t[i].AT,t[i].MinT,t[i].MaxT));
}
}
Console.WriteLine("Sum of Average Temperature is "+temperatureTempSum+" ,Array of T is "+t.Length);
Console.WriteLine("Average temperature is "+(temperatureTempSum/t.Length));
T tt=new T();
foreach(Object ttt in minTAL)
...{
tt=(T)ttt;
Console.WriteLine("Min temperature is "+tt.MinT+" Year "+tt.Year);
}
tt=null;
foreach(Object ttt in maxTAL)
...{
tt=(T)ttt;
Console.WriteLine("Max temperature is "+tt.MaxT+" Year "+tt.Year);
}
Console.Read();
}
}
//定义年气温对象T----Temperature
public class T
...{
public string Year;
public double AT;
public double MinT;
public double MaxT;
public T()...{}
public T(string year,double at,double mint,double maxt)
...{
this.Year=year;
this.MaxT=maxt;
this.MinT=mint;
this.AT=at;
}
}
}
另就具体的语言会有不同的问题,如C#中委托概念关实现,相关线程示例,Remoting简单输出Hello world等等。
还有一点,C#有不少公司会叫你定义一个对象:比如Person、或Customer等等,其中有一方法是ToString(),小心,这是要override,别忘记了,好多人就因为这而中招,导致错误。
第二点:操作系统问题。
这样的问题在网上比较多。大家可以看看。但比较多公司基本都有如下问题:
线程概念,进程概念,进程与线程关系,死锁(Deadlock)概念,死锁产生的原因,死锁怎样避免。这些东西主要是台湾、香港的公司可能名称叫法不太一样,一般都会给出英文单词,美资或其他国家投资的公司基本都用英文。所以大家别怕这样的问题。看看操作系统就OK了。
第三点:数据库问题。
数据库的问题注意两点,我想就差不多了。
A:SQL语句问题,这样的问题多种多样,基本都会有GROUP BY语句,一定要会GROUP BY。形式基本就是给出一些表,然后写出SQL语句或输出结果(特别记住:时间有限输出的结果很简单。两种方式:一条记录或一个值。如果你输出结果一般超过二条记录,可以说绝大部分是错误的)。
Oracle P/L SQL语句,SQL Server Transact SQL语句。注意:有些比较BT的公司会让你一个问题用两种方式写出来,两种SQL语句有点不太一样,大家注意点。如果你不懂的别自以为是,写出来了错的,人家说你没水平,导致面试失败。不懂就说我不懂。但大部分都一样。
B:概念问题(大部分公司都有如下两个问题)。
事务(Transaction,台湾和香港不叫事务,叫什么本人忘记了,其他国家的用英文Transaction)。概念及几大特性。
范式(一、二、三)都得给我搞懂了。
第四点:网络问题。这种问题,一般都有两种情况
A、画一图,问你看看哪个点必须。
B、配置IP或求出最多能用多少台机,
以上这两个问题特别多。
第五点:图表问题。不外乎几种:程序流程图,系统业务流程图,还有UML图等。
A、程序流程图:基本会给出一个小问题,然后用语言描述出来(考语言理解能力),用图描述出来(理解并说明能力),用伪代码描述出来(理解并说明能力)。
B、系统业务流程图:老实说这种问题比较难举例,但部分公司会叫画ERP系统流程图。这东西比较麻烦,为什么?因为每家公司ERP系统流程图都不太一样,所以我建议是画自已以前做过的或看过的。这样简单,书上的基本大部分功能很全的不要全记,记住关键的几大块我个人觉得比较合适。比如PO(采购),SO(销售),IC(库存),Cost(成本),AP(应付),AR(应收),FA(固定资产),HR(人力资源),MRP(MRP模块),BOM(物料清单),Plan(计划)等等,这些主要的基本体现在上面,箭头方向千万不能错,否则人家说你不了解。搞定这些我想就行了,其实没有几家公司面试人会很注意这个问题,最主要是看你的关键地点有没有错。箭头方向有没有错。
C、UML图问题,基本都是面谈。问一下用过哪些Design工具:如比较多的IBM Rational Rose,Microsoft Visio,Sybase Power Design等。就这些。介绍一下就OK了。
除上面几点外,会增加一些软件工程方面的问题。比如,软件开发的流程,测试中什么白盒测试等等,软件生命周期,维护方面的问题,看一下软件工程方面的书,记住多少谈多少,不会有人太在意。记住一点:招你的人要的是能干活,不是要吹的,所以注意前面的比较实际的,面试人就已经很满意了。
总之,面试职位越高,题就越难,量上基本差不多两个小时做的时间,再多的时间可能不会让你做。想做满分,基本不可能(一般原则:如果能做满分的人多,说明出题人没水平,做不及格的人多,说明出题人是做理论的,不是做实际工作的。结果:及格以上就OK了,个人80分以上算不错的高手。还有招聘还有很多人为的因素。比如ERP流程图,各家的都不一样,不可能给到你满分,只要关键的给出来算你这图合格)。
老实说,如果你真的能做到满分,除非你面试很高的职位,否则。基本不会要你,因为你会威胁到面试人的地位。如果你的上司是香港或台湾,或者外国的,那可能问题不大,如果不是,是大陆的,应该你不是考虑的范围。如果是老总亲自招,那你进去一定着你上司排挤(老总除外)。
还有一些其他的问题:比如说你应聘的职位要与你的面试能力而定,不能超出你的职位,否则你进不去。比如说因为某种原因你离职,经前是做主管或经理的,面试程序员,那你就在面试时只做好程序员的部分就对了,一般有分析的部分,做到还差不多看得过去。这样你进去的机会比较多。否则进不了(原因你进去会威胁到你上司,国内人做上司经常这样,不只一家公司,是绝大多数公司都这样)。
经验总结,切记!切记!