赞
踩
最近,一则“90后无论男女都得65岁以后退休”的消息在多个网络平台流传,也不知道是真是假,好巧不巧今天刷热点的时候又看到一条这样的热点:现在有什么赛道可以干到退休?
点进去看了几条热评,第一条热评说的就是:
“除了体制内,哪里可以干到65岁退休?”
结果后面就有两个人发了两张截图截图,内容分别是“入职阿里巴巴15周年的祝福”和“入职腾讯14周年的祝福”,真的是让人羡慕嫉妒恨呐,他们稳定干到退休肯定是没问题…
那你呢?你现在的“赛道”可以干到退休吗?
想听听大家对这件事的看法,欢迎大家在评论区讨论!
当然看这些东西就图一乐哈,最重要的还是学习,下面就分享一下粉丝投稿的万兴实习面经。
类似于栈,先进后出
在 MySQL 中处理大量数据时,分库分表是一种常见的策略:
一、分库
- 垂直分库
- 按照业务模块将不同的数据表存储在不同的数据库中。例如,将用户相关的数据表放在一个库,订单相关的数据表放在另一个库。
- 优点:可以降低单个数据库的复杂度,提高特定业务模块的性能和可用性。
- 缺点:跨库关联查询变得复杂,需要通过应用层来处理。
- 水平分库
- 将数据按照某种规则(如用户 ID 取模)分布到多个数据库中。
- 优点:可以有效应对数据量的增长,实现分布式存储和负载均衡。
- 缺点:数据的分布规则需要精心设计,数据迁移和扩容相对复杂。
二、分表
- 垂直分表
- 将一个表中不常用的字段、大字段或者长度较长的字段拆分到另一个表中。例如,将商品表中的详细描述字段拆分到单独的表中。
- 优点:减少表的宽度,提高查询性能,便于维护。
- 缺点:增加了表关联的操作。
- 水平分表
- 按照一定的规则(如主键值取模、按时间范围等)将一个表的数据拆分到多个表中。
- 优点:可以解决单表数据量过大的问题,提高查询效率。
- 缺点:同样存在数据分布规则设计和跨表查询的复杂性。
Docker 是一种重要的技术,理解如下:
- 隔离应用
- 把应用和其依赖打包在独立容器中,彼此隔离不干扰。
- 像 Web 应用和数据库应用能在同一主机上互不影响。
- 便于部署迁移
- 容器包含应用所需一切,能在不同环境快速部署,无视环境差异。
- 优化资源利用
- 能更精细分配资源,多个容器可共享主机资源。
- 支持版本控制与回滚
- 对容器镜像能版本控制,出问题可回滚。
- 促进开发运维协作
- 开发环境与生产一致,减少问题。
- 适合微服务架构
- 每个微服务可打包成容器,方便独立操作。
- 助力 CI/CD
- 与相关工具链集成,实现自动化流程。
- 性能
- Grpc 通常在性能方面表现更优,因为它使用二进制协议,数据传输效率高。
- Http 一般使用文本格式,数据量相对较大。
- 连接方式
- Grpc 支持长连接,能减少连接建立的开销。
- Http 常见的是短连接,每次请求都要重新建立连接。
- 数据格式
- Grpc 基于 Protocol Buffers 定义数据格式,具有高效的序列化和反序列化能力。
- Http 可以使用多种数据格式,如 JSON、XML 等。
- 流处理
- Grpc 对双向流和服务器流的支持较好。
- Http 在流处理方面相对较弱。
- 统一版本
- 确定一个共同的 Go 版本,要求所有开发人员安装和使用该版本。
- 可以通过项目规范和文档明确指定。
- 使用工具管理
- 利用版本管理工具,如
go.mod
和go.sum
。- 这些文件可以指定项目所依赖的特定 Go 版本和模块版本,确保不同开发者在拉取代码时能够获取到一致的依赖环境。
- 容器化开发环境
- 使用 Docker 等容器技术创建统一的开发环境。
- 在容器中配置好指定的 Go 版本和相关依赖,开发人员在容器中进行开发,避免本地环境差异。
- 分包与分组
- 将相关功能或模块的消息定义分组到不同的 Protobuf 文件中。
- 例如,将用户相关的消息定义放在
user.proto
,订单相关的放在order.proto
。- 目录结构规划
- 创建清晰的目录结构来组织 Protobuf 文件。
- 可以按照业务模块、功能类型等划分不同的目录。
- 提取公共部分
- 如果有多个文件中存在重复或相似的定义,提取这些公共部分到单独的 Protobuf 文件中,然后其他文件进行引用。
- 版本控制
- 利用版本控制系统(如 Git)来管理 Protobuf 文件的变更历史。
- 文档注释
- 在 Protobuf 文件中添加详细的注释,说明每个消息的用途、字段含义等,方便理解和维护。
- 定期审查与重构
- 定期对 Protobuf 文件进行审查,删除不再使用的定义,优化复杂的结构。
例如,一个大型电商项目可以将商品相关的 Protobuf 文件放在
goods/
目录下,包括goods_info.proto
、goods_comment.proto
等。对于一些通用的错误码定义,可以提取到common/error_code.proto
中供其他文件引用。
https://juejin.cn/post/7384303275376230411
可以看看这个,我自己总结的
Go 语言有诸多优势,如语法简洁高效,便于学习和编写;并发支持强大,goroutine 和 channel 让并发编程轻松;编译速度快,利于快速开发;内存管理有自动垃圾回收;跨平台性好;性能出色,能满足高性能需求;标准库丰富,涵盖众多领域。这些优势使其在云计算、后端开发、网络编程等领域广泛应用。
如何进行版本管理(git)
Map是否安全
在 Go 语言中,内置的
map
不是并发安全的。如果在多个 goroutine 中同时对一个
map
进行读写操作,可能会导致不可预测的结果,例如数据竞争、程序崩溃等。例如,如果一个 goroutine 正在对
map
进行写入操作,而另一个 goroutine 同时在读取或删除元素,就可能出现问题。为了在并发环境中安全地使用
map
,可以使用一些并发安全的替代方案,比如使用sync.RWMutex
来加锁保护对map
的操作,或者使用第三方库提供的并发安全的map
实现。
我们搞了一个免费的面试真题共享群,互通有无,一起刷题进步。
没准能让你能刷到自己意向公司的最新面试题呢。
感兴趣的朋友们可以加我微信:wangzhongyang1993,备注:csdn面试群。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。