当前位置: 首页 > news >正文

k8s day05

上周内容回顾:
    - 基于kubeadm部署k8s集群   *****
    - Pod的基础管理                *****      是K8S集群中最小的部署单元。
        ---> 网络基础容器(pause:v3.1),提供网络
        ---> 初始化容器(initContainer),做初始化的准备工作
        ---> 业务容器(containers),实际的业务容器
apiVersion: v1
kind: Pod
metadata:
    name: oldboyedu-linux82
    labels:
        school: oldboyedu
        class: linux82
    nameSpace: oldboyedu-linux
spec:
    imagePullSecret: oldboyedu-harbor
    volume:
    - name: data01
      emptyDir: {}
    - name: data02
      hostPath:
        path: /oldboyedu-linux82/data
    - name: data03
      nfs:
        server: 10.0.0.151
        path: /oldboyedu/data/k8s
    - name: data03
      configMap:
        name: nginx.conf
    imagePullPolicy: Always
    hostNetwork: true
    nodeName: k8s151.oldboyedu.com
    initContainer:
    containers:
    - name: linux 
      image: harbor250.oldboyedu.com/oldboyedu-games/huangjinkuanggong:v0.1
      # stdin: true
      volumeMount:
      - name: data01
        mountPath: /oldboyedu-linux82
      - name: data03
        mountPath: /etc/nginx/nginx.conf
        subPath: nginx.conf
      restartPolicy: Always
      livenessProbe:
        exec:
        httpGet:
        tcpSocket:
        ...
      readinessProbe:
        exec:
        httpGet:
        tcpSocket:
        ...
      command: ---> docker ---> ENTRYPOINT
      args:    ---> docker ---> CMD
      resources:
        limit:
        request:
      env:
      - name: SCHOOL
        value: oldboyedu
      - name: pod_name
        valueFrom:
            configMapKeyRef:
            fieldRef:
            secretKeyRef:
            resourceFieldRef
        
    - nameSpace                    *****  
        ---> 用来隔离k8S集群的资源,通过"kubectl api-resources"的NAMESPACED(true表示支持名称空间哟。)
    - configMap                    *****
        ---> 用于持久化配置文件。
    - secret                    *****
        ---> 存储铭感数据,因为其使用了base64编码格式,数据并不是加密的哟!
    - rc控制器基础使用            **
        ---> 控制Pod的副本数量。
    - rs控制器基础使用            **
        ---> 控制Pod的副本数量。相比于rc资源,rs资源实现更加轻量级,功能更丰富。
    - deploy控制器基础使用        *****
        ---> 生产环境中用于部署服务,微服务,无状态服务。
    - svc服务发现基础使用        *****
        ---> 负载均衡和服务发现。
        
        
Q1: 请问deploy和rc资源对比,在升级过程中有什么区别?
    相同点:
        (1)都支持副本的控制;
        (2)都支持升级
    
    不同点:
        (1)rc资源不支持声明式升级方式,deploy资源支持声明式升级
        (2)rc升级过程中,需要手动修改svc的标签选择器字段"selector",deploy资源不需要;
        
    
Q2: 请问deploy资源在升级过程中,能否访问到旧的Pod业务呢?为什么?请说明原因?
    deploy ---> rs, ---> old 
                    
           ---> rs, ---> new
    svc ---> endPoint ---> selector ---> [old,new]
    
    
Q3: svc的类型有哪些?其应用场景在哪?
    ClusterIP:
        集群的IP,仅对K8S集群内部资源提供访问。ingress ---> ing 
    NodePort:
        绑定K8S集群的所有worker节点的端口,优点就是可以让K8S外部用户进行访问,缺点就是费端口!
    ExternalName,LoadBalancer:
        云环境中使用的一种负载均衡器。

Q4: 请问访问一个Pod服务,有哪些方法,请举例说明?
    1.pods.spec.hostNetwork
    2.pods.spec.containers.ports.hostPort
    3.service.spec.type.NodePort
    ...

Q5: 如何实现svc的后端服务的流量控制呢?
    isito实现流量控制。

Endpoints资源案例:
    1.创建MySQL服务
docker run -p 3306:3306 -de MYSQL_ROOT_PASSWORD=123 --name mysql57 k8s151.oldboyedu.com:5000/oldboyedu-db/mysql:5.7

    2.添加授权用户
CREATE USER linux82 IDENTIFIED BY 'oldboyedu';
CREATE DATABASE wordpress CHARACTER SET = utf8mb4;
GRANT ALL ON wordpress.* TO linux82;
SHOW GRANTS FOR linux82;

    3.测试连接
