May 2009 - May 2017 论坛八周年-你的足迹,我的骄傲


一亩三分地论坛

 找回密码
 获取更多干活,快来注册

一亩三分地官方iOS手机应用下载
查看: 1654|回复: 0
收起左侧

12/02 Arista电面

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

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

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

您需要 登录 才可以下载或查看,没有帐号?获取更多干活,快来注册

x
面了两轮,第一轮是on campus,问的问题很简单:
.鐣欏璁哄潧-涓浜-涓夊垎鍦
1. Java的abstract class和interface的区别
.鏈枃鍘熷垱鑷1point3acres璁哄潧2. Java overwriting和overloading的区别
3. Java的final method有什么作用
4. 用C写binary search tree successor.鏈枃鍘熷垱鑷1point3acres璁哄潧

第二轮是software manager的电面,和之前的面经一样是ssh到他们的服务器上面去用vim写代码。
.鐣欏璁哄潧-涓浜-涓夊垎鍦
1. 给了一个简单的程序. 1point3acres.com/bbs
int main(int argc, char * argv){
    for (int i = 0; i < argc; i++) {
         printf("%s\n", argv[i]);
    }
}

编译执行之后出现了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 {
   void *value; 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
   struct _stack *prev;
} stack_elm_t;

然后面试官问我要是我们不想在pop function里面传** top的话,应该怎么办?而且我们可能在初始化stack的同时已经固定了数据的长度。 经过他的提示,大致的意思是需要写一个新的结构体存stack的基本信息,包括现在的栈顶和每个value的长度:
. from: 1point3acres.com/bbs
typedef struct _stack { 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
   struct _stack_elm * top;
   int length;-google 1point3acres
} stack_t;
.鐣欏璁哄潧-涓浜-涓夊垎鍦

之后我实现了peek, create, push三个function, 大致的代码如下(可能会有一些错误):
-google 1point3acres
typedef struct _stack_elm {. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
   void *value;
   struct _stack_elm *prev;
} stack_elm_t;

. From 1point 3acres bbs
typedef struct _stack {
   struct _stack_elm * top;
   int length;
} stack_t;
. 1point 3acres 璁哄潧
. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
stack_t* create(int length) {
   stack_t * s = (stack_t *) malloc ( sizeof (stack_t));
   s->length = length;. Waral 鍗氬鏈夋洿澶氭枃绔,
   return s;
}

void pop(stack_t * s) {
   if ( s == NULL || s->top == NULL) {
      return NULL;. more info on 1point3acres.com
   }
   stack_t * current = s->top;. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
   s->top = s->top->prev;
   free(current->value);
   free(current);
}

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

int push(stack_t * s, void * value) {. From 1point 3acres bbs
   if ( s == NULL ) {. 1point3acres.com/bbs
      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璁哄潧

面完这道题之后就花了一个小时,然后面试官说我们休息一下。过了五分钟,他和我说我挂了,可能觉得我对C不是很熟悉。

评分

4

查看全部评分

本版积分规则

关闭

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

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

custom counter

GMT+8, 2017-5-24 00:54

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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