- 博客(205)
- 收藏
- 关注
原创 鸿蒙富文本实践
图片组件 RichEditorImageSpanResult 就麻烦一些,首先通过 .valueResourceStr 可以获取到图片的资源路径 resource:///icon_emotion_8.png ,刨除协议头 resource:/// 与文件后缀 .png ,就得到了图片名 icon_emotion_8,通过配置表可以匹配到对应的表情关键字"[鼓掌]"。上面的文本就转换为:"第一次见面她帮他出头,他被她拽拽的气质吸引,对她一见钟情,多年后重逢续写故事"、"[色]"、"这该死的羁绊~"。
2025-03-27 07:30:30
1110
原创 Argo Workflows 原理及应用
01组件概述Argo Workflows是一个开源的容器原生工作流引擎,允许用户在Kubernetes集群上定义并执行复杂的业务流程。支持对相关流程进行个性化编排,包括执行顺序、相互之间的依赖等等。Argo Workflows 是以 Kubernetes 自定义资源定义(Custom Resource Definitions,简称 CRD)的形式来实现其功能。CRD 是 Kubernetes 提供...
2025-03-13 07:30:17
962
原创 鸿蒙跨平台框架ArkUI-X
01引言目前,移动端主流跨平台方案有Flutter、React Native、uni-app等等,还有刚推出不久的Compose-Multiplatform,真所谓是百花齐放。这些框架各有特点,技术实现各有差异,比如Flutter通过Dart编写的UI描述对接Flutter渲染引擎,React Native 则是借助大前端成熟的发展背景,利用JS引擎生成UI描述,渲染时转化为原生控件,复用了原生渲...
2025-03-06 07:30:53
1408
原创 Android 根据View生成图片
01背景随着Android技术发展,经常有将某个界面截图保存下来分享,或者生成用户或者商品二维码图片方便加好友或者购买,所以这个功能在实际应用中非常有用,下面我将重点针对这些情况进行讲解,废话不多说了,先画个序列图,如下:序列图实现步骤:步骤一:创建View;首先,我们需要创建一个View,这个View可以是任何view,比如一个TextView或者一个Image View,也可以是LinearL...
2025-02-27 07:30:42
913
原创 动态隐私检查方案优化与实现
01背景在移动应用开发过程中,隐私保护是一项至关重要的工作。以往我们采用了一种动态隐私检查工具,通过xposed方式实现,然而,这种方案存在着诸多限制。需要特定型号的手机和复杂的安装操作,不适用于集成到自动化测试系统中。02两种方案的比较2.1 xposed 方式的实现以往我们采用了xposed框架实现了动态隐私检查功能。该方案通过修改Android系统的运行时环境,拦截应用程序的方法调用,实现隐...
2025-02-20 07:31:27
922
原创 掌握Swift宏:深入探索SwiftSyntax与宏的实用指南
欢迎来到 Swift 宏的世界。我们将探索 Swift 5.9 版本中引入的一项革命性特性——宏(Macro),它为我们提供了一种在编译时处理源代码的能力。宏可以帮助我们自动化代码生成,减少模板代码,并使得代码更加简洁和易于理解。我们将从宏的基本概念开始,逐步深入了解关联宏(attached macro)和独立宏(freestanding macro)的区别与应用。接着,我们会学习如何通过 Swi...
2025-01-23 07:32:16
446
原创 矢量图SVG应用探索
随着计算机技术的不断发展,图形设计和多媒体制作领域对图像质量、可编辑性和跨平台兼容性的要求越来越高,而矢量图作为一种强大的图像类型,正好满足了这些需求。在软件开发中,基于矢量图无限缩放性、小文件体积、高度可编辑性、跨平台兼容性和透明背景等独特优势,也会被大家广泛使用。01矢量图与SVG矢量图,也称为向量图,是一种基于数学方程和几何属性的图形表示方法。它不同于位图,位图由像素组成,缩放时可能出现失真...
2025-01-16 07:31:02
938
原创 探秘block原理
01概述在iOS开发中,block大家用的都很熟悉了,是iOS开发中闭包的一种实现方式,可以对一段代码逻辑进行封装,使其可以像数据一样被传递、存储、调用,并且可以保存相关的上下文状态。很多block原理性的文章都比较老,里面讲的一些知识已经过时,这里用新版的iOS SDK再梳理一遍block原理,也是和大家一起对已有知识做一次复习。02内存布局block本质上可以理解为结构体,对于结构体的内存布局...
2025-01-09 07:30:14
568
原创 Xcframework:苹果框架的未来,你准备好了吗
01简介XCFramework是苹果推出的新的Framework格式,它实际上是另一种类型的Bundle,与原有的Framework很相似,但是可以包含多种体系机构和平台,这意味着你可以为苹果旗下所有操作系统(iOS,macOS,iPadOS等),不同体系结构(arm64,armv7 ,i386)包含模拟器,甚至UIKit和AppKit App 提供统一的分发方式。它在Xcode 11及更高版本中...
2024-12-26 07:30:40
1148
原创 iOS Masonry对包体积的影响
01Masonry介绍Masonry是iOS在控件布局中经常使用的一个轻量级框架,Masonry让NSLayoutConstraint使用起来更为简洁。Masonry简化了NSLayoutConstraint的使用方式,让我们可以以链式的方式为我们的控件指定约束。常用接口声明与实现:使用方式:02对包体积的影响可以看到Masonry的使用是以block为参数进行传递的,那如果项目中大量使用Maso...
2024-12-26 07:30:40
863
原创 Flutter Navigator2.0的原理和Web端实践
01背景与动机在Navigator 2.0推出之前,Flutter主要通过Navigator 1.0和其提供的 API(如push(),pop(),pushNamed()等)来管理页面路由。然而,Navigator 1.0存在一些局限性,如难以实现复杂的页面操作(如移除栈内中间页面、交换页面等)、不支持嵌套路由以及无法满足全平台(尤其是Web平台)的新需求。因此,Flutter官方团队决定对路...
2024-12-12 07:30:42
1158
原创 RAG检索增强生成技术介绍与实战
01引言随着深度学习和自然语言处理技术的不断进步, Retrieval-Augmented Generation(RAG)作为一种新兴的技术, 越来越受到关注。RAG技术通过将检索和生成方法相结合, 显著提升了生成任务的效果。本文将深入探讨RAG技术的应用, 并与大语言模型(LLM)直接推理进行对比, 阐述如何使用Chinese-CLIP作为向量模型,结合chunking技术和Redis Sear...
2024-11-28 07:30:34
1012
原创 Android-如何实现Apng动画播放
01Apng是什么Apng(Animated Portable Network Graphics)顾名思义是基于 PNG 格式扩展的一种动画格式,增加了对动画图像的支持,同时加入了 24 位图像和8位 Alpha 透明度的支持,并且向下兼容 PNG。Google封面图02Apng、Gif对比1、图片质量Gif最多支持8位颜色深度,图片边缘锯齿比较严重,Apng支持24位颜色深度色,抗锯齿效果更好...
2024-11-21 07:30:48
1624
原创 UIStackView使用进阶
01技术背景前端的布局方式比较灵活,提供有Flex的布局方式,可以实现不同方向的弹性布局。Flex就像一个容器,可以将其内部的子控件统一进行布局。其包含主轴方向和交叉轴方向,主轴方向表示控件的排布方向,交叉轴方向和主轴方向相垂直。熟悉前端Flex控件的同学应该知道。Flex有一些常用属性,这里对其进行简单介绍,方便了解UIStackView的技术背景。flex-direction:控制Flex的方...
2024-11-07 07:30:24
1676
原创 安卓应用跳转回流的统一和复用
本文字数:6799字预计阅读时间:35分钟作为一个功能复杂的应用,无法避免地需要支持众多路径的回流,比如从Launcher、从Push通知、从端外H5、从合作第三方App以及从系统资源分享组件等。我们知道,不同的回流路径会通过App的不同入口,带着不同的参数打开应用。而应用需要根据不同的回流路径,及其参数要求,跳转到目标页面,并完成完成相应的操作。在跳转到目标页面时,回流过程往往会被启动页、登入页...
2024-10-31 07:30:53
841
原创 结合YOLOv8和OpenCV WeChat QRCode打造一款二维码识别器
本文字数:3876字预计阅读时间:25分钟01引言二维码(QRCode)在现代生活中有广泛应用,从支付系统到信息传递,它们无处不在。本文提出了一种如何识别二维码的方法,主要贡献在于优化处理分辨率较高的图像时,由于二维码在整张图片中占据的比例较小,传统的OpenCV WeChat QRCode的识别方法表现不佳的问题。下面描述详细的优化过程。02OpenCV WeChat QRCodeWeCha...
2024-09-06 07:31:50
1948
原创 Dubbo框架那些值得细品的设计
本文字数:4231字预计阅读时间:30分钟Dubbo是一个优秀的高性能RPC框架,也是一个经历过时间考验的优秀服务框架。优秀的框架就必然有很多值得学习和借鉴的设计。01微内核和扩展点Dubbo的内核中只包含了服务调用、集群管理、路由策略等最基础的核心功能。而除了核心之外的其他功能,全都通过扩展实现。包括:序列化、协议、负载均衡、过滤器等。每个扩展都有一个对应的接口定义,具体实现可以自定动态加载和替...
2024-09-06 07:31:50
737
原创 鸿蒙Harmony开发——设备发烫问题分析
;本文字数:4207字预计阅读时间:25分钟设备过热问题是影响用户体验和设备性能的重要因素。过热不仅会导致性能下降,还可能损坏硬件。因此,开发者需要及时发现、分析并解决这一问题。本文将首先介绍评估设备过热的关键指标,然后基于Trace数据,讲解如何分析和处理设备过热的问题。最后,通过实际案例,详细展示如何定位、分析和优化设备过热现象。本文主要采用Trace数据进行分析,可以使用SmartPerf ...
2024-08-22 07:31:04
1557
原创 搜狐新闻HarmonyOS Push开发实践
本文字数:1795字预计阅读时间:15分钟01背景搜狐新闻作为HarmonyOS的合作伙伴,于2023年12月成功上架鸿蒙单框架应用市场,成为首批鸿蒙应用矩阵的一员。推送作为新闻类应用的重要组成部分,我们将其纳入到二期功能开发中。本文将推送集成过程中的步骤和经验分享给大家。02开发环境IDE:DevEco Studio NEXT Developer Beta2 Build Version: 5.0...
2024-08-22 07:31:04
1180
原创 Dubbo服务自动Web化之路
本文字数:6047字预计阅读时间:40分钟01故障出现事情起源于一次故障,2023年12月14日14点26分,大量Dubbo服务报出异常,无法链接zookeeper集群:Session 0x0forserver dubboZk.xxx.com/10.x.x.x:2181,Closing socket connection.Attempting reconnect except it is ...
2024-08-15 07:30:18
975
原创 Android自定义表情删除时卡顿问题的定位与优化
本文字数:2001字预计阅读时间:15分钟01背景在我们的实际应用中,用户在发布文本时,输入大量表情后尝试从中间删除时,会出现明显的卡顿问题。这种操作可能耗时长达2s,导致用户体验受到严重影响。通过使用 Profiler 分析耗时的方法,我们找到了造成卡顿的原因,并参考了 emoji2 源码提出了解决方案。02原因分析如图所示,当从中间删除一个表情时,耗时方法从SpannableStringBui...
2024-07-25 07:31:57
417
原创 FlutterWeb启动耗时优化
本文字数:4307字预计阅读时间:30分钟01前言在之前的文章中,我们详细的介绍过Flutter Web从0到部署上线的流程,并且针对其中遇到的问题进行了分析与修复:https://www.jianshu.com/p/6213f8a88288我们也对Flutter Web的项目进行了打包部署上线。在产品体验中会发现,跟传统的web端网页对比,还是明显感觉到性能上的差异,特别是启动的过程明显耗时较长...
2024-07-18 07:30:39
1964
原创 一个能让普通View轻松实现嵌套滚动的控件
本文字数:2810字预计阅读时间:20分钟01背景和现状在Android的事件分发机制当中,在同一个事件流中,如果由父控件拦截/消费了,那么子控件就没办法再获取到该事件流。这种传统的事件分发机制在嵌套滚动时会有明显不足,就是子控件无法消费父控件没有消费掉的滑动距离(因为起初是父控件接收了滑动事件,那么在同一个事件流中,所有事件都会给到父控件,子控件接收不到事件,也就无法滑动),从而造成嵌套滚动的不...
2024-07-11 07:30:14
647
原创 【low-ui-vue】实现原生可扩展动态表格组件
本文字数:3520字预计阅读时间:20分钟所谓动态列的表格,就是列数不固定。像广为使用的elementUI的table组件就是表头写死的,这种也叫列数固定的表格。01效果当然,动态性增加了,当然要做出一定“牺牲”。这是表格组件的表头和表内容的数据格式不太一样了——我们把它分为两个数组传入:02数据传入columns:[//表头{title:'Full Name',width:...
2024-06-21 07:31:05
1027
原创 Android编译优化之kapt优化
本文字数:16654字预计阅读时间:60分钟01编译缓慢分析随着项目功能越来越多,项目的编译耗时也在不断增加,即使在高配电脑上也需要近7分钟,如下图所示:这样的编译速度,严重影响了我们的开发效率,需要我们及时解决。在我们项目中,打开守护进程,并行编译和增量编译等配置,进行增量编译,获取编译报告。#在gradle.properties中添加#开启gradle daemon,org.gr...
2024-06-06 07:30:28
2063
原创 用 vue3 + phaser 实现经典小游戏:飞机大战
本文字数:7539字预计阅读时间:30分钟01前言说起小游戏,最经典的莫过于飞机大战了,相信很多同学都玩过。今天我们也来试试开发个有趣的小游戏吧!我们将从零开始,看看怎样一步步实现一个H5版的飞机大战!首先我们定好目标,要做一个怎样的飞机大战,以及去哪整游戏素材?刚好微信小程序官方提供了一个飞机大战小游戏的模板,打开【微信开发者工具】,选择【新建项目】-【小游戏】,选择飞机大战的模板,创建后就是一...
2024-05-22 07:30:44
1005
原创 java类热加载原理及应用
本文字数:5232字预计阅读时间:25分钟01引言1.1背景性能优化是一个Java程序员的必备技能,但是定位性能瓶颈或者是问题点是一个费时又费力的事情。在我们的实际项目中就碰到了这样的烦恼,某业务的一个接口,平均耗时很短,但是总有约1%的流量,波动较大。多次review代码,并没有发现明显的问题,查看业务日志和三方调用日志也没有明显的问题。所以定位小概率的耗时长成为了的关键。1.2性能优化定位问题...
2024-05-16 07:31:07
697
原创 自定义View-旋转变色圆角三角形的绘制
本文字数:3151字预计阅读时间:20分钟在现代设计中,动效图在APP的UI界面中所起到的作用无疑是显著的。相比于静态的界面,动效更符合人类的自然认知体系,它有效地降低了用户的认知负载,UI动效俨然已经成为了不可或缺的一部分。那么在开发过程中,当遇到UI提供的动态物料满足不了内存以及效果的要求时,我们程序员就不得不通过代码自己去实现效果,这就引出了我们今天要实现的这个旋转变色圆角三角形。当时接到需...
2024-04-25 07:30:30
980
原创 客户端动态降级系统
本文字数:4576字预计阅读时间:20分钟01背景无论是iOS还是Android系统的设备,在线上运行时受硬件、网络环境、代码质量等多方面因素影响,可能会导致性能问题,这一类问题有些在开发阶段是发现不了的。如何在线上始终为用户提供一个相对顺畅的用户体验,是客户端开发需要考虑的一个问题。02服务降级、熔断服务端有降级机制和熔断机制,在设计客户端降级系统时可以参照服务端现有方案。例如发生性能问题或网络...
2024-04-18 07:30:30
1049
原创 视频秒播优化实践
本文字数:2259字预计阅读时间:10分钟视频起播时间,即首帧时间,是视频类应用的一个重要核心指标,也是影响用户观看体验的核心因素之一。如果视频要加载很久才能开始播放,用户放弃播放甚至离开 App 的概率都会增加。视频秒播是指用户在起播时平滑播放,没有首屏的顿感,用户几乎感知不到有首帧时间的存在。我们把从开始播放到视频首帧画面展现出来这个链路的耗时称为首帧耗时,想要优化首帧耗时,达到秒播效果,我们...
2024-04-11 07:30:32
1247
原创 真机 ARM64 架构转模拟器 ARM64 架构
本文字数:2051字预计阅读时间:15分钟01需要转换架构的原因老版 Mac 使用 Intel 芯片,是x86_64架构,相应地在老版 Mac 上运行的模拟器使用的也就是 x86_64架构。由于模拟器的 x86_64 架构与真机的 arm64、armv7 等架构不冲突,业界为了方便库文件管理,通常会将模拟器架构与真机架构通过 lipo 命令合并为一个 fat 文件。对于 Intel 芯片的 Mac...
2024-03-28 07:30:40
2097
原创 Sentry(Android)源码解析
本文字数:16030字预计阅读时间:40分钟01前言Sentry是一个日志记录、错误上报、性能监控的开源框架,支持众多平台:其使用方式在本文不进行说明了,大家可参照官方文档:https://docs.sentry.io/platforms/android/?original_referrer=https%3A%2F%2Fsentry.io%2F目前大部分免费的三方APM平台限制较多,好用的又收...
2024-03-21 07:30:09
2078
原创 基于openresty构建运维工具链实践
本文字数:4591字预计阅读时间:2501导读如今OpenResty已广泛被各个互联网公司在实际生产环境中应用,在保留Nginx高并发、高稳定等特性基础上,通过嵌入Lua来提升在负载均衡层的开发效率并保证其高性能。本文主要介绍接口鉴权、流量控制以及记录追踪几个工具在实际生产环境中的应用实践,用于解决实际业务问题,提升业务运维效率,对于Openresty基本原理不再赘述。1.1 OpenResty简...
2024-03-14 07:31:39
1216
原创 搜狐新闻Hybrid AI引擎端侧离线大语言模型探索
本文字数:3027字预计阅读时间:20分钟01一、导读• LLM 以及移动平台落地趋势• 搜狐AI引擎内建集成离线可运行的GPT模型• Keras 定制预训练模型• TensorFlow Lite converter 迁移到移动设备02二、LLM1.1什么是LLMLLM(Large Language Models)大语言模型,是机器学习模型的一种,它...
2024-03-07 07:31:05
1073
原创 Simhash在内容去重中的应用
本文字数:2873字预计阅读时间:15分钟01一、背景信息流个性化推荐场景中依赖爬虫抓取的海量新闻库,这些新闻中不乏互相抄袭的新闻,这些内容相似的文章,会造成内容的同质化并加重数据库的存储负担,更糟糕的是降低了信息流内容的体验。所以需要一种准确高效的文本去重算法。而最朴素的做法就是将所有文本进行两两比较,简单易理解,最符合人类的直觉,这种做法对于少量文本来说,实现起来很方便,但是对于海量文本来说是...
2024-02-29 07:30:46
980
原创 探秘DWARF文件
本文字数:1865字预计阅读时间:10分钟01简介DWARF全名是Debugging With Attribute Record Formats,是一种调试信息的存放格式。DWARF是一种通用的标准格式,很多编译器对其都有支持,并且DWARF支持C、OC、go等多种语言。DWARF的作用是对机器码和代码之间进行一个映射关系,用来为调试器DEBUG提供调试信息,告诉调试器代码和二进制如何关联,在代码...
2024-02-22 07:31:06
1045
原创 初始mach-o文件及在项目中应用
本文字数:2250字预计阅读时间:15分钟01认识mach-o的必要性了解mach-o的结构可以帮助认识系统加载二进制文件的动态链接和静态链接。应用层面,使用initialize的c++函数计算启动时间耗时也需要以mach-o的结构知识为铺垫。还可以用在使用clang自注册启动任务上。后续会一一展开说明。02mach-o的定义mach-o是mach object的缩写,是存储程序或库的标准格式。a...
2024-02-01 07:30:41
665
原创 搜狐新闻客户端使用Kotlin之后对JSON解析框架的探索
本文字数:7488字预计阅读时间:45分钟01引言自2017年Google发布Kotlin语言之后,Android开发由原来的Java开始向Kotlin过度,目前绝大部分Android开发岗位基本要求就是熟练使用Kotlin。事实上,很多有着多年历史的项目一开始是Java开发的,在Kotlin日渐趋于Android开发主流的过程中,混合开发成为许多项目的首选。我们的项目也是采用混合开发,面对拥有沉...
2024-01-25 07:30:24
912
原创 Flutter-Web从0到部署上线(实践+埋坑)
本文字数:7743字预计阅读时间:60分钟01前言首先说明一下,这篇文章是给具备Flutter开发经验的客户端同学看的。Flutter的诞生虽然来自Google的Chrome团队,但大家都知道Flutter最先支持的平台是Android和iOS,至今最核心的维护平台依然是Android和iOS。由于dart语言的学习成本不高,Flutter的响应式UI与Comp...
2024-01-11 07:31:28
2856
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人