Docker和Dify学习笔记
文章目录
- 1 docker学习
- 1.1 基本命令使用
- 1.1.1 docker ps查看当前正在运行的镜像
- 1.1.2 docker stop停止容器
- 1.1.3 docker compose容器编排
- 1.1.4 docker网络
- [1] 进入到容器里面敲命令
- [2] docker network ls
- [3] brige网络模式下容器访问宿主机的方式
- 2 Dify的安装和基础使用
- 2.1 下载dify的工程仓库
- 2.2 创建.env配置文件
- 2.3 修改Nginx的端口
- 2.4 启动Dify
- 2.5 添加一个本地模型
- 2.5.1 添加一个大语言模型
- 2.5.2 添加一个Embedding模型
- 3 基于Dify开发功能场景
- 3.1 Echarts绘图
- 3.2 让大模型能够解析Json
- 4 大模型或者Dify中常见的参数
- 4.1 Temperature
- 4 Dify使用过程中常见问题
- 4.1 json超长了,超过80000个字符了
- 参考资料
1 docker学习
1.1 基本命令使用
1.1.1 docker ps查看当前正在运行的镜像
PS E:\LargeModel\dify\docker> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5b2b8c1636e7 langgenius/dify-web:1.0.0 "/bin/sh ./entrypoin…" 6 minutes ago Up 6 minutes 3000/tcp thirsty_diffie
99740eb3c659 langgenius/dify-web:1.0.0 "/bin/sh ./entrypoin…" 6 minutes ago Up 6 minutes 3000/tcp upbeat_euclid
f8108bddcff7 nginx:latest "sh -c 'cp /docker-e…" 11 minutes ago Up 11 minutes 0.0.0.0:8001->80/tcp, 0.0.0.0:8443->443/tcp docker-nginx-1
2794a7f88a69 langgenius/dify-api:1.0.0 "/bin/bash /entrypoi…" 11 minutes ago Up 11 minutes 5001/tcp docker-api-1
d51ee39beb2c langgenius/dify-api:1.0.0 "/bin/bash /entrypoi…" 11 minutes ago Up 11 minutes 5001/tcp docker-worker-1
e008dc5e6386 ubuntu/squid:latest "sh -c 'cp /docker-e…" 11 minutes ago Up 11 minutes 3128/tcp docker-ssrf_proxy-1
8c966517876b langgenius/dify-sandbox:0.2.10 "/main" 11 minutes ago Up 11 minutes (healthy) docker-sandbox-1
a2d137e0f516 langgenius/dify-plugin-daemon:0.0.3-local "/bin/bash -c /app/e…" 11 minutes ago Up 11 minutes 0.0.0.0:5003->5003/tcp docker-plugin_daemon-1
56f97d78ab4c langgenius/dify-web:1.0.0 "/bin/sh ./entrypoin…" 11 minutes ago Up 11 minutes 3000/tcp docker-web-1
cfe29ccee8df postgres:15-alpine "docker-entrypoint.s…" 11 minutes ago Up 11 minutes (healthy) 0.0.0.0:5432->5432/tcp docker-db-1
edd0a6879ba7 semitechnologies/weaviate:1.19.0 "/bin/weaviate --hos…" 11 minutes ago Up 11 minutes docker-weaviate-1
191a080293e4 redis:6-alpine "docker-entrypoint.s…" 11 minutes ago Up 11 minutes (healthy) 6379/tcp docker-redis-1
PS E:\LargeModel\dify\docker>
1.1.2 docker stop停止容器
【停止指定名称的容器】
PS E:\LargeModel\dify\docker> docker stop thirsty_diffie
thirsty_diffie
【停止所有当前在运行的容器】
PS E:\LargeModel\dify\docker> docker stop $(docker ps -aq)
5b2b8c1636e7
99740eb3c659
f8108bddcff7
2794a7f88a69
d51ee39beb2c
e008dc5e6386
8c966517876b
a2d137e0f516
56f97d78ab4c
cfe29ccee8df
edd0a6879ba7
191a080293e4
fe75be867cd5
1.1.3 docker compose容器编排
1.1.4 docker网络
[1] 进入到容器里面敲命令
docker exec -it docker-api-1 /bin/bash
案例:安装ping命令和telnet命令
root@cb7f80d95b40:/app/api# apt-get update
Get:1 http://deb.debian.org/debian bookworm InRelease [151 kB]
Get:2 http://deb.debian.org/debian bookworm-updates InRelease [55.4 kB]
Get:3 http://deb.debian.org/debian-security bookworm-security InRelease [48.0 kB]
Get:4 http://deb.debian.org/debian bookworm/main amd64 Packages [8792 kB]
Get:5 http://deb.debian.org/debian bookworm-updates/main amd64 Packages [13.5 kB]
Get:6 http://deb.debian.org/debian-security bookworm-security/main amd64 Packages [246 kB]
Fetched 9306 kB in 8min 19s (18.6 kB/s)
Reading package lists... Done
root@cb7f80d95b40:/app/api# apt-get install -y iputils-ping
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:libcap2-bin libpam-cap
The following NEW packages will be installed:
[2] docker network ls
PS D:\LargeModel> docker network ls
NETWORK ID NAME DRIVER SCOPE
35353aad5d22 bridge bridge local
6e02ea3b25c6 docker_default bridge local
5973270d4a91 docker_ssrf_proxy_network bridge local
503869a64910 host host local
a0056c2c396d none null local
[3] brige网络模式下容器访问宿主机的方式
容器内可以使用host.docker.internal来代替主机的ip
2 Dify的安装和基础使用
2.1 下载dify的工程仓库
git clone https://github.com/langgenius/dify.git
# 国内镜像站
https://gitee.com/dify_ai/dify
2.2 创建.env配置文件
我们进入dify目录下的docker目录中,
# 以示例创建一个.env的文件,执行下面命令
cp .\.env.example .env
2.3 修改Nginx的端口
默认占用的是80和443端口,如果你本机已经部署了其他的应用,占了该端口,修改.env文件中的下面两个变量
EXPOSE_NGINX_PORT=8001
EXPOSE_NGINX_SSL_PORT=8443
2.4 启动Dify
docker compose up -d
2.5 添加一个本地模型
2.5.1 添加一个大语言模型



