Momenta C++ ⼀⾯凉经

进程内存飙升时你会用什么命令排查?

先找高内存进程,再看内存构成,最后判断是否泄漏或缓存失控。

常用命令:

  • ps aux --sort=-%mem | head
  • top -p <pid> / htop
  • pmap -x <pid>
  • cat /proc/<pid>/status(看 VmRSS、VmSize)
  • 测试环境可用:valgrind --leak-check=full ./app

你怎么查看 CPU 状态?

从系统、核、进程三层判断是否 CPU 瓶颈或 IO wait 偏高。

常用命令:

  • uptime / top
  • mpstat -P ALL 1
  • pidstat -u 1
  • vmstat 1

云服务器内存不足你会怎么处理?

思路:先止血,再定位,再治理。

  • 止血:扩容、临时开 swap、限流降级
  • 定位:内存泄漏、缓存策略不当、流量突增
  • 治理:优化数据结构与回收策略,完善监控告警

你项目里用过哪些 C++ 版本特性?

按“场景 + 收益”回答更好:

  • auto、范围 for、nullptr、enum class
  • unique_ptr/shared_ptr 做资源管理
  • thread/mutex/condition_variable 做并发控制
  • 移动语义 + emplace_back 做性能优化
  • chrono 做耗时统计

你平时怎么用 gdb?

典型流程:

  1. gdb ./app 或 gdb ./app core
  2. b <file:line|func>
  3. run
  4. n/s 单步
  5. p、info locals 看变量
  6. bt 看调用栈
  7. thread apply all bt 看全部线程栈

gdb 怎么查看调用栈?

  • bt:当前线程调用栈
  • thread apply all bt:所有线程调用栈
  • frame <n>:切换栈帧查看上下文

你平时怎么编译项目?

单文件可直接 g++,项目建议 Makefile/CMake。

g++ -std=c++17 -O2 -g main.cpp -I./include -L./lib -lfoo -o app

说一下 Makefile 怎么写

核心是变量清晰、规则完整、支持增量编译。

CXX := g++
CXXFLAGS := -std=c++17 -O2 -g -Wall -Wextra
INCLUDES := -I./include
LDFLAGS := -L./lib
LDLIBS := -lfoo -lpthread

SRCS := main.cpp foo.cpp
OBJS := $(SRCS:.cpp=.o)
TARGET := app

all: $(TARGET)

$(TARGET): $(OBJS)
	$(CXX) $(OBJS) -o $@ $(LDFLAGS) $(LDLIBS)

%.o: %.cpp
	$(CXX) $(CXXFLAGS) $(INCLUDES) -c $< -o $@

clean:
	rm -f $(OBJS) $(TARGET)

.PHONY: all clean

