知鸦日报2024-06-30

2024-06-29 16:30:00 ~ 2024-06-30 16:30:00

技术

slack技术:Proactive Measures Against Password Breaches and Cookie Hijacking

摘要

Slack采取主动措施和创新的自动化技术,保护用户免受潜在的侵犯。当Slack的Cookie失效时,与之关联的会话将被标记为终止,完成后用户将被注销出他们的工作空间。这对于保护用户的账户免受未经授权的访问是一件好事,但我们也知道在关键对话或在会议中演示时,没有人希望失去对Slack的访问。因此,在运行时,我们的自动化会检查每个受损的Cookie,评估关联用户的地理位置是否意味着在他们通常的工作时间内。如果是这样,该特定Cookie的失效将安排在工作时间范围之外的时间窗口内,而属于当前不在工作时间内的用户的Cookie将立即失效。这样我们就可以根据每个用户的时区提供积极的用户体验,同时计算出最高效和及时的失效时间,以保护被窃取的Cookie。

登录后可查看文章图片

pinterest技术:Web Performance Regression Detection (Part 3 of 3)

摘要

Pinterest网站在预发布阶段通过A/B实验和JS捆绑大小检查来主动检测和防止性能回归。当实验的性能指标出现明显回归时,会触发警报和工单,以跟踪和解决问题。此外,通过CI流水线运行的JS捆绑大小检查可以防止捆绑大小增加导致的回归。任何捆绑大小的显著变化都会在PR评论中报告,并发送警报通知相关团队。开发人员可以通过提示解决回归,并使用webpack-bundle-analyzer工具进行进一步调查。

登录后可查看文章图片

票牛如何使用 MapboxGL 实现在线选座

摘要

最近我们推出了在线选座功能,让用户更方便地购买演出票。为了改善选座体验,我们决定使用Mapbox GL来实现地图渲染和展示,而不是之前使用的Leaflet。Mapbox GL支持更精细的缩放级别,同时可以展示文字和图形。我们还使用GeoJSON格式来描述座位图,通过Mapbox GL的引擎来驱动选座功能。这样用户可以更准确地了解座位信息和视野范围。

登录后可查看文章图片

Elasticsearch 使用误区之二——频繁更新文档

摘要

这篇文章介绍了在使用Elasticsearch时频繁更新文档的挑战和步骤,并提供了一些性能优化建议。文章指出,更新操作涉及重新索引,而不是简单的原地修改,这会增加磁盘I/O和计算资源的使用。同时,标记为删除的文档在段合并前仍然占用空间,增加了存储负担。文章中的截图进一步解释了为什么随着更新文档的次数增加,存储占据磁盘空间也会增加,以及为什么删除文档后存储占据磁盘的空间也会增加。段合并之后,磁盘空间会骤降。

为了优化性能,文章提出了两个建议。首先,对于用户行为数据(如浏览次数、点赞数),可以合并多次更新为一次批量更新。建议设置一个合理的批量更新间隔,比如每隔5分钟更新一次,而不是每次用户操作后立即更新。其次,在电商平台中,对商品信息进行批量更新。可以使用 bulk API一次性更新多个文档,减少单次请求的开销。

此外,对于不需要实时可见性的索引,建议增加刷新间隔,比如设置为30秒或60秒。可以通过设置refresh_interval来实现。

登录后可查看文章图片

即刻技术:从动物森友会聊主机游戏联机机制

摘要

动物森友会游戏的联机模式中使用了锁步同步和状态同步两种方式。锁步同步要求每步操作都通知对方,而状态同步则同步整个游戏状态。在联机中,需要一台主机作为权威主机,其他主机通过该主机下发的数据来更新本地游戏数据。然而,当联机用户过多时,主机可能无法承受负荷,导致游戏出现问题。为了解决这个问题,一些游戏引入了外部服务器来进行状态同步。此外,家用网络中的NAT技术也会对双向通信造成困扰。不同的NAT类型有不同的限制,可以通过推导判断出哪两种NAT类型的网络是不可能建立双向通信的。

知乎技术:kids:知乎日志系统

摘要

这篇文章介绍了一个名为Kids的日志系统,它是为了构建一个方便实时订阅应用日志的anti-spam系统而开发的。Kids系统具有分布式收集、集中存储、实时订阅、不丢失数据和对应用性能影响小等特点。文章提供了Kids的样例配置文件和发布订阅的简单操作方法。Kids系统的配置文件可以通过不同类型的store来实现日志的写入、丢弃和转发等功能。同时,Kids系统还支持远程节点和备用文件存储,以确保数据不丢失。该系统的协议与Redis协议兼容,可以通过Redis客户端进行订阅操作。

