Lucaju 的技术笔记 - 保姆级教程
type: channel
link: https://www.lucaju.cn/index.php/tag/%E4%BF%9D%E5%A7%86%E7%BA%A7%E6%95%99%E7%A8%8B/
items: 接入 DeepSeek | Java 调用大模型实战保姆级教程：新手快速上手
items: Ubuntu环境Mysql安装的保姆级教程
items: 从零起步，Ubuntu环境搭建Typecho个人博客的保姆级教程
items: 在 Ubuntu 环境下安装与配置 Nginx 的完整指南
items: 写给新同学的SpringBoot教程 — 高级篇
items: 写给新同学的SpringBoot教程 — 入门篇

接入 DeepSeek | Java 调用大模型实战保姆级教程：新手快速上手
type: item
date: 2025-08-11T17:33:00+08:00
description: 接入 DeepSeek | Java 调用大模型实战保姆级教程：新手快速上手最近各大平台接入 DeepSeek 大模型的案例越来越多，作为程序员，你是不是也想亲手实现一次？别担心，这篇教程会用3 种实战方式，带你从零开始用 Java 接入 DeepSeek 大模型，从 SDK 调用到原生 HTTP 请求全覆盖，新手也能轻松上手～前置知识：为什么需要响应式编程？大模型对话为了提升用户体验，通常会采用流式输出（像 ChatGPT 那样逐字显示回复）。而 Java 中实现流式输出需要用到响应式编程（Reactive Programming），核心是通过Flux（Reactor 框架）处理异步数据流。如果你对响应式编程不太熟悉，可以先简单理解：Flux能帮你 “实时接收” 大模型的每一段输出，而不是等全部结果返回后才处理。👉 快速入门参考：Spring 响应式编程官方文档👉 也可参考我的博客：响应式编程学习笔记准备工作：先获取 DeepSeek API Key在开始编码前，需要先申请 DeepSeek 的 API Key：访问 DeepSeek 开放平台：https://platform.deepseek.com/api_keys注册 / 登录账号后，在 “API Keys” 页面点击 “创建 API Key”，保存生成的密钥（后续代码中会用到）。方式一：通过 DeepSeek 官方 SDK 调用（最直接）DeepSeek 官方提供了适配 Spring AI 的 SDK，开箱即用，适合快速集成。1. 添加依赖在pom.xml中引入 Spring AI 对 DeepSeek 的支持（建议使用1.0.0+版本，兼容性更好）： <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-model-deepseek</artifactId> <version>1.0.0</version> </dependency>2. 编码实现：阻塞式与流式输出import org.junit.jupiter.api.Test; import org.springframework.ai.chat.messages.Message; import org.springframework.ai.chat.messages.SystemMessage; import org.springframework.ai.chat.messages.UserMessage; import org.springframework.ai.chat.model.ChatResponse; import org.springframework.ai.chat.prompt.Prompt; import org.springframework.ai.deepseek.DeepSeekChatModel; import org.springframework.ai.deepseek.DeepSeekChatOptions; import org.springframework.ai.deepseek.api.DeepSeekApi; import reactor.core.publisher.Flux; import java.util.ArrayList; import java.util.List; public class DeepSeekSdkTest { // 初始化DeepSeek模型（核心对象） private final DeepSeekChatModel chatModel = DeepSeekChatModel.builder() .deepSeekApi(DeepSeekApi.builder() .apiKey("你的API Key") // 替换为你的DeepSeek API Key .build()) .defaultOptions(DeepSeekChatOptions.builder() .model("deepseek-chat") // 指定模型（支持deepseek-chat、deepseek-coder等） .temperature(0.7) // 控制输出随机性（0-1，值越高越随机） .build()) .build(); // 测试1：阻塞式输出（适合简单场景，等待完整结果返回） @Test public void testBlockingCall() { // 构建对话消息（SystemMessage设定角色，UserMessage是用户提问） List<Message> messages = new ArrayList<>…

