Go tips-笔记: string 36-41 mistakes

笔记

在 Go 中,string是一种不可变的数据结构,包含以下内容:

  • 指向不可变字节序列的指针,指向一个byte类型的数组
  • 此序列中的总字节数

string在Go中的内部结构是reflect.StringHeader位于reflect/value.go

// StringHeader is the runtime representation of a string.
// It cannot be used safely or portably and its representation may
// change in a later release.
// Moreover, the Data field is not sufficient to guarantee the data
// it references will not be garbage collected, so programs must keep
// a separate, correctly typed pointer to the underlying data.
type StringHeader struct {
	Data uintptr
	Len  int
}
//uintptr  an unsigned integer large enough to store the uninterpreted bits of a pointer value

Go tips-笔记: 代码和项目组织 1-16 mistakes

引言

从错误中学习效率更高,而且从错误失败的场景下学习,往往比直接交代正确性的理论知识,没有上下文的结果去 记忆巩固知识,在错误失败场景下往往印象更深刻;可以帮助更好地避免错误并做出更明智、更有意识的决定,因为现在了解了错误背后的基本原理,有种该死的,恍然大悟的感觉,拨开雨雾见月明;

涵盖了可能导致各种软件错误的案例,包括数据竞争、泄漏、逻辑错误和其他缺陷。虽然准确的测试应该是尽早发现此类错误的一种方式,但有时可能会因为时间限制或复杂性等不同因素而错过案例。因此,使用Golang开发,确保避免常见错误至关重要。

有些坑可能曾经踩过,通过这些mistakes产生共鸣,加深印象,同时可以继续追加一些新的坑来填充,比如系统性能调优,包括IO, 网络,数据编解码压缩,分布式系统,业务系统组织架构,逐步学习实践试错过程。学习笔记开个头。

设计-直播间赠送礼物功能

背景

直播线上互动,已成为当下生活的一部分,特别是受疫情影响,成为互联网的主要流量入口;研究了下各个平台直播间送礼物的功能,发现大同小异,在礼物分组,一些定制化的礼物有区分,整体交互流程大致相同,主要是直播间主播上播,用户通过礼物打赏给主播们(一个直播间可能有多名主播在互动),礼物是通过虚拟币(**币) 换算,早期互联网用户线上互动礼物,玩家最多的应该是QQ币了,只不过以前的打赏赠送场景是在web2.0刚开始的时候,交互的大多是文字和图片,相关产品场景,虚拟空间(个人空间,博客,种菜等娱乐互动场景);随着底层网络基建的发展,4G之后出现了大量的视频网站,用户可以录一些视频内容来互动;到后来音视频流媒体的发展,相关的在线直播间开始涌现,用户之间享受一波直播红利带来的互动,当然影响相对于前面的形式更加实时和直接;现在的5G和未来6G,以及物联网都会给直播形式带来新的互动场景,比如:虚拟会场,人机互动;其中早期培养起来的打赏送礼行为功能经常用于有主播的娱乐互动直播中,也是增值盈利的一部分;

tips: 除了送礼功能,根据不同直播场景,还有语音视频连麦,电商带货商品,没有主播,节目直播/转播,会议直播,自习室,基本的点赞,计数,聊天基础服务功能;还有些抽奖功能,答题功能(教育类直播居多),投票,红包这些功能服务可在开播时设置,是否启用;有用户基础的流量平台可能还会以竞价排名的方式推荐一波;这些功能可以作为一个可管理的插件,通过组合的方式应用于直播中,方便管理,后续可以添加新功能满足某类型直播场景。

让ML跑起来

介绍

上文提到通过用户的行为数据存放在S3中,这些数据包括结构化和非结构化数据,怎么让这些数据变得有价值呢?一种是人为进行数据挖掘,对相关指标转化率进行评估;还有一种是通过这些数据来训练模型,然后将预测模型用于生产环境中进行A/B测试,选出适合的模型,这个模型需要不断更新迭代,并且自动化半自动化运行起来;

img

用户行为分析方案设计

背景

用户在手机和pc端使用客户业务产品,比如浏览网页,购买商品,查看文档,观看视频,直播,IOT场景;会产生大量的用户行为数据,主要包括:

  1. 非结构化数据:日志(前端事件埋点日志,服务端处理事件日志),还有些非结构化的图片,音视频数据等等,主要存放在文件存储系统中;
  2. 结构化和半结构化数据: 用户操作产品写入的结构化数据存放于数据库表中,将文档型半结构化的数据放入文档数据库中;

需要分析用户的行为数据,进行决策;分为实时流式处理和离线批处理:

  1. 实时流处理,主要用于实时展现客户端看板,后台BI实时分析,实时风控/推荐,异常报警等场景;
  2. 离线批处理,分析用户历史数据,进行推荐算法等机器学习算法模型训练使用,数据仓库中根据不同维度对数据过滤聚合,进行上卷下钻分析,比如计算DAU,WAU,MAU,转化率(购买率,注册率)分析等,通常对数据建设投入多的话, 会把用户产生的结构化非结构化的数据都存下,放在一个大的池子里待使用时进行分析,即所谓的数据湖,围湖而建挖掘数据价值;而数仓相对精细化的分析,前置建模建表分析;

对此进行方案分析,本文将介绍一种实时离线处理分析用户行为数据方案,即能帮助企业低成本地使用海量数据,又能更快速地响应业务需求,同时借助亚马逊云科技的托管服务,能够快速实施和轻松运维。