华为面试经历 by eric

1. 机试

共有三题

a、加密

要求

输入一个字符串;

字符串的前半部分-1,如b,将会变为a;当为a时,输出z;

字符串的后半部分+1,如b,将会变为c;当为z时,输出a;

字符串的长度若为奇数,中间的那个字符不做变化;

标注:很简单的题目,唯一注意的就是效率问题;

b、比较

要求

输入:

41234 3456 12345 654 12386

123

输出:

12345 12386 41234

将输入第一行中的数字和第二行的数字进行比对,找出包含第二行中的数据,然后排序输出;

标注

在做题时,对scanf的用法不熟悉,导致上文中特定形式的输入出现问题,从而后面两题都出现了很大的问题;

c、约瑟夫环的单链表实现

要求

  编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开始顺时针方 向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部 出列为止。设计一个程序来求出出列顺序,以单循环链表方式实现。  

M,n都小于10;

实现

#include <stdio.h>
#include <stdlib.h>

typedef struct node{
	int num;
	int key;
	struct node *next;
}LNode;

void Joseph(int, int, int*);
LNode *CreateList(int);

void main()
{
	int m, n, a[10];
	//m是报数范围,n是人数,a[10]存储每个人所拥有的密码
	
	scanf("%d %d", &n, &m);
	Joseph(n, m, a);
}

void Joseph(int n, int m, int *a)
{
	LNode *head = NULL;
	LNode *p = NULL;
	LNode *temp = NULL;
	LNode *last = NULL;

	int i;
	int count = 1;

	head = CreateList(n);
	p = head;

	while(p != p->next){
		for(i=1; i<m; i++){
			last = p;
			p = p->next;
		}

		printf("%5d", p->num);
		m = p->key;
		temp = p;
		last->next = p->next;
		p = p->next;
		free(temp);
	}

	printf("%5d\n", p->num);
	free(p);
}                                                                                                                                                                                                                                                           

//单循环链表的创建
LNode *CreateList(int n)
{
	LNode *p, *r, *list = NULL;
	int value;
	int i = 1;

	while(i<=n){
		scanf("%d", &value);
		p = (LNode *)malloc(sizeof(LNode));
		p->num = i++;
		p->key = value;
		p->next = NULL;

		if(!list)
			list = p;
		else 
			r->next = p;
		r = p;
	}

	r->next = list;

	return list;
}

2. 技术面试

自我评价

表现的不是很好,很多自己理解的东西但是不能很好的和面试官说清楚。

需要针对理解的东西,进行表达训练。

不要全说实话,放大自己的优点,尽量不要说自己的缺点。

在面试之前,要详细思考如何对项目进行讲解,使面试官能够了解。

尽量淡化本科经历,强调研究生经历。

简历需要修改;

问题

每一个项目的大致介绍

如何避免指针使用所带来的危险(野指针)

  •  在定义指针的时候,对其进行初始化,如初始化为NULL
  • 正确的释放,并且释放后,并将指针设置为NULL,以免后面再次使用。会使人认为其是合法指针
  • 为一个指针再次分配内存之前,要判断该指针是否为空,防止出现内存泄露

任务的状态变化


几种主要状态:

  • TASK_RUNNING
  • TASK_INTERRUPTIBLE         因为阻塞造成的睡眠
  • TASK_UNINTERRUTIBLE      
  • TASK_STOPED  信号sigstop进入,sigconc退出
  • TASK_ZOMBIE

描述死锁


如何避免死锁

  • 按固定的顺序获取
  • 防止发生饥饿

双向循环链表和单向循环链表相比,好处在哪里;

 

3. 性格测试

具体内容

  • 乐观;
  • 完成工作;
  • 细心;
  • 领导力;
  • 相信别人,信赖别人;
  • 乐于帮助别人
  • 是否容易紧张;
  • 外向或内向;

注意两点

前后一致;

选择岗位需要的,而不是根据你是什么样的进行选择;

可以通过APESK来做一下测试,了解一下自己


4. 终面

没有进入,详细的询问项目相关

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值