基礎題(一)

一、Python和Java、PHP、C、C#、C++等其餘語言的對比?php


 

(1)C語言java

  C語言,它既有高級語言的特色,又具備彙編語言的特色,它是結構式語言。C語言應用指針:能夠直接進行靠近硬件的操做,可是C的指針操做不作保護,也給它帶來了不少不安全的因素。C++在這方面作了改進,在保留了指針操做的同時又加強了安全性,受到了一些用戶的支持,可是,因爲這些改進增長語言的複雜度,也爲另外一部分所詬病。Java則吸收了C++的教訓,取消了指針操做,也取消了C++改進中一些備受爭議的地方,在安全性和適合性方面均取得良好的效果,但其自己解釋在虛擬機中運行,運行效率低於C++/C。通常而言,C,C++,java被視爲同一系的語言,它們長期佔據着程序使用榜的前三名。python

  C語言的優勢程序員

  簡潔緊湊、靈活方便;運算符豐富;數據類型豐富;表達方式靈活實用;容許直接訪問物理地址,對硬件進行操做;生成目標代碼質量高,程序執行效率高;可移植性好;表達力強;數據庫

  C語言的缺點編程

  C語言的缺點主要表如今數據的封裝性上,這一點使得C在數據的安全性上有很大缺陷,這也是C和C++的一大區別。 C語言的語法限制不太嚴格,對變量的類型約束不嚴格,影響程序的安全性,對數組下標越界不做檢查等。從應用的角度,C語言比其餘高級語言較難掌握。也就是說,對用C語言的人,要求對程序設計更熟練一些。windows

(2)C#語言數組

  C#是微軟公司發佈的一種面向對象的、運行於.NET Framework之上的高級程序設計語言。C#看起來與Java有着驚人的類似;它包括了諸如單一繼承、接口、與Java幾乎一樣的語法和編譯成中間代碼再運行的過程。可是C#與Java有着明顯的不一樣,它借鑑了Delphi的一個特色,與COM(組件對象模型)是直接集成的,並且它是微軟公司 .NET windows網絡框架的主角。首先,C# 和JAVA同樣,簡直就是照搬了C++的部分語法,所以,對於數量衆多的C++程序員學習起來很容易上手,另外,對於新手來講,比C++要簡單一些。其次,Windows是佔壟斷地位的平臺,而開發Windows應用,固然微軟的聲音是不能忽略的。最重要的是,相對於C++,用C# 開發應用軟件能夠大大縮短開發週期,同時能夠利用原來除用戶界面代碼以外的C++代碼。瀏覽器

(3)Java語言安全

  Java語言,Java是一種能夠撰寫跨平臺應用軟件的面向對象的程序設計語言,是由Sun Microsystems公司於1995年5月推出的Java程序設計語言和Java平臺(即JavaSE, JavaEE, JavaME)的總稱。Java 技術具備卓越的通用性、高效性、平臺移植性和安全性,普遍應用於我的PC、數據中心、遊戲控制檯、科學超級計算機、移動電話和互聯網,同時擁有全球最大的開發者專業社羣。在全球雲計算和移動互聯網的產業環境下,Java更具有了顯著優點和廣闊前景。
  Java的優點,與傳統程序不一樣,Sun 公司在推出 Java 之際就將其做爲一種開放的技術。全球數以萬計的 Java 開發公司被要求所設計的 Java軟件必須相互兼容。「Java 語言靠羣體的力量而非公司的力量」是Sun公司的口號之一,並得到了廣大軟件開發商的認同。這與微軟公司所倡導的注重精英和封閉式的模式徹底不一樣。Sun 公司對 Java 編程語言的解釋是:Java 編程語言是個簡單、面向對象、分佈式、解釋性、健壯、安全與系統無關、可移植、高性能、多線程和動態的語言。

(4)php語言 

  PHP(PHP: Hypertext Preprocessor的縮寫,中文名:「PHP:超文本預處理器」)是一種通用開源腳本語言。語法吸取了C語言、Java和Perl的特色,入門門檻較低,易於學習,使用普遍,主要適用於Web開發領域。
     特性:PHP 獨特的語法混合了 C、Java、Perl 以及 PHP 自創新的語法;PHP能夠比CGI或者Perl更快速的執行動態網頁——動態頁面方面,與其餘的編程語言相比,PHP是將程序嵌入到HTML文檔中去執行執行效率比徹底生成htmL標記的CGI要許多,PHP具備很是強大的功能,全部的CGI的功能PHP都能實現; PHP支持幾乎全部流行的數據庫以及操做系統;最重要的是PHP能夠用C、C++進行程序的擴展。

