项目实战:k8s部署考试系统

一、新建nfs服务器(192.168.1.44)

1.基础配置(IP地址防火墙等)

2.配置时间同步

[root@localhost ~]# yum -y install ntpdate.x86_64 
[root@localhost ~]# ntpdate time2.aliyun.com
27 Sep 10:28:08 ntpdate[1634]: adjust time server 203.107.6.88 offset 0.014965 sec
[root@localhost ~]# crontab -e                   //设置计划任务
* 3 * * * /sbin/ntpdate time2.aliyun.com

3.安装nfs服务应用

[root@localhost ~]# yum -y install rpcbind nfs-utils

4.配置文件

[root@localhost ~]# echo "/root/pes    *(rw,sync)" >> /etc/exports
[root@localhost ~]# cat /etc/exports
/root/pes   *(rw.sync)

5.准备pes资源目录(部署考试系统项目)

6.启动服务

[root@localhost ~]# systemctl start rpcbind.service nfs-server.service                      //启动
[root@localhost ~]# systemctl enable rpcbind.service nfs-server.service                   //设置开机启动
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.

7.验证

[root@localhost ~]# showmount -e localhost                  //这样代表成功
Export list for localhost:
/root/pes *

二、部署前端

1.创建web-deployment.yaml资源清单文件

[root@k8s-master ~]# mkdir pes-k8s
[root@k8s-master ~]# cd pes-k8s
[root@k8s-master pes-k8s]# vim web-deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name:  web-deployment
  namespace: default
  labels:
    app:  web-deployment
spec:
  selector:
    matchLabels:
      app: web-deployment
  replicas: 3
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app:  web-deployment
    spec:
      containers:
      - name:  nginxlatest
        image:  docker.io/library/nginx:latest
        imagePullPolicy: Never
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
          limits:
            cpu: 100m
            memory: 100Mi
        ports:
        - containerPort:  80
          name:  nginxport
        volumeMounts:
        - name: localtime
          mountPath: /usr/share/nginx/html
      volumes:
        - name: localtime
          nfs:
            server: 192.168.1.44
            path: /root/pes/web/dist
      restartPolicy: Always

[root@k8s-master pes-k8s]# kubectl create -f web-deployment.yaml 
deployment.apps/web-deployment created
[root@k8s-master pes-k8s]# kubectl get po -owide
NAME                              READY   STATUS    RESTARTS       AGE   IP               NODE        NOMINATED NODE   READINESS GATES
cluster-test-66bb44bd88-nk46t     1/1     Running   76 (21m ago)   14d   172.16.169.179   k8s-node2   <none>           <none>
web-deployment-7bff5ff45c-45rz6   1/1     Running   0              13m   172.16.169.186   k8s-node2   <none>           <none>
web-deployment-7bff5ff45c-nlq2s   1/1     Running   0              13m   172.16.36.76     k8s-node1   <none>           <none>
web-deployment-7bff5ff45c-whkd2   1/1     Running   0              13m   172.16.169.185   k8s-node2   <none>           <none>

2.访问测试

[root@k8s-master pes-k8s]# curl 172.16.169.186
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <link rel="icon" href="/favicon.ico">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vite App</title>
    <script type="module" crossorigin src="/assets/index-C4kAShR5.js"></script>
    <link rel="stylesheet" crossorigin href="/assets/index-CSz7ARPP.css">
  </head>
  <body>
    <div id="app"></div>
  </body>
</html>

三、部署Java后台

1.自定义Java容器

(1)把nfs主机的下的pes/java目录传到k8s-master主机

[root@localhost ~]# scp -r pes/java root@192.168.1.110:/root/

(2)查看java目录是否传过来

