zoukankan      html  css  js  c++  java
  • 近两个月C++实习生面试总结

       从6月份到8月份,这几个月中,我通过大街网等招聘网站投递了一系列的程序开发的实习生岗位,原本的想法并不是一定要去实习,但是从某次面试官对于C++的面试提问中,我感受到了许多自己学习过程中的不足。这些不足不是仅仅依靠看书或者自己写一些小代码可以得到理解的,而是需要自己从基本功开始重写塑造自己的编程功底。这次,我把心动娱乐,新思科技,oracle以及Nvidia的面试体会记录下来,以鞭策自己。其中,主要以nvidia为主,oracle因为业务关系主要是针对数据结构问的。

    C++面试中的题目:

         无独有偶,在进行C++面试的时候,有一个问题是三家公司的面试官都进行了询问的,那就是C++中的虚函数。虚函数作为C++面向对象性质的基本语句,承载着许多面向对象性质实现的基础功能。

        主要问题集中在虚函数的语法,虚函数中虚基类和派生类的关系,以及指针操作的异同。其中,包含了成员函数的重载和重写,虚基类指针调用派生类成员函数的时候会出现的问题。通过虚基类指针实例化派生类对象的一系列问题,比如在销毁对象的时候析构函数的执行顺序,当然,也问道了虚析构函数的必要性。深入问下去的话,还会对虚表V-table进行提问。

       当虚函数问了之后,很自然的就会转到显式转换上的问题,四个cast操作符之间的功能是什么,异同点有哪些。这些都是会被问到的。

       如果cast答得好了,还会有更深入的问题,但是我没能够通过这一关。

       除了这些,const操作符,static修饰的成员函数,都是提问的重点。nvidia对于C++的基础十分重视,除了这些问题,其他的C++问题都有可能被问到。我在做面试前的笔试题目时,会被提问去简单实现一下STL中的string类。这个无可避免的要求对其拷贝函数有所了解。

       类的拷贝函数是类的基本函数,也就是用同一个类的对象实例化一个对象。其中最重要的就是需要记得申请存储空间,防止知识简单的指针赋值。这样在原先的对象销毁时,保留的新的对象也会丢失其内容,造成问题。这里很想怀念下OC中的应用计数。

        C++的基础基本来说主要集中在以上这些。所谓的继承,多态,封装,其实都在一个虚函数的概念里都被考到了,而且深入了解了虚函数之后,相信不去背概念,也能知道这三个面向对象的性质是如何的了。

    除了C++的基础,下面就是算法和数据结构考的也是比较多的。但应该都算是比较基础,不过因为公司的不同,也会有差异。比如Oracle就十分重视数据结果,Nvidia也考了较难的数据结果知识。不过其实也是基础的知识,知识我平时很少用到而疏远了。

         算法上来说,主要就是会问一些基本的排序的性质,时间复杂度,实现什么的。还会问一些简单的算法问题。我觉得更应该注意的是数据结构部分

          Oracle的面试中,上来就让我实现一个多叉树的数据结构,这下我就直接跪了。因为虽然这也是非常基本非常基本的数据结构,但就连《算法导论》也只是很浅的讨论了一种叫做左兄弟孩子的实现方式。然后,在这个二叉树上完成深度遍历。

         这道题面试结束后我也自己写了一下,还是十分简单的,但是如果基础不好,就卡在了哪里。

        之后,还问了一下task管理之类的问题,但是我已经无心恋战。

         Nvidia是在笔试中有对BSP树有应用的提问。这个也是我已经完全忘记的数据结构,也是本科教学中并没有着重讲到的知识点。所以自然的我没能够答出来。

        而其他的问题都比较简单。对于这些学习也没学习好,在学校的实践中也没有用到的还是很难的。

        再比如Nvidia问到的四元数问题,以及变换矩阵的问题。我虽然学习了,但是也只是浅薄的映像。使用中也多是调用一个现成的API开解决问题,而没能深入了解实质,是十分让人觉得遗憾的。

       Nvidia还问了许多线性几何的知识,这些基础的知识是做图形学工作的必备。而我却还是比较偏向于用空间几何的方式来解决问题,很显然是不对的。

    总结

       作为一个学生,的确需要多实践。不过,实践的重点更要走出去。这个走出去指的是走出舒适的环境,走出校园,走出自己的想象。

       校外的公司应用的技术和自己在学校中接触的已经天差地别,而学校内可以进行的实践往往也大部分难以脱离教学的限制,指导老师都不追求技术,如何能够让你懂得技术的革新。(一开始我的导师只让我用glbegain画图)

        这段时间的面试,给我最大的指导就是我通过与面试官交流的过程中,学习到了许多公司中开发一个工程侧重的地方,对我在学校内的实践起到了非同小可的作用。也让我开代码的时候更能够看得进去,因为有些写法终于间接或直接明白了好处,并且开始学着用面试官问我问题的那种思维来考虑我的代码。

       这样一来,之前数次推倒重来的方式也没有再发生在我的代码中。

        不过, 错过如此多的优秀公司让我觉得十分遗憾。我现在在学习《C++ primer》 《算法导论》,然后将《线性代数》再复习一遍。

       代码方向,我在nvidia的frank(我的一面面试官)推荐下,开始看开源游戏引擎的数学库。

       实习面试,虽然没有结果,但是优秀的前辈给我的指教,已经让我受益匪浅。我和女友说,每次我都是上了n对1的一堂大课,而且对面是日薪上k的大牛,实在是赚翻了。

         写下此文以鞭策自己不断前进!

      

  • 相关阅读:
    C. Tavas and Karafs 二分查找+贪心
    字符串前缀和后缀匹配
    E
    网络流最经典的入门题 各种网络流算法都能AC。 poj 1273 Drainage Ditches
    B
    Dividing 多重背包 倍增DP
    Doing Homework 状态压缩DP
    Largest Rectangle in a Histogram 常用技巧 stack的运用
    S = A + A2 + A3 + … + Ak. (推矩阵公式+矩阵幂运算)
    安卓开发:图片的显示Mode
  • 原文地址:https://www.cnblogs.com/LukeJR/p/4765464.html
Copyright © 2011-2022 走看看