前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C++ 中文周刊 常见问题 解答

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

作者头像
王很水
发布于 2024-11-05 04:30:19
发布于 2024-11-05 04:30:19
1100
举报

周刊项目地址 https://github.com/wanghenshui/cppweeklynews

qq群 加这俩 729240657 866408334

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

大部分c++群聊聊天的内容都会包括本帖中讨论的各种争执,反复讨论很无聊,以后有重复的讨论就会把这个链接丢出来

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

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


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就躲不开

既然用protobuf,想换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,公司一般来说会用bazel/blade 后面三个原理类似

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

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

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

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

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

concept你可以照着抄std::same_as

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

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

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

有时间的话可以看一下这篇: C++的右值引用、移动和值类别系统,你所需要的一切 https://zclll.com/index.php/cpp/value_category.html

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

这种只能搜索引擎搜,我也总结了个常见报错整理 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++

struct vs tuple?

永远优先struct,tuple只适合转发,没有名字信息是致命的

如何调试模版错误?

只能复制编译报错拿出来二分,搜代码文件名字,瞪眼法,没有好的办法。如果ICE就放弃吧

ICE/NTTP/....是什么

关于这些缩写名次 https://quuxplusone.github.io/blog/2019/08/02/the-tough-guide-to-cpp-acronyms/

这里有个总结。其实看一遍大概就明白了

有没有c++推荐书单/怎么学c++

书单 Stackoverflow上有个经典书单 https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list

说实话,你不太可能挨个看完,这里列一下

  • • c++ primer 第五版,是举例写代码,书很厚习题很多,我曾就有过,没看完送人了。作者也去世了,永远停在c++11
  • • Programming: Principles and Practice Using C++ 这本是BS老头的书,写的例子非常多,这个值得看。跟着写
  • • A Tour of C++ BS发牢骚,没啥意义不用看
  • • Accelerated C++ 老东西,不用看
  • • Effective C++/More Effective C++/Effective STL 这里面的经典条目,你直接看一下标题看一下代码就行了,搜一下到处都是,属于常识性的东西
  • • Effective Modern C++ 讲c++14的,也没啥新东西,可以看看条目和代码
  • • Exceptional C++/More Exceptional C++/Exceptional C++ Style 异常安全,如果你不知道,你可以跳过
  • • C++ Coding Standards 什么101条经验,和前面的effective重复,看不看都行
  • • C++ Templates: The Complete Guide 库作者可以看,其他人可以跳过
  • • C++ 17/20 - The Complete Guide 不用看。手册
  • • C++ in Action 不用看
  • • Functional Programming in C++ 这个叫c++函数式编程,这个方向就这么一本书,鉴定为看一乐,没用
  • • Modern C++ Design 现代C++程序设计,这本是AA的天书,讲策略模版的,代码已经很老了,不如直接看Folly文档学的快
  • • C++ Template Metaprogramming 纯纯的糟粕,看一眼后悔五天
  • • C++ Concurrency In Action c++并发实战 这本说实话有点入门,看一乐,讲的atomic和线程池之类的玩意,帮你理解语义,但你看了也看不太明白,很晦涩
  • • Advanced C++ Metaprogramming 这本我就看了十几页就看不动了,天书
  • • Large Scale C++ volume I, Process and architecture 大规模c++程序设计,这本书还是挺不错的。推荐一看
  • • C++ Software Design 这本我还没看完,看完发表意见

还有一些老书什么深入理解对象模型stl源码剖析之类的 ,我只能说开卷有益,但没事你别开这几卷

至于怎么学c++,永远是围绕着需求来的,你要先有一个目标,需求,做什么,然后围绕这个目标努力,然后围绕这个目标迭代你的代码

光看不写是不行的,纸上得来终觉浅

这里有一篇详细的介绍,不是我写的,但是很不错,给新人参考 https://zclll.com/index.php/cpp/get_started_cpp.html

编译器之争?哪个编译器好

需求需要用什么编译器就用什么,gcc/clang也可以自由选择使用libcxx还是libstdc++

你也可以全平台都用

举例 clickhouse就选择使用libcxx和llvm compilerrt来作为项目一部份

xx算法/xx设计比标准库stl快,为什么没有进标准库,有没有可能进标准库

introsort不如pdqsort,pdqsort有机会,但目前演进很慢

