自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

周壮的博客

专注技术,死磕Java,架构提升

  • 博客(318)
  • 收藏
  • 关注

原创 00 告别盲目刷题,击破算法面试

《数据结构与算法面试宝典》专栏作者大壮分享其从技术架构师到"面霸"的成长历程。基于多年大厂面试经验,该课程提炼出300+高频面试题,独创"一解多题"与"一题多解"方法论,覆盖栈、队列、二叉树等数据结构及动态规划等算法核心考点。课程提供Java/C++/Python三语实现、思维导图及动画图解,帮助求职者在一个月内系统备战算法面试,掌握大厂P7+级别要求的解题能力。作者特别强调算法能力是职业发展的关键门槛,并分享独家代码模板和面试技巧,助力程序员突破

2025-07-25 13:35:28 698

原创 20 结束语程序员的道、术、势

课程总结与职场发展建议 课程回顾:历时两个月的技术课程圆满结束,感谢学员们的积极参与和反馈。重点强调技术学习应注重思维过程而非具体形式,培养独立思考与转化能力。 职业发展"道术势": 术:专业技术能力 道:分析思考能力 势:把握趋势的能力 职场建议: 对资深人员:培养敏感思考、精准表达、超预期交付、提升认知层次 对新人:做好职业规划、自我定位、归纳总结、重视时间管理 结语:技术人员应经历"做下不做上→做下也做上→做上不做下"的职业进阶过程,不断提升综合能力。

2025-07-01 20:15:00 635

原创 19 互联网架构设计面试的知识体系

摘要:文章剖析了研发工程师成长为架构师的职业路径,指出多数人缺乏系统方法。提出架构师能力模型包括基础技术架构、业务架构和开发技能三大维度,强调需要全面把控系统开发各环节。以互联网分布式系统为例,详细拆解了存储、计算、输入输出、控制器四大知识体系,包括数据分片、一致性协议、分布式计算框架、网络通信等核心技术。最后建议从熟悉领域出发构建知识网络,培养技术判断力,逐步实现从技术思维到全局视角的转变。

2025-07-01 08:15:00 820

原创 18 从架构师角度怎么应对千万级流量的问题?

技术行业发展到今天,很多技术上的问题都不存在挑战了,所谓的高性能架构设计,也仅仅变成了一种标准化的应对流程。你要做的就是将业务问题,抽象成一个技术问题,比如具体到数据库设计、缓存设计、队列设计、线程设计等技术细节,然后不管你通过什么渠道,Google 也好,问同事也好,或者购买付费知识也好,都能找到技术的应对方案。

2025-06-30 12:30:00 795

原创 17 如何证明你做的系统是高性能的?

对于怎么评估系统高性能,你可以从系统的吞吐量、延迟以及 TP 99,这三个指标出发回答面试官提出的问题。而对于高级研发工程师,不仅仅要了解后端的性能指标,还有对全链路的性能指标有所了解。另外,在实际生产环境,还会涉及 CDN 加速、ISP 路由策略、边缘计算等一系列网络工程层面的性能优化指标,这里展开的内容相对较多,你可以自己课下学习。总的来说,你要在大脑里先建立起整个请求的链路蓝图,熟悉每个环节的性能损耗。今天的作业是:对于我们常用的系统或中间件,你能说出它们的性能指标吗?

2025-06-30 08:15:00 659

原创 16 互联网系统容错、降级等高可用问题

这一讲我带你了解了雪崩产生的原因,服务熔断的实现方式以及服务降级的策略,今天你需要了解的重点是:服务熔断其实是一个有限状态机,实现的关键是三种状态之间的转换过程。降级就是在做取舍(取舍服务、取舍功能),本质上是为了解决资源不足和访问量过大的问题。实现上可以降低系统一致性、裁剪非核心服务,以及简化产品功能。总之,服务的熔断和降级是互联网保证系统稳定性和可用性的重要手段,在你的架构设计中,如果涉及系统与第三方服务调用的情况下,都需要考虑增加服务熔断和降级方案。

