SprongBoot及其基礎應用全套部署腳本和配置

POM.xml配置
</dependencies>    <!--skywalking日志監控依賴--><dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-logback-1.x</artifactId><version>8.5.0</version></dependency><dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-trace</artifactId><version>8.5.0</version></dependency>
</dependencies><build><plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.0.0</version><configuration><!--生成的鏡像名稱,需要替換的地方--><imageName>creatar</imageName><!--覆蓋舊鏡像--><forceTags>true</forceTags><!--指定dockerfile文件所在目錄,跟pom平級--><dockerDirectory>${basedir}</dockerDirectory><buildArgs><!--指定需要復制的jar的名稱,在dockerfile中會根據這個參數來將jar復制到容器中--><JAR_FILE>${project.build.finalName}.jar</JAR_FILE></buildArgs></configuration></plugin></plugins>
</build>
logback日志配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration><springProperty scope="context" name="log.path" source="logging.file.path"/><!-- 日志輸出格式 --><property name="log.pattern"value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{50} - [methodName:%method,line:%line] - %msg%n"/><!-- 控制臺輸出 --><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>${log.pattern}</pattern></encoder></appender><!-- 系統日志輸出 --><appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 循環政策:基于時間創建日志文件 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 日志文件名格式 --><fileNamePattern>${log.path}/%d{yyyy-MM-dd}/%d{HH}/sys-info.log</fileNamePattern><!-- 日志最大的歷史 60天 --><maxHistory>60</maxHistory></rollingPolicy><encoder><pattern>${log.pattern}</pattern></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 過濾的級別 只會打印info不會有info日志--><level>INFO</level><!-- 匹配時的操作:接收(記錄) --><onMatch>ACCEPT</onMatch><!-- 不匹配時的操作:拒絕(不記錄) --><onMismatch>DENY</onMismatch></filter></appender><appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 循環政策:基于時間創建日志文件 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 日志文件名格式 --><fileNamePattern>${log.path}/%d{yyyy-MM-dd}/%d{HH}/sys-error.log</fileNamePattern><!-- 日志最大的歷史 60天 --><maxHistory>60</maxHistory></rollingPolicy><encoder><pattern>${log.pattern}</pattern></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 過濾的級別 --><level>ERROR</level><!-- 匹配時的操作:接收(記錄) --><onMatch>ACCEPT</onMatch><!-- 不匹配時的操作:拒絕(不記錄) --><onMismatch>DENY</onMismatch></filter></appender><!--發送日志skywalking--><appender name="SKYWALKING" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender"><!-- 日志輸出編碼 --><encoder><pattern>${log.pattern}</pattern></encoder></appender><!-- 系統模塊日志級別控制  --><logger name="com.example" level="info"/><!-- Spring日志級別控制  --><logger name="org.springframework" level="warn"/><root level="info"><appender-ref ref="console"/><appender-ref ref="SKYWALKING"/></root><!--系統操作日志--><root level="info"><appender-ref ref="file_info"/><appender-ref ref="file_error"/><appender-ref ref="SKYWALKING"/></root></configuration>
Dockerfile

Dockerfile文件跟pom文件平級

