容器监控与日志管理

news2024/12/29 9:04:22

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除

一、Docker监控工具

二、容器日志工具docker logs

三、第三方日志工具

四、容器日志驱动

五、示例

5.1、查看容器中运行的进程的信息

5.2、查看容器的资源使用情况

5.3、使用cAdvisor监控容器

5.4、使用Weave Scope监控容器

六、使用docker logs命令查看容器日志

七、配置日志驱动

7.1、配置默认的日志驱动

7.2、配置容器的日志驱动

八、容器日志清理

九、将容器的日志重定向到Linux日志

9.1、将容器日志记录到syslog

9.2、将容器日志记录到journald

十、使用Logspout收集所有容器的日志

10.1、将所有容器的输出路由到远程syslog

10.2、通过HTTP查看Logsput收集的日志


一、Docker监控工具

Docker自带监控命令docker psdocker topdocker stats等命令(输出的数据比较有限)。

第三方工具:Google的cAdvisor

Weave Scope是一款开源的故障诊断与监控工具,除Docker外,还可用于Kubernetes集群

二、容器日志工具docker logs

Docker自带的docker logs命令输出正在运行的容器的日志信息,而docker service logs命显示服务中的所有容器的日志信息(这个命令适用于集群环境)。

三、第三方日志工具

常用的是由3个开源组件ElasticsearchLogstashKibana组成的ELK日志系统

  • Elasticsearch分布式搜索引擎
  • Logstash可以日志进行收集和分析,并将其存储下来供以后使用;
  • Kibana可以为Logstash和Elasticsearch提供日志分析Web界面,用来汇总、分析和搜索重要的日志数据。

在ELK日志系统中,Logstash获取Docker中的日志,然后将日志转发给Elasticsearch进行索引,Kibana提供日志的分析和可视化

 # 个别容器的日志可以直接通过syslog日志驱动进行发布
 docker run --log-driver=syslog --log-opt syslog-address=tcp://:5000

Logspout将来自某个主机上的所有容器的所有日志汇集到所需的何目标中。它是一个无状态的容器化程序,并不是用来管理日志文件或查看日志的,主要用于将所在机上容器的日志转发到其他地方。目前它只捕获容器中的程序发送到STDOUT和STDERR的日志。

四、容器日志驱动

Docker默认的日志驱动是json-file。在启动容器时可以通过--log-driver选项配置日志驱动

选项值说明
none禁用容器日志,docker logs 命令不会输出任何日志信息
json-fileDocker默认的日志驱动。该驱动将日志保存在JSON文件中,Docker 负责格式化其内容并输出到STDOUT和STDERR
syslog将日志信息写入syslog日志系统,syslog守护进程必须在主机上运行
journald将日志信息写入joumald 日志系统,joumald 守护进程必须在主机上运行
gelf将日志信息写入像Graylog 或 Logstash这样的GELF(Graylog Extended Log Format)终端
fluentd将日志信息写入fluentd, fuentd守护进程必须在主机上运行
splunksplunk 将日志信息写入使用 HTTP 事件搜集器的 splunk

使用Docker CE时,docker logs 命令只能用于localjson-filejournald日志驱动。

五、示例

5.1、查看容器中运行的进程的信息

docker top命令查看容器中正在运行的进程的信息,其语法:

 docker top 容器 [ps 选项]

容器运行时不一定提供/bin/bash终端来交互执行top命令,而且容器中可能没有top命令

 [root@docker ~]# docker run --rm -d --name redis redis
 a07c78093b15...
 [root@docker ~]# docker top redis
 UID       PID       PPID         ...      TIME           CMD
 systemd+  73452     73433        ...     00:00:00      redis-server *:6379

该命令后面的ps选项是指Linux操作系统ps命令的选项,可用于显示特定信息:例如

 docke top redis aux

查看所有正在运行的容器中的进程信息

 for i in `docker ps | grep Up | awk '{print $1}'`;do echo \ && docker top $i;done

5.2、查看容器的资源使用情况

docker stats命令实时查看容器的系统资源使用情况,其语法:

 docker stats [选项][容器...]

主要选项有下:

