-
如果你提交任务时,线程池队列已满,这时会发生什么?
当你提交任务到线程池(如Java中的ThreadPoolExecutor)时,如果线程池的队列(工作队列,如LinkedBlockingQueue)已满,这时会发生什么取决于你所使用的具体线程池配置及其拒绝策略(RejectedExecutionHandler)。Java中的ThreadPoolExecutor提供了几种默认的拒绝策略:AbortPoli... -
华为二面:什么是零拷贝技术?mmap和sendfile如何实现零拷贝,它们是否真正实现了零拷贝?
面试概览:说说看什么是零拷贝,它和传统的IO执行流程有什么差别?mmap内存映射是如何实现零拷贝的?说说看sendfile系统调用是如何实现零拷贝的?sendfile+DMAscatter/gather相比单纯的sendfile有何优势?splice是否是真正实现了零拷贝,它的流程和原理是怎么样的?使用零拷贝有什么缺点或者注意点么?面试官:说... -
Kotlin避免抛出异常的最佳实践!
在Kotlin开发中,避免抛出异常的最佳实践及其替代方案。抛出异常常常对代码的可读性和维护性带来不利影响,而Kotlin提供了一种更为优雅和简洁的方法来处理错误。为什么要避免抛出异常?异常处理在很多编程语言中,如Java中,主要依赖于try/catch代码块。然而,try/catch虽然强大,但会导致代码的可读性降低,增加代码复杂度,同... -
Android性能优化之2个帧率和卡顿监控方案(附详细实现代码)
心里种花,人生才不会荒芜,如果你也想一起成长,请点个关注吧。在Android开发中,监控应用的帧率(FPS)是评估应用性能和发现卡顿问题的一个重要指标。本次介绍一些常用的方法来监控Android应用的FPS,包括如何实现这些方法的详细说明和代码示例。使用ChoreographerAPI从Android4.1(API16)开始,Cho... -
使用 Kotlin 协程实现网络故障的重试机制
介绍在当今数字时代,稳定的网络通信是许多应用程序的基础。然而,由于服务器宕机或连接问题等各种不可预测因素,导致网络请求失败的情况时有发生。这可能会导致用户体验不佳,除非在应用代码中进行巧妙处理。使用Kotlin这一现代的编程语言,开发者可以有效地管理这些场景,其中之一就是通过协程简化异步编程和错误处理。本文将学习如何使用Kotlin协程实现重试机制... -
Android经典面试题之Intent传递数据大小为什么限制是1M?
在Android中,使用Intent传递数据时确实存在大小限制,大约是1MB。这主要是因为Intent的设计初衷和Android系统架构的限制。以下是详细的原因解释:1.Binder机制的限制Android系统中的进程间通信(IPC)是基于Binder机制实现的。Binder是一种高效的通信机制,但它有一个重要的限制,就是事... -
高级 Kotlin :解锁 combine 在 Android 开发中的应用
Kotlin中的combine操作符是一个功能强大的工具,可以将多个流组合成一个流。在Android开发中,尤其是在使用JetpackCompose时,它可以极大地简化状态管理和数据处理。本文将探讨combine操作符的用法和优点,并通过示例展示其在Android开发中的应用。什么是combine?combine是Kotli... -
只需一行代码完成多语言切换
背景之前总是有开发者反馈我应用切换了语言,可是工具类获取的string却没有发生改变。其实这个问题很简单,你切换语言的Context只作用在了你的Activity上,并没有对你的Application做同样的操作,知道了这点,那么解决问题就很简单了,为了省事,我给大家封装了LanguageUtils,直接一行代码便可完成多语言的切换,类似... -
Google 为何设计了如此难用的 ArrayMap
1概述天下苦ArrayMap久矣。这并非哗众取宠,如果有幸翻阅了Glide的代码仓库,你会在issues中发现在一堆奇怪的ClassCastException:难以置信,一个2018年的问题,历经6年Glide官方仍然未解决。最近笔者线上发现了类似的崩溃,经过排查,崩溃原因竟然和业务代码或Glide本身毫无关系——其根本原... -
音视频技术原理及应用
基础知识音频基础声音转数字信号音频基础知识及PCM技术详解声音的本质是一种能量波。音调,由声音的频率决定。音量,由振幅和人离声源的距离决定。音色,由波形决定。从声音到数字信号,宏观上包括三个步骤:声波通过空气传播到麦克风的振膜。振膜随空气抖动的振幅大小产生相应的电学信号,即模拟信号(AnalogueSignal)。通过模数转换器ADC...