知乎技术:Yet another Sketch Mirror App for Android

摘要

Sketch是一种设计产品交互原型的主流工具,但在Android手机上无法使用官方提供的Sketch Mirror。文章介绍了三种在Android上预览Sketch文件的方式,并推荐了一个实现了实时预览功能的Sketch Mirror App for Android。使用时需要注意良好的WIFI环境、分辨率适配以及不支持横屏/分屏模式等问题。连接Sketch的原理是通过WebSocket传输数据,第三方软件可以读取这些数据实现实时预览功能。

知乎技术:Spark 在反作弊聚类场景的实践

摘要

知乎最近开始尝试使用聚类的方式去发现和挖掘spam用户。聚类的目的是将相似的内容和行为聚集在一起。常见的聚类方法有k-means、层次聚类以及基于密度和图的聚类分析方案。相似度的度量是聚类的关键之一,常用的相似度算法有edit distance、cosine similarity、Jaccard相似度和pearson相关系数等。本次聚类使用了Jaccard和sim-hash算法,其中sim-hash适用于数据量较大的场景。sim-hash的计算过程包括词的hash值计算、加权、合并、降维和相似度比较。相似度比较使用hamming distance来衡量。

知乎技术:Wukong 反作弊系统缓存的优化

摘要

知乎反作弊系统Wukong进行了局部重构,主要解决了重复查询和大数据量查询对Mongodb读压力过大的问题。重复查询指的是相隔时间很短的多个相同类型的Action,而大数据量查询则是查询结果的一大部分是相同的。这些问题只存在于某些策略中,对于其他策略并不适用。重构的目标是减轻对Mongodb的读压力,放开读的条数限制,提高系统性能。

知乎技术:知乎服务化的实践与思考

摘要

知乎在服务化过程中遇到了服务数量不可控、RPC分拆的发布风险和性能问题。他们发现基于SSO机制对HTTP接口进行垂直拆分是可行的,可以灰度控制风险,并对客户端透明。新项目与主站的耦合较低,只需要少量RPC接口,并且对外暴露的接口也很少。这种拆分方式可以降低主站联动的发布频率,减少发布风险。他们得到的启发是,服务的分拆应该减少RPC,增加内聚,以实现更稳定的接口和较小的服务边界。

知乎技术:知乎 SiriKit 实战

摘要

本文介绍了苹果在WWDC 2016上开放的SiriKit,以及其设计理念和实践。SiriKit是一款智能语音助手软件,开发者可以利用其API将自己的服务提供给用户。SiriKit可以实现语音和视频通话、发送消息、发送或接收付款、照片搜索、打车和管理健身等功能。使用SiriKit可以为应用增加系统级的入口,提升用户体验,并且能够在系统应用中使用自己的服务。同时,文章还详细介绍了SiriKit的Intent处理流程,包括Speech、Intent和Action三个步骤,以及不同意图下的信息采集。

知乎技术:反作弊基于左右信息熵和互信息的新词挖掘

摘要

这篇文章讲述了团队通过挖掘未登录词来应对站内的恶意营销问题。为了确定一个词是否可以成为新词,团队使用了信息熵和互信息这两个指标。信息熵用来衡量词语在不同语境中的出现频率,互信息则衡量两个词之间的共享信息量。通过计算候选词的左右信息熵和互信息,团队可以判断是否可以形成新词。这种方法取得了良好的效果。简而言之,团队通过分析词语的特点和关联性来解决恶意营销问题。

知乎技术:RxLifecycle: 绑定你的 Observable 到生命周期上

摘要

RxJava 是 Android 开发中的一件神器,但要注意在 Activity 或 Fragment 里使用 RxJava 时可能导致内存泄漏。文章提供了一个解决方案,即在 Activity 销毁时手动切断 Observable 与 Observer 的联系。然而,这种方法不够优雅,需要保存 Disposable 的引用并手工进行 Dispose。文章介绍了一种更优雅的方法,即使用 Rx 官方提供的操作符 TakeUtil,可以提前中止 Observable 与 Observer 的联系。通过创建一个变换操作符,可以实现自动释放对 Observer 的引用。

