python面試題包含基礎和Linux操做以及數據庫相關

  • 今天面試了一家公司,感受表現的不是很好,記錄一下面試的試題。
  • python基礎部分
  1. python 是一門什麼樣的語言面向對象的語言有那些,python的面向對象和Java面向對象的區別
    1. Python是一門動態解釋型的強類型定義語言。
    2. 咱們須要瞭解編譯型和解釋型、靜態語言和動態語言、強類型定義語言和弱類型定義語言這6個概念就可知曉。
    3. 編譯型和解釋型各有利弊。前者因爲程序執行速度快,同等條件下對系統要求較低,所以像開發操做系統、大型應用程序、數據庫系統時都採用它,像C/C++、Pascal/Object Pascal(Delphi)、VB等基本均可視編譯語言,而一些網頁腳本、服務器腳本及輔助開發接口這樣的對速度要求不高、對不一樣系統平臺間的兼容性有必定要求的程序則一般使用解釋型語言,如Java、JavaScript、VBScript、Perl、Python等等。(我我的認爲Java屬於混合語言,介於編譯和解釋之間,更偏向於編譯語言)
    4. 動態類型語言是指在運行期間纔去作數據類型檢查的語言,也就是說,在用動態類型 語言編譯的時,永遠也不用給任何變量指定數據類型,該語言會在你第一次賦值給變量時,在內部將數據類型記錄下來。
    5. 強制數據類型定義的語言。也就是說,一旦一個變量被指定了某個數據類型,若是不通過強制轉換,那麼它就永遠是這個數據類型了。舉個例子,若是您定義了一個整型變量a,那麼程序根本不能將a當作字符串類型處理。強類型定義語言是類型安全的語言。
  2. 面向對象的語言有那些,python的面向對象和Java面向對象的區別
    1. 面向對象的語言:C++、Java、C#、PHP等
    2. python可面向對象編程,能夠不按照面向對象編程。
      java就必須面向對象編程了,必須建個類。
    3. python能夠動態的綁定屬性和方法。
    4. 初始化self|初始化this|html

    5. 訪問權限控制使用‘__’|訪問修飾符:private,default,protected,public|
    6. 方法參數的類型不能在函數定義中限制|參數類型需在函數中聲明|
  3.  python 包和模塊的概念,init.py文件何時執行
    1. 在Python中,一個.py文件就稱之爲一個模塊(Module)
    2. 爲了不模塊名衝突,Python又引入了按目錄來組織模塊的方法,稱爲包(Package)。
    3. 請注意,每個包目錄下面都會有一個__init__.py的文件,這個文件是必須存在的,不然,Python就把這個目錄當成普通目錄,而不是一個包。
    4. __init__.py 定義__all__用來模糊導入 
    5. __init__.py 控制着包的導入行爲。 
    6. 當用import導入該目錄時,會執行__init.py__裏面的代碼。程序加載到包的時候就已經分配了內存。
  4. 「」「做用,用法;」「」和「」的區別
    1. 單引號和雙引號均可以用來表示一個字符串
    2. Python三引號容許一個字符串跨多行,字符串中能夠包含換行符、製表符以及其餘特殊字符。
    3. 在表達式中沒有變量時,咱們可使用三引號來讓sql語句更清晰
  5. python 自省機制
    1. 在計算機編程中,自省是指這種能力:檢查某些事物以肯定它是什麼、它知道什麼以及它能作什麼。自省向程序員提供了極大的靈活性和控制力。java

    2. Python中比較常見的自省機制(函數用法)有:dir(),type(),hasattr(),isinstance()等,經過這些函數,咱們可以在運行時得知對象的類型,判斷對象是否存在某個屬性,訪問對象屬性。
  6. 判斷一個對象是否有某個方法,屬性,獲取屬性
    1. dir([obj]):
      調用這個方法將返回包含obj大多數屬性名的列表(會有一些特殊的屬性不包含在內)。obj的默認值是當前的模塊對象。python

    2. hasattr(obj, attr): 
      這個方法用於檢查obj是否有一個名爲attr的值的屬性,返回一個布爾值。
    3. getattr(obj, attr): 
      調用這個方法將返回obj中名爲attr值的屬性的值,例如若是attr爲’bar’,則返回obj.bar。
    4. setattr(obj, attr, val):
      調用這個方法將給obj的名爲attr的值的屬性賦值爲val。例如若是attr爲’bar’,則至關於obj.bar = val。
  7. 類方法和靜態方法的區別
    1. 實例方法只能被實例對象調用,靜態方法(@staticmethod裝飾的方法)、類方法(@classmethod裝飾的方法),能夠被類或者類的實例對象調用。
    2. 實例方法第一個參數必需要默認傳實例對象,通常習慣使用self,它表示具體的實例自己。靜態方法參數沒有要求,這個方法可當成一個普通的函數使用。類方法第一個參數必需要默認傳類,通常習慣使用cls,它表示這個類自己。 
    3. 靜態方法是類中的函數,不須要實例。靜態方法主要是用來存放邏輯性的代碼,邏輯上屬於類,可是和類自己沒有關係,也就是說在靜態方法中,不會涉及到類中的屬性和方法的操做。能夠理解爲,靜態方法是個獨立的、單純的函數,它僅僅託管於某個類的名稱空間中,便於使用和維護。
    4. 靜態方法與類方法一旦被調用,內存地址即肯定。經過類調用和經過實例化對象調用的結果徹底同樣。
  8. 裝飾器相關
    1. 裝飾器本質上是一個Python函數,它可讓其餘函數在不須要作任何代碼變更的前提下增長額外的功能,裝飾器的返回值也是一個函數對象。
    2. 它常常用於有切面需求的場景,好比:插入日誌、性能測試、事務處理、緩存、權限校驗等場景。
    3. 裝飾器是解決這類問題的絕佳設計,有了裝飾器,咱們就能夠抽離出大量與函數功能自己無關的雷同代碼並繼續重用。
    4. 修改是封閉的,對拓展是開放的。
  9. python設計模式
    1. **七大設計原則:**
      1. 單一職責原則:一個類負責一項職責。
      2. 里氏替換職責:繼承與派生的規則。(子類可替換父類)
      3. 依賴倒轉原則:高層模塊不該該依賴底層模塊,兩者都應該依賴其抽象;抽象不該該依賴細節;細節應該依賴抽象。即針對接口編程,不要針對實現編程。
      4. 接口隔離原則:創建單一接口,不要創建龐大臃腫的接口,儘可能細化接口,接口中的方法儘可能少。
      5. 迪米特法則:高內聚,低耦合。
      6. 開閉原則:一個軟件實體如類、模塊和函數應該對擴展開放,對修改關閉。
      7. 組合/聚合複用原則:儘可能使用組合和聚合,少使用繼承的關係來達到複用的原則。mysql

      **24種設計模式:**
      **1、建立型模式**
      1. 抽象工廠模式:提供一個接口,用於建立相關或依賴對象的家族,而不須要指定具體類。
      2. 生成器模式:使用生成器模式封裝一個產品的構造過程,並容許按步驟構造。將一個複雜對象的構建與它的表示分離,使得一樣的構建過程能夠建立不一樣的表示。
      3. 工廠模式:定義了一個建立對象的接口,但由子類決定要實例化的類是哪個。工廠方法讓類把實例化推遲到子類。
      4. 原型模式:當建立給定類的實例過程很昂貴或很複雜時,就使用原形模式。
      5. 單例了模式:確保一個類只有一個實例,並提供全局訪問點。
      6. 多例模式:在一個解決方案中結合兩個或多個模式,以解決通常或重複發生的問題。
      **2、結構型模式**
      1. 適配器模式:將一個類的接口,轉換成客戶指望的另外一個接口。適配器讓本來接口不兼容的類能夠合做無間。對象適配器使用組合,類適配器使用多重繼承。
      2. 橋接模式:使用橋接模式經過將實現和抽象放在兩個不一樣的類層次中而使它們能夠獨立改變。
      3. 組合模式:容許你將對象組合成樹形結構來表現「總體/部分」層次結構。組合能讓客戶以一致的方式處理個別對象以及對象組合。
      4. 裝飾者模式:動態地將責任附加到對象上,若要擴展功能,裝飾者提供了比繼承更有彈性的替代方案。
      5. 外觀模式:提供了一個統一的接口,用來訪問子系統中的一羣接口。外觀定義了一個高層接口,讓子系統更容易使用。
      6. 亨元模式:如想讓某個類的一個實例能用來提供許多」虛擬實例」,就使用蠅量模式。
      7. 代理模式:爲另外一個對象提供一個替身或佔位符以控制對這個對象的訪問。
      **3、行爲型模式**
      1. 責任鏈模式:經過責任鏈模式,你能夠爲某個請求建立一個對象鏈。每一個對象依序檢查此請求並對其進行處理或者將它傳給鏈中的下一個對象。
      2. 命令模式:將」請求」封閉成對象,以便使用不一樣的請求,隊列或者日誌來參數化其餘對象。命令模式也支持可撤銷的操做。
      3. 解釋器模式:使用解釋器模式爲語言建立解釋器。
      4. 迭代器模式:提供一種方法順序訪問一個聚合對象中的各個元素,而又不暴露其內部的表示。
      5. 中介者模式:使用中介者模式來集中相關對象之間複雜的溝通和控制方式。
      6. 備忘錄模式:當你須要讓對象返回以前的狀態時(例如, 你的用戶請求」撤銷」),你使用備忘錄模式.
      7. 觀察者模式:在對象之間定義一對多的依賴, 這樣一來, 當一個對象改變狀態,依賴它的對象都會收到通知,並自動更新。
      8. 狀態模式:容許對象在內部狀態改變時改變它的行爲,對象看起來好象改了它的類。
      9. 策略模式:定義了算法族,分別封閉起來,讓它們之間能夠互相替換,此模式讓算法的變化獨立於使用算法的客戶。
      10. 模板方法模式: 在一個方法中定義一個算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類能夠在不改變算法結構的狀況下,從新定義算法中的某些步驟。
      11. 訪問者模式:當你想要爲一個對象的組合增長新的能力,且封裝並不重要時,就使用訪問者模式。linux

  10. 序列化,反序列化
    1. 序列化:**就是把變量從內存中變成可存儲或可傳輸的過程。
    2. 反序列化:**就是把變量內容從序列化對象從新讀到內存裏。
    3. **pickle模塊:**對於大多數應用程序來說,dump()和load()函數的使用就是你使用pickle模塊的所有了。
      + dumps(object)和dump(object):序列化。
      + loads(bytes)和load(bytes):反序列化。
      二者不一樣的是:dump()和load()是(反)序列化關於二進制文件中,dumps()和loads()是關於反序列化對象。程序員

    4.  

      **json模塊:**
      + json.dumps()從字典(可序列化json的對象)轉換爲json格式數據。
      + json.loads()從json到字典。
      + json.dump()和json.load()是file文件中使用的。
      + default:把任意一個對象變成一個可序列化爲JSON的對象
      + intent:格式化規範點面試

  11.  python雙下劃線開頭的方法,有什麼用,爲何這麼用
    1. **開頭單下劃線:**誤認爲它表示該方法或屬性是該類型的私有方法或屬性。但其實在Python中不存在真正意義上的私有方法或者屬性,、算法

    2. 前面加單下劃線「_」只是表示你不該該去訪問這個方法或者屬性,由於它不是API的一部分。單下劃線「_」開始的成員變量叫保護變量,意思是隻有類對象和子類對象能訪問到這些變量。sql

    3. **開頭雙下劃線:**將雙下劃線開頭「__「理解爲私有也不錯。Python設計雙膝劃線開頭的初衷和目的是爲了不子類覆蓋父類的方法。雙下劃線「__」開始的是私有成員,意思是隻有類對象本身能訪問,連自對象也不能訪問到這個數據。
    4. **頭尾雙下劃線:**頭尾雙下劃線「__xxx__」的方法是表示這是Python本身調用的,通常稱這樣的方法爲魔術方法(magic methods)。好比len()函數求長度,其實它是後臺調用了__len()__ 方法。這種機制使得咱們能夠在本身的類中覆寫操做符。
    5. **尾下劃線:**這是爲了不咱們起的一些名字和Python保留關鍵字衝突,沒有特殊含義。
  12. 多線程
    1. python提供了兩個模塊來實現多線程thread 和threading 
    2. #coding=utf-8
      import threading 
      from time import sleep, ctime 
       
      class MyThread(threading.Thread):
      
          def __init__(self,func,args,name=''):
              threading.Thread.__init__(self)
              self.name=name
              self.func=func
              self.args=args
          
          def run(self):
              apply(self.func,self.args)
      
      
      def super_play(file,time):
          for i in range(2):
              print 'Start playing: %s! %s' %(file,ctime())
              sleep(time)
      
      
      list = {'愛情買賣.mp3':3,'阿凡達.mp4':5}
      
      #建立線程
      threads = []
      files = range(len(list))
      
      for k,v in list.items():
          t = MyThread(super_play,(k,v),super_play.__name__)
          threads.append(t)        
      
      if __name__ == '__main__': 
          #啓動線程
          for i in files:
              threads[i].start() 
        for i in files:
            threads[i].join()
      
          #主線程
          print 'end:%s' %ctime()
      

        參考地址:http://www.javashuo.com/article/p-rrbuvexv-d.html數據庫

  13.  猴子補丁,是什麼,怎麼用
    1. 在運行時替換方法、屬性等
    2. 在不修改第三方代碼的狀況下增長原來不支持的功能
    3. 在運行時爲內存中的對象增長patch而不是在磁盤的源代碼中增長
    4. 簡單來講就是,用來在運行時動態修改已有的代碼,而不須要修改原始代碼。
    5. 猴子補丁在單元測試的時候有很好的用處
  14. PEP8規範
    1. 一、使用4個空格而不是tab鍵進行縮進。
      二、每行長度不能超過80
      三、使用空行來間隔函數和類,以及函數內部的大塊代碼
      四、必要時候,在每一行下寫註釋
      五、使用文檔註釋,寫出函數註釋
      六、在操做符和逗號以後使用空格,可是不要在括號內部使用
      七、命名類和函數的時候使用一致的方式,好比使用CamelCase來命名類,使用lower_case_with_underscores來命名函數和方法
      八、在類中老是使用self來做爲默認
      九、儘可能不要使用魔法方法
      十、默認使用UTF-8,甚至ASCII做爲編碼方式
      十一、換行可使用反斜槓,最好使用圓括號
      十二、不要在一句import中多個庫
      
      空格的使用:
      
      各類右括號前不要加空格
      逗號、冒號前不要加空格
      函數的左括號前不要加空格。如Func(1)
      序列的左括號前不要加空格。如list[2]
      操做符左右各加一個空格,不要爲了對齊增長空格
      函數默認參數使用的賦值符左右省略空格
      不要將多句語句寫在同一行
      if/for/while語句中,即便執行語句只有一句,也必須另起一行
      
       包名小寫(不含下劃線),函數名小寫(可含下劃線),常量名大寫(可含下劃線),類名駝峯寫法,類屬性小寫(可含下劃線)。
      

        

  15. python之禪,啓發
    1. import this
      
      Beautiful is better than ugly.
      # 優美勝於醜陋(Python以編寫優美的代碼爲目標)
      Explicit is better than implicit.
      # 明瞭勝於晦澀(優美的代碼應當是明瞭的,命名規範,風格類似) 
      Simple is better than complex.
      # 簡潔勝於複雜(優美的代碼應當是簡潔的,不要有複雜的內部實現) 
      Complex is better than complicated.
      # 複雜勝於凌亂(若是複雜不可避免,那代碼間也不能有難懂的關係,要保持接口簡潔)
      Flat is better than nested.
      # 扁平勝於嵌套(優美的代碼應當是扁平的,不能有太多的嵌套) 
      Sparse is better than dense.
      # 間隔勝於緊湊(優美的代碼有適當的間隔,不要奢望一行代碼解決問題) 
      Readability counts.
      # 可讀性很重要(優美的代碼是可讀的) 
      Special cases aren't special enough to break the rules.
      Although practicality beats purity.
      # 即使假借特例的實用性之名,也不可違背這些規則(這些規則至高無上) 
      Errors should never pass silently.
      Unless explicitly silenced.
      # 不要包容全部錯誤,除非你肯定須要這樣作(精準地捕獲異常,不寫except:pass風格的代碼) 
      In the face of ambiguity, refuse the temptation to guess.
      # 當存在多種可能,不要嘗試去猜想 
      There should be one-- and preferably only one --obvious way to do it.
      # 而是儘可能找一種,最好是惟一一種明顯的解決方案(若是不肯定,就用窮舉法) 
      Although that way may not be obvious at first unless you're Dutch.
      # 雖然這並不容易,由於你不是 Python 之父(這裏的Dutch是指Guido)
      Now is better than never.
      Although never is often better than *right* now.
      # 作也許好過不作,但不假思索就動手還不如不作(動手以前要細思量)
      If the implementation is hard to explain, it's a bad idea.
      If the implementation is easy to explain, it may be a good idea.
      # 若是你沒法向人描述你的方案,那確定不是一個好方案;反之亦然(方案測評標準) 
      Namespaces are one honking great idea -- let's do more of those!
      # 命名空間是一種絕妙的理念,咱們應當多加利用(倡導與號召)
      

        

  16. 中間件,有哪些,寫過沒有
    1. MIDDLEWARE = [
          'django.middleware.security.SecurityMiddleware',
          'django.contrib.sessions.middleware.SessionMiddleware',
          'django.middleware.common.CommonMiddleware',
          'django.middleware.csrf.CsrfViewMiddleware',
          'django.contrib.auth.middleware.AuthenticationMiddleware',
          'django.contrib.messages.middleware.MessageMiddleware',
          'django.middleware.clickjacking.XFrameOptionsMiddleware',
      ]
      

        Django中的中間鍵,能夠本身定義中間件,定義的中間鍵要註冊。

  • Linux基礎部分
  1. 查看負載,負載的三個狀態,負載能不能大於1
    1. 查看服務器負載有多種命令,w或者uptime均可以直接展現負載,
    2. load average分別對應於過去1分鐘,5分鐘,15分鐘的負載平均值。
    3. 對通常的系統來講,根據cpu數量去判斷。若是平均負載始終在1.2如下,而你有2顆cup的機器。那麼基本不會出現cpu不夠用的狀況。也就是Load平均要小於Cpu的數量,通常是會根據15分鐘那個load 平均值爲首先。
    4. top 命令 
    5. 更多信息https://blog.csdn.net/weiwangchao_/article/details/51085990
  2. 查看內存佔用
    1. top
    2. cat /proc/deminfo
    3. free -h 
    4. htop
    5. ps aux --sort -rss
    6. vmstart -a
  3. 查看網絡/磁盤 I/O
    1. cat /proc/meminfo
    2. netstat
    3. 更多具體信息https://blog.csdn.net/mojianbin/article/details/78657453
  4. 查看磁盤地址
    1. df
    2. du
    3. fdisk
    4. 更多:http://www.javashuo.com/article/p-bwslurpl-bn.html
  5. 進程打開的最大數量
    1. ulimit -a
    2. LINUX中進程的最大理論數計算:

      每一個進程的局部段描述表LDT都做爲一個獨立的段而存在,在全局段描述表GDT中要有一個表項指向這個段的起始地址,並說明該段的長度以及其餘一些 參數。除上以外,每一個進程還有一個TSS結構(任務狀態段)也是同樣。因此,每一個進程都要在全局段描述表GDT中佔據兩個表項。那麼,GDT的容量有多大 呢?段寄存器中用做GDT表下標的位段寬度是13位,因此GDT中能夠有8192個描述項。除一些系統的開銷(例如GDT中的第2項和第3項分別用於內核 的代碼段和數據段,第4項和第5項永遠用於當前進程的代碼段和數據段,第1項永遠是0,等等)之外,尚有8180個表項可供使用,因此理論上系統中最大的 進程數量是4090。

  6.  find命令,查看30天前的日誌
    1. 詳細信息http://www.javashuo.com/article/p-uslggaby-o.html
  7. 修改DNS
    1. 編輯 /etc/resolv.conf 
      因而編輯 /etc/resolv.conf 
      添加了兩行(DNS地址是諮詢了服務器運營商得知的) 
      nameserver 202.96.209.133 
      nameserver 61.129.88.123
      
      再執行service network restart重啓網絡服務便可
      

        

  8. 計劃任務
    1. crond 是linux用來按期執行程序的命令。當安裝完成操做系統以後,默認便會啓動此任務調度命令。crond命令每分鍾會按期檢查是否有要執行的工做,若是有要執行的工做便會自動執行該工做。能夠用如下的方法啓動、關閉這個服務:
      
      /sbin/service crond start //啓動服務
      
      /sbin/service crond stop //關閉服務
      
      /sbin/service crond restart //重啓服務
      
      /sbin/service crond reload //從新載入配置
      

        

  9. 修改權限,777三個7的含義
    1. Linux中能夠用chmod修改文件的權限
      Linux中每一個文件都都有全部者、全部組、其餘組。
      Linux中的rwx也能夠用數字表示
      
      r=4
      
      w=2
      
      x=1
      7=4+2+1及將rwx權限賦予全部者、組、其餘用戶
      

        

  10.  管道是什麼,怎麼用
    1. 匿名管道的的特性:

      • 用於有親緣關係的進程
      • 半雙工,單項通訊,雙向通訊須要兩個管道
      • 聲明週期隨進程
      • 有內置的同步互斥機制
      • 面向字節流
    2. 命名管道的特性除了可使用在任意進程間外,其他的4條和匿名管道相同
  11.  打開日誌的最後1000行數據
    1. tail -n 1000:顯示最後1000行
    2. head -n 1000:顯示前面1000行
  12.  vim的幾種模式,光標怎麼移動,複製,粘貼操做
    1. 基本上vi能夠分爲三種狀態,分別是通常模式、編輯模式和命令行模式
    2. 移動光標
      【h、j、k、l】,分別控制光標左、下、上、右移一格
      按【ctrl+b】屏幕往"後"移動一頁
      按【ctrl+f】屏幕往"前"移動一頁

      【n<space>】光標向右移動n個字符
      【Home】移動到這一行的最前面字符處:0數字,但不能用數字小鍵盤上的數字
      【End】 移動到這一行的最後面字符處:$,我測試好像不行
      【w】光標跳到下個字的開頭
      【e】光標跳到下個字的字尾

      【H】 光標移動到這個屏幕的最上方那一行的第一個字符
      【M】 光標移動到這個屏幕的中間那一行的第一個字符
      【L】光標移動到這個屏幕的最下方那一行的第一個字符

      【G】 移動到這個文件的最後一行
      【nG】移動到這個文件的第n行(可配合:set nu)
      【gg】 移動到這個文件的第一行,至關於1G
      【n<Enter>】光標向下移動n行

    3. 刪除、複製與粘貼

      【x】 爲向後刪除一個字符 (至關於【del】鍵)
      【X】 爲向前刪除一個字符(至關於【backspace】鍵)
      【nx】 連續向後刪除n個字符

      【dd】 刪除光標所在行
      【ndd】 刪除光標所在的向下n行
      【d1G】 刪除光標所在行到第一行的全部數據
      【dG】 刪除光標所在到最後一行的全部數據

      【d$】 刪除光標所在處,到該行的最後一個字符
      【d0】 刪除光標所在處,到該行的最前一個字符

      【yy】 複製光標所在的那一行
      【nyy】 複製光標所在的向下n列

      【y1G】 複製光標所在行到第一行的全部數據
      【yG】 複製光標所在行到最後一行的全部數據

      【y0】 複製光標所在的那個字符到該行行首的全部數據
      【y$】 複製光標所在的那個字符到該行行尾的全部數據

      【p】將已複製的數據在光標下一行粘貼上
      【P】 則爲貼在光標的上一行

      【u】 恢復前一個操做
      【Ctrl+r】重作上一個操做

      【.】 是重複前一個操做

    4. 查看更多:https://blog.csdn.net/yangshuainan/article/details/78219604
  • 數據庫相關
  1.  登陸數據庫,登陸遠程數據庫
    1. mysql -h 192.168.5.116 -P 3306 -u root -p123456
  2. 建立用戶,添加權限
    1. mysql> insert into mysql.user(Host,User,Password) values("localhost","test",password("1234"));

        這樣就建立了一個名爲:test 密碼爲:1234 的用戶。

        注意:此處的"localhost",是指該用戶只能在本地登陸,不能在另一臺機器上遠程登陸。若是想遠程登陸的話,將"localhost"改成"%",表示在任何一臺電腦上均可以登陸。也能夠指定某臺機器能夠遠程登陸。

      mysql> insert into mysql.user(Host,User,Password) values("localhost","test",password("1234"));

        這樣就建立了一個名爲:test 密碼爲:1234 的用戶。

        注意:此處的"localhost",是指該用戶只能在本地登陸,不能在另一臺機器上遠程登陸。若是想遠程登陸的話,將"localhost"改成"%",表示在任何一臺電腦上均可以登陸。也能夠指定某臺機器能夠遠程登陸。

    2. 爲用戶受權

        受權格式:grant 權限 on 數據庫.* to 用戶名@登陸主機 identified by "密碼"; 

        2.1 登陸MYSQL(有ROOT權限),這裏以ROOT身份登陸:

        @>mysql -u root -p

        @>密碼

        2.2 首先爲用戶建立一個數據庫(testDB):

        mysql>create database testDB;

        2.3 受權test用戶擁有testDB數據庫的全部權限(某個數據庫的全部權限):

         mysql>grant all privileges on testDB.* to test@localhost identified by '1234';

         mysql>flush privileges;//刷新系統權限表

        格式:grant 權限 on 數據庫.* to 用戶名@登陸主機 identified by "密碼"; 

        2.4 若是想指定部分權限給一用戶,能夠這樣來寫:

        mysql>grant select,update on testDB.* to test@localhost identified by '1234';

        mysql>flush privileges; //刷新系統權限表

        2.5 受權test用戶擁有全部數據庫的某些權限:   

        mysql>grant select,delete,update,create,drop on *.* to test@"%" identified by "1234";

           //test用戶對全部數據庫都有select,delete,update,create,drop 權限。

        //@"%" 表示對全部非本地主機受權,不包括localhost。(localhost地址設爲127.0.0.1,若是設爲真實的本地地址,不知道是否能夠,沒有驗證。)

       //對localhost受權:加上一句grant all privileges on testDB.* to test@localhost identified by '1234';便可。

    3. 刪除用戶

         @>mysql -u root -p

        @>密碼

         mysql>Delete FROM user Where User='test' and Host='localhost';

         mysql>flush privileges;

         mysql>drop database testDB; //刪除用戶的數據庫

      刪除帳戶及權限:>drop user 用戶名@'%';

              >drop user 用戶名@ localhost; 

    4. 修改指定用戶密碼

          @>mysql -u root -p

          @>密碼

          mysql>update mysql.user set password=password('新密碼') where User="test" and Host="localhost";

          mysql>flush privileges;

  3.  聚合函數
    1. 與分組相關的聚合函數

      count() 返回某個字段的值的行數

      max() 求最大某字段最大的值
      min() 求某字段最小值
      avg() 返回某字段平均值
      sum() 求某字段總數

      group_concat() 將分組的結果拼接成字符串

  4.  打開表,使用表,表結構
    1. 列出全部數據庫

        mysql>show database;

    2. 切換數據庫

        mysql>use '數據庫名';

    3. 列出全部表

        mysql>show tables;

    4. 顯示數據表結構

        mysql>describe 表名;

    5.  刪除數據庫和數據表

        mysql>drop database 數據庫名;

        mysql>drop table 數據表名;

  5.  輸出數據表中後50條數據
    1. select * from test_limit order by id DESC limit 50
  6.  group by 用法
    1. 根據給定列或者表達式的每個不一樣的值將表中的行分紅不一樣的組,使用組函數返回每一組的統計信息
    2. 規則:

        ①出如今SELECT子句中的單獨的列,必須出如今GROUP BY子句中做爲分組列

        ②分組列能夠不出如今SELECT子句中

        ③分組列可出如今SELECT子句中的一個複合表達式中

        ④若是GROUP BY後面是一個複合表達式,那麼在SELECT子句中,它必須總體做爲一個表達式的一部分才能使用。

  • 其餘
  1.  詳述用戶打開瀏覽器到收到頁面的過程
    1. 三次握手,四次揮手。
  2.  天天學習的過程
    1. 根據本身的學習狀況回答。
  3.  之後打算用python幹什麼
    1. 考察對python用法的理解。
相關文章
相關標籤/搜索