前段时间刚参加了n多公司的C/C++软件工程师的面试,有国企,外企,私企(moto,飞思卡尔,港湾,中国卫星XXX(这个牛))等等等等。感受感想颇多,近日终于空闲,在此表述一下。
本人基本条件:3年开发经验,2year+ Windows development experence,1year+ Linux experence. 熟悉C,C++,MFC/SDK/API,MiniGUI...(都是一些基本的了)。前公司并不知名,但在其中做个team leader。
言归正传
找工作本人认为最重要的就是前期准备了。
首先。简历一定要写的切合主题。招聘单位要的是你的技能,这个只要大概能符合就可以,关键他们需要的是你的开发经验,一定要在简历中完美的体现出你之前所参与的项目,一定要写明你在项目中的职责和地位,企业通过这方面侧面对你的技术水平进行定位,因此一定要实事求是的写的尽可能的详细,只要别吹牛B,再详细都不过分。只要上面这些内容得到充分的发挥,那么你基本可以得到面试的机会了。
面试之笔试。去了10多个单位面试。题惊人的相似,如果你想顺利通过笔试,有两条建议:一,去网上找一些汇总的笔试题,仔细的看看里面关于数组,指针,链表,类的问题,90%的笔试题目就是里面的原题 ......
前段时间刚参加了n多公司的C/C++软件工程师的面试,有国企,外企,私企(moto,飞思卡尔,港湾,中国卫星XXX(这个牛))等等等等。感受感想颇多,近日终于空闲,在此表述一下。
本人基本条件:3年开发经验,2year+ Windows development experence,1year+ Linux experence. 熟悉C,C++,MFC/SDK/API,MiniGUI...(都是一些基本的了)。前公司并不知名,但在其中做个team leader。
言归正传
找工作本人认为最重要的就是前期准备了。
首先。简历一定要写的切合主题。招聘单位要的是你的技能,这个只要大概能符合就可以,关键他们需要的是你的开发经验,一定要在简历中完美的体现出你之前所参与的项目,一定要写明你在项目中的职责和地位,企业通过这方面侧面对你的技术水平进行定位,因此一定要实事求是的写的尽可能的详细,只要别吹牛B,再详细都不过分。只要上面这些内容得到充分的发挥,那么你基本可以得到面试的机会了。
面试之笔试。去了10多个单位面试。题惊人的相似,如果你想顺利通过笔试,有两条建议:一,去网上找一些汇总的笔试题,仔细的看看里面关于数组,指针,链表,类的问题,90%的笔试题目就是里面的原题 ......
经常需要在程序中将远程传来的字节流进行结构化,或者将结构化的数据变成字节流传给远程主机。在C/C++程序中,结构化数据通常用结构体来组织,结构体也能够方便的转换为字节流,因此结构化的数据传输本不该成为问题,但在VC或GCC的默认设置下编译出的程序,却有一个值得注意的问题——结构体的对齐。 结构体的对齐是编译器为加快程序运行,在结构体中填入一些空白字节,是的结构体成员按一定规则对齐。
例如结构:
struct MyStruct
{
char a;
int b;
};
按一般计算其类洗过那大小应为5个字节,但在上述编译器默认设置下,使用sizeof计算出的结构体类型大小为8个字节,因为编译器在该结构的第一个成员后填入了3个字节来保持成员的对齐。这样,在序列化字节流的时候就产生了问题,该结构类型的变量指针直接转化成char *或者使用memcpy得出的字节流即为8个字节而非5个字节。一般情况下,传输规约只定义有效字节,因而上述方式产生的字节流中3个字节将不在规约中定义,因此远程主机在解析的时候会产生误解,当然除 ......
经常需要在程序中将远程传来的字节流进行结构化,或者将结构化的数据变成字节流传给远程主机。在C/C++程序中,结构化数据通常用结构体来组织,结构体也能够方便的转换为字节流,因此结构化的数据传输本不该成为问题,但在VC或GCC的默认设置下编译出的程序,却有一个值得注意的问题——结构体的对齐。 结构体的对齐是编译器为加快程序运行,在结构体中填入一些空白字节,是的结构体成员按一定规则对齐。
例如结构:
struct MyStruct
{
char a;
int b;
};
按一般计算其类洗过那大小应为5个字节,但在上述编译器默认设置下,使用sizeof计算出的结构体类型大小为8个字节,因为编译器在该结构的第一个成员后填入了3个字节来保持成员的对齐。这样,在序列化字节流的时候就产生了问题,该结构类型的变量指针直接转化成char *或者使用memcpy得出的字节流即为8个字节而非5个字节。一般情况下,传输规约只定义有效字节,因而上述方式产生的字节流中3个字节将不在规约中定义,因此远程主机在解析的时候会产生误解,当然除 ......
assert
函数名: assert
功 能: 测试一个条件并可能使程序终止
用 法: void assert(int test);
程序例:
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
struct ITEM {
int key;
int value;
};
/* add item to list, make sure list is not null */
void additem(struct ITEM *itemptr) {
assert(itemptr != NULL);
/* add item to list */
}
int main(void)
{
additem(NULL);
return 0;
}
assert(断言)可以有两种形式:
assert Expression1 ;
assert Expression1 : Expression2 ;
Expression1 应该总是产生一个布尔值。
Expression2 可以是得出一个值的任意表达式。这个值用于生成显示 ......
assert
函数名: assert
功 能: 测试一个条件并可能使程序终止
用 法: void assert(int test);
程序例:
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
struct ITEM {
int key;
int value;
};
/* add item to list, make sure list is not null */
void additem(struct ITEM *itemptr) {
assert(itemptr != NULL);
/* add item to list */
}
int main(void)
{
additem(NULL);
return 0;
}
assert(断言)可以有两种形式:
assert Expression1 ;
assert Expression1 : Expression2 ;
Expression1 应该总是产生一个布尔值。
Expression2 可以是得出一个值的任意表达式。这个值用于生成显示 ......
时常在cpp的代码之中看到这样的代码: PnQ
PnQ
#ifdef __cplusplus PnQ
extern "C" { PnQ
#endif PnQ
PnQ
//一段代码 PnQ
PnQ
#ifdef __cplusplus PnQ
} PnQ
#endif PnQ
这样的代码到底是什么意思呢?首先,__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,也就是说,上面的代码的含义是:如果这是一段cpp的代码,那么加入extern "C"{和}处理其中的代码。 PnQ
PnQ
要明白为何使用extern "C",还得从cpp中对函数的重载处理开始说起。在c++中,为了支持重载机制,在编译生成的汇编码中,要对函数的名字进行一些处理,加入比如函数的返回类型等等.而在C中,只是简单的函数名字而已,不会加入其他的信息.也就是说:C++和C对产生的函数名字的处理是不一样的. PnQ
PnQ
比如下面的一段简单的函数,我们看看加入和不加入extern "C"产生的汇编代码都有哪些变化: PnQ
PnQ
int f(void) PnQ
{ PnQ
return 1; PnQ
} PnQ
在加入extern "C"的时候产生的汇编代码是: PnQ
PnQ
.file "test.cxx" PnQ
.text PnQ
.align 2 PnQ
.globl _f PnQ
.def _f; .scl 2; .type 32; .endef PnQ
_f: PnQ
pushl %ebp PnQ
movl %esp, %e ......
不知不觉已经工作两年了,辞去了原来的工作,又跑回了我上学的地方。今天跑去一家室友介绍的公司面试。问得问题挺简单,但我答的却真不怎么地啊。回来又研究了一下,发现这些问题我应该都理解啊,怎么到别人问起的时候就全忘了一般呢。想想了发现还是学的不到位。不禁又想起了这么多年来,我都学到了什么东西呢。
大学时的啥都不懂,大一就知道上课,晚自习,学校机房(玩游戏,呵呵,魔兽就是从这时开始玩的,记得我跟我哥们都是新手的时候,打一个初级电脑,两个人用了2小时,最后扎的满屏幕全是箭塔)。大二时整个大环境终于将我领上了大学的正途,去网吧玩游戏。从此只是在考试之前学习。大三网游了一年,结果大三毕业六级没过,保研失败。到了大四,想想反正保研没过,有可能读研这条路就不适合我,所以就直接选择了工作。不过还挺顺利,一下子就找着了,顺利进入了东软。
我们当时进去的时候属于特招的那种,就是感觉你很牛,实际上屁也不是的那种。其他人我不知道,反正我进去的时候连用C语言写Hello World都不会,VC是啥我还没听说过,大学只用TC。不过经过两个月培训下来,我也会写代码了,真不简单。不过当时完成的作业都是抄的,因为基础很差 ......
不知不觉已经工作两年了,辞去了原来的工作,又跑回了我上学的地方。今天跑去一家室友介绍的公司面试。问得问题挺简单,但我答的却真不怎么地啊。回来又研究了一下,发现这些问题我应该都理解啊,怎么到别人问起的时候就全忘了一般呢。想想了发现还是学的不到位。不禁又想起了这么多年来,我都学到了什么东西呢。
大学时的啥都不懂,大一就知道上课,晚自习,学校机房(玩游戏,呵呵,魔兽就是从这时开始玩的,记得我跟我哥们都是新手的时候,打一个初级电脑,两个人用了2小时,最后扎的满屏幕全是箭塔)。大二时整个大环境终于将我领上了大学的正途,去网吧玩游戏。从此只是在考试之前学习。大三网游了一年,结果大三毕业六级没过,保研失败。到了大四,想想反正保研没过,有可能读研这条路就不适合我,所以就直接选择了工作。不过还挺顺利,一下子就找着了,顺利进入了东软。
我们当时进去的时候属于特招的那种,就是感觉你很牛,实际上屁也不是的那种。其他人我不知道,反正我进去的时候连用C语言写Hello World都不会,VC是啥我还没听说过,大学只用TC。不过经过两个月培训下来,我也会写代码了,真不简单。不过当时完成的作业都是抄的,因为基础很差 ......
在项目属性页 --> 配置属性 --> C/C++ --> 输出文件里面,将汇编输出的下拉列表从无列表选择为你需要汇编输出的内容,比如“仅列出程序集(/FA)”,如图1-1,图1-2:
图1-1
图1-2
---------------------------------------------------------------------------------------------------------
图1-3是未修改之前Debug目录下的文件:
图1-3
图1-4是修改之后Debug目录下的文件,注意多了两个汇编文件
图1-4
图1-5是汇编文件HelloWorld.asm的具体内容
图1-5
这样,当你搞不懂编译器到底做了些什么,或者某块内存中到底是什么东西,你可以来查看汇编代码。
比如int i = 5;
int a = (++ i) + (++ i) + (++ i) ;
a是等于22还是24,看你编译器了。o(∩_∩)o...
另外,解决运行时窗口一闪而过的办法是:按Ctrl+F5。
或许这些都是很菜的问题,或许是我平时对VS接触的不多,不过遇到问题解决问题,心情大好。
......
在项目属性页 --> 配置属性 --> C/C++ --> 输出文件里面,将汇编输出的下拉列表从无列表选择为你需要汇编输出的内容,比如“仅列出程序集(/FA)”,如图1-1,图1-2:
图1-1
图1-2
---------------------------------------------------------------------------------------------------------
图1-3是未修改之前Debug目录下的文件:
图1-3
图1-4是修改之后Debug目录下的文件,注意多了两个汇编文件
图1-4
图1-5是汇编文件HelloWorld.asm的具体内容
图1-5
这样,当你搞不懂编译器到底做了些什么,或者某块内存中到底是什么东西,你可以来查看汇编代码。
比如int i = 5;
int a = (++ i) + (++ i) + (++ i) ;
a是等于22还是24,看你编译器了。o(∩_∩)o...
另外,解决运行时窗口一闪而过的办法是:按Ctrl+F5。
或许这些都是很菜的问题,或许是我平时对VS接触的不多,不过遇到问题解决问题,心情大好。
......