选项说明
--all(-a)显示所有的容器,包括未运行的。默认仅显示正在运行的容器。
--format根据指定格式显示内容
--no-stream仅显示第1条记录(只输出当前的状态)
--no-trunc不截断输出,显示完整的信息
 # 显示正在运行的容器资源使用情况(每隔1s刷新1次输出的内容)
 [root@docker ~]# docker stats
 CONTAINER ID   NAME     CPU %   MEM USAGE ...   BLOCK I/O   PIDS
 a07c78093b15   redis    0.16%    8.512MiB ...   0B / 0B     5
 29d3cb1392b8   great_cannon   0.00%       ...   0B / 0B     82

若不想持续监控容器使用资源情况,可通过--no-stream选项只输出当前的状态:

 docker stats --no-stream

可以提供容器名称或ID参数查看指定容器的资源使用情况。

通过--format选项自定义输出的内容和格式:

 # 仅显示容器名称(.Name)、CPU使用百分比和内存使用百分比。
 docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"

5.3、使用cAdvisor监控容器

cAdvisor是一个开源软件,可以在主机上以原生程序的方式安装,也可以作为容器运行。

5.3.1、启动两个容器作为测试

 [root@docker ~]# docker run --rm -d --name redis redis
 478c2296b1a...
 [root@docker ~]# docker run --rm -d -p 80:80 --name myweb httpd
 55b662de612...

5.3.2、创建并启动cAdvisor容器

 docker run --privileged \
 --volume /:/rootfs:ro --volume /var/run:/var/run:rw \
 --volume /sys:/sys:ro --volume /var/lib/docker/:/var/lib/docker:ro \
 --publish 8080:8080 --detach --name cadvisor google/cadvisor:latest

其中4个 --volume:选项所定义的绑定挂载都不能缺少,否则会无法连接到Docker守护进程;

--publish 8080:8080:示对外暴露8080以提供服务;

--detach:选项表示容器创建以后以分离方式在后台运行,让其自动完成监视功能。

对于运行CentOS或RHEL操作系统的主机来说,应当加上--privileged选项(容器中的root才拥有真正的root权限)。

5.3.3、访问cAdvisor监控服务

首页显示当前监控的主机信息,包括CPU、内存、网络、文件系统和进程等。

单击"Docker Container"进入相应界面,显示容器列表和Docker信息(相当于docker info命令的输出)

其中"Subcontainers"显示当前正在运行的容器列表。,单击某个容器,进入该容器的监控界面,显示的是容器的CPU、进程、内存等资源使用情况

5.3.4、cAdvisor配置

--storage_duration:历史数据保存的时间,默认为2min

--allow_dynamic_housekeeping:控制cAdvisor如何和何时执行周期性的容器状态收集工作

--global_housekeeping_interval:设置检测是否有新容器的时间周期

--housekeeping_interval:统计每个容器数据的时间周期,默认每1s读取一次数据,选取统计到的最近60个数据

 # 将cAdvisor的数据导出到本地文件,存储驱动可以设置为STDOUT,将容器运行于前台,将输出文件导入指定文件:
 docker run --volume /:/rootfs:ro \
     --volume /var/run:/var/run:rw --volume /sys:/sys:ro \
     --volume /var/lib/docker/:/var/docker:ro \
     --publish 8080:8080 --detach false --name cadvisor-stdout  \
     google/cadvisor:latest --storage_driver stdout>>data

当然还可设置相应的存储驱动以及配置参数将数据导出到数据库。

5.4、使用Weave Scope监控容器

功能:

  • 实时了解容器状态
  • 提供内部细节与深度链接
  • 支持容器的交互与管理
  • 提供插件进程扩展与定制

5.4.1、安装Weave Scope

(1)创建文件夹并上传weave scope二进制文件

 [root@docker ~]# mkdir /usr/local/bin/scope && cd /usr/local/bin/scope
 [root@docker scope]# rz
 ​
 [root@docker scope]# ls
 scope.bin

scope.bin资源已上传

(2)修改scope.bin文件为可执行文件

 chmod 755 /usr/local/bin/scope/scope.bin

(3)执行文件

 [root@docker scope]# ./scope.bin launch
 486f2bbd7e0d3ce2cb7bdd96e686ff86519b2cd58a90a9d77ec96892bb071c05
 Scope probe started
 Weave Scope is listening at the following URL(s):
   * http://172.18.0.1:4040/
   * http://172.23.0.1:4040/
   * http://10.0.0.2:4040/

(4)使用浏览器访问Weave scope界面,主机IP+服务器名:

5.4.2、熟悉Weave Scope操作界面