知乎技术:Matisse Android 图片选择器

摘要

本文介绍了一款名为Matisse的图片选择器,它可以帮助开发者方便地在Android应用中选择图片。与系统组件相比,Matisse具有更符合业务场景的界面和交互,并且支持日夜间模式。Matisse的调用非常简单,只需传入一些参数即可实现图片选择功能。它支持多种图片类型的选择,可以有序选择图片并指定最大可选数量,还可以定义筛选规则和缩略图的缩放比例。此外,Matisse还支持横竖屏切换,并且可以与不同的图片加载库一起使用。

知乎技术:Python 缓存框架 Tache 使用介绍

摘要

Tache是一个Python的缓存框架,支持Python2和Python3。它能缓存不同类型的函数和方法,并支持基于标签的缓存和失效。文章提供了两个使用案例:一是使用标签实现批量失效,只需失效一个对象变更处;二是使用标签控制分页操作的缓存,保证增加和删除评论时的缓存一起失效。同时,文章介绍了批量缓存的使用,可以对列表中的多个元素进行批量缓存。针对分页操作,文章提供了get_comments函数的重构示例,使用标签来缓存评论数据。

知乎技术:算法在社区氛围的应用(一):识别垃圾广告导流信息

摘要

为了维护社区氛围,知一声通过使用BILSTM-CRF模型识别和控制垃圾广告。该模型结合了LSTM和CRF的优点,在序列标注任务上表现优异。模型的目标函数由最后一层决定,通过最小化负对数似然来优化参数。训练数据需要标记,并且可能需要考虑导流信息的前后缀。CRF层利用viterbi解码算法从状态分数和转移矩阵中解码输出状态序列。通过分析导流样本,模型在识别导流内容方面表现出色。

知乎技术:算法在社区氛围的应用(二):深度学习在不友善文本识别中的应用

摘要

知乎通过深度学习算法辅助审核不友善内容,提高了举报处理效率。每天收到约25,000条举报,其中大约7,000条关于不友善内容。如果算法预测某条内容为不友善,会在0.3秒内删除并发送私信通知。非不友善内容会被忽略,其他内容会进行多次人工审核。知乎重视每一个举报,根据举报增强算法的准确度,并每天全量审核新产生的内容。由于数据不均衡和词语分布的特点,全量内容模型的准确率要达到98%以上非常困难,因此采取适当的阈值来维持召回内容的处理准确率在80%以上,并进行人工审核。知乎的不友善内容处理系统使用深度学习模型,其中采用了Google的word2vec词向量模型。

知乎技术:算法在社区氛围的应用(三):机器学习在答非所问识别上的运用

摘要

这篇文章介绍了使用随机森林算法来识别答非所问的内容。随机森林通过多棵分类树的投票来确定分类结果。文章还提到了特征工程和训练样本集的生成。对于Random Forest的实现,作者使用Spark中的Random Forest完成了模型的迭代,取得了不错的结果。此外,文章还分析了与时间和回答的暴光有关的特征对识别的影响。根据图表显示,经过一天的时间累积,准确率达到90%,但召回率只有40%。随着时间的增加,准确率和召回率有所提升。

知乎技术:知乎客户端内测和灰度方案演进

摘要

知乎进行内测和灰度的方式有所不同。在内测阶段,他们会将新功能的安装包发布到知乎内测平台供用户下载,同时也会在内网提供给内部员工试用。内测用户的邀请策略经历了两个阶段:邮件和私信邀请内部员工,以及App内邀请内部员工和线下活动邀请外部用户。在灰度阶段,他们会将新版本发布给少部分用户,以降低质量风险。至于如何让用户下载内测/灰度版本以及持续收集用户反馈的问题,将在后文中详细说明。

知乎技术:知乎反作弊系统「悟空」架构演进

摘要

知乎采取了立体防御策略来应对问答社区的内容和行为作弊垃圾问题。他们通过策略反作弊、产品反作弊和模型反作弊等手段来解决问题。在事前阶段,他们加强风险教育、业务决策参与、监控报警和同步拦截。在事中阶段,他们针对不同嫌疑程度的行为与账号,进行不同层级的处理。在事后阶段,他们处理那些非常低频或影响较小的行为。通过人工审核和合理的模型算法来控制风险。

知乎技术:Fastlane实战(一):移动开发自动化之道

摘要

