公司:知乎
知乎是一家中国大陆的问答网站,创立于2011年1月26日,产品形态与美国在线问答网站Quora类似。“知乎”在文言文中意为“知道吗”。2012年2月底,知乎使用“发现更大的世界”作为其宣传口号。截至2017年9月20日,知乎注册用户数超1亿,日活跃用户量达2600万,人均日访问时长1小时,月浏览量180亿。截至2016年5月,知乎累计产生了1000万个提问、3400万个回答和3500万个赞同。2021年至纽交所上市,在挖掘优质创作会员与投入自有内容的同时,随着多样性的社群文化增加,知乎越来越类似于reddit等同好论坛。
知乎由北京智者天下科技有限公司(法律性质为有限责任公司)所持有,其法律代表人是李大海。智者天下亦开发了包括Android、iOS平台的手机“知乎客户端”、“知乎群组”、“知乎日报”与“公益壹点通”四款手机应用程序。
知乎视频高可用设计
这篇文章主要是一系列图片的集合,内容涉及多个领域。图片中包括建筑、风景、动物等各种不同的主题。文章没有提供任何具体的解释或描述,只是简单展示了这些图片。
知乎 Druid 集群优化实践
这篇文章主要讲述了知乎在Druid集群建设中遇到的问题以及如何提升稳定性。文章介绍了Druid在知乎的应用场景和集群规模,以及Druid的整体架构和各节点的职责。通过阅读文章可以了解到集群从发展到不稳定再到稳定运行的历程,对于Druid初学者也有简单介绍。
知乎质量平台的设计和实现
质量保障团队为知乎质量体系建设做了一系列工作,包括规范流程、测试、集成流水线建设、内测和灰度等。他们决定实现一个自动收集和展示质量数据的平台,主要包括数据收集、数据处理和数据展示三个模块。数据收集主要获取客户端版本上的需求和Bug统计。版本信息对于测试报告是基本维度,分为开发、测试、灰度、上线四个阶段。事业部信息通过需求和Bug的负责人间接找到对应事业部。质量平台根据版本和事业部信息判断阶段和归属。
知乎 iOS 客户端工程化工具 - Venom
知乎iOS客户端项目Venom旨在解决工程构建、二进制构建、组件管理和调试工具等问题。它是一款为开发人员打造的Mac应用程序,内置了全套的Ruby Gem和Cocoapods等构建环境,用于简化开发过程中繁琐的任务。Venom使用自己的组件描述文件来扩展pod命令的DSL,将每个描述文件转化为一次podfile的pod调用。Venom还提供统一的开发环境,加快编译速度和打包速度,进行组件调试和多组件联合调试以及约束组件依赖关系等功能。
知乎启动时间录屏自动化测试
知乎利用录屏自动化测试方案评估App的启动耗时。方案包括通过训练模型识别关键节点图片、自动启动App并保存图片帧、进行数据处理和计算启动时间。最后建立MR准入机制。方案利用TensorFlow进行机器学习模型训练,保存在/tmp/output_graph.pb中。每个节点至少有20张图片。该方案能够更准确地反映用户的真实感受。
知乎 Android Gradle plugin 实践
知乎开发的Gradle插件在Android Studio中的使用,支持自定义插件以实现各种扩展功能。插件提供了统一配置,如统一的依赖版本号的自动升级、git hook的添加、单元测试、覆盖率和pmd等的默认配置,以及组件化相关的默认配置。新开发者只需应用插件,即可完成通用配置,减少配置冲突和复杂度。插件还提供了解决依赖管理问题的方案,如限制第三方库的引入。
知乎商业测试工作台 Simba 的设计与实现
知乎商业化质量保障团队设计了客户端工作台Simba,用于解决商业广告测试中的问题。Simba提供了多种功能,包括通过扫描广告二维码预览线上广告样式,编辑基准数据进行精细化测试,实时展示广告的各种埋点数据统计。此外,Simba还提供了广告素材接口给客户端自动化测试服务,无需修改代码即可实时更新广告素材。工作台原理包括通过预览链接和二维码实现广告预览,以及使用多用户代理服务和基准数据进行详细测试。工作台使用Mitmproxy实现多用户代理,拦截、修改请求和响应,并通过加载脚本定制化操作。
Java 并发——基石篇(上)
本文主要分析了Java并发体系中的计算机系统层面上的并发问题以及面临的挑战。目标是实现在同一时刻运行更多任务的能力。并行计算提供了解决方案,但也带来了一些问题。文章建议读者深入研究HotSpot JVM 11的源代码,重点关注共享内存多核系统的架构与设计、Java内存模型、线程的创建与停止、synchronized机制、wait和notify/notifyAll机制以及volatile关键字的实现。并强调并发程序设计的复杂性和不确定性,鼓励读者通过下载代码进行编译和调试,以更好地理解核心功能。
Java 并发——基石篇(中)
本文介绍了Java中的并发同步技术synchronized的实现机制。作者指出早期的HotSpot JVM采用解释执行器效率低下,因此转而采用模版执行器。模版执行器通过将Java字节码手动编写为固定模式的机器指令,跳过C/C++层次,提高了执行效率。文章还提到了在OpenJDK中探索monitorenter和monitorexit指令执行的细节过程。通过阅读源码,我们可以了解到JVM中不同解释器的实现方式。
Java 并发——基石篇(下)
这篇文章主要讲解了Java中Object类的wait和notify的实现机制。文章首先介绍了wait和notify的基本概念,并指出它们是基于native实现的。然后详细分析了在HotSpot JVM中的wait和notify的实现逻辑。具体来说,文章解释了wait函数的实现过程,包括判断是否可中断并抛出异常、创建ObjectWaiter对象、将线程添加到等待集合等。最后,文章提到了被notify唤醒后的善后逻辑。
Graph Embedding 及其在知乎的实践
知乎算法团队负责人孙付伟在中国AI开发者大会上分享了Graph Embedding技术及其在知乎的实践。Graph Embedding是将图的拓扑结构转化为向量表示的方法,用于推荐等场景。孙付伟重点介绍了Graph Embedding技术及其在知乎用户和收藏夹数据中的应用。他强调在问答社区中的连接关系是非常重要的,如人与人之间的连接、人与内容之间的连接以及内容之间的连接。通过有效表征这些连接关系,可以提高知乎的推荐效果。未来,知乎还计划用Graph Embedding进行会员购买预测和个性化推送的召回。
知乎移动端云测试平台实践(二)—— Agent 设计和实现
知乎云测平台采用基于Netty Socket的实时任务交互方式。通过PC作为服务器,使用Agent模块与服务端和移动设备进行数据交互。任务通过http消费任务池,确保即时性。同时,平台选择了Appium作为自动化测试框架,Agent模块包括设备控制和维护功能。
知乎移动端云测试平台实践(三)—— 自动化测试方案设计和实现
云测试平台利用自动化测试框架进行随机测试、遍历测试和UI自动化测试。测试报告中包含实时生成的测试结果、设备日志和分析结果、可控的自动化测试过程、设备截图或录制视频以及设备类型数据分析。自动化执行框架采用appium,并使用Java作为脚本语言。与C#相比,Java在平台上需要更多的兼容性工作。在脚本执行方面,平台没有使用第三方的运行框架,主要是为了保持对脚本运行的控制和运行数据的交互。脚本的编写能力由平台提供,并通过动态编译和反射实例化对象来运行脚本。脚本运行过程中可以调用实例中的方法进行数据和控制交互。
拥抱 Elasticsearch:给 TiDB 插上全文检索的翅膀
知乎的孙晓光老师在TiDB Hackathon 2019中获奖作品TiSearch的介绍。全文检索是搜索引擎的基本能力,但当前TiDB还无法实现全文检索需求。为了解决这个问题,孙晓光团队采用整合Elasticsearch的方式扩展TiDB的全文检索能力。他们在短短一天的Hackathon时间内成功实现了这一功能。这项功能可以帮助用户更准确、快速地搜索到想要的内容。
「快页面」动态配置化页面渲染器原理介绍
「快页面」是知乎内部的一个平台,通过在线智能编辑器和文档,使得非前端人员也能参与到前端页面开发中。该平台提供了一个简短、可通信、可存储的JSON配置形式,通过数据库存储和在线编辑器,省去了构建和部署流程,实现了快速上线。最近,他们计划进一步改进在线智能编辑器,使其更强大,从而转变为一个可视化的草图编辑器,使更多人能够参与前端页面开发的过程。这样,后端人员可以使用在线智能编辑器独立完成前端页面开发,从而大大降低沟通和联调成本。根据提供的新信息,摘要如下:知乎内部平台「快页面」通过在线智能编辑器和文档,让非前端人员参与前端页面开发;通过简短、可通信、可存储的JSON配置形式,省去构建和部署流程,实现快速上线。平台计划改进编辑器为可视化的草图编辑器,让更多人参与开发,降低沟通和联调成本。
轻量级 Mock 接口及文档管理平台 - Ming
「Ming」是知乎内部的一个Mock接口和文档管理平台。它解决了过去接口文档和Mock接口管理混乱的问题,并提供了轻量级的解决方案。在接口定义方面,不同的接口管理平台使用不同的方案,其中一种常见的方案是使用JSON Schema。JSON Schema详细描述了每个字段的类型和可选值,但过于冗长且不适合人阅读。虽然对于简单的结构还可以理解,但对于稍微复杂的结构很难在短时间内理解。