技術共有

初めての面接体験(Java開発インターン)

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

面接官の質問

  • ここで何かプロジェクトを行ったことがあるかどうかお聞きしたいのですが?
  • これまでに取り組んできたプロジェクト、使用したテクノロジースタック、開発を担当したコンテンツについて教えてください。 (プロジェクトの経験)
  • 8 つの基本データ型とは何ですか? (ベース)
  • ロング型は直接実行できるか教えてください。問題は、それが直接計算できるかどうかです。 (ベース)
  • シングルトンパターンを理解していますか?それについて話してもらえますか(デザインパターン)
  • 怠け者モードと空腹者モードの違いは何ですか?
  • 取引の特徴は何ですか? (取引)
  • プロジェクトに取り組んでいるときに遭遇した例外について教えてください。 (異常な)
  • よく使われる時間の 3 つのカテゴリについて話しましょう。 (ベース)
  • カレンダー作成の 3 つの方法について話しますか?
  • セッションのライフサイクルについて話しましょう。 (セッション)
  • プロジェクトに取り組んでいるときに、浮動小数点の精度が失われることに遭遇したことがありますか?どうやって解決しましたか?
  • 次に、浮動小数点を使用した計算を行います。計算にはどのデータ型を選択しますか?
  • よく使用される注釈をいくつか教えていただけますか? 春?または、他の何か?
  • スレッドについてご存知ですか?
    • スレッドとプロセスの違いは何ですか?
  • それで、スレッドセーフとは何なのか教えてください。
  • == と等しいの違いを教えてください。
  • それで、あなたはLinuxを使ったことがありますか?よく使用されるコマンドについて簡単に説明してもらえますか?

問題が解決しました

- 我想问一下你这边有做过什么项目吗?

比較的熟練したプロジェクトを 1 つか 2 つ選んで話してもいいと思います。

- 你方便讲一下你做过的那些项目吗,用了什么技术栈,包括你负责开发的内容是什么?

話したい最も馴染みのあるプロジェクトを選んでください。

- 八大基本数据类型是什么?

バイト、ショート、インテリジェンス、ロング、フロート、ダブル、文字、ブール

- 你说一下long类型能直接运转吗(long型データを直接操作できるかどうかを聞いていると思います)

Long 型のデータを直接操作できます。式内で int 型の値と Long 型の値を混在させると、式全体の結果が Long 型になるように、int 型の値が自動的に Long 型に変換されます。

- 你了解单例模式吗?你可以讲一下吗

シングルトン パターンは、一般的に使用されるソフトウェア設計パターンであり、その目的は、クラスにインスタンスが 1 つだけ存在するようにし、この一意のインスタンスを取得するためのグローバル アクセス ポイントを提供することです。このパターンは、リソースへのアクセスを制御する必要がある場合、またはオブジェクトのインスタンス化にリソースが大量に消費されたり時間がかかり、これらのリソースまたはインスタンスのうち 1 つだけがグローバルに必要な場合に便利です。シングルトン モードの一般的な実装方法には主に、レイジー モードとハングリー モードが含まれます。

