春:インタビューの質問

画像
この質問の短いリストは、Springの最も重要な概念を理解し、インタビューの準備に役立ちます。


1コンポーネントスキャンとは何ですか?

コンポーネントスキャンの仕組みを理解していれば、Springも理解できます。


Spring Beanを記述する最初のステップは、アノテーション( @Component@Component 、または@Component )を追加すること@Repository


ただし、SpringはこれらのBeanの場所を知らない限り、これらのBeanについて何も知りません。 これらのBeanの検索場所をSpringが示しているのは、コンポーネントスキャンと呼ばれます。 @ComponentScanでは、スキャンするパッケージを指定します。


Springは、スキャンパッケージだけでなく、サブパッケージでもBeanを検索します。


2コンポーネントスキャンをSpring Bootに追加するにはどうすればよいですか?
 @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } 

@SpringBootApplicationは、Applicationクラスが存在するパッケージの自動スキャンを定義します


すべてが整い、コードは完全に指定されたパッケージまたはそのサブパッケージ内にあります。


ただし、必要なコンポーネントが別のパッケージにある場合は、さらに@ComponentScanアノテーションを使用する必要があります。ここで、スキャン用の追加パッケージをすべてリストします


3 @Componentと@ComponentScanの違いは何ですか?

@Component@ComponentScanは異なる目的のためのものです


@Componentは、クラスをSpring Bean作成の候補としてマークします。
@ComponentScanは、アノテーション@Componentまたはその派生物でマークされたクラスをSpringが検索する場所を示します


4 @Beanアノテーションは何に使用されますか?

Spring構成クラスで@Bean@Bean使用してカスタムロジックコンポーネントを定義します。


5 @Beanと@Componentの違いは何ですか?

@Bean 、Spring構成クラスで使用されます。 ビンを直接作成するために使用されます。


@Component 、Springが管理するすべてのクラスで使用されます。 Springが@Component持つクラスを@Component 、SpringはこのクラスをBean作成の候補として定義します。


6 @ Component、@ Service、@ Repositoryアノテーションの違いは何ですか?

これらはすべてSpring Beanを定義します。 ただし、それらの間にはまだ違いがあります。


@Component汎用コンポーネント
@Repositoryは、保存、取得、検索するように設計されたコンポーネントです。 通常、データベースの操作に使用されます。
@Serviceいくつかのビジネスロジックのファサード


@Componentから派生したカスタムアノテーションは、Beanにカスタムロジックを追加できます。


たとえば、 @Repositoryを使用して取得した@Repositoryは、JDBC例外の処理も追加されます


7ビジネスロジックに@Serviceの代わりに@Componentを使用できますか?

はい もちろん。


@ComponentがSpringコンポーネントのユニバーサルステレオタイプである場合、 @Componentは現在そのエイリアスです。 ただし、Springの公式ドキュメントでは、ビジネスロジックに@Serviceを使用することを推奨しています。 このステレオタイプのフレームワークの将来のバージョンでは、追加のセマンティクスが追加され、そのBeanに追加のロジックが追加される可能性があります。


8 web.xmlとSpring Context-servlet.xmlの違いは何ですか?

web.xml-Java EE互換のWebアプリケーションのメタデータと構成。 Webアプリケーション用のJava EE標準。
servlet.xmlは、Spring Framework固有の構成ファイルです。


9 Spring構成に使用するのに適したものは、xmlまたはアノテーションですか?

@Service, @Component, @Autowiredなどの要素によってコードベースが適切に記述されている場合、注釈を好む


ただし、構成に関しては、好みはありません。 この質問はチームにお任せします。


10非セッターメソッドおよび非コンストラクタメソッドで@Autowiredを使用できますか?

はい、もちろんです。


@Autowiredは、コンストラクター、セッター、またはその他のメソッドで使用できます。 Springがメソッドで@Autowiredを見つけると、SpringはBeanインスタンスの作成後にそのメソッドを自動的に呼び出します。 引数として、Springコンテキストから適切なオブジェクトが選択されます。


11 Cross Cutting ConcernsとAOP(Aspect Oriented Programming)の違いは何ですか?