(5)python語言

  python語言,是一種面向對象、直譯式計算機程序設計語言,Python語法簡潔而清晰,具備豐富和強大的類庫。它常被暱稱爲膠水語言,它可以很輕鬆的把用其餘語言製做的各類模塊(尤爲是C/C++)輕鬆地聯結在一塊兒。常見的一種應用情形是,使用python快速生成程序的原型(有時甚至是程序的最終界面),而後對其中有特別要求的部分,用更合適的語言改寫。
  Python是徹底面向對象的語言。函數、模塊、數字、字符串都是對象。而且徹底支持繼承、重載、派生、多繼承,有益於加強源代碼的複用性。Python支持重載運算符和動態類型。相對於Lisp這種傳統的函數式編程語言,Python對函數式設計只提供了有限的支持。有兩個標準庫(functools, itertools)提供了Haskell和Standard ML中久經考驗的函數式程序設計工具。Python自己被設計爲可擴充的。並不是全部的特性和功能都集成到語言核心。Python提供了豐富的API和工具,以便程序員可以輕鬆地使用C語言、C++、Cython來編寫擴充模塊。Python編譯器自己也能夠被集成到其它須要腳本語言的程序內。所以,不少人還把Python做爲一種「膠水語言」(glue language)使用。使用Python將其餘語言編寫的程序進行集成和封裝

 二、簡述解釋型和編譯型編程語言?


 

  解釋型語言編寫的程序不須要編譯,在執行的時候,專門有一個解釋器可以將VB語言翻譯成機器語言,每一個語句都是執行的時候才翻譯。這樣解釋型語言每執行一次就要翻譯一次,效率比較低。

  用編譯型語言寫的程序執行以前,須要一個專門的編譯過程,經過編譯系統,把源高級程序編譯成爲機器語言文件,翻譯只作了一次,運行時不須要翻譯,因此編譯型語言的程序執行效率高,但也不能一律而論,部分解釋型語言的解釋器經過在運行時動態優化代碼,甚至可以使解釋型語言的性能超過編譯型語言。

 三、Python解釋器種類以及特色?


 

Python是一門解釋器語言,代碼想運行,必須經過解釋器執行,Python存在多種解釋器,分別基於不一樣語言開發,每一個解釋器有不一樣的特色,但都能正常運行Python代碼,如下是經常使用的五種Python解釋器:

(1)CPython

  當從Python官方網站下載並安裝好Python2.7後,就直接得到了一個官方版本的解釋器:Cpython,這個解釋器是用C語言開發的,因此叫 CPython,在命名行下運行python,就是啓動CPython解釋器,CPython是使用最廣的Python解釋器。

(2)IPython

  IPython是基於CPython之上的一個交互式解釋器,也就是說,IPython只是在交互方式上有所加強,可是執行Python代碼的功能和CPython是徹底同樣的,比如不少國產瀏覽器雖然外觀不一樣,但內核實際上是調用了IE。

(3)PyPy

  PyPy是另外一個Python解釋器,它的目標是執行速度,PyPy採用JIT技術,對Python代碼進行動態編譯,因此能夠顯著提升Python代碼的執行速度。

(4)Jython

  Jython是運行在Java平臺上的Python解釋器,能夠直接把Python代碼編譯成Java字節碼執行。

(5)IronPython

  IronPython和Jython相似,只不過IronPython是運行在微軟.Net平臺上的Python解釋器,能夠直接把Python代碼編譯成.Net的字節碼。

在Python的解釋器中,使用普遍的是CPython,對於Python的編譯,除了能夠採用以上解釋器進行編譯外,技術高超的開發者還能夠按照本身的需求自行編寫Python解釋器來執行Python代碼,十分的方便!

 四、位和字節的關係?


 

1. bit:位
    一個二進制數據0或1,是1bit;

2. byte:字節
    存儲空間的基本計量單位,如:MySQL中定義 VARCHAR(45)  便是指 45個字節;
    1 byte = 8 bit

3. 一個英文字符佔一個字節(視編碼而定);
    1 字母 = 1 byte = 8 bit

4. 一個漢字佔2個字節(視編碼而定);
    1 漢字 = 2 byte = 16 bit

5. 標點符號
    A>.  漢字輸入狀態下,默認爲全角輸入方式;
    B>.  英文輸入狀態下,默認爲半角輸入方式;

    C>.  全角輸入方式下,標點符號佔2字節;
    D>.  半角輸入方式下,標點符號佔1字節;

    故:漢字輸入狀態下的字符,佔2個字節 (但不排除,本身更改了默認設置);
            英文輸入狀態下的字符,佔1個字節 (但不排除,本身更改了默認設置);

