Python構文
==
is
とは異なります。
==
2つのオブジェクトの値を比較します。is
はメモリ内で比較されるアドレス(id)であり、 is
はid(objx)== id(objy)
と同等です。
# 浅いコピー操作では、コピーされたオブジェクトの第1レベルのオブジェクトのみがコピーされ、より深いレベルでは、次の例のように、その参照のみがコピーされます。`a[2]`
# と`lst[2]`これらの2つのオブジェクトは2番目のレイヤーです。実際、浅いコピーの後、これらの2つのオブジェクトは1つのオブジェクトのままです。ディープコピーは完全にコピーされます
# シェルオブジェクトのすべての階層オブジェクトは真のコピーです。
>>> from copy import copy, deepcopy
>>> lst =[1,2,[3,4]]>>> a, b =copy(lst),deepcopy(lst)>>> a,b([1,2,[3,4]],[1,2,[3,4]])>>>id(lst[2]),id(a[2]),id(b[2])(139842737414224,139842737414224,139842737414584)>>> lst[0]=10>>> a
[1,2,[3,4]]>>> b
[1,2,[3,4]]>>> lst[2][0]='test'>>> lst
[10,2,[' test',4]]>>> a
[1,2,[' test',4]]>>> b
[1,2,[3,4]]
__ init__
と __new__
。
__ init__
は、インスタンスの特定の属性を初期化し、新しいオブジェクトを作成するときに必要なカスタム操作を実行するだけで、戻り値はありません。また、 __new__
は、ユーザーが作成したインスタンスを返します。これは、インスタンスの作成に使用される実際のインスタンスであるため、 __new__
は __init__
の前に実行され、作成されてから初期化されます。
lzは、その時点でいくつかの点を単純に述べました。
Python2とPython3のデフォルトの文字列は異なり、Python3のデフォルトはUnicodeです。
raw_input()
, input()
例外/エラーをキャッチするために、Python2は以下に加えて except Exception、e
もサポートしますが、Python3は except Exception ase
のみをサポートします
Python3には xrange
はなく、代わりに range
が使用されます。Python3では、 range
はPython2のようなリストを直接返すのではなく、反復可能なオブジェクトを返します。
Python3では、 map
をすぐに実行する必要がある場合は、list(map())
の方法で実行する必要があります。
Python3では print
が関数に変更されましたが、Python2では print
がキーワードです。使い方に違いがあります。
Python3では 3/2 == 1.5
、Python2では 3/2 == 1
。
上記の知識は、いくつかのより一般的なものをリストしています。これは、[http://sebastianraschka.com/Articles/2014_python_2_3_key_diff.html](https://links.jianshu.com/go?to=http%3A%2F%2Fsebastianraschka.com%2FArticles%2F2014_python_2_3_key_diff.html)によって書かれた詳細な記事です。
文字列を接続する方法は何ですか?
文字の連結をフォーマットする( %s
)
format
join
+
オブジェクトのタイプを判別する方法は?
type(obj)
isinstance(obj)
一言で説明するのは難しいので、これを読むことをお勧めします[スタックオーバーフローの回答の翻訳](https://links.jianshu.com/go?to=https%3A%2F%2Ftaizilongxu.gitbooks.io%2Fstackoverflow-about-python%2Fcontent%2F1%2FREADME.html)
PythonのGILとは何ですか?フルネーム?その特定の症状について話す例を挙げてください。
GILのフルネームはGlobalInterpreter Lockです。Pythonスレッドを実行する前に、GILロックを取得する必要があります。その後、100バイトコードが実行されるたびに、インタープリターは自動的にGILロックを解放し、他のスレッドが実行できるようにします。この「現象」を回避し、オペレーティングシステムのマルチコアの利点を利用するには、いくつかの方法があります。
C言語を使用して拡張機能を記述し、ネイティブスレッドを作成し、GILを削除しますが、それが拡張機能であっても、Pythonコード内のPythonコードにはGILの制限があります。
マルチスレッドではなくマルチプロセスを使用します。マルチプロセスを使用する場合、各プロセスには独自のGILがあります。したがって、プロセス間にGILの制限はありません。ただし、複数のプロセスでメモリを共有することはできません。
s = 'abcd'、s [2] = 'e'
操作の結果は何ですか?
エラー、文字列は不変のオブジェクトです
Pythonでは、 sorted
関数内にどのようなアルゴリズムがありますか?
[公式文書](https://links.jianshu.com/go?to=https%3A%2F%2Fdocs.python.org%2F3%2Fhowto%2Fsorting.html%3Fhighlight%3DTimsort)には、[Timsort](https://links.jianshu.com/go?to=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FTimsort)アルゴリズムが使用されていると記載されています。
エンコードとはどのようなプロセスですか?
エンコーディングはバイナリから文字へのプロセスです
当時、lzはまた、yieldキーワードで実現できると簡単に述べ、小さな例を示しました。また、ユーザー制御のスケジューリングに加えて、いくつかのサードパーティフレームワーク、Gevent、tornadoなどが哀れだとも述べました。これは[JuGe](https://links.jianshu.com/go?to=http%3A%2F%2Fajucs.com%2F)からの記事です[Qing Daomingと言えば:coroutineとは](https://links.jianshu.com/go?to=http%3A%2F%2Fmp.weixin.qq.com%2Fs%2FTKrb0i5fF0pJdRIgGC9qQQ)
新しい
sessionを作成してから
getと通常の
requests.getを作成するrequests
パッケージの違いは何ですか? (Tcpロング接続)
セッションを維持し、** tcp long接続を確立します**。Cookieは自動的に保存され、次のリクエストは引き続きセッションです。
可変オブジェクト:リスト、辞書
文字列、数値、タプル、セット
参照で渡します。
プロジェクトのテストを作成しますか?どのライブラリがどのメソッドで使用されていますか?
unitestの使用について話しました...自分で答えを見つける必要があります。
要素 1
を1つだけ持つ新しいリストとタプルを作成してください。
lst = [1]
tup = (1,)
>>> def foo(a, b=[1,2]):print(b)
b.append(a)print(b)>>> val =4>>>foo(val)
# [1,2]
# [1,2,4]>>> foo(val)
# [1,2,4]
# [1,2,4,4]
# ここで、関数が2回実行されたときに、デフォルトパラメータbの値が次のようになっていることがわかります。`[1, 2, 4]`その理由は、デフォルトのパラメーターが最初のパラメーターのみにあるためです。
# 一度実行すると初期化され、後でデフォルトで使用されます**初期化後のこのオブジェクト(見積もり)**、しかしここでbは可変オブジェクトであり、
# 追加された要素はまだ前のオブジェクトであるため、参照は変更されていませんが、値は変更されています。
実際、Flaskクラスでは、 route
は、対応するルーティングルールをキーとして使用し、装飾されたビュー関数を値として使用することで簡単に理解でき、 werkzeug.routing.Map
オブジェクトに格納されます(辞書に似ていると見なすことができます)。データ構造)。こちらが[ソースコード](https://links.jianshu.com/go?to=https%3A%2F%2Fgithub.com%2Fpallets%2Fflask%2Fblob%2Fmaster%2Fflask%2Fapp.py%23L1076-L1120)で、わかりやすいです。これは前に書いた[メモ]です(https://links.jianshu.com/go?to=https%3A%2F%2Fgithub.com%2Fx1ah%2FBlog%2Fissues%2F4)
Flaskには、軽量で柔軟性があり、高度にカスタマイズ可能で、プラグインであるという利点があります。欠点は、軽すぎること、サードパーティのプラグインを介して機能を実現する必要があること、プラグインの品質が不均一であり、その後のメンテナンスが完全に保証されないことです。
これらの点は個人的な意見です。より詳細な基準については、自分で答えを見つける必要があります。
[Wikipedia](https://links.jianshu.com/go?to=https%3A%2F%2Fzh.wikipedia.org%2Fwiki%2FWeb%25E6%259C%258D%25E5%258A%25A1%25E5%2599%25A8%25E7%25BD%2591%25E5%2585%25B3%25E6%258E%25A5%25E5%258F%25A3)からの説明です。WSGIは普遍的な標準です。この標準に従うことで、Webフレームワークをより用途が広く書きやすくすることができます。
uwsgiとNginxはどちらもWebサーバーです。違いは、Nginxが外部ネットワーク要求---(変換)->内部ネットワーク要求を担当するのに対し、uwsgiは内部ネットワーク要求-> PythonWebプログラムを担当することです。
nginxとApacheの違いは何ですか? ([interview_python](https://links.jianshu.com/go?to=https%3A%2F%2Fgithub.com%2Ftaizilongxu%2Finterview_python%237-apache%25E5%2592%258Cnginx%25E7%259A%2584%25E5%258C%25BA%25E5%2588%25AB)を参照)
apacheに対するnginxの利点:
軽量で、Apacheよりも少ないメモリとリソースを消費します
アンチコンカレンシー、nginxはリクエストを非同期で非ブロッキングで処理し、apacheがブロックしている間、より多くの同時接続をサポートします。高いコンカレンシーの下で、nginxは低リソース、低消費、高パフォーマンスを維持できます。
シンプルな構成
高度にモジュール化された設計、モジュールの記述が比較的簡単
アクティブなコミュニティ
nginxに対するapacheの利点:
書き直し、nginxの書き直しよりも強力
非常に多くのモジュールがあり、あなたが考えることができるすべてを見つけることができます
バグが少なく、nginxのバグが比較的多い
超安定
Pythonプロジェクトの展開に使用したuWSGIのモードはどれですか。
デフォルトモード
これを尋ねる可能性は非常に小さいです。詳細については、[uwsgi document](https://links.jianshu.com/go?to=http%3A%2F%2Fuwsgi-docs-cn.readthedocs.io%2Fzh_CN%2Flatest%2FWSGIquickstart.html)を参照してください。
# coding: utf-8from collections import deque
classBNode:"""バイナリツリーノード"""
def __init__(self, value, left=None, right=None):
self.value = value
self.left = left
self.right = right
def level_traverse(binary_tree):"""階層トラバーサルバイナリツリー"""
stack =deque([binary_tree])while stack:
top = stack.popleft()print(top.value)if top.left:
stack.append(top.left)if top.right:
stack.append(top.right)if __name__ =="__main__":
b_tree =BNode(1,BNode(2,BNode(4,BNode(5,BNode(7)))),BNode(3,BNode(6, right=BNode(8))))level_traverse(b_tree)
不均衡な2進数はどのようにしてバランスの取れた2進数になりますか?
リファレンス[AVLバランスバイナリツリーの詳細な説明と実装](https://links.jianshu.com/go?to=https%3A%2F%2Fsegmentfault.com%2Fa%2F1190000006123188)
最初、中間、および後で2進数をトラバースします。完全なバイナリ番号とは何ですか?
完全なバイナリツリー:深さkにn個のノードがあるバイナリツリー。各ノードが同じ深さkの完全なバイナリツリーに対応できる場合に限り、シーケンス番号が1〜nのノードは、「完全な」と呼ばれます。バイナリツリー」。 (ウィキペディアから)
一次:ルートを最初に、左から右に
中位:左、中央、右
ポストオーダー:左右、ルート
Xタイプ、Yタイプ、Vタイプなど、2つの単一リンクリストがノードで交差するかどうかを判断する方法。
タイプXは存在できません。単一リンクリストノードに2つの異なるサクセサはありません。
# VタイプとYタイプがあり、交差する場合は最後のノードが同じである必要があるため、最後のノードから直接逆トラバースが実行されます。
# 単一リンクリストを逆にする
def reverse_single_link_lst(link_lst):if not link_lst:return link_lst
pre = link_lst
cur = link_lst.next
pre.next = None
while cur:
tmp = cur.next
cur.next = pre
pre = cur
cur = tmp
return pre
# 交差点を探す
def point(node_a, node_b):if node_a is None or node_b is None:return None
next_a, next_b = node_a, node_b
while next_a or next_b:if next_a.val == next_b.val:if next_a.next and next_b.next and(next_a.next.val == next_b.next.val):
next_a, next_b = next_a.next, next_b.next
continuereturn next_a.val
next_a, next_b = next_a.next, next_b.next
return None
# 単一リンクリストを作成する
classNode(object):
def __init__(self, value, next=None):
self.val = value
self.next = next
a =ListNode(1,ListNode(2,ListNode(3,ListNode(4,ListNode(5)))))
b =ListNode(7,ListNode(9,ListNode(4,ListNode(5))))
ra =reverse_single_link_lst(a)
rb =reverse_single_link_lst(b)point(ra, rb)
# output:
# 4
2つの単一リンクリストが同じリンクリストであるかどうかを判断する方法。
最初のノードを直接判断するだけです。
単一リンクリストが逆になります。
上記の判断クロスリンクリストの reverse_single_link_lst()
関数を参照してください。
[ ヒープ)(https://links.jianshu.com/go?to=https%3A%2F%2Fzh.wikipedia.org%2Fwiki%2F%25E5%25A0%2586_%28%25E6%2595%25B0%25E6%258D %25AE%25E7%25BB%2593%25E6%259E%2584%29)、[スタック](https://links.jianshu.com/go?to=https%3A%2F%2Fzh.wikipedia.org%2Fzh-hans%2F%25E5%25A0%2586%25E6%25A0%2588)、[キュー](https://links.jianshu.com/go?to=https%3A%2F%2Fzh.wikipedia.org%2Fwiki%2F%25E9%2598%259F%25E5%2588%2597)
# クイックソート、lzは当時、書くのがより複雑でしたが、次のように、それが最も一般的な書き方でした(緊張がいくつかの小さなバグを引き起こしました)。
def quick_sort(lst, start, stop):if start < stop:
i, j, x = start, stop, lst[start]while i < j:while(i < j)and(lst[j]> x):
j -=1if(i < j):
lst[i]= lst[j]
i +=1while(i < j)and(lst[i]< x):
i +=1if(i < j):
lst[j]= lst[i]
j -=1
lst[i]= x
quick_sort(lst, start, i-1)quick_sort(lst, i+1, stop)return lst
その後、インタビュアー[akun](https://links.jianshu.com/go?to=https%3A%2F%2Fgithub.com%2Fakun)は、特に簡潔な表記、3方向多重化を行い、アドレスは[Gist](https://links.jianshu.com/go?to=https%3A%2F%2Fgist.github.com%2Fakun%2Fd90998068f4e1f3eb169)にあります。
def qsort(alist):"""
quick sort(easy way, but more memory)
test: python -m doctest qsort.py
>>> import math
>>> import random
>>> size =100>>> alist =[random.randint(0, size *10)for i inrange(size)]>>> qlist =qsort(alist)>>> alist.sort()>>> assert qlist == alist
"""
iflen(alist)<=1:return alist
key = alist[0]
left_list, middle_list, right_list =[],[],[][{i < key: left_list, i == key: middle_list, i > key: right_list}[
True
]. append(i)for i in alist]returnqsort(left_list)+ middle_list +qsort(right_list)
インデックス作成の原則は何ですか?長所と短所は何ですか?
参考【データベースインデックスの実現原理】(https://links.jianshu.com/go?to=http%3A%2F%2Fblog.csdn.net%2Fkennyrose%2Farticle%2Fdetails%2F7532032)
楽観的ロックと悲観的ロックとは何ですか?
[ 楽観的および悲観的ロックの深い理解](https://links.jianshu.com/go?to=http%3A%2F%2Fwww.hollischuang.com%2Farchives%2F934)
[MongoDB](https://cloud.tencent.com/product/mongodb?from=10680)などの代わりに[Redis](https://cloud.tencent.com/product/crs?from=10680)を選んだのはなぜですか? (1つのプロジェクトはRedisを使用します)
[ redis、memcache、mongoDBの違いは何ですか? ](https://links.jianshu.com/go?to=https%3A%2F%2Fsegmentfault.com%2Fq%2F1010000002588088%2Fa-1020000002589415)
SQLとNoSQLの違いは何ですか?
[ SQLとNoSQLの違い](https://www.jianshu.com/p/b32fe4fe45a3)
URLのブラウザ入力からページレンダリングの完了まで何が起こりましたか?
[ ここ](https://links.jianshu.com/go?to=https%3A%2F%2Fgithub.com%2Fskyline75489%2Fwhat-happens-when-zh_CN)投稿によっては、非常に詳細です。答えは次のとおりです。焦点が異なります。 Webと同様に、nginx-> uwsgi-> Python-> uwsgi-> nginx(WSGI標準)のプロセスに集中できます。
[ TCPプロトコルでの3つのハンドシェイクと4つのウェーブハンド(図)](https://links.jianshu.com/go?to=http%3A%2F%2Fblog.csdn.net%2Fwhuslei%2Farticle%2Fdetails%2F6667471)
なぜスリーウェイハンドシェイクなのですか?二度できませんか?
[ TCP接続の確立中に「スリーウェイハンドシェイク」が必要なのはなぜですか](https://links.jianshu.com/go?to=http%3A%2F%2Fwww.cnblogs.com%2Ftechzi%2Farchive%2F2011%2F10%2F18%2F2216751 .html)
TCP(トランスポートレイヤー)
利点:TCPは接続指向で、信頼性が高く、安定しています。データ送信の前に接続を確立する必要があるため、3方向ハンドシェイクと4波、および輻輳制御、再送信などがあります。
短所:低速、システムリソースの占有、確認メカニズム、3方向ハンドシェイク、攻撃されやすい、DDos
UDP
利点:高速でステートレスな転送プロトコル
短所:不安定で、信頼性が低く、パケットを失いやすい
SQLインジェクション、XSS、CSRFについてのあなたの理解について話してください。そしてそれを防ぐ方法。
[ XSS(Cross Site Scripting Attack)およびCSRF(Cross Site Request Forgery)について](https://links.jianshu.com/go?to=https%3A%2F%2Fcnodejs.org%2Ftopic%2F50463565329c5139760c34a1)
[ SQLインジェクション](https://links.jianshu.com/go?to=https%3A%2F%2Fzh.m.wikipedia.org%2Fzh-hans%2FSQL%25E8%25B3%2587%25E6%2596%2599% 25E9%259A%25B1%25E7%25A2%25BC%25E6%2594%25BB%25E6%2593%258A)、現在、それらのほとんどはORMを使用しており、パラメーター化されたクエリが再び表示されることはめったにありません。
ドメイン名に基づいてホストIPのプロトコルを見つけます。
HTTPは7層モデルのどの層で機能しますか? DNSはどのレイヤーですか? TCPとIPはどうですか?
HTTP、DNSアプリケーション層、TCPトランスポート層、IPネットワーク層。
[ ステータスコード)(https://links.jianshu.com/go?to=https%3A%2F%2Fzh.wikipedia.org%2Fwiki%2FHTTP%25E7%258A%25B6%25E6%2580%2581%25E7%25A0% 2581)、ここでは大まかに説明するだけでよく、1××、2××、3××の観点から、各ステータスコードに進む必要はありません。
[ HTTPリクエスト方法](https://links.jianshu.com/go?to=https%3A%2F%2Fzh.wikipedia.org%2Fwiki%2F%25E8%25B6%2585%25E6%2596%2587%25E6%259C %25AC%25E4%25BC%25A0%25E8%25BE%2593%25E5%258D%258F%25E8%25AE%25AE%23.E8.AF.B7.E6.B1.82.E6.96.B9.E6.B3 .95)
本質的に、GETとPOSTは単なる異なる送信メカニズムです。
HTTPとHTTPSの違いは何ですか?
HTTPS = HTTP + SSL
HTTPはデフォルトでポート80を使用し、HTTPSはポート443を使用します。
[ 詳細](https://links.jianshu.com/go?to=https%3A%2F%2Fzh.wikipedia.org%2Fwiki%2F%25E8%25B6%2585%25E6%2596%2587%25E6%259C% 25AC%25E4%25BC%25A0%25E8%25BE%2593%25E5%25AE%2589%25E5%2585%25A8%25E5%258D%258F%25E8%25AE%25AE%23.E4.B8.8EHTTP.E7.9A 84.E5.B7.AE.E5.BC.82)
あなたが知っているHTTPパケットのヘッダーのフィールドについて教えてください。
バッグを持っていくだけでわかるので、話はしません〜
Host
フィールドの機能は何ですか? *現在の要求サーバーのホスト名を表します
クッキーで知っているフィールドを教えてください。
セッションとは何ですか?
[ Cookie /セッションのメカニズムとセキュリティ](https://links.jianshu.com/go?to=http%3A%2F%2Fharttle.com%2F2015%2F08%2F10%2Fcookie-session.html)
クローラーを作成する過程で、jsをロードする必要がある状況に遭遇した場合、どのように対処しますか?
Selenium,PhantomJS
通常の匿名プロキシと高隠しプロキシの違いは何ですか?
通常の匿名プロキシからの要求はサーバー側で実際のIPを見ることができますが、高隠しプロキシはサーバー側で実際のIPを見ることができず、プロキシサーバーIPのみを見ることができます。
どのような登山防止策を知っていますか?
プロキシを追加し、ヘッドを追加し、速度制御をクロールし、UAをランダム化し、要求する実際のユーザーのクリック習慣をシミュレートします。
re
の match
関数と search
関数の違いは何ですか?例えば。retry
デコレータを実装するには、次のように使用します。# 関数が正しい結果を返すまでの再試行回数を指定できます。
@ retry(retries=3)
def func(*args,**kw):try:
# some action
return True
except:return False
このように書くことができます、
from functools import wraps
def retry(retries=3):
def timesf(func):
@ wraps(func)
def wrap(*args,**kw):
i =0
status = True
while status and i < times:
status =func(*args,**kw)
i +=1return status
return wrap
return timesf
xxxx-xx-xx
のような日付形式に準拠しているかどうかをチェックする関数を実装し、年、サイズ、月に注意してください。ライブラリ関数は許可されていません。できるだけ低いレベルを実装してみてください。 (手書き)Recommended Posts