文章介绍了团队在移动开发过程中,使用Fastlane来解决ITC提包、Meta内容管理、签名、证书管理等繁琐任务的经验。起初,他们只是将Fastlane用于iOS团队内的证书同步和上传ITC的问题,但随后发现Fastlane在私有Pod发布、代码静态检查、UIAutomation测试等场景中也非常实用,并逐步推广到Android平台。Fastlane可以与Jenkins、Circle等CI系统良好集成,简化配置复杂度。文章简要介绍了Fastlane的特点,它是一套用Ruby语言编写的自动化工具集和框架,每个工具对应一个Ruby脚本,用于执行特定任务。

知乎技术:知乎安卓客户端启动优化 - Retrofit 代理

摘要

知乎 Android 客户端为提升用户体验,重点优化了启动速度。通过使用 Method Tracing 这一工具来跟踪启动过程中调用的方法和耗时,发现了导致启动变慢的问题。Method Tracing 是测量代码执行性能的常用方式之一,可以手动调用 startMethodTracing() 和 stopMethodTracing() 方法进行跟踪,并将结果保存在手机的 .trace 文件中。这一工具在性能优化中非常有用。

知乎技术:知乎客户端埋点流程、模型和平台技术

摘要

知乎介绍了客户端埋点的重要性和难点,以及埋点流程和迭代史。客户端埋点相较于Web端更难,修复问题需要等待下一个版本发布,对产品快速迭代产生负面影响。知乎的埋点流程包括多个角色,如产品经理、业务数据负责人、开发工程师和测试工程师。强调了埋点的能力、意愿和工具的重要性。为了快速推进埋点,数据平台组招聘了埋点设计人员。设计了"业务数据负责人"角色,负责业务数据仓库需求和埋点设计。在工具方面,知乎早期使用的小工具能力有限,用户体验不够好。将埋点测试整合到客户端发版流程中会降低测试工程师的效率。

知乎技术:知乎移动端性能测试实践

摘要

移动客户端的性能测试对于测试人员来说是一项复杂而重要的任务。然而,实施性能测试存在一些困难,例如环境配置、测试问题场景复现和结果分析。本文介绍了几款性能测试工具,但它们都存在一定的难度和依赖本地开发环境的问题。为了解决这些问题,设计了一个便捷、无门槛的性能测试工具,并介绍了工具的使用步骤、设计目标、问题发现、实现细节、自动化接入和扩展等方面。

知乎技术:知乎安卓端第三方库敏感代码扫描机制 - FindDanger

摘要

知乎重视用户隐私保护,推出敏感代码扫描机制FindDanger。该机制用于扫描第三方库是否存在获取用户隐私的风险行为。机制使用GitLab + Jenkins进行管理,工程师提交merge request后,会触发扫描任务并生成报告。报告链接发送到GitLab的merge request页面,工程师通过分析报告给出使用意见。目前FindDanger支持多项检测规则,根据危险级别判断风险程度。

知乎技术:知乎 Android 客户端组件化实践

摘要

知乎 Android 客户端最早采用单工程 MVC 架构,但随着业务规模扩大和开发人员增加,出现了代码耦合和协作问题。为了解决这些问题,他们进行了组件化重构。采用多工程多仓库方案,每个组件有独立的仓库,主工程通过 aar 依赖各个组件。架构包括主工程、业务组件、基础组件和基础 SDK,实现了职责清晰独立、拆解和组合的能力。组件化的第一步是解耦,包括处理公用代码和拆分基础业务逻辑成基础组件或独立的 SDK。同时,建立了一个 common 组件来统一存放小代码和资源。随着组件化的进行,common 组件应逐渐变小。对于共同使用的代码和资源片段,允许直接复制以避免影响其他业务。另外,对于需要在应用启动时初始化服务的需求,每个组件添加了 init() 方法,但仍需解决依赖顺序问题。

知乎技术:知乎 iOS 基于 CocoaPods 实现的二进制化方案

摘要

iOS客户端编译时间长,需要减少编译时间。解决方案是使用二进制依赖管理。具体流程包括同步主仓库、使用Platypus工具产生二进制。需要注意的是,pod需要白名单筛选,合并模拟器和真机编译产物,合并Swift代码文件夹。旧版Xcode编译的Swift二进制无法在新版Xcode使用。

知乎技术:知乎移动客户端组件管理平台

摘要