2025-06-29 10:54:29 562

原创 15 如何证明你做的系统是高可用的?

我们来回顾一下今天的重点内容。为了在面试中更好地回答怎么评估系统高可用,我们讲解了 SLA 的概念以及评估方法,并得出“以停机时间影响的系统请求量作为评估指标”比较科学。为了确保线上服务的稳定运行,在设计监控系统时,要考虑三个核心点,基础设施监控、系统应用监控,以及存储服务监控。另外,我强调了故障处理是研发工程师在进阶过程中必须经历的,而故障处理能力也是面试官最为看重的能力之一,所以对于怎么处理各类故障,你要形成一套体系化的知识框架。为了方便你的记忆,我将今天的内容总结如下。

2025-06-29 10:49:33 947

原创 14 缓存穿透、缓存击穿、缓存雪崩问题?

本文探讨了Redis缓存设计中的三大核心问题及解决方案:1. 缓存穿透采用预设空值策略避免恶意查询穿透到数据库;2. 缓存击穿通过Redis的setNX方法实现互斥锁控制并发访问;3. 缓存雪崩通过随机打散过期时间或设置缓存永不过期来预防。文章还提出热点数据动态缓存策略(基于访问时间排序)和缓存业务解耦方案(MySQL Binlog+Canal+MQ架构)。最后强调需注意缓存一致性、容量限制等潜在问题,并布置了Redis计数器实现的思考题。这些方案有效解决了高并发场景下的缓存性能瓶颈问题。

2025-06-27 08:03:14 1043

原创 13 你要掌握 Redis 哪些原理?

Redis作为主流缓存中间件,其原理考察常聚焦三大核心:线程模型、持久化和高可用。线程模型方面,需区分不同版本特性(4.0前纯单线程、4.0引入异步删除、6.0新增I/O多线程);持久化涵盖AOF写后日志、RDB快照及混合模式优缺点;高可用方案包括主从复制、哨兵模式和Cluster集群的哈希槽分片机制。回答时需体现版本演进认知(如6.0多线程网络处理)、技术权衡(如AOF/RDB的可靠性/性能取舍)以及集群数据分布原理。掌握这些要点能系统展示对Redis深度理解。

2025-06-27 07:59:59 747

原创 12 MySQL 如何优化数据存储方案?

本文主要探讨高并发场景下数据库分库分表的优化方案。当主从分离无法解决写入压力时,可采用垂直拆分(按业务分库)、水平拆分(按数据量分表)或两者结合的方案。垂直拆分关注业务隔离,水平拆分侧重数据扩展,其中Hash分片均匀但缺乏业务关联,Range分片可预估业务但易产生热点。解决方案包括硬件升级和引入分片元数据表。分库分表后需解决跨库查询问题,可通过ES、HDFS等存储聚合数据。文章还提及NewSQL的发展趋势,建议在面试中展现相关技术视野。最后留下思考题:如何处理商品分片后的关联表问题。

2025-06-25 22:56:59 1123

原创 11 MySQL 如何优化数据查询方案?

本文探讨了在读多写少的电商场景下如何优化MySQL数据查询性能。文章指出,单纯依赖Redis缓存无法有效解决订单中心等高并发查询问题,提出"读写分离"是提升系统并发的关键方案。详细解析了MySQL主从复制原理(基于binlog的三阶段同步过程)及三种复制模式(同步/异步/半同步),并针对主从延迟问题给出数据冗余、缓存机制、直查主库等解决方案。文章还讨论了工程实现层面的数据源管理方案,并升华到复制状态机原理的技术抽象层面。最后强调初中级工程师需掌握主从复制原理及解决方案,高级工程师还应具备

2025-06-25 22:52:47 769

原创 10 MySQL 的事务隔离级别和锁的机制?

