ゴールドスリーシルバーフォー、Ant Financialからオファーを受けたばかりのJavaプログラマーは、大きな工場に入った経験を共有しています

インタビュー中の激しい緊張のため、この記事は私がまだ覚えているトピックのいくつかだけをリストしています。

長い間待っていた私は、数日前にアントファイナンシャルに受け入れられたことをインタビュアーからようやく知りました。言うまでもなく、この時期の不安や痛みは言うまでもありませんでした。認めた、霞は一掃された。

著者はAlibabaのJavaR&Dエンジニアと協力しています。面接プロセスは、3ラウンドの技術的側面と1ラウンドの時間です。

意外な面

一方は履歴書側かもしれないので、質問は比較的簡単です。

ArrayListとLinkedListの違い

ArrayListはサイズ変更可能な配列です。ArrayListに要素が追加されると、そのサイズは動的に大きくなります。ArrayListは本質的に配列であるため、内部要素にはgetメソッドとsetメソッドを介して直接アクセスできます。

LinkedListは二重リンクリストであり、要素の追加と削除の際にArrayListよりもパフォーマンスが優れていますが、getとsetの点ではArrayListよりも弱いです。

もちろん、これらの比較は、データ量が多い場合や操作が非常に多い場合の比較を指します。データ量や計算量が少ない場合、比較は意味がありません。

メモリリークの原因は何ですか

Javaでは、メモリリークは、割り当てられたオブジェクトの存在です。これらのオブジェクトには、次の2つの特性があります。

まず第一に、これらのオブジェクトは到達可能です。つまり、有向グラフには、それらに接続できるパスがあります。

第二に、これらのオブジェクトは役に立たない、つまり、プログラムは将来これらのオブジェクトを使用しません。

オブジェクトがこれらの2つの条件を満たす場合、これらのオブジェクトはJavaのメモリリークと判断できます。これらのオブジェクトはGCによって再利用されませんが、メモリを占有します。

スレッドデッドロックとは何ですか?それを解決する方法

デッドロックには4つの条件があります。

相互排除条件:いわゆる相互排除とは、プロセスが一定期間リソースを独占することを意味します。

要求と保留の条件:リソースを要求することによってプロセスがブロックされると、プロセスは取得したリソースを保持し続けます。

非剥奪条件:プロセスはリソースを取得しており、それらが使い果たされる前に強制的に剥奪することはできません。

循環待機条件:ある種の循環待機リソース関係が複数のプロセス間で形成されます。

スレッドのデッドロックは、不適切なアクセスシーケンスが原因で複数のスレッドが共有リソースにアクセスすることによって発生します。通常、1つのスレッドがリソースAをロックし、リソースBをロックしたい場合、別のスレッドでは、リソースBがロックされ、リソースAをロックして独自のスレッドを完成させたい操作では、2つのスレッドが他方のリソースを取得することを望んでおり、自身のリソースを解放することを望まないため、両方のスレッドが待機していて実行できない状況が発生します。

デッドロックを解決するには、デッドロックの4つの条件から開始できます。必要な条件が1つ破棄されている限り、デッドロックは解決されます。Javaでマルチスレッドを使用する場合は、デッドロックの問題があるかどうかを考慮する必要があります。

赤黒木とは何ですか?それを達成する方法は?時間の複雑さ

赤黒木(RBツリー)は、特別な二分探索木です。赤黒木は特別な二分探索木です。これは、二分探索木の特性を満たしていることを意味します。任意のノードに含まれるキー値は、左の子のキー値以上であり、または以下です。右の子のキー値に等しい。この機能に加えて、赤黒木には多くの追加情報も含まれています。

赤黒木の各ノードには、ノードの色を示すストレージビットがあり、色は赤(赤)または黒(黒)です。赤黒木の特徴:

各ノードは黒または赤のいずれかです。

ルートノードは黒です。

各リーフノードは黒です。

ノードが赤の場合、その子ノードは黒である必要があります。

ノードからそのノードの子孫へのすべてのパスには、同じ数の黒いノードが含まれています。

その特性に関して、次の点に注意する必要があります。

まず、機能(3)のリーフノードは、空(NILまたはnull)のみのノードです。

