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

【云原生】【k8s】Kubernetes+EFK构建日志分析安装部署

目录

EFK安装部署

一、环境准备(所有主机)

1、主机初始化配置

2、配置主机名并绑定hosts,不同主机名称不同

3、主机配置初始化

4、部署docker环境

二、部署kubernetes集群

1、组件介绍

2、配置阿里云yum源

3、安装kubelet kubeadm kubectl

4、配置init-config.yaml

init-config.yaml配置

5、安装master节点

6、安装node节点

7、安装flannel

三、部署企业镜像仓库

1、部署Harbor仓库

访问测试:

2、重启harbor,导入EFK镜像

四、部署EFK业务环境

1、准备组件Yaml文件

2、部署Elasticsearch

3、部署kibana

4、部署Fluentd

5、验证容器日志收集,创建测试容器

6、配置 Kibana


EFK安装部署

一、环境准备(所有主机)

IP地址

主机名

组件

192.168.100.131

k8s-master

kubeadm、kubelet、kubectl、docker-ce

192.168.100.132

k8s-node01

kubeadm、kubelet、kubectl、docker-ce、elasticsearch、fluentd

192.168.100.133

k8s-node02

kubeadm、kubelet、kubectl、docker-ce、kibana、fluentd

192.168.100.134

harbor

docker-ce、docker-compose、harbor

        注意:所有主机配置推荐CPU:2C+  Memory:4G+、运行           Elasticsearch 的节点要有足够的内存(不低于 4GB)。若 Elasticsearch 容器退出,请检查宿主机中的/var/log/message 日志,观察是否因为系统 OOM 导致进程被杀掉。

项目拓扑

1主机初始化配置

所有主机配置禁用防火墙和selinux

[root@localhost ~]# setenforce 0[root@localhost ~]# iptables -F[root@localhost ~]# systemctl stop firewalld[root@localhost ~]# systemctl disable firewalld[root@localhost ~]# systemctl stop NetworkManager[root@localhost ~]# systemctl disable NetworkManager[root@localhost ~]# sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config

 

2、配置主机名并绑定hosts,不同主机名称不同

[root@localhost ~]# hostname k8s-master[root@localhost ~]# bash[root@k8s-master ~]# cat << EOF >> /etc/hosts192.168.100.131 k8s-master192.168.100.132 k8s-node01192.168.100.133 k8s-node02EOF

[root@localhost ~]# hostname k8s-node01

[root@k8s-node01 ~]# cat /etc/hosts

[root@localhost ~]# hostname k8s-node02

[root@k8s-node02 ~]#cat /etc/hosts

 

3、主机配置初始化

[root@k8s-master ~]# yum -y install vim wget net-tools lrzsz

[root@k8s-master ~]# swapoff -a[root@k8s-master ~]# sed -i '/swap/s/^/#/' /etc/fstab[root@k8s-master ~]# cat << EOF >> /etc/sysctl.confnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1EOF[root@k8s-master ~]# modprobe br_netfilter[root@k8s-master ~]# sysctl -p

 

4、部署docker环境

1)三台主机上分别部署 Docker 环境,因为 Kubernetes 对容器的编排需要 Docker 的支持。

[root@k8s-master ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

[root@k8s-master ~]# yum install -y yum-utils device-mapper-persistent-data lvm2

2)使用 YUM 方式安装 Docker 时,推荐使用阿里的 YUM 源。

[root@k8s-master ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3)清除缓存

[root@k8s-master ~]# yum clean all && yum makecache fast

4)启动docker

[root@k8s-master ~]# yum -y install docker-ce

[root@k8s-master ~]# systemctl start docker

[root@k8s-master ~]# systemctl enable docker

 

5)镜像加速器(所有主机配置)

[root@k8s-master ~]# cat << END > /etc/docker/daemon.json

{     "registry-mirrors":[ "https://nyakyfun.mirror.aliyuncs.com" ]

}

END

6)重启docker

[root@k8s-master ~]# systemctl daemon-reload

[root@k8s-master ~]# systemctl restart docker

 

二、部署kubernetes集群

1、组件介绍

三个节点都需要安装下面三个组件

kubeadm:安装工具,使所有的组件都会以容器的方式运行

kubectl:客户端连接K8S API工具

kubelet:运行在node节点,用来启动容器的工具

2、配置阿里云yum源

使用 YUM 方式安装 Kubernetes时,推荐使用阿里的 YUM 源。

[root@k8s-master ~]# ls /etc/yum.repos.d/

[root@k8s-master ~]# cat > /etc/yum.repos.d/kubernetes.repo

 

3、安装kubelet kubeadm kubectl

所有主机配置

