เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

การปรับแต่งแอปพลิเคชันวิเคราะห์ทางการเงิน

ในฐานะนักพัฒนา Java สำหรับแอปพลิเคชันวิเคราะห์ทางการเงิน คุณพบว่าเมธอดสร้างรายงานตัวหนึ่งกำลังสร้าง garbage มากเกินไป และกระตุ้นให้ garbage collection ทำงานบ่อยครั้ง เมธอดนี้นำข้อมูลหลายพันจุดมาเชื่อมต่อกันเป็น string เดียว คุณจึงต้องปรับโครงสร้างโค้ดให้เป็นมิตรกับ GC มากขึ้น โดยยังคงฟังก์ชันการทำงานเดิมไว้ครบถ้วน

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

การปรับแต่งโค้ดใน Java

ดูคอร์ส

คำแนะนำการฝึกหัด

  • สร้าง instance ใหม่ของ StringBuilder ที่มีขนาดเหมาะสม
  • วนซ้ำทุกค่าใน dataPoints แล้วเพิ่มค่าที่จัดรูปแบบแล้วลงใน string builder
  • แปลง StringBuilder ให้เป็น String แล้ว return ค่านั้น

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ

ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์

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");
    }
}
แก้ไขและรันโค้ด