今天面试总结

第一题,给出给定程序的输出,程序很简单,这儿就不写了。本题关键在于sizeof的用法


char a[10] = {1, 2, ..., 10};

#define Total (sizeof(a)/sizeof(a[0]))


关于sizeof的用法,总结如下

sizeof的参数如果是一个对象,比如数组名,结构体名,那么sizeof的返回值就是该对象占有内存的空间大小;如果sizeof的参数为指针,那么在32位机器上的返回值就是4。下面是我为了验证该想法所做的一个实验。


#include <stdio.h>
#include <string.h>

struct Node
{
       char a;
       int b[2];
};

typedef struct Node *ptrToNode;
typedef struct Node List;

int main()
{
    char a[5]={'1', '2', '3', '4', '5'};
    
    char *b = "12345"; 
    
    char c[] = "12345";
    
    printf("%d, %d, %d, %d, %d, %d\n", sizeof(a), sizeof(b), sizeof(c), strlen(a), strlen(b), strlen(c));
    
    printf("%d %d\n", sizeof(ptrToNode), sizeof(List));
    
    return 0;
}

结果为

5, 4,6, 7, 5, 5

4, 12

从这个例子中可以看出,如果sizeof(c)的话,因为该对象是一个字符串,因此sizeof也将其尾零统计在内;另外,strlen的原理为打印出从字符串首字符开始,一直到尾零的前一个字符。所以strlen(a)的长度为7,因为在内存中,char[4]之后的字符是不确定的,可能不为0,因为strlen的统计不会结束。


第二题,进程所占用的资源有哪些?linux中有三类典型的线程,分析其各自的特点。


第三题,有三个一维的向量A[N], B[N], C[N], 其中C[i] = A[i] + B[i],用循环可以实现

for(i = 0; i < N; i++)C[i] = A[i] + B[i];

如果使用多线程的话,题目中给了下面的方法

<1, 1, N>开启 N个 kernel,具体的方法我忘了。。。

如果计算C[N][N] = A[N][N] * B[N][N],如何来做。


第四题,有一个unsigned int的数4,一个int型的数-20,判断两数相加是大于0还是小于0;

                已知一个struct的结果,如

struct contain

{

void *p;

itn b;

listhead *next; 

}

现在已知plist = contain.next,能否求出结构体contain的地址。

这个题,我想了两种办法,一是由各成员变量的长度去计算,还有就是通过通用链表来做,爱立信电话面试就面过这个题,但是后来忘复习了,引以为戒。


第五题,写add.h和add.c,实现整数相加的功能,并且头文件可以被c++程序调用,另外解释头文件的代码主要做了什么。

这让我想起#include具体都做些了什么工作 这个问题。


第六题,各种变量的定义,什么定义整型变量,指向整型的指针(数组)等等。


编程题

1、用程序获得链表倒数第n个节点

2、删除字符串中的空格字符

3、写程序求一数组相邻元素最大和。

算法题

1、设计算法,实现linux命令行下tab键命令补全功能

2、设计算法,将多个字符串按照字母表顺序排序,比如ced, agh, bes, opea, owdif,排列后是agh,bes, ced, opea, owdif.


到现在还没offer,努力!

阅读更多
个人分类: 笔试面试
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