2024年安卓最全YYModel源码学习,美团三面后多久hr面试

最后

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

上面分享的腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。

【Android思维脑图(技能树)】

知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。

【Android高级架构视频学习资源】

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

image.png

对照上图,再对各个类做一些简单的介绍

YYClassIvarInfo


类结构中主要包含了 ivar、name等一些基本成员变量,用于保存成员变量的信息。通过以下函数进行赋值。


- (instancetype)initWithIvar:(Ivar)ivar;



##YYClassMethodInfo

类结构中主要包含SEL、IMP、name等一些基本属性,用于保存函数的信息

通过以下函数进行赋值


- (instancetype)initWithMethod:(Method)method;



##YYClassPropertyInfo

类结构中包含name、getter、setter属性,用于保存成员属性的信息。通过以下函数进行赋值


- (instancetype)initWithProperty:(objc_property_t)property;



##YYClassInfo

类结构中包含superCls、metaCls、name等一些类相关的信息。同时也将上述三个类做为类的一部分。通过以下函数进行赋值。


+ (nullable instancetype)classInfoWithClass:(Class)cls;



此函数做了2部分工作,1)判断是否有缓存,有的话就取缓存数据 2)没有缓存数据的话通过以下函数进行赋值然后缓存。


- (instancetype)initWithClass:(Class)cls;



_YYModelPropertyMeta

类结构中主要包含

YYClassPropertyInfo对象、

name、mappedToKey等一些相关的信息,用来描述当前实例的属性信息。

通过以下函数进行赋值


+ (instancetype)metaWithClassInfo:(YYClassInfo *)classInfo propertyInfo:(YYClassPropertyInfo *)propertyInfo generic:(Class)generic;



_YYModelMeta

类结构中包含了当前类的信息和不同情况下的属性数组。看定义的类结构最直观。


@interface _YYModelMeta : NSObject {

    YYClassInfo *_classInfo;

    /// Key:mapped key and key path, Value:_YYModelPropertyMeta.

    NSDictionary *_mapper;

       /// Array, all property meta of this model.

    NSArray *_allPropertyMetas;

    /// Array, property meta which is mapped to a key path.

    NSArray *_keyPathPropertyMetas;

    /// Array, property meta which is mapped to multi keys.

    NSArray *_multiKeysPropertyMetas;

    /// The number of mapped key (and key path), same to _mapper.count.

    NSUInteger _keyMappedCount;



   //剩下的省略。。

}



数据流向


看完类的大致结构,再来看下从调用YYModel提供给我们的接口开始,函数之间是如何跳转的,传入的参数又经过了那几道转换。

###yy_modelWithJSON

该接口接受NSDictionary, NSString,NSData三种类型的json串,返回一个新的是实例对象。实现主要包含以下两部分,重点在第二个函数实现。


[self _yy_dictionaryWithJSON:json]  //转成NSDictionary类型数据

[self yy_modelWithDictionary:dic]  //传入NSDictionary数据,返回实例对象



来看下yy_modelWithDictionary是如何将dic数据转换成对象的。核心的函数也是两个。

总结

这次面试问的还是还是有难度的,要求当场写代码并且运行,也是很考察面试者写代码
因为Android知识体系比较庞大和复杂的,涉及到计算机知识领域的方方面面。在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值