【纪念365天】我的创作纪念日

过去的一年

        没有注意加入csdn已经有一年了。 这几天翻看小猴儿的通知才发现时间来到了一年的纪念日。稍稍思索想要将这一段时间的学习到的知识以及偶然遇到的机遇做一下总结。

        上一次写纪念日是来到csdn128天的时候, 200天前我的学习状态是非常疯狂的。 只记得我当时两个月的时间就跟着网课学完了数据结构和c++。学习c++和数据结构是很有意思的, 跟着网课学习完一节课, 我就将对应的代码敲出来, h文件一个接着一个的开,反复的敲, 基本上每一种数据结构我都能敲三四遍。 还记得当时我有一个c++源文件里面有一万多行代码, 后来被我不小心删掉了, 我只在gitee上面找回了四五千行, 这让我心痛了好一阵。 
        c++和数据结构是有意思的, 但是linux是没意思的。 c++学习完之后, 我学了linux, 同样看的网课。 linux的网课老师讲的很好。 我能看出来老师已经尽量将linux讲的有意思, 讲的生动。 但是很可惜, linux作为计算机世界的哲学, 它有着将课堂的趣味性一减再减的魔力, 让我看着看着就走神了。 没办法, 我只能重新点击键盘左方向键——重新看一遍。你说linux你学的很快?好吧, 可能是我学习的积极性有所下降。 也确实, 我的学习积极性当时是有所下降的。——7月份的天气太热, 让我不自觉打开冰箱拿出一个冰棍,吃一口的同时再打开手机刷一下视频, 然后碎片化的时间不允许我的学习效率提高上去。 结果就是,我从7月份到10月份linux只学习完系统编程。但是! 当我看着我身边的同学们连操作系统是啥都不知道的时候, 原谅我的嘴角抽动了一下。 我知道这不对,我学校的课都没学,用学习学校线代, 英语这种基石学科的时间学习来学习专业课, 好像并不足以我感到有那一丝优越感。

        所以我学习线代了,所以我学习英语了。 ——我上课不拿电脑了, 可能老师们上课的时候会发现课堂上少了那一个在最后一排拿电脑上课的同学。他们会想是不是这个同学更过分不来上课了? 所以他们签到的劲头更足,他们变着花样签到, 甚至发了签到却在课堂上说不让我们签。那些在宿舍睡大觉的人可能起来的时候一看到签到了, 一下子就签了, 可怜的倒霉鬼不知道的是老师在课堂上预判了他的操作。 但是任老师花样百出, 我上课了!我在学习线代!我在学习英语!四级通过的大门我来了!机器学习房间的门槛你即便高我也在接近你。 AI大模型他们说需要机器学习的功底,b站上面的机器学习课程带着英语的讲解让我着迷, 这些成为了我想要学习线代和英语的无限动力! linux的网络编程别担心, 我马上就会重新学你。 mysql数据库你别得意, 你快被我学完啦。 早晨的脑子累只是一下子, 算法一道题过后让我清醒。AI你别躲藏, 机器学习我迟早学习你。这么多东西, 这么多知识。还是太菜了。但是!菜就多练。


所得收获

        在csdn创作的收获是无穷无尽的, 粉丝、 阅读量的增长与ip的维护是一方面。 认识同道的大佬更是一个能鞭策自己不辍修行, 给自己指引方向的明灯。 所以,在csdn创作已经是收获,其他更是受益匪浅。 


成就

        在过去写的最好的一段代码可能就是在网络编程写的客户端和服务端代码,网络编程真的让人感觉不可思议, 我在测试的时候甚至让我的服务器和window系统连接通信!下面是tcp协议的服务端代码:

