最近遇到问题

最近笔试面试的一些问题和感触 ,都是c,c++ 基础题 , 主要是做的题太少。 基础真的是没有, 这几年的大学生活都被狗吃了 真的很想吐槽自己的大学生活。 感觉找工作的一个月 都比大学学的基础都多。 现在不讲这些 马上把一些基础问题 重新回顾一下把。(最近复习我的C++啊)

class Bass {

public:

    Bass(){x = 1;}

 

    int x;

};

 

class Derive :public Bass {

    

    

public:

    Derive(){x = 2;}

 

    int x ;

};

 

 

int main(int argc, const char * argv[])

{

 

    Derive d;

    Bass & b1 = d;

    printf(" %i ,%li,%li",b1.x ,sizeof(b1),sizeof(d));

    return 0;

}

 输出 : 1 4 8 

记得面试碰到最多的问题是 sizeof  操作符的问题  一开始我都不知道这些 后来。。。。

看了 http://lemonmilk.blog.51cto.com/  找一段重要的贴一下

4。结构类型

在上面的程序中,

struct str{
                          double d;
                         char ch;
                          int data;
 }str_wu;
 struct str1{
                           char ch;
                            double d;
                             int data;
 }str_wu1;

两个不同的结构,但是内部的元素是相同的,都是double,intchar,只是顺序不一样,就结果不一样。why?

这时因为VC存储数据的时候要对其,具体的情况如下:

类型
  对齐方式(变量存放的起始地址相对于结构的起始地址的偏移量)

  Char
  偏移量必须为sizeof(char)即1的倍数

  int 
  偏移量必须为sizeof(int)即4的倍数

  float
  偏移量必须为sizeof(float)即4的倍数

  double
  偏移量必须为sizeof(double)即8的倍数

  Short
  偏移量必须为sizeof(short)即2的倍数

比如:str_wu,为上面的结构分配空间的时候,VC根据成员变量出现的顺序和对齐方式,先为第一个成员dda1分配空间,其起始地址跟结构的起始地址相同(刚好偏移量0刚好为sizeof(double)的倍数),该成员变量占用sizeof(double)=8个字节;接下来为第二个成员dda分配空间,这时下一个可以分配的地址对于结构的起始地址的偏移量为8,是sizeof(char)的倍数,所以把dda存放在偏移量为8的地方满足对齐方式,该成员变量占用sizeof(char)=1个字节;接下来为第三个成员type分配空间,这时下一个可以分配的地址对于结构的起始地址的偏移量为9,不是sizeof(int)=4的倍数,为了满足对齐方式对偏移量的约束问题,VC自动填充3个字节(这三个字节没有放什么东西),这时下一个可以分配的地址对于结构的起始地址的偏移量为12,刚好是sizeof(int)=4的倍数,所以把type存放在偏移量为12的地方,该成员变量占用sizeof(int)=4个字节;这时整个结构的成员变量已经都分配了空间,总的占用的空间大小为:8+1+3+4=16,刚好为结构的字节边界数(即结构中占用最大空间的类型所占用的字节数sizeof(double)=8)的倍数,所以没有空缺的字节需要填充。所以整个结构的大小为:sizeof(str_wu)=8+1+3+4=16,其中有3个字节是VC自动填充的,没有放任何有意义的东西。

还有好多是基础的太基础的问题  我都忽略了。 

来个简单的算法把

  参考:http://hi.baidu.com/aztfei/item/70042cdf3103fa866cce3fd0

 1 关于找出数组中第二大的数
 2 
 3 public int FindSecond(int[] arr)
 4 {
 5 int length=arr.length; //数组长度
 6 int max=arr[0];    // 当前第一项为最大项
 7 int second=arr[1]; //当前第二项为最大项
 8 if (max < second)     //比较第一二项的大小,根据大小设定max,second
 9 {
10    int temp = max;
11    max = second;
12    second = temp;
13 }
14 for(int i=2;i<length;i++)     //让后续的每一项和max,second比较,
15 {
16    if (arr[i] > max)            //修改max的值
17    {
18     second = max;
19     max = arr[i];
20    }
21    else if (arr[i] < second)   //比second小继续循环。
22    {
23     continue;
24    }
25    else                               // 此项即比max小,但比second数组大的项,把它重新复制给second
26    {
27     second = arr[i];
28    }
29 }
30 return second;
31 }

将字符串反序输出 

//反序一个字符串
void reverse(char s[])
{
 char c;
 int i,j;
 j = strlen(s) - 1;
 for(i = 0;i < j;i ++)
 {
  c = s[i];
  s[i] = s[j];
  s[j] = c;
  j --;
 }
}

void main(void)
{
 char str[LENGTH + 1];
 cout<<"Input a string:";
 cin>>str;
 reverse(str);
 cout<<"The string is reversed:"<<str<<endl;
}

问的最多的就是 手游的屏幕适配问题  可以看看

  http://blog.csdn.net/xiaominghimi/article/details/8918235

  http://www.ityran.com/archives/4018

最近逼自己做了一个完整的 demo 去应聘  , 那样即使你C++ 不是很好。 面试的大牛也会对你好点的 , 不会太为难你, 工资还可观点呵呵。

demo 就不放出来了。 呵呵。 技术太次了。

  想做手游的还是得看C++啊。

以上是我的最近面试碰到多一点的题, 有好多还没有整理 等有条件的把。

  最头疼的是 做那些操作系统 的题, 要看啊。 

做游戏那么麻烦么。 

  注: c++ c  数据结构  算法  操作系统  等

  

原文地址:https://www.cnblogs.com/linux-ios/p/3395538.html