现在大三下学期了,由于参加了阿里巴巴的大四实习生校园招聘,第一轮电话面试就被刷下来了,这让我意识到了自己的能力还很不足,意识到了自己与那些大公司需要的人还有很长的路要走。
在电话面试中,基本上是根据我填写的简历来的,我写的是对linux内核非常感兴趣,所以,面试官问我了一些关于内核的一些问题,我竟头脑发蒙,啥都想不起来了。第一个问题就是问我从计算机上电开始,linux内核的启动过程。这一下我竟然连MBR,GRUB,initrd什么的都想不起来了,之前看过几本linux内核的书,但是看完之后总在脑海中什么也没有留下,然后我就问了面试官这个问题,他告诉我一定要和项目相结合才能够获得比较好的效果。
然后他问我感觉自己的算法怎么样,我说一般,然后就没有然后了,算法的问题也没有问我,估计是对我失望了,哎,我自己也意识到了自己的算法不行了,所以自己这几天恶补算法和操作系统,linux内核的东西。
下面是我的一个线性表的C++实现。
自己实现了一个异常类:
#ifndef EXCEPTION_H
#define EXCEPTION_H
// bad initializers
class BadInitializers {
public:
BadInitializers() {}
};
// insufficient memory
class NoMem {
public:
NoMem() {}
};
// improper array, find, insert, or delete index
// or deletion from empty structure
class OutOfBounds {
public:
OutOfBounds() {}
};
// use when operands should have matching size
class SizeMismatch {
public:
SizeMismatch() {}
};
// use when zero was expected
class MustBeZero {
public:
MustBeZero() {}
};
// use when zero was expected
class BadInput {
public:
BadInput() {}
};
#endif // EXCEPTION_H
下面是C++定义的线性表,由于使用了模板类,所以其类定义和类实现不允许分开,只能放在一个文件中了:
#ifndef LINEARLIST_H
#define LINEARLIST_H
#include "Exception.h"
#include
template
class LinearList
{
public:
LinearList(int ListMaxSize = 10);
~LinearList(){delete [] element;}
bool isEmpty() const{return length == 0;} //判断线性表是否为空
int Length(){return length;} //获得线性表的长度
LinearList
& insert(int k,const T& x); //向线性表的k中插入一个元素x
LinearList
& Delete(int k,T& x); //删除线性表中k位置的元素,并返回到x中
bool Find(int k,T& x) const; //返回线性表中第k个位置的元素
int Search(const T& x) const; //查找线性表中元素为x的位置
LinearList
& add(const T& x); //在线性表后面插入一个元素 LinearList
& clear(); //清空线性表中的元素 bool contains(T& x); //判断线性表中是否含有 元素x T& get(int x); //获取x位置的元素 LinearList
& set(int index,T& x); //用指定的元素代替线性表中相应位置的元素 void print(); private: int MaxSize; int length; T* element; //一维动态数组 }; template
LinearList
::LinearList(int ListMaxSize) { MaxSize = ListMaxSize; length = 0; element = new T[MaxSize]; } template
bool LinearList
::Find(int k, T &x) const { /** * 如果提供的k值小于1或者是大于其现在的长度 * 则返回false * 如果提供的k值是可以的,则直接使x等于当前 * 位置的值,并返回true */ if(k < 1 || k > length) return false; x = element[k]; return true; } template
int LinearList
::Search(const T &x) const { /** * 寻找元素值为x的位置并返回 */ for(int i = 0;i < length;i++){ if(x == element[i]) return ++i; } return 0; } template
LinearList
& LinearList
::insert(int k, const T &x) { if(k < 0 || k > length) throw OutOfBounds(); if(length == MaxSize) throw NoMem(); for(int i = length;i >k;i--){ element[i] = element[i-1]; } element[k] = x; length++; return *this; } template
LinearList
& LinearList
::Delete(int k, T &x) { if(!Find(k,x)) throw OutOfBounds(); for(int i = k;i < length;i++){ element[i-1] = element[i]; } length--; return *this; } template
LinearList
& LinearList
::add(const T& x) { if(length == MaxSize) throw NoMem(); element[length] = x; length++; return *this; } template
void LinearList
::print() { for(int i = 0; i < this->Length();i++){ std::cout << element[i] << std::endl; } } template
LinearList
& LinearList
::clear() { for(int i = 0;i < this->Length();i++){ element[i] = 0; } length = 0; return *this; } template
bool LinearList
::contains(T &x) { bool isContains = false; for(int i = 0;i < length;i++){ if(element[i] == x) isContains = true; } return isContains; } template
T& LinearList
::get(int x) { if(x < 0 || x >= length) throw OutOfBounds(); return element[x]; } template
LinearList
& LinearList
::set(int index, T &x) { if(index < 0 || index >= length) throw OutOfBounds(); element[index] = x; } #endif // LINEARLIST_H
我一定能够把算法搞好的。