西邮Linux2021年面试题(下)

简介: 西邮Linux2021年面试题

请问一个 C 语言程序从源代码到可执行文件中间会进行哪些过程,你能简单描述一下每个环节都做了什么事情吗?

1、预处理


在预处理阶段,编译器主要作加载头文件、宏替换、条件编译的作用。一般处理带“#”的语句。


2、编译


在编译过程中,编译器主要作语法检查和词法分析。我们可以通过使用 -S 选项来进行查看,该选项预处理之后的结果翻译成汇编代码。


3、汇编


在汇编过程中,编译器把汇编代码转化为机器代码。


4、链接


链接就是将目标文件、启动代码、库文件链接成可执行文件的过程,这个文件可被加载或拷贝到存储器执行。

请解释一下这行代码做了什么?

puts((char *)(int const[]){
    0X6F796958, 0X6E694C75, 0X72477875,
    0X3270756F, 0X313230, 0X00000A});

定义了一个新数组const,并初始化。之后强制类型转换为char类型指针,其内容被作为char类型输出了出来。

请随机输入一串字符串,你能解释一下输出结果吗?

int main(int argc, char *argv[])
{
    char str[1121];
    int key;
    char t;
    fgets(str, 1121, stdin);
    for (int i = 0; i < strlen(str) - 1; i++)
    {
        key = i;
        for (int j = i + 1; j < strlen(str); j++)
        {
            if (str[key] > str[j])
            {
                key = j;
            }
        }
        t = str[key];
        str[key] = str[i];
        str[i] = t;
    }
    puts(str);
    return 0;
}

通过冒泡排序实现对字符的排序。其中使用fgets来读取用户的输入。

用循环和递归求 Fibonacci 数列,你觉得这两种方式那种更好?说说你的看法。如果让你求 Fibonacci 数列的第 100 项,你觉得还可以用常规的方法求解吗?请试着求出前 100 项的值(tip 大数运算)。

递归代码简洁,但时间复杂度高。循环代码较递归繁琐,但耗时短。

使用大数加法实现斐波那契数列

#include <stdio.h>
#include <string.h>
int a[1005][1005];
int main()
{
  int T;
  scanf("%d",&T);
  while(T--)
  {
    int n;
    scanf("%d",&n);
    int c;
    int d=0;
    memset(a,0,sizeof(a));
    a[1][0]=1;a[2][0]=1;
    for(int i=3;i<=n;i++)
    {
      c=0;
      for(int j=0;j<=d;j++)
      {
          a[i][j]=a[i-1][j]+a[i-2][j]+c;
        c=a[i][j]/10;
        a[i][j]%=10;
      }
      while(c!=0)
      {
        a[i][++d]=c%10;
        c/=10;
      }
    }
    for(int i=d;i>=0;i--)
    {
      printf("%d",a[n][i]);
    }
    printf("\n");
  }
  return 0;
}
相关文章
|
7月前
|
存储 运维 关系型数据库
2024年最全ceph的功能组件和架构概述(2),Linux运维工程面试问题
2024年最全ceph的功能组件和架构概述(2),Linux运维工程面试问题
2024年最全ceph的功能组件和架构概述(2),Linux运维工程面试问题
|
7月前
|
运维 Linux Docker
Docker笔记(个人向) 简述,最新高频Linux运维面试题目分享
Docker笔记(个人向) 简述,最新高频Linux运维面试题目分享
|
4月前
|
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`管理文件权限。
83 8
|
4月前
|
监控 Linux 数据安全/隐私保护
Linux大神养成记:掌握这些逆天命令与快捷方式,面试秒变MVP,让你的技术实力燃爆全场!
【8月更文挑战第5天】Linux作为开源领域的核心,熟悉其基本命令对系统管理员和技术人员至关重要。本文精选了面试中常考的Linux命令,覆盖文件管理、文本处理、进程监控及权限调整等关键领域,并介绍了提高效率的快捷方式。通过掌握如`ls -l`、`grep &quot;error&quot;`、`top`、`chmod 755`等实用命令,以及Tab自动补全、历史命令浏览等功能,不仅能显著提升日常工作效能,还能在求职面试时展现出扎实的技术功底。
68 4
|
6月前
|
存储 网络协议 编译器
【干货总结】Linux C/C++面试知识点
Linux C/C++基础与进阶知识点,不仅用于面试,平时开发也用得上!
605 17
|
5月前
|
Linux 编译器 Shell
拼多多面试 Linux下一个应用程序开始执行到main被调用之间经历了什么?
在Linux中,程序启动到`main`调用涉及加载器、内核、动态链接器和C运行时。`execve`系统调用加载ELF文件,内核创建进程,加载段,设置栈和调用动态链接器。动态链接器解析符号,重定位,执行初始化。C运行时初始化堆栈,调用`main`。从`_start`到`main`的流程包括环境设置和函数调用。
73 0
|
7月前
|
运维 Linux 程序员
最全树莓派4B安装64位Linux(不用显示器键盘鼠标),Linux运维面试送分题
最全树莓派4B安装64位Linux(不用显示器键盘鼠标),Linux运维面试送分题
最全树莓派4B安装64位Linux(不用显示器键盘鼠标),Linux运维面试送分题
|
6月前
|
消息中间件 Unix Linux
[高频]Linux中常见的命令及常见面试题
[高频]Linux中常见的命令及常见面试题
|
5月前
|
存储 Java Linux
Java面试之Linux和docker
Java面试之Linux和docker
47 0
|
7月前
|
运维 Linux Docker
ChatGLM3在Docker环境部署(1),Linux运维电话面试技巧
ChatGLM3在Docker环境部署(1),Linux运维电话面试技巧