一日谈——我的面试经验

一日谈——我的面试经验

三月九日,去了一家做SoC Graphics的硬件的公司面试。这家公司是一个朋友Destiny no Cyber介绍的,所以面试完了去和他一起吃饭(当然是别人花钱,嘎嘎),同行的还有另一个朋友Fake German。不过COBET、Mickey和Baby Valkyrie没去,同时因为时间关系,我也没能去朝拜一下Mr.Lalrone,这些让我觉得挺遗憾的。

------------------------我是YD的分割线--------------------------------------------


唔,言归正传,简单讨论一下面试的事情。由于他们Corp仍然在招人,所以我也就不好透露具体的面试题目,不过也都是写基本的问题。只要功底稍微好一点,回答上来应该问题不大。而且很不幸的我属于那种功底不怎好的人。晚上和Mr.Lalrone聊天的时候,还被耻笑了。我也小小总结了一下其他网上的面试题,就语言本体部分而言,大概就一下这么几个方面
1. Macro
对于Macro只需要把握一点,Macro的机制是编译期的文本替换,而不是运行期的。这是它和函数最大的区别。因此要注意一下Block的使用( 也就是{}和()一定要用 )。如果遇到对Macro行为的解释的题目,为了慎重起见,一定要先手工展开,再来进行别的方面的计算。
2. 指针/数组
没啥好说的,最常考的内容之一。主要是传值/传引用,sizeof,指针/数组在初始化上的区别。等等等。一个可能会出现的问题,是const的左绑定
3. 结构体/对象
在这一方面,常见的问题包括:内存对齐导致的sizeof和member layout问题,bit field的正确使用,继承关系下的基类和派生类成员的分布。
4. 类
类方面的问题主要包括以下若干方面:
访问控制:public,private,protected,friend。对于这些,要有相对深刻的理解。对于硬件公司,这方面关心的不多。但是如果是一个做Application的Corp,出于工程方面的考虑,这些问题就显得尤为重要。你必须理解,访问控制仅在编译期有含义。在编译期之外,不会生成任何额外的代码,来保证你的访问正确性。
构造函数:要理解什么时候编译器会生成缺省构造函数,以及缺省构造函数的行为。对于一些测试代码风格的题目,千万不要忘了对拷贝构造、赋值的特殊处理,以及对单值构造函数的explicit声明。部分情况下,可能要考虑到成员/基类的构造顺序的问题。这个顺序是:先基类,后子类。本类中,声明序。不是按照初始化函数的顺序,而是按照声明的顺序。如果记不清,那就请记得把初始化函数的顺序和成员声明的顺序一致起来。
析构函数:有两个地方是重中之重。第一,有虚函数的基类,一定要有一个虚析构函数。第二,不得抛出异常。
虚函数/非虚函数:这个主要可以参见书“Inside C++ Object Model”。虚函数的考点不外乎两点,底层实现和运行时行为。底层实现大部分的实现都是vptr - vtable的组合。关于调用顺序,自然不用赘述了,只要辨明了Object Slice和Reference(包括pointer)的区别,就没有任何问题了。
静态/非静态成员变量/成员函数:这里的考点比较多。他们在行为上的区别,存储上的区别,初始化的区别,访问的区别,指针的区别,(函数)调用协议的区别是最常见的考点。几乎每一个部分都有不少内容可以让考官爽你一把的。有两个相对容易陌生的操作符.*和.->万一考到了,一定需要注意。(多年没用过,我都忘得差不多了。不过好在我估计出面试题目的,也忘了差不多了。还是functor好。)对于函数而言,const和non-const函数的区别,this的具体含义和行为是很常见的考点。一个罕见的关键字mutable的运用,也可能作为考点出现。
5. 类型和声明系统
主要考点在const和volatile上。const前面已经说过了。对于有着并发需求的公司,面试之前的准备中,千万不能忘了volatile。volatile一般仅用于编译器的native type。他是C++这个多线程残废唯一还算靠点谱的并发一致性保证的拐杖。然后要特别注意,typedef里面的type modification的行为,可能不像你YY的那个样子。唯一靠谱的类型修饰,还是来自于STL和TR1的type traits。
6.函数
有关于函数方面的问题,能考的点非常多。相对底层的包括调用协议(参数传递方法,入栈顺序,堆栈平衡等),应用级别的,主要还是考你栈和堆的区别。在代码的Robust和Security的问题上,如果是做Kernel的公司,还要好一些。应用系统的,最常见的就是缓冲区溢出的问题。千万别在这个问题上犯傻了。对于效率而言,strlen,strcpy和memmove是几项最容易考的实现函数。还有就是关于static member和non static member的区别。这个不难,但是经常会考到。
7. 模板
大部分公司都不怎么用模板,因此考的可能性也不大。
8. 库
这个就没什么好说的了。CRT和STL是最常见的考点。要特别注意库在性能方面、安全性方面、线程安全方面、出错处理方面的Features。必要的时候还要了解其实现。


