985研一学习日记 - 2024.11.9

一个人内耗,说明他活在过去;一个人焦虑,说明他活在未来。只有当一个人平静时,他才活在现在。

日常

1、起床6:00

2、健身2h

3、LeetCode刷了3题

  1. 加油站
    1. 局部最优:从start出发,如果curSum始终大于0,则说明可以继续,但当curSum小于0时,说明从start到curIndex上的所有点开始出发不会绕一圈,则从start+1开始出发,然后如果 total >= cost 则一定存在一个可以绕一圈的站,故遍历所有站,计算curSum,当小于0时更改start,结束后的start就是从当前可以到末尾的站,然后判断total 是否 > cost,如果是的则说明从start可以到达所有
    2. 局部最优:当前累rest[i]的和curSum一旦小于0,起始位置至少要是i+1,因为从i之前开始一定不行。全局最优:找到可以跑一圈的起始位置
  2. 分发糖果
    1. 必须单独一边遍历,无法同时满足两边,先满足左边,再满足右边,且要保证两边均满足,故在从右向左遍历时,要使得元素同时满足左右两边
    2. 先从前向后遍历,如果当前孩子评分大于左边则分发糖果数比左边+1,否则分发最少1个,此时保证了满足从前向后的遍历
    3. 然后从后向前遍历,如果当前评分大于右边时,则此时要满足左右两边,故 取当前分发(满足左边)右边分发数+1最大值,从而满足左右两边;当小于右边时,只需要满足左边即可
  3. 账单找零
    1. 因为固定只可收5、10、20元,故只有三种情况分别判断即可
    2. 只需要维护一个数组分别存放当前已经收到的零钱数,然后遍历bills当遇到5元时,直接收下,并记录5元+1;当遇到10元时,判断有没有5元,没有则直接返回false否则5元-1,10元+1;当遇到20元时,要优先判断是否有10和5元没有时再判断是否有3个5元
    3. 关键是当遇到20元时,一定要优先使用10+5去找零,因为10元只可以找零20,而5元还可以找零10元,故优先使用10元去找零
    4. 遍历整个bills,三种情况分别判断,并记录当前的零钱数,5元直接收下,10元判断有没有5元零钱,20元时一定先用10元找零,然后再用5元找零,因为10只可以找零20,而5元还可以找零10元

4、复盘22:00

不复盘等于白学!!!


学习和感想

1、Docker学习

