2020年4月のByteDanceのバックエンドインタビュー体験
第一面
- Niuke.comを使用してリモートでインタビュー
- インタビュアーは最初にいくつかの面接が行われることを紹介しました
アルゴリズム質問1.1
整数を2進数に変換してから
負
アルゴリズム問題1.2取引株の最大利益
株の1日の価格を表す配列が与えられた場合、複数回売買するときの最大利益はいくつですか?
日付が重複しない場合、複数回購入および販売できますか?
入力:{100、80、120、130、70、60、100、125}
複数回購入および販売できます:115(80購入、130販売、60購入、 125売る)
ヒント:売買のシーケンスを出力する必要はありません。最大の利益を得るだけです。
- 時間の複雑さは何ですか
- スペースの複雑さは何ですか
判決
2.1解決した場合、このコードの何が問題になっていますか
total := 0
for i := 1; i <= 10; i++ {
sum += i
go func() {
total += i
}()
}
fmt.Printf("total:%d sum %d", total, sum)
このコードはコルーチンで実行されるため、データの不整合が発生します。
ロックを使用すると、
- ロックする方法?達成するコード
コードは次のとおりです。
var lo sync.Mutex
func main() {
total := 0
for i := 1; i <= 10; i++ {
nums += i
lo.Lock()
go func() {
total += i
lo.Unlock()
}()
}
fmt.Printf("total:%d", total)
}
- その他の質問
3その他の評価
3.1 HTTPステータスコード
400 500ステータスコード
HTTPメッセージ形式
わからない...
解決策:
3.2 HTTPリクエストメソッド
GET Get POST Create PUT Modify DELETE Delete
- get postの違いは何ですか
個人的には、getはpostなしで比較的安全であると述べました。すべてのパラメーターはURLに配置されます。Postはパラメーターをリクエスト本文にラップします
- 投稿のキャプチャと取得の違いは何ですか
URLには、GETリクエストのいくつかのパラメーターが伴います。これらのパラメーターは、パケットキャプチャで確認でき、すべてプレーンテキストで送信されますが、POSTはURLで確認できません。
より良い回答:https : //www.zhihu.com/question/28586791
4データベース
4.1 mysqlトランザクション
トランザクションは主に、大規模な操作と非常に複雑なデータの処理に使用されます。たとえば、人事管理システムでは、人を削除し、人の基本情報を削除する必要がありますが、メールボックスや記事など、人に関連する情報も削除して、これらのデータベース操作ステートメントがトランザクションを構成するようにします。
スケジュールされたタスク
- 分離レベルとは
〜
4.2 MySQLデータベースインデックスはどのように実装されますか?
B +ツリーとジャンプテーブルは少し似ているため、B +ツリーが使用されます。次のレベルを直接見つけることができます。
- 他のデータ構造を使用しないのはなぜですか?
データ量が特に多い場合、大量のデータ検索がパフォーマンスに影響を与えるため、B +ツリーはこの問題を解決するだけです。
4.3このデータベースに最速のインデックスを追加する方法
select * from table_name where c> 10 and a = 10 and b = 10;
まず、クエリのみの値を最適化する必要があります
。cは動的であるため、*をクエリに必要なキーに変更できます。a とbに従って結合インデックスを追加して、最高の速度を実現できます。
5プロジェクト関連
プロジェクトのクローラーにどのフレームワークを使用しましたか
- フレームワークの使用は何ですか
- 高い並行性を実現する方法、マイクロサービスはありますか
- 分散したい場合、どのように達成するか
kafkaで実装され、データを取得し、消費のためにkafkaを使用します
- 預けられる情報
リストに保存
- 検索機能をしませんでしたか
いいえ、この要件をESに保存できる場合は、esを使用して検索します
6他に何を尋ねなければなりませんか
結果が出る時期について
- 5営業日以内に返信