記事ディレクトリ
- フレームワーククラス
-
- 1. Spring フレームワークと比較した Spring Boot の利点は何ですか?
- 2. Spring Boot と Spring MVC の共通アノテーション (requestingMapping、responseBody など)
- 3. 一般的に使用される Java デザイン パターン (春に使用されるデザイン パターン)
- 4. Spring IOC とは何か、そしてそれを理解する方法
- 5. AOP の PointCut とは何ですか?またアドバイザーを理解する方法は何ですか?
- 6. SOAの概念
- 7. マイクロサービス インターフェイス呼び出しのタイムアウト処理、マイクロサービス呼び出しの問題を特定する方法
- 8. WSDLとは
- 9. Webサービス、ダボなどの理解方法
- 10. サーバー側の 404、301、302、400、500 エラーとは何ですか?
- 11. オートワイアとリソースの違い
- データベース
- 持久化
- Javaの基本
-
- 1. ハッシュマップ キーの値を null にすることはできますか? キーは繰り返されていますか?
- 2. 一般的に使用されるコレクション、それらの違いは何ですか、どれがスレッドセーフでどれがスレッドセーフでないか
- 3. Hashmap の基礎原理、18 以降の基礎データ構造、CurrentHashMap の基礎原理
- 4. json 解析の一般的な方法 (どの json 解析 jar パッケージが使用されているか)
- 5. 抽象クラスとインターフェイスの違い、抽象クラスは静的である可能性があります
- 6. コンストラクターはプライベートにできますか? シングルトン モードのコンストラクターはプライベートにできますか?
- 7. バブルソートの実装原理
- 8. 並列処理と同時実行の違い
- 9. 多層ネストされたループ、直接飛び出す
- 10. 日付形式 M と m は何年を表しますか? 4 つの Y は何ですか?
- 11. 文字列に英語と数字が含まれている場合に数字を削除する方法
- 12. String クラスのよく使われるメソッド (substring、charAt)
- 13. 配列と文字列の長さを取得する方法
- 14. プロジェクトで、llst とオブジェクトを取得します。最初に行う必要があること
- 15. a の ascil コードは 97 です
- 16. +を使わずに足すか加算する
- 17. スレッド プールを作成する方法と、スレッド プールを作成するためのパラメータは何を表しますか?
- 18. マルチスレッドの作り方は何通りあるの? 4種類
- 19. Walt と sleep の違い、notifyAll を理解する方法
- 20. クラスを最終的に変更できますか? 例を挙げてください
- Linux
フレームワーククラス
1. Spring フレームワークと比較した Spring Boot の利点は何ですか?
- 従来の Spring フレームワークの欠点:
- Spring トランザクション管理、MVC、およびサードパーティ ライブラリの有効化にはすべて、表示設定に XML または Java が必要ですが、これは重すぎます。
- 構成の作成には、アプリケーション ロジックの実際の作成に時間がかかる
- プロジェクトの依存関係を管理するには、どのライブラリを使用するかを検討し、どのバージョンとライブラリが競合しないかを把握する必要があり、開発効率に影響します。
- Spring Boot の利点:
- 自動構成: Spring アプリケーションの多くの一般的な機能について、SpringBoot は関連する構成を自動的に提供できます。
- 起動依存関係: SpringBoot にどの機能が必要かを伝え、必要なライブラリを導入できます。
- CLI コマンド ライン インターフェイス: SpringBootCLI を使用すると、コードを記述するだけで、従来のプロジェクトを構築することなく完全なアプリケーションを完成させることができます。
- Actuator: 実行時にアプリケーションの内部を検査する機能を提供します。
2. Spring Boot と Spring MVC の共通アノテーション (requestingMapping、responseBody など)
-
@Autowired
-
@リソース
-
@RequestMapping
-
@RequestBody
-
@GetMapping
-
@PostMapping
-
@PutMapping
-
@DeleteMapping
-
@PatchMapping
-
@ControllerAdvice
-
@ResponseBody
-
@ExceptionHandler
-
@ResponseStatus
-
@PathVariable
-
@RequestParam
-
@コントローラ
-
@RestController
-
@ModelAttribute
-
@CrossOrigin
-
@InitBinder
-
@SpringBootApplication
-
@EnableAutoConfiguration
-
@ConditionalOnClass と @ConditionalOnMissingClass
-
@ConditionalOnBean および @ConditionalOnMissingBean
-
@ConditionalOnProperty
-
@ConditionalOnResource
-
@ConditionalOnWebApplication と @ConditionalOnNotWebApplication
-
@ConditionalExpression
-
@条件付き
3. 一般的に使用される Java デザイン パターン (春に使用されるデザイン パターン)
-
シングルトンパターン
-
工場パターン
-
プロトタイプパターン
-
ビルダーモード
-
デコレータパターン
-
テンプレートメソッドパターン
-
オブザーバーパターン
-
シンプルファクトリー(23デザインパターン以外)
-
ファクトリーメソッド
-
シングルトンパターン
-
アダプターパターン
-
デコレータパターン
-
プロキシモード
-
オブザーバーパターン
-
戦略パターン
-
テンプレートメソッドパターン
4. Spring IOC とは何か、そしてそれを理解する方法
IOCとはinverse of controlの略で、制御の反転と訳され、オブジェクトを生み出す考え方のことです。では、制御の反転とは何でしょうか? これは、オブジェクトを作成する権限を Spring コンテナに渡すことであり、実際には、Spring コンテナにオブジェクトの作成を支援させるためであり、Java コードで新しいオブジェクトを作成する必要はありません。IOC を学ぶ前に、Java コードで ClassA という名前のオブジェクト クラスを作成したい場合、どのようにオブジェクトを作成しますか? ClassA classa=new ClassA(); ただし
、IOC を学習した後は、オブジェクト classa を取得するために上記のステートメントを記述する必要はありませんが、Spring コンテナをロードすると、Spring コンテナによって classa オブジェクトが作成されます。 、私たちはそれを手に取って使用するだけです
5. AOP の PointCut とは何ですか?またアドバイザーを理解する方法は何ですか?
PointCut は、どのメソッドを実行する必要があるかを参照します。「AOP」PointCut 式には、次のようないくつかの方法があります。
5.1 実行:
一般的にメソッドの実行形式を指定するために使用されます: 実行(メソッドタイプ(publicなど省略可) メソッド戻り値タイプ パッケージパス(省略可) メソッド名(パラメータ) 例外タイプ(省略可
)
- メソッドの種類には、Public、Protectedなどが含まれますが、省略可能です。
- メソッドの戻り値のタイプ、* すべての戻り値のタイプを含めることができます
- 「com.demo...*」などのパッケージ パスは、「com.demo」パッケージとこのパッケージ内のすべての種類のサブパッケージを意味します
- 「add*」などのメソッド名は、add で始まるすべてのメソッドを意味します。パラメータ: (*) は任意のパラメータを意味し、(...) はすべてのパラメータを意味します
- 例外タイプ (execution(* *(...) throws Exception)" など) は、例外をスローするすべてのメソッドと一致します。
5.2.2以内:
タイプの指定に使用され、指定されたタイプのすべてのメソッドがインターセプトされます。 タイプの指定に使用され、指定されたタイプのすべてのメソッドがインターセプトされます。
- inside(com.demo.service.impl.UserServiceImpl) は、UserServiceImpl クラスの対応するオブジェクトのすべてのメソッド呼び出しと一致し、UserServiceImpl オブジェクトのみにすることができ、そのサブオブジェクトにはできません
- inside(com.demo...*) は、com.demo パッケージとそのサブパッケージ内のすべてのクラスのすべてのメソッドへの外部呼び出しと一致します。
5.2.3. これ:
Spring AOPはプロキシに基づいており、これはプロキシオブジェクトを表し、構文はthis(type)で、生成されたプロキシオブジェクトがtypeで指定された型に変換できる場合、一致することを意味します。
- This(com.demo.service.IUserService) は、IUserService タイプによって生成されたプロキシ オブジェクトのすべてのメソッドの外部呼び出しと一致します。
5.2.4. 目標:
Spring AOP はプロキシに基づいており、target はプロキシされるターゲット オブジェクトを表し、プロキシされるターゲット オブジェクトを指定された型に変換できる場合に一致します。
- target(com.demo.service.IUserService) は、IuserService 型に変換できるプロキシされたターゲット オブジェクトのすべてのメソッドのすべての外部呼び出しと一致します。
5.2.5 引数:
args はメソッドのパラメータを照合するために使用されます
- args() は引数のないメソッドに一致します
- args(java.lang.String) 一致するメソッド パラメータの型は String です
- 任意の引数を指定した args(…) メソッド
- args(java.lang.String,…) は、最初のパラメータが String 型であり、他のパラメータが任意であることと一致します。最後のパラメータは文字列と同じです。
5.2.6 @within 和 @target
@Transactional など、対応するアノテーションを持つすべてのクラスのメソッド
@within(org.springframework.transaction.annotation.Transactional)
@target(org.springframework.transaction.annotation.Transactional)
5.2.7 @アノテーション:
@Transactional など、それに応じてアノテーションが付けられたメソッド
@annotation(org.springframework.transaction.annotation.Transactional)
クラス アノテーションの場合は @within および @target、メソッド アノテーションの場合は @annotation
5.2.8 @引数:
@Transactional など、パラメーターがそれに応じてマークされているメソッド
@args(org.springframework.transaction.annotation.Transactional)
5.3. ポイントカットの使用
5.3.1 基本的な使い方
//PointCut表达式
@Pointcut("execution(public * com.example.demo.controller.UserController.*(..))")
//PointCut签名
public void log(){
}
//下面直接调用log(),相当于直接使用上面的表达式,简化代码
@After("log()")
public void doAfter(){
logger.info("222222222");
}
5.3.2 PointCut の演算子
&&、||、! 操作は PointCut で使用できます
@Pointcut("execution(public * com.example.demo.controller.UserController.*(..))")
public void cutController(){
}
@Pointcut("execution(public * com.example.demo.Service.UserService.*(..))")
public void cutService(){
}
//使用 && 运算符,则cutAll()的作用等同于 cutController 和 cutService 之和
@Pointcut("cutController() && cutService()")
public void cutAll(){
}
Spring Aop のプロキシは主に 3 つのステップに分かれています。すべてのアドバイザを取得し、現在の Bean に適用できるアドバイザをフィルタリングし、アドバイザを使用して現在の Bean のプロキシ オブジェクトを生成します。
6. SOAの概念
SOA (サービス指向アーキテクチャ) は、サービス インターフェイスを通じてソフトウェア コンポーネントを再利用および相互運用するための方法を定義します。サービスは共通のインターフェイス標準とアーキテクチャ パターンを使用するため、新しいアプリケーションに迅速に統合できます。これにより、アプリケーション開発者は、以前のように既存の機能を再開発または複製したり、既存の機能に接続したり、既存の機能との相互運用性を提供したりする方法を理解する必要がなくなります。
7. マイクロサービス インターフェイス呼び出しのタイムアウト処理、マイクロサービス呼び出しの問題を特定する方法
- タイムアウトを十分な長さに設定します。
- それでもタイムアウトになる場合は、どのモジュールに応答がタイムアウトする例外が発生しているかを確認する必要があります。
- すべてのモジュールに異常がない場合は、特定のメソッドの応答時間が長すぎる可能性がありますが、このとき、リンク追跡を通じて各マイクロサービスの応答時間を確認し、応答を最適化することができます。
- データベースを最適化します。
8. WSDLとは
WSDL は、Web サービスと Web サービスへのアクセス方法を記述するための XML ベースの言語です。
9. Webサービス、ダボなどの理解方法
Web サービスは XML Web サービスとも呼ばれ、インターネットまたはイントラネット上の他のシステムからのリクエストを受信できる、軽量で独立した通信テクノロジです。はい: SOAP を通じて Web 上で提供され、WSDL ファイルを使用して記述され、UDDI を通じて登録されるソフトウェア サービス。
これは元々、アリババがオープンソースで Java によって開発された優れた高性能サービス フレームワークであるタオバオに適用され、その後 Apache 組織に貢献されました。
10. サーバー側の 404、301、302、400、500 エラーとは何ですか?
- 404 Not Found: 要求されたリソースが存在しません
- 301 移動済み 永久
永久指向。このステータス コードは、要求されたリソースに新しい URI が割り当てられていること、およびリソースが現在参照している URI が今後使用される必要があることを示します。 - 302
一時的なリダイレクトが見つかりました。このステータス コードは、要求されたリソースに新しい URI が割り当てられていることを示し、ユーザーが (今回は) 新しい URI を使用してアクセスできることが期待されます。301 と似ていますが、302 で示されるリソースは永続的に移動されるのではなく、一時的にのみ移動されます。
11. オートワイアとリソースの違い
- @Autowired アノテーションは Spring によって提供されますが、@Resource アノテーションは J2EE 自体によって提供されます
- @Autowird アノテーションはデフォルトで byType によって挿入されますが、@Resource アノテーションはデフォルトで byName によって挿入されます。
- @Autowired アノテーションによって注入されたオブジェクトは IOC コンテナ内に存在する必要があります。それ以外の場合は、注入される現在の Bean が無視されることを示す属性 required=false を追加する必要があります。直接注入がある場合、スキップは行われず、エラーは報告されません。
データベース
1. トランザクションの伝播特性はいくつかありますが、プロジェクトではどれが使用されていますか?
-
PROPAGATION_REQUIRED: 現在のトランザクションをサポートします。存在しない場合は、新しいトランザクションを作成します (デフォルト)。
-
PROPAGATION_REQUIRES_NEW: 新しいトランザクションを開きます。トランザクションがすでに存在する場合は、既存のトランザクションを一時停止します。
-
PROPAGATION_SUPPORTS: 現在のトランザクションをサポートします。現在のトランザクションがない場合は、非トランザクション方式で実行されます。
-
PROPAGATION_NOT_SUPPORTED: 非トランザクション モードで実行します。トランザクションがある場合は、現在のトランザクションを一時停止します。
-
PROPAGATION_MANDATORY: トランザクションで実行する必要があります。現在トランザクションが発生していない場合は、例外がスローされます。
-
PROPAGATION_NEVER: 非トランザクション モードで実行します。トランザクションがある場合は例外をスローします。
-
PROPAGATION_NESTED: トランザクションが現在進行中の場合、メソッドはネストされたトランザクションで実行される必要があります。ネストされたトランザクションは、それを囲んでいるトランザクションとは独立してコミットまたはロールバックできます。カプセル化されたトランザクションが存在しない場合は、PROPAGATION_REQUIRES のように動作します。
2. mysql はページング書き込み、mysql 実行プランを実装します。
キーワード LIMIT
Explain 射影列の選択 FROM テーブル名 WHERE 条件
3. Oracle の rownum の使用法と一般的に使用される文字列関数
rownum: 疑似列。名前が示すように、これはデータベース自体によって作成されるフィールドです。
文字の大文字と小文字の変換関数 UPPER LOWER INITCAP
空白と文字列の削除関数 TRIM、LTRIM、RTRIM
substr、substrb インターセプト文字関数
length、lengthb クエリ文字列の長さ
concat、|| 文字列の連結
instr: 文字検索関数
ASCII、CHR: ascii
lpad 、rpad 文字充填function
regexp_replace、translate: replace 関数
extract、to_char 日付を抽出し、時差を取得します。
4. Redisキャッシュの実装
Redis キャッシュ
1. キャッシュの概要:
フローチャート:
コードロジック
2. キャッシュ方法
2.1 有効期限を設定しない
データ同期:
メモリ消費:
2.2 有効期限を設定する
メモリリソース
有効期限の設定
3. 名前の説明
キャッシュペネトレーション
キャッシュアバランシェ
キャッシュブレークダウン
5. SQL と行ロック ステートメント
SELECT * FROM cliente with(ROWLOCK) where idCliente='850'
6. 行ロックとテーブルロックの違い
-
行ロック
-
サポートされているストレージ エンジン: Innodb。
-
InnoDB の行ロックは、インデックス上のインデックス項目をロックすることによって実装されます。つまり、インデックス条件を通じてデータが取得される場合にのみ、InnoDB は行レベルのロックを使用し、それ以外の場合は、InnoDB はテーブル ロックを使用します。
-
適用可能なシナリオ: インデックス条件に従って少量の異なるデータを同時に更新し、同時にクエリを実行するアプリケーションが多数あります。
-
特徴: 高いオーバーヘッド、遅いロック、デッドロックが発生する可能性がある、小さなロック粒度、低いロック競合の可能性、高い同時実行性
-
分析: 'innodb_row_lock%' のようなステータスを表示し、システムのアップリンク ロックの競合を分析します。InnoDB_row_lock_waits や InnoDB_row_lock_time_avg の値が比較的高いなど、ロックの競合が深刻であることが判明した場合は、テーブルをさらに観察して、 InnoDB Monitors Lines等の設定によりロック競合が発生しているデータを取得し、ロック競合の原因を解析します。
-
-
テーブルロック
-
サポートされているストレージ エンジン: Innodb、MYIsam
-
適用可能なシナリオ: クエリベース、インデックス条件に従ってデータを更新する少数のアプリケーションのみ
-
特徴: 小さなオーバーヘッド、高速なロック、デッドロックなし、強力なロック、高いロック競合の可能性、最も低い同時実行性
-
2 つのモード:
- テーブル共有読み取りロック
- テーブル排他的書き込みロック
-
2 つのテーブルのロックとロック解除を表示する
ロックテーブルの注文はローカルで読み取り、order_detailはローカルで読み取ります。
注文から合計(合計)を選択します。
order_detailから合計(小計)を選択します。
テーブルのロックを解除します。
-
MyISAM はクエリ ステートメント (SELECT) を実行する前に、関連するすべてのテーブルに読み取りロックを自動的に追加し、更新操作 (UPDATE、DELETE、INSERT など) を実行する前に、関連するテーブルに書き込みロックを自動的に追加します。
-
7. Oracle における varchar2 型の利点
可変長の文字列を格納するには、Oracle VARCHAR2 データ型を使用できます。VARCHAR2 列には、1 ~ 4000 バイトの値を格納できます。これは、シングルバイト文字セットの場合、VARCHAR2 列に最大 4000 文字を格納できることを意味します。
8. サブデータベースとサブテーブルの見方
MySQL と InnoDB ストレージ エンジンの場合、単一のテーブルに最大 10 億レベルのデータを保存できます。ただし、実際に大量に保存すると、パフォーマンスが非常に低下します。一般的にデータ量は数千万件に達し、B+ツリーインデックスの高さは3層以上になるため、クエリ時にディスクチェックが多くなりSQLが遅くなります。
アリババの「Java 開発マニュアル」では次のように提案されています。
1 つのテーブルの行数が 500 万行を超える場合、または 1 つのテーブルの容量が 2GB を超える場合は、データベースとテーブルを分割することをお勧めします。
では、データ量が 500 万件に達するまで待ってから、データベースの分割とテーブルの分割を開始する必要があるでしょうか。
そうではありません。事前にサブデータベースとサブテーブルを計画する必要があります。テーブルが 3 年後に 500 万に達しないと推定される場合は、サブデータベースとサブテーブルを作成する必要はありません。
MySQL サーバーの構成がもっと良い場合、サブデータベースやサブテーブルを考慮する前に 500 万のオーダーを超える可能性はありますか?
構成が優れているため、データ量が多くなるとパフォーマンスが向上する可能性がありますが、開発が続く場合は、サブデータベースのサブテーブルを考慮する必要があります。
一般に、どのタイプのビジネス テーブルをデータベースとテーブルに分割する必要がありますか?
一般に、一部のフローテーブルやユーザーテーブルなどはサブライブラリサブテーブルとして考慮されますが、一部の構成テーブルの場合はこのレベルに達する可能性が低いため、まったく考慮されません。
持久化
1. mybatisの実装原理
MyBatis アプリケーションは、XML 構成ファイルに基づいて SqlSessionFactory を作成します。構成によれば、SqlSessionFactory は 2 つの場所から取得され、1 つは構成ファイルで、もう 1 つは SqlSession を取得するための Java コードの注釈です。SqlSession には、SQL の実行に必要なすべてのメソッドが含まれています。SqlSession インスタンスを通じてマップされた SQL ステートメントを直接実行し、データの追加、削除、変更、クエリ、およびトランザクション送信を完了し、使用後に SqlSession を閉じることができます。
2. mybatisのmapperxmlにおいて、変数を置換する際の$と#の違い
- #{} メソッドは SQL インジェクションを大幅に防ぐことができますが (安全性)、${} メソッドは SQL インジェクションを防ぐことはできません
- JDBC がプレースホルダーを使用できる場合は、最初に #{} を使用するのが最善です
- JDBC がプレースホルダーの使用をサポートしていない場合、${} のみを使用できます。典型的なケースは動的パラメーターです。
3. mybatisのmapperxmlには何を定義するのか
4. mybatis はバッチ更新をどのように実装するか
foreach成多条sql ON DUPLICATE KEY UPDATEの場合
(mysql)
を(mysql)に置き換える
Javaの基本
1. ハッシュマップ キーの値を null にすることはできますか? キーは繰り返されていますか?
HashMap オブジェクトのキーと値は null にすることもできます。
HahTable オブジェクトのキーと値を null にすることはできません。
同じキーを持つキーと値のペアを追加すると、後の値が前の値を自動的に上書きしますが、エラーは報告されません。
2. 一般的に使用されるコレクション、それらの違いは何ですか、どれがスレッドセーフでどれがスレッドセーフでないか
線形安全な
ベクトル: クリティカルな操作である限り、メソッドの前に synchronized キーワードが追加され、スレッド セーフが確保されます ハッシュテーブル
: synchronized キーワードが使用されるため、ハッシュマップと比較してスレッドセーフです。
ConcurrentHashMap: ロック セグメンテーション テクノロジを使用して線形安全性を確保し、効率的でありながらスレッドセーフなコレクションです。
スタック: スタックもスレッドセーフであり、Vector から継承します。
線形的に安全ではない
ハッシュマップ
配列リスト
LinkedList
HashSet
TreeSet
TreeMap
コレクションがスレッドセーフであることを保証するために、対応する効率は比較的低くなりますが、スレッドアンセーフなコレクションの効率は比較的高いことに注意してください。
3. Hashmap の基礎原理、18 以降の基礎データ構造、CurrentHashMap の基礎原理
-
Hashmap の基本原理
HashMap はハッシュ原理に基づいており、put() メソッドと get() メソッドを通じてオブジェクトを保存および取得します。キーと値のペアを put() メソッドに渡すと、キー オブジェクトの hashCode() メソッドを呼び出してハッシュコードを計算し、値オブジェクトを格納するバケットの場所を見つけます。オブジェクトを取得するときは、キー オブジェクトの equals() メソッドを通じて正しいキーと値のペアを検索し、値オブジェクトを返します。HashMap はリンク リストを使用して衝突問題を解決し、衝突が発生した場合、オブジェクトはリンク リストの次のノードに格納されます。HashMap は、キーと値のペアを各リンク リスト ノードに保存します。
異なるキーを持つ 2 つのオブジェクトが同じハッシュコードを持つ場合はどうなりますか? これらは、同じバケットの場所にあるリンクされたリストに保存されます。キーオブジェクトのequals()メソッドは、キーと値のペアを見つけるために使用されます。 -
18 以降の基礎となるデータ構造:
配列 + 単一行リンク リスト + 赤黒ツリー (1.8) -
CurrentHashMap の実現原理
ConcurrentHashMap の登場は、主に並行環境におけるハッシュマップの安全性の不安を解決することを目的としています JDK1.8 ConcurrentHashMap の設計と実装は非常に繊細であり、volatile や CAS などの楽観的ロック技術が多数使用されています
ConcurrentHashMapは、ロック競合によるパフォーマンスへの影響を軽減しsynchronized+CAS+HashEntry+红黑树
ます
。
4. json 解析の一般的な方法 (どの json 解析 jar パッケージが使用されているか)
FastJson GSON は
Gson を解析します: https://github.com/google/gson [Google によって開発された、非常に包括的な機能を備えた JSON ライブラリ]
FastJson: https://github.com/alibaba/fastjson [Alibaba によって開発され、非常に包括的な機能を備えた JSON ライブラリ高性能 優れています]
Jackson: https://github.com/FasterXML/jackson [コミュニティは非常に活発で、すぐに更新されます]
5. 抽象クラスとインターフェイスの違い、抽象クラスは静的である可能性があります
同じ点:
(1) どちらもインスタンス化できません
(2) インターフェイスの実装クラスまたは抽象クラスのサブクラスは、インターフェイスまたは抽象クラスにメソッドを実装した後でのみインスタンス化できます。
相違点:
(1) インターフェイスは定義のみを持ち、メソッドの実装は持てません Java 1.8 では、デフォルトのメソッド本体を定義できますが、抽象クラスは定義と実装を持ち、メソッドは抽象クラスに実装できます。
(2) インターフェースを実装するためのキーワードはimplements、抽象クラスを継承するためのキーワードはextendsです。クラスは複数のインターフェイスを実装できますが、クラスは 1 つの抽象クラスからのみ継承できます。したがって、インターフェースを使用することで間接的に多重継承を実現できます。
(3) インターフェースは特定の機能の実現を重視し、抽象クラスは所有関係を重視します。
(4) インターフェイス メンバー変数のデフォルトは public static Final で、初期値を割り当てる必要があり、変更できません。そのメンバー メソッドはすべて public および abstract です。抽象クラスのメンバー変数はデフォルトであり、サブクラスで再定義または再割り当てできます。抽象メソッドは抽象によって変更され、プライベート、静的、同期、およびネイティブでは変更できません。花のないセミコロンで終わる必要があります。括弧。
(5) インターフェイスは一般的に使用される機能に使用され、将来のメンテナンスや追加と削除に便利ですが、抽象クラスはパブリック クラスとして機能する傾向があり、将来のコード変更には適していません。関数を蓄積する必要がある場合は抽象クラスを使用し、蓄積する必要がない場合はインターフェイスを使用します。
できない
6. コンストラクターはプライベートにできますか? シングルトン モードのコンストラクターはプライベートにできますか?
はい、ただし自分で作成したクラスは許可されません。そうでない場合は、新しいオブジェクトを作成する方法がありません。
考えられる状況: API の Math クラス
シングルトン モードのコンストラクターはプライベートにすることができ、静的メンバー関数 GetInstance を使用してインスタンスを取得します。
7. バブルソートの実装原理
- 隣接する要素を比較し、要素 1 が要素 2 より大きい場合に交換します。
- キューの終わりまで、隣接する各要素に対して同じ作業を順番に実行します。その時点で、最大の要素が最後の要素の位置になります。
- 最後の要素の直前の位置まで上記の手順を繰り返します (最後の位置は既に配置されているため)。
- 比較する必要のある数値がなくなり、並べ替えが終了するまで、要素の数を減らしながら上記の手順を繰り返します。
8. 並列処理と同時実行の違い
同時実行と並列処理の違い。
同時実行性: 処理のためにさまざまな時点でタスクをプロセッサに渡します。同時に、タスクは同時に実行されません。
並列処理: 各タスクを各プロセッサに割り当てて、独立して完了します。同じ時点で、タスクは同時に実行されている必要があります。
同時実行は並列処理ではありません。並列処理とは、異なるコードを異なる物理プロセッサ上で同時に実行することです。並列処理の鍵は、多くのことを同時に実行することであり、同時実行とは、多くのことを同時に管理することを指します。これらのことは、半分だけ完了した後で他のことを行うために中断される場合があります。
多くの場合、同時実行の効果は並列処理よりも優れています。これは、オペレーティング システムとハードウェアの合計リソースは一般に小さいためですが、同時実行によりシステムが多くのことを同時に実行できるようになります。この「少ないリソースでより多くのことを行う」という哲学は、Go 言語の設計を導く哲学でもあります。
9. 多層ネストされたループ、直接飛び出す
方法 1: Break タグで複数のループから抜け出す
方法 2: ループ条件を制限する
方法 3: 内側のループが例外をスローして複数のループを終了する
10. 日付形式 M と m は何年を表しますか? 4 つの Y は何ですか?
1. M m は「月」と「分」の区別、M:月、m:分
2. H h は 12 時間制と 24 時間制の区別、H は 24 時間制、h は 12 時間制。
y
週年とは、当日の週が属する年を指します。週は日曜日に始まり土曜日に終わります。今週が新年をまたぐ限り、この週は次の年としてカウントされます。たとえば、2017 年 12 月 31 日、今週 (2017 年 12 月 31 日から 2018 年 1 月 6 日) は大晦日です。翌年に向けて。
11. 文字列に英語と数字が含まれている場合に数字を削除する方法
private void testString(){
String string="0079527大白菜";
char foodName[]=string.toCharArray();
StringBuilder stringBuilder=new StringBuilder();
for (int i = 0; i < foodName.length; i++) {
char c=foodName[i];
boolean isDigit=Character.isDigit(c);
if (!isDigit) {
stringBuilder.append(c);
}
}
System.out.println("原来的字符串:"+string+",改后的字符串:"+stringBuilder.toString());
}
12. String クラスのよく使われるメソッド (substring、charAt)
構文: string name.charAt(value); 戻り値は char 型です。文字列から指定した位置の文字を抽出します
コードは次のとおりです(例)。
String str="淡忘_Java";
char c = str.charAt(3);
System.out.println("指定字符为:" + c);
运行结果:指定字符为:J
String substring(int beginIndex,int endIndex) 截取字符串
String str = "123淡忘_Java博客456";
System.out.println("截取后的字符为:" + str.substring(0, 3));// 截取0-3个位置的内容 不含3
System.out.println("截取后字符为:" + str.substring(2));// 从第3个位置开始截取 含2
运行结果:
截取后的字符为:123
截取后字符为:3淡忘_Java博客456
13. 配列と文字列の長さを取得する方法
string.length
string.length()
14. プロジェクトで、llst とオブジェクトを取得します。最初に行う必要があること
オブジェクトをインスタンス化する
15. a の ascil コードは 97 です
97~122
16. +を使わずに足すか加算する
int add(int a, int b) {
return a-(-b);
}
public int add(int a, int b) {
while (b != 0) {
int sum = a ^ b;
int carry = (a & b) << 1;
a = sum;
b = carry;
}
return a;
}
17. スレッド プールを作成する方法と、スレッド プールを作成するためのパラメータは何を表しますか?
- newCachedThreadPool()
- newFixedThreadPool()
- newScheduledThreadPool()
- newSingleThreadExecutor()
- newSingleThreadScheduledExecutor()
public ThreadPoolExecutor(
int corePoolSize,//线程池核心线程大小
int maximumPoolSize,//线程池最大线程数量
long keepAliveTime,//空闲线程存活时间
TimeUnit unit,//空闲线程存活时间单位,一共有七种静态属性(TimeUnit.DAYS天,TimeUnit.HOURS小时,TimeUnit.MINUTES分钟,TimeUnit.SECONDS秒,TimeUnit.MILLISECONDS毫秒,TimeUnit.MICROSECONDS微妙,TimeUnit.NANOSECONDS纳秒)
BlockingQueue<Runnable> workQueue,//工作队列
ThreadFactory threadFactory,//线程工厂,主要用来创建线程(默认的工厂方法是:Executors.defaultThreadFactory()对线程进行安全检查并命名)
RejectedExecutionHandler handler//拒绝策略(默认是:ThreadPoolExecutor.AbortPolicy不执行并抛出异常)
)
使用例:
ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 20, 2, TimeUnit.SECONDS, new LinkedBlockingQueue<>(5));
18. マルチスレッドの作り方は何通りあるの? 4種類
- Thread クラスを継承してスレッドを作成する
- Runnable インターフェイスを実装してスレッドを作成する
- Callable と Future を使用してスレッドを作成する
- スレッド プールを使用して作成 (java.util.concurrent.Executor インターフェイスを使用)
19. Walt と sleep の違い、notifyAll を理解する方法
- 違い 1: 構文では異なる
wait メソッドが使用されており、synchronized と併用する必要があります。そうしないと、実行時に IllegalMonitorStateException がスローされます。 - 違い 2: クラスの違い
wait メソッドは Object クラスのメソッドに属し、sleep メソッドは Thread クラスのメソッドに属します。 - 違い 3: さまざまなウェイクアップ メソッド
sleep メソッドはタイムアウト パラメータを渡す必要があり、タイムアウトが経過すると、スレッドは自動的にウェイクアップします。wait メソッドはパラメータを渡すことができません。パラメータを渡さない場合は、永久にスリープ状態になることを意味します。スリープ状態のスレッドは、別のスレッドが Notify または NotifyAll を呼び出すまで目覚めることはありません。つまり、sleep メソッドにはアクティブなウェイクアップ機能がありますが、パラメータを渡さない wait メソッドは受動的にウェイクアップすることしかできません。 - 違い 4: 異なる解放ロック リソース
wait メソッドは積極的にロックを解放しますが、sleep メソッドはロックを解放しません。 - 違い 5: スレッドは異なる状態に入ります
。 sleep メソッドのスレッドを呼び出すと、TIMED_WAITING 時間制限待機状態に入りますが、パラメータなしで wait メソッドを呼び出すと、スレッドは WAITING 無制限の待機状態になります。
20. クラスを最終的に変更できますか? 例を挙げてください
最終的に変更されたクラスは継承できませんが、他のクラスを継承することができ、他のクラスと同様に使用できます。
Linux
1. Linuxコマンドでシステム時刻を確認する方法、よく使うコマンド
日にち
2. デプロイ方法、プロセスの強制終了など
- kill: プロセス ID (PID) に従ってプロセスを強制終了します。
- pkill: 名前でプロセスを強制終了します
- killall: プロセス名に従ってプロセスを強制終了します。