可以以表格形式显示对象信息:

5.4.3、监控容器

All表示全部容器System containers表示系统容器,包括Weave Scope容器本身;Application containers表示应用容器;Stopped containers和Running containers分别表示已停止的容器正在运行的容器;Both就是表示两种都显示;Show uncontained和Hide uncontained分别表示显示和隐藏非容器进程

5.4.4、监控主机

此按钮可以打开该主机的shell窗口进程命令行操作。

实验完毕,自行恢复实验环境。

六、使用docker logs命令查看容器日志

对于一个运行中的容器,Docker会将日志发送到容器的STDOUT和STDERR上,可以将STDOUT和STDERR视为容器的控制台终端。

  • 如果容器以前台方式运行,日志就会输出到当前的终端端口
  • 如果容器以后台方式运行,使用docker attach连接到后台容器的控制台终端,查看日志(没必要使用)Docker自带的docker logs命令专门查看容器的日志。

 docker logs [选项] 容器

其他选项说明如下:

  • --details:显示更为详细的日志信息
  • --follow(-f):跟踪日志输出
  • --since:显示自某个时间开始的所有日志
  • --tail:仅列出最新N条容器日志
  • --timestamps(-t):显示时间戳
  • --until:显示到某个截止时间的所有日志
 # 默认输出自容器启动以来完整的日志,加上-f选项可以继续新产生日志,效果与Linux的tail -f命令一样
 [root@docker ~]# docker logs -f wordpress 
 WordPress not found in /var/www/html - copying now...
 Complete! WordPress has been successfully copied to /var/www/html
 ...

七、配置日志驱动

7.1、配置默认的日志驱动

daemon.json文件(Linux主机中一般位于/etc/docker目录,Windows中一般位于C:ProgramData\Docker\config)中的log-driver值设为日志驱动名称即可配置驱动。

 # 默认的日志驱动是json-file, 下面实例将其设置为syslog
 {
     "log-driver":"syslog"
 }

如果日志驱动有可配置的选项,则可以在daemon.json文件的关键字log-opts中以JSON格式设置。

 # 为json-file日志驱动设置了两个可配置选项
 {
     "log-driver":"json-file",
     "log-opts":{
         "labels":"production_status",
         "env":"os,customer"
     }
 }
 # 默认驱动就是json-file,因此使用docker inspect命令之类的默认输出就是JSON格式

获取当前Docker守护进程的默认日志驱动

 [root@docker ~]# docker info | grep 'Logging Driver'
  Logging Driver: json-file

7.2、配置容器的日志驱动

启动容器时,通过--log-driver选项将其匹配成与Docker守护进程使用不同的日志驱动。如果日志驱动有可配置选项,则可通过一个或多个选项(--log-opt<名称>=<值>)进行设置。

 # 启动一个使用none日志驱动的redis容器
 [root@docker ~]# docker run --rm -d --log-driver none --name redis redis
 82370ee2ba2...
 ​
 # 通过docker inspect命令找出某容器当前使用的日志驱动:
 [root@docker ~]# docker inspect -f '{{.HostConfig.LogConfig.Type}}' redis
 none

八、容器日志清理

容器的日志文件会占据大量的磁盘空间。在Linux中,容器日志一般放在/var/lib/docker/containers/container_id目录下以josn.log结尾的文件中。

这里提供一个shell脚本清理正在运行的容器的日志

 #!/bin/sh
 log=$(find /var/lib/docker/containers/ -name *-json.log)
 for log in $logs
     do
         echo "clean logs:$log"
         cat /dev/null>$log
     done

根本上解决日志占用空间问题--限制容器的日志大小上限。在deamon.json配置文件中为Docker守护进程设置日志驱动时,可通过log-opts选项来限制日志大小的上限

 # 日志大小上限是500MB,容器最多有2个日志文件
 "log-driver":"json-file",
 "log-opts":{"max-size":"500m","max-file":"2"}

对于某个容器的日志大小限制,可以通过Docker Compose配置文件的max-size选项来实现:

 nginx:
     image:nginx:1.6
     logging:
         driver:"josn-file"
         options:
             max-size:"500m"

九、将容器的日志重定向到Linux日志

