iOS 面试iOS-面试题iOS面试题

iOS面试题之人在面试都是套路(四)**软件园外包公司iOS面试

2016-10-27  本文已影响308人  Miu七七

这家公司虽然是外包外派,但是题目的水平啊不亚于大公司。
上题:

软件园外包公司 iOS面试题第一页
软件园外包公司 iOS面试题第二页

问答题

1 static 关键字的作用?

2.OC的优缺点?

OC的理解与特性

3 sprintf, strcpy,memcpy使用上有什么要注意的地方?

4 readwrite,readonly,assign,retain,copy,nonatomic属性的作用?

5 什么时候用delegate,什么时候通知?

区别

-NotificationCenter 通知中心:“一对多”,在APP中,很多控制器都需要知道一个事件,应该用通知;
-delegate 代理委托:
1.“一对一”,对同一个协议,一个对象只能设置一个代理delegate,所以单例对象就不能用代理;
2.代理更注重过程信息的传输:比如发起一个网络请求,可能想要知道此时请求是否已经开始、是否收到了数据、数据是否已经接受完成、数据接收失败。

6 frame和bounds有什么不同?

7 是否可以在一个视图控制器里嵌入两个tableView控制器?

8 堆栈溢出一般是什么原因导致的?

堆和栈的区别

详细知识请移步堆栈的深入个人理解

9 什么函数不能声明虚函数?(C++内容都有)

** 一.首先回顾下什么是虚函数及其作用,以便更好理解什么函数不 能声明或定义为虚函数**:

  1. 定义:
    虚函数必须是基类的非静态成员函数,其访问权限可以是protected或public,在基类的类定义中定义虚函数的一般形式:
  virtual 函数返回值类型 虚函数名(形参表)  { 函数体 }
  1. 作用:
    虚函数的作用是实现动态联编,也就是在程序的运行阶段动态地选择合适的成员函数,在定义了虚函数后,可以在基类的派生类中对虚函数重新定义,在派生类中重新定义的函数应与虚函数具有相同的形参个数和形参类型,以实现统一的接口,不同定义过程。如果在派生类中没有对虚函数重新定义,则它继承其基类的虚函数。
    当程序发现虚函数名前的关键字virtual后,会自动将其作为动态联编处理,即在程序运行时动态地选择合适的成员函数。
  2. 使用方法:
    动态联编规定,只能通过指向基类的指针或基类对象的引用来调用虚函数,其格式:
  指向基类的指针变量名->虚函数名(实参表)

      基类对象的引用名. 虚函数名(实参表)
  1. 其它说明:  
    虚函数是C++多态的一种表现:
    例如:子类继承了父类的一个函数(方法),而我们把父类的指针指向子类,则必须把父类的该函数(方法)设为virtual(虚函数)。  使用虚函数,我们可以灵活的进行动态绑定,当然是以一定的开销为代价。 如果父类的函数(方法)根本没有必要或者无法实现,完全要依赖子类去实现的话,可以把此函数(方法)设为virtual 函数名=0 我们把这样的函数(方法)称为纯虚函数。  如果一个类包含了纯虚函数,称此类为抽象类

二、什么函数不能声明为虚函数:
一个类中将所有的成员函数都尽可能地设置为虚函数总是有益的。
设置虚函数须注意:
1.只有类的成员函数才能说明为虚函数;
2.静态成员函数不能是虚函数;
3.内联函数不能为虚函数;
4.构造函数不能是虚函数;
5.析构函数可以是虚函数,而且通常声明为虚函数。

类里面“定义”的成员函数是内联的,但是仍然可以成为虚函数,那么是不是可以说“内联函数不能成为虚函数”这句话有问题呢,是不是应该改成“显式定义的内联函数不能成为虚函数”。比如下面这个示例程序:

#include   <iostream> 
using   namespace   std; 
class   Base{        
       public:         
       virtual     void   f1(){cout < < "Father " < <endl;}         
}; 
class   Drived1:public   Base{         
       public:             
       void   f1(){cout < < "Son1 " < <endl;}       
 }; 
class   Drived2:public   Base{        
        public:            
        void   f1(){cout < < "Son2 " < <endl;}         
}; 
void   myPrint(Base*   pBs){         
pBs-> f1();         
}         
int   main() {     
     Base   father;    
     Drived1   son1;    
     Drived2   son2;     
     myPrint(&father);     
     myPrint(&son1);     
     myPrint(&son2);         
     system( "PAUSE ");     
     return   0; 
} 
输出:
Father 
Son1
Son2 

10 冒泡排序的时间复杂度是什么?

上代码:

int a[7] = {10,8,5,27,7,11,90};
int z = 0; 
      for (int i =0; i < 7-1; i++) {
            for(int j =0; j < 7 - 1 - i; j++) {
                 if (a[j] > a[j +1]) { 
                     z = a[j]; 
                     a[j] = a[j +1]; 
                     a[j +1] = z;
                 } 
          } 
   } 
     for(inti =0;i <7;i++){ 
            printf("%d ",a[i]);
 }

这不就是O(n^2)吗

11 写出float x与“零值”比较的if语句?

const float EPSINON = 0.00001;
   if ((x >= - EPSINON) && (x <= EPSINON) 

12 全局变量可不可以定义在可被多个.C文件包含的头文件里?为什么?(C++)

有是C++的题目,真是一脸懵啊!
详细请移步[C/C++]在头文件中使用static定义变量意味着什么

13 do......while和while........do有什么区别?

那就写代码才可以看出来:
do...while语句:

do语句 do.....while语句
while语句: while语句 原书请看 《明解C语言》.((日)柴田望洋)

找错题##

试题1:

void test1()
{
    char string[10];
    char *str1 = "0123456789";
    strcpy(string, str1);
}

类型不一样无法拼接

试题2:

void test2()
{
    char string[10], str1;
    int  i;
    for (i = 10; i < 10; i++) {
        str1 = 'a';
    }
    strcpy(string, str1);
}

试题3:

void test3(char *str1)
{
    char string[10];
    if (strlen(str1) < = 10) {
        strcpy(string, str1);
    } 
}

计算题##

以下为window NT下的32位C++程序,请计算sizeof的值

void Func(char str[100])
{
    sizeof(str) = ?
}

void *p = malloc(100);

    sizeof(p) = ?

填空题##

编写一个函数,作用是把一个char组成的字符串循环右移n个。比如“abcdefghi”,如果n = 2,移动后应该为“hiabcdefgh”####

函数头应该是这样的:
//pStr是指向以‘\0’结尾字符串的指针
//steps是要求移动的n
void LoopMove(char *pStr, int step)
{
//请补充。。。。
}

上一篇下一篇

猜你喜欢

热点阅读