闲鱼技术的博客

简历投递:guicai.gxy@alibaba-inc.com

  • 博客(368)
  • 收藏
  • 关注

原创 3月Flutter小报|读小报,涨知识

本期内容1.Flutter如何Mock MethodChannel进行单元测试2.Flutter如何获取键盘的完整高度3.Flutter快速实现新手引导气泡Flutter如何Mock MethodChannel进行单元测试在做Flutter单元测试的时候,有时候我们会遇到Flutter Widget的某个方法调用了Platform的方法,这时候就需要Mock这个MethodChannel来消...

2023-03-31 12:12:08 1132 2

原创 3月前端小报|读小报,涨知识

本期知识小报的主要内容•TS中映射类型和索引类型的简单应用•lighthouse实现自定义检测•React Portal相关使用TipsTS映射类型和索引类型的简单应用在TS中,当我们给出入参定义类型的时候,接口字段改变,对应的类型也要改变。那么如何能灵活添加额外的索引呢?这里可以用索引签名或者Record来实现,可以看到即使多了key值c和d,类型检查也不会报错。Record是TS内置的高...

2023-03-22 12:12:24 551

原创 迈向卓越 - 闲鱼终端场景CI能力体系化建设

闲鱼从2014年创立,到2022年已经走过了8个年头,闲鱼APP也随之逐渐复杂。在这其中,我们也面临着大型APP共性的一些通病,例如:团队规模变大带来的研发效能瓶颈的问题,大量历史代码带来的代码腐化问题等。从解决实际问题出发,闲鱼终端团队和质量团队一起协作在2022财年进行了CI能力体系化建设,并已经通过在单测,代码质量,自动化测试&回归等方面的建设,形成了一整套的能力沉淀。通过这些能力,...

2023-03-08 12:12:57 680

原创 2月Flutter小报|读小报,涨知识

本期内容一个小技巧快速鉴定Flutter页面Flutter页面在iOS高刷机上FPS竟然比原生页面更高?如何在Android平台建立流畅度的统一指标rasterCache命中率影响因素一个小技巧快速鉴定Flutter页面一个简单的小技巧快速判断某个页面是不是flutter页面: 双指/三指滑动页面,页面滚动速度是滑动速度的两倍/三倍原生页面:Flutter页面:主要原因是在多指拖动事件处理中...

2023-03-01 12:12:44 650 2

原创 闲鱼深度语义相关性计算:融合检索和生成任务

引言深度语义匹配在闲鱼搜索相关性计算中扮演重要角色,相关工作在文章[1]《闲鱼搜索相关性——体验与效率平衡的背后》中有简单的介绍。如题,本文介绍前段时间在深度匹配任务上的另一种尝试,通过检索和生成任务联合训练的方法提升相关性匹配的效果。融合生成任务提示匹配主任务的思路并不新颖,而在BERT流行的今天,本文则参考[2]《鱼与熊掌兼得:融合检索和生成的SimBERT模型》,稍加改动,使用BERT为Ba...

2023-02-22 12:12:51 544

原创 闲鱼消息稳定性治理的背后

引言闲鱼作为C2C电商交易平台,消息系统是导购链路上关键的一环。用户依赖聊天建立买家与卖家的信任,进一步获取商品信息。闲鱼消息的稳定性直接影响到闲鱼用户体验,成交效率。 为强化闲鱼消息系统的稳定性,保障用户体验。闲鱼消息团队在2022年8月份对消息系统稳定性进行了体系化治理。本文将从闲鱼消息团队视角出发,讲讲我们怎么做稳定性治理。问题定义我们的目标很明确:减少线上问题。 我们通过分析系统现状、回顾...

2023-02-16 12:12:53 553

原创 闲鱼大终端UI组件库——FishUI建设之路

背景随着闲鱼前端架构的不断演进,一些关键技术设施需要结合业务特征逐步自建,技术方案也要拥抱社区来提升可扩展性。一方面,闲鱼跨端开发框架kun让前端开发者使用JS/CSS/HTML即可交付终端页面,同时兼顾了动态性和高性能,另一方面,前端UI框架也正从集团 rax 逐步转向社区 React 方案。在这个大背景下,围绕 kun 和 web 两个容器的跨端组件建设也势在必行,因此 Fish UI 应...

