学习日志0712

1、  嵌入式开发与传统开发的区别?(同类问题:单片机开发与嵌入式开发的区别)

有无操作系统。传统开发由软件和硬件组成,而嵌入式开发在软件和硬件之间加入了操作系统。

2、移植操作系统的好处有哪些?

未移植操作系统之前,传统开发软硬件耦合度高,软件的移植性差,对开发人员的要求比较高,导致企业人才欠缺及产品创新不足。移植操作系统以后,降低软硬件的耦合度,增强软件的移植性,降低对开发人员的要求,增强产品创新。

提供多任务机制;提供网络协议栈;提供开源的软件和工具。

3、嵌入式工程师的岗位划分有哪些?所具备的能力是什么?

应用软件工程师:(Linux c/c++1、精通C语言  2、熟悉一款操作系统

系统软件工程师:(底层软件)驱动BSP1、精通C语言 2、熟悉汇编 3、理解操作系统的实现 4、熟悉硬件工作原理

4、人工智能和嵌入式之间有什么关系?人工智能和大数据、云计算的关系?

人工智能中大量的使用了嵌入式的处理器如CPUGPUDPUTPU

人工智能的工作方式为机器具备人的思维→机器学习(大量的有用数据)→深度学习

其中机器学习中需要的大量的有用数据需要大数据和云计算来实现,大数据筛选数据、分析数据,云计算处理数据。

5、CPUGPUDPUTPU分别是什么?

COU:中央处理器;GPU:图形处理器;DPU:屏幕驱动器;TPU:控制芯片,可以在不占用CPU性能的基础之上对玩家的CPU通过硬件控制的方式进行超频。

6、嵌入式操作系统有哪些?Vxworks的特点?Ucosii的特点?

LinuxuCLinuxuC/OS-IIuC/OS-IIIVxworkseCosWinCEPlamOSSymbian

Vxworks的特点是保密性好,实时性传输,适用于军方及其它高精度作业

ucosii适用于单片机,为最小的操作系统,仅有五千行左右的代码。

7、什么是实时性?哪些操作系统具有实时性?

实时性:规定的时间完成规定的动作。

Vxworksucosii的操作系统具有实时性。

8、嵌入式的就业前景和以后的发展方向如何?

嵌入式不会过时,在日新月异的互联网时代,跟上潮流很重要

嵌入式人工智能、应用软件开发、系统软件开发

9、Linux操作系统有哪些特点?

一点哲学:一切皆为文件

开放性、多用户、多任务、良好的任务界面、设备独立性、丰富的网络功能、可靠的安全系统、良好的移植性

10、Linuxunix操作系统的区别?

Linux相比于unix免费且开源,更加完善unix的功能

11、虚拟机的作用是什么?主流的虚拟机有哪些?

在电脑上模拟若干台PC,每台PC可以运行单独的操作系统而互不干扰,可以实现一台电脑“同时”运行几个操作系统,还可以将这几个操作系统连成一个网络

主流虚拟机:VirtualBoxVMware WorkstationVirtual PC

12、分别阐述POSIXGNUGPL的理解?

POSIX标准:针对操作系统的标准化协议(类UNIX操作系统)

GUN计划:自由软件集体协作计划,目标是创建一套完全自由的操作系统GNU

GPL协议:通用公共许可协议

13、Linux发行版有哪些?各自的特点是什么?

Redhat红帽:基于RPM包和YUM包的管理方式,包分发方式是编译好的二进制文件

CentOS:社区企业操作系统,更加稳定

Fedora:新颖、多功能并且自由和开源的操作系统

OpenSUSE:免费,桌面绚丽,性能强

Gentoo:极高的自定制性,操作复杂

Ubuntu:界面友好,容易上手,对新款硬件具有极强的兼容能力

14、Linuxwindows的区别?

文件格式不同,windows的操作内核是NT,而Linuxshell;windows硬盘文件格式是fat32NTSF,而LIinux需要的文件格式是ext2ext3且操作系统还多一个SWAP格式的交换分区

15、Linux的文件类型有哪些?

普通文件-  目录文件d 设备文件c/b 链接文件l 管道文件p 共享文件s 堆栈文件f

16、罗列Linux下文件操作的命令有哪些?(常见面试命令)

ls  -l -a mkdir -p cd touch echo cat cp mv rm rm -f find tree man reboot clear

17、如何配置vim编辑器?Linux下还有哪些比较常用的文本编辑器?

使用超级用户root用户,cd进入当前用户主工作目录,输入vim .vimrc进行vim配置

Vim   Emacs   Notepad++   TextMate   Sublime Text   

18、如何压缩、解压文件?命令是什么?

tar :打包压缩 -x 压缩文件 -z gzip压缩文件

19、gcc编译器的优点有哪些?还知道哪些C的编译器?

命令行比图形界面更容易使编译自动化

Viual C++     GNU C++    Clang

20、什么是交叉编译器?交叉编译器的作用?为什么需要交叉编译?

当前平台编写,不同平台运行

不同的处理器有不同的汇编,不同的汇编有不同的机器码

21、C语言中源文件到可执行文件经历哪几个步骤?每个步骤具体做哪些工作?

1、预处理 2、编译 3、汇编 4、链接

预处理 1、头文件展开 2、宏替换 3、条件编译

编译  1、语法检查、词法分析

汇编  C语言转化为汇编语言

链接  将汇编语言转化为机器码

22、#include<stdio.h>#includestdio.h的区别?

搜索路径不同,<>在系统文件夹寻找,””先在当前文件夹寻找,后在系统文件夹中寻找

23、分别阐述 -l  -w -Wall -O3的作用?

-l  显示文件和目录中的详细资料

-w 关闭警告

-Wall  打开全部警告

-O3  第三级优化

24、什么是库文件?库文件的特点?

库文件:用保存函数或者变量,只能使用函数或者变量,但是看不到具体实现

特点:1、数据结构化,数据之间具有联系,面向整个系统

2、数据的共享性高,冗余度低,易扩充

3、数据独立性高  4、数据由DBMS统一管理和控制

25、Linux下库文件的分类有哪些?库文件的存放路径是什么?

分类:静态库,动态库

存放路径:gcc xxx.c -lmyku

26、静态库和动态库的区别?

静态库 .a1、可执行文件过大 2、更新不利 3、易代码部署 4、执行速度块)   

