2024年Android最全“一盘沙拉”带你入门Dagger2(五)之 (2),被面试官问的android问题难倒了怎么办

学习分享

在当下这个信息共享的时代,很多资源都可以在网络上找到,只取决于你愿不愿意找或是找的方法对不对了

很多朋友不是没有资料,大多都是有几十上百个G,但是杂乱无章,不知道怎么看从哪看起,甚至是看后就忘

如果大家觉得自己在网上找的资料非常杂乱、不成体系的话,我也分享一套给大家,比较系统,我平常自己也会经常研读。

2021最新上万页的大厂面试真题

七大模块学习资料:如NDK模块开发、Android框架体系架构…

只有系统,有方向的学习,才能在段时间内迅速提高自己的技术。

这份体系学习笔记,适应人群:
第一,学习知识比较碎片化,没有合理的学习路线与进阶方向。
第二,开发几年,不知道如何进阶更进一步,比较迷茫。
第三,到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。如果你有需要,我这里恰好有为什么,不来领取!说不定能改变你现在的状态呢!
由于文章内容比较多,篇幅不允许,部分未展示内容以截图方式展示 。

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

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

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

}

```
  1. 创建MyApp,别忘了清单文件注册,使用MyApp来获取,唯一的KnifeComponent

    
    public class MyApp extends Application{
    
    //这里不一定非得使用static,由于我注入的不是Activity,无法用getApplication来得到MyApp的对象(否则还得传入一个Activity),所以为了方便,使用了静态。
    
        private static KnifeComponent knifeComponent;
    
    
    
        @Override
    
        public void onCreate() {
    
            super.onCreate();
    
    //        为了实现局部共享一个实例,
    
    //        我们需要在Application里,首先得到knifeComponent的实例
    
    //        由于Application的onCreate方法,在应用程序里面,只运行一次
    
    //        所以只得到了一个knifeComponent
    
    //       (后面我们通过getKnifeComponent来得到这唯一的一个getKnifeComponent)
    
    //        ok,我们之后会通过这个唯一的KnifeComponent来得到他所连接的KnifeModule
    
    //        所提供的Knife的实例,再把这个实例注入到苹果、梨里面去,从而实现了苹果、梨
    
    //        会共享这个实例。
    
    //        而香蕉里的Knife,我们要重新建立一个Module和Component来获取Knife的新实例
    
    //        这样就实现了Knife的实例,在苹果、梨之间局部共享,而香蕉使用的是另外一个实例
    
            knifeComponent = DaggerKnifeComponent
    
                    .builder()
    
                    .knifeMofule(new KnifeMofule())
    
                    .build();
    
        }
    
    
    
        public  static  KnifeComponent getKnifeComponent() {
    
            return knifeComponent;
    
        }
    
    }
    
    
    
    
  2. 把Knife注入到苹果、梨里面

    
    public class Apple {
    
        @Inject
    
        Knife knife;
    
    
    
        public Apple() {
    
            MyApp.getKnifeComponent().inject(this);
    
            Log.e("knife", "苹果里的knife内存地址:" + knife.toString());
    
        }
    
    
    
    
    
    public class Pear {
    
        @Inject
    
        Knife knife;
    
        public Pear(){
    
            Log.e("TAG", "我是一个梨");
    
            MyApp.getKnifeComponent().inject(this);
    
    
    
            Log.e("knife", "梨里的knife内存地址:"+knife.toString());
    
        }
    
    }
    
    
  3. 测试:内存地址是一样的,证明使用的是同一个实例。

    
    E/knife: 苹果里的knife内存地址:com.demo.dagger2demo2.Knife@16e3e55f
    
    E/knife: 梨里的knife内存地址:com.demo.dagger2demo2.Knife@16e3e55f
    
    

如何让香蕉用另一把刀呢,很简单煎饼果子来一套即可(在写一套Module和Component)

  1. Module

    
    @Module
    
    public class KnifeForBananaModule {
    
        @Provides
    
        public Knife provideKnife(){
    
            Knife knife = new Knife();
    
            return knife;
    
        }
    
    }
    
    
    
    
  2. Component

    
    @Component(modules = KnifeForBananaModule.class)
    
    public interface KnifeForBananaComponent {
    
        void inject(Banana banana);
    
    
    
    }
    
    
  3. 注入到香蕉里

    
    public class Banana {
    
        @Inject
    
        Knife knife;
    
    
    
        public Banana() {
    
            KnifeForBananaComponent knifeForBananaComponent = DaggerKnifeForBananaComponent.builder().knifeForBananaModule(new KnifeForBananaModule()).build();
    
            knifeForBananaComponent.inject(this);
    
            Log.e("knife", "kinfe在香蕉中的内存地址:" + knife.toString());
    
        }
    
    }
    
    
  4. 测试:苹果和梨使用了同一个Knife的实例,而香蕉使用了另一把Knife的实例,实现了局部共享实例啦

    
    E/knife: 苹果里的knife内存地址:com.demo.dagger2demo2.Knife@336e5075
    
    E/knife: 梨里的knife内存地址:com.demo.dagger2demo2.Knife@336e5075
    
    E/knife: kinfe在香蕉中的内存地址:com.demo.dagger2demo2.Knife@10ac0fa3
    
    

    下一篇文章,说说Component之间的依赖关系

总结

【Android 详细知识点思维脑图(技能树)】

image

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

虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。

这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

由于篇幅有限,这里以图片的形式给大家展示一小部分。

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

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

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

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

到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值