这里需要注意, 我的ollama是直接安装在宿主机的。 但是Dify是通过docker启动起来的,这里涉及到docker和宿主机之间的通信。 如果docker访问宿主机,可以使用host.docker.internal域名,Docker的DNS可以解析这个域名。
2.5.2 添加一个Embedding模型
(1)安装bge-m3模型
ollama pull bge-m3
(2)Dify中配置embedding模型


3 基于Dify开发功能场景
3.1 Echarts绘图
思路就是利用Dify的echarts渲染的能力(即使是Dify自带的Echarts图表生成工具也是输出了一串echarts的配置字符串,甚至还没有直接写python代码生成来的直接)。 但是只能在工作流和chatflow里面使用。如果将绘图的工作流集成到Agent里面的话,会导致大模型解析不了json,输出不了内容了。
import json
import requests
from datetime import datetime, timedelta
import statistics"""这是一个try参数的机制
"""
def getValidResponse(url, headers, params):response = Nonefor resourceFlag in ['sw', 'lk', 'wlw']:params["resource_flag"] = resourceFlagresponse = requests.get(url= url, headers= headers, params= params, timeout= 10)# 检查请求是否成功if response.status_code == 200:try:json_data = response.json()print(json_data)if (not "data" in json_data) or json_data["data"] is None or len(json_data["data"]) <= 0:continueelse:return responseexcept ValueError:continue else:continue """获取某一个水库某一段时间内的的水情数据。(主要是水位)参数:startDate: start_dt=2025-03-16+10:00:00endDate: end_dt=2025-03-17+11:00:00
"""
def getWaterStatus(guid: str, stcd: str, startDate: str, endDate: str) -> dict:url = "https://sk.hubeishuiyi.cn/services/1234567890ABCDEFGHIJKLMN/res_z_detail/param"headers = {"Apikey": "F1DBECD719108635189480CF60E6553ADB3109616426BD537F25A430DFC613B491A025C4A51E77FD08C6E5B7CBE05917A461286E7B6D69F1AB1B14F946149D2065B0C675F8FEDF4B9B05C1496881BC5A"}params = {"is_tb": "n","pageNo": 1,"pageSize":10000,"st_cd": stcd,"resource_flag":"sw","flag": 1,"start_dt": startDate,"end_dt": endDate,"res_cd": guid}response = getValidResponse(url, headers, params)# 检查请求是否成功if response is not None and response.status_code == 200:try:json_data = response.json()# # 转为双引号的标准json字符串# json_data = json.dumps(json_data)# json_data = json.loads(json_data)print(json_data)if (not "data" in json_data) or json_data["data"] is None or len(json_data["data"]) <= 0:return {"result" : []} # 以时间作为横坐标timeList = []# 水位数据waterLevelList = []# 蓄水量waterStorageList = []for dataObject in json_data["data"]:timeStr = dataObject["tm"]timeList.append(timeStr)waterLevel = dataObject["rz"]waterLevelList.append(waterLevel)waterStorage = dataObject["w"]waterStorageList.append(waterStorage)statisticData = {"time": timeList,"waterLevel": waterLevelList,"waterStorage": waterStorageList}return {"result": statisticData}except ValueError:return {"result" : "Failed to parse JSON response"}else:statisticData = {"failMsg": f"Request failed. url = {url}, params = {params}"}return {"result" : statisticData}def calcYAxisMinMax(nums: list):minValue = min(nums) - 8if minValue < 0:minValue = 0maxValue = max(nums) + 8return minValue, maxValue"""参数:data: tuple的列表。
"""
def create_dynamic_table_str(headers: list, data):table = "|"for header in headers:table += f" {header} |"table += "\n|"for _ in headers:table += " ------- |"for row in data:table += "\n|"for item in row:table += f" {item} |"return tabledef constructTableString(timeList: list, waterLevelList: list) -> str:timeList = timeList[-10:]waterLevelList = waterLevelList[-10:]headers = ['时间', '水位(m)']data = list(zip(timeList, waterLevelList))return create_dynamic_table_str(headers, data)def constructStatisticString(waterLevelList: list) -> str:headers = ['统计项', '统计值']data = []minValue = min(waterLevelList)data.append(("最小值", f"{minValue:.2f}"))maxValue = max(waterLevelList)data.append(("最大值", f"{maxValue:.2f}"))meanValue = sum(waterLevelList) / len(waterLevelList)data.append(("平均值", f"{meanValue:.2f}"))# 计算列表的中位数medianValue = statistics.median(waterLevelList)data.append(("中位数", f"{medianValue:.2f}"))# 标准差devValue = statistics.stdev(waterLevelList)data.append(("标准差", f"{devValue:.2f}"))return create_dynamic_table_str(headers, data=data)def drawEcharts(data: dict) -> dict:if data is None or len(data) <= 0:return {"result": ""}if "time" not in data or "waterLevel" not in data or "waterStorage" not in data:return {"result": ""}waterStatusData = data# 提取时间和对应的数据timeList = list(reversed(waterStatusData["time"]))waterLevelList = waterStatusData["waterLevel"]waterStorageList = waterStatusData["waterStorage"]if timeList is None or len(timeList) < 2:return {"result": ""}# 绘图准备工作UTC_FORMAT = "%Y-%m-%d %H:%M:%S"startTime = datetime.strptime(timeList[0], UTC_FORMAT)endTime = datetime.strptime(timeList[-1], UTC_FORMAT)walterLevelMin, walterLevelMax = calcYAxisMinMax(waterLevelList)# 生成echarts配置echarts_config = {"color": ['#eb6877', '#0f91c4', '#46cbd4'],"title": {"subtext": f"{startTime.strftime('%m')}月{startTime.strftime('%d')}日-{endTime.strftime('%m')}月{endTime.strftime('%d')}日水位情况","left": 20},"tooltip": {"trigger": "axis","axisPointer": {"type": "cross"}},"legend": {# "data": ["水位", "最低气温", "降水"],"data": ["水位"],"right": 20},"xAxis": {"data": timeList,"axisLine": {"onZero": False}},"yAxis": [{"type": "value","name": "水位","position": "left","min": walterLevelMin,"max": walterLevelMax,"axisLabel": {"formatter": "{value} m"}},# {# "type": "value",# "name": "蓄水量",# "position": "right",# "axisLabel": {# "formatter": "{value} m"# }# }],"series": [{"name": "水位","type": "line","data": waterLevelList,"yAxisIndex": 0,"itemStyle": {"color": "#eae213"},"markPoint": {"data": [{"type": 'max'},{"type": 'min'},],# 设置为点"symbol": 'circle', # 调整点的大小"symbolSize": 8, "label": {"position": 'right',# 标签字体加粗"fontWeight": 'bold', # 标签字体大小"fontSize": 12 }},},# {# "name": "蓄水量",# "type": "bar",# "smooth": True,# "data": waterStorageList,# "yAxisIndex": 0,# "itemStyle": {# "color": "#4bb2fa"# }# },# {# "name": "降水",# "type": "bar",# "smooth": True,# "data": rainfall,# "yAxisIndex": 1,# "itemStyle": {# "color": "#31e84f"# }# }]}echartString = "```echarts\n" + json.dumps(echarts_config, indent=2, ensure_ascii=False) + "\n```"tableString = constructTableString(timeList, waterLevelList)statisticString = constructStatisticString(waterLevelList)# 生成输出文件output = echartString + "\n\n" \+ "最近十条数据展示:\n" + tableString + "\n\n" \+ "常用统计数据展示:\n" + statisticStringreturn {"result":output}def main(guid: str, stcdList: list) -> dict:if guid is None or stcdList is None or len(guid) <= 0 or len(stcdList) <= 0:return {"result" : ""}endDate = datetime.now()endDateStr = endDate.strftime("%Y-%m-%d %H:%M:%S")startDate = endDate - timedelta(days=15)startDateStr = startDate.strftime("%Y-%m-%d %H:%M:%S")result = getWaterStatus(guid=guid, stcd=stcdList[0], startDate=startDateStr, endDate=endDateStr)print(f"main.result = {result['result']}")markdownScript = drawEcharts(result["result"])print(markdownScript)return markdownScriptif __name__ == "__main__":# print(main('42022220001', ['61608180']))# print(main('42130330004', ["61608180"]))# print(main('42122350024', ['90021804']))print(main('42058340006', [ "90006379"]))
3.2 让大模型能够解析Json
4 大模型或者Dify中常见的参数
4.1 Temperature
LLM 生成是具有随机性的,在模型的顶层通过选取不同预测概率的预测结果来生成最后的结果。我们一般可以通过控制 temperature 参数来控制 LLM 生成结果的随机性与创造性。
Temperature 一般取值在 0~1 之间,当取值较低接近 0 时,预测的随机性会较低,产生更保守、可预测的文本,不太可能生成意想不到或不寻常的词。当取值较高接近 1 时,预测的随机性会较高,所有词被选择的可能性更大,会产生更有创意、多样化的文本,更有可能生成不寻常或意想不到的词。
4 Dify使用过程中常见问题
4.1 json超长了,超过80000个字符了
这是因为Dify限制了默认的长度。本地部署的情况下可以修改.env配置文件中的相关变量数值。 修改之后重启整个服务。
常见的参数和含义入下图所示:

重启服务所需要使用的命令:
docker compose down
docker compose up -d
参考资料
[1] https://mp.weixin.qq.com/s/n5GrGZ9hZmdhzt4avs1XSw
[2] https://wiki.eryajf.net/pages/674f53/
[3] https://zhuanlan.zhihu.com/p/20939683190
[4] https://dify.flowus.cn/haojixing/share/943044ea-005e-4e57-9e74-450700df71c2
[5] https://blog.csdn.net/luckcxy/article/details/144900399
相关文章:
Docker和Dify学习笔记
文章目录 1 docker学习1.1 基本命令使用1.1.1 docker ps查看当前正在运行的镜像1.1.2 docker stop停止容器1.1.3 docker compose容器编排1.1.4 docker网络[1] 进入到容器里面敲命令[2] docker network ls[3] brige网络模式下容器访问宿主机的方式 2 Dify的安装和基础使用2.1 下…...
【Java集合夜话】第1篇:拨开迷雾,探寻集合框架的精妙设计
欢迎来到Java集合框架系列的第一篇文章!🌹 本系列文章将以通俗易懂的语言,结合实际开发经验,带您深入理解Java集合框架的设计智慧。🌹 若文章中有任何不准确或需要改进的地方,欢迎大家指出,让我…...
VSCode创建VUE项目(四)增加用户Session管理
将用户信息存储或者更新到Session sessionStorage.setItem("userID",loginform.value.username); sessionStorage.setItem(loginTime, Date.now()); 获取Session信息 const storedUserInfo sessionStorage.getItem(userID); const loginTime sessionStorage.get…...
线性代数(1)用 excel 计算鸡兔同笼
线性代数excel计算鸡兔同笼 案例:鸡兔同笼问题的三种解法(递进式教学)一、问题描述二、方程式解法(基础版)步骤解析 三、线性代数解法(进阶版)1. 方程组转化为矩阵形式2. 矩阵求解(逆…...
Qt中多线程
在Qt中实现多线程主要有两种常用方式:基于QThread的子类化和QObjectmoveToThread的Worker模式。以下是详细说明和示例代码: 1. 传统方法:继承 QThread(适用于简单任务) #include <QThread> #include <QDebug…...
Grokking System Design 系统设计面试问题
《Grokking the System Design Interview》列举了多个经典的系统设计题目,通常按照 不同的业务场景和技术难点 进行分类。以下是一些常见的分类和题目示例: 1. 社交网络类 设计 Twitter(支持关注/取关、推文、Feed 流) 设计 Facebook Messenger(即时聊天,支持在线/离线状…...
Android Launcher3 首屏图标锁定技术方案解析
一、需求背景与技术挑战 在Android 13系统定制开发中,需实现Launcher首屏图标固定功能。该需求需在以下技术维度进行突破: 拖拽事件拦截机制:需精准识别拖拽目标区域 布局层级判定:准确识别第一屏的布局标识 跨屏操作限制&…...
hubilder打包ios app, 并上传TestFlight
目录 一 前提条件 不是该项目成员解决 1. 直接找到该项目的管理人员去设置你的账号 2. 直接重新生成APPID(一般不建议的,可以查看) 3. 如果是离职人员,可以让他将项目权限转让出来 - 如何转让应用 - DCloud问答 未申请ios证书和描述文件 APP ID 的…...
AI实干家:HK深度体验-【第7篇-新加坡与香港家办业务对比】
PART I 家族办公室(家办)的定义与统计口径分析 家族办公室(Family Office, FO)的统计口径因地区、政策及数据来源差异而有所不同,需结合官方定义与第三方研究综合判断: 一、家办定义与统计口径 核心定义&…...
Java集成MQTT和Kafka实现稳定、可靠、高性能的物联网消息处理系统
Java集成MQTT和Kafka实现高可用方案 1. 概述 在物联网(IoT)和分布式系统中,消息传递的可靠性和高可用性至关重要。本文将详细介绍如何使用Java集成MQTT和Kafka来构建一个高可用的消息处理系统。 MQTT(消息队列遥测传输)是一种轻量级的发布/订阅协议,适用于资源受限的设备和…...
【总结篇】java多线程,新建线程有几种写法,以及每种写法的优劣势
java多线程 新建线程有几种写法,以及每种写法的优劣势 [1/5]java多线程 新建线程有几种写法–继承Thread类以及他的优劣势[2/5]java多线程-新建线程有几种写法–实现Runnable接口以及他的优劣势[3/5]java多线程 新建线程有几种写法–实现Callable接口结合FutureTask使用以及他的…...
剑指 Offer II 107. 矩阵中的距离
comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20107.%20%E7%9F%A9%E9%98%B5%E4%B8%AD%E7%9A%84%E8%B7%9D%E7%A6%BB/README.md 剑指 Offer II 107. 矩阵中的距离 题目描述 给定一个由 0 和 1 组成的矩阵 mat …...
雅可比行列式
定义和推导 雅可比行列式,它是以n个n元函数的偏导数为元素的行列式。以下是雅可比式的推导过程: 二阶雅可比式的推导以二重积分中的极坐标变换为例,设 : ,则 x 和 y 的全微分分别为: 可以将 dx 与 dy 视作…...
UMA架构下的GPU 显存
GPU 显存 (Graphics Memory) 在大多数现代设备(包括 Android 手机、嵌入式设备等)上,确实是使用 DDR(Double Data Rate SDRAM) 类型的内存。 不过,具体实现方式根据硬件架构有所不同,主要分为以…...
【大模型基础_毛玉仁】3.2 上下文学习
目录 3.2 上下文学习3.2.1 上下文学习的定义3.2.2 演示示例选择1)直接检索2)聚类检索3)迭代检索 3.2.3 性能影响因素 3.2 上下文学习 随模型训练数据规模和参数量的扩大,大语言模型涌现出了上下文学习(In-Context Lea…...
在 ARM 嵌入式 Linux 下使用 C/C++ 实现 MQTT
在 ARM 嵌入式 Linux 下使用 C/C 实现 MQTT 通信是一个常见的需求,尤其是在资源受限的环境中。以下是一个详细的教程,使用 Eclipse Paho C Client 库来实现 MQTT 客户端。 1. 安装 Eclipse Paho C Client 库 Eclipse Paho C Client 是一个轻量级的 MQTT…...
Oraclelinux问题-/var/log/pcp/pmlogger/目录超大
有套19c rac环境,操作系统是oracle linux 8.10,日常巡检时发现/var/log/pcp/pmlogger/目录超大,如下 [rootdb1 ~]# du -sh /var/log/pcp/pmlogger/* 468G /var/log/pcp/pmlogger/db 1.3G /var/log/pcp/pmlogger/oracle06-106 754M /…...
【大语言模型_8】vllm启动的模型通过fastapi封装增加api-key验证
背景: vllm推理框架启动模型不具备api-key验证。需借助fastapi可以实现该功能 代码实现: rom fastapi import FastAPI, Header, HTTPException, Request,Response import httpx import logging# 创建 FastAPI 应用 app FastAPI() logging.basicConfig(…...
学习笔记 ASP.NET Core Web API 8.0部署到iis
一.修改配置文件 修改Program.cs配置文件将 if (app.Environment.IsDevelopment()) {app.UseSwagger();app.UseSwaggerUI(); }修改为 app.UseSwagger(); app.UseSwaggerUI(); 二.安装ASP.NET Core Runtime 8.0.14 文件位置https://dotnet.microsoft.com/en-us/download/do…...
Python散点图(Scatter Plot):高阶分析、散点图矩阵、三维散点图及综合应用
散点图:数据分析的利器 在数据分析领域,散点图是一种直观且强大的可视化工具,广泛应用于揭示变量间的相关性以及识别数据集中的异常值。本文将深入探讨散点图的这两种关键功能,并结合实际案例与Python代码示例,带您全面了解散点图的应用。 一、散点图如何展示变量间的相…...
第5章:Docker镜像管理实战:构建、推送与版本控制
第5章:Docker镜像管理实战:构建、推送与版本控制 作者:DogDog_Shuai 阅读时间:约25分钟 难度:中级 目录 第5章:Docker镜像管理实战:构建、推送与版本控制 目录1. 引言2. Docker镜像基础 2.1 镜像结构...
Microsoft Edge浏览器的取证分析(基于Chromium)
概述 早在2019年,微软就用Chromium替换了EdgeHTML浏览器引擎,这是微软支持谷歌Chrome浏览器的一个开源项目。通过切换到Chromium,Edge与Chrome浏览器共享一个共同的架构,这意味着用于Chrome浏览器调查的取证技术也适用于Edge。 …...
汽车一键启动系统使用方便,舒适出行,轻松匹配
汽车一键启动系统 系统定义 移动管家汽车一键启动系统是装置在智能汽车上的一部分,是实现简约打火和熄火过程的一个按钮装置。它可以在原车钥匙锁头的位置改装,也能独立面板改装,现在很多高低配置的车辆都可安装。 功能特点 基本功能 启…...
C语言复习笔记--数组
今天继续来浅浅推进一下C语言的复习,这次是数组的复习,话不多说,正文开始. 数组的概念 数组是⼀组相同类型元素的集合,一种自定义类型.数组中元素个数不能为0.数组分为⼀维数组和多维数组,多维数组⼀般⽐较多⻅的是⼆维数组. 下面从一维数组说起. 一维数组的创建和…...
海康SDK协议在智联视频超融合平台中的接入方法
一. 海康SDK协议详解 海康SDK协议原理 海康SDK协议是海康威视为开发者提供的一套软件开发工具包,用于与海康设备(如摄像头、NVR、DVR等)进行通信和控制。其核心原理包括: 网络通信:基于TCP/IP协议,实现设…...
腾讯云大模型知识引擎×DeepSeek:股票分析低代码应用实践
项目背景与发展历程 在金融科技快速发展的今天,股票分析作为投资决策的核心环节,正面临数据量激增和复杂性提升的挑战。传统股票分析依赖人工处理,效率低下且成本高昂,而人工智能(AI)的引入为这一领域带来…...
深入解析 SQL Server 锁机制:如何定位并解决表锁问题
在 SQL Server 中,锁是并发控制的关键机制,确保数据的完整性和一致性。然而,在高并发环境下,锁可能导致阻塞甚至死锁,影响系统性能。因此,理解 SQL Server 的锁机制,并掌握如何定位和解决锁问题…...
Spring Boot 异步返回对象深度解析
前言 在现代高并发、高响应的应用场景中,Spring Boot 的异步处理能力是提升系统吞吐量和用户体验的关键技术之一。无论是实时数据推送、大文件传输,还是复杂异步任务调度,Spring Boot 提供了多种灵活的异步处理机制以满足不同需求。本文将从…...
【工具】C#防沉迷进程监控工具使用手册
一、软件简介 本工具用于监控指定进程的运行时长,当达到预设时间时通过声音、弹窗、窗口抖动等方式进行提醒,帮助用户合理控制程序使用时间。 软件在上篇文章。 二、系统要求 Windows 7/10/11.NET Framework 4.5 或更高版本 三、快速入门 1. 配置文件…...
【docker】--- 详解 WSL2 中的 Ubuntu 和 Docker Desktop 的区别和关系!
在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。【WSL 】--- Windows11 迁移 WSL 超详细指南 —— 给室友换一个宿舍! 开发环境一、引…...
