十一假期即將結束 不如復習下Python基礎

博客地址:https://ask.hellobi.com/blog/zhiji 歡迎大家來交流學習。

十一小長長長長長長長長假還有一天,
然而,
你不愿再沖進擁擠的人潮,
不愿再涌向苦等的隊伍,
不愿再成為那個躺在床上
觀看別人朋友圈的人。
或許,
我可以將你的焦慮、你的不安、你的無聊,
統統劃掉!并且還將帶給你一大波(python)豪(基)禮(礎),
對,你沒看錯!快來手把手跟我復習Python基礎。

結尾有彩蛋

??本文偏理論,想到哪里就寫到哪里,沒有頭緒-,- 各位看官將就著看。

一、python是什么?

  • Python是一種解釋型語言。這就是說,與C語言和C的衍生語言不同,Python代碼在運行之前不需要編譯。其他解釋型語言還包括PHP和Ruby。
  • Python是動態類型語言,指的是你在聲明變量時,不需要說明變量的類型。你可以直接編寫類似x=111和x="I'm a string"這樣的代碼,程序不會報錯。
  • Python非常適合面向對象的編程(OOP),因為它支持通過組合(composition)與繼承(inheritance)的方式定義類(class)。Python中沒有訪問說明符(access specifier,類似C++中的public和private),這么設計的依據是“大家都是成年人了”。
  • 在Python語言中,函數是第一類對象(first-class objects)。這指的是它們可以被指定給變量,函數既能返回函數類型,也可以接受函數作為輸入。類(class)也是第一類對象。
  • Python代碼編寫快,但是運行速度比編譯語言通常要慢。好在Python允許加入基于C語言編寫的擴展,因此我們能夠優化代碼,消除瓶頸,這點通常是可以實現的。numpy就是一個很好地例子,它的運行速度真的非常快,因為很多算術運算其實并不是通過Python實現的。
  • Python用途非常廣泛——網絡應用,自動化,科學建模,大數據應用,等等。它也常被用作“膠水語言”,幫助其他語言和組件改善運行狀況。
  • Python讓困難的事情變得容易,因此程序員可以專注于算法和數據結構的設計,而不用處理底層的細節。

1.python數據結構

Python中常見的數據結構可以統稱為容器(container)。序列(如列表和元組)、映射(如字典)以及集合(set)是三類主要的容器。

2.設計模式

設計模式(Design pattern)代表了最佳的實踐,通常被有經驗的面向對象的軟件開發人員所采用。設計模式是軟件開發人員在軟件開發過程中面臨的一般問題的解決方案。

1 . 抽象工廠模式 為一個產品族提供了統一的創建接口。當需要這個產品族的某一系列的時候,可以從抽象工廠中選出相應的系列創建一個具體的工廠類。

2 . 工廠方法模式 定義一個接口用于創建對象,但是讓子類決定初始化哪個類。工廠方法把一個類的初始化下放到子類。

3 . 生成器模式 將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。

4 . 單例模式 確保一個類只有一個實例,并提供對該實例的全局訪問。

class Singleton(object):
    def __new__(cls, *args, **kwargs):    
         if not hasattr(cls, '_instance'):
              cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
         return cls._instance

5 . 適配器模式 將某個類的接口轉換成客戶端期望的另一個接口表示。適配器模式可以消除由于接口不匹配所造成的類兼容性問題。

6 . 觀察者模式 在對象間定義一個一對多的聯系性,由此當一個對象改變了狀態,所有其他相關的對象會被通知并且自動刷新。

3.棧和隊列

1.什么是棧

想象一摞被堆起來的書,這就是棧。這堆書的特點是,最后被堆進去的書,永遠在最上面。從這堆書里面取一本書出來,取哪本書最方便?肯定是最上面那本。棧這種數據結構的特點就是如此:后進先出(Last In First Out - LIFO),即最后被堆進去的數據,最先被拿出來。

2.棧的Python實現

class Stack(object):
    # 初始化棧為空列表
    def __init__(self):
        self.items = []

    # 判斷棧是否為空,返回布爾值
    def is_empty(self):
        return self.items == []

    # 返回棧頂元素
    def peek(self):
        return self.items[len(self.items) - 1]

    # 返回棧的大小
    def size(self):
        return len(self.items)

    # 把新的元素堆進棧里面(程序員喜歡把這個過程叫做壓棧,入棧,進棧……)
    def push(self, item):
        self.items.append(item)

    # 把棧頂元素丟出去(程序員喜歡把這個過程叫做出棧……)
    def pop(self, item):
        return self.items.pop()