mysql -u linux82 -poldboyedu wordpress
SHOW TABLES FROM wordpress;


    4.创建ep资源映射K8S集群外部的MySQL服务
[root@k8s151.oldboyedu.com v4]# cat 01-ep-mysql.yaml 
apiVersion: v1
kind: Endpoints
metadata:
  name: mysql-ep-v4
# 指定ep资源的后端服务
subsets:
  # IP地址
- addresses:
  - ip: 10.0.0.151
  # 端口号
  ports:
  - port: 3306
[root@k8s151.oldboyedu.com v4]# 


    5.创建和ep资源名称相同的svc,注意,当删除svc时,对应的ep名称也被删除!
[root@k8s151.oldboyedu.com v4]# cat 02-svc-mysql.yaml 
apiVersion: v1
kind: Service
metadata:
  name: mysql-ep-v4
spec:
  ports:
  - port: 3306
    targetPort: 3306
[root@k8s151.oldboyedu.com v4]# 


    6.WordPress指定数据库的主机地址为svc的名称
[root@k8s151.oldboyedu.com v4]# cat 03-deploy-wordpress.yaml 
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: oldboyedu-linux82-wordpress-v2
spec:
  replicas: 3
  selector:
     matchLabels:
        apps: wordpress
  template:
    metadata:
      name: oldboyedu-linux82-wordpress
      labels:
        apps: wordpress
    spec:
      volumes:
      - name: wp
        nfs:
          server: k8s151.oldboyedu.com
          path: /oldboyedu/data/kubernetes/wordpress/
      containers:
      - name: wordpress
        image: k8s151.oldboyedu.com:5000/oldboyedu-wordpress/wordpress
        env:
        - name: WORDPRESS_DB_HOST
          # value: 10.254.100.100
          # value: mysq57-v3
          value: mysql-ep-v4
        - name: WORDPRESS_DB_USER
          value: linux82
        - name: WORDPRESS_DB_PASSWORD
          value: oldboyedu
        volumeMounts:
        - name: wp
          mountPath: /var/www/html
[root@k8s151.oldboyedu.com v4]# 


    7.暴露wordpress服务
[root@k8s151.oldboyedu.com v4]# cat 04-svc-wordpress.yaml 
apiVersion: v1
kind: Service
metadata:
  name: wordpress-v3
spec:
  type: NodePort
  ports:
  - port: 9999
    targetPort: 80
    nodePort: 30080
  selector:
     apps: wordpress
[root@k8s151.oldboyedu.com v4]# 


    8.访问WebUI进行测试,并验证数据库的数据
# docker exec  mysql57 mysql -u linux82 -poldboyedu -e "SHOW TABLES FROM wordpress\G"

验证Kube-proxy底层默认采用了iptables实现负载均衡
    1.查看日志
kubectl get pods -A -o wide| grep kube-system
kubectl -n kube-system logs -f kube-proxy-4tfrj 
...
W0913 00:44:22.201735       1 proxier.go:513] Failed to load kernel module ip_vs with modprobe. You can ignore this message when kube-proxy is running inside container without mounting /lib/modules
W0913 00:44:22.202823       1 proxier.go:513] Failed to load kernel module ip_vs_rr with modprobe. You can ignore this message when kube-proxy is running inside container without mounting /lib/modules
W0913 00:44:22.203683       1 proxier.go:513] Failed to load kernel module ip_vs_wrr with modprobe. You can ignore this message when kube-proxy is running inside container without mounting /lib/modules
W0913 00:44:22.204579       1 proxier.go:513] Failed to load kernel module ip_vs_sh with modprobe. You can ignore this message when kube-proxy is running inside container without mounting /lib/modules
W0913 00:44:22.210022       1 server_others.go:249] Flag proxy-mode="" unknown, assuming iptables proxy
I0913 00:44:22.217923       1 server_others.go:143] Using iptables Proxier.


    2.验证iptables实现负载均衡
iptables-save | grep 10.254.230.102
iptables-save | grep KUBE-SVC-UCRS5B77IKZZYESP
iptables-save | grep KUBE-SEP-3E7IGDJUY2SRNIHO
iptables-save | grep KUBE-SEP-EO465CXBF2CDSL4W
iptables-save | grep KUBE-SEP-BFMP3WUEAK3XBKUH


    
使用ipvs替代iptables规则,生产环境中推荐使用ipvs代理模式:
    1.所有worker节点安装ipvs的工具包
yum -y install conntrack-tools ipvsadm.x86_64 

    2.所有worker节点编写加载ipvs的配置文件
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash

modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF

    3.加载ipvs相关模块并查看
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4


    4.修改kube-proxy的工作模式为ipvs
kubectl -n kube-system edit cm kube-proxy 
...
    mode: "ipvs"


    5.删除所有的Pod(生产环境中,建议一个一个的手动删除,删除后需要确保kube-proxy服务是正常启动滚动,再去删除下一个)
kubectl -n kube-system get pods | grep kube-proxy | awk '{print $1}' | xargs kubectl -n kube-system delete pods
    
    6.验证IPVS是否成功
ipvsadm -ln | grep 10.254.230.102 -A 10  # 注意,此处的IP是svc的VIP地址哟!


修改svc的端口映射范围:
    1.修改配置文件
vim /etc/kubernetes/manifests/kube-apiserver.yaml 
 ...
 spec:
  containers:
  - command:
    - kube-apiserver
    - --service-node-port-range=80-60000  # 进行添加这一行即可
    ...
    
    
    2.测试svc
建议使用nginx镜像测试,可以明显看出效果哟。
    


    使用deploy资源部署redis实战:
[root@k8s151.oldboyedu.com redis]# cat 01-deploy-redis.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-leader
  labels:
    app: redis
    role: leader
    tier: backend
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
        role: leader
        tier: backend
    spec:
      containers:
      - name: leader
        image: "docker.io/redis:6.0.5"
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        ports:
        - containerPort: 6379


---

apiVersion: v1
kind: Service
metadata:
  name: redis-leader
  labels:
    app: redis
    role: leader
    tier: backend
spec:
  type: NodePort
  ports:
  - port: 6379
    targetPort: 6379
    nodePort: 6379
  selector:
    app: redis
    role: leader
    tier: backend
[root@k8s151.oldboyedu.com redis]# 


    测试:
kubectl exec -it redis-leader-7df78664-ccqx8 -- bash
# redis-cli 
>  KEYS *   #  查看所有的KEY
>  set school oldboyedu   # 设置字符串
>  GET school   #  查看KEY的值
    
    
    
etcd API V3管理实战:
    (1)设置别名,便于后续操作。
alias etcdctl='ETCDCTL_API=3 etcdctl --endpoints=https://[127.0.0.1]:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt  --cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt --key=/etc/kubernetes/pki/etcd/healthcheck-client.key'

    (2)查看集群的成员
etcdctl member list

    (3)查看前缀为"/registry/pods/"的所有KEY,对应的是po资源的存储。
etcdctl get --keys-only  --prefix /registry/pods/

    (4)查看前缀为"/registry/configmaps/"的所有KEY,对应的cm资源的存储。
etcdctl get --keys-only  --prefix /registry/configmaps/

    (5)查看default名称空间下的某个key的信息,(查询的数据可能是乱码,无需关心,生产环境中直接使用kubectl查看即可)
etcdctl get  /registry/pods/default/oldboyedu-linux82-wordpress-v2-5b74b87dd7-4t5r9
    
    (6)删除指定的KEY,此处我删除的是一个名为"redis-leader"的deploy控制器,意味着从etcd数据库删除了数据。[生产环境慎用!]
etcdctl del /registry/deployments/default/redis-leader


coreDNS概述:
    coreDNS的作用就是将svc的名称解析为ClusterIP。

    早期使用的skyDNS组件,需要单独部署,在k8s 1.9版本中,我们就可以直接使用kubeadm方式安装CoreDNS组件。

    从k8s 1.12开始,CoreDNS就成为kubernetes默认的DNS服务器,但是kubeadm支持coreDNS的时间会更早。


    推荐阅读:
        https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dns/coredns
        
        
coreDNS的IP地址:
    vim  /var/lib/kubelet/config.yaml 
    ...
    clusterDNS:
    - 10.254.0.10  # 会将该DNS的IP地址写入到容器的"/etc/resolv.conf"文件中哟~
    clusterDomain: cluster.local


coreDNS的A记录:
        k8s的A记录格式:
    <service name>.<namespace name>.svc.cluster.local

        参考案例:
    kube-dns.kube-system.svc.cluster.local
    oldboyedu-mysql.default.svc.cluster.local


    温馨提示:
        (1)如果部署时直接写svc的名称,不写名称空间,则默认的名称空间为其引用资源的名称空间;
        (2)kubeadm部署时,无需手动配置CoreDNS组件(默认在kube-system已创建),二进制部署时,需要手动安装该组件;


测试案例:
    1)基于POD测试