次に、機能(5)は、他のパスの2倍の長さのパスがないことを確認します。したがって、赤黒木は平衡二分木に比較的近いです。

Ant Financialからオファーを受けたばかりのJavaプログラマーは、大きな工場に入った経験を共有しています

 

特定の実装コードはここには掲載されていません。実装するには、追加、削除、ローテーションを含める必要があります。赤黒木を追加または削除した後、ローテーション方式が使用されます。回転の目的は、赤黒木の特徴を備えた木を維持することです。回転には、左手と右手という2つのタイプがあります。

赤黒木は、主に順序データを格納するために広く使用されています。検索、挿入、および削除操作の時間計算量はO(lgn)です。

TCPスリーウェイハンドシェイク

スリーウェイハンドシェイク(3回ハンドシェイク;スリーウェイハンドシェイク)いわゆる「スリーウェイハンドシェイク」とは、データセグメントの送受信を同期するために、毎回送信されるデータの量を追跡およびネゴシエートする方法を指します。受信したデータ量に応じて決定されます。データ確認の回数と、データの送受信後に連絡をキャンセルし、仮想接続を確立するタイミング。

信頼性の高い送信を提供するために、TCPは新しいデータを送信する前に特定の順序でデータパケットのシーケンス番号を送信し、これらのパケットがターゲットマシンに送信された後に確認メッセージを要求します。TCPは、大量のデータを送信するために常に使用されます。TCPは、アプリケーションがデータの受信後に確認を行う必要がある場合にも使用されます。

Ant Financialからオファーを受けたばかりのJavaプログラマーは、大きな工場に入った経験を共有しています

 

最初のハンドシェイク:接続を確立すると、クライアントはサーバーにsynパケット(syn = j)を送信し、サーバーが確認するのを待ってSYN_SENT状態に入ります。SYN:シーケンス番号を同期します。

2番目のハンドシェイク:サーバーはsynパケットを受信し、クライアントのSYN(ack = j + 1)を確認すると同時に、SYNパケット(syn = k)、つまりSYN + ACKパケットを送信する必要があります。サーバーはSYN_RECV状態になります。

3番目のハンドシェイク:クライアントはサーバーからSYN + ACKパケットを受信し、確認応答パケットACK(ack = k + 1)をサーバーに送信します。このパケットが送信された後、クライアントとサーバーはESTABLISHED(TCP接続に成功)に入ります。 )3回完了した状態で握手します。

いきなり両面

半月近く待った後、突然面接官から電話がありました。

プロジェクトの紹介

Stormはどのようにして一貫性を確保しますか

Stormは、アンカーおよびackメカニズムを使用して、すべてのタプルが正常に処理されるようにする分散ストリーム処理システムです。タプルが間違っている場合は再送信できますが、間違ったタプルが1回だけ処理されるようにするにはどうすればよいですか?Stormは、この問題を解決するための一連のトランザクションコンポーネントTransactionTopologyを提供します。

トランザクショントポロジは維持されなくなりました。Tridentはトランザクショントポロジを実装しますが、原則は同じです。

参照:https://dwz.cn/8bXRPexB

ハッシュマップとそれがスレッドセーフかどうかについて話します

HashMapは、ハッシュテーブルのMapインターフェイスの実装に基づいています。HashMapでは、nullをキーとして使用でき、そのようなキーは1つだけです。つまり、nullの値に対応するキーが1つ以上存在する可能性があります。HashMapのハッシュ配列のデフォルトサイズは16であり、指数は2でなければなりません。HashtableとHashMapはどちらもIteratorを使用します。歴史的な理由から、Hashtableは列挙も使用します。HashMapはIteratorを実装し、fast-failをサポートします。

ハッシュテーブルは、配列とリンクリストで構成され、キー値をハッシュすることでオブジェクトを特定します。これにより、線形ストレージよりもパフォーマンスが向上します。

Ant Financialからオファーを受けたばかりのJavaプログラマーは、大きな工場に入った経験を共有しています

 

HashMapはスレッドセーフではありません。

10億の淘宝網の購入記録、トップ10を最も多く表示する方法

これは、限られたメモリでの大量のデータ処理の典型的な問題です。一般に、このような質問に対する答えは次のとおりです。