2023-02-14 12:12:49 1342 1

原创 浅谈任务分发中的机制与并发

导言任务模型的抽象具有广泛通用性的,例如饿了么骑手每笔骑单是任务,小法庭中交易纠纷的评审也可以被抽象为任务。下面是简易的任务系统模块图,图示中去除了上下游的模块,保留了核心与小法庭业务特色部分。在任务分发中核心会遇到以下的挑战和难点:•分配制下任务消费堆积问题以及解法•申领制下任务异常消费问题以及解法•并发下任务过度消费问题以及解法任务堆积任务堆积根本原因是任务的流入速度大于任务的消费速度,...

2023-02-08 12:12:54 2953

原创 Windows平台Flutter桌面应用的底层模块化探索

前言Windows应用开发有着较为丰富和多样的技术选型。C#/WPF 这种偏Native的闭源方案,目前开发人员相对比较小众了。C++/QT 的跨平台框架,C++对于GUI开发来说上手会更难。JavaScript/CEF/Electron 基于Chromium 的跨端框架,使用前端技术栈来构建桌面应用,性能会略低一些。总而言之各有所长,有一点可以确定的是,跨端能力成为了选型的重要考量。Flutte...

2023-02-02 11:43:09 1112

转载 春节福利|《闲鱼技术2022年度白皮书》公开下载

目录结构‍‍‍‍‍‍如何下载‍‍‍关注本公众号,消息页找到【2022白皮书】‍‍‍‍‍‍‍‍‍‍‍‍(无需注册或登录,手机党也可放心下载)祝温故知新,兔年开新。‍‍...

2023-01-29 17:30:22 580

原创 12月知识小报|线上问题的抽丝剥茧与一锤定音

海恩法则是德国飞机涡轮机的发明者帕布斯·海恩提出的一个在航空界关于飞行安全的法则。每一起严重事故的背后,必然有29次轻微事故和300起未遂先兆以及1000起事故隐患。作为开发者,安全生产是我们底线,敬畏每一行代码,挖掘每一个故障背后的根因,避免再次落入同一个坑是应该成为我们的工作习惯,这里有几个我们线上真实有趣的故障案例分享给大家。三目运算符--最熟悉的陌生人三目运算符任何一个初学JAVA的同学都...

2023-01-18 12:12:42 786

原创 我们这样做容器分层性能测试

前言目前闲鱼不少业务正在从H5/Weex升级到Kun(基于W3C标准&Flutter打造的混合高性能终端容器),从测试角度来看,我们希望这种升级迭代对于用户体验是正向的,所以用好性能测试这把标准尺就显得格外重要。早期做性能保障时,我们在一些核心场景要上线或者上线之后遇到问题时,才去跑一些性能测试,这种方式只知道性能变差了,至于差在哪里,就只能反推开发去查问题,效率低且容易出问题。今年我们提...

2023-01-12 12:12:18 573

原创 电商交易场景状态机方案探索及应用

背景目前闲鱼行业产品有回收、寄卖、验货宝等,这些产品在基础交易模式上引入附加玩法规则,其状态机相比于普通交易模型更加灵活复杂。基础交易模型订单状态只包含:创建订单->付款->发货->确认收货 。以回收举例,在中台基础交易模型之上,又附加了诸多行业业务状态,如服务商收货、质检、用户确认质检等。这些状态,是通过用户或服务商等多种角色推进的,而业务状态的维护也需要闲鱼自己来负责。存在问...

2023-01-10 12:12:01 881

原创 研发协同利器:XState调研与应用

背景帖子详情是一个图文/视频混排、拥有大量长文本、大量交互和部分细节动效的页面,细节组件非常多,页面复杂度高。按以往的页面协作方式,会将一个个组件样式、组件数据和组件交互逻辑交给对应的开发同学完成,通过多人协同最终搭建出完整的页面,但这样的方式会造成后期维护该页面的一到两个核心同学成本急剧增加,需要理解每个组件内的逻辑代码;于是为了改善页面内的协作效率,同时为开发上下游协同效率提升打好基础,通过大...

