フロントに書かれている:2020年のインタビューに必要なJavaバックエンドの高度なインタビューの質問。レビューガイドはGithubに要約されています。内容は写真とテキストで詳細に説明されています。学ぶ必要がある友達は主演できます!
GitHubアドレス:https://github.com/abel-max/Java-Study-Note/tree/master
(1)非同期タスク非同期タスク
の要件は、実際の開発シナリオでよく発生します。非同期を実現するためのマルチスレッドなど、Javaで非同期を実現する方法は多数あります。SpringBootでは、非同期タスクの実現には2つの注釈を追加するだけで済みます。現在のクラスに@Asyncアノテーションを追加し、クラスを開始するために@EnableAsyncを追加します
サービスAsynServiceを作成し、データを出力する前にこのサービスを3秒間一時停止します
@Service
public class AsynService {
@Async
public void async(){
try {
Thread.sleep(3000);
System.out.println("执行结束");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
コントローラを記述し、このサービスクラスを呼び出します
@RestController
public class IndexController {
@Autowired
public AsynService asynService;
@RequestMapping("/index")
public String asynctask(){
asynService.async();
return "async task";
}
}
実行後、ブラウザでhttp:// localhost:8080 / indexにアクセスすると、非同期がオンになっているため、ブラウザは最初に非同期タスクを出力し、コンソールは3秒後に実行の終了を出力します。
(2)時限タスク
前回のスパイクオープンソースプロジェクトで時限タスクを使用しました。当時のシーンでは、1分ごとにデータベースをポーリングして、期限切れの製品を照会していました。スケジュールされたタスクには、毎日12時にログを自動的にパックする、毎晩12時にバックアップするなど、さまざまなアプリケーションがあります。SpringBootでタイミングタスクを実現するには、@ Scheduledと@EnableSchedulingの2つの注釈のみが必要です。以前と同様に、@ Scheduledは定期的に実行する必要のあるタスクに使用され、@ EnableSchedulingはスタートアップクラスに使用されます。まず、時限タスククラスを作成しましょう。
@Service
public class ScheduleService {
@Scheduled(cron = "0/10 * * * * ? ")
public void sayHello(){
System.out.println("hello");
}
}
タイミングタスクの実行時間を決定するには、@ Scheduledアノテーションにcron式を追加する必要があります。ここでは10秒ごとに実行されることを意味します。
次に、注釈@EnableSchedulingをスタートアップクラスに追加します。プロジェクトを実行すると、10秒ごとにhelloが出力されることがわかります。