新老网站做301跳转宁波企业网站制作哪家好

web/2025/10/6 11:34:52/文章来源:
新老网站做301跳转,宁波企业网站制作哪家好,辽宁做网站公司,金蝶软件官网文章目录 一、简介二、设计2.1 队列结构设计2.2 队列接口设计 三、实现3.1 队列锁的实现3.2 创建队列3.3 写入队列3.4 读出数据3.5 判断队列是否为空3.6 判断队列是否为满3.7 清空队列3.8 删除队列 四、测试参考 一、简介 收到消息时先把接收到的消息放到队列中。在任务中从队… 文章目录 一、简介二、设计2.1 队列结构设计2.2 队列接口设计 三、实现3.1 队列锁的实现3.2 创建队列3.3 写入队列3.4 读出数据3.5 判断队列是否为空3.6 判断队列是否为满3.7 清空队列3.8 删除队列 四、测试参考 一、简介 收到消息时先把接收到的消息放到队列中。在任务中从队列获取数据。如果解析过程中再来一帧数据这帧数据会先存放在消息队列中。当队列中的上一帧数据解析完成后任务会从队列中的下一条数据开始解析处理以此循环直到队列中的消息解析处理完毕。 二、设计 2.1 队列结构设计 有头尾指针分别指向写入的位置和读出的位置 需要配置队列中最多能存储几帧数据即几个列表项每一项有多大的空间去保存接收到的数据 LiteQueue相当于是头部后面紧跟着的是数据而且每一个数据的存储大小都是确定的。 考虑到多线程不能同时读或者写要互斥访问因此还需要加一个读写锁 /* LiteQueue : Structure describing queue parameters. item_num_x: Number of items. item_size : The size of each list item set when creating the queue,unit: bytes, used to store data received in the queue. item_size : The counter of items */ typedef struct { volatile uint8_t queue_write_lock;volatile uint8_t queue_read_lock;uint8_t *head; uint8_t *tail;size_t item_num; size_t item_size;size_t item_count; }LiteQueue, *pLiteQueue;2.2 队列接口设计 使用队列前必定先要创建队列并确定创建队列的大小其次是读写队列的接口以及判断队列是否为空/满、清空队列、删除队列 LiteQueue *LiteQueue_Create(size_t item_num, size_t item_size); LiteQueue_Status Write_To_LiteQueue(LiteQueue *queue, uint8_t *buff); LiteQueue_Status Read_From_LiteQueue(LiteQueue *queue, uint8_t *buff); LiteQueue_Status isLiteQueue_Empty(LiteQueue *queue); LiteQueue_Status LiteQueue_Clear(LiteQueue *queue); LiteQueue_Status LiteQueue_Delete(LiteQueue *queue); LiteQueue_Status isLiteQueue_Full(LiteQueue *queue); LiteQueue_Status isLiteQueue_Empty(LiteQueue *queue); 队列的状态用一个枚举类型实现 typedef enum{ LITE_QUEUE_IDLE 0, LITE_QUEUE_BUSY, LITE_QUEUE_ERR, LITE_QUEUE_OK,LITE_QUEUE_EMPTY, LITE_QUEUE_NONEMPTY,LITE_QUEUE_FULL,LITE_QUEUE_NONFULL }LiteQueue_Status;三、实现 3.1 队列锁的实现 队列锁使用宏定义的方式实现 typedef enum{ LITE_QUEUE_UNLOCK 0, LITE_QUEUE_LOCK, }LiteQueueLock;#define LITE_QUEUE_WRITE_LOCK(__QUEUE__) do{ \if((__QUEUE__)-queue_write_lock LITE_QUEUE_LOCK){\return LITE_QUEUE_BUSY; \} else { \(__QUEUE__)-queue_write_lock LITE_QUEUE_LOCK; \} \ }while(0) #define LITE_QUEUE_WRITE_UNLOCK(__QUEUE__) do{ \(__QUEUE__)-queue_write_lock LITE_QUEUE_UNLOCK; \ }while(0) #define LITE_QUEUE_READ_LOCK(__QUEUE__) do{ \if((__QUEUE__)-queue_read_lock LITE_QUEUE_LOCK){ \return LITE_QUEUE_BUSY; \} else { \(__QUEUE__)-queue_read_lock LITE_QUEUE_LOCK; \} \ }while(0) #define LITE_QUEUE_READ_UNLOCK(__QUEUE__) do{ \(__QUEUE__)-queue_read_lock LITE_QUEUE_UNLOCK; \ }while(0) 3.2 创建队列 /** * brief : Create message queue. * param : {size_t } item_num : The number of list items in the queue.{size_t } item_size: The size of each list item, unit: bytes. * return: {LiteQueue *} queue : Message queue handle pointer. * note : Create a queue and initialize the queue items to 0, with the head and tail pointers pointing to the starting position of the list items. */ LiteQueue *LiteQueue_Create(size_t item_num, size_t item_size){if((item_num 1) || (item_size 1)){return NULL;}LiteQueue *queue (LiteQueue *)malloc(sizeof(LiteQueue) item_num * item_size);if( queue NULL ) {printf(LiteQueue malloc failed.\r\n);return NULL;}memset((uint8_t *)queue, 0, sizeof(LiteQueue) item_num * item_size);queue-head (uint8_t *)((uint8_t *)queue sizeof(LiteQueue));queue-tail queue-head;queue-item_num item_num;queue-item_size item_size;queue-item_count 0;queue-queue_read_lock LITE_QUEUE_UNLOCK;queue-queue_write_lock LITE_QUEUE_UNLOCK;return queue; }3.3 写入队列 /** * brief : Write data to the queue. * param : {LiteQueue *} queue: Message queue handle pointer.{uint8_t *} buff : Data to be written to the queue. * return: {LiteQueue_Status} Returns the status of the queue. * note : Writing data when the queue is full will automatically overwrite the first frame of data. */ LiteQueue_Status Write_To_LiteQueue(LiteQueue *queue, uint8_t *buff){if((queue NULL) || (buff NULL)){return LITE_QUEUE_ERR;}LITE_QUEUE_WRITE_LOCK(queue);if(isLiteQueue_Full(queue) LITE_QUEUE_FULL){return LITE_QUEUE_FULL;}memcpy(queue-tail, buff, queue-item_size);if(queue-tail (uint8_t *)queue sizeof(LiteQueue) (queue-item_num - 1) * queue-item_size){queue-tail (uint8_t *)queue sizeof(LiteQueue);}else{queue-tail queue-item_size;}queue-item_count 1;LITE_QUEUE_WRITE_UNLOCK(queue);return LITE_QUEUE_OK; }3.4 读出数据 /** * brief : Read data from queue. * param : {LiteQueue *} queue: Message queue handle pointer.{uint8_t *} buff : Data to be read from the queue. * return: {LiteQueue_Status} Returns the status of the queue. * note : Read data starting from the position of the head pointer and save it to the buff. */ LiteQueue_Status Read_From_LiteQueue(LiteQueue *queue, uint8_t *buff){if((queue NULL) || (buff NULL) || (isLiteQueue_Empty(queue) LITE_QUEUE_EMPTY)){return LITE_QUEUE_ERR;}LITE_QUEUE_READ_LOCK(queue);if(isLiteQueue_Empty(queue) LITE_QUEUE_EMPTY){return LITE_QUEUE_EMPTY;}memcpy(buff, queue-head, queue-item_size); if(queue-head (uint8_t *)queue sizeof(LiteQueue) (queue-item_num - 1) * queue-item_size){queue-head (uint8_t *)queue sizeof(LiteQueue);}else{queue-head queue-item_size;}queue-item_count - 1;LITE_QUEUE_READ_UNLOCK(queue);return LITE_QUEUE_OK; }3.5 判断队列是否为空 /** * brief : Determine whether the queue is empty. * param : {LiteQueue *} queue: Message queue handle pointer. * return: {LiteQueue_Status} Returns the status of the queue. * note : Determine whether the head and tail pointers are the same. If they are the same, it means there is no data in the queue, otherwise it means there is still data that has not been read out. */ inline LiteQueue_Status isLiteQueue_Empty(LiteQueue *queue){if(queue NULL){return LITE_QUEUE_ERR;}if( queue-item_count 0 ) {return LITE_QUEUE_EMPTY;}else{return LITE_QUEUE_NONEMPTY;} }3.6 判断队列是否为满 /** * brief : Determine whether the queue is full. * param : {LiteQueue *} queue: Message queue handle pointer. * return: {LiteQueue_Status} Returns the status of the queue. * note : Determine whether the head and tail pointers are the same. If they are the same, it means there is no data in the queue, otherwise it means there is still data that has not been read out. */ inline LiteQueue_Status isLiteQueue_Full(LiteQueue *queue){if(queue NULL){return LITE_QUEUE_ERR;}if( queue-item_count queue-item_num) {return LITE_QUEUE_FULL;}else{return LITE_QUEUE_NONFULL;} }3.7 清空队列 /** * brief : Clear the message queue. * param : {LiteQueue *} queue: Message queue handle pointer. * return: {LiteQueue_Status} Returns the status of the queue. * note : Determine whether the head and tail pointers are the same. If they are the same,it means there is no data in the queue, otherwise it means there is still data that has not been read out. */ LiteQueue_Status LiteQueue_Clear(LiteQueue *queue){if(queue NULL) {return LITE_QUEUE_ERR;}LITE_QUEUE_WRITE_LOCK(queue);queue-head (uint8_t *)((uint8_t *)queue sizeof(LiteQueue));queue-tail queue-head;queue-item_count 0;memset(queue-head, 0, queue-item_num * queue-item_size);LITE_QUEUE_WRITE_UNLOCK(queue);return LITE_QUEUE_OK; }3.8 删除队列 /** * brief : Clear the message queue. * param : {LiteQueue *} queue: Message queue handle pointer. * return: {LiteQueue_Status} Returns the status of the queue. * note : Determine whether the head and tail pointers are the same. If they are the same,it means there is no data in the queue, otherwise it means there is still data that has not been read out. */ LiteQueue_Status LiteQueue_Delete(LiteQueue *queue){if(queue NULL) {return LITE_QUEUE_ERR;}//memset((uint8_t *)queue, 0, sizeof(LiteQueue) queue-item_num * queue-item_size);free(queue);queue NULL;return LITE_QUEUE_OK; }四、测试 #include stdio.h #include stdlib.h #include string.htypedef unsigned char uint8_t; typedef unsigned int uint32_t;/* LiteQueue : Structure describing queue parameters. item_num_x: Number of items. item_size : The size of each list item set when creating the queue,unit: bytes, used to store data received in the queue. */ typedef struct { volatile uint8_t queue_write_lock;volatile uint8_t queue_read_lock;uint8_t *head; uint8_t *tail;size_t item_num; size_t item_size;size_t item_count; }LiteQueue, *pLiteQueue;typedef enum{ LITE_QUEUE_IDLE 0, LITE_QUEUE_BUSY, LITE_QUEUE_ERR, LITE_QUEUE_OK,LITE_QUEUE_EMPTY, LITE_QUEUE_NONEMPTY,LITE_QUEUE_FULL,LITE_QUEUE_NONFULL }LiteQueue_Status;typedef enum{ LITE_QUEUE_UNLOCK 0, LITE_QUEUE_LOCK, }LiteQueueLock;#define LITE_QUEUE_WRITE_LOCK(__QUEUE__) do{ \if((__QUEUE__)-queue_write_lock LITE_QUEUE_LOCK){\return LITE_QUEUE_BUSY; \} else { \(__QUEUE__)-queue_write_lock LITE_QUEUE_LOCK; \} \ }while(0) #define LITE_QUEUE_WRITE_UNLOCK(__QUEUE__) do{ \(__QUEUE__)-queue_write_lock LITE_QUEUE_UNLOCK; \ }while(0) #define LITE_QUEUE_READ_LOCK(__QUEUE__) do{ \if((__QUEUE__)-queue_read_lock LITE_QUEUE_LOCK){ \return LITE_QUEUE_BUSY; \} else { \(__QUEUE__)-queue_read_lock LITE_QUEUE_LOCK; \} \ }while(0) #define LITE_QUEUE_READ_UNLOCK(__QUEUE__) do{ \(__QUEUE__)-queue_read_lock LITE_QUEUE_UNLOCK; \ }while(0) LiteQueue *LiteQueue_Create(size_t item_num, size_t item_size); LiteQueue_Status Write_To_LiteQueue(LiteQueue *queue, uint8_t *buff); LiteQueue_Status Read_From_LiteQueue(LiteQueue *queue, uint8_t *buff); LiteQueue_Status isLiteQueue_Empty(LiteQueue *queue); LiteQueue_Status LiteQueue_Clear(LiteQueue *queue); LiteQueue_Status LiteQueue_Delete(LiteQueue *queue); LiteQueue_Status isLiteQueue_Full(LiteQueue *queue); LiteQueue_Status isLiteQueue_Empty(LiteQueue *queue); /** * brief : Create message queue. * param : {size_t } item_num : The number of list items in the queue.{size_t } item_size: The size of each list item, unit: bytes. * return: {LiteQueue *} queue : Message queue handle pointer. * note : Create a queue and initialize the queue items to 0, with the head and tail pointers pointing to the starting position of the list items. */ LiteQueue *LiteQueue_Create(size_t item_num, size_t item_size){if((item_num 1) || (item_size 1)){return NULL;}LiteQueue *queue (LiteQueue *)malloc(sizeof(LiteQueue) item_num * item_size);if( queue NULL ) {printf(LiteQueue malloc failed.\r\n);return NULL;}memset((uint8_t *)queue, 0, sizeof(LiteQueue) item_num * item_size);queue-head (uint8_t *)((uint8_t *)queue sizeof(LiteQueue));queue-tail queue-head;queue-item_num item_num;queue-item_size item_size;queue-item_count 0;queue-queue_read_lock LITE_QUEUE_UNLOCK;queue-queue_write_lock LITE_QUEUE_UNLOCK;return queue; }/** * brief : Write data to the queue. * param : {LiteQueue *} queue: Message queue handle pointer.{uint8_t *} buff : Data to be written to the queue. * return: {LiteQueue_Status} Returns the status of the queue. * note : Writing data when the queue is full will automatically overwrite the first frame of data. */ LiteQueue_Status Write_To_LiteQueue(LiteQueue *queue, uint8_t *buff){if((queue NULL) || (buff NULL)){return LITE_QUEUE_ERR;}LITE_QUEUE_WRITE_LOCK(queue);if(isLiteQueue_Full(queue) LITE_QUEUE_FULL){return LITE_QUEUE_FULL;}memcpy(queue-tail, buff, queue-item_size);if(queue-tail (uint8_t *)queue sizeof(LiteQueue) (queue-item_num - 1) * queue-item_size){queue-tail (uint8_t *)queue sizeof(LiteQueue);}else{queue-tail queue-item_size;}queue-item_count 1;LITE_QUEUE_WRITE_UNLOCK(queue);return LITE_QUEUE_OK; }/** * brief : Read data from queue. * param : {LiteQueue *} queue: Message queue handle pointer.{uint8_t *} buff : Data to be read from the queue. * return: {LiteQueue_Status} Returns the status of the queue. * note : Read data starting from the position of the head pointer and save it to the buff. */ LiteQueue_Status Read_From_LiteQueue(LiteQueue *queue, uint8_t *buff){if((queue NULL) || (buff NULL) || (isLiteQueue_Empty(queue) LITE_QUEUE_EMPTY)){return LITE_QUEUE_ERR;}LITE_QUEUE_READ_LOCK(queue);if(isLiteQueue_Empty(queue) LITE_QUEUE_EMPTY){return LITE_QUEUE_EMPTY;}memcpy(buff, queue-head, queue-item_size); if(queue-head (uint8_t *)queue sizeof(LiteQueue) (queue-item_num - 1) * queue-item_size){queue-head (uint8_t *)queue sizeof(LiteQueue);}else{queue-head queue-item_size;}queue-item_count - 1;LITE_QUEUE_READ_UNLOCK(queue);return LITE_QUEUE_OK; }/** * brief : Determine whether the queue is empty. * param : {LiteQueue *} queue: Message queue handle pointer. * return: {LiteQueue_Status} Returns the status of the queue. * note : Determine whether the head and tail pointers are the same. If they are the same, it means there is no data in the queue, otherwise it means there is still data that has not been read out. */ inline LiteQueue_Status isLiteQueue_Empty(LiteQueue *queue){if(queue NULL){return LITE_QUEUE_ERR;}if( queue-item_count 0 ) {return LITE_QUEUE_EMPTY;}else{return LITE_QUEUE_NONEMPTY;} }/** * brief : Determine whether the queue is full. * param : {LiteQueue *} queue: Message queue handle pointer. * return: {LiteQueue_Status} Returns the status of the queue. * note : Determine whether the head and tail pointers are the same. If they are the same, it means there is no data in the queue, otherwise it means there is still data that has not been read out. */ inline LiteQueue_Status isLiteQueue_Full(LiteQueue *queue){if(queue NULL){return LITE_QUEUE_ERR;}if( queue-item_count queue-item_num) {return LITE_QUEUE_FULL;}else{return LITE_QUEUE_NONFULL;} }/** * brief : Clear the message queue. * param : {LiteQueue *} queue: Message queue handle pointer. * return: {LiteQueue_Status} Returns the status of the queue. * note : Determine whether the head and tail pointers are the same. If they are the same,it means there is no data in the queue, otherwise it means there is still data that has not been read out. */ LiteQueue_Status LiteQueue_Clear(LiteQueue *queue){if(queue NULL) {return LITE_QUEUE_ERR;}LITE_QUEUE_WRITE_LOCK(queue);queue-head (uint8_t *)((uint8_t *)queue sizeof(LiteQueue));queue-tail queue-head;queue-item_count 0;memset(queue-head, 0, queue-item_num * queue-item_size);LITE_QUEUE_WRITE_UNLOCK(queue);return LITE_QUEUE_OK; }/** * brief : Clear the message queue. * param : {LiteQueue *} queue: Message queue handle pointer. * return: {LiteQueue_Status} Returns the status of the queue. * note : Determine whether the head and tail pointers are the same. If they are the same,it means there is no data in the queue, otherwise it means there is still data that has not been read out. */ LiteQueue_Status LiteQueue_Delete(LiteQueue *queue){if(queue NULL) {return LITE_QUEUE_ERR;}//memset((uint8_t *)queue, 0, sizeof(LiteQueue) queue-item_num * queue-item_size);free(queue);queue NULL;return LITE_QUEUE_OK; }/** * brief : Print the contents of each list item in the queue. * param : {LiteQueue *} queue: Message queue handle pointer. * return: None. */ static void PrintLiteQueue(LiteQueue *queue){if(queue NULL){return ;}for(int i 0; i queue-item_num; i){printf([item_num:%d] , i);for(int n 0; n queue-item_size; n){printf(%d , *((uint8_t *)queue sizeof(LiteQueue) i * queue-item_size n));}printf(\r\n);} }/** * brief : Print the data in buff. * param : {LiteQueue *} queue: Message queue handle pointer. * return: None. * note : Used to observe buff data changes and test to verify the correctness of written or read data. */ static void PrintBuff(uint8_t *buff, size_t len){if((buff NULL) || (len 1)){return ;}printf(Read buff:);for(size_t i 0; i len; i){printf(%d , buff[i]);}printf(\r\n\r\n); }int main(){uint8_t writebuff[10] {0};uint8_t readbuff[10] {0};/* Create message queue, 4 list items, each list item has 10 bytes of memory space */pLiteQueue msgQueue LiteQueue_Create(4, 10);PrintLiteQueue(msgQueue);printf(\r\n);/* Simulate writing and reading to the queue 6 times, and observe the data in the queue by printing */for(int i0;i6;i ) {/* Simulate data, change the writebuff data and write it to the queue */for(int n 0; n msgQueue-item_size; n){writebuff[n] (i * msgQueue-item_size n) % 256;}/* Data is written to the queue */Write_To_LiteQueue(msgQueue, writebuff);PrintLiteQueue(msgQueue);/* Read data from queue */Read_From_LiteQueue(msgQueue, readbuff);PrintBuff(readbuff, sizeof(readbuff));}return 0; }参考 https://mp.weixin.qq.com/s/vI3g4JmSXMyKrpnIV1vjbg

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

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