知乎在两年前调整了移动客户端的发布流程,采用固定的发版周期。为了提高效率和团队协作,他们开发了移动端组件管理平台Athena。Athena集成了Gitlab、Jenkins和Slack等工具,使团队可以在一个平台上查看所需的组件或应用资源,节省了切换工具和沟通成本。这个平台还帮助新员工快速上手工作,提供了权限控制和规范统一的工作流程。

知乎技术:Golang 单元测试框架 gocheck 使用介绍

摘要

gocheck是一个比较健全且简单的Golang单元测试框架,它在Golang官方的testing package基础上提供了丰富的功能和断言方法。使用gocheck可以验证程序的正确性,保持机器状态不变,并且测试独立性强。其中的Assert断言方法可以根据预期值检验接口返回值是否匹配,如果不匹配则记录错误。gocheck还提供了丰富的检查器方法,如全等校验等。

知乎技术:知乎反作弊垃圾文本识别

摘要

知乎是一个拥有超过2亿注册用户的社区平台,近期他们面临着对垃圾信息的治理挑战。他们通过升级名为"悟空"的策略引擎和引入深度学习识别垃圾文本的方法取得了不错的效果。他们发现当前站内的垃圾文本主要包括导流内容、品牌内容、诈骗内容和骚扰内容。为了高效检测这些垃圾文本,他们选择了使用CNN(卷积神经网络)作为算法,因为CNN在训练和预测速度上都快于RNN(循环神经网络)。这种CNN文本分类模型能够准确识别关键词,满足快速垃圾文本检测的需求。

知乎技术:知乎客户端线上性能数据分析系统实践

摘要

该文章介绍了一套用于查看客户端线上性能指标运行情况的数据分析系统。系统通过大数据技术对原始数据进行预处理清洗和计算,包括数据类型抽取、数据量采样、类型数据标识、去重、差异化数据处理、指标数据预计算、维度聚合和异常数据过滤等操作。系统架构包括客户端和web的数据收集、日志服务器、Kafka集群、Spark Streaming、Druid、Elasticsearch和可视化平台。该系统的目标是提升客户端质量,优化低效率代码,提升用户满意度和建立用户信任。

知乎技术:Druid 与知乎数据分析平台

摘要

知乎数据平台团队基于开源的Druid打造了自助式数据分析平台,支持统一的数据源管理、自助式报表配置、多维度多指标的组合分析、自助式仪表盘配置、开发平台接口和统一的数据权限管理。平台使用Druid作为数据存储解决方案,具备低延时的数据摄取和灵活的数据探索分析能力。Druid的架构包括DataSource和Segment等数据结构,以及Historical、Broker和Router等查询服务组件。Druid集群还有外部组件Deep Storage和Metastore Storage,用于存储Segment文件和元数据信息。在大查询量场景下,可以直接查询Druid作为主力查询引擎。

知乎技术:知乎 iOS App 启动时间测试实践

摘要

知乎iOS App的启动时间对用户体验至关重要。文章介绍了测试团队针对竞品启动时间的实践,并结合工程师的优化结果,介绍了持续监控和主动发现启动异常的测试方案。常见的启动时间测试方法有Xcode Developer Tool、客户端计算统计和录屏。其中,录屏测试方案需要解决开屏广告对启动时间判断的影响,在去除开屏广告后进行测试更具参考价值。为了保证测试数据的真实性,测试方案分为冷启动和暖启动两组场景。同时,使用开源工具xrecord进行录屏,并进行视频分析。

知乎技术:知乎 Android 客户端 CI/CD 方面的努力

摘要

知乎的Android团队通过组件化方案提升了工程师的研发效率。他们使用文件控制进行跨组件的CodeReview,并通过gitlab来浏览每个版本的改动。此外,他们还实现了联合打包的功能,能在多个组件提交代码时生成对应的测试包。这些措施有助于提高团队的协作效率和代码质量。

知乎技术:大数据平台的数据同步服务实践

摘要

知乎在大数据系统中建立了数据同步平台,选择了Sqoop作为数据同步工具。Sqoop具有并行计算能力、与Hive兼容,但数据源支持较少。DataX支持丰富的数据源和限速,但需额外的资源。考虑到资源利用和Hive适配,选择了Sqoop。平台化目标是构建通用的数据同步平台,简化任务接入、监控和报警、屏蔽MySQL DDL影响、可扩展新数据源。整体架构包括API Server、数据源中心、Scheduler和Worker。平台不要求用户理解底层原理。

