7.27

1807 ワード

string最下位実装、
    type stringStruct struct {
    	str unsafe.Pointer
    	len int
    }

チャネル最下位実装
redis分散ロック実装,redisのSETNX法.
べき乗等、
残高支払いは取引フロー番号を増加させ、注文番号+ユーザーidを一意のインデックスとして使用します.
 
cap,
 
gmpモデル、
 
多重化、
 
es,
 
英語の単語が逆さまになる.(空間的複雑さ)各単語を逆さまにしてから文字列を逆順に出力し、
 
map非スレッドセキュリティの体現.
同じキーを同時に書き込むと致命的なエラーが表示され、fatal error:concurrent map writes(致命的なエラー:同時マッピング書き込み)
 
変数の脱出、および分析.
go runコマンドに-mパラメータを追加し、メモリの割り当て状況を表示します.
ポインタ脱出:典型的な脱出caseで、関数は局所変数のポインタを返します.
スタック空間不足脱出:オブジェクトサイズが大きいスタックフレームが小さい場合(詳細はgoメモリ割り当てを参照)、変数オブジェクトの脱出が発生してスタックに割り当てられます.
閉パケット参照脱出
ダイナミックタイプの脱出:オブジェクトがサイズを特定しないか、またはサイズを特定しないパラメータとして使用されると、脱出が発生します.
スライスまたはmap割り当て:スライスまたはmap割り当てオブジェクトポインタ(オブジェクトとメモリアドレスを共有する場合)にオブジェクトがスタックに逃げます.ただし、オブジェクト値を付与したり、オブジェクト値を返したりするスライスは逃げません.
 
 
 
linux
 
b+木はなぜ背が低くて太っているのか、
異なる点は、B+ツリーの中間ノードには衛星データ(インデックス要素が指すデータ記録)がなく、インデックスのみであり、Bツリーの各ノードの各キーワードには衛星データがある.これは、同じサイズのディスク・ページがより多くのノード要素を収容できることを意味し、同じデータ量でB+ツリーがより「低く太っている」ことを意味します.
 
http,
golang gc,
InnoDBデータがハードディスクにどのように格納されているか、
tcpがリンクを切断すると信号が送信され、
redis実装,LRU淘汰,双方向チェーンテーブルを用いて,最新アクセスをキューヘッダに配置し,淘汰時に淘汰末尾にする.
 
defer
returnは先に実行し,deferは終了作業を行う.
関数の戻り値はdeferによって変更される可能性があります.本質的には、return xxx文は原子命令ではありません.実行プロセスは、戻り値を保存する(ある場合)-->deferを実行する(ある場合)-->returnジャンプを実行することです.
deferキーワードが1つ出会うたびに、defer関数はruntimeに変換されます.deferproc deferprocはnewdeferによって遅延関数を作成し、この新しい遅延関数を現在のgoroutineの_に掛けます.deferのチェーンテーブルにあります.
_deferは現在のgに関連付けられているので、deferは現在のgにのみ有効です.
前のソースコード解析から、deferは先にdeferprocを呼び出し、これらはパラメータコピーを行い、deferreturnは関連情報を抽出して実行を遅延し、これらは直接callの文よりも消費が大きいことがわかります.
deferの2回の更新:https://www.jb51.net/article/181683.htm