爱立信武汉招聘是在武汉理工大学进行的,笔试题全部是英文,以下是几个我做的不好和不会做的题目,1、2、3题是我翻译成中文的。
1.有个Student,包含姓名,性别,年龄属性,完成下列函数,这个函数的功能是删除列表中某个年龄的所有学生。函数的声明如下:
void delete(Student* list, int age)
注:自己定义数据结构。
解答:
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int data;
struct node* next;
}node, *LinkList;
typedef node* Student;
//头插法建立不带头结点的单链表
LinkList createLinkList()
{
int i;
node *head=NULL,*cur,*end;//head是第一个结点,end指向链表的最后一个结点
while((scanf("%d",&i)) != EOF)
{
if(head == NULL)
{
head = (node*)malloc(sizeof(node));
head->data = i;
head->next = NULL;
end = head;
}
else
{
cur = (node *)malloc(sizeof(node));
cur->data = i;
end->next = cur;
end = cur;
}
}
end->next = NULL;
return head;
}
void delete(Student* list, int age)
{
//list实际上是node**类型,因为有可能要改变list
//比如list为2 2 2,要删除2,则list变为空了,所以需要使用指针的指针
node* pre = NULL;//需要删除的结点的前一个结点
node* pNode = NULL;
node* tmpNode = NULL;
if((*list) == NULL)//如果链表为空
return ;
while(*list != NULL && (*list)->data == age)
{
//找到第一个值不是age的结点
//循环条件不能写反,否则会出错
tmpNode = *list;
*list = (*list)->next;
free(tmpNode);
}
pNode = *list;
while(pNode != NULL)
{
if(pNode->data == age)//如果当前结点的值等于age
{
tmpNode = pNode;
pre->next = tmpNode->next;
pNode = pNode->next;
free(tmpNode);
}
else
{
pre = pNode;
pNode = pNode->next;
}
}
}
void printLinkList(LinkList head)
{
while(head)
{
printf("%d ",head->data);
head = head->next;
}
}
int main()
{
LinkList list;
int age;
list = createLinkList();
printf("输入为:");
printLinkList(list);
printf("\n");
printf("输入需要删除的结点的值:\n");
scanf("%d",&age);
delete(&list,age);
printf("删除后:\n");
printLinkList(list);
printf("\n");
return 0;
}
2.简单描述下TCP3次握手(最好用图描述)。
解析:
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,如图1所示。
(1) 第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。
(2) 第二次握手:服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。
(3) 第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据。
3.用户在淘宝网上把某一本书加入了购物车,当这本书降价了,系统会通过邮件、电话等形式告诉用户书降价了,请用相关代码实现这个功能(有一种设计模式适合这种情况)。
解析:
import java.util.Vector;
public class TestObserverPattern {
public static void main(String[] args) {
Book book = new Book("大话设计模式",63.50);
User u1 = new User("Kobe",book);
User u2 = new User("James",book);
User u3 = new User("Wade",book);
book.setPrice(63.50);
book.setPrice(62.50);
book.setPrice(60.50);
book.setPrice(56.50);
}
}
abstract class subject {
private Vector<Observer> vector = new Vector<Observer>();
public void addObserver(Observer observer) {
vector.add(observer);
}
public void deleteObserver(Observer observer) {
vector.remove(observer);
}
public void notifyObervers() {
for(int i=0; i<vector.size(); i++) {
( (Observer)vector.elementAt(i)).update();
}
}
}
interface Observer {
void update();
}
class Book extends subject {
private String name;
private double price;
public Book(String name, double price) {
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double newPrice) {
double oldPrice = price;
this.price = newPrice;
if(!(oldPrice - newPrice > -0.000001 && oldPrice - newPrice < 0.00001))
notifyObervers();
}
}
class User implements Observer {
private String name;
private Book book;
public User(String name,Book book) {
this.name = name;
this.book = book;
book.addObserver(this);
}
public void update() {
System.out.println("用户 " + name + " 被通知书—《"+ book.getName() +"》的价格发生了变化,新价格为:" + book.getPrice());
}
}
4.how to put a job to run in the background? How to put a backgroundto foreground?(Unix/Linuxcommand)
解析:bg——将程序搬到后台运行;fg——将程序搬到前台运行。
5.How to print a core stack in Unix/Linux?
解析:这题不大懂意思,有知道的请指教啊。
Result:笔试通过