博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面试题
阅读量:4562 次
发布时间:2019-06-08

本文共 3489 字,大约阅读时间需要 11 分钟。

一、iOS

1、快速排序

平均时间复杂度O(nlogn) 

最差时间复杂度O(n^2)

核心思想是分治

算法过程:

1)从待排序数组中选取一个参照数A。

2)把<=A的数放到A的左边,>A的数放到A的右边。这样就形成了左右两个待排序的子数组。

3)对子数组重复步骤1)和2),直到所有子数组都只包含一个数。 

示例代码:

/** @param arr 待排序子数组 @param l 子数组起点下标 @param r 子数组终点下标 */+ (void)quick_sort:(NSMutableArray *)arr left:(NSInteger)l right:(NSInteger)r {    if(l < r) { // 子数组不止一个数,递归边界条件        NSInteger pivot = [arr[l] intValue]; // 参照数,这里取起点数,这样简单的选取会出现逆序最坏情况,所以会有随机选取参照数等优化        NSInteger pl = l, pr = r; // 游标        while(pl < pr) { // 循环寻找小数、大数            while(pl < pr && [arr[pr] intValue] >= pivot) pr--; // 从右向左找一个比参照数小的数            if(pl < pr) {                // 因[arr[pr] intValue] < pivot,跳出循环                arr[pl] = arr[pr]; // 找到小的数,放左边                pl++;            }            while(pl < pr && [arr[pl] intValue] < pivot) pl++; // 从左向右找一个大于等于参照数的数            if(pl < pr) {                // 因[arr[pl] intValue] >= pivot,跳出循环                arr[pr] = arr[pl]; // 找到大的数放右边                pr--;            }        }        // 因pl=pr跳出循环        arr[pl] = [NSNumber numberWithInteger:pivot];        // 分治,为了减少递归调用代价,会有子数组的数比较少时,采用其他排序,如选择排序等优化        [Algorithm quick_sort:arr left:l right:pl-1];        [Algorithm quick_sort:arr left:pl+1 right:r];    }}

 

2、KVO

参见:

  

3、内存区域

1)栈区:由编译器自动分配和释放;存放函数形参、局部变量;类比数据结构中的栈,连续,后进先出;向低地址增长;分配速度快;

2)堆区:由程序员分配和释放;类比数据结构中的链表,不连续,记录空闲内存块;向高地址增长;分配速度慢;

NSString *str1 = @"abcde"; // str1指针本身在栈中,@"abcde"字符串内容在堆中NSString *str2 = str1; // 指针str2和str1指向同一块堆内存

3)全局区(静态区):

4)文字常量区:

5)代码区: 

 

4、KVC

 

 

5、isa指针

 

6、GCD,NSThread,NSOperationQueue

1)串行和并行,队列中block的执行顺序

2)同步和异步,线程阻塞与否

 

7、TCP,UDP

1、Transmission Control Protocol,传输控制协议。面向连接、可靠、基于字节流的传输层协议。

2、 

 

8、NSString的copy和strong(retain)

 

9、内存管理

引用计数,垃圾回收机制

1)ARC

2)MRC 

 

10、MVC,MVP,MVVM 

1)Model-View-Controller,展示逻辑,Massive View Controller

图10.1

2)Model-View-ViewModel, 

 

 

 

11、Objective-C是动态语言

1)在编译期,只确定要向receiver发送message(即知道selector及相关参数),但是receiver如何响应这条message,就要看运行时期动态绑定到的selector对应的方法实现了。 

 

12、delegate用weak 

 防止循环引用

 

13、property默认关键字

1)基本类型:atomic(原子性),readwrite(可读可写),assign(赋值)

2)Objective-C类型:atomic,readwrite,strong(强引用)

 

14、二叉查找树

 

15、HTTP,HTTPS

1)get和post都不安全,只不过get的数据带在url上,更容易篡改,而post的数据放在包体中,一旦被抓包就都跪了。想要安全,必须进行数据校验,或者使用HTTPS。

 

16、category(类别),extension(类扩展)

1)category有名字;extension没名字,是一种特殊的category

2)category只能添加方法和@dynamic属性,不能添加实例变量

3)extension可以添加方法、属性和实例变量 

 

17、反转链表

 

18、在main函数之前的过程

参见:

 

19、self,super

1)self是方法调用的隐含参数,表示当前对象(实例方法对应实例对象,或者类方法对应类对象)。另一个隐含参数是_cmd,表示方法的selector。

2)但super并不表示父类对象。[self message]和[super message]对应的消息接受者,都是当前对象。区别在于,前者是从当前类开始查找message对应的方法,而后者直接从父类开始查找。 

objc_msgSendSuper(struct objc_super *super, SEL op, ...) // 编译器把[super message]转成C方法调用struct objc_super {      id receiver; // 当前对象     Class superClass; // 当前对象的父类 };
@implementation Son : Father- (id)init{    self = [super init];    if (self)    {        NSLog(@"%@", NSStringFromClass([self class]));        NSLog(@"%@", NSStringFromClass([super class])); // 也是输出Son,即receiver所属的类    }    return self;}@end

 

20、Associate

 

21、block

参见:

 

22、tableview

 

23、持久化

 

24、继承

1)Objective-C不支持多继承(一个子类有多个父类)

 

25、#import,#include,@class

1)#import不重复引入头文件,相当于#include加上#pragma once(或者#ifndef #define #endif)

2)#import<>引入库的头文件(系统库或者用户自定义的库),#import引入普通头文件

3)当只需要用到一个类的类名(例如形参),而不需要任何具体信息,比如属性、实例变量和方法等等,就可以使用@class指令来告诉编译器,存在类A。这样,当类A的头文件发生改变时,那些通过@class指令引用类A的文件就不需要重新编译,从而节省编译时间。

4)@class可以避免头文件相互引入

 

26、#define宏,const常量

1)宏不做类型检查,只是文本替换;const常量有类型检查,更安全。 

 

27、static

1)

 

28、字符串反转

 

29、锁 

1)

 

30、奇数全排前面,偶数全排后面

1)最简单直接的想法 

 

二、微信小程序

 

三、机器学习

 

转载于:https://www.cnblogs.com/yangwenhuan/p/8880923.html

你可能感兴趣的文章
JS中原始值和引用值的储存方式
查看>>
初学C#的简单编程题合集(更新)
查看>>
Linux学习闲谈(一)——Shell基本操作与命令
查看>>
写日志文件
查看>>
python的常用库及文档使用
查看>>
ArcGIS 中要素的查询与修改
查看>>
linux环境下apache2与tomcat6的负载配置
查看>>
powerdesigner相关概念理解
查看>>
求DNA序列中各个碱基的含量
查看>>
高级排序算法--希尔排序
查看>>
TarsGo新版本发布,支持protobuf,zipkin和自定义插件
查看>>
nginx实现网站负载均衡测试实例(windows下IIS做负载实测)
查看>>
深入浅出HTTPS基本原理
查看>>
promise
查看>>
Go 网络编程笔记
查看>>
[]Java面试题123道
查看>>
http 连接复用
查看>>
ASP.NET页面传值汇总
查看>>
观察者模式
查看>>
bundle update: env: ruby_executable_hooks: No such file or directory
查看>>