————————我是更YD的分割线————————

对于语言方面的考核点,我也就小小的总结一下,希望对大家有所帮助。当然,还有一个方面的问题就是领域相关的,比方说,你做UI,或者做Graphics,或者做Network,都会有各自的问题。这与面试官个人的性格、知识面、deep程度,公司职位对能力的需求都有莫大的关系。因此,这些方面的知识还是多多益善。

 

后来还见了他们的中国区BOSS(荣幸的很,嘿嘿),当时答应了要替他们公司问一下招聘的人的,所以我也在这里发一下招聘信息:

图芯芯片技术公司(Vivante Corp)招聘启事 - HW职位


ASIC Design Engineer(上海)

Responsibilities:
The candidate will be responsible for logic design and implementation in low power graphic and multi-media chip/core.
Micro-architecture definition, RTL design, verification, silicon bring-up, etc.
Qualifications:

  • MSEE or above, with 2 years experience
  • Proficiency in logic design, simulation, synthesis and test
  • Proficiency in Verilog and its simulation environment.
  • Experience in graphic, video, and multi-media chip design a big plus.
  • Familiar with all aspects of the frontend ASIC design flow including RTL design, verification, synthesis, and timing analysis, DFT, etc.
  • Good written and spoken English
  • Good communication skills and able to work both independently and in a team

Design Verification Engineer (上海)
Responsibilities:
The candidate will be responsible for building up verification environment and completing verification of design and algorithm at both chip and unit levels.The candidate is also responsible for developing verification plan to verify design functionality.
Minimum requirements:
  • MSEE or above, minimum 3 years direct experience in verifying complex SoC chips
  • Experience with Verilog logic design language.
  • Experience with high-level verification languages such as System Verilog, Vera, System C or Specman e language a plus
  • Experience with UNIX/Linux simulation tools such as NC-Verilog or VCS.
  • Experience with C and C++ and script language like PERL/SED, etc.
  • Self-motivated and good team player.
  • Strong problem solving and analytical skills
  • Good written and spoken English
  • Good communication skills and able to work both independently and in a team
.
About Vivante
Vivante Corporation is a promising, privately held fabless semiconductor company in the design, development,and marketing of graphic and multimedia ICs and related software for the fast growing handheld wireless device market.The company is foundered by successful industry veterans and is well funded.
Our mission is to provide the mass market with the capability of accessing rich graphics and multimedia content anywhere and anytime on their wireless handheld devices. Combining our low power architecture and design with our dynamic power management, our 3D graphics chips will give consumers the same immersive experience they have found on their PC and game consoles but with power consumption level orders of magnitude smaller. All day interactive computing will be tethered no more!
We believe and invest in our people, we promote a culture of creativity, and we created an environment where talents are recognized and teamwork and collaboration is valued and rewarded.

ps,他们也招SW职位的人,主要是User-Model Driver和Application的。有意向,也可以投简历。

Corp URL: http://www.vivantecorp.com/

你可能感兴趣的:(一日谈——我的面试经验)