最近遇到问题
最近笔试面试的一些问题和感触 ,都是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,int,char,只是顺序不一样,就结果不一样。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 数据结构 算法 操作系统 等