1. Docker-compose容器编排:NB!

  1. 是什么
    1. 负责实现对Docker容器集群(多个)的快速编排,即容器的启动顺序以及加载条件
    2. 要定义一个YAML格式配置文件 docker-compose.yml写好多个容器之间的调用关系
    3. 此时通过执行该docker-compose.yml配置文件就可以快速 启动/关闭 容器集群
  2. 能干嘛:对Docker容器集群快速编排部署
    1. 通过配置docker-compose.yml配置文件,写好各个容器的调用关系,此时就可以一键 启动/关闭 容器集群实现容器集群的快速编排部署
    2. 通过一个docker-compose.yml配置文件对容器集群(一组管理容器定义为一个项目)进行快速编排部署
    3. 不使用docker-compose时,此时启动一个完整的业务可能要多个容器共同实现,而且各个容器之间也有依赖调用关系,要自己手动docker run 来运行各个容器,就会很麻烦,故引入了docker-compose来实现容器集群(工程)的快速编排
    4. 通过设置一个docker-compose.yml配置文件,在文件中配置各个容器镜像的调用关系以及启动顺序,然后通过docker-compose up 命令一键启动整个工程中的所有容器
  3. 去哪下
    1. 不是Docker自带的,要下载Docker-compose项目到Linux中,去官网自己下载,然后根据操作进行配置
    2. docker-compose不是docker自带的,要去官网下载到docker中才可以使用
    3. docker-compose官网
  4. Compose核心概念:一个文件+两个要素(服务+工程)
    1. 一个文件:docker-compose.yml配置各个容器的调用关系
    2. 两个要素:服务(一个个容器实例)工程(一组关联容器组成的完整业务单元,在yml文件中定义) ![[PastedImage/Pasted image 20241108184812.png]]
  5. Compose使用3步骤:构建容器镜像编写docker-compose.yml、一键启动
    1. 先创建各个容器的镜像文件
    2. 编写docker-compose.yml文件对各个容器服务的调用关系进行编排形成一个工程
    3. 然后通过 docker-compose up 启动 docker-compose.yml 配置文件,实现容器集群的快速部署,等价于一次运行了多个docker run命令来开启docker容器集群,且在docker-compose.yml配置run的参数
  6. Compose常用命令
    1. Docker-compose可以在docker-compose.yml文件中对多个容器服务的调用关系和启动顺序进行配置,然后快速部署
  7. Compose编排复杂微服务
    1. docker-compose.yml文件
    1. 通过在docker-compose.yml目录下执行 docker-compose up 来一键启动同一个工程下的所有项目,通过docker-compose stop 来关闭所有服务
    2. 同一个docker-compose.yml文件中配置的服务会当作同一个工程,此时如果自定义了网络,则各个服务之间就可以直接通过服务名进行通信不需要通过容器名或者IP地址, 由自定义网络自动维护服务名与IP地址的映射
    3. 当写完docker-compose.yml文件后
    通过 docker-compose config -q 来检查是否存在语法问题**,如果没有输出说明没有问题
    4. 执行docker-compose命令时,必须在docker-compose.yml文件目录下执行,常用命令如下 ![[Pasted image 20241109095759.png]]
    5. DockerCompose工具可以实现项目工程容器集群的快速编排,通过在docker-compose.yml文件中编写各个服务的调用关系以及启动参数,然后直接docker-compose up docker-compose.yml 文件就可以实现容器的一键部署,或者使用 -d 使得全部容器后台运行 ![[PastedImage/Pasted image 20241109092518.png]]
    6. 在docker-compose.yml文件中,服务若不指定container-name,则会默认生成一个容器名,且如果在docker-compose.yml中配置了自定义网络模式,则容器就可以通过配置文件中的服务名来进行通信
    7. 自定义网络自动维护了IP地址和容器名的映射,此时在容器内通过容器名就可以实现容器间的通信,此时就可以在微服务的配置文件中,设置通过容器名来访问对应的服务
    2. 用compose前
    1. 查找数据时,如果redis没有则双检加锁去MySQL中查找,然后回写到redis中;更新时先更新MySQL再删除redis,此时不需要回写查找回写更新不回写
    2. 此时对于一个工程(同一个docker-compose.yml文件中的服务)中的所有容器服务,必须按照调用关系以及启动顺序分别使用docker run 启动各个容器以实现完整的业务
    3. 此时可以是工程正常运行,但容器的先后启动顺序是固定的,必须先启动Redis+MySQL才可以启动微服务,且每个容器服务都要使用docker run 进行启动,而且每次都要配置参数和端口映射,而且要在微服务中配置访问Redis和MySQL的IP地址,且是固定的,而bridge默认模式是为每个容器随机动态分配一个未被占用的IP地址,所以IP地址可能会变化导致无法成功部署![[PastedImage/Pasted image 20241109091315.png]]
    4. 让微服务容器以host模式启动使用宿主机的网络配置,然后Redis容器和MySQL容器均与宿主机实现端口映射,此时微服务就可以直接通过端口号访问启动的Redis和MySQL服务,或者MySQL和Redis与宿主机实现端口映射,此时微服务就直接访问宿主机的端口即可
    3. 用compose后
    1. 引入Compose之后,只需要在docker-compose.yml文件中编写各个容器服务的调用关系和启动参数配置,然后使用 docker-compose up 命令启动配置文件,就可以实现整个业务的运行
    2. 而且使用自定义网络模式 --network myBridge 来实现IP地址和容器名的自动映射

