当前位置: 首页 > news >正文

SpringBoot实现自己的日志服务

日志服务是作为软件开发架构的必备服务之一,一直都是我们所关注,所考虑的服务关键点,一个优秀的日志服务可以为项目的维护提供有力的支持,提高了系统的可靠性。

前言

如何设计一个优秀而又可靠的日志服务,是一直以来都是一个很难的课题,写本文的目的起源于大学时期做的一个项目,那时候后台部署到阿里云上,每次遇到Error的问题的时候都需要登陆服务器查看,非常的麻烦,于是我就突发奇想为什么不对Spring的日志进行拦截,展示到前端界面呢?于是就产生了这个项目。

开工

在开始之前,我们需要捋清楚,我们的需求是什么?通过思考,我们得知,我们的需求是能够实时获取系统输出日志,并展示到我们的前端,用于运维和问题排查。

在明确了目的之后,我们可以开始了开发工作,首先是技术选型,我们所选择的是SpringBoot + Vue来搭配。鉴于写文本的时候Vue3已经发布了,所以才用的是最新的Vue3来进行开发。

代码部分

前端

前端所选用的通信技术为:Vue3 + Websocket,日志通过Websocket实时同步到前端,具体实现如下。

mounted() {this.res = document.getElementById('terminal-console');this.websocket = new WebSocket("ws://127.0.0.1:8080/websocket/logger");this.renderConsole()this.connect()},

1.渲染代码架子。

2.建立Websocket链接。

3.渲染控制台

4.建立链接,开始接收日志,这里由于前端篇幅问题,我就直接放核心代码了,后续如果需要进一步的可以前往github进行下载。

