62个核心技能点实战:Spring Boot+React全栈项目开发指南
在长期的技术学习和项目开发过程中我们常常会遇到一个关键问题如何将零散的知识点系统化地串联起来形成可复用的技能体系特别是在完成一系列基础技能学习后很多开发者会陷入知道很多但用不起来的困境。本文将以62个核心技能点为线索通过一个完整的实战项目带你系统梳理技术栈整合方法从环境搭建到部署上线的全流程实操无论是刚学完基础的新手还是需要项目经验的进阶开发者都能直接复用。1. 技能体系架构与项目背景1.1 62个核心技能点的分类逻辑在技术学习过程中我们通常会将技能点分为四个层次基础语法层、框架应用层、系统设计层和工程实践层。62个技能点涵盖了从变量定义、循环控制到微服务架构、性能优化的完整链路。基础语法层20个技能点包括数据类型与变量声明流程控制语句if/else、switch、循环函数定义与调用异常处理机制面向对象核心概念框架应用层25个技能点重点覆盖Spring Boot自动配置原理数据库连接池配置RESTful API设计规范安全认证实现方案缓存集成与使用系统设计层12个技能点涉及微服务拆分原则数据库分库分表策略消息队列应用场景分布式事务解决方案工程实践层5个技能点包含容器化部署流程监控日志体系建设性能压测方法论1.2 实战项目业务场景设计为了综合运用这些技能点我们设计一个智能任务管理系统作为实战项目。该系统需要实现用户管理、任务创建、分配执行、进度跟踪、报表生成等核心功能技术栈涵盖前后端分离架构适合作为技能整合的典型场景。项目核心需求包括多角色用户体系管理员、普通用户、访客任务生命周期管理创建、分配、执行、完成实时进度跟踪与通知机制数据可视化与报表导出系统监控与权限控制2. 开发环境与工具链配置2.1 基础环境准备确保开发环境统一是项目成功的基础条件。以下是推荐的环境配置方案操作系统要求Windows 10/11 或 macOS 10.15Linux推荐Ubuntu 20.04 LTS或CentOS 8开发工具栈# JDK版本管理 java -version # 要求JDK 11或17 mvn -version # Maven 3.6 # 数据库环境 mysql --version # MySQL 8.0 redis-server --version # Redis 6.0 # 前端环境 node --version # Node.js 16 npm --version # npm 82.2 IDE与插件配置IntelliJ IDEA作为主开发工具需要安装以下关键插件Spring Boot AssistantSpring项目支持MyBatisXMyBatis增强功能Lombok代码简化注解GitToolBoxGit集成增强VS Code前端开发配置// settings.json关键配置 { eslint.enable: true, prettier.singleQuote: true, editor.formatOnSave: true, typescript.updateImportsOnFileMove.enabled: always }2.3 项目脚手架初始化使用Spring Initializr快速生成项目基础结构# 生成后端项目骨架 curl https://start.spring.io/starter.zip \ -d dependenciesweb,data-jpa,mysql,security,redis \ -d packageNamecom.example.taskmanager \ -d nametask-manager-backend \ -o backend.zip # 前端项目初始化 npx create-react-app task-manager-frontend --template typescript3. 后端核心模块实现3.1 领域模型设计与数据库映射首先定义核心实体关系采用DDD领域驱动设计思想进行建模// 用户实体定义 Entity Table(name users) Data public class User { Id GeneratedValue(strategy GenerationType.IDENTITY) private Long id; Column(unique true, nullable false) private String username; private String email; Enumerated(EnumType.STRING) private UserRole role; CreationTimestamp private LocalDateTime createTime; } // 任务实体定义 Entity Table(name tasks) Data public class Task { Id GeneratedValue(strategy GenerationType.IDENTITY) private Long id; private String title; private String description; Enumerated(EnumType.STRING) private TaskStatus status; ManyToOne JoinColumn(name assignee_id) private User assignee; private LocalDateTime deadline; CreationTimestamp private LocalDateTime createTime; }3.2 数据访问层实现使用Spring Data JPA简化数据库操作同时保证查询性能Repository public interface TaskRepository extends JpaRepositoryTask, Long { // 方法名派生查询 ListTask findByAssigneeAndStatus(User assignee, TaskStatus status); // 自定义查询方法 Query(SELECT t FROM Task t WHERE t.deadline :now AND t.status ! COMPLETED) ListTask findOverdueTasks(Param(now) LocalDateTime now); // 分页查询 PageTask findByAssignee(User assignee, Pageable pageable); } // 复杂查询使用QueryDSL public ListTask findTasksByComplexCriteria(TaskSearchCriteria criteria) { QTask task QTask.task; BooleanBuilder builder new BooleanBuilder(); if (criteria.getKeyword() ! null) { builder.and(task.title.contains(criteria.getKeyword()) .or(task.description.contains(criteria.getKeyword()))); } if (criteria.getStatus() ! null) { builder.and(task.status.eq(criteria.getStatus())); } return jpaQueryFactory.selectFrom(task) .where(builder) .fetch(); }3.3 业务逻辑层设计采用服务层模式实现业务规则和事务管理Service Transactional public class TaskService { private final TaskRepository taskRepository; private final UserRepository userRepository; private final NotificationService notificationService; public Task createTask(TaskCreateRequest request) { // 参数验证 if (request.getTitle() null || request.getTitle().trim().isEmpty()) { throw new IllegalArgumentException(任务标题不能为空); } User assignee userRepository.findById(request.getAssigneeId()) .orElseThrow(() - new EntityNotFoundException(指定用户不存在)); // 业务规则验证 if (assignee.getRole() UserRole.GUEST) { throw new BusinessException(访客用户不能分配任务); } Task task new Task(); task.setTitle(request.getTitle()); task.setDescription(request.getDescription()); task.setAssignee(assignee); task.setStatus(TaskStatus.PENDING); task.setDeadline(request.getDeadline()); Task savedTask taskRepository.save(task); // 发送通知 notificationService.sendTaskAssignedNotification(assignee, savedTask); return savedTask; } Transactional(readOnly true) public PageTask getUserTasks(Long userId, Pageable pageable) { User user userRepository.findById(userId) .orElseThrow(() - new EntityNotFoundException(用户不存在)); return taskRepository.findByAssignee(user, pageable); } }3.4 REST API控制器实现设计符合RESTful规范的API接口RestController RequestMapping(/api/tasks) Validated public class TaskController { private final TaskService taskService; PostMapping public ResponseEntityTask createTask(Valid RequestBody TaskCreateRequest request) { Task task taskService.createTask(request); return ResponseEntity.status(HttpStatus.CREATED).body(task); } GetMapping public ResponseEntityPageTask getTasks( RequestParam(defaultValue 0) int page, RequestParam(defaultValue 20) int size) { Pageable pageable PageRequest.of(page, size, Sort.by(createTime).descending()); PageTask tasks taskService.getCurrentUserTasks(pageable); return ResponseEntity.ok(tasks); } PutMapping(/{taskId}/status) public ResponseEntityVoid updateTaskStatus( PathVariable Long taskId, RequestParam TaskStatus status) { taskService.updateTaskStatus(taskId, status); return ResponseEntity.ok().build(); } }4. 前端界面与交互实现4.1 React组件架构设计采用函数式组件和Hooks进行开发确保代码的可维护性// 任务列表组件 const TaskList: React.FC () { const [tasks, setTasks] useStateTask[]([]); const [loading, setLoading] useState(true); const [pagination, setPagination] useState({ page: 0, size: 20, total: 0 }); const fetchTasks useCallback(async (page: number, size: number) { setLoading(true); try { const response await taskApi.getTasks(page, size); setTasks(response.data.content); setPagination(prev ({ ...prev, page, total: response.data.totalElements })); } catch (error) { console.error(获取任务列表失败:, error); message.error(获取任务列表失败); } finally { setLoading(false); } }, []); useEffect(() { fetchTasks(0, pagination.size); }, [fetchTasks, pagination.size]); return ( div classNametask-list-container TaskFilters onFilterChange{handleFilterChange} / Spin spinning{loading} List dataSource{tasks} renderItem{task ( TaskItem task{task} onStatusChange{handleStatusChange} / )} / /Spin Pagination current{pagination.page 1} pageSize{pagination.size} total{pagination.total} onChange{(page, size) fetchTasks(page - 1, size)} / /div ); };4.2 状态管理方案使用Redux Toolkit进行复杂状态管理// taskSlice.ts const taskSlice createSlice({ name: tasks, initialState: { items: [] as Task[], loading: false, filters: { status: null, assignee: null, dateRange: null } }, reducers: { setTasks: (state, action: PayloadActionTask[]) { state.items action.payload; }, setLoading: (state, action: PayloadActionboolean) { state.loading action.payload; }, updateTaskStatus: (state, action: PayloadAction{taskId: number, status: TaskStatus}) { const task state.items.find(t t.id action.payload.taskId); if (task) { task.status action.payload.status; } } }, extraReducers: (builder) { builder .addCase(fetchTasks.pending, (state) { state.loading true; }) .addCase(fetchTasks.fulfilled, (state, action) { state.loading false; state.items action.payload; }) .addCase(fetchTasks.rejected, (state) { state.loading false; }); } }); // 异步action export const fetchTasks createAsyncThunk( tasks/fetchTasks, async (filters: TaskFilters) { const response await taskApi.getTasksWithFilters(filters); return response.data; } );4.3 路由配置与权限控制实现基于角色的路由访问控制// AppRouter.tsx const AppRouter: React.FC () { const { user } useAuth(); return ( Router Routes Route path/login element{Login /} / Route path/ element{Layout /} Route index element{Home /} / Route pathtasks element{ RequireAuth role{[UserRole.USER, UserRole.ADMIN]} TaskList / /RequireAuth } / Route pathadmin element{ RequireAuth role{[UserRole.ADMIN]} AdminPanel / /RequireAuth } / /Route Route path* element{NotFound /} / /Routes /Router ); }; // 权限守卫组件 const RequireAuth: React.FC{ role: UserRole[] } ({ children, role }) { const { user, loading } useAuth(); if (loading) { return Spin sizelarge /; } if (!user) { return Navigate to/login replace /; } if (!role.includes(user.role)) { return Navigate to/unauthorized replace /; } return {children}/; };5. 系统集成与高级特性5.1 安全认证与授权集成Spring Security实现完整的认证授权体系Configuration EnableWebSecurity public class SecurityConfig { Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .csrf().disable() .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() .authorizeHttpRequests(authz - authz .requestMatchers(/api/auth/**).permitAll() .requestMatchers(/api/admin/**).hasRole(ADMIN) .requestMatchers(/api/tasks/**).hasAnyRole(USER, ADMIN) .anyRequest().authenticated() ) .addFilterBefore(jwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class); return http.build(); } Bean public JwtAuthenticationFilter jwtAuthenticationFilter() { return new JwtAuthenticationFilter(); } } // JWT工具类 Component public class JwtUtil { private final String secretKey; private final long expirationMs; public String generateToken(UserDetails userDetails) { MapString, Object claims new HashMap(); claims.put(roles, userDetails.getAuthorities().stream() .map(GrantedAuthority::getAuthority) .collect(Collectors.toList())); return Jwts.builder() .setClaims(claims) .setSubject(userDetails.getUsername()) .setIssuedAt(new Date()) .setExpiration(new Date(System.currentTimeMillis() expirationMs)) .signWith(SignatureAlgorithm.HS256, secretKey) .compact(); } public boolean validateToken(String token, UserDetails userDetails) { final String username extractUsername(token); return (username.equals(userDetails.getUsername()) !isTokenExpired(token)); } }5.2 缓存策略实现使用Redis实现多级缓存提升系统性能Service public class TaskCacheService { private final RedisTemplateString, Object redisTemplate; private final TaskRepository taskRepository; private static final String TASK_CACHE_PREFIX task:; private static final Duration CACHE_TTL Duration.ofHours(1); Cacheable(value tasks, key #taskId) public Task getTaskWithCache(Long taskId) { // 先查Redis String cacheKey TASK_CACHE_PREFIX taskId; Task cachedTask (Task) redisTemplate.opsForValue().get(cacheKey); if (cachedTask ! null) { return cachedTask; } // Redis没有则查数据库 Task task taskRepository.findById(taskId) .orElseThrow(() - new EntityNotFoundException(任务不存在)); // 写入Redis缓存 redisTemplate.opsForValue().set(cacheKey, task, CACHE_TTL); return task; } CacheEvict(value tasks, key #taskId) public void evictTaskCache(Long taskId) { String cacheKey TASK_CACHE_PREFIX taskId; redisTemplate.delete(cacheKey); } // 批量缓存操作 public MapLong, Task batchGetTasks(SetLong taskIds) { ListString cacheKeys taskIds.stream() .map(id - TASK_CACHE_PREFIX id) .collect(Collectors.toList()); ListObject cachedTasks redisTemplate.opsForValue().multiGet(cacheKeys); MapLong, Task result new HashMap(); SetLong missingIds new HashSet(); // 处理缓存命中与未命中 for (int i 0; i taskIds.size(); i) { Long taskId taskIds.get(i); Task cachedTask (Task) cachedTasks.get(i); if (cachedTask ! null) { result.put(taskId, cachedTask); } else { missingIds.add(taskId); } } // 批量查询未命中的任务 if (!missingIds.isEmpty()) { ListTask dbTasks taskRepository.findAllById(missingIds); for (Task task : dbTasks) { result.put(task.getId(), task); // 异步写入缓存 String cacheKey TASK_CACHE_PREFIX task.getId(); redisTemplate.opsForValue().set(cacheKey, task, CACHE_TTL); } } return result; } }5.3 异步处理与消息队列使用RabbitMQ实现任务状态变更的异步通知Component public class TaskStatusChangeListener { private final RabbitTemplate rabbitTemplate; private final NotificationService notificationService; Async EventListener public void handleTaskStatusChange(TaskStatusChangeEvent event) { // 发送到消息队列 rabbitTemplate.convertAndSend( task.exchange, task.status.change, event ); // 实时通知相关用户 notificationService.notifyStatusChange( event.getTask(), event.getOldStatus(), event.getNewStatus() ); } } // 消息消费者 Component public class TaskNotificationConsumer { RabbitListener(queues task.status.queue) public void consumeStatusChange(TaskStatusChangeEvent event) { // 处理业务逻辑如发送邮件、短信通知 log.info(处理任务状态变更通知: 任务ID{}, 状态从{}变为{}, event.getTask().getId(), event.getOldStatus(), event.getNewStatus()); // 记录操作日志 auditLogService.logStatusChange(event); } }6. 测试策略与质量保证6.1 单元测试编写规范确保核心业务逻辑的测试覆盖率ExtendWith(MockitoExtension.class) class TaskServiceTest { Mock private TaskRepository taskRepository; Mock private UserRepository userRepository; Mock private NotificationService notificationService; InjectMocks private TaskService taskService; Test void createTask_WithValidRequest_ShouldSuccess() { // Given TaskCreateRequest request new TaskCreateRequest(); request.setTitle(测试任务); request.setDescription(任务描述); request.setAssigneeId(1L); request.setDeadline(LocalDateTime.now().plusDays(7)); User assignee new User(); assignee.setId(1L); assignee.setRole(UserRole.USER); when(userRepository.findById(1L)).thenReturn(Optional.of(assignee)); when(taskRepository.save(any(Task.class))).thenAnswer(invocation - { Task task invocation.getArgument(0); task.setId(100L); return task; }); // When Task result taskService.createTask(request); // Then assertNotNull(result); assertEquals(测试任务, result.getTitle()); verify(notificationService).sendTaskAssignedNotification(assignee, result); } Test void createTask_WithInvalidAssignee_ShouldThrowException() { // Given TaskCreateRequest request new TaskCreateRequest(); request.setTitle(测试任务); request.setAssigneeId(999L); // 不存在的用户 when(userRepository.findById(999L)).thenReturn(Optional.empty()); // When Then assertThrows(EntityNotFoundException.class, () - { taskService.createTask(request); }); } }6.2 集成测试方案测试完整的API调用链路SpringBootTest AutoConfigureTestDatabase class TaskControllerIntegrationTest { Autowired private TestRestTemplate restTemplate; Autowired private TaskRepository taskRepository; Autowired private UserRepository userRepository; BeforeEach void setUp() { taskRepository.deleteAll(); userRepository.deleteAll(); } Test void createTask_ThroughHttp_ShouldReturnCreatedTask() { // 准备测试数据 User user new User(); user.setUsername(testuser); user.setEmail(testexample.com); user.setRole(UserRole.USER); User savedUser userRepository.save(user); // 准备请求 TaskCreateRequest request new TaskCreateRequest(); request.setTitle(集成测试任务); request.setDescription(这是集成测试描述); request.setAssigneeId(savedUser.getId()); HttpHeaders headers new HttpHeaders(); headers.setBearerAuth(getTestToken()); HttpEntityTaskCreateRequest entity new HttpEntity(request, headers); // 执行请求 ResponseEntityTask response restTemplate.exchange( /api/tasks, HttpMethod.POST, entity, Task.class ); // 验证结果 assertEquals(HttpStatus.CREATED, response.getStatusCode()); assertNotNull(response.getBody()); assertEquals(集成测试任务, response.getBody().getTitle()); // 验证数据库 ListTask tasks taskRepository.findAll(); assertEquals(1, tasks.size()); } }6.3 性能测试与优化使用JMeter进行压力测试识别性能瓶颈Service public class TaskPerformanceService { // 批量处理优化 Async public CompletableFutureVoid batchUpdateTaskStatus(ListLong taskIds, TaskStatus status) { return CompletableFuture.runAsync(() - { // 分批处理避免大事务 ListListLong batches Lists.partition(taskIds, 100); batches.forEach(batch - { taskRepository.updateStatusBatch(batch, status); // 异步清理缓存 batch.forEach(this::evictTaskCacheAsync); }); }); } // 查询优化使用覆盖索引 Query(value SELECT id, title, status FROM tasks WHERE assignee_id ?1 AND status ?2, nativeQuery true) ListTaskProjection findTaskSummariesByAssigneeAndStatus(Long assigneeId, String status); }7. 部署与运维实践7.1 Docker容器化部署编写完整的Docker部署配置# 后端Dockerfile FROM openjdk:17-jdk-slim as builder WORKDIR /app COPY mvnw . COPY .mvn .mvn COPY pom.xml . COPY src src RUN ./mvnw clean package -DskipTests FROM openjdk:17-jdk-slim WORKDIR /app COPY --frombuilder /app/target/*.jar app.jar EXPOSE 8080 ENTRYPOINT [java, -jar, app.jar] # docker-compose.yml version: 3.8 services: backend: build: ./backend ports: - 8080:8080 environment: - SPRING_PROFILES_ACTIVEprod - DB_URLjdbc:mysql://mysql:3306/taskmanager depends_on: - mysql - redis frontend: build: ./frontend ports: - 3000:80 depends_on: - backend mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: rootpass MYSQL_DATABASE: taskmanager volumes: - mysql_data:/var/lib/mysql redis: image: redis:6.2-alpine ports: - 6379:6379 volumes: mysql_data:7.2 监控与日志配置集成Prometheus和Grafana实现系统监控# application-prod.yml management: endpoints: web: exposure: include: health,info,metrics,prometheus endpoint: health: show-details: always metrics: enabled: true prometheus: enabled: true logging: level: com.example.taskmanager: INFO file: name: /var/log/taskmanager/app.log pattern: console: %d{yyyy-MM-dd HH:mm:ss} - %logger{36} - %msg%n file: %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n # 自定义监控指标 Component public class TaskMetrics { private final Counter taskCreatedCounter; private final Gauge taskStatusGauge; public TaskMetrics(MeterRegistry registry) { this.taskCreatedCounter Counter.builder(task.created) .description(创建的任务数量) .register(registry); this.taskStatusGauge Gauge.builder(task.status.count) .description(各状态任务数量) .tag(status, pending) .register(registry); } public void incrementTaskCreated() { taskCreatedCounter.increment(); } }7.3 持续集成流水线GitLab CI/CD配置示例# .gitlab-ci.yml stages: - test - build - deploy unit-test: stage: test image: maven:3.8-openjdk-17 script: - mvn clean test only: - merge_requests - main integration-test: stage: test image: maven:3.8-openjdk-17 services: - mysql:8.0 - redis:6.2 script: - mvn verify -Dspring.profiles.activetest only: - main build-backend: stage: build image: docker:20.10 services: - docker:20.10-dind script: - docker build -t task-manager-backend:${CI_COMMIT_SHORT_SHA} ./backend - docker push registry.example.com/task-manager-backend:${CI_COMMIT_SHORT_SHA} only: - main deploy-prod: stage: deploy image: alpine:3.14 script: - apk add --no-cache openssh-client - ssh deployserver.example.com docker-compose pull docker-compose up -d only: - main8. 常见问题排查手册8.1 启动类问题排查问题现象应用启动失败报错Bean创建失败排查步骤检查配置文件格式是否正确特别是YAML缩进验证数据库连接参数确保网络可达检查依赖版本兼容性特别是Spring Boot与数据库驱动版本查看完整堆栈日志定位具体报错位置解决方案示例# 检查依赖树排查版本冲突 mvn dependency:tree -Dincludesspring-boot # 验证数据库连接 mysql -h localhost -u root -p -e SHOW DATABASES; # 清理重新编译 mvn clean compile8.2 运行时性能问题问题现象API响应缓慢数据库CPU占用高排查步骤使用Arthas或JProfiler分析慢方法检查SQL执行计划确认索引使用情况分析线程堆栈识别阻塞操作监控GC情况检查内存使用优化方案-- 添加缺失索引 CREATE INDEX idx_task_assignee_status ON tasks(assignee_id, status); CREATE INDEX idx_task_deadline ON tasks(deadline) WHERE status ! COMPLETED; -- 优化慢查询 EXPLAIN ANALYZE SELECT * FROM tasks WHERE assignee_id ? AND status ?;8.3 前端常见问题问题现象页面白屏控制台报错排查步骤检查浏览器控制台错误信息验证API接口返回数据格式确认路由配置是否正确检查组件props传递是否完整调试技巧// 添加调试日志 useEffect(() { console.log(当前状态:, { tasks, loading, pagination }); }, [tasks, loading, pagination]); // 使用React Developer Tools检查组件状态9. 项目扩展与优化方向9.1 微服务架构改造当前单体架构可以逐步拆分为微服务// 用户服务独立 Service public class UserService { // 用户管理相关业务 } // 任务服务独立 Service public class TaskService { // 任务管理核心逻辑 } // 通知服务独立 Service public class NotificationService { // 消息推送、邮件发送等 }9.2 前端性能优化策略代码分割使用React.lazy实现路由级懒加载图片优化WebP格式 懒加载缓存策略Service Worker实现离线缓存打包优化分析bundle大小移除未使用代码9.3 数据库优化方案读写分离主从复制架构分库分表按用户ID进行数据分片归档策略历史数据定期归档到分析库连接池优化合理配置最大连接数和超时时间通过这个完整的实战项目我们系统性地应用了62个核心技能点从基础开发到高级特性从本地测试到生产部署形成了一个完整的技术能力闭环。建议读者在理解本项目的基础上尝试添加新功能或优化现有实现进一步巩固技能体系。

