Bắt đầu ngayBắt đầu miễn phí

Tối ưu hóa một ứng dụng phân tích tài chính

Là một lập trình viên Java cho ứng dụng phân tích tài chính, bạn phát hiện một phương thức tạo báo cáo đang tạo quá nhiều rác và kích hoạt thu gom rác thường xuyên. Báo cáo này nối hàng nghìn điểm dữ liệu thành một chuỗi duy nhất. Bạn cần refactor đoạn mã này để thân thiện hơn với GC nhưng vẫn giữ nguyên chức năng.

Bài tập này là một phần của khóa học

Tối ưu hóa mã trong Java

Xem khóa học

Hướng dẫn bài tập

  • Tạo một thể hiện StringBuilder mới với độ dài cần thiết.
  • Với mỗi giá trị trong dataPoints, thêm giá trị đã định dạng vào string builder.
  • Chuyển StringBuilder sang String và trả về chuỗi đó.

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

public class Main {
    public static String generateReportWithoutOptimization(double[] dataPoints) {
        String report = "";
        for (double value : dataPoints) {
            report += String.format("%.2f, ", value);
        }
        return report;
    }
    
    public static String generateReportWithOptimization(double[] dataPoints) {
        // Create a new string builder
        StringBuilder report = new  ____(dataPoints.length * 8);
        for (double value : dataPoints) {
            // For every value, add the formatted value to the string builder 
            report.____(String.format("%.2f, ", value));
        }
        // Convert to string before returning
        return report.____();
    }
    
    public static void main(String[] args) {
        double[] testData = new double[10000];
        for (int i = 0; i < testData.length; i++) {
            testData[i] = Math.random() * 100;
        }
        
        long startWithoutOptimization = System.nanoTime();
        String reportWithoutOptimization = generateReportWithoutOptimization(testData);
        long endWithoutOptimization = System.nanoTime();
        
        long startWithOptimization = System.nanoTime();
        String reportWithOptimization = generateReportWithOptimization(testData);
        long endWithOptimization = System.nanoTime();
        
        System.out.println("Time taken without optimization: " + (endWithoutOptimization - startWithoutOptimization) / 1_000_000 + " ms");
        System.out.println("Time taken with optimization: " + (endWithOptimization - startWithOptimization) / 1_000_000 + " ms");
    }
}
Chỉnh sửa và Chạy Mã