公司:字节跳动
北京字节跳动科技有限公司,简称字节跳动,是一家位于中国北京的跨国互联网技术公司,成立于2012年3月,旗下有产品媒体聚合服务今日头条和短影音抖音(及其海外版本TikTok)、西瓜视频、社交平台Lemon8等,也有一些加入人工智能技术的专业生产力软件,例如剪映、办公套装拉客(lark,中国版本称飞书)等业务。
至2018年,字节跳动的移动应用月度用户超过十亿人,估值750亿美元,超越Uber成为全球最有价值的创业公司。截至2019年7月,字节跳动的产品和服务已覆盖全球150个国家和地区、75个语种,曾在40多个国家和地区位居应用商店总榜前列。
在中国互联网企业中,字节跳动是第一家没有向阿里巴巴、腾讯或百度寻求商业保护或融资的创业公司;相反地,字节跳动被认为与百度、腾讯两大巨头有强烈的竞争关系,因字节跳动资金主要来源于抖音和今日头条的广告收入。
至2020年3月,字节跳动已经有六万员工,并计划再增员一万人。投资人和内部消息将字节跳动2019年的营收定在1,040亿元至1,400亿元人民币,超过了Uber、Snapchat和推特的总和。在中国,其广告收入也超越了腾讯、仅次于阿里巴巴。抖音的全球下载量达1.15亿次,固定用户近10亿。
Go 生态下的字节跳动大规模微服务性能优化实践
Go 是一门很有特色的编程语言,已经被广泛应用到不少领域,随着使用场景的发展,一些性能相关的问题也开始逐渐暴露出来。本次分享将以字节跳动的性能优化工作为例,介绍基于 Go 生态的微服务体系下,分析系统性能、优化不同层次软件以提升运行性能、提高资源使用效率的一些实践和经验,会特别介绍在 Go 语言 SDK 侧的一些优化工作。
抛砖引玉:TypeScript 从入门到实践
众所周知 JavaScript 是一门弱类型语言,在前端进入工程化后,代码仓库越来越大,JavaScript 弱类型的缺点被无限放大,使其难以胜任开发大型项目。在一个多人维护的项目中,往往不知道别人写的函数是什么意思、需要传入什么参数、返回值是什么,一个用法不小心就会导致线上出现 BUG,所以除了靠口口相传以外还要维护大量的代码注释或者接口文档来提供其他人了解。但是当我们使用 TypeScript 后,除了初期具有一定的学习成本以外,基本上可以很好的解决上述的问题。
抖音 iOS 推荐 Feed 容器化总结
抖音 Feed 容器在推荐、关注、同城、朋友等多个场景中使用,每个场景都有自身的逻辑和业务,最终汇总在 FeedViewController 中,随着业务的迭代,代码越来越臃肿,面临如下的问题:
- 容器类(FeedViewController) 有 10000+行,还有十多个业务分类,整体的理解和维护成本高
- 容器类 框架和业务边界不清晰,框架代码的修改不收敛和不规范,业务改动可能导致线上问题,如数据层不收敛导致的问题:自动删除导致一次滑动多个视频或者自动跳转到第一个视频等问题
- 容器类 承担了推荐、关注、朋友三个大场景,细节的业务逻辑差异较多,目前多业务代码耦合在一起,增加新功能时需要考虑其他业务方,容易引入问题,开发和测试效率低
- 内流容器和外流容器,形态相似但是代码分离,主体代码重复,新增功能时需要在两个类中做重复开发,如:视频预加载优化等,开发和维护成本高
- 核心功能的监控和代码防劣化的体系不完善
Pico Unity VR游戏开发实战——性能优化基础
Pico致力于VR头显产品的研发、生产、销售,特别专注于VR一体机这一形态产品。Pico兼顾C端消费者市场与B端行业市场,同时为大众VR用户与行业客户提供VR产品与服务。业务逐步由中国本土推向全球——北美、韩国、欧洲和日本。
深度解析字节跳动的增长模型
字节跳动是如何做用户增长的?
关于这个问题,坊间流传着各种版本的回答。有人说时也命也靠运气;有人说靠抖音最推崇的算法;也有人说是靠字节一只强悍的增长团队...
10年前,在“增长黑客”的概念已在硅谷典例频出的时候,国内的“增长”思维还处在冬草萌动、芽尖儿都没有的阶段。“增长”并非一个放之四海皆准的标准化方案。面对不同的地域、不同的人群,不同的思维方式与生活习惯,都会有不同的增长策略。而每一滴毫厘之差,也会汇成千里之势。
Hessian 序列化、反序列化
- 序列化参数有枚举属性,序列化端增加一个枚举,能否正常反序列化?
- 序列化子类,它和父类有同名参数,反序列化时,同名参数能否能正常赋值?
- 序列化对象增加参数,反序列化类不增加参数,能否正常反序列化?
- 用于序列化传输的属性,用包装器比较好,还是基本类型比较好?
WebXR 技术调研 - 在浏览器中构建扩展现实(XR)应用
WebXR 是一组支持将渲染 3D 场景用来呈现虚拟世界(XR)或将图形图像添加到现实世界(AR)的标准。
RTC 场景下的屏幕共享优化实践
屏幕共享是视频会议场景使用最广泛的功能之一,在共享一个 PPT 或者文档的情况下,人们对画面清晰度有着极高的要求,“看不清” 是最容易被用户吐槽的事情;而在共享一个视频素材的情况下,大家又对流畅度有着极高的要求,“卡顿” 也是最容易被用户吐槽的点。
chrome 插件开发指南
丰富的 chrome 插件极大的提升我们的工作效率和辛福感,比如大名鼎鼎的 adblock 广告屏蔽、GoFullPage 网页长截图、evernote web clipper 收藏网页。
一般来说,插件的原理是向页面中注入 javascript 脚本,对页面进行处理,比如屏蔽页面中可能的广告元素,改变某些元素的样式,增加一些 UI。
开发插件需要使用前端技术:html css javascript。
本文就从入门开始讲述如何开发一款 chrome 插件。
幸福里 C 端 iOS 编译优化实践-优化 40% 耗时
经过长期的业务迭代,C 端工程增量编译已经严重劣化,2021 年 12 月前,C 端平均增量编译长达 3 分钟以上,严重影响研发效率,急需优化!经过优化之后,增量编译时长降低到 2 分钟左右。
字节的前端监控SDK是怎样设计的
监控SDK如何实现底层逻辑的复用、上层逻辑的解耦、如何做到灵活可扩展。接入方众多 ,SDK如何保证原有业务的正确性、保持自身的性能和稳定性?
深入浅出依赖注入及其在抖音直播中的应用
近三年,抖音直播业务实现了爆发式增长,直播间的功能也增添了许多的可玩性。为了高效满足业务快速迭代的诉求,抖音直播非常深度的使用了依赖注入架构。
在软件工程中,依赖注入(dependency injection)的意思为:给予调用方它所需要的事物。
“依赖”是指可被方法调用的事物。依赖注入形式下,调用方不再直接使用“依赖”,取而代之是“注入” 。
“注入”是指将“依赖”传递给调用方的过程。在“注入”之后,调用方才会调用该“依赖”。
传递依赖给调用方,而不是让让调用方直接获得依赖,这个是该设计的根本需求。该设计的目的是为了分离调用方和依赖方,从而实现代码的高内聚低耦合,提高可读性以及重用性。
本文试图从原理入手,讲清楚什么是依赖,什么是反转,依赖反转与控制反转的关系又是什么?一个依赖注入框架应该具备哪些能力?抖音直播又是如何通过依赖注入优雅的实现模块间的解耦?通过对依赖注入架构优缺点的分析,能对其能有更全面的了解,为后续的架构设计工作带来更多的灵感。
Thrift 序列化协议浅析
Thrift 是 Facebook 开源的一个高性能,轻量级 RPC 服务框架,是一套全栈式的 RPC 解决方案,包含序列化与服务通信能力,并支持跨平台/跨语言。
图像处理解决方案 veImageX 技术演进之路
近日,第五届深度学习图像压缩挑战赛(以下将简称“ CLIC 大赛”)比赛结果公布,首次参赛的火山引擎视频云多媒体实验室夺得视频压缩赛道第一名。压缩技术对于图像、视频应用十分重要。在保证同样的质量前提下,如何将图像压缩到更小的体积便于互联网信息传输,火山引擎视频云团队不断突破压缩技术“天花板”。
当前字节跳动高峰期每秒需处理近百万张图片,基于今日头条、抖音等亿级 DAU 的实践打磨,与国际领先的压缩技术,火山引擎视频云打造图像一站式解决方案 veImageX ,覆盖上传、存储、处理、分发、展示、质量监控全链路,涵盖图像生产、图像消费、云平台三大应用场景。
RTC 性能自动化工具在内存优化场景下的实践
性能测试是 SDK 发版的重要依据,VolcRTC 的业务方对于性能指标都比较重视,对于 RTC 准入有明确的准入标准。因此我们建立了线下的性能自动化测试系统,测试过程中我们发现 VolcRTC 的内存占用较高存在较大的优化空间。
用 CSS 和 JS 实现时钟效果
JavaScirpt30 是 Wes Bos 推出的一个 30 天挑战。项目免费提供了 30 个视频教程、30 个挑战的起始文档和 30 个挑战解决方案源代码。目的是帮助人们用纯 JavaScript 来写东西,不借助框架和库,也不使用编译器和引用。