• 面经获取 20170515


    1.数组长度为什么不能是变量?

    答:因为定义数组时,分配空间是需要一个固定的值,来确定你所申请的空间的大小。
    如果数组长度个变量,那么数组大小也会改变,在对其使用的时候,就会使用到数组以外的内容,对程序会造成隐患。

    2.C语言中,变量的存储类型有几种?

     答:C语言中的存储类型有auto、extern、register、static 四种

    auto:只能用来标识局部变量的存储类型,auto标识的变量存储在栈区

    extern:用来声明全局变量,如果全局变量未被初始化,那么将被存在BSS区中,且在编译时,自动将其赋值为0.如果已经被初始化,那么就被存在数据区

    register:该类型的变量是由内存调入到CPU寄存器后,常驻在CPU的寄存器中,因此访问该类型的变量时,在很大程度上提高了效率。

    static:被声明为静态类型的变量,无论是全局还是局部,都存储在数据区,如果静态变量没有被初始化,则自动初始化为0,并且只能够初始化一次。

    3.内存的分配方式的分配方式有几种?

    a. 从静态存储区分配:此时的内存在程序编译的时候已经分配好,并且在程序的整个运行期间都存在。全局变量,static变量等在此存储。

    b. 在栈区分配:相关代码执行时创建,执行结束时被自动释放。局部变量在此存储。栈内存分配运算内置于处理器的指令集中,效率高,但容量有限。

    c. 在堆区分配:动态分配内存。用new/malloc时开辟,delete/free时释放。生存期由用户指定,灵活。但有内存泄露等问题。

     4.进程和线程的区别

     线程是指进程内的一个执行单元,也是进程内的可调度实体。与进程的区别:

    a. 调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位。

    b. 并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行。

    c. 拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.

    d. 系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销

     

     

    5 进程间通讯方式有哪些?

    1)管道:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程之间使用。进程的亲缘关系通常是指父子进程关系。

    2)有名管道(FIFO):有名管道也是半双工的通信方式,但是允许在没有亲缘关系的进程之间使用,管道是先进先出的通信方式。

    3)信号量:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

    4)消息队列:消息队列是有消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

    5)信号 ( sinal ) :信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

    6)共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。

    7)套接字( socket ) :套接字也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的进程通信。

    6.结构体和联合体的区别

    对于第2点进行分析,因为union里面仅仅存放一个成员的值,所以union所有成员的值都等于最后进行改动的成员的值。举例:

    0x4241 转化成十进制  0100 0010  0100 0001 = 66 65  

    'a'的ascii为 97 转化为十六进制为 0110 0001 =  61

    由于是小端  所以不论存储还是存取 都是先考虑小端 也就是说 读取先从低地址读 存储先存储到低地址。

  • 相关阅读:
    53. Maximum Subarray
    64. Minimum Path Sum
    28. Implement strStr()
    26. Remove Duplicates from Sorted Array
    21. Merge Two Sorted Lists
    14. Longest Common Prefix
    7. Reverse Integer
    412. Fizz Buzz
    linux_修改域名(centos)
    linux_redis常用数据类型操作
  • 原文地址:https://www.cnblogs.com/china-sdd/p/6857784.html
Copyright © 2020-2023  润新知