9.1、将容器日志记录到syslog

  • syslogLinux标配的日志记录工具rsyslog是syslog的多线程增强版,也是CentOS7默认的日志系统
  • syslog用来收集系统产生的各种日志,日志文件默认放在/var/log目录下。
  • 选择syslog作为日志驱动可将日志定向输出到syslog日志系统中,前提是syslog守护进程必须在容器所在Docker主机运行

 # 使用tail工具实时监控系统日志文件记录到syslog日志文件。
 [root@docker ~]# tail -f /var/log/messages
 ​
 # 打开另一个终端窗口,执行以下操作,将该容器的日志记录到syslog日志文件中
 [root@docker ~]# docker run --rm -d --log-driver syslog --name redis redis
 ​
 # 会到tail监视窗口,发现显示了该容器相应的日志信息
 May 11 20:47:46 docker f11da620bbdd[1126]: 1:C 11 May 2024 12:47:46.474 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
 May 11 20:47:46 docker f11da620bbdd[1126]: 1:C 11 May 2024 12:47:46.474 * Redis version=7.2.4, bits=64, commit=00000000, modified=0, pid=1, just started
 May 11 20:47:46 docker f11da620bbdd[1126]: 1:C 11 May 2024 12:47:46.474 #
 ...

默认情况,系统在日志数据中使用容器ID的前12个字符来标识容器。

使用docker logs命令获取redis容器的日志信息,会给出:

 docker logs redis

9.2、将容器日志记录到journald

journald是一个收集并存储日志数据的systemd日志系统服务,将日志数据存储在带有索引的结构化二进制文件中,便于集中查看和管理,使用journalctl命令查看

选择journald作为日志驱动可将日志定向输出到systemd日志系统中:

 docker run --rm -d --log-driver journald --name redis redis

十、使用Logspout收集所有容器的日志

Logspout本身是基于Alpine Linux构建的Docker容器。Docker主机启动一个容器运行Logspout服务,Logspout复制将同一主机上其他容器的日志根据路由设置转发给不同的日志接收端。实际中,Logspout通常将所有容器的全部日志发布到Logstash。这里转发到简单的syslog服务器中为例:

10.1、将所有容器的输出路由到远程syslog

将syslog的URL作为命令即可。这里以本机rsyslog服务作为远程syslog服务器。修改配置文件/etc/rsyslog.conf

 # 将行首的#号去掉
 $ModLoad imupd
 $UDPServerRun514

这样就运行rsyslog服务在UDP的514端口上接收日志信息了