FROM eclipse-temurin:21
RUN mkdir /opt/app
ARG JAR_FILE
#看情況,自己要改復制到鏡像中的名稱也行,但是注意在ENTRYPOINT處啟動的jar名稱也要換
ADD target/${JAR_FILE} /opt/app/creatar.jar
#跟項目src文件平級的文件夾,后續會有截圖
ADD base-app/skywalking/apache-skywalking-java-agent-9.1.0.tgz /opt/app/
#配置日志監控平臺,跟后續的docker-compose呼應
ENV SW_AGENT_NAME=creatar
ENV SW_AGENT_COLLECTOR_BACKEND_SERVICES=creatar-skywalking-oap:11800
ENTRYPOINT ["java","-javaagent:/opt/app/skywalking-agent/skywalking-agent.jar","-jar","-Xms512m","-Xmx512m","/opt/app/creatar.jar"]
docker-compose
version: "1.0.0"
#創建Docker網絡,用于容器間通信,通過容器名稱訪問
networks:
#容器名稱,默認就是使用bridge模式,如果替換了名稱,那本文件中后續所有關于networks節點的配置都要換名稱creatar-networks:
services:
#應用鏡像,鏡像名稱,在pom的imageName節點配置的是什么這里就寫什么creatar:image: creatar:latest#應用容器名稱,可換可不換container_name: creatar#限制容器內存大小deploy:resources:limits:memory: 1024MBnetworks:- creatar-networks#配置日志監控環境變量,用于初次運行時environment:- "SW_AGENT_NAME=creatar"- "SW_AGENT_COLLECTOR_BACKEND_SERVICES=creatar-skywalking-oap:11800"ports:- "9436:9436"restart: always#啟動應用之前先啟動redis、mysql、esdepends_on:- "creatar-redis"- "creatar-mysql"- "creatar-elasticsearch"volumes:- ./base-app/creatar/logs:/opt/app/logs#Redis容器creatar-redis:image: redis:7.2.4container_name: creatar-rediscap_add:- ALLcommand: redis-server  /etc/redis/redis.confnetworks:- creatar-networksports:- 9437:6379restart: alwaysvolumes:- ./base-app/redis/data:/data:rw- ./base-app/redis/conf/redis.conf:/etc/redis/redis.conf:rw- ./base-app/redis/logs:/logs:rw#mysql容器creatar-mysql:image: mysql:8.2.0container_name: creatar-mysqlcap_add:- ALLcommand:- "--default-authentication-plugin=caching_sha2_password"environment:#配置mysql的root用戶密碼- "MYSQL_ROOT_PASSWORD=creatar_mysql@yyds"#創建數據庫- "MYSQL_DATABASE=creatar"#創建用戶,該用戶對MYSQL_DATABASE創建的數據庫擁有所有權限- "MYSQL_USER=creatar"#新用戶的密碼- "MYSQL_PASSWORD=creatar9436"- "TZ=Asia/Shanghai"networks:- creatar-networksports:- 9438:3306restart: alwaysvolumes:- ./base-app/mysql/data/:/var/lib/mysql:rw- ./base-app/mysql/log:/var/log/mysql:rw#ES容器creatar-elasticsearch:image: elasticsearch:7.17.16container_name: creatar-elasticSearchdeploy:resources:limits:memory: 3072MBcap_add:- ALLenvironment:- discovery.type=single-node#設置Es訪問密碼,用戶名默認就是:elastic- ELASTIC_PASSWORD=creatar9436- xpack.security.enabled=true- ES_JAVA_OPTS=-Xlog:disable -Xlog:gc=debug:stderr -Xms2048m -Xmx3072m- PATH=/usr/share/elasticsearch/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin- ELASTIC_CONTAINER=truenetworks:- creatar-networksports:- 9439:9200- 9440:9300restart: alwaysulimits:memlock:hard: -1soft: -1nofile:hard: 65536soft: 65536volumes:- ./base-app/elasticSearch/data/data:/usr/share/elasticsearch/data:rw- ./base-app/elasticSearch/data/backup:/usr/share/elasticsearch/backup:rw- ./base-app/elasticSearch/data/conf/jvm.options:/usr/share/elasticsearch/config/jvm.options:rw#創建日志監控收集工具,oapcreatar-skywalking-oap:image: apache/skywalking-oap-server:9.0.0container_name: creatar-skywalking-oapcap_add:- ALLenvironment:#使用Es存儲日志- "SW_STORAGE=elasticsearch"#ES地址,由于是同一網絡所以就使用容器名稱即可- "SW_STORAGE_ES_CLUSTER_NODES=creatar-elasticsearch:9200"#ES地址- "SW_ES_USER=elastic"#ES密碼,就是在ES容器配置項目中設置的密碼- "SW_ES_PASSWORD=creatar9436"- "TZ=Asia/Shanghai"networks:- creatar-networksports:#端口暴露,skywalking需要暴露11800和12800- 9441:11800- 9442:12800restart: always#依賴于ES,需要等ES啟動之后在啟動depends_on:- "creatar-elasticsearch"
#日志監控界面容器creatar-skywalking-ui:image: apache/skywalking-ui:9.0.0container_name: creatar-skywalking-uicap_add:- ALLenvironment:#skywalking-oap服務地址,使用容器名訪問- "SW_OAP_ADDRESS=http://creatar-skywalking-oap:12800"- "TZ=Asia/Shanghai"networks:- creatar-networksports:#UI界面需要暴露8080端口- 9443:8080restart: alwaysdepends_on:#依賴于Skywalking-oap服務- "creatar-skywalking-oap"
初次部署運行腳本
echo "開始構建應用鏡像----------------"
#刪除舊鏡像
docker rmi $(docker images | grep creatar | awk '{print $3}')
#打包并使用dockerfile構建應用鏡像
mvn clean package
mvn docker:build#后續會有該目錄的講解
chmod -R 777 ./base-appecho "開始構建基礎應用---------------"
docker-compose up -d
#賦予權限
chmod 777 deploy.sh
#執行腳本
sh deploy.sh
卸載腳本

