2024年度总结-CSDN
2024年CSDN年度总结
Author:OnceDay Date:2025年1月21日
一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦…
漫漫长路,有人对你微笑过嘛…
文章目录
- 2024年CSDN年度总结
- 1. 整体回顾
- 2. 网络领域学习总结
- 3. 操作系统领域学习总结
- 4. 编程技术领域学习总结
- 5. 展望
1. 整体回顾
在2024年,CSDN上总共写了100篇文章,当然,其中有不少是刷题或者简单的工具类文章,凑数之用。
整体来说,相比于2023年61篇文章,有60%的提升,在25年,目标是150篇文章(每周三篇)。
当然,现实情况是25年1月份已经过去20天,才发布一篇文章,懒惰毕竟是人的固有属性。
2024年取得的最大突破是粉丝量,显然,也是靠友情互刷起来的,只能说自己看得舒服一些,聊以慰藉。
在25年,这个目标是年中1万粉丝,年末1.5万粉丝,争取拿到优质创作者身份,需要继续加油了。
24年本想每周都发布动态,也算是一个小小的总结,可惜坚持不下去,25年需要重启拾起。
在过去,学习的领域很杂,新的语言,如Go和Rust,各种开发工具,如Linux命令行和框架。
但效果并不好,因为都是蜻蜓点水,浅尝辄止,学点皮毛,所以25年必须改善,专研深层次的问题。
24年本来准备做出一两个开源项目,但是最终只有HTTP代理和CSDN自动评论工具两个能用,其他的想法都半途而废,实在可惜。
25年必须要搞出2个开源项目,提高代码质量,不光看书总结,也需要实际训练,产生价值。
2. 网络领域学习总结
24年非常重要的一个工作是认真总结了TCP详解这本书里面的内容,从网络层往上,总结了大量的文档,逐个协议分析,并且深入阅读RFC资料,养成了阅读标准协议文档的习惯。
这部分文档学习和总结时,预期也准备自己实现用户态协议栈来加深理解,但是一直磨蹭,25年这项工作可以开始了。
网络领域学习在之前,其实有些停留于表面,都是一些整体概述性知识,不够深入,目前准备向下面五个方向前进:
-
加密报文处理,涉及对网络传输的数据进行加密和解密,以保护数据的机密性和完整性。常见的加密协议有IPsec、SSL/TLS等。
-
路由协议处理,路由协议如OSPF、BGP等,用于在网络中交换路由信息,构建forwarding表。
-
内核协议栈,内核协议栈是操作系统网络功能的核心,负责处理各层网络协议。需要深刻理解TCP/IP协议栈的原理,包括报文的封装和解封装、flow的管理、拥塞控制、超时重传等各种机制。
-
安全和审计,网络安全日益重要。需要对各种常见的攻击方式(如DDoS、TCP SYN Flood)有所了解,并设计相应的防御和检测措施。安全审计则要求对网络中的流量和行为进行记录和分析,快速发现异常。
-
DPDK深入理解与性能优化,DPDK是Intel开发的一个高性能网络数据平面开发套件,可以大幅提升报文的处理性能。需要理解DPDK提供的各种机制,如Hugepage、PMD、Ring、Mempool等,并学会如何基于DPDK开发高性能的网络应用。
3. 操作系统领域学习总结
在过去,操作系统领域一般是学习一些常见的Linux编程机制,以及与内核交互的各种接口。但在工作和学习中,如果只了解到这种程度是远远不够,还是需要阅读源码,了解真正的实现。
一方面是诊断机制(优先掌握使用,可以快速在工作中实践):
-
ftrace: 函数追踪工具,可以跟踪内核函数的调用。支持函数调用图、时延统计等,是分析内核行为和性能问题的利器。
-
perf: Linux性能分析工具,以性能事件采样为基础,可以分析程序热点、内核性能瓶颈等。支持多种性能事件(如CPU周期、cache命中等)和采样方式。
-
/proc
等虚拟文件系统,提供了大量内核运行状态的信息,如/proc/kallsyms
(内核符号表)、/proc/kmsg
(内核日志)、/proc/meminfo
(内存使用信息)等。 -
/sys等sysfs文件系统,提供了内核配置、硬件信息等,用于用户态和内核态的交互。如
/sys/kernel/debug/tracing
用于ftrace的控制。 -
kdump: 内核崩溃转储机制,当内核panic时,利用kexec启动一个捕获内核,将崩溃的内核镜像保存下来用于离线调试。需要预留一部分内存。
另外就是主要的内核子系统:
-
进程管理: 进程调度、创建与销毁、信号处理、进程关系(如父子进程)维护等。
-
内存管理: 物理内存管理、虚拟内存管理、页表、TLB、swap、内存回收等。
-
文件系统: VFS、各种文件系统(如ext4、XFS)、页缓存、目录项缓存(dentry cache)等。
-
网络: 网络协议栈、socket、邻居子系统、路由、netfilter等。
-
设备驱动: 字符设备、块设备、网络设备等各种驱动框架和具体驱动。
-
安全: DAC(自主访问控制)、MAC(强制访问控制,如SELinux)、capabilities等。
-
时间管理: 定时器、时钟、jiffies等。
-
中断: 硬件中断、软中断、tasklet、workqueue等。
-
同步: 原子操作、自旋锁、信号量、互斥锁等各种同步机制。
-
系统调用: 用户态和内核态的切换,以及各种系统调用的实现。
4. 编程技术领域学习总结
24年尝试了Go、Rust、C++三门语言,结合工作所需,Rust和C++需要继续深入学习和使用,重点在这些编程语言的设计思想和编程范式。在软件工程方面,如设计、单元测试和集成测试,高保真设计等方面,还需要继续在独立项目中训练。
(1)编程语言
-
C++: 高性能、系统级编程语言。支持面向对象、泛型编程等多种范式。
-
Rust: 兼顾安全和性能的系统级编程语言。有ownership、borrow check等独特的内存安全机制。
(2)设计方法
-
设计模式: 反复出现问题的成熟解决方案,如单例、工厂、观察者等。合理使用设计模式能提高代码的复用性、可维护性。
-
设计文档: 从需求到实现的设计思路和接口定义。包括架构设计、概要设计、详细设计等不同层次的文档。
(3)测试技术
- 单元测试: 对代码的最小可测试单元(如函数)进行验证。需要注意边界条件、异常case等。
- 集成测试: 将多个单元组合在一起,测试它们之间的交互。
- 自动化测试: 将手工测试转为机器自动执行,提高测试效率和覆盖率。常见的有UI自动化、接口自动化等。
- 覆盖率测试: 度量测试用例对代码的覆盖情况,如语句覆盖、分支覆盖等。
- 内存检测: 检测内存泄漏、非法访问等问题,常用工具如valgrind。
(4)工程实践
- 编译系统: 如GNU make、CMake等,用于管理复杂项目的编译构建过程。
- 代码文档: 对代码的功能、参数、返回值等进行说明,方便其他人阅读和使用。常用工具如Doxygen、Javadoc等。
- 版本控制: 如Git、SVN等,用于管理代码的版本变更。
- 代码审查: 由AI、工具对代码进行检查,找出可能的问题和改进点。
5. 展望
回首过去,总是会有遗憾,唯一要做的就是持之以恒,积少成多,25年也是重新开始的一年,将之前未完成之事给搞定,不留下遗憾。