知乎技术:知乎如何洞察你的真实喜好?首页信息流技术揭秘

摘要

知乎首页业务总监张瑞在2018 AI开发者大会上分享了知乎机器学习的应用。知乎的信息流推荐框架是基于多策略融合的多源内容推荐系统,代号“水晶球”。系统通过召回和排序两个步骤来确定首页内容。召回根据用户的历史行为表现,确定数十个推荐队列,包括热点新闻队列、视频队列等。排序阶段将召回源的内容按需求排序后返回。最后,DNN对内容进行排序。系统可以在20ms内完成打分和排序过程,并使用反馈数据进行业务控制操作。知乎的信息流推荐系统经历了技术演进,从最初的简单排序到引入EdgeRank系统,取得了一定收益。

知乎技术:知乎社区核心业务 Golang 化实践

摘要

知乎社区选择使用Golang重构核心业务,包括会员和评论功能,以解决Python在运行效率和维护成本方面的问题。改造后,他们节约了80%的服务器资源,多人开发和项目维护成本大幅下降。Golang作为新项目的推荐语言,具备并发优势、完善的生态系统和部署开发效率。同时,知乎还完善了内部的Golang基础组件。

知乎技术:使用 SugarAdapter 快速构建 Android 列表页面

摘要

知乎 App需要一个易上手、可维护的列表脚手架来支撑业务需求。SugarAdapter是一种简化RecyclerView使用的方案,通过annotationProcessor生成冗余代码,不需要复写Adapter。SugarHolder是一个简化RecyclerView创建多种列表视图的解决方案,通过Layout-ViewType-Data的模式简化使用。ViewHolder可以视为列表中细粒度的Controller。

知乎技术:知乎推荐系统的实践及重构之路

摘要

知乎是一个综合性知识内容平台,用户数超过2.2亿,提出了超过3000万个问题并获得了1.3亿个回答。除了首页推荐外,知乎还有20多个推荐场景,因此需要构建一个通用的推荐系统。推荐系统通常包括召回层和ranking层,召回层从候选集合中选择待排序集合,然后经过排序模型选出推荐结果。对于通用的推荐系统,需要考虑用户的多维度需求,采用多个不同队列进行排序并通过融合策略满足不同需求。知乎的推荐系统已经包含了召回层、ranking层和二次排序。

知乎技术:知乎 AI 用户模型服务性能优化实践

摘要

知乎的AI用户模型服务主要为知乎用户提供数据和服务,包括首页个性化Feed的召回和排序、相关回答的用户长期兴趣特征、问题路由和回答排序中的作者创作权威度,以及广告定向投放用到的基础属性等。该服务提供的数据和功能包括用户兴趣、用户Embedding表示、用户社交属性、用户实时属性和用户基础属性等。服务架构主要分为Streaming/离线计算、在线服务和HBase多集群同步三部分组成。其中,Streaming计算主要涉及实时兴趣的计算流程,包括相应日志获取、映射到对应的内容维度、用户-内容维度汇总和计算兴趣等。

知乎技术:知乎 Android 客户端 Hybrid 调试实战

摘要

知乎客户端中的Hybrid框架存在联调问题,调试工具不完备。为了方便调试,可以使用通信日志和全局日志记录问题。通信日志通过在两端打印约定格式的日志,使得前端能够了解通信过程。全局日志可以通过adb命令获取,也可以使用flipper工具查看。这些工具能够帮助解决前端和客户端开发的联调问题。另外,还提供了本地模拟和远程调用两种方式来测试客户端接口。本地模拟通过在手机上打开一个网页,点击模拟调用按钮实现。而远程调用则通过在PC网页上调用客户端接口,通过扫描二维码进入Hybrid页面来实现。这样可以更方便地进行接口测试,特别是针对特定页面才可以调用的接口。

知乎技术:仪表盘场景的前端优化

摘要

这篇文章介绍了一个中台系统中仪表盘页面的设计思路。仪表盘由不同的图表卡片组成,支持多种类型的图表展现。为了实现动态添加、删除和编辑卡片的功能,将仪表盘信息分为仪表盘和卡片两个实体,并约定了两类接口供前端使用。前端代码实现简单,通过一个自治的思想,仪表盘组件只负责摆放卡片,而卡片的加载、查询和渲染由卡片自己负责。使用了react-refetch类库来简化数据加载过程。然而,这种自治的解决方案在某些情况下导致仪表盘页面卡死或交互滞后的问题。原因是某些仪表盘的卡片数量较多且需要渲染大量数据,导致页面性能下降。