2023-01-03 12:12:00 929 1

原创 12月小报|读小报,涨知识

本期知识小集的主要内容包括:•Flutter桥调用请注意结果反馈•Flutter await代码带来的潜在并发•Flutter FPS 高不代表一定流畅•Flutter新渲染引擎impeller尝鲜Flutter桥调用请注意结果反馈通过桥来拓展Flutter的能力,是非常通用的Flutter开发场景。常见的包括:网络请求,本地存储,异构页面通信等 。实现功能固然重要,但是如果控制不好返回值...

2022-12-27 12:12:56 836

原创 QCon直击|闲鱼推荐大规模应用背后的工程实践

讲师介绍闲鱼技术部 | 吴白万小勇(吴白),闲鱼服务端专家。毕业于南京大学计算机系,目前负责闲鱼技术推荐架构。推荐在闲鱼的应用不同于搜索的确定性,推荐场景面临的问题往往是不确定的。但是正是因为这种不确定,带来了非常大的可能。所以推荐在闲鱼基本上遍地开花的状态尽管如此,推荐在闲鱼仍然面临着非常大的挑战,而这些挑战和闲鱼C2C市场的定位和特性密切相关。总的来说,闲鱼有四个比较明显的C2C特性:•浅库...

2022-12-21 12:12:31 982

原创 互动抽奖背后的随机性与算法实现

背景抽奖,是一种典型的互动玩法形式。无论是大V的粉丝抽奖,还是活动会场的参与抽奖,这种起源于彩票开奖的互动玩法,同时兼顾了高期待感和低预期的特征,让活动在成本控制之余又能有惊喜和引爆点,这样的优势让其在各种运营场景中幻化万千,大行其道。在闲鱼各种互动场与营销活动中,抽奖自然也是一个相当高频使用的互动玩法。众所周知,越是经典的玩法,业务需求就越发别出机杼,在参与条件、开奖展示、奖品规则等各方面千变万...

2022-12-15 12:12:47 1999

原创 谈谈Java应用发布时CPU抖动的优化

研究背景通常情况下应用发布或重启时都存在cpu抖动飙高,甚至打满的现象,这是由于应用启动时,JVM重新进行类加载与对象的初始化,CPU在整个过程中需要进行比平时更多的编译工作。同样,闲鱼的消息系统在重新发布时经常有抖动的问题,如下图显示:日常情况下CPU使用率基本不超过20%,而每当应用重新发布时,服务器的cpu使用率骤增至40%以上。本文正是为了减少这种抖动,进而保障应用发布时的稳定性。Java...

2022-12-08 12:12:24 716

原创 iPad大屏&Flutter多引擎适配之路(详细)

背景在电商场景中iPad的大屏拥有比普通手机相比更大的屏幕,对于购物体验而言,如能充分利用好iPad的大屏体验,无疑提高用户购买体验,但一直以来在混合栈应用特别是Flutter混合栈中,在iPad大屏适配和Flutter多引擎适配都是个老大难问题。本文会介绍闲鱼在这iPad适配中的各个疑难点。分屏模式华为,oppo等厂商折叠屏的方案。界面会在展开和折叠时展示不同的视图样式。oppo称为平行视窗,华...

2022-12-06 12:12:19 1636

原创 11月小报|读小报,涨知识

本期知识小报的主要内容包括:• Lombok 之 @Builder 注解与 JSON 反序列化的冲突•如何动态设置日志输出级别•JWT的生成原理和误区•Java 8 parallelStream 避坑指南Lombok 之 @Builder 注解与 JSON 反序列化的冲突Lombok 是 Java 开发中常见的工具,可以极大提高开发效率,对冗余代码进行简化。@Builder 是 Lombok...

2022-11-29 12:12:14 574

原创 双十一|探索KUN的加载性能与增强体验

