字节卷动
字节卷动 | CSDN博客专家
博客知识包括:Android、ASM、OpenGL、C++、Java、Python、Shell、Jenkins、Gitlab、Git、SVN等相关进阶知识。
展开
-
【Android面试八股文】你刚刚提到了V2签名使用美团的Walle实现多渠道打包,那么你能讲一讲Android 签名的 v1、v2、v3、v4版本的区别吗?
在我的博客【Android面试八股文】你在多渠道打包方面提到了使用美团的Walle框架,那你能说一说Walle的原理吗?中,有提到美团Android自动化之旅—生成渠道包美团Android新一代渠道包生成工具现在就要来讲一讲Android 签名的 v1、v2、v3、v4版本的区别了!应用签署基于 JAR 签名。APK 签名方案 v2(在 Android 7.0 中引入)APK 签名方案 v3(在 Android 9 中引入)APK 签名方案 v4(在 Android 11 中引入)原创 2024-06-20 22:13:55 · 367 阅读 · 0 评论 -
【Android面试八股文】你在多渠道打包方面提到了使用美团的Walle框架,那你能说一说Walle的原理吗?
Walle框架实现多渠道打包的底层原理基于APK签名块的机制,通过在APK的签名块中写入渠道信息,使得每个渠道包都能包含唯一的渠道标识。Android的APK文件在签名时,会在文件末尾生成一个签名块(Signature Block),包含签名信息。Walle框架利用这一机制,在签名块中嵌入渠道信息,从而实现多渠道打包。Walle框架在APK签名完成后,通过操作ZIP文件格式,将渠道信息作为一个自定义的META-INF文件写入到签名块中。这一操作不会改变APK的内容,只是在APK末尾追加渠道信息。原创 2024-06-20 20:40:48 · 269 阅读 · 0 评论 -
【Android面试八股文】 GC的流程是怎么样的?介绍下GC回收机制与分代回收策略
一、什么是垃圾(Garbage)?二、什么是可行性分析?三、什么是GC Root对象?四、引用关系有哪些?五、什么时候进行垃圾回收?六、垃圾收集算法6.1 标记-清除(Mark-Sweep)6.2 复制(Copying)6.3 标记-整理/压缩(Mark-Compact)6.4 分代收集(Generational Garbage Collection)6.4.1 为什么需要使用分代收集策略?6.4.2 代际划分6.4.2.1 年轻代(Young Generation)6.4.2.2原创 2024-06-16 02:28:20 · 129 阅读 · 0 评论 -
【Android面试八股文】为什么Android中要设计为只能在UI线程中去更新UI?Android中子线程真的不能更新UI吗?如何在子线程中更新UI?
这种设计确保了 UI 操作的安全性和一致性,因为 Android 的视图系统并不是线程安全的,在多线程操作下可能会导致不可预期的行为或崩溃。可以利用子线程进行UI的刷新操作,从而提高绘图的效率,减少对主线程的干扰。不过,需要注意的是,在进行多线程绘图时,要小心处理线程同步问题,以避免竞争和死锁等问题。变得可见时才创建的,之前的操作是没有进行线程检查的,所以没有报错。提供了一个独立的绘图表面,这个表面可以在独立的线程上进行绘制操作。的关键特性,它允许在不影响主线程(UI线程)的情况下进行绘图操作。原创 2024-06-13 16:16:22 · 753 阅读 · 0 评论 -
找工作,你知道找你的是外包吗?这篇文章讲透各种外包、内包公司!
这类大型企业多年使用外包后遇到各种不满(如数据安全、协同问题、管理成本、被外包公司抽取人头费用等),从而演化出新的用工形式,原创 2024-06-07 20:23:55 · 900 阅读 · 0 评论 -
【Android面试八股文】你能说说FragmentPagerAdapter 和 FragmentStatePagerAdapter的区别吗?
的:仅仅调用detach(),将Fragment从 UI 中移除,但Fragment本身仍然保留在内存和中。因此,Fragment没有被销毁,这解释了为什么会保持所有Fragment实例在内存中。这种设计的目的为了避免每次页面切换时重新创建Fragment,从而提升性能,适用于页面较少且页面之间切换频繁的情况。通过保持Fragment在内存中,可以避免重新创建Fragment的开销,从而加快页面切换速度。的:不仅调用remove()彻底销毁Fragment,还保存Fragment的状态。这样,虽然。原创 2024-09-08 15:04:49 · 400 阅读 · 0 评论 -
【我的Android进阶之旅】快来给你的Kotlin代码添加Markdown格式的注释吧!
HTML 格式提供更多自定义的标签来精确控制注释的显示方式,适合需要精细控制的文档格式。Markdown 格式更简洁,适合开发者日常使用和快速编写注释。选择哪种格式取决于你的需求。如果需要复杂的格式,HTML 是更好的选择,而对于简单易读的注释,Markdown 更合适。原创 2024-09-01 20:46:43 · 418 阅读 · 0 评论 -
【Android面试八股文】你能说说LRU算法的原理并简单实现一下LRU算法吗?
LRU是的缩写,这种算法认为最近使用的数据是热门数据,下一次很大概率将会再次被使用。而最近很少被使用的数据,很大概率下一次不再用到。当缓存容量满的时候,优先淘汰最近很少使用的数据。假设现在缓存内部数据如图所示:这里我们将列表第一个节点称为头结点,最后一个节点为尾结点。当调用缓存获取key=1的数据,LRU算法需要将 1 这个节点移动到头结点,其余节点不变,如图所示。然后我们插入一个key=8节点,此时缓存容量到达上限,所以加入之前需要先删除数据。原创 2024-08-11 13:35:00 · 118 阅读 · 0 评论 -
【Android面试八股文】 聊聊你对SurfaceView和TextureView的理解
什么是无缓冲无缓冲:不用画布,直接在窗口上进行绘图叫做无缓冲绘图。什么是单缓冲单缓冲:用了一个画布,将所有内容都先画到画布上,在整体绘制到窗口上,就该叫做单缓冲绘图,那个画布就是一个缓冲区。什么是双缓冲双缓存:用了两个画布,一个进行临时的绘图,一个进行最终的绘图,这样就叫做双缓冲绘图。自身就实现了双缓冲,通俗来讲就是有两个缓冲区,一个后台缓冲区和一个前台缓冲区,每次后台缓冲区接受数据,当填充完整后交换给前台缓冲,这样就保证了前台缓冲里的数据都是完整的。双缓冲在更新视图时用到了两张。原创 2024-08-10 16:44:50 · 204 阅读 · 0 评论 -
【Android面试八股文】是否了解SurfaceView?它和View的区别是什么?GLSurfaceView又是什么?
什么是无缓冲无缓冲:不用画布,直接在窗口上进行绘图叫做无缓冲绘图。什么是单缓冲单缓冲:用了一个画布,将所有内容都先画到画布上,在整体绘制到窗口上,就该叫做单缓冲绘图,那个画布就是一个缓冲区。什么是双缓冲双缓存:用了两个画布,一个进行临时的绘图,一个进行最终的绘图,这样就叫做双缓冲绘图。自身就实现了双缓冲,通俗来讲就是有两个缓冲区,一个后台缓冲区和一个前台缓冲区,每次后台缓冲区接受数据,当填充完整后交换给前台缓冲,这样就保证了前台缓冲里的数据都是完整的。双缓冲在更新视图时用到了两张。原创 2024-08-10 16:28:16 · 95 阅读 · 0 评论 -
【Android面试八股文】你说你开发过IM通信SDK使用的编解码方案是TLV方案,能否展示说说你们怎么使用TLV编解码的?
Tips:每层嵌套都有2个或以上的字节增加(Tag和Length),一般通信双方可以按照协议对数据类型进行推定,所以大家可以根据实际需要,决定是否省略第三层的Tag和Length,即可通过配置文件或其它方式让程序了解字段的类型,从而降低数据包的大小,节省流量。描述Value部分所占字节的个数,编码格式分两类:定长方式(DefiniteForm)和不定长方式(IndefiniteForm),其中定长方式又包括短形式与长形式。这种方式使得可以在编码没有完全结束的情况下,可以先发送部分数据给对方。原创 2024-08-09 20:50:05 · 168 阅读 · 0 评论 -
【Android面试八股文】说一说Android开发模式之MVC、MVP、MVVM的区别?
MVC模式中,Activity同时承担了View和Controller的责任,代码相对简单,但可能导致Controller臃肿。MVP模式通过Presenter解耦了业务逻辑和视图,使得代码更易于维护和测试。MVVM模式使用ViewModel和LiveData实现了数据的双向绑定,代码更加简洁且易于测试,但引入了额外的复杂性。这三个模式各有优缺点,选择时应根据项目的需求来决定。原创 2024-08-09 20:05:56 · 103 阅读 · 0 评论 -
【Android面试八股文】荣耀面试算法题:扑克牌玩法,两人依次从中抽取,每次抽取1张牌,直到剩下的牌中,牌面点数不同,且从左到右按照从小到大排列时,游戏结束。判断每次先手抽牌的玩家是否有必胜的方法?
这个算法通过递归尝试每一种可能的牌面组合,并利用记忆化搜索避免重复计算,从而高效地判断先手玩家是否有必胜策略。DFS 遍历所有可能的牌面组合,而记忆化搜索则通过缓存已计算的结果来显著提高效率。原创 2024-07-21 00:21:59 · 173 阅读 · 0 评论 -
【Android面试八股文】1.使用了HTTPS就绝对安全了吗?2.HTTPS 会被抓包吗?3.如何避免被中间人抓取数据?
HTTPS是在 HTTP 的基础上加入加密层的协议,用于安全的数据传输。TCP 三次同步握手客户端验证服务器数字证书DH 算法协商对称加密算法的密钥、hash 算法的密钥SSL 安全加密隧道协商完成网页以加密的方式传输,用协商的对称加密算法和密钥加密,保证数据机密性;用协商的 hash算法进行数据完整性保护,保证数据不被篡改。HTTPS 一定是安全的吗?用了HTTPS就安全了吗?HTTPS 会被抓包吗?网络面经:使用HTTPS就绝对安全了吗?原创 2024-07-16 01:16:46 · 607 阅读 · 0 评论 -
【Android面试八股文】1. 说一说Java四大引用有哪些? 2. 软引用和弱引用的区别是什么?
强引用是最常见的引用类型,它决定了对象的生命周期。软引用用来实现缓存,对内存敏感的对象,当内存不足时可以被回收。弱引用用来实现弱关联,当没有强引用指向对象时,即使有弱引用指向它,也可以被垃圾回收器回收。虚引用主要用来跟踪对象被回收的状态,在对象被回收时收到系统通知,用于执行一些必要的清理操作。这些引用类型提供了灵活的内存管理机制,可以根据实际需求选择合适的引用类型来优化程序的性能和内存使用。回收时机:软引用是在系统内存不足时才被回收,而弱引用则是在下一次垃圾回收时被回收。适用场景。原创 2024-07-15 23:17:41 · 1182 阅读 · 0 评论 -
【Android面试八股文】请描述一下 android 的系统架构?
Android 是一个基于 Linux 的开源软件堆栈,针对多种不同设备类型打造。下图显示了 Android 平台的主要组件。早期的Android架构如下图所示。原创 2024-07-14 23:16:13 · 692 阅读 · 0 评论 -
【Android面试八股文】Android 中如何捕获未捕获的异常?
在 Android 应用开发中,捕获未捕获的异常(Uncaught Exception)通常需要通过设置全局异常处理器来实现。这样可以在应用程序中的任何位置捕获到未被处理的异常,并进行相应的处理或记录。原创 2024-07-14 22:53:19 · 1309 阅读 · 0 评论 -
【Android面试八股文】你能说一说横竖屏切换时 Activity 的生命周期吗?
在 Android 应用程序中,当屏幕发生横竖屏切换时,Activity 的生命周期会经历一些变化,这对于开发者来说是很重要的,因为它涉及到如何处理 UI 和数据的变化。原创 2024-07-14 00:39:30 · 83 阅读 · 0 评论 -
【Android面试八股文】谈谈OkHttp框架的原理(深度剖析源码)
OkHttp是一个开源的网络请求框架,由Square公司开发和维护,用于在 Android 和 Java 应用中发送和接收HTTP请求。Google在Android4.4以后开始将源码中的底层实现替换为OKHttp,同时现在流行的Retrofit框架底层同样是使用OKHttp的。它提供了简单而强大的API,支持同步和异步请求,并在性能和可扩展性方面表现优秀。主要特性和优势:支持 HTTP/2 和 SPDY。原创 2024-07-13 23:25:56 · 537 阅读 · 0 评论 -
【Android面试八股文】在你之前的Android项目中,你是如何进行内存优化的?包括线下和线上如何监控?
内存问题是一个普遍问题,但是却普遍缺少关注度,具体有以下几个原因内存问题相对比较隐蔽,表现并不明显同时android使用Jvm语言开发,垃圾回收是自动的,所以一般没有特别关注内存问题难以定位,出现问题的地方往往只是表现的地方,真正的原因难以收集内存优化的内容其实非常多而复杂,我们可以尝试从以下思路去了解要了解内存问题,我们首先要了解为什么要做内存优化?同时需要了解一些内存优化的背景知识,如垃圾回收机制我们需要了解一些内存优化的常用工具与手段。原创 2024-07-13 20:25:25 · 110 阅读 · 0 评论 -
【Android面试八股文】项目中使用Glide框架出现内存溢出,应该是什么原因?
在使用 Glide 时,确保传递正确的上下文(Context),比如 Activity 或者 Fragment 的引用。即使 Glide 自身有内存缓存管理,但如果使用不当或者加载的图片过多过大,仍然可能会占用大量内存。:在使用 Glide 加载图片时,确保传递正确的上下文,避免在不合适的生命周期或上下文中加载图片。:确保只加载必要的图片,尽量避免一次性加载大量图片,可以通过分页加载或者滚动时加载来优化。:根据应用的需求配置 Glide 的内存缓存和磁盘缓存策略,避免内存占用过高。空白Fragment。原创 2024-07-13 18:32:50 · 120 阅读 · 0 评论 -
【Android面试八股文】谈谈你对Glide生命周期的理解
当使用 Glide 图片加载库时,关键的实现机制是通过来管理和监听与应用程序中 Activity 生命周期相关的操作。的创建和使用在应用中,每个实例都会关联一个,这个无 UI 的 Fragment 负责管理 Glide 请求和资源释放。获取或创建实例:通过的方法来获取现有的或创建新的实例。添加到 FragmentManager:如果不存在现有实例,会创建一个新的并将其添加到相应的中。的生命周期管理内部通过类来监听与其关联的 Activity 的生命周期变化。启动和停止请求:在onStart()和。原创 2024-07-13 18:22:43 · 66 阅读 · 0 评论 -
【Android面试八股文】谈谈你对Glide框架的缓存机制设计的理解
除了内存缓存,Glide还使用磁盘缓存来长期存储图像数据。磁盘缓存有助于避免每次应用启动时都重新下载图片,提升用户体验和节省网络带宽。磁盘缓存默认使用Android的来实现,它将图像数据存储在设备的持久存储中,例如内部存储或外部存储(SD卡)。当谈到自定义缓存时,我们通常指的是根据特定需求修改或扩展现有框架(如GlidePicasso等)的缓存行为,以优化应用程序的性能和用户体验。下面我会详细说明如何在使用Glide时实现自定义缓存。Glide默认使用LRU(最近最少使用)原创 2024-07-13 17:33:02 · 311 阅读 · 0 评论 -
【Android面试八股文】你说ARouter采用APT技术,那么谈一下你对APT技术的理解,还有那些框架是采用APT技术呀?JavaPoet
是一种在的技术,它允许开发者在时和Java 源代码中的注解信息,生成。APTJava 编译器语法分析语义分析生成字节码总体来说,APT 技术通过利用注解和处理器,能够在编译期间进行代码生成和静态检查,提高了代码质量和开发效率。然而,使用时需要权衡其优缺点,选择适合项目需求的解决方案。原创 2024-07-13 03:53:00 · 1436 阅读 · 0 评论 -
【Android面试八股文】能简单说一说组件化中ARouter的原理吗?
ARouter 是阿里巴巴开源的一款 Android 路由框架,用于帮助实现 Android 应用的组件化。在 ARouter 中,每个模块都会配置一个路由表,用来记录该模块中的页面信息以及页面间的跳转关系。这些信息通常以注解或配置文件的形式存在。在编译时,通过注解处理器(如arouter-compiler)和注解(如@Route),自动生成路由表。这些注解标记了Activity和其他组件的路径信息。原创 2024-07-13 03:24:08 · 148 阅读 · 0 评论 -
【Android面试八股文】组件化在项目中有什么意义?
早期的单一分层模式。原创 2024-07-13 03:00:00 · 780 阅读 · 0 评论 -
【Android面试八股文】SharedPreference原理,commit与apply的区别是什么?使用时需要有哪些注意?SharedPreference的性能有什么优化方案:MMVK?
是 Android 提供的一种轻量级的数据存储方式,用于存储应用程序的配置信息或者一些简单的用户偏好设置。它基于键值对的方式存储数据,并且数据是持久化的,即使应用关闭后数据依然存在。的数据存储在XML文件中,每个应用都有自己的存储目录,路径一般为下的XML文件。每个XML文件对应一个实例。保存的文件为XML数据,其内容如下原创 2024-07-13 01:58:56 · 1083 阅读 · 0 评论 -
【牛客网】华为研发工程师编程题
输入文件最多包含 10 组测试数据,每个数据占一行,仅包含一个正整数 n( 1<=n<=100 ),表示小张手上的空汽水瓶数。整个过程简洁而有效地实现了从输入到去重排序输出的功能,利用了 Java 中集合类的强大功能,确保了程序的效率和功能完整性。对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。保证了不会存储重复的数字,因此输入中出现的重复数字只会在集合中保留一次。输入的 0 表示输入结束,并不用输出结果。,逐个输出其中的数字。接下来的 N 行每行输入一个整数,代表明明生成的随机数。原创 2024-07-05 01:51:28 · 127 阅读 · 0 评论 -
【牛客网】华为2016研发工程师编程题
这段代码通过模拟约瑟夫问题的解决过程,利用一个动态变化的列表来模拟数字的删除过程,最终找出最后剩下的数字的原始位置。这种解法在处理约瑟夫问题时非常高效,时间复杂度为O(n)。若有任何进一步的疑问或需要更详细的解释,请随时提出。原创 2024-07-05 01:27:57 · 481 阅读 · 0 评论 -
【Android面试八股文】Android 有哪些存储数据的方式?
SQLite是Android平台上的内置关系型数据库管理系统,适合存储结构化数据。MMKV 是一个高性能、低内存占用的 key-value 存储框架,特别适合移动应用中的数据持久化需求。Firebase提供了实时数据库和Firestore,这两者都是云托管的NoSQL数据库,适合实时数据同步和在线数据存储。在Android平台上,有多种方式可以存储数据,每种方式都适合不同类型的数据和使用场景。ObjectBox是另一个轻量级的对象存储解决方案,它提供了快速的对象存储和查询功能。原创 2024-07-05 00:44:47 · 194 阅读 · 0 评论 -
【Android面试八股文】Android性能优化面试题:怎样检测函数执行是否卡顿?
卡顿一、可重现的卡顿二、不可重现的卡顿第一种方案: 基于 Looper 的监控方法第二种方案:基于 Choreographer 的监控方法第三种方案:字节码插桩方式第四种方案: 使用 JVMTI 监听函数进入与退出总结相关大厂的方案ArgusAPMBlockCanaryQQ空间卡慢组件Matrix微信广研参考文档原创 2024-07-04 22:46:42 · 513 阅读 · 0 评论 -
【Android面试八股文】你是怎么保证Android设备的时间与服务器时间同步的?(使用NTP和TrueTime方案)
一、网络时间协议(NTP)二、使用网络时间协议(NTP)2.1 使用系统提供的 NTP 服务器2.2 使用TrueTime2.2.1 引入TrueTime库2.2.2 初始化 TrueTime2.2.3 用法2.2.4 使用 TrueTime 获取时间2.2.4 自动更新时间2.2.5 注意事项二. 使用 HTTP 请求获取服务器时间2.1. 发送 HTTP 请求获取服务器时间2.2. 在 Android 应用中发送 HTTP 请求2.2.1 使用HttpURLConnection原创 2024-07-04 21:56:15 · 336 阅读 · 0 评论 -
【Android面试八股文】App对内存是如何限制的?应该如何合理使用内存?
一、内存管理概览二、垃圾回收三、共享内存四、分配与回收应用内存五、限制应用内存六、切换应用七、进程间的内存分配八、内存类型九、物理内存 虚拟内存9.1 物理内存9.2 虚拟内存9.3 虚拟内存的好处9.4 共享库内存十、VSS RSS PSS USS区别十一、Android系统的页面置换11.1 内存页面十二、内存不足管理12.1 内核交换守护进程12.2 低内存终止守护进程12.2.1 onTrimMemory()12.2.2 onLowMemory()十三、计算原创 2024-07-02 22:13:38 · 140 阅读 · 0 评论 -
【Android面试八股文】为什么要用ContentProvider?它与SQL的实现上有什么区别
ContentProvider适用于需要在多个应用程序之间共享数据的情况,提供了安全的数据访问接口和权限控制。直接使用SQL数据库则更适合于单个应用程序内部的数据管理和操作,提供了更大的灵活性和控制能力。选择合适的方法取决于应用的特定需求,以及是否需要跨应用程序共享数据的功能。原创 2024-07-02 01:42:01 · 68 阅读 · 0 评论 -
【Android面试八股文】优化View层次过深问题,选择哪个布局比较好?
综上所述,选择合适的布局方式应考虑到布局的复杂性、性能需求和代码复用性。优化深层次View层次结构的问题,选择合适的布局方式是至关重要的。这种方法提高了代码的复用性和可维护性,减少冗余代码,但可能会引入多余的布局嵌套。是Android开发中推荐的布局,能够有效减少嵌套,提高布局性能。标签确保在引用布局文件时不会额外增加一层布局嵌套,从而有助于优化性能。标签允许在布局中引入另一个布局文件,这对于共享公共布局部分非常有用。在某些情况下仍然是合适的选择,例如需要利用其相对定位特性时。,用于延迟加载布局。原创 2024-07-02 01:34:01 · 166 阅读 · 0 评论 -
【Android面试八股文】你知道什么是冷启动和热启动吗?你知道应用冷启动的全流程吗?你知道如何解决启动时候的黑白屏问题?
解决Android应用程序启动时出现的黑白屏问题通常涉及到优化启动流程和加载过程中的UI显示。冷启动是指用户第一次启动一个应用程序时的启动流程。这个流程涵盖了从应用启动图标点击到界面显示的整个过程,每一步都是确保应用正常启动并且用户能够看到期望界面的关键步骤。通过以上方法,可以有效减少Android应用程序启动时的黑白屏问题,提升用户体验和应用启动的视觉流畅度。在Android开发中,原创 2024-07-02 01:26:17 · 99 阅读 · 0 评论 -
【Android面试八股文】在你之前的Android项目中,你是如何进行性能优化的?
这些方法和策略通常会根据具体的项目需求和应用场景进行调整和优化,帮助提升Android应用的性能和用户体验。在之前的Android项目中,优化和提升性能是一个重要且常见的任务。原创 2024-07-02 01:05:59 · 111 阅读 · 0 评论 -
【Android面试八股文】什么是ANR?如何分析和定位ANR?如何避免ANR?
是指Android系统在检测到应用程序主线程长时间阻塞而无法响应用户输入时触发的错误。当用户界面线程(UI线程)被阻塞超过一定时间限制时,系统会认为应用程序已经崩溃或停止响应,并显示一个强制关闭应用的对话框,以确保用户体验。原创 2024-07-02 00:12:26 · 805 阅读 · 1 评论 -
【Android面试八股文】你说你使用Leakcanary进行内存泄漏检测,那你能说一说Leakcanary的原理吗?
带你读懂 Reference 和 ReferenceQueue一步步拆解 LeakCanary深入理解Leakcanary源码LeakCanary中文使用说明LeakCanary:让内存泄漏无所遁形深入理解 Android 之 LeakCanary 源码解析。原创 2024-07-01 23:08:14 · 375 阅读 · 0 评论 -
【Android面试八股文】性能优化相关面试题:如何查找CPU占用?
开发工具中的一个性能分析工具,用于帮助开发者分析和优化应用程序的性能。就会有以下的界面,注意看下面标注的四个步骤。原创 2024-07-01 01:21:21 · 314 阅读 · 0 评论