美文网首页
阿里面试

阿里面试

作者: 韩叨叨 | 来源:发表于2017-03-12 20:27 被阅读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 那样,将儿时的梦想化作现实,是有可能的。

    相关文章

      网友评论

          本文标题:阿里面试

          本文链接:https://www.haomeiwen.com/subject/lddxnttx.html