//server:#pragma once
#include "Log.hpp"
#include <iostream>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include "ThreadPool.hpp"
#include "Task.hpp"
#include <sys/wait.h>
#include <unistd.h>
#include"daemon.hpp"    using namespace std;const int defaultfd = -1;
const int defaultport = 8080;
const string defaultip = "0.0.0.0";
const int backlog = 10; // 直接用,一般不要设置的太大。class TcpServer; // 声明class ThreadData
{
public:ThreadData(int fd, string ip, uint16_t port, TcpServer *const t): sockfd_(fd), clientip_(ip), clientport_(port), t_(t){}public:int sockfd_;string clientip_;uint16_t clientport_;public:TcpServer *const t_;
};Log lg;enum
{SockError = 2,BindError,ListenError
};class TcpServer
{
public:TcpServer(int port = defaultport, string ip = defaultip, int sockfd = defaultfd): listensockfd_(sockfd), ip_(ip), port_(port){}void InitServer(){listensockfd_ = socket(AF_INET, SOCK_STREAM, 0);if (listensockfd_ < 0){lg(Fatal, "create socket, errno: %d, strerror: %s", errno, strerror(errno));exit(SockError);}//lg(Info, "create socket success, sockfd: %d", listensockfd_);struct sockaddr_in local;memset(&local, 0, sizeof(local));local.sin_family = AF_INET;local.sin_port = htons(port_);inet_aton(ip_.c_str(), &(local.sin_addr)); // 主机序列转网络学列。 inet_aton是一个线程安全的函数。// 绑定if (bind(listensockfd_, (sockaddr *)&local, sizeof(local)) < 0){lg(Fatal, "bind error, errno: %d, strerror: %s", errno, strerror(errno));exit(BindError);}// tcp面向字节流, 是被动的, 所以要将对应的socket设置为监听状态。if (listen(listensockfd_, backlog) < 0) // backlock表示的是底层全连接队列的长度。 这个参数对意思, 不做解释。{lg(Fatal, "Listen error, errno: %d, strerror: %s", errno, strerror(errno));exit(ListenError);}lg(Info, "Listen has success");}void Start(){Daemon();ThreadPool<Task>::GetInstance()->Start();lg(Info, "tcpServer is running...");for (;;) // tcp协议也是一种一直处于运行的服务{// tcp是面向连接的, 所以他比udp还多了一步accept, 先将客户端与服务端连接起来。accept的返回值成功返回整数文件描述符,否则-1被返回, 错误码被设置// 1、获取新连接,struct sockaddr_in client; // 获取的是客户端的addrsocklen_t len = sizeof(client);int sockfd = accept(listensockfd_, (sockaddr *)&client, &len); // accept成功, 就能知道是谁连接的我。if (sockfd < 0)                                                // 关于这两个套接字, sockfd_的核心工作就只是把链接获取上来, 未来进行IO操作, 看的是sockfd。{lg(Waring, "listen error, errno: %d, strerror: %s", errno, strerror(errno));continue;}uint16_t clientport = ntohs(client.sin_port); // 网络序列转主机序列char clientip[32];inet_ntop(sockfd, &client.sin_addr, clientip, sizeof(clientip));// 2、根据新连接进行通信lg(Info, "get a new link..., sockfd:%d, clientport: %d, clientip: %s", sockfd, clientport, clientip);// version--4线程池版本Task task_(sockfd, clientip, clientport);ThreadPool<Task>::GetInstance()->Push(task_);}}~TcpServer(){}private:int listensockfd_; // 监听套接字, 只用来升起服务器, 接收链接uint16_t port_;string ip_;
};

憧憬

        憧憬有很多, 但是看不清的也有很多。 有点憧憬与迷茫交织, 有的则是冲突。 简单的, 最近的就是能够在学期内学习完linux, 把线代和英语学好吧。 

                                                                                                        ——2024-11-26

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/478867.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【c语言】文件操作详解 - 从打开到关闭

文章目录 1. 为什么使用文件&#xff1f;2. 什么是文件&#xff1f;3. 如何标识文件&#xff1f;4. 二进制文件和文本文件&#xff1f;5. 文件的打开和关闭5.1 流和标准流5.1.1 流5.1.2 标准流 5.2 文件指针5.3 文件的打开和关闭 6. 文件的读写顺序6.1 顺序读写函数6.2 对比一组…

视频质量评价SimpleVQA

目录 一、研究意义例子 二、介绍三、文章解读3.1 论文动机3.2论文思路3.3方法3.3.1网络框架3.3.2公式解读3.3.3核心创新3.3.4理解 &#xff01;&#xff01;&#xff01;作者对模型的改进本人算法框体视频抽帧美学特征提取网络&#xff1a;3.3.5实验细节&#xff1a; 四、代码复…

【真实场景面试问题-2】

1 介绍一下低功耗设计手段–clock gating 和 clock domain&#xff1b; 芯片的低功耗设计尤其是在关注能耗的场景&#xff1a;移动设备、物联网和嵌入式系统&#xff1b;时钟门控&#xff08;Clock Gating&#xff09;和时钟域&#xff08;Clock Domain&#xff09;是两种常用…

c++编程玩转物联网:使用芯片控制8个LED实现流水灯技术分享

在嵌入式系统中&#xff0c;有限的GPIO引脚往往限制了硬件扩展能力。74HC595N芯片是一种常用的移位寄存器&#xff0c;通过串行输入和并行输出扩展GPIO数量。本项目利用树莓派Pico开发板与74HC595N芯片&#xff0c;驱动8个LED实现流水灯效果。本文详细解析项目硬件连接、代码实…

《白帽子讲Web安全》13-14章

《白帽子讲Web安全》13-14章 《白帽子讲Web安全》13-14章13、应用层拒绝服务攻击13.1、DDOS简介13.2、应用层DDOS13.2.1、CC攻击13.2.2、限制请求频率13.2.3、道高一尺&#xff0c;魔高一丈 13.3、验证码的那些事儿13.4、防御应用层DDOS13.5、资源耗尽攻击13.5.1、Slowloris攻击…

Linux—进程概念学习-03

目录 Linux—进程学习—31.进程优先级1.1Linux中的进程优先级1.2修改进程优先级—top 2.进程的其他概念3.进程切换4.环境变量4.0环境变量的理解4.1环境变量的基本概念4.2添加环境变量—export4.3Linux中环境变量的由来4.4常见环境变量4.5和环境变量相关的命令4.6通过系统调用获…

pikachu文件上传漏洞通关详解

声明&#xff1a;文章只是起演示作用&#xff0c;所有涉及的网站和内容&#xff0c;仅供大家学习交流&#xff0c;如有任何违法行为&#xff0c;均和本人无关&#xff0c;切勿触碰法律底线 目录 概念&#xff1a;什么是文件上传漏洞一、客户端check二、MIME type三、getimagesi…

从零开始学GeoServer源码(二)添加支持arcgis切片功能

文章目录 参考文章环境背景1、配置打包好的程序1.1、下载GeoServer的war包1.2、下载GeoWebCache1.3、拷贝jar包1.4、修改配置文件1.4.1、拷贝geowebcache-arcgiscache-context.xml1.4.2、修改geowebcache-core-context.xml1.4.3、修改geowebcache-servlet.xml 1.5、配置切片信息…

学习日志016--python实现双向循环列表与链栈

python中一些复合数据结构通过类的封装来实现的。双向循环链表与链栈也在其中。 双向循环链表 双向循环链表是一种特殊类型的链表&#xff0c;它结合了双向链表和循环链表的特点。在双向循环链表中&#xff0c;每个节点不仅包含数据&#xff0c;还持有指向前一个和后一个节点的…

【自动化Selenium】Python 网页自动化测试脚本(上)

目录 1、Selenium介绍 2、Selenium环境安装 3、创建浏览器、设置、打开 4、打开网页、关闭网页、浏览器 5、浏览器最大化、最小化 6、浏览器的打开位置、尺寸 7、浏览器截图、网页刷新 8、元素定位 9、元素交互操作 10、元素定位 &#xff08;1&#xff09;ID定位 &…

微软Ignite 2024:建立一个Agentic世界!

在今年的Microsoft Ignite 2024上&#xff0c;AI Agent无疑成为本次大会的重点&#xff0c;已经有十万家企业通过Copilot Studio创建智能体了。微软更是宣布&#xff1a;企业可以在智能体中&#xff0c;使用Azure目录中1800个LLM中的任何一个模型了&#xff01; 建立一个Agent…

嵌入式linux系统中图像处理基本方法

目录 2.1 BMP图像处理 2.1.1 BMP文件格式解析 2.1.2 代码实现:将BMP文件解析为RGB格式,在LCD上显示 2.2 JPEG图像处理 2.2.1 JPEG文件格式和libjpeg编译 2.2.2 libjpeg接口函数的解析和使用 2.2.3 使用libjpeg把JPEG文件解析为RGB格式,在LCD上显示 …

探索 GAN 的演变之路

2014 年&#xff0c;在论文Generative Adversarial Networks中&#xff0c;首次提出了 GAN&#xff0c;其核心思想是“生成”与“对抗”。GAN 由一个生成器 G(Generator)和一个判别器 D(Discriminator)构成&#xff0c;前者用于捕捉数据分布&#xff0c;后者用于判别某个样本是…

Vue实训---5-路由搭建

回顾之前的代码 我们在my-vue-project\src\router\index.js中的代码如下&#xff1a; // 什么是路由&#xff1f;路由就是url地址和组件的对应关系 // 1.引入vue-router import { createRouter, createWebHashHistory } from vue-router// 2.定义路由 const routes [{path: …

【GAMES101笔记速查——Lecture 19 Cameras,Lenses and Light Fields】

本章节内容&#xff1a;相机、棱镜、光场 计算机图形学的两种成像方法&#xff1a; 1.合成方法&#xff1a;光栅化、光线追踪&#xff08;展示出现实没有的东西&#xff09; 2.捕捉方法&#xff1a;相机&#xff08;捕捉现实已有的东西&#xff09; 目录 1 相机 1.1 针孔相…

MacOS系统上Jmeter 录制脚本遇到的证书坑位

一、JMeter介绍与安装 1&#xff0c;下载及安装 jmeter官网地址 二、录制百度链接https请求时&#xff0c;需要导入jmeter相关证书到macos系统的更目录中. 导入方式&#xff0c;直接拖入mac的系统中&#xff0c;始终新人就可以&#xff1b; 三、jmeter 创建相关的录制组件…

软件团队的共担责任

问责制被认为是个人与其社会系统之间的纽带&#xff0c;它创造了一种将个人与其行为和绩效联系起来的身份关系。在入门系列的第一篇文章《超越工具和流程&#xff1a;成功软件开发团队的策略》中&#xff0c;我们介绍了问责制的概念&#xff0c;并提出了以下定义&#xff1a; …

【Python爬虫实战】深入解析 Scrapy:从阻塞与非阻塞到高效爬取的实战指南

&#x1f308;个人主页&#xff1a;易辰君-CSDN博客 &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/2401_86688088/category_12797772.html ​ 目录 前言 一、阻塞和非阻塞 &#xff08;一&#xff09;阻塞 &#xff08;二&#xff09;非阻塞 二、Scrapy的工作…

【Python数据分析五十个小案例】电影评分分析:使用Pandas分析电影评分数据,探索评分的分布、热门电影、用户偏好

博客主页&#xff1a;小馒头学python 本文专栏: Python数据分析五十个小案例 专栏简介&#xff1a;分享五十个Python数据分析小案例 在现代电影行业中&#xff0c;数据分析已经成为提升用户体验和电影推荐的关键工具。通过分析电影评分数据&#xff0c;我们可以揭示出用户的…

第八篇:CamX RawHdr Feature Enable

CamX RawHdr Feature Enable RawHdr feature介绍: 试用于拍照场景,输入3张Raw,输出一张Raw。 对应的pipeline: camxSWMFMergeRaw.xml (usecases: UsecaseZSL) featureGraph: RTRawHDRBayer2YUVJPEG ​ RT -> RawHdr -> Bayer2Yuv -> JPEG RTRawHDRBayer2YUVJPE…