百度后端C++电话一面

百度后端C++面试经验分享
本文分享了一次百度后端C++岗位的电话面试经历,涉及知识点包括JSON、XML与protobuf的差异,左值与右值的概念,红黑树、TCP与UDP协议的区别,C++中struct与class的不同,函数重载实现,多线程与线程池原理,以及短网址服务的设计思路等。
 
  • Json、XML差异?说全点,能想到的所有差异。然后protobuf不小心被我提出来了,开始扯三个的差异。。。。然后问优缺点、服务端客户端使用及接口更新的影响范围如何缩小
  • 左值,右值区别
  • map用什么?红黑树
    还可以用什么方法实现?(为什么不问我红黑树是什么?已经准备好详细的说。大脑短路答了个,二分搜索。第二个问题就跪了,别人的面经引到什么就谈什么呀。。。)
  • 网络懂么?用的多么?不多,就用过tcp。嗯那就说这个,客户端发送1kb的客户数据,通过tcp与udp发送,两种协议读取时读到的数据有可能是多长?没有深入了解过,感觉都接收1kb
    有没有其他可能?tcp也有可能分包
    假设已经收到了客户数据呢?不知道。。。(当时问了好久也没想出来答案,这是不是考察udp有可能收到其他广播的信息?)
  • struct、class的区别是什么?默认private/public
    还有什么?struct支持C语言解析
    还有什么?不知道
  • 函数重载是怎么实现的?name mangling
    那参考了哪些信息?函数名、参数及类型、参数顺序
    还有什么?没想到还需要什么信息
    那是否考虑返回值类型?不清楚,但我想重载函数使用不会根据返回值而判定,所以我认为可能没考虑
  • 信号槽的原理?这里回答提到了多线程
  • 如果有多线程任务怎么办?理解错了,回答提到了线程池
    线程池怎么实现?XXXXX,说的是回调方式,用bind、function
    除了回调还有什么方法?(没想到)
  • 假如现在有多个任务安排给线程池,分别从吞吐量、响应时间两种方面进行任务安排,分别如何安排?(完全理解错误,答了好几次,都不在点上,现在知道应该是task scheduler)
  • 多线程与多进程的CPU调度差异?没学过
  • hash知道么?怂了,不知道
  • hashmap冲突怎么办?不知道l?? ?list与vector区别
  • LRU算法知道么?没听过
  • map是线程安全的么?不是
    如果多个进程同时访问map,如何保证安全?我说的建立镜像供多线程使用
    问那能保证多个线程的操作顺序不变么?不能
    那如果有大量线程访问都要建立一个映像?是的,没想到其他合适的方法
  • 还问了项目中提到的心跳包、守护进程怎么实现的?如果守护进程崩溃了怎么办?
  • 换了个问题,短网址服务怎么做?通过用redis做存储,做长短网址映射
    然后问了redis突然崩溃怎么办?持久化,两种方式RDB/AOF
    这两种分别怎么实现的?不知道(细节模糊了)
    回到短网址服务,如何做映射?md5
    没这么长的短网址,要缩减为短的,有很多这样的算法,那如果两个网址缩短后一样怎么办?再加一个id做标志位
    那如果有1万个网址一样,怎么办,id从1到1万?不知道

Techie亮博客,转载请注明:Coologic » 百度后端C++电话一面

Coologic 博客域名已更改,已从 www.techieliang.com 改为 www.coologic.cn,上述链接地址受到影响,若需查看源文请手动修改,多有不便,敬请谅解。
### C++后端开发中的应用 C++作为一门高性能编程语言,在后端开发中具有广泛的应用,尤其是在对性能要求极高的场景中。以下是C++后端开发中的主要应用领域[^1]: - **高性能网络服务**:C++常用于开发高性能的网络服务器,例如游戏服务器、金融交易系统和实时通信系统。 - **中间件开发**:C++被广泛应用于中间件的开发,如消息队列、分布式缓存等,这些中间件需要高效的数据处理能力和低延迟特性。 - **嵌入式系统**:由于C++的高效特性和对硬件的直接控制能力,它在嵌入式后端系统中也占据重要地位。 - **开源框架**:许多流行的开源后端框架和库使用C++开发,例如Boost、ZeroMQ、libevent等。 ### C++后端开发资源推荐 对于初学者和中级开发者来说,以下是一些值得参考的学习资源和教程[^2]: #### 在线教程 - **C++ Primer**:这是一本经典的C++入门书籍,适合从零基础开始学习C++的核心概念和语法。 - **Effective C++**:深入讲解C++的最佳实践,帮助开发者写出更高效、更安全的代码。 - **Modern C++ Design**:专注于现代C++的设计模式和新特性,适合希望掌握C++11及更高版本的开发者。 #### 后端框架 - **Boost.Asio**:一个功能强大的异步I/O库,适用于开发高性能网络应用程序[^3]。 - **Poco Libraries**:提供了一组易于使用的C++类库,涵盖了网络、数据库、XML解析等多个方。 - **CppNetlib**:专注于HTTP和TCP/IP协议的C++库,简化了网络编程的复杂性。 #### 项目实战 - **高性能网络设计**:通过实际案例学习如何设计和实现高效的网络服务器[^4]。 - **中间件开发**:了解如何使用C++开发消息队列、分布式缓存等中间件组件。 ```cpp // 示例代码:使用Boost.Asio实现简单的TCP服务器 #include <boost/asio.hpp> #include <iostream> using boost::asio::ip::tcp; int main() { try { boost::asio::io_context io_context; tcp::acceptor acceptor(io_context, tcp::endpoint(tcp::v4(), 8080)); tcp::socket socket(io_context); acceptor.accept(socket); std::cout << "Connection established!" << std::endl; } catch (std::exception& e) { std::cerr << e.what() << std::endl; } return 0; } ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值