面试
文章平均质量分 83
凉亭下
这个作者很懒,什么都没留下…
展开
-
Spring Cloud的原理详解
Spring Cloud为构建微服务架构提供了强大的支持,它通过一系列组件简化了分布式系统的开发。随着微服务架构的普及,Spring Cloud将继续在企业级应用中发挥重要作用。同时,开发者也需要关注其带来的挑战,不断提升系统的稳定性和可维护性。原创 2024-05-10 07:45:19 · 338 阅读 · 0 评论 -
Android Framework分析SystemServer进程
如上所示,SystemServer主要由三个部分组成:main()方法、启动各种系统服务的run()方法,以及三个启动服务的方法:startCoreServices()、startOtherServices()和startBootstrapServices()。如上所示,在“run”方法中,首先调用“startCoreServices”方法以启动核心服务,接着调用“startOtherServices”方法以启动其他服务,最后调用“startBootstrapServices”方法以启动引导服务。原创 2023-06-16 08:00:00 · 586 阅读 · 0 评论 -
Room 数据库升级技术:Schema、单个数据库版本升级和多个版本跨越升级
如果你是一个 Android 开发者,你可能已经了解到,Room 是一种 Android 主流的存储解决方案,提供了方便的 API 进行数据库操作。Room 数据库是一个 SQLite 数据库,封装了一些最佳实践,简化了与数据库交互的操作。但是,Room 自身的不足是它难以管理数据库的结构变化,这也是很多开发者遇到的普遍问题。在本文中,我们将为您介绍 Room 数据库的 Schema,以及在单个数据库版本升级和多个版本跨越升级中进行数据迁移的过程。原创 2023-06-13 19:00:00 · 1864 阅读 · 0 评论 -
Android Jetpack组件库(第一部分)---Paging
Android Jetpack 是 Google 推出的一整套帮助 Android 应用程序开发的库、工具包和架构指南,旨在为 Android 应用程序提供更快,更轻松,更稳定的开发体验。原创 2023-06-03 00:08:33 · 1057 阅读 · 0 评论 -
从零开始,轻松入门编程:自学、学语言、养成好习惯
本文介绍了自学编程需要注意的事项、初学者应该学什么语言、培养好的编程习惯、如何学习编程、如何提高编程能力、以及实用的编程资料。如果您刚开始学习编程,希望这些建议可以帮助您制定一个好的学习计划,学习编程消息,并成为一名优秀的程序员。在编程中,为变量和函数命名是非常重要的,一个好的名称可以方便读者理解代码的含义和用途。注释是编程中非常重要的一部分,在代码中添加注释有助于提高代码的可读性和易于理解。在编程过程中,培养好的习惯是非常重要的,可以提高编程效率,避免错误和不必要的麻烦。原创 2023-06-02 23:00:50 · 335 阅读 · 0 评论 -
轻松学会ADB:一站式Android调试利器
ADB(Android Debug Bridge)是一种 Android 调试工具,它是 Android SDK 软件开发工具包中的一个工具,可用于管理和与您的 Android 设备相互作用。可通过 adb 命令查看设备状态、安装和卸载应用程序,还可以查看软件版本和各种调试信息。adb devices:查看连接的设备列表;adb install 应用程序.apk:安装应用程序;adb uninstall 包名:卸载应用程序;adb shell:进入设备的操作系统 shell 界面;原创 2023-06-02 22:37:46 · 517 阅读 · 0 评论 -
如何让Android系统更省电更流畅,掌握内核很重要!
内核是操作系统的核心,它是负责管理系统硬件和软件资源,提供系统调用和服务,以及协调系统各个部分之间相互协作的程序。在 Android 操作系统中,内核是指 Linux 内核,它是 Android 系统的底层核心,负责控制硬件设备、管理进程和内存、提供系统调用等基本功能。通过对 Android 内核结构、第三方内核以及内核优化等相关内容的了解,我们可以更好地理解 Android 系统的工作方式以及优化方法。在内核优化方面,我们可以通过降低 CPU 频率和电压、调整 I/O 调度器等方法实现节省电量的目的。原创 2023-06-02 22:12:42 · 660 阅读 · 0 评论 -
抖音Flutter插件的使用
在上面的代码示例中,我们首先初始化Douyin实例,并在应用程序中注册AppKey和AppSecret,然后在授权按钮上绑定点击事件。使用抖音的Flutter插件进行开发之前,你需要在你的抖音账户中创建应用,然后从抖音开放平台中获取应用程序的AppKey和AppSecret。在抖音的Flutter插件中,授权页面是必需的。授权页面将提示用户授权你的应用程序访问其抖音帐户。在获得了抖音的访问令牌(access_token)之后,我们可以使用Douyin类来访问抖音API并获取有关用户的信息和其他数据。原创 2023-05-21 18:25:52 · 1904 阅读 · 0 评论 -
如何在React Native中使用蓝牙模块
在上面的代码示例中,我们使用 BleManager.read() 方法读取设备的特征值,并使用 BleManager.write() 方法写入设备的特征值。总而言之,在React Native中使用蓝牙模块非常容易,它提供了扫描、连接、读写蓝牙设备的特征值等功能。如果您想构建具有与蓝牙设备交互功能的React Native应用程序,那么使用这个模块就是一个不错的选择。在完成蓝牙设备的连接后,您可以读取并写入蓝牙设备的特征值。使用蓝牙模块,您可以扫描并连接蓝牙设备。3. 读写蓝牙设备的特征值。原创 2023-05-21 18:19:35 · 2038 阅读 · 1 评论 -
Android MMKV - 性能强悍的存储工具(腾讯出品)
MMKV 是腾讯出品的基于mmap内存映射文件技术的一种数据存储的组件,相对于SharedPreferences SQlite 兼容性更好,存读取速度更快.支持常规的各种数据类型.原创 2023-05-14 11:56:04 · 673 阅读 · 0 评论 -
【Unity3D】Shader变体管理流程-变体剔除
想要回答这个问题,要看看什么是Shader变体。原创 2023-05-09 13:29:02 · 1094 阅读 · 0 评论 -
flutter mqtt的使用看这里,持续更新
话不多说,新建一个工程flutter_app_mqtt,在pubspec.yaml文件中,添加依赖库mqtt_client,然后pub get一下,下载库。原创 2023-05-08 15:39:15 · 1977 阅读 · 0 评论 -
Android Jetpack 应用指南 - Navigation
在Android开发的过去几年中,在公司的项目中一直没有机会尝试单Activity多Fragment的开发模式,随着Google推出Navigation组件,我意识到,终于有机会学习一种全新的开发模式了。与上一篇文章相同,本篇同样是Navigation的初探,会用尽可能简洁的方式来了解Navigation,让我们对Navigation有一个初步印象,不会长篇大论或者源码轰炸,导致干货太多引起阅读困难。原创 2023-04-21 21:29:50 · 571 阅读 · 0 评论 -
ijkplayer解码流程源码解读
ijkplayer是一款基于ffmpeg的在移动端比较流行的开源播放器。FFmpeg是一款用于多媒体处理、音视频编解码的自由软件工程,采用LGPL或GPL许可证。要想理解ijkplayer源码,首先得知道视频播放器的基本原理。视频播放器播放一个互联网上的视频文件,需要经过以下几个步骤:解协议,解封装,音视频解码,音视频同步。如果播放的是本地文件则不需要解协议。ijkplayer核心源码都在C文件中。原创 2023-04-18 23:28:15 · 898 阅读 · 0 评论 -
android sdl编译
android-project是一个模板工程,拷贝此模板工程到另一个文件目录下,拷贝的目的是防止对sdl源码工程进行改动。在拷贝过来的新工程的jni目录中,新建sdl文件夹,拷贝sdl源码根目录中的,如上图的红线圈内的include和src文件目录,以及Android.mk拷贝到新工程的sdl文件夹下。构建完成生成3个so库,libSDL2.so,以及其编译依赖的libhidapi.so,以及libmain.so。将源码解压,查看源码目录如下。在新工程的jni/src目录下,添加此main.c文件。原创 2023-04-18 23:23:20 · 606 阅读 · 0 评论 -
ijkplayer编译支持x264编码器
后来发现还有另外一种方法更为简便,就是直接修改libx264.c文件,将此文件中的所有x264_bit_depth直接替换为X264_BIT_DEPTH,然后重新进行libijkffmpeg.so的编译。GPL是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代码做为闭源的商业软件发布和销售。文件路径在android/contrib/ffmpeg-armv7a/libavcodec目录下,我只编译armv7a架构的so,所以只改ffmpeg-armv7a目录下的文件。原创 2023-04-17 22:28:39 · 787 阅读 · 0 评论 -
ijkplayer 编译增加支持更多的音视频格式
ijkplayer是B站开源的一款基于ffmpeg的移动端播放器。但为了减少播放器的体积,很多音视频的格式播放默认都是不支持的,需要自己下载ijkplayer源码进行编译。这里以mac环境下android为例,简述ijkplayer的编译过程,以及为了支持更多音视频编码格式所要做的工作。mac环境下编译要稍微简便点,不需要安装虚拟机和linux操作系统。原创 2023-04-17 22:23:28 · 1465 阅读 · 0 评论 -
ijkplayer 编译增加支持更多的音视频格式
ijkplayer是B站开源的一款基于ffmpeg的移动端播放器。但为了减少播放器的体积,很多音视频的格式播放默认都是不支持的,需要自己下载ijkplayer源码进行编译。这里以mac环境下android为例,简述ijkplayer的编译过程,以及为了支持更多音视频编码格式所要做的工作。mac环境下编译要稍微简便点,不需要安装虚拟机和linux操作系统。原创 2023-04-16 23:02:27 · 602 阅读 · 0 评论 -
Flutter加载图片证书校验失败问题
FadeInImageWithoutAuth中将原先的加载网络图片的NetworkImage替换为NetworkImageWithoutAuth,NetworkImageWithoutAuth在使用HttpClient加载图片时,使不安全证书校验通过。看下FadeInImage源码,图片的加载过程。看错误是证书校验问题,由于使用的是不被信任的证书,导致使用flutter加载图片加载不出来。中关于HttpClient的证书校验的处理,根据实际使用场景对证书校验进行处理,这里直接让其通过校验。原创 2023-04-16 22:59:24 · 1152 阅读 · 0 评论 -
replugin宿主与插件通信小结
Messenger是执行进程间通信(IPC)最简单的方式,服务端Messenger通过Handler将客户端的请求放到消息循环中排队,然后逐个取出进行处理,而客户端要接收结果需要2个Messenger,一个用于发送消息,一个用于接收消息。其底层原理也是Binder,客户端得到服务端的Binder对象在binder驱动层对应的mRemote引用,然后给服务器发消息,实现跨进程通信。这种方式缺点很明显,服务端以串行方式处理客户端的消息,消息处理结果反馈并不及时,不适合服务端、客户端经常通信的场景。原创 2023-04-16 22:56:21 · 714 阅读 · 0 评论 -
android so库导致的闪退及tombstone分析
android中有3种crash情况:未捕获的异常、ANR和闪退。未捕获的异常一般用crash文件就可以记录异常信息,而ANR无响应表现就是界面卡着无法响应用户操作,而闪退则是整个app瞬间退出,个人感觉对用户造成的体验最差。闪退一般是由于调用so库出错导致,像类似非法地址访问等。闪退发生时在logcat中将日志过滤条件选为“No Filters”就可以看到完整的闪退日志,或者叫tombstone(墓碑)文件。原创 2023-04-15 09:13:08 · 1615 阅读 · 0 评论 -
android内存泄漏检测,Android内存泄露检测之LeakCanary的使用
使用LeakCanary进行内存泄漏分析并不麻烦,将引用链分析清楚,内存泄漏原因自然很快查到。主要排查思路1、查看类引用依赖关系2、引用解除可以在引用链上一个合适节点解除,解决方案并不唯一。android常见内存泄漏原因:1、Handler引起的内存泄漏。即使用Handler(非静态内部类)持有外部类(Activity)引用,消息处理不合适导致Activity泄漏。2、单例模式引起的内存泄漏。例如单例持有Activity上下文导致泄漏。3、非静态内部类创建静态实例引起的内存泄漏。原创 2023-04-15 09:07:24 · 573 阅读 · 0 评论 -
replugin原理笔记
前面只是针对Replugin中的一些关键技术、感兴趣点进行了粗略的分析。Replugin的很多技术精髓还需更加仔细的研读。但通过上面的一些分析,对Replugin的主要技术及设计思想能有一个大概的了解。能加深对Android系统及一些相关技术的理解。原创 2023-04-14 22:23:36 · 756 阅读 · 0 评论 -
Android library native 代码不能调试解决方法汇总
android native开发会碰到native代码无法调试问题,而app主工程中的native代码是可以调试的。如果项目中存在多个module,那么在application模块中依赖library模块,并且library模块中有native代码的时候,当debug library模块中的这些native代码时可能会发现断点打不进去。导致这个问题的根本原因是因为即使在运行application模块的debug构建时,其依赖的library模块并不是以debug构建,而是以release构建。原创 2023-04-14 22:15:20 · 826 阅读 · 0 评论 -
Deepin使用两年感受
• 我为什么从Windows转用Linux?• Deepin带给我哪些全新体验?• 我折腾过哪些Linux发行版?• Deepin还有哪些不足?• 哪些人适合使用Deepin?每个人折腾Linux的目的不尽相同。有的人是为了学习技术成为大牛,有的人是把Linux作为讨生活的“饭碗”,有的人是为了尝鲜,而有的人是纯粹喜欢折腾。而我则是完全忍受不了Windows糟糕的体验。从小学到大学,从XP到Windows10。这么多年过去,虽然我没有成长为系统专家。但是作为一个微软生态的User。虽然不能百分之百解原创 2023-04-13 22:39:07 · 1051 阅读 · 0 评论 -
Android组件化开发
总的来说还算顺利,期间就出现了些小问题,但还是值得注意包重名问题,创建项目时没注意,导致包重名了。Android修改包名路由ARoute配置,跳转提示找不到路径,主要时因为我当时想试试java和kotlin不同配置,详细请看Android路由ARoute使用组件开发特别需要注意资源重名,为了避免这个问题,可以在module中的build.gradle中添加前缀提示,这样每次添加资源,系统会提示加前缀。原创 2023-04-12 23:28:51 · 579 阅读 · 0 评论 -
uniapp人脸识别解决方案
因为APP端无法使用uni的camera组件,最开始考虑使用内嵌webview的方式,通过原生dom调用video渲染画面然后通过canvas截图。经实测5+api兼容性还算可以,但是毕竟是调用原生能力,肯定是没有原生开发那么丝滑的,难免会出现一些不可预测的兼容性问题。但是在安卓系统上,尤其是鸿蒙系统,调用这个api就会导致程序闪退,而且发生频率还特别高。除了闪退问题,安卓还存在一个麻烦事儿,那就是首次进入app,翻转摄像头的api没有用,拉起的还是后置摄像头。以上是完整的包含逻辑的代码。原创 2023-04-11 14:13:22 · 4632 阅读 · 3 评论 -
不用但一定要懂 ---- iOS 之 响应链、传递链 与 手势识别
通过「命中测试」来找到「第一响应者」由「第一响应者」来确定「响应链」将事件沿「响应链」传递事件被某个响应者接收,或没有响应者接收从而被丢弃注:这些步骤都是建立在不使用 UIGestureRecognizer 的基础上的总的来说,手势识别器在大多数情况下,识别屏幕触摸事件的优先级,比控件本身的方法的优先级高。所以在开发的过程中,注意不要让手势覆盖控件本身的方法实现。同时也要理解默认情况下,手势识别在一开始实际上并不会阻止控件自身的touches系列方法,而是在之后的某个时机去取消。另外在。原创 2023-04-09 23:24:12 · 1915 阅读 · 0 评论 -
数据结构和算法(二):递归、排序、通用排序算法
从广义上来讲:数据结构就是一组数据的存储结构, 算法就是操作数据的方法本文总结了20个最常用的数据结构和算法,不管是,只要集中精力攻克这20个知识点就足够了。原创 2023-04-07 21:57:13 · 717 阅读 · 0 评论 -
数据结构和算法(一):复杂度、数组、链表、栈、队列
如果比运算符栈的栈顶元素的优先级低或相同,那么就从操作数栈的栈顶取2个操作数,然后进行计算,再把计算完成的结果压入操作数栈,继续比较。当生产者生产速度过快时,消费者来不及消费,存储数据的队列很快就满了,这个时候生产者就阻塞等待,直到消费者消费了数据,生产者才会被重新唤醒,继续生产。编译器通过两个栈实现的这个功能的,一个栈保存操作数,另一个栈保存运算符,我们从左到右遍历表达式,当遇到数字时,将其压入操作数栈;1.如果数组中已存在此数据,删除数组中的此数据,并将新数据放入数组尾部,时间复杂度为O(n)原创 2023-04-07 21:50:06 · 1104 阅读 · 0 评论 -
Molecule:使用Jetpack Compose构建StateFlow流
Message是下列响应式类型之一:Message Observable Flow MessageCard() Observable Flow最重要的是提供了composable类型的Kotlin Flow API,例如 StateFlow.collectAsState: State在不失去reactive的情况下编写命令式代码是极佳的选择。现在的问题是:我将如何在non-composable环境中使用我的composable方法?转载 2023-04-05 10:41:46 · 247 阅读 · 0 评论 -
Kotlin作用域函数深入理解
对这些函数执行调用并提供一个lambda表达式,形成一个临时作用域,在此作用域中,可以访问该对象而无需其名称。这些函数称为作用域函数。为什么说是静态的呢,实际上从反编译的字节码文件可以发现,扩展函数在执行时会是一个静态方法,参数中会将接收者作为参数传递。在调用扩展函数时,具体被调用的的是哪一个函数,由调用函数的的对象表达式来决定的,而不是动态的类型决定的。在Kotlin中,有许多的函数基于扩展函数实现,作用域函数也不例外。若扩展函数和成员函数一致,则使用该函数时,会优先使用成员函数。转载 2023-04-05 10:39:21 · 71 阅读 · 0 评论 -
轻松缓存 Android + Kotlin + Flow
轻松缓存 Android + Kotlin + Flow技术背景在某些情况下,良好的缓存机制可以帮助您作为开发人员并提高应用程序的质量。让我简要介绍一下其中的 2 个,然后介绍简单的解决方案。案例1假设您正在开发一个具有几个屏幕和多个 API 调用的 Android 应用程序。随着时间的推移,具有后台逻辑的屏幕和组件越来越多。因此,一段时间后我们几乎同时在应用程序中发生 2 个或更多类似 API GET 的调用是很常见的。有时它会发生在敏感的地方,比如应用程序启动。对用户意味着什么?转载 2023-04-05 10:34:15 · 247 阅读 · 0 评论 -
如何使用 Kotlin 协程执行顺序后台任务
这些是结果,假设你在第一个任务中从 api 中获得了一个数据列表,那么 result1 将是这个列表,但是 suspend 函数返回类型应该是你想要作为结果获取它的数据,并且在第二个任务中,你会将这个列表保存到数据库中,然后你将它正常传递给第二个任务,我们将在一个例子中解释这一点。顺序意味着如果你有3个任务,第一个任务将运行,第二个任务将在第一个任务完成后执行,第三个任务将在第二个任务完成后执行,依此类推。因此,在这篇文章中,我们会讲到其中一个重要的部分,就是制作顺序后台任务。协程执行顺序后台任务。转载 2023-04-05 10:29:43 · 352 阅读 · 1 评论 -
九大经典算法
while (i < j && [temArr[j] intValue] >= [key intValue]) { // 右边j位大于基数位置不变。if (i == j) { // i、j位置重合结束本次循环,当key是目前最小的数时,会出现i=j的情况,arr[i] = key // i和j重合时本轮循环结束,将key放入i的位置(则左侧数都比key小,右侧数都比key大)if (i == j) { // 当key是目前最大的数时(m[j]的前面),会出现i=j的情况。未排序元素继续重复排序操作。原创 2023-04-05 10:25:36 · 4482 阅读 · 2 评论 -
React跨域解决方案
看到网上举的一个形象例子,先设想下,如果允许跨域,那么黑衣人是不是可以在自己的网页上把请求转发给其他网站?例如,黑衣人在自己的页面设计了一个跨域请求到某钱堆的网址,当用户访问黑衣人网址时,浏览器按照黑衣人设计去访问了钱堆(还携带了用户在钱堆那儿的cookie)......之后,之后警察叔叔们又要加班了。获取的IP信息:var returnCitySN = {"cip": "117.136.83.208", "cid": "CN", "cname": "CHINA"};是的,错误的原因就是你跨域了。原创 2023-04-05 10:16:56 · 1829 阅读 · 0 评论 -
面试之软件开发方式
可以分为纵向开发和横向开发。纵向开发 :按功能模块划分, 一般适用于是刚组建的团队 缺点:代码容易产生冗余;成员之间沟通业务,浪费时间,形成内耗; 横向开发 : 按数据,业务,表示等层次划分结构,适合于比较成熟的团队开发方式,分工比较明确; 缺点 : 就是如果是新原创 2017-02-21 21:43:47 · 499 阅读 · 0 评论 -
面试之手机屏幕适配
1.布局文件适配:多用match_parent、wrap_content,weight;多套布局文件2.图片资源适配:根据手机屏幕分辨率的不同,制作几套图片资源;使用自动拉伸位图:Nine-Patch的图片类型3.布局控件尺寸适配:尽量使用密度无关像素 dp 或独立比例像素 sp单位指定尺寸4.自定义控件,利用代码根据屏幕的大小动态设置界面的显示大小原创 2017-02-21 22:03:42 · 419 阅读 · 1 评论 -
面试之内存泄露的原因
1.bitmap资源没有及时释放掉2.资源对象cursoe对象没有关闭3.注册广播和addxxxListener没有取消掉4.application的context来替代和activity相关的context5.Activity中对象的生命周期大于activity6,.构造Adapter时,没有使用缓存的convertView7.集合中对象没清理原创 2017-02-21 22:28:47 · 410 阅读 · 0 评论 -
面试之内存溢出的解决方案
1.static尽量少修饰那种资源消耗过多的对象,例如context2.使用频率较少的对象使用弱引用保存3.线程的内部类采用静态内部类,线程中context采用弱引用保存4.大图片资源缩放,对图片采用软引用,利用LruCache保存图片5.无用的广播和监听器,及时注销掉或者remove掉6.数据库cursor及时关闭7.adpter代码优化,资源复用8.少用enum对象原创 2017-02-21 22:50:06 · 490 阅读 · 0 评论