Ubuntu环境Mysql安装的保姆级教程
type: item
date: 2025-08-06T14:33:00+08:00
description: 一、Ubuntu简介Ubuntu 是一款基于 Debian 的开源 Linux 操作系统，由南非企业家马克・沙特尔沃思（Mark Shuttleworth）创立的 Canonical 公司主导开发，首次发布于 2004 年。其名称源自非洲祖鲁语或科萨语，意为 “人性” 或 “共享的关怀”，体现了开源社区协作共享的理念。二、Mysql简介MySQL 是一款开源的关系型数据库管理系统（RDBMS），由瑞典 MySQL AB 公司开发，后被 Sun 公司收购，最终随 Sun 并入 Oracle 公司。它以高性能、稳定性、易用性和开源免费为核心优势，成为全球最流行的数据库之一，广泛应用于 Web 开发、企业级应用、数据存储等场景。三、安装 本文介绍Mysql的在线安装过程1、更新软件包sudo apt update2、下载Mysql# 安装最新版本 sudo apt install -y mysql-server # 安装指定版本 sudo apt install -y mysql-server-8.03、启动Mysql、并设置为开机运行sudo systemctl start mysql sudo systemctl enable mysql4、检查mysql状态sudo systemctl status mysql如果出现active(running)，则表示安装启动成功了四、允许远程可视化工具连接1、修改 MySQL 配置文件：找到配置文件，Linux 系统一般位于/etc/mysql/mysql.conf.d/mysqld.cnf，可以使用命令mysql --help | grep "my.cnf"查找。打开配置文件，找到bind-address = 127.0.0.1这一行，将其改为bind-address = 0.0.0.0，表示监听所有 IP 地址上的连接请求。如果是生产环境，也可指定特定 IP，如bind-address = 192.168.1.100。2、创建或授权远程访问用户： 1) 登录 MySQL 服务打开终端，执行以下命令登录 MySQL ，输入 root 密码完成认证（若首次安装无密码，直接回车即可）mysql -u root -p2) 创建并授权新用户（推荐方式）2.1 创建远程访问用户通过 SQL 命令创建新用户，支持自定义用户名、密码，以及控制可访问的 IP 范围：-- 允许任意 IP 访问（% 代表所有 IP） CREATE USER 'remote_user'@'%' IDENTIFIED BY 'your_password'; -- 仅允许指定 IP（如 192.168.1.100）访问，按需替换 -- CREATE USER 'remote_user'@'192.168.1.100' IDENTIFIED BY 'your_password'; 说明： - remote_user：自定义的用户名，可根据需求修改 - your_password：设置的用户密码，建议复杂度足够（字母 + 数字 + 特殊字符） - % 或 192.168.1.100：控制允许登录的 IP 范围，% 适合信任网络，指定 IP 更安全2.2 授予用户远程访问权限创建用户后，需赋予权限并刷新使配置生效：-- 授予所有权限（生产环境可按需缩小权限范围，如指定数据库） GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%' WITH GRANT OPTION; -- 刷新权限，让配置立即生效 FLUSH PRIVILEGES; 说明： - ALL PRIVILEGES：授予全部权限（谨慎使用，生产环境建议细化，如 GRANT SELECT,INSERT ON db_name.* TO ... ） - .：表示所有数据库的所有表，可替换为 db_name.* 限制特定数据库3) 修改已有用户权限（备用方案）若不想新建用户，可直接修改现有用户的远程访问权限：-- 允许任意 IP 访问已有用户（替换 existing_user 和 password） GRANT ALL PRIVILEGES ON *.* TO 'existing_user'@'%' IDENTIFIED BY 'password'; -- 刷新权限 FLUSH PRIVILEGES; 说明： - existing_user：替换为实际的已有用户名 - password：替换为该用户对应的密码 - 此操作会同时重置用户密码（若无需改密码，需保持原密码一致）注意如果安装的是msyql8.0及以上版本GRANT 语句的语法有变化，不再支持在 GRANT 语句里直接用 IDENTIFIED BY 创建 / 修改用户密码，得拆分成…

