阿里面试

2017-03-12  本文已影响83人  韩叨叨

当时是下午的时候,吃完晚饭和同学在宿舍讨论下午上机的一个题目。突然电话响了,定睛一看,杭州来电,愣了两秒,给旁边的小伙伴看了一下,他都跳了起来,怎么这时候来了,赶紧坐好准备接电话。

首先,面试官说明他是阿里的面试官,让我进行一下自我介绍,我当时就语无伦次了,毕竟第一次嘛。我就慢慢的,缓缓地说了一下我学iOS,什么时候开始的,平时怎么学的,都做了一些什么,然后讲了一下自己的课余生活等等,大概一分多钟吧。

然后面试官就说那就看看你的项目上写的一些东西吧。

1、keychain的安全性
iOS的keychain服务提供了一种安全的保存私密信息(密码,序列号,证书等)的方式,每个iOS程序都有一个独立的keychain存储。
相对于NSUserDefaults、文件保存等一般方式,ychain保存更加安全,而且keychain里保存的信息不会因APP被删除而丢失,所以重装APP后,keychain里的数据还能使用。
我们可以把keychain理解为一个Dictionary,所有数据都以key-value的形式存储,可以对这个Dictionary进行增删改查这四个操作。
对于每一个应用来说,keychain都有两个访问区,私有区和公共区。
私有区是有一个sandbox,本程序存储的任何数据都对其他的程序不可见。
而要想在将存储的内容放在公共区,需要先声明公共区的名称,官方文档管这个名称叫“keychain access group”,

1938365-99bc3fa299c6f218.jpeg

公共区名称前面必须是你的yourAppleID.com.yourCompany.com.whatever,声明的方法是新建一个plist文件,这个文件的路径要配置在Project->build setting->Code Signing Entitltments里,否则公共区无效,配置好后,须用你正式的证书签名编译以才可以通过,否则Xcode会告诉你code setting有问题。
所以,苹果公司限制了你只能同公司的产品共享keychain数据,别的公司访问不了你公司产品的keychain。

之后在公众号了解到新情报说是最新iOS10.3有了变动:
如果APP被删除,之前存储于keychain中的数据也会被一同删除。
如果使用了keychain group,只要当group所有相关的APP删除时,keychain中的数据才会被删除。
这样的话
有的APP重装就需要登录啦
基于设备的免费使用功能就无法实现了
短信费用上升
因为有的APP以手机注册的,为了节省验证费用直接读取keychain,10.3之后的话,每次重装的话,都要在发送短信验证一次。
2、http,tcp/ip
三次握手,四次挥手。
3、JSON解析的优化(YYModel)
YYModel的核心是通过runtime获取结构体中的Ivars的值,将此之定义为key,然后给key赋value值,然后KVC。
之后可能会问KVC,KVO。

在model属性和字典的属性名不一致时,要重写转换的方法。

/*!
 *  1.该方法是 `字典里的属性Key` 和 `要转化为模型里的属性名` 不一样 而重写的
 *  前:模型的属性   后:字典里的属性
 */

+ (nullable NSDictionary<NSString *, id> *)modelCustomPropertyMapper{

    return @{@"messageId":@"i",
             @"content":@"c",
             @"time":@"t"};
}
/*!
 *  2. 下面的两个方法 `字典里值`与`模型的值`类型不一样`需要转换`而重写的方法
 *   NSDate *time     dic[@"t"]是double类型的的秒数
 */

/// Dic -> model
- (BOOL)modelCustomTransformFromDictionary:(NSDictionary *)dic {

    self.time = (NSDate *)[NSDate dateWithTimeIntervalSince1970:[dic[@"t"] doubleValue]/1000];

    return YES;
}

/// model -> Dic
- (BOOL)modelCustomTransformToDictionary:(NSMutableDictionary *)dic {

    dic[@"t"] = @([self.time timeIntervalSince1970] * 1000).description;

    return YES;
}

4、corelocation如何定位以及两个位置之间的最短路径
这里问到算法,迪杰斯特拉或者是其他的路径算法,会问时间复杂度与算法思想。
以及位置信息更新的优化。

最后,面试官问我有什么问题问他吗?

我说,如果有幸去实习的话,会有培训吗,毕竟自己没有亲身参加过项目的开发流程。。

面试官说会有的,一带一,然后布置任务,做完之后作总结分享等等。

最后面试官还说,要有想象力,创造力,比如pokemonGO 那样,将儿时的梦想化作现实,是有可能的。

上一篇下一篇

猜你喜欢

热点阅读