相关新闻

如何实现千牛自动化上架自动化?React底层Event注入,表单毫秒级填充

如何实现千牛自动化上架自动化?React底层Event注入,表单毫秒级填充

如何实现千牛自动化上架自动化?React底层Event注入,表单毫秒级填充 电商自动化圈子里流传一句话:千牛的自动化上架,是店群运营中最耗人力也最容易出错的环节。 手动上架一个商品从填写标题、上传主图、设置SKU、填写详情到发布&…

2026/10/19 0:33:30 阅读更多 →
Python离线部署实战:一键打包与跨平台安装全攻略

Python离线部署实战:一键打包与跨平台安装全攻略

1. 项目概述:为什么我们需要“一键离线安装”?做Python开发或者数据分析的朋友,肯定都遇到过这样的场景:客户现场、生产服务器、或者一个网络环境极其受限的“内网”环境,需要部署一个完整的Python项目。你信心满满地掏…

2026/10/17 8:06:08 阅读更多 →
小学生学C++编程语法知识(C++模板(Template)详解)

小学生学C++编程语法知识(C++模板(Template)详解)

C模板&#xff08;Template&#xff09;详解——给小学生的“魔法公式”同学们&#xff0c;今天我们学习一个在C编程、STL标准库、算法竞赛中非常重要的知识&#xff1a;模板&#xff08;Template&#xff09;。你平时写代码&#xff0c;会经常看到&#xff1a;vector<int&g…