- 懒汉模式跟饿汉模式有什么区别?

  1. から入手できますオブジェクトの初期化のタイミング、スレッドの安全性、およびリソースの使用率他の側面で比較します。

      1. 初期化タイミング
      • レイジーモード: レイジーモードは延迟加载シングルトンパターン。特徴的なのは、第一次使用时创建实例对象 、クラスのロード時に作成するのではなく。このパターンでは、次の場合にインスタンス オブジェクトの必要性が回避されます。资源浪费、必要な場合にのみ作成されます。
      • ハングリーモード: ハングリーマンモードは一種の在类加载时就创建实例シングルトンパターン。特徴は、クラスを使用するかどうかに関係なく、クラスをロードしたときにインスタンス オブジェクトが作成されることです。このメソッドでは、どのような状況でも同じインスタンス オブジェクトを確実に取得できますが、何らかの問題が発生する可能性があります。性能和资源上的浪费、特にインスタンス オブジェクトが使用されない場合があります。
      1. スレッドセーフティ
      • レイジーモード: Lazy モード自体は非线程安全的複数のスレッドが同時に getInstance() メソッドを呼び出し、同時に判定ステートメントに入り、複数のインスタンスが作成される可能性があるためです。スレッドセーフを実現するには、 getInstance() メソッドを使用できます。添加synchronized关键字ただし、これによりパフォーマンスのオーバーヘッドが発生します。さらに、二重チェックされたロック (Double-Checked Locking) やその他の方法を使用して、同期のオーバーヘッドを削減することもできます。
      • ハングリーモード: ハングリーモードは线程安全はい、クラスのロード時にインスタンス オブジェクトが作成されるため、マルチスレッド環境での競合の問題は発生しません。
      1. リソースの使用率とパフォーマンス
      • レイジーモード : 遅延モードでは、インスタンス オブジェクトが必要ない場合にリソースを無駄にしないため、リソースを節約できます。ただし、初回使用時に初期化が必要となるため、初期化処理が複雑であったり、時間がかかるとパフォーマンスに影響を与える可能性があります。
      • ハングリーモード注: ハングリー モードは、使用されるかどうかに関係なくインスタンス オブジェクトを作成するため、リソース使用率の点でレイジー モードほど柔軟ではない可能性があります。ただし、クラスのロード時にインスタンス オブジェクトがすでに作成されているため、初期化が必要なく、最初の呼び出しでは高速になります。
  2. 該当シーン

    • レイジーモード: に適用オブジェクトが初めて使用されるときにのみ作成され、インスタンス オブジェクトの初期化プロセス中に複雑なスレッド セーフ要件がないシナリオ。 。例えば、ファイルマネージャーこれは典型的な例であり、アプリケーションの起動時にすぐにファイルの読み取りと書き込みを行う必要はなく、必要な場合にのみ関連する操作を実行する必要があるためです。
    • ハングリーモード : プログラムの開始時に初期化する必要があり、アプリケーションのライフサイクル全体にわたって使用されるリソースに適しています。たとえば、ロガーはハングリー パターンの適切な候補です。これは、ログ機能は通常、アプリケーションの開始時に準備ができており、アプリケーションの実行時全体にわたってメッセージを記録する必要があるためです。
    • 要約すると、怠け者モードと空腹者モードにはそれぞれ長所と短所があり、実際のアプリケーションでは、特定のシナリオに従って包括的に検討し、設計する必要があります。

- 说一下事务的几种特性?

  1. トランザクションには 4 つの基本的な特性があり、次のように呼ばれます。具体的には次のような機能があります。
    • 原子性 : アトミック性とは、トランザクション内のすべての操作が完了するか、分割できない作業単位であることを意味します。トランザクションの実行中にエラーや障害が発生した場合、実行された操作は取り消され (ロールバック)、トランザクション全体がまったく起こらなかった操作と同じになります。この機能により、トランザクションの整合性と一貫性が保証されます。
    • 一貫性 : 整合性とは、トランザクションがデータベースをある整合性状態から別の整合性状態に変換する必要があることを意味します。トランザクションの開始前および終了後、データベースの整合性制約 (主キー制約、外部キー制約など) は破壊されず、すべてのデータは論理的一貫性を維持します。トランザクションの実行中にデータベースの整合性が損なわれた場合、トランザクションは中止され、実行された操作はロールバックされます。
    • 分離 : 分離とは、複数のトランザクションが同時に実行される場合、各トランザクションが互いに分離され、1 つのトランザクションの実行が他のトランザクションによって干渉されないことを意味します。データベース システムは、同時に実行されるトランザクションが互いに干渉しないように一定レベルの分離を提供し、それによってデータの正確性と一貫性を保証します。分離は通常、ロック (行ロック、テーブル ロックなど) やマルチバージョン同時実行制御 (MVCC) などのメカニズムを通じて実現されます。
    • 耐久性 : 永続性とは、永続性とも呼ばれ、トランザクションが一度コミットされると、データベースに対するその変更は永続的であり、システムに障害が発生した場合でも失われないことを意味します。データベース システムは、ログと回復メカニズムによってトランザクションの耐久性を保証します。システム障害が発生した場合でも、システムはログを通じてコミットされたトランザクションによるデータベースへの変更を回復できます。