[root@k8s-master ~]# yum install -y kubelet-1.20.0 kubeadm-1.20.0 kubectl-1.20.0

[root@k8s-master ~]# systemctl enable kubelet

[root@k8s-master ~]# kubectl version

        kubelet 刚安装完成后,通过 systemctl start kubelet 方式是无法启动的,需要加入节点或初始化为 master 后才可启动成功。

4、配置init-config.yaml

        Kubeadm 提供了很多配置项,Kubeadm 配置在 Kubernetes 集群中是存储在ConfigMap 中的,也可将这些配置写入配置文件,方便管理复杂的配置项。Kubeadm 配内容是通过 kubeadm config 命令写入配置文件的。

        在master节点安装,master 定于为192.168.100.131,通过如下指令创建默认的init-config.yaml文件:

[root@k8s-master ~]# kubeadm config print init-defaults > init-config.yaml

 

init-config.yaml配置

[root@k8s-master ~]# cat init-config.yaml

 

5、安装master节点

1)拉取所需镜像

[root@k8s-master ~]# kubeadm config images list --config init-config.yaml

[root@k8s-master ~]# kubeadm config images pull --config init-config.yaml

 

2)安装matser节点

[root@k8s-master ~]# kubeadm init --config=init-config.yaml //初始化安装K8S

 

3)根据提示操作

        kubectl 默认会在执行的用户家目录下面的.kube 目录下寻找config 文件。这里是将在初始化时[kubeconfig]步骤生成的admin.conf 拷贝到.kube/config

[root@k8s-master ~]# mkdir -p $HOME/.kube

[root@k8s-master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

[root@k8s-master ~]# chown $(id -u):$(id -g) $HOME/.kube/config

        Kubeadm 通过初始化安装是不包括网络插件的,也就是说初始化之后是不具备相关网络功能的,比如 k8s-master 节点上查看节点信息都是“Not Ready”状态、Pod 的 CoreDNS无法提供服务等。

6、安装node节点

1)根据master安装时的提示信息

[root@k8s-node01 ~]# kubeadm join 192.168.100.131:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:78bdd0f01660f4e84355b70aa8807cf1d0d6325b0b28502b29c241563e93b4ae

[root@k8s-master ~]# kubectl get nodes

[root@k8s-node02 ~]# kubeadm join 192.168.100.131:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:78bdd0f01660f4e84355b70aa8807cf1d0d6325b0b28502b29c241563e93b4ae

 

Master操作:

[root@k8s-master ~]# kubectl get nodes

        前面已经提到,在初始化 k8s-master 时并没有网络相关配置,所以无法跟 node 节点通信,因此状态都是“NotReady”。但是通过 kubeadm join 加入的 node 节点已经在k8s-master 上可以看到。

7、安装flannel

        Master 节点NotReady 的原因就是因为没有使用任何的网络插件,此时Node 和Master的连接还不正常。目前最流行的Kubernetes 网络插件有Flannel、Calico、Canal、Weave 这里选择使用flannel。

所有主机:

master上传kube-flannel.yml,所有主机上传flannel_v0.12.0-amd64.tar,cni-plugins-linux-amd64-v0.8.6.tgz

[root@k8s-master ~]# docker load < flannel_v0.12.0-amd64.tar

 

上传插件:

[root@k8s-master ~]# tar xf cni-plugins-linux-amd64-v0.8.6.tgz

[root@k8s-master ~]# cp flannel /opt/cni/bin/

master上传kube-flannel.yml

master主机配置:

[root@k8s-master ~]# kubectl apply -f kube-flannel.yml

[root@k8s-master ~]# kubectl get nodes

[root@k8s-master ~]# kubectl get pods -n kube-system

 

已经是ready状态

三、部署企业镜像仓库

1、部署Harbor仓库

1)所有主机配置禁用防火墙和selinux

[root@localhost ~]# setenforce 0[root@localhost ~]# iptables -F[root@localhost ~]# systemctl stop firewalld[root@localhost ~]# systemctl disable firewalld[root@localhost ~]# systemctl stop NetworkManager[root@localhost ~]# systemctl disable NetworkManager[root@localhost ~]# sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config

 

2)配置主机名

[root@localhost ~]# hostname harbor

[root@localhost ~]# bash

[root@harbor ~]#

3)部署docker环境

Harbor 仓库需要 Docker 容器支持,所以 Docker 环境是必不可少的。

