手把手教你从零搭建SpringBoot项目:超详细图文教程

手把手教你从零搭建SpringBoot项目:超详细图文教程

前言

SpringBoot作为当前Java领域最流行的微服务框架之一,以其"约定大于配置"的理念和快速开发的特点,深受开发者喜爱。无论你是Java初学者,还是有一定经验的开发者,掌握SpringBoot都是必备技能。本文将带你从零开始,一步步搭建一个完整的SpringBoot项目,并深入讲解其中的原理和最佳实践。

一、SpringBoot简介与优势

1.1 什么是SpringBoot?

SpringBoot是基于Spring框架的"脚手架"工具,它简化了基于Spring的应用开发。通过自动配置和起步依赖,开发者可以快速创建独立运行、生产级别的Spring应用程序。

1.2 SpringBoot的核心优势

· 快速启动:内置Tomcat、Jetty等Web容器,无需部署WAR包
· 自动配置:根据classpath中的jar包自动配置Bean
· 起步依赖:通过starter简化Maven/Gradle配置
· 无代码生成:无需XML配置,开箱即用
· 生产就绪:提供监控、健康检查等生产级特性

二、环境准备与工具安装

2.1 JDK安装与配置

SpringBoot 2.x需要JDK 1.8或更高版本,SpringBoot 3.x需要JDK 17或更高版本。

安装步骤:

  1. 访问Oracle官网或OpenJDK官网下载JDK
  2. 安装JDK并配置环境变量
  3. 验证安装:在命令行执行 java -version
# 验证JDK安装java-version javac -version

2.2 开发工具选择与配置

推荐IDE:

· IntelliJ IDEA(推荐使用Ultimate版)
· Eclipse with Spring Tools
· VS Code with Java扩展

2.3 Maven安装与配置

# 下载Maven并解压# 配置环境变量 MAVEN_HOME 和 PATH# 验证安装 mvn -version

2.4 数据库准备(可选)

· MySQL 5.7+/8.0
· PostgreSQL
· 其他支持的数据库

三、使用Spring Initializr快速创建项目

3.1 在线创建项目

  1. 访问 start.spring.io
  2. 选择项目配置:
    · Project: Maven Project
    · Language: Java
    · Spring Boot: 选择稳定版本(如3.1.0)
    · Project Metadata: 填写Group、Artifact等信息
    · Dependencies: 添加需要的起步依赖

3.2 使用IDE创建

IntelliJ IDEA创建步骤:

  1. File → New → Project
  2. 选择Spring Initializr
  3. 配置项目信息
  4. 选择依赖(Web、JPA、MySQL等)
  5. 完成创建

3.3 使用命令行创建

curl https://start.spring.io/starter.zip \-ddependencies=web,data-jpa,mysql \-dgroupId=com.example \-dartifactId=demo \-o demo.zip unzip demo.zip 

四、手动创建SpringBoot项目

虽然推荐使用Spring Initializr,但了解手动创建过程有助于理解项目结构。

4.1 创建Maven项目结构

my-springboot-project/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/example/demo/ │ │ └── resources/ │ │ ├── application.properties │ │ ├── static/ │ │ └── templates/ │ └── test/ │ └── java/ │ └── com/example/demo/ └── pom.xml 

4.2 配置pom.xml

<?xml version="1.0" encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!-- Spring Boot父项目,提供依赖管理 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.0</version><relativePath/></parent><groupId>com.example</groupId><artifactId>demo</artifactId><version>1.0.0</version><packaging>jar</packaging><name>demo</name><description>Demo project for Spring Boot</description><properties><java.version>17</java.version></properties><dependencies><!-- Web开发起步依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 测试起步依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- 热部署依赖(开发时使用) --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency></dependencies><build><plugins><!-- Spring Boot Maven插件 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

4.3 创建主应用类