[root@k8s-master pes-k8s]# ls ~
anaconda-ks.cfg  java                 mysql.tar         nginx.1.25.0.tar  tdr
busybox.tar      k8s-ha-install       new.yaml          nginx.tar         token
centos.tar       kubeadm-config.yaml  nginx.1.20.0.tar  pes-k8s           wordpress.tar
haproxy.tar      mariadb.tar          nginx.1.21.0.tar  pods
[root@k8s-master pes-k8s]# cd ~/java/
[root@k8s-master java]# ls
Dockerfile  jdk  src  start.sh

(3)创建Java镜像

[root@k8s-master java]# systemctl start docker.service 
[root@k8s-master java]# docker build -t java:v0 ./                          //使用Dockerfile创建镜像


[root@k8s-master java]# docker images                  //查看
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
java         v0        5c0a07c9bcfb   2 minutes ago   592MB
wordpress    latest    e6e656a22e5a   2 weeks ago     699MB
haproxy      latest    a782c02b8259   3 weeks ago     103MB
mariadb      latest    09f5b532c2ef   3 weeks ago     414MB
nginx        alpine    c7b4f26a7d93   6 weeks ago     43.2MB
nginx        latest    39286ab8a5e1   6 weeks ago     188MB
mysql        5.7.44    5107333e08a8   9 months ago    501MB
nginx        1.25.0    7d3c40f240e1   15 months ago   143MB
busybox      latest    6fd955f66c23   16 months ago   4.26MB
centos       latest    5d0da3dc9764   3 years ago     231MB
nginx        1.21.0    4f380adfc10f   3 years ago     133MB
nginx        1.20.0    7ab27dbbfbdf   3 years ago     133MB

(4)打包上传到k8s-node节点上

[root@k8s-master java]# docker save -o java.tar java:v0                   //打包
[root@k8s-master java]# scp java.tar root@192.168.1.22:~                   //上传node1节点
java.tar                                                             100%  572MB  25.2MB/s   00:22    
[root@k8s-master java]# scp java.tar root@192.168.1.33:~                   //上传node2节点
java.tar                                                             100%  572MB  22.9MB/s   00:24   

(5)去node1和node2导入镜像

[root@k8s-node1 ~]# ctr -n k8s.io images import java.tar --platform linux/amd64
unpacking docker.io/library/java:v0 (sha256:a3fe9b7e8ff3f56cf95e4d35c0206237c3aeea3ebf10817d99523509c0a59fbc)...done
[root@k8s-node2 ~]# ctr -n k8s.io images import java.tar --platform linux/amd64
unpacking docker.io/library/java:v0 (sha256:a3fe9b7e8ff3f56cf95e4d35c0206237c3aeea3ebf10817d99523509c0a59fbc)...done
[root@k8s-node1 ~]# crictl images|grep java                     //查看
docker.io/library/java                                           v0                  5c0a07c9bcfb3       599MB
[root@k8s-node2 ~]# crictl images|grep java
docker.io/library/java                                           v0                  5c0a07c9bcfb3       599MB

2.创建java-deployment.yaml资源清单文件

[root@k8s-master java]# cd
[root@k8s-master ~]# cd pes-k8s/ 
[root@k8s-master pes-k8s]# vim java-deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name:  java-deployment
  namespace: default
  labels:
    app:  java-deployment
spec:
  selector:
    matchLabels:
      app: java-deployment
  replicas: 3
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app:  java-deployment
    spec:
      # initContainers:
        # Init containers are exactly like regular containers, except:
          # - Init containers always run to completion.
          # - Each init container must complete successfully before the next one starts.
      containers:
      - name:  java
        image:  docker.io/library/java:v0
        imagePullPolicy: Never
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
          limits:
            cpu: 100m
            memory: 300Mi                          #这里得多给点

        ports:
        - containerPort:  8080
          name:  javaport
        volumeMounts:
        - name: localtime
          mountPath: /java/src
      volumes:
        - name: localtime
          nfs:
            server: 192.168.1.44
            path: /root/pes/java/src
      restartPolicy: Always