-g -I -L` 分别干什么?

  • -g:生成调试符号
  • -I:头文件搜索路径
  • -L:库文件搜索路径

给一段代码让你找问题,你怎么分析?

固定套路:

  • 编译期:类型/声明问题
  • 运行期:越界、空指针、悬空引用
  • 逻辑层:边界条件遗漏

基本上指出哪一行错、为什么、怎么改。

题目代码

#include <iostream>
#include <vector>
#include <string>
#include <unordered_map>
#include <thread>
#include <mutex>
using namespace std;

class UserCache {
public:
    const string& getName(int uid) {
        lock_guard<mutex> lk(mu_);
        if (nameById_.count(uid) == 0) {
            string tmp = "user_" + to_string(uid);
            nameById_[uid] = tmp;
        }
        return nameById_[uid];
    }

    void eraseIfOdd(int uid) {
        if (uid % 2 == 1) {
            lock_guard<mutex> lk(mu_);
            nameById_.erase(uid);
        }
    }

private:
    unordered_map<int, string> nameById_;
    mutex mu_;
};

int parseScore(const string& s) {
    int sign = 1;
    size_t i = 0;
    if (s[0] == '-') {
        sign = -1;
        i = 1;
    }
    int v = 0;
    for (; i <= s.size(); ++i) {
        if (s[i] < '0' || s[i] > '9') break;
        v = v * 10 + (s[i] - '0');
    }
    return sign * v;
}

int sumTopK(vector<int>& a, size_t k) {
    int sum = 0;
    for

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

C++ 常考面试题总结 文章被收录于专栏

本专栏系统梳理C++方向, 大中厂高频高频面试考点 , 内容皆来自真实面试经历,从基础语法、内存管理、STL与设计模式,到操作系统与项目实战,结合真实面试题深度解析,帮助开发者高效查漏补缺,提升技术理解与面试通过率,打造扎实的C++工程能力.

全部评论
我是看到c++就觉得头疼,实在是学不会
点赞 回复 分享
发布于 03-02 18:49 陕西

相关推荐

前些天看了&nbsp;Clawdbot&nbsp;创始人的采访——这哥们单日提交&nbsp;1.3k&nbsp;commits,一个月&nbsp;6600+&nbsp;次提交,有的代码自己一句都没看过,非常恐怖。所以在不久的将来,当&nbsp;AI&nbsp;已经完全具备写代码的能力,人类程序员的操作空间还能剩多少?最近在实习,做大模型微调,新鲜期过了,发现不过是机械劳动,造数据&nbsp;→&nbsp;训模型&nbsp;→&nbsp;看&nbsp;badcase&nbsp;→&nbsp;然后再造数据,循环往复...这不就是Agent的ReAct范式么?&nbsp;(坏了,我成智能体了)&nbsp;需求明确的情况下,Claude-3.5/3.6&nbsp;也完全可以独立完成造数据&nbsp;pipeline&nbsp;的开发,偶尔会留下一些语法错误,在两三轮尝试之内也能自己修正过来......这里非要人来完成的环节并不多,只能用人来完成的理由,好像只剩人比较便宜了...?&nbsp;但&nbsp;AI&nbsp;infra、推理加速也在飞速发展,这种相对的便宜,又能持续多久呢?Clawdbot已经火到到处都在讨论,尽管目前在国内的适配有限,(门槛高是一方面,还很重要的一点是比较烧钱...)不过它对人类劳动力的节省是没办法忽视的。目前同事们普遍认为这玩意儿现在只能接入飞书写写文档,但你也知道,“目前”而已。GPT-4&nbsp;推出的那年或许看上去还有点呆,但短短几年,拥有&nbsp;skills&nbsp;和&nbsp;function&nbsp;call&nbsp;的大模型已经可以帮你完成打开应用、查看消息、撰写文档这种复合任务——写代码又能比写飞书文档复杂多少呢?不过是接入不同的软件,阅读不同的文本,调用不同的修改命令,底层是一样的,现在&nbsp;Copilot&nbsp;已经做得有模有样,更别说&nbsp;Clawdbot&nbsp;这种具有自我进化能力的&nbsp;Agent,只要&nbsp;token&nbsp;多,Clawdbot&nbsp;完全可以给自己装一堆功能,能量超乎你想象。有人说了,我做的项目大着呢,全是屎山代码,我不信&nbsp;AI&nbsp;能看完,这说的其实是长上下文问题,我个人不认为是一个无法解决的问题,随着上下文窗口的扩展和长期记忆管理的研究工作不断发展,AI&nbsp;总能找到方法把你的超长文本压缩成一个一个的小块,然后逐个击破(虽然目前&nbsp;GPT-5.2&nbsp;Codex&nbsp;改我的代码还是会改着改着一片红...)有句话说得好,你怕被&nbsp;AI&nbsp;替代,是因为你太像&nbsp;AI。你的工作流程高度标准化、可预测、可复现——接需求、看文档、查&nbsp;API、写代码、测试、提交。每一步都有明确的输入输出,每一步都能被拆解成清晰的指令。这种工作方式,恰好是&nbsp;AI&nbsp;最擅长的。如果你的价值体现在“把业务逻辑翻译成代码”,那&nbsp;AI&nbsp;确实可以做得更快、更稳定、更便宜。它不会写错大小写,不会忘记边界条件,不会因为昨晚没睡好就漏掉一个判断。要想不被替代,就得做那些&nbsp;AI&nbsp;做不了的事,比如和产品经理撕逼,解释为什么这个需求做不了;看着三个技术方案,权衡性能、成本、开发周期,最后拍板选一个;跨部门开会,听运营讲了半天业务痛点,翻译成技术语言,还得判断她说的是真需求还是伪需求。这些事情需要判断、需要博弈、需要对人的理解,&nbsp;AI&nbsp;暂时还做不来。但问题是,这些事情需要多少人来干?以前一个项目可能需要十个程序员,现在有了&nbsp;AI,也许三个人就够了,剩下那七个人上哪去?......也许他们会转型,在行业找到新位置,也许是去卖炒粉了,说不好。但有一点感觉很明显:AI&nbsp;在拉高门槛。以前你会写代码就能找到工作,现在得会“用&nbsp;AI&nbsp;写代码&nbsp;+&nbsp;理解业务&nbsp;+&nbsp;做技术决策”。这个组合技能,不是每个人都能凑齐的。工具会进化,但人怎么不被工具定义,可能是我们未来一段时间需要长期思考的问题。
李橙子:有句话说得好,你怕被 AI 替代,是因为你太像 AI。这句话说的很对
AI求职实录
点赞 评论 收藏
分享
评论
2
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务