Lý lịch
Gần đây tôi đang trong quá trình thực hiện các cuộc phỏng vấn công nghệ mệt mỏi cho các vị trí sử dụng ngăn xếp .NET, một số trong đó bao gồm các câu hỏi ngớ ngẩn như câu hỏi này và một số câu hỏi có giá trị hơn. Gần đây tôi đã gặp một vấn đề có thể hợp lệ nhưng tôi muốn kiểm tra với cộng đồng ở đây để chắc chắn.
Khi được một người phỏng vấn hỏi tôi sẽ đếm tần số từ trong tài liệu văn bản và xếp hạng kết quả như thế nào, tôi đã trả lời rằng tôi sẽ
- Sử dụng một đối tượng luồng đặt tệp văn bản vào bộ nhớ dưới dạng chuỗi.
- Chia chuỗi thành một mảng trên khoảng trắng trong khi bỏ qua dấu chấm câu.
- Sử dụng LINQ dựa vào mảng để
.GroupBy()
và.Count()
sau đóOrderBy()
đếm.
Tôi đã trả lời sai vì hai lý do:
- Truyền toàn bộ tệp văn bản vào bộ nhớ có thể là thảm họa. Nếu đó là toàn bộ bách khoa toàn thư thì sao? Thay vào đó, tôi nên phát trực tiếp một khối tại một thời điểm và bắt đầu xây dựng bảng băm.
- LINQ quá đắt và đòi hỏi quá nhiều chu trình xử lý. Tôi nên đã xây dựng một bảng băm thay thế và, với mỗi lần lặp, chỉ thêm một từ vào bảng băm nếu nó không tồn tại và sau đó tăng nó lên.
Lý do đầu tiên có vẻ, tốt, hợp lý. Nhưng thứ hai cho tôi thêm tạm dừng. Tôi nghĩ rằng một trong những điểm bán hàng của LINQ là nó chỉ đơn giản là trừu tượng hóa các hoạt động cấp thấp hơn như bảng băm, nhưng, dưới tấm màn che, nó vẫn là cách thực hiện tương tự.
Câu hỏi
Bên cạnh một vài chu kỳ xử lý bổ sung để gọi bất kỳ phương pháp trừu tượng, không đòi hỏi LINQ đáng kể chế biến nhiều chu kỳ để hoàn thành một nhiệm vụ lặp dữ liệu nhất định so với một nhiệm vụ cấp thấp hơn (chẳng hạn như việc xây dựng một bảng băm) sẽ?