2. Docker轻量级可视化工具Portainer

  1. 是什么
    1. Docker轻量化可视化工具,是一个独立的工具相当于把docker命令封装为可视化界面
    2. 命令行操作通过图形化展示,Portainer是一个镜像,仍在Docker中以容器的方式运行,且设置为 --restart always 使得每次Docker启动时均会启动,从而实现Docker的监控
    3. 也就是将Docker的命令行操作通过图形化的方式进行实现,在Docker中运行对应的镜像后直接在浏览器访问网址即可进入图形化界面
  2. 安装
    1. Portainer工具也是一个Docker容器,要下载镜像然后在docker容器中运行,然后设置端口映射,通过访问宿主机的IP来访问服务通过9000端口访问可视化界面
    2. 在运行docker镜像时,可以设置多个 -p 端口映射,且 –restart=always 表示每次docker重启时该容器均会重启
  3. 常用操作
    1. docker system df 可以查看当前docker中的所有容器和镜像等信息图形化界面就是对命令和结果进行图形化展示
    2. –restart 参数是指当docker重启时该容器的操作always表示该容器会随着docker重启
    3. 因为要使用Portainer实时监控Docker,故在启动Portainer时要使用 --restart always 表示随着Docker重新启动,此时就可以实现随时使用Portainer监控Docker

3. Docker重量级监控工具CIG

  1. Docker原生监控统计命令
    1. docker stats:查看各个容器占用内存和CPU等信息,但是当容器过多时使用命令行就很不直观,而且数据是实时的,无法进行持久化,也无法过线预警
    2. docker system df 可以查看Docker中所有镜像和容器的信息,以及docker stats可以查看Docker中CPU和内存占用信息,但信息都是实时的,且命令行方式很难观测且无法持久化和预警,故使用CIG实现Docker数据收集并持久化然后进行界面展示并进行预警
    3. CAdvisor实现Docker内存和CPU数据的收集,但只可以展示2分钟的数据,故使用InfluxDB时序数据库来保存CAdvisor收集到的数据,然后在Granfana中对InfulxDB存储的数据进行可视化界面展示
    4. 每一个都是镜像,都可以运行在Docker中,因为是相互配合,故可以使用docker-compose对其配置为同一个工程,然后在启动时一同启动,并且设置为 --restart always 每次重启时均会启动
  2. 是什么:重量级监控
    1. CAdvisor+InfluxDB+Granfana
    2. 可以对任何数据进行监控,相对于Portainer更加强大
    3. CAdvisor-监控收集:收集docker容器信息,但默认只存储2分钟
    4. InfluxDB-存储数据:持久化CAdvisor收集的数据,时序数据库
    5. Granfana-展示图表:支持图表权限控制和预警
  3. Compose容器编排运行CIG
    1. 为CIG三个服务创建一个docker-compose.yml配置文件形成一个工程,一键启动三个服务
    2. 创建docker-compose.yml配置文件后,先使用 docker-compose config -q 查看语法是否有问题
    3. docker-compose命令必须在docker-compose.yml所在的目录下执行否则找不到配置文件
    4. docker-compose命令启动的容器服务如果没有指定name,则会自动使用 目录名+服务名-1 对其进行命名
  4. 测试
    1. CAdvisor用来数据收集,其只会保持2分钟的数据,故要进行持久化,在配置时设置link到InfluxDB时序数据库上
    2. InfluxDB对Cadvisor收集的数据进行持久化,配置时要设置保存的数据库为 cadvisor
    3. Granfana图形化展示界面,要进行配置选择influxDB作为数据源并设置面板显示,因为三者使用Compose进行编排,故可以直接通过服务名进行访问