[root@k8s-master pes-k8s]# kubectl create -f java-deployment.yaml 
deployment.apps/java-deployment created
[root@k8s-master pes-k8s]# kubectl get po -owide
NAME                               READY   STATUS    RESTARTS       AGE    IP               NODE        NOMINATED NODE   READINESS GATES
cluster-test-66bb44bd88-nk46t      1/1     Running   80 (12m ago)   14d    172.16.169.179   k8s-node2   <none>           <none>
java-deployment-7948cbb74b-bgq2s   1/1     Running   0              109s   172.16.169.132   k8s-node2   <none>           <none>
java-deployment-7948cbb74b-bnsr9   1/1     Running   0              109s   172.16.169.137   k8s-node2   <none>           <none>
java-deployment-7948cbb74b-hz7s6   1/1     Running   0              109s   172.16.36.94     k8s-node1   <none>           <none>
web-deployment-7bff5ff45c-45rz6    1/1     Running   0              4h5m   172.16.169.186   k8s-node2   <none>           <none>
web-deployment-7bff5ff45c-nlq2s    1/1     Running   0              4h5m   172.16.36.76     k8s-node1   <none>           <none>
web-deployment-7bff5ff45c-whkd2    1/1     Running   0              4h5m   172.16.169.185   k8s-node2   <none>           <none>

注意:压缩包在解压过程中可能出现问题,比如权限丢失

给相应的权限即可

3.访问测试

[root@k8s-master pes-k8s]# curl 172.16.169.132:8080                    //这样表示成功
{"code":20002,"msg":"账号不存在或密码错误"}[root@k8s-master pes-k8s]# 


四、部署数据库

1.部署mysql-deployment.yaml文件

[root@k8s-master pes-k8s]# vim mysql-deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name:  mysql-deploy
  namespace: default
  labels:
    app:  mysql-deploy
spec:
  selector:
    matchLabels:
      app: mysql-deploy
  replicas: 1
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app:  mysql-deploy
    spec:
      # initContainers:
        # Init containers are exactly like regular containers, except:
          # - Init containers always run to completion.
          # - Each init container must complete successfully before the next one starts.
      containers:
      - name:  mysql-deployment
        image:  docker.io/library/mysql:5.7.44
        imagePullPolicy: Never
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
          limits:
            cpu: 100m
            memory: 200Mi

        ports:
        - containerPort:  3306
          name:  mysql-deploy
        volumeMounts:
        - name: localtime
          mountPath: /var/lib/mysql
      volumes:
        - name: localtime
          nfs:
            server: 192.168.1.44
            path: /root/pes/mysql/data
      restartPolicy: Always
[root@k8s-master pes-k8s]# kubectl create -f mysql-deployment.yaml 
deployment.apps/mysql-deploy created
[root@k8s-master pes-k8s]# kubectl get po               //这里发现mysql没创建成功,这是由于权限不够
NAME                               READY   STATUS             RESTARTS       AGE
cluster-test-66bb44bd88-nk46t      1/1     Running            80 (30m ago)   14d
java-deployment-7948cbb74b-bgq2s   1/1     Running            0              20m
java-deployment-7948cbb74b-bnsr9   1/1     Running            0              20m
java-deployment-7948cbb74b-hz7s6   1/1     Running            0              20m
mysql-deploy-77776fd66f-4fd5r      0/1     CrashLoopBackOff   2 (20s ago)    45s
web-deployment-7bff5ff45c-45rz6    1/1     Running            0              4h23m
web-deployment-7bff5ff45c-nlq2s    1/1     Running            0              4h23m
web-deployment-7bff5ff45c-whkd2    1/1     Running            0              4h23m

2.到nfs主机

[root@localhost ~]# vim /etc/exports
/root/pes    *(rw,sync,no_root_squash)
[root@localhost ~]# systemctl restart nfs.service             //重启

3.回到k8s-master

