2016 年 9 月 26 日,抖音 1.0.0 版本上线,截至目前,抖音日活泼用户打破 6 亿,短短 6 年间,抖音实现了从零起头的发作性增长。在营业快速开展、数据海量增长、视频/曲播形式对画量提出更高要求的布景下,抖音根底手艺团队若何以手艺改革应对时代变局、以匠人之心优化用户体验?在不被外界“看好”的 iOS 开发范畴,抖音团队又交出了一份如何的答卷?

1 月 22 日下战书,第三期字节跳动手艺沙龙以线上曲播的体例与广阔不雅寡碰头。本次沙龙以《抖音 iOS 根底手艺大揭秘》为主题,邀请了陈显财、陈文欢、舒彪、韩建磊、墨峰 5 位抖音 iOS 客户端工程师,从差别角度阐释了亿级 App 抖音在 iOS 客户端开发方面的理论经历,为近 4 万名在线不雅寡带来了一场扎根理论、面向前沿的手艺盛宴。

陈显财《大型 App 开发架构演进及挑战》

架构的好坏决定了工程的规模和效率。抖音根底手艺 iOS 客户端架构师陈显财教师介绍了抖音团队若何在不影响营业迭代和营业规模扩张的前提下,持续推进抖音从模块化、组件化、到插件化的架构演进过程。

模块化

面临开发初期代码体量膨胀、营业规模扩大、开发人员增加与营业一般迭代的矛盾,手艺团队起首考虑从提拔效率的角度动身,从主工程中剥离出依赖工程、情况设置装备摆设和 App 资本,并设想了底层代码的根底依赖才能,构成一个壳工程。团队还从源码情况资本东西的角度设想了相对同一的模板,使得模块可以基于同一的尺度停止创建和开发。

抖音无人曲播协议软件手艺开发

在研发流程和东西量上,团队撑持了多仓 MR的开发,为当地研发和 CI/CD 搭建了根本的研发情况。进而,团队根据模块尺度对整个工程停止模块化拆分,并确保大部门模块能够编译为二进造目的。模块化目的的实如今提拔效率的同时,也为后续架构的持续演进奠基了根底。

抖音无人曲播协议软件手艺开发

组件化

在营业持续开展的布景下,单个营业模块内的代码也在加速膨胀抖音无人曲播协议软件手艺开发;模块化拆分后,不合理的接口依赖有待进一步阐发治理;iOS 新增的扩展插件和根底才能鞭策 Swift 混编落地成为一定……在此布景下,手艺人员开启了组件化历程,降低团队整体的研发能效。

为处理代码复用问题、降低依赖复杂度,团队从头定义了抖音的 5 级架构分层抖音无人曲播协议软件手艺开发:

壳工程;营业层;接口层;办事层;根底层;

那一架构分层将模块化带来的网状依赖构造革新成树状依赖构造,降低了依赖的复杂度,保障各层之间的依赖不劣化。

抖音无人曲播协议软件手艺开发

针对成百上千个组件的依赖办理,手艺团队突破了常规做法“依赖打平”的局限,用容器化计划予以改良。一个版本的容器包罗壳工程、依赖列表、依赖变动记录、整体构建汗青、产物发布聚合信息。针对依赖链缺失或断开的情况,通过求差集的体例,在 mr 子仓中校验依赖缺失问题,避免工程依赖关系劣化。

同时,基于新的分层架构,手艺人员定义了每一层组件的依赖标准,以避免不合理的轮回依赖,包管整体依赖不劣化。在分层依赖标准中,高层能够依赖低层、实现能够依赖接口,接口层没有依赖,且优先以前向声明为主。末于,抖音在颠末多个版本的迭代优化后,各组件的依赖度明显下降。

抖音无人曲播协议软件手艺开发

二进造化带来的另一个问题是接口层的变动。为应对接口抵触带来的二进造污染问题,手艺人员连系主干的语法树信息,通过 mr 间接查抄实在的挪用量,每天拦截二进造污染的问题大要在 10%摆布,有效保障了团队整体开发的不变性。

抖音无人曲播协议软件手艺开发

为应对设置装备摆设问题、情况问题、异步 mr 接口挪用和抵触等问题对主干不变性的冲击,手艺人员引入了RC(Release Candidate)分收,合并多个 mr 代码,代码颠末查抄之后进入不变性主干,从而躲避了当地编译失败、CI 出包失败等问题。