双十一与Kun关注闲鱼技术的同学想必都对Kun有所了解,Kun是闲鱼技术团队自研终端渲染容器,使用前端研发方式进行高效开发,最终以Flutter渲染给用户提供高性能体验。Kun已经在我发布的、闲鱼号、闲鱼超市等业务中使用,提供给用户良好的加载性能与独特的增强体验。一年一度的双十一要到了,我们也希望双十一能够应用Kun的加载性能与增强体验。而今年闲鱼双十一主互动是一个游戏化场景,具备互动复杂以及强运...

2022-11-15 12:12:45 499 1

原创 详解闲鱼KUN嵌套滚动容器设计与实现

背景介绍在电商频道/导购详情页中,为让页面信息呈现更多更丰富效果经常使用嵌套滚动容器搭建页面,常在大促/首页/频道/信息流等多SPU/多频道关键信息场景下使用,今年从kun支持第一个闲鱼超市业务到双十一项目整个过程中,悉数落地7个业务场景中嵌套滚动容器构建页面占据6个。从技术角度,嵌套滚动容器组件属于复合性交互容器组件,包括手势冲突/交互体验/流畅度等方向会面临挑战,比如在H5因其机制在模拟手势交...

2022-11-10 18:18:31 931

原创 闲鱼如何计算实时优惠:兼顾可扩展、高并发与数据一致性

问题与挑战•如何描述、存储和计算优惠并提供较好的业务可扩展性•如何保障大流量下优惠实时计算的性能•为优惠查询加速做的数据同步如何实现一致性本文的方案经过线上系统验证,对于优惠系统设计的场景和数据同步的场景可做相应的参考。背景在我们日常生活中,常常会遇到下面这样的场景:在闲鱼上,针对闲鱼交易中的粉丝购买和粉丝回购的优惠促销场景,提供了一种定向一口价的优惠能力:卖家可以按商品分别面向全部粉丝、老...

2022-10-27 12:12:24 543

原创 1024 节日抽奖|解锁新专栏【知识小报】

本期知识小报的主要内容包括:Flutter NullSafty有用么?Flutter 代码Trim机制的坑?Flutter为什么引入EngineGroup?Android折叠屏咋适配?抽奖有礼!Flutter NullSafty有用么?Flutter从2.0版本开始引入Dart语言的NullSafty 特性,并且在Flutter2.2版本中默认开启Dart3.0版本中已经明确不再支持非NullSa...

2022-10-24 12:13:37 380 1

原创 三代终端容器 KUN 的首次大考【架构演进】

闲鱼号在闲鱼业务中一直承担着非常重要的角色,它既是卖家组织商品的货架,又是达人自我表达的载体,既是大 V 私域运营的阵地,又是小铺开店经营的门面。它是闲鱼各产品线的交汇点,号店浑然一体,一定要类比的话,它更像是抖音/小红书个人主页 + 淘宝店的综合体。闲鱼号是个用户高频访问的场景,产品 Feature 快速迭代,体验上备受关注,当下面临的问题:•古董级高度耦合的业务代码、多业务线并行的日常需求时...

2022-10-20 12:22:03 1253

原创 详解闲鱼推荐系统(长文收藏)

在互联网信息爆炸的今天,推荐系统是我们身边一个无法躲避的存在。在淘宝上浏览商品,在抖音上刷视频,以及无处不在的广告等等。本文探讨闲鱼商品推荐系统的同时,结合所面临的多推荐场景工程维护任务重、算法模型优化难以自动辐射多场景的痛点,介绍如何构建通用的推荐中台。背景推荐系统用户在网络上浏览时,如果能准确描述自己的需求,可以通过主动搜索来找到自己需要的信息。但是在不少情况下,用户并不一定能准确的描述自己的...

2022-10-13 12:12:15 3719

原创 KUN 应用开发流程【实用教程】