分割統治、ハッシュマッピング、ヒープソート、ダブルバケットパーティショニング、ブルームフィルター、ビットマップ、データベースインデックス、mapreduceなど。

特定の状況にはさまざまなシナリオがあります。これらの種類のトピックをインターネットで検索してルーチンを理解することができ、基本的には後でそれらを行うことができます。

通常のLinuxシステムはありますか、特定のプロセスをチェックする方法

ps aux | grep java viewjavaプロセス

psauxすべてのプロセスを表示

ps -ef | greptomcatすべてのtomcatプロセスを表示

ps -ef | grep --color javaは、照会するキーワードを強調表示します

kill -919997スレッド番号19979でプロセスを終了します

InnodbとMySIAMの違いについて話す

MyISAMタイプはトランザクション処理などの高度な処理をサポートしていませんが、InnoDBタイプはサポートしています。MyISAMタイプのテーブルはパフォーマンスを重視し、その実行はInnoDBタイプよりも高速ですが、トランザクションサポートを提供しませんが、InnoDBはトランザクションサポートと外部キーなどの高度なデータベース機能を提供します。

InnoDBは、FULLTEXTタイプのインデックスをサポートしていません。

InnoDBはテーブルの特定の行数を保存しません。つまり、テーブルからselect count(*)を実行すると、InnoDBはテーブル全体をスキャンして行数を計算しますが、MyISAMは保存された行数を読み取るだけです。count(*)ステートメントにwhere条件が含まれている場合、2つのテーブルの操作は同じであることに注意してください。

タイプAU​​TO_INCREMENTのフィールドの場合、InnoDBにはフィールドのインデックスのみが含まれている必要がありますが、MyISAMテーブルでは、他のフィールドとのジョイントインデックスを作成できます。

DELETE FROM tableの場合、InnoDBはテーブルを再作成せず、行ごとに削除します。

LOAD TABLE FROM MASTER操作はInnoDBでは機能しません。解決策は、最初にInnoDBテーブルをMyISAMテーブルに変更し、データのインポート後にInnoDBテーブルに変更することです。ただし、追加のInnoDB機能を使用するテーブル(外部など)キー)が機能しない。該当する。

jvmメモリモデルについて話し、あなたが知っているガベージコレクタを紹介します

実際、JVMメモリモデルの概念はありません。これは、Javaメモリモデルまたはjvmメモリ構造である必要があります。ここでのインタビュアーは、回答する前に、どちらが質問されているかを聞く必要があります。

参照できるもの:JVMメモリ構造VSJavaメモリモデルVSJavaオブジェクトモデル

あなたはビッグデータの方向に向かっていて、どのビッグデータフレームワークを理解していると言いました

著者は、いくつかの動物園の飼育係、嵐、HDFS、Hbaseなどに答えました。

その他の問題

100個の順序付けられた整数の順序を混乱させる方法は?

信頼できるUDPプロトコルを設計する方法は?

面接官からは嵐の一貫性の問題が疑われ、少し緊張しましたが、間違った答えはしなかったので、それでも知識をより明確に把握する必要があります。

よく準備された3つの側面

プロジェクトの紹介

プロジェクト導入後、あまり質問しなかった

ハッシュマップを導入する

HashMapは本当に高頻度の面接の質問です。私は多くの面接でそれを尋ねてきたので、習得する必要があります。

並行性を導入する

ここでは、揮発性、同期、ロック、楽観的および悲観的ロック、ロック拡張、ロック劣化、スレッドプールなどを含む並行システム全体について話すことができます。

銀行口座の読み書き方法

読み取り/書き込みロックと考えられるデッドロックの問題について話しました

リレーショナルデータベースと非リレーショナルデータベースの違いについて話す

非リレーショナルデータベースの利点:

パフォーマンス:NOSQLは、キーと値のペアに基づいています。これは、テーブル内の主キーと値の間の対応する関係として想像でき、SQLレイヤーで解析する必要がないため、パフォーマンスが非常に高くなります。

スケーラビリティ:また、キーと値のペアに基づくデータ間の結合がないため、水平方向のスケーリングが非常に簡単です。

使用シナリオ:ログ、埋没ポイント、フォーラム、ブログなど。

リレーショナルデータベースの利点:

複雑なクエリ:SQLステートメントを使用すると、1つのテーブルと複数のテーブルの間で非常に複雑なデータクエリを簡単に実行できます。

トランザクションサポート:高いセキュリティパフォーマンスでデータアクセス要件の実現を可能にします。

使用シナリオ:論理的に関連するすべてのデータストレージ

リンクリストの中間ノードにアクセスする方法

この問題の場合、最初に考えることができるのは、最初にリンクリスト全体をトラバースし、次にリンクリストの長さを計算し、次に2番目のパスをトラバースして中間位置データを見つけることです。この方法は非常に簡単です。

リンクリストを1回だけトラバースできる必要がある場合、問題を解決するにはどうすればよいですか?

2つのポインターを確立でき、1つのポインターは一度に2つのノードをトラバースし、もう1つのノードは一度に1つのノードをトラバースします。高速ポインターが空のノードにトラバースする場合、低速ポインターが指す位置は、リンクリスト。この問題の解決策は、高速ポインタ方式と低速ポインタ方式と呼ばれます。

プロセス間通信とその違いについて話す

プロセス間通信とは、異なるプロセス間での情報の伝播または交換を指します。通常、パイプ(名前なしパイプと名前付きパイプを含む)、メッセージキュー、セマフォ、共有ストレージ、ソケット、ストリームなどがあります。

IPアドレスの取得から関連コンテンツの返却方法まで、淘宝網のWebページにアクセスするための特定のプロセス

最初にDNSを介してサーバーアドレスに解決し、次にリバースプロキシ、負荷分散サーバーなどを使用して、クラスター内で実際に要求を実行するマシンを見つけます。CDN、ページキャッシュ、Cookie、セッションなどを導入することもできます。

このプロセスには、3ウェイハンドシェイク、HTTP要求に含まれるもの、ステータスコードなども含まれ、OSIの7つの層を導入できます。

サーバーはリクエストを受信すると、ビジネスロジックを実行し、MVCに従って実行プロセスを個別に導入できます。

サービス処理中に他のRPCサービスを呼び出すか非同期メッセージを呼び出すかにかかわらず、このプロセスには、サービスの検出と登録、およびメッセージルーティングが含まれます。

データベースが最終的に照会されたときに、データベースはキャッシュされますか?リレーショナルデータベースですか?サブデータベースとテーブルですか、それともどのような操作を行いますか?

データベースの場合、データ量が多い場合はサブデータベースとサブテーブルが必要です。一般的なビジネスはサブテーブルフィールドに基づいてモジュラスに基づいてサブテーブルを実行します。データベース操作を行う場合、データの読み取りと書き込みを行います。また、同じルールに従って決定されます。どのテーブルが操作に対応しますか。この種の実現もオープンソースであり、AliのTDDLにはこの機能があります。サブデータベースとサブテーブルには、シーケンスの設定方法、ホットな問題の解決方法など、多くのテクノロジーも含まれています。

最後に、処理結果を応答にカプセル化し、クライアントに返します。次に、ブラウザはページをレンダリングします。

気になる時間側

どのような挫折に遭遇しましたか

この種の質問は、主に面接官が困難に直面したときに耐えられるかどうかを調べ、彼の問題解決能力を見ることができます。

挫折について簡単に説明し、挫折をどのように克服し、最終的な利益は何かを説明できます。

キャリアプランニング

あなたの決意を示してください、まず第一に、あなたは勉強を続ける準備ができていません、あなたは仕事を雇わなければなりません。それから、短期的には業界や転職はしないと言ったので、もっと好きです。数年は自分の興味を見て、計画を立てていくことができればと思います。

アリの知識

これは短い答えですが、誇張しています。

感心する人はいますか

私はジェームズ・ハーデンと言いました、ミス・ハーは実際に笑いました。

これは一部のIT巨人と言えます。

あなたはどこで働きたいですか

この質問は、会社が所在する都市で決定的に答えられます。

その他の問題

舞台でできる趣味はありますか?

思い出に残るもの

やっと

大きな工場との面接の準備をしているこのプログラマーの面接の質問をいくつか共有し、すべての人を助けることを望んでいます。

情報が必要な友達は、ここをクリックして入手してください!

おすすめ

転載: blog.csdn.net/m0_46995061/article/details/115265945