[项目] 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
点赞 回复 分享
发布于 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 安徽

相关推荐

少年郎as:这不把公司名贴出来那我可要喷你了哦
点赞 评论 收藏
分享
头像
10-13 18:10
已编辑
东南大学 C++
。收拾收拾心情下一家吧————————————————10.12更新上面不知道怎么的,每次在手机上编辑都会只有最后一行才会显示。原本不想写凉经的,太伤感情了,但过了一天想了想,凉经的拿起来好好整理,就像象棋一样,你进步最快的时候不是你赢棋的时候,而是在输棋的时候。那废话不多说,就做个复盘吧。一面:1,经典自我介绍2,项目盘问,没啥好说的,感觉问的不是很多3,八股问的比较奇怪,他会深挖性地问一些,比如,我知道MMU,那你知不知道QMMU(记得是这个,总之就是MMU前面加一个字母)4,知不知道slab内存分配器->这个我清楚5,知不知道排序算法,排序算法一般怎么用6,写一道力扣的,最长回文子串反问:1,工作内容2,工作强度3,关于友商的问题->后面这个问题问HR去了,和中兴有关,数通这个行业和友商相关的不要提,这个行业和别的行业不同,别的行业干同一行的都是竞争关系,数通这个行业的不同企业的关系比较微妙。特别细节的问题我确实不知道,但一面没挂我。接下来是我被挂的二面,先说说我挂在哪里,技术性问题我应该没啥问题,主要是一些解决问题思路上的回答,一方面是这方面我准备的不多,另一方面是这个面试写的是“专业面试二面”,但是感觉问的问题都是一些主管面/综合面才会问的问题,就是不问技术问方法论。我以前形成的思维定式就是专业面会就是会,不会就直说不会,但事实上如果问到方法论性质的问题的话得扯一下皮,不能按照上面这个模式。刚到位置上就看到面试官叹了一口气,有一些不详的预感。我是下午1点45左右面的。1,经典自我介绍2,你是怎么完成这个项目的,分成几个步骤。我大致说了一下。你有没有觉得你的步骤里面缺了一些什么,(这里已经在引导我往他想的那个方向走了),比如你一个人的能力永远是不够的,,,我们平时会有一些组内的会议来沟通我们的所思所想。。。。3,你在项目中遇到的最困难的地方在什么方面4,说一下你知道的TCP/IP协议网络模型中的网络层有关的协议......5,接着4问,你觉得现在的socket有什么样的缺点,有什么样的优化方向?6,中间手撕了一道很简单的快慢指针的问题。大概是在链表的倒数第N个位置插入一个节点。————————————————————————————————————10.13晚更新补充一下一面说的一些奇怪的概念:1,提到了RPC2,提到了fu(第四声)拷贝,我当时说我只知道零拷贝,知道mmap,然后他说mmap是其中的一种方式,然后他问我知不知道DPDK,我说不知道,他说这个是一个高性能的拷贝方式3,MMU这个前面加了一个什么字母我这里没记,别问我了4,后面还提到了LTU,VFIO,孩子真的不会。
走呀走:华子二面可能会有场景题的,是有些开放性的问题了
点赞 评论 收藏
分享
评论
7
73
分享

创作者周榜

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