- 说一下你在做项目的过程中都遇到过哪些异常吗?(いくつか挙げてみます)

  1. コードの例外
    • NullPointerException : 初期化されていないオブジェクトにアクセスまたは操作しようとするとスローされます。オブジェクトが null かどうかを確認するのを忘れて、それを直接使用してしまうことがよくあります。
    • 配列範囲外の例外 (ArrayIndexOutOfBoundsException): 配列へのアクセス時に無効なインデックスが使用されました (インデックスが 0 未満、または配列サイズ以上です)。
    • 型変換例外(ClassCastException): キャストする場合、変換されるオブジェクトはターゲット型またはそのサブクラスのインスタンスではありません。
    • ArithmeticException // ゼロによる: 除算演算を行う場合、除数は 0 になります。
  2. データの例外
    • データフォーマットエラー: たとえば、JSON または XML データを解析する場合、データ形式が期待どおりではありません。
    • データ整合性の例外: データベース内の外部キー制約が失敗した場合、データを挿入または更新しようとするとデータ整合性ルールに違反します。
    • データが見つからない例外: データベースへのクエリ時に、指定された条件に従って該当するデータが見つからなかった場合。
  3. ネットワーク例外
    • 接続タイムアウト (ConnectTimeoutException): ネットワーク接続を確立しようとしているときに、応答を待っている間に接続要求がタイムアウトになりました。
    • 読み取りタイムアウト (SocketTimeoutException): 接続からのデータの読み取り中に操作がタイムアウトしました。
    • ネットワークに到達できません (UnknownHostException):ホスト名を解決することはできません。
    • 接続が拒否されました (ConnectionRefusedError): ターゲット マシンが接続要求を拒否しました。
  4. システムリソースの例外
    • メモリ オーバーフロー (OutOfMemoryError): メモリを割り当てようとしたときに、JVM には利用可能な十分なメモリ領域がありませんでした。
    • ファイルが存在しません (FileNotFoundException): アクセスしようとしているファイルまたはディレクトリは存在しません。
    • 権限が不十分です (SecurityException/AccessDeniedException): ファイルの読み取りと書き込み、ネットワーク リソースへのアクセスなどの操作を実行するための十分な権限がありません。
  5. サードパーティサービスの例外
    • サービスが利用できない (ServiceUnavailableException): 依存するサードパーティ サービスは一時的に利用できません。
    • API制限(RateLimitException): サードパーティ API へのリクエストが制限 (リクエスト頻度制限など) を超えています。
    • 認証に失敗しました (AuthenticationException): サードパーティのサービスにアクセスするとき、認証情報が無効または期限切れです。
  6. 論理例外
    • ビジネスロジックエラー: たとえば、注文金額の計算が間違っている、在庫が不足しているのに注文が処理されているなど。
    • 矛盾したステータス:システムの特定の状態が期待と一致しないため、その後の操作が不可能になります。

- 说一下时间常用的三个类?

LocalDate、LocalTime、LocalDateTime。 (どれか3つ挙げてください)

  • Java では、処理時間に関して一般的に使用されるクラスは、Java 8 で導入された java.util.Date、java.util.Calendar、および java.time という 3 つのパッケージの下のクラスです (たとえば、ローカル日付、ローカル時間、ローカル日付時間待って)

- 说一下日历的三个方法?

