HTTP/HTTPS 服务端口监测的简易实现
一 HTTP/HTTPS 服务端口监测的简易实现方法
在当今快节奏的工作环境中,工作忙碌成为了许多职场人的常态。就拿我们团队最近经历的事情来说,工作任务一个接一个,大家都在各自的岗位上争分夺秒地忙碌着。然而,就在这样高强度的工作节奏下,一个严重的问题悄然发生了。
我们负责的一个重要项目,在服务器重启时,其中的 http 服务竟然关闭了长达 3 天之久,令人遗憾的是,这期间居然没有一个人发现这个异常情况。这个看似不起眼的疏忽,却引发了极其严重的后果。由于 http 服务的长时间中断,我们丢失了部分订单。这些订单的丢失,不仅仅意味着直接的经济损失,还对我们与客户之间的信任关系造成了冲击,可能会影响到未来的业务合作。
基于对过往故障的深入反思与分析,为有效规避类似情况的再度发生,有必要采取切实可行的应对策略。于是便开发一款简易的 HTTP 服务端口监测程序,该程序仅通过单个 HTML 文件实现。此举旨在提升监测的便捷性与高效性,以实现对 HTTP 服务端口状态的实时监控。一旦检测到异常情况,能够迅速做出响应并采取相应的解决措施,从而有效避免因服务中断而引发的一系列严重后果。这一基于 HTML 的简易监测工具,不仅承担着保障业务稳定运行的关键职责,同时也警示我们,在复杂的业务环境中,任何可能影响系统稳定性的细节都不容忽视。
二 HTTP/HTTPS 服务端口监测
HTML 的简易监测效果图如下:
只需一个html,放在本地电脑或服务器Nginx都可运行,以下是项目完整html代码:
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>http服务状态监控</title><style>* {margin: 0;padding: 0;box-sizing: border-box;font-family: 'PingFang SC', 'Microsoft YaHei', sans-serif;}body {background-color: #f5f7fa;padding: 20px;color: #333;}.container {max-width: 1400px;margin: 0 auto;}h1 {text-align: center;margin-bottom: 20px;color: #2c3e50;}.projects-grid {display: grid;grid-template-columns: repeat(3, 1fr);gap: 15px;}.project {background: white;border-radius: 6px;box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);overflow: hidden;height: 100%;display: flex;flex-direction: column;}.project-header {background: #3498db;color: white;padding: 10px 15px;font-size: 16px;font-weight: 600;}.services-container {padding: 10px;flex-grow: 1;}.service-item {display: grid;grid-template-columns: minmax(100px, 1fr) minmax(150px, 2fr) auto;gap: 8px;align-items: center;padding: 8px 0;border-bottom: 1px solid #eee;font-size: 14px;}.service-item:last-child {border-bottom: none;}.service-name {font-weight: 500;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;}.service-url {overflow: hidden;text-overflow: ellipsis;white-space: nowrap;}.service-url a {color: #3498db;text-decoration: none;}.service-url a:hover {text-decoration: underline;}.service-status {display: flex;align-items: center;white-space: nowrap;justify-content: flex-end;}.status-indicator {width: 10px;height: 10px;border-radius: 50%;margin-right: 6px;display: inline-block;}.status-normal {background-color: #2ecc71;}.status-closed {background-color: #e74c3c;}.status-loading {background-color: #f39c12;animation: pulse 1.5s infinite;}.refresh-container {text-align: center;margin: 15px 0 20px;}.refresh-btn {background: #3498db;color: white;border: none;padding: 8px 16px;border-radius: 4px;cursor: pointer;font-size: 14px;transition: background 0.3s;}.refresh-btn:hover {background: #2980b9;}.refresh-controls {display: flex;justify-content: center;align-items: center;gap: 15px;margin-top: 10px;}.refresh-info {font-size: 14px;color: #666;}.loading-overlay {position: fixed;top: 0;left: 0;right: 0;bottom: 0;background: rgba(255, 255, 255, 0.8);display: flex;justify-content: center;align-items: center;z-index: 1000;visibility: hidden;opacity: 0;transition: all 0.3s;}.loading-overlay.active {visibility: visible;opacity: 1;}.spinner {width: 40px;height: 40px;border: 4px solid rgba(52, 152, 219, 0.3);border-top-color: #3498db;border-radius: 50%;animation: spin 1s linear infinite;}.tooltip {position: relative;display: inline-block;}.tooltip .tooltiptext {visibility: hidden;width: 250px;background-color: #555;color: #fff;text-align: center;border-radius: 4px;padding: 5px;position: absolute;z-index: 1;bottom: 125%;left: 50%;transform: translateX(-50%);opacity: 0;transition: opacity 0.3s;font-size: 12px;word-break: break-all;}.tooltip:hover .tooltiptext {visibility: visible;opacity: 1;}@keyframes spin {to {transform: rotate(360deg);}}@keyframes pulse {0% { opacity: 0.6; }50% { opacity: 1; }100% { opacity: 0.6; }}@media (max-width: 1200px) {.projects-grid {grid-template-columns: repeat(2, 1fr);}}@media (max-width: 768px) {.projects-grid {grid-template-columns: 1fr;}.service-item {grid-template-columns: 1fr auto;gap: 5px;}.service-url {grid-column: 1 / 3;grid-row: 2;}}</style>
</head>
<body><div class="container"><h1>http服务状态监控</h1><div class="refresh-container"><button id="refreshBtn" class="refresh-btn">立即刷新</button><div class="refresh-controls"><div class="refresh-info">上次刷新时间: <span id="lastRefreshTime">-</span></div><div class="refresh-info">自动刷新间隔: <select id="refreshInterval"><option value="30">30秒</option><option value="60" selected>1分钟</option><option value="300">5分钟</option><option value="600">10分钟</option></select></div></div></div><div id="projectsGrid" class="projects-grid"></div></div><div class="loading-overlay" id="loadingOverlay"><div class="spinner"></div></div><script>// 示例数据 - 10个项目,每个项目5个服务,这里根据自己的项目修改即可var project_list = [{name: '项目名称1',serv_list: [{name: '服务名1-1', url: 'https://www.baidu.com', status: '正常'},{name: '服务名1-2', url: 'https://www.not-exist-example.com', status: '关闭'},{name: '服务名1-3', url: 'https://www.bing.com', status: '正常'},{name: '服务名1-4', url: 'https://www.qq.com', status: '正常'},{name: '服务名1-5', url: 'https://www.taobao.com', status: '正常'}]},{name: '项目名称2',serv_list: [{name: '服务名2-1', url: 'https://www.bing.com', status: '正常'},{name: '服务名2-2', url: 'https://www.google.com', status: '关闭'},{name: '服务名2-3', url: 'https://www.baidu.com', status: '正常'},{name: '服务名2-4', url: 'https://www.github.com', status: '正常'},{name: '服务名2-5', url: 'https://www.douban.com', status: '正常'}]},{name: '项目名称3',serv_list: [{name: '服务名3-1', url: 'https://www.jd.com', status: '正常'},{name: '服务名3-2', url: 'https://www.not-exist-example.com', status: '关闭'},{name: '服务名3-3', url: 'https://www.zhihu.com', status: '正常'},{name: '服务名3-4', url: 'https://www.weibo.com', status: '正常'},{name: '服务名3-5', url: 'https://www.163.com', status: '正常'}]},{name: '项目名称4',serv_list: [{name: '服务名4-1', url: 'https://www.douyin.com', status: '正常'},{name: '服务名4-2', url: 'https://www.not-exist-example.com', status: '关闭'},{name: '服务名4-3', url: 'https://www.alipay.com', status: '正常'},{name: '服务名4-4', url: 'https://www.sohu.com', status: '正常'},{name: '服务名4-5', url: 'https://www.bilibili.com', status: '正常'}]},{name: '项目名称5',serv_list: [{name: '服务名5-1', url: 'https://www.tmall.com', status: '正常'},{name: '服务名5-2', url: 'https://www.not-exist-example.com', status: '关闭'},{name: '服务名5-3', url: 'https://www.csdn.net', status: '正常'},{name: '服务名5-4', url: 'https://www.oschina.net', status: '正常'},{name: '服务名5-5', url: 'https://www.cnblogs.com', status: '正常'}]},{name: '项目名称6',serv_list: [{name: '服务名6-1', url: 'https://www.tencent.com', status: '正常'},{name: '服务名6-2', url: 'https://www.not-exist-example.com', status: '关闭'},{name: '服务名6-3', url: 'https://www.huawei.com', status: '正常'},{name: '服务名6-4', url: 'https://www.xiaomi.com', status: '正常'},{name: '服务名6-5', url: 'https://www.oppo.com', status: '正常'}]},{name: '项目名称7',serv_list: [{name: '服务名7-1', url: 'https://www.vivo.com', status: '正常'},{name: '服务名7-2', url: 'https://www.not-exist-example.com', status: '关闭'},{name: '服务名7-3', url: 'https://www.apple.com', status: '正常'},{name: '服务名7-4', url: 'https://www.samsung.com', status: '正常'},{name: '服务名7-5', url: 'https://www.mi.com', status: '正常'}]},{name: '项目名称8',serv_list: [{name: '服务名8-1', url: 'https://www.sina.com.cn', status: '正常'},{name: '服务名8-2', url: 'https://www.not-exist-example.com', status: '关闭'},{name: '服务名8-3', url: 'https://www.163.com', status: '正常'},{name: '服务名8-4', url: 'https://www.sogou.com', status: '正常'},{name: '服务名8-5', url: 'https://www.360.cn', status: '正常'}]},{name: '项目名称9',serv_list: [{name: '服务名9-1', url: 'https://www.so.com', status: '正常'},{name: '服务名9-2', url: 'https://www.not-exist-example.com', status: '关闭'},{name: '服务名9-3', url: 'https://www.ifeng.com', status: '正常'},{name: '服务名9-4', url: 'https://www.cctv.com', status: '正常'},{name: '服务名9-5', url: 'https://www.people.com.cn', status: '正常'}]}];// 全局变量let autoRefreshTimer;let refreshIntervalSeconds = 60;// DOM 元素const projectsGrid = document.getElementById('projectsGrid');const refreshBtn = document.getElementById('refreshBtn');const lastRefreshTimeEl = document.getElementById('lastRefreshTime');const refreshIntervalSelect = document.getElementById('refreshInterval');const loadingOverlay = document.getElementById('loadingOverlay');// 初始化页面function initPage() {// 设置刷新间隔refreshIntervalSelect.addEventListener('change', function() {refreshIntervalSeconds = parseInt(this.value);resetAutoRefreshTimer();});// 刷新按钮事件refreshBtn.addEventListener('click', function() {checkAllServices();});// 初始渲染项目列表renderProjects();// 初次检查服务状态checkAllServices();// 设置自动刷新resetAutoRefreshTimer();}// 渲染项目列表function renderProjects() {projectsGrid.innerHTML = '';project_list.forEach(project => {const projectEl = document.createElement('div');projectEl.className = 'project';const projectHeader = document.createElement('div');projectHeader.className = 'project-header';projectHeader.textContent = project.name;const servicesContainer = document.createElement('div');servicesContainer.className = 'services-container';project.serv_list.forEach(service => {const serviceItem = document.createElement('div');serviceItem.className = 'service-item';const serviceName = document.createElement('div');serviceName.className = 'service-name';serviceName.textContent = service.name;const serviceUrl = document.createElement('div');serviceUrl.className = 'service-url';const urlLink = document.createElement('a');urlLink.href = service.url;urlLink.target = '_blank';urlLink.textContent = shortenUrl(service.url);urlLink.title = service.url;serviceUrl.appendChild(urlLink);const serviceStatus = document.createElement('div');serviceStatus.className = 'service-status';const statusIndicator = document.createElement('span');statusIndicator.className = `status-indicator status-loading`;const statusText = document.createElement('span');statusText.textContent = '检测中...';serviceStatus.appendChild(statusIndicator);serviceStatus.appendChild(statusText);serviceItem.appendChild(serviceName);serviceItem.appendChild(serviceUrl);serviceItem.appendChild(serviceStatus);servicesContainer.appendChild(serviceItem);});projectEl.appendChild(projectHeader);projectEl.appendChild(servicesContainer);projectsGrid.appendChild(projectEl);});}// 缩短URL显示function shortenUrl(url) {try {const urlObj = new URL(url);return urlObj.hostname;} catch (e) {// 如果解析失败,返回原始URL的一部分return url.length > 20 ? url.substring(0, 20) + '...' : url;}}// 检测所有服务状态async function checkAllServices() {showLoading();// 更新上次刷新时间lastRefreshTimeEl.textContent = new Date().toLocaleString();const projectElements = document.querySelectorAll('.project');for (let i = 0; i < project_list.length; i++) {const project = project_list[i];for (let j = 0; j < project.serv_list.length; j++) {const service = project.serv_list[j];// 获取对应的 DOM 元素const serviceItems = projectElements[i].querySelectorAll('.service-item');const serviceStatusEl = serviceItems[j].querySelector('.service-status');const statusIndicator = serviceStatusEl.querySelector('.status-indicator');const statusText = serviceStatusEl.querySelector('span:last-child');// 将状态设置为检测中statusIndicator.className = 'status-indicator status-loading';statusText.textContent = '检测中...';try {// 使用 fetch 带超时进行检测const status = await checkServiceStatus(service.url);// 更新服务状态service.status = status ? '正常' : '关闭';// 更新 UIif (status) {statusIndicator.className = 'status-indicator status-normal';statusText.textContent = '正常';} else {statusIndicator.className = 'status-indicator status-closed';statusText.textContent = '关闭';}} catch (error) {console.error(`检测服务 ${service.name} 失败:`, error);// 出错时将状态设为关闭service.status = '关闭';statusIndicator.className = 'status-indicator status-closed';statusText.textContent = '关闭';}}}hideLoading();}// 检测单个服务状态async function checkServiceStatus(url) {try {// 设置超时const controller = new AbortController();const timeoutId = setTimeout(() => controller.abort(), 5000);const response = await fetch(url, {method: 'HEAD',mode: 'no-cors',signal: controller.signal});clearTimeout(timeoutId);// 返回状态码小于 400 表示服务正常return response.status < 400;} catch (error) {// 出现异常(如超时、网络错误)表示服务异常return false;}}// 重置自动刷新定时器function resetAutoRefreshTimer() {if (autoRefreshTimer) {clearInterval(autoRefreshTimer);}autoRefreshTimer = setInterval(() => {checkAllServices();}, refreshIntervalSeconds * 1000);}// 显示加载中遮罩function showLoading() {loadingOverlay.classList.add('active');}// 隐藏加载中遮罩function hideLoading() {loadingOverlay.classList.remove('active');}// 页面加载完成后初始化document.addEventListener('DOMContentLoaded', initPage);</script>
</body>
</html>
说明:使用时只需根据自己项目修改js部分项目数据即可。
相关文章:
HTTP/HTTPS 服务端口监测的简易实现
一 HTTP/HTTPS 服务端口监测的简易实现方法 在当今快节奏的工作环境中,工作忙碌成为了许多职场人的常态。就拿我们团队最近经历的事情来说,工作任务一个接一个,大家都在各自的岗位上争分夺秒地忙碌着。然而,就在这样高强度的工作…...
快速入门——状态管理VueX
Vuex介绍 状态管理 每一个Vuex应用的核心都是一个store,与普通的全局对象不同的是,基于Vue数据与视图绑定的特点,当store中的状态发生变化时,与之绑定的视图也会被重新渲染。 store中的状态不允许被直接修改,改变sto…...
C# 根据Ollama+DeepSeekR1开发本地AI辅助办公助手
在上一篇《访问DeepSeekR1本地部署API服务搭建自己的AI办公助手》中,我们通过通过Ollama提供的本地API接口用Python实现了一个简易的AI办公助手,但是需要运行Py脚本,还比较麻烦,下面我们用C#依据Ollama提供的API接口开发一个本地A…...
Flutter - 基础Widget
Flutter 中万物皆 Widget,基础Widget 同步对应 Android View. 普通文本 Text /*** 控制文本样式统一使用 style:TextStyle, 例:fontSize(字体大小),color(颜色),shadows(阴影)等等* 控制文本布局需单独设置:* textAlign(文不对齐方式)* te…...
Tips :仿真竞争条件 指的是什么?
文章目录 **为什么会出现仿真竞争条件?****典型场景举例****System Verilog 如何解决竞争条件?****1. 使用 `program` 块隔离测试平台****2. 使用 `clocking` 块明确时序关系****3. 非阻塞赋值(`<=`)的合理使用****竞争条件的根本原因****总结****代码结构****1. 设计模…...
【Elasticsearch】script_fields 和 runtime_fields的区别
script_fields和runtime_fields都是 Elasticsearch 中用于动态计算字段值的功能,但它们在实现方式、应用场景和性能表现上存在显著区别。以下是两者的详细对比: 1.定义和应用场景 • script_fields: • 定义:通过 Painless 脚本…...
达梦DTS数据迁移工具生产篇(MySQL->DM8)
本文章使用的DTS工具为 2024年9月18日的版本,使用的目的端DM8数据库版本为2023年12月的版本,注意数据库版本和DTS版本之间跨度不要太大,以免出现各种兼容性的报错。若发现版本差距过大时,请联系达梦技术服务工程师处理。 1. 迁移…...
【安卓逆向】逆向APP界面UI修改再安装
1.背景 有一客户找到我,说能不能把APP首页的底部多余界面去掉。 逆向实战 想要去除安卓应用软件中的内容,需要对APP逆向进行修改再打包。 通过工具 MIT管理器工具 提取APK包,点击apk文件,点击查看反编译apk。 搜索关键字。这里关键…...
企业级大模型应用的Java-Python异构融合架构实践
一、后端语言相关技术生态 Python语言 Python在AI计算领域拥有全面的生态支持: 底层工具库: Pandas、NumPy、SciPy、Matplotlib深度学习框架: PyTorch、TensorFlow领域专用框架: HuggingFace Transformers(社区生态为主) 常见Python框架 …...
深度剖析数据中台架构图,铸造数字文明的基石
🔥🔥 AllData大数据产品是可定义数据中台,以数据平台为底座,以数据中台为桥梁,以机器学习平台为中层框架,以大模型应用为上游产品,提供全链路数字化解决方案。 ✨奥零数据科技官网:http://www.aolingdata.com ✨AllData开源项目:https://github.com/alldatacenter/a…...
python实现基于文心一言大模型的sql小工具
一、准备工作 注册与登录: 登录百度智能云千帆控制台,注册并登录您的账号。 创建千帆应用: 根据实际需求创建千帆应用。创建成功后,获取AppID、API Key、Secret Key等信息。如果已有千帆应用,可以直接查看已有应用的AP…...
飞腾腾锐D2000 + OpenHarmony 4.1release部署deepseek大模型
简介 1.1 飞腾腾锐D2000 飞腾腾锐D2000是一款面向桌面应用的高性能通用处理,集成8个飞腾自主研发的高能效处理器核FTC663,兼 容64位ARMv8指令集并支持ARM64和ARM32两种执行模式,支持单精度、双精度浮点运算指令和ASIMD处理 指令,主…...
进程概念、PCB及进程查看
文章目录 一.进程的概念进程控制块(PCB) 二.进程查看通过指令查看进程通过proc目录查看进程的cwd和exe获取进程pid和ppid通过fork()创建子进程 一.进程的概念 进程是一个运行起来的程序,而程序是存放在磁盘的,cpu要想执行程序的指…...
Oracle 数据库基础入门(一):搭建数据管理基石
在当今数字化时代,数据库作为数据管理的核心工具,对于各类应用系统的开发至关重要。尤其是在 Java 全栈开发领域,掌握一款强大的数据库技术是必备技能。Oracle 数据库以其卓越的性能、高度的可靠性和丰富的功能,在企业级应用中广泛…...
selenium如何实现,开启浏览器的开发者工具模式,并且开启 toggle移动设备模拟模式
核心实现代码 pythonCopy Code from selenium import webdriver from selenium.webdriver.chrome.options import Options def enable_devtools_with_toggle(): options Options() # 强制开启开发者工具 options.add_argument("--auto-open-devtools-for-tabs&quo…...
分布式锁实现(数据库+Redis+Zookeeper)
1. 数据库分布式锁 实现原理 基于唯一索引: 创建一张锁表,通过唯一索引(如锁名称)保证互斥性。 加锁:插入一条记录,成功则获取锁,失败则重试。 解锁:删除对应记录。 乐观锁&…...
七、Spring Boot:初识与项目搭建
深入解析 Spring Boot:初识与项目搭建 Spring Boot 是基于 Spring Framework 的开源 Java 基础框架,旨在简化 Spring 应用的开发过程。它通过“约定优于配置”的理念,极大地减少了开发中的配置工作,同时提供了“开箱即用”的功能…...
记录一下用docker克隆某授权制定ip的环境恢复
#首先还是要看日志根据问题去进行调整 java web的老项目配置文件一般是 bin启动里边的脚本 还有conf中的 xml配置文件 再或者就是classes中的配置文件,再或者就是lib中的jar包中的配置文件 1.安装docker 2.创建docker网络 docker network create --driver bridge --subnet…...
【含文档+PPT+源码】基于微信小程序的健康饮食食谱推荐平台的设计与实现
项目介绍 本课程演示的是一款基于微信小程序的健康饮食食谱推荐平台的设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本…...
主流虚拟化技术讲解
目录 VMware vSphere Microsoft Hyper-V KVM(Kernel-based Virtual Machine) OpenStack VMware vSphere 架构与组件:VMware vSphere 是基于裸金属虚拟化技术的平台,核心组件包括 ESXi 主机和 vCenter Server。ESXi 是虚拟化层…...
java开发——为什么要使用动态代理?
举个例子:假如有一个杀手专杀男的,不杀女的。代码如下: public interface Killer {void kill(String name, String sex);void watch(String name); }public class ManKiller implements Killer {Overridepublic void kill(String name, Stri…...
kotlin 知识点一 变量和函数
在Kotlin中定义变量的方式和Java 区别很大,在Java 中如果想要定义一个变 量,需要在变量前面声明这个变量的类型,比如说int a表示a是一个整型变量,String b表 示b是一个字符串变量。而Kotlin中定义一个变量,只允许在变量…...
将CUBE或3DL LUT转换为PNG图像
概述 在大部分情况下,LUT 文件通常为 CUBE 或 3DL 格式。但是我们在 OpenGL Shader 中使用的LUT,通常是图像格式的 LUT 文件。下面,我将教大家如何将这些文件转换为 PNG 图像格式。 条形LUT在线转换(不是8x8网络)&am…...
侯捷 C++ 课程学习笔记:类的声明与构造函数
目录 一、类的声明 二、内联函数 三、访问级别 四、构造函数 五、构造函数重载 六、实际应用案例 七、学习心得 一、类的声明 类的声明是定义类的基本结构,包括类的成员变量和成员函数。类的声明分为类头和类体两部分。 类头(class head…...
BGP状态和机制
BGP邻居优化 为了增加稳定性,通常建议实验回环口来建立邻居。更新源:建立邻居和邻居所学习到的路由的下一跳。多跳:EBGP邻居建立默认选哟直连,因为TTL=1,如果非直连,必须修改TTL。命令备注peer 2.2.2.2 connect-interface lo1配置更新源peer 2.2.2.2 ebgp-max-hop 2配置T…...
MongoDB 数据库简介
MongoDB 数据库简介 引言 随着互联网技术的飞速发展,数据已经成为企业的重要资产。为了高效地管理和处理这些数据,数据库技术应运而生。MongoDB作为一种流行的NoSQL数据库,因其灵活的数据模型和高效的数据处理能力,受到了广泛的关注。本文将为您详细介绍MongoDB的基本概念…...
浏览器下载vue.js.devtools,谷歌浏览器和edg浏览器
1、谷歌浏览器下载: 情况一:如果谷歌应用商店可以打开,那么就直接到谷歌应用商店下载,直接搜索vue.js.devtools添加扩展即可。 情况二:谷歌浏览器的谷歌应用商城打不开,那么就百度搜索极简插件找到vue.js.…...
Android AOSP系统裁记录
Android 系统裁剪是指根据需求移除不必要的组件和功能,以优化系统性能、减少存储占用或满足特定设备需求。以下是 Android 系统裁剪的基本步骤: 1. 准备环境 操作系统:推荐使用 Ubuntu 或 macOS。 工具: Android SDK Android N…...
Could not download npm for node v14.21.3(nvm无法下载节点v14.21.3的npm)
场景描述:之前的项目用的是node以前的版本,使用nvm没下载下来,npm命令执行不了 错误如下图,15版本的node同理,下载的都是.exe可执行文件的扩展名,使用npm命令终端无法识别 解决思路:去node官网…...
React进阶之React核心源码解析(三)
React核心源码解析 diff多节点比较diff两轮遍历比较第一轮比较第二轮比较Update 状态更新Concurrent Modediff 多节点比较diff isArray方法比较 节点更新// 更新前 <ul><li key="0" className="before">0<li><li key=...
2025吐槽季第一弹---腾讯云EO边缘安全加速平台服务
前言: 关于EO边缘安全加速平台服务 参照:产品概述,具体如下: 边缘安全加速平台 EO(Tencent Cloud EdgeOne,下文简称为 EdgeOne)是国内首款基于全新架构的真正一体化的边缘安全加速平台。提供全面的安全防…...
Dify自定义工作流集成指南:对接阿里云百炼文生图API的实现方案
dify工作流的应用基本解释 dify应用发布相关地址:应用发布 | Dify 根据官方教程,我们可以看到dify自定义的工作流可以发布为----工具 这个教程将介绍如何通过工作流建立一个使用阿里云百炼文生图模型。 工具则可以给其他功能使用,如agent…...
WebSocket简单介绍 并接入deepseek
目录 什么是 WebSocket?工作原理: 为什么需要 WebSocket?WebSocket 的优势HTTP 和 WebSocket 的区别WebSocket 的劣势WebSocket 的应用场景WebSocket 握手过程1. 客户端发起握手请求2. 服务器响应握手请求3. 建立连接 WebSocket 事件处理WebS…...
android 新增native binder service 方式(三)
书接上回,继续第三种方式,是手动生成 service binder 的方法,项目结构 1,编译aidl aidl 文件保持不变,如何生成Bn和Bp 文件呢。 aidl -I ./libserviceaidl/aidl -h ./ -o ./ --langcpp libserviceaidl/aidl/com/test/IService.a…...
linux--多进程开发(5)--进程
进程间通讯概念 每两个进程之间都是独立的资源分配单元,不同进程之间不能直接访问另一个进程的资源。 但不同的进程需要进行信息的交互和状态的传递等,因此需要进程间通信(IPC,inter processes cimmunication) 进程通信的目的: …...
分享httprunner 结合django实现平台接口自动化方案
说明,可以直接在某个视图集定义自定义接口来验证。 调试1:前端界面直接编写yaml文件. 新增要实现存数据到mysql,同时存文件到testcase下, 如test.yaml 更新yaml数据,同时做到更新 testcase下的文件,如test.yaml acti…...
前端面试题之HTML篇
1.src和href的区别 src用于替换当前元素,href用于在当前文档和引用资源之间确立联系。 src可用于img、input、style、script、iframe---同步加载执行 href可用于link、a---异步 1.用途不同 src 用于引入外部资源,通常是图像、视频、JavaScript 文件等&am…...
Selenium 调用模型接口实现功能测试
要使用 Selenium 调用模型接口实现功能测试,可按以下步骤进行: 1. 环境准备 安装 Selenium:使用 pip install selenium 安装 Selenium 库。安装浏览器驱动:根据使用的浏览器(如 Chrome、Firefox 等)下载对应的驱动,并将其添加到系统的环境变量中。例如,Chrome 浏览器需…...
java后端开发day18--学生管理系统
(以下内容全部来自上述课程) 1.业务分析并搭建主菜单 1.需求 采取控制台的方式去书写学生管理系统 2.分析 1.初始菜单 2.学生类 属性:id,姓名,年龄,家庭住址 3.添加功能 键盘录入每一个学生信息并…...
计算机毕业设计SpringBoot+Vue.jst0图书馆管理系统(源码+LW文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
【DeepSeek】【GPT-Academic】:DeepSeek集成到GPT-Academic(官方+第三方)
目录 1 官方deepseek 1.1 拉取学术GPT项目 1.2 安装依赖 1.3 修改配置文件中的DEEPSEEK_API_KEY 2 第三方API 2.1 修改DEEPSEEK_API_KEY 2.2 修改CUSTOM_API_KEY_PATTERM 2.3 地址重定向 2.4 修改模型参数 2.5 成功调用 2.6 尝试添加一个deepseek-r1参数 3 使用千帆…...
生成对抗网络(GAN):让机器学习“创造”新世界
目录 引言 什么是生成对抗网络(GAN)? GAN的核心原理 GAN的损失函数 GAN的变种 1. 条件生成对抗网络(Conditional GAN, cGAN) 2. 深度卷积生成对抗网络(DCGAN) 3. 生成对抗网络的 Wassers…...
JavaScript系列(87)--Webpack 高级配置详解
Webpack 高级配置详解 🛠️ Webpack 是前端工程化中最流行的构建工具之一,掌握其高级配置可以帮助我们构建更高效、更优化的应用。本文将深入探讨Webpack的高级配置技巧和最佳实践。 Webpack 核心概念回顾 🌟 💡 小知识…...
48.日常算法
1.面试题 03.06. 动物收容所 题目来源 动物收容所。有家动物收容所只收容狗与猫,且严格遵守“先进先出”的原则。在收养该收容所的动物时,收养人只能收养所有动物中“最老”(由其进入收容所的时间长短而定)的动物,或…...
MySql数据库运维学习笔记
数据库运维常识 DQL、DML、DCL 和 DDL 是 SQL(结构化查询语言)中的四个重要类别,它们分别用于不同类型的数据库操作,下面为你简单明了地解释这四类语句: 1. DQL(数据查询语言,Data Query Langu…...
Starlink卫星动力学系统仿真建模第十讲-基于SMC和四元数的卫星姿态控制示例及Python实现
基于四元数与滑模控制的卫星姿态控制 一、基本原理 1. 四元数姿态表示 四元数运动学方程: 3. 滑模控制设计 二、代码实现(Python) 1. 四元数运算工具 import numpy as npdef quat_mult(q1, q2):"""四元数乘法""…...
MongoDB学习
MongoDB 是一种流行的 NoSQL 数据库,以文档存储为核心,适用于高灵活性、高扩展性的场景。本文将从基础概念到实际应用,带你快速掌握 MongoDB 的核心操作。 1. MongoDB 简介 什么是 MongoDB? MongoDB 是一个基于分布式文件存储的…...
水利工程安全包括哪几个方面
水利工程安全培训的内容主要包括以下几个方面: 基础知识和技能培训 : 法律法规 :学习水利工程相关的安全生产法律法规,了解安全生产标准及规范。 事故案例 :通过分析事故案例,了解事故原因和教训&#x…...
九、数据治理架构流程
一、总体结构 《数据治理架构流程图》(Data Governance Architecture Flowchart) 水平结构:流程图采用水平组织,显示从数据源到数据应用的进程。 垂直结构:每个水平部分进一步划分为垂直列,代表数据治理的…...
Spring boot中的@ConfigurationProperties注解
Spring boot中的ConfigurationProperties注解 ConfigurationProperties 是 Spring Boot 提供的一个强大注解,用于将配置文件(如 application.properties 或 application.yml)中的配置绑定到一个 Java 对象中。它不仅简化了配置管理ÿ…...