[项目] C++高并发Web服务器+个人改进项目

[专栏]嵌入式软件校招笔记(点击跳转)

[知识点] 嵌入式软件开发知识点学习

[知识点] ARM指令集详解

[知识点] 通讯协议(very重要)

[项目] C++高并发Web服务器+个人改进项目详解

[八股] C/C++基础八股

[八股] C/C++进阶八股

[八股] 计算机网络八股

[八股] 操作系统八股

[八股] 嵌入式系统八股

[八股] Linux系统编程八股

[八股] Linux网络编程八股

秋招嵌入式企业面经

秋招项目面试问题进行总结

项目简历介绍:

Webserver项目是用C++实现的高性能WEB服务器,我在双核2G的云服务器ESC上部署(阿里云ESC服务器大学生可以免费申请一个低配的,把本地项目部署在上面很简单的,写到简历上很加分,面试经常被问到这个云服务器)经过webbench压力测试可以实现上万的QPS;

其中功能主要实现了浏览器访问服务器,获取服务器资源的功能。项目总体的框架采用的是单Reactor多线程模型。在主线程里通过IO多路复用监听多个事件主线程只负责监听文件描述符上是否有事件发生,有的话就立即将该事件通知工作线程,将 socket 可读可写事件放入请求队列,交给工作线程处理。对于到达的HTTP报文,采用了有限状态机和正则表达式进行解析,资源的响应则通过集中写和内存映射的方式进行传输。最后加入日志模块实现服务器日常运行情况的记录。

项目内容:

在Linux系统下开发的WEB服务器,使用线程池+IO复用Epoll的方式实现了高并发,经过webbench压力测试可以实现上万的QPS。

主要功能:

1、 利用IO复用技术Epoll与线程池实现多线程的Reactor高并发模型;

2、 使用基于TCP协议的Socket实现客户端和服务端的网络通信;

3、 利用标准库容器封装char,实现自动增长的缓冲区;

4、 利用正则与状态机解析HTTP请求报文,实现处理静态资源的请求;

5、 利用数据库连接池,减少数据库连接建立与关闭的开销,同时实现了用户注册登录功能;

6、 利用单例模式与阻塞队列实现异步的日志系统,记录服务器运行状态;

项目链接:这个我之前是跟着牛客上一个课程学的,现在好像收费了,不过B站还是有很多的,毕竟Webserver烂大街了,虽然但是呢,其实面试官也都清楚,所以简历中的项目最重要的是你自己的想法和改进!!就比如上面项目功能第3点利用标准库容器封装char,实现自动增长的缓冲区;我自己在网上找的帖子改进的,封装了一个内存池,在介绍项目的时候着重介绍自己的改进,面试官大多数对这个感兴趣。

面试常见问题:

一、基本的技术问题:

1、有没有用到线程池? 为什么使用线程池? 线程池如何实现?(非常重要的恶魔三问)

2、线程的设置的数量是多少?你为什么这样设置?多线程中线程越多越好吗?

3、单Reactor多线程epoll模型的工作流程,多线程是怎么分配任务的?

4、线程池里面的有没有死锁的情况呢

5、线程池工作队列的大小是多少?

6、你的线程池工作线程处理完一个任务后的状态是什么?线程池中的工作线程是一直等待吗?

7、如果同时1000个客户端进行访问请求,线程数不多,怎么能及时响应处理每一个呢?

8、如果一个客户请求需要占

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

嵌入式软件校招笔记 文章被收录于专栏

记录本人校招过程中遇到的问题及笔记整理!后续会持续更新

全部评论
码住
1 回复 分享
发布于 2023-10-27 23:01 山东
mark
1 回复 分享
发布于 2023-10-26 16:29 安徽
Mark
点赞 回复 分享
发布于 2025-01-14 12:55 浙江
里面有啥?有项目源码吗
点赞 回复 分享
发布于 2024-11-18 19:01 江苏
只有问题没有答案吗
点赞 回复 分享
发布于 2024-08-14 21:43 安徽
请问订阅后会有项目源码和详细介绍吗
点赞 回复 分享
发布于 2024-08-05 10:41 湖北
我想问一下,为什么要封装内存池呀,项目当中也没有频繁的去调用new和delete呀?单纯的请教下,勿喷!😂
点赞 回复 分享
发布于 2024-07-30 09:28 四川
点赞 回复 分享
发布于 2024-03-25 15:55 陕西
怎么还没有上传呀?
点赞 回复 分享
发布于 2024-02-25 19:23 吉林
都一个多月了, 没了吗
点赞 回复 分享
发布于 2023-12-11 09:51 辽宁
Mark
点赞 回复 分享
发布于 2023-11-12 10:42 江苏
不错🤣
点赞 回复 分享
发布于 2023-10-28 11:33 安徽
😀码住
点赞 回复 分享
发布于 2023-10-28 11:08 安徽

相关推荐

2025-12-24 15:25
已编辑
门头沟学院 前端工程师
是腾讯的csig腾讯云,前天晚上九点突然打电话约面,激动的通宵学了一晚上,第二天状态很差改了今天(以后再也不通宵学习了)感觉自己浪费了面试官一个半小时单纯手写+场景,无八股无项目无算法,打击真的很大,全是在面试官提醒的情况下完成的,自己技术方面真的还是有待提高,实力匹配不上大厂和已经面试的两个公司完全不一样,很注重编码能力和解决问题的能力,然而我这两个方面都很薄弱,面试官人很好很耐心的等我写完题目,遇到瓶颈也会提醒我,写不出题也会很耐心的跟我讲解好感动,到最后面试结束还安慰我打算把下周最后一场面试面完之后就不面啦,如果能去实习还是很开心,但是最重要的还是好好努力提高技术以下是面经第一题// 实现一个解析 url 参数的函数function parseUrl(urlStr) {// TODO}parseUrl('*********************************************');// 返回 {a: 1, b: 2, c: 3}追问:在链接里见过什么部分?用 hash 路由的话放在哪第二题// 考虑有一个异步任务要执行,返回 Promise,这个任务可能会失败,请实现 retry 方法,返回新方法,可以在失败后自动重试指定的次数。/*** 异步任务重试* @param task 要执行的异步任务* @param times 需要重试的次数,默认为 3 次*/function retry(task, times = 3) {// TODO: 请实现}// ---------------测试示例 ----------------// 原方法const request = async (data) => {// 模拟失败if (Math.random() < 0.7) {throw new Error('request failed');}const res = await fetch('https://jsonplaceholder.typicode.com/posts', {method: 'POST',body: JSON.stringify(data),});return res.json();}// 新的方法const requestWithRetry = retry(request);// 使用async function run() {const res = await requestWithRetry({ body: 'content' });console.log(res);}run();第三题就是给 retry 函数添加类型注释,用到泛型第四题:在组件库中将 Alert 用 api 的形式实现(应该就是 message 这个组件)怎么渲染到一个浮层里而不是原地渲染出来
不知道怎么取名字_:技术这个东西,太杂了,而且要下功夫的
查看5道真题和解析
点赞 评论 收藏
分享
评论
7
74
分享

创作者周榜

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