Skip to content

Commit

Permalink
add Start suggestion (#140)
Browse files Browse the repository at this point in the history
  • Loading branch information
wanghenshui authored Oct 25, 2024
1 parent c6e6fa1 commit a64cff3
Show file tree
Hide file tree
Showing 2 changed files with 231 additions and 0 deletions.
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@ RSS使用仓库的release RSS [链接](https://github.com/wanghenshui/cppweeklyn

另外还有猪脚饭收买的特约供稿,有供稿会单独列出


### [c++周刊常见问题收集,看之前先看这个](./spec/2024-10-24-start.md)


## 2024

| [161](./posts/161.md) |[162](./posts/162.md) | [163](./posts/163.md) |[164](./posts/164.md) | [165](./posts/165.md)| [166](./posts/166.md)| [167](./posts/167.md) | [168](./posts/168.md) | [169](./posts/169.md) | |
Expand Down
227 changes: 227 additions & 0 deletions spec/start.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,227 @@

# C++ 中文周刊 常见问题 解答


[周刊项目地址](https://github.com/wanghenshui/cppweeklynews)

公众号

<img src="https://wanghenshui.github.io/cppweeklynews/assets/code.png" alt="" width="30%">


qq群 [点击进入](https://qm.qq.com/q/6NGizNPyG4) 满了加这俩 729240657 866408334

[RSS](https://github.com/wanghenshui/cppweeklynews/releases.atom)

经常在群里交流,发现有很多共性的问题,以及迷茫的点,大家重复交流很无聊,需要一些共识,这也是群聊的目的

之前通过发问卷收集了一些反馈 问卷地址 https://docs.qq.com/sheet/DYkllcE9scmtUUWlu?tab=ss_epaxm9&viewId=fv1&u=556ff788fee74403a1ab2ecd9e607b89

这里把问题总结列举出来

本文长期更新,按照更新顺序排列,目前更新时间为 2024-10-25

---


## c++就业前景/什么时候能找到好工作/当前c++能做的业务场景

这个我做了一个表格,https://docs.qq.com/sheet/DYm1nV1ZUdGVNWnNh?tab=BB08J2

大家感兴趣也可以补充,我把表格内容列出来

- 1 ai搜广推 需要考虑35岁之后的职业焦虑,不过刚开始干肯定前途光明。这是离钱最近的地方
- 2 游戏/ 赚钱最多最广的方向,前提是游戏能成
- 2.5 hft 高频交易 赚钱,但门槛比较高圈子封闭爱装逼
- 2.6 其他和钱相关的项目(网关/web3) web3有被坑风险
- 3 算法 (包括ai gpu/自动驾驶/机器人) 越老越吃香,前期薪资也高,但门槛高得离谱
- 3.9 机架 平台哥(网关网平rpc框架管理) 需要基础非常好,且岗位少
- 3.99 机架 编译器 llvm/ncc 岗位少 知识需要自己琢磨
- 4 机架(系统/数据库/nosql/对象存储文件系统) 曾经风口,人太多,有点卷
- 4.9 传统业务 curd 哥 份额基本被go吃掉
- 5 嵌入式 手机相关 相机算法/手机存储/手机基带/手机射频 手机赚钱,但现在手机没那么赚钱了
- 5.5 图像算法/音视频 越老越吃香,但怕你坚持不住
- 5.6 传统业务(通信/核心网/商用软件) 和上面有重叠项目
- 5.7 传统软件上位机 qt 薪资可能不高,需要现场办公
- 6 嵌入式 汽车方向/无人机/物联网方向 汽车赚钱,处于风口
- 6.1 嵌入式 通信方向 传统行业不会失业。
- 6.2 嵌入式 普通单片机,苦逼现场哥

排名主要取决于成就感/薪资/发展 但实际上c++工作都很苦逼

对于应届生来说,主要是活下去,不一定强求非得干这个

已经入行的,大多有互相转的趋势,比如做基础架构的平台哥去做AI infra

或者做游戏的受不了了出来干平台

但做嵌入式肯定是苦的,如果你已经苦了,切换岗位代价高,那就去苦且有钱的地方,比如车行业


## 我该用哪个序列化库/哪个序列化库好?

选取库主要是取决于需求,要根据已有的场景做抉择,比如已经沾上grpc的屎, protobuf就躲不开

既然用protubuf,想换grpc也就只能去brpc

目前通用型屎protobuf较多的,甚至有基于protobuf的存储/算子引擎(扣字段)/内存分配器

通用性第二就是thrift

其次是flatbuffer 性能较好

c++如果不涉及跨语言边界,内部可以搞二进制自解析,比如struct_pack cista 还有redpanda/seastar都实现了自己的序列化

这些原理都是magic_ger(boost.pfr)就不展开了

一定还是要围绕需求的。前期开发可以用pb,后面慢慢切接口

## 现在学c++还有前途吗

学c++可以说是自找苦吃,计算机行业基本都需要终身学习

但c++不仅要终身学习,终身学习的途中你还会发现自己知道的越来越少

从沉没成本角度分析,前途不好,投入大于收益

但我觉的爱学的肯定你想换成别的语言也简单。毕竟你连c++都能忍

从已有的存量代码角度分析,c++肯定能活很久,所有语言所有范式,你翻一番就能在c++代码屎山里找到,吃屎饿不死

但受不了的人可能就用别的语言写一坨新的屎了

并且在cpu无明显进化的场景下,比如这几年intel磨洋工,这种场景下c++程序员是比较值钱的

从资方角度考虑,省CPU还是省人力,当人力不值钱,c++就不火

雇佣c++程序员如果能扣出来机器的钱,那就不愁找工作。目前来看还有一段距离

## cpp当前主要能做的业务,以及在某些业务中的竞争对手语言

业务上面说了 主要竞争对手其实是后端语言都竞争

和go 抢普通业务CURD开发,基本被抢光了

和java抢大数据infra开发, java基本抢光。c++活在底层组件里

和rust抢底层infra组件,rust靠一手安全抢了一些业务,这种主要看公司老板推动,不推就是c++的天下

和python抢算法,现在作为python后端活着

## 协程哪个好,无栈协程好还是有栈协程好

其实这个问题也是需求问题,我们讨论协程通常是忽略了调度器分配器的,这里正交一下场景非常多

当前无栈协程不算稳定,可以先有有栈协程,观望先

目前已有的结论是无栈协程IO处理更好,有栈协程计算更稳,但这只是通用结论,具体场景还得自己来测


## 除标准库外,常用的一些三方库(网络,序列化,ui...)总结

这种其实github搜关键字就好了

网络 asio/libuv/libevent/brpc等等

序列化 protobuf/thrift/flatbuffers/ 自定义序列化

ui qt ?不太了解

json github搜星最多的那个,如果不是性能要求,不要用rapid-json,他既不rapid,也不好用,接口难用的一

这个后面慢慢补充吧 标记个TODO

## 有什么主要讲cpp工程而不是语法的书籍

工程只能从项目里找,一般可能就看看cppcon演讲了

或者最近有一本大规模c++程序设计可以看一下。我也下单了,有空写book review

这里也标记一个TODO

## 做算法C++要掌握到什么程度

能看懂基础语法,能把算法翻译成c++就行

我们把c++分成两类语法,业务级别/库级别

你需要掌握的就是业务级别,库级别特性比如enableif之类的你完全可以不看

重点在算法相关,比如浮点数可能有问题,标准库处理了太多异常你算法可以不考虑,可以优化

当然如果你做算法的库,可能还是得懂一点库级别特性

## 模板要学到什么程度

这个和上一个差不多,主要是模版有很多是库级别特性,但开发库的人千里挑一,业务哥用就完了

看你对自己的定位,你是平台哥要开发脚手架给别人用,你就得研究透模版偏特化/萃取之类的手段,给业务哥用


## 设计模式怎么学?我自己是做客户端,UI也好,业务逻辑也好,框架也好,自己写出来的总差点意思。没章法,不好维护

这种就是代码写得少抄的少了,你的场景什么应用也会有?github找到该项目,直接抄他的组织模式


## 指针和数组有什么区别?

这个是经典吵架问题,有啥区别,完全不一样,数组名能退化(decay)成指针,就这一个关联

## array和数组谁性能好/vector和我自己写的动态数组谁快

这种模糊问题不好回答,比较什么接口?比如array的[]和vector::emplace_back比,前者可能存在向量化

自己约束场景做压测最好,问是问不出来的

## c++多个版本,从哪个版本学习更容易开始工作

c++17 编译器是什么版本你就学什么版本,编译器目前默认17

## 为什么库都很难装,很难用。一个库一堆重复的宏

c++ 没有包管理器的问题

如果你是cmake,用cpm, 如果没有选择,可以尝试xmake

## 什么是右值,右值引用变量为什么不是右值/类型和值类别/右值引用 所有权

你要理解纯值类型 pure value,其他名次基本上就是为了延长生命周期做的代价

这个新人可以跳过。这一般不是重点

## 模板递归怎么写/concept怎么写/iterator怎么写

没有需求没法教会你,模版递归很容易栈溢出

concept你可以照着抄std::same_as

iterator可以随便抄一个容器的,重点是tag dispatch

## c++11的移动是个什么东西

移动语义可以写一本书,打个比方value左值是一个盒子,我可以通过move告诉编译器把盒子里的东西搬走

## 各种编译失败/库的链接问题(为什么链接失败

这种只能搜索引擎搜,我也总结了个常见报错整理 https://wanghenshui.github.io/2019/11/01/compile.html

没有好的解决办法


## 有无对标python ply yacc的现代化的语法解析器?

boost::spirit 这个是最经典的也是比较难懂的,foothan他有个lexy

这种需求说实话有点小众

## 单独的一条if或者while语句要不要加花括号/左花括号{要不要换行

格式问题一律clang-format修复,自己的规则自己维护,因为格式吵架过于无聊

## 字符串是否应该可变?

字符串需求非常多,99%都是小的不可变的,因此cow也有存在价值,SSO默认都做

fbstring也有长短串优化, 甚至还有umbrastring这种prefix优化字符串

回到问题,看需求,c++是灵活的,面对不同需求解法多花样多,就是图这个花样我才学c++

0 comments on commit a64cff3

Please sign in to comment.