クロス機能-ロギング、パフォーマンス管理、セキュリティなど、いくつかの異なるレベルで必要になる可能性のある機能
AOPは、この問題の実装へのアプローチの1つです。


12 IOC(Inversion of Control)とアプリケーションコンテキストの違いは何ですか?

IOC-管理の反転。 手動で依存関係を注入する代わりに、フレームワークがこれを担当します。
ApplicationContext-IOCスプリングの実装。


Bean FactoryはIOCコンテナの基本バージョンです


Application Contextには、エンタープライズアプリケーション開発に通常必要な追加機能も含まれています。


13 classPathXmlApplicationContextとannotationConfigApplicationContextの違いは何ですか?

classPathXmlApplicationContext-Springコンテキストをxmlで初期化する場合
annotationConfigApplicationContext-Java構成クラスを使用してSpringコンテキストを初期化する場合


14なぜ@Aroundアスペクトを使用すると戻り値が失われるのでしょうか? その理由は何ですか。

@Aroundアノテーションでマークされたメソッドは、(メソッド)がjoinpoint.proceed()から受け取った値を返す必要があります。


 @Around("trackTimeAnnotation()") public Object around(ProceedingJoinPoint joinPoint) throws Throwable{ long startTime = System.currentTimeMillis(); Object retVal = joinPoint.proceed(); long timeTaken = System.currentTimeMillis() - startTime; logger.info("Time taken by {} is equal to {}",joinPoint, timeTaken); return retVal; } 

15複数の一致するビンがある場合、どのビンを挿入するかをどのように決定しますか。 @Primaryと@Qualifierについて教えてください。

ほとんどの場合、他のBeanよりも好むBeanがある場合は、 @Primaryを使用し、非標準のスクリプトには@Qualifierを使用します。


すべてのBeanの優先度が同じ場合、常に@Qualifier使用し@Qualifier


プログラムの実行中にビンを選択する必要がある場合、これらの注釈は機能しません。 構成クラスでメソッドを作成し、 @Beanアノテーションでマークし、必要なBeanを返す必要があります。


16 Spring Framework 5.0の新機能は?

私の意見では、これはFunctional Web Framework、Kotlin、およびリアクティブプログラミングサポートです。


17アプリケーションコンテキスト、IOCコンテナ、Webコンテナ、EJBコンテナを比較します。 Spring Bootアプリケーションを実行するためにWebコンテナが必要ですか?

WebコンテナとEJBコンテナは、Tomcat、Websphere、Weblogicなどのアプリケーション/ Webサーバーの一部です。 追加の機能を追加します。 Java EEはWebアプリケーションのコントラクトを定義します;これらのコンテナはこれらのコントラクトの実装です。


Springコンテナは、javaで作成するアプリケーションの一部にすることができます。 Springは、Webコンテナ、EJBコンテナ、またはそれらなしでも動作します。


18 application.propertiesを使用して適切なBeanを選択するにはどうすればよいですか?

例を考えてみましょう:


 interface GreetingService { public String sayHello(); } 

そして2つのコンポーネント


 @Component(value="real") class RealGreetingService implements GreetingService { public String sayHello() { return "I'm real"; } } @Component(value="mock") class MockGreetingService implements GreetingService { public String sayHello() { return "I'm mock"; } } 

次に、application.propertiesでプロパティを追加します
application.greeting:本物


このソリューションを使用します。


 @RestController public class WelcomeController { @Resource(name="${application.greeting}") private GreeterService service1; } 

19 Spring Boot 2およびSpring 5でサポートされるJavaの最小バージョンは何ですか?

Spring 5.0およびSpring Boot 2.0は、Java 8以降をサポートしています。


20 @Controllerと@RestControllerの違いは何ですか?

@RestController = @Controller + @ResponseBody


@RestControllerは、タグ付きクラスをSpring Beanに変換します。 このビンは、Jacksonメッセージコンバーターを使用して、着信/発信データを変換します。 通常、ターゲットデータはjsonまたはxmlで表示されます。


21なぜ@ResponseBody、ときにはResponseEntityを使用するのですか?

