一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 837|回复: 0
收起左侧

12/02 Arista电面

[复制链接] |试试Instant~ |关注本帖
AnthonyNeu 发表于 2015-12-5 07:13:14 | 显示全部楼层 |阅读模式

2015(10-12月) 码农类 硕士 全职@Arista - 校园招聘会 - 技术电面 |Failfresh grad应届毕业生

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

x
面了两轮,第一轮是on campus,问的问题很简单:

1. Java的abstract class和interface的区别
2. Java overwriting和overloading的区别
3. Java的final method有什么作用
4. 用C写binary search tree successor

第二轮是software manager的电面,和之前的面经一样是ssh到他们的服务器上面去用vim写代码。. From 1point 3acres bbs

1. 给了一个简单的程序. from: 1point3acres.com/bbs
int main(int argc, char * argv){. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
    for (int i = 0; i < argc; i++) {. From 1point 3acres bbs
         printf("%s\n", argv[i]);
    }
}. from: 1point3acres.com/bbs

编译执行之后出现了segmetation fault。面试官要求我用gdb打出程序的call stack,并且分析其中的错误。 . 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
然后在打出call stack之后问我print argv[i]打印出来的变量的地址是virtual address还是physical address, virtual address是在编译程序的时候分配的还是执行的时候分配的,如何通过virtual address计算physical address。

2. 实现一个stack,这个题目是可以选择C++的。面试官首先问我如何写出pop function的接口,使得stack里面能够存任何数据类型。 我写了 int push(struct stack_elm_t ** top, void * value, int length),返回值是-1表示error, 0表示成功,length表示数据的长度。
因为我是用linkedlist实现的,首先我写stack中每个node的结构体:
typedef struct _stack_elm {. 1point3acres.com/bbs
   void *value;
   struct _stack *prev;. 鍥磋鎴戜滑@1point 3 acres
} stack_elm_t;

然后面试官问我要是我们不想在pop function里面传** top的话,应该怎么办?而且我们可能在初始化stack的同时已经固定了数据的长度。 经过他的提示,大致的意思是需要写一个新的结构体存stack的基本信息,包括现在的栈顶和每个value的长度:

typedef struct _stack {. Waral 鍗氬鏈夋洿澶氭枃绔,
   struct _stack_elm * top;. 1point3acres.com/bbs
   int length;
} stack_t;


之后我实现了peek, create, push三个function, 大致的代码如下(可能会有一些错误):

typedef struct _stack_elm {. From 1point 3acres bbs
   void *value;
   struct _stack_elm *prev;. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
} stack_elm_t;


typedef struct _stack {-google 1point3acres
   struct _stack_elm * top;
   int length;
} stack_t;


stack_t* create(int length) {. from: 1point3acres.com/bbs
   stack_t * s = (stack_t *) malloc ( sizeof (stack_t));
   s->length = length;. 鍥磋鎴戜滑@1point 3 acres
   return s;
}

void pop(stack_t * s) {
   if ( s == NULL || s->top == NULL) {
      return NULL;
   }
   stack_t * current = s->top;
   s->top = s->top->prev;
   free(current->value);. Waral 鍗氬鏈夋洿澶氭枃绔,
   free(current);
} 鏉ユ簮涓浜.涓夊垎鍦拌鍧.

void * peek(stack_t * s) {. 1point3acres.com/bbs
   if ( s == NULL || s->top == NULL) {
      return NULL;. 1point 3acres 璁哄潧
   }
   return s->top->value;. from: 1point3acres.com/bbs
}

int push(stack_t * s, void * value) {
   if ( s == NULL ) {.鐣欏璁哄潧-涓浜-涓夊垎鍦
      return -1;
   }. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
   temp = ( stack_elm_t * ) malloc ( sizeof( stack_elm_t ));
   temp->val = ( void *) malloc(s->length);
   memcpy(temp->value, value, s->length);
   temp->prev = s->top;
   s->top = temp;
   return 0;.鏈枃鍘熷垱鑷1point3acres璁哄潧

}
.1point3acres缃


面完这道题之后就花了一个小时,然后面试官说我们休息一下。过了五分钟,他和我说我挂了,可能觉得我对C不是很熟悉。
. 鍥磋鎴戜滑@1point 3 acres

评分

4

查看全部评分

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-4 22:27

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表