[root@k8s-master ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

[root@k8s-master ~]# yum install -y yum-utils device-mapper-persistent-data lvm2

使用 YUM 方式安装 Docker 时,推荐使用阿里的 YUM 源。

[root@k8s-master ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

清除缓存

[root@k8s-master ~]# yum clean all && yum makecache fast

启动docker

[root@k8s-master ~]# yum -y install docker-ce

[root@k8s-master ~]# systemctl start docker

[root@k8s-master ~]# systemctl enable docker

镜像加速器(所有主机配置)

[root@k8s-master ~]# cat << END > /etc/docker/daemon.json

{        "registry-mirrors":[ "https://nyakyfun.mirror.aliyuncs.com" ]

}

END

 

重启docker

[root@k8s-master ~]# systemctl daemon-reload

[root@k8s-master ~]# systemctl restart docker

 

部署docker-compose

[root@harbor ~]# mv docker-compose /usr/local/bin/

[root@harbor ~]# chmod +x /usr/local/bin/docker-compose

 

部署harbor

Harbor 私有仓库程序,采用 docker-compose 方式部署,不同的功能和应用处于不同的容器,这样带来了很好的兼容性,可在众多支持 Docker 的系统上运行 Harbor。

[root@harbor ~]# tar xf harbor-offline-installer-v1.10.6.tgz -C /usr/local/

 

        Harbor 的配置文件是/usr/local/harbor/harbor.yml 文件,默认的 hostname 要修改为Harbor 虚拟机节点的 IP 地址。

[root@harbor ~]# vim /usr/local/harbor/harbor.yml

  5 hostname: 192.168.200.114

13 #https:   //https 相关配置都注释掉,包括 https、port、certificate 和 private_key

 14   # https port for harbor, default is 443

 15   #port: 443

 16   # The path of cert and key files for nginx

 17   #certificate: /your/certificate/path

 18   #private_key: /your/private/key/path

 

启动harbor

[root@harbor ~]# cd /usr/local/harbor/

[root@harbor harbor]# sh install.sh

[root@harbor harbor]# docker-compose ps

 

访问测试:

Harbor 启动完成后,浏览器访问 http://192.168.100.134,打开 Harbor Web 页面

修改所有主机docker启动脚本

[root@harbor ~]# vim /usr/lib/systemd/system/docker.service

[root@harbor ~]# scp /usr/lib/systemd/system/docker.service 192.168.100.131:/usr/lib/systemd/system/

[root@harbor ~]# scp /usr/lib/systemd/system/docker.service 192.168.100.132:/usr/lib/systemd/system/

[root@harbor ~]# scp /usr/lib/systemd/system/docker.service 192.168.100.133:/usr/lib/systemd/system/

所有主机重启docker服务

[root@harbor ~]# systemctl daemon-reload

[root@harbor ~]# systemctl restart docker

 

2、重启harbor,导入EFK镜像

[root@harbor ~]# sh install.sh

[root@harbor ~]# docker login -u admin -p Harbor12345 http://192.168.100.134

[root@harbor ~]# cd efk

[root@harbor ~]# ls

[root@harbor ~]# docker load < elasticsearch-7.4.2.tar

[root@harbor ~]# docker load < fluentd-es.tar

[root@harbor ~]# docker load < kibana-7.4.2.tar

[root@harbor ~]# docker load < alpine-3.6.tar

[root@harbor ~]# docker tag b1179d 192.168.100.134/efk/elasticsearch:7.4.2

[root@harbor ~]# docker tag 636f3d 192.168.100.134/efk/fluentd-es-root:v2.5.2

[root@harbor ~]# docker tag 43773d 192.168.100.134/efk/alpine:3.6

[root@harbor ~]# docker tag 230d3d 192.168.100.134/efk/kibana:7.4.2

[root@harbor ~]# docker push 192.168.100.134/efk/elasticsearch:7.4.2

[root@harbor ~]# docker push 192.168.100.134/efk/fluentd-es-root:v2.5.2

[root@harbor ~]# docker push 192.168.100.134/efk/kibana:7.4.2

[root@harbor ~]# docker push 192.168.100.134/efk/alpine:3.6

四、部署EFK业务环境

1、准备组件Yaml文件

Yaml文件中涉及到镜像地址和 nodeSelector 选择器地址需要注意修改。

[root@k8s-master ~]# mkdir efk #上传对应的yaml文件

[root@k8s-master ~]# cd efk/

[root@k8s-master efk]# grep "image:" elasticsearch.yaml

        image: 192.168.100.134/efk/elasticsearch:7.4.2

        image: 192.168.100.134/efk/alpine:3.6

        image: 192.168.100.134/efk/alpine:3.6

        NodeSelector 节点选择器的修改,实际作用是决定将 Elasticsearch 服务部署到哪个节点。当前配置文件内是调度到 k8s-node01 节点,请根据实际负载情况进行调整。节点名称可以通过 kubectl get nodes 获取,在选择节点时务必确保节点有足够的资源。

[root@k8s-master efk]# grep -A1 "nodeSelector" elasticsearch.yaml

      nodeSelector:

        kubernetes.io/hostname: k8s-node01

 

对kibana.yaml文件镜像地址和调度节点进行修改,将 Kibana 部署到 k8s-node02 节点。

[root@k8s-master efk]# grep "image:" kibana.yaml

        image: 192.168.100.134/efk/kibana:7.4.2

[root@k8s-master efk]# grep -A1 "nodeSelector" kibana.yaml

      nodeSelector:

        kubernetes.io/hostname: k8s-node02

 

修改 fluentd.yaml的镜像地址

[root@k8s-master efk]# grep "image:" fluentd.yaml

        image: 192.168.100.134/efk/fluentd-es-root:v2.5.2

修改 test-pod.yaml的镜像地址

[root@k8s-master efk]# grep "image:" test-pod.yaml

    image: 192.168.100.134/efk/alpine:3.6

 

2、部署Elasticsearch

1)创建命名空间

创建名为 logging 的命名空间,用于存放 EFK 相关的服务。在 k8s-master节点的/opt/efk 目录下。

[root@k8s-master efk]# kubectl create -f namespace.yaml

[root@k8s-master efk]# kubectl get namespaces | grep logging

 

2)创建 es 数据存储目录