处理了不变化问题后,新增营业仓不竭拆分仓库也成为影响开发效率的问题。手艺人员引入了单仓多组件——一个仓库内基于分层架构能够增加多个组件而不消拆仓。同时,还在接口层上隔离了 Swift 和 OC 代码,以躲避组件间的编译依赖传递。

抖音无人曲播协议软件手艺开发

为提拔整体研发能效,团队还供给了一套基于二进造的代码隔离计划,通过绑定适配器协议和获取适配器协议的办法,把营业差别化的代码通过适配器隔离到二进造中。同时,建立了相关的根底配套设备来监控代码变动,使多个 App 的影响能够被感知量化。

抖音无人曲播协议软件手艺开发

插件化

在组件化演进历程中,抖音的营业规模持续扩大,组件数量从最后的 100+增至 800+,二进造化已经无法满足效率层面的提拔需求。与此同时,团队在效率、量量、成本方面均迎来新的挑战。

在此布景下,为了进步线上性能和当地效率,手艺人员开启了静态二进造向动态二进造革新的历程。在营业懒加载场景,手艺人员将非首页营业代码及其独占的根底库依赖间接打成动态库停止懒加载;此外,专项代码通过动态库停止隔离,在 iPad 定造营业、大营业块重构等详细场景中阐扬感化。

抖音无人曲播协议软件手艺开发

为降低底层依赖复杂度、提拔代码量量,团队还设想了办事框架,撑持把笼统的接口绑定到详细的实现上,并撑持实现的热切。那项框架极大满足领会耦服用、动态摆设、办事组合、编译期抹平底层语言差别、运行期撑持办事热切等方面的才能需求。

此外,手艺人员还在当地多形式研发等方面做出了积极摸索。

陈文欢《抖音 iOS 主动化办事:容器化和规模化摸索》

主动化测试与持续集成关于保障软件工程量量具有重要价值,也是大型项目增量式开发的保障手段之一。抖音根底手艺 iOS 客户端工程师陈文欢教师介绍了抖音 iOS 主动化若何做到容器化和规模化办事,以及此中涉及到的一些手艺挑战息争决计划。

iOS 容器化测试

容器化测试一方面是为了测试不变性的提拔,另一方面也能隔离差别测试使命间的情况影响。在抖音 iOS 容器化建立的办事分层架构中,更底层的机架平台供给了笼统的机器办理和控造才能。基于此,手艺人员搭建了包罗单位测试、UI 测试等在内的专项测试办事,平台侧还供给了数据报表消费和一些营业办理的才能。同时,手艺人员还基于公司的组件化现状和差别的 CI 系统,接入了研发情况和 CI 东西链。整套架构的运行,使公司浩瀚的项目组件得以利用一些通用的测试办事,目前已应用于抖音、曲播中台、今日头条等大型项目中。

抖音无人曲播协议软件手艺开发

在机架平台的办事隔离计划中,手艺人员接纳了 Linux 集群下的 Docker 计划(下图左侧),Docker 镜像中包罗了一些测试用例和东西链。通过该计划,机架情况得以彼此独立运行,而且撑持了快速摆设和管控的才能。下图右侧是手艺人员在 iOS 设备上利用的核心办事,顶层是字节工程师自研的 iOS 后台 runner 历程,用于承受设备控造指令并与 iOS 底层办事停止通信。此外,还包罗 installation proxy、debugserver 等历程。Docker 镜像与 iOS 设备间的交互则通过 USB 协议与 lockdownd 办事停止通信。

抖音无人曲播协议软件手艺开发

iOS 设备控造

设备控造离不开 UI 交互。常见的点击操做、滑脱手势、弹窗控件、键盘输入、前台唤起等都是主动化测试中需要利用到的根底才能。基于 XCTest 系统库,测试代码被集成到一个特殊的 App 中(称之为 UI runner),从而安拆到测试设备上起头施行。陈文欢教师以XCTest 模仿点击 home 键的 API为切入点,详细阐发了 iOS 设备的控造机造。

抖音无人曲播协议软件手艺开发

在 XCTest 模仿点击 home 键的实例中,NSXPCConnection是一个值得存眷的名词。NSXPCConnection 是苹果供给的历程间双向通信体例,一个历程能够创建 listener 监听其他历程的恳求。手艺人员在运行时通过打印 NSXPCConnection 的实例信息,发现其指向了com.apple.testmanagerd办事,其对应的二进造为testmanagerd。从 testmanagerd 启动之后的 main 函数过程能够看到,它注册的办事名称也为 com.apple.testmanagerd,与运行阐发的成果连结一致。接下来,若是我们能通过察看 Xcode 东西链驱动测试时 testmanagerd 的 NSXPCConnection 挪用过程,便能领会到整个Xcode 东西链驱动测试的机造。