相关文章

工业和信息化部网站备案系统是什么无线网网址是什么

win7访问Linux Samba的共享目录提示“登录失败:用户名或密码错误”解决方法 解决办法:修改本地安全策略 通过Samba服务可以实现UNIX/Linux主机与Windows主机之间的资源互访,由于实验需要,轻车熟路的在linux下配置了samba服务&…

宝安网站建设深圳信科亚马逊全球开店app下载

回归预测 | Matlab实现WOA-CNN-SVM鲸鱼算法优化卷积神经网络-支持向量机的多输入单输出回归预测 目录 回归预测 | Matlab实现WOA-CNN-SVM鲸鱼算法优化卷积神经网络-支持向量机的多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.WOA-CNN-SVM鲸鱼算法…

博客网站开发背景推广品牌的方法

目录 堆排序 整体思路 代码实现 Q1建大堆/小堆 Q2数据个数和下标 TopK问题 整体思路 代码实现 Q1造数据CreateData Q2建大堆/小堆 建堆的两种方法这里会用到前面的向上/向下调整/交换函数。向上调整&向下调整算法-CSDN博客 堆排序 整体思路 建堆(直…

网站建设整个流程图让搜索引擎收录网站

作为一个新手,配置这个yum源配了4天,遇到了各种问题,也按照网络上面一些方法在163上面下载CentOS6的yum源来替换Redhat本地的yum源,但是配置过程中,出现很多错误,发现直接在本地配置yum源会更便捷一点&…

亚成成品网站源码企业网站建设湖南岚鸿

古雷150万吨乙烯,为啥叫芒果项目?福建石油化工集团有限责任公司9月1日在福州举行的一场新闻通气会上透露,石化基地引进世界化工巨头——沙特基础工业公司(简称SABIC),合资合作共建中沙古雷乙烯项目。中沙古雷乙烯项目将在福建古雷…

网站建设免费建站源代码沧州市住房和城乡建设局网站

Java可执行命令之jinfo 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用3.1 语法格式3.2 -flags&#xff1a;查看进程的启动参数3.3 -sysprops&#xff1a;查看进程的系统属性3.4 -flag < name>&#xff1a;查看特定虚拟机参数的值3.5 -flag [/-]< name>&#xff1a;启用或禁…

网站建设seo视频教程物流信息网站建设

发展历程-http组成-http是什么-相关的应用-相关的协议 参考来源&#xff1a; 极客时间-透视HTTP协议(作者&#xff1a;罗剑锋)&#xff1b; 01-HTTP的发展历程 1989 年&#xff0c;任职于欧洲核子研究中心&#xff08;CERN&#xff09;的蒂姆伯纳斯 - 李&#xff08;Tim Ber…

网站是做流程网站建设基础报告

一 内网环境安装docker 先在外网环境下载好docker二进制文件docker二进制文件下载&#xff0c;要下载对应硬件平台的文件&#xff0c;否则不兼容 如下载linux平台下的文件&#xff0c;直接访问这里即可linux版本docker二进制文件 这里下载docker-24.0.5.tgz 将下载好的文件…

做资讯类网站需要什么资质网站开发用什么图片格式最好

一、直接插入排序基本思想 直接插入排序(straight insertion sort)的做法是&#xff1a;每次从无序表中取出第一个元素&#xff0c;把它插入到有序表的合适位置&#xff0c;使有序表仍然有序。第一趟比较前两个数&#xff0c;然后把第二个数按大小插入到有序表中&#xff1b; 第…

如何自己做企业网站网页搜索一个网站全包

人情世故是我们日常生活中积累的约定俗成的行为规则&#xff0c;属于社会知识的范畴。这些知识大半来源于与不同人群的社会交际&#xff0c;也来源于社会冲突与社会发展。在有专业知识与技能的情况下&#xff0c;人情世故能够帮助我们个人缓和与其他人之间的紧张度&#xff0c;…

企业网站如何建立wordpress广告链接不跳转

一、什么是AJAX 1.AJAX 就是异步的JS和XML。通过AJAX 可以在浏览器中向服务器发送异步请求&#xff0c;最大的优势&#xff1a;无刷新获取数据。AJAX 不是新的编程语言&#xff0c;而是一种将现有的标准组合在一起使用的新方式。 2.XML 可扩展标记语言。XML被设计用来传输和…

中文旅游网站html模板天津网站排名提升多少钱

目录 一、Tomcat 介绍 二、Tomcat 核心技术和组件 2.1、Web 容器&#xff1a;完成 Web 服务器的功能 2.2、Servlet 容器&#xff0c;名字为 catalina&#xff0c;用于处理 Servlet 代码 2.3、JSP 容器&#xff1a;用于将 JSP 动态网页翻译成 Servlet 代码 Tomcat 功能组件…

网站的构成元素做网站线稿软件有哪些

这两天在研究整理上课数据库和web要求安装操作的软件 晚点再写下去 1.SQL server 2012 安装的过程中出现不少问题&#xff0c;根据网上的教程以及老师发的实验指导书首先安装SQL server (1)在安装规则检测之后&#xff0c;没有按照步骤进入下一步——设置角色&#xff1b; …

免费自助建站系统下载营销最好的方法

XPath语法规则及实例 XPath语法规则一、XPath术语&#xff1a; 1.节点&#xff1a;在XPath中&#xff0c;有七种类型的节点&#xff1a;元素、属性、文本、命名空间、处理指令、注释以及文档&#xff08;根&#xff09;节点。 XML文档是被作为节点树来对待的。树的根被称为文档…

佛山制作网站公司吗国外网站建立

在Hive中使用Python编写的UDF函数&#xff0c;需要通过Hive的brickhouse库来实现。brickhouse库提供了一种将Python UDF函数与Hive集成的方法。以下是一个简单的示例&#xff0c;演示如何在Hive中使用Python编写的UDF函数transform&#xff1a; 首先&#xff0c;您需要安装bri…

网站建设项目进展情况网络加盟

第三章总结 栈与队列都是特殊的限制型的线性表&#xff0c;通常没有查询这个操作 栈的特点就是先进后出&#xff0c;只可以在栈顶进行插入删除&#xff0c;顺序栈定义指向栈顶与栈底的指针&#xff08;方便判断栈的情况&#xff09;也可以只定义一个栈顶指针top然后通过top-1来…

鞍山网站制作人才招聘专业建站源码

MATLAB目前只支持Nvidia的显卡。如果你的显卡是AMD的或者是Intel的&#xff0c;就得考虑另寻它路了。 MATLAB可谓工程计算中的神器&#xff0c;一方面它自带丰富的函数库&#xff0c;另一方面它所有的数据都是内建的矩阵类型&#xff0c;最后画图也方便&#xff0c;因此解决一…

如何建立免费微网站wordpress 按时间倒序

在Linux系统中&#xff0c;环境变量LANG、LC_MESSAGES和LC_ALL用于控制系统和应用程序的语言和区域设置&#xff08;locale&#xff09;。它们的具体作用如下&#xff1a; LANG&#xff1a; LANG是最基本的环境变量&#xff0c;用于指定系统的默认语言和区域设置。它是一个全局…

网站建设 互成网络开发公司交的农民工工资保证金可以退还吗

前言 前面我们讲了C语言的基础知识&#xff0c;也了解了一些数据结构&#xff0c;并且讲了有关C的一些知识&#xff0c;也相信大家都掌握的不错&#xff0c;今天博主将会新开一个Linux专题&#xff0c;带领大家继续学习有关Linux的内容。今天第一篇文章博主首先带领大家了解一下…

龙岗英文网站建设广州做企业网站找哪家公司好

冷链&#xff0c;即冷冻冷藏供应链的简称&#xff0c;泛指冷藏冷冻类食品从原材料供应物流、食品工厂内生产物流、贮藏运输物流至贩卖销售物流等&#xff0c;各个环节中始终处于规定的低温环境下&#xff0c;以保证食品质量&#xff0c;减少食品损耗的一项系统工程 。随着科学技…