2023年CKA考试真题及注意事项
2023年CKA考试真题及注意事项
- 注意事项
- 考试题目
- 原题解析
- 1.RBAC
- 2.节点维护
- 3.K8S组件升级 1.28.0升级到1.28.1
- 4.Etcd备份与恢复
- 5.NetworkPolicy
- 6.Service
- 7.Ingress
- 8.指定节点部署
- 9.检查Node节点健康状态
- 10.一个Pod多个容器
- 11.监控Pod度量指标
- 12.监控Pod日志
- 13.PersistentVolumeClaim
- 14.Sidecar
- 15.集群故障排查——kubelet故障
注意事项
1.黑色星期五(或Cyber Monday)时购买考试是全年价格最低的时候,推荐预算充足的同学购买CKA+CKS,性价比最高,相关课程不推荐买,video和课件都是纯英语,对英语一般的人不够友好,买后用处不大。
2.规定的是考试购买后1个月内需要兑换考试券(我超过1个月后兑换的虽然也成功了,但不建议卡时间)。
3.考试时间的选择,最好选择凌晨和清晨,比如早上6点左右,亲测网络不会卡顿。本人亲测在凌晨5-7点网络不卡。
4.浏览器和PSI插件按照指南说明准备,考前最好多测试多运行几次,确保系统环境一定没问题,比如我考时windows系统不能用win10企业版,所以需要重装系统或换个电脑。
5.关于网络,不建议在办公室等有公司防火墙的WiFi环境考试,很可能会看不到题目,可以选择在家或酒店,或者自己手机开热点这些方式。
考试题目
原题解析
1.RBAC
中文解释:
创建一个名为deployment-clusterrole的clusterrole,该clusterrole只允许创建Deployment、Daemonset、Statefulset的create操作
在名字为app-team1的namespace下创建一个名为cicd-token的serviceAccount,并且将上一步创建clusterrole的权限绑定到该serviceAccount
参考:
https://kubernetes.io/zh/docs/reference/access-authn-authz/rbac/
https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/configure-service-account/
解题:
# 创建clusterrole
kubectl create clusterrole deployment-clusterrole --verb=create --resource=deployments,statefulsets,daemonsets# 或者
[root@k8s-master01 ~]# cat dp-clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: deployment-clusterrole
rules:
- apiGroups: ["extensions", "apps"]resources: ["deployments","statefulsets","daemonsets"]verbs: ["create"]
[root@k8s-master01 ~]# kubectl create -f dp-clusterrole.yaml
clusterrole.rbac.authorization.k8s.io/deployment-clusterrole created# 创建serviceAccount
kubectl create sa cicd-token -n app-team1
serviceaccount/cicd-token created# 绑定权限(推荐,节省时间)
kubectl create rolebinding deployment-rolebinding --clusterrole=deployment-clusterrole --serviceaccount=app-team1:cicd-token -n app-team1或者
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: deployment-rolebindingnamespace: app-team1
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: deployment-clusterrole
subjects:
- kind: ServiceAccountname: cicd-tokennamespace: app-team1# 验证:
[root@k8smaster /opt/cka]# kubectl auth can-i create deployment --as system:serviceaccount:app-team1:cicd-token -n app-team1
yes
[root@k8smaster /opt/cka]# kubectl auth can-i create daemonset --as system:serviceaccount:app-team1:cicd-token -n app-team1
yes
[root@k8smaster /opt/cka]# kubectl auth can-i create statefulset --as system:serviceaccount:app-team1:cicd-token -n app-team1
yes
[root@k8smaster /opt/cka]# kubectl auth can-i create pod --as system:serviceaccount:app-team1:cicd-token -n app-team1
no
2.节点维护
中文解释:
将ek8s-node-1节点设置为不可用,然后重新调度该节点上的所有Pod
参考:
https://kubernetes.io/zh/docs/tasks/configure-pod-container/
https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#drain
解题:
kubectl config use-context ek8s
kubectl cordon ek8s-node-1
# 测试执行
kubectl drain ek8s-node-1 --delete-emptydir-data --ignore-daemonsets --force --dry-run=server
# 腾空节点
kubectl drain ek8s-node-1 --delete-emptydir-data --ignore-daemonsets --force
3.K8S组件升级 1.28.0升级到1.28.1
参考:
https://kubernetes.io/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/
解题:
首先腾空节点:
# 设置为维护状态
kubectl cordon k8s-master
# 驱逐Pod
kubectl drain k8s-master --delete-emptydir-data --ignore-daemonsets --force
# 之后需要按照题目提示ssh到一个master节点
apt update
apt-cache policy kubeadm | grep 1.28.1
# 注意版本的差异,有可能并非1.20.1升级到1.28.1
apt-get install kubeadm=1.28.1-00
# 验证升级计划
kubeadm upgrade plan
# 看到如下信息,可升级到指定版本# 开始升级Master节点,注意看题需不需要升级etcd
kubeadm upgrade apply v1.28.1 --etcd-upgrade=false -f# 升级kubectl和kubelet
apt-get install -y kubelet=1.28.1-00 kubectl=1.28.1-00
systemctl daemon-reload
systemctl restart kubelet
# 恢复master可调度
kubectl uncordon k8s-master
node/k8s-master uncordonedkubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master01 Ready control-plane,master 11d v1.28.1
k8s-node01 Ready <none> 8d v1.28.0
k8s-node02 Ready <none> 11d v1.28.0
4.Etcd备份与恢复
中文解释:
针对etcd实例https://127.0.0.1:2379创建一个快照,保存到 /srv/data/etcd-snapshot.db。在创建快照的过程中,如果卡住了,就键入ctrl+c终止,然后重试。
然后恢复一个已经存在的快照:/var/lib/backup/etcd-snapshot-previous.db
执行etcdctl命令的证书存放在:
ca证书:/opt/KUIN00601/ca.crt
客户端证书:/opt/KUIN00601/etcd-client.crt
客户端密钥:/opt/KUIN00601/etcd-client.key
参考:
https://kubernetes.io/zh/docs/tasks/administer-cluster/configure-upgrade-etcd/
解题:
kubernetes的所有数据记录在etcd中,对etcd进行备份就是对集群进行备份。连接etcd需要证书,证书可以从apiserver获取,因为apiserver可以去连etcd。新版本的apiserver都是以static pod方式运行,证书通过volume挂载到pod中。
具体的证书路径和备份到的路径按题目要求设置。ssh到master节点很快,长时间没连上,可以中断重连。
恢复部分据说很容易卡住,不要花太多时间。# 路径不存在的话要提前建出来
export ETCDCTL_API=3
etcdctl --endpoints="https://127.0.0.1:2379" --cacert=/opt/KUIN000601/ca.crt --cert=/opt/KUIN000601/etcd-client.crt --key=/opt/KUIN000601/etcd-client.key snapshot save /srv/data/etcd-snapshot.db# 还原
还原前最好关掉etcd服务,还原后重新开启etcd服务,
还原后etcd的状态可能有问题,最好不要去赌,失分可能性很大。
systemctl stop etcdmkdir /opt/backup/ -p
cd /etc/kubernetes/manifests
mv kube-* /opt/backupexport ETCDCTL_API=3
etcdctl --endpoints="https://127.0.0.1:2379" --cacert=/opt/KUIN000601/ca.crt --cert=/opt/KUIN000601/etcd-client.crt --key=/opt/KUIN000601/etcd-client.key snapshot restore /var/lib/backup/etcd-snapshot-previous.db --data-dir=/var/lib/etcd-restorevim /etc/kubernetes/manifests/etcd.yaml
# 将volume配置的path: /var/lib/etcd改成/var/lib/etcd-restorevolumes:- hostPath:path: /etc/kubernetes/pki/etcdtype: DirectoryOrCreatename: etcd-certs- hostPath:path: /var/lib/etcd-restore# 修改数据目录权限
chown -R etcd.etcd /var/lib/etcd-restore# 还原k8s组件
mv /opt/backup/* /etc/kubernetes/manifests
systemctl restart kubeletsystemctl start etcd# 其他答案:
# 不需要进行集群的切换,etcdctl 工具主机上已存在,无需进行安装
ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/opt/KUIN00601/ca.crt --cert=/opt/KUIN00601/etcd-client.crt --key=/opt/KUIN00601/etcd-client.key snapshot save /var/lib/backup/etcd-snapshot.db
ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/opt/KUIN00601/ca.crt --cert=/opt/KUIN00601/etcd-client.crt --key=/opt/KUIN00601/etcd-client.key snapshot restore /var/lib/backup/etcd-snapshot-previous.db
注意:
如果是二进制安装的etcd,考试环境的etcd可能并非root用户启动的,所以可以先切换到root用户(sudo su -)
然后使用ps aux | grep etcd查看启动用户是谁和启动的配置文件是谁config-file字段指定,假设用户是etcd。所以如果是二进制安装的etcd,执行恢复时需要root权限,所以在恢复数据时,可以使用root用户恢复,之后更改恢复目录的权限:sudo chown -R etcd.etcd /var/lib/etcd-restore,
然后通过systemctl status etcd(或者ps aux | grep etcd)找到它的配置文件
(如果没有配置文件,就可以直接在etcd的service 通过systemctl status etcd即可看到文件中找到data-dir的配置),然后更改data-dir配置后,执行systemctl daemon-reload,最后使用etcd用户systemctl restart etcd即可。
5.NetworkPolicy
中文解释:
创建一个名字为allow-port-from-namespace的NetworkPolicy,这个NetworkPolicy允许internal命名空间下的Pod访问该命名空间下的9000端口。
并且不允许不是internal命令空间的下的Pod访问
不允许访问没有监听9000端口的Pod。
参考:
https://kubernetes.io/zh/docs/concepts/services-networking/network-policies/
解题:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-port-from-namespacenamespace: internal
spec:ingress:- from:- podSelector: {}ports:- port: 9000protocol: TCPpodSelector: {}policyTypes:- Ingress
6.Service
中文解释:
重新配置一个已经存在的deployment front-end,在名字为nginx的容器里面添加一个端口配置,名字为http,暴露端口号为80/TCP,然后创建一个service,名字为front-end-svc,暴露该deployment的http端口,并且service的类型为NodePort。
解题:
kubectl edit deploy front-endspec:containers:- name: nginximage: nginx# 需要加这四行ports:- name: httpcontainerPort: 80protocol: TCP# 或者命令行添加service:
kubectl expose deploy front-end --name=front-end-svc --port=80 --target-port=http --type=NodePort# 或者通过文件方式创建service:
apiVersion: v1
kind: Service
metadata:name: front-end-svclabels:app: front-end
spec:type: NodePortselector:app: front-end # label需要匹配,否则访问不到。ports:- name: httpprotocol: TCPport: 80targetPort: 80
7.Ingress
中文解释:
在ing-internal 命名空间下创建一个ingress,名字为pong,代理的service hi,端口为5678,配置路径/hi。
验证:访问curl -kL <INTERNAL_IP>/hi会返回hi。
解题:
# ingressClassName需指定为nginx
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: pongnamespace: ing-internal
spec:ingressClassName: nginxrules:- http:paths:- path: /hipathType: Prefixbackend:service:name: hiport:number: 5678kubectl get ingress -n ing-internal 获取ip后curl验证# 如果考试环境没出ip需要在annotations下加一行
cat ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: pongnamespace: ing-internalannotations:nginx.ingress.kubernetes.ionginx.ingress.kubernetes.io/rewrite-target: /
spec:rules:- http:paths:- path: /hipathType: Prefixbackend:service:name: hiport:number: 5678
ingressclassname如果不指定,则会使用集群默认的指定的ingress。
Deployment扩缩容(4分)
解题:
kubectl config use-context k8s
kubectl scale --replicas=6 deployment loadbalancer
kubectl edit deploy loadbalancer
8.指定节点部署
解题:
vim pod-ns.yaml
apiVersion: v1
kind: Pod
metadata:name: nginx-kusc00401labels:role: nginx-kusc00401
spec:nodeSelector:disk: spinningcontainers:- name: nginximage: nginxkubectl create -f pod-ns.yaml# 省时
kubectl run nginx-kusc00401 --image=nginx --dry-run=client -o yaml > 9.yaml
9.检查Node节点健康状态
解题;
kubectl config use-context k8s
# 记录总数为A
kubectl get node|grep -i ready|wc -l
# 记录总数为B
kubectl describe node|grep Taints|grep NoSchedule|wc -l
# 将A减B的值x导入到/opt/KUSC00402/kusc00402.txt
echo x >> /opt/KUSC00402/kusc00402.txt# 切换到指定集群
kubectl config use-context [NAME]
# Ready 状态的节点数减去 NoSchedule 状态的节点数
kubectl get node |grep -i ready
kubectl describe node |grep -i 'taints'
echo '2' >> /opt/KUSC00402/kusc00402.txt
10.一个Pod多个容器
中文解释:
创建一个Pod,名字为kucc1,这个Pod可能包含1-4容器,该题为四个:nginx+redis+memcached+consul
解题:
apiVersion: v1
kind: Pod
metadata:name: kucc1
spec:containers:- image: nginxname: nginx- image: redisname: redis- image: memchachedname: memcached- image: consulname: consul# 或者用dry-run=client的命令快速生成yaml模板,修改yaml,加入新容器进去
kubectl run kucc1 --image=nginx --dry-run=client -o yaml > 11.yaml
apiVersion: v1
kind: Pod
metadata:labels:run: kucc1name: kucc1
spec:containers:- image: nginxname: nginx- image: redisname: redis- image: memcachedname: memcached- image: consulname: consuldnsPolicy: ClusterFirstrestartPolicy: Always
PersistentVolume(4分)
中文解释:
创建一个pv,名字为app-config,大小为2Gi,访问权限为ReadWriteMany。Volume的类型为hostPath,路径为/srv/app-config
apiVersion: v1
kind: PersistentVolume
metadata:name: app-configlabels:type: local
spec:storageClassName: manual # 需要有这一项吗?题目没有要求,(可以不写)volumeMode: Filesystemcapacity:storage: 2GiaccessModes:- ReadWriteManyhostPath:path: "/srv/app-config"kubectl get pv app-config
11.监控Pod度量指标
中文解释:
找出具有name=cpu-user的Pod,并过滤出使用CPU最高的Pod,然后把它的名字写在已经存在的 /opt/KUTR00401/KUTR00401.txt文件里(注意他没有说指定namespace。所以需要使用-A指定所以namespace)
解题:
kubectl config use-context k8s
kubectl top pod -A -l name=cpu-user
NAMESPACE NAME CPU(cores) MEMORY(bytes)
kube-system coredns-54d67798b7-hl8xc 7m 8Mi
kube-system coredns-54d67798b7-m4m2q 6m 8Mi# 注意这里的pod名字以实际名字为准,按照CPU那一列进行选择一个最大的Pod,另外如果CPU的数值是1 2 3这样的。是大于带m这样的,因为1颗CPU等于1000m
注意要用">>"而不是">"
echo "coredns-54d67798b7-hl8xc" >> /opt/KUTR00401/KUTR00401.txt# 其他解法:
kubectl get pods -A --show-labels
kubectl top pods -A -l name=cpu-user --sort-by="cpu"
echo "[podname]" >> /opt/KUTR00401/KUTR00401.txt
12.监控Pod日志
中文解释:
监控名为foobar的Pod的日志,并过滤出具有unable-access-website信息的行,然后将写入到 /opt/KUTR00101/foobar
解题:
kubectl config use-context k8s
kubectl logs foobar|grep 'unable-access-website' >> /opt/KUTR00101/foobar
13.PersistentVolumeClaim
中文翻译:
创建一个名字为pv-volume的pvc,指定storageClass为csi-hostpath-sc,大小为10Mi
然后创建一个Pod,名字为web-server,镜像为nginx,并且挂载该PVC至/usr/share/nginx/html,挂载的权限为ReadWriteOnce。之后通过 kubectl edit或者 kubectl path将pvc改成70Mi,并且记录修改记录。
解题:
# 创建PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: pv-volume
spec:accessModes:- ReadWriteOncevolumeMode: Filesystemresources:requests:storage: 10MistorageClassName: csi-hostpath-sc# 创建Pod
apiVersion: v1
kind: Pod
metadata:name: web-server
spec:containers:- name: nginximage: nginxvolumeMounts:- mountPath: "/usr/share/nginx/html"name: pv-volume # 名字不是必须和pvc一直,也可以为my-volumevolumes:- name: pv-volume # 名字不是必须和pvc一直,也可以为my-volumepersistentVolumeClaim:claimName: pv-volume# 扩容
# 方式一patch命令:
kubectl patch pvc pv-volume -p '{"spec":{"resources":{"requests":{"storage": "70Mi"}}}}' --record# 方式二edit:
kubectl edit pvc pv-volume
# 记录修改记录,需要加--record参数或--save-config
kubectl edit pvc pv-volume --record
kubectl edit pvc pv-volume --save-config
将两处10Mi都改为70Mi,如果是nfs,会因为不支持动态扩容而失败。
edit完需要稍等一会儿,容量才会变为70Mi
14.Sidecar
添加一个名为busybox且镜像为busybox的sidecar到一个已经存在的名为legacy-app的Pod上,这个sidecar的启动命令为 /bin/sh, -c, ‘tail -n+1 -f /var/log/legacy-app.log’。
并且这个sidecar和原有的镜像挂载一个名为logs的volume,挂载的目录为/var/log/。
解题:
kubectl get pod legacy-app -o yaml > c-sidecar.yaml
apiVersion: v1
kind: Pod
metadata:name: legacy-app
spec:containers:- name: countimage: busyboxargs:- /bin/sh- -c- >i=0;while true;doecho "$(date) INFO $i" >> /var/log/legacy-ap.log;i=$((i+1));sleep 1;done # 在此yaml中添加sidecar和volume
vim c-sidecar.yaml
apiVersion: v1
kind: Pod
metadata:name: legacy-app
spec:containers:- name: countimage: busyboxargs:- /bin/sh- -c- >i=0;while true;doecho "$(date) INFO $i" >> /var/log/legacy-ap.log;i=$((i+1));sleep 1;done # 加上下面部分volumeMounts:- name: logsmountPath: /var/log- name: busyboximage: busyboxargs: [/bin/sh, -c, 'tail -n+1 -f /var/log/legacy-ap.log']volumeMounts:- name: logsmountPath: /var/logvolumes:- name: logsemptyDir: {}kubectl delete -f c-sidecar.yaml
kubectl create -f c-sidecar.yaml# 检查
[root@k8smaster /opt/cka]# kubectl logs legacy-app -c busybox
15.集群故障排查——kubelet故障
中文解释:
一个名为wk8s-node-0的节点状态为NotReady,让其他恢复至正常状态,并确认所有的更改开机自动完成
解题:
# 检查wk8s-node-0 kubelet服务状态
ssh wk8s-node-0
sudo su -
systemctl status kubelet
systemctl start kubelet
systemctl enable kubelet其实这题没这么简单,一般启动kubelet后大概率是启动失败的
可能的原因:
1.kubelet二进制文件路径不对,which kubelet后和服务启动文件kubelet systemd service做个对比,看是否是这个原因
2.service文件路径和它启动的路径不一致,在启动目录下找不到service文件,可以全局搜下并做个软链接。
3.其他原因。# 再次检查wk8s-node-0是否在ready
ssh master01
kubectl get nodes
相关文章:

2023年CKA考试真题及注意事项
2023年CKA考试真题及注意事项 注意事项考试题目原题解析1.RBAC2.节点维护3.K8S组件升级 1.28.0升级到1.28.14.Etcd备份与恢复5.NetworkPolicy6.Service7.Ingress8.指定节点部署9.检查Node节点健康状态10.一个Pod多个容器11.监控Pod度量指标12.监控Pod日志13.PersistentVolumeCl…...
云计算运维面试
一、Linux的启动过程 1.加电 2.加载bios设置 3.加载grub 4. 加载内核系统到内存中 5.加载配置文件 6.加载内核模块 7.完成相应初始化工作和启动相应服务 8.启动系统进程 9.出现登录界面 10.开机自启动完成 二、查看系统的版本和内核 1、 查看版本 cat /etc/redha…...

Qt实现TCP调试助手 - 简述如何在Qt中实现TCP多并发
简介 软件开发中,可能经常会用到TCP调试工具。本人使用QT开发了一款TCP调试工具,方便大家使用。本文章主要介绍下,该工具的功能,以及如何在Qt中实现TCP服务器的并发。 界面展示 安装界面 桌面图标。安装后会生成桌面图标&#…...
【Python OpenCV】OpenCV介绍
文章目录 前言一、OpenCV简介二、基本功能三、实际应用场景四、Python安装OpenCV总结 前言 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和图像处理库,它提供了丰富的工具和函数,用于处理图像和视频。由于…...

11-09 周四 CNN 卷积神经网络基础知识
11-09 周四 CNN 卷积神经网络 时间版本修改人描述2023年11月9日09:38:12V0.1宋全恒新建文档 简介 学习一下CNN,卷积神经网络。使用的视频课程。视觉相关的任务: 人脸识别 卷积网络与传统网络的区别: <img altimage-20231109094400591 s…...

Vue.js中的路由(router)和Vue Router的作用?
聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…...

从开源项目聊鱼眼相机的“360全景拼接”
目录 概述 从360全景的背景讲起 跨过参数标定聊透视变化 拼接图片后处理 参考文献 概述 写这篇文章的原因完全源于开源项目(GitHub参阅参考文献1)。该项目涵盖了环视系统的较为全貌的制作过程,包含完整的标定、投影、拼接和实时运行流程。该篇文章主要是梳理全…...

网络安全——
文章目录 网络安全TCP/IP与网络安全网络安全构成要素加密技术基础 网络安全 TCP/IP与网络安全 起初,TCP/IP只用于一个相对封闭的环境,之后才发展为并无太多限制、可以从远程访问更多资源的形式。因此,“安全”这个概念并没有引起人们太多的…...

用excel 整理工作流程,以周为时间节点,自动统计进度
无论是处理自己还是团队的工作,我们都经常会遇到复杂的,凌乱的,需要多个环节才能完成的工作。 梳理工作流程 因为环节内容,每个环节处理不当都可能会导致我们整个工作目标实现受到影响,所以通过工作流程图,…...

Wireshark学习 与 TCP/IP协议分析
Wireshark简介和工具应用 如何开始抓包? 打开wireshark,显示如下网络连接。选择你正在使用的,(比如我正在使用无线网上网),双击 可以先看下自己的ip地址和网关ip地址(看抓包数据时候会用到&…...

Sequence(矩阵连乘+数论)
求Fn mod 1e97 Input 第一行是一个t代表有t组数据 接下来有t行每行有6个整数A,B,C,D,P,n 1<t<10 0<A,B,C,D<1e9 1<p,n<1e9 Output 输出一个答案Fn对1e97取余 Sample Input 2 1 1 1 1 1 5 1 1 1 1 10 4 Sample Output 9 10 思路: p/n上…...
集合工具类的常用方法--小总和
前言 集合工具类是Java中的一个重要工具类,在Java常用的集合框架中起到了重要的作用。集合工具类提供了一系列的方法,可以方便地处理Java中的集合对象,提高了开发的效率。 Collections类 Collections.sort(List<T> list) 对List集合进…...
一文了解游戏行业(数据分析)
一.概况 1.基本术语 游戏行业基础术语——持续更新ing... 2.产业链 包括游戏开发,发行和销售等环节 ①游戏开发 上游环节是游戏产业链的核心环节,包括游戏策划,美术设计,程序开发等,是决定游戏质量与内容的关键因…...
Flutter之Json序列化
前言 使用 json_annotation 框架实现json字符串序列化和反序列化 框架官方地址:json_serializable 一、引入依赖:在pubspec.yaml中添加 dependencies:json_annotation: ^4.8.1dev_dependencies:build_runner: ^2.3.3json_serializable: ^6.6.0 二、…...
Java基础——局部变量和常量
变量:内存中的一个存储区域(该区域的数据可以在同一类型范围内不断变化)。 常量:一旦声明就不可变,通常用 final 修饰的变量称为常量。 声明格式: [final] 变量类型 变量名;说明: final修饰…...

番外 1 : Java 环境下的 selenium 搭建
Java 环境下的 selenium 搭建 一 . 下载谷歌浏览器二 . 下载谷歌浏览器驱动2.1 查看谷歌浏览器版本2.2 下载对应版本的谷歌驱动2.3 解压下载好的驱动压缩包 , 将下载好的 chromedriver.exe 放到java 系统环境变量下 三 . 下载 Edge 浏览器的驱动3.1 查看 Edge 浏览器的版本3.2 …...

游戏缺失d3dx9_39.dll的5个修复方法,深度解析d3dx9_39.dll文件的作用
在当今的数字化时代,电子游戏已经成为了人们休闲娱乐的重要方式之一。然而,对于许多玩家来说,他们在享受游戏带来的乐趣的同时,也可能会遇到各种各样的问题,其中最常见的就是游戏无法正常运行。而这些问题中࿰…...
RHCSA --- Linux用户/组权限
用户管理 useradd 创建用户 -u(UID) 指定UID -g(GID) 指定基本组 -G(GID1,GID2,...) 指定附加组 -c “注释信息” 指定用户注释信息(昵称) -d /path…...

怎么做到高性能网络IO?
为什么要做高性能网络IO。主要是解决c10,c10M问题 最开始的时候我们走的内核协议栈,走内核协议栈其实性能比较低,因为我们之前介绍的时候需要拷贝两次 但是我们采用用户态协议栈可以少拷贝一次,可以大大提高效率, 步骤…...
设计模式-创建型
文章目录 设计模式-创建型工厂模式简单工厂工厂方法抽象工厂 建造者模式单例模式原型模式 设计模式-创建型 本章主要介绍有关对象创建的几种设计模式。 工厂模式 工厂模式:封装了对象的创建,使得获得对象更加符合实际逻辑 简单工厂 将所有对象的生产…...

国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...
如何配置一个sql server使得其它用户可以通过excel odbc获取数据
要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据,你需要完成以下配置步骤: ✅ 一、在 SQL Server 端配置(服务器设置) 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到:SQL Server 网络配…...

【版本控制】GitHub Desktop 入门教程与开源协作全流程解析
目录 0 引言1 GitHub Desktop 入门教程1.1 安装与基础配置1.2 核心功能使用指南仓库管理日常开发流程分支管理 2 GitHub 开源协作流程详解2.1 Fork & Pull Request 模型2.2 完整协作流程步骤步骤 1: Fork(创建个人副本)步骤 2: Clone(克隆…...
FTXUI::Dom 模块
DOM 模块定义了分层的 FTXUI::Element 树,可用于构建复杂的终端界面,支持响应终端尺寸变化。 namespace ftxui {...// 定义文档 定义布局盒子 Element document vbox({// 设置文本 设置加粗 设置文本颜色text("The window") | bold | color(…...

C++中vector类型的介绍和使用
文章目录 一、vector 类型的简介1.1 基本介绍1.2 常见用法示例1.3 常见成员函数简表 二、vector 数据的插入2.1 push_back() —— 在尾部插入一个元素2.2 emplace_back() —— 在尾部“就地”构造对象2.3 insert() —— 在任意位置插入一个或多个元素2.4 emplace() —— 在任意…...

第2课 SiC MOSFET与 Si IGBT 静态特性对比
2.1 输出特性对比 2.2 转移特性对比 2.1 输出特性对比 器件的输出特性描述了当温度和栅源电压(栅射电压)为某一具体数值时,漏极电流(集电极电流...