通过火析 xpc message 的完好协议交互过程,大致上能够发现其利用了两组协议,一组是以 XCT 开头的 XCTest 协议,其感化是间接挪用 testmanagerd 的 UI 交互才能;另一组是IDE 开头的,为 Xcode 东西链停止白名单受权的过程。

抖音无人曲播协议软件手艺开发

在字节自研的 iOS 设备控造链计划中,启动一个 App 并通过它的_IDE_authorize 协议受权 App 历程,其 PID 添加到 testmanagerd 接口利用白名单列表中,从而使 App 能通过跨历程挪用的体例间接利用 testmanagerd 中所有关于设备控造的接口。

M1 模仿器规模化测试

2020 年 11 月,苹果自研 M1 芯片发布,并能在 M1 芯片上运行 iOS 法式。在此布景下,抖音团队起头摸索在 M1 设备长进行测试,以期降低构建成本、为提拔测试不变性供给新可能。

若是在 M1 间接运行实机包测试,会面对 App 运行签名校验、统一个 bundleld 只能对应运行一个 App、没有 home 键且屏幕大小固定、机型和版本固定等局限,那些问题城市造约机架的规模化测试。因而,在 M1 模仿器上运行实机包测试,成为手艺团队出力摸索的标的目的。

抖音无人曲播协议软件手艺开发

面临模仿器启动时带来的Binary with wrong platform错误,手艺人员颠末验证后接纳了类似 IPAPatch 的处置体例,在编译产品生成后添加了后置处置过程,增加 macho 修改,注入/修改 LC_BUILD_VERSION 字段停止兼容,最末使抖音实机包可以在 M1 模仿器上顺利运行。

此外,陈文欢教师还以Metal framework 适配为例,介绍了系统库适配问题的处置思绪和应对计划。

舒彪《超等 App 构建效能提拔 40%!JOJO,字节自研 iOS 构建系统》

JoJo 是字节自研的以 bazel 为核心的 iOS 构建系统,供给了从 CI/CD 到当地构建开发所需要的一整套处理计划。抖音根底手艺 iOS 开发工程师舒彪教师从 JoJo 和 bazel 的关系动身,介绍了 JoJo高性能、高可扩展性、多工程架构撑持、多 IDE 撑持的四大特征,提醒了 JoJo 助力抖音、今日头条等亿级 App 构建效能提拔 40%的奥妙所在。

高性能的基石

构建的核心是由许多个差别的使命及其彼此依赖构成的。在构建系统中凡是会有如许一个要求:即,针对某一个使命,在资本、参数、东西不异的情况下,应该产出固定的产品。基于此,构建系统便可以成立一个单使命级此外缓存复用,从而大大加快构建性能。

实现编译缓存机造的核心问题是构建使命的依赖计算。与一般的构建系统差别,JoJo 将远端缓存、远端施行和依赖计算连系了起来。JoJo 在当地构建时,实现了类似 Xcode 的增量构建计划——通过前次构建的 C 系或 Swift 系源码后编译器生成的.d 文件来获取构建需要用到的所有文件,从而停止依赖计算。那里的.d 文件是一种依赖描述文件,在编译器完成一次构建后,就会生成.d 文件,用以描述本次构建过程中所涉及到的所有文件。

抖音无人曲播协议软件手艺开发

在 JoJo 中,手艺人员基于 clone 和 Swift 的编译器实现对 C 系和 Swift 系代码停止快速依赖计算的东西,2000+C 系文件扫描在数秒内即可完成、Swift 系代码也可实现类似性能。由此,JoJo 在包管准确性的前提下,又几乎不会带来 overhead,实现了准确而又快速的缓存复用体验。

此外,在 JoJo 构建系统中,通过火布式缓存和构建集群来提速构建。关于每一个构建的子使命,JoJo 会按照其依赖计算出一个 key,然后再通过那个 key 去远端缓存办事器查询已有产品,若是婚配胜利,则下载产品、文件输出,子使命完成;若是未射中,JoJo 就会实正挪用相关东西停止一次构建,在当地或远端施行。为制止从当地上传相关的资本文件到远端集群,JoJo 会通过内部高速收集从缓存办事器下载所需文件,当地只需传输一份清单给集群。远端集群自己能够扩展,能够是 Mac 机器,也能够是 Linux 机器,使集群可扩大性大大提拔。最末便构成了一个完好的散布式构建系统。