动态库.so1、执行速度慢 2、易于升级 3、可执行文件小 4、不易进行代码部)

2 7、如何制作和使用静态库和动态库?

静态库:停止在编译阶段 gcc -c

        ar rcs libadd.a add.c

gcc main.c -ladd 指定库

Gcc main.c -ladd -L 指定库的位置

动态库:gcc -shared -FPIC -o libbcal . so add.c sub.c(创建)

       gcc main.c /libcal.so -o main

28、GDB的特点有哪些?

使程序停在你想停的位置,可以查看变量,寄存器,内存及堆栈,调试多种语言。

29、分别阐述 run break info break  continue finish命令的作用?

run:使程序运行

break:跳出停顿 找一个断点使程序代码停顿

Info break:显示断点信息

Continue:使程序跳过断点继续运行

Finish:结束程序

30、make工程管理的作用?

源文件过多时,gcc不再适用,一个工程有许多的源文件,用make编译,加快编译速率。

31、makefile的语法是什么?(定义、执行顺序)

make所看到的第一项规则会被当做默认规则使用

一个规则可分为三个部分   目标:依赖1 依赖2 。 。

                         命令(命令前必须使用一个制表符(TAB))

32、企业级工程目录是如何创建?分别描述三个不同makefile的作用?

建立一个文件夹,在文件夹中以功能为名再建立相应的文件夹,相应的文件夹中给一个src文件夹用以防止 .c .o文件,相应文件夹中放置相应的makefile

1、保存了编译器和连接器的参数选项

2、表述了所有源文件之间的关系

3、创建make程序



代码如下所示

cal:

