- 博客(288)
- 收藏
- 关注
原创 RapidIO介绍
RapidIO:这是最初的技术名称,指的是一种高性能、低延迟的互连技术。SRIO:这是Serial RapidIO的缩写,强调了RapidIO技术的串行传输特性。DSP6678支持的速率最快为5GHz,以及xlinx7系列的fpga,ip核支持6.25GbpsF Type和T Type的组合决定了 RapidIO 包的具体类型和用途。不同的F Type值对应不同的包格式,而T Type值则进一步细化了具体的事务类型。这些字段的合理使用有助于确保数据在 RapidIO 网络中的正确传输和处理。
2024-11-16 20:54:58
1563
2
原创 项目开发的架构模式与异步请求(AJAX)
异步请求(AJAX)是一种更为高效的网络请求方式。AJAX的优势在于不需要重新加载整个页面,就能与服务器交换数据并更新部分网页内容。同步请求的处理通常通过表单进行,用户的操作会导致页面跳转。例如,在登录流程中,成功后跳转到首页,失败则返回合理的提示。在架构设计时,访问地址由服务端提供,技术架构的选择必须支持Web服务,以遵循HTTP/HTTPS协议。例如,QQ和微信的设计均基于C/S架构。这种架构的本质在于数据的共享与交互,通常需要数据库来做凭据或记录。服务端的路由地址主要用于获取资源或数据。
2024-10-30 17:04:09
893
原创 桥接模式、NAT模式 和 主机模式(Host-Only)区别
在虚拟化和网络配置中,和(Host-Only)是虚拟机常用的网络连接模式。它们各自的网络特性和使用场景不同。下面详细分析它们的区别和适用场景。
2024-10-19 17:41:08
1449
1
原创 Go语言反射机制详解:通过反射获取结构体的字段和方法
首先,定义一个名为UserSay()和。import ("fmt""reflect"Age intSex stringfmt.Println("User 说:", msg)// PrintInfo : 打印结构体信息fmt.Printf("姓名:%s,年龄:%d,性别:%s\n", user.Name, user.Age, user.Sex)
2024-10-16 10:41:18
1270
1
原创 Go 语言中的静态类型和动态类型
在 Go 语言中,类型系统的主要概念可以分为静态类型和动态类型,这两者的区别主要体现在如何确定和处理变量的类型。
2024-10-16 09:47:21
782
原创 Go语言中的通道 (Channel) 实践:Goroutine之间的通信
在 Go 语言中,通道(Channel)为我们提供了一种优雅的并发编程方式。相比于传统的锁机制,通道通过消息传递来解决多线程间的协作问题,避免了竞争条件和复杂的同步控制。它不仅让代码更易于理解和维护,还提高了程序的性能和可靠性。
2024-10-12 23:05:46
865
原创 SQL分类及实例
DDL Data Definition Language,数据定义语言,用来定义数据库对象(数据库,表,字段)。# 数据库操作# 查询数据库#查询当前数据库# 创建数据库# 删除数据库# 切换数据库use itcast;#表操作# 创建表结构# CREATE TABLE 表名(# 字段1 字段1类型 [ COMMENT 字段1注释 ],# 字段2 字段2类型 [COMMENT 字段2注释 ],# 字段3 字段3类型 [COMMENT 字段3注释 ],# ......
2024-10-03 23:01:50
597
原创 Go函数式编程与闭包
函数式编程(Functional Programming)是一种编程范式,它将计算视为数学函数的求值,强调使用高阶函数和不可变数据。在函数式编程中,函数是第一类公民,意味着函数可以像其他数据类型一样被传递、返回和赋值。其核心思想是通过函数组合和递归来构建复杂的程序逻辑,而不是依赖于可变状态和命令式的语句。
2024-09-27 11:52:47
637
原创 在 VS Code 中调试 C++ 项目
在Debug Console 显示调试器已启动并正在运行的输出,在最后一个cout语句完成之前,调试控制台不会出现任何输出。因为需要换行符来刷新缓冲区。从预定义的调试配置中进行选择,生成预定义launch.json文件,可能是空模板。可以使用变量缓冲区中的set alue来修改变量值等。开始调试,使用键盘快捷键F5。
2024-09-19 15:00:04
385
1
原创 数据库连接池(最新版)
池可以看做资源的容器,所以多种实现方法,比如数组、链表、队列等。这里,使用单例模式和链表创建数据库连接池,实现对数据库连接资源的复用。项目中的数据库模块分为两部分,其一是数据库连接池的定义,其二是利用连接池完成登录和注册的校验功能。具体的,工作线程从数据库连接池取得一个连接,访问数据库中的数据,访问完毕后将连接交还连接池。
2024-09-03 17:04:08
517
原创 日志系统(最新版)
本项目中,使用单例模式创建日志系统,对服务器运行状态、错误信息和访问数据进行记录,该系统可以实现按天分类,超行分类功能,可以根据实际情况分别使用同步和异步写入两种方式。其中异步写入方式,将生产者-消费者模型封装为阻塞队列,创建一个写线程,工作线程将要写的内容push进队列,写线程从队列中取出内容,写入日志文件。日志系统大致可以分成两部分,其一是单例模式与阻塞队列的定义,其二是日志类的定义与使用。流程图日志文件局部变量的懒汉模式获取实例生成日志文件,并判断同步和异步写入方式同步。
2024-09-03 13:23:05
985
原创 定时器处理非活动连接(最新版)
本项目中,服务器主循环为每一个连接创建一个定时器,并对每个连接进行定时。另外,利用升序时间链表容器将所有定时器串联起来,若主循环接收到定时通知,则在链表中依次执行定时任务。Linuxsocket选项SO_RECVTIMEO和SO_SNDTIMEOSIGALRM信号I/O复用系统调用的超时参数三种方法没有一劳永逸的应用场景,也没有绝对的优劣。由于项目中使用的是SIGALRM信号,这里仅对其进行介绍,另外两种方法可以查阅游双的Linux高性能服务器编程 第11章 定时器。
2024-09-02 16:17:58
1428
原创 http连接处理(最新版)
这段代码用于解析 HTTP 请求行,通过逐步分割并验证请求行的不同部分(方法、URL、HTTP版本)来确定其合法性。解析完请求行后,主状态机继续分析请求头。在报文中,请求头和空行的处理使用的同一个函数,这里通过判断当前的text首位是不是\0字符,若是,则表示当前处理的是空行,若不是,则表示当前处理的是请求头。
2024-08-30 16:38:00
1836
2
原创 线程同步机制封装类
互斥锁,也成互斥量,可以保护关键代码段,以确保独占式访问.当进入关键代码段,获得互斥锁将其加锁;使用条件变量,结合互斥锁,来协调两个线程的操作,确保第一个线程(生产者)准备数据后,第二个线程(消费者)才开始处理数据。条件变量提供了一种线程间的通知机制,当某个共享数据达到某个值时,唤醒等待这个共享数据的线程.信号量的取值可以是任何自然数,最常用的,最简单的信号量是二进制信号量,只有0和1两个值.在条件变量被触发之前,线程不会执行,这有助于节省CPU资源,避免无效的轮询。以上,成功返回0,失败返回errno。
2024-08-27 21:39:52
799
原创 数据库基础知识总结
数据库: 数据库(DataBase 简称 DB)就是信息的集合或者说数据库是由数据库管理系统管理的数据的集合。数据库管理系统: 数据库管理系统(Database Management System 简称 DBMS)是一种操纵和管理数据库的大型软件,通常用于建立、使用和维护数据库。数据库系统: 数据库系统(Data Base System,简称 DBS)通常由软件、数据库和数据管理员(DBA)组成。数据库管理员。
2024-08-15 09:23:43
979
原创 算法与数据结构笔记
算法是什么算法定义算法(algorithm)是在有限时间内解决特定问题的一组指令或操作步骤,它具有以下特性。‧ 问题是明确的,包含清晰的输入和输出定义。‧ 具有可行性,能够在有限步骤、时间和内存空间下完成。‧ 各步骤都有确定的含义,在相同的输入和运行条件下,输出始终相同。数据结构定义数据结构(data structure)是计算机中组织和存储数据的方式,具有以下设计目标。‧ 空间占用尽量少,以节省计算机内存‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。‧ 提供简洁的数据表示和
2024-08-14 23:30:17
566
原创 七大排序算法
是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序的算法步骤如下:从第一个元素开始,该元素可以认为已经被排序;取出下一个元素,在已经排序的元素序列中从后向前扫描;如果该元素(已排序)大于新元素,将该元素移到下一位置;重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;将新元素插入到该位置后;重复步骤2~5。是一种基础的。
2024-08-13 12:03:51
3157
3
原创 IP问题总结
互联⽹诞⽣之初,IP 地址显得很充裕,于是计算机科学家们设计了分类地址。IP 地址分类成了 5 种类型,分别是 A 类、B 类、C 类、D 类、E 类。⽽ D 类和 E 类地址是没有主机号的,所以不可⽤于主机 IP,D 类常被⽤于多播,E 类是预留的分类,暂时未使⽤正因为 IP 分类存在许多缺点,所以后⾯提出了⽆分类地址的⽅案,即 CIDR。这种⽅式不再有分类地址的概念,32 ⽐特的 IP 地址被划分为两部分,前⾯是⽹络号,后⾯是主机号。公有IP。
2024-08-13 08:36:34
1188
原创 TCP问题总结
相信⼤家⽐较常回答的是:“因为三次握⼿才能保证双⽅具有接收和发送的能⼒。这回答是没问题,但这回答是⽚⾯的,并没有说出主要的原因。在前⾯我们知道了什么是。
2024-08-12 22:28:10
1124
2
原创 HTTP问题总结
强缓存指的是只要浏览器判断缓存没有过期,则直接使⽤浏览器的本地缓存,决定是否使⽤缓存的主动性在于浏览器这边。如下图中,返回的是 200 状态码,但在 size 项中标识的是 from disk cache,就是使⽤了强制缓存强缓存是利⽤下⾯这两个 HTTP 响应头部(Response Header)字段实现的,它们都⽤来表示资源在客户端缓存的有效期:Cache-Control , 是⼀个相对时间;Expires ,是⼀个绝对时间;
2024-08-11 15:27:49
384
原创 网络基础问题总结
最上层的,也是我们能直接接触到的就是应⽤层),我们电脑或⼿机使⽤的应⽤软件都是在应⽤层实现。那么,当两个不同设备的应⽤需要通信的时候,应⽤就把应⽤数据传给下⼀层,也就是传输层。所以,**应⽤层只需要专注于为⽤户提供应⽤功能,⽐如**等。应⽤层是不⽤去关⼼数据是如何传输的,就类似于,我们寄快递的时候,只需要把包裹交给快递员,由他负责运输快递,我们不需要关⼼快递是如何被运输的。⽽且应⽤层是⼯作在操作系统中的⽤户态,传输层及以下则⼯作在内核态。应⽤层的数据包会传给传输层,传输层。
2024-08-09 23:48:55
898
原创 输入输出设备管理问题总结
我们的电脑设备可以接⾮常多的输⼊输出设备,⽐如键盘、⿏标、显示器、⽹卡、硬盘、打印机、⾳响等等,每个设备的⽤法和功能都不同,那操作系统是如何把这些输⼊输出设备统⼀管理的呢?为了屏蔽设备之间的差异,每个设备都有⼀个叫****设备控制器(的组件,⽐如硬盘有硬盘控制器、显示器有视频控制器等。因为这些控制器都很清楚的知道对应设备的⽤法和功能,所以 CPU 是通过设备控制器来和设备打交道的。通过写⼊这些寄存器,操作系统可以命令设备发送数据、接收数据、开启或关闭,或者执⾏某些其他操作。
2024-08-09 17:13:09
1159
原创 文件系统管理问题总结
Linux 最经典的⼀句话是:「⼀切皆⽂件」,不仅普通的⽂件和⽬录,就连块设备、管道、socket 等,也都是统⼀交给⽂件系统管理的。索引节点(index node)和⽬录项**(**directoryentry**)**,它们主要⽤来记录⽂件的元信息和⽬录层次结构。索引节点,也就是inode,⽤来记录⽂件的元信息,⽐如 inode 编号、⽂件⼤⼩、访问权限、创建时间、修改时间、数据在磁盘的位置等等。索引节点是⽂件的唯⼀标识,它们之间⼀⼀对应,也同样都会被存储在硬盘中,所以。
2024-08-09 13:17:08
1075
原创 进程与线程管理问题总结
⼤多数操作系统都是多任务,通常⽀持⼤于 CPU 数量的任务同时运⾏。实际上,这些任务并不是同时运⾏的,只是因为系统在很短的时间内,让各个任务分别在 CPU 运⾏,于是就造成同时运⾏的错觉。任务是交给 CPU 运⾏的,那么在每个任务运⾏前,CPU 需要知道任务从哪⾥加载,⼜从哪⾥开始运⾏。所以,操作系统需要事先帮 CPU 设置好CPU寄存器和程序计数器。CPU 寄存器是 CPU 内部⼀个容量⼩,但是速度极快的内存(缓存)。我举个例⼦,寄存器像是你的⼝。
2024-08-09 11:37:09
989
原创 内存管理问题总结
我们程序所使⽤的内存地址叫做实际存在硬件⾥⾯的空间地址叫操作系统引⼊了虚拟内存,进程持有的虚拟地址会通过 CPU 芯⽚中的内存管理单元(MMU)的映射关系,来转换变成物理地址,然后再通过物理地址访问内存。
2024-08-08 20:40:12
1016
原创 高效网络模式:Reactor和Proactor模式
虽然服务器程序种类繁多,但其基本框架都一样,不同之处在于逻辑处理是服务器管理客户连接的模块。它通常要完成以下工作:等待并接受新的客户连接,接收客户数据,将服务器响应数据返回给客户端。但是数据的收发不一定在 I/O 处理单元中执行,也可能在逻辑单元中执行,具体在何处执行取决于一个通常是一个进程或线程。它分析并处理客户数据,然后将结果传递给 I/O 处理单元或者直接发送给客户端(具体使用哪种方式取决于事件处理模式)。可以是数据库、缓存和文件,但不是必须的是各单元之间的通信方式的抽象。
2024-07-30 17:56:27
463
原创 Web服务器简介及HTTP协议
*超文本传输协议(Hypertext Transfer Protocol,HTTP)**是一个简单的请求 - 响应协议,它通常运行在TCP 之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以 ASCII 形式给出;而消息内容则具有一个类似 MIME 的格式。HTTP是万维网的数据通信的基础。HTTP的发展是由蒂姆·伯纳斯-李于1989年在欧洲核子研究组织(CERN)所发起。HTTP的标准制定由万。
2024-07-30 11:25:57
455
原创 Unix、LInux五种IO模型
Linux 用 select/poll/epoll 函数实现 IO 复用模型,这些函数也会使进程阻塞,但是和阻塞IO所不同的是这些函数可以同时阻塞多个IO操作。Linux 用套接口进行信号驱动 IO,安装一个信号处理函数,进程继续运行并不阻塞,当IO事件就绪,进程收到SIGIO 信号,然后处理 IO 事件。调用者调用了某个函数,等待这个函数返回,期间什么也不做,不停的去检查这个函数有没有返回,必须等这个函数返回才能进行下一步动作。非阻塞等待,每隔一段时间就去检测IO事件是否就绪。没有就绪就可以做其他事。
2024-07-30 09:37:34
364
原创 阻塞和非阻塞,同步和异步
表示A向B请求调用一个网络IO接口时或者调用某个业务逻辑API接口时),向B传入请求的事件以及事件发生时通知的方式,A就可以处理其它逻辑了,当B监听到事件处理完成后,会用事先约定好的通知方式,通知A处理结果。表示A向B请求调用一个网络IO接口时(或者调用某个业务逻辑API接口时),数据的读写都是由请求方A自己来完成的(不管是阻塞还是非阻塞);陈硕:在处理 IO 的时候,阻塞和非阻塞都是同步 IO,只有使用了特殊的 API 才是异步 IO。数据就绪 和 数据读写。数据就绪:根据系统IO操作的就绪状态。
2024-07-29 19:13:08
270
原创 UDP通信 单播,广播,组播
单播地址标识单个 IP 接口,广播地址标识某个子网的所有 IP 接口,多播地址标识一组 IP 接口。多播数据报只应该由对它感兴趣的接口接收,也就是说由运行相应多播会话应用系统的主机上的接口接收。另外,广播一般局限于局域网内使用,而多播则既可以用于局域网,也可以跨广域网使用。向子网中多台计算机发送消息,并且子网中所有的计算机都可以接收到发送方发送的消息,每个广播消息都包含一个特殊的IP地址,这个IP中子网内主机标志部分的二进制全部为1。b.客户端需要绑定服务器广播使用的端口,才可以接收到广播消息。
2024-07-29 18:14:36
459
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人