知乎技术:知乎实时数仓实践及架构演进

摘要

这篇文章介绍了知乎在实时数仓中的稳定性实践。2016年初,知乎选择了Spark Streaming作为实时数据处理框架,考虑了日志量和实时性需求。为了保证数据正确性,知乎在Spark Streaming层实现了At-least-once语义,并在下游做了去重逻辑。文章还提到了通用的ETL逻辑与埋点数据结构的关系。

知乎技术:知乎 HBase 实践

摘要

知乎选择使用HBase作为在线存储的支撑组件。之前的离线计算集群中,HBase的日常计算和数据读写受到其他系统影响。为了满足在线服务的需求,需要构建一套适用于在线服务的HBase系统。需求包括隔离性、资源利用率、成本控制等。为此,团队参考基础设施平台化经验,目标是将HBase服务打造成基础组件服务平台,提供给上游业务使用。

知乎技术:数据分析在知乎商业质量保障中的初步实践

摘要

知乎客户端发版周期短,商业功能易受第三方改动影响。为减少故障,商业化测试团队运用核心数据进行验证。核心指标包括广告的填充率、加载率、可见率、点击率、转化率等,以及客户端和服务端的性能和资源占用情况。在需求评审阶段关注埋点设计,灰度阶段对比版本核心数据判断功能是否正常。服务端上线时观察监控,项目上线后及时分析数据是否达预期。

知乎技术:Android DataBinding 编译变慢之谜

摘要

知乎 Android 客户端在进行组件化拆分时,发现编译时间突然增长。经排查发现,一个组件拆分导致 setter_stores.bin 文件体积增加,与编译时间增长相关。体积和编译时间的增长与依赖树中 databinding 组件数量有指数关系。即使有新增普通库的依赖层级,编译时间不变;但如果有启用 databinding 的库,编译时间会增加。解决方案是去除一些组件的 databinding。

知乎技术:为知乎增加快捷键

摘要

知乎最近在桌面端增加了一些快捷键,包括在浏览页面时的选中、展开和赞同功能,以及播放视频时的全屏和静音等功能。文章分享了开发快捷键的经验,提到了快捷键被重复定义和实现的问题。作者提出了一种解决方案,通过在父组件中注册快捷键,在回调时调用子组件实例方法来实现功能。这种实现在知乎的组件结构中最多只能在层级中部的AnswerItem范围内进行。

知乎技术:Griffith - 知乎视频播放器

摘要

Griffith是一个基于React的视频播放器,适用于知乎网页和移动网页。它具有简洁易用的用户界面和快捷键支持。该播放器使用React开发,支持通过组件调用,并使用Context API进行状态管理。它可以通过MSE实现动态平滑切换视频清晰度,节省视频CDN带宽。Griffith还提供了免构建的standalone模式,可以直接在浏览器中使用。它还具有丰富的事件系统,支持滑出窗口暂停功能。

知乎技术:「知乎画报」的移动端动态化工程实践

摘要

这篇文章主要介绍了知乎在移动端推广落地页上的动态化方案实践经验。文章提到了落地页加载速度缓慢、支持预加载实现秒开、转化信息的全面采集和用户体验升级、支持样式实验提升转化效果等问题。他们通过开发名为"Morph"的动态化基础能力,采用Flexbox布局编写样式文件并保存在云端样式数据库,通过独立的样式服务实现信息流广告卡片的展现。移动端已实现的动态化基础能力主要应用于信息流广告卡片的展示。

知乎技术:知乎移动端云测试平台实践(一)—— 系统设计

摘要

知乎移动云测平台是为了解决公司移动设备管理和测试效率问题而开发的。平台主要功能包括设备管理、远程调试、自动化测试、兼容性测试和定向稳定性测试等。架构上分为web前端、后端server和agent client三个部分。agent client使用Java开发,通过adb和libimobiledevice管理PC上挂载的Android和iOS设备,支持USB或WiFi连接。平台采用Netty和Protobuf进行Socket通信。在设备远程调试中,采用WebSocket实现实时数据推送,减少网络流量和延迟。实现UI自动化测试使用Appium工具,稳定性测试采用Monkey和指令生成方案。


‹ 2024-06-29 日报 2024-07-01 日报 ›

qrcode

关注公众号
接收推送