# kubectl run test01 --image=alpine -it --rm -- sh
# ping mysql-ep-v4.default.svc.cluster.local
# ping kube-dns.kube-system.svc.cluster.local

    2)使用dig测试
yum -y install bind-utils
dig @10.254.0.10  mysql-ep-v4.default.svc.cluster.local +short 
dig @10.254.0.10  kube-dns.kube-system.svc.cluster.local +short 


今日内容回顾:
    - Endpoints ---> ep             *****
        一般用于将K8S外部的服务映射为K8S集群内部的服务,要求创建和其同名的svc。
        当删除svc时,会自动删除其对应的ep资源。

    - 部署PHP项目案例,WordPress为例。
        架构拆分
        deploy,nfs,svc,coreDNS,...
    
    - kube-proxy的调度模式切换为ipvs,默认使用iptables.
    
    - 修改nodePort的端口范围
    
    - etcd的基础使用(了解即可)

    - coreDNS组件
        将svc的名称解析为ClusterIP。
        
Q1: master组件全部挂掉,svc的类型为NodePort,请问已经部署的服务能否正常访问?为什么?请说明原因。

Q2: 当kube-proxy组件挂掉,svc的类型为NodePort,请问已经部署的服务能够正常访问?为什么?请说明原因。

今日作业:
    (1)完成课堂的所有练习;
    (2)将phpadmin项目部署到K8S集群;


扩展作业:
    (1)调研isito服务的基础使用;
    
 

相关文章:

k8s day05

上周内容回顾: - 基于kubeadm部署k8s集群 ***** - Pod的基础管理 ***** 是K8S集群中最小的部署单元。 ---> 网络基础容器(pause:v3.1)&#xff0c;提供网络 ---> 初始化容器(initContainer)&#xff0c;做初始化的准备工作…...

微信小程序里报名链接怎么做

微信小程序是一种便捷、实用的应用程序&#xff0c;它依托于微信平台&#xff0c;无需下载安装即可使用。在小程序中&#xff0c;我们可以制作报名链接&#xff0c;以便用户直接在微信中进行报名操作&#xff0c;提高服务效率。下面我们将探讨如何制作微信小程序里的报名链接为…...

Kotlin中的逻辑运算符

在Kotlin中&#xff0c;逻辑运算符用于对布尔值进行逻辑运算。Kotlin提供了三个逻辑运算符&#xff1a;与运算&#xff08;&&&#xff09;、或运算&#xff08;||&#xff09;和非运算&#xff08;!&#xff09;。下面对这些逻辑运算符进行详细介绍&#xff0c;并提供示…...

启智平台新建一个调试任务后,如何配环境,并提交镜像

1. 选一个基础版的镜像&#xff0c;我选的是第一个 2. 点击“调试”&#xff0c;进入调试页面 3. 输入bash&#xff0c;再输入pip list 就可以看到镜像自带的conda中已经安装的包 &#xff01;注意&#xff0c;这里一进入到调试页面&#xff0c;不要输入su&#xff0c;一定要…...

模糊测试面面观 | 车联网场景模糊测试解决方案

随着国际国内汽车信息安全标准的出台、用户安全意识的不断提高以及针对智能网联汽车安全攻击的不断规模化复杂化和深入&#xff0c;智能网联汽车系统及车联网安全形势严峻。 然而大部分车型在信息安全防护方面水平偏低&#xff0c;车内相关的联网部件及控制部件防护可靠性不高&…...

超声波清洗机有没有平价又好用的推荐、平价好用超声波清洗机总结

超声波清洗机以其高效、环保、节能等优点在日常生活中得到了广泛应用。无论是在珠宝首饰、眼镜等小物品的清洁方面&#xff0c;还是在医疗领域的清洁消毒方面&#xff0c;超声波清洗机都发挥着不可替代的作用。在购买超声波清洗机时&#xff0c;需要根据自己的具体需求选择合适…...

工控机通过485modbus转profinet网关与温度智能表通讯配置案例

在这个案例中&#xff0c;通过485modbus转profinet网关&#xff08;XD-MDPN100&#xff09;可以实现工控机与温度智能表之间的双向通信。工控机通过modbus协议将温度数据发送到网关&#xff0c;网关将数据转换为profinet协议后发送给温度智能表进行显示和控制。 通过485modbus转…...

【网络】计算机网络基础概念入门

&#x1f341; 博主 "开着拖拉机回家"带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——&#x1f390;个人主页 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#…...

Node.js的crypto模块 加密