[root@k8s-master pes-k8s]# kubectl delete -f mysql-deployment.yaml         //先删
deployment.apps "mysql-deploy" deleted
[root@k8s-master pes-k8s]# kubectl create -f mysql-deployment.yaml           //再创
deployment.apps/mysql-deploy created
[root@k8s-master pes-k8s]# kubectl get po 
NAME                               READY   STATUS    RESTARTS       AGE
cluster-test-66bb44bd88-nk46t      1/1     Running   80 (37m ago)   14d
java-deployment-7948cbb74b-bgq2s   1/1     Running   0              26m
java-deployment-7948cbb74b-bnsr9   1/1     Running   0              26m
java-deployment-7948cbb74b-hz7s6   1/1     Running   0              26m
mysql-deploy-77776fd66f-gr9l6      1/1     Running   0              4s
web-deployment-7bff5ff45c-45rz6    1/1     Running   0              4h30m
web-deployment-7bff5ff45c-nlq2s    1/1     Running   0              4h30m
web-deployment-7bff5ff45c-whkd2    1/1     Running   0              4h30m

4.访问测试

[root@k8s-master pes-k8s]# kubectl get po -owide       //查看IP
NAME                               READY   STATUS    RESTARTS       AGE     IP               NODE        NOMINATED NODE   READINESS GATES
cluster-test-66bb44bd88-nk46t      1/1     Running   80 (42m ago)   14d     172.16.169.179   k8s-node2   <none>           <none>
java-deployment-7948cbb74b-bgq2s   1/1     Running   0              32m     172.16.169.132   k8s-node2   <none>           <none>
java-deployment-7948cbb74b-bnsr9   1/1     Running   0              32m     172.16.169.137   k8s-node2   <none>           <none>
java-deployment-7948cbb74b-hz7s6   1/1     Running   0              32m     172.16.36.94     k8s-node1   <none>           <none>
mysql-deploy-77776fd66f-gr9l6      1/1     Running   0              5m32s   172.16.36.85     k8s-node1   <none>           <none>
web-deployment-7bff5ff45c-45rz6    1/1     Running   0              4h35m   172.16.169.186   k8s-node2   <none>           <none>
web-deployment-7bff5ff45c-nlq2s    1/1     Running   0              4h35m   172.16.36.76     k8s-node1   <none>           <none>
web-deployment-7bff5ff45c-whkd2    1/1     Running   0              4h35m   172.16.169.185   k8s-node2   <none>           <none>
[root@k8s-master pes-k8s]# mysql -h 172.16.36.85 -uzhangmin -pzhangmin             //访问,主机必须得有mysql客户端

五、部署对应的service(代理,负载均衡)

[root@k8s-master ~]# kubectl get po --show-labels        //查看标签
NAME                               READY   STATUS    RESTARTS         AGE     LABELS
cluster-test-66bb44bd88-nk46t      1/1     Running   82 (5m54s ago)   14d     app=cluster-test,pod-template-hash=66bb44bd88
java-deployment-7948cbb74b-bgq2s   1/1     Running   1 (5m54s ago)    84m     app=java-deployment,pod-template-hash=7948cbb74b
java-deployment-7948cbb74b-bnsr9   1/1     Running   1 (5m54s ago)    84m     app=java-deployment,pod-template-hash=7948cbb74b
java-deployment-7948cbb74b-hz7s6   1/1     Running   1 (6m7s ago)     84m     app=java-deployment,pod-template-hash=7948cbb74b
mysql-deploy-77776fd66f-gr9l6      1/1     Running   1 (6m7s ago)     58m     app=mysql-deploy,pod-template-hash=77776fd66f
web-deployment-7bff5ff45c-45rz6    1/1     Running   1 (5m54s ago)    5h28m   app=web-deployment,pod-template-hash=7bff5ff45c
web-deployment-7bff5ff45c-nlq2s    1/1     Running   1 (6m7s ago)     5h28m   app=web-deployment,pod-template-hash=7bff5ff45c
web-deployment-7bff5ff45c-whkd2    1/1     Running   1 (5m54s ago)    5h28m   app=web-deployment,pod-template-hash=7bff5ff45c