前言本文从KUN在闲鱼落地为出发点,介绍如何通过KUN实现Web和Flutter技术增强你的移动应用程序。在结合了Web和Flutter的各自优势,以及它们背后良好的生态和社区支持,你能用它来覆盖你的所有上层业务,达到更佳的动态化效果。介绍KUNKUN 是一个让开发者使用 Javascript,HTML,CSS进行开发,使用Flutter进行增强的跨端开发框架。KUN 能力为什么选择KUN首先我们...

2022-10-11 12:12:41 1170 1

原创 电商搜索里都有啥?详解闲鱼搜索系统(长文)

搜索是电商平台的核心流量入口,承载着平台主要的成交引导、意图收敛、活动投放。一个稳定、高效、可扩展的搜索系统是电商平台得以生存发展的基石。本文探讨如何构建完善的商品搜索系统, 并根据闲鱼二手交易的差异化特性介绍闲鱼搜索系统的时效性优化。首先,构建一个搜索系统:电商场景的搜索搜索引擎搜索系统的核心是搜索引擎,目前Lucene、ElasticSearch等开源引擎已十分成熟,阿里云也提供完整的搜索解决...

2022-09-27 12:12:05 896

原创 大终端领域的新物种-KUN

KUN的 背景/动机即使已经到了2022年, 在面向复杂多变的用户端开发领域,我们依然绕不开一个问题 ?我们选择什么技术更适应我们的业务场景,不管是通用还是独特。这回到一个问题的原点,每一种技术都有它的局限性(短板)。单一技术的缺陷Native技术的局限性尽管Native技术在用户体验上有绝对的天然优势,但在工程化,部署效率,敏捷上又有天然的短板。(1)工程化效率低工程复杂度高,由于天然的把所有的...

2022-09-22 12:12:45 1554

原创 一次夜间接口超时的解决过程