ResponseEntityは、応答ステータスを追加して応答をカスタマイズする場合にのみ必要です。 その他の場合はすべて、@ ResponseBodyを使用します。


 @GetMapping(value=”/resource”) @ResponseBody public Resource sayHello() { return resource; } @PostMapping(value=”/resource”) public ResponseEntity createResource() { …. return ResponseEntity.created(resource).build(); } 

使用できる標準HTTP応答ステータスコード。
200-成功
201-作成済み
404-リソースが見つかりません
400-悪いリクエスト
401-不正
500-サーバーエラー


@ResponseBodyの場合、すべてが正常な場合のステータス状態はSUCCESS(200)、エラーが発生した場合のサーバーエラー(500)のみです。


何かを作成し、ステータスCREATED(201)を送信するとします。 この場合、ResponseEntityを使用します。


22フィルター、リスナー、インターセプターの違いは何ですか?

すべてが概念的に単純であり、サーブレットフィルターはHTTPServletのみをインターセプトできます。 リスナーは特定のイベントをインターセプトできます。 他に関係のないイベントをインターセプトする方法は?


フィルターとインターセプターは本質的に同じことを行います:イベントをインターセプトし、前後に何かをします。


Java EEはフィルターという用語を使用し、Springはそれらをインターセプターと呼びます。


これは、AOPを最大限に活用して、あらゆるオブジェクトの呼び出しをインターセプトできるようにする場所です


23 ModelMapとModelAndViewの違いは何ですか?

モデル-インターフェース、ModelMapの実装..


ModelAndViewは、ModelMapやViewなどのペアのコンテナーです。


通常、ModelAndViewを使用します。 ただし、ModelMapで必要な属性を設定し、Viewという名前をコントローラーメソッドから通常の文字列として返す方法もあります。


24 model.put()とmodel.addAttribute()の違いは何ですか?

addAttributeメソッドは、ハッシュマップの基本構造の操作から私たちを分離します。 本質的に、addAttributeはラッパーオーバープットであり、nullの追加チェックが行われます。 addAttributeメソッドは、putとは異なり、modelmapを返します。
model.addAttribute(「attribute1」、「value1」)。addAttribute(「attribute2」、「value2」);


25フォームバインディングについて何がわかりますか?

たとえば、HTMLページから何らかの値を取得してデータベースに保存する場合、これが必要になることがあります。 これを行うには、この値をSpringコントローラーに移動する必要があります。


Spring MVCフォームタグを使用すると、SpringはHTMLページの変数をSpring Beanに自動的に関連付けます。


これを使用しなければならない場合、Spring MVC Form公式タグの公式ドキュメントを必ずご覧ください。


26なぜHibernate Validatorを使用するのですか?

Hibernate Validatorは、決してデータベースに関連付けられていません。 これは単なる検証ライブラリです。


Hibernate Validatorバージョン5.xは、Bean Validation 1.1のリファレンス実装です


また、 http://beanvalidation.org/2.0を見ると、Hibernate Validatorのみが認定されています。


27静的(css、js、html)リソースは、Spring MVCアプリケーションのどこに配置する必要がありますか?

静的リソースの場所はカスタマイズできます。 Spring Bootのドキュメントでは、/ static、/ public、/ resources、/ META-INF / resourcesの使用を推奨しています。


28機密データに対してGETリクエストではなくPOSTを使用することが推奨されるのはなぜですか?

GETリクエストの場合、送信されたパラメーターはurlの一部であり、GETリクエストが通過するすべてのルーターはそれらを読み取ることができます。


POST要求の場合、送信されたパラメーターは要求本文の一部です。 HTTPを使用する場合、リクエストの本文は暗号化されます。 したがって、POST要求を使用する方が安全です。


29リクエストで同じパラメータを複数回渡すことは可能ですか?

例:
http://localhost:8080/login?name=Ranga&name=Ravi&name=Sathish
はい、コントローラーメソッドの配列を使用してすべての値を受け入れることができます


 public String method(@RequestParam(value="name") String[] names){ } 

翻訳の手助けをしてくれたjabr jd2050のユーザーに感謝します。



Source: https://habr.com/ru/post/J350682/


All Articles