职业规划2025

语言

C++

了解一些C新特性,比如concept、Policy、constexpr,对找高薪工作有帮助吗?jthread、ranged_for。
C
20的协程。
C++26的反射。
有没有必要花时间在新标准上?

Go?

有必要转Go吗?

Java?

了解一些,后端是不是最好用Java做?岗位多。发展路径。

总结


操作系统

Linux

主要学的是Linux,gcc、CMake。
gdb只会简单的调试。

Windows

只了解很简单的窗口开发,看手册。

多线程

掌握到什么程度?
之前学了不少相关知识,但都差不多忘记了。
如果让现场编、设计多线程程序,不熟练。

总结


网络

前段时间刚大概复习了一下4层模型。和TCP协议。
HTTP了解地不够细致,没有深入学。

总结


数据库

大多数都忘记了。掌握哪些知识?多深入?

01_为什么要用RPC分布式

提高硬件上限

受限于硬件条件,服务器所能承受的用户的并发量。

解耦项目架构,便于管理

如果整个项目代码全部在一起,假设只修改一个单元模块的几行代码,则可能需要把整个项目重新编译、部署,耗时太长。

各模块对硬件要求不一样

有些模块是CPU密集型,有些模块是I/O密集型。各模块对硬件资源的需求不一样。分模块,分布式,可以充分发挥每个服务器硬件的优势。
CPU密集型用于数据处理、计算。要求CPU性能。
I/O密集型用于处理请求、连接。要求网络带宽。

单纯的集群

  1. 优点:集群只能解决提高硬件的上限。
  2. 缺点:如果只做集群,不做分布式,在只修改几行代码后每个服务器都需要重新编译、部署全部代码。更头疼了。
  3. 缺点:不能精细地控制硬件资源和模块的适配。

可以在分布式的基础上集群

根据节点对应的功能模块的并发要求,可以针对性地对某一模块进行集群部署。

分布式虽好,但要解决的问题

大系统的软件模块怎么划分

各模块可能会实现大量重复的代码

各模块之间怎么访问

各模块都运行在不同的进程中。
(比如可以运行在docker虚拟化环境中,各个模块单独运行在一个环境中)
比如,用户管理是一个单独的模块,和好友管理模块运行在不同的环境、进程。
用户管理,可能某个用户需要调用user.GetUserFriendLists(userid)。
而这个接口/函数可能处于好友管理模块中。

1
2
3
4
// 机器1
user.GetUserFriendLists(userid);
// 机器2
list<User> GetUserFriendLists(int userid);

机器1上的模块怎么调用机器2上的模块的一个业务方法呢???
机器1上的一个模块进程1怎么调用机器1上的模块进程2里面的一个业务方法呢???

解决方案

见《RPC通信原理》一篇。