你好呀,亲爱的陌生人,本文分为三部分,
- 第一部分为个人简介,简单的介绍个人的风雨编程路
- 第二部分为项目简介,介绍简历中的项目
- 第三部分为其他做过的项目介绍,可以略过
一、个人简介
某双非本科计科程序猿一枚,目前正积极寻求C++服务端暑期实习中,以下为个人学习的风雨编程路简略介绍,帮助您快速了解本人是否匹配岗位,hr大大给个机会呗!
相对单纯的C++学习路线者来说,我有过Java体系生态的了解优势;
相对培训班的Java学习路线者来说,我有更厚实的C++造轮子的基础;
相对来说,我有前端体系的学习经历,有脚本语言Python的学习经历,更易在工作中快速上手以及交流沟通;
所有曾经走过的路都造就了如今的我,而未来我希望能够去到一个值得信赖的公司中实习,深入企业级开发,并以该公司的技术栈为未来的发展方向,不断前进!
【期待业务方向:C++服务端开发(含游戏服务端开发)或C++音视频开发,C++转Go/Java后端等,不局限于语言,接受转其他】
大一上,入科班学习各类电脑办公工具的使用以及C语言,使用C语言开发完成了贪吃蛇游戏、学生管理系统、点餐系统等;
大一下,自学前端学习了HTML、CSS、JS、微信小程序、Vue完成了数个前端demo页面的搭建,了解了前端开发;
大二上,加入校计算机协会使用Python的框架Django完成了协会官网部分模块功能的后端接口开发,并迭代了两个版本;
后来竞选协会研发部部长成功,学习C++以及STL参加算法竞赛和数学建模竞赛获得若干奖项,并参与协会ACM模拟竞赛贡献题目;
大二下至大三上,开始自学Java后端从JavaSE->JavaWeb->SSM到分布式一路升级打怪,完成了基于element+SpringBoot的前后端分离项目,以及B站某培训机构的企业级电商平台项目;
同时意识到基础不牢的问题,开始反思以及补缺,开始于是自学湖科大教书匠的计算机网络、MOOC陈越姥姥的数据结构与算法、王道的操作系统、南京大学的操作系统实验等CS课程;
大三下,学习侯捷的C++课程,Liunx网络编程等服务端实践企业开发项目知识,完成了基于Liunx的轻量级多线程服务器,具体项目介绍见下一部分;
二、项目介绍
Linux下C++轻量级Web服务器项目简介:
- 使用线程池 + 非阻塞socket + epoll(ET) + 事件处理(模拟Proactor实现) 的并发模型
- 使用状态机解析HTTP请求报文,支持解析GET和POST请求
- 访问服务器数据库实现web端用户注册、登录功能,可以请求服务器图片和视频文件
- 实现异步日志系统,记录服务器运行状态
- 经Webbench压力测试可以实现上万的并发连接数据交换
- 修改开源个人主页项目加入本项目部署云端运行
本地压力测试:
Webbench是有名的网站压力测试工具,它是由Lionbridge公司开发。
- 测试处在相同硬件上,不同服务的性能以及不同硬件上同一个服务的运行状况。
- 展示服务器的两项内容:每秒钟响应请求数和每秒钟传输数据量。
测试结果:
使用Webbench对服务器进行压力测试,经压力测试可以实现上万的并发连接.
- 并发连接总数:10000
- 访问服务器时间:5s
- 每秒钟响应请求数:525348 pages/min
- 每秒钟传输数据量:1013881 bytes/sec
- 所有访问均成功
1、校验 & 数据库连接池
数据库连接池
- 单例模式,保证唯一
- list实现连接池
- 连接池为静态大小
- 互斥锁实现线程安全
校验
- HTTP请求采用POST方式
- 登录用户名和密码校验
- 用户注册及多线程注册安全
2、http连接处理类
根据状态转移,通过主从状态机封装了http连接类。其中,主状态机在内部调用从状态机,从状态机将处理状态和数据传给主状态机
- 客户端发出http连接请求
- 从状态机读取数据,更新自身状态和接收数据,传给主状态机
- 主状态机根据从状态机状态,更新自身状态,决定响应请求还是继续读取
3、线程同步机制包装类
多线程同步,确保任一时刻只能有一个线程能进入关键代码段.
- 信号量
- 互斥锁
- 条件变量
4、定时器处理非活动连接
由于非活跃连接占用了连接资源,严重影响服务器的性能,通过实现一个服务器定时器,处理这种非活跃连接,释放连接资源。利用alarm函数周期性地触发SIGALRM信号,该信号的信号处理函数利用管道通知主循环执行定时器链表上的定时任务.
- 统一事件源
- 基于升序链表的定时器
- 处理非活动连接
5、同步/异步日志系统
同步/异步日志系统主要涉及了两个模块,一个是日志模块,一个是阻塞队列模块,其中加入阻塞队列模块主要是解决异步写入日志做准备.
- 自定义阻塞队列
- 单例模式创建日志
- 异步日志
- 实现按天、超行分类
6、界面跳转
对html中action行为设置标志位,将method设置为POST
- 0 注册
- 1 登录
- 2 登录检测
- 3 注册检测
- 5 请求图片
- 6 请求视频
- 7 主页
7、半同步/半反应堆线程池
使用一个工作队列完全解除了主线程和工作线程的耦合关系:主线程往工作队列中插入任务,工作线程通过竞争来取得任务并执行它。
- 同步I/O模拟proactor模式
- 半同步/半反应堆
- 线程池
三、其他项目
1、美容预约小程序
项目描述:
使用Uniapp+SpringBoot的前后端分离项目,可以一键多端部署包括但不限于微信小程序、支付宝小程序、百度小程序、抖音小程序等
项目演示:
2、电子钢琴项目
项目描述:
基于Linux开发的可以在屏幕上点击类似钢琴的项目
项目演示:
https://www.cnblogs.com/bingeblog/p/17196701.html
3、智能家居项目
项目描述:基于Linux开发的实现视频实时监控,抓拍,以及回显
4、动感相册与音频项目
项目描述:基于Liunx开发的自由播放的相册功能和音乐播放项目
项目演示:待填坑
5、火影音乐项目
项目描述:使用QT开发的本地音乐播放器
项目演示:待填坑
6、ff商城项目
项目描述:使用Vue、axios、Springboot、RESTful、mybatis、tkmapper、Swagger等技术开发的电商平台项目
项目演示:待填坑
7、不断更新中...
参考来源:
web服务器项目:https://github.com/qinguoyi
标签:项目,个人简介,C++,状态机,线程,介绍,服务器,连接 From: https://www.cnblogs.com/bingeblog/p/17252897.html个人主页项目: https://github.com/dmego