Python里面實現棧,就是把list包裝成一個類,再添加一些方法作為棧的基本操作。其他的數據結構在Python中也是以類似的方式實現的。

3.隊列Queue()

隊列是一種列表,不同的是隊列只能在隊尾插入元素,在隊首刪除元素。隊列用于存儲按順序排列的數據,先進先出,這點和棧不一樣,在棧中,最后入棧的元素反而被優先處理。
隊列是一種先進先出(First-In-First-Out,FIFO)的數據結構。隊列被用在很多地方,比如提交操作系統執行的一系列進程、打印任務池等,一些仿真系統用隊列來模擬銀行或雜貨店里排隊的顧客。
隊列的兩種主要操作是:向隊列中插入新元素和刪除隊列中的元素。插入操作也叫做入隊,刪除操作也叫做出隊。入隊操作在隊尾插入新元素,出隊操作刪除隊頭的元素。

4.python的垃圾回收機制

通過“引用計數”(reference counting)來跟蹤和回收垃圾。
在引用計數的基礎上,還可以通過“標記-清除”(mark and sweep)解決容器對象可能產生的循環引用的問題。
通過“分代回收”(generation collection)以空間換取時間來進一步提高垃圾回收的效率。

5.組合和繼承?

組合和繼承我們傾向于選擇組合,繼承體現的是一種專門化的概念而組合則是一種組裝的概念

6.python代碼中使用try except的優缺點?

優點: 正常操作代碼的控制流不會和錯誤處理代碼混在一起. 當某種條件發生時, 它也允許控制流跳過多個框架;集中報錯。

缺點: 可能會導致讓人困惑的控制流. 調用庫時容易錯過錯誤情況。

7.SOCKET編程

Socket是進程通訊的一種方式,即調用這個網絡庫的一些API函數實現分布在不同主機的相關進程之間的數據交換。
適用場合:socket是位于傳輸層的網絡編程了,一般用于需要自己定義應用層的協議的應用程序。

socket的結構:socket的結構很簡單,只有三個元素,協議,端口號,IP地址。Socket=Ip address+ TCP/UDP + port

TCP和UDP的區別:(TCP)傳輸控制協議,是一種提供可靠數據傳輸的通用協議。(UDP)用戶數據報協議,是一個面向無連接的協議。采用該協議不需要兩個應用程序先建立連接。UDP協議不提供差錯恢復,不能提供數據重傳,因此該協議傳輸數據安全性差。

8.樂觀鎖和悲觀鎖?

  • 悲觀鎖:假定會發生并發沖突,屏蔽一切可能違反數據完整性的操作
  • 樂觀鎖:假設不會發生并發沖突,只在提交操作時檢查是否違反數據完整性。

9.三次握手

1.客戶端通過向服務器端發送一個SYN來創建一個主動打開,作為三次握手的一部分。客戶端把這段連接的序號設定為隨機數 A。

2.服務器端應當為一個合法的SYN回送一個SYN/ACK。ACK 的確認碼應為 A+1,SYN/ACK 包本身又有一個隨機序號 B。

3.最后,客戶端再發送一個ACK。當服務端受到這個ACK的時候,就完成了三路握手,并進入了連接創建狀態。此時包序號被設定為收到的確認號 A+1,而響應則為 B+1。

10.四次揮手

TCP的連接的拆除需要發送四個包,因此稱為四次揮手(four-way handshake)。客戶端或服務器均可主動發起揮手動作,在socket編程中,任何一方執行close()操作即可產生揮手操作。

(1)客戶端A發送一個FIN,用來關閉客戶A到服務器B的數據傳送。
(2)服務器B收到這個FIN,它發回一個ACK,確認序號為收到的序號加1。和SYN一樣,一個FIN將占用一個序號。
(3)服務器B關閉與客戶端A的連接,發送一個FIN給客戶端A。
(4)客戶端A發回ACK報文確認,并將確認序號設置為收到序號加1。

11.HTTP和HTTPS