本文系统讲解了MySQL事务隔离级别与锁机制的核心知识点,主要包括:1)四种事务隔离级别(读未提交、读已提交、可重复读、串行化)的特性及对应的脏读、不可重复读、幻读问题;2)悲观锁与乐观锁的实现原理;3)重点剖析了脏读、不可重复读和幻读三种现象的产生机制及解决方案;4)深入解析死锁产生的四个必要条件及预防策略。文章强调这些内容是MySQL面试的高频考点,建议开发者结合实践理解事务隔离、锁机制等底层原理,并补充数据库设计、SQL优化等知识体系。

2025-06-24 13:16:26 736

原创 09 MySQL 的索引原理与优化问题?

本文介绍了MySQL索引原理与优化方法。核心内容包括:B+Tree索引的实现原理,通过主键和非主键查询的具体过程;对比分析了B+Tree相对于B树、二叉树和Hash表的优势;讲解了执行计划的查看方法和关键参数解释;列举了索引失效的常见情况;提出了前缀索引、覆盖索引、联合索引等优化策略。文章强调理解索引原理是SQL优化的基础,同时指出索引也存在写入延迟和空间消耗等问题,建议在实际工作中结合执行计划分析索引使用情况,合理运用各种优化方法。

2025-06-24 08:16:10 644

原创 08 MQ:消息队列的丢失、重复与积压问题

本文探讨MQ消息中间件的高频面试问题"如何确保消息100%不丢失"。文章以京东系统为例,分析了消息从生产、存储到消费的三个环节可能丢失消息的场景及解决方案:生产阶段需正确处理响应,存储阶段依靠MQ副本机制,消费阶段延迟确认。同时提出通过全局唯一ID或版本号实现消息检测,并强调幂等性设计对解决重复消费的重要性。针对消息积压问题,建议临时扩容、降级非核心业务及优化消费逻辑。最后指出面试中展现系统性思考过程比直接给出答案更重要,并建议基础架构岗位需深入掌握消息中间件的其他知识体系。

2025-06-23 08:19:56 883

原创 07 RPC:在面试中展现出“造轮子”的能力

文章摘要: 本文探讨了RPC技术在微服务架构中的应用及面试考察要点。首先指出RPC是微服务通信的基础,面试官往往从"实践+原理"两个维度考察候选人。实践层面以电商网关超时设置为例,强调需结合TP99耗时、调用方式、服务重要性等综合分析;原理层面重点讲解RPC通信流程中的序列化选型(如Hessian、Protobuf)和网络模型优化(BIO/NIO对比),指出NIO多路复用模型更适合高并发场景。最后建议通过阅读Dubbo等源码深入理解RPC实现,并提示高级功能(负载均衡、熔断等)可作为面试

2025-06-23 08:16:20 872

原创 06 分布式系统中锁的实现原理

本文介绍了分布式锁在分布式系统中的应用及其实现方式。分布式锁主要用于协调多系统对共享资源的同步访问,解决库存超售等并发问题。文章分析了三种实现方案:基于MySQL的关系型数据库(存在性能瓶颈和死锁问题)、基于Redis的分布式缓存(高效但需考虑超时设置和集群可靠性),以及Redlock算法解决Redis集群问题。文章强调设计分布式锁需满足互斥性、高可用、锁释放和可重入等原则,并指出面试中应注重原理理解和业务场景适配。最后留下思考题:基于Zookeeper的实现方案如何满足这些设计原则。

2025-06-20 19:15:00 939

原创 05 海量并发场景下分布式事务一致性问题

本文深入探讨分布式系统中的事务一致性问题,以电商下单场景为例,分析主流解决方案。重点对比两阶段提交(2PC)与基于MQ的可靠消息投递两种方案:2PC通过协调者和参与者两阶段操作实现强一致性,但存在死锁、性能和数据不一致风险;MQ方案通过消息持久化、手动应答和双向确认机制实现最终一致性,更适合高并发场景。文章强调面试时应优先讲解MQ方案的可落地性,同时掌握2PC原理以展示技术深度,指出实际业务中需根据场景权衡一致性与成本。思考题引导读者对比TCC与2PC的差异。(149字)

