西邮Linux2019面试题(下)

简介: 西邮Linux2019面试题

9.执行下列程序段,并输入“Xiyou Linux”(不含引号),那么程序的输出结果是什么?请解释 其原因。

int main(int argc, char *argv[]) 
{
 char *p = (char *)malloc(sizeof(char) * 20),
 *q = p;
 scanf("%s %s", p, q);
 printf("%s %s\n", p, q);
}

输出结果:Linux Linux

q指向的是p的地址,此过程相当于先将Xiyou给p,然后再通过地址找到p,将其修改为Linux

10.执行下面的程序段,每次执行的输出结果一致吗,整理并解释输出结果。

int main(int argc, char *argv[]) {
   int a[4] = { 2, 0, 1, 9 };
   printf("%p, %p\n", a, &a);
   printf("%p, %p\n", a + 1, &a + 1);
}

输出结果:0x7fffffffdb90, 0x7fffffffdb90

         0x7fffffffdb94, 0x7fffffffdba0

分析:&a和a,一个表示整个数组的地址,一个表示首元素地址。

每次执行的结果是不一样的

11.斐波那契数列是这样的一串数列:1,1,2,3,5,8,13,......。在这串数列中,第一项、第二项为 1,其他项为前两项之和,该数列的第 x 项可以表示为下面的函数。请根据描述,写出一个程序,使之输入 x 后,能够输出斐波那契数列的第 x 项(其中 x<30)。当你完成之后,你可以尝试使用递归解决这个问题。  

#include<stdio.h>
int f(int n)
{
  if (n <= 2)
    return 1;//当n=1,2时返回值为1,即f(0)=f(1)=f(2)=1
  else
    return f(n - 1) + f(n - 2);//此时n>2,返回前两个数之和
}
int main()
{ 
  int n = 0;
  scanf("%d", &n);
  printf("%d\n", f(n));
  return 0;
}

12.下面代码段是某一种排序算法的简单实现,你知道它是什么吗?请讲解其原理,并尝试改进它。

int main(int argc, char *argv[])
{
    int nums[6] = {6, 3, 2, 4, 5, 1};
    for (int i = 0; i < 6; i++)
    {
        for (int j = i; j < 6; j++)
        {
            if (nums[i] > nums[j])
            {
                int c = nums[i];
                nums[i] = nums[j];
                nums[j] = c;
            }
        }
    }
}

这是选择排序

优化思路:每次找出最小之值和最大值的下标,一次循环结束后再进行交换

int main(){
    int len=sizeof(a)/sizeof(int);
    int t;
    /*初始化左端、右端元素下标*/
    int left = 0;
    int right = len - 1;
    while (left < right){
      /*初始化最小值、最大值元素的下标*/
        int min = left;
        int max = right;
        for (int i = left; i <= right; i++){
          /*标记每趟比较中最大值和最小值的元素对应的下标min、max*/
            if (a[i] < a[min])
                min = i;
            if (a[i] > a[max])
                max = i;
        }
        /*最大值放在最右端*/
        int t = a[max];
        a[max] = a[right];
        a[right] = t;
        /*此处是先排最大值的位置,所以得考虑最小值(a[min])在最大位置(right)的情况*/
        if (min == right)
            min = max;
        /*最小值放在最左端*/
        t = a[min];
        a[min] = a[left];
        a[left] = t;
        /*每趟遍历,元素总个数减少2,左右端各减少1,left和right索引分别向内移动1*/
        left++;
        right--;
    }
}

13.请简单叙述两种字节序(大端、小端)的概念,你的机器是什么字节序?试着写一个 C 语言程序来验证。

大端存储模式:是指数据的低位字节序保存在内存的高地址中,而数据的高位字节序保存在内存的低地址中(高位在前)

小端存储模式:是指数据的低位字节序保存在内存的低地址中,而数据的高位字节序保存在内存的高地址中(低位在前)

    #include<stdio.h>
    int Check()
    {
        int i = 1;
        return (*((char*)&i));
        //返回1表示小端
        //返回0表示大端
    }
    int main()
    {
        int c = Check();
        if (1 == c)
        {
            printf("小端\n");
        }
        else
        {
            printf("小端\n");
        }
        return 0;
    }

14.以下是在某机器下执行 Linux 命令 ls 的部分输出(有删节),参考该输出,你可以说出哪些关于该命令以及其他 Linux的相关知识?