4. 总结

  1. Docker三要素:镜像、容器、仓库
  2. Docker五大网络模式:bridge(默认)、host、none、container、自定义
  3. 注意
    1. docker run 时可以使用 -v 实现容器数据卷挂载,此时宿主机是绝对路径,且不指定容器路径时,默认会挂载到 /var/lib/docker 目录下,此时可以实现两个目录的实时同步更新,且可以指定映射规则,默认是rw读写,而且数据卷不属于镜像,构建时不会将数据卷的更改构建进去;可以实现多个容器的共享;要指定宿主机的绝对路径;会一直维持到没有容器挂载;要开启权限才可以挂载–priviledge=true;可以同时写多个 -v,且在Dockerfile中通过Volume保留字进行配置,且ADD保留字是拷贝+解压,而且要指定宿主机的相对路径
    2. 当某个镜像创建的容器正在运行,则此时不可以删除该镜像,因为容器是在镜像的基础上创建一个容器层进行操作,而且可能会commit提交为进行的镜像,此时要以原来的镜像为base镜像,故容器正在运行时不可删除镜像
    3. 使用redis进行缓存时,如果redis查不到数据,使用双检加锁去MySQL中查找,且一定要回写进入redis,否则永远都是查不到;更新时先更新MySQL,然后删除Redis即可,不用回写,否则可能导致最终数据不一致

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

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

相关文章

python之正则表达式总结

正则表达式 对于正则表达式的学习,我整理了网上的一些资料,希望可以帮助到各位!!! 我们可以使用正则表达式来定义字符串的匹配模式,即如何检查一个字符串是否有跟某种模式匹配的部分或者从一个字符串中将与…

Jmeter的安装,设置中文,解决乱码问题

1.Jmeter安装 1-Jmeter如何下载 1---我这里提供一个下载快的方式 https://www.123684.com/s/lWZKVv-4jiav?提取码:4x4y 2---Jmeter官网下载地址 Apache JMeter - Download Apache JMeter 2-配置java环境 1---下载javaJDK 官方下载地址 https://www.oracle.com/java/techno…

机器学习(七)——集成学习(个体与集成、Boosting、Bagging、随机森林RF、结合策略、多样性增强、多样性度量、Python源码)

