<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                >[info] 進程、線程、協程 **進程:** * 進程是程序一次動態執行的過程,是程序運行的基本單位。 * 每個進程都有自己的獨立內存空間,不同進程通過進程間通信來通信。 * 進程占據獨立的內存,所以上下文進程間的切換開銷(棧、寄存器、頁表、文件句柄等)比較大,但相對比較穩定安全。協程切換和協程切換 **線程:** * 線程又叫做輕量級進程,是CPU調度的最小單位。 * 線程從屬于進程,是程序的實際執行者。一個進程至少包含一個主線程,也可以有更多的子線程。 * 多個線程共享所屬進程的資源,同時線程也擁有自己的專屬資源。 * 程間通信主要通過共享內存,上下文切換很快,資源開銷較少,但相比進程不夠穩定容易丟失數據。 ![](https://img.kancloud.cn/93/c8/93c8b5ca2d54c18fad5a9aeaf5a46bb4_1075x741.png) **協程:** * 協程是一種用戶態的輕量級線程,協程的調度完全由用戶控制。 * 一個線程可以擁有多個協程,協程不是被操作系統內核所管理,而完全是由程序所控制。 * 與其讓操作系統調度,不如我自己來,這就是協程。 ![](https://img.kancloud.cn/3f/23/3f231a6187d5950811ddbe67c1fe452b_1084x846.png) >[info] QPS、TPS **QPS:(每秒查詢/并發/響應時間)** QPS即每秒查詢率,是對一個特定的查詢服務器在規定時間內所處理流量多少的衡量標準。 **QPS計算關系:** QPS = 并發量 / 平均響應時間 并發量 = QPS * 平均響應時間 ***** **TPS:(吞吐量)** Transactions Per Second(每秒傳輸的事物處理個數),即服務器每秒處理的事務數。TPS包括一條消息入和一條消息出,加上一次用戶數據庫訪問。(業務TPS = CAPS × 每個呼叫平均TPS) TPS是軟件測試結果的測量單位。一個事務是指一個客戶機向服務器發送請求然后服務器做出反應的過程。客戶機在發送請求時開始計時,收到服務器響應后結束計時,以此來計算使用的時間和完成的事務個數。 一般的,評價系統性能均以每秒鐘完成的技術交易的數量來衡量。系統整體處理能力取決于處理能力最低模塊的TPS值。 例如:天貓雙十一,一秒完成多少訂單 ***** **QPS與TPS的區別是什么** 舉個栗子:假如一個大胃王一秒能吃10個包子,一個女孩子0.1秒能吃1個包子,那么他們是不是一樣的呢?答案是否定的,因為這個女孩子不可能在一秒鐘吃下10個包子,她可能要吃很久。這個時候這個大胃王就相當于TPS,而這個女孩子則是QPS。雖然很相似,但其實是不同的。 **如何提高單機QPS:** 1、機器本身 1.1、cpu 1.2、內存 1.3、IO 1.4、網絡 2、程序代碼 3、邏輯架構 >[info] PHP有哪些數據類型 **布爾,整型,浮點型,字符串,數組,對象,資源,null** ***** 1.四種變量類型 整數型(integer) 浮點數型(float) 布爾型(boolean) 字符串(string) 2.兩種復合類型 數組 (array) 對象(object) 3.兩種特殊類型 NULL 資源 (resource) ***** >[info] isset() 和 empty() 區別? isset判斷變量是否存在,可以傳入多個變量,若其中一個變量不存在則返回假;empty判斷變量是否為空為假,只可 傳一個變量,如果為空為假則返回真。 ***** >[info] 請說明 PHP 中傳值與傳引用的區別。什么時候傳值什么時候傳引用? **按值傳遞:** 函數范圍內對值的任何改變在函數外部都會被忽略 。 **按引用傳遞:** 函數范圍內對值的任何改變在函數外部 也能反映出這些修改。 **優缺點:** 按值傳遞時,php必須復制值。特別是對于大型的字符串和數組和對象來說,這將會是一個代價很大的操作。按引用傳遞則不需要復制值,對于性能提高很有好處。 ***** >[info] foo()和@foo()之間有什么區別? @代表所有warning忽略 ***** >[info] 常見的php的預定義變量有哪些? $GLOBALS — 引用全局作用域中可用的全部變量 $_SERVER — 服務器和執行環境信息 $_GET — HTTP GET 變量 $_POST — HTTP POST 變量 $_FILES — HTTP 文件上傳變量 $_REQUEST — HTTP Request 變量 $_SESSION — Session 變量 $_ENV — 環境變量 $_COOKIE — HTTP Cookies ***** >[info] TCP怎么建立連接? TCP是因特網中的傳輸層協議,使用三次握手協議建立連接。當主動方發出SYN連接請求后,等待對方回答SYN, ACK。這種建立連接的方法可以防止產生錯誤的連接,TCP使用的流量控制協議是可變大小的滑動窗口協議。第一次 握手:建立連接時,客戶端發送SYN包(SEQ=x)到服務器,并進入SYN\_SEND狀態,等待服務器確認。第二次握手: 服務器收到SYN包,必須確認客戶的SYN(ACK=x+1),同時自己也送一個SYN包(SEQ=y),即SYN+ACK包,此時服務器進 入SYN_RECV狀態。第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ACK=y+1),此包發送完 畢,客戶端和服務器時入Established狀態,完成三次握手。 ***** >[info] 代表什么呢? 3 | 6 = 多少?(7) 十進制3轉化為二進制后是:11 十進制6轉化為二進制后是:110 二進制11 | 二進制110 = 111 二進制111轉換成十進制=7 ***** >[info] 簡述 private、 protected、 public修飾符的訪問權限 private : 私有成員, 在類的內部才可以訪問。 protected : 保護成員,該類內部和繼承類中可以訪問。 public : 公共成 員,完全公開,沒有訪問限制。 ***** >[info] 常用的魔術方法有哪些?舉例說明(靠記) ``` __construct() 實例化類時自動調用。 __destruct() 類對象使用結束時自動調用。 __set() 在給未定義的屬性賦值的時候調用。 __get() 調用未定義的屬性時候調用。 __isset() 使用isset()或empty()函數時候會調用。 __unset() 使用unset()時候會調用。 __sleep() 使用serialize序列化時候調用。 __wakeup() 使用unserialize反序列化的時候調用。 __call() 調用一個不存在的方法的時候調用。 __callStatic()調用一個不存在的靜態方法是調用。 __toString() 把對象轉換成字符串的時候會調用。比如 echo。 __invoke() 當嘗試把對象當方法調用時調用。 __set_state() 當使用var_export()函數時候調用。接受一個數組參數。 __clone() 當使用clone復制一個對象時候調用。 ``` >[info] 請列舉幾個php數組函數?(靠記) ![](https://img.kancloud.cn/cc/c9/ccc99679b5c5f5a67e8831f7da6cdc0e_835x1002.png) >[info] session與cookie的區別? 1、cookie數據存放在第三方應用的瀏覽器上,session數據放在服務器上。 2、cookie不是很安全,別人可以分析存放在本地的COOKIE,進行COOKIE欺騙,考慮到安全應當使用session。 3、session會在一定時間內保存在服務器上。當訪問增多,會比較占用你服務器的性能,考慮到減輕服務器性能方 面,應當使用COOKIE。 4、單個cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie。 5、所以個人建議: 將登陸信息等重要信息存放為SESSION 其他信息如果需要保留,可以放在COOKIE >[info] php中===與==區別 ===比較兩個變量的值和類型;==比較兩個變量的值,不比較數據類型。 >[info] 請說說對php中final 關鍵字的理解 PHP 5 新增了一個 final 關鍵字。如果父類中的方法被聲明為 final,則子類無法覆蓋該方法。如果一個類被聲明為 final,則不能被繼承。 >[info] 你用過哪些PHP設計模式? 1、工廠模式 建立一個工廠(一個函數或一個類方法)來制造新的對象 工廠模式 是一種類,它具有為您創建對象的某些方法。您可以使用工廠類創建對象,而不直接使用 new。這樣,如 果您想要更改所創建的對象類型,只需更改該工廠即可。使用該工廠的所有代碼會自動更改。 2、單例模式 單例模式確保某個類只有一個實例,而且自行實例化并向整個系統提供這個實例。 單例模式是一種常見的設計模式,在計算機系統中,線程池、緩存、日志對象、對話框、打印機、數據庫操作、顯卡 的驅動程序常被設計成單例。 單例模式分3種:懶漢式單例、餓漢式單例、登記式單例。 單例模式有以下3個特點: 1.只能有一個實例。 2.必須自行創建這個實例。 3.必須給其他對象提供這一實例。 那么為什么要使用PHP單例模式? PHP一個主要應用場合就是應用程序與數據庫打交道的場景,在一個應用中會存在大量的數據庫操作,針對數據庫句 柄連接數據庫的行為,使用單例模式可以避免大量的new操作。因為每一次new操作都會消耗系統和內存的資源。 3、觀察者模式 1:觀察者模式(Observer),當一個對象狀態發生變化時,依賴它的對象全部會收到通知,并自動更新。 2:場景:一 個事件發生后,要執行一連串更新操作。傳統的編程方式,就是在事件的代碼之后直接加入處理的邏輯。當更新的邏 輯增多之后,代碼會變得難以維護。這種方式是耦合的,侵入式的,增加新的邏輯需要修改事件的主體代碼。 3:觀 察者模式實現了低耦合,非侵入式的通知與更新機制。 定義一個事件觸發抽象類。 4、適配器模式 將各種截然不同的函數接口封裝成統一的API。 PHP中的數據庫操作有MySQL,MySQLi,PDO三種,可以用適配器模式 統一成一致,使不同的數據庫操作,統一成一樣的API。類似的場景還有cache適配器,可以將 memcache,redis,file,apc等不同的緩存函數,統一成一致。 首先定義一個接口(有幾個方法,以及相應的參數)。然 后,有幾種不同的情況,就寫幾個類實現該接口。將完成相似功能的函數,統一成一致的方法。 5、策略模式 策略模式是對象的行為模式,用意是對一組算法的封裝。動態的選擇需要的算法并使用。 策略模式指的是程序中涉及決策控制的一種模式。策略模式功能非常強大,因為這個設計模式本身的核心思想就是面 向對象編程的多態性思想。 策略模式的三個角色: 1.抽象策略角色 2.具體策略角色 3.環境角色(對抽象策略角色的引用) 實現步驟: 1.定義抽象角色類(定義好各個實現的共同抽象方法) 2.定義具體策略類(具體實現父類的共同方法) 3.定義環境角色類(私有化申明抽象角色變量,重載構造方法,執行抽象方法) 就在編程領域之外,有許多例子是關于策略模式的。例如: 如果我需要在早晨從家里出發去上班,我可以有幾個策略考慮:我可以乘坐地鐵,乘坐公交車,走路或其它的途徑。 每個策略可以得到相同的結果,但是使用了不同的資源。 6、注冊模式 注冊模式,解決全局共享和交換對象。已經創建好的對象,掛在到某個全局可以使用的數組上,在需要使用的時候, 直接從該數組上獲取即可。將對象注冊到全局的樹上。任何地方直接去訪問。 >[info] socket 連接步驟? Socket(套接字)概念 套接字(socket)是通信的基石,是支持 TCP/IP 協議的網絡通信的基本操作單元。它是網絡通信過程中端點的抽象 表示,包含進行網絡通信必須的五種信息:連接使用的協議,本地主機的 IP 地址,本地進程的協議端口,遠地主機 的 IP 地址,遠地進程的協議端口。 Socket 連接過程 建立 Socket 連接至少需要一對套接字,其中一個運行于客戶端,稱為 ClientSocket ,另一個運行于服務器端,稱為 ServerSocket 套接字之間的連接過程可以分為三個步驟:服務器監聽,客戶端請求,連接確認。 服務器監聽:是服務器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態,實時監控網絡狀態。 客戶端請求:是指由客戶端的套接字提出連接請求,要連接的目標是服務器端的套接字。為此,客戶端的套接字必須 首先描述它要連接的服務器的套接字,指出服務器端套接字的地址和端口號,然后就向服務器端套接字提出連接請 求。 連接確認:是指當服務器端套接字監聽到或者說接收到客戶端套接字的連接請求,它就響應客戶端 套接字的請求,建立一個新的線程,把服務器端套接字的描述發給客戶端,一旦客戶端確認了此描述,連接就建立好 了。而服務器端套接字繼續處于監聽狀態,繼續接收其他客戶端套接字的連接請求。 >[info] 如何解決超賣問題 * 悲觀鎖 * 樂觀鎖 * 隊列術 * 分布式鎖 >[info] 怎么實現第三方登錄? 第三方登陸主要是基于author協議來實現,下面簡單說下實現流程: 1、首先我們需要以開發者的身份向第三方登陸平臺申請接入應用,申請成功后,我們會獲得一個appID和一個 secrectID. 2、當我們的網站需接入第三方登陸時,會引導用戶跳轉到第三方的登陸授權頁面,此時把之前申請的 appID和secrectID帶給登陸授權頁面。 3、用戶登陸成功后即得到授權,第三方會返回一個臨時的code給我們的網 站。 4、我們的網站接受到code后,再次向我們的第三方發起請求,并攜帶接收的code,從第三方獲取access\_token. 5、第三方處理請求后,會返回一個access\_token給我們的網站,我們的網站獲取到access\_token后就可以調用第三 方提供的接口了,比如獲取用戶信息等。最后把該用戶信息存入到我們站點的數據庫,并把信息保存到session中, 實現用戶的第三方登陸。 >[info] 談談對MVC的認識? 核心思想是:視圖和用戶交互通過事件導致控制器改變 控制器改變導致模型改變 或者控制器同時改變兩者 模型改變 導致視圖改變 或者視圖改變 潛在的從模型里面獲得參數 來改變自己。他的好處是可以將界面和業務邏輯分離。 Model(模型),是程序的主體部分,主要包含業務數據和業務邏輯。在模型層,還會涉及到用戶發布的服務,在服 務中會根據不同的業務需求,更新業務模型中的數據。 View(視圖),是程序呈現給用戶的部分,是用戶和程序交互的接口,用戶會根據具體的業務需求,在View視圖層輸 入自己特定的業務數據,并通過界面的事件交互,將對應的輸入參數提交給后臺控制器進行處理。 Contorller(控制器),Contorller是用來處理用戶 輸入數據,已經更新業務模型的部分。控制器中接收了用戶與界 面交互時傳遞過來的數據,并根據數據業務邏輯來執行服務的調用和更新業務模型的數據和狀態。 >[info] Laravel 中 insert () 和 insertGetId () 函數之間的顯著區別是什么? Insert (): 此函數僅用于將記錄插入數據庫。 不返回自增 ID InsertGetId (): 此函數會在表中插入一條記錄,但當 ID 字段自動遞增時使用。(插入記錄并返回自增的 ID) >[info] 說下你對PHP中trait的理解 Trait 是為類似 PHP 的單繼承語言而準備的一種代碼復用機制。Trait 為了減少單繼承語言的限制,使開發人員能夠 自由地在不同層次結構內獨立的類中復用 method。Trait 和 Class 組合的語義定義了一種減少復雜性的方式,避免 傳統多繼承和 Mixin 類相關典型問題。 Trait 和 Class 相似,但僅僅旨在用細粒度和一致的方式來組合功能。 無法通過 trait 自身來實例化。它為傳統繼承 增加了水平特性的組合;也就是說,應用的幾個 Class 之間不需要繼承。 >[info] 請你說說對OOP思想的理解 面向對象編程(Object Oriented Programming,OOP,面向對象程序設計)是一種計算機編程架構。OOP 的一條 基本原則是計算機程序是由單個能夠起到子程序作用的單元或對象組合而成。 核心思想:封裝,繼承,多態. OOP 達到了軟件工程的三個主要目標:重用性、靈活性和擴展性。為了實現整體運算,每個對象都能夠接收信息、處理數 據和向其它對象發送信息。 >[info] PHP實現協程的方式是什么?(yield) 協程:可以理解就是一種用戶空間線程。 協程,有幾個特點: * 協同,因為是由程序員自己寫的調度策略,其通過協作而不是搶占來進行切換 * 在用戶態完成創建,切換和銷毀 * 從編程角度上看,協程的思想本質上就是控制流的主動讓出(yield)和恢復(resume)機制 * 迭代器經常用來實現協程 >[info] 談談你對TCP連接是如何建立和斷開的 三次握手 四次揮手 >[info] TCP和UDP的區別是什么? 簡約的回答: * TCP 是面向連接的,UDP 是面向無連接的 * UDP程序結構較簡單 * TCP 是面向字節流的,UDP 是基于數據報文的 * TCP 保證數據正確性,UDP 可能丟包 * TCP 保證數據順序,UDP 不保證 ``` 1、TCP面向連接(如打電話要先撥號建立連接);UDP是無連接的,即發送數據之前不需要建立連接 2、TCP提供可靠的服務。也就是說,通過TCP連接傳送的數據,無差錯,不丟失,不重復,且按序到達;UDP盡最大努力交 付,即不保證可靠交付 3、TCP面向字節流,實際上是TCP把數據看成一連串無結構的字節流;UDP是面向報文的 UDP沒有擁塞控制,因此網絡出現擁塞不會使源主機的發送速率降低(對實時應用很有用,如IP電話,實時視頻會議等) 4、每一條TCP連接只能是點到點的;UDP支持一對一,一對多,多對一和多對多的交互通信 5、TCP首部開銷20字節;UDP的首部開銷小,只有8個字節 6、TCP的邏輯通信信道是全雙工的可靠信道,UDP則是不可靠信道 ``` >[info] 構造函數和析構函數的理解 **構造函數:** PHP 5 允行開發者在一個類中定義一個方法作為構造函數。具有構造函數的類會在每次創建新對象時先調 用此方法,所以非常適合在使用對象之前做一些初始化工作 **析構函數:** PHP 5 引入了析構函數的概念。析構函數會在到某個對象的所有引用都被刪除或者當對象被顯式銷毀時執 行 >[info] PHP如何獲取客戶端/服務端 IP,以及客戶端真實IP 客戶端IP: $_SERVER['REMOTE_ADDR'] 服務端IP: $_SERVER['SERVER_ADDR'] 客戶端IP(代理透傳): $_SERVER['HTTP_X_FORWARDED_FOR'] >[info] 如何解決PHP內存溢出問題? 1、ini_set('memory_limit','500M'); 2、unset使用完畢的變量 3、分批處理,避免生成大數組 >[info] PHP的垃圾回收機制(GC)中的zval變量容器是干啥用的 引用計數器,如果按著了xdebug,可以打印出 ``` <?php $a = "new string"; $c = $b = $a; xdebug_debug_zval( 'a' ); unset( $b, $c ); xdebug_debug_zval( 'a' ); ?> ``` 以上例程會輸出: ``` a: (refcount=3, is_ref=0)='new string' a: (refcount=1, is_ref=0)='new string' ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看