2025-06-20 08:02:28 730

原创 04 亿级商品深度回答分布式系统的原理性

本文以电商海量商品存储为案例,深入剖析分布式系统设计的核心问题。首先对比Hash分片与一致性Hash分片的优缺点,指出前者简单但扩展性差,后者通过虚拟节点减少数据迁移。接着探讨热点数据问题,提出Range分片方案及元数据服务集群的实现思路。然后分析数据一致性问题,介绍Raft、Paxos等强一致性算法和Gossip最终一致性协议的应用场景。文章强调分布式设计中需要在数据分片、副本复制和一致性算法之间进行权衡,并指出这些知识点在技术面试中的重要性。通过层层递进的案例解析,展现了分布式系统从基础架构到高级算法的

2025-06-19 08:21:42 841

原创 03 面试官考察与 CAP 有关的分布式理论

本文探讨了分布式系统面试中CAP理论的应用技巧。首先指出CAP理论是分布式设计的核心,面试中会考察不同岗位候选者的理解深度。文章详细剖析了CAP原理,强调实际场景中的权衡取舍,并介绍了PACELC和BASE等优化理论。针对初、中、高级工程师分别给出了回答建议:初级应展示理论到实践的闭环思维,高级则需要构建知识体系和技术判断力。最后以Redis分布式锁为例,演示了如何运用CAP理论分析实际问题,并强调了技术深度与广度的重要性。文中还设置了电商高可用设计的思考题,引导读者将理论应用于实践。

2025-06-19 08:16:53 859

原创 02 用架构师视角回答架构设计方案

本文阐述了用架构师思维应对技术面试的核心方法。当被问及系统设计问题时,不应陷入技术细节,而应从四个层面结构化回答:分析复杂度来源(业务耦合、高可用等);提出多套解决方案(MQ、Redis等);建立评估标准(功能性/非功能性需求);阐述技术实现原理。文章通过电商评论系统改造案例,演示如何运用;空间全局(系统边界)和时间全局(发展周期)的架构思维,强调知道做什么比怎么做更重要的核心理念。

2025-06-18 08:13:00 709

原创 01 研发工程师提升面试竞争力的三个技术认知

本文探讨了研发工程师提升面试竞争力的三个关键技术认知:首先,架构设计认知需要从点到面系统思考,理解拆分背后的提效本质;其次,分析问题认知要聚焦业务阶段主要矛盾,而非单纯追求高性能;最后,能力边界认知强调拓展驾驭系统的范围,从模块级迈向领域级思考。文章指出,真正的技术竞争力在于解决复杂业务问题的能力,而非单纯掌握技术工具,建议工程师培养归纳总结习惯,主动突破舒适区,才能向更高职级发展。

2025-06-18 07:50:53 713

原创 00 中高级研发面试逃不开架构设计

我将为你深入剖析系统处理百万级并发时面临的技术挑战与优化策略,揭示大厂面试中高频出现的高性能系统设计问题。内容包括:如何评估系统的高可用性指标?并通过电商平台实战案例,拆解架构设计中的常见考点。

2025-06-17 22:39:40 642

原创 开源的代码搜索工具 Kooder

一个企业里往往有大量的项目,每个项目都包含很多的代码,这些代码都是企业的核心资产。经过日积月累,不同的开发人员不断的修改完善,企业中很难有人能掌握所有的代码。于是企业全库的代码搜索就变得非常重要。例如我们可以搜索公司代码是否包含某类敏感信息,是否使用了某些不安全的方法等等。今天和大家分享一个开源的代码搜索工具 Kooder。

2025-01-23 10:33:14 975 1

原创 结束语 你的 Go 语言成长之路