Node.js的crypto模块提供了许多加密和解密功能&#xff0c;包括对称加密、非对称加密、哈希函数等。在本篇文章中&#xff0c;我们将详细介绍Node.js的crypto模块的API、代码注释和举例。 加密和解密 对称加密 对称加密算法使用相同的密钥进行加密和解密&#xff0c;例如AES…...

react+hooks使用

参考视频&#xff1a;https://www.bilibili.com/video/BV1ZB4y1Z7o8/?p3&spm_id_frompageDriver&vd_source5c584bd3b474d579d0bbbffdf0437c70 1.快速搭建开发环境 create-react-app是一个快速 创建react开发环境的工具&#xff0c;底层由webpack构建&#xff0c;封装…...

wsl2安装fsl

按照教程安装完毕之后&#xff0c;终端输入命令glxgears判断vcxsrv是否可用若有三个轮子即可用&#xff0c; 然后将三个齿轮关闭&#xff0c;并将vcxsrv挂起&#xff0c;使用Ubuntu终端输入 sudo gedit /etc/profile 打开写字板&#xff0c;&#xff08;此时写字板是会出现在vc…...

mac电脑zsh: command not found: adb

“zsh: command not found: adb” 的解决方法&#xff1a; 前提 已经成功安装了 Android Studio. 打开 iTerm 终端依次输入下面命令&#xff1a; echo export ANDROID_HOME/Users/$USER/Library/Android/sdk >> ~/.zshrc echo export PATH${PATH}:$ANDROID_HOME/tool…...

GitHub下载太慢的解决方案

修改hosts文件&#xff1a; windows的hosts文件在 C:\Windows\System32\drivers\etc\hosts cmd管理员运行命令notepad C:\Windows\System32\drivers\etc\hosts 然后cmd命令重启网络ipconfig /flushdns windows修改hosts Ubuntu22.04修改hosts sudo vim /etc/hosts # This fil…...

英语生活常用词,柯桥成人零基础英语培训

Shopping mall 商场 - elevator 升降电梯 - men’s clothing department 男装部 - mannequin 人体模特 - fitting room 试衣间 - display counter 陈列柜 - women’s clothing department 女装部 - price tag 价标 - cosmetics department 化妆品专柜 - salesclerk 销售…...

【前端学习】—使用多种方式实现数组去重(六)

【前端学习】—使用多种方式实现数组去重(六) 一、数组常用的几个方法 //[1,2,3,4,2,1]//[{name:"caicai",age:"10"},{name:"zhangsan",age:"20"}]const array=[...

JAVACPU占用过高、内存泄漏问题排查

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是「奇点」&#xff0c;江湖人称 singularity。刚工作几年&#xff0c;想和大家一同进步&#x1f91d;&#x1f91d; 一位上进心十足的【Java ToB端大厂…...

2023年【公路水运工程施工企业安全生产管理人员】新版试题及公路水运工程施工企业安全生产管理人员模拟试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 公路水运工程施工企业安全生产管理人员新版试题是安全生产模拟考试一点通生成的&#xff0c;公路水运工程施工企业安全生产管理人员证模拟考试题库是根据公路水运工程施工企业安全生产管理人员最新版教材汇编出公路水…...

屏幕截图软件Snagit 2023 mac中文特点介绍

Snagit 2023 mac是一款屏幕截图和视频录制软件&#xff0c;它可以帮助用户快速捕捉屏幕上的任何内容&#xff0c;并将其编辑、标注和共享。 Snagit 2023 软件特点 多种截图模式&#xff1a;支持全屏截图、窗口截图、区域截图、延时截图等多种截图模式&#xff0c;满足不同用户…...

deepin操作系统下载

官网 最新版本 – 深度科技社区 下载页面 最新版本 – 深度科技社区 随便选择一个下载 直接下载地址 https://cdimage.deepin.com/releases/20.9/deepin-desktop-community-20.9-amd64.iso...

【docker】查看容器日志

目录 一.通过查找宿主机日志路径&#xff0c;通过Linux命令查看即可。 1.1 查看容器日志路径 1.2 按照日志路径检索日志 二、通过docker命令检索日志 2.1 查看指定时间后的日志&#xff0c;只显示最后20行 2.2 查看最近10分钟的日志 2.3 查看某时间段之后的日志 2.4 查…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

Java数组Arrays操作全攻略

Arrays类的概述 Java中的Arrays类位于java.util包中&#xff0c;提供了一系列静态方法用于操作数组&#xff08;如排序、搜索、填充、比较等&#xff09;。这些方法适用于基本类型数组和对象数组。 常用成员方法及代码示例 排序&#xff08;sort&#xff09; 对数组进行升序…...