Elasticsearch 服务通常可以简写为 es。到 k8s-node01 节点创建数据目录/esdata。

[root@k8s-node01 ~]# mkdir /esdata

 

3)部署 es 容器

进入 k8s-master节点的/efk 目录,部署 es 容器,执行如下操作。

[root@k8s-master ~]# cd efk/

[root@k8s-master efk]# kubectl create -f elasticsearch.yaml

等待片刻,即可查看到 es 的 Pod,已经部署到 k8s-node01 节点,状态变为 running。

[root@k8s-master efk]# kubectl -n logging get pods -o wide

[root@k8s-master efk]# kubectl -n logging get svc

 

通过 curl 命令访问服务,验证 es 是否部署成功。

[root@k8s-master efk]# curl 10.98.29.202:9200

 

3、部署kibana

进入 k8s-master 的/opt/efk 目录,执行如下命令。

[root@k8s-master efk]# kubectl create -f kibana.yaml

service/kibana created

查看 Pod 的状态。

[root@k8s-master efk]# kubectl -n logging get pods

查看对应的 Service,得到 NodePort 值为 31732,此端口为随机端口,不同环境会不一致,请以实际结果为准。

[root@k8s-master efk]# kubectl -n logging get svc |grep

        通过访问 192.168.100.131:31591 进入到 kibana 的访问界面,观察是否可以正常打开,其中 31591 端口需要替换成实际的端口号。若能正常访问,说明 Kibana 连接 es 已经正常。

 

4、部署Fluentd

1)给集群节点打标签

        为了自由控制需要采集集群中节点上业务容器的服务日志。因此,需要给 k8s-node01和 k8s-node02 节点打上 fluentd=true 的标签 label。

[root@k8s-master efk]# kubectl label node k8s-node01 fluentd=true

[root@k8s-master efk]# kubectl label node k8s-node02 fluentd=true

        k8s-node01 和 k8s-node02 已经打上了 fluentd=true 的 label,那么 Fluentd 服务就会启动到这两个节点,也就意味着运行在这两个节点的 Pod 日志会被收集起来。

2)启动 Fluentd 服务

在 k8s-master节点的/opt/efk 目录,启动 Fluentd 服务

[root@k8s-master efk]# kubectl create -f fluentd-es-config-main.yaml

[root@k8s-master efk]# kubectl create -f fluentd-configmap.yaml

[root@k8s-master efk]# kubectl create -f fluentd.yaml

 

3)查看 Pod 信息

是否已经在 k8s-node01 和 k8s-node02 节点启动成功。

[root@k8s-master efk]# kubectl -n logging get pods

 

5、验证容器日志收集创建测试容器

进入 k8s-master的/opt/efk 目录,执行如下命令。

[root@k8s-master efk]# kubectl create -f test-pod.yaml

[root@k8s-master efk]# kubectl get pods

 

6、配置 Kibana

 

 

        索引创建完成后,可以发现已经生成了多个索引域,稍等片刻再次点击左上角的

discover 图标,进入日志检索页面。

 

        然后通过索引键去过滤,比如根据Kubernetes.host、Kubernetes.container_name、 kubernetes.container_image_id等去做过滤。

        通过其他元数据也可以过滤日志数据,比如单击任何日志条目以查看其他元数据,如容器名称、Kubernetes 节点、命名空间等。

 

到这里,在 Kubernetes 集群上已经成功部署了 EFK。

相关文章:

【云原生】【k8s】Kubernetes+EFK构建日志分析安装部署

目录 EFK安装部署 一、环境准备&#xff08;所有主机&#xff09; 1、主机初始化配置 2、配置主机名并绑定hosts&#xff0c;不同主机名称不同 3、主机配置初始化 4、部署docker环境 二、部署kubernetes集群 1、组件介绍 2、配置阿里云yum源 3、安装kubelet kubeadm …...

计算实数数组中所有元素的绝对值 numpy.fabs()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 计算实数数组中所有元素的绝对值 numpy.fabs() [太阳]选择题 请问关于以下代码表述错误的是&#xff1f; iimport numpy as np a np.array([-1,-3]) b np.array([-1,34j]) print("【显…...

深入浅出Pytorch函数——torch.nn.init.orthogonal_

分类目录&#xff1a;《深入浅出Pytorch函数》总目录 相关文章&#xff1a; 深入浅出Pytorch函数——torch.nn.init.calculate_gain 深入浅出Pytorch函数——torch.nn.init.uniform_ 深入浅出Pytorch函数——torch.nn.init.normal_ 深入浅出Pytorch函数——torch.nn.init.c…...

ORACLE中UNION、UNION ALL、MINUS、INTERSECT学习

1、UNION和UNION ALL的使用与区别 如果我们需要将两个select语句的结果作为一个整体显示出来&#xff0c;我们就需要用到union或者union all关键字。union的作用是将多个结果合并在一起显示出来。 union和union all的区别是union会自动压缩多个结果集合中的重复结果&#xff…...

【k8s、云原生】基于metrics-server弹性伸缩

第四阶段 时 间&#xff1a;2023年8月18日 参加人&#xff1a;全班人员 内 容&#xff1a; 基于metrics-server弹性伸缩 目录 一、Kubernetes部署方式 &#xff08;一&#xff09;minikube &#xff08;二&#xff09;二进制包 &#xff08;三&#xff09;Kubeadm 二…...

回归预测 | MATLAB实现WOA-SVM鲸鱼算法优化支持向量机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现WOA-SVM鲸鱼算法优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现WOA-SVM鲸鱼算法优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览基本介绍程…...

VSCode快捷键

CtrlShiftP&#xff0c;F1&#xff1a;显示命令面板 CtrlP&#xff1a;快速打开 CtrlShiftN&#xff1a;新窗口/实例 CtrlShiftW&#xff1a;关闭窗口/实例 CtrlX&#xff1a;剪切行 CtrlC&#xff1a;复制行 ALT↑/↓&#xff1a;上下移动 ShiftAlt↓/↑&#xff1a;向…...

贪心算法求数组中能组成三角形的最大周长

题目&#xff1a;三角形的最大周长 给定由一些正数(代表长度)组成的数组arr,返回由其中三个长度组成的、面积不为零的三角形的最大周长。 如果不能形成任何面积不为零的三角形&#xff0c;返回0。 分析&#xff1a; 对数组排序&#xff0c;再从大到小选择三个数&#xff0c;再…...

VMWare Workstation 17 Pro 网络设置 桥接模式 网络地址转换(NAT)模式 仅主机模式

文章目录 网络模式配网要求CentOSDHCP虚拟网络桥接模式默认配置测试手动配置测试 网络地址转发模式 (NAT)还原配置虚拟网络配置默认配置测试手动配置测试 仅主机模式 网络模式 桥接模式: 主机与虚拟机对等, 虚拟机注册到主机所在的局域网, 会占用该网络的IP该局域网内的所有机…...

拒绝摆烂!C语言练习打卡第四天

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;每日一练 &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、选择题 &#x1f4dd;1.第一题 &#x1f4dd;2.第二题 &#x1f4d…...

KubeSphere 社区双周报 | Java functions framework 支持 SkyWalking | 2023.8.4-8.17

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者&#xff0c;并对近期重要的 PR 进行解析&#xff0c;同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为&#xff1a;2023.08.04-2023.…...

【学习笔记之java】使用RestTemplate调用第三方接口

1.首先需要导入依赖 <!-- RestTemplate使用导入的依赖--><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</version></dependency>2.跟启动类同级创建…...

数据集成革新:去中心化微服务集群的无限潜能

在当今数据密集型的业务环境下&#xff0c;传统的集中式架构已经难以满足高可用性和高并发性的要求。而去中心化微服务集群则通过分散式的架构&#xff0c;将系统划分为多个小型的、独立部署的微服务单元&#xff0c;每个微服务负责特定的业务功能&#xff0c;实现了系统的高度…...

后端返回可下载的xlsx文件,但是前端接收下载后为乱码