还有fmtlib的浮点数要比标准库的快

还有令人诟病的regex问题。cxx标准库为了ABI稳定做了太多妥协,当然他们也懒得一笔

能用第三方库就用,c++生态问题一直非常令人诟病,而其他快的库/算法/设计可能由于信息差的问题看不到

关注c++中文周刊,谢谢

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-11-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CPP每周推送 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
能否留一下联系方式,我这边有个日志的输出问题,个人找不到原因在哪里
能否留一下联系方式,我这边有个日志的输出问题,个人找不到原因在哪里
回复回复点赞举报
推荐阅读
Python入门之Python中的logging模块
基本用法 下面的代码展示了logging最基本的用法。 import logging import sys # 获取logger实例,如果参数为空则返回root logger logger = logging.getLogger("AppName") # 指定logger输出格式 formatter = logging.Formatter('%(asctime)s %(levelname)-8s: %(message)s') # 文件日志 file_handler = logging.FileH
Jetpropelledsnake21
2018/05/03
7110
python的logging模块详解
从以上可以看出logging模块输出日志默认共有6个级别,级别大小依次是CRITICAL>ERROR> WARN> INFO> DEBUG> NOTSET
py3study
2020/01/09
7950
Python基础15-日志模块logging
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/09/26
3700
Python基础15-日志模块logging
Python常用库 - logging日志库
logging 使用非常简单,使用 basicConfig() 方法就能满足基本的使用需要;如果方法没有传入参数,会根据默认的配置创建Logger 对象,默认的日志级别被设置为 WARNING,该函数可选的参数如下表所示。
小菠萝测试笔记
2020/06/09
8920
【测试开发】python系列教程:logging日志模块
在我们正常的开发中,总能想要打印一些信息,或者打印日志,我们都是用的print,但是在小规模的程序开发中是可以来用的,也便于调试,但是对于大点的项目,我们想要保存执行过程中的日志,用print来打印来说就不能满足了。我们用loggin模块可以来记录,以排查程序在某一个时候崩溃的具体原因,以便及时定位Bug进行抢救。
雷子
2023/08/21
2500
【测试开发】python系列教程:logging日志模块
Python日志模块logging
logger只输出高于或等于当前级别的日志, logging的root logger默认级别为info.
菲宇
2022/12/21
3590
Python日志模块logging
Python - 日志处理(logging模块)
LOG http://www.cnblogs.com/yyds/p/6901864.html logging logging 模块提供模块级别的函数记录日志 包括四大组件 1. 日志相关概念 日志 日志的级别(level) 不同的用户关注不同的程序信息 DEBUG INFO NOTICE WARNING ERROR CRITICAL ALERT EMERGENCY IO 操作=>不要太频繁 LOG的作用 调试 了解软件的运行情况 分析定位问题 日志信息 time 地点 level 内容 成熟的第三方
ruochen
2021/05/11
9610
Python - 日志处理(logging模块)
Python 日志模块logging
logging日志文件写入默认是gbk编码格式的,所以在查看时需要使用gbk的解码方式打开。
py3study
2020/01/17
6570
python模块--logging
logging模块                                                                                                                           
py3study
2020/01/09
3800
Python中内置的日志模块logging用法详解
Python的logging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用。这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比如文件,HTTP GET/POST,SMTP,Socket等,甚至可以自己实现具体的日志记录方式。logging模块与log4j的机制是一样的,只是具体的实现细节不同。模块提供logger,handler,filter,formatter。
狼啸风云
2020/02/21
16.6K1
Python中内置的日志模块logging用法详解
Python 学习入门(14)—— logging
Python的logging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用。这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比如文件,HTTP GET/POST,SMTP,Socket等,甚至可以自己实现具体的日志记录方式。
阳光岛主
2019/02/19
5960
Python 学习入门(14)—— logging
Python日志管理
一个长时间运行的项目,不管是从可维护性还是其他角度来说,日志管理都是必不可少的(我相信还有不少同学是直接输出日志到控制台的吧),将日志输出到日志文件中,不仅方便我们查看程序运行时的情况,也可以让我们在项目出现故障时根据运行时产生的日志快速定位问题出现的位置
Kevinello
2022/08/19
6070
Python日志管理
【1】如何优雅的记录日志? logging
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
云雀叫了一整天
2019/09/29
9840
python 日志模块 logging 详解
Java 中最通用的日志模块莫过于 Log4j 了,在 python 中,也自带了 logging 模块,该模块的用法其实和 Log4j 类似。 Python 使用logging模块记录日志涉及四个主要类,使用官方文档中的概括最为合适: logger提供了应用程序可以直接使用的接口; handler将(logger创建的)日志记录发送到合适的目的输出; filter提供了细度设备来决定输出哪条日志记录; formatter决定日志记录的最终输出格式。 logging模块是在2.3新引进的功能,下面是一些常用
用户1177713
2018/02/24
2.2K0
python 日志模块 logging 详解
Python日志模块logging的使用
为什么只输出了 warning, error 和 critical 的结果,因为 logging 模块默认使用 warning 日志级别,就是只有 warning 及以上日志等级才会显示。
忆想不到的晖
2021/12/06
1.1K0
Python日志模块logging的使用
Python logging模块
logging模块是Python的一个标准库模块,开发过程中,可以通过该模块,灵活的完成日志的记录。
py3study
2020/01/09
4460
python 日志打印之logging使用介绍
logging.debug('this is a debug level message')
授客
2019/09/11
1.5K0
logging模块
logging模块 函数式简单配置 import logging logging.debug('debug message') logging.info('info message') logging.warning('warning message') logging.error('error message') logging.critical('critical message') 默认情况下Python的logging模块将日志打印到了标准输出中,且只显示了大于等于WARNIN
用户1214487
2018/01/23
7040
Python模块知识5:日志logging
logging模块提供了通用的日志系统,可以采用不同的方式记录日志,比如文件,HTTP、GET/POST,SMTP,Socket等,甚至可以自己实现具体的日志记录方式; 日志分不同提醒级别,级别顺序为:CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET,可以自己定义日志级别。 级别越高打印的日志等级越少,反之亦然。 debug: 打印全部的日志(notset等同于debug) info:打印info、warning、error、critical级别的日志 w
企鹅号小编
2018/01/11
8120
Python模块知识5:日志logging
logging模块 旗舰版
默认情况下Python的logging模块将日志打印到了标准输出中,且只显示了大于等于WARNING级别的日志,这说明默认的日志级别设置为WARNING(日志级别等级CRITICAL > ERROR > WARNING > INFO > DEBUG),默认的日志格式为日志级别:Logger名称:用户输出消息。
changxin7
2019/08/14
7260
相关推荐
Python入门之Python中的logging模块
更多 >
LV.0
公众号:机器学习与推荐算法
目录
  • c++就业前景/什么时候能找到好工作/当前c++能做的业务场景
  • 我该用哪个序列化库/哪个序列化库好?
  • 现在学c++还有前途吗
  • cpp当前主要能做的业务,以及在某些业务中的竞争对手语言
  • 协程哪个好,无栈协程好还是有栈协程好
  • 除标准库外,常用的一些三方库(网络,序列化,ui...)总结
  • 有什么主要讲cpp工程而不是语法的书籍
  • 做算法C++要掌握到什么程度
  • 模板要学到什么程度
  • 设计模式怎么学?我自己是做客户端,UI也好,业务逻辑也好,框架也好,自己写出来的总差点意思。没章法,不好维护
  • 指针和数组有什么区别?
  • array和数组谁性能好/vector和我自己写的动态数组谁快
  • c++多个版本,从哪个版本学习更容易开始工作
  • 为什么库都很难装,很难用。一个库一堆重复的宏
  • 什么是右值,右值引用变量为什么不是右值/类型和值类别/右值引用 所有权
  • 模板递归怎么写/concept怎么写/iterator怎么写
  • c++11的移动是个什么东西
  • 各种编译失败/库的链接问题(为什么链接失败
  • 有无对标python ply yacc的现代化的语法解析器?
  • 单独的一条if或者while语句要不要加花括号/左花括号{要不要换行
  • 字符串是否应该可变?
  • struct vs tuple?
  • 如何调试模版错误?
  • ICE/NTTP/....是什么
  • 有没有c++推荐书单/怎么学c++
  • 编译器之争?哪个编译器好
  • xx算法/xx设计比标准库stl快,为什么没有进标准库,有没有可能进标准库
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档