1.部署web-deployment的service

[root@k8s-master pes-k8s]# vim web-service.yaml 
apiVersion: v1
kind: Service
metadata:
  name: web-service
  namespace: default
spec:
  selector:
    app: web-deployment
  type: NodePort
  sessionAffinity: None
  sessionAffinityConfig:
    clientIP:
      timeoutSeconds: 10800
  ports:
  - name: webport
    protocol: TCP
    port: 80
    targetPort: 80
    nodePort: 32000
[root@k8s-master pes-k8s]# kubectl create -f web-service.yaml
service/web-service created
[root@k8s-master pes-k8s]# kubectl get svc                            //查看svc
NAME          TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
kubernetes    ClusterIP   10.96.0.1    <none>        443/TCP        14d
web-service   NodePort    10.96.3.80   <none>        80:32000/TCP   74s

2.浏览器访问192.168.1.110:32000

3.宿主机做hosts劫持

C:\Windows\System32\drivers\etc


4.部署java-deployment的service

[root@k8s-master pes-k8s]# vim java-service.yaml 
apiVersion: v1
kind: Service
metadata:
  name: javaservice
  namespace: default
spec:
  selector:
    app: java-deployment
  type: NodePort
  sessionAffinity: None
  sessionAffinityConfig:
    clientIP:
      timeoutSeconds: 10800
  ports:
  - name: javaport
    protocol: TCP
    port: 8080
    targetPort:  8080
    nodePort: 32100
[root@k8s-master pes-k8s]# kubectl create -f java-service.yaml 
service/javaservice created
[root@k8s-master pes-k8s]# kubectl get svc                    //查看svc
NAME          TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
javaservice   NodePort    10.96.71.251   <none>        8080:32100/TCP   91s
kubernetes    ClusterIP   10.96.0.1      <none>        443/TCP          14d
web-service   NodePort    10.96.3.80     <none>        80:32000/TCP     13m

5.外部访问测试


这里请求不到,因为请求的是8080端口,而java服务是32100端口,可以使用代理(haproxy,ipvs,nginx等),也可以改变java服务请求的端口,改为32100(不建议)

6.改变请求java服务的端口(nfs主机)

[root@localhost ~]# cd pes/web/dist/assets/
[root@localhost assets]# for fn in $(ls *.js); do echo $fn; cat $fn|grep 8080; done //查找里面哪个文件有8080
[root@localhost assets]# vim index-8SnX15u9.js                 //将8080改为32100


7.访问测试


此时能够在外部访问web应用和java应用,发现500错误,查看java的日志文件,发现链接不到数据库
[root@k8s-master pes-k8s]# kubectl logs java-deployment-7948cbb74b-hz7s6 


8查看java配置文件(nfs主机)

[root@localhost ~]# cat pes/java/src/application.properties

9.部署mysql-deployment的service

[root@k8s-master pes-k8s]# vim mysql-service.yaml 
apiVersion: v1
kind: Service
metadata:
  name: hap                           #这里必须是hap,和java的配置文件保持一致
  namespace: default
spec:
  selector:
    app: mysql-deploy
  type: ClusterIP
  sessionAffinity: None
  sessionAffinityConfig:
    clientIP:
      timeoutSeconds: 10800
  ports:
  - name: mysqlport
    protocol: TCP
    port: 3306
    targetPort: 3306
[root@k8s-master pes-k8s]# kubectl create -f mysql-service.yaml 
service/hap created
[root@k8s-master pes-k8s]# kubectl get svc
NAME          TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
hap           ClusterIP   10.96.171.17   <none>        3306/TCP         76s
javaservice   NodePort    10.96.71.251   <none>        8080:32100/TCP   75m
kubernetes    ClusterIP   10.96.0.1      <none>        443/TCP          14d
web-service   NodePort    10.96.3.80     <none>        80:32000/TCP     87m

六、访问测试