connect() {this.res.appendChild(this.createDivElement('通道连接成功,静默等待....'))const _this = this;if (this.websocket != null) {this.websocket.open = function () {this.websocket.send("数据发送");};this.websocket.onmessage = function (event) {// 处理日志const content = JSON.parse(event.data);let levelHtml = _this.createSpanElement(content.level, '#90ad2b');const className =  _this.createSpanElement(content.className, '#229379')switch (content.level) {case 'DEBUG':levelHtml = _this.createSpanElement(content.level, '#A8C023');break;case 'WARN':levelHtml = _this.createSpanElement(content.level, '#fffa1c');break;case 'ERROR':levelHtml = _this.createSpanElement(content.level, '#e3270e');break;}const logger = _this.createDivElement(content.timestamp)logger.appendChild(levelHtml)logger.innerHTML = logger.innerHTML + " --- [" + content.threadName + "] "logger.appendChild(className)logger.innerHTML = logger.innerHTML + " :" + content.body_this.res.appendChild(logger)}}}

后台

后台部分实现思路如下:

1.在logger.xml配置文件中配置日志拦截器,同时实现拦截器类,下方的filter就是我们的实现的过滤器。

%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n

2.紧接着就是实现过滤的能力,这块就不用说了,就是实现了logger的过滤能力,其思路就是继承logback的Filter,实现过滤方法,在过滤过程中提取关键字,并写入队列。

@Service
public class LogFilter extends Filter {@Overridepublic FilterReply decide(ILoggingEvent event) {String exception = "";IThrowableProxy iThrowableProxy1 = event.getThrowableProxy();if (iThrowableProxy1 != null) {exception = "" + iThrowableProxy1.getClassName() + " " + iThrowableProxy1.getMessage() + "
";for (int i = 0; i < iThrowableProxy1.getStackTraceElementProxyArray().length; i++) {exception += "" + iThrowableProxy1.getStackTraceElementProxyArray()[i].toString() + "
";}}// 创建日志消息LoggerMessage loggerMessage = new LoggerMessage(event.getMessage(), DateFormat.getDateTimeInstance().format(new Date(event.getTimeStamp())),event.getThreadName(),event.getLoggerName(),event.getLevel().levelStr,exception,"");// 写入非阻塞队列LoggerQueue.getInstance().push(loggerMessage);return FilterReply.ACCEPT;}
}

3.写入过后呢,就由websocket类,来实时提取返回给前端,核心代码如下,其实就是建立一个线程池,不停的去获取队列的内容,如果有的话就返回给前端,如果没有就跳过(当然这样实现很挫,最好呢是吧消息丢进消息队列,然后有一个服务端去异步消费个前端)。

public void send() {ExecutorService executorService= Executors.newFixedThreadPool(2);Runnable runnable= () -> {while (true) {try {LoggerMessage log = LoggerQueue.getInstance().poll();if(log!=null){sendInfo(JSON.toJSONString(log), "logger");}} catch (Exception e) {e.printStackTrace();}}};executorService.submit(runnable);}

结束

通过上面一顿操作,我们基本完成了,一个日志服务的搭建过程,不过这里还是有不足的,比如利用消息队列来中转日志消息,这样可以避免开线程给服务器造成无关的压力。

代码仓库

https://github.com/zeusguan/zeus 基于Spring+Vue的日志监控日志

代码还在持续更新,MQ版本已经在路上了,敬请期待,下一步会用消息队列来取代循环提取。

相关文章:

Maven多模块工程提示其它模块依赖找不到(明明已经添加)

查看有没有重复标记文件夹!!!(我的就是这样)...

MySQL变量的定义与使用(一)

一、标识符的命名规范 1、不能以数字开头 2、不能使用关键字 3、只能使用_和$符号&#xff0c;不允许使用其他符号 二、定义MySQL变量的方法 set userName"鹅卵石"; #读取变量 select userName as 名称; #读取时包含赋值操作 select userName:喜羊羊 as 赋值查询名…...

黑马苍穹外卖

sky-pojo子模块内容 Entity&#xff1a;实体&#xff0c;通常和数据库中的表对应DTO&#xff1a;数据传输对象&#xff0c;通常用于程序中各层之间传递数据&#xff08;eg&#xff1a;前端返回的json数据&#xff0c;后端要接收&#xff0c;并且转化为java对象&#xff0c;此时…...

vite 项目批量引入文件

技术栈 vite@5.1.4,vue@3.4.19 背景 项目开发中,想要全局注册 comps 文件夹下的组件,有两种方式 1. 在 main 文件中,将组件一个个引入后注册 2. 在 comps 文件夹下,添加 index.js 引入并导出所有组件。在 main 文件中批量引入遍历注册 问题 为了 main 文件的美好观感(代码…...

let命令

let 命令 let 与 var 二者区别&#xff1a; 作用域不同&#xff1a;变量提升&#xff08;Hoisting&#xff09;&#xff1a;临时性死区重复声明&#xff1a; 联系&#xff1a;举例说明&#xff1a; 块级作用域 块级作用域的关键字使用 var&#xff08;无块级作用域&#xff09;…...

Windows平台使用CMake+MinGW64编译OpenCV

Windows平台使用CMake+MinGW64编译OpenCV (注:2年前写的笔记, 可能有些地方过时了) 目录Windows平台使用CMake+MinGW64编译OpenCV1.安装及配置环境1.1 MinGW-w641.2 CMake1.3 OpenCV源码2.CMake配置及生成2.1 新建目录2.2 CMake-GUI2.3 编译配置2.4 生成2.5 Make编译和安装3.配…...

SpringBoot实现自己的日志服务

日志服务是作为软件开发架构的必备服务之一&#xff0c;一直都是我们所关注&#xff0c;所考虑的服务关键点&#xff0c;一个优秀的日志服务可以为项目的维护提供有力的支持&#xff0c;提高了系统的可靠性。 前言 如何设计一个优秀而又可靠的日志服务&#xff0c;是一直以来都…...

基于ssm流浪动物救助及领养管理系统(文档)024

大家好✌&#xff01;我是CZ淡陌。一名专注以理论为基础实战为主的技术博主&#xff0c;将再这里为大家分享优质的实战项目&#xff0c;本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路…...

maven安装及配置(IDEA版)简洁

1.下载Maven&#xff1a;您可以从Maven官方网站&#xff08;https://maven.apache.org/download.cgi&#xff09;下载适合您操作系统的Maven版本&#xff0c;并解压缩到您想要安装的位置。 2.配置环境变量&#xff1a;将Maven的bin目录添加到PATH环境变量中&#xff0c;这样…...

最全Linux应用开发解析(持续更新)

一、文件IO 1.1 文件描述符 在 Linux 操作系统中的一切都被抽象成了文件&#xff0c;那么一个打开的文件是如何与应用程序进行对应呢&#xff1f; 解决方案是使用文件描述符&#xff08;file descriptor&#xff0c;简称fd&#xff09;&#xff0c;当在进程中打开一个现有文…...

SpringBoot学习笔记下

文章目录1 接口架构风格 —RESTful1.1 REST1.2 在页面中或者ajax中&#xff0c;支持put&#xff0c;delete请求2 Spring Boot 集成 Redis2.1 redis起步依赖2.2 对比 StringRedisTemplate 和 RedisTemplate3 SpringBoot集成Dubbo3.1 看 SpringBoot继承Dubbo的文档3.2 公共项目7.…...

小米12/12S/13Pro手机MIUI14系统小黄鸟(HttpCanary)CA证书无法注入问题

很多用户获取ROOT是为了抓包&#xff0c;这里一般常常依赖一款名叫HttpCanary的软件&#xff0c;因软件 图标是一只小鸟&#xff0c;我们经常叫他小黄鸟。从日常使用上来看&#xff0c;黄鸟确实有抓包获取数据等 功能&#xff0c;也在多个手机上实践成功&#xff0c;网上相关教…...

SpringCloud学习笔记(四)Docker

一、Docker如何解决依赖的兼容问题 将应用的libs&#xff08;函数库&#xff09;、Deps&#xff08;依赖&#xff09;、配置与应用一起打包&#xff0c;形成可移植镜像Docker应用运行在容器中&#xff0c;使用沙箱机制&#xff0c;相互隔离 二、Dokcer如何解决开发、测试、生…...

SAP 批量修改 工艺路线 和 BOM

1、在运维的过程中经常会遇到用户需要批量更改组件&#xff0c;或者是批量更改数量&#xff0c;还是组件里面的一些标识&#xff0c;当处理这些批量数据处理的业务时&#xff0c;BOM的批量更改一个想到的就是CS20&#xff0c;但是CS20当BOM需要替换的时候就不是很适用。新增的组…...

基于OpenTelemetry实现可观测性-Part 4 Collector

译注&#xff1a;这是一个系列&#xff0c;共分成6部分&#xff0c;这是第4部分。翻译自&#xff1a;https://trstringer.com/otel-part4-collector/在上一篇博文中&#xff0c;我们讨论了如何使用 SDK 和追踪器提供者从进程获取遥测数据。存在很多不同类型的导出器&#xff0c…...

STM32学习(十二)

软件定时原理 使用纯软件&#xff08;CPU死等&#xff09;的方式实现定时&#xff08;延时&#xff09;功能。 不精准&#xff1a;函数调用压栈进栈需要耗费额外的时间&#xff1b;流水线使得程序执行时间不确定。CPU死等。 定时器定时原理 使用精准的时基&#xff0c;通过…...

Python毕业设计推荐

今天给大家推荐4个基于python的毕业设计/课程设计 1 网上商城系统 这是一个基于pythonvue开发的商城网站&#xff0c;平台采用B/S结构&#xff0c;后端采用主流的Python语言进行开发&#xff0c;前端采用主流的Vue.js进行开发。 整个平台包括前台和后台两个部分。 前台功能…...

组装式交付-云巧 知多少

组装式交付-云巧 知多少组装式交付背景云巧什么是云巧呢&#xff1f;云巧的优势丰富的组件&#xff0c;提升代码复用全面的集成方式&#xff0c;支持模块化组装云原生标准&#xff0c;预集成阿里云产品云巧的构成云巧组件云巧资产市场云巧生态云巧工坊总结组装式交付背景 一直…...

「解析」牛客网-华为机考企业真题 41-60

又是一年春招时&#xff0c;有幸收到华为自动驾驶算法岗&#xff0c;之前刷题不多&#xff0c;在此汇总下牛客网的真题&#xff0c;主要采用Python编写&#xff0c;个人觉得语言只是实现工具而已&#xff0c;并不是很关键&#xff0c;Python简洁易懂&#xff0c;更加适合算法工…...

RPA机器人在信息化管理、报告生成实现自动化成为生态环境局新宠

随着人们对环境和自然资源的保护意识逐渐增强&#xff0c;我国在环保领域的投入力度也越来越大。然而&#xff0c;环境保护任务的繁重与复杂&#xff0c;也意味着环保执法机关需要更加高效、精准的手段来完成任务。这时&#xff0c;“机器人流程自动化”&#xff08;简称RPA&am…...

关于线程池你了解些什么?

前言学习线程池的思维导图线程池是什么?它有什么用?虽然线程比进程更轻量级,但是每个进程所占的资源空间是有限,如果我们频繁创建和销毁线程也会消耗很多CPU资源,那么我们该如何解决这个问题呢?官方解释:线程池是一种多线程处理形式,其处理过程可以将多个任务添加到阻塞队列…...

基于MATLAB编程的萤火虫改进帝国竞争算法求解多目标优化,FA-ICA目标寻优

目录 背影 帝国竞争 基本定义 优点 萤火虫原理 改进思路 基于萤火虫改进帝国竞争多目标求解 代码 结果分析 展望 背影 多目标多参数优化是常遇到的优化问题,有很多传统算法可以求解,比如fiminmax,fmincon等,但是都容易陷入局部最优,本文用帝国竞争优化萤火虫算法进行多目…...

低代码开发:助力企业高效实现数字转型的一大利器

随着互联网、移动互联网、物联网等技术的迅速普及和应用&#xff0c;数字经济时代的到来&#xff0c;人们的生产、消费和生活方式都发生了巨大的变化&#xff0c;而传统企业也面临着巨大的挑战和机遇。 在数字经济时代&#xff0c;数据成为一种重要的生产要素。数据成为一种重要…...

centos7安装mysql并添加密码

网上找的教程有的是不能用&#xff0c;有的是改密码有问题&#xff0c;下面这个教程亲测可用 #安装wget,wget是Linux中的一个下载文件的工具 yum -y install wget #使用wget下载文件 wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-com…...

大数据未来发展怎么样?

就目前情况来看&#xff0c;大数据行业前景不错薪资待遇好&#xff0c;也有越来越多的人选择大数据行业&#xff0c;各大名企对于大数据人才需求不断上涨。 大数据从业领域很宽广&#xff0c;不管是科技领域还是食品产业&#xff0c;零售业等都是需要大数据人才进行大数据的处…...

图书管理系统(考试样品)

一、执行下面的sql CREATE DATABASE bms CHARACTER SET utf8mb4;USE bms;DROP TABLE IF EXISTS tb_book;CREATE TABLE tb_book (id INT NOT NULL AUTO_INCREMENT,name VARCHAR(20) NOT NULL,desc TEXT ,type_id INT DEFAULT NULL,PRIMARY KEY (id) ) ; INSERT INTO tb_book VA…...

树与二叉树(图示超详解哦)

这里写目录标题引言树与二叉树树的概念及结构树的表示二叉树特殊的二叉树二叉树的性质二叉树的表示顺序结构链式结构总结引言 在前面的一段时间里&#xff0c;我们学习了顺序表、链表、栈、队列的知识。其实这些顺序结构都是线性的&#xff0c;它们的逻辑结构都是一条线穿起来…...

【vue3】数据绑定,动态渲染class与style

数据绑定的一个常见需求场景是操纵元素的 CSS class 列表和内联样式&#xff08;style&#xff09;。因为 class 和 style 都是 attribute&#xff0c;我们可以和其他 attribute 一样使用 v-bind 将它们和动态的字符串绑定。但是&#xff0c;在处理比较复杂的绑定时&#xff0c…...

axios使用

参考地址&#xff1a;https://github.com/axios/axios html CDN <script src"https://cdn.jsdelivr.net/npm/axios1.1.2/dist/axios.min.js"></script>或者 <script src"https://unpkg.com/axios1.1.2/dist/axios.min.js"></scrip…...

countup.js 数字动画

countup.js 数字动画1. 安装2. 参数3. Vue组件封装3.1 组件代码3.2 调用方式1. 安装 npm i countup.js2. 参数 项目Valuetargetstring, HTMLElement ,HTMLInputElement - id of html element, input, svg text element, or DOM element reference where counting occursendV…...

10个问题带你全面理解Linux性能优化

1. 为什么面试官喜欢考察性能优化问题&#xff1f; 面试官考察性能优化问题的目的可能并不是要你设计一个性能很高的系统&#xff0c;而是为了全方位考察一个面试者的知识背景和实践能力。 1) 性能优化涉及的知识面既需要深度&#xff0c;同时又需要一定的广度 从深度上来说…...

php使用yield处理大数据文件

1.概述 yield和return有点像&#xff0c;它是一个生成器&#xff0c;对PHP应用的性能有非常大的影响&#xff0c; 只有在调用的时候才会执行&#xff0c;并不产生多余的值&#xff0c;比如读取一个很大的文件或者计算大量的数据时&#xff0c;如果直接读取很有可能内存就爆了&a…...

数据更新 | CnOpenData法拍房数据

法拍房数据 一、数据简介 法拍房&#xff0c;即“法院拍卖房产”&#xff0c;是被法院强制执行拍卖的房屋 。当债务人&#xff08;业主&#xff09;无力履行借款合约或无法清偿债务时&#xff0c;而被债权人经司法程序向法院申请强制执行&#xff0c;将债务人名下房屋拍卖&…...

(一)kafka从入门到精通之初识kafka

一、发布订阅系统 在学习kafka之前&#xff0c;我们先来看看什么是发布订阅系统。 概念 数据的发送者不会直接把消息发送给接收者&#xff0c;这是发布与订阅消息系统的一个特点。发布者以某种方式对消息进行分类&#xff0c;接受者订阅它们&#xff0c;以便接受特定类型的消…...

stata17中double类型与float类型的区别(变量的存储格式和显示格式、数值运算出错、转换数值格式、字符型数据转换为数值型数据)

double类型与float类型区别 参考&#xff1a;变量的存储格式和显示格式 数值运算出错 因为营业总收入和其他业务收入都是字符型数据&#xff0c;所以使用real函数将其转换为数值型数据。 gen 主营业务收入 real(营业总收入)-real(其他业务收入)结果如下图所示&#xff1a;计…...

【JVS低代码配置平台】基于树形字典的纯配置实现左树右表

左树右表是我们在业务管理系统中常见的业务形态&#xff0c;如下图所示&#xff0c;树形结构用于多层级的数据的展示&#xff0c;列表页作为对应数据的横向行级展现。 实现树形的配置有两种模式&#xff0c;一种是根据树形字典配置&#xff08;简单导入即可&#xff09;&#x…...

Spring Boot实现Redis同数据源动态切换DB | Spring Cloud 31

一、前言 在某些业务场景下&#xff0c;需要多访问同一Redis数据源下的不同DB。 在Redis中默认提供了16个数据库&#xff08;序号0-15&#xff09;&#xff0c;默认Redis使用的是db 0。 此章节基于spring-boot-starter-data-redis模块&#xff0c;实现了Redis同数据源动态切换…...

[技术经理]02 什么是技术经理?

目录01什么是技术经理02总结01什么是技术经理 什么是技术经理&#xff1f; 我用一句话概括为&#xff1a;专业技术团队的管理者。 技术经理&#xff0c;是一种管理职位&#xff0c;通常是在软件开发、互联网等科技公司或技术团队中担任。 技术经理的职责&#xff0c;**是管理…...

油炸食品的最佳用油:米糠油

摘要&#xff1a;本文详细介绍了米糠油作为最佳油炸用油的各种特点&#xff0c;但更重要的是建议采用真空油炸方法&#xff0c;更能发挥米糠油的优势。 油炸食品是我们日常生活中常见的美味&#xff0c;人们普遍的共识是“油炸食品虽然好吃&#xff0c;但不适合多吃”&#xff…...

【C++】queue和priority_queue的成员函数和非成员函数

目录 1. queue 1.1 queue的成员函数 1.1.1 构造函数 1.1.2 判空 1.1.3 大小 1.1.4 队头 1.1.5 队尾 1.1.6 入队 1.1.7 emplace 1.1.8 出队 1.1.9 交换 1.2 queue的非成员函数 1.2.1 关系运算符重载 1.2.2 交换 2. priority_queue 2.1 priority_queue的成员函数…...

韩长赋在第七届杭州全球企业家论坛开幕式上讲话

今天我们相聚在美丽的西子湖畔&#xff0c;隆重举办“第七届杭州全球企业家论坛暨中国消费品博览会”&#xff0c;旨在凝聚发展力量&#xff0c;共创合作未来。 今年是全面贯彻落实党的二十大精神的开局之年&#xff0c;是全面建设社会主义现代化国家&#xff0c;加快建设农业强…...

webpack+nginx开启gzip压缩部署项目

首先在服务器安装nginx sudo apt update sudo apt install nginx 安装完毕后将前端项目打包 webpack.output.publicPath里配置资源基础路径 资源打包出来就是/publicPath开头 1.http://www.xxx.com/ publicPath: / 2.http://www.xxx.com/web publicPath: /web/ 尾巴多加个/…...

coco 2017数据集 类别提取并转换为yolo数据集

coco 2017数据集提取和转换本次分割的动物数据集 4G一. coco2017数据集结构标注文件解析二. 提取需要的类别重新封装成coco数据集&#xff08;这里以动物类别为例&#xff09;三. 转换为yolo 数据集本次分割的动物数据集 4G https://download.csdn.net/download/qq_26696715/8…...

jdk线程池技术

jdk线程池ThreadPoolExecutor的7个参数 public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler) {if (corePoolSize &l…...

keepalived+nginx 双机热备搭建

keepalivednginx 双机热备搭建一、准备工作1.1 准备两台centos7.91.2 nginx 与 keepalived软件 双机安装1.3 ip分配1.4 修改主机名1.5 关闭selinux&#xff08;双机执行&#xff09;1.6 修改hosts&#xff08;双机执行&#xff09;二、安装keepalived2.1 执行一下命令安装keepa…...

【云原生】容器编排技术Docker Compose

为什么需要Docker ComposeDocker Compose介绍Docker Compose安装Docker Compose版本介绍Docker Compose基本命令介绍Docker Compose实战Docker Compose Yml文件介绍总结为什么需要Docker Compose Docker帮助我们解决服务的打包安装的问题&#xff0c;随着而来的问题就是服务过…...

String、StringBuilder、StringBuffer的四大区别解析

面试官问&#xff1a;String、StringBuilder、StringBuffer有什么区别么&#xff1f; 这个问题是个高频问题&#xff0c;所以今天从源码上进行深度刨析他们的区别。 如何回答&#xff1a; 从四个点出发&#xff1a; 1、可变/不可变类 String是不可变类。他被被final修饰&…...

【C#进阶】C# 匿名方法

序号系列文章18【C#进阶】C# 事件19【C#进阶】C# 集合类20【C#进阶】C# 泛型文章目录前言1、什么是匿名方法&#xff1f;2、delegate 运算符3、Lambda 表达式3.1、Lambda 表达式的自然类型3.2、Lambda 表达式的显示返回类型4、关于匿名方法的总结结语前言 &#x1f4fa; hello大…...

C++并发编程之二 在线程间共享数据

文章目录1.1 互斥锁&#xff08;mutex&#xff09;保护共享数据1.1.1 std::mutex 的成员函数 std::mutex::lock() 和std::mutex::unlock() (不推荐使用)1.1.2 使用std::lock_guard保护共享数据1.1.3 使用std::unique_lock保护共享数据1.2 保护共享数据的其他方式1.2.1 初始化过…...

FL Studio和Cubase哪个容易一些 FL Studio和Cubase修音哪个好

FL Studio和Cubase哪个容易一些&#xff1f;FL Studio是很适合新手使用的宿主软件。FL Studio和Cubase修音哪个好&#xff1f;FL Studio和Cubase在修音方面各有千秋。 一、FL Studio和Cubase哪个容易一些 FL Studio是很适合新手上手的宿主软件&#xff0c;这得益于FL Studio独…...

限定学校|在站博士后省公派新加坡国立大学从事博后研究

Y博士为国内在站博士后&#xff0c;我们向其推荐了人社部博管办国外博士后派出项目及所在省的相关项目&#xff0c;最终助其获得新加坡国立大学的博士后邀请函&#xff0c;鉴于该导师名列全球高被引科学家榜单&#xff0c;顺利获批省国际培养博士后资助项目&#xff0c;如期出国…...

信息技术最全总结(备考教资)

信息技术 备考教资信息技术知识点总结&#xff0c;欢迎收藏&#xff01;需要xmind和备考书籍的可以评论区留言。 第一部分-学科专业知识 第一章-信息技术基础知识 信息与信息技术概述 信息概述 信息的定义 信息本身不是实体信息是通过文字、数字、图像、图形、声音、视频等方…...

spring5(三):IOC操作Bean管理(基于xml方式)

IOC操作Bean管理&#xff08;基于xml方式&#xff09;前言一、基于 xml 方式创建对象二、基于 xml 方式注入属性1. 使用 set 方法进行属性注入2. 使用有参数构造进行属性注入3. p 名称空间注入简化操作&#xff08;了解&#xff09;三、xml 注入其它类型属性1. 字面量2. 注入属…...

Vue的快速上手

一、创建一个 Vue 应用 前提条件 熟悉命令行已安装 16.0 或更高版本的 Node.js在本篇中&#xff0c;我们将介绍如何在本地搭建 Vue 单页应用。创建的项目将使用基于 Vite 的构建设置&#xff0c;并允许我们使用 Vue 的单文件组件 (SFC)。 确保你安装了最新版本的 Node.js&…...

通过ELK+kafka采集微服务日志

在springboot微服务中采集日志推送kafka背景整体流程图快速搭建kafkazk开发环境通过logback记录日志到kafka快速搭建ELK环境Kibana查看&#xff0c;统计日志背景 在分布式的项目中&#xff0c;各功能模块产生的日志比较分散&#xff0c;同时为满足性能要求&#xff0c;同一个微…...

开启新航路,拓尔思发力AIGC市场 | 爱分析调研

2022年&#xff0c;随着AI聊天机器人GhatGPT在世界范围内持续火爆&#xff0c;极具创意、表现力、个性化且能快速迭代的AIGC技术成功破圈&#xff0c;成为全民讨论热点。 AIGC是指在确定主题下&#xff0c;由算法模型自动生成内容&#xff0c;包括单模态内容如文本、图像、音频…...

【MongoDB】安装与使用

前两篇文章介绍了前端vuevite&#xff0c;后端fastapi&#xff0c;这篇文章为项目搭建数据库。数据库选用MongoDB。如果你还没看过前两篇&#xff0c;你可以去看一下&#xff1a; 【Vue】搭建第一个vue3vite前段项目 【fastapi】搭建第一个fastapi后端项目 选择版本 官网最新…...

【力扣】41. 缺失的第一个正数

41. 缺失的第一个正数 题目描述 给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,0]输出&#xff1a;3解释&#xf…...

MySQL#MySql表的操作

目录 一、创建表 二、查看表结构 三、修改表 1.修改表的名字 2.新增一个列 3.修改列 4.删除列 5.修改列的名称 四、删除表 一、创建表 语法&#xff1a; CREATE TABLE table_name (field1 datatype,field2 datatype,field3 datatype ) character set 字符集 collate 校…...

一、写给Android开发者之harmony入门

一、创建新项目 对比 android-studio&#xff1a;ability类似安卓activity ability分为两种类型(Stage模型) UIAbility和Extensionability&#xff08;提供系统服务和后台任务&#xff09; 启动模式 1、 singleton启动模式&#xff1a;单例 2、 multiton启动模式&#xff1…...

财政部、交通运输部:推动北斗导航等新技术与交通基础设施融合

财政部、交通运输部&#xff1a;推动北斗导航等新技术与交通基础设施深度融合 近日&#xff0c;为深入贯彻落实中共中央、国务院关于加快建设交通强国、数字中国等决策部署&#xff0c;推进公路水路交通基础设施数字转型、智能升级、融合创新&#xff0c;加快发展新质生产力&a…...

MATLAB 函数

MATLAB 函数 函数是一起执行任务的一组语句。在MATLAB中&#xff0c;函数是在单独的文件中定义的。文件名和函数名应该相同。 函数在其自己的工作空间&#xff08;也称为本地工作空间&#xff09;中对变量进行操作&#xff0c;与在MATLAB命令提示符下访问的工作空间&#xff0…...

Ruby中的字符串转换方法

在Ruby中&#xff0c;你可以使用各种方法来转换字符串。下面是一些常用的方法&#xff0c;当然选择哪种适用的方法还得更具具体项目来做调整。日常使用中下面的错误也是比较常见的&#xff0c;看看我们怎么处理哈。 1、问题背景 在Python中&#xff0c;内置的数据结构都有一个…...

进度条(小程序)

缓冲区的概念 缓冲区是内存中的一个临时存储区域&#xff0c;用来存放输入或输出数据。在标准 I/O 库中&#xff0c;缓冲区的使用可以提高数据处理的效率。例如&#xff0c;当向终端输出文本时&#xff0c;字符通常存储在缓冲区中&#xff0c;直到缓冲区满或者遇到特定条件时才…...

领悟这些道理可以让人在面对困难时更加沉着和果断。

1. 漂亮的女人悦目&#xff0c;成熟的女人悦心。 2. 待人朴实一点&#xff0c;到你真正需要朋友的时候&#xff0c;会有很多的援助之手。 3. 多鸣之猫&#xff0c;捕鼠必少。 4. 生病的时候&#xff0c;你的工作不会照顾你&#xff0c;你的朋友和父母会&#xff0c;保持联络。 …...

2024OD机试卷-精准核酸检测 (java\python\c++)

题目:精准核酸检测 题目描述 为了达到新冠疫情精准防控的需要,为了避免全员 核酸检测 带来的浪费,需要精准圈定可能被感染的人群。 现在根据传染病流调以及 大数据分析 ,得到了每个人之间在时间、空间上是否存在轨迹交叉。 现在给定一组确诊人员编号(X1,X2,X3,…,Xn),…...

盲盒一番赏小程序:探索未知,开启神秘宝藏之旅

开启神秘之门&#xff0c;探索未知的乐趣 在繁忙的生活中&#xff0c;我们渴望一丝丝未知带来的惊喜与乐趣。盲盒一番赏小程序&#xff0c;正是为了满足您这种探索未知的欲望而诞生。它不仅仅是一个购物平台&#xff0c;更是一个充满神秘与惊喜的宝藏世界。 精选好物&#xf…...

bert-NER 转化成 onnx 模型

保存模型 加载模型 from transformers import AutoTokenizer, AutoModel, AutoConfigNER_MODEL_PATH ./save_model ner_tokenizer AutoTokenizer.from_pretrained(NER_MODEL_PATH) ner_config AutoConfig.from_pretrained(NER_MODEL_PATH) ner_model AutoModelForTokenCl…...