我的接收数据进行处理的代码为&#xff1a; download_signal_list() {return new Promise((resolve, reject) > {get_download_signal({project_id: this.projectId,version_id: this.versionId}).then(response > {const url window.URL.createObjectURL(new Blob([res…...

提升资源管理效率必备工具推荐

一、数据传输 1、Textify&#xff08;PC&#xff09; 作为一名技术人员&#xff0c;需要经常研究各种技术&#xff0c;因此&#xff0c;复制粘贴的操作十分常见。 Textify可以快速复制各种控件中的文本&#xff0c;包括浏览器中当前页面的标题、聊天窗口中各个部分的文字、桌…...

HJ23 删除字符串中出现次数最少的字符

描述 实现删除字符串中出现次数最少的字符&#xff0c;若出现次数最少的字符有多个&#xff0c;则把出现次数最少的字符都删除。输出删除这些单词后的字符串&#xff0c;字符串中其它字符保持原来的顺序。 数据范围&#xff1a;输入的字符串长度满足 1≤n≤20 1≤n≤20 &…...

文心一言 VS 讯飞星火 VS chatgpt (76)-- 算法导论7.3 1题

一、如果用go语言&#xff0c;为什么我们分析随机化算法的期望运行时间&#xff0c;而不是其最坏运行时间呢? 文心一言&#xff1a; 在分析算法的性能时&#xff0c;期望运行时间是一个重要的指标&#xff0c;它描述了算法在平均情况下的表现。期望运行时间考虑了所有可能的…...

Leetcode - 滑动窗口

文章目录 1. 滑动窗口2. 举例2.1 无重复字符的最长子串2.2 长度最小的子数组2.3 滑动窗口最大值2.4 最小覆盖子串2.5 删除有序数组中的重复项 1. 滑动窗口 滑动窗口的大概思想如下&#xff1a; 可以通过两个指针来标识窗口的边界。窗口的长度是可以固定的&#xff0c;也可以是…...

如何保证数据传输的安全?

要确保数据传输的安全&#xff0c;您可以采取以下措施&#xff1a; 使用加密协议&#xff1a;使用安全的传输协议&#xff0c;如HTTPS(HTTP over SSL/TLS)或其他安全协议&#xff0c;以保护数据在传输过程中的安全性。加密协议可以有效防止数据被窃听或篡改。 强化身份验证&…...

政务、商务数据资源有效共享:让数据上“链”,记录每一个存储过程!

数据上链是目前“区块链”最常见的场景。因为链上所有参与方都分享了统一的事实来源&#xff0c;所有人都可以即时获得最新的信息&#xff0c;数据可用不可见。因此&#xff0c;不同参与方之间的协作效率得以大幅提高。同时&#xff0c;因为区块链上的数据难以篡改&#xff0c;…...

xml转map工具类

背景&#xff1a;最近遇到接口返回是xml&#xff0c;所以需要整一个转换的工具类&#xff0c;方便后续其他xml处理。 依赖引入&#xff1a; <dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId><version>1.1</versi…...

C++并发多线程--std::future_status、std::shared_future和std::atomic的使用

1--std::future_status的使用 std::future_status成员函数含有三种状态&#xff1a;timeout&#xff08;执行超时&#xff09;、ready&#xff08;执行完毕&#xff09;和deferred&#xff08;延迟执行&#xff09;&#xff0c;其中 deferred 状态需要用 std::launch::deferred…...

Redis在Java中的基本使用

本片将介绍 Redis 在 Java 中的基本使用 文章目录 1、使用jedis操作redis1.1、Jedis简介1.2、引入jedis的Maven依赖1.2、获取连接1.3、使用实例 2、对于JedisPooled的使用2.1、使用JedisPooled2.2、关于连接池 3、SpringBoot下使用Redis3.1、引入Maven依赖3.2、配置Redis连接3.…...

4.2 C++ Boost 内存池管理库

Boost 库是一个由C/C语言的开发者创建并更新维护的开源类库&#xff0c;其提供了许多功能强大的程序库和工具&#xff0c;用于开发高质量、可移植、高效的C应用程序。Boost库可以作为标准C库的后备&#xff0c;通常被称为准标准库&#xff0c;是C标准化进程的重要开发引擎之一。…...

Django模型基础

