- 博客(27)
- 收藏
- 关注
原创 WebServer 高性能服务器 v2
本文继续上一篇WebServer 高性能服务器_沐雨橙风24的博客-优快云博客,主要增加线程池和定时器功能,大幅度提高服务器性能。
2023-03-19 11:09:01
593
原创 WebServer 高性能服务器
本文基于《Linux 高性能服务器编程》和 markparticle 大佬的代码 markparticle--GitHub,将 WebServer 高性能服务器各部分解耦,从实现一个最基本的基于 epoll 的 HTTP 服务器开始,逐步添加后续模块,包括线程池和定时器、数据库连接池和注册登录功能、及日志系统。根据对项目模块的拆分,进一步加深对项目的理解。
2023-03-17 22:32:43
1245
原创 《Effective Modern C++》笔记
《Effective Modern C++》前四章的简单笔记总结,方便之后经常回顾,更多具体的细节内容建议阅读原书籍。
2023-03-04 10:44:04
464
原创 简单实现智能指针--unique_ptr,shared_ptr,weak_ptr
在学习《Effective Modern C++》的过程中学到了智能指针,智能指针对于现代C++编程十分重要,为了加深理解,参考了网上很多智能指针的实现,简单实现了智能指针的基本功能,可能存在问题,欢迎大家指正。
2023-03-01 10:33:04
367
原创 微服务架构
微服务架构是当前大多数互联网公司的标准架构,本文主要介绍微服务架构的相关内容,了解一下微服务的概念。单体架构:All in one process优点:性能最高,冗余小缺点:debug 困难,模块相互影响垂直应用架构:按照业务线垂直划分优点:业务独立开发维护缺点:不同业务存在冗余,每个业务还是单体分布式架构:抽出与业务无关的公共模块优点:业务无关的独立服务缺点:服务模块 bug 可导致全站瘫痪,调用关系复杂,不同服务冗余SOA架构:面向服务优点:服务注册。
2023-02-14 09:12:00
120
原创 分布式理论
本文主要介绍分布式理论相关内容,本文属于进阶课程笔记。分布式理论是现代架构基石,现代后端程序员需要了解掌握。分布式系统是计算机程序的集合,这些程序利用跨多个独立计算节点的计算资源来实现共同的目标。使用分布式系统的五大优势:去中心化、低成本、弹性、资源共享、可靠性高分布式系统的挑战:节点故障、网络、异构的机器和硬件环境、安全本文主要介绍了分布式理论的相关内容,由于是第一次接触分布式理论,所以对这些知识比较陌生,可能后续还要学习才能掌握,根据老师推荐,后面有时间学习一下 MIT 6.824 课程。
2023-02-13 19:24:29
112
原创 架构初探 | 青训营笔记
本文主要介绍企业级后端架构相关的知识。定义:架构,又称软件架构(实现一个软件有很多种方法,架构在方法选择上起着至关重要的指导作用)是有关软件整体结构与组件的抽象描述用于指导软件系统各个方面的设计架构的重要性:架构对于一个软件的重要性,和地基对于一栋楼房的重要性是类似的架构没设计好,软件容易崩,用户体验上不去。最终要么重构,要么放弃架构设计好了,软件的稳定性上去了,用户体验高了,口碑一点点就打造出来了良好的架构基础,也为软件的未来发展提供了更多的可能。为用户赋能,实现自身价值。
2023-02-12 10:15:28
140
原创 GORM 框架入门
前两篇笔记分别介绍了 Golang 微服务 HTTP 框架 Hertz 和 Golang 微服务 RPC 框架 Kitex,本文将要介绍面向golang语言的一种ORM(持久层)框架 GORM。GORM 是面向 Golang 语言的一种 ORM(持久层)框架,支持多种数据库的接入,例如 MySQL,PostgreSQL,SQLite,SQL Server,Clickhouse。此框架的特点,弱化了开发者对于 SQL 语言的掌握程度,使用提供的 API 进行底层数据库的访问。特性:全功能 ORM。
2023-02-11 14:54:14
629
原创 RPC框架Kitex入门
前一篇笔记介绍了字节跳动的开源 Golang 微服务 HTTP 框架 Hertz,本文将要介绍同样是字节跳动开源的 Golang 微服务 RPC 框架 Kitex。Kitex 字节跳动内部的 Golang 微服务 RPC 框架,具有高性能强可扩展的特点,在字节内部已广泛使用。如果对微服务性能有要求,又希望定制扩展融入自己的治理体系,Kitex 会是一个不错的选择。架构设计框架特点:高性能:使用自研的高性能网络库Netpoll,性能相较 go net 具有显著优势。扩展性。
2023-02-07 10:15:06
744
原创 HTTP 框架 Hertz 入门
从本篇笔记开始将介绍 Go 框架三件套(Web / RPC / ORM),框架的学习有助于后续课程的学习以及大项目的完成。本文主要介绍字节跳动的开源 Golang 微服务 HTTP 框架 Hertz。Hertz 是一个 Golang 微服务 HTTP 框架,在设计之初参考了其他开源框架fasthttpginecho的优势, 并结合字节跳动内部的需求,使其具有高易用性、高性能、高扩展性等特点,目前在字节跳动内部已广泛使用。
2023-02-06 09:58:41
1538
原创 编译器优化
前一篇笔记介绍了 Go 内存管理及优化相关的知识,除了从内存管理方面进行优化,还可以从编译器进行优化,本文主要介绍编译器相关知识及 Go 编译器优化思路。重要的系统软件识别符合语法和非法的程序生成正确且高效的代码分析部分(前端)词法分析,生成词素语法分析,生成语法树语义分析,收集类型信息,进行语义检查中间代码生成,生成 IR综合部分(后端)主要学习编译器后端优化代码优化,机器无关优化,生成优化后的 IR代码生成,生成目标代码。
2023-02-05 09:58:22
197
原创 Go 内存管理
前一篇笔记介绍了自动内存管理的相关知识,同时也提到了 Go 语言优化可以从内存管理和编译器优化两方面进行,本文主要介绍的是 Go 语言内存管理及优化相关内容。Go 内存分配--分块目标:为对象在 heap 上分配内存提前将内存分块调用系统调用 mmap() 向 OS 申请一大块内存,例如 4 MB先将内存划分成大块,例如 8 KB,称作 mspan再将大块继续划分成特定大小的小块,用于对象分配noscan mspan: 分配不包含指针的对象 —— GC 不需要扫描。
2023-02-04 21:35:00
150
原创 自动内存管理
在前一节课中了解了高质量编码和性能优化方面的知识,其中在性能优化中提到了 Go 语言优化,Go 语言优化可以从内存管理和编译器优化两方面进行,本文主要介绍自动内存管理相关知识。首先介绍一些相关术语:Auto memory management: 自动内存管理Grabage collction: 垃圾回收Mutator: 业务线程Collector: GC 线程Concurrent GC: 并发 GCParallel GC: 并行 GC。
2023-02-03 09:42:21
262
原创 Go性能调优实战
在前文中已经介绍了高质量编程的原则和一些实践规范,同时给出了一些性能优化建议,本文主要介绍在实际工程中如何针对某个应用程序进行性能调优。性能调优有以下原则:要依靠数据不是猜测要定位最大瓶颈而不是细枝末节不要过早优化不要过度优化pprof 是用于可视化和分析性能分析数据的工具可以知道应用在什么地方耗费了多少 CPU、Memory等运行指标介绍实际业务服务性能优化的案例以及逻辑相对复杂的程序如何性能调优。基本概念:服务:能单独部署,承载一定功能的程序。
2023-02-02 10:06:06
257
原创 Go性能优化建议
上一篇文章介绍了如何写出高质量的代码,高质量的代码能够完成功能,但是在大规模程序部署的场景,除了完成正常的功能,还要尽可能提升性能来节省资源成本,本文主要介绍性能优化相关的建议。性能优化的前提是满足正确可靠、简洁清晰等质量因素,性能优化需要综合评估,有时候时间效率和空间效率可能对立。
2023-02-01 17:30:10
246
原创 Go高质量编程
本文主要介绍高质量编程相关内容,首先简单说明什么是高质量代码,之后详细介绍常用编码规范。编写的代码能够达到正确可靠、简洁清晰、无性能隐患的目标就能称之为高质量代码实际应用场景千变万化,各种语言的特性和语法各不相同,但是高质量编程遵循的原则是相通的高质量的编程需要注意以下原则:简单性、可读性、生产力简单性:消除多余的复杂性,以简单清晰的逻辑编写代码可读性:代码是写给人看的,编写可维护代码的第一步是确保代码可读生产力:团队整体工作效率非常重要。
2023-01-31 11:36:47
242
原创 Go工程实践之测试
在前一篇文章中,我们介绍了 Go 依赖管理相关的内容,在实际开发中,另一个重要的概念是测试,本文主要介绍 Go 测试相关的内容,包括单测规范、测试 Mock 以及基准测试。测试关系着系统的质量,质量则决定线上系统的稳定性。只要做好完备的测试,就可以避免事故的发生。测试一般分为:回归测试:QA 同学手动通过终端回归一些固定的主流程场景集成测试:对系统功能维度做测试验证单元测试:开发者对单独的函数、模块做功能验证。
2023-01-30 20:07:10
122
原创 Go依赖管理
在实际工程开发中,一个重要概念就是依赖管理,本文主要介绍 Go 的依赖管理,包括 Go 依赖管理的演进路线及 Go Module 实践等内容。依赖指各种开发包,在开发项目时,要学会站在巨人的肩膀上,也就是利用已经封装好的、经过验证的开发组件或开发工具来提升研发的效率。在实际工程中,项目一般比较复杂,我们不可能基于标准库0-1编码搭建,而更多的是考虑业务逻辑的实现,像其他的涉及框架、日志、driver、以及 collection 等一系列依赖都会通过 sdk 的方式引入,因此对依赖包的管理就显得尤为重要。
2023-01-29 17:01:36
1121
原创 Go语言工程进阶-并发编程
基于前文的 Go 语言基础语法,本文主要介绍 Go 语言进阶编程中的并发编程,从并发编程的视角介绍 Go 语言高性能的本质。Go 语言可以充分发挥多核优势本文主要介绍了 Go 语言并发编程的相关知识,为了应对高访问量,现代系统大都采用并发编程,Go 语言又是为并发编程所生,因此这部分知识需要熟练掌握,应用于后续大作业。
2023-01-28 16:05:53
149
原创 Go语言实战案例 | 青训营笔记
在上一篇笔记中,已经总结了 Go 语言的基础语法和一些常见标准库的使用方法,本文主要基于之前的基础,通过两个实战的例子对 Go 的基础语法和标准库的使用方法有更深刻的认识。通过项目实战的练习,对 Go 语言的基础语法以及一些常见的标准库用法有了更深刻的了解,目前还是不太熟练,代码就是需要多写多练,同时对代码生成工具有了一定的了解,可以加快开发的速度,提高开发的效率。
2023-01-28 11:18:14
1108
原创 《TCP/IP 网络编程》笔记
本文主要基于《TCP/IP 网络编程》这本书进行总结,主要针对 Linux 网络编程部分进行阐述,Windows 网络编程部分有需要建议阅读原书籍。
2023-01-26 11:17:11
393
原创 PyTorch入门记录
一、Pytorch加载数据读取数据主要涉及到两个类:Dataset及DataLoader1.Dataset首先可以利用Dataset类加载自己的数据集从pytorch官方源码可以看出,主要包括两个方法__getitem__和__len__torchvision.dataset中包含很多数据集,例如COCO、CIFAR、MNIST等,通常需要...
2022-02-12 23:26:22
1886
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人