水曜日にPythonの開発を面接して、このいくつかのPythonの面接問題はもう少しで間違いに答えるところで、Pythonの面接問題No 7

18337 ワード

文書ディレクトリ
  • 第1題:次のコードを読み、A 0,A 1からAnの最終値を黙読する.
  • 第2題:pythonの稼働効率を向上させるにはどうすればいいですか?
  • 第3題:Python辞書はどんな特徴があって、辞書の中から値を取って、時間の複雑さはいくらですか?
  • 第4題:マルチスレッド、マルチプロセス?
  • 第5題:pythonリストのメンバーメソッドをできるだけ列挙し、以下のリスト操作の答えを与えてください:
  • 第1題:次のコードを読んで、A 0,A 1からAnの最終値を黙読します.
    A0 = dict(zip(('a','b','c','d','e'),(1,2,3,4,5)))
    A1 = range(10)
    A2 = [i for i in A1 if i in A0]
    A3 = [A0[s] for s in A0]
    A4 = [i for i in A1 if i in A3]
    A5 = {i:i*i for i in A1}
    A6 = [[i,i*i] for i in A1]
    

    コードクラスのテーマを暗読するのは、比較的簡単です.リスト解析に重点を置いて、後で簡単にこれらの質問に答えることができます.
    A0 = {'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4}
    A1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    A2 = []
    A3 = [1, 3, 2, 5, 4]
    A4 = [1, 2, 3, 4, 5]
    A5 = {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
    A6 = [[0, 0], [1, 1], [2, 4], [3, 9], [4, 16], [5, 25], [6, 36], [7, 49], [8, 64], [9, 81]]
    

    第2題:pythonの稼働効率を向上させるにはどうすればいいですか?
  • データ構造では、辞書を使用できるペアを選択する必要があります.辞書はインデックスの検索とソートの面でリストよりはるかに高いです.
  • pythonでカプセル化されたモジュールライブラリのキーコードを多く使用外部機能パッケージ(Cython,pylnlne,pypy,pyrex)
  • を使用
  • ジェネレータ
  • を使用
  • ループの最適化は、ループ内で変数にアクセスする属性
  • をできるだけ避ける.
  • より新しいPythonバージョン
  • を使用
    第3題:Python辞書はどんな特徴があって、辞書の中から値を取って、時間の複雑さはいくらですか?
    dict(中国語では辞書)は、別の であり、任意のタイプのオブジェクトを格納することができる.辞書の各キー値(key=>value)対はコロン(:)で分割され、各対の間はカンマ(,)で分割され、辞書全体がカッコ{}に含まれる辞書の特性
  • 検索速度はdictが10要素でも10万要素でも検索速度は同じです.一方listの検索速度は要素が増加するにつれて徐々に低下する.しかしdictの検索速度が速いのは代価がないのではなく、dictの欠点はメモリを消費するのが大きく、多くの内容を浪費することであり、listは正反対で、メモリを消費するのは小さいが、検索速度は遅い.
  • ディクショナリ値は、標準的なオブジェクトでもユーザ定義でもよいpythonオブジェクトを制限なく取得できますが、キーは使用できません.同じキーが2回表示されることは許可されていません.キーは可変でなければならないので、数字、文字列、メタグループで機能することができますので、リストではできません.
  • dictの2つ目の特徴は、格納されたkey-valueシーケンスペアがシーケンスされていないことです!これはリストとは違います.

  • 辞書の中から値を取って、時間の複雑さはいくらO(1)で、辞書はhash table実現します
    第4題:マルチスレッド、マルチプロセス?
  • スレッドスレッドは、オペレーティングシステムが演算スケジューリングを行うことができる最小単位である. は、プロセスの実際の動作単位です.1つのスレッドとは、プロセス内の単一の順序の制御フローを指し、 であり、各スレッドは並列に異なるタスクを実行する.1つのスレッドはexecution context(実行コンテキスト)、すなわちcpuの実行に必要な一連の命令である.
  • プロセスプログラムの実行例はプロセスである.各プロセスは、プログラムを実行するために必要なすべてのリソースを提供します.(プロセスは本質的にリソースの集合である)1つのプロセスには、仮想アドレス空間、実行可能なコード、オペレーティングシステムのインタフェース、安全なコンテキスト(プロセスを開始するユーザーと権限などを記録する)、一意のプロセスID、環境変数、優先度クラス、最小および最大のワークスペース(メモリ領域)、および少なくとも1つのスレッドがあります.各プロセスが開始されると、 というスレッドが最初に生成され、プライマリ・スレッドは他のサブスレッドを作成します.

  • プロセスとスレッドの違い
    インターネットから転載して、総括するのはとても良くて、有益です!このブログを深く理解すればいいです.https://www.cnblogs.com/whatisfantasy/p/6440585.html
  • 同じプロセスのスレッドは同じメモリ領域を共有しますが、プロセス間は独立しています.
  • 同じプロセスのすべてのスレッドのデータは共有され(プロセス通信)、プロセス間のデータは独立している.
  • プライマリ・スレッドの変更は、他のスレッドの動作に影響を与える可能性がありますが、親プロセスの変更(削除以外)は、他のサブプロセスに影響を与えません.
  • スレッドはコンテキストの実行命令であり、プロセスは演算に関連するクラスタリソースである.
  • 同じプロセスのスレッド間で直接通信できますが、プロセス間のコミュニケーションは中間エージェントによって実現される必要があります.
  • 新しいスレッドを作成するのは簡単ですが、新しいプロセスを作成するには親プロセスをコピーする必要があります.
  • スレッドは、同じプロセスの他のスレッドを操作できますが、プロセスはサブプロセスのみを操作できます.
  • スレッドの起動速度は速く、プロセスの起動速度は遅い(ただし、両者の実行速度には比べものにならない).

  • 5番:pythonリストのメンバーメソッドをできるだけ列挙し、以下のリスト操作の答えを出してください.
  • a=[1, 2, 3, 4, 5], a[::2]=?, a[-2:] = ?
  • a[::2] = [1, 3, 5], a[-2:] = [4, 5]
    
  • 行のコードはリストaの中の偶数の位置の要素に対して3をプラスした後に和を求めることを実現しますか?
  • from functools import reduce
    a = [1, 2, 3, 4, 5]
    print(reduce(lambda x, y: x+y, [(x+3*((a.index(x)+1)%2)) for x in a])) # a       
    #  
    print(reduce(lambda x, y: x+y, [a[x]+(x+1)%2*3 for x in range(0, 5)])) #     a    5   
    
  • リストaの要素順序を乱し、aを並べ替えてリストbを得、aとbを要素順序で辞書dを構築する.
  • from random import shuffle
    a = [1, 2, 3, 4, 5]
    #     a     
    shuffle(a)
    #  a        b
    b = sorted(a, reverse=True)
    # zip     ,     “  ”   ,          ,  ,       。
    d = dict(zip(a, b))
    print(d)