大數據權限認證 Kerberos 部署

文章目錄

  • 1、什么是 Kerberos
  • 2、Kerberos 術語和原理
    • 2.1、Kerberos 術語
    • 2.1、Kerberos 原理
  • 3、Kerberos 服務部署
    • 3.1、前置條件
    • 3.2、安裝依賴
    • 3.3、配置 krb5.conf
    • 3.4、配置 kdc.conf
    • 3.5、配置 kadm5.acl
    • 3.6、安裝 KDC 數據庫
    • 3.7、啟動服務
    • 3.8、創建 Kerberos 管理員
    • 3.9、創建普通租戶
    • 3.10、Kerberos 客戶端安裝
  • 4、Kerberos 用戶管理
    • 4.1、KDC 支持兩種方式管理
    • 4.2、查詢所有用戶(list_principals)
    • 4.3、查詢用戶詳情(get_principal)
    • 4.4、新增用戶(add_principal USER)
    • 4.5、修改用戶(modify_principal)
    • 4.6、生成 keytab(ktadd)
    • 4.7、刪除用戶(delete_principal)
  • 5、Kerberos 有效期管理
    • 5.1、票據(登錄)有效期
    • 5.2、用戶有效期

1、什么是 Kerberos

??Kerberos 是一種網絡身份驗證協議,旨在支持使用密鑰加密的客戶端/服務器應用程序的強大身份驗證。 Kerberos 為網絡資源提供最高級別的安全性。
??Kerberos 應用客戶端/服務器體系結構并支持用戶到服務器的身份驗證,而不是主機到主機的身份驗證。在此模型中,安全性和身份驗證將取決于密鑰技術,其中網絡上的每個主機都有自己的密鑰。

2、Kerberos 術語和原理

2.1、Kerberos 術語

  • KDC(Key Distribute Center): 密鑰分發中心,負責存儲用戶信息,管理發放票據。
  • Realm: Kerberos 所管理的一個領域或范圍,稱之為一個 Realm。例如:HADOOP.COM。
  • Principal: Kerberos 所管理的一個用戶或者一個服務(又稱為主體),可以理解為 Kerberos 中保存的一個賬號,其格式通常如下:primary/instance@realm ,即賬號/實例名@域名,其中 instance可以省略。例如:nn/bigdata2@HADOOP.COM、test@HADOOP.COM。
  • Keytab:Kerberos 中的用戶認證,可通過密碼或者密鑰文件證明身份,keytab指密鑰文件,使用 keytab 可以不用輸入密碼即可登錄。例如:kinit test@HADOOP.COM -kt /root/test.keytab。

2.1、Kerberos 原理

??Kerberos 模型基于 Needham-Schroeder 的可信第三方協議,采用DES 加密(也可用其他算法替代),它與網絡上的每個實體分別共享一個不同的秘密密鑰,知道該秘密密鑰就是身份的證明。這里以吃飯為例,簡單闡述 Client 與 Kerberos 、TGS 及 Server 之間的關系如下:
認證模型
??Kerberos 有一個所有客戶和秘密密鑰的數據庫,由于 Kerberos 知道每個人的秘密密鑰,所以它能產生一個實體證實另一個實體身份的消息。Kerberos 還能產生會話密鑰,只供一個客戶機和一個服務器(或兩個客戶機)使用。會話密鑰用來加密雙方間的通信消息,通信完畢,即銷毀會話密鑰。

Kerberos 協議如下:

  • 客戶從Kerberos 請求一張票據許可票據(TGT,Ticket Granting Ticket)作為票據許可服務(TGS,Ticket-Granting Service),該票據用用戶的秘密密鑰加密后發送給用戶;
  • 為了使用特定的服務器,客戶需要從 TGS 中請求一張票據,TGS 將票據發回給客戶;
  • 客戶將此票據提交給服務器和鑒別器,如果客戶的身份沒有問題,服務器就會讓客戶訪問該服務。
    認證流程
    詳細過程參考:《一文搞懂Kerberos》

3、Kerberos 服務部署