从零起步，Ubuntu环境搭建Typecho个人博客的保姆级教程
type: item
date: 2025-08-05T17:04:00+08:00
description: 一、确认服务器环境是否满足要求根据Typecho官网要求，运行需要基础环境支持，先检查是否安装以下组件：Web 服务器：Nginx 或 Apache（推荐 Nginx，更轻量）。PHP：5.6 及以上版本（推荐 7.2+），并需启用必要扩展（如 pdo_mysql、mbstring、json、gd 等）。数据库：MySQL 或 MariaDB（用于存储博客数据）。 官网链接: https://typecho.org/二、快速安装基础环境默认大家没有任何环境，从零开始# 安装 Nginx、PHP、MySQL sudo apt update sudo apt install nginx php php-fpm php-mysql php-mbstring php-gd php-json mysql-server三、下载并上传至服务器根据官网下载链接，将下载的zip压缩包，放在服务器自定义的目录下，以/usr/local/typecho 为例四、配置 Web 服务器（以 Nginx 为例）Web 服务器需要将访问请求指向 Typecho 的安装目录（/usr/local/typecho），并处理 PHP 解析。1、创建 Nginx 配置文件sudo nano /etc/nginx/sites-available/typecho # 新建配置文件2、写入配置内容根据你的服务器 IP 或域名修改以下内容（假设用 IP 访问，或已解析域名）：server { listen 80; # 监听 80 端口（HTTP） server_name your_domain.com; # 替换为你的域名或服务器 IP（如 1.2.3.4） # 网站根目录指向 Typecho 解压目录 root /usr/local/typecho; index index.php index.html; # 默认索引文件 # 关键：Typecho 伪静态规则（必须添加） location / { # 如果请求的文件或目录不存在，将请求转发给 index.php 处理 if (!-e $request_filename) { rewrite ^(.*)$ /index.php?$1 last; } } # PHP 解析配置（保持不变） location ~ \.php$ { fastcgi_pass unix:/run/php/php8.1-fpm.sock; # 替换为你的 PHP 版本 fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } # 禁止访问隐藏文件（保持不变） location ~ /\. { deny all; access_log off; log_not_found off; } # 静态资源缓存（保持不变） location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 30d; add_header Cache-Control "public, max-age=2592000"; } # 日志配置（可选） access_log /var/log/nginx/typecho_access.log; error_log /var/log/nginx/typecho_error.log; }注意：fastcgi_pass 中的 PHP 版本需与你安装的一致（可通过 ls /run/php/ 查看实际 sock 文件名）。3、启用配置并重启 Nginxsudo ln -s /etc/nginx/sites-available/typecho /etc/nginx/sites-enabled/ # 启用站点 sudo nginx -t # 检查配置是否有误 sudo systemctl restart nginx # 重启 Nginx五、设置 Typecho 目录权限Typecho 需要对部分目录有写入权限（如配置文件、缓存、上传目录），否则安装时会提示 “无法写入配置文件”。执行以下命令修改权限：# 递归设置目录所有者为 Web 服务器用户（Nginx 通常用 www-data） sudo chown -R www-data:www-data /usr/local/typecho # 确保关键目录可写（可选，根据实际提示调整） sudo chmod -R 755 /usr/local/typecho/usr # 上传和缓存目录 sudo chmod 755 /usr/local/typecho # 根目录（确保能生成 config…