抖音无人曲播协议软件手艺开发

详细到工程师小我的构建场景,因为网速、本机性能的差别,整体使命调度的需求也充满了变数。为此,JoJo 实现了一个智能的调度系统,差别于 Xcode 有固定的使命并发数的限造,JoJo 可通过收集、CPU、集群资本的差别来动态地调整调度战略。此外,在收集传输数据时,JoJo 还会实时测速,按照本机 CPU 性能情况来决定能否熔断远端机造。那些都进一步确保了散布式构建系统的不变性和性能。

高可扩展性

JoJo 以 bazel 做为核心引擎的同时,又重写和新建了大量 rules,使其脱节对 bazel 的完全依赖。在理论中,JoJo 将单位测试、静态阐发、动态库懒加载、索引构建等流程做为旁路,使相关使命也能够被构建系统主动办理、主动缓存。

bazel 自带的 query 号令和 aspect 机造为 JoJo 付与了灵敏的数据查询才能,使工程师能够自在获取包罗构建参数、依赖信息等在内的任何编译信息,而那些信息也能够被构建流程中的另一个 rules 所消费,从而实现了动态的构建才能。

抖音无人曲播协议软件手艺开发

多工程架构撑持

目前常见的仓库办理机造有 Monolith、Multirepo、Monorepo。JoJo 被设想为能够扩展地撑持任何架构。目前,JoJo 撑持尺度 cocoapods 工程间接构建,而无需停止任何营业革新,抖音即以如许的形式来运行。今日头条则接纳 Monorepo 停止营业办理、第三方库和根底库继续利用 cocoapods 办理的混合构建形式。同时,JoJo 也在测验考试造定公司内部的Monorepo 开发尺度范式,以一站式处理进修成本和迁徙成本。

抖音无人曲播协议软件手艺开发

关于差别架构,JoJo 通过扩展一个新的规则来撑持差别的架构描述,关于某个详细的架构,相关规则才会负责详细的处置工做,那些城市同一转化为一层中间层停止暗示。那层中间暗示会笼统地描述静态库动态库的构建、依赖关系等。最末,JoJo 通过中间层来生成最初的产品完成构建。由此,便实现了对多架构与混合形式的撑持。

IDE 交融

JoJo 自己撑持多种 IDE,舒彪教师以 Xcode 为例,介绍了Xcode 下利用 JoJo 构建的体例。为使营业同窗切换到 JoJo 后尽量无感,手艺团队颠末研究后自研了部门逻辑,通过必然手段完全接收了 Xcode 的索引、调试、日记、进度条等功用。由此,在 JoJo 的系统下,Xcode 工程彻底改变为“前端”的角色,只需阅读工程文件及目次构造即可,所有底层使命均由 JoJo 完成,营业体验也根本接近原生体验。

颠末革新后,Xcode 间接与 JoJo 的 Build Service 通信,JoJo Build Service 又会挪用 JoJo 来停止构建,同时供给构建进度、日记、编译、参数等数据给 Xcode 停止消费。其他不相关恳求则继续转发给 XCB Build Service 来处置。更进一步,JoJo 还hook 了 SK Agent 的索引构建历程,如许手艺人员就能够利用 JoJo 停止索引使命的构建,从而通过 JoJo 实现了全流程接收,并包管各功用间彼此独立。

抖音无人曲播协议软件手艺开发

此外,手艺团队还从索引缓存、二进造调试源码索引、引入智能阐发系统停止错误提醒优化与指引等方面,对 JoJo 停止了进一步优化,以更好地助力各项营业的开展。

韩建磊《抖音 iOS 体验优化:流利性优化摸索》

目前负责抖音 iOS 客户端根底体验工做的韩建磊教师从详细可感的案例动身,为各人理清了流利性相关的常见问题和优化战略,并连系理论经历为目标劣化问题供给了必然的排查思绪息争决计划。

流利性简介

什么是流利性?若是从场景来区分,包罗页面刷新、动画、转场、弹窗、拖拽、滑动等在内的一系列操做,都属于流利性的范围。若是从用户体验的视角动身,对流利性的理解能够包罗视觉体验、触觉体验和听觉体验三大目标。总体来说,流利性能够用来权衡用户在各场景下的交互体验。按照抖音手艺团队的理论经历,流利性优化至少可带来3%的旁观时长收益和 6.6%的视频播放数量收益,流利性优化与人均播放时长、页面渗入率、用户留存、告白营收等营业目标息息相关。