背景闲鱼某关键应用A依赖类目系统富客户端(下文简称类目客户端),旨在为闲鱼商品域其他应用提供各类商品类目及属性数据(下文简称CPV数据)查询服务。每天凌晨,该应用所依赖的类目富客户端执行新老版本数据包切换时,应用提供的服务抖动非常明显,表现为大量接口超时(耗时100ms -> 3-5s),服务成功率明显下降(100% -> ~92%),RPC线程池活跃线程数上涨(50 -> ~1...

2022-09-14 12:12:19 452

转载 如何写出有效的单元测试

什么是单元测试《单元测试的艺术》中对单元测试的定义:一个单元测试是一段自动化的代码,这段代码调用被测试的工作单元,之后对这个单元的单个最终结果的某些假设进行校验。单元测试几乎都是用单元测试框架编写的;只要产品代码不发生变化,单元测试的结果是稳定的。为什么需要单元测试在我看来,单元测试的意义可以总结如下三点:单元测试是保证你写的代码是你想要的结果的最有效办法单元测试帮我们塑造设计单元测试是最好的文档...

2022-09-06 12:12:40 370

原创 支持英文/汉字/emoji长度计算的输入框实现

背景用户输入是平台获取用户信息的重要途径,也是用户自我表达的重要方式,社区业务场景下尤其如此,输入过程的流畅性、精准性、丰富性都是我们要重点保障的。下图是最近的一个产品需求,「圈内好物」板块下允许用户自定义「商品分组」。产品&设计同学有两个核心诉求:1. 支持输入汉字、英文、数字、emoji,且:•一个英文/数字的长度为 0.5•一个汉字的长度为 1•一个 emoji 表情的长度为...

2022-08-24 12:06:18 782

原创 这一年,我对终端组织与技术架构的思考【专家讲技术】

前言本文仅以个人观点阐述未来的端研发趋势和人才岗位结构趋势的要求,进而引出闲鱼技术团队今天要做的事情,闲鱼技术团队作为集团创新产品的先头兵,一方面希望通过持续的技术革新为业务带来核心竞争力,另一方面也希望为集团开拓新的技术领域从而引领新的技术风潮,通过技术带来长期的效能红利。KUN作为闲鱼技术团队在终端技术这一未来岗位的核心转型的重要基础设施,在推进过程中一定也会遇到各种不同的声音,因此更有必要让...

2022-08-17 12:12:41 318

原创 Flutter 长截屏适配 Miui 系统,一点都不难

背景现有 App 大部分业务场景都是以长列表呈现,为更好满足用户内容分享的诉求,Android 各大厂商都在系统层面提供十分便捷的长截屏能力。然而我们发现 Flutter 长列表页面在部分 Android 手机上无法截长屏,Flutter 官方和社区也没有提供框架层面的长截屏能力。闲鱼作为 Flutter 在国内业务落地的代表作,大部分页面都以 Flutter 承接。为了...

2022-08-10 12:12:17 1484

原创 这半年我做交易链路自动化回归的那些事儿...

背景闲鱼交易链路作为应用中关键链路的一环,具有多业务、多状态、多操作的特征。以订单操作举例:不同的订单类型、订单状态包含不同的操作;不同操作下触发的业务行为、领域服务的交互行为也各不相同。问题交易链路质量稳定性保障的测试难点包括:1.改动点涉及的业务范围广、评估难度高:交易承接着10余种复杂多样的业务场景和交易模式,一次改动往往涉及所有业务场景的验证。更糟糕的是,一次看...

2022-07-27 12:12:40 503

原创 Kraken中事件通道原理分析

前言客户端开发中,跨平台和动态性已是老生常谈的话题了,也诞生了ReactNative、Weex、Flutter等大前端方向的技术。Kraken作为一款上层基于W3C标准实现,底层基于Flutter渲染的高性能渲染引擎,同时兼顾了跨平台和动态化的特性。对业务的快速迭代起到了很关键的作用。其中事件的注册与分发在Flutter和JS的交互中算是其中比较典型的场景,今天就事件通道...

2022-07-21 12:12:34 621

原创 我在闲鱼做搭建——魔鱼搭投编辑器介绍

背景魔鱼搭投编辑器是一个前端页面可视化搭建工具,运营借助编辑器可以调用搭投的底层能力,在无需开发介入的情况下,自主修改页面内容;简单举几个需求场景增强一下体感:结合上回《闲鱼前端技术体系的背后——魔鱼》的介绍,我们回顾建设魔鱼平台的目标:1. 提升前端研发效率,收敛工程研发管理流程;2. 动态数据源可配置投放,从而在网关层优化页面首屏性能;3. 运营自主高效准确的干预投放...

2022-07-06 12:12:01 587

原创 Flutter富文本编辑器系列文章3——交互篇

之前的系列文章介绍了协议层和渲染层的实现,大家可以知道Mural是基于Flutter TextField进行渲染层的设计与实现,然后对其底层的渲染逻辑进行改造,从而对富文本编辑能力进行支持。但是我们在改造过程中发现,其实在交互方面,Flutter有很多相比起Native缺失的功能,本文会围绕放大镜模式和选区反向选择两个比较重要的交互点来展开说明。本文将会以官方代码来进行讲...

2022-06-15 12:12:43 850 1

原创 打造Flutter高性能富文本编辑器——渲染篇

本系列文章主要介绍Flutter富文本编辑的设计和实现,从协议层、渲染层、自定义扩展以及体验优化等方面,详细介绍如何实现一个功能完善、可扩展、高性能的Flutter富文本编辑器,以及闲鱼在实践过程中遇到的问题和我们的一些解法。开篇协议篇文章,我们介绍了Flutter富文本编辑器协议层的设计。以Slate为例,介绍了协议层设计的几个重要的概念:嵌套Model、Opearti...

2022-06-08 12:12:34 2216 2

原创 节日献礼:Flutter图片库重磅开源!

背景去年,闲鱼技术团队新一代图片库 PowerImage 在经过一系列灰度、问题修复、代码调优后,已全量稳定应用于闲鱼。相对于上一代 IFImage,PowerImage 经过进一步的演进,适应了更多的业务场景与最新的 flutter 特性,解决了一系列痛点:比如,因为完全抛弃了原生的 ImageCache,在与原生图片混用的场景下,会让一些低频的图片反而占用了缓存;比如...

2022-06-01 12:12:55 900

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除