记阿里电面一试-研发类c++
2019-04-14 20:28发布
生成海报
找到内推投了阿里的简历,过了素质测评和在线测试之后第一次电面经历。
以下:
我:我先介绍一下自己吧,我叫xx,来自xx大学,是xxxxxx专业的学生。我刚进大学的时候就有人问我:你一个女孩子,为什么会选择一个计算机方面的专业?我的回答是:因为我真的非常非常热爱编程。我清楚的记得我第一次编程是在高一信息课,当时老师要求我们编写一个helloworld的小程序,当时全班六十个同学只有我一个人编译运行成功了,看着屏幕上打印出来的helloworld,我觉得,啊!我真是太棒了【这里我笑了一下,她也笑了,有戏!】我上学期小学期实验要求不拉不拉,我自学了三个图形化方法挑了最好的一个不拉不拉,上学期linux操作系统实验不拉不拉。
她:能详细讲一下你说的k-best算法么?
我:【讲k-best算法】【后面她又问了一下,然后我讲了一下cache行读写冲突啊什么的】
她:你上学期旅行系统,检索最佳旅行路径能讲一下吗?
我:【最少费用:多重图化为单重图,再用迪杰斯特拉问题。讲迪杰特斯拉算法。还讲了一下编码结构存储什么的。】
她:如果现在有一个图,要求求出最短路径,并且这个路径中第一个点到第二个点,第一个点到第三个点……第一个点到最后一个点的路径不能是十三的整数倍,你怎么做?
我:采用迪杰特斯拉算法的变形,把中间每一小段路径除13的余数用数组容器存起来,每加一个点就计算一下是不是十三的整数倍。
她:可是这样的话会漏掉一种情况【然后让我拿纸笔,她说我画了张图,的确会漏掉……】
我:可以用回溯来弥补,如果这条路不行就回溯到倒数第二个点,把倒数第二个点到倒数第一个点的路径设为无穷,在迪杰特斯拉,不行就再回溯,不过得把之前设成无穷大的设回来,把倒数第二个到倒数第三个设为无穷大再找,会一直回溯到原点的如果一直不行,最差情况下会穷举。
她:【中间还问了好多特殊情况,改的差不多了以后】能不能设个条件简化一下时间复杂度呢?
我:【研究了半天没想出来……】
她:如果两点之间有路径A和路径B,两者路径除13余数相等,且A>B,那么B走不通,A也不行,B可以走通,A更不行,可以把A删去不考虑。你可以回去思考思考。
我:好的好的QAQ
她:你们有没有学计算机网络?【然后问了一下TCP断开通信的步骤,包类型之类的,我忘得差不多了额】
她:【问了一个具体的结构在64位linux系统下会占几个字节,结构如下:】
struct{
int A;
long B;
char C;
int D;
}
基本类型所占字节如下:
16位编译器
char :1个字节
char*(即指针变量): 2个字节
short int : 2个字节
int: 2个字节
unsigned int : 2个字节
float: 4个字节
double: 8个字节
long: 4个字节
long long: 8个字节
unsigned long: 4个字节
32位编译器
char :1个字节
char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器)
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 4个字节
long long: 8个字节
unsigned long: 4个字节
64位编译器
char :1个字节
char*(即指针变量): 8个字节
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 8个字节
long long: 8个字节
unsigned long: 8个字节
所以是4+8+1+4=17?
不不不,考的是内存对齐:
对齐规则
每个特定平台上的编译器都有自己的默认“对齐系数”(也叫对齐模数)。程序员可以通过预编译命令#pragma pack(n),n=1,2,4,8,16来改变这一系数,其中的n就是你要指定的“对齐系数”。
规则:
1、数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后 每个数据成员的对齐按照#pragma pack指定的数值和这个数据成员自身长度中,比较小的那个进行。
2、结构(或联合)的整体对齐规则:在 数据成员完成各自对齐之后,结构(或联合)本身也要进行对齐,对齐将按照#pragma pack指定的数值和结构(或联合)最大数据成员长度中,比较小的那个进行。
3、结合1、2颗推断:当#pragma pack的n值等于或超过所有数据成员长度的时候,这个n值的大小将不产生任何效果。
这里n=8,ABCD大小依次是 4,8,1,4
存的地址依次是[0,3][8,15][16,17][20,24],整体24%8=0,所以应该是24
【是的我没get到点】
她说叫我再等电面……
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