具备自我驱动力,以及学习能力的人,在职场中的竞争力都不会太差。希望这个专栏可以很好地帮到你,让你学到 Go 语言的知识,让你在职场中更具备竞争力。写到这里就真的要说再见了,如果你想和我有更多的交流,可以关注我的公众号「飞雪无情」。最后,我将邀请你为本专栏进行结课评价,你的每一个反馈,我和拉勾教育都会关注且认真对待。希望你能为自己的学习之旅画上一个完整的句号,点击链接,参与课程评价,编辑同学会随机抽 5 位同学送精美礼品。

2024-12-08 15:07:26 1154

原创 22 网络编程:Go 语言如何通过 RPC 实现跨平台服务

RPC,也就是远程过程调用,是分布式系统中不同节点调用的方式(进程间通信),属于 C/S 模式。RPC 由客户端发起,调用服务端的方法进行通信,然后服务端把结果返回给客户端。RPC的核心有两个:通信协议和序列化。在 HTTP 2 之前,一般采用自定义 TCP 协议的方式进行通信,HTTP 2 出来后,也有采用该协议的,比如流行的gRPC。序列化和反序列化是一种把传输内容编码和解码的方式,常见的编解码方式有 JSON、Protobuf 等。

2024-12-08 15:06:36 1073

原创 21 网络编程:Go 语言如何玩转 RESTful API 服务

RESTful API 是一套规范,它可以规范我们如何对服务器上的资源进行操作。在了解 RESTful API 之前,我先为你介绍下 HTTP Method,因为 RESTful API 和它是密不可分的。说起 HTTP Method,最常见的就是POST和GET,其实最早在 HTTP 0.9 版本中,只有一个GET方法,该方法是一个幂等方法,用于获取服务器上的资源,也就是我们在浏览器中直接输入网址回车请求的方法。

2024-12-08 15:05:49 721

原创 20 协作开发:模块化管理为什么能够提升研发效能

在业务非常简单的时候,你甚至可以把代码写到一个 Go 文件中。但随着业务逐渐复杂,你会发现,如果代码都放在一个 Go 文件中,会变得难以维护,这时候你就需要抽取代码,把相同业务的代码放在一个目录中。在 Go 语言中,这个目录叫作包。在 Go 语言中,一个包是通过package 关键字定义的,最常见的就是main 包,它的定义如下所示:此外,前面章节演示示例经常使用到的 fmt 包,也是通过 package 关键字声明的。一个包就是一个独立的空间,你可以在这个包里定义函数、结构体等。

2024-12-08 15:02:30 928

原创 19 性能优化:Go 语言如何进行代码检查和优化

代码规范检查,顾名思义,是从 Go 语言层面出发,依据 Go 语言的规范,对你写的代码进行的静态扫描检查,这种检查和你的业务无关。比如你定义了个常量,从未使用过,虽然对代码运行并没有造成什么影响,但是这个常量是可以删除的,代码如下所示:const name = "飞雪无情"示例中的常量 name 其实并没有使用,所以为了节省内存你可以删除它,这种未使用常量的情况就可以通过代码规范检查检测出来。

2024-10-23 19:54:15 650

原创 18 质量保证:Go 语言如何通过测试保证质量

顾名思义,单元测试强调的是对单元进行测试。在开发中,一个单元可以是一个函数、一个模块等。一般情况下,你要测试的单元应该是一个完整的最小单元,比如 Go 语言的函数。这样的话,当每个最小单元都被验证通过,那么整个模块、甚至整个程序就都可以被验证通过。单元测试由开发者自己编写,也就是谁改动了代码,谁就要编写相应的单元测试代码以验证本次改动的正确性。基准测试(Benchmark)是一项用于测量和评估软件性能指标的方法,主要用于评估你写的代码的性能。

2024-10-23 19:52:28 1141

原创 17 SliceHeader:slice 如何高效处理数据