文章目录 一、models字段类型概述属性命名限制使用方式逻辑删除和物理删除常用字段类型 二、常用字段参数常用字段选项(通过字段选项&#xff0c;可以实现对字段的约束) 实践创建模型执行迁移命令 并 创建超级用户登录admin后台添加文件和图片字段定义模型字段和约束及在Admin后…...

导读-Linux简介

Linux简介 ​ 总所周知&#xff0c;计算机系统包含硬件和软件两部分。硬件部分被称为裸机&#xff0c;主要包括中央处理器&#xff08;CPU&#xff09;、内存、外存和各种外部设备。软件部分主要包括系统软件和应用软件两部分。系统软件包括操作系统、汇编语言、编译程序、数据…...

判断平面中两射线是否相交的高效方法

1. 简介 最近在工作中遇到判断平面内两射线是否相交的问题。 对于这个问题的解决,常规的方法是将两条射线拓展为直线,计算直线的交点,而后判断交点是否在射线上。 这种方法,在思路上较为直观,也易于理解。然后,该方法在计算量上相对较大。对于少量射线间的交点计算尚可…...

基于VUE3+Layui从头搭建通用后台管理系统(前端篇)八:自定义组件封装上

一、本章内容 本章实现一些自定义组件的封装,包括数据字典组件的封装、下拉列表组件封装、复选框单选框组件封装、单选框组件封装、文件上传组件封装、级联选择组件封装、富文本组件封装等。 1. 详细课程地址: 待发布 2. 源码下载地址: 待发布 二、界面预览 ![在这里插入图…...

RabbitMq交换机类型介绍

RabbitMq交换机类型介绍 在RabbitMq中&#xff0c;生产者的消息都是通过交换器来接收&#xff0c;然后再从交换器分发到不同的队列&#xff0c;再由消费者从队列获取消息。这种模式也被成为“发布/订阅”。 分发的过程中交换器类型会影响分发的逻辑。 直连交换机&#xff1a…...

中国电信秋招攻略,考试内容分析

电信秋招简介 每年的毕业生人数都在逐年递增&#xff0c;逐年递增就意味着竞争会越来越大&#xff0c;最好比别人做更充足的准备。要确定好就业方向以及就业的岗位&#xff0c;要了解各种各样的流程&#xff0c;做好一切自己能做到的准备。而对于有想法进入电信公司工作的人来…...

prompt-engineering-note(面向开发者的ChatGPT提问工程学习笔记)

介绍&#xff1a; ChatGPT Prompt Engineering Learning Notesfor Developers (面向开发者的ChatGPT提问工程学习笔记) 课程简单介绍了语言模型的工作原理&#xff0c;提供了最佳的提示工程实践&#xff0c;并展示了如何将语言模型 API 应用于各种任务的应用程序中。 此外&am…...

2011-2021年数字普惠金融指数Bartik工具变量法(含原始数据和Bartik工具变量法代码)

2011-2021年数字普惠金融指数Bartik工具变量法&#xff08;含原始数据和Bartik工具变量法代码&#xff09; 1、时间&#xff1a;2011-2020&#xff08;省级、城市&#xff09;&#xff0c;2014-2020&#xff08;区县&#xff09; 2、原始数据来源&#xff1a;北大金融研究中心…...

[ MySQL ] — 常见函数的使用

目录 日期函数 current_date — 获取当前日期 current_time — 获取当前时间 current_timestamp — 获取当前时间戳 date — 获取参数的日期部分 ​编辑 date_add — 在日期或时间的基础上进行增加 date_sub — 在日期或时间的基础上进行减少 datediff — 计算两个日期相差…...

Spring AOP实现切入增强的两种方式(execution+annotation)-Demo

pom文件依赖 <!-- AOP切面编程启动环境依赖组 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency> 1、通过execution表达式实现切入增强 package com…...

人工智能在网络安全中的作用:当前的局限性和未来的可能性

人工智能 (AI) 激发了网络安全行业的想象力&#xff0c;有可能彻底改变安全和 IT 团队处理网络危机、漏洞和勒索软件攻击的方式。 然而&#xff0c;对人工智能的能力和局限性的现实理解至关重要&#xff0c;并且存在许多挑战阻碍人工智能对网络安全产生直接的变革性影响。 在…...

BC99 序列中整数去重

描述 输入n个整数的序列&#xff0c;要求对这个序列进行去重操作。所谓去重&#xff0c;是指对这个序列中每个重复出现的整数&#xff0c;只保留该数第一次出现的位置&#xff0c;删除其余位置。 输入描述 输入包含两行&#xff0c;第一行包含一个正整数n&#xff08;1 ≤ n…...

[PyTorch][chapter 52][迁移学习]

前言&#xff1a; 迁移学习&#xff08;Transfer Learning&#xff09;是一种机器学习方法&#xff0c;它通过将一个领域中的知识和经验迁移到另一个相关领域中&#xff0c;来加速和改进新领域的学习和解决问题的能力。 这里面主要结合前面ResNet18 例子&#xff0c;详细讲解一…...

Ceph如何操作底层对象数据

1.基本原理介绍 1.1 ceph中的对象(object) 在Ceph存储中&#xff0c;一切数据最终都会以对象(Object)的形式存储在硬盘&#xff08;OSD&#xff09;上&#xff0c;每个的Object默认大小为4M。 通过rados命令&#xff0c;可以查看一个存储池中的所有object信息&#xff0c;例如…...

sklearn机器学习库(二)sklearn中的随机森林

sklearn机器学习库(二)sklearn中的随机森林 集成算法会考虑多个评估器的建模结果&#xff0c;汇总之后得到一个综合的结果&#xff0c;以此来获取比单个模型更好的回归或分类表现。 多个模型集成成为的模型叫做集成评估器&#xff08;ensemble estimator&#xff09;&#xf…...

FlutterBoost 实现Flutter页面内嵌iOS view

在使用Flutter混合开发中会遇到一些原生比Flutter优秀的控件&#xff0c;不想使用Flutter的控件&#xff0c;想在Flutter中使用原生控件。这时就会用到 Flutter页面中内嵌 原生view&#xff0c;这里简单介绍一个 内嵌 iOS 的view。 注&#xff1a;这里使用了 FlutterBoost。网…...

走嵌入式还是纯软件?学长告诉你怎么选

最近有不少理工科的本科生问我&#xff0c;未来是走嵌入式还是纯软件好&#xff0c;究竟什么样的同学适合学习嵌入式呢&#xff1f;在这里我整合一下给他们的回答&#xff0c;根据自己的经验提供一些建议。 嵌入式领域也可以分为单片机方向、Linux方向和安卓方向。如果你的专业…...

【云计算原理及实战】初识云计算

该学习笔记取自《云计算原理及实战》一书&#xff0c;关于具体描述可以查阅原本书籍。 云计算被视为“革命性的计算模型”&#xff0c;因为它通过互联网自由流通使超级计算能力成为可能。 2006年8月&#xff0c;在圣何塞举办的SES&#xff08;捜索引擎战略&#xff09;大会上&a…...

Open3D (C++) 基于拟合高差的点云地面点提取

目录 一、算法原理1、原理概述2、参考文献二、代码实现三、结果展示1、原始点云2、提取结果四、相关链接系列文章(连载中。。。): Open3D (C++) 基于高程的点云地面点提取Open3D (C++) 基于拟合平面的点云地面点提取Open3D (C++) 基于拟合高差的点云地面点提取</...

认识Transformer:入门知识

视频链接&#xff1a; https://www.youtube.com/watch?vugWDIIOHtPA&listPLJV_el3uVTsOK_ZK5L0Iv_EQoL1JefRL4&index60 文章目录 Self-Attention layerMulti-head self-attentionPositional encodingSeq2Seq with AttentionTransformerUniversal Transformer Seq2Seq …...

《TCP IP网络编程》第二十四章

第 24 章 制作 HTTP 服务器端 24.1 HTTP 概要 本章将编写 HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;服务器端&#xff0c;即 Web 服务器端。 理解 Web 服务器端&#xff1a; web服务器端就是要基于 HTTP 协议&#xff0c;将网页对…...

【AI】文心一言的使用

一、获得内测资格&#xff1a; 1、点击网页链接申请&#xff1a;https://yiyan.baidu.com/ 2、点击加入体验&#xff0c;等待通过 二、获得AI伙伴内测名额 1、收到短信通知&#xff0c;点击链接 网页Link&#xff1a;https://chat.baidu.com/page/launch.html?fa&sourc…...

CSAPP Lab2:Bomb Lab

说明 6关卡&#xff0c;每个关卡需要输入相应的内容&#xff0c;通过逆向工程来获取对应关卡的通过条件 准备工作 环境 需要用到gdb调试器 apt-get install gdb系统: Ubuntu 22.04 本实验会用到的gdb调试器的指令如下 r或者 run或者run filename 运行程序,run filename就…...

Java中使用流将两个集合根据某个字段进行过滤去重?

Java中使用流将两个集合根据某个字段进行过滤去重? 在Java中&#xff0c;您可以使用流(Stream)来过滤和去重两个集合。下面是一个示例代码&#xff0c;展示如何根据对象的某个字段进行过滤和去重操作&#xff1a; import java.util.ArrayList; import java.util.List; impor…...

自动驾驶HMI产品技术方案

版本变更 序号 日期 变更内容 编制人 审核人 文档版本 1 2 1....

Git判断本地是否最新

场景需求 需要判断是否有新内容更新,确定有更新之后执行pull操作&#xff0c;然后pull成功之后再将新内容进行复制到其他地方 pgit log -1 --prettyformat:"%H" HEAD -- . "origin/HEAD" rgit rev-parse origin/HEAD if [[ $p $r ]];thenecho "Is La…...