3.1、前置條件

  • 準備好域名,本文使用的域名是 HADOOP.COM;
  • 確保 Kerberos 認證的機器時間同步。

機器角色規劃如下:
機器角色

3.2、安裝依賴

sudo yum install -y krb5-server krb5-libs krb5-auth-dialog krb5-workstation

3.3、配置 krb5.conf

默認位置:/etc/krb5.conf ,用于客戶端配置。

# Configuration snippets may be placed in this directory as well
includedir /etc/krb5.conf.d/[logging]default = FILE:/var/log/krb5libs.logkdc = FILE:/var/log/krb5kdc.logadmin_server = FILE:/var/log/kadmind.log[libdefaults]dns_lookup_realm = falseticket_lifetime = 24hrenew_lifetime = 7dforwardable = truerdns = falsepkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crtdefault_realm = HADOOP.COM#default_ccache_name = KEYRING:persistent:%{uid}[realms]HADOOP.COM = {kdc = bigdata3admin_server = bigdata3}[domain_realm]
# .example.com = HADOOP.COM
# example.com = HADOOP.COM

說明:

  • [logging]:服務端 志打印位置。
  • [libdefaults]:連接的默認配置 。
    • default_realm:設置默認領域。多個領域是配置在 [realms] 章節。
    • udp_preference_limit=1:禁止使用udp(可以防止一個 Hadoop 中的錯誤)
    • ticket_lifetime: 憑證生效的時限,一般為 24 小時。
    • renew_lifetime: 憑證最長可以被延期的時限,一般為 7 天。
    • 去掉 des256 加密支持,因為該加密算法需要 JCE 的額外支持,增加了對環境的依賴。
  • [realms]:配置所有需要訪問的 Kerberos 域。
    • kdc:kdc 服務器地址(機器:端口),默認端口 88。
    • admin_server: admin 服務地址(機器:端口),默認端口 749。
    • default_domain: 指定默認的域名。

3.4、配置 kdc.conf

默認位置:/var/kerberos/krb5kdc/kdc.conf,這是 KDC 服務端配置文件,需要開通 88 端口。