通过 slice 切片的分析,相信你可以更深地感受 Go 的魅力,它把底层的指针、数组等进行封装,提供一个切片的概念给开发者,这样既可以方便使用、提高开发效率,又可以提高程序的性能。Go 语言设计切片的思路非常有借鉴意义,你也可以使用 uintptr 或者 slice 类型的字段来提升性能,就像 Go 语言 SliceHeader 里的 Data uintptr 字段一样。在这节课的最后,给你留一个思考题:你还可以找到哪些通过 unsafe.Pointer、uintptr 提升性能的例子呢?

2024-10-16 12:17:03 748 1

原创 16 非类型安全:让你既爱又恨的 unsafe

unsafe 包里最常用的就是 Pointer 指针,通过它可以让你在 *T、uintptr 及 Pointer 三者间转换,从而实现自己的需求,比如零内存拷贝或通过 uintptr 进行指针运算,这些都可以提高程序效率。unsafe 包里的功能虽然不安全,但的确很香,比如指针运算、类型转换等,都可以帮助我们提高性能。不过我还是建议尽可能地不使用,因为它可以绕开 Go 语言编译器的检查,可能会因为你的操作失误而出现问题。

2024-10-16 12:15:56 1211

原创 15 运行时反射:字符串和结构体之间如何转换

在 Go 语言中,reflect.Value 被定义为一个 struct 结构体,它的定义如下面的代码所示:typ *rtypeflag我们发现 reflect.Value 结构体的字段都是私有的,也就是说,我们只能使用 reflect.Value 的方法。现在看看它有哪些常用方法,如下所示://针对具体类型的系列方法//以下是用于获取对应的值BoolBytesComplexFloatIntStringUintCanSet //是否可以修改对应的值以下是用于修改对应的值Set。

2024-09-07 15:41:14 1161 1

原创 14 内存分配:new 还是 make?什么情况下该用谁?

通过这节课的讲解,相信你已经理解了函数 new 和 make 的区别,现在我再来总结一下。new 函数只用于分配内存,并且把内存清零,也就是返回一个指向对应类型零值的指针。new 函数一般用于需要显式地返回指针的情况,不是太常用。make 函数只用于 slice、chan 和 map 这三种内置类型的创建和初始化,因为这三种类型的结构比较复杂,比如 slice 要提前初始化好内部元素的类型,slice 的长度和容量等,这样才可以更好地使用它们。

2024-09-07 15:34:48 1121

原创 13 参数传递:值、引用及指针之间的区别?

在 Go 语言中,函数的参数传递只有值传递,而且传递的实参都是原始数据的一份拷贝。如果拷贝的内容是值类型的,那么在函数中就无法修改原始数据;如果拷贝的内容是指针(或者可以理解为引用类型 map、chan 等),那么就可以在函数中修改原始数据。所以我们在创建一个函数的时候,要根据自己的真实需求决定参数的类型,以便更好地服务于我们的业务。这节课中,我讲解 chan 的时候没有举例,你自己可以自定义一个有 chan 参数的函数,作为练习题。下节课我将介绍“内存分配:new 还是 make?什么情况下该用谁。

2024-08-19 20:01:41 1094

原创 12 指针详解:在什么情况下应该使用指针?

我们都知道程序运行时的数据是存放在内存中的,而内存会被抽象为一系列具有连续编号的存储空间,那么每一个存储在内存中的数据都会有一个编号,这个编号就是内存地址。有了这个内存地址就可以找到这个内存中存储的数据,而内存地址可以被赋值给一个指针。小提示:内存地址通常为 16 进制的数字表示,比如 0x45b876。可以总结为:在编程语言中,指针是一种数据类型,用来存储一个内存地址,该地址指向存储在该内存中的对象。这个对象可以是字符串、整数、函数或者你自定义的结构体。小技巧:你也可以简单地把指针理解为内存地址。

2024-08-19 19:54:23 722

原创 11 并发模式:Go 语言中即学即用的高效并发模式

