http://blog.csdn.net/xdx2ct1314/article/details/7358929
1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)
#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL
我在这想看到几件事情:
1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)
2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。
3). 意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。
4). 如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。记住,第一印象很重要。
2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。
#define MIN(A,B) ((A) <= (B) (A) : ))
这个测试是为下面的目的而设的:
1). 标识#define在宏中应用的基本知识。这是很重要的,因为直到嵌入(inline)操作符变为标准C的一部分,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。
2). 三重条件操作符的知识。这个操作符存在C语言中的原因是它使得编译器能产生比if-then-else更优化的代码,了解这个用法是很重要的。
3). 懂得在宏中小心地把参数用括号括起来
4). 我也用这个问题开始讨论宏的副作用,例如:当你写下面的代码时会发生什么事?
least = MIN(*p++, b);
3. 预处理器标识#error的目的是什么?
如果你不知道答案,请看参考文献1。这问题对区分一个正常的伙计和一个书呆子是很有用的。只有书呆子才会读C语言课本的附录去找出象这种
问题的答案。当然如果你不是在找一个书呆子,那么应试者最好希望自己不要知道答案。
死循环(Infinite loops)
4. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?
这个问题用几个解决方案。我首选的方案是:
while(1) { }
一些程序员更喜欢如下方案:
for(;;) { }
这个实现方式让我为难,因为这个语法没有确切表达到底怎么回事。如果一个应试者给出这个作为方案,我将用这个作为一个机会去探究他们这样做的
基本原理。如果他们的基本答案是:“我被教着这样做,但从没有想到过为什么。”这会给我留下一个坏印象。
第三个方案是用 goto
Loop:
...
goto Loop;
应试者如给出上面的方案,这说明或者他是一个汇编语言程序员(这也许是好事)或者他是一个想进入新领域的BASIC/FORTRAN程序员。
数据声明(Data declarations)
5. 用变量a给出下面的定义
a) 一个整型数(An integer)
b) 一个指向整型数的指针(A pointer to an integer)
c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an integer)
d) 一个有10个整型数的数组(An array of 10 integers)
e) 一个有10个指针的数组,该指针是指向一个整型数的(An array of 10 pointers to integers)
f) 一个指向有10个整型数数组的指针(A pointer to an array of 10 integers)
g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and returns an integer)
h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers to functions that take an integer argument and return an integer )
答案是:
a) int a; // An integer
b) int *a; // A pointer to an integer
c) int **a; // A pointer to a pointer to an integer
d) int a[10]; // An array of 10 integers
e) int *a[10]; // An array of 10 pointers to integers
f) int (*a)[10]; // A pointer to an array of 10 integers
g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer
h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer
人们经常声称这里有几个问题是那种要翻一下书才能回答的问题,我同意这种说法。当我写这篇文章时,为了确定语法的正确性,我的确查了一下书。
但是当我被面试的时候,我期望被问到这个问题(或者相近的问题)。因为在被面试的这段时间里,我确定我知道这个问题的答案。应试者如果不知道
所有的答案(或至少大部分答案),那么也就没有为这次面试做准备,如果该面试者没有为这次面试做准备,那么他又能为什么出准备呢?
Static
6. 关键字static的作用是什么?
这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用:
1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。
大多数应试者能正确回答第一部分,一部分能正确回答第二部分,同是很少的人能懂得第三部分。这是一个应试者的严重的缺点,因为他显然不懂得本地化数据和代码范围的好处和重要性。
Const
7.关键字const是什么含意?
我只要一听到被面试者说:“const意味着常数”,我就知道我正在和一个业余者打交道。去年Dan Saks已经在他的文章里完全概括了const的所有用法,因此ESP(译者:Embedded Systems Programming)的每一位读者应该非常熟悉const能做什么和不能做什么.
如果你从没有读到那篇文章,只要能说出const意味着“只读”就可以了。尽管这个答案不是完全的答案,但我接受它作为一个正确的答案。(如果你想知道更详细的答案,仔细读一下Saks的文章吧。)如果应试者能正确回答这个问题,我将问他一个附加的问题:下面的声明都是什么意思?
const int a;
int const a;
const int *a;
int * const a;
int const * a const;
前两个的作用是一样,a是一个常整型数。第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。如果应试者能正确回答这些问题,那么他就给我留下了一个好印象。顺带提一句,也许你可能会问,即使不用关键字 const,也还是能很容易写出功能正确的程序,那么我为什么还要如此看重关键字const呢?我也如下的几下理由:
1). 关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。如果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息。(当然,懂得用const的程序员很少会留下的垃圾让别人来清理的。)
2). 通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。
3). 合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现。
Volatile
8. 关键字volatile有什么含意 并给出三个不同的例子。
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:
1). 并行设备的硬件寄存器(如:状态寄存器)
2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)
3). 多线程应用中被几个任务共享的变量
回答不出这个问题的人是不会被雇佣的。我认为这是区分C程序员和嵌入式系统程序员的最基本的问题。嵌入式系统程序员经常同硬件、中断、RTOS等等打交道,所用这些都要求volatile变量。不懂得volatile内容将会带来灾难。
假设被面试者正确地回答了这是问题(嗯,怀疑这否会是这样),我将稍微深究一下,看一下这家伙是不是直正懂得volatile完全的重要性。
1). 一个参数既可以是const还可以是volatile吗?解释为什么。
2). 一个指针可以是volatile 吗?解释为什么。
3). 下面的函数有什么错误:
int square(volatile int *ptr)
{ return *ptr * *ptr;
} 下面是答案:
1). 是的。一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。
2). 是的。尽管这并不很常见。一个例子是当一个中服务子程序修该一个指向一个buffer的指针时。
3). 这段代码的有个恶作剧。这段代码的目的是用来返指针*ptr指向值的平方,但是,由于*ptr指向一个volatile型参数,编译器将产生类似下面的代码:
int square(volatile int *ptr)
{ int a,b;
a = *ptr;
b = *ptr;
return a * b;
} 由于*ptr的值可能被意想不到地该变,因此a和b可能是不同的。结果,这段代码可能返不是你所期望的平方值!正确的代码如下:
long square(volatile int *ptr)
{ int a;
a = *ptr;
return a * a;
}
位操作(Bit manipulation)
9. 嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a 的bit 3。在以上两个操作中,要保持其它位不变。
对这个问题有三种基本的反应
1). 不知道如何下手。该被面者从没做过任何嵌入式系统的工作。
2). 用bit fields。Bit fields是被扔到C语言死角的东西,它保证你的代码在不同编译器之间是不可移植的,同时也保证了的你的代码是不可重用的。我最近不幸看到 Infineon为其较复杂的通信芯片写的驱动程序,它用到了bit fields因此完全对我无用,因为我的编译器用其它的方式来实现bit fields的。从道德讲:永远不要让一个非嵌入式的家伙粘实际硬件的边。
3). 用 #defines 和 bit masks 操作。这是一个有极高可移植性的方法,是应该被用到的方法。最佳的解决方案如下:
#define BIT3 (0x1<<3)
static int a;
void set_bit3(void)
{ a |= BIT3;
} void clear_bit3(void)
{ a &= ~BIT3;
} 一些人喜欢为设置和清除值而定义一个掩码同时定义一些说明常数,这也是可以接受的。我希望看到几个要点:说明常数、|=和&=~操作。
10. 嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。在某工程中,要求设置一绝对地址为0x67a9的整型变量的值为0xaa66。编译器是一个纯粹的ANSI编译器。写代码去完成这一任务。
这一问题测试你是否知道为了访问一绝对地址把一个整型数强制转换(typecast)为一指针是合法的。这一问题的实现方式随着个人风格不同而不同。典型的类似代码如下:
int *ptr;
ptr = (int *)0x67a9;
*ptr = 0xaa55;
一个较晦涩的方法是:
*(int * const)(0x67a9) = 0xaa55;
即使你的品味更接近第二种方案,但我建议你在面试时使用第一种方案。
中断(Interrupts)
11. 中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展—让标准C支持中断。具代表事实是,产生了一个新的关键字 __interrupt。下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR),请评论一下这段代码的。
__interrupt double compute_area (double radius)
{ double area = PI * radius * radius;
printf(" Area = %f", area);
return area;
}
这个函数有太多的错误了,以至让人不知从何说起了:
1). ISR 不能返回一个值。如果你不懂这个,那么你不会被雇用的。
2). ISR 不能传递参数。如果你没有看到这一点,你被雇用的机会等同第一项。
3). 在许多的处理器/编译器中,浮点一般都是不可重入的。有些处理器/编译器需要让额处的寄存器入栈,有些处理器/编译器就是不允许在ISR中做浮点运算。此外,ISR应该是短而有效率的,在ISR中做浮点运算是不明智的。
4). 与第三点一脉相承,printf()经常有重入和性能上的问题。如果你丢掉了第三和第四点,我不会太为难你的。不用说,如果你能得到后两点,那么你的被雇用前景越来越光明了。
代码例子(Code examples)
12 . 下面的代码输出是什么,为什么?
void foo(void)
{ unsigned int a = 6;
int b = -20;
(a+b > 6) puts("> 6") : puts("<= 6");
}
这个问题测试你是否懂得C语言中的整数自动转换原则,我发现有些开发者懂得极少这些东西。不管如何,这无符号整型问题的答案是输出是“>6”。原因是当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。因此-20变成了一个非常大的正整数,所以该表达式计算出的结果大于6。这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。如果你答错了这个问题,你也就到了得不到这份工作的边缘。
13. 评价下面的代码片断:
unsigned int zero = 0;
unsigned int compzero = 0xFFFF;
/*1's complement of zero */
对于一个int型不是16位的处理器为说,上面的代码是不正确的。应编写如下:
unsigned int compzero = ~0;
这一问题真正能揭露出应试者是否懂得处理器字长的重要性。在我的经验里,好的嵌入式程序员非常准确地明白硬件的细节和它的局限,然而PC机程序往往把硬件作为一个无法避免的烦恼。
到了这个阶段,应试者或者完全垂头丧气了或者信心满满志在必得。如果显然应试者不是很好,那么这个测试就在这里结束了。但如果显然应试者做得不错,那么我就扔出下面的追加问题,这些问题是比较难的,我想仅仅非常优秀的应试者能做得不错。提出这些问题,我希望更多看到应试者应付问题的方法,而不是答案。不管如何,你就当是这个娱乐吧…
动态内存分配(Dynamic memory allocation)
14. 尽管不像非嵌入式计算机那么常见,嵌入式系统还是有从堆(heap)中动态分配内存的过程的。那么嵌入式系统中,动态分配内存可能发生的问题是什么?
这里,我期望应试者能提到内存碎片,碎片收集的问题,变量的持行时间等等。这个主题已经在ESP杂志中被广泛地讨论过了(主要是 P.J. Plauger, 他的解释远远超过我这里能提到的任何解释),所有回过头看一下这些杂志吧!让应试者进入一种虚假的安全感觉后,我拿出这么一个小节目:下面的代码片段的输出是什么,为什么?
char *ptr;
if ((ptr = (char *)malloc(0)) == NULL)
puts("Got a null pointer");
else
puts("Got a valid pointer");
这是一个有趣的问题。最近在我的一个同事不经意把0值传给了函数malloc,得到了一个合法的指针之后,我才想到这个问题。这就是上面的代码,该代码的输出是“Got a valid pointer”。我用这个来开始讨论这样的一问题,看看被面试者是否想到库例程这样做是正确。得到正确的答案固然重要,但解决问题的方法和你做决定的基本原理更重要些。
Typedef
15. Typedef 在C语言中频繁用以声明一个已经存在的数据类型的同义字。也可以用预处理器做类似的事。例如,思考一下下面的例子:
#define dPS struct s *
typedef struct s * tPS;
以上两种情况的意图都是要定义dPS 和 tPS 作为一个指向结构s指针。哪种方法更好呢?(如果有的话)为什么?
这是一个非常微妙的问题,任何人答对这个问题(正当的原因)是应当被恭喜的。答案是:typedef更好。思考下面的例子:
dPS p1,p2;
tPS p3,p4;
第一个扩展为
struct s * p1, p2;
上面的代码定义p1为一个指向结构的指,p2为一个实际的结构,这也许不是你想要的。第二个例子正确地定义了p3 和p4 两个指针。
晦涩的语法
16. C语言同意一些令人震惊的结构,下面的结构是合法的吗,如果是它做些什么?
int a = 5, b = 7, c;
c = a+++b;
这个问题将做为这个测验的一个愉快的结尾。不管你相不相信,上面的例子是完全合乎语法的。问题是编译器如何处理它?水平不高的编译作者实际上会争论这个问题,根据最处理原则,编译器应当能处理尽可能所有合法的用法。因此,上面的代码被处理成:
c = a++ + b;
因此, 这段代码持行后a = 6, b = 7, c = 12。
如果你知道答案,或猜出正确答案,做得好。如果你不知道答案,我也不把这个当作问题。我发现这个问题的最大好处是:这是一个关于代码编写风格,代码的可读性,代码的可修改性的好的话题
What will print out?
main()
{ char *p1=“name”;
char *p2;
p2=(char*)malloc(20);
memset (p2, 0, 20);
while(*p2++ = *p1++);
printf(“%sn”,p2);
}
Answer:empty string.
What will be printed as the result of the operation below:
main()
{ int x="20",y=35;
x=y++ + x++;
y= ++y + ++x;
printf(“%d%dn”,x,y);
}
Answer : 5794
What will be printed as the result of the operation below:
main()
{ int x="5";
printf(“%d,%d,%dn”,x,x< <2,x>>2);
}
Answer: 5,20,1
What will be printed as the result of the operation below:
#define swap(a,b) a="a"+b;b=a-b;a=a-b;
void main()
{ int x="5", y="10";
swap (x,y);
printf(“%d %dn”,x,y);
swap2(x,y);
printf(“%d %dn”,x,y);
}
int swap2(int a, int b)
{ int temp;
temp=a;
b=a;
a=temp;
return 0;
}
Answer: 10, 5
10, 5
What will be printed as the result of the operation below:
main()
{ char *ptr = ” Cisco Systems”;
*ptr++; printf(“%sn”,ptr);
ptr++;
printf(“%sn”,ptr);
}
Answer:Cisco Systems
isco systems
What will be printed as the result of the operation below:
main()
{ char s1[]=“Cisco”;
char s2[]= “systems”;
printf(“%s”,s1);
} Answer: Cisco
What will be printed as the result of the operation below:
main()
{ char *p1;
char *p2;
p1=(char *)malloc(25);
p2=(char *)malloc(25);
strcpy(p1,”Cisco”);
strcpy(p2,“systems”);
strcat(p1,p2);
printf(“%s”,p1);
}
Answer: Ciscosystems
The following variable is available in file1.c, who can access it?:
static int average;
Answer: all the functions in the file1.c can access the variable.
WHat will be the result of the following code?
#define TRUE 0 // some code
while(TRUE)
{
// some code
}
Answer: This will not go into the loop as TRUE is defined as 0.
What will be printed as the result of the operation below:
int x;
int modifyvalue()
{ return(x+=10);
} int changevalue(int x)
{ return(x+=1);
}
void main()
{ int x="10";
x++;
changevalue(x);
x++;
modifyvalue();
printf("First output:%dn",x);
x++;
changevalue(x);
printf("Second output:%dn",x);
modifyvalue();
printf("Third output:%dn",x);
}
Answer: 12 , 13 , 13
What will be printed as the result of the operation below:
main()
{ int x="10", y="15";
x = x++;
y = ++y;
printf(“%d %dn”,x,y);
}
Answer: 11, 16
What will be printed as the result of the operation below:
main()
{ int a="0";
if(a==0)
printf(“Cisco Systemsn”);
printf(“Cisco Systemsn”);
}
Answer: Two lines with “Cisco Systems” will be printed.
再次更新C++相关题集
1. 以下三条输出语句分别输出什么?[C易]
char str1[] = "abc";
char str2[] = "abc";
const char str3[] = "abc";
const char str4[] = "abc";
const char* str5 = "abc";
const char* str6 = "abc";
cout << boolalpha << ( str1==str2 ) << endl; // 输出什么?
cout << boolalpha << ( str3==str4 ) << endl; // 输出什么?
cout << boolalpha << ( str5==str6 ) << endl; // 输出什么?
13. 非C++内建型别 A 和 B,在哪几种情况下B能隐式转化为A?[C++中等]
答:
a. class B : public A { ……} // B公有继承自A,可以是间接继承的
b. class B { operator A( ); } // B实现了隐式转化为A的转化
c. class A { A( const B& ); } // A实现了non-explicit的参数为B(可以有其他带默认值的参数)构造函数
d. A& operator= ( const A& ); // 赋值操作,虽不是正宗的隐式类型转换,但也可以勉强算一个
12. 以下代码中的两个sizeof用法有问题吗?[C易]
void UpperCase( char str[] ) // 将 str 中的小写字母转换成大写字母
{ for( size_t i="0"; i<sizeof(str)/sizeof(str[0]); ++i )
if( 'a'<=str[i] && str[i]<='z' )
str[i] -= ('a'-'A' );
} char str[] = "aBcDe";
cout << "str字符长度为: " << sizeof(str)/sizeof(str[0]) << endl;
UpperCase( str );
cout << str << endl;
7. 以下代码有什么问题?[C难]
void char2Hex( char c ) // 将字符以16进制表示
{ char ch = c/0x10 + '0'; if( ch > '9' ) ch += ('A'-'9'-1);
char cl = c%0x10 + '0'; if( cl > '9' ) cl += ('A'-'9'-1);
cout << ch << cl << ' ';
} char str[] = "I love 中国";
for( size_t i="0"; i<strlen(str); ++i )
char2Hex( str[i] );
cout << endl;
4. 以下代码有什么问题?[C++易]
struct Test
{ Test( int ) {}
Test() {}
void fun() {}
};
void main( void )
{ Test a(1);
a.fun();
Test b();
b.fun();
}
5. 以下代码有什么问题?[C++易]
cout << (true?1:"1") << endl;
8. 以下代码能够编译通过吗,为什么?[C++易]
unsigned int const size1 = 2;
char str1[ size1 ];
unsigned int temp = 0;
cin >> temp;
unsigned int const size2 = temp;
char str2[ size2 ];
9. 以下代码中的输出语句输出0吗,为什么?[C++易]
struct CLS
{ int m_i;
CLS( int i ) : m_i(i) {}
CLS()
{ CLS(0);
} };
CLS obj;
cout << obj.m_i << endl;
10. C++中的空类,默认产生哪些类成员函数?[C++易]
答:
class Empty
{ public:
Empty(); // 缺省构造函数
Empty( const Empty& ); // 拷贝构造函数
~Empty(); // 析构函数
Empty& operator=( const Empty& ); // 赋值运算符
Empty* operator&(); // 取址运算符
const Empty* operator&() const; // 取址运算符 const
};
3. 以下两条输出语句分别输出什么?[C++难]
float a = 1.0f;
cout << (int)a << endl;
cout << (int&)a << endl;
cout << boolalpha << ( (int)a == (int&)a ) << endl; // 输出什么?
float b = 0.0f;
cout << (int)b << endl;
cout << (int&)b << endl;
cout << boolalpha << ( (int)b == (int&)b ) << endl; // 输出什么?
2. 以下反向遍历array数组的方法有什么错误?[STL易]
vector array;
array.push_back( 1 );
array.push_back( 2 );
array.push_back( 3 );
for( vector::size_type i="array".size()-1; i>=0; --i ) // 反向遍历array数组
{ cout << array[i] << endl;
}
6. 以下代码有什么问题?[STL易]
typedef vector IntArray;
IntArray array;
array.push_back( 1 );
array.push_back( 2 );
array.push_back( 2 );
array.push_back( 3 );
// 删除array数组中所有的2
for( IntArray::iterator itor="array".begin(); itor!=array.end(); ++itor )
{ if( 2 == *itor ) array.erase( itor );
}
11. 写一个函数,完成内存之间的拷贝。[考虑问题是否全面]
答:
void* mymemcpy( void *dest, const void *src, size_t count )
{
char* pdest = static_cast<char*>( dest );
const char* psrc = static_cast<const char*>( src );
if( pdest>psrc && pdest<psrc+cout ) 能考虑到这种情况就行了
{
for( size_t i="count-1"; i!=-1; --i )
pdest[i] = psrc[i];
}
else
{
for( size_t i="0"; i<count; ++i )
pdest[i] = psrc[i];
}
return dest;
}
int main( void )
{
char str[] = "0123456789";
mymemcpy( str+1, str+0, 9 );
cout << str << endl;
system( "Pause" );
return 0;
}
系统分类: | 资源共享 |
用户分类: | 电子企业面试专题 |
标签: | 无标签 |
来源: | 转贴 |
系统分类: | 自由话题 |
用户分类: | 电子企业面试专题 |
标签: | 诺基亚面试题目 |
来源: | 转贴 |
系统分类: | 自由话题 |
用户分类: | 电子企业面试专题 |
标签: | 面试 |
来源: | 转贴 |
面试威盛--2002年1月29号 By totty 声明:以下的所有言论仅仅基于个人经历,本人尽力记录真实发生的一切,但可能因记 忆不准确会和真实情况有所差别,对此,作者并不负责。另外,本人的经历可能并不具 有代表性,请切记。未经作者同意不许转载,否则所引起的一切后果自负。 -- 威盛电子(www.viatech.com)是一家台湾的微电子企业。昨天下午接到一个电话,电话 里有一个甜甜的声音说是看到我网上的简历了,希望我去面试一下。既然面试,那就面 试吧,没什么大不了的,正好也有其它事情要到上地去一趟,于是就开始了下午的这个 故事: -- 预约的时间本来是下午1点,但据说是因为上午出车祸了,而且正好是修路,所以从中关 村到上地的那条路一直堵着,走走停停,到上地七街都已是12:50了。又因为不晓得得实 大厦到底是在马路的哪边,在路口转了一个圈,问了一个骑三轮车的大哥才找到那栋楼 的后门。外面的阳光很好,但风非常大,吹得人很不爽,绕着楼走了一圈,才找到正门 。 -- 到了via的门口,前台小姐让我先填一张表,虽然仅仅是一页纸,但这表也可谓是中西合 壁了,既有“你妈贵姓?”的问题,也有“请提供你的推荐人”之类的东东。偶大致将 就着填了,也跳过若干无关问题。把表再交回给前台小姐后,偶傻傻的在那个小黑房子 里面坐了十几分钟。然后就开始了今天的面试。 -- (房子外远远的走来一位先生,渐渐的看清是直奔偶过来的。偶起身,拉开门。) 偶(以下简称为o):你好。 奈(以下简称为n):你好。你是...XXX?(坐下) o:是的。(也坐下) ......(n简要的问了些教育背景,经历啦什么的,o也简要回答了些,略去) n:我看到你预定的论文题目是《******》,能不能介绍一下你在这方面的工作? o:好的。(画了很多图,大概说明了一下做的东西,但n先生可能不是很明白,我后来 才知道,因为这都是模拟电路设计方面的,呵呵)。 ... n:你提到采样速率是信号带宽的两倍就一定能够还原这个信号,能不能证明一下? o:(//faint,so easy)当然可以,这是信号与系统的基本常识了。画图就可以很明显的 看出了(画图证明之)。 ... n:在你的设计中,应该遇到很多trade-off,ok?你能不能介绍一下你碰见了哪些trad e-off以及你是如何解决的呢? o:当然有了,(//Thinking),首先这整个design的architecture就是一个大的trade -off的结果,然后设计中许多电路结构的选择也是tradeoff的结果。(解释如何的trad e-off) ... n:ok,你在这张表上的应聘职位没有填写,你大概希望从事什么方向的工作? o:哦,是这样的,我是昨天下午接到您公司人事部门的面试通知的。他们是通过51job 网站得到我的简历,因此我现在还不知道贵公司希望我从事的方向。 n:我主要是负责logic design方面的,我们主要是招聘logic design engineer。ok, 我想知道你的working expectation。 o:(//ft again,早说啊,早说我不就和你侃logic design了么?呵呵)在我pub的简历 上提到的工作预期...预.期.(ok?)是模拟电路ananlog circuit design Engineer和数字 design方面的project manager. n:(//吃惊)project manager? no,no,我们这里现在没有project manager的职位。 我们现在需要的是logic design engineer。 o:哦。 n:(//smile)当然,我很高兴你有这个ambition希望做project manager。但我们这里的 工作也是不可能提供project manager的职位的,因为我们这里的project需要的知识在 学校里面是完全学习不到的。就是我们刚招聘进来的XXX Dr.在XX大学工作了n年,也是 从头坐起,每个人的起点都是一样的。 o:(//失望),哦。但也未必吧,学校和学校是不一样的(反击)。在数字设计方面我也 做过几个不大的项目,对于这方面,偶也是很熟悉的。 n:那么你对logic design engineer的职位还有兴趣吗? o:(//Thinking)我觉得这也是一种选择,如果合适,我想还是会接受这样的工作的。但 是我希望能够详细了解一下你们的project具体的内容,以及作为一个logic desing en gineer在具体的project中从事的任务。还有,我想知道在您公司里面,一个典型的pro ject是如何管理的,而作为一个design engineer在公司中,又是如何表现自己并成长的 呢?我想这些信息对我的决定也有所影响。 n:ok。我们的logic设计主要是XXX方面的,在这方面我们有三个小组,usa,tw,和北 京。 o:(//打断)对不起,我打断一下,我想问问您的logic设计小组一共有多少人,现在有 多少和计划最终有多少人? n:我们在beijing的team大概有20几人左右,我们到今年年底可能会扩到30~40人。因为 tw和usa的小组力量比较weak,也就是人比较少,所有有一些工作要beijing的eng和他们 一起完成。 o:明白了。那您在北京rd部门的员工主要是从事什么样的工作呢? n:我们的工作主要是(??一个什么bus吧,听得不是很清楚)的Application的设计。刚 进来的员工首先是需要read documentation和protocal,撰写??list。 o:??list? n:就是接口的规范,(例如接口的信号、时序等等接口规范)。阅读文档后需要写出硬 件的接口描述,这样,才能够进行整体的model。在一个project中,阅读doc和撰写??l ist后,eng就应该比较了解它们的了。然后就可以进行一些app的设计......(以下具体 不详,大致是介绍via的logic设计中的一个典型project流程)。我们的team一般在完成 一个project之前会有另外的project在(排队)的,所以会比较的tough。 o:(//smile)随便问问,你们project中的小组成员经常加班吗? n:我们logic小组的人都是很(niu)的人,在招聘员工上我们宁缺毋滥。我们的小组中既 会非常的cooperative,也会非常的competetive,有。在这样的小组中,我想你是可以 学到很多的东西的。可以学到很多在学校里接触不到的东西。 o:那当然,工作和学习是不一样的。我的工作经历也教会过了我很多事情。(提醒n先 生不要同一化偶)出于对个人发展的考虑,我当然也希望能够在一个地方学习很多的新 东西。 n:在我们这里logic design方面的工作不光需要有硬件设计的背景,也需要软体softw are的background。我们招了几个XX大学的CS的。你们学过Computer Arch吗? o:(//node),当然。我们还学过****(计算机方面的一些课程)。 n:那么熟悉内存管理吗? o:知道一些东西,因为在课程XXXX里面有很详细的说明。偶做过的课程设计里面包括了 一个os的进程管理、文件、内存和其他资源的一个简单系统。(其实早忘记了,多少年 前的课程了啊?呵呵) n:那么在内存分配方面有几中算法呢? o:应该有很多种,看不同的系统需要了,例如贪.心.算法,...... n:内存的fragment回收你知道吗?能不能介绍一下? o:当然,其实内存的gragment回收和磁盘disk的fragment recover是一样的,或者是类 似的。(想了一想windows的磁盘清理工具的运行图)内存的fragment recoverage就是 ...... n:ok,你做过数字方面的设计,可以具体的介绍一下吗? o:当然。偶做过XX,*万std_cell的一个设计,XX,*万std_cell的一个设计, 和*万std_ cell的一个设计。 n:你主要是负责什么呢? o:综合和综合后的后端流程和验证。 n:验证?你们是如何验证你的design的? o:后端设计主要就是时序验证啊,通过版图可以得到design的时间延迟信息。 n:sdf?你是用什么工具做的呢? o:(这也用问)我们使用的是XXX公司的XXX,XXX,XXX等软件。同时我也熟悉使用XXX.... .. n:时序验证是static timing analysis吗? o:当然了,我只能做到这一步,在不知道具体的设计描述的情况下,我只能通过这样验 证设计啊?我们用的是****Time进行时序分析...... n:那在你的设计中用了latch了没有? o:考虑使用latch过,在我们后来的版本中,使用latch。但是在教科书中的建议是在设 计中尽量避免使用latch。 n:是的,但是不用latch是不可能实现高速的设计的。那么你知道time borrowing的概 念吗?能不能给我解释一下? o:(解释time borrowing......) n:ok,你还有什么问题要问我的吗? o:想了半天,没有。 n:那好。你给我的感觉是有点过于自信。(o nod)但是,我想我是会给你offer的。你 在这里等一会,一会人事经理会和你面谈的。 o:好的。 -- 以下和他们的hr经理(Wang XX)的谈话略去。总体感觉是不太好,个人以为via对大陆学 生还是有许多的偏见和歧视的。在他们的谈话中不会说出,但是可以感觉得到,我很不 喜欢这种隐隐流露出的歧视和偏见(或许也可能是因为我太敏感了吧?但我不喜欢,所以 我也不会接受)。这次面试的结局是今天收到了via的拒信,原因是他们的这种偏见有些 激怒了我,从而在我和他们的人事经理讨论问题时在一些地方产生争执并让双方感觉不 太爽。 -- 如果仅就面试而言,我后来和hr manager的很多言论和行为是多余和愚蠢的。但是我并 不认为这种错误是我的失败,呵呵,我觉得是他们的失败,我们得教教他们一些我们的 文化。当然,每次经历必然也会带来很多的经验的,我的经验如下: -- 结论: 1、对于via中我所了解的logic设计部门来讲,他们的设计方法和设计流程对于国内的很 多数字设计house来讲要正规很多。客观来说,在这里也是可以学习到一些设计方法和许 多pc/io的原理性知识的,但方向也的确是非常的狭窄。 2、via给出的薪酬水平是很低的,我所了解(wang xx说的)典型的80%的员工(硕士毕 业生)税前工资是7000,也就是说,税后工资是5300左右(以北京的税收政策为例)。 3、台湾公司对大陆员工有一些偏见(文化的偏见?很奇怪)包括薪水和职位的偏见(或 者是歧视)。在via这个非常典型的台湾公司中,表现得尤为明显,甚至可能有技术上的 歧视(作者猜测)。在面试中不论是和技术人员交谈还是和管理人员交谈,我都屡次感 觉到这种歧视和偏见的存在并试图反击,最后以失败告终,呵呵,但也很爽。 |
系统分类: | 自由话题 |
用户分类: | 电子企业面试专题 |
标签: | 面试 |
来源: | 转贴 |
呵呵,还有两家公司继续写。
两家公司一家是杰得微电子,另一家就是Intel了。
杰得微电子在上海,是一家刚成立的公司。
我想很多人都和我一样,目标城市排在第一的肯定是上海。
杰得是我捞到面试机会的第一家上海公司,所以也比较重视这个机会。
面试前打听了很多相关的情况,杰得的背景是夏新投资,由一个归国
博士办起来的。公司规模很小,只有24名员工,其中有12名来自清华。
公司主要是做多媒体,视频音频方面的ic。可能清华学生的推积效应
的原故,面试那天早上交大电信学院去了近20个人。
杰得的面试和笔试是在一个周五的早上,而且是同时进行的。
听公司作宣讲的人说,这样安排是为了节省时间。他们星期天还要赶回去
加班把损失的时间补回来。呵呵,好高效的公司,好紧张的节奏。
宣讲会上那个清华背景的软件部主管,大吹公司人员素质多高多高,
不过论据说来说去主要就是一个:因为他们是清华的。真是ft!
然后就是边笔试边面试,笔试题目倒是很简单,都是些数字电路的东西
面试的时候,也是一个清华的小伙。小伙倒是挺和蔼的。
刚开始也是从课题入手,感觉他对MCU懂得也不多,也问不出什么来,
基本都是我在讲。课题讲完了,就轮到他发问了,第一个问题是:
你知道什么是商编码吗?我答:没听说过;然后接着是mpeg2协议你了解多少?
我答:没接触过。那基于ARM核的嵌入式系统你知道多少?
这个我就知道ARM核是个risc结构,网上能够找到ARM7的源码,其他的我就不知道了。
呵呵,小伙笑:“arm7?人家arm9都早做出来了。”我晕。
最后的一个问题是:“你在软件方面有什么擅长的?开发过什么样的程序?”
我kao,我要软硬兼通,什么都会的话,我早去intel了,还跑你这来面个屁啊。
小伙最后意味深长的说:“我们公司的员工无论学硬件毕业的,还是软件毕业的,
都是两方面都很精通的。”
这次面试的结果是最烂的,不过我也真的很怀疑,真的有那样的员工会去杰得吗?
这次面试基本也就打消了我去上海的希望。我发觉今年找工作和上海老是对不上路。
要么是像IPCORE,汉芯之流的根本就不给我面试机会,要么就是杰得这样牛逼哄哄,
根本瞧不上我的。
又过了几天Intel来了交大,25号下午和几个同学到宪梓堂听了一下午的宣讲会
并投了一份简历。当天晚上就收到电话说第二天早上去喜来登面试。
因为我投的是成都和上海的factory,不是研发中心,所以不需要笔试,直接面试。
面试前后就持续了半个小时,全英文的。面试官是一个中年人,口语连音很多,
好多都听不清楚。因为是英文面试,问题倒是挺简单的,无非就是问做过什么工作,
工作进展怎么样,是否是team leader,怎么处理人际关系。与其说是一次interview,
更不如说是一个conversation。气氛还是挺好的。
面试结束,说三个礼拜以后给结果,三个礼拜肯定是等不了的那,
而且在工厂做PE毕竟不是我的最爱。整个过程就权当是一次practice吧。
面试经历叙述到这里就该打住了。
总结一下,前前后后面试过7个公司,除去宁波立立电子不说,其余几个公司中
面试过程气氛最随和,但是思维最紧张的该算是瑞晟;
HR部门效率最高,态度最好,操作最规范的则是威盛;
笔试题最难的肯定是Intel(虽然我没做过,不过网上可以找得到);
呵呵,当然要求最高的也是Intel,不过杰得也差不了多少。
最后我选择的公司是瑞晟(苏州)。
前面有人问为什么不选择威盛,要选瑞晟?
这两家公司不同人有不同看问题的角度。从我自己的角度看,
瑞晟最吸引我的地方是公司的培训,还有发展方向也很好,
公司工作重心以后主要会放在视频方面,这也该是当前最热门的
方向之一了吧。
威盛,公司比较大,管理比较规范。
但是北威给的offer里面提到logic的工作主要是做
verification和写testing vector。
当然还有一点:那就是待遇问题,瑞晟给的待遇应该是这些公司中最高的了。
呵呵,这点该也是很吸引人的地方了。
写了这么多,就是想给师弟师妹们稍稍引个路。
还是那句话,各人有自己看问题的角度,也难免会有偏颇。
所以更重要的体验还是需要自己在求职过程中自己领会。
系统分类: | 自由话题 |
用户分类: | 电子企业面试专题 |
标签: | 面试 |
来源: | 转贴 |
系统分类: | 自由话题 |
用户分类: | 电子企业面试专题 |
标签: | 面试技巧 |
来源: | 转贴 |
系统分类: | 自由话题 |
用户分类: | 电子企业面试专题 |
标签: | 面试技巧 |
来源: | 转贴 |
一、 通用面试例题分析
1. 在学校里你学习了哪些课程,成绩如何? 答:首先看看计算机专业的课程:系统原理、微机原理、汇编语言、网络基础、Visual Basic编程、SQL、HTML语言、高等数学……基本上以对计算机科学结构性、设计性的课程为主。然后是自动化专业,这张课表上少了汇编语言等系统基础的课程,增加了POWER BUILDER、NT Sever等网络方面的内容,毕竟现在的自动化与网络密不可分。而信息管理工程专业的课程就显然偏重应用的色彩。除VB、VC编程语言的课程外,Windows、Photoshop、Flash/Firework/Dreamweaver网页制作工具等课程也赫然在目。4b5ce2fe28©应届生求职网YingJieSheng.COM©261cbd5717 2. 想着手编写一个程序,在整个开发过程中,其中包含了大量细节,并推荐了许多步骤和文档,那么,时刻提醒自己注意的是什么问题?整个过程是什么? 答:时刻提醒自己注意的问题是: (1) 对象是什么?(怎样将自己的项目分割成一系列单独的组件?)5a880faf6f©应届生求职网YingJieSheng.COM©c350ade2a4 (2) 它们的接口是什么?(需要将什么消息发给每一个对象?) 整个过程可划分为四个阶段,阶段0刚刚开始采用某些形式的结构。 阶段0:拟出一个计划2e2d7fbdea©应届生求职网YingJieSheng.COM©63a9a786b6 第一步是决定在后面的过程中采取哪些步骤。 在这个阶段,可能要决定一些必要的附加处理结构。在整个过程中设置几个标志,或者“路标”,将更有益于你集中注意力。经过了一个接一个的路标以后,可对自己的进度有清晰的把握。 阶段1:要制作什么?6fe97759aa©应届生求职网YingJieSheng.COM©b922cfa312 在上一代程序设计中(即“过程化或程序化设计”),这个阶段称为“建立需求分析和系统规格”。应尽可能总结出自己系统的一套完整的“使用条件”或者“应用场合”。 阶段2:如何构建? 在这一阶段,必须拿出一套设计方案,并解释其中包含的各类对象在外观上是什么样子,以及相互间是如何沟通的。f062936a96©应届生求职网YingJieSheng.COM©86607aa54c 阶段3:开始创建 全面的思考、周密的准备、良好的构造不仅使程序更易构建与调试,也使其更易理解和维护,而那正是一套软件赢利的必要条件。 构建好系统,并令其运行起来后,必须进行实际检验,以前做的那些需求分析和系统规格便可派上用场了。全面地考察自己的程序,确定提出的所有要求均已满足。现在一切似乎都该结束了?5568161a8c©应届生求职网YingJieSheng.COM©d5792c152c 阶段4:校订 第一次做的东西并不完善,所以需为自己留下一个深入学习、认知的空间,再回过头去作一些改变”。对于要解决的问题,随着对它的学习和了解愈加深入,可能需要作出大量改动。进行这些工作的一个动力是随着不断的改革优化,终于能够从自己的努力中得到回报,无论这需要经历一个较短还是较长的时期,达到理想的状态。 3. 什么是UML?8e8850243b©应届生求职网YingJieSheng.COM©8aa0d594fc 答:是一种能够描述问题、描述解决方案、起沟通作用的语言。这就是UML。 UML(Unified Modeling Language 统一建模语言)是由Rational公司发明,目前由OMG(标准化对象管理机构)维护。作为一种建模语言,UML的定义包括UML语义和UML表示法两个部分: UML语义4005f8da13©应届生求职网YingJieSheng.COM©60d149af1f 描述基于UML的精确元模型定义。元模型为UML的所有元素在语法和语义上提供了简单、一致、通用的定义性说明,使开发者能在语义上取得一致,消除了因人而异的最佳表达方法所造成的影响。此外UML还支持对元模型的扩展定义。 UML表示法 定义UML符号的表示法,为开发者或开发工具使用这些图形符号和文本语法为系统建模提供了标准。这些图形符号和文字所表达的是应用级的模型,在语义上它是UML元模型的实例。标准建模语言UML的重要内容可以由下列五类图(共9种图形)来定义:用例图、静态图、行为图、交互图、实现图。e0327ad868©应届生求职网YingJieSheng.COM©e0bcd30097 从应用的角度看,当采用面向对象技术设计系统时,首先是描述需求;其次根据需求建立系统的静态模型,以构造系统的结构;第三步是描述系统的行为。其中在第一步与第二步中所建立的模型都是静态的,包括用例图、类图(包含包)、对象图、组件图和配置图等五个图形,是标准建模语言UML的静态建模机制。其中第三步中所建立的模型或者可以执行,或者表示执行时的时序状态或交互关系。它包括状态图、活动图、顺序图和合作图等四个图形,是标准建模语言UML的动态建模机制。因此,标准建模语言UML的主要内容也可以归纳为静态建模机制和动态建模机制两大类。 4. 什么是软件重用? 答:软件重用(Reuse)是软件工程中最重要的思想之一,只有软件重用,才能降低软件成本,提高软件的质量。你在对一个软件进行分析的时候,找出可以重用的对象,有助于你开发高效的软件系统。正如前面所说的,你不必把软件分析的过分细致,你只需从中找出关键性的、能够重用的对象就足够了。剩下的事情,就是对这些对象分配属性和方法,并充分的使用这些对象就好了。8f07f89ddb©应届生求职网YingJieSheng.COM©4c20a920bf 1) 编写项目视图和范围文档 系统的需求包括四个不同的层次:业务需求、用户需求和功能需求、非功能性需求。 2) 用户群分类cdcd5072bb©应届生求职网YingJieSheng.COM©036ebd0562 用户分成不同的用户类。与UML中Usecase的Actor概念一样,用户类不一定都指人,也可以包括其他应用系统、接口或者硬件,这样做使得与系统边界外的接口也成为系统需求。 3) 选择用户代表 4) 建立核心队伍ea6328a42e©应届生求职网YingJieSheng.COM©4c65f8a52f 5) 确定使用实例 6) 召开联合会议 7) 分析用户工作流程f4c10bf22a©应届生求职网YingJieSheng.COM©652dd80fca 8) 确定质量属性 9) 检查问题报告 10) 需求重用3f027327d8©应届生求职网YingJieSheng.COM©e85d8ecacd 5. 谈谈CMMI的起源 答:随着人们对CMM研究的不断深入,其他学科也结合本系统的特点,陆续推出了自己的CMM模型。例如,人力资源能力成熟度模型、系统工程能力成熟度模型等等: (1) SW-CMM (Software CMM) 软件CMM7260ae62e3©应届生求职网YingJieSheng.COM©6292a10b0e (2) SE-CMM (System Engineering CMM) 系统工程CMM (3) SA-CMM (Software Acquisition CMM) 软件采购CMM (4) IPT-CMM (Integrated Product Team CMM) 集成产品群组CMMb794217348©应届生求职网YingJieSheng.COM©92ff12784d (5) P-CMM (People CMM) 人力资源能力成熟度模型 为了以示区别,国内外很多资料把CMM叫做SW-CMM。 6. ERP是个什么概念?778dfaecdc©应届生求职网YingJieSheng.COM©dbe242ca3b 答:本世纪90年代初,美国著名的IT分析公司Gartner Group Inc根据当时计算机信息处理技术IT(Information Technology)的发展和企业对供应链管理的需要,对信息时代以后制造业管理信息系统的发展趋势和即将发生的变革作了预测,提出了企业资源计划ERP(Enterprise Resources Planning)这个概念。
7. ERP系统与MRP-Ⅱ的区别是什么?
答:ERP是在MRP-Ⅱ基础上进一步发展起来的企业管理信息系统,为了进一步理解ERP系统的概念及其主要功能,需要弄清ERP与MRP-Ⅱ之间的区别。 e76fc52277©应届生求职网YingJieSheng.COM©2555b7c98f 1) 在资源管理范围方面的差别 MRP-Ⅱ主要侧重对企业内部人、财、物等资源的管理,ERP系统提出了供应链(Supply Chain)的概念,即把客户需求和企业内部的制造活动以及供应商的制造资源整合在一起,并对供应链上的所有环节进行有效管理,这些五一节包括订单、采购、库存、计划、生产制造、质量控制、运输、分销、服务与维护、财务管理、人事管理、实验室管理、项目管理、配方管理等。 2) 在生产方式管理方面的差别 754ba1c09b©应届生求职网YingJieSheng.COM©2400da7143 MRP-Ⅱ系统把企业归类为几种典型的生产方式来进行管理,如重复制造、批量生产、按订单生产、按订单装配、按库存生产等,针对每一种类型都有一套管理标准。而在80年代末、90年代初期,企业为了紧跟市场的变化,多品种、小批量生产以及看板式生产成为企业主要采用的生产方式,而ERP则能很好地支持和管理这种混合型制造环境,满足了企业多元化经营需求。 3) 在管理功能方面的差别 ERP除了MRP-Ⅱ系统的制造、分销、财务管理功能外,还增加了支持整各个环节之间的运输管理和仓库管理;支持生产保障体系的质量管理、实验室管理、设备维修和备品备件管理;支持对工作流(业务处理流程)的管理。 a126b2f4b2©应届生求职网YingJieSheng.COM©3e5415eb55 4) 在事务处理控制方面的差别 MRP-Ⅱ是通过计划的及时滚动来控制整个生产过程,它的实时性较差,一般只有实现事中控制。而ERP系统支持在线分析处理OLAP(Online Analytical Processing)、售后服务及质量反馈,强调企业的事前控制能力,它可以将设计、制造、销售、运输等通过集成来并行地进行各种相关的作业,为企业提供了对质量、适应变化、客户满意、效绩等关键问题的实时分析能力。 此外,在MRP-Ⅱ中,财务系统只是一个信息的归结者,它的功能是将供、产、销中的数量信息转变为价值信息,是物流的价值反映。而ERP系统则将财务计划功能和价值控制功能集成到整个供应链上,如在生产计划系统中,除了保留原有的主生产计划、物料需求计划和能力计划外还扩展了销售执行计划SOP和利润计划。6e7929b125©应届生求职网YingJieSheng.COM©afddbe1c45 5) 在跨国(或地区)经营事务处理方面的差别 现代企业的发展,使得企业内部各个组织单元之间、企业与外部的业务单元之间的协调变得越来越多和越来越重要,ERP系统运用完善的组织架构,从而可以支持跨国经营的多国家地区、多工厂、多语种、多币制应用需求。 6) 在计算机信息处理技术方面的差别cbf4caaed3©应届生求职网YingJieSheng.COM©17fda73c03 随着IT技术的飞速发展,网络通信技术的应用,使得ERP系统的以实现对整个供应链信息进行集成管理。ERP系统应用客户/服务器(C/S)体系结构和分布式数据处理技术,支持Internet/Intranet/Extranet、电子商务(E-busincss,E-commerce)、电子数据交换EDI,此外,还能实现在不同平台上的互操作。我们就讨论了“路标”的概念,当你的第一个路标达成之后,剩下的应该都是属于校订的事了。通过和用户的交互,确定新的“路标”,不断的改进系统功能,优化系统结构,修正系统Bug。 通过使用WWF,你可以创建基于处理器流的工作流并且把它们部署在任何类型的.NET应用程序中。此外,本文还讨论了ASP.NET开发者面对的一些特有的问题-这些问题可能通过使用工作流得到解决,如维持状态和页面导航等。 8. WWF,Windows工作流基础是什么?14875e45bb©应届生求职网YingJieSheng.COM©57d84ec662 答:在2005年9月,微软在它的一年两次的专业开发者会议上公开了Windows Workflow Foundation(WWF,Windows工作流基础)。作为WinFX API的支柱之一,WWF提供给开发者一个普通框架-在其上开发过程驱动的和以工作流为中心的应用程序。 当前,有些组织力图把整个商业过程自动化;他们的标准答案就是集合一队开发者来开发相应的代码。尽管这种方式对于这些组织带来良好的作用,然而也有一些固有的问题。为了深入理解这一问题,你需要理解一个工作流的基本特征。 一个工作流本质是一种方法-用来归档包含在完成一个单元的工作中的活动。典型地,在处理过程中,工作"流"流过一项或更多活动。这些活动可以通过机器或人工来实现,并且有可能象在一个互联网应用程序定义页面顺序一样得简单,也有可能象管理必须为任何数目的人都要看到、更改并同意的文件或产品一样得复杂。976aab5298©应届生求职网YingJieSheng.COM©5ebbcd3a1b 因为如此多的工作流程必须考虑到人工参预,所以可能需要花费很长工期才能完成,时间可能为几小时到数月或更长。例如,参预在该过程中的人可能无法找到,不在本地或忙于另外的任务;因此,工作流必须在所有非活动期间能够把自身持续性存储。而且,通过编码独立实现的过程可能对非技术人员难于理解而对开发者却难于更改。这一点和其它一些因素正是例如Windows WF等通用工作流框架的目标-其目的就在于使创建、改变和管理工作流更容易-这是通过向它们提供一个可视化接口或通过定义一组普通API来实现的。 你可以把WWF工作流放置在任何类型的.NET应用程序中-包括Windows表单程序,控制台应用程序,Windows服务和ASP.NET Web应用程序。每种类型都需要专门的考虑。尽管一些现有示例已经足够说明如何把工作流宿主到Windows表单程序和控制台应用程序中,但是本文将集中于讨论ASP.NET开发者的问题-他们希望把工作流集成到自己的应用程序中。 Windows WF和MVC模式:在开发一个ASP.NET应用程序时,你可能使用WWF的一个普通的方法是实现一种模型-视图-控制器(MVC)方法。实质上,MVC的目标是把描述层、应用程序逻辑和应用程序流逻辑分离开来。44a3365a46©应届生求职网YingJieSheng.COM©13c8261511 搞清楚这个将十分有益于一个ASP.NET应用程序的开发,请考虑一个帮助桌面票工作流的场所。假定有一个商业用户通过填写一个ASP.NET Web表单并点击一个提交按钮来启动该工作流。接下来,服务器就会通知一个使用Windows表单应用程序和帮助桌面的雇员—“有新票可用了”。该帮助桌面雇员然后将在这一问题上工作,并在最后关闭该票。如果使用Windows WF来开发这个工作流情形,那么所有的处理逻辑和流程可以被包含在工作流本身,而该ASP.NET应用程序将完全不需要了解这一逻辑。 这种场所提供了一些稳固的证据-把描述与逻辑相分离是一件好事情。因为这个处理帮助桌面请求的过程是非常普通的,如果使用C#或VB.NET代码在若干不同的.NET应用程序中实现这一逻辑,那么你将会冒着重复编码的危险甚至更坏的情形--用完全不同的代码导致同样的商业处理过程的不同实现。但是如果你使用WWF来实现这一过程,那么需要这一过程的应用程序开发者将仅需在一处修改这些步骤-工作流本身-而不必担心这样会改变应用程序逻辑。代码复制和在哪里实现该过程可以通过Windows WF的使用来加以缓和。 当使用Windows WF在ASP.NET中实现MVC架构时,开发者应该尝试构建独立于应用程序的工作流-而该工作流仍然宿主于该应用程序中。这将有助于保持逻辑独立于描述并且保持在该Web应用程序中的工作步骤顺序和页面流之间的高度独立性。65e6e1edc0©应届生求职网YingJieSheng.COM©c241e73e84 一个WWF开发新手可能试图用一固定数目的活动以某种顺序去开发一个工作流,然后开发一组ASP.NET Web表单--这些表单以与之相同的顺序从一个表单流向另一个表单。很遗憾,尽管这看上去挺符合逻辑,但是实际上这是非常不具有生产效率的,因为你将会再次实现这个工作流逻辑。Web页面X不需要知道是否它需要转到页面Y或页面Z来正确地实现该工作流步骤。代之的是,该工作流(模型)应该告诉ASP.NET(控制器)下一步该干什么;然后ASP.NET应该决定要显示哪个页面。这样,每个页面几乎不需要了解整个过程;它仅需要知道怎样完成一个不同的活动并且让该工作流来关心页面是如何从一处流向另一处的。这种分离在开发者处理页面流时带来了一种极大的灵活性。例如,如果你决定改变该页面显示顺序,那么你可以从工作流中容易地实现这一点,而不需要改变该ASP.NET应用程序中的一行代码。 9. 陈述一下软件架构的概念 答:软件架构(software architecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。 软件架构是一个系统的草图。软件架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通讯。在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。在面向对象领域中,组件之间的连接通常用接口_(计算机科学)来实现。68b6edd301©应届生求职网YingJieSheng.COM©7473b74f32 软件体系结构是构建计算机软件实践的基础。与建筑师设定建筑项目的设计原则和目标,作为绘图员画图的基础一样,一个软件架构师或者系统架构师陈述软件构架以作为满足不同客户需求的实际系统设计方案的基础。 软件构架是一个容易理解的概念,多数工程师(尤其是经验不多的工程师)会从直觉上来认识它,但要给出精确的定义很困难。特别是,很难明确地区分设计和构架:构架属于设计的一方面,它集中于某些具体的特征。 在“软件构架简介”中,David GArlan 和 Mary Shaw 认为软件构架是有关如下问题的设计层次:“在计算的算法和数据结构之外,设计并确定系统整体结构成为了新的问题。结构问题包括总体组织结构和全局控制结构;通信、同步和数据访问的协议;设计元素的功能分配;物理分布;设计元素的组成;定标与性能;备选设计的选择。”[GS93]94728bc39a©应届生求职网YingJieSheng.COM©6dea6e2210 但构架不仅是结构;IEEE Working Group on Architecture 把其定义为“系统在其环境中的最高层概念”[IEEE98]。构架还包括“符合”系统完整性、经济约束条件、审美需求和样式。它并不仅注重对内部的考虑,而且还在系统的用户环境和开发环境中对系统进行整体考虑,即同时注重对外部的考虑。 在 Rational Unified ProcESs 中,软件系统的构架(在某一给定点)是指系统重要构件的组织或结构,这些重要构件通过接口与不断减小的构件与接口所组成的构件进行交互。 从和目的、主题、材料和结构的联系上来说,软件架构可以和建筑物的架构相比拟。一个软件架构师需要有广泛的软件理论知识和相应的经验来事实和管理软件产品的高级设计。软件架构师定义和设计软件的模块化,模块之间的交互,用户界面风格,对外接口方法,创新的设计特性,以及高层事物的对象操作、逻辑和流程。fc03eb9ded©应届生求职网YingJieSheng.COM©0b322dacbb 10. 软件系统的架构(ArchitECture)有两个要素是什么? 答: 1) 它是一个软件系统从整体到部分的最高层次的划分。c49eb8f757©应届生求职网YingJieSheng.COM©e6b7bd168a 一个系统通常是由元件组成的,而这些元件如何形成、相互之间如何发生作用,则是关于这个系统本身结构的重要信息。 详细地说,就是要包括架构元件(Architecture Component)、联结器(Connector)、任务流(TASk-flow)。所谓架构元素,也就是组成系统的核心"砖瓦",而联结器则描述这些元件之间通讯的路径、通讯的机制、通讯的预期结果,任务流则描述系统如何使用这些元件和联结器完成某一项需求。 2) 建造一个系统所作出的最高层次的、以后难以更改的,商业的和技术的决定。a57b0395e1©应届生求职网YingJieSheng.COM©ccaa938134 在建造一个系统之前会有很多的重要决定需要事先作出,而一旦系统开始进行详细设计甚至建造,这些决定就很难更改甚至无法更改。显然,这样的决定必定是有关系统设计成败的最重要决定,必须经过非常慎重的研究和考察。 卡内基梅隆大学和加州大学埃尔文分校在这个领域作了很多研究。卡内基·梅隆大学的Mary Shaw和David Garlan于1996年写了一本叫做 Software Architecture perspective on an emerging DIscipline的书,提出了软件架构中的很多概念,例如软件组件、连接器、风格等等。 加州大学埃尔文分校的软件研究院所做的工作则主要集中于架构风格、架构描述语言以及动态架构。 11. 架构的目标是什么f9020d2abe©应届生求职网YingJieSheng.COM©7ebe61b7aa 答:要达到如下的目标: ·可靠性(Reliable)。软件系统对于用户的商业经营和管理来说极为重要,因此软件系统必须非常可靠。 ·安全行(Secure)。软件系统所承担的交易的商业价值极高,系统的安全性非常重要。ccbdb62ec9©应届生求职网YingJieSheng.COM©1cf9f0fcd1 ·可扩展性(SCAlable)。软件必须能够在用户的使用率、用户的数目增加很快的情况下,保持合理的性能。只有这样,才能适应用户的市场扩展得可能性。 ·可定制化(CuSTomizable)。同样的一套软件,可以根据客户群的不同和市场需求的变化进行调整。 ·可扩展性(Extensible)。在新技术出现的时候,一个软件系统应当允许导入新技术,从而对现有系统进行功能和性能的扩展7a99787bd1©应届生求职网YingJieSheng.COM©6721579732 ·可维护性(MAIntainable)。软件系统的维护包括两方面,一是排除现有的错误,二是将新的软件需求反映到现有系统中去。一个易于维护的系统可以有效地降低技术支持的花费 ·客户体验(Customer Experience)。软件系统必须易于使用。 ·市场时机(Time to Market)。软件用户要面临同业竞争,软件提供商也要面临同业竞争。以最快的速度争夺市场先机非常重要。e1cc6bb9f0©应届生求职网YingJieSheng.COM©b0bf7b01d4 12. 什么是构架风格 答:软件构架(或仅是构架视图)可以具有名为构架风格的属性,该属性减少了可选的形式,并使构架具有一定程度的一致性。样式可以通过一组模式或通过选择特定构件或连接器作为基本构件来定义。对给定系统,某些样式可作为构架描述的一部分记录在构架风格指南(Rational Unified Process 中设计指南文档的一部分)中。样式在构架的可理解性与完整性方面起着主要的作用。 13. 什么是构架设计图 ?有哪些组成?74270fd093©应届生求职网YingJieSheng.COM©ffef459384 答:构架视图的图形描述称为构架设计图。对于以上描述的各种视图,设计图由以下统一建模语言图组成 [UML99]: 逻辑视图:类图、状态机和对象图。 进程视图:类图与对象图(包括任务 - 进程与线程)。9d8a121ce5©应届生求职网YingJieSheng.COM©9a2c9e2e99 实施视图:构件图。 部署视图:配置图。 用例视图:用例图描述用例、主角和普通设计类;顺序图描述设计对象及其协作关系。d7dbbb00f9©应届生求职网YingJieSheng.COM©4bc016b14b 14. 谈谈构架设计流程。 答:在 Rational Unified Process 中,构架主要是分析设计工作流程的结果。当项目再次进行此工作流程时,构架将在一次又一次迭代中不断演化、改进、精炼。由于每次迭代都包括集成和测试,所以在交付产品时,构架就相当强壮了。构架是精化阶段各次迭代的重点,构架的基线通常会在此阶段结束时确定。 |
系统分类: | 自由话题 |
用户分类: | 电子企业面试专题 |
标签: | 面试 |
来源: | 转贴 |
面试过程中,面试官会向应聘者发问,而应聘者的回答将成为面试官考虑是否接受他的重 要依据。对应聘者而言,了解这些问题背后的“猫腻”至关重要。本文对面试中经常出现 的一些典型问题进行了整理,并给出相应的回答思路和参考答案。读者无需过分关注分析 的细节,关键是要从这些分析中“悟”出面试的规律及回答问题的思维方式,达到“活学 活用”。 问题一:“请你自我介绍一下” 思路: 1、这是面试的必考题目。 2、介绍内容要与个人简历相一致。 3、表述方式 上尽量口语化。 4、要切中要害,不谈无关、无用的内容。 5、条理要清晰,层次要分明 。6、事先最好以文字的形式写好背熟。 问题二:“谈谈你的家庭情况” 思路:1、 况对于了解应聘者的性格、观念、心态等有一定的作用,这是招聘单位问 该问题的主要原因。 2、 简单地罗列家庭人口。 3、 宜强调温馨和睦的家庭氛围。 4、 宜强调父母对自己教育的重视。 5、 宜强调各位家庭成员的良好状况。 6、 宜强调家庭 成员对自己工作的支持。 7、 宜强调自己对家庭的责任感。 问题三:“你有什么业余爱好?” 思路: 1、 业余爱好能在一定程度上反映应聘者的性格、观念、心态,这是招聘单位 问该问题的主要原因。 2、 最好不要说自己没有业余爱好。 3、 不要说自己有那些庸俗 的、令人感觉不好的爱好。 4、 最好不要说自己仅限于读书、听音乐、上网,否则可能令 面试官怀疑应聘者性格孤僻。 5、 最好能有一些户外的业余爱好来“点缀”你的形象。 问题四:“你最崇拜谁?” 思路: 1、 最崇拜的人能在一定程度上反映应聘者的性格、观念、心态,这是面试官 问该问题的主要原因。 2、 不宜说自己谁都不崇拜。 3、 不宜说崇拜自己。 4、 不宜说 崇拜一个虚幻的、或是不知名的人。 5、 不宜说崇拜一个明显具有负面形象的人。 6、 所崇拜的人人最好与自己所应聘的工作能“搭”上关系。 7、 最好说出自己所崇拜的人的 哪些品质、哪些思想感染着自己、鼓舞着自己。 问题五:“你的座右铭是什么?” 思路: 1、座右铭能在一定程度上反映应聘者的性格、观念、心态,这是面试官问这 个问题的主要原因。 2、不宜说那些医引起不好联想的座右铭。 3、不宜说那些太抽象的 座右铭。 4、不宜说太长的座右铭。 5、座右铭最好能反映出自己某种优秀品质。 6、 参 考答案——“只为成功找方法,不为失败找借口” 问题六:“谈谈你的缺点” 思路: 1、 不宜说自己没缺点。 2、 不宜把那些明显的优点说成缺点。 3、 不宜说 出严重影响所应聘工作的缺点。 4、 不宜说出令人不放心、不舒服的缺点。 5、 可以说 出一些对于所应聘工作“无关紧要”的缺点,甚至是一些表面上看是缺点,从工作的角度 看却是优点的缺点。 问题七:“谈一谈你的一次失败经历” 思路: 1、 不宜说自己没有失败的经历。 2、 不宜把那些明显的成功说成是失败。 3、 不宜说出严重影响所应聘工作的失败经历, 4、 所谈经历的结果应是失败的。 5、 宜说明失败之前自己曾信心白倍、尽心尽力。 6、 说明仅仅是由于外在客观原因导致失 败。 7、 失败后自己很快振作起来,以更加饱满的热情面对以后的工作。 问题八:“你为什么选择我们公司?” 思路: 1、 面试官试图从中了解你求职的动机、愿望以及对此项工作的态度。 2、 建议从行业、企业和岗位这三个角度来回答。 3、 参考答案——“我十分看好贵公司所在 的行业,我认为贵公司十分重视人才,而且这项工作很适合我,相信自己一定能做好。” 问题九:“对这项工作,你有哪些可预见的困难?” 思路: 1、 不宜直接说出具体的困难,否则可能令对方怀疑应聘者不行。 2、 可以 尝试迂回战术,说出应聘者对困难所持有的态度——“工作中出现一些困难是正常的,也 是难免的,但是只要有坚忍不拔的毅力、良好的合作精神以及事前周密而充分的准备,任 何困难都是可以克服的。” 问题十:“如果我录用你,你将怎样开展工作” 思路: 1、 如果应聘者对于应聘的职位缺乏足够的了解,最好不要直接说出自己开展 工作的具体办法, 2、 可以尝试采用迂回战术来回答,如“首先听取领导的指示和要求, 然后就有关情况进行了解和熟悉,接下来制定一份近期的工作计划并报领导批准,最后根 据计划开展工作。” 问题十一:“与上级意见不一是,你将怎么办?” 思路: 1、 一般可以这样回答“我会给上级以必要的解释和提醒,在这种情况下,我 会服从上级的意见。” 2、 如果面试你的是总经理,而你所应聘的职位另有一位经理,且 这位经理当时不在场,可以这样回答:“对于非原则性问题,我会服从上级的意见,对于 涉及公司利益的重大问题,我希望能向更高层领导反映。” 问题十二:“我们为什么要录用你?” 思路: 1、 应聘者最好站在招聘单位的角度来回答。 2、 招聘单位一般会录用这样 的应聘者:基本符合条件、对这份共组感兴趣、有足够的信心。 3、 如“我符合贵公司的 招聘条件,凭我目前掌握的技能、高度的责任感和良好的饿适应能力及学习能力 ,完全能 胜任这份工作。我十分希望能为贵 公司服务,如果贵公司给我这个机会,我一定能成为贵 公司的栋梁!” 问题十三:“你能为我们做什么?” 思路: 1、 基本原则上“投其所好”。 2、 回答这个问题前应聘者最好能“先发制 人”,了解招聘单位期待这个职位所能发挥的作用。 3、 应聘者可以根据自己的了解,结 合自己在专业领域的优势来回答这个问题。 问题十四:“你是应届毕业生,缺乏经验,如何能胜任这项工作?” 思路: 1、 如果招聘单位对应届毕业生的应聘者提出这个问题,说明招聘单位并不真 正在乎“经验”,关键看应聘者怎样回答。 2、 对这个问题的回答最好要体现出应聘者的 诚恳、机智、果敢及敬业。 3、 如“作为应届毕业生,在工作经验方面的确会有所欠缺, 因此在读书期间我一直利用各种机会在这个行业里做兼职。我也发现,实际工作远比书本 知识丰富、复杂。但我有较强的责任心、适应能力和学习能力,而且比较勤奋,所以在兼 职中均能圆满完成各项工作,从中获取的经验也令我受益非浅。请贵公司放心,学校所学 及兼职的工作经验使我一定能胜任这个职位。” 问题十五:“你希望与什么样的上级共事?” 思路: 1、 通过应聘者对上级的“希望”可以判断出应聘者对自我要求的意识,这既 上一个陷阱,又上一次机会。 2、 最好回避对上级具体的希望,多谈对自己的要求。 3、 如“做为刚步入社会新人,我应该多要求自己尽快熟悉环境、适应环境,而不应该对环境 提出什么要求,只要能发挥我的专长就可以了。” 问题十六:“您在前一家公司的离职原因是什么?” 思路: 1、 最重要的是:应聘者要使找招聘单位相信,应聘者在过往的单位的“离职 原因”在此家招聘单位里不存在。 2、 避免把“离职原因”说得太详细、太具体。 |
系统分类: | 自由话题 |
用户分类: | 电子企业面试专题 |
标签: | 16个经典面试问题回答思路 |
来源: | 转贴 |