會將應用的Docker鏡像刪除,以及本次部署所用到的,應用容器,基礎設施容器全部刪除

#停止creatar容器
docker stop $(docker ps -a | grep creatar | awk '{print $1}')
#停止mysql容器
docker stop $(docker ps -a | grep creatar-mysql | awk '{print $1}')
#停止Redis容器
docker stop $(docker ps -a | grep creatar-redis | awk '{print $1}')
#停止skywalking-ui容器
docker stop $(docker ps -a | grep creatar-skywalking-ui | awk '{print $1}')
#停止skywalking-oap容器
docker stop $(docker ps -a | grep creatar-skywalking-oap | awk '{print $1}')
#停止ES容器
docker stop $(docker ps -a | grep creatar-elasticSearch | awk '{print $1}')#刪除creatar容器
docker rm $(docker ps -a | grep creatar | awk '{print $1}')
#刪除creatar鏡像
docker rmi $(docker images | grep creatar | awk '{print $3}')
#刪除mysql容器
docker rm $(docker ps -a | grep creatar-mysql | awk '{print $1}')
#刪除redis容器
docker rm $(docker ps -a | grep creatar-redis | awk '{print $1}')
#刪除skywalking-ui容器
docker rm $(docker ps -a | grep creatar-skywalking-ui | awk '{print $1}')
#刪除skywalking-oap容器
docker rm $(docker ps -a | grep creatar-skywalking-oap | awk '{print $1}')
#刪除es容器
docker rm $(docker ps -a | grep creatar-elasticSearch | awk '{print $1}')
#刪除Docker網絡
docker network rm creatar_creatar-networks#刪除creatar應用數據
rm -rf ./base-app/creatar/logs/*#清空mysql數據
rm -rf ./base-app/mysql/data/*
rm -rf ./base-app/mysql/log/*#刪除Redis數據
rm -rf ./base-app/redis/data/*
rm -rf ./base-app/redis/conf/redis.conf
#賦予權限
chmod 777 undeploy.sh
#執行腳本
sh undeploy.sh
應用更新

當jar報需要更新時使用

#拉取最新代碼
git pull origin main
#停止容器
docker stop $(docker ps -a | grep creatar | awk '{print $1}')
#刪除容器
docker rm $(docker ps -a | grep creatar | awk '{print $1}')
#刪除舊鏡像
docker rmi $(docker images | grep creatar | awk '{print $3}')
#構建鏡像
mvn clean package
mvn docker:build
docker run -dit --restart=always -p 9436:9436 -m 512m --name creatar --network=creatar_creatar-networks $(docker images | grep creatar | awk '{print $3}') /bin/bash
chmod 777 build.sh
sh build.sh
base-app目錄詳解

該目錄是和項目中的src文件夾平級的,當本項目所用到的所有容器啟動之后,他們的數據卷都是掛載在這個目錄的,里面包含了一些容器啟動時的配置文件,以及第三方的一些包(例如Skywalking的插件tar包)

image-20240707181045340

在項目中按照這個結構創建即可,其中的**.gitkeep**文件只是為了占位而已,避免文件夾是空的提交不到Git上.

jvm.options

該文件是es啟動時需要的,如果沒有會報錯,這個文件是本人在不使用數據卷掛載時啟動ES之后復制出來的官方配置

################################################################
##
## JVM configuration
##
################################################################
##
## WARNING: DO NOT EDIT THIS FILE. If you want to override the
## JVM options in this file, or set any additional options, you
## should create one or more files in the jvm.options.d
## directory containing your adjustments.
##
## See https://www.elastic.co/guide/en/elasticsearch/reference/7.17/jvm-options.html
## for more information.
##
################################################################################################################################
## IMPORTANT: JVM heap size
################################################################
##
## The heap size is automatically configured by Elasticsearch
## based on the available memory in your system and the roles
## each node is configured to fulfill. If specifying heap is
## required, it should be done through a file in jvm.options.d,
## and the min and max should be set to the same value. For
## example, to set the heap to 4 GB, create a new file in the
## jvm.options.d directory containing these lines:
##
## -Xms4g
## -Xmx4g
##
## See https://www.elastic.co/guide/en/elasticsearch/reference/7.17/heap-size.html
## for more information
##
################################################################################################################################
## Expert settings
################################################################
##
## All settings below here are considered expert settings. Do
## not adjust them unless you understand what you are doing. Do
## not edit them in this file; instead, create a new file in the
## jvm.options.d directory containing your adjustments.
##
################################################################## GC configuration
8-13:-XX:+UseConcMarkSweepGC
8-13:-XX:CMSInitiatingOccupancyFraction=75
8-13:-XX:+UseCMSInitiatingOccupancyOnly## G1GC Configuration
# NOTE: G1 GC is only supported on JDK version 10 or later
# to use G1GC, uncomment the next two lines and update the version on the
# following three lines to your version of the JDK
# 10-13:-XX:-UseConcMarkSweepGC
# 10-13:-XX:-UseCMSInitiatingOccupancyOnly
14-:-XX:+UseG1GC## JVM temporary directory
-Djava.io.tmpdir=${ES_TMPDIR}## heap dumps# generate a heap dump when an allocation from the Java heap fails; heap dumps
# are created in the working directory of the JVM unless an alternative path is
# specified
-XX:+HeapDumpOnOutOfMemoryError# exit right after heap dump on out of memory error. Recommended to also use
# on java 8 for supported versions (8u92+).
9-:-XX:+ExitOnOutOfMemoryError# specify an alternative path for heap dumps; ensure the directory exists and
# has sufficient space
-XX:HeapDumpPath=data# specify an alternative path for JVM fatal error logs
-XX:ErrorFile=logs/hs_err_pid%p.log## JDK 8 GC logging
8:-XX:+PrintGCDetails
8:-XX:+PrintGCDateStamps
8:-XX:+PrintTenuringDistribution
8:-XX:+PrintGCApplicationStoppedTime
8:-Xloggc:logs/gc.log
8:-XX:+UseGCLogFileRotation
8:-XX:NumberOfGCLogFiles=32
8:-XX:GCLogFileSize=64m# JDK 9+ GC logging
9-:-Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,pid,tags:filecount=32,filesize=64m

redis.conf

Redis容器的配置文件,其中也是配置了一些我個人的東西,例如連接密碼呀等等,可以自己復制一份官方的配置文件進行修改即可,篇幅過長這里不做粘貼了

項目整體結構

image-20240707182235775

配置文件中的連接信息
  datasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driver#mysql地址,注意,這里因為應用和mysql容器是在一個網絡內的,所以可以直接使用mysql的容器名稱訪問,并且端口號使用的是容器內部的端口號并不是暴露出來的端口號url: jdbc:mysql://creatar-mysql:3306/creatar?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true&allowPublicKeyRetrieval=trueusername: creatarpassword: creatar9436data:redis:#同理也是使用的容器名稱,我這里是由于使用了SpringBoot3.3.0版本是這么配置的,具體的各位可以參考自己的配置url: redis://creatar9436@creatar-redis:6379lettuce:pool:max-wait: 3000ms
#這里由于項目中使用了Easy-es依賴操作ES,所以我這里是這么配置的
easy-es:enable:address: creatar-elasticsearch:9200username: elasticpassword: creatar9436logging:
#指定日志配置文件config: classpath:logback-spring.xmllevel:web: errorsql: debugcom:baomidou:mybatisplus: debugfile:path: ./logs/
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpldefault-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/41424.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/41424.shtml
英文地址,請注明出處:http://en.pswp.cn/web/41424.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

修改編譯依賴openssl的libcrypto.so

由于centos7默認使用openssl1.0.2k的libcrypto.so.10共享庫。即使openssl升級為3.0.11后&#xff0c;編譯使用ldd命令查看共享庫依舊會引用libcrypto.so.10。 現希望引用libcrypto.so.3&#xff0c;需要在生成動態鏈接庫的CMakeLists.txt中增加如下配置&#xff0c;明確指定ope…

《警世賢文》摘抄:守法篇、惜時篇、修性篇、修身篇、待人篇、防人篇(建議多讀書、多看報、少吃零食多睡覺)

若該文為原創文章&#xff0c;轉載請注明原文出處 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/140243440 長沙紅胖子Qt&#xff08;長沙創微智科&#xff09;博文大全&#xff1a;開發技術集合&#xff08;包含Qt實用技術、樹莓派、三維、OpenCV…

mysql 連接出現 Public Key Retrieval is not allowed

在MySQL連接中出現“Public Key Retrieval is not allowed”錯誤&#xff0c;通常是因為在使用安全套接字層&#xff08;SSL&#xff09;連接時遇到了問題。這是因為MySQL 8.0及以上版本對安全性要求更高&#xff0c;特別是在使用密碼插件如caching_sha2_password時&#xff0c…

【周末閑談】AI“搶飯碗”?絕對不是危言聳聽

AI是在幫助開發者還是取代他們? 在軟件開發領域,生成式人工智能(AIGC)正在改變開發者的工作方式。無論是代碼生成、錯誤檢測還是自動化測試,AI工具正在成為開發者的得力助手。然而,這也引發了對開發者職業前景和技能需求變化的討論。AI究竟是在幫助開發者還是取代他們?…

2024組裝一臺能跑AI大模型的電腦

title: 2024組裝一臺能跑AI大模型的電腦 tags: [組裝電腦, AI大模型] categories: [其他, 電腦, windows] 這里不寫組裝步驟&#xff0c;哪里接線&#xff0c;購買什么品牌網上一大堆。 這里只寫如何根據你自己的需求&#xff0c;選擇合適的、兼容的配件。 概述 需求&#xff…

本地多卡(3090)部署通義千問Qwen2-72B大模型提速實踐:從龜速到夠用

最近在做文本風格轉化&#xff0c;涉及千萬token級別的文本。想用大模型轉寫&#xff0c;在線的模型一來涉及數據隱私&#xff0c;二來又不想先墊錢再找報銷。本地的7-9B小模型又感覺效果有限&#xff0c;正好實驗室給俺配了4卡3090的機子&#xff0c;反正也就是做個推理&#…

運維系列.Nginx配置中的高級指令和流程控制

運維專題 Nginx配置中的高級指令和流程控制 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/…

ssrf結合redis未授權getshell

目錄 漏洞介紹 SSRF Redis未授權 利用原理 環境搭建 利用過程 rockylinux cron計劃任務反彈shell 寫公鑰免密登錄 ubuntu 寫公鑰免密登錄 漏洞介紹 SSRF SSRF&#xff08;server side request forgrey&#xff09;服務端請求偽造&#xff0c;因后端未過濾用戶輸入&…

桂花網藍牙網關X1000:引領物聯網新時代的智能連接

在物聯網技術飛速發展的今天&#xff0c;藍牙網關作為連接藍牙設備與互聯網的關鍵設備&#xff0c;其性能與穩定性直接影響到物聯網系統的整體運行效果。桂花網藍牙網關X1000憑借其卓越的性能和廣泛的應用場景&#xff0c;成為了物聯網領域的佼佼者。 一、產品概述 桂花網藍牙…

【修仙小伙伴】第1章 天眼計劃

自古以來&#xff0c;人類對于地外文明的探索&#xff0c;就不曾停止過。 而在古代文獻《拾遺記》之中&#xff0c;就有「秦始皇」和所謂「宛渠之民」的對話記載&#xff1a; 始皇好神仙之事&#xff0c;有宛渠之民&#xff0c;乘螺舟而至。 舟形似螺&#xff0c;沉行海底&a…

服務端事件推送——HTTP協議的事件流(EventStream)

背景 最近由于工作要求需要使用Springboot搭建一個流式響應服務&#xff0c;即客戶端發送一次請求&#xff0c;服務端需要多次響應才能返回完整的數據。使用場景就是與chatGPT對話&#xff0c;你問一個問題&#xff0c;頁面會逐字將結果打印出來。 下面我在SpringBoot中可以簡…

使用Ckman部署ClickHouse集群介紹

使用Ckman部署ClickHouse集群介紹 1. Ckman簡介 ClickHouse Manager是一個為ClickHouse數據庫量身定制的管理工具&#xff0c;它是由擎創科技數據庫團隊主導研發的一款用來管理和監控ClickHouse集群的可視化運維工具。目前該工具已在github上開源&#xff0c;開源地址為&…

Leetcode 3213. Construct String with Minimum Cost

Leetcode 3213. Construct String with Minimum Cost 1. 解題思路2. 代碼實現 題目鏈接&#xff1a;3213. Construct String with Minimum Cost 1. 解題思路 這一題的話思路上還是比較直接的&#xff0c;就是一個trie樹加一個動態規劃&#xff0c;通過trie樹來快速尋找每一個…

k8s-第七節-ConfigMap Secret

ConfigMap & Secret ConfigMap 數據庫連接地址&#xff0c;這種可能根據部署環境變化的或者其他容器配置選項的包括容器更新或者擴容時可以統一配置 Kubernetes 為我們提供了 ConfigMap&#xff0c;可以方便的配置一些變量。 https://kubernetes.io/zh/docs/concepts/c…

Angluar 實現pdf頁面預覽以及編輯

之前用過一個pdf預覽的lib&#xff0c;并且還支持在線編輯&#xff0c;和直接下載編輯之后的pdf和直接打印&#xff0c;還不錯&#xff0c;記錄下 PdfShowcase 首先安裝依賴 npm install ngx-extended-pdf-viewer 然后引入 import { NgxExtendedPdfViewerModule } from &q…

硅紀元視角 | 中國電信“星辰大模型·軟件工廠”,兩分鐘完成應用開發,效率飛躍!

在數字化浪潮的推動下&#xff0c;人工智能&#xff08;AI&#xff09;正成為塑造未來的關鍵力量。硅紀元視角欄目緊跟AI科技的最新發展&#xff0c;捕捉行業動態&#xff1b;提供深入的新聞解讀&#xff0c;助您洞悉技術背后的邏輯&#xff1b;匯聚行業專家的見解&#xff0c;…

【數據結構】鏈表帶環問題分析及順序表鏈表對比分析

【C語言】鏈表帶環問題分析及順序表鏈表對比分析 &#x1f525;個人主頁&#xff1a;大白的編程日記 &#x1f525;專欄&#xff1a;C語言學習之路 文章目錄 【C語言】鏈表帶環問題分析及順序表鏈表對比分析前言一.順序表和鏈表對比1.1順序表和鏈表的區別1.2緩存利用率&#…

Leetcode 3211. Generate Binary Strings Without Adjacent Zeros

Leetcode 3211. Generate Binary Strings Without Adjacent Zeros 1. 解題思路2. 代碼實現 題目鏈接&#xff1a;3211. Generate Binary Strings Without Adjacent Zeros 1. 解題思路 這一題比較簡單&#xff0c;用一個遞歸算法即可實現。 2. 代碼實現 給出python代碼實現…

Linux基礎: 二. Linux的目錄和文件

文章目錄 二. Linux的目錄和文件1.1 目錄概要1.2 目錄詳細說明 二. Linux的目錄和文件 1.1 目錄概要 command&#xff1a;ls / Linux的文件系統像一棵樹一樣&#xff0c;樹干是根目錄&#xff08;/&#xff09;&#xff0c;樹枝是子目錄&#xff0c;樹葉是文件&#xff1b; …

亞信安全發布2024年6月威脅態勢,高危漏洞猛增60%

近日&#xff0c;亞信安全正式發布《2024年6月威脅態勢報告》&#xff08;以下簡稱“報告”&#xff09;&#xff0c;報告顯示&#xff0c;6月份新增信息安全漏洞 1794個&#xff0c;高危漏洞激增60%&#xff0c;涉及0day漏洞占67.67%&#xff1b;監測發現當前較活躍的勒索病毒…