面试一

 开始想在csdn上写博客了

今天面试了

自己面试的也不多,主要把自己的失败之处记录下来,算是总结下,免得在同一个地方栽跟头。

 

从笔试的题来说

自己的不足

对面向对象的基本概念不熟练,特别是继承

对算法不够精通,在纸上写不出代码(可能是老对着机器,用笔还真没感觉)

对多线程和网络编程不够娴熟(我还没毕业,能力有限,也没有接触太多的东西)

 

面试来说

不敢大胆的说出自己的有点,总是太谦虚了

 

1.下面程序输出什么结果

int _tmain(int argc, _TCHAR* argv[])
{
 int a[] = {1,2,3,4,5,6};
 
 int *pA = (int *)((&a) + 1);
 int *pB = (int *)(a+1);
 printf("%d %d",*(pA-1),*(pB-1));
 return 0;
}

答案 6 1

 

我一直认为&a的值和a的值是一样的,所以加1后的指针也是一样的,没想到啊

引用加1竟然是加一个自身的长度,然后pA再减去一个整型占的内存大小就到了a数组的最后一个元素6了

这题对我来说,就是变态,我也写了8个月代码,还真的没有这样用过。

 

2.下面程序输入什么

class A
{
public:
 A(){}
  ~A(){cout<<"Destructor A"<<endl;}

};

class B : public A
{
public:
 B(){}
 ~B(){cout<<"Destructor B"<<endl;}

};

int _tmain(int argc, _TCHAR* argv[])
{
 B *pB = new B;
 A *pA = (A *)pB;
 delete pA;

 getchar();
 return 0;
}

如果把上面类A 的析构函数为虚拟的又将怎么样呢

 

分析:哎,考察类的虚函数表,以前都从汇编看过类的继承的,这次到傻了,认为虚拟的子类不继承,因为虚拟的嘛

哎 哎 这么简单的题都被我刚好弄反了,其实想一下类的虚函数表,就知道了,好久不做题,还真不行啊。而且在小公司里,都很少用自己设计的继承,太悲剧啦。

 

3.从字符串中找出字字符串的位置。

这个算法都看过好几遍了,可是我就是写不出来,还有改进的算法的空间和时间复杂度我都分析过,可就是不能够在纸上写代码。

 

4.判断题

switch语句中default的顺序可以随便,但是为了编程风格,一般将default写在最后。

 

我直接把这个题咔嚓啦,问了一个不做开发的同学,他都说他都知道顺序都是可以互换了。太悲哀啦。

 

5.斐波那契数列的问题

求第n个斐波那契数列的值,要从时间和空间复杂度上考虑。

我直接写了个递归,明智不对,还是要写。

回来在网上找了一个算法,感觉自己简直是笨蛋了家。

 

fibonacci 数列定义:

n = 1,2 时,fib(n) = 1
n > 2 时,fib(n) = fib(n-2) + fib(n-1)

如果用递归计算则包含非常多的重复计算量,因此不可考虑。
换一个思路,只要从 f(1) 计算到 f(n-1),那么这个过程是不会有重复计算的。
很多算法用了数组来保存 f(1)到 f(n) 的值,如果 n 很大,则这个空间开销会很大,好处是在需要计算很多个 f(n) 的时候可以利用“缓存”。
如果仅需要计算一个 f(n) 值,就没必要分配这个数组。可以两个临时变量搞定,分别保存 f(n-2),f(n-1)的值。
代码:

 

 

这个算法的空间复杂度为 O(1).
时间复杂度为 O(n).

 

哎,多么好的算法,好像以前也见过,可惜,好久,在小公司里从来都不考虑这些问题。脑子都钝了。

 

今天面试两家 易思博 和 中软国际 两个都是主要做华为的外包。易思博的直接谈定了,中软国际的还要复试。

哎,我真应该做对的,看看我现在是多么的烂啊。

总结,继续努力。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值