文章目录

  • 0. 老男孩思想-老男孩名言警句
  • 1. Dockerfile指令:ENV与ARG的区别?
  • 2. 创建WordPress镜像
    • 2.1 CA证书
      • 2.1.1 客户端访问HTTPS站点(阿里云镜像源)过程
      • 2.1.2 查看Windows的CA证书
      • 2.1.3 ubuntu查看CA证书是否安装
    • 2.2 准备apt下载源
    • 2.3 编写Dockerfile文件
    • 2.4 nginx配置文件和容器启动脚本
    • 2.5 构建镜像和启动容器
  • 3. 面试题:容器怎么暴露日志
  • 4. Dockerfile多阶段构建
    • 4.1 未使用多阶段构建的Dockerfile
    • 4.2 使用多阶段构建的Dockerfile
  • 5. Docker Compose
    • 5.1 安装docker compose
    • 5.2 编写docker-compose测试文件
    • 5.3 执行docker-compose文件,启动容器
    • 5.4 案例-小鸟飞飞
      • 5.4.1 编写docker-compose文件
      • 5.4.2 运行docker-compose
  • 6. 踩坑记录
    • 1. apt update时报错

0. 老男孩思想-老男孩名言警句

  • 成功绝非偶然,而是正确选择和持续努力后的必然
  • 成功最有效的途径就是不断的和有经验的、成功的人学习
  • 学习成功人士的思维和习惯,是成功的捷径
  • 要做别人不敢做、做不到的事,才能从竞争者胜出
  • 自己最不想改变的,往往是自己最需要改变的;要多接收、多学习他人的思维或习惯
  • 找一份能让自己快速成长的企业,比多1-2千工资更重要

在这里插入图片描述

1. Dockerfile指令:ENV与ARG的区别?

  • ENV:定义全局的环境变量,在脚本和容器中生效
  • ARG:定义局部环境变量,仅在docker build时生效;使用–build-arg指定变量值

2. 创建WordPress镜像

  • 基础镜像:ubuntu,nginx+php+代码

2.1 CA证书

CA(Certificate Authority,证书颁发机构)证书是数字证书体系的核心,用于验证网站、服务器、软件等的身份,并确保 HTTPS 加密通信的安全。

2.1.1 客户端访问HTTPS站点(阿里云镜像源)过程

  1. 服务端发送证书:阿里云服务器将SSL证书(由CA机构签发)发送给客户端
  2. 客户端那验证证书有效性:客户端使用本地预装的CA证书包:
    1. 验证签名:确认服务端证书是由受信任的CA签发
    2. 验证有效性:检查证书是否过期、域名是否匹配等
  3. 建立加密通道:验证通过后才开始加密数据传输

2.1.2 查看Windows的CA证书

  • 管理员打开PowerShell:Get-ChildItem -Path Cert:\LocalMachine\Root | Format-List Subject, Thumbprint, NotAfter

在这里插入图片描述

2.1.3 ubuntu查看CA证书是否安装

  • dpkg -s ca-certificates |grep Status
  • 如果已安装,会显示:Status:install ok installed

2.2 准备apt下载源

  • ubuntu容器有可能是精简版本,可能没有安装CA证书包;

    • 这时apt下载源需要使用http地址
[root@docker01 /server/dockerfile/04-wordpress]# cat sources.list 
deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse# deb http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse

2.3 编写Dockerfile文件

[root@docker01 /server/dockerfile/04-wordpress]# cat Dockerfile 
FROM ubuntu:22.04
LABEL author=skx desc="WordPress镜像:nginx+php" # 变量
# 时区
ENV TZ=Asia/Shanghai
# 站点目录
ENV CODE=/app/code/blog# 发送apt源文件和代码
ADD sources.list /etc/apt
# 指定时区;若不提前指定,则在安装php时会有交互式选项   
# 安装软件
# 暴露日志
RUN apt update \&& DEBIAN_FRONTEND=noninteractive apt install -y tzdata \&& ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \&& echo $TZ > /etc/timezone \&& apt install -y nginx \&& apt install -y php8.1-common php8.1-bcmath php8.1-cli php8.1-curl php8.1-dev php8.1-fpm php8.1-gd php8.1-mysql php8.1-mbstring php8.1-redis \&& mkdir -p ${CODE} \&& ln -sf /var/log/nginx/access.log /dev/stdout \&& ln -sf /var/log/nginx/error.log /dev/stderr \&& sed -i 's#^listen =.*#listen = 127.0.0.1:9000#g' /etc/php/8.1/fpm/pool.d/www.conf # 上传文件
ADD blog.oldboy.cn.conf /etc/nginx/conf.d
ADD entry.sh /
ADD wordpress.tar.gz ${CODE}# 修改权限
RUN chown -R www-data:www-data ${CODE} 
# 暴露端口
EXPOSE 80 443# 容器启动命令
CMD ["/entry.sh"]

