面朝大海 ,春暖花开!
- about me
- Review
- Life
about me
现在我是一名24级计算机类的大一学生。从23年高考毕业正式接触编程,当时十分想要报名计算机专业,但是阴差阳错成为了山东大学威海校区电子信息类的学生。这种错过梦想的感受让我沮丧的一段时间。这世界上总有突如其来的失去,洒了的牛奶,.遗失的钱包,走散的爱人,断掉的友情等等,当你做什么都于事无补的时候,唯一能做的,就是让自己过得好一点。丢都丢了,就别再哭了。”
于是我们立志要进行转专业,转入计算机专业。同时暑假我开始了C语言的学习,正式踏入到了程序世界,开始以一种全新的视角开始审视这个世界。也正式成为一名创作者,在CSDN平台开始了创作道路!
在大一上学期,我得知我们努力将绩点保持在前10%,我以为大一下年度的转专业一定会顺利通过,但命运总会和我开一个玩笑:我与转专业线差之毫厘,仅仅0.7%的绩点排名差距。
至此,我以为我与科班生就没有关系了,开始全力学习计算机四大件,学校课程基本都是水过去的。没有想到的是,在大二上的转专业中,我意外的获得了转专业名额,正式的成为了24级计算机科班生。
这一路,真可谓是 生活难免曲折,但要相信你的运气!
Review
在2024年中,我创作了160篇文章,累积博客阅读量32万,平均2.2天就可以创作一篇文章。回过头来看,针对真的很难想象我创作的频率如此之高,真的要感激2024努力的自己!
在2024博客之星评选中入围了TOP300名单,这是对每一位用心创作的创作者的最大的嘉奖!
在这一年中我学习了数据结构,计算机网络,Linux系统编程 ,网络编程。对于学习的每一个知识点都会进行总结,写出博客进行发布,坚持了一年,让我写作能力大大提升,敲键盘的硬素质也得到了质的提升!!!
在学校中,虽然没有全力学习课程,但幸运的获得了山东大学特长奖学金,这无疑是对我硕大的激励!
2024年,我也初步开始接触算法竞赛。年初先从简单的蓝桥杯开始,蓝桥杯省赛获得了二等奖,这时的我还只会使用暴力解法,基本一点算法思维都没有。半年后参加了WCPC威海市程序设计大赛,这是第一次参与ACM赛制的比赛,团队合作进行解题,但遗憾的是我们并没有获得奖项,算法的路依旧漫长!目前累积刷题270道:
24年我完成了两个项目:
- 高并发内存池项目:纯C++项目,十分巧妙的三层结构,实现对内存申请的快速高效处理
- 仿muduo库的高并发服务器:一个仿muduo库One Thread One Loop式主从Reactor模型实现⾼并发服务器项目。实现网络服务器通信!
高并发服务器项目的实现中,我由衷的感到c++功力的强大,通过层层套接封装,可以实现一个如此复杂却又简明的服务器框架,下面是我24年最感到佩服的代码!
// 最终模块 --- TcpServer
class TcpServer
{
private:
uint64_t _conn_id; // 自增长的连接ID;
int _port; // 绑定的端口号
EventLoop _baseloop; // 主Reactor模型
Acceptor _acceptor; // 监听套接字
LoopThreadPool _pool; // 从属线程池
std::unordered_map<uint64_t, PtrConn> _conns; // 管理连接的哈希表
int _timeout; // 超时时间
bool _enable_active_release; // 是否开启超时销毁 默认是false
// 4种 回调函数 --- 注意使用智能指针 防止在执行任务之前Connection销毁
using ConnectedCallBack = std::function<void(const PtrConn &)>; // 连接时进行的回调函数
using MessageCallBack = std::function<void(const PtrConn &, Buffer *)>; // 处理数据时的回调函数
using ClosedCallBack = std::function<void(const PtrConn &)>; // 关闭连接时的回调函数
using AnyEventCallBack = std::function<void(const PtrConn &)>; // 处理任意事件时的回调函数
ConnectedCallBack _conn_cb; // 连接回调函数类型
MessageCallBack _message_cb; // 处理时回调函数
ClosedCallBack _closed_cb; // 关闭阶段的回调
AnyEventCallBack _event_cb; // 任意事件触发的回调
private:
void RunAfterInLoop(int sec, const Functor &func)
{
_conn_id++;
_baseloop.TimerAdd(_conn_id, sec, func);
}
// 对新连接的处理
void NewConnction(int newfd)
{
// 创建新的fd的channel
_conn_id++;
PtrConn conn(new Connection(_pool.NextLoop(), _conn_id, newfd));
LOG(DEBUG, "新Connection建立 fd :%d\n", conn->Fd());
// 设置回调函数
conn->SetMessageCB(_message_cb);
conn->SetClosedCB(_closed_cb);
conn->SetConnectCB(_conn_cb);
conn->SetAnyEventCB(_event_cb);
conn->SetSvrClosedCB(std::bind(&TcpServer::RemoveConnection, this, std::placeholders::_1));
conn->EnableInactiveRelease(_timeout); // 启动非活跃销毁功能
conn->Established(); // 进行就绪初始化!
// LOG(DEBUG, "Connection初始化就绪\n");
// 非活跃连接的超时释放操作
_conns.insert(std::make_pair(_conn_id, conn));
}
void RemoveConnectionInLoop(const PtrConn &conn)
{
uint64_t id = conn->Id();
auto it = _conns.find(id);
if (it != _conns.end())
{
_conns.erase(id);
}
}
void RemoveConnection(const PtrConn &conn)
{
_baseloop.RunInLoop(std::bind(&TcpServer::RemoveConnectionInLoop, this, conn));
}
public:
TcpServer(int port) : _conn_id(0),
_port(port),
_baseloop(),
_acceptor(&_baseloop, _port),
_pool(&_baseloop),
_timeout(0),
_enable_active_release(false)
{
_acceptor.SetAcceptCallBack(std::bind(&TcpServer::NewConnction, this, std::placeholders::_1));
}
// 设置回调函数
void SetConnectCB(const ConnectedCallBack &cb) { _conn_cb = cb; }
void SetMessageCB(const MessageCallBack &cb) { _message_cb = cb; }
void SetClosedCB(const ClosedCallBack &cb) { _closed_cb = cb; }
void SetAnyEventCB(const AnyEventCallBack &cb) { _event_cb = cb; }
// 开启超时销毁
void EnableActiveRelease(int timeout)
{
_timeout = timeout;
_enable_active_release = true;
}
// 添加定时任务
void RunAfter(int sec, const Functor &func)
{
_baseloop.RunInLoop(std::bind(&TcpServer::RunAfterInLoop, this, sec, func));
}
// 设置线程池数量
void SetThreadSize(int size) { return _pool.SetLoopThreadSize(size); }
// 服务器开始运行
void Start()
{
// LOG(DEBUG, "Start()\n");
_acceptor.Listen();
_pool.Create();
_baseloop.Start();
}
};
void Channel::Remove() { return _loop->RemoveEvent(this); }
// 更新Channel的事件监控
void Channel::Update() { return _loop->UpdateEvent(this); }
void TimeWheel::TimerAdd(uint64_t id, int delay, Task_t cb)
{
_loop->RunInLoop(std::bind(&TimeWheel::TimerAddInloop, this, id, delay, cb));
}
void TimeWheel::TimerRefresh(uint64_t id)
{
_loop->RunInLoop(std::bind(&TimeWheel::TimerRefreshInloop, this, id));
}
void TimeWheel::TimerCancel(uint64_t id)
{
_loop->RunInLoop(std::bind(&TimeWheel::TimerCancelInLoop, this, id));
}
目前正在完成第三个项目:仿RabbitMQ实现消息队列。
这三个项目是我25年暑期争取实习机会的重要保证!
Life
创作之余,游戏与运动是我习惯的放松方式。
与舍友一起开黑的时光真的治愈身心,每天学习完回到宿舍就是一句:瓦!目前是一名黄金玩家,还需努力哈哈!下面是我最喜欢的角色 cypher
为班级征战的篮球赛真的振奋人心,运动总会让我忘记烦恼,沉浸在汗水与呐喊中,一点一点的感受身体的脉动!
这学期也开始了健身,卧推极限达到了65KG,到达了自重。这也让我十分开心哈哈哈,健壮的身体真的让我开心哈哈哈
2024年我前往杭州千岛湖,与友人共度欢乐时光;漫步九寨沟,与兄弟们深度体验自然奇观;抵达北京,亲历庄严的升旗仪式!
对于未来,我感觉依然充满不确定性,但没关系的,大家都会做错选择,会莫名其妙掉眼泪,走在路上会突然崩溃,但这并不影响我们去看看晚霞,再次爱上这个世界。我相信没有一颗星,会因为追求梦想而受伤,当我真心渴望某样东西时,整个宇宙都会来帮忙。
大厂offer,请你一定等着我!!!
大厂offer,请你一定等着我!!!
大厂offer,请你一定等着我!!!