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++工程能力.

全部评论

相关推荐

最喜欢秋天的火龙果很...:第一份工作一定要往大的去,工资低点没事。后面换工作会更好找,即使你去小公司,你也不可能不会换工作的。所以找大的去
点赞 评论 收藏
分享
评论
2
3
分享

创作者周榜

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