[root@k8s-master pes-k8s]# mysql -h172.16.36.84 -uzhangmin -pzhangmin         //在mysql中获取账号密码
>select * from project_exam_system.user;

浏览器访问

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

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

相关文章

【巅峰算力,静谧之作】4卡4090GPU深度学习“静音”服务器

各位同仁&#xff0c;随着人工智能浪潮的汹涌澎湃&#xff0c;我们正步入一个前所未有的创新纪元。在这个充满挑战与机遇的时代&#xff0c;我愈发频繁地在工作场景中邂逅那些致力于深度学习探索的智者们。他们&#xff0c;对计算力的渴望如同对知识的追求一般&#xff0c;永无…

React表单:formik、final-form和react-hook-form

表单无处不在&#xff0c;它是每个网站的必备部分。在用React构建web应用时&#xff0c;处理表单是不可避免的。 你可以选择自己的方式来处理&#xff0c;或者选择社区中现成的库。然而&#xff0c;当你选择一个第三方库时&#xff0c;你会立即面临一个问题&#xff1a;有太多的…

Spring Boot 学习之路 -- 配置项目

前言 最近因为业务需要&#xff0c;被拉去研究后端的项目&#xff0c;代码框架基于 Spring Boot&#xff0c;对我来说完全小白&#xff0c;需要重新学习研究…出于个人习惯&#xff0c;会以 Blog 文章的方式做一些记录&#xff0c;文章内容基本来源于「 Spring Boot 从入门到精…

SpringMVC5-域对象共享数据

目录 使用ServletAPI向request域对象共享数据 使用ModelAndView向request域对象共享数据 使用Model向request域对象共享数据 使用map向request域对象共享数据 使用ModelMap向request域对象共享数据 Model、ModelMap、Map的关系 向session域共享数据 向application域共享…

SQLite3模块使用详解

目录 一、引言 1.1 SQLite3 简介 1.2 Python sqlite3 模块 二、连接数据库 2.1 导入 sqlite3 模块 2.2 连接数据库 2.3 创建游标对象 三、执行 SQL 语句 3.1 创建表 3.2 插入数据 3.3 查询数据 3.4 更新数据 3.5 删除数据 四、处理查询结果 4.1 fetchall() 4.2…

探探Java与python中的闭包

说在前面&#xff1a;在计算机科学中&#xff0c;闭包是指一个函数以及其引用的周围环境&#xff08;变量&#xff09;所组成的整体。简单来说&#xff0c;闭包允许一个函数访问并操作其外部函数作用域中的变量&#xff0c;即使外部函数已经执行完毕。 Java函数式编程—闭包&am…

C++map与set

文章目录 前言一、map和set基础知识二、set与map使用示例1.set去重操作2.map字典统计 总结 前言 本章主要介绍map和set的基本知识与用法。 一、map和set基础知识 map与set属于STL的一部分&#xff0c;他们底层都是是同红黑树来实现的。 ①set常见用途是去重 &#xff0c;set不…

【Java】包装类【主线学习笔记】

文章目录 前言包装类基本数据类型与包装类之间的转换基本数据类型转换为包装类可以通过以下几种方式&#xff1a;包装类转换为基本数据类型可以通过以下几种方式&#xff1a;初始化值不同与String之间的转换 前言 Java是一门功能强大且广泛应用的编程语言&#xff0c;具有跨平台…

“数字武当”项目荣获2024年“数据要素×”大赛湖北分赛文化旅游赛道一等奖

9月26日&#xff0c;由国家数据局、湖北省人民政府指导的首届湖北省数据要素创新大会暨2024年“数据要素”大赛湖北分赛颁奖仪式在湖北武汉举行。由大势智慧联合武当山文化旅游发展集团有限公司参报的武当山“数字武当”项目&#xff0c;荣获文化旅游赛道一等奖。 据悉&#x…

在系统开发中提升 Excel 数据导出一致性与可维护性的统一规范与最佳实践

