1. 程式人生 > >關於Oracle監聽的一些理解(整理)

關於Oracle監聽的一些理解(整理)

Oracle 監聽器 Listener 是一個重要的資料庫伺服器元件,在整個 Oracle 體系結構中,扮演著重要的作用。它負責管理 Oracle 資料庫和客戶端之間的通訊,它在一個特定的網絡卡埠(預設是TCP 1521埠)上監聽連線請求,並將連線轉發給資料庫,下面的部分,會從幾個方面對監聽器進行簡單介紹。

oracle_database_listener

1.監聽器的功能

從當前的 Oracle 版本看,Listener 主要負責下面的幾方面功能:

  1. 監聽客戶端請求。監聽器執行在資料庫伺服器之上,與 Oracle 例項(可為多個)相關關聯,是一個專門的程序 process,在 Windows 的服務專案或者 Linux 的執行程序列表中,都會看到對應的執行程序。Windows 上名為 TNSLSNR,Linux/Unix 平臺上是 lsnrctl。監聽器守候在伺服器制定埠(預設為:1521),監聽客戶端的請求。
  2. 為客戶端請求分配 Server Process。監聽器只負責接聽請求,之後將請求轉接給 Oracle Server Process。在 Oracle 的服務模式下,客戶端程序是不允許直接操作資料庫例項和資料,而是通過一個服務程序 Server Process(也稱為影子程序)作為代理。監聽器接受到請求之後,就向作業系統(或者 Dispatcher 元件)要求 fork(或分配)一個 Server Process 與客戶端相連。
  3. 註冊例項服務。本質上講,Listener 是建立例項和客戶端程序之間聯絡的橋樑。Listener 與例項之間的聯絡,就是通過註冊的過程來實現的。註冊的過程就是例項告訴監聽器,它的資料庫資料庫例項名稱 instance_name 和服務名 service_names。監聽器註冊上這樣的資訊,對客戶端請求根據監聽註冊資訊,找到正確的服務例項名稱。目前 Oracle 版本中,提供動態註冊和靜態註冊兩種方式。
  4. 錯誤轉移 failover。failover 是 RAC 容錯的一個重要方面功能,其功能是在資料庫例項崩潰的時候,可以自動將請求轉移到其他可用例項上的一種功能。可以提供很大程度上的可用性(Availability)功能。這個過程中,發現例項已經崩潰,並且將請求轉移到其他例項上,就屬於是 Listener 的功能。
  5. 負載均衡衡量。在 RAC 架構中,Oracle 實現了負載均衡。當一個客戶請求到來時,Oracle 會根據當前 RAC 叢集環境中所有例項的負載情況,避開負載較高的例項,將請求轉移到負載較低的例項進行處理。在早期 RAC 版本中,負載輕重的衡量是根據監聽器當前維護連線數目來確定的,而不是實時檢視多例項的負載。RAC 環境中的監聽器之間進行溝通通訊。

2.監聽器的操作

監聽器在 Windows 和 Linux/Unix 平臺上,都是可以直接操作的。下面以 Linux 平臺操作為例,其他平臺類似。

在命令列視窗(CMD),輸入 lsnrctl,就可以進入監聽器控制視窗。

[[email protected] ~]$ lsnrctl

LSNRCTL for Linux: Version 10.2.0.4.0 – Production on 06-APR-2011 14:31:46
Copyright (c) 1991, 2007, Oracle.  All rights reserved.
Welcome to LSNRCTL, type “help” for information.

LSNRCTL>

通過輸入命令 help,可以檢視支援的監聽器操作。下面僅介紹常用的幾個:

檢視當前監聽器狀態:

敲入 status,可以檢視當前監聽器的狀態,對應操作日誌資訊和服務註冊資訊等內容。如下:

LSNRCTL> status

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))

STATUS of the LISTENER
————————
Alias LISTENER
Version TNSLSNR for Linux: Version 10.2.0.4.0 – Production
Start Date 18-MAR-2011 18:03:56
Uptime 18 days 20 hr. 28 min. 37 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF

Listener Parameter File /home/oracle/product/10.2.0/db_1/network/admin/listener.ora