HTTPS(全稱:Hypertext Transfer Protocol over Secure Socket Layer),是以安全為目標的HTTP通道,簡單講是HTTP的安全版。
超文本傳輸協議 (HTTP-Hypertext transfer protocol) 是一種詳細規定了瀏覽器和萬維網服務器之間互相通信的規則,通過因特網傳送萬維網文檔的數據傳送協議。
HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,要比http協議安全。

HTTPS和HTTP的區別主要如下:
  1、https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用。
  2、http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協議。
  3、http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。
  4、http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。

12.Python2和3一些區別

1. __future__模塊

from __future__ import division 如果你希望在Python 2環境下寫的代碼也可以在Python 3.x中運行,那么建議使用__future__模塊。

2.print函數

Python 2中的print語句被Python 3中的print()函數取代,這意味著在Python 3中必須用括號將需要輸出的對象括起來。

3.整數除法

整型除法返回浮點數,要得到整型結果,在python3中使用//
Python2中: 3 / 2 = 1
Python3中:3 / 2 = 1.5

4.Unicode

Python 3中,終于有了Unicode(utf-8)字符串,以及兩個字節類:bytes和bytearrays。

5.Xrange

在Python 3中,range()的實現方式與xrange()函數相同,所以就不存在專用的xrange()(在Python 3中使用xrange()會觸發NameError)。

6.異常處理

Python 3中的異常處理也發生了一點變化。在Python 3中必須使用“as”關鍵字。

try:
    .......
except NameError as err:

Python2:

try:
    .......
except NameError, err:
7.Python 3改進了input()函數,這樣該函數就會總是將用戶的輸入存儲為str對象。在Python 2中,為了避免讀取非字符串類型會發生的一些危險行為,不得不使用raw_input()代替input()。

13.GIL 含義、多線程、多線程、 協程區別

進程有哪幾種基本狀態?

1、就緒狀態 當進程已分配到除 CPU 以外的所有必要的資源,只要獲得
處理機便可立即執行,這時的進程狀態稱為就緒狀態。

2、執行狀態 當進程已獲得處理機,其程序正在處理機上執行,此時的進程狀態稱為執行狀態。

3、阻塞狀態 正在執行的進程,由于等待某個事件發生而無法執行時,便放棄處理機而處于阻塞狀態。引起進程阻塞的事件可有多種,例如,等待 I/O 完成、申請緩沖區不能滿足、等待信件(信號)等。

  • GIL,即全局解釋器鎖(Global Interpreter Lock),是計算機程序設計語言解釋器用于同步線程的工具,使得任何時刻僅有一個線程在執行。CPython 中用
    GIL 來控制線程的執行,只有拿到 GIL 的線程才能執行。在 CPython 的運行中,有些內部資源不是線程安全的,所以需要有一個全局鎖來保護。這就造成了即使在多核CPU中,多線程也只是做著分時切換而已。意義只是每條語句宏觀上并發執行,并不能提升效率,只是并發,而沒有并行。

注意:GIL 只存在于CPython 中,其他 PyPy、IronPython、Jython 沒有這個問題。

  • 進程:進程之間不共享任何狀態,進程的調度由操作系統完成,每個進程都有自己的獨立的內存空間,進程間的通訊主要是通過信號傳遞的方式來實現的,實現的方式有多種,信號量,管道,事件等,任何一種方式的通訊效率都需要通過內核,導致通訊效率比較低。由于是獨立的內存空間,上下文切換的時候需要先保存調用棧的信息,CPU 各寄存器的信息,虛擬內存,以及打開的相關句柄等信息,所以導致上下文進程間切換開銷很大,通訊麻煩。

  • 線程:線程之間共享變量,解決了通訊麻煩的問題,但對變量的訪問需要鎖,線程的調度主要也是有操作系統完成,一個進程可以擁有多個線程,但是其中每個線程會共享父進程向操作系統申請資源,這個包括虛擬內存,文件等,由于是共享資源,所以創建線程所需要的系統資源占用比進程小很多,相應的可創建的線程數量也變得相對多很多。線程時間的通訊除了可以使用進程之間通訊的方式之外還可以通過共享內存的方式進行通信,所以這個速度比通過內核要快很多。另外在調度方面也是由于內存是共享的,所以上下文切換的時候需要保存的東西就相對少一些,這樣一來上下文切換也變得高效

  • 協程:協程的調度完全由用戶控制,一個線程可以有多個協程,用戶創建了幾個協程,然后每個協程都是循環按照指定的任務清單順序完成不同的任務,當任務被堵塞的時候執行下一個任務,當恢復的時候再回來執行這個任務,任務之間的切換只需要保存每個任務的上下文內容,就像直接操作棧一樣的,這樣就完全沒有內核

