面经一
一. Linux系统
linux常用指令,如何查看内存
ls cd pwd mkdir rm rmdir mv cp cat more less head tail which
whereis locate find chmod tar chown df du ln date cal grep wc ps
top kill free
二. C++
1. 封装、继承、多态
封装就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或对象操作,对不可信的进行信息隐藏。一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些数据或代码可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关部分意外的改变或错误地使用了对象的私有部分。
继承是指让某个类型的对象获得另一个类型的对象的属性方法。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来类的情况下对这些功能进行拓展。继承的过程就是一般到特殊的过程。继承概念的实现方式有两种:实现继承与接口继承。实现继承是指直接使用基类的属性和方法而无需额外编码的能力;接口继承是指仅适用属性和方法的名称、但是子类必须提供实现的能力。
多态是指一个类实例的相同方法在不同情形下有不同的表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们的操作可以通过相同的方式予以调用。
2. 重载
解决函数名称过多的问题
3. 类中的static成员
静态成员是被所有该类的对象所共享的。
不可在类体内赋值(你在一个对象里给它赋值,其他对象里的该成员也会发生变化,为避免混乱,所以不可在类体内进行赋值)。
在外部必须要初始化
静态数据成员的用途之一是统计有多少个对象实际存在。
共享数据
4. 构造函数在什么情况下定义为私有的
重载new函数,这个类变成了只能在堆上创建,不能在栈上创建
可以用来解决C++中有名的单例模式
可以定制类的对象个数
优质解析:http://www.cnblogs.com/jiu0821/p/5629996.html
5. 类中是否可定义引用类型、const类型,如何初始化,定义这些类型的意义何在
在类中可以定义引用类型的成员变量,但是必须在构造函数之前完成初始化,也就是必须在构造函数的初始化列表中完成初始化。
在类中声明变量为const类型,但是不可以初始化,const常量的初始化必须在构造函数初始化列表中初始化,而不可以在构造函数体内部初始化。当类中用到一些固定值时,希望将其定义为const成员变量,防止被修改。但是因为const成员变量因为初始化之后就不能被修改,因此只能在构造函数的初始化列表中初始化。如果是数组,则没有办法在初始化列表中初始化,必须定义为static,放在类外。
6. STL中 list和vector的不同之处,resize()和reserve()的作用
Vector:对象数量变化少,简单对象,随机访问元素频繁
Resize()会改变vector的size值,也就是经典的改变大小;reserve()只是在vector空间后预留空间,使vector在改变大小时不用重新分配空间,并不会改变大小。
List:对象数量变化大,对象复杂,插入和删除频繁
三.网络编程
四.设计模式
五.算法
(1) 一个单向链表如何快速定位到倒数第k个元素
两个指针
(2) 一个100G的大文件,如何对其进行有序排序,内存只有1G
冒泡排序,以磁盘空间换内存空间
(3) 一个100G的大文件,里面存有单词,如何找到词频 top100的单词
二叉树排序
(4) 一个100G的大文件,里面存有数值,如何找到大小为top100的数值
详解:http://wsql.iteye.com/blog/1710857