Listener Log File /home/oracle/product/10.2.0/db_1/network/log/listener.log

Listening Endpoints Summary…

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
Services Summary…
Service “Test” has 2 instance(s).
Instance “Test”, status UNKNOWN, has 1 handler(s) for this service…
Instance “Test”, status READY, has 1 handler(s) for this service…
Service “TestXDB” has 1 instance(s).
Instance “Test”, status READY, has 1 handler(s) for this service…
Service “Test_XPT” has 1 instance(s).
Instance “Test”, status READY, has 1 handler(s) for this service…
The command completed successfully

LSNRCTL>

需要額外注意的下面幾項內容。

監聽程式引數檔案 /home/oracle/product/10.2.0/db_1/network/admin/listener.ora  //使用的引數

監聽器啟動時依據引數檔案的,當然沒有引數檔案監聽器也是可以啟動,那時監聽器依據預設的行為操作。這個引數指定了監聽器引數檔案的位置,listener.ora。這個檔案是一個文字型別引數檔案,描述了監聽器監聽埠,主機名稱和靜態註冊資訊。Listener.ora是隨著資料庫例項的建立之後,建立監聽器的過程中動態配置的。

監聽程式日誌檔案 /home/oracle/product/10.2.0/db_1/network/log/listener.log //操作日誌位置

監聽器日誌,是一個記錄和描述監聽器工作和錯誤的資訊庫。通過仔細研究日誌內容,可以幫助我們發現當前的監聽器的問題、解決連線故障和深入理解監聽器工作原理。

上文中已經說明,監聽器有註冊功能,通過 status 命令(services命令同樣效果)。可以檢視到當前有什麼服務被註冊上,用來檢查連線服務失敗,是常用的工具。

開啟/關閉監聽器:

監聽器的行為受到引數檔案的控制,我們有時候需要調整監聽器的引數。調整監聽引數的方法,可以通過 Oracle 提供的 GUI 介面完成,還可以通過手工修改 listener.ora 來完成。

因為引數檔案 listener.ora 是一個文字檔案。Oracle 對於文字型別的引數檔案,大多數情況下是不支援熱載入的。pfile 和listener.ora 都是如此。

使用介面GUI,就是使用 Net Configuration Assistant 來配置。配置完成後,配置程式會自動重新啟動監聽器程式,來載入修改的引數檔案。如果採用手工修改 listener.ora,就必須要手工的進行監聽程式關閉和啟動。

LSNRCTL> stop
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))
The command completed successfully

LSNRCTL> start
Starting /home/oracle/product/10.2.0/db_1/bin/tnslsnr: please wait…
TNSLSNR for Linux: Version 10.2.0.4.0 – Production
System parameter file is /home/oracle/product/10.2.0/db_1/network/admin/listener.ora
Log messages written to /home/oracle/product/10.2.0/db_1/network/log/listener.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))

STATUS of the LISTENER
————————
Alias LISTENER
Version TNSLSNR for Linux: Version 10.2.0.4.0 – Production
Start Date 06-APR-2011 14:35:27
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /home/oracle/product/10.2.0/db_1/network/admin/listener.ora
Listener Log File /home/oracle/product/10.2.0/db_1/network/log/listener.log
Listening Endpoints Summary…

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
Services Summary…
Service “Test” has 1 instance(s).
Instance “Test”, status UNKNOWN, has 1 handler(s) for this service…
The command completed successfully

LSNRCTL>

這裡多說一句關於監聽器的引數配置。使用GUI可以滿足大部分的情況,而且可以避免拼寫錯誤引發的監聽器故障(監聽器不會檢查配置專案的正確與否)。但是,在一些比較複雜的情況下,比如一臺機器繫結多個IP的情況,或者 RAC 的複雜功能配置上,還是傾向於使用手工編寫 listener.ora 的方法。

此外,lsnrctl 提示行還提供了 reload 命令,可以在 Listener 啟動的情況下,重新載入檔案和 SID 資訊。但是我還是比較喜歡 stop+start 的組合。

如果是在 Windows 平臺下,啟動關閉監聽器還可以在系統服務專案列表中操作,效果是一樣的。

3.監聽器的工作過程