背景&#xff1a; 在系统开发过程中&#xff0c;数据导出为 Excel 格式是一个常见的需求。然而&#xff0c;由于各个开发人员的编码习惯和实现方式不同&#xff0c;导致导出代码风格不一。有的人使用第三方库&#xff0c;有的人则自定义实现。这种多样化不仅影响了代码的一致性…

【笔记】X射线物理基础

一、X射线衍射分析简史 1895年X射线发现 1896 年 2 月对骨折的观察&#xff1a;G.和 E. Frost是第一个使用 X 射线进行医疗用途 1897 年法国海关官员的行李扫描。 X射线衍射理论1 X射线衍射理论2 元素的特征X射线 X射线光电子的应用 电磁波的粒子属性 X射线层析成像法 X-ray…

结构设计模式 -装饰器设计模式 - JAVA

装饰器设计模式 一. 介绍二. 代码示例2.1 抽象构件&#xff08;Component&#xff09;角色2.2 具体构件&#xff08;Concrete Component&#xff09;角色2.3 装饰&#xff08;Decorator&#xff09;角色2.4 具体装饰&#xff08;Concrete Decorator&#xff09;角色2.5 测试 结…

蓝桥杯--STM32G431RBT6(TIM定时器的输出频率和占空比,含详细原理介绍和使用方法)

目录 一、前言 二、代码 实现功能&#xff1a;​编辑 按如图配置 定义变量 编写执行代码 显示在LCD上 加入按键效果 三、效果展示 四、代码开源 一、前言 ARR 即自动重装载值&#xff08;Auto Reload Register&#xff09;。相当于一个水杯&#xff0c;水杯容量&am…

SpringCloud-Netflix第一代微服务快速入门

1.springCloud常用组件 Netflix Eureka 当我们的微服务过多的时候&#xff0c;管理服务的通信地址是一个非常麻烦的事情&#xff0c;Eureka就是用来管理微服务的通信地址清单的&#xff0c;有了Eureka之后我们通过服务的名字就能实现服务的调用。 Netflix Ribbon\Feign : 客…

性能测试常见故障和解决思路详解

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、性能问题分析流程 1、查看服务器的CPU、内存 、负载等情况&#xff0c;包括应用服务器和数据库服务器 2、查看数据库健康状态&#xff0c;数据库死锁、连…

【Java】单元测试【主线学习笔记】

文章目录 前言测试分类JUnit单元测试介绍编写单元测试方法的条件IDEA中简易使用JUnit 前言 Java是一门功能强大且广泛应用的编程语言&#xff0c;具有跨平台性和高效的执行速度&#xff0c;广受开发者喜爱。在接下来的学习过程中&#xff0c;我将记录学习过程中的基础语法、框架…

我们是向量数据库的领军企业,我们只招TOP人才

我们是全球领先的向量数据库企业&#xff0c;业务正在快速发展&#xff0c;现开放大量岗位&#xff1a; 前端、产品经理、数据库开发工程师、C、数据库运维、数据库测试…… 我们招聘的唯一目标&#xff0c;寻找 TOP人才&#xff01; 如果你已经有丰富的经验&#xff0c;那么加…

【友元补充】【动态链接补充】

友元 友元的目的是让一个函数或者类&#xff0c;访问另一个类中的私有成员。 有缘的关键字friend是一个修饰符。 友元分为友元类和友元函数 1.全局函数作友元 2.类作友元 3.类的一个成员函数作友元 好处&#xff1a;可以通过友元在类外访问类内的私有和受保护类型的成员 坏处…

CC面试准备

半导体基础 半导体是介于导体和绝缘体之间的一种介质&#xff0c;在不同条件下表现出不同的导电性或者不导电特性&#xff0c; 电子半导体器件材料大部分为硅&#xff0c;锗等元素 本征半导体&#xff1a;完全不含杂质的纯净半导体&#xff0c;因为不含杂质&#xff0c;其中…

使用API有效率地管理Dynadot域名,设置域名服务器(NS)

前言 Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮箱&…