一亩三分地论坛

 找回密码
 Sign Up 注册获取更多干货
码农求职神器Triplebyte:
不用海投,内推你去多家公司面试
Airbnb 数据科学职位
in analytics and inference
电商初创公司Good Days
招聘SDE/UI/TPM等职位实习生
把贵司招聘信息放这里
查看: 1983|回复: 0
收起左侧

12/02 Arista电面

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

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

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

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

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写代码。
. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
1. 给了一个简单的程序
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的长度:

typedef struct _stack {
   struct _stack_elm * top;
   int length;. From 1point 3acres bbs
} stack_t;


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

typedef struct _stack_elm {
   void *value;
   struct _stack_elm *prev;
} stack_elm_t;. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷

. more info on 1point3acres.com
typedef struct _stack {
   struct _stack_elm * top;. From 1point 3acres bbs
   int length;
} stack_t;


stack_t* create(int length) {
   stack_t * s = (stack_t *) malloc ( sizeof (stack_t));
   s->length = length;
   return s;
}. from: 1point3acres.com/bbs

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) {. From 1point 3acres bbs
   if ( s == NULL || s->top == NULL) {
      return NULL;
   }
   return s->top->value;
}

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;
. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
}



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

评分

4

查看全部评分

本版积分规则

关闭

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

手机版|小黑屋|一亩三分地论坛声明

custom counter

GMT+8, 2017-12-18 13:02

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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