下面我們談談監聽器的工作過程。一般,監聽器作為一個獨立 process 在作業系統中執行,守候在特定網路埠(預設為:1521),等待客戶端請求的到來。注意:我們在客戶端配置命名服務的時候,輸入的1521也就是為了與監聽器程式建立連線。

當一個請求“如期而至”,監聽器對照已經註冊的服務列表,查詢對應的資料庫例項資訊,獲取到指定例項的 ORACLE_HOME 路徑。相當於表明可以進行連線。

客戶端與例項的互動不是直接的,是通過 Server Process 作為代理中介來實現的。所有指令 SQL 都是客戶端通過 Server Process 傳送到例項中,這種體系結構是 Oracle 對於例項和資料庫檔案一種保護機制。

當監聽器獲得請求之後,要從 Oracle 例項中分配一個 Server Process 與之對應。這裡不同的 Oracle 連線方式存在一些差別。

如果是專用連線模式,也就是一個客戶端連線對應一個 Server Process。監聽器就會向 OS 請求 fork(創造)出一個 Server Process,與監聽器嘗試互動。

如果是共享連線模式,也就是多個客戶端共享一個 Server Process(注意:這裡還不是連線池)。監聽器就會向 Dispatcher 程序(管理共享模式連線的程序)請求一個 Server Process 與之互動。

Server Process 與監聽器的連線,實際上就是相互資訊的交換。Server Process 將自身在 OS 中的程序編號、連線地址資訊發給監聽器。監聽器將客戶端資訊傳遞給 Server Process。監聽器獲取到 Server Process 的資訊之後,將其返回給客戶端連線程式。客戶端獲取到資訊之後,進行重連線,根據返回的資訊與 Server Process 在制定的伺服器埠進行聯絡。

直到這個時候,客戶端程式才將連線使用者名稱、密碼等資訊發給 Server Process,進行登入驗證等操作。監聽器的工作也就到此結束。

這裡面有一個技術細節,就是 Server Process 與客戶端連線的時候,是允許不使用1521埠的。具體連線的埠,是帶有隨機因素的。在9i版本 Windows 平臺下,如果安裝了防火牆,只允許1521埠通訊,是會帶來一些連線問題。好在在其他平臺上和之後的版本中,實現了一種埠共享技術,連線可以和監聽器一起使用1521埠。

4.監聽器的動/靜態註冊機制

介紹了監聽器工作原理,下面我們說說動靜態註冊的機制。在上面的內容中,我們已經初步瞭解了註冊的作用,註冊就是將資料庫作為一個服務註冊到監聽程式。客戶端不需要知道資料庫名和例項名,只需要知道該資料庫對外提供的服務名就可以申請連線到資料庫。這個服務名可能與例項名一樣,也有可能不一樣。在資料庫伺服器啟動過程中,資料庫伺服器會向監聽程式註冊相應的服務(無論何時啟動一個數據庫,預設地都有兩條資訊註冊到監聽器中:資料庫伺服器對應的例項和服務。)相當於是這樣:在資料庫伺服器和客戶端之間有一監聽程式(Listener),在監聽程式中,會記錄相應資料庫對應的服務名(一個數據庫可能對應有多個服務名),當客戶端需要連線資料庫時,只需要提供服務名,就可以建立客戶端和伺服器之間的連線。目前的 Oracle,支援靜態註冊和動態註冊兩種註冊方式。

靜態註冊顧名思義,就是顯示的指定出監聽器程式要為那個例項以哪個服務名做監聽。在啟動監聽器的時候,監聽程式是不知道所監聽例項服務是否存在。直到有客戶端請求指定的服務。

靜態註冊就是例項啟動時讀取 listener.ora 檔案的配置,將例項和服務註冊到監聽程式。無論何時啟動一個數據庫,預設地都有兩條資訊註冊到監聽器中:資料庫伺服器對應的例項和服務。

靜態註冊時,listener.ora 檔案中的 GLOBAL_DBNAME 向外提供服務名,listener.ora 檔案中的 SID_NAME 提供註冊的例項名。下面是一個典型引數檔案的結構:

# listener.ora Network Configuration File: /home/oracle/product/10.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /home/oracle/product/10.2.0/db_1)
(PROGRAM = extproc)
)

(SID_DESC =
(GLOBAL_DBNAME = Test)
(ORACLE_HOME = /home/oracle/product/10.2.0/db_1)
(SID_NAME = Test)
)
)

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
)

其中,SID_LIST 配置節點中的 SID_DESC 就是配置靜態註冊的節點專案。SID_LIST 裡用來配置當前監聽器註冊的服務專案,通過多個 SID_DESC 進行配置,每個 SID_DESC 基本上就是一個配置專案。預設是動態註冊的時候,只有 PLSExtProc 專案。

預設安裝時,會安裝一個 PL/SQL 外部程式(ExtProc)條目在 listener.ora 中,是 Oracle 為呼叫外部程式預設配置的監聽,它的名字通常是 ExtProc 或 PLSExtProc,但一般不會使用它,可以直接從 listener.ora 中將這項移除,因為對 ExtProc 已經有多種攻擊手段了,在不使用外部程式時,Oracle 也是建議刪除的。PLSExtProc 是 PL/SQL external procdure 的意思,就是在 PL/SQL 中呼叫外部語句,如 C,Java 寫的過程。現在,Oracle 已經全面支援 Java 了,這東西也就過時了,之所以繼續保留是考慮到相容以前老版本的資料庫例項。有時可能會在多個數據庫例項之間拷貝 listener.ora,請檢查拷貝來的檔案中是否含有不需要的服務,確保只留下的確需要的服務專案,減少監聽器受攻擊的面。其實 Oracle DBA 應該特別重視監聽器的安全性,因為黑客可以輕易的侵入沒有進行安全配置監聽器的 Oracle 資料庫例項。如果你想了解 Oracle 監聽器安全配置方面的知識。

靜態配置專案中,通過 GLOBAL_NAME 配置服務專案,通過 SID_NAME 指定資料庫例項的名稱,通過 ORACLE_HOME 配置 Oracle 資料庫軟體安裝的基本目錄。

動態註冊是與靜態註冊相對應的一種註冊方法。同樣也是通過 listener.ora 進行配置。下面是一個典型的配置引數檔案:

# listener.ora Network Configuration File: /home/oracle/product/10.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /home/oracle/product/10.2.0/db_1)
(PROGRAM = extproc)
)
)

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
)

對比上面的靜態註冊檔案,可以發現顯示指定服務名稱和資料庫例項名的專案不見了。只有本地地址和監聽器埠資訊。

動態註冊的動作是監聽器所在主機上資料庫例項完成。動態註冊是 Oracle 上一個不能關閉的功能。例項的 background process PMON,每隔一段時間(一到兩分鐘)就會將例項的引數資訊註冊到監聽器上,實現動態註冊。

註冊的資訊是資料庫引數 service_name instance_name。可以通過 Show Parameter 命令檢視。

SQL> show parameter instance_name;

NAME TYPE VALUE
———————————— ———– ——————————
instance_name string Test

SQL> show parameter service_names;

NAME TYPE VALUE
———————————— ———– ——————————
service_names string Test

一般資料庫在建立的時候,這兩個引數都是已經設定好的,不會輕易的發生變化。

如果 instance_name 引數沒有設定,則系統會選取引數 db_name 作為例項名稱返回。如果 service_names 沒有設定,則會將 db_name 和 db_domain 兩個引數組合成服務名實現註冊。

值得注意的一個問題是,service_names 引數是一個可以指定多個服務名稱的引數,以逗號分隔。也就是說,一個 Oracle 例項時可以同時作為多個服務名向外提供服務的。service_name 是 Oracle 在新近版本中提出,替代 SID_NAME 的概念。使用 Service 的指定方式,多個 Oracle 例項就可以統一提供一致的資料訪問服務(也就是 RAC)。

通常,對 instance_name 和 service_name 兩個引數,還是建議設定上。因為會在一定程度上影響到動態註冊的效果。

如果沒有顯示的指定這兩個引數,那麼只有在資料庫例項啟動在監聽器例項之後的時候,才會一次動態註冊。一旦之後監聽器重新啟動,動態註冊的資訊就不會存在,而且很難再次註冊上。所以,我們是推薦將這兩個引數設定上的。