2.4 nginx配置文件和容器启动脚本

[root@docker01 /server/dockerfile/04-wordpress]# cat blog.oldboy.cn.conf 
server {listen 80;server_name blog.oldboy.cn;root /app/code/blog/wordpress;location / {index index.php;}location ~ \.php$ {fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;fastcgi_param HTTPS on;include fastcgi_params;}
}
#################################################################
[root@docker01 /server/dockerfile/04-wordpress]# cat entry.sh 
#!/bin/bash
##############################################################
# File Name:entry.sh
# Version:V1.0
# Author:SunKexu
# Organization:www.oldboyedu.com
# Desc:
##############################################################
php-fpm8.1
nginx -g 'daemon off;'

在这里插入图片描述

2.5 构建镜像和启动容器

docker build -t web:wp .
docker run -d --name wp -p 80:80 web:wp
  • 添加hosts解析

在这里插入图片描述

  • 浏览器访问

在这里插入图片描述

3. 面试题:容器怎么暴露日志

  • 将容器中服务的日志文件软链接到/dev/stdout,或/dev/stderr,就是输出到标准输出和标准错误输出
  • docker就会收集到这些信息,并可以用docker logs查看
# 以nginx容器为例
ln -sf /var/log/nginx/access.log /dev/stdout 
ln -sf /var/log/nginx/error.log /dev/stderr
  • 或者,在Dockerfile中加上:tail -F logs/*;
    • 表示一直输出日志到屏幕,也会被docker捕获

4. Dockerfile多阶段构建

Docker 多阶段构建(Multi-Stage Builds)是一种优化 Docker 镜像大小的技术,允许在单个 Dockerfile中使用多个 FROM指令,每个阶段(Stage)可以独立构建,并仅将必要的文件复制到最终镜像中,丢弃中间阶段的冗余内容。

在这里插入图片描述

  • 以编译tengine为例

4.1 未使用多阶段构建的Dockerfile

[root@docker01 /server/dockerfile/05-tengine]# cat Dockerfile 
#正常的一个tengine的镜像(编译安装) 未使用多阶段提交
#######################
#1. pull ubuntu image##
#######################
FROM ubuntu:20.04 
LABEL maintainer="Tengine docker admin  <youjiu_linux@qq.com>"  author="oldboylidao996"
ENV  Web_User        "nginx"
ENV  Web_Server      "tengine"
ENV  Web_Version     "3.1.0"
ENV  Server_Dir      "/app/tools/tengine-3.1.0"
ENV  Server_Dir_Soft "/app/tools/tengine"
#######################
####ENV vars###########
#######################
#######################
#2. 编译安装     ######
#######################
#如果是阿里云服务器可以走内网  mirrors.cloud.aliyuncs.com
#sed命令修改为 sed -ri 's#archive.ubuntu.com|security.ubuntu.com#mirrors.cloud.aliyuncs.com#g'   /etc/apt/sources.list
RUN    sed -ri 's#archive.ubuntu.com|security.ubuntu.com#mirrors.aliyun.com#g'   /etc/apt/sources.list \&& apt-get update \&& apt-get install  -y wget  libssl-dev make gcc pcre2-utils   libpcre3-dev  zlib1g-dev RUN    wget -P /tmp/ http://tengine.taobao.org/download/${Web_Server}-${Web_Version}.tar.gz  \&& cd /tmp \&& tar xf ${Web_Server}-${Web_Version}.tar.gz \&& cd ${Web_Server}-${Web_Version} \&&  ./configure --prefix=${Server_Dir}  \--user=${Web_User} \--group=${Web_User} \--with-http_ssl_module \--with-http_v2_module   \--with-http_realip_module \--with-http_stub_status_module \--with-http_mp4_module \--with-stream  \--with-stream_ssl_module   \--with-stream_realip_module   \--add-module=modules/ngx_http_upstream_check_module/ \--add-module=modules/ngx_http_upstream_session_sticky_module 
#编译
RUN     cd /tmp/ \&& cd ${Web_Server}-${Web_Version} \&&  make -j `nproc` \&&  make install 
#后续操作
RUN     groupadd  ${Web_User} \&&  useradd   -g ${Web_User}  ${Web_User} \&&  ln -s ${Server_Dir}   ${Server_Dir_Soft} \&&  ln -s ${Server_Dir_Soft}/sbin/nginx  /sbin/ \&&  rm -fr /var/cache/*  /var/lib/apt/* /tmp/* \&&  ln -sf /dev/stdout /app/tools/tengine/logs/access.log \&&  ln -sf /dev/stderr /app/tools/tengine/logs/error.logEXPOSE 80 443CMD  ["nginx","-g","daemon off;"]

4.2 使用多阶段构建的Dockerfile

  • From 镜像名称 AS 别名
  • 复制中间镜像内容只能使用COPY --from,指定镜像别名
  • 环境变量不能跨镜像使用
#######################
#1. pull ubuntu image##
#######################
FROM ubuntu:20.04 AS temp
LABEL maintainer="Tengine docker admin  <youjiu_linux@qq.com>"  author="oldboylidao996"
ENV  Web_User        "nginx"
ENV  Web_Server      "tengine"
ENV  Web_Version     "3.1.0"
ENV  Server_Dir      "/app/tools/tengine-3.1.0"
ENV  Server_Dir_Soft "/app/tools/tengine"#######################
####ENV vars###########
#######################
#######################
#2. 编译安装     ######
#######################
#如果是阿里云服务器可以走内网  mirrors.cloud.aliyuncs.com
#sed命令修改为 sed -ri 's#archive.ubuntu.com|security.ubuntu.com#mirrors.cloud.aliyuncs.com#g'   /etc/apt/sources.list
RUN    sed -ri 's#archive.ubuntu.com|security.ubuntu.com#mirrors.aliyun.com#g'   /etc/apt/sources.list \&& apt-get update \&& apt-get install  -y wget  libssl-dev make gcc pcre2-utils   libpcre3-dev  zlib1g-dev RUN    wget -P /tmp/ http://tengine.taobao.org/download/${Web_Server}-${Web_Version}.tar.gz  \&& cd /tmp \&& tar xf ${Web_Server}-${Web_Version}.tar.gz \&& cd ${Web_Server}-${Web_Version} \&&  ./configure --prefix=${Server_Dir}  \--user=${Web_User} \--group=${Web_User} \--with-http_ssl_module \--with-http_v2_module   \--with-http_realip_module \--with-http_stub_status_module \--with-http_mp4_module \--with-stream  \--with-stream_ssl_module   \--with-stream_realip_module   \--add-module=modules/ngx_http_upstream_check_module/ \--add-module=modules/ngx_http_upstream_session_sticky_module 
#编译
RUN     cd /tmp/ \&& cd ${Web_Server}-${Web_Version} \&&  make -j `nproc` \&&  make install FROM ubuntu:20.04 
LABEL maintainer="Tengine docker admin  <youjiu_linux@qq.com>"  author="oldboylidao996"
ENV  Web_User        "nginx"
ENV  Web_Server      "tengine"
ENV  Web_Version     "3.1.0"
ENV  Server_Dir      "/app/tools/tengine-3.1.0"
ENV  Server_Dir_Soft "/app/tools/tengine"  #从中间镜像复制内容到最终镜像
COPY --from=temp /app/  /app/
#准备信息RUN sed -ri 's#archive.ubuntu.com|security.ubuntu.com#mirrors.aliyun.com#g'   /etc/apt/sources.list \&& apt-get update \&& apt install -y libssl-dev pcre2-utils   libpcre3-dev  zlib1g-dev \&&    groupadd  ${Web_User} \&&  useradd   -g ${Web_User}  ${Web_User} \&&  ln -s ${Server_Dir}   ${Server_Dir_Soft} \&&  ln -s ${Server_Dir_Soft}/sbin/nginx  /sbin/ \&&  rm -fr /var/cache/*  /var/lib/apt/* /tmp/* \&&  ln -sf /dev/stdout /app/tools/tengine/logs/access.log \&&  ln -sf /dev/stderr /app/tools/tengine/logs/error.logEXPOSE 80 443CMD  ["nginx","-g","daemon off;"]

5. Docker Compose

Docker Compose 是用于定义和运行多容器应用程序的工具。

在这里插入图片描述

  • docker-compose相当于docker run命令,可以指定docker run的选项,如-p,-v,–restart等

5.1 安装docker compose

  • docker compose软件:docker-compose-linux-x86_64-2.30.3 链接: https://pan.baidu.com/s/1aWWsRTrBkpM9BjjFcj5FLw?pwd=f95j 提取码: f95j
[root@docker01 ~]# chmod +x docker-compose-linux-x86_64-2.30.3 
[root@docker01 ~]# mv docker-compose-linux-x86_64-2.30.3 /bin/docker-compose
[root@docker01 ~]# docker-compose -v
Docker Compose version v2.30.3

5.2 编写docker-compose测试文件

[root@docker01 ~]# mkdir -p /server/docker-compose/01-test
[root@docker01 /server/docker-compose/01-test]# cat docker-compose.yml 
#version: "3.3"
services:ngx:image: "nginx:1.24"container_name: ngx_testports:- 18888:80restart: alwaysvolumes:- "./index.html:/usr/share/nginx/html/index.html"
[root@docker01 /server/docker-compose/01-test]# echo 520SunKexu >index.html

5.3 执行docker-compose文件,启动容器

[root@docker01 /server/docker-compose/01-test]# docker-compose up -d
[+] Running 2/2✔ Network 01-test_default  Created                                                            0.1s ✔ Container ngx_test       Started                                                            1.2s
[root@docker01 /server/docker-compose/01-test]# docker-compose ps
NAME       IMAGE        COMMAND                   SERVICE   CREATED         STATUS         PORTS
ngx_test   nginx:1.24   "/docker-entrypoint.…"   ngx       5 minutes ago   Up 4 minutes   0.0.0.0:18888->80/tcp, [::]:18888->80/tcp
  • 浏览器访问:

在这里插入图片描述

5.4 案例-小鸟飞飞

  • 基础镜像:nginx,代码
  • 使用之前的Dockerfile文件,自定义构建镜像

在这里插入图片描述

5.4.1 编写docker-compose文件

[root@docker01 /server/docker-compose/02-bird]# cat docker-compose.yaml
services:bird:image: "web:bird_v2" # 指定镜像名字;本地没有该镜像,需要使用Dockerfile构建build: # 构建镜像context: . # 指定Dockerfile文件位置;就在本地dockerfile: Dockerfile # Dockerfile文件名称container_name: bird_v2ports:- 80:80restart: always 

5.4.2 运行docker-compose

# 先构建镜像
[root@docker01 /server/docker-compose/02-bird]# docker-compose build
[+] Building 0.5s (10/10) FINISHED                                                   docker:default=> [bird internal] load build definition from Dockerfile                                      0.0s=> => transferring dockerfile: 489B                                                           0.0s=> [bird internal] load metadata for docker.io/library/nginx:alpine                           0.0s=> [bird internal] load .dockerignore                                                         0.0s=> => transferring context: 2B                                                                0.0s=> [bird 1/4] FROM docker.io/library/nginx:alpine                                             0.0s=> [bird internal] load build context                                                         0.0s=> => transferring context: 91.96kB                                                           0.0s=> [bird 2/4] RUN mkdir -p /app/code/bird                                                     0.2s=> [bird 3/4] ADD bird.tar.gz /app/code/bird                                                  0.1s=> [bird 4/4] ADD default.conf /etc/nginx/conf.d/                                             0.0s=> [bird] exporting to image                                                                  0.0s=> => exporting layers                                                                        0.0s=> => writing image sha256:02c222e4257e82e73d6c2126eff63f534083205079c39c51fda1572251642820   0.0s=> => naming to docker.io/library/web:bird_v2                                                 0.0s=> [bird] resolving provenance for metadata file                                              0.0s
# 再运行docker-compose
[root@docker01 /server/docker-compose/02-bird]# docker-compose up -d
[+] Running 2/2? Network 02-bird_default  Created                                                            0.1s ? Container bird_v2        Started                                                            0.3s
  • 浏览器访问

在这里插入图片描述

  • 删除容器
    • 不删除镜像
[root@docker01 /server/docker-compose/02-bird]# docker-compose down
[+] Running 2/1✔ Container bird_v2        Removed                                                            0.2s ✔ Network 02-bird_default  Removed                                                            0.1s

6. 踩坑记录

1. apt update时报错

在这里插入图片描述

  • 没有CA证书
  • apt下载源需要使用http地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/90081.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/90081.shtml
英文地址,请注明出处:http://en.pswp.cn/web/90081.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gcc 源码分析:从IR-RTL 到汇编输出

在完成了IR-RTL的优化与寄存器分配后就来到汇编代码的输出&#xff1a;实现如下&#xff1a;class pass_final : public rtl_opt_pass { public:pass_final (gcc::context *ctxt): rtl_opt_pass (pass_data_final, ctxt){}/* opt_pass methods: */unsigned int execute (functi…

STC89C52系列单片机内部结构详解

STC89C52 是基于 MCS-51 内核的增强型单片机&#xff0c;其内部结构集成了多种功能模块&#xff0c;具备强大的数据处理和控制能力&#xff0c;是嵌入式系统中常用的一种微控制器。本文将结合内部结构框图&#xff0c;详细介绍 STC89C52 的各个核心组成部分及其功能作用。一、中…

Linux防火墙管理和基础服务(FTP/SFTP)

防火墙管理# 开放端口firewalld-cmd --add-port880/tcp --permanent# 移除端口或阻止端口firewalld-cmd --remove-port880/tcp --permanent# 重启服务systemctl restart firewalld# 查看防火墙开放哪些端口&#xff08;查看当前区域的规则&#xff09;firewall-cmd --lis…

Selenium+Java 自动化测试入门到实践:从环境搭建到元素操作

在自动化测试领域&#xff0c;Selenium 凭借其强大的跨浏览器兼容性和灵活的 API&#xff0c;成为 Web 应用测试的首选工具。而 Java 作为一门稳定且广泛应用的编程语言&#xff0c;与 Selenium 结合能构建出高效、可维护的自动化测试框架。本文将从环境搭建开始&#xff0c;逐…

Hugging Face 模型的缓存和直接下载有什么区别?

Hugging Face 模型的缓存和直接下载&#xff08;下载到本地文件夹&#xff09;是两种不同的模型管理方式&#xff0c;它们在使用场景、存储结构和效率上各有优劣。 以下是它们之间的主要区别&#xff1a; Hugging Face 缓存 (Cache) 当您通过 transformers 库中的 from_pretrai…

JavaScript AJAX 实现,演示如何将 Token 添加到 Authorization

以下是一个完整的原生 JavaScript AJAX 实现&#xff0c;演示如何将 Token 添加到 Authorization 头部的示例&#xff1a;基础实现html复制代码<!DOCTYPE html> <html> <head><title>AJAX Token 示例</title><script>// 获取当前用户的 To…

开发语言的优劣势对比及主要应用领域分析

开发语言是程序员用来编写软件指令的工具。每种语言都有自己的设计哲学、语法&#xff08;规则&#xff09;和应用场景&#xff0c;但没有“放之四海而皆准”的最佳语言。以下是主流和重要开发语言的介绍&#xff0c;按主要应用领域分类&#xff1a; 一、全能型语言 (可在多个领…

Java学习-------事务失效

在 Java 开发中&#xff0c;事务是保证数据一致性和完整性的关键机制&#xff0c;尤其在涉及多步数据库操作的业务场景中不可或缺。然而&#xff0c;在实际开发过程中&#xff0c;事务常常会出现 “失效” 的情况 —— 预期的回滚没有发生&#xff0c;数据出现不一致。 Java 事…

JavaScript 01 JavaScript 是什么

1.1 JavaScript 是什么JavaScript 是一门世界上最流行的脚本语言&#xff08;基本所有平台的所有软件都会用到它&#xff09;。“1994年&#xff0c;网景公司(Netscape)发布了Navigator浏览器0.9版。这是历史上第一个比较成熟的网络浏览器&#xff0c;轰动一时。但是&#xff0…

Bun v1.2.19发布,node_modules隔离,sql比node快6倍

大家好,我是农村程序员,独立开发者,行业观察员,前端之虎陈随易。我会在这里分享关于 独立开发、编程技术、思考感悟 等内容,欢迎关注。 技术群与交朋友请在个人网站联系我,网站 1️⃣:https://chensuiyi.me,网站 2️⃣:https://me.yicode.tech。 如果你觉得本文有用…

【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 主页布局实现

大家好&#xff0c;我是java1234_小锋老师&#xff0c;最近写了一套【NLP舆情分析】基于python微博舆情分析可视化系统(flaskpandasecharts)视频教程&#xff0c;持续更新中&#xff0c;计划月底更新完&#xff0c;感谢支持。今天讲解主页布局实现 视频在线地址&#xff1a; …

# 微调需要准备哪些环境配置?

微调需要准备哪些环境配置&#xff1f; 如果没有 GPU&#xff0c;即便是微调较小的大语言模型&#xff08;LLMs&#xff09;&#xff0c;过程也会比较慢。如果你已经有了现成的 GPU&#xff0c;那就可以直接开工了。不过&#xff0c;并不是所有人都能负担得起 GPU—— 这种情况…

ClickHouse物化视图避坑指南:原理、数据迁移与优化

摘要ClickHouse物化视图通过预计算和自动更新机制&#xff0c;显著提升大数据分析查询性能&#xff0c;尤其适合高并发聚合场景。本文将深入解析其技术原理、生产实践中的优化策略&#xff0c;以及数据迁移的实战经验。一、物化视图核心概念ClickHouse的物化视图(Materialized …

Springboot3整合Elasticsearch8(elasticsearch-java)

1、Elasticsearch的JAVA客户端选择 Elasticsearch官方支持的客户端 客户端名称简介使用建议Elasticsearch Java API Client&#xff08;新客户端&#xff09;官方推荐的新客户端&#xff0c;基于 JSON Mapping&#xff08;如 ElasticsearchClient 类&#xff09;&#xff0c;…

OpenCV 官翻8 - 其他算法

文章目录高动态范围成像引言曝光序列源代码示例图像说明结果色调映射图像曝光融合附加资源高级图像拼接 API&#xff08;Stitcher 类&#xff09;目标代码说明相机模型试用指南图像拼接详解 (Python OpenCV >4.0.1)stitching_detailed如何使用背景减除方法目标代码代码解析结…

2025年一区SCI-回旋镖气动椭圆优化算法Boomerang Aerodynamic Ellipse-附Matlab免费代码

引言 本期介绍一种新的元启发式算法——回旋镖气动椭圆优化算法Boomerang Aerodynamic Ellipse Optimizer (BAEO)。该优化器的灵感来自于飞行中的回旋镖的空气动力学行为&#xff0c;明确地建模了释放角和发射力如何塑造其轨迹。于2025年7月最新发表在JCR 1区&#xff0c;中科…

Custom SRP - Custom Render Pipeline

https://catlikecoding.com/unity/tutorials/custom-srp/custom-render-pipeline/ 1. 新建 Render Pipeline 任何内容的渲染&#xff0c;最终都是要由 unity 决定在哪里&#xff0c;什么时候&#xff0c;以哪些参数进行渲染。根据目标效果的复杂程度&#xff0c;决定渲染的过程…

C语言面向对象编程

1.内核通用链表一、什么是 list_head&#xff1f;list_head 是 Linux 内核中自己实现的一种 双向循环链表 的结构&#xff0c;定义在 <linux/list.h> 中。它设计得非常轻巧、灵活&#xff0c;广泛用于内核模块、驱动、进程调度、网络协议栈等。它的关键思想是&#xff1a…

Spring Boot+Redis Zset:三步构建高可靠延迟队列系统

系统设计架构图---------------- ----------------- ---------------- | | | | | | | 生产者 |------>| Redis ZSet |------>| 定时任务消费者 | | (添加延迟任务) | | (延…

MCP vs 传统集成方案:REST API、GraphQL、gRPC的终极对比

MCP vs 传统集成方案&#xff1a;REST API、GraphQL、gRPC的终极对比 &#x1f31f; Hello&#xff0c;我是摘星&#xff01; &#x1f308; 在彩虹般绚烂的技术栈中&#xff0c;我是那个永不停歇的色彩收集者。 &#x1f98b; 每一个优化都是我培育的花朵&#xff0c;每一个特…