#include<stdio.h>              //头文件
int main()                //主函数
{
    int a;          //定义一个变量a
    int b;                    //定义一个变量b
    char c;                   //定义一个运算符c
    scanf("%d",&a);     //输入变量a
    scanf("%c",&c);          //输入运算符c
    scanf("%d",&b);          //输入变量b
    switch(c)                //switch选择函数
    {
        case'+':printf("sum = %d\n",a + b );break;      //+号选项时,输出a+b,后跳出
 
        case'-':printf("sub = %d\n",a - b );break;   //-号选项时,输出a-b,后跳出
 
        case'*':printf("mul = %d\n",a * b );break;      //*号选项时,输出a*b,后跳出
 
        case'/':printf("div = %d\n",a / b );break;    ///号选项时,输出a/b,后跳出
 
    }

}

recursion:

#include<stdio.h>                  //头文件
int main()                         //定义一个主函数
{
    int fac(int n);                //定义一个函数
    int in;                         //定义一个输入变量in
    int out;                        //定义一个输出变量out
    printf("请输入数字:");          //输入
    scanf("%d",& in);               //输入
    out=fac(in);                      //函数计算输出
    printf("%d!=%d\n",in,out);        //输出out
    return 0;                         //返回0
}
int fac(int in)                     //定义一个函数
{
    int f;                         //定义一个辅助变量
    if(in<0)                       //如果输入小于0   
        printf("n<0,data error!"); //输出 数据错误
    else if(in == 0 || in==1)        //若n=0或者n=1  
        f=1;                       // 得到结果 f=1
    else                           //如果输入大于等于2
        f=fac(in-1)*in;              //计算阶乘
    return(f);                     //返回数据
}


string;

#include<stdio.h>         //头文件
#include<string.h>        //头文件
int main(void)           //定义一个函数
{
    char str[64]={0};     //定义一个str的数组
    char str1[16]={0};     //定义一个str1的数组
    int i,j,x;             //定义i,j,x三个变量
    printf("请输入\n");  //输出输入提示
    gets(str);           //输入原字符串
    puts(str);           //输出字符串
    printf("\n");         //跳行
    i=strlen(str);        //放置变量
    j=strlen(str1);       //放置变量
    printf("the string lenth is %d\n",i);  //输出变量i的长度
    printf("the string lenth is %d\n",j);  //输出变量j的长度
    x=substring(str,str1);                 //调用函数
    printf("then anwser is %d\n",x);       //输出答案
    return 0;                              //返回0
}
int substring(char *str,char *str1)        //定义函数
{
    int x=0;                               //定义变量x
    char *p;                               //p指针
    do                                     //do函数
    {
        p=strstr(str,str1);                //放置变量
 if(p!=NULL)                        //if语句
 {
     str=p+1;                       //变量指针+1
     x=x+1;                         //变量x+1
 }
    }
    while(p!=NULL);                        //while语句
    return x;                              //返回x
}


tringle:

#include<stdio.h>    //头文件
int i;               //整形一个变量i
int j;               //整形一个变量j
int main()           //主函数 
{
    int a[10][10];                        //定义一个10x10的二维数组
    for( i = 0;i < 10; i ++)                     //for循环i10次,构成二维数组
    {
 for( j = 0 ;j <= i; j ++)                 //for循环j10次,构成二维数组
 {
            if( j == 0 || i == j)                 //令j=0或者i=j
 {
     a[i][j] = 1;                          //第一列或者i=j列均为1
 }
 else                                     //若存在别的情况
 {
        a[i][j] = a[i-1][j-1] + a[i-1][j];    //从第二行起,中间的没一个数是上一行里相邻两个数的和
 }
 }
    }
     for( i = 0; i < 10; i ++ )           //for循环i10次
     {
     for( j = 0; j <= i ; j ++ )          //for循环j10次
     {
         printf("%5d", a[i][j]);          //输出数组结果
     }
         printf("\n");                    //跳行
     }
}





猜你喜欢

转载自blog.csdn.net/qq_42661152/article/details/81020618