[root@xiyoulinux /]# ls -al 
total 36  
drwxr-xr-x  17 root root  4096 Sep 21 23:45 .  
drwxr-xr-x  17 root root  4096 Sep 21 23:45 ..  
lrwxrwxrwx   1 root root     7 Aug 21 22:21 bin -> usr/bin  
drwxr-xr-x   4 root root  2048 Jan  1  1970 boot  
drwxr-xr-x  21 root root  3580 Nov 21 21:16 dev  
drwxr-xr-x  83 root root  4096 Nov 21 22:12 etc  
drwxr-xr-x   4 root root  4096 Sep 22 00:07 home  
drwxr-xr-x   2 root root  4096 Aug 21 22:21 mnt  
drwxr-x---   9 root root  4096 Nov 19 19:15 root  
dr-xr-xr-x  13 root root     0 Nov 21 21:15 sys  
drwxrwxrwt  10 root root   380 Nov 21 22:30 tmp  
drwxr-xr-x   9 root root  4096 Nov 21 22:12 usr  

该命令显示出指定目录下的内容(包括当前目录中文件及其子目录)。


-al 指查看设备是否具有读写权限。


第一列表示文件类型及权限


第二列表示链接数


第三列表示该文件所有者


第四列表示该文件所属群组


第五列表示文件大小(字节)


后面三列是该文件的最后修改时间


最后一列是文件名称


相关文章
|
4月前
|
存储 运维 关系型数据库
2024年最全ceph的功能组件和架构概述(2),Linux运维工程面试问题
2024年最全ceph的功能组件和架构概述(2),Linux运维工程面试问题
2024年最全ceph的功能组件和架构概述(2),Linux运维工程面试问题
|
4月前
|
运维 Linux Docker
Docker笔记(个人向) 简述,最新高频Linux运维面试题目分享
Docker笔记(个人向) 简述,最新高频Linux运维面试题目分享
|
1月前
|
Linux 数据安全/隐私保护 Perl
解锁Linux高手秘籍:文件操作+命令解析大揭秘,面试场上让你光芒万丈,技术实力惊艳四座!
【8月更文挑战第5天】Linux作为服务器与嵌入式系统的基石,其文件管理和命令行操作是技术人员必备技能。本文从文件操作和基础命令两大方面,深入浅出地解析Linux核心要义,助你在面试中脱颖而出。首先探索文件系统的树状结构及操作,包括使用`ls -la`浏览文件详情、`touch`创建文件、`rm -r`慎删目录、`cp`与`mv`复制移动文件、以及利用`find`搜索文件。接着掌握命令行技巧,如用`cat`、`more`和`less`查看文件内容;借助`grep`、`sed`与`awk`处理文本;运用`ps`、`top`和`kill`管理进程;并通过`chmod`和`chown`管理文件权限。
62 8
|
1月前
|
监控 Linux 数据安全/隐私保护
Linux大神养成记:掌握这些逆天命令与快捷方式,面试秒变MVP,让你的技术实力燃爆全场!
【8月更文挑战第5天】Linux作为开源领域的核心,熟悉其基本命令对系统管理员和技术人员至关重要。本文精选了面试中常考的Linux命令,覆盖文件管理、文本处理、进程监控及权限调整等关键领域,并介绍了提高效率的快捷方式。通过掌握如`ls -l`、`grep &quot;error&quot;`、`top`、`chmod 755`等实用命令,以及Tab自动补全、历史命令浏览等功能,不仅能显著提升日常工作效能,还能在求职面试时展现出扎实的技术功底。
46 4
|
3月前
|
存储 网络协议 编译器
【干货总结】Linux C/C++面试知识点
Linux C/C++基础与进阶知识点,不仅用于面试,平时开发也用得上!
519 11
|
2月前
|
Linux 编译器 Shell
拼多多面试 Linux下一个应用程序开始执行到main被调用之间经历了什么?
在Linux中,程序启动到`main`调用涉及加载器、内核、动态链接器和C运行时。`execve`系统调用加载ELF文件,内核创建进程,加载段,设置栈和调用动态链接器。动态链接器解析符号,重定位,执行初始化。C运行时初始化堆栈,调用`main`。从`_start`到`main`的流程包括环境设置和函数调用。
61 0
|
4月前
|
运维 Linux 程序员
最全树莓派4B安装64位Linux(不用显示器键盘鼠标),Linux运维面试送分题
最全树莓派4B安装64位Linux(不用显示器键盘鼠标),Linux运维面试送分题
最全树莓派4B安装64位Linux(不用显示器键盘鼠标),Linux运维面试送分题
|
3月前
|
消息中间件 Unix Linux
[高频]Linux中常见的命令及常见面试题
[高频]Linux中常见的命令及常见面试题
|
2月前
|
存储 Java Linux
Java面试之Linux和docker
Java面试之Linux和docker
31 0
|
4月前
|
运维 Linux Docker
ChatGLM3在Docker环境部署(1),Linux运维电话面试技巧
ChatGLM3在Docker环境部署(1),Linux运维电话面试技巧