C++

来源:互联网 发布:如何将淘宝链接发微信 编辑:程序博客网 时间:2024/06/01 07:34

主要包括数据结构、算法、C语言、C++的OOP思想等几个方面。 

1.数据结构 

(1)数组 
关于数组的题目特别的灵活,比如无序数组中找出最大的2个/K个、整数数组中找最大 
连续和等等。《编程珠玑》中有一些很好的讨论,可以读读。 

(2)链表 
链表的各种问题,比如判断是否有环并确定环入口、判断两个链表是否相交并判断相交 
点等等。在很多链表问题中,快慢针思想很有用。单链表是根本,但也要熟练运用双向 
链表、循环链表。 

(3)树 
关于树,二叉树必须掌握,另外也要了解K叉树、红黑树、B-、B+树的一些基本概念。 

(4)图 
图的深度和广度优先算法思想和应用场景,要比较熟悉。并且要能熟练应用,比如找迷 
宫路线等。 

(5)字符串 
最好熟悉C标准库中string的常用函数实现,难一些的可能就算KMP了。 

(6)有序堆 
大/小根堆的调整、保序操作要熟悉。另外算法部分也要用到,比如堆排序。 

(7)栈和队列 
基本思想,还有一些简单的灵活应用,比如用两个栈模拟一个队列等。 

(8)其他 
可以实现一些查找从属关系操作的并查集结构,另外某些技术的实现利用了什么数据结 
构也可以有适当的了解,比如STL的set是用红黑树实现的,等等。 

2.算法 

要熟练掌握基本算法和思想,至于熟练的程度,应该是大部分算法题可以在几分钟内给 
出解法,而刷过大量ACM题的话,应该算是出色的interviewee了。 

各种经典算法思想要熟练掌握。比如,对于贪心要知道如何证明假设,对于动态规划要 
会快速找出最优子结构和递归的公式。 

(1)排序 
各大排序算法都是必会的,对于选择、冒泡、希尔、归并、堆、快速、桶、基数、计数 
等排序算法,不仅要会写,还要能将其中的思想提炼出来运用。这在面试中是经常被问 
到的。 

(2)查找 
查找也是很重要的,因为应用很广,比如信息检索、搜索引擎都是大量数据的查找。但 
对于小本,不会问你这些业内技术的问题,而会看你对哈希思想和设计、二分查找和条 
件的理解和灵活运用。 

(3)动态规划 
有动态规划思想,会观察最优字结构和得到递归公式。 

(4)贪心 
对于贪心,最重要的,不是算法的实现,而是算法的假设的证明。面试时,一般都会要 
求数学证明。绝大部分可以用归纳法解决,但有的其中可能会用到代数/几何等知识。 

(5)二进制思想 
二进制思想在某些应用中非常有用,比如可以利用二进制提供线性无关本质的方法,具 
体地说包括位图、某些称量问题、0-1背包,都是二进制思想的本质。 

(6)海量数据的相关问题的算法思想 
可以看看《编程之美》等书,里面某些专题有一些不同方面的讨论。 

(7)其他 
关于算法的内容,很多很多。还有一些不太具有代表性,但是也要知道。 

3.C语言 

或某面向过程的经典语言,如Pascal。但其实C既然大一学过,如果没有熟练掌握实在 
有些过不去。注意,不一定要“精通”,但要“熟练”。 

(1)关于指针 
有一些看上去很拗口的内容,比如指针数组、数组指针、函数指针、指针的指针等,还 
有与const有关的一些概念,比如指向常量的指针变量、指向变量的指针常量、指向常量 
的指针常量等等。还有一些与传参、返回值有关的内容。 

(2)关于内存 
C语言的程序内存分配情况,这其实与很多方面都有关联,比如堆、栈、编译等等。 

(3)关于预处理 
比如条件编译、宏定义等,有很多可说的点。 


(4)其他 
C语言一般用的念头都比较久,如果写的代码多,基本各个点都在平时涉及到了。但精华 
部分可能还是要去读一些书才知道。 

4.C++的面向对象编程思想(OOP) 

(1)关键字 
对static、const、virtual、public、private、protected、friend等关键字的各种用 
途的理解。 

(2)多态 
多态是OOP的精髓之一,这涉及到继承/派生、虚函数、虚继承/多重继承等等很多细节。 

(3)类的基础知识 
构造函数、析构函数、拷贝构造函数、赋值函数等相关要点,说起来也很多。 

(4)C++中一些区别于C的特性 
这也很泛,比如C++中static、const的作用就比C丰富。另外OOP本身就已经是一场革命 
。 
内联的思想vs宏定义,const变量vs宏定义,动态存储管理,重载,动态绑定/静态绑定 
, 
c++中的struct和class什么关系,struct可不可以被继承,等等。 

(5)其他 
运算符重载、覆盖/重载/隐藏的区别、STL、函数模板/类模板/泛型编程,等等。 

5.操作系统/网络/数据库/组成原理 


这个根据公司不同,会有不同的要求,不过基本上,只要掌握基本知识就OK了。不过如 
果真不擅长的话,只要上面四方面比较扎实也OK。 

6.网络编程/并行编程/系统编程等 


这是一些具体的编程技术,对于小本,不会没有关系,会的话算是bonus。 

7.Linux 


不会没有影响,这个如果会的话,也是bonus。第一层面是熟悉一些命令、VIM/emacs等 
编辑器的基本使用、gcc/g++的基本使用;第二层面就是bash和linux编程;第三层面就 
是读内核了。作为校本,到第一层就OK了。如果在实验室和师兄师姐们研究过内核,就 
会让面试官的眼睛放光。 

8.脚本语言 

比如python、perl等,也是bonus。 

9.外语 

(1)英语 


最好考过TOEFL,科大同学的读写能力都可以,口语和听力最好可以胜任基本交流,会 
自我介绍、项目介绍和讨论、思想/个性/性格/爱好等方面的讨论和交流。 

(2)第二外语 


对某个小语种有一些初步掌握也是有一些好处的,比如日语、法语、德语、西语、韩语 
等,一是体现自己的文化多元性,二是侧面展现自己的丰富。 

10.智力题 


并没有通法,想到多少就和Interviewer交流多少,让他/她知道你的思维走到哪里了 
 
不要不说话就好。 

11.言谈 
踏实、诚恳、自信、自然。对于Interviewee,面试的最高境界是:谈判。不卑不亢, 
双向交流,有问有答,有礼有节。要表现出自己良好的表达、倾听、解释和交流的能 
力。而面对面试官的挑衅,在证明自己能力OK的基础上主动巧妙还击,因为并不是所 
有面试官都懂得尊重你和科大。 

12.the key to prefer a certain position 

有的人看中base,有的人看中package,有的人看中option/stock,有的人看中晋升空 
间,有的人看中户口,有的人看中低工作强度,有的人看中工作环境,有的人看中公司 
文化,有的人看中细分的行业领域前景…… 

因人而异,选择你自己认为对的。 

13.参考书籍 
(1)数据结构:严蔚敏老师的《数据结构》就可以了。 
(2)算法:CLRS的《Introduction to Algorithms》、《编程珠玑》、《编程之美》。 
大二的同学时间充 
裕的话可以看看《计算机程序设计艺术》。 
(3)C:《Expert C Programming》,这本不厚,可以读一读。 
(4)C++:入门就读《C++ Primer》或《The C++ Programming Language》,但是这 
个是大部头,一般人读不下去,可以先读读也是Lippman写的《Essential C++》,然 
后读读《Effective C++》,这两本都不厚。 
14.epilog