好未来2017校招笔试

一. 描述下进程和线程的区别

1.当进程发生调度时,它拥有一个完整地虚拟地址空间,但不同的进程拥有不同的虚拟地址空间;而同一进程内的不同线程共享其所属进程的同一地址空间
2.进程切换时涉及相关资源指针的保存以及地址空间的变化;而同一进程内的各线程共享其所属进程的资源和地址空间,切换时无须保存资源,无地址空间变化,从而减少了操作系统的开销
3.进程的调度与切换由操作系统内核完成,而线程的调度可由操作系统完成,也可由用户完成
4.在多线程操作系统中,线程是系统内的执行实体,而进程不是

二. 12枚硬币中有一枚假币(较轻),请问用天平最少几次得出假币?写出算法。。。

3次
先分2份,一边6个称
选出轻的一边,再分2份,一边3个称
然后选出轻的一边(3个)
在这3个中随便选2个称,相等则第另外一个为假币,不等则轻的那个为假币。

三. 说说反射的几种实现方式

Foo foo=new Foo();
1.Class c1=foo.getClass()
2.Class c2=Foo.class;
3.Class c3=Class.forName("Foo");

四. 单向链表头尾反转

#include<stdio.h>
#include<stdlib.h>
typedef struct Node{
	int data;
	struct Node*next;
}stud;
void addNode(stud*s,int data){
	stud* p=(stud*)malloc(sizeof(stud));
	p->data=data;
	p->next=NULL;
	while(s->next!=NULL){
		s=s->next;
	}
	s->next=p;
}
void printList(stud*s){
	stud*p=s->next;
	printf("Head->");
	while(p!=NULL){
		printf("%d->",p->data);
		p=p->next;
	}
	printf("taiL\n");
}
void reverse(stud*s){
	stud*p=s->next;
	stud*q=NULL;
	stud*front=NULL;
	while(p!=NULL){
		q=p->next;
		p->next=front;
		front=p;
		p=q;
	}
	s->next=front;
}
int main(){
	stud*stu1=(stud*)malloc(sizeof(stud));
	stu1->next=NULL;
	addNode(stu1,5);
	addNode(stu1,4);
	addNode(stu1,3);
	addNode(stu1,2);
	addNode(stu1,1);
	printf("---------反转前----------\n");
	printList(stu1);
	printf("---------反转后----------\n");
	reverse(stu1);
	printList(stu1);
	return 0;
} 

运行结果如下
运行结果

五 .数组array[1…n]由奇数个不重复的整数组成,找出一个数,使比这个数大的数和比这个数小的数的个数相等。。。。描述的不太清楚。。。
5 1 2 6 4 7 3 4就是中位数
在床等。。。有没有好的算法??? 额用的排序。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值