当前,抖音次要以丢帧和FPS做为权衡流利性问题的核心目标。

抖音无人曲播协议软件手艺开发

劣化归因

韩建磊教师引导各人试想如许一个场景:某一天,线上核心目标 FPS 突然大幅劣化,问题应若何排查?

第一步:阐发。从版本、渠道、场景等多维度停止阐发,还可通过其他目标停止横向比照,找出问题点;第二步:Debug 复现。利用 Time Profiler 等东西做排查,此时若是排查出了良多的耗时操做,那应该若何判断哪些是新增的、哪些是汗青债呢?只能断定劣化,却无法确定劣化幅度怎么办?以至在 Debug 下不克不及复现怎么办?那些问题能否提早拦截,不带到线上?

基于上述问题,手艺团队研发了一套函数耗时监控系统,通过线上的大盘耗时比照,很容易定位到哪个函数发作了劣化及劣化的幅度是几,帮忙手艺人员快速定位到新增的劣化函数,同时也无需考虑 Debug 能否复现的问题。

抖音无人曲播协议软件手艺开发

此外,手艺人员还梳理了滑动、首刷等场景下各关键函数的挪用,再通过汇编 Hook 的形式停止函数拦截,在主函数挪用周期内,记录子函数的施行耗时,实现了既能收罗各子函数耗时,又能收罗内部的挪用栈。同时,为使函数耗时监控系统能应用到各个场景,上层撑持动态设置装备摆设下发,还撑持导出完好的挪用链路,在达成监控目的的同时,将整体的性能损耗控造到最小。

优化理论

在回忆了常见的优化战略后,韩建磊教师从帧率和卡顿那两类细节优化动手,针对详细 case 论述了应对问题的办法论。

那里列举了 3 个帧率优化的 case。

第一个在滑动中挪用了 self.xxViewControler.view, 并且那个 xxVC 是懒加载的,若是之前没有初始化过,在那里触发 vc 创建、挪用 viewdidload 明显是不合理的;第二个在拖拽时停止了 userDefaults 的读取,第一次读取时,会把 plist 里所有数据全数加载到内容,从而招致卡顿。那个问题固然很简单,但现实开发中却经常呈现。第三个在 willDisplayCell 时做了遍历,按照字符串做婚配,若是数组很大(好比几百几千个),也可能会形成丢帧。抖音无人曲播协议软件手艺开发

此外,韩建磊教师还以抖音的 3 个实在卡顿 case为例,介绍了手艺团队在实战中应对卡顿问题的处理思绪和优化途径。

在卡顿问题得到有效应对的根底上,类似丢帧问题的小劣化应若何拦截?频频呈现的问题如何避免再劣化?带着那些问题,团队通干预干与卷调研发现,流利性问题劣化其实不被高度重视,RD 关于存量问题的修复热情也远不及新增问题。在此布景下,手艺人员又研发了一套精细化监控系统,在用户相对敏感的时机或场景,对一些常见的卡顿、耗时操做等 bad case 停止 hook 拦截、记录,并应用于防劣化平台。跟着卡顿、帧率问题的优化数量增加,bad case 的录入数随之增加,精细化监控的量量随之提拔、粒度也越来越细,由此构成了一套良性轮回。

抖音无人曲播协议软件手艺开发

整体流程如上图,客户端通过动态库注入,把监控代码植入到宿主 App,然后施行主动化测试使命,当射中各个场景时,会停止数据和仓库记录;使命完毕后,同一停止符号化;进而上报防劣化后台,最初生成数据报表,触发报警或停止智能诊断。

此外,抖音手艺团队还在慢函数、动画、耗时使命打散、低端机降级等方面有较多投入,以更好地满足用户的流利性体验。将来,团队还将在UI/动画、架构、线程管控等标的目的继续摸索,不竭交出一份份关于流利性、关于用户体验的满意答卷。

墨峰《抖音 iOS 不变性优化与摸索》

抖音根底手艺 iOS 客户端工程师墨峰教师不断参与抖音 iOS 应用的不变性优化与保障系统建立,他从不变性的根底概念动身,详细解读了不变性框架和核心目标,并憧憬了不变性优化的将来。

根底概念

狭义上的Crash是指代码层面碰到的语言机造错误、CPU 拜候异常、主动退出等问题;广义上的Crash则包罗了内存过多被系统 kill(OOM)、主线程 block 被系统 kill(WatchDog)、CPU 过高被系统 kill 等问题,而那些都属于不变性所存眷的范围。