2026/10/11 20:06:43 阅读更多 →

最新新闻

第一个 MCP 服务器:从 SDK 到可用的 tools/resources/prompts,TaoToken 统一 Key 通道实践

第一个 MCP 服务器:从 SDK 到可用的 tools/resources/prompts,TaoToken 统一 Key 通道实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:33:04 阅读更多 →
OpenRouter 2026 重磅更新:Agentic Web Tools 统一大模型联网搜索与页面抓取,TaoToken 统一 Key 通道实测

OpenRouter 2026 重磅更新:Agentic Web Tools 统一大模型联网搜索与页面抓取,TaoToken 统一 Key 通道实测

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:33:04 阅读更多 →
C# 集成 OnnxRuntime 部署 PP-Vehicle 车辆分析全流程

C# 集成 OnnxRuntime 部署 PP-Vehicle 车辆分析全流程

简介&#xff1a;本资源为基于 C# 与 Onnx 的 PP-Vehicle 车辆分析完整源码&#xff0c;面向具备一定 C# 与深度学习部署基础、希望快速落地车辆视觉分析功能的开发者。项目整合车辆检测、车型识别、车辆颜色判别与车牌检测等多项能力&#xff0c;可用于智能交通、停车场管理、…

2026/10/19 0:32:03 阅读更多 →
open-code-review:可审计、可干预的开源代码审查框架

open-code-review:可审计、可干预的开源代码审查框架

1. 这不是又一个“AI代码审查工具”&#xff0c;而是开发者自己掌控审查权的起点“open-code-review”这个项目名乍看平平无奇&#xff0c;甚至有点像某个被遗忘在GitHub角落的冷门仓库——没有炫酷的UI&#xff0c;不提“秒级修复”&#xff0c;也不承诺“零Bug交付”。但如果…

2026/10/19 0:31:03 阅读更多 →
Hermes Agent 中 Skills 与 Tools 的关系分析:从 TaoToken 统一 Key 通道看能力编排

Hermes Agent 中 Skills 与 Tools 的关系分析:从 TaoToken 统一 Key 通道看能力编排

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:31:03 阅读更多 →
【AI】codex 使用教程:从 AGENTS.md 到 skills 的完整配置指南

【AI】codex 使用教程:从 AGENTS.md 到 skills 的完整配置指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:29:02 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介&#xff1a;本资源为电源技术方向的学术研究文档&#xff0c;聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略&#xff0c;面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址&#xff1a; https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集&#xff0c;共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →