Java · 34 строк
Покупатель и продавец обмениваются в чате фото товара и PDF: чеки, гарантийные талоны. Лимит — 10 МБ на файл. Файлы раздаются с того же домена по адресу /files/....
В приложении spring.servlet.multipart.max-file-size = 200MB: тот же лимит нужен соседнему контроллеру видео. Чатов 40 млн, в каждом двое участников. Отметьте строки с ошибками.
В работе: Скрепка в чате объявления: фото дефекта, скриншот перевода, чек.
Как проверяем
Нажмите на строку с ошибкой и коротко напишите, что не так. Баг засчитан, если отмечена хотя бы одна его строка. Зачёт — найдено не меньше 60 % багов с учётом серьёзности (критичный весит 3, обычный 2, мелкий 1), а лишних отметок не больше, чем багов в коде. Пустые строки, скобки и комментарии лишними не считаем. Ответ один на подход: после него показываем разбор.
Источник: наша задача на данных Авито: мессенджер между покупателем и продавцом. Условие пересказано своими словами.
Давали на собеседовании?
@RestController@RequestMapping("/api/messenger")public class AttachmentController {private static final long MAX_SIZE = 10 * 1024 * 1024;private static final Path STORAGE = Paths.get("/data/attachments");private final ChatRepository chats;private final AttachmentRepository attachments;public AttachmentController(ChatRepository chats, AttachmentRepository attachments) {this.chats = chats;this.attachments = attachments;}@PostMapping("/chats/{chatId}/attachments")public AttachmentDto upload(@PathVariable long chatId, @RequestParam("file") MultipartFile file,@AuthenticationPrincipal UserPrincipal user) throws IOException {Chat chat = chats.findById(chatId).orElseThrow(NotFoundException::new);byte[] bytes = file.getBytes();if (bytes.length > MAX_SIZE) {throw new PayloadTooLargeException();}String contentType = file.getContentType();if (!contentType.startsWith("image/") && !contentType.equals("application/pdf")) {throw new UnsupportedMediaTypeException();}Path target = STORAGE.resolve(chatId + "/" + file.getOriginalFilename());Files.createDirectories(target.getParent());OutputStream out = new FileOutputStream(target.toFile());out.write(bytes);Attachment a = attachments.save(new Attachment(chatId, user.getId(), target.toString(), contentType));return new AttachmentDto(a.getId(), "/files/" + chatId + "/" + file.getOriginalFilename());}}