• ios开发工程师笔试基础题


    参考:http://www.cnblogs.com/duchengdong/archive/2012/03/30/2425300.html

    1、

    main() 
     {  
       int a[5]={1,2,3,4,5};  
       int *ptr=(int *)(&a+1);   
       printf("%d,%d",*(a+1),*(ptr-1)); 
    } 

    答案:2、5

    分析:*(a+1)即a[1],为2;&a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(本例是5个int) 
      int *ptr=(int *)(&a+1); 
      则ptr实际是&(a[5]),也就是a+5

    2、用预处理指令#define声明一个常数,用以表明一年都多少秒(忽略闰年的情况)

    #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 

    #define的基本语法知识(不能以分号结尾、括号的使用等)

    懂得预处理器将为你计算常数表达式的值

    意识到这个表达式将使一个16位机的整型数据溢出,因此要使用到长整型符号L,告诉编译器这个常数为长整型数

    如果在表达式中用到了UL(表示无符号整型)

    3、写一个标准的宏MIN,这个宏输入两个参数并返回较小的一个

    #define MIN(A,B) ((A) <= (B) ? (A) : (B))  

    4、写一个NSString类的实现

    + (id)initWithCString:(const char *)nullTerminatedCString encoding:(NSStringEncoding)encoding; 
    + (id) stringWithCString: (const char*)nullTerminatedCString  
                encoding: (NSStringEncoding)encoding 
    { 
      NSString  *obj; 
      obj = [self allocWithZone: NSDefaultMallocZone()]; 
      obj = [obj initWithCString: nullTerminatedCString encoding: encoding]; 
      return AUTORELEASE(obj); 
    } 

    5、obj-c有多重继承吗?不是的话有什么替代方法?

    没有,多继承在cocoa中使用protocol委托来实现

    6、obj-c有私有方法吗?是有变量呢?

    方法只有两种:静态方法和实例方法,默认为公有。

    变量:私有、保护和公有。默认为私有。

    @interface Controller : NSObject { NSString *something; } 
    + (void)thisIsAStaticMethod; 
    - (void)thisIsAnInstanceMethod; 
    @end 
    @interface Controller (private) - 
    (void)thisIsAPrivateMethod; 
    @end

    可以通过上述方法来实现方法的私有化

    7、关键字const有什么含意?修饰类呢?static的作用?用于类呢?还有extern C的作用

    • const意味着只读

           const int a;   a为一个常整型数

           int const a;   同上,a为一个常整型数

           const int *a; a为指向常整型数的指针(即整型数不可修改,但是指针可以)

           int* const a; a为指向整型数的常指针(即整型数可以修改,但是指针不可修改)

           int const *a const; a为一个指向常整数的常指针

    • static关键字作用

    (1)函数体内 static 变量的作用范围为该函数体,不同于 auto 变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;

    (2)在模块内的 static 全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;

    (3)在模块内的 static 函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;

    (4)在类中的 static 成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;

    (5)在类中的 static 成员函数属于整个类所拥有,这个函数不接收 this 指针,因而只能访问类的static 成员变量。 

    • extern "C"的作用

    (1)被 extern "C"限定的函数或变量是 extern 类型的;

     extern 是 C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器, 
    其声明的函数和变量可以在本模块或其它模块中使用。

    (2)被 extern "C"修饰的变量和函数是按照 C 语言方式编译和连接的;

    • extern "C"的惯用法  
    (1)在 C++中引用 C 语言中的函数和变量,在包含 C 语言头文件(假设为 cExample.h)时,需进 
    行下列处理: 
    extern "C"  
    {  
    #include "cExample.h"  
    }  
    而在 C 语言的头文件中,对其外部函数只能指定为 extern 类型,C 语言中不支持 extern "C"声明, 
    在.c 文件中包含了 extern "C"时会出现编译语法错误。 
    (2)在 C 中引用 C++语言中的函数和变量时,C++的头文件需添加 extern "C",但是在 C 语言中不 
    能直接引用声明了 extern "C"的该头文件,应该仅将 C 文件中将 C++中定义的 extern "C"函数声明为 
    extern 类型。

    8、框架分类

    • 音频和视频

             Core Audio

             OpenAL

             Media Library

            AVFoundation

    • 数据管理

            Core Data

            SQLite

    • 图片和动画

            Core Animation

            OpenGL ES

            Quartz 2D

    • 网络

            Bonjour

            WebKit

            BSD Sockets

    • 用户应用

            Address Book

            Core Location

            Map Kit

            Store Kit

    9、obj-c的优缺点

         obj-c优点:

        1)Cateogies

        2)Posting

        3)动态识别

        4)指标计算

        5)弹性讯息传递

        6)不是一个过度复杂的C衍生语言

        7)obj-c与c++可混合编程

        obj-c缺点:

        1)不支持命名空间

        2)不支持运算符重载

        3)不支持多重继承

        4)使用动态运行时类型,所有方法都是函数调用,所以很多编译时优化方法都用不到。

     10、关键字volatile有什么含意?并给出三个不同的例子。

    一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确的说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:

    1、并行设备的硬件寄存器(如:状态寄存器)

    2、一个中断服务子程序会访问到的非自动变量

    3、多线程应用中被几个任务共享的变量

    11、简述堆和栈的区别

    栈是编译器自动管理,堆是程序员控制的。

    栈是一块连续的内存区域,是向低地址扩展的数据结构,堆是向高地址扩展的数据结构,是不连续的用链表存储的。

  • 相关阅读:
    Django框架基础之分页
    Django框架基础之session
    Django框架基础之COOKIE
    Django框架基础(二)
    linux挂载/卸载windows共享文件夹
    std::string 字符串操作(分割,去空格)
    Ubuntu sudo不用输入密码的方法
    Qt学习
    ubuntu上利用 checkinstall/dpkg 制作/安装/卸载deb或rpm包
    wxWidgets编译安装
  • 原文地址:https://www.cnblogs.com/foxmin/p/2711386.html
Copyright © 2020-2023  润新知