五、b、B、KB、MB、GB 的關係?


 

  b 比特bit / 位 
  B——字節
  KB——千比特
  MB——兆比特
  GB——吉比特

  1 B = 8b (8個bit/ 位) 一個字節(byte)等於8位(bit)
  1 kB = 1024 B (kB - kilobajt) 
  1 MB = 1024 kB (MB - megabajt)
  1 GB = 1024 MB (GB - gigabajt)

六、請至少列舉5個 PEP8 規範(越多越好)

(一)代碼編排
  一、 縮進,4個空格的縮進(編輯器均可以完成此功能),不使用Tap,更不能混合使用Tap和空格。
  2 、每行最大長度79,換行可使用反斜槓,最好使用圓括號。換行點要在操做符的後邊敲回車。
  3 、類和top-level函數定義之間空兩行;類中的方法定義之間空一行;函數內邏輯無關段落之間空一行;其餘地方儘可能不要再空行

(二)文檔編排
  1 、模塊內容的順序:模塊說明和docstring—import—globals&constants—其餘定義。其中import部分,又按標準、三方和本身編寫順序依次排放,之間空一行。
  2 、不要在一句import中多個庫,好比import os, sys不推薦。
  3 、若是採用from XX import XX引用庫,能夠省略‘module.’,都是可能出現命名衝突,這時就要採用import XX。

(三)空格的使用
        整體原則,避免沒必要要的空格。
  1 、各類右括號前不要加空格。
  2 、逗號、冒號、分號前不要加空格。
  3 、函數的左括號前不要加空格。如Func(1)。
  4 、序列的左括號前不要加空格。如list[2]。
  5 、操做符左右各加一個空格,不要爲了對齊增長空格。
  6 、函數默認參數使用的賦值符左右省略空格。
  7 、不要將多句語句寫在同一行,儘管使用‘;’容許。
  8 、if/for/while語句中,即便執行語句只有一句,也必須另起一行。

(四)註釋
        整體原則,錯誤的註釋不如沒有註釋。因此當一段代碼發生變化時,第一件事就是要修改註釋!
        註釋必須使用英文,最好是完整的句子,首字母大寫,句後要有結束符,結束符後跟兩個空格,開始下一句。若是是短語,能夠省略結束符。
  一、塊註釋,在一段代碼前增長的註釋。在‘#’後加一空格。段落之間以只有‘#’的行間隔。好比:
  # Description : Module config.
  # 
  # Input : None
  #
  # Output : None
  二、行註釋,在一句代碼後加註釋。好比:x = x + 1 # Increment x
  可是這種方式儘可能少使用。
  三、避免無謂的註釋。

(五)文檔描述
  一、爲全部的共有模塊、函數、類、方法寫docstrings;非共有的沒有必要,可是能夠寫註釋(在def的下一行)。
  二、若是docstring要換行,參考以下例子,詳見PEP 257
  """

  Return a foobang

  Optional plotz says to frobnicate the bizbaz first.

  """

(六)命名規範
        整體原則,新編代碼必須按下面命名風格進行,現有庫的編碼儘可能保持風格。
  一、儘可能單獨使用小寫字母‘l’,大寫字母‘O’等容易混淆的字母。
  二、模塊命名儘可能短小,使用所有小寫的方式,可使用下劃線。
  三、包命名儘可能短小,使用所有小寫的方式,不可使用下劃線。
  四、類的命名使用CapWords的方式,模塊內部使用的類採用_CapWords的方式。
  五、異常命名使用CapWords+Error後綴的方式。
  六、全局變量儘可能只在模塊內有效,相似C語言中的static。實現方法有兩種,一是__all__機制;二是前綴一個下劃線。
  七、函數命名使用所有小寫的方式,可使用下劃線。
  八、常量命名使用所有大寫的方式,可使用下劃線。
  九、類的屬性(方法和變量)命名使用所有小寫的方式,可使用下劃線。
  十、類的屬性有3種做用域public、non-public和subclass API,能夠理解成C++中的public、private、protected,non-public屬性前,前綴一條下劃線。
  十一、類的屬性若與關鍵字名字衝突,後綴一下劃線,儘可能不要使用縮略等其餘方式。
  十二、爲避免與子類屬性命名衝突,在類的一些屬性前,前綴兩條下劃線。好比:類Foo中聲明__a,訪問時,只能經過Foo._Foo__a,避免歧義。若是子類也叫Foo,那就無能爲力了。
  1三、類的方法第一個參數必須是self,而靜態方法第一個參數必須是cls。

相關文章
相關標籤/搜索