只有顯示設定兩個值的情況下,PMON 才會週期性的將註冊資訊加以註冊。通過命令列,也可以強迫 PMON 立即執行一次註冊操作。

SQL> alter system register ;
System altered

最後,我們聊一聊動態註冊的作用,支援錯誤轉移 failover。註冊操作的發動方是 PMON 後臺程序,PMON 是 Oracle 例項最重要的後臺程序,很多資料和 DBA 都是以該程序的狀態確定資料庫例項的狀態。PMON 負責動態註冊,如果不能進行動態註冊,說明 PMON 已經失去了工作能力,也就意味著監聽程式所服務的例項已經不能工作。

通過動態註冊的機制,監聽程式是可以知道所服務的伺服器例項已經崩潰,對於客戶端的請求,可以實現錯誤轉移。

當然,我們這裡談到的崩潰是例項的崩潰。如果監聽器程式崩潰了,情況又是另一種樣子了。

我們可以使用命令 lsnrctl status 來檢視某服務是靜態註冊還是動態註冊。例項狀態為 UNKNOWN 值時表明此服務是靜態註冊的設定。這時監聽器用來表明它不知道關於該例項的任何資訊,只有當客戶發出連線請求時,它才檢查該例項是否存在。動態註冊的資料庫通過狀態資訊中的狀態 READY 或狀態 BLOCKED(對於一個備用資料庫)來指明。不管關閉何時資料庫,動態註冊的資料庫都會動態地從 監聽器登出,而與之相關的資訊將從狀態列表中消失。這樣,不管資料庫是在執行還是已經關閉,監聽器總是知道它的狀態。該資訊將被用於連線請求的回退 (fallback)和負載平衡。

相關推薦

關於Oracle一些理解整理

Oracle 監聽器 Listener 是一個重要的資料庫伺服器元件,在整個 Oracle 體系結構中,扮演著重要的作用。它負責管理 Oracle 資料庫和客戶端之間的通訊,它在一個特定的網絡卡埠(預設是TCP 1521埠)上監聽連線請求,並將連線轉發給資料庫,下面的部分,會從幾個方面對監聽器進行簡單

oracle修改埠號1521

修改oracle監聽埠1,檢視當前監聽狀態[[email protected] ~]$ lsnrctl status LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 05-JUL-2018 14:26:26

Vue2.0 探索之路——生命周期和鉤子函數的一些理解

head chrom 路由 技術分享 defined 修改 疑問 reat 有時 前言 在使用vue一個多禮拜後,感覺現在還停留在初級階段,雖然知道怎麽和後端做數據交互,但是對於mounted這個掛載還不是很清楚的。放大之,對vue的生命周期不甚了解。只知道簡單的使用,而不

Netty事件和處理

事件處理 多路復用 linu 自定義事件 性能 cdn 處理請求 fancybox 客戶 陪產假結束了,今天又開始正常上班了,正好趕上米粉節活動,又要忙上一陣了,米粉節活動時間為4.03 - 4.10,有不少優惠,感興趣的可以關註mi.com或小米商城app。 今天

Netty事件和處理

關註 proto cte meta pro sse cti 讀取 線程模型 上一篇 介紹了事件監聽、責任鏈模型、socket接口和IO模型、線程模型等基本概念,以及Netty的整體結構,這篇就來說下Netty三大核心模塊之一:事件監聽和處理。 前面提到,Netty是一個N

Android中ScrollView如何滑動距離總結

需求:想實現像美團中列表下拉後出現懸浮窗的效果。 思路:首先對ScrollView進行滑動監聽,然後在onScrollChanged()方法中獲取到滑動的Y值,接著進行相關操作即可。 實現步驟: 1、自定義MyScrollView (1)重寫onScrollChang

numpy 軸的一些理解轉載

https://blog.csdn.net/bobobe/article/details/78736049https://blog.csdn.net/lanchunhui/article/details/53945501https://blog.csdn.net/lanchu

js鍵盤 確認enter點選事件

