iOS 面试题1

一、请填写BOOL、float、指针变量 与 “零值”比较的if 语句:

二、用变量a给出下面的定义

a) 一个指向整数的指针 

b)一个指向指针的指针,它指向的指针是指向一个整型数 

c) 一个指向有10个整型数数组的指针 

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

char str[] = "Hello";

char *p = str;

int  n = 10;

请计算: sizeof(str) =     sizeof(p) =    sizeof (n) = 

四、简答题

1、介绍内存的几大区域

2、用预处理指令 #define 声明一个常数,用以表明一年中有多少秒

3、请简述以下两个for循环的优缺点

第一种:

for (i = 0 ; i < N ; i++ ){

    if (condition)

         DoSomething();

    else

         DoOtherthing();

}

第二种:

if (condition){

     for (i = 0; i < N ; i++)

         DoSomething();

}else {

      for (i = 0; i < N ; i++)

         DoOtherthing()

}

4、 对于属性NSString *title  用重新变法实现synthesized 方法即实现自己的getter 和setter方法

5、怎么防止别人反编译你的app?

6、我们说的objective-c是动态运行时语言是什么意思?

7、开发中回调有三种方式: delegate 、 notification、target-action 介绍一下这三种方式,并说明它们之间的不同

8、使用GCD 如何实现这个需求, A\B\C三个任务并发,完成后执行任务D

9、在swift 中变量类型后面添加问号? 和感叹号 ! 代表什么?


五、 有关内存的思考题

第一种

void GetMemery2(char **p , int num){

*p = (char *) malloc (num);

}

void Test (void){

char *str = NULL;

GetMemory(&str, 100);

strcpy(str, "hello"); 

printf(str);

}

请问运行Test 函数会有什么样的结果?

第二种

char *GetMemory(void){

char p [] = "hello world";

return p;

}

void Test(void){

char *str = NULL ;

str = GetMemory();

printf(str);

}

请问运行Test 函数会有什么样的结果

六、使用objective-c编程实现排序算法中的快速排序

七、口头的问题:SDWebImage 框架,内部的实现是这样的?

八、口头问题:多线程有几种方式,GCD有哪几种方法

九、口头问题:tableView的优化处理

十、口头问题:事件响应链,比如一个按钮的点击

十一、口头问题:介绍keyWindow

十二、口头问题:有用过映射嘛?


后续添加答案,有答案的小伙伴请在下面评论作为参考哦!


一、

Bool a ; if (a){ // 代表true  }else{  // 代表false }

嗯,这个 float 比较复杂了,零值:接近 0.000001(----需要细究

指针就是  if(a){ // 这样就表示是否存在了~  } //  反正不能写nil, 也不能写NULL ;  //  此时面试官已经对我很崩溃了~~

二、

int *a

int **a

int * a[10]

三、在32位中,int 类型都是4字节,一个指针都是4个字节

sizeof(str) = 6

sizeof(p) = 4

sizeof(n) = 4

int 类型16位是2个字节,64位是8个字节

四、(参考地址

1、介绍下内存的几大区域?

内存分配方式:

【1】静态存储区域分配,内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在、例如全局变量,static 变量;

【2】、在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放,栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限

【3】、从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存(Objective-C是 release),动态内存的生存期由程序员决定,使用非常灵活,但如果在堆上分配了空间,就有责任回收它,否则运行的程序会出现内存泄漏,频繁地分配和释放不同大小的堆空间将会产生堆碎块。

2、程序的内存空间

一个由C/C++编译的程序占用的内存分为以下几个部分,

【1】、栈区  (stack) -  由编译器自动分配释放,存放为运行函数而分配的局部变量、函数参数、返回数据、返回地址等,其操作方式类似于数据结构中的栈。

【2】、堆区(heap)- 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收,分配方式类似于链表。

【3】、全局区(静态区static)- 存放全局变量、静态数据、常量。程序结束后由系统释放。

【4】、文字常量区-常量字符串就是放在这里的,程序结束后由系统释放。

【5】、程序代码区-存放函数体(类成员函数和全局函数) 的二进制代码

总的来说有这几种:内存区域有栈、堆、文字常量区、静态存储区、代码区

2、用预指令表示一年有多少秒

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

define 不能以分号结束,括号的使用

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

如果你在你的表达式中用到UL(表示无符号长整型)。

3、两个for 循环一个是在循环中判断,一个是判断后循环,第一个在循环中判断是打断执行,消耗性能;

4、对于NSString * title需要写getter和setter方法:

-(void)setTitle:(NSString *)title{

_title = [title copy];

[title release];

}

5、怎么防止别人反编译你的app ?

首先知道他们如何反编译你的app:

【1】、插件法(仅越狱),iTools工具替换文件法(常见为文档破解),八门神器修改。

【2】、网络安全风险:截获网络请求破解通信协议并模拟客户端登录,伪造用户行为,对用户数据造成危害。

【3】、应用程序函数PATCH破解,利用FLEX补丁软件通过派遣返回值来对应进行patch破解。

【4】、源代码安全风险,通过使用ida等反汇编工具对ipa进行逆向汇编代码,导致核心代码逻辑泄露与被修改,影响应用安全。

以下的加密技术:

【1】、对NSUserDefaults , sqlite文件数据加密,保护账号和关键信息;

【2】、URL 编码加密,对程序中出现的URL进行编码加密,防止URL被静态分析。

【3】、对客户端传输数据提供加密方案,有效防止通过网络接口的拦截获取数据

【4】、对应用程序的方法名和方法体进行混淆,保证源代码被逆向后无法解析代码

【5】、对应用程序逻辑结构进行打乱,保证源代码可读性降到最低。

6、我们说Objective-c是动态运行时语言是什么意思?

解:因为objective-c 的标志性特性就是它的消息机制,(知乎上的“不二乎”)的答案似乎比较好,虽然也有网友(知乎上的“冯东”)说到真正的原理 ,runtime的使用了多少 bookkeeping数据,但是面试官比较喜欢听到的是这样的吧:

1、类和对象都是 id, 在给你一个id的前提下,无法直观的知道这个对象是类对象还说类本身,简单的可以简化成runtime管理的都是id,(id 的本质其实是objc_object, objc_class头部其实就是id, 也就是isa).

2、Class在objc中是动态创建的,selector, method ,imp, protocol都是随后绑定上去的,(即所谓的运行时绑定)

3、通过runtime能够查出当前运行时的环境中所有的类,每个类中的方法,每个类消息的绑定,每个类的实现协议,每个协议的定义,每个类当前消息换成等一切你想知道的东西。

4、类的方法(消息)调用是间接的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • iOS面试小贴士 ———————————————回答好下面的足够了------------------------...
    不言不爱阅读 1,970评论 0 7
  • 史上最全的iOS面试题及答案 iOS面试小贴士———————————————回答好下面的足够了----------...
    Style_伟阅读 2,346评论 0 35
  • 多线程、特别是NSOperation 和 GCD 的内部原理。运行时机制的原理和运用场景。SDWebImage的原...
    LZM轮回阅读 2,004评论 0 12
  • 1.写一个NSString类的实现 +(id)initWithCString:(c*****t char *)nu...
    韩七夏阅读 3,754评论 2 37
  • 史上最全的iOS面试题及答案 迷途的羔羊--专为路痴量身打造的品牌。史上最精准的定位。想迷路都难!闪电更新中......
    南虞阅读 1,500评论 0 8