目录 关于1 个体与集成2 Boosting3 Bagging与随机森林4 结合策略5 多样性X 案例代码X.1 分类任务-Adaboost-SVMX.1.1 源码X.1.2 数据集(鸢尾花数据集)X.1.3 模型效果 X.2 分类任务-随机森林RFX.2.1 源码X.2.2 数据集(鸢尾花数据集&#xff09…

融合虚拟与现实,AR Engine为用户提供沉浸式交互体验

当今的应用市场中,传统的应用产品已经难以完全满足消费者的多样化需求。为了在竞争激烈的市场中脱颖而出,企业需要深入洞察用户需求,提供个性化的服务体验和差异化的产品创新,以吸引并留住消费者。 比如,购物类App通过…

「QT」几何数据类 之 QPolygon 多边形类

✨博客主页何曾参静谧的博客📌文章专栏「QT」QT5程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…

.NET 一款替代cmd.exe的交互式命令渗透工具

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

跨境访问难题?SD-WAN跨境加速专线加速电商社交媒体推广

在全球化日益加深的今天,跨境电商已成为企业拓展国际市场的重要途径。然而,跨境电商在社交媒体平台进行推广时,常常面临一系列网络访问难题,如公网速度慢、员工办事效率低下、IP被封禁以及公司运维对网络维护的繁琐等。这些问题不…

让redis一直开启服务/自动启动

文章目录 你的redis是怎么打开的黑窗不能关?必须要自动启动吗?再说说mysql 本文的所有指令都建议在管理员权限下打开cmd控制台 推荐的以管理员身份打开控制台的方式 Win R 打开运行 输入cmdShift Ctrl Enter 你的redis是怎么打开的 安装过redis的朋友都知道, redis的安…

Python 分子图分类,GNN Model for HIV Molecules Classification,HIV 分子图分类模型;整图分类问题,代码实战

一、分子图 分子图(molecular graph)是一种用来表示分子结构的图形方式,其中原子被表示为节点(vertices),化学键被表示为边(edges)。对于HIV(人类免疫缺陷病毒&#xff…

vue项目实战

1.项目文件夹添加(结构如下) 2.页面构建 安装路由 npm install react-router-dom 3.页面基本模板 router文件夹下index.js的模板 // 引入组件 import Login from "../views/login"; // 注册路由数组 const routes [{// 首页默认是/path: …

势不可挡 创新引领 | 生信科技SOLIDWORKS 2025新品发布会·苏州站精彩回顾

2024年11月01日,由生信科技举办的SOLIDWORKS 2025新产品发布会在江苏苏州圆满落幕。现场邀请到制造业的专家学者们一同感受SOLIDWORKS 2025最新功能,探索制造业数字化转型之路。 在苏州站活动开场,达索系统专业客户事业部华东区渠道经理马腾飞…

论文阅读《Structure-from-Motion Revisited》

摘要 增量式地运动结构恢复是从无序图像集合中进行三维重建的一个普遍策略。虽然增量式地重建系统在各个方面上都取得了巨大的进步,但鲁棒性、准确性、完整度和尺度仍然是构建真正通用管道的关键问题。我们提出了一种新的运动结构恢复技术,它改进了目前…

【人工智能】10分钟解读-深入浅出大语言模型(LLM)——从ChatGPT到未来AI的演进

文章目录 一、前言二、GPT模型的发展历程2.1 自然语言处理的局限2.2 机器学习的崛起2.3 深度学习的兴起2.3.1 神经网络的训练2.3.2 神经网络面临的挑战 2.4 Transformer的革命性突破2.4.1 Transformer的核心组成2.4.2 Transformer的优势 2.5 GPT模型的诞生与发展2.5.1 GPT的核心…

Vue 组件传递数据-Props(六)

一、Props传递静态数据 defineProps() 和 defineEmits() 为了在声明 props 和 emits 选项时获得完整的类型推导支持&#xff0c;我们可以使用 defineProps 和 defineEmits API&#xff0c;它们将自动地在 <script setup> 中可用&#xff1a; defineProps 和 defineEmits …

移动开发(七):.NET MAUI使用RESTAPI实现查询天气笔记

目录 一、接口准备 二、实体部分 三、页面部分 四、后台代码逻辑 五、总结 在移动开发过程中,第三方对接是非常常见的。今天给大家分享.NET MAUI如何使用REST API实现输入城市名称查询天气的示例,希望对大家学习.NET MAUI可以提供一些帮助! 一、接口准备 首先我们需要…

【网络安全 | 并发问题】Nginx重试机制与幂等性问题分析

未经许可,不得转载。 文章目录 业务背景Nginx的错误重试机制proxy_next_upstream指令配置重试500状态码非幂等请求的重试问题幂等性和非幂等性请求non_idempotent选项的使用解决方案业务背景 在现代互联网应用中,高可用性(HA)是确保系统稳定性的关键要求之一。为了应对服务…

C++入门基础(三)

目录 引用引用概念例子1例子2例子3例子4常引用拓展 引用 引用概念 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空 间&#xff0c;它和它引用的变量共用同一块内存空间。 比如&#xff1a;同学A有一个别名为张…

ChatGPT键盘快捷键(按ctrl + /呼出)

文章目录 ChatGPT键盘快捷键- 打开新聊天: Ctrl Shift O- 聚焦聊天输入: Shift Esc- 复制最后一个代码块: Ctrl Shift ;- 复制最后一个回复: Ctrl Shift C- 设置自定义指令: Ctrl Shift I- 切换边栏: Ctrl Shift S- 删除聊天: Ctrl Shift ⌫- 显示快捷方式: Ctrl …

VCS:三步法的仿真流程

相关阅读 VCShttps://blog.csdn.net/weixin_45791458/category_12828763.html 使用三步流程仿真设计涉及三个基本步骤&#xff1a; 分析(Analysis)展开(Elaboration)仿真(Simulation) VCS使用这三个步骤编译任何设计&#xff0c;无论所使用源代码的是HDL、HVL或其他支持的技术…

万字长文解读深度学习——Transformer

文章目录 &#x1f33a;深度学习面试八股汇总&#x1f33a;初识Transformer1. 编码器-解码器架构解码器的额外结构 2. 自注意力机制&#xff08;Self-Attention Mechanism&#xff09;解码器中的注意力机制的2点特殊 3. 位置编码&#xff08;Positional Encoding&#xff09;4.…