首页
学习
活动
专区
圈层
工具
发布

Android面试刨根问底之常用源码篇(二):OkHttp, Retrofit,自定义View源码分析总结

如果需要初始化网络请求的参数,如timeout,interceptor等,可以创建Builder,通过builder.build() 创建初client对象。...内部使用了类似gc标记清理算法,对无用的connection进行标记,StramAlloction渐渐变成0,线程池检测并回收,保证多个健康的keep-alive链接 CallServerInterceptor...,底层的网络请求默认使用的Okhttp,本身只是简化了用户网络请求的参数配置等,还能与Rxjava相结合,使用起来更加简洁方便。...App应用程序通过Retrofit请求网络,实际上是使用Retrofit接口层封装请求参数,之后由OkHttp完成后续的请求操作。...静态 动态 在程序运行时创建的代理方式 无侵入增强 jdk动态代理 vs cglib jdk动态代理 只能为接口动态 InvocationHandler必须要实现 invoke的参数中获取参数 invoke

1.6K00
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    面试|2021金三银四铜五安卓菜鸟被锤历程出炉,所有碰壁的心酸都是技术不牢固带来的

    Retrofit 和 OkHttp 是什么关系? Retrofit 是如何通过注解来方便我们 api 调用?基于什么原理。 JetPack 用过哪儿些? ViewModel 用来做什么的?...Java 中的引用类型(强弱软虚)作用以及常用场景。 除了 LeakCanary,你还用过哪儿些,Android Studio 自带工具有使用过吗? 针对重构,有考虑使用组件化和插件化的方式吗?...Flutter 如何开启一个服务? 纯 Flutter 可以调用原生吗? Flutter 通道如何编写?通道的实现方式。 为什么选择 Flutter 的原因。 Flutter 和 RN 的区别?...原生如何调用 Flutter? 如何让你设计一个项目架构,你会从哪儿几个方面入手考虑,为什么? 架构中有哪儿些内容是可以抽取一个公共的东西,让所有的模块都使用?...你的 BaseActivity 中会放什么东西? 你是如何管理 Activity 栈? Activity 启动模式。 页面中如何预防用户连续点击?如何在项目所有点击事件中使用呢?

    88100

    Flutter 网络请求深度解析

    一、核心网络请求库对比1.常用库特性对比在Flutter开发中,选择一个合适的网络请求库是构建稳定应用的第一步。不同的项目规模和团队背景需要不同的技术栈支持。...http、dio、retrofit和chopper是目前最主流的几种选择。http:由Flutter官方团队维护,轻量、简洁,适合初学者或对网络功能要求不高的小型项目。...其API设计清晰,扩展性强,社区生态成熟。retrofit/chopper:借鉴了Android平台的Retrofit框架思想,采用注解方式定义接口,代码结构优雅,适合有Android背景的开发者。...使用_isLoading标志防止重复请求,提升稳定性。refresh()方法简化下拉刷新调用。该模式实现了“请求→状态更新→UI重绘”的闭环,是现代Flutter应用的标准范式。...这种组件可复用于任何异步操作(如网络请求、数据库查询),极大提升UI开发效率。

    19421

    Android开发4年,面试居然只值10K,4年Crud终于悔恨顿悟!

    硬件面试官: Flutter 实际开发经验有多久?使用/了解过 Flutter 混编吗? 怎么优化的 Flutter 包大小? Flutter 中 Element、Widget 简述。...Retrofit 和 OkHttp 是什么关系? Retrofit 是如何通过注解来方便我们 api 调用?基于什么原理。 JetPack 用过哪儿些? ViewModel 用来做什么的?...Rxjava 用的多么?map 和 flatMap 有什么区别。 RxJava 使用哪儿个操作符能保证顺序执行? 如果让你自己设计一个 Glide 你会如何设计?...你知道 Retrofit 是怎么发出的请求吗? 你的 Android 借壳分享微信中 mmessage_content 怎么算出来的? 项目中 Flutter 中是原生开发还是混合开发?...不了解他们很多时候只能停留在api调用。而了解数据结构你才有编写一些深层次东西的可能。 最后一点,静下心来,做自己想做的事,每一个目标都需要一点一滴的努力。

    66500

    Android 必须知道2019年流行的框架库及开发语言,看这一篇就够了!

    RxJava, 一个在 Java VM 上使用可观测的序列来组成异步的、基于观察者模式的实现的库。 RxAndroid,函数响应式编程, 把 RxJava 带到 Android 环境中。...新技术语言 Kotlin,作为 Android 领域的 Swift,绝对让你如沐新风。...flutter,是一款能够简单、高效地开发优美的移动APP的UI框架。在2018年2月27日,在2018世界移动大会上,Google发布了Flutter的第一个Beta版本。...狭义来讲,区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一 种链式数据结构, 并以密码学方式保证的不可篡改和不可伪造的分布式账本。...把网络请求都交给给了Okhttp,我们只需要通过简单的配置就能使用retrofit来进行网络请求了,其主要作者也是Android大神JakeWharton。

    2.7K70

    Android 须知2019流行的框架库及开发语言

    RxJava, 一个在 Java VM 上使用可观测的序列来组成异步的、基于观察者模式的实现的库。RxAndroid,函数响应式编程, 把 RxJava 带到 Android 环境中。...新技术语言 Kotlin,作为 Android 领域的 Swift,绝对让你如沐新风。...flutter,是一款能够简单、高效地开发优美的移动APP的UI框架。在2018年2月27日,在2018世界移动大会上,Google发布了Flutter的第一个Beta版本。...狭义来讲,区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一 种链式数据结构, 并以密码学方式保证的不可篡改和不可伪造的分布式账本。...把网络请求都交给给了Okhttp,我们只需要通过简单的配置就能使用retrofit来进行网络请求了,其主要作者也是Android大神JakeWharton。

    1.4K40

    Flutter混编工程之轻量化改造

    []; }); } 这样一来,原生侧只需要搭建好一套类似JSSDK的环境即可满足混编开发的需求,不用再根据不同的接口来进行重复的开发,而Flutter一侧,只需要设置API path和参数即可。..., ): JsonObject 原生侧网络依然使用OKHttp进行封装,这里有一个需要注意的就是在Kotlin中使用Retrofit,如果参数类型是Any的话,需要使用@JvmSuppressWildcards...❝其它对应需要桥接原生的能力,只需要新增接口即可,例如埋点,新增曝光和点击接口,在Flutter中调用协议即可实现。...❞ 轻量化下的开发流程 在使用Flutter开发新的业务需求时,首先需要在Flutter中创建相应的路由名,然后在main中配置相应的业务页面,接下来即可进行正常的Flutter业务开发,在网络请求等需要桥接原生的地方...测试方法:循环10次,连续调用Native API获取接口数据,并在界面展示返回数据。 测试结果:测试通过,数据正常请求并展示。 通过上面两个测试场景,可以得出结论,该方案具有可行性。

    91810

    动态代理分析与仿Retrofit实践

    我们一直都在使用Retroift,都知道它的核心是动态代理。例如在之前的文章重温Retrofit源码,笑看协程实现中也简单提及到动态代理(来填之前挖的坑...)。...这里关键点是第三个参数,所有通过调用代理类的代理方法都会在InvocationHandler对象中通过它的invoke方法进行回调 public interface InvocationHandler...接口;然后在它的构造方法中接受了一个var1参数,它的类型是InvocationHandler。...到这里迷雾已经揭晓了,调用invoke方法,同时将代理类的自身this、对应的method信息与方法参数传递过去。...所以我们每新增一个接口,都不需要做过多的别的修改,相关的网络请求逻辑都封装到动态代理的invoke方法中,当然Retrofit原理是借助添加Annomation注解的方式来解析不同网络请求的方式与相关的参数逻辑

    55510

    【面经分享】5年Android开发的求职之路

    和boolean的区别 用过哪些设计模式 介绍一下观察者模式 用过哪些排序算法 介绍一下贪心算法 介绍一下快排原理 算法,给定一个有序不重复数组,使用时间复杂度小于N方的方法,找到所有两两相加等于target...请求流程 Retrofit中的设计模式 App启动流程 Apk打包流程 重构做了哪些工作 内存泄露,举例场景 LeakCanary实现原理 Handler消息机制 线程有哪些状态 Hybrid开发介绍...小红书 技术调研你是怎么做的,会考虑哪些因素 说一下MVVM 用过Jetpack中的哪些组件 LiveData是怎么做数据派发的 ViewModel屏幕旋转的时候怎么做到不丢失数据的 使用MVVM的过程中有遇到什么问题吗...在onCreate中发送大量数据会导致主线程卡顿吗 LayoutInflater.inflate有几个参数,分别是什么意思 其他厂整理补充 Android中的Context了解多少 Application...比如你说未来想研究一下主流三方库的源码,学习优秀的设计理念,看似好像很努力很上进,其实面试官听到的是,主流三方库我只会用,不知道原理,我就是个API调用师。(尬不尬?)

    79120

    面试|2021 菜鸟金三银四铜五 Android 被锤历程出炉...

    Retrofit 和 OkHttp 是什么关系? Retrofit 是如何通过注解来方便我们 api 调用?基于什么原理。 JetPack 用过哪儿些? ViewModel 用来做什么的?...从数据结构的角度层面分析为什么链表插入/删除快,查询慢,而数据查询快,删除/新增慢呢?...模块化如何实现模块之间解耦合的呢? module A 和 module B 之间有需要调用 Api 这块怎么解决的? module A 和 module B 之间如何通讯? 有用到路由或者事件总线吗?...Java 中的引用类型(强弱软虚)作用以及常用场景。 除了 LeakCanary,你还用过哪儿些,Android Studio 自带工具有使用过吗? 针对重构,有考虑使用组件化和插件化的方式吗?...你的 BaseActivity 中会放什么东西? 你是如何管理 Activity 栈? Activity 启动模式。 页面中如何预防用户连续点击?如何在项目所有点击事件中使用呢?

    1.3K50

    《构建高质量 Flutter 应用:从模块化基础模板到可扩展架构实践》- 适配开源鸿蒙版

    一、整体架构设计理念 该模板遵循 “清晰分层 + 预留扩展” 的原则,目标是: ✅ 快速启动一个符合 Flutter 最佳实践的项目; ✅ 模块职责分明,便于团队协作; ✅ 不引入冗余依赖,保持轻量...MyApp()); } 使用 runApp() 启动应用; 传入根组件 MyApp(无状态,性能更优); 未包裹任何状态管理器(如 ProviderScope),为后续按需引入留白。...; 使用 required 参数确保调用时不会遗漏标题内容。...GoRouter 或 Navigator 2.0 实现命名路由 网络请求 在 utils/api/ 下创建 ApiClient,集成 dio + retrofit 本地存储 引入 shared_preferences...建议:将此模板保存为公司/团队的 Flutter Starter Kit,统一开发规范,提升交付效率。

    25610

    网络请求库全面对比和优缺点分析

    它使用一个 PriorityBlockingQueue 来存储请求,并根据请求的优先级进行排序。 NetworkDispatcher 类负责处理请求队列中的请求。...Retrofit具有高度可定制性和强大的功能。Retrofit 的源码中,可以看到如下特性: Retrofit 类是核心组件,负责创建 API 接口的实现。...Mars的源码中,可以看到如下特性: 多路复用:Mars支持多路复用技术,可以在一个TCP连接上并发发送多个请求,减少连接建立的开销。...6.2 缺点 使用复杂:相较于其他网络库,Curl的使用和配置可能较为复杂。 集成成本:在Android中集成Curl可能需要额外的工作,如JNI调用等。 6.3 适用场景 需要支持多种协议的应用。...每种库都有其独特的优势和局限性,选择时需要综合考虑项目的需求。 在实际开发中,可能会遇到需要同时使用这些库的情况。例如,使用Retrofit处理API请求,同时使用OkHttp作为底层实现以提高性能。

    1.5K10

    Android 开发3年,二本学历,历时半年终获腾讯offer,薪资上涨30%定级T4

    image.png 个人背景 如标题所示,我的个人背景非常简单,Android开发经验3年多,学历普通,2本本科毕业,之前坐标北京,毕业后出来就一直在小公司每天重复的工作对我的技术提升并没有什么帮助,...腾讯三面 1、libuv和三个平台下的io模型 2、讲下epoll和select 3、countdown latch 4、笔试题: 把字符串数组中的'0'挪到数组前面其他字符顺序不变,给出时间空间复杂度...操作+微信对接 Hybrid 开发与Flutter:Html5项目实战+Flutter进阶 知识梳理完之后,就需要进行查漏补缺,所以针对这些知识点,我手头上也准备了不少的电子书和笔记,这些笔记将各个知识点进行了完美的总结...请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。 关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三。...以上内容均放在了开源项目:【github】 中已收录,里面包含不同方向的自学Android路线、面试题集合/面经、及系列技术文章等,资源持续更新中...

    1.2K20

    Retrofit入门:打造Android类型安全的HTTP客户端

    当然,你也可以使用execute()方法进行同步调用,但记住不要在主线程中执行同步网络请求!...@Path:替换URL中的占位符java@GET("users/{id}")Call getUserById(@Path("id") long id);@Query:添加查询参数java@GET...("search")Call> search(@Query("query") String query);@QueryMap:添加多个查询参数java@GET("search"...实战示例:构建一个天气应用让我们通过一个实际的例子来展示Retrofit的威力。假设我们要构建一个简单的天气应用,使用OpenWeatherMap API:1....回顾一下Retrofit的主要优势:声明式API:使用接口和注解定义网络请求类型安全:编译时类型检查,避免运行时错误易于扩展:支持多种转换器和适配器与RxJava完美集成:简化异步操作高效可靠:底层使用

    30210

    Android网络访问库 - Retrofit学习(1)基础

    在实际开发中,我们Retrofit配合OKHTTP来使用。我们使用OKHTTP当做传输层,使用Retrofit在OKHTTP之上,使用Java的接口描述我们的HTTP协议。...简单的说: 使用Retrofit转换HTTP 的API协议成一个java的Interface服务,我们直接使用java类会方便好多。...同步和异步,和终止 Retrofit 1.x 时,在服务接口的声明中,同步方法需要一个返回值,异步方式需要一个 Callback 的泛型参数作为最后一个参数。...2.x不再以参数和返回值的方式区分异步同步的请求。 “调用”的区别 Retrofit 1.9 时 同步是直接调用。 而异步需要传入回调的实现。在实现里处理成功和失败的方法。...你可以添加一个或者多个ConverterFactory,顺序很重要,Retrofit将会按顺序使用它,如果失败,就尝试使用下一个转换器。

    1.4K00

    985毕业的“打工人”,Android开发2年被裁,重新出发终于拿下字节offer

    ; ④使用的第三方软件中的BUG; ⑤启动参数内存值设定的过小 (2)内存溢出的解决方案: ①第一步,修改JVM启动参数,直接增加内存。...by 的两种场景,by Lazy 的实现 object 单例的实现 算法 各种排序算法(冒泡、选择、快排、归并。。。)的时间复杂度,各种查找算法(顺序查找,二分查找。。。)...此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 3、hashmap原理说一下; 4、HashMap什么时候进行扩容呢?...多态有3个条件:继承、重写和父类引用指向子类对象 (2)重载则是类的内部的方法构型上的不同,是发生在同一个类里面的。同一个函数名称,参数不同的多个方法,实现同一类型的功能。...Thread Run和Start的底层调用区别(是否中断陷入) BroadCast的使用方法 Intent的使用方法 Intent-Filter 手写外部排序算法 大厂面试复习路线 多余的话就不讲了,

    1.4K20

    你真的会用Retrofit2吗?Retrofit2完全教程

    Gson使用指南(四) 中说当你了解了注解、反射、泛型、HTTP的内容只需要看一篇Retrofit的代码示例就可以轻松玩转Retrofit,不知道你玩转了没?...注1:{占位符}和PATH尽量只用在URL的path部分,url中的参数使用Query和QueryMap 代替,保证接口定义的简洁 注2:Query、Field和Part这三者都支持数组和实现了Iterable...// Retrfofit对于上面的几个注解默认使用的是调用toString方法 public Converter多个ConverterFactory都支持同一种类型,那么就是只有第一个才会被使用,而GsonConverterFactory是不判断是否支持的,所以这里交换了顺序还会有一个异常抛出,原因是类型不匹配...> get(Type returnType, Annotation[] annotations, Retrofit retrofit); // 用于获取泛型的参数 如 Call<Requestbody

    2.9K70
    领券