并发模式和设计模式很相似,都是对现实场景的抽象封装,以便提供一个统一的解决方案。但和设计模式不同的是,并发模式更专注于异步和并发。你会在很多项目的源代码中一遍遍地看到本节课提到的并发模式,虽然解决的问题不一样,但它们的思路是相似的,所以你也可以把它们进一步抽象,这样在项目开发中就可以直接复用。并发模式不限于这节课讲的这些,在项目中和并发、异步有关并且可以被抽象复用的解决方案都可以总结为并发模式。所以发挥自己的想象吧,这节课的思考题就是:你还能总结出哪些并发模式呢?

2024-08-14 13:25:43 1110

原创 10 Context:你必须掌握的多线程并发控制神器

一个任务会有很多个协程协作完成,一次 HTTP 请求也会触发很多个协程的启动,而这些协程有可能会启动更多的子协程,并且无法预知有多少层协程、每一层有多少个协程。如果因为某些原因导致任务终止了,HTTP 请求取消了,那么它们启动的协程怎么办?该如何取消呢?因为取消这些协程可以节约内存,提升性能,同时避免不可预料的 Bug。Context 就是用来简化解决这些问题的,并且是并发安全的。Context 是一个接口,它具备手动、定时、超时发出取消信号、传值等功能,主要用于控制多个协程之间的协作,尤其是取消操作。

2024-08-05 20:20:00 640

原创 09 同步原语 sync包让你对并发控制得心应手

上节课留了一个思考题:channel 为什么是并发安全的呢?是因为 channel 内部使用了互斥锁来保证并发的安全,这节课,我将为你介绍互斥锁的使用。在 Go 语言中,不仅有 channel 这类比较易用且高级的同步机制,还有 sync.Mutex、sync.WaitGroup 等比较原始的同步机制。通过它们,我们可以更加灵活地控制数据的同步和多协程的并发,下面我为你逐一讲解。

2024-08-05 07:40:40 932

原创 08 并发基础 Goroutines和Channels的声明与使用

前面的课程中,我所写的代码都按照顺序执行,也就是上一句代码执行完,才会执行下一句,这样的代码逻辑简单,也符合我们的阅读习惯。但这样是不够的,因为计算机很强大,如果只让它干完一件事情再干另外一件事情就太浪费了。比如一款音乐软件,使用它听音乐的时候还想让它下载歌曲,同一时刻做了两件事,在编程中,这就是并发,并发可以让你编写的程序在同一时刻做多几件事情。

2024-08-05 07:39:40 733

原创 07 错误处理:如何通过 error、deferred、panic 等处理错误?

你可能会想,上面采用工厂返回错误信息的方式只能传递一个字符串,也就是携带的信息只有字符串,如果想要携带更多信息(比如错误码信息)该怎么办呢?这个时候就需要自定义 error。

2024-08-03 20:33:53 1164

02 数据加工层 如何搭建用户与内容的标准规范体系

数据加工层 如何搭建用户与内容的标准规范体系近年来,互联网上充斥着纷繁芜杂的信息,比如文字、图像、声音、视频等,这些信息都是非结构化,而用户在浏览这些信息时会同时做出各种各样的行为,因此,如果想要实现信息与用户之间的高效连接,我们必须建立标准的用户行为规范和内容规范,这也是在数据加工阶段的核心工作内容。 在个性化流量分发体系中,数据加工阶段主要包含用户标签体系和物品标签体系建设工作,即结构化标准体系建设。在这个过程中,我们需要将用户基础数据、物品基础数据、采集的行为数据等进行清洗、抽取、关联等,最终形成用户标签和物品标签。 其中,用户标签是用户的结构化基础,物品标签是物品的结构化基础,为后续用户画像和物品画像的产出提供必要的材料和关联基础。推荐算法依据结构化数据对用户和物品进行理解,从而提高流量分发的精度。

2024-07-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除