在 Ubuntu 环境下安装与配置 Nginx 的完整指南
type: item
date: 2025-08-05T16:29:00+08:00
description: Nginx简介 Nginx是一款高性能的开源 Web 服务器、反向代理服务器、负载均衡器和 HTTP 缓存工具。它由俄罗斯程序员伊戈尔・赛索耶夫（Igor Sysoev）于 2004 年首次公开发布，最初设计的目标是解决高并发场景下的性能瓶颈，如今已成为全球最流行的服务器软件之一，被 Netflix、Airbnb、GitHub、腾讯、阿里等众多大型企业广泛使用。本文将详细介绍如何在 Ubuntu 系统中安装、配置并优化 Nginx，适合初学者入门参考。一、安装 NginxUbuntu 的官方软件仓库中已经包含了 Nginx，我们可以通过 APT 包管理器轻松安装。更新系统包列表首先确保系统包列表是最新的：sudo apt update安装 Nginx执行以下命令安装 Nginx：sudo apt install nginx验证安装是否成功安装完成后，Nginx 会自动启动。可以通过以下命令检查其运行状态：sudo systemctl status nginx如果看到 "active (running)" 字样，说明 Nginx 已经成功启动。配置防火墙 4.1 如果你的 Ubuntu 系统启用了 UFW 防火墙，需要允许 HTTP（80 端口）和 HTTPS（443 端口）流量：sudo ufw allow 'Nginx Full'可以通过以下命令验证防火墙规则：sudo ufw status 4.2 如果你跟我一样，使用的是云服务器，那么只需要在安全组中开放80端口即可二、Nginx的基本操作掌握以下基本命令可以帮助你管理 Nginx 服务：启动 Nginx：sudo systemctl start nginx停止 Nginx：sudo systemctl stop nginx重启 Nginx：sudo systemctl restart nginx重新加载配置（不中断服务）：sudo systemctl reload nginx设置开机自启动：sudo systemctl enable nginx禁止开机自启动：sudo systemctl disable nginx三、Nginx 的配置文件结构Nginx 的配置文件位于/etc/nginx目录下，主要文件和目录包括：/etc/nginx/nginx.conf：主配置文件/etc/nginx/sites-available/：存储所有网站的配置文件/etc/nginx/sites-enabled/：存储启用的网站配置（通常是指向 sites-available 目录的软链接）/etc/nginx/conf.d/：可以存放额外的配置片段/etc/nginx/mime.types：定义 MIME 类型这种结构允许我们为每个网站创建独立的配置文件，便于管理。四、配置一个基本的 Web 站点下面我们创建一个简单的 Web 站点配置：创建网站目录首先为网站创建一个目录，并设置适当的权限：sudo mkdir -p /var/www/example.com/html sudo chown -R $USER:$USER /var/www/example.com/html sudo chmod -R 755 /var/www创建测试页面在网站目录下创建一个简单的 HTML 文件：nano /var/www/example.com/html/index.html添加以下内容：预览 Welcome to Example.com! Success! The example.com server block is working! 保存并关闭文件。创建服务器配置文件在sites-available目录下创建一个新的配置文件：sudo nano /etc/nginx/sites-available/example.com添加以下配置：server { listen 80; listen [::]:80; root /var/www/example.com/html; index index.html index.htm index.nginx-debian.html; server_name example.com www.example.com; # 替换为你的域名或服务器 IP（如 1.2.3.4） location / { try_files $uri $uri/ =404; } }这个配置指定了：监听 80 端口（HTTP）网站文件根目录默认索引文件服务器域名基本的请求处理规则启用站点配置通过创建软链接将配置文件链接到sites-enabled目录：sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enab…

写给新同学的SpringBoot教程 — 高级篇
type: item
date: 2020-04-11T14:49:00+08:00
description: 写给新同学的SpringBoot教程 — 高级篇一、添加缓存1、使用SpringBoot自带缓存功能1、基本使用在主类上添加注解@EnableCaching在业务方法上添加@Cacheable(cacheNames = "xxx")注解这样即可实现基础的缓存功能基本流程：@Cacheable:方法执行之前，先去查询Cache（缓存组件），按照CacheNames指定的名字获取，（CacheManager先获取相应的缓存），第一次获取缓存如果没有Cache组件会自行创建去Cache中查找缓存的内容，使用一个key，默认就是方法的参数key是按照某种策略生成的，默认hi使用keyGenerator生成的。默认使用SimplekeyGenerator生成key：​ 如果有一个参数，key=参数的值​ 如果没有参数，key=new SimpleKey();​ 如果有多个参数，key=new SimpleKey(params);没有查到缓存就去调用目标方法；方法查询结束后，将目标方法返回的结果放入到缓存中。总结：​ @Cacheable标注的方法执行之前先来检查缓存中有没有这个数据，默认按照参数的值作为key去查询缓存，如果缓存中没有，就执行方法并将结果放入到缓存中；以后再来调用就可以直接将缓存中的数据进行返回。核心：使用CaCheManager【ConCurrentMapCacheManager】按照名字得到Cache【ConcurrentMapCache】组件key是使用keyGenerator生成的，默认是SimpleKeyGenerator主类：@SpringBootApplication @MapperScan(value = "com.jcq.cache.mapper") @EnableCaching //这个注解不要忘了 public class Springboot09CacheApplication { public static void main(String[] args) { SpringApplication.run(Springboot09CacheApplication.class, args); } }业务方法@Service public class EmployeeService { @Resource private EmployeeMapper employeeMapper; @Cacheable(cacheNames = "emp",key = "#root.methodName+'['+#id+']'") public Employee getEmp(Integer id){ return employeeMapper.selEmpByid(id); } }2、其他属性keyGenerator：key的生成器，可以自己指定key的生成器组件的id ，key/keyGenerator二选一使用。cacheManager:指定缓存管理器，或者cacheResolver指定获取解析器。condition：满足条件是放入缓存。unless：满足条件是不放入缓存，与condition正好相反。sync：默认为false，true为开启异步缓存。若开启异步，unless注解无效3、其他注解@CachePut注解：方法运行完后，将数据放入缓存中@CachePut与@Cacheable的区别：​ 后者在方法运行前先到缓存总查询，前者在方法执行后，将数据放入缓存中。注意：​ 只有保持数据的key相同，才能实现数据的同步更新。 @CachePut(cacheNames = "emp",key = "#employee.id") public Employee update(Employee employee){ employeeMapper.updEmp(employee); return employee; }@CacheEvict:清除缓存数据allEntries:清空所有缓存，默认为falsebeforeInvocation：在方法执行前清空缓存，默认为false注意：保持数据key同一，才可以保持数据同步。 //测试清除缓存中的数据 @CacheEvict(cacheNames = "emp",key = "#id") public void delEmpCache(Integer id){ System.out.println("清除缓存"); }@Caching：可以将多个注解组合//测试Caching的使用 @Caching(cacheable = { @Cacheable(value = "emp", key = "#lastName") }, put = {@CachePut(value = …

写给新同学的SpringBoot教程 — 入门篇
type: item
date: 2020-04-06T13:45:00+08:00
description: 一、写给新同学的SpringBoot教程 — 入门篇1、springboot简介在 Java 开发的世界里，Spring Boot 绝对是一个绕不开的重要框架。它是由 Pivotal 团队在 2014 年推出的，基于 Spring 框架的开源项目，旨在简化 Spring 应用的初始搭建和开发过程。2、微服务2014，martin fowler微服务：架构风格（服务微化）一个应用应该是一组小型服务；可以通过HTTP的方式进行互通；单体应用：ALL IN ONE微服务：每一个功能元素最终都是一个可独立替换和独立升级的软件单元；3、环境准备1、maven设置推荐使用3.X我使用的是3.3.32、IDEA配置配置maven、jdk等相关设置4、springboot编写helloworld通过idea自动提供的脚手架功能快速创建springboot项目1、创建springboot时可能出现的错误1、连接springboot网站超时问题​ 如图给与解决方式​ 1、1 点击设置​ 1、2 一次点击图示位置进行网站设置​ ​ 1、3 在弹出的界面中数据一下网址，并测试连接情况​ 1、4 出现图示连接成功后，重新创建springboot项目即可​5、HelloWorld探究1、pom文件1、父项目<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.5.RELEASE</version> <relativePath/> </parent>​ springboot会自动依赖一个父项目2、启动器<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>​ 不同的项目会导入不同的启动器，springboot会根据启动器而去选择导入相应的包，从而省去了我们之前配置的xml文件3、主程序类​ 主程序的main方法要写在最外层的包中，即包含所有的子包，这样就可以加载到所有的配置文件，这是必须的​ 主程序类需要配置相应的注解：@SpringBootApplication​ @EnableAutoConfiguration：此注解的作用为，开启自动配置​ 我们需要自己配置的东西，自动配置类都帮我们解决了。​ 以上配置都在springboot-autoconfigure这个jar包中6、使用idea快速创建项目1、java目录​ 1、使用快速创建的项目，java目录中会自动生成主方法，我们只需编写业务逻辑代码即可。​ 2、@SpringBootApplication：该注解等同于@RequestMapping（）和ResponseBody相结合2、resource目录​ 1、static文件夹：用于存放静态资源，如js、html、image、等​ 2、templates文件夹：用户放页面显示文件，springboot默认不支持jsp，但是也可以引用模板来使用jsp或他模板3、application.properties​ 1、该文件中可以修改一些springboot的默认配置，如Tomcat默认端口号等。项目目录结构见下图二、配置文件1、spring认同的配置文件1、application.properties​ 与我们之前用的配置文件使用方法相同。2、application.yml2、yml文件​ yaml 是一种文件类型 也可以也做ymlyaml yaml ain't markup language 这句话可以理解为：yaml a markup language yaml是一个标记语言yaml ism't a markup language yaml不是一个标记语言其实yaml还是标记语言yaml与xml的区别yaml以数据为中心，比xml、json等更适合作为配置文件server: port: 8081 xml<servetr> <port>8081</port> </servetr>3、yaml语法1、基本语法​ yaml文件中默认的格式为 k: v k与v中间的空格是不可缺少的，所有左对齐的数据为同一级别。​ yaml文件只可以使用空格，不可以使用tab键2、值得表示字面量：普通的值​ 包括：数字，字符串，布尔值等​ 语法： k: v 直接在后面写值即可​ 如： name: zhangsan yaml中“” 与‘’ 的区别：​ yaml 中双引号不会对内容进行转义​ name: "zhangsan…