阿里巴巴B2B二面

1、通配符的含义

通配符是一种特殊语句,主要有星号(*)和问号(?),用来模糊搜索文件。

2、死锁的基本知识——死锁是各大笔试面试中出现率50%的知识点

产生死锁的原因主要是:

  • (1) 因为系统资源不足。
  • (2) 进程运行推进的顺序不合适。
  • (3) 资源分配不当等。

如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则
就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。
产生死锁的四个必要条件:

  • (1) 互斥条件:一个资源每次只能被一个进程使用。
  • (2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
  • (3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
  • (4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之
一不满足,就不会发生死锁。
死锁的解除与预防:
理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和
解除死锁。所以,在系统设计、进程调度等方面注意如何不让这四个必要条件成立,如何确
定资源的合理分配算法,避免进程永久占据系统资源。此外,也要防止进程在处于等待状态
的情况下占用资源。因此,对资源的分配要给予合理的规划。

3、信号量P、V原语的相关知识点

详见:http://blog.csdn.net/sunlovefly2012/article/details/9396201

4、有向图的邻接表表示

 

//有向图的邻接表表示法
#include <stdio.h>
#include <malloc.h>
#define MAX_VERTEX_NUM 50//定义图的最大顶点数
typedef char VertexData;
typedef struct EdgeNode//边表结点
{
    int adjvex;//邻接点域
    VertexData data;
    struct EdgeNode *next;//边结点所对应的下一个边结点
}EdgeNode;

typedef struct VertexNode//定点表结点
{
    VertexData data;
    EdgeNode *firstedge;//头结点所对应的第一个边结点
}VertexNode;

typedef struct AdjList
{
    int VexNum,ArcNum;//定义图的顶点数和边数
    VertexNode vertex[MAX_VERTEX_NUM];//定义头结点数组
}AdjList;

void CreateGraph(AdjList *adj)
{
    int e,s,d,n,i;
    char c;
    EdgeNode *q = NULL;
    printf("输入顶点数\n");
    scanf("%d",&n);
    printf("输入边数\n");
    scanf("%d",&e);
    adj->VexNum=n;
    adj->ArcNum = e;
    
    //初始化表头结点
    for(i=1;i<=n;i++){
        printf("输入第%d个顶点的顶点名称:\n",i);
        //输入流中还有残留的字符,getchar()会接受那个字符。可以在调用getchar()之前用fflush(stdin)刷新一下输入缓冲区。
        fflush(stdin); 
        c = getchar();
        adj->vertex[i].data=c;//顶点名称,是一个字符
        adj->vertex[i].firstedge = NULL;
    }
    for(i=1;i<=e;i++){
        printf("输入第%d条边的起点和终点:\n",i);
        scanf("%d %d",&s,&d);//输入边的起始和终止
        q=(EdgeNode *)malloc(sizeof(EdgeNode));//创建一个表结点
        if(q==NULL)
            return;
        q->adjvex=d;
        q->next = adj->vertex[s].firstedge;//新加入的结点都是头结点之后,
        //原来在头结点之后的结点要后移
        adj->vertex[s].firstedge = q;
    }
}    

void DisplayGraph(AdjList *adj)
{
    int n=adj->VexNum;//顶点个数,后面要遍历每一个点点
    EdgeNode *q=NULL;
    int i;
    for(i=1;i<=n;i++)
    {
        q=adj->vertex[i].firstedge;
        if(q!=NULL)
        {
            printf("从结点%c出发的边有:",adj->vertex[i].data);
            while(q!=NULL)
            {
                printf("%c->%c",adj->vertex[i].data,adj->vertex[q->adjvex].data);
                q=q->next;
            }

        }
    
    }

}
    
void main()  
{  
    AdjList *adj=(AdjList *)malloc(sizeof(AdjList));  
    CreateGraph(adj); 
    DisplayGraph(adj);  
}


5、STL中迭代器的工作原理,迭代器与普通指针有什么区别?
迭代器和指针相同的地方: 1、指针和iterator都支持与整数进行+,-运算,而且其含义都是从当前位置向前或者向后移动n个位置 2、指针和iterator都支持减法运算,指针-指针得到的是两个指针之间的距离,迭代器-迭代器得到的是两个迭代器之间的距离 3、通过指针或者iterator都能够修改其指向的元素 通过上面这几点看,两者真的很像,但是两者也有着下面的几个不同地方 1、out操作符可以直接输出指针的值,但是对迭代器进行在操作的时候会报错。通过看报错信息和头文件知道,迭代器返回的是对象引用而不是对象的值,所以cout只能输出迭代器使用*取值后的值而不能直接输出其自身。 2、指针能指向函数而迭代器不行,迭代器只能指向容器 这就说明了迭代器和指针其实是完全不一样的概念来的。指针是一种特殊的变量,它专门用来存放另一变量的地址,而迭代器只是参考了指针的特性进行设计的一种STL接口。 笔者曾在网上看到这样一种说法:迭代器是广义指针,而指针满足所有迭代器要求。迭代器是STL算法的接口,而指针是迭代器,因此STL算法可以使用指针来对基于指针的非STL容器进行操作。 笔者觉得上面说法也有几分道理,但是到底正不正确就留给看官自己判断了。但是有一点希望大家注意的是:千万不要把指针和迭代器搞混了。也许某些编译器使用指针来实现迭代器以至于有些人会误以为指针和迭代器是一个概念来的。
6、什么是友元? 7、delete、new的用法 8、typename的用法

9、编程判断一个数是否为2的幂

思路:2,4,8,16,32....都是2的n次幂

转换为二进制分别为:

10    100    1000   10000    100000

这些数减1后与自身进行按位与,如果结果为0,表示这个数是2的n次幂

01    011    0111   01111    011111

10&01 = 0    100&011 = 0   1000&0111 = 0   10000&01111 = 0  100000&011111 = 0

#include <stdio.h>

/* 判断一个整数是否为2的次方幂 */
bool fun(int v)
{
    bool flag = 0;
    if((v>0)&&(v&(v-1))==0)
        flag = 1;
    return flag;
}

int main(void)
{
    int a;
    printf("请输入1个32位的整数:");
    scanf("%d",&a);
    if(fun(a))
        printf("这个数是2次方幂\n");
    else
        printf("这个数不是2次方幂\n");
    return 0;
}
 

10、你怎样重新改进和设计一个ATM银行自动取款机?

10.1、用指纹识别、人脸识别来替代密码输入;

10.2、语音交互来代替传统按键式的人机交互方式。

12、10000Mbps万兆交换机怎么实现?

13、操作符重载的相关知识点,大题,具体记不清了
个人资料
机器小王子
等级:7
文章:34篇
访问:3.2w
排名: 8
上一篇: 阿里巴巴b2b一面
下一篇:人民搜索笔试题1
猜你感兴趣的圈子:
阿里巴巴笔试面试圈
标签: adj、edgenode、指针、vertex、死锁、面试题
隐藏