$(document).keydown(function (event) {         //alert(event.keyCode);         //判斷當event.keyCode 為37時(即左方面鍵),執行函式to_left();         //判斷當

jquerydiv內容元素的變化具體實現思路

我們做電子商務,javascript框架採用的是jQuery,在開發過程中遇到了上面標題列出的問題:如何監聽div內容的變化。 先給出最終程式碼(後續進行相關分析): 1 2 3 4 5 var title = $("b

詳解android之Animation方法AnimationListener

先寫一個類繼承AnimationListener,看看具體方法: 具體方法大家也已經從圖片中也有些瞭解了,那接下來就看看實戰中,又怎麼使用呢: 1. 先看看佈局檔案和效果圖:     

Oracle lsnrctl命令啟動報錯TNS-12537,TNS-12560,TNS-00507

LINUX登入oracle使用者,通過lsnrctl start命令啟動資料庫時,報錯如下: “ [[email protected] ~]$ lsnrctl start LSNRCTL for Linux: Version 11.2

oracle啟動不起來停在那不動

今天早發現數據庫連不上,然後tnsping和lsnrctl status也沒反應,游標一直停在那不動,於是肯定是TNS出現問題了 ps -ef|grep tns執行結果如下: oracle    5516     1 0 2008 ?        00:28:10 /or

復選框 省市區 聯動input的change事件

默認 屬性。 gen his mpat image 內容 multi 發的 需求:省市區三級包含復選框按鈕以及文字描述。點擊文字顯示對應的下級地區,點擊復選框選擇對應的下級區域勾選。 分析:監聽input的change事件當點擊復選框省 選擇對應的第一個市區,同時默認選

checkbox復選框的一些深入研究與理解

ack 註意 聖誕 return tle script ++ doc div 原文鏈接:http://www.zhangxinxu.com/wordpress/?p=466 1 <!DOCTYPE html> 2 <html lang="en">

解釋機器學習模型的一些方法——理解復雜的機器學習模型

p s 結果 origin 得出 驗證 場景 這樣的 機器 發的 在這一部分中我們所要展現的技術,可以為非線性、非單調的響應函數生成解釋。我們可以把它們與前兩部分提到的技巧結合起來,增加所有種類模型的可解釋性。實踐者很可能需要使用下列增強解釋性技巧中的一種以上,為他們手中

java設計模式java觀察者設計模式

今天給大家分享一下觀察者設計模式(監聽設計模式),該模式在很多主流得框架、原始碼中使用率非常高。在分享之前先給大家講一個我們使用手機的一個場景,我們都用過手機,當我們手機來電話的時候,會有各種複雜的操作,比如會響鈴、手機震動、螢幕會亮屏等等,大家有沒有考慮過這個場景是怎麼實現的呢?其實這個地方就是使

php的一些理解物件與類的概念以及相互關係理解

先來看一段簡單的程式碼: <?php class Person{ public $name; public $age; public $sex; public function who() { echo $this->

Swift實時網路狀態更新到Swift3

最近做個專案,需要實時的監聽網路連線狀態,網路連線斷開時需要提醒使用者手動開啟網路,網路重新連線上之後需要做些操作。身為小白的我感到很有壓力,所以就不自覺的又上度娘那裡去取經了。(哈哈,初學者嘛,大家理解)自己整理下,加深下印象以後也方便用 :) 下面直入正題,如何實現實時監聽網路連線

樹模型的一些理解從決策樹到GBDT

1.決策樹 基本流程: 整體是一個遞迴的過程,返回條件有三種: 當前結點中所有樣本的類別都為c,返回值為c; 當前結點中樣本集合為空,此時返回父結點中類別數最多的類。把父節點的樣本分佈作為先驗 當前結點中樣本的屬性集合為空,或者所有樣本屬性取值相同,將當前結點

前端學習整理物件,原型,上下文環境,作用域,閉包等問題深入理解

物件 物件是屬性的集合,重點:是一個集合,意思是有一個個屬性整合在了一起,組成了一個集合,這個集合叫做物件,另外,這個屬性是以鍵值對的形式存在的,鍵是一個字串,比如a,比如name等,值可以是任意型別,比如陣列,function,字串,數字 -----------------------