保存配置,重启rsyslog,然后检查确认514端口已开启

 [root@docker ~]# netstat -antup | grep 514
 tcp        0      0 10.0.0.2:22             10.0.0.1:51495          ESTABLISHED 8571/sshd: root [pr 
 udp        0      0 0.0.0.0:514             0.0.0.0:*                           11742/rsyslogd      
 udp6       0      0 :::514                  :::*                                11742/rsyslogd

启动louspout容器,将日志转发到Docker主机的syslog服务中

 [root@docker ~]# docker run --name="logspout" --volume=/var/run/docker.sock:/var/run/docker.sock gliderlabs/logspout syslog+udp://10.0.0.2:514
 Unable to find image 'gliderlabs/logspout:latest' locally
 latest: Pulling from gliderlabs/logspout
 8572bc8fb8a3: Pull complete 
 bd801371a862: Pull complete 
 58100c398b34: Pull complete 
 Digest: sha256:2d81c026e11ac67f7887029dbfd7d36ee986d946066b45c1dabd966278eb5681
 Status: Downloaded newer image for gliderlabs/logspout:latest
 2024/05/11 13:03:04 # logspout v3.2.14 by gliderlabs
 2024/05/11 13:03:04 # adapters: raw syslog tcp tls udp multiline
 2024/05/11 13:03:04 # options : 
 2024/05/11 13:03:04 persist:/mnt/routes
 2024/05/11 13:03:04 # jobs    : pump routes http[health,logs,routes]:80
 2024/05/11 13:03:04 # routes  :
 #   ADAPTER ADDRESS     CONTAINERS  SOURCES OPTIONS
 #   syslog+udp  10.0.0.2:514                map[]

logspout容器要访问守护进程来获取日志信息,因此将Docker主机的UNIX Socket挂载到容器内部

打开一个终端窗口,使用tail工具监控系统日志文件/var/log/messages:

 tail -f /var/log/messages

打开另一个窗口,执行以下命令启动一个redis容器

 docker run --rm -d --name redis redis

回到tail监控窗口,会发现显示了关于该容器输出的日志信息,再使用docker logs获取redis容器的日志信息,两者完全一致。实验完毕,关闭删除容器。

10.2、通过HTTP查看Logsput收集的日志

只需读取HTTP数据流,即可实时查看生成的聚合日志。使用Logspout的HTTP流模块:

 [root@docker ~]# docker run -d --name="logspout" --volume=/var/run/docker.sock:/var/run/docker.sock --publish=127.0.0.1:8000:80 gliderlabs/logspout
 ​
 # 使用curl观察容器的日志流
 [root@docker ~]# curl http://127.0.0.1:8000/logs

打开另一个终端,执行容器操作。切回前面的终端窗口,会发现关于容器操作的日志流,如果收集到多个容器的日志流,则将以不同的颜色显示不同容器的日志


致谢

在此,我要对所有为知识共享做出贡献的个人和机构表示最深切的感谢。同时也感谢每一位花时间阅读这篇文章的读者,如果文章中有任何错误,欢迎留言指正。

学习永无止境,让我们共同进步!!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TEINet: Towards an Efficient Architecture for Video Recognition 论文阅读

TEINet: Towards an Efficient Architecture for Video Recognition 论文阅读 Abstract1 Introduction2 Related Work3 Method3.1 Motion Enhanced Module3.2 Temporal Interaction Module3.3 TEINet 4 Experiments5 Conclusion阅读总结 文章信息; 原文链接&#xff1a;https:…

BUU-[极客大挑战 2019]Http

考察点 信息收集 http构造请求数据包 题目 解题步骤 参考文章&#xff1a;https://zhuanlan.zhihu.com/p/367051798 查看源代码 发现有一个a标签&#xff0c;但是οnclick"return false"就是点击后不会去跳转到Secret.php的页面 所以我就自己拼接url http://no…

工业机器人应用实践之玻璃涂胶(篇二)

工业机器人 接上篇文章&#xff0c;浅谈一下实践应用&#xff0c;具体以玻璃涂胶为例&#xff1a; 了解工业机器人在玻璃涂胶领域的应用认识工具坐标系的标定方法掌握计时指令的应用掌握人机交互指令的应用掌握等待类指令用法&#xff08;WaitDI、WaitUnitl 等&#xff09;认…

表面的相似,本质的不同

韩信与韩王信&#xff0c;两个韩信的结局都是被刘邦所杀&#xff0c;似乎结局类似。但是&#xff0c;略加分析&#xff0c;就会发现其中存在本质的区别。 韩信属于必杀。他的王位是要来的&#xff0c;有居功自傲的本意&#xff0c;功高震主而且毫不避讳。而且年轻&#xff0c;…

REFORMER: 更高效的TRANSFORMER模型

大型Transformer模型通常在许多任务上都能达到最先进的结果&#xff0c;但是训练这些模型的成本可能会非常高昂&#xff0c;特别是在处理长序列时。我们引入了两种技术来提高Transformer的效率。首先&#xff0c;我们用一种使用局部敏感哈希的点积注意力替换了原来的点积注意力…

Apache ECharts

Apache ECharts介绍&#xff1a; Apache ECharts 是一款基于 Javascript 的数据可视化图表库&#xff0c;提供直观&#xff0c;生动&#xff0c;可交互&#xff0c;可个性化定制的数据可视化图表。 官网地址&#xff1a;https://echarts.apache.org/zh/index.html Apache ECh…

Django简介

Django 1.安装Django pip install djangopython的包的分布 \python- python.exe- Scripts- pip.exe- django-admin.exe [工具&#xff0c;创建django项目]- Lib- 内置模块- site-packages [安装的包]- pymysql- flask- django [框架的源码]2.创建项目 Django项目会有…

Windows系统下通过nginx配置多项目

文章目录 前言大概思路实际操作记录&#xff1a;查看nginx 错误日志问下AI注意点&#xff1a; 当访问域名根路径时&#xff0c;重定向到/pc解决&#xff1a; 总结 前言 在windows电脑启动一个nginx 测试配置多前端项目&#xff0c;一个pc端&#xff08;vue3tsvite &#xff0c…

鸿蒙ArkUI:【编程范式:命令式->声明式】

命令式 简单讲就是需要开发用代码一步一步进行布局&#xff0c;这个过程需要开发全程参与。 开发前请熟悉鸿蒙开发指导文档&#xff1a;gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 Objective-C ObjectiveC 复制代码 UIView *cardView …

【C/C++笔试练习】DNS设置文件、应用层、Dos攻击、DNS服务、DNS、子网划分、http状态、路由设置、TCP连接、HTTP状态码、剪花布条、客似云来

文章目录 C/C笔试练习选择部分&#xff08;1&#xff09;DNS设置文件&#xff08;2&#xff09;应用层&#xff08;3&#xff09;Dos攻击&#xff08;4&#xff09;DNS服务&#xff08;5&#xff09;DNS&#xff08;6&#xff09;子网划分&#xff08;7&#xff09;http状态&am…

嵌入式C语言高级教程:实现基于STM32的智能健康监测手环

智能健康监测手环能够实时监控用户的生理参数&#xff0c;如心率、体温和活动量&#xff0c;对于健康管理和疾病预防非常有帮助。本教程将指导您如何在STM32微控制器上实现一个基本的智能健康监测手环。 一、开发环境准备 硬件要求 微控制器&#xff1a;STM32L476RG&#xf…

进程间通信(二)

共享内存 当进程A和进程B有一块共享的内存空间时&#xff0c;这两个进程之间的数据交互就会变的很简单&#xff0c;只需要像读取自己内存空间中的元素一样去读取数据即可。实现共享内存进行数据交互的一般步骤&#xff1a; 创建/打开共享内存内存映射数据交换断开与共享内存的…

【数组算法】598. 区间加法

给你一个 m x n 的矩阵 M 和一个操作数组 op 。矩阵初始化时所有的单元格都为 0 。ops[i] [ai, bi] 意味着当所有的 0 < x < ai 和 0 < y < bi 时&#xff0c; M[x][y] 应该加 1。 在 执行完所有操作后 &#xff0c;计算并返回 矩阵中最大整数的个数 。 示例 1: …

户籍管理系统的设计与实现

【免费】户籍管理系统的设计与实现.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89296790 ​​​​​​​户籍管理系统的设计与实现 摘 要 当今社会人们生活质量越来越高&#xff0c;人们对生活品质的追求不断提升&#xff0c;对于孩子求学&#xff0c;变更住…

内容安全(AV)

防病毒网关&#xff08;AV&#xff09;简介 基于网络侧 识别 病毒文件&#xff0c;工作范围2~7层。这里的网关指的是内网和外网之间的一个关口&#xff0c;在此进行病毒的查杀。在深信服中就有一个EDR设备&#xff0c;该设备就是有两种部署&#xff0c;一个部署在网关&#xf…

C# WinForm —— 15 DateTimePicker 介绍

1. 简介 2. 常用属性 属性解释(Name)控件ID&#xff0c;在代码里引用的时候会用到,一般以 dtp 开头Format设置显示时间的格式&#xff0c;包含Long&#xff1a; Short&#xff1a; Time&#xff1a; Custom&#xff1a;采用标准的时间格式 还是 自定义的格式CustomFormat自定…

关于 vs2019 c++ 20规范,STL 库提供的标准分配器 alloctor 及其 traits 及涉及分配器交换的全局函数 _Pocs

(1) 我们写 c 代码&#xff0c;使用 STL 库中的模板&#xff0c;很少自己写对象的分配器。用 STL 中的分配器也够用。研究 STL 中的分配器也可以为咱们自己写分配器提供参考。 咱们会遇到这样的场景&#xff0c;例如交换两个容器对象&#xff1a; list a ,b ; a .swap (b) ; 这…

搭建一个Xx431?

搭建一个Xx431? 嘿uu们!刚结束了一周六天班感觉如何? 我的状态倒还行,工作生活总能找到乐子,本周整活就是用纸巾和蛋糕托做的油灯,另外想制冷片做个温水冷水可调的杯托,但我还不会搞3d,希望今年能搞起来. 题外话就说到这,这个选题也是因为实际遇到的问题需要这玩意,下班路…

初识java--javaSE(3)--方法,递归,数组,

文章目录 一 方法的使用1.1 什么是方法&#xff1f;main方法注意事项 1.2 方法的调用嵌套调用在方法调用时形参与实参的关系&#xff1a; 1.3 方法的重载方法重载的意义&#xff1f;总结方法重载&#xff1a;方法签名&#xff1a; 二 递归什么是递归&#xff1f;递归的精髓&…