packagecom.example.demo;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;/** * SpringBoot应用主类 * @SpringBootApplication 注解标识这是一个SpringBoot应用 */@SpringBootApplicationpublicclassDemoApplication{publicstaticvoidmain(String[] args){// 启动SpringBoot应用SpringApplication.run(DemoApplication.class, args);}}

五、项目结构深度解析

5.1 标准项目目录结构

src/ ├── main/ │ ├── java/ # Java源代码 │ │ └── com/example/demo/ │ │ ├── controller/ # 控制器层 │ │ ├── service/ # 业务逻辑层 │ │ ├── repository/ # 数据访问层 │ │ ├── entity/ # 实体类 │ │ ├── config/ # 配置类 │ │ └── DemoApplication.java # 主应用类 │ └── resources/ # 资源文件 │ ├── static/ # 静态资源(css,js,图片) │ ├── templates/ # 模板文件(thymeleaf,freemarker) │ ├── application.properties # 主配置文件 │ └── application-dev.properties # 开发环境配置 └── test/ # 测试代码 └── java/ └── com/example/demo/ 

5.2 配置文件详解

application.properties:

# 应用配置 spring.application.name=demo # 服务器配置 server.port=8080 server.servlet.context-path=/demo # 日志配置 logging.level.com.example.demo=DEBUG logging.file.name=logs/demo.log # 开发环境配置 spring.profiles.active=dev 

application-dev.properties:

# 开发环境数据库配置 spring.datasource.url=jdbc:mysql://localhost:3306/demo_dev spring.datasource.username=dev_user spring.datasource.password=dev_password # H2内存数据库(开发测试用) # spring.datasource.url=jdbc:h2:mem:testdb # spring.datasource.driverClassName=org.h2.Driver # spring.datasource.username=sa # spring.datasource.password=password # JPA配置 spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.jpa.properties.hibernate.format_sql=true 

六、编写第一个RESTful API

6.1 创建实体类

packagecom.example.demo.entity;importjava.time.LocalDateTime;publicclassUser{privateLong id;privateString username;privateString email;privateLocalDateTime createTime;// 构造方法publicUser(){}publicUser(Long id,String username,String email){this.id = id;this.username = username;this.email = email;this.createTime =LocalDateTime.now();}// Getter和Setter方法publicLonggetId(){return id;}publicvoidsetId(Long id){this.id = id;}publicStringgetUsername(){return username;}publicvoidsetUsername(String username){this.username = username;}publicStringgetEmail(){return email;}publicvoidsetEmail(String email){this.email = email;}publicLocalDateTimegetCreateTime(){return createTime;}publicvoidsetCreateTime(LocalDateTime createTime){this.createTime = createTime;}}

6.2 创建控制器

packagecom.example.demo.controller;importcom.example.demo.entity.User;importorg.springframework.web.bind.annotation.*;importjava.util.ArrayList;importjava.util.List;importjava.util.concurrent.atomic.AtomicLong;/** * 用户管理控制器 * @RestController 组合了@Controller和@ResponseBody */@RestController@RequestMapping("/api/users")publicclassUserController{privatefinalList<User> users =newArrayList<>();privatefinalAtomicLong counter =newAtomicLong();// 初始化一些测试数据publicUserController(){ users.add(newUser(counter.incrementAndGet(),"张三","[email protected]")); users.add(newUser(counter.incrementAndGet(),"李四","[email protected]"));}/** * 获取所有用户 * GET /api/users */@GetMappingpublicList<User>getAllUsers(){return users;}/** * 根据ID获取用户 * GET /api/users/{id} */@GetMapping("/{id}")publicUsergetUserById(@PathVariableLong id){return users.stream().filter(user -> user.getId().equals(id)).findFirst().orElse(null);}/** * 创建新用户 * POST /api/users */@PostMappingpublicUsercreateUser(@RequestBodyUser user){ user.setId(counter.incrementAndGet()); users.add(user);return user;}/** * 更新用户信息 * PUT /api/users/{id} */@PutMapping("/{id}")publicUserupdateUser(@PathVariableLong id,@RequestBodyUser userDetails){User user =getUserById(id);if(user !=null){ user.setUsername(userDetails.getUsername()); user.setEmail(userDetails.getEmail());}return user;}/** * 删除用户 * DELETE /api/users/{id} */@DeleteMapping("/{id}")publicStringdeleteUser(@PathVariableLong id){ users.removeIf(user -> user.getId().equals(id));return"用户删除成功";}}

6.3 创建服务层

packagecom.example.demo.service;importcom.example.demo.entity.User;importorg.springframework.stereotype.Service;importjava.util.List;importjava.util.Optional;/** * 用户服务层 * @Service 标识这是一个Spring服务组件 */@ServicepublicclassUserService{/** * 模拟数据库操作 - 获取所有用户 */publicList<User>findAllUsers(){// 实际项目中这里会调用RepositoryreturnList.of(newUser(1L,"张三","[email protected]"),newUser(2L,"李四","[email protected]"));}/** * 根据ID查找用户 */publicOptional<User>findUserById(Long id){// 模拟数据库查询returnfindAllUsers().stream().filter(user -> user.getId().equals(id)).findFirst();}/** * 创建用户 */publicUsercreateUser(User user){// 模拟保存到数据库return user;}}

6.4 更新控制器使用服务层

packagecom.example.demo.controller;importcom.example.demo.entity.User;importcom.example.demo.service.UserService;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.http.ResponseEntity;importorg.springframework.web.bind.annotation.*;importjava.util.List;importjava.util.Optional;@RestController@RequestMapping("/api/v2/users")publicclassUserControllerV2{privatefinalUserService userService;/** * 构造器注入 - 推荐方式 */@AutowiredpublicUserControllerV2(UserService userService){this.userService = userService;}@GetMappingpublicList<User>getAllUsers(){return userService.findAllUsers();}@GetMapping("/{id}")publicResponseEntity<User>getUserById(@PathVariableLong id){Optional<User> user = userService.findUserById(id);return user.map(ResponseEntity::ok).orElse(ResponseEntity.notFound().build());}@PostMappingpublicUsercreateUser(@RequestBodyUser user){return userService.createUser(user);}}

七、数据库集成与JPA使用

7.1 添加数据库依赖

<!-- 在pom.xml中添加 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- MySQL驱动 --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><!-- H2数据库(测试用) --><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency>

7.2 配置数据源

# application.properties spring.datasource.url=jdbc:mysql://localhost:3306/demo?useSSL=false&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=123456 # JPA配置 spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect # H2控制台(开发时使用) spring.h2.console.enabled=true spring.h2.console.path=/h2-console 

7.3 创建JPA实体

packagecom.example.demo.entity;importjakarta.persistence.*;importjava.time.LocalDateTime;@Entity@Table(name ="users")publicclassUser{@Id@GeneratedValue(strategy =GenerationType.IDENTITY)privateLong id;@Column(nullable =false, unique =true, length =50)privateString username;@Column(nullable =false, unique =true, length =100)privateString email;@Column(name ="create_time")privateLocalDateTime createTime;// 构造方法publicUser(){this.createTime =LocalDateTime.now();}publicUser(String username,String email){this();this.username = username;this.email = email;}// Getter和Setter// ... 省略getter/setter}

7.4 创建Repository接口

packagecom.example.demo.repository;importcom.example.demo.entity.User;importorg.springframework.data.jpa.repository.JpaRepository;importorg.springframework.data.jpa.repository.Query;importorg.springframework.data.repository.query.Param;importorg.springframework.stereotype.Repository;importjava.util.List;importjava.util.Optional;@RepositorypublicinterfaceUserRepositoryextendsJpaRepository<User,Long>{// 根据用户名查找用户Optional<User>findByUsername(String username);// 根据邮箱查找用户Optional<User>findByEmail(String email);// 自定义查询:查找创建时间在指定时间之后的用户@Query("SELECT u FROM User u WHERE u.createTime > :createTime")List<User>findUsersAfterCreateTime(@Param("createTime")LocalDateTime createTime);// 检查用户名是否存在booleanexistsByUsername(String username);// 检查邮箱是否存在booleanexistsByEmail(String email);}

7.5 更新服务层使用Repository

packagecom.example.demo.service;importcom.example.demo.entity.User;importcom.example.demo.repository.UserRepository;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;importjava.util.List;importjava.util.Optional;@ServicepublicclassUserService{privatefinalUserRepository userRepository;@AutowiredpublicUserService(UserRepository userRepository){this.userRepository = userRepository;}publicList<User>findAllUsers(){return userRepository.findAll();}publicOptional<User>findUserById(Long id){return userRepository.findById(id);}publicUsersaveUser(User user){return userRepository.save(user);}publicvoiddeleteUser(Long id){ userRepository.deleteById(id);}publicbooleanexistsByUsername(String username){return userRepository.existsByUsername(username);}publicbooleanexistsByEmail(String email){return userRepository.existsByEmail(email);}}

八、异常处理与统一响应

8.1 创建自定义异常

packagecom.example.demo.exception;publicclassResourceNotFoundExceptionextendsRuntimeException{publicResourceNotFoundException(String message){super(message);}}publicclassBusinessExceptionextendsRuntimeException{publicBusinessException(String message){super(message);}}

8.2 创建统一响应对象

packagecom.example.demo.dto;publicclassApiResponse<T>{privateboolean success;privateString message;privateT data;privateString errorCode;// 成功响应publicstatic<T>ApiResponse<T>success(T data){returnnewApiResponse<>(true,"操作成功", data,null);}publicstatic<T>ApiResponse<T>success(String message,T data){returnnewApiResponse<>(true, message, data,null);}// 失败响应publicstatic<T>ApiResponse<T>error(String message){returnnewApiResponse<>(false, message,null,null);}publicstatic<T>ApiResponse<T>error(String message,String errorCode){returnnewApiResponse<>(false, message,null, errorCode);}// 构造方法、getter、setterpublicApiResponse(boolean success,String message,T data,String errorCode){this.success = success;this.message = message;this.data = data;this.errorCode = errorCode;}// ... 省略getter/setter}

8.3 创建全局异常处理器

packagecom.example.demo.handler;importcom.example.demo.dto.ApiResponse;importcom.example.demo.exception.ResourceNotFoundException;importorg.springframework.http.HttpStatus;importorg.springframework.http.ResponseEntity;importorg.springframework.validation.FieldError;importorg.springframework.web.bind.MethodArgumentNotValidException;importorg.springframework.web.bind.annotation.ExceptionHandler;importorg.springframework.web.bind.annotation.RestControllerAdvice;importjava.util.HashMap;importjava.util.Map;/** * 全局异常处理 */@RestControllerAdvicepublicclassGlobalExceptionHandler{/** * 处理资源不存在异常 */@ExceptionHandler(ResourceNotFoundException.class)publicResponseEntity<ApiResponse<Object>>handleResourceNotFound(ResourceNotFoundException ex){ApiResponse<Object> response =ApiResponse.error(ex.getMessage());returnnewResponseEntity<>(response,HttpStatus.NOT_FOUND);}/** * 处理参数验证异常 */@ExceptionHandler(MethodArgumentNotValidException.class)publicResponseEntity<ApiResponse<Map<String,String>>>handleValidationExceptions(MethodArgumentNotValidException ex){Map<String,String> errors =newHashMap<>(); ex.getBindingResult().getAllErrors().forEach((error)->{String fieldName =((FieldError) error).getField();String errorMessage = error.getDefaultMessage(); errors.put(fieldName, errorMessage);});ApiResponse<Map<String,String>> response =ApiResponse.error("参数验证失败","VALIDATION_ERROR"); response.setData(errors);returnnewResponseEntity<>(response,HttpStatus.BAD_REQUEST);}/** * 处理其他所有异常 */@ExceptionHandler(Exception.class)publicResponseEntity<ApiResponse<Object>>handleGlobalException(Exception ex){ApiResponse<Object> response =ApiResponse.error("服务器内部错误");returnnewResponseEntity<>(response,HttpStatus.INTERNAL_SERVER_ERROR);}}

九、运行与测试

9.1 启动应用程序

方式一:使用IDE运行

· 直接运行主类的main方法

方式二:使用Maven命令

mvn spring-boot:run 

方式三:打包后运行

mvn clean package java-jar target/demo-1.0.0.jar 

9.2 测试API接口

使用Postman或curl测试创建的API:

# 获取所有用户curl-X GET http://localhost:8080/api/users # 根据ID获取用户curl-X GET http://localhost:8080/api/users/1 # 创建新用户curl-X POST http://localhost:8080/api/users \-H"Content-Type: application/json"\-d'{"username":"王五","email":"[email protected]"}'# 更新用户curl-X PUT http://localhost:8080/api/users/1 \-H"Content-Type: application/json"\-d'{"username":"张三丰","email":"[email protected]"}'# 删除用户curl-X DELETE http://localhost:8080/api/users/1 

9.3 编写单元测试

packagecom.example.demo.controller;importcom.example.demo.entity.User;importcom.example.demo.service.UserService;importcom.fasterxml.jackson.databind.ObjectMapper;importorg.junit.jupiter.api.Test;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;importorg.springframework.boot.test.mock.mockito.MockBean;importorg.springframework.http.MediaType;importorg.springframework.test.web.servlet.MockMvc;importjava.util.Arrays;importjava.util.Optional;importstaticorg.mockito.ArgumentMatchers.any;importstaticorg.mockito.Mockito.when;importstaticorg.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;importstaticorg.springframework.test.web.servlet.result.MockMvcResultMatchers.*;@WebMvcTest(UserControllerV2.class)publicclassUserControllerTest{@AutowiredprivateMockMvc mockMvc;@MockBeanprivateUserService userService;@AutowiredprivateObjectMapper objectMapper;@TestpublicvoidtestGetAllUsers()throwsException{User user1 =newUser(1L,"user1","[email protected]");User user2 =newUser(2L,"user2","[email protected]");when(userService.findAllUsers()).thenReturn(Arrays.asList(user1, user2)); mockMvc.perform(get("/api/v2/users")).andExpect(status().isOk()).andExpect(jsonPath("$[0].username").value("user1")).andExpect(jsonPath("$[1].username").value("user2"));}@TestpublicvoidtestGetUserById()throwsException{User user =newUser(1L,"testuser","[email protected]");when(userService.findUserById(1L)).thenReturn(Optional.of(user)); mockMvc.perform(get("/api/v2/users/1")).andExpect(status().isOk()).andExpect(jsonPath("$.username").value("testuser"));}@TestpublicvoidtestCreateUser()throwsException{User user =newUser("newuser","[email protected]");User savedUser =newUser(1L,"newuser","[email protected]");when(userService.saveUser(any(User.class))).thenReturn(savedUser); mockMvc.perform(post("/api/v2/users").contentType(MediaType.APPLICATION_JSON).content(objectMapper.writeValueAsString(user))).andExpect(status().isOk()).andExpect(jsonPath("$.id").value(1L));}}

十、项目优化与最佳实践

10.1 配置文件优化

使用YAML格式配置:

# application.ymlspring:application:name: demo datasource:url: jdbc:mysql://localhost:3306/demo username: root password:123456jpa:hibernate:ddl-auto: update show-sql:trueproperties:hibernate:dialect: org.hibernate.dialect.MySQL8Dialect format_sql:trueserver:port:8080servlet:context-path: /demo logging:level:com.example.demo: DEBUG file:name: logs/demo.log 

10.2 多环境配置

# application-dev.ymlspring:datasource:url: jdbc:mysql://localhost:3306/demo_dev username: dev_user password: dev_password jpa:show-sql:true---# application-prod.ymlspring:datasource:url: jdbc:mysql://prod-db:3306/demo_prod username: prod_user password: ${DB_PASSWORD}jpa:show-sql:falselogging:level:com.example.demo: INFO 

10.3 添加Swagger API文档

<!-- 添加依赖 --><dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>2.1.0</version></dependency>
// 配置类@ConfigurationpublicclassOpenApiConfig{@BeanpublicOpenAPIcustomOpenAPI(){returnnewOpenAPI().info(newInfo().title("Demo API").version("1.0").description("SpringBoot Demo项目API文档").contact(newContact().name("开发者").email("[email protected]")));}}

访问:http://localhost:8080/swagger-ui.html

十一、常见问题与解决方案

11.1 端口被占用

# 修改端口 server.port=8081 

11.2 数据库连接失败

· 检查数据库服务是否启动
· 验证连接URL、用户名、密码
· 检查网络连接

11.3 依赖冲突

使用Maven依赖树分析:

mvn dependency:tree 

11.4 热部署配置

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency>

在IDE中开启自动编译。

十二、总结

通过本文的详细讲解,你应该已经掌握了:

  1. SpringBoot项目创建:多种创建方式及其适用场景
  2. 项目结构理解:标准的Maven目录结构和SpringBoot约定
  3. 核心组件开发:Controller、Service、Repository的分层架构
  4. 数据库集成:使用Spring Data JPA进行数据持久化
  5. RESTful API设计:遵循REST原则设计清晰的API接口
  6. 异常处理:统一的异常处理和响应格式
  7. 测试策略:单元测试和集成测试的编写
  8. 项目优化:配置文件管理、多环境配置等最佳实践

SpringBoot的强大之处在于它的"约定大于配置"理念和丰富的starter生态。掌握这些基础后,你可以继续深入学习SpringBoot的高级特性,如安全认证、消息队列、缓存、监控等,构建更加复杂和强大的应用程序。

希望本教程对你有所帮助,祝你SpringBoot学习之路顺利!

Read more

免疫治疗门诊动线优化:Go离散事件仿真(DES)从“常规排队”到“ResusBay挤兑”的技术全解(上)

免疫治疗门诊动线优化:Go离散事件仿真(DES)从“常规排队”到“ResusBay挤兑”的技术全解(上)

面向读者:算法/后端/数据工程/运筹优化/医疗信息化 关键词:离散事件仿真(DES)、队列系统、资源竞争、预约模板、药房预配、irAE、抢救床位(ResusBay)、尾部风险(P90/超时率)、Go 免疫检查点抑制剂(ICI)是临床上的重大进展,但在医院运营视角下,它把输注中心变成了一个典型的复杂系统: 随机到达 + 随机服务时长 + 多站点串联 + 多资源并发 + 低概率高冲击风险事件(irAE)。 如果你只靠经验改流程,常常会陷入“改了这里堵了那里”;而工程上更稳的方法,是用 **离散事件仿真(DES)**在虚拟世界里“跑一天、一周、一年”,对比策略组合,找出瓶颈与最优干预点。 这篇文章从零到一搭建一个“可跑”的 Go DES 仿真框架,

By Ne0inhk
π0源码(openpi)剖析——从π0模型架构的实现:如何基于PaLI-Gemma和扩散策略去噪生成动作,到基于C/S架构下的模型训练与部署

π0源码(openpi)剖析——从π0模型架构的实现:如何基于PaLI-Gemma和扩散策略去噪生成动作,到基于C/S架构下的模型训练与部署

前言 ChatGPT出来后的两年多,也是我疯狂写博的两年多(年初deepseek更引爆了下),比如从创业起步时的15年到后来22年之间 每年2-6篇的,干到了23年30篇、24年65篇、25年前两月18篇,成了我在大模型和具身的原始技术积累 如今一转眼已到25年3月初,时光走得太快,近期和团队接了好几个大客户订单,使得3月起 不得不全力加速落地,自己也得每天抠paper、搞代码 so,为何在明明如此之忙 一天当两天用的情况下,还要继续努力更新博客呢? 原因在于 1. 二方面,我司「七月在线」在做一系列工厂落地场景的过程中,我们也希望团结到可以和我们一块做的朋友,而若想团结,便需要借助博客 顺带分享我们每个季度在重点做的业务场景 一方面,我确实喜欢分享,因为写博的这10多年下来 确实可以帮到很多、很多人,不然本博客也不会有如今如此巨大的访问量与影响力 更何况有些文章是之前既定计划中的,在本文之前,上一篇关于π0的文章是π0_fast《π0开源了且推出自回归版π0-FAST——打造机器人动作专用的高效Tokenizer:比扩散π0的训练速度快5倍但效果相当》,文中提到,会解读

By Ne0inhk

Palantir 产品架构调研

描述: 2003 年创立,是一家美国上市公司,专注于大数据分析软件平台 Palantir Technologies 由硅谷神秘人物 Peter Thiel 共同创立。这位亿万富翁对冲基金经理是PayPal的创始成员之一,可以说是现代金融科技的教父。泰尔还是同名PayPal 黑手党的成员,该组织由一群被许多人认为是有远见的技术领导者的企业家组成。 该公司拥有三个主要项目:Palantir Gotham、Palantir Foundry 和 Palantir Apollo。 Palantir Gotham 是军队和反恐分析师使用的情报和防御工具。其客户包括美国情报界(USIC)和美国国防部。 他们的软件即服务 (SaaS)是美国国防部授权用于关键任务国家安全系统 (IL5) 的五种产品之一。Palantir Foundry 被摩根士丹利、 Merck KGaA 、 Airbus 、 Wejo 、 Lilium 、 PG&E和Fiat Chrysler Automobiles等企业客户用于数据集成和分析。 Palantir Apollo

By Ne0inhk

X86、ARM与C86架构全面对比分析:性能、功耗、成本与生态系统

目录标题 * X86、ARM与C86架构全面对比分析:性能、功耗、成本与生态系统 * 一、架构概述与发展背景 * 1.1 X86架构:PC与服务器市场的传统霸主 * 1.2 ARM架构:移动领域的王者与新兴服务器力量 * 1.3 C86架构:国产x86兼容的创新尝试 * 二、性能表现对比分析 * 2.1 运算速度与数据处理能力 * 2.2 不同场景下的性能表现 * 2.3 性能优化与未来趋势 * 三、功耗与能效比分析 * 3.1 不同架构的功耗特性 * 3.2 不同应用场景下的能耗分析 * 3.3 能效优化技术与未来趋势 * 四、成本分析与经济性比较 * 4.1 芯片制造成本对比 * 4.2 不同应用场景的总体拥有成本(

By Ne0inhk