[kdcdefaults]kdc_ports = 88kdc_tcp_ports = 88[realms]HADOOP.COM = {#master_key_type = aes256-ctsmax_renewable_life = 7d 0h 0m 0sacl_file = /var/kerberos/krb5kdc/kadm5.acldict_file = /usr/share/dict/wordsadmin_keytab = /var/kerberos/krb5kdc/kadm5.keytabsupported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal}

說明:

  • [kdcdefaults] :KDC 默認行為配置,全局生效。
  • [realms]:配置每個域的信息。
    • MYREALM: 域名,建議統一使用大寫。
    • acl_file: admin 的用戶權限,需要用戶自己創建。
    • supported_enctypes:支持的校驗方式。
    • admin_keytab:KDC 進行校驗的管理員 keytab。

3.5、配置 kadm5.acl

文件位置: /var/kerberos/krb5kdc/kadm5.acl ,用于 ACL(訪問控制列表),此處提前配置管理員。

[root@bigdata3 etc]# sudo cat /var/kerberos/krb5kdc/kadm5.acl
*/admin@HADOOP.COM	*

3.6、安裝 KDC 數據庫

安裝命令:

kdb5_util create -r HADOOP.COM -s

注意:我使用的 realname 就是 HADOOP.COM,可以根據需要改成自己的。

  • -r:指定域名,注意和配置文件域名保持一致。
  • -s:指定將數據庫的主節點密鑰存儲在文件中,從而可以在每次啟動 KDC 時自動重新生成主節點密鑰。
  • -d: 指定數據庫名,默認名為 principal。
[root@bigdata3 etc]# sudo kdb5_util create -r MYREALM -s
Loading random data
Initializing database '/var/kerberos/krb5kdc/principal' for realm 'HADOOP.COM',
master key name 'K/M@HADOOP.COM'
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.
Enter KDC database master key:  # 輸入 KDC 數據庫密碼,重要,admin
Re-enter KDC database master key to verify: #admin

說明:

  • 該命令會在 /var/kerberos/krb5kdc/ 目錄下創建 principal 數據庫文件。在重裝時,可能需要需要刪除數據庫文件。
  • 對于 KDC 數據庫密碼,非常重要,請妥善保存。

3.7、啟動服務

sudo chkconfig --level 35 krb5kdc on
sudo chkconfig --level 35 kadmin on
sudo service krb5kdc start
sudo service kadmin start

3.8、創建 Kerberos 管理員

可使用 kadmin.local (只允許在本機執行)或 kadmin 工具,管理 KDC 服務。

創建超級管理員的 Principle:root/admin

[root@bigdata3 etc]# sudo kadmin.local -q "addprinc root/admin"
Authenticating as principal root/admin@HADOOP.COM with password.
WARNING: no policy specified for root/admin@HADOOP.COM; defaulting to no policy
Enter password for principal "root/admin@HADOOP.COM": # root
Re-enter password for principal "root/admin@HADOOP.COM": # root
Principal "root/admin@HADOOP.COM" created.

一條命令創建:

sudo echo -e "root\nroot" | kadmin.local -q "addprinc root/admin"

3.9、創建普通租戶

1、創建測試用戶 test,此時用戶只能通過密碼方式訪問(在生成 keytab 文件后,可通過 keytab 訪問,一說生成 keytab 之后密碼登錄不可用)。

[root@bigdata3 etc]#   echo -e "test\ntest" | sudo kadmin.local -q "addprinc test"
# 注意上面創建了用戶 test,密碼也是 test
Authenticating as principal root/admin@HADOOP.COM with password.
WARNING: no policy specified for test@HADOOP.COM; defaulting to no policy
Enter password for principal "test@HADOOP.COM":
Re-enter password for principal "test@HADOOP.COM":
Principal "test@HADOOP.COM" created.

2、用戶基本操作示例

# 1. 登錄
[root@bigdata3 etc]# kinit test
Password for test@HADOOP.COM: # test# 2. 查看登錄緩存
[root@bigdata3 etc]# klist -e
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: test@HADOOP.COMValid starting       Expires              Service principal
2024-03-01T18:40:47  2024-03-02T18:40:47  krbtgt/HADOOP.COM@HADOOP.COMrenew until 2024-03-08T18:40:47, Etype (skey, tkt): aes256-cts-hmac-sha1-96, aes256-cts-hmac-sha1-96# 3. 更新票據緩存有效期
[root@bigdata3 etc]# kinit -R
[root@bigdata3 etc]# klist -e
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: test@HADOOP.COMValid starting       Expires              Service principal
2024-03-01T18:41:16  2024-03-02T18:41:16  krbtgt/HADOOP.COM@HADOOP.COMrenew until 2024-03-08T18:40:47, Etype (skey, tkt): aes256-cts-hmac-sha1-96, aes256-cts-hmac-sha1-96 ### 可以看到 Expires 時間已經更新,注意 renew until 是相對不變的# 4. 銷毀登錄緩存
[root@bigdata3 etc]# kdestroy
[root@bigdata3 etc]# klist
klist: No credentials cache found (filename: /tmp/krb5cc_0)

3、查看安裝版本

[root@bigdata3 etc]# klist -V
Kerberos 5 version 1.15.1

3.10、Kerberos 客戶端安裝

1、依賴安裝:

$ sudo yum install krb5-devel krb5-workstation  -y

2、配置 krb5.conf
可從 KDC 機器獲取 krb5.conf 文件

4、Kerberos 用戶管理

4.1、KDC 支持兩種方式管理

  • KDC 本機使用 kadmin.local 管理,需要登錄 KDC,無需輸入 Kerberos 管理員密碼;
  • 遠程或在 KDC本機使用 kadmin管理,需要 Kerberos 管理員密碼。

方式1:在 KDC 主機登錄:

[root@bigdata3 etc]# kadmin.local
Authenticating as principal root/admin@HADOOP.COM with password.
kadmin.local:  # 可執行命令

方式 2:使用 kadmin 管理用戶

[root@bigdata2 yum.repos.d]# kadmin -p root/admin
Authenticating as principal root/admin with password.
Password for root/admin@HADOOP.COM: # root

如果沒有 root 用戶可以在 KDC 主機增加一個:

sudo echo -e "root\nroot" | kadmin.local -q "addprinc root/admin" # 用戶名密碼為 root/root

4.2、查詢所有用戶(list_principals)

kadmin.local:  list_principals
HTTP/bigdata1@HADOOP.COM
HTTP/bigdata2@HADOOP.COM
K/M@HADOOP.COM
admin/admin@HADOOP.COM
dn/bigdata1@HADOOP.COM
dn/bigdata2@HADOOP.COM
dn/bigdata3@HADOOP.COM
jn/bigdata1@HADOOP.COM
jn/bigdata2@HADOOP.COM
jn/bigdata3@HADOOP.COM
kadmin/admin@HADOOP.COM
kadmin/bigdata3@HADOOP.COM
kadmin/changepw@HADOOP.COM
kiprop/bigdata3@HADOOP.COM
krbtgt/HADOOP.COM@HADOOP.COM
nn/bigdata1@HADOOP.COM
nn/bigdata2@HADOOP.COM
root/admin@HADOOP.COM
test@HADOOP.COM

4.3、查詢用戶詳情(get_principal)

kadmin.local:  get_principal test
Principal: test@HADOOP.COM
Expiration date: [never]
Last password change: 五 3月 01 15:12:13 CST 2024
Password expiration date: [never]
Maximum ticket life: 1 day 00:00:00
Maximum renewable life: 7 days 00:00:00
Last modified: 五 3月 01 15:12:13 CST 2024 (root/admin@HADOOP.COM)
Last successful authentication: [never]
Last failed authentication: [never]
Failed password attempts: 0
Number of keys: 8
Key: vno 1, aes256-cts-hmac-sha1-96
Key: vno 1, aes128-cts-hmac-sha1-96
Key: vno 1, des3-cbc-sha1
Key: vno 1, arcfour-hmac
Key: vno 1, camellia256-cts-cmac
Key: vno 1, camellia128-cts-cmac
Key: vno 1, des-hmac-sha1
Key: vno 1, des-cbc-md5
MKey: vno 1
Attributes:
Policy: [none]

4.4、新增用戶(add_principal USER)

1、使用默認配置

kadmin.local:  add_principal Leo825 # 新增 Leo825 租戶
WARNING: no policy specified for Leo825@HADOOP.COM; defaulting to no policy
Enter password for principal "Leo825@HADOOP.COM":  # 輸入密碼 Leo825
Re-enter password for principal "Leo825@HADOOP.COM":  # 再次輸入密碼 Leo825
Principal "Leo825@HADOOP.COM" created.
kadmin.local:  quit # 退出# 測試
[root@bigdata3 etc]# kinit Leo825
Password for Leo825@HADOOP.COM: # 輸入密碼 Leo825
[root@bigdata3 etc]# klist
Ticket cache: FILE:/tmp/krb5cc_0 # 登錄成功
Default principal: Leo825@HADOOP.COMValid starting       Expires              Service principal
2024-03-01T19:05:24  2024-03-02T19:05:24  krbtgt/HADOOP.COM@HADOOP.COMrenew until 2024-03-08T19:05:24

2、指定有效期

kadmin.local:  addprinc
usage: add_principal [options] principaloptions are:[-randkey|-nokey] [-x db_princ_args]* [-expire expdate] [-pwexpire pwexpdate] [-maxlife maxtixlife][-kvno kvno] [-policy policy] [-clearpolicy][-pw password] [-maxrenewlife maxrenewlife][-e keysaltlist][{+|-}attribute]# 用戶有效期 -expire
addprinc -expire "2020-9-9 20:00" test5
# 用戶有效期 + 用戶密碼有效期 -pwexpire
addprinc -expire "2020-9-9 20:00" -pwexpire "2020-9-10 20:00" test6
# 用戶有效期 + 用戶密碼有效期 + 票據生命有效期
modify_principal -expire "6/6/2009 12:01am EST" -pwexpire "6/7/2009 12:01am EST" -maxlife "12:00" user1

4.5、修改用戶(modify_principal)

usage: modify_principal [options] principaloptions are:[-x db_princ_args]* [-expire expdate] [-pwexpire pwexpdate] [-maxlife maxtixlife][-kvno kvno] [-policy policy] [-clearpolicy][-maxrenewlife maxrenewlife] [-unlock] [{+|-}attribute]attributes are:allow_postdated allow_forwardable allow_tgs_req allow_renewableallow_proxiable allow_dup_skey allow_tix requires_preauthrequires_hwauth needchange allow_svr password_changing_serviceok_as_delegate ok_to_auth_as_delegate no_auth_data_requiredlockdown_keyswhere,[-x db_princ_args]* - any number of database specific arguments.Look at each database documentation for supported arguments

4.6、生成 keytab(ktadd)

[root@bigdata3 etc]# kadmin.local
Authenticating as principal Leo825/admin@HADOOP.COM with password.
kadmin.local:  ktadd -k /tmp/Leo825.keytab Leo825
Entry for principal Leo825 with kvno 2, encryption type aes256-cts-hmac-sha1-96 added to keytab WRFILE:/tmp/Leo825.keytab.
Entry for principal Leo825 with kvno 2, encryption type aes128-cts-hmac-sha1-96 added to keytab WRFILE:/tmp/Leo825.keytab.
Entry for principal Leo825 with kvno 2, encryption type des3-cbc-sha1 added to keytab WRFILE:/tmp/Leo825.keytab.
Entry for principal Leo825 with kvno 2, encryption type arcfour-hmac added to keytab WRFILE:/tmp/Leo825.keytab.
Entry for principal Leo825 with kvno 2, encryption type camellia256-cts-cmac added to keytab WRFILE:/tmp/Leo825.keytab.
Entry for principal Leo825 with kvno 2, encryption type camellia128-cts-cmac added to keytab WRFILE:/tmp/Leo825.keytab.
Entry for principal Leo825 with kvno 2, encryption type des-hmac-sha1 added to keytab WRFILE:/tmp/Leo825.keytab.
Entry for principal Leo825 with kvno 2, encryption type des-cbc-md5 added to keytab WRFILE:/tmp/Leo825.keytab.

通過 keytab 方式認證:

kinit Leo825@HADOOP.COM -kt /tmp/Leo825.keytab

4.7、刪除用戶(delete_principal)

kadmin.local:  delete_principal Leo825
Are you sure you want to delete the principal "Leo825@HADOOP.COM"? (yes/no): yes
Principal "Leo825@HADOOP.COM" deleted.
Make sure that you have removed this principal from all ACLs before reusing.

5、Kerberos 有效期管理

Kerberos 可以支持兩個層面的有效期管理,包括:登錄(票據)有效期(ticket lifetime)和 用戶有效期(user lifetime)

5.1、票據(登錄)有效期

??登錄有效期用于控制用戶在客戶端登錄前后的生命周期管理,包括登錄、銷毀和刷新等操作(可類比 web 系統登錄,可以登入、登出和刷新 session)。登錄有效期受客戶端配置、KDC 端配置和 Principal 屬性控制。

使用 klist 可以看到當前登錄有效期信息:

[root@bigdata3 etc]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: test@HADOOP.COMValid starting       Expires              Service principal
2024-03-01T19:22:49  2024-03-02T19:22:49  krbtgt/HADOOP.COM@HADOOP.COMrenew until 2024-03-08T19:22:49

重點參數:

  • Valid starting:Ticket 認證開始時間
  • Expires:Ticket 認證過期時間
  • renew until:Ticket 認證的刷新截止時間

當然Ticket 認證過期時間不是隨機的,而是有客戶端和 kdc 端重點參數 Ticket 生命有效期(ticket_lifetime)規定的。同樣的,最大刷新時間也不是無限制可刷新,而是有參數 Ticket 最大可刷新有效期(renew_lifetime) 控制的:

  • ticket lifetime:Ticket 生命有效期
  • renew_lifetime:Ticket 最大可刷新有效期

例如,客戶端配置:

[libdefaults]dns_lookup_realm = falseticket_lifetime = 24hrenew_lifetime = 7dforwardable = truerdns = falsepkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crtdefault_realm = HADOOP.COM#default_ccache_name = KEYRING:persistent:%{uid}

5.2、用戶有效期

??用戶有效期用于控制 Kerberos 用戶可登錄系統的生命周期。用戶有效期只有使用 kadmin 管理員工具配置。可配置對Kerberos 用戶的用戶有效期和用戶密碼有效期。

# 72小時后
kadmin.local: modify_principal -expire "72 hours" # 用戶有效期-pwexpire "6/7/2020 12:01am EST" principal_name # 用戶密碼有效期#以上為行為方便,實際需要保持在同一行執行

參數:

  • expire:用戶有效期
  • pwexpire:用戶密碼有效期

參數一覽

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

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

相關文章

idea 手動打 jar 包

1.在 File 中找到并點擊 Project Structure 2.按圖中高亮的部分依次點擊 3.在 Main Class 處設置要打包的類,記得在 Directory for ... 處設置目錄為根目錄,設置好以后點擊兩次 OK 回到首頁 4.在頁面上方找到 Build ,點擊 Build Artifacts...…

【Linux】在 Ubuntu 系統下使用 Screen 運行 Python 腳本

在 Ubuntu 系統下使用 Screen 運行 Python 腳本的優點 在 Ubuntu 操作系統中,Screen 是一種非常有用的工具,特別是在需要長時間運行的任務或者需要在后臺運行的任務中。結合 Python 腳本,Screen 提供了一種靈活且高效的方式來管理和執行任務…

ECOVADIS評估-自2024年1月1日起發布的記分卡的資格標準說明

EcoVadis評分(0-100分)反映了進行評估時公司的企業社會責任管理體系的質量。EcoVadis獎牌和獎章計劃旨在表彰按EcoVadis評估方法中所述,已完成EcoVadis評估流程并展示出相對強大的管理系統來解決企業社會責任標準的合格公司。獎牌和獎章的資格…

docker常用操作命令

常用的命令,詳細的命令下方有具體介紹 docker ps 查看正在運行的容器 docker ps -a 查看全部容器 docker images 查看本地鏡像 docker search [鏡像名稱] 查詢鏡像 docker run --name mynginx -d nginx:latest: 使用docker鏡像nginx:latest以后臺模…

在Windows系統上安裝Docker和SteamCMD容器的詳細指南有哪些?

在Windows系統上安裝Docker和SteamCMD容器的詳細指南有哪些? 安裝Docker: 首先,需要在Windows操作系統上激活WSL2功能。這是因為Docker作為一個容器工具,依賴于已存在并運行的Linux內核環境。可以通過使用winget來安裝Docker。具體…

排序(2)——希爾排序

希爾排序(縮小增量排序) 基本思想 希爾排序法又稱縮小增量法。希爾排序法的基本思想是:先選定一個整數,把待排序文件中所有記錄分成個組,所有距離為的記錄分在同一組內,并對每一組內的記錄進行排序。然后&…

Linux - 基本背景

1、linux發展史 1.1、UNIX發展歷史 1968年,一些來自通用電器公司、貝爾實驗室和麻省理工學院的研究人員開發了一個名叫Multics的特殊操作系統。Multics在多任務文件管理和用戶連接中綜合了許多新概念。1969-1970年,AT&T的貝爾實驗室研究…

[SD] 安裝使用stable diffusion webui

1.下載基礎版本并解壓: https://github.com/AUTOMATIC1111/stable-diffusion-webui/releases/download/v1.0.0-pre/sd.webui.zip 2.運行update.bat 這步的目的是升級到最新版本,并下載相應的依賴庫。 這步可能會提示某些git倉庫無法clone到本地&#…

[工具探索]-Gitlab的CI/CD操作

在 GitLab 中,CI(持續集成)是一項強大的功能,它允許你自動化構建、測試和部署你的代碼。 在 GitLab CI/CD 中,.gitlab-ci.yml 文件是用于定義構建和部署流程的配置文件。它使用一種基于 YAML 的語法。 下面是一個簡單…

dp——路徑距離

能幫到你的話,就給個贊吧 😘 文章目錄 01 62. 不同路徑02 63. 不同路徑 II03 64. 最小路徑和04 72. 編輯距離05 120. 三角形最小路徑和06 124. 二叉樹中的最大路徑和07 174. 地下城游戲08 514. 自由之路09 576. 出界的路徑數10 931. 下降路徑最小和11 13…

AcWing 1229. 日期問題 解題思路及代碼

先貼個題目: 以及原題鏈接:1229. 日期問題 - AcWing題庫https://www.acwing.com/problem/content/1231/ 這題其實和之前的回文日期相似,可以直接暴力枚舉,然后得解,放個小片段: for (int date 19600101; …

UI自動化-(web端下拉選擇框彈出框滾動條操作-實操入門)

1、下拉選擇框操作 在 UI 自動化中,操作下拉選擇框可以通過以下步驟進行: 定位下拉選擇框元素:通過適當的元素定位方法,找到下拉選擇框的元素。打開下拉框:例如通過點擊(.click)來操作下拉框元素打開下拉框。選擇選項:可以通過以下幾種方式選擇下拉框中的選項:根據索…

uni-app 頁面跳轉動畫

API的方式 uni.navigateTo({url: ../test/test,animationType: pop-in,animationDuration: 200 }); uni.navigateBack({delta: 1,animationType: pop-out,animationDuration: 200 });pages.json中配置的方式 "style": {"app-plus": {"animationType…

【代碼學習】pytorch_lightning

在Follow別人工作時,經常發現別人使用pytorch_lightning模板,比如這篇分布式信源信道聯合編碼工作就是用了lightning-hydra-template模板,有必要學習下這個框架。

高級語言期末2009級A卷(計算機學院)

1.編寫bool函數&#xff0c;判定給定的正整數n&#xff0c;M是否滿足&#xff1a;M為n的質因數&#xff08;能整除n的質數&#xff09; #include <stdio.h> #include <stdbool.h> #include <math.h>bool Isprime(int n) {if(n<1)return false;for(int i2…

時隔n年再度會看Vue,Git

時隔n年再度會看Vue,Git 曾經滄海難為水&#xff0c;除卻巫山不是云。不知道這句話用在這里合不合適&#xff0c;好多東西在記憶中都淡化了。但是互聯網確是有記憶的。研究以前項目的時候&#xff0c;翻看到gitee碼云上托管的項目&#xff0c;就像是自己的孩子重新又回來了一樣…

突破編程_C++_面試(異常處理)

面試題 1 &#xff1a;什么是異常處理&#xff1f;為什么需要它&#xff1f; 在C中&#xff0c;異常處理是一種處理程序運行時錯誤的機制。它允許程序員在程序的某個部分中定義和處理可能會出現的異常情況&#xff0c;即“異常”。這些異常情況通常是由錯誤條件、非法操作或其…

Laravel Octane 和 Swoole 協程的使用分析

之前在工作中使用 Laravel Octane 的 concurrently 處理并發時&#xff0c;發現在隊列和定時任務中不會觸發并發效果。經過分析&#xff0c;作了如下猜測&#xff1a;隊列和定時任務都屬于一個獨立的進程&#xff0c;與 Octane 服務無關&#xff0c;而 Octane concurrently 恰恰…

C#高級:DataGridView的詳解

一、每條數據增加一個按鈕&#xff0c;點擊輸出對應實體 請先確保正確添加實體的名稱和文本&#xff1a; private void button6_Click(object sender, EventArgs e) {//SQL查詢到數據&#xff0c;存于list中List<InforMessage> list bll.QueryInforMessage();//含有字段…

數據頁和緩存頁(BufferPool)

1. 數據頁&#xff08;dataPage&#xff09; 什么是數據頁&#xff1f; 數據頁是 MySQL 存儲引擎在磁盤和內存之間傳輸數據的基本單位&#xff0c;默認大小為16KB。 數據頁的結構&#xff1a; 表頭&#xff1a;儲存與頁相關的元信息&#xff0c;比如&#xff0c;頁號&#…