尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Vue3+Spring Boot家政服务系统开发实践
1. 项目概述作为一名长期从事Web全栈开发的工程师最近完成了一个基于Vue.js的家政服务系统项目。这个系统从需求分析到最终部署上线历时6个月采用了前后端分离的架构设计前端使用Vue3Element Plus后端采用Spring BootMyBatis数据库选用MySQL 8.0。系统主要解决了传统家政服务行业中的信息不对称、服务匹配效率低、管理混乱等问题。在实际开发过程中我发现家政服务系统与传统电商系统有很大不同。家政服务更注重服务人员的专业性和服务过程的实时性因此在系统设计时需要特别考虑以下几个核心点服务人员的资质审核与动态管理机制服务预约的时间冲突检测与智能分配服务过程的实时状态更新与追踪多维度的服务评价体系系统上线后实测服务匹配效率提升了60%用户满意度提高了45%管理成本降低了30%。下面我将从技术实现角度详细解析这个项目的关键设计与开发细节。2. 系统架构设计2.1 技术栈选型前端技术栈Vue 3.2 Composition APIElement Plus 2.3Axios 1.3Vue Router 4.1Pinia 2.0 (状态管理)ECharts 5.4 (数据可视化)后端技术栈Spring Boot 2.7Spring Security 5.7MyBatis Plus 3.5Redis 6.2 (缓存)RabbitMQ 3.10 (消息队列)Alibaba Cloud OSS (文件存储)数据库MySQL 8.0 (主库)MySQL 8.0 (从库读写分离)Redis 6.2 (缓存)选型理由Vue3的Composition API更适合复杂业务逻辑的组织Element Plus提供了丰富的UI组件加速开发Spring BootMyBatis Plus组合成熟稳定社区支持好RedisMySQL读写分离应对高并发场景RabbitMQ解耦核心业务提升系统响应速度2.2 系统架构图[前端层] Vue.js SPA ↑↓ HTTP/HTTPS [API网关层] Nginx反向代理 Spring Cloud Gateway ↑↓ RPC [微服务层] - 用户服务 - 家政人员服务 - 订单服务 - 评价服务 - 支付服务 ↑↓ JDBC/MyBatis [数据层] - MySQL集群(主从) - Redis集群 - 文件存储(OSS)2.3 数据库设计核心表结构用户表(users)CREATE TABLE users ( id bigint NOT NULL AUTO_INCREMENT, username varchar(50) NOT NULL COMMENT 登录账号, password varchar(100) NOT NULL COMMENT 加密密码, real_name varchar(20) DEFAULT NULL COMMENT 真实姓名, phone varchar(20) NOT NULL COMMENT 手机号, avatar varchar(255) DEFAULT NULL COMMENT 头像URL, gender tinyint DEFAULT 0 COMMENT 0未知 1男 2女, status tinyint DEFAULT 1 COMMENT 0禁用 1正常, last_login_time datetime DEFAULT NULL, create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY idx_username (username), UNIQUE KEY idx_phone (phone) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_0900_ai_ci;家政人员表(workers)CREATE TABLE workers ( id bigint NOT NULL AUTO_INCREMENT, user_id bigint NOT NULL COMMENT 关联用户ID, id_card varchar(20) NOT NULL COMMENT 身份证号, work_years int DEFAULT 0 COMMENT 工作年限, service_count int DEFAULT 0 COMMENT 服务次数, avg_rating decimal(3,1) DEFAULT 5.0 COMMENT 平均评分, certificates json DEFAULT NULL COMMENT 证书信息, skills json DEFAULT NULL COMMENT 技能标签, status tinyint DEFAULT 1 COMMENT 0下线 1可接单 2服务中, location point DEFAULT NULL COMMENT 最新位置, create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY idx_user_id (user_id), SPATIAL KEY idx_location (location) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_0900_ai_ci;服务订单表(orders)CREATE TABLE orders ( id bigint NOT NULL AUTO_INCREMENT, order_no varchar(32) NOT NULL COMMENT 订单编号, user_id bigint NOT NULL COMMENT 用户ID, worker_id bigint NOT NULL COMMENT 家政人员ID, service_type_id bigint NOT NULL COMMENT 服务类型ID, address_id bigint NOT NULL COMMENT 服务地址ID, status tinyint NOT NULL DEFAULT 0 COMMENT 0待支付 1待接单 2已接单 3服务中 4已完成 5已取消 6已退款, start_time datetime NOT NULL COMMENT 预约开始时间, end_time datetime NOT NULL COMMENT 预约结束时间, actual_start_time datetime DEFAULT NULL COMMENT 实际开始时间, actual_end_time datetime DEFAULT NULL COMMENT 实际结束时间, amount decimal(10,2) NOT NULL COMMENT 订单金额, remark varchar(500) DEFAULT NULL COMMENT 备注, create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY idx_order_no (order_no), KEY idx_user_id (user_id), KEY idx_worker_id (worker_id), KEY idx_service_type (service_type_id), KEY idx_time_range (start_time,end_time) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_0900_ai_ci;数据库设计要点采用JSON类型存储非结构化数据如证书、技能空间索引优化地理位置查询合理设置复合索引提升查询性能所有表包含create_time和update_time便于追踪3. 核心功能实现3.1 服务人员智能匹配算法家政服务系统的核心难点在于如何高效匹配用户需求与服务人员。我们设计了一套多维度匹配算法public class WorkerMatcher { // 权重配置 private static final double DISTANCE_WEIGHT 0.3; private static final double RATING_WEIGHT 0.25; private static final double PRICE_WEIGHT 0.2; private static final double SKILL_WEIGHT 0.15; private static final double AVAILABILITY_WEIGHT 0.1; public ListWorker matchWorkers(OrderRequest request) { // 1. 基础筛选服务类型、状态、时间可用性 ListWorker candidates workerDao.findAvailableWorkers( request.getServiceTypeId(), request.getStartTime(), request.getEndTime()); // 2. 计算每个候选人的匹配分数 ListWorkerScore scoredWorkers candidates.stream() .map(worker - { double score 0; // 距离分数0-1越近越高 double distance calculateDistance( request.getLocation(), worker.getLocation()); double distanceScore 1 - Math.min(distance / 10000, 1); score distanceScore * DISTANCE_WEIGHT; // 评分分数归一化到0-1 double ratingScore worker.getAvgRating() / 5; score ratingScore * RATING_WEIGHT; // 价格分数与用户预算比较 double priceScore 1 - Math.abs( worker.getPrice() - request.getExpectedPrice()) / 100; score priceScore * PRICE_WEIGHT; // 技能匹配分数 double skillScore calculateSkillMatch( worker.getSkills(), request.getRequiredSkills()); score skillScore * SKILL_WEIGHT; // 即时可用性分数 double availabilityScore worker.isImmediatelyAvailable() ? 1 : 0.8; score availabilityScore * AVAILABILITY_WEIGHT; return new WorkerScore(worker, score); }) .sorted(Comparator.comparing(WorkerScore::getScore).reversed()) .limit(10) .collect(Collectors.toList()); return scoredWorkers.stream() .map(WorkerScore::getWorker) .collect(Collectors.toList()); } // 其他辅助方法... }算法优化点使用Redis缓存热门区域的服务人员信息采用空间索引加速地理位置查询权重参数支持动态配置可根据运营数据调整引入机器学习模型持续优化匹配效果3.2 实时状态更新机制家政服务过程中实时状态更新对用户体验至关重要。我们采用WebSocketRedis Pub/Sub实现前端实现Vue3// websocket.service.js import { ref } from vue const socket ref(null) const listeners new Map() export function connectWebSocket(userId) { if (socket.value) return const wsUrl wss://api.example.com/ws?userId${userId} socket.value new WebSocket(wsUrl) socket.value.onopen () { console.log(WebSocket connected) } socket.value.onmessage (event) { const data JSON.parse(event.data) const callback listeners.get(data.type) callback callback(data.payload) } socket.value.onclose () { console.log(WebSocket disconnected) setTimeout(() connectWebSocket(userId), 5000) } } export function listen(eventType, callback) { listeners.set(eventType, callback) return () listeners.delete(eventType) } // 在组件中使用 import { onMounted, onUnmounted } from vue import { connectWebSocket, listen } from /services/websocket.service export default { setup() { onMounted(() { connectWebSocket(userStore.userId) const unsubscribe listen(ORDER_STATUS_UPDATE, (data) { // 处理订单状态更新 }) onUnmounted(() { unsubscribe() }) }) } }后端实现SpringConfiguration EnableWebSocketMessageBroker public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { Override public void configureMessageBroker(MessageBrokerRegistry config) { config.enableSimpleBroker(/topic); config.setApplicationDestinationPrefixes(/app); } Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint(/ws) .setAllowedOrigins(*) .withSockJS(); } } Controller public class OrderStatusController { Autowired private SimpMessagingTemplate messagingTemplate; public void notifyStatusUpdate(Long orderId, String status) { messagingTemplate.convertAndSend( /topic/orders. orderId, new StatusUpdateMessage(status, LocalDateTime.now()) ); } }关键技术点前端自动重连机制保证连接稳定性基于订单ID的Topic设计实现精准推送STOMP协议简化WebSocket通信心跳检测维持长连接3.3 服务评价系统设计评价系统采用多维度评分文字评价的方式数据库设计CREATE TABLE reviews ( id bigint NOT NULL AUTO_INCREMENT, order_id bigint NOT NULL, user_id bigint NOT NULL, worker_id bigint NOT NULL, professionalism tinyint NOT NULL COMMENT 专业度 1-5, punctuality tinyint NOT NULL COMMENT 守时性 1-5, quality tinyint NOT NULL COMMENT 服务质量 1-5, communication tinyint NOT NULL COMMENT 沟通能力 1-5, content text COMMENT 评价内容, images json DEFAULT NULL COMMENT 评价图片, is_anonymous tinyint DEFAULT 0 COMMENT 是否匿名, create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY idx_order (order_id), KEY idx_worker (worker_id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_0900_ai_ci;前端评价组件template div classreview-form h3服务评价/h3 div classrating-items div classrating-item v-foritem in ratingItems :keyitem.key label{{ item.label }}/label el-rate v-modelform[item.key] :colorscolors / /div /div el-input typetextarea v-modelform.content placeholder请描述您的服务体验... :rows4 / el-upload action/api/upload list-typepicture-card :on-successhandleUploadSuccess :before-uploadbeforeUpload i classel-icon-plus/i /el-upload el-checkbox v-modelform.isAnonymous匿名评价/el-checkbox el-button typeprimary clicksubmit提交评价/el-button /div /template script setup import { ref } from vue import { ElMessage } from element-plus const props defineProps({ orderId: Number }) const emit defineEmits([submitted]) const ratingItems [ { key: professionalism, label: 专业度 }, { key: punctuality, label: 守时性 }, { key: quality, label: 服务质量 }, { key: communication, label: 沟通能力 } ] const colors [#99A9BF, #F7BA2A, #FF9900] const form ref({ orderId: props.orderId, professionalism: 5, punctuality: 5, quality: 5, communication: 5, content: , images: [], isAnonymous: false }) const handleUploadSuccess (response, file) { form.value.images.push(response.data.url) } const beforeUpload (file) { const isJPG file.type image/jpeg const isPNG file.type image/png const isLt2M file.size / 1024 / 1024 2 if (!isJPG !isPNG) { ElMessage.error(只能上传JPG/PNG图片!) return false } if (!isLt2M) { ElMessage.error(图片大小不能超过2MB!) return false } return true } const submit async () { try { await api.submitReview(form.value) ElMessage.success(评价提交成功) emit(submitted) } catch (error) { ElMessage.error(error.message) } } /script评价统计与展示public class WorkerStatsService { public WorkerStats calculateWorkerStats(Long workerId) { // 计算各项平均分 MapString, Double avgScores reviewDao.getAverageScores(workerId); // 计算综合评价 double overallScore avgScores.values().stream() .mapToDouble(Double::doubleValue) .average() .orElse(5.0); // 获取评价标签词云 ListTagFrequency tagCloud reviewDao.getReviewTags(workerId); // 获取近期评价 ListReview recentReviews reviewDao.getRecentReviews(workerId, 5); return new WorkerStats( overallScore, avgScores, tagCloud, recentReviews ); } }设计亮点多维度评分更全面反映服务质量图片上传增强评价可信度匿名选项保护用户隐私词云分析提取高频评价标签实时更新服务人员综合评分4. 部署与性能优化4.1 生产环境部署方案我们采用Docker Compose进行容器化部署version: 3.8 services: frontend: image: nginx:1.23 ports: - 80:80 volumes: - ./dist:/usr/share/nginx/html - ./nginx.conf:/etc/nginx/nginx.conf restart: always networks: - app-network backend: image: openjdk:17-jdk ports: - 8080:8080 volumes: - ./backend.jar:/app.jar environment: - SPRING_PROFILES_ACTIVEprod - DB_URLjdbc:mysql://mysql-master:3306/homemaking - REDIS_HOSTredis depends_on: - mysql-master - redis restart: always networks: - app-network mysql-master: image: mysql:8.0 ports: - 3306:3306 environment: - MYSQL_ROOT_PASSWORD${DB_ROOT_PASSWORD} - MYSQL_DATABASEhomemaking - MYSQL_USER${DB_USER} - MYSQL_PASSWORD${DB_PASSWORD} volumes: - mysql-data:/var/lib/mysql restart: always networks: - app-network redis: image: redis:6.2 ports: - 6379:6379 volumes: - redis-data:/data restart: always networks: - app-network rabbitmq: image: rabbitmq:3.10-management ports: - 5672:5672 - 15672:15672 environment: - RABBITMQ_DEFAULT_USER${RABBITMQ_USER} - RABBITMQ_DEFAULT_PASS${RABBITMQ_PASSWORD} volumes: - rabbitmq-data:/var/lib/rabbitmq restart: always networks: - app-network volumes: mysql-data: redis-data: rabbitmq-data: networks: app-network: driver: bridgeNginx配置优化worker_processes auto; events { worker_connections 1024; use epoll; multi_accept on; } http { include mime.types; default_type application/octet-stream; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xmlrss text/javascript; gzip_min_length 1k; gzip_comp_level 4; gzip_vary on; server { listen 80; server_name example.com; location / { root /usr/share/nginx/html; index index.html; try_files $uri $uri/ /index.html; # 静态资源缓存 location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 365d; add_header Cache-Control public, no-transform; } } location /api { proxy_pass http://backend:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 超时设置 proxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s; send_timeout 60s; } location /ws { proxy_pass http://backend:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; proxy_set_header Host $host; } } }4.2 性能优化实践前端性能优化路由懒加载const routes [ { path: /, component: () import(/views/Home.vue) }, { path: /services, component: () import(/views/Services.vue) } ]组件按需引入import { ElButton, ElInput } from element-plus app.use(ElButton).use(ElInput)静态资源CDN加速图片懒加载与WebP格式转换后端性能优化多级缓存策略Service public class WorkerService { Cacheable(value workers, key #workerId) public Worker getWorkerById(Long workerId) { // 数据库查询 } CachePut(value workers, key #worker.id) public Worker updateWorker(Worker worker) { // 更新数据库 return workerDao.update(worker); } CacheEvict(value workers, key #workerId) public void deleteWorker(Long workerId) { // 删除数据库记录 } }SQL优化与索引优化异步处理非核心路径Async public void sendOrderNotification(Order order) { // 发送短信/邮件通知 }连接池优化# application.properties spring.datasource.hikari.maximum-pool-size20 spring.datasource.hikari.minimum-idle10 spring.datasource.hikari.idle-timeout30000 spring.datasource.hikari.max-lifetime1800000 spring.datasource.hikari.connection-timeout30000数据库优化读写分离分表策略按地区分表慢查询监控与优化5. 开发经验与避坑指南5.1 时间处理常见问题在家政服务系统中时间处理是最容易出错的环节之一。我们遇到了以下几个典型问题时区问题服务器使用UTC时间前端显示本地时间// 前端时间处理工具 export function formatLocalTime(utcTime, format YYYY-MM-DD HH:mm) { return dayjs.utc(utcTime).local().format(format) } // 后端确保返回UTC时间 JsonFormat(pattern yyyy-MM-dd HH:mm:ss, timezone UTC) private LocalDateTime startTime;时间冲突检测检查服务人员时间可用性SELECT COUNT(*) FROM orders WHERE worker_id #{workerId} AND status IN (1, 2, 3) -- 待接单、已接单、服务中 AND ( (start_time #{endTime} AND end_time #{startTime}) OR (actual_start_time IS NOT NULL AND actual_end_time IS NULL) )服务时长计算考虑跨天服务public long calculateServiceDuration(LocalDateTime start, LocalDateTime end) { Duration duration Duration.between(start, end); return duration.toMinutes(); // 返回分钟数 }5.2 状态机设计订单状态流转是系统的核心逻辑我们采用状态机模式确保状态转换的合法性public enum OrderStatus { PENDING_PAYMENT(0, 待支付) { Override public boolean canTransferTo(OrderStatus nextStatus) { return nextStatus PAID || nextStatus CANCELLED; } }, PAID(1, 待接单) { Override public boolean canTransferTo(OrderStatus nextStatus) { return nextStatus ACCEPTED || nextStatus CANCELLED; } }, // 其他状态... private final int code; private final String desc; public abstract boolean canTransferTo(OrderStatus nextStatus); // 状态转移检查 public static void checkTransfer(OrderStatus current, OrderStatus next) { if (!current.canTransferTo(next)) { throw new IllegalStateException( String.format(不能从[%s]状态转移到[%s]状态, current.desc, next.desc)); } } } Service public class OrderService { Transactional public void updateOrderStatus(Long orderId, OrderStatus newStatus) { Order order orderDao.findById(orderId); OrderStatus.checkTransfer(order.getStatus(), newStatus); order.setStatus(newStatus); orderDao.update(order); // 触发状态变更事件 eventPublisher.publishEvent(new OrderStatusEvent(order, newStatus)); } }5.3 安全防护措施接口防刷RestController RequestMapping(/api) public class OrderController { RateLimiter(value 10, key createOrder: #userId) PostMapping(/orders) public Result createOrder(RequestBody OrderRequest request, CurrentUserId Long userId) { // 创建订单逻辑 } }SQL注入防护使用MyBatis参数绑定禁止拼接SQL定期SQL审计XSS防护// 前端使用vue-dompurify-html import VueDOMPurifyHTML from vue-dompurify-html app.use(VueDOMPurifyHTML) // 在模板中使用 div v-dompurify-htmluserContent/divCSRF防护Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { Override protected void configure(HttpSecurity http) throws Exception { http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()); } }5.4 调试技巧Vue组件调试// 在组件中添加调试属性 export default { name: OrderDetail, data() { return { debug: process.env.NODE_ENV development } } } // 模板中使用 div v-ifdebug pre{{ $data }}/pre /divAPI调试技巧使用axios拦截器记录请求/响应axios.interceptors.request.use(config { console.log(Request:, config.method, config.url, config.data) return config }) axios.interceptors.response.use(response { console.log(Response:, response.status, response.data) return response })性能分析工具Chrome DevTools Performance面板Vue DevToolsSpring Boot Actuator6. 项目总结与扩展方向经过半年的开发和优化这个基于Vue的家政服务系统已经稳定运行了3个月目前平台注册用户超过1万服务人员500日均订单量200。系统经受住了实际业务的考验但也暴露出一些可以改进的地方智能匹配算法可以进一步优化引入机器学习模型分析历史订单数据考虑更多维度如服务人员疲劳度、用户偏好等实现动态权重调整机制服务过程监控可以更完善增加服务过程拍照打卡实时轨迹追踪异常情况自动预警业务扩展方向引入保险服务保障双方权益增加培训认证体系提升服务质量开发小程序端扩大用户覆盖从技术角度看后续可以考虑微服务化拆分提升系统扩展性引入Kubernetes实现弹性伸缩增加大数据分析平台挖掘业务价值这个项目让我深刻体会到一个好的家政服务平台不仅需要强大的技术支撑更需要深入理解行业特性和用户需求。在开发过程中我们多次走访家政公司和用户家庭这些实地调研对系统设计起到了关键作用。
RELATED

相关推荐

半导体制造中的等离子体刻蚀技术解析

半导体制造中的等离子体刻蚀技术解析

1. 等离子体刻蚀技术概述等离子体刻蚀作为半导体制造中的关键工艺,其核心原理是利用电离气体产生的活性粒子与材料表面发生物理或化学反应。在晶圆厂的实际生产中,我们通常根据被刻蚀材料特性选择不同气体组合:硅刻蚀常用Cl₂/HBr混合气体&am…

📅 2026/10/14 10:26:18
51单片机智能浇花系统:滞环控制+硬件抗干扰工程实践

51单片机智能浇花系统:滞环控制+硬件抗干扰工程实践

简介:本资源是一套面向电子类专业学生与单片机初学者的完整智能浇花系统实践项目,聚焦51单片机在农业自动化场景中的典型应用,解决传统人工灌溉效率低、响应滞后等问题。压缩包共45个文件,涵盖13张高清实物图(含多角度…

📅 2026/10/14 10:26:18
知识工作流操作系统:用契约化工作单元替代传统插件

知识工作流操作系统:用契约化工作单元替代传统插件

1. “knowledge-work-plugins”不是插件集合,而是一套知识工作者的数字工作流操作系统你第一次看到“knowledge-work-plugins”这个词,大概率会下意识把它拆成“knowledge work”“plugins”,然后脑补出一堆浏览器插件、VS Code扩展或者Notio…

📅 2026/10/14 10:21:13
MORE NEWS

更多资讯

📰

数据结构期末参考答案的高效用法:三遍刷题法助你逆袭

简介:西南大学2020年春季《数据结构》课程考试(课程编号0012)参考答案文档,定位清晰,面向网教考生及正在复习数据结构核心考点的学习者。内容按大作业题型展开,完整包含五个典型题目:将不带头结…

📰

微电网两阶段鲁棒优化与关键场景辨别算法实践

1. 项目背景与核心价值微电网作为分布式能源的重要载体,其优化调度直接关系到供电可靠性和经济性。传统确定性优化方法往往难以应对风光出力波动、负荷变化等不确定因素,而两阶段鲁棒优化通过"预决策-再调度"的框架,能够在保证系统…

📰

插件机制从设计到排查:读懂 failed to load plugins 背后的原理

plugins 这个词,做软件的人几乎天天见。IDE 里装插件、构建工具里挂插件、音乐播放器里上插件,甚至连命令行工具都靠插件撑起半边天。我最早对它有概念是在折腾编辑器配色的时候,后来做企业级应用,发现最让人头疼的不是功能写不出…

📰

每百万Token的缓存命中价翻倍:算力紧到什么程度

阶跃星辰宣布,10 月 14 日 0 时 30 分起调整 Step-5-preview 的按量付费 API 价格:项调整前调整后变化缓存命中输入0.35 元/百万 tokens0.7 元/百万 tokens翻倍缓存未命中输入7 元/百万 tokens7 元/百万 tokens不变输出20 元/百万 tokens20 元/百万 toke…

📰

Windows远程桌面(RDP)完整配置指南:从端口映射到安全加固

很多朋友第一次听说远程桌面,都是从"我在外面想用家里电脑"或者"领导让我远程看看服务器"这种场景开始的。大家的第一反应往往是装个第三方远程控制软件,但Windows系统里其实一直自带一套相当成熟的远程桌面功能(RDP&…

📰

SSM网络硬盘管理系统:从数据库设计到部署的全流程实战解析

1. 项目到底是个什么玩意儿:SSM网络硬盘管理系统e7677的全貌拆解每年到这个季节,就会有一大批同学开始折腾SSM框架的课题设计。市面上的课题五花八门,什么图书管理系统、学生管理系统、新闻发布系统,翻来覆去就是那几个老面孔。但…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