カレンダー関連の操作というと、通常 java.util.Calendar クラスを思い浮かべます。これは、カレンダー フィールド (年、月、日、時間など) を操作するためのメソッドを提供する抽象クラスだからです。Java 8 以降、新しい日付と時刻 API (java.time パッケージの下にある) が導入され、より優れた日付と時刻の処理機能が提供されました。

  • LocalDateTime の一般的なメソッドの紹介:
      1. LocalDateTime オブジェクトを作成する
      • now(): 現在の日付と時刻を表す LocalDateTime オブジェクトを作成します。
      • of(): 指定された年、月、日、時、分、秒 (およびオプションのナノ秒) を使用して LocalDateTime オブジェクトを作成します。例: LocalDateTime.of(2023, Month.JANUARY, 1, 12, 0, 0)。
      1. LocalDateTime オブジェクトのプロパティを取得する
      • get Year()、getMonth()、getDayOfMonth()、getHour()、getMinute()、getSecond() など: LocalDateTime オブジェクトの年、月、日、時、分、秒の属性をそれぞれ取得するために使用されます。
      1. LocalDateTime オブジェクトのプロパティを変更する
      • withyear()、withMonth()、withDayOfMonth()、withHour()、withMinute()、withSecond() など: LocalDateTime オブジェクトのプロパティを指定された値に設定し、新しい LocalDateTime オブジェクトを返します。 元のオブジェクトは変更されません。 . 変数 (LocalDateTime は不変であるため)。
      1. 日付と時刻の加減算
      • plusyears()、plusMonths()、plusDays()、plusHours()、plusMinutes()、plusSeconds() など: 指定された期間を LocalDateTime オブジェクトに追加し、新しい LocalDateTime オブジェクトを返します。 minusyears()、minusMonths()、minusDays()、minusHours()、minusMinutes()、minusSeconds() など: LocalDateTime オブジェクトから指定された期間を減算し、新しい LocalDateTime オブジェクトを返します。
      1. LocalDateTime オブジェクトを比較する
      • isBefore(LocalDateTime other): 現在のオブジェクトが指定された LocalDateTime オブジェクトよりも前かどうかを判断します。
      • isAfter(LocalDateTime other): 現在のオブジェクトが指定された LocalDateTime オブジェクトより後であるかどうかを判断します。
      1. LocalDateTime オブジェクトのフォーマット
      • format(DateTimeFormatter フォーマッタ): LocalDateTime オブジェクトを指定された日付と時刻の形式の文字列にフォーマットします。例: DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String formattedDateTime = dateTime.format(formatter);
      1. 時差を計算する
      • LocalDateTime 自体は時差を直接計算するメソッドを提供しませんが、Duration クラスまたは ChronoUnit クラスを使用して 2 つの LocalDateTime オブジェクト間の時差を計算できます。
      • 継続時間クラスを使用します: 継続時間duration = Duration.between(start, end); そうすれば、継続時間オブジェクトを通じて秒、ミリ秒などの時間差の特定の値を取得できます。
      • ChronoUnit クラスを使用する: 時差を計算するための単位 (年、月、日、時間など) を指定できます。例: 長い日 = ChronoUnit.DAYS.between(start, end);。

- 说一下session的生命周期吧。

  1. セッションの作成
    • 作成時間:Session は、ユーザーが最初にサーバーにアクセスし、JSP、サーブレットなどをリクエストするときに使用されます。动态资源いつ作成されました。HTML、画像などにのみアクセスします。静态资源セッションの作成はトリガーされません。必要に応じて、request.getSession(true) を呼び出してセッションの生成を強制できます。
    • ストレージの場所: セッションはサーバー側に保存され、通常は迅速にアクセスできるようにサーバーのメモリに保存されます。
  2. セッションのメンテナンス
    • 最終アクセス時刻を更新する: ユーザーがサーバーにアクセスし続ける限り、サーバーはセッションの読み取りまたは書き込みに関係なく、リクエストごとにセッションの最終アクセス時刻を更新し、セッションを維持します。これは、ユーザーのセッションが「アクティブ」状態であることを示します。
    • セッションの独自性 : 各ユーザーは、セッション ID によって一意に識別される独立したセッションを持ちます。 セッション ID は通常、サーバーがさまざまなユーザー セッションを識別できるように、Cookie (JSESSIONID という名前) を通じてクライアントに送信されます。
  3. セッションの破棄
    • 自動的に破壊される : セッションのライフサイクルがタイムアウトになると (つまり、長時間アクティビティがない場合)、サーバーはセッションをメモリから自動的に消去します。この時間は通常構成可能で、Tomcat ではデフォルトで 30 分に設定されます。
    • 手動破壊 : 開発者は、セッションの validate() メソッドを呼び出してセッションを手動で破棄できます。これは通常、ログアウトやタイムアウトなどのシナリオに使用されます。
  4. セッションのライフサイクル設定
    • サーブレットで設定: session.setMaxInactiveInterval(int interval) メソッドを呼び出して、セッション タイムアウトを秒単位で設定します。
    • web.xml で設定: Web アプリケーションの web.xml ファイルで、通过