抖音无人曲播协议软件手艺开发

不变性框架

谈及不变性框架,不能不提的一个问题是启动使命。在 APM 的 SDK 初始化时机问题中,我们需要让大大都代码在监控 SDK 后再施行,那里就包罗了 Crash 监控、WatchDog 监控、OOM 监控,与不变性框架产生了间接联系关系。

在premain code的治理中,墨峰教师介绍了自定义 section 体例延后的办法。那种办法能够代替传统的+load 办法,但同时提醒各人,不克不及让 section 数量无限造扩张,不然可能超越系统 dyld 限造招致启动瓦解。

日记关于排查不变性问题必不成少 。疑难问题往往出于仓库不明白,此时通过日记查找阐发 Crash 上下文的信息就显得非常重要。此中,日记记录上务需要基于 mmap,确保日记不会丧失,此外,抖音手艺团队开发的日记阐发东西也能够帮忙开发人员显著提拔阐发效率。

抖音无人曲播协议软件手艺开发

核心目标详解

针对 Objective C 异常、多线程 Crash、杀历程时 Crash、全系统挪用栈、编译优化级别招致的 Crash 等常见问题,墨峰教师阐释了问题的构成机造及应对战略。

以应对全系统挪用栈 Crash为例,一般的应对流程是,在查看日记阐发上下文情况的根底上,停止逆向系统库代码,通过 swizzle/fishhook 绕过有问题代码,连系利用 CoreDump 阐发,若是当地能复现问题,能够利用 Xcode Malloc Logging 查找地址分配挪用栈。

在应对 Crash 问题时,除了疑难问题的排查,还有线上线下的长效应对机造。线下有 asan 主动化测试、灰度阶段的 monkey 主动化测试、集成阶段启动瓦解主动化测试等;线上则通过平安气垫、平安形式、coredump 等停止应对。

WatchDog常见的成因有文件 IO、收集 IO、CPU 密集、主线程和子线程共用锁等。对应的处理计划凡是包罗放入子线程, 营业逻辑适配回调形式,优化锁的粒度等。

抖音无人曲播协议软件手艺开发

OOM 是抖音手艺团队在不变性优化中面对的最严峻挑战之一。对抖音来说,呈现 OOM 问题的数量是 Crash 的 2 倍多。用户利用时长增加招致内存占用、优化/劣化难以归因,加之低端机数量浩瀚,那些因素都招致了应对 OOM 困难重重。

关于线上 OOM,手艺团队次要运用MemoryGraph 机造(自研)、Matrix Memory Stat、大图片监控予以应对;线下部门则通过 MLeaksFinder、Xcode Leaks 主动化测试、AutoreleasePool 缺失主动化测试等停止躲避。

抖音无人曲播协议软件手艺开发

墨峰教师对每一种处理思绪和东西停止了针对性的讲解。

瞻望将来,抖音 iOS 应用的不变性优化还将从框架、流程、静态动态阐发等层面做出更多的摸索和勤奋,为超大型 App 的建立保驾护航。墨峰教师最初鼓舞各人,要永久连结对底层手艺的兴趣和不竭摸索的热情,也不要对本身的生长设限。

每位讲师的分享完毕后,在线不雅寡纷繁通过评论区、弹幕与讲师互动交换。5 位教师都连系本身的专业标的目的与理论经历,耐心、详尽地做出了针对性解答。

至此,第三期字节跳动手艺沙龙圆满完毕。

若何获取 PPT 和回放视频?

存眷公家号“字节跳动手艺团队”,在后台回复关键词“沙龙回忆”,获取 5 位教师 PPT 的下载链接及回放视频。

字节跳动手艺沙龙,是由字节跳动手艺社区 ByteTech 倡议的,面向全行业开发者的手艺交换活动。通过搭建一个包涵、开放、自在的交换平台,促进前沿手艺的普及与落地,帮忙手艺团队和开发者快速生长。字节跳动手艺沙龙的手艺分享来源于字节跳动及互联网一线大厂任职的手艺专家,针对热点手艺标的目的和理论总结,为手艺团队和开发者呈现一场场可供参考的手艺盛宴。

你希望在此后的沙龙中听到哪些主题的分享?你等待看到哪位手艺专家分享本身的理论经历?欢送在文章下方留言,说出你的心声~ 第四期字节跳动手艺沙龙估计于3 月份举行,让我们配合相约春暖花开时!

本文TAG:

幕言助手_手机无人直播软件_小玩法免费报白_抖音互动公会_无人直播软件下载_免费起号培训