14.裝飾器、生成器 、迭代器

  • 迭代器:迭代器是訪問集合元素的一種方式。迭代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。
    特點:
    1.訪問者不需要關心迭代器內部的結構,僅需通過next()方法不斷去取下一個內容
    2.不能隨機訪問集合中的某個值 ,只能從頭到尾依次訪問
    3.訪問到一半時不能往回退
    4.便于循環比較大的數據集合,節省內存
  • 生成器:一個函數調用時返回一個迭代器,那這個函數就叫做生成器(generator),如果函數中包含yield語法,那這個函數就會變成生成器。
    這個yield的主要效果呢,就是可以使函數中斷,并保存中斷狀態,中斷后,代碼可以繼續往下執行,過一段時間還可以再重新調用這個函數,從上次yield的下一句開始執行。
  • 裝飾器:裝飾器(Decorator)是python中最吸引人的特性,可以讓已有的函數不做任何改動的情況下增加功能。

二、數據庫

1.數據庫升序降序

數據庫 中使用order by語句進行排序,其中升序用asc,降序用desc。
如:

select * from t order by 列a asc;     -- 這是升序 asc可以省略不寫
select * from t order by 列a desc;    -- 這是降序 

2.Mysql優化

  • 大部分 MySQL 服務器都有查詢緩存功能。這是提高性能的最有效的方法之一,這是由數據庫引擎私下處理的。當同一個查詢被多次執行,結果會直接從緩存里提取,這樣速度就很快。
  • 獲取唯一行時使用 LIMIT 1
    有時當你查表時,你已經知道你正在查找的結果只有一行。你可能正在獲取唯一記錄,或者你可能只是查詢是否存在滿足你的 WHERE 子句條件的記錄。
    在這種情況下,將 LIMIT 1 添加到查詢條件中可以提高性能。這樣,數據庫引擎將在找到剛剛第一個記錄之后停止掃描記錄,而不是遍歷整個表或索引
  • 避免使用 SELECT *
  • 索引搜索字段

3.Mysql 的連接查詢有哪些

  • INNER JOIN(內連接,或等值連接):取得兩個表中存在連接匹配關系的記錄。

  • LEFT JOIN(左連接):取得左表(table1)完全記錄,即是右表(table2)并無對應匹配記錄。

  • RIGHT JOIN(右連接):與 LEFT JOIN 相反,取得右表(table2)完全記錄,即是左表(table1)并無匹配對應記錄。

4.mysql 常用的引擎InnoDB(我用的是InnoDB)

優點:InnoDB 支持事務,事務是一種高級的處理方式,如在一些列增刪改中只要哪個出錯還可以回滾還原;支持外鍵;

缺點:清空整個表時,InnoDB 是一行一行的刪除,效率非常慢。

5.redis 基本類型

Redis 支持五種數據類型:string(字符串)、hash(哈希)、list(列表)、set(集合)及 zset(sorted set:有序集合)。

6.數據庫的隔離級別

(一)可讀取未確認(Read uncommitted)

寫事務阻止其他寫事務,避免了更新遺失。但是沒有阻止其他讀事務。
存在的問題:臟讀。即讀取到不正確的數據,因為另一個事務可能還沒提交最終數據,這個讀事務就讀取了中途的數據,這個數據可能是不正確的。
解決辦法就是下面的“可讀取確認”。

(二)可讀取確認(Read committed)

寫事務會阻止其他讀寫事務。讀事務不會阻止其他任何事務。
存在的問題:不可重復讀。即在一次事務之間,進行了兩次讀取,但是結果不一樣,可能第一次id為1的人叫“李三”,第二次讀id為1的人就叫了“李四”。因為讀取操作不會阻止其他事務。
解決辦法就是下面的“可重復讀”。

(三)可重復讀(Repeatable read)

讀事務會阻止其他寫事務,但是不會阻止其他讀事務。
存在的問題:幻讀。可重復讀阻止的寫事務包括update和delete(只給存在的表加上了鎖),但是不包括insert(新行不存在,所以沒有辦法加鎖),所以一個事務第一次讀取可能讀取到了10條記錄,但是第二次可能讀取到11條,這就是幻讀。
解決辦法就是下面的“串行化”。

(四)可串行化(Serializable)

讀加共享鎖,寫加排他鎖。這樣讀取事務可以并發,但是讀寫,寫寫事務之間都是互斥的,基本上就是一個個執行事務,所以叫串行化。

7.數據庫的ACID

ACID,是指在可靠數據庫管理系統(DBMS)中,事務(transaction)所應該具有的四個特性:/原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)

8.同步異步、阻塞非阻塞

同步和異步關注的是消息通信機制 (synchronous communication/ asynchronous communication)。

  • 所謂同步,就是在發出一個調用時,在沒有得到結果之前,該調用就不返回。
    但是一旦調用返回,就得到返回值了。
    換句話說,就是由調用者主動等待這個調用的結果。
  • 而異步則是相反,調用在發出之后,這個調用就直接返回了,所以沒有返回結果。換句話說,當一個異步過程調用發出后,調用者不會立刻得到結果。而是在調用發出后,被調用者通過狀態、通知來通知調用者,或通過回調函數處理這個調用。

舉個通俗的例子:
你打電話問書店老板有沒有《分布式系統》這本書,如果是同步通信機制,書店老板會說,“你稍等,我查一下”,然后開始查啊查,等查好了(可能是 5 秒,也可能是一天)告訴你結果(返回結果)。
而異步通信機制,書店老板直接告訴你我查一下啊,查好了打電話給你,然后直接掛電話了(不返回結果)。然后查好了,他會主動打電話給你。在這里老板通過“回電”這種方式來回調。

阻塞和非阻塞關注的是程序在等待調用結果(消息,返回值)時的狀態.
阻塞調用是指調用結果返回之前,當前線程會被掛起。調用線程只有在得到結果之后才會返回。
非阻塞調用指在不能立刻得到結果之前,該調用不會阻塞當前線程。


三、Web框架

1.CGI和WSGI

CGI是通用網關接口,是連接web服務器和應用程序的接口,用戶通過CGI來獲取動態數據或文件等。

CGI程序是一個獨立的程序,它可以用幾乎所有語言來寫,包括perl,c,lua,python等等。

WSGI, Web Server Gateway Interface,是Python應用程序或框架和Web服務器之間的一種接口,WSGI的其中一個目的就是讓用戶可以用統一的語言(Python)編寫前后端。

2.XSRF和XSS

  • CSRF(Cross-site request forgery)跨站請求偽造
  • XSS(Cross Site Scripting)跨站腳本攻擊

CSRF重點在請求,XSS重點在腳本

3.Django 的架構

Django 采用 MVT 的架構模式:M 為 Model 模型層,是對數據庫的數據的抽象與映射;V 為 View 視圖層,在此層中進行業務邏輯的處理,包括操作 model和為模版層提供數據;T 為 Template 模版層,負責前端頁面的展示。

4.django 對數據查詢結果排序怎么做,降序怎么做,查詢大于某個字段怎么做。

  • 排序使用 order_by(),如 Entry.objects.order_by('blog__name', 'headline')
  • 降序需在排序的字段名前加-,如 Entry.objects.order_by('-pub_date')
  • 查詢字段大于某個值:使用 filter(字段名__gt=值),如
    Entry.objects.filter(pubdate__gt='2006-01-01')

5.Django處理request的流程

  • 用戶通過瀏覽器請求一個頁面
  • 請求到達Request Middlewares,中間件對request做一些預處理或者直接response請求
  • URLConf通過urls.py文件和請求的URL找到相應的View
  • View Middlewares被訪問,它同樣可以對request做一些處理或者直接返回response
  • 調用View中的函數
  • View中的方法可以選擇性的通過Models訪問底層的數據
  • 所有的Model-to-DB的交互都是通過manager完成的
  • 如果需要,Views可以使用一個特殊的Context
  • Context被傳給Template用來生成頁面
    • Template使用Filters和Tags去渲染輸出
    • 輸出被返回到View
    • HTTPResponse被發送到Response Middlewares
    • 任何Response Middlewares都可以豐富response或者返回一個完全不同的response
    • Response返回到瀏覽器,呈現給用戶

Middleware(中間件,包括request, view, exception, response),URLConf(url映射關系),Template(模板系統)

6.Django 的 queryset 使用

在進行數據查詢時,使用 all()、filter()、exclude()等會返回 Queryset,在對Queryset 進行過濾鏈式操作的時候返回的還是 Queryset,我們可以對返回的Queryset 進行排序、切片、過濾、去重等操作。

7.Django 與 Tornado 的對比

Django 是一個大而全的框架,其設計初衷是為了快速開發,所以提供了豐富的套件供開發使用。其框架的所有業務與其內置的 ORM 緊密相關,還提供了自動化的 Admin 管理后臺。

而 Tornado 不僅僅是 Web 框架,其還提供了一個高性能的 Web 服務器,其設計初衷就是為了解決性能瓶頸問題,目的要打造一個高性能的開發框架。 Tornado 作為 Web 框架要比 Django 輕量的多,沒有提供豐富的套件,比如沒有ORM、管理后臺、表單系統,甚至沒有 session 機制,但是提供了異步機制、 WebSocket 等 Django 沒有的功能,屬于靈活的輕量級框架。

8.Torando 的優缺點

Tornado 的優點是利用 epoll 機制實現了高性能,并以此提供了異步機制,可以達到異步非阻塞;框架輕量靈活;

其缺點是:Tornado 的運行是單進程的,一旦在處理一個請求時出現了阻塞,將影響整體性能,所有在 Tornado 的開發中要避免阻塞,出現阻塞的地方使用異步,而對于接入的第三方庫或 SDK 往往并沒有提供對 Tornado 框架的異步支持,所以使用第三方接口時需要我們重復造輪子,自己封裝針對于 Tornado 異步的接口調用庫。

9.Tornado 的工作原理

1.ioloop 是 tornado 運行的核心

2.ioloop 封裝了操作管理 epoll 的工作

3.當 ioloop 實例啟動時,ioloop 將服務器監聽的 socket 添加到 epoll 容器中,然后循環等待 epoll 返回可處理的 socket

4.當有客戶端發起連接后,ioloop 從 epoll 容器中拿到了服務器監聽的 socket,并調用服務器實例處理該監聽 socket 的方法,接收連接請求,并將新的與客戶端對應的 socket 添加到 epoll 容器中,然后繼續循環等待 epoll 返回可處理的 socket

5.當客戶端發送過來請求數據后,ioloop 從 epoll 中拿到了接收數據的 socket,并調用服務器實例處理該傳輸 socket 的方法,從 socket 中讀取出 http 報文數據,解析后調用 Application 的實例,進行路由分發,實例化具體的 RequestHandler,執行其中的具體 http 方法,生成響應數據并打包成 http 報文寫入到緩沖區中。

6.當與客戶端對應的 socket 可寫時,ioloop 從 epoll 中拿到了對應可寫的 socket,將緩沖區中對應的響應報文數據寫入到 socket 中傳回給客戶端,完成請求處理。

7.epoll 每次只返回給 ioloop 可以處理的 socket,然后 ioloop 對拿到的 socket 依次進行處理,有效充分地利用了 cpu 時間,進而達到提升支持高并發的能力。

10.apache和nginx的區別

nginx 相對 apache 的優點:

  • 輕量級,同樣起web 服務,比apache 占用更少的內存及資源
  • 抗并發,nginx 處理請求是異步非阻塞的,支持更多的并發連接,而apache 則是阻塞型的,在高并發下nginx 能保持低資源低消耗高性能
  • 配置簡潔
  • 高度模塊化的設計,編寫模塊相對簡單
  • 社區活躍

apache 相對nginx 的優點:

  • rewrite ,比nginx 的rewrite 強大
  • 模塊超多,基本想到的都可以找到
  • 少bug ,nginx 的bug 相對較多
  • 超穩定

11.SOAP

SOAP(原為Simple Object Access Protocol的首字母縮寫,即簡單對象訪問協議)是交換數據的一種協議規范,使用在計算機網絡Web服務(web service)中,交換帶結構信息。SOAP為了簡化網頁服務器(Web Server)從XML數據庫中提取數據時,節省去格式化頁面時間,以及不同應用程序之間按照HTTP通信協議,遵從XML格式執行資料互換,使其抽象于語言實現、平臺和硬件。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,030評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,310評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,951評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,796評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,566評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,055評論 1 322
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,142評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,303評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,799評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,683評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,899評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,409評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,135評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,520評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,757評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,528評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,844評論 2 372

推薦閱讀更多精彩內容