自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 收藏
  • 关注

原创 Gin框架学习笔记(六)——gin中的日志使用

fmt.Printf("[三玖]: %v %v %v %v \n",[三玖]: GET / main.main.func1 3至此我们对Gin框架的简单学习就到此为止了,更多的学习大家可以前去查看Gin框架官方文档Gin框架官方文档后面就要开始对Gorm的学习了,下篇见!

2024-05-21 23:16:23 438

原创 Gin框架学习笔记(五) ——文件上传与路由中间件

我们在日常开发的时候可能忽悠很多公共的业务逻辑,比如说:登录验证,权限校验,数据分页,记录日志等等,我们在每一个模块下都进行相关逻辑的书写无疑是不现实的,在Gin框架中它允许我们在处理请求的同时自主加入自己的钩子(hook)函数来处理这些公共的业务逻辑,而这些钩子函数也就是我们所说的中间件。

2024-05-19 14:28:38 439

原创 gin框架学习笔记(四) ——参数绑定与参数验证

import ("reflect"Username string `json:"username" binding:"required" msg:"用户名不能为空"`Password string `json:"password" binding:"min=3,max=6" msg:"密码长度不能小于3大于6"`// GetValidMsg 返回结构体中的msg参数// 使用的时候,需要传obj的指针// 将err接口断言为具体类型ok {// 断言成功// 循环每一个错误信息。

2024-05-16 11:51:46 293

原创 gin框架学习笔记(三) ——路由请求与相关参数

请求头和响应头都是HTTP消息头的一部分,它们是在HTTP通信过程中用于传递元数据的重要组成部分。请求头包含了客户端(例如浏览器、移动应用等)向服务器发送的请求的元数据信息。请求头通常包括了诸如客户端的User-Agent、Accept、Content-Type等信息,用于告知服务器请求的相关信息。例如,浏览器发送HTTP请求时,请求头中可能包含了用户代理信息、所能接受的数据类型、请求的方法(GET、POST等)等。响应头包含了服务器响应客户端请求时发送的元数据信息。

2024-05-14 21:05:40 818

原创 c++高级篇(一) —— 初识Linux下的进程控制

我们在用fork()函数去创建一个进程的时候,当我们想继续使用这个进程去去执行其他函数的时候,我们可以去调用exec函数,这样该进程将被替换为全新的程序,而且调用exec函数,前后函数的进程不变如果父进程比子进程先退出,子进程将被1号进程所托管(这是一种让进程在后台运行的方法),而如果子进程比父进程先退出,且父进程并没有处理子进程退出的信息的话,那么子进程将成为僵尸进程。return 0;

2024-05-10 21:53:51 769

原创 gin框架学习笔记(二) ——相关数据与文件的响应

在看是今天的内容之前,我们收先来探究一下:什么是Web应用工作的原理?当然这个问题其实论述起来是很麻烦的,但是我们将它无限的缩小,其实可以简化为一个C/S模型,客户端(Client)负责发送请求,服务端(Server,也就使我们的Web应用)接收 请求,来进行相关的操作,模型如下:而今天我们所要介绍的就是服务端如何进行相关数据的响应。

2024-05-10 14:19:19 986

原创 Gin框架笔记(一) Gin框架的安装与Hello World

Gin是一个golang的微框架,基于 httprouter,封装比较优雅,API友好,源码注释比较明确。具有快速灵活,容错率高,高性能等特点。框架更像是一些常用函数或者工具的集合。借助框架开发,不仅可以省去很多常用的封装带来的时间,也有助于团队的编码风格和形成规范。

2024-05-08 21:21:49 447

原创 数据库大作业——基于qt开发的图书管理系统(四)项目目录的整理与绘制登录页面

这样我们的基本登录页面就绘制好了,由于博主这个是大作业(懂的都懂,咳咳咳),界面绘制的比较潦草,大家可以根据自己的需求来添加模块,下篇文章见。

2024-05-08 18:54:07 440

原创 go语言并发实战——日志收集系统(十一)基于etcd来监视配置文件的变化

main.goimport ("fmt"select {}//读取配置文件,获取配置信息if err!= nil {//初始化Kafkaif err!= nil {return//初始化etcdif err!= nil {return//拉取要收集日志文件的配置项if err!= nil {return//初始化tailif err!= nil {

2024-05-06 19:22:35 634

原创 c++实战篇(三) ——对socket通讯服务端与客户端的封装

Cpp不同于其他语言,像Go,Python等语言对上述的细节其实已经封装好了,但是cpp则是需要我们去一点点的实现,为了避免重复的书写代码,我们可以将它们封装成类来供我们去使用,以上就是这篇文章的全部内容了,大家下篇见!

2024-05-04 21:32:29 1548

原创 代码随想录——双指针与滑动窗口(四)

我们首先任选一边维持一个长度为k的子数组,计算出子数组的和,记录下来为当前最大值,然后定义左右指针,删去左指针指向的值,加上右指针指向的值,不断更新当前最大值,当左指针的位置到-1,当前最大值就是目标值。这道题属于一个比较典型的滑动窗口题目了,我们维护一个定长的滑动窗口,记录里面的元音字母数即可。

2024-05-01 01:11:39 345

原创 Mysql从入门到精通——Mysql知识点总结(基础篇)

学不会Mysql,记不住命令怎么办?一篇文章带你速通sql,杀穿一切!!!

2024-04-30 20:12:40 1332

原创 数据库大作业——基于qt开发的图书管理系统(三)Qt连接Mysql数据库

至此我们完成了数据库表结构的设计,并且成功加载了QMYSQL这一mysql数据库驱动,一会我会发一篇有关Mysql常用命令总结的博文,大家如果没有怎么接触过Mysql与sql语句可以看看,从下一篇博文开始,我们就要开始登录界面的制作了,大家下篇见!

2024-04-30 20:05:21 751 1

原创 数据库大作业——基于qt开发的图书管理系统(二) 相关表结构的设计

至此我们已经完成所有业务相关表的设计了,耳下面我们的任务就是让qt连接上数据并且编写可视化页面与相关的业务逻辑了,大家下篇见!

2024-04-29 16:16:53 475

原创 数据库大作业——基于qt开发的图书管理系统 (一)环境的配置与项目需求的分析

博主最近数据库原理结课要做课程设计了,要求开发基于数据库实现的图书管理系统,博主想了想决定做一个基于Qt的图书管理系统,博主在此之前其实也没有用过多少Qt,仅以此专栏记录博主学习与开发的全过程,大家一起学习,一起进步,话不多说,开干开干!

2024-04-28 15:27:08 820

原创 c++理论篇(一) ——浅谈tcp缓存与tcp的分包与粘包

在TCP协议中,无论发送多少数据,都要在数据前面加上协议头,同时,对方收到数据后,也需要回复ACK表示确认。为了尽可能的利用网络带宽,TCP希望每次都能够以MSS(Maximum Segment Size,最大报文长度)的数据块来发送数据。这一篇文章主要是为下一篇网络编程的服务端与客户端编写做一个引子,介绍一些有关网络编程的基本知识,因为下一篇文章将会给大家介绍在c++网络编程中有关服务端与客户端的编写,本文只做一些理论介绍,大家下篇见!

2024-04-27 23:34:13 1363 2

原创 go语言并发实战——日志收集系统(十) 重构tailfile模块实现同时监控多个日志文件

在上一篇文章中,我们实现了通过etcd来同时指定多个不同的有关分区与日志文件的路径,但是锁着一次读取配置的增多,不可避免的出现了一个问题:我们如何来监控多个日志文件,这样原来的tailFile模块相对于当下场景就显得有些捉襟见肘了,所以对tialFile模块进行重构就成了我们必须要做的事情了。

2024-04-26 20:53:11 625

原创 go语言并发实战——日志收集系统(九) 基于etcd的代码重构思考与初步实现

在之前我们j基于saramatail还有go-iniwatch。

2024-04-26 16:53:52 351

原创 代码随想录——双指针/滑动窗口(三)

【代码】代码随想录——双指针/滑动窗口(三)

2024-04-26 11:18:15 199 1

原创 c++高级篇(三) ——Linux下IO多路复用之poll模型

poll模型前言poll模型与select的实现原理相近,所以绝大数的原理其实可以参考select,我们这里对二者的相同点不做过多探究,如果有需要可以去看一下博主的上一篇文章:c++高级篇(二) ——Linux下IO多路复用之select模型这里我们只对二者的不同处做说明。poll结构体在poll模型中,是利用pollfd结构体数组来储存socket通讯中使用的socket,pollfd的结构体实现如下:struct pollfd{ int fd; //存储的socket s

2024-04-25 21:52:22 900 1

原创 c++高级篇(二) ——Linux下IO多路复用之select模型

我们在Linux上服务端一般是要同时连接多个客户端进行通信,但是为每一个客户端连接创建一个进/线程,会消耗很多资源,一个1核2GB的虚拟机,大概只能创建100多个线程,但是我们经常使用网络知道,这样是远远不能满足我们日常的使用需求的,所以为了解决这一问题,就需要我们去使用IO多路复用。

2024-04-25 15:59:59 1225 1

原创 代码随想录——双指针/滑动窗口(二)

【代码】代码随想录——双指针/滑动窗口(二)

2024-04-24 15:27:07 234

原创 go语言并发实战——日志收集系统(八) go语言操作etcd以及利用watch实现对键值的监控

我们有关go简单操作etcd到此为止了,后面就是介绍如何在日志收集服务中使用了,我们下篇见!

2024-04-24 11:29:14 698

原创 go语言并发实战——日志收集系统(七) etcd的介绍与简单使用

etcd是基于Go语言开发的一个开源且高可用的分布式key-value存储系统,我们可以在上面实现配置共享与服务的注册与发现。和它比较相似的还有我们之间所提到的Zookeeper以及consul.(注:后面我们学习微服务的时候etcd和consul会有广泛的使用)

2024-04-23 22:17:41 935

原创 go语言并发实战——日志收集系统(六) 编写日志收集系统客户端

我们介绍了编写客户端的四个步骤,分别是:- 读取配置文件,寻找日志路径- 初始化服务- 根据日志路径l来收集日志- 将收集到的日志发送Kafka中

2024-04-22 20:32:11 832

原创 c++实战篇(二)——基于自旋锁实现的日志服务模块

今天的有关内容就到此为止啦,有问题的话欢迎在评论区评论,大家可以集思广益,如果你觉得博主的内容对你有帮助,欢迎三连一下和订阅专栏如果博主文章里面有什么错误页欢迎斧正(毕竟博主页只是个小蒟蒻鸡),好了,大家下篇文章见!

2024-04-21 14:26:41 622

原创 go语言并发实战——日志收集系统(五) 基于go-ini包读取日志收集服务的配置文件

对读取配置文件就讲到这里了。下一篇文章我们就开始探寻如何初始化Kafka和tail的服务,以及介绍什么是etcd,以及它在项目中所起到的作用,下篇见!

2024-04-20 15:25:10 613 1

原创 go语言并发实战——日志收集系统(四) 利用tail包实现对日志文件的实时监控

go语言中tail包用于输出文件的最后几行。假设该档案有更新,tail会自己主动刷新,确保我们看到是最新的档案内容 ,在日志收集中可以实时的监测日志的变化。流程:首先定义Config结构体,初始化配置文件利用TailFile函数得到Tail结构体,Tail结构体中的Lines封装了拿到的信息循环遍历Tail.Lines,取出信息,可以实现实时监控。

2024-04-19 23:11:04 1049

原创 c++进阶篇(一)——运算符重载

运算符重载不会写,没思路?,一篇文章带你通关

2024-04-19 15:14:52 210

原创 C++实战篇(一)——自旋锁的使用

自旋锁指的是当一个线程在获取锁的时候,如果锁已经被其他线程所获取,那么该线程就将进入一个循环,不断的去判断自身是否能够获得锁 ,直到该线程获得了锁,线程才会退出循环。

2024-04-19 00:26:04 549

原创 go语言并发实战——日志收集系统(三) 利用sarama包连接KafKa实现消息的生产与消费

由于1.19版本后添加了ztcd压缩算法,需要用到cgo,这里我们为了方便考虑选择下载。不过这个不能实现直接的消费,后续我们会对这个进行补充,这里制作介绍。今天我们所时机的内容需要用到go语言的第三方包。了,但是博主在做的时候发现,这样会直接清除掉。命令来安装第三方包,我们要使用/,所以这里我们不能直接使用。其实这是已经可以使用命令。等待命令运行完毕,打开。这时候再打开终端输入。

2024-04-17 18:34:39 1465 10

原创 代码随想录——双指针(一)

【代码】代码随想录——双指针(一)

2024-04-16 21:15:17 270

原创 go语言并发实战——日志收集系统(二) Kafka简介

Kafka是Apache基金会的一个开源项目,是一个分布式的、可扩展的、高吞吐的、高可用的分布式数据流平台,既可以运行在单台服务器上,也可以在多台服务器上形成集群,我们既可以发送数据到集群中的任意一台服务器,也可以从集群中的任意一台服务器中读取数据。Kafka可以保证数据不丢失,并且可以做到高可用,类似与消息队列。

2024-04-16 15:58:13 1126

原创 go语言并发实战——日志收集系统(一) 项目前言

go并发编程的练手项目。

2024-04-15 22:36:41 164

原创 go语言并发编程(五) ——Context

Context是go语言中所提供的一种并发控制的解决方案,相比于管道与WaitGroupContext可以更好的控制子孙协程以及层次更深的协程。ContextemptyCtxcancelCtxtimerCtxvalueCtx在看Context的具体实现之前,先来看看Context接口的定义.Deadline该方法有两个返回值,deadline是截止时间,也就是上下文截止的时间,第二个值是是否设置deedline,如果没有则一直为falseDone。

2024-04-15 16:50:55 927

原创 go语言并发编程(四) ——再探管道

双向管道可以转换为单向管道,反过来则不可以。通常情况下,将双向管道传给某个协程或函数并且不希望它读取/发送数据,就可以用到单向管道来限制另一方的行为。// 只能对管道发送数据ch <- 1当然读管道同理select在Linux系统中一般用于IO多路复用,类似的,在Go语言中,select是一种管道多路复用的控制结构,而到底什么是多路复用,简单的用一句话来概括的话就是:在某一时刻,同时监测多个元素是否可用,而被监测的可以是网络请求,文件IO等,而在Go语言中的select。

2024-04-13 15:59:08 1428 1

原创 Go语言并发编程(三)——初窥管道

go语言对管道作用的解释是这样的:通过消息实现内存共享,channel就是为此而生的,与c++实现并发编程中利用共享内存进行多线程/进程通信不同,go语言通道的思想就是协程与协程之间并不创建实质上的共享,而是基于管道的通信,实现多个协程之间共享内存。在Go语言中,我们会通过关键字chan来声明一个管道,同时我们也要指定其存储的数当然这只是一个管道的声明,此时管道还没有初始化,其值为nil。

2024-04-12 14:27:49 779

原创 go语言并发编程(二)——锁

在介绍锁之前我们要先明确一件事情,我们要知道锁的本质其实是将原本并行的操作变成串行操作,这样不可避免的会造成不必要的资源浪费,而在我们使用互斥锁的时候,如果读写操作的数量趋于一致的时候,我们可以使用互斥锁,但是读写操作的数量差距较大时,使用互斥锁将会造成大量的浪费,这时后我们就可以使用我们今天的主角——读写锁了。获得读锁:当一个协程获得读锁时,其他协程进行写操作时会阻塞,其他协程进行读操作时不会阻塞获得写锁:当一个协程获得写锁时,其他协程进行写操作时会阻塞,其他协程进行读操作时。

2024-04-08 20:21:22 970

原创 Go语言并发(一)——goroutine与Waitgroup

协程是轻量级的线程(或者说是用户态的线程),与常用的线程不同的是,它本身的调度不由操作系统来完成,而是由go语言本身所带的调度器来完成,进而减少了上下文切换的开销,这也是go语言性能提升的原因。WaitGroup是Go语言中一个并发控制工具,它由sync包提供,WairGroup即等待执行,我们可以利用它轻易的实现等待一组协程的效果。

2024-04-08 16:19:27 712

原创 Go语言进阶篇——文件

文件的常见的两种打开方式是基于os相对于前者,OpenFile可以提供更加细致的操作,而前者就是对后者的一个简单封装文件的查找路径默认为项目go.mod文件所在的路径,由于项目下并没有该文件,所以自然会返回一个错误。因为IO错误的类型有很多,所以有时后需要我们去手动的去判断文件是否存在,而os事实上第一种函数读取的文件仅仅只是只读的,无法被修改,Open函数内部实现通过OpenFile函数可以控制更多细节,例如修改文件描述符和文件权限,关于文件描述符,os包下提供了以下常量以供使用。

2024-02-26 21:30:31 639

图书管理系统数据库设计文档

数据库设计文档

2024-04-29

图书管理系统的sql脚本

图书管理系统的sql脚本

2024-04-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除