Тестовое задание
работадатель дал мне следующее тестовое задание, может кто знае как его решить
Написать серверный просмотрщик файловой системы на PHP
* Использовать Bootstrap 4, Laravel фреймворк и JS фреймворк на выбор.
* Функционал:
* * Перемещение по файловой системе. Перемещение должно происходить без полной перезагрузки страницы.
* * Просмотр файлов.
* * Удаление файлов с подтверждением.
* Страница просмотра файловой системы должна содержать:
* * Имя файла, размер, расширение, время изменения, действия (просмотреть, удалить).
* Как пример можно посмотреть на Dropbox, Google Drive.
серверный просмотрщик
-----
Я так понимаю, что это серверный просмотрщик клиентской системы? :)
Функционал: просмотр файлов.
-----
Замечательная задачка. Уточняю - меня где-то лежит старый телефон Сименс 35А - с ограниченной поддержкой бровсинга. На нем надо будет просматривать бинарный файл, который породит дамп некоторой программы. Если осилишь - тебе путь в Силиконовую Долину...
Google Drive
------
Стоит посмотреть какими силами и в какие сроки это реализовывалось. А так же - сколько это стоило. А потом - серьезно подумать над имеющейся ситуацией...
Сама задача - показать файлы на стороне сервера - не сложная, но формулировка задачи дает пищу для размышлений...
Перемещение должно происходить без полной перезагрузки страницы.
так как содержимое папок нужно перегружать, то остается дерево каталогов, вот его то и нужно "стащить"
Просмотр файлов
Это тоже нужно где то "стибрить"
Остальное вроде особых затруднений не должно вызвать
Надеюсь не за бесплатно усё?
Остальное вроде особых затруднений не должно вызвать
Точно? Если задача понята правильно и действительно надо просматривать в браузере файлы на клиентской машине... Удачи. Получать разрешения от пользователя и убеждать браузер что вашему скрипту все же можно разрешить доступ к файловой системе.
На всякий случай - яваскрипту не то что к файловой системе доступа нет, он даже системные переменные просто так считать не может.
ТС:
* Как пример можно посмотреть на Dropbox, Google Drive.
А где на дропбоксе и гугл драйве просмотр локальной файловой системы?
* Просмотр файлов.
Word, Excel, PowerPoint, PDF, PS, фотошоп, что ещё?Не забудьте для офисных файлов вьюеры с интерпретатором визуал васика прикручивать. "Работодатель" молодец, да.
Для меня задача звучала настолько знакомо, что я по умолчанию "дополнил" - надо сделать веб-приложение на пыхыпы и яскрипте. Т.е. клиент открывает страничку в браузере, пыхыпы исполняется на сервере, подготавливает страничку отдает ее клиенту и клиент радуется копии эксплорера, но в своем браузере.
Если надо лазить по файловой системе сервера, то задача становится проще, жаль ТС пока что прямо не ответил на вопрос, какую же файловую систему смотреть надо.
какую же файловую систему смотреть надо.
если клиентскую, то не требуется ни пыхыпы, ни жаваскрипта. в файерфоксе, например, в меню File->Open file, и смотрите файловую систему сколько влезет. и как это пыхыпы сумеет дотянуться до файловой системы клиента? жаваскрипт можно выполнить на сервере, но чтобы пыхыпы на клиенте - не слыхал.
Кстати, решение, удовлетворяющее всем требованиям, да.
Сделать страничку на которой (даже с помощью пыхыпы!) написать - "Нажмите File->Open". Ну или чтобы сразить наповал - автоматически при загрузке страницы открыть скриптом диалог для загрузки файла.
Через контекстное меню хочешь - удаляешь, хочешь - открываешь. Еще и просмотрщик выбрать можно!
Я так понимаю, что просто веб сервис с фукциями:
- скопировать/переместить файл
- удалить файл
- да, точно удалить :) (ну или подтверждение на JS сделать)
- загрузить (download) файл
- показать список файлов в каталоге (список файлов передавать в виде JSON)
Ну и к этому запилить простенький фронт-энд на JS.
я так понимаю
-----
Не надо понимать - надо читать задание и если там нет четкого указания что именно требуется,
то предполагать самый проблемный в реализации вариант.
Бо, это тестовое задание - проверка на понимание ситуации в него входит на 100%...
Ну а у "рабобрателя" всегда есть вариант - неее, йа не то хотел...
А задание почитать не канает?
Там же написано черным по желтому "Написать серверный просмотрщик файловой системы на PHP". На PHP, Карл! Какое нахрен PHP на клиенте?
самый проблемный в реализации вариант
Ну так ты бы туда еще аутентификацию, шифрование и нейронную сеть предположил бы присобачить :) А что? Это еще проблемнее.
Я уж не говорю, что последним пунктом (для непонятливых) указано "Как пример можно посмотреть на Dropbox, Google Drive".
Там же написано черным по желтому "Написать серверный просмотрщик файловой системы на PHP".
-----
Именно это и читается - написать на ПХП, работающим на сервере, просмотрщик файловой системы.
Какая именно система - сервера, клиента или виртуальная - не специфицировано.
Потому берется прямой, но самый заморочный вариант - читать клиентскую ФС, обрабатывать на сервере результат с отображением/навигацией "дерева" на клиенте...
По варианту просмотра серверной ФС тоже есть проблемы - виндовый ИИС, по дефаулту, работает только с определенной частью ФС.
Остальное - надо специально конфигурить. Так что даже если считать что упомянута серверная ФС, то надо уточнять ограничения.
"Как пример можно посмотреть на Dropbox, Google Drive".
-----
Хммм...
Ты можешь себе представить ситуацию, когда у чела нет аккаунтов на этих сервисах?
Ну у меня, например, нет - не могу позволить себе 1-2 гига синхронизирующего трафика.
Но даже это не отменяет того момента, что что именно надо просматривать в задании не специфицировано - т.е. по выполнении задачи всегда есть возможность сказать что запрашивалось другое.
Это тестовое задание, никто не ожидает какого-то готового продукта.
Какая именно система - сервера, клиента или виртуальная - не специфицировано.
Потому берется прямой, но самый заморочный вариант - читать клиентскую ФС
На зло бабушке отморожу себе уши :)
Если задание не специфицировано, то просто либо спрашиваем, у того, что придумал это задание, либо выступаем в роли заказчика самостоятельно и додумываем спецификацию, при этом не забываем описывать ограничения. Однако в данном случае, все предельно ясно. ИМХО :) Ну и не забываем, что это тестовое задание.
Так что даже если считать что упомянута серверная ФС, то надо уточнять ограничения.
Вот только с ума сходить не надо :) Опять же, если ТС увидит, что в данном случае ИИС (кстати, почему именно ИИС, нигде в
задании не сказано, что это все для винды :D да и под винду не только ИИС использовать можно) накладывает ограничения, то это просто описывается одной строчкой текста.
Так что тут явно не хватает еще полноценного инсталлятора, который бы включал установку и настройку веб сервера и php при этом для каждой известной миру операционной системы :D (ну если уж идти по "самому замороченному варианту")
Ты можешь себе представить ситуацию, когда у чела нет аккаунтов на этих сервисах?
Могу представить, что нет аккаунтов. Но не могу себе представить, чтобы человек из мира ИТ не имел представление о том, что такое Dropbox или Google Drive.
т.е. по выполнении задачи всегда есть возможность сказать что запрашивалось другое.
Ты полагаешь, что
у фирмы, которая нанимает на работу стоит задача отказать как можно большему количеству претендентов?
просто либо спрашиваем
-----
Для осознания необходимости вопроса, собственно, и написан самый глупый вариант прочтения.
самостоятельно и додумываем
------
Ты можешь додумать все что хочешь - "рабобратель" будет интерпретировать как ему нужно.
не забываем, что это тестовое задание.
-----
Именно.
Оцени временные затраты - описанная задача несколько великовата для тестового задания.
При этом, даже имея работающее решение, остается пространство для маневра/отказа.
не имел представление
-----
Имею, но не знаю как там выглядит интерфейс.
Создавать лишний аккаунт чтобы посмотреть как сделано мне лениво.
стоит задача
-----
Я не предполагаю какая задача стоит в данном случае.
Но Я оцениваю время выполнения задачи как >15 минут, т.е. не тест, а кусок работы.
Как показывает практика, есть куча шараг, которые под видом тестовых заданий дают кандидатам куски реальной работы на несколько дней и... на их выполнении все заканчивается.
100 кандидатов, 30-40 решений, 3-5 более-менее приличных - можно выбрать более-менее подходящее, обработать напильником по месту и втиснуть заказчику.
В данном случае для меня задание выглядит именно так - поэтому Я показал возможные проблемы и рекомендовал обдумать.
Оцени временные затраты - описанная задача несколько великовата для тестового задания.
Если не придумывать всякие сложности, то показать список файлов в браузере и скопировать файлы на сервере - вполне себе нормальное тестовое задание. Можно конечно, чтобы этот сервис при помощи нейронной сети и биг дата сам угадывал, какой файл и куда скопировать, но это никому не надо.
С другой стороны, если при виде задания, человек начинает додумывать и реализовывать самый сложный вариант, то это отличный повод не брать такого умника на работу :)
Имею, но не знаю как там выглядит интерфейс.
Зачем там смотреть интерфейс? Имеется в виду пример функционала, а не интерфейса. Функционал этих сервисов понятен и без регистрации. Особенно, в свете описанного выше задания.
начинает додумывать и реализовывать
------
У меня где-то есть предложение что-то как-то реализовать?
Повторюсь - "подсвечены" потенциальные проблемы. Как с ними поступать - это уже к ТС.
в свете описанного выше задания.
-----
Опять за рыбу деньги.
вполне себе нормальное тестовое задание.
-----
Время реализации?
У меня есть на 90% аналогичная задача. Даже более определенная и простая.
На сервер закидывается файл, Сервер на его основе генерит, распределенно по времени, кучу файлов.
Готовые файлы надо в несколько потоков загрузить на клиента.
Из ограничений - нельзя делать поолинг - слишком много придется таскать, нельзя делать отдельный процесс для
отслеживания окончания, перекачка должна начинаться максимально быстро после окончания генерации файла.
Из проблем - нет способа узнать закончил сервер генерацию или нет, количество паралельных клиентов - 5-10 тыс.
Модификация - специфицируется закидываемый файл - хмл-дифф.
На сервере делается мерге с текущим файлом исходных данных и дальше по плану.
Изменения - в любой момент времени надо иметь возможность быстро оценить изменеия в произвольной версии
и вернуться к ней, создать бранч и т.п... гита/свн нет, полные файлы исходных данных хранить нельзя,
ФС пользовать нельзя...
СШарп, .НЕТ, ИИС 7+, презентационный уровень не требуется - хватит настраиваемого клиента.
Желающие могут приступить к реализации "тестовой" задачи - объем несколько меньше, чем у ТС,
но моя оценка первой части где-то 30-40 часов, по второй - неопределенно.
Повторюсь - "подсвечены" потенциальные проблемы.
Фактически ты провалил это тестовое задание :) Т.к. в задании все вполне нормально написано, ты же докопался до ерунды в результате чего выполнение задания стало невозможным ;)
Время реализации?
Если человек хочет работать в web-разработке, то это тестовое задание минут 15-30.
У меня есть на 90% аналогичная задача. Даже более определенная и простая.
Сравни ту хрень, которую описал ты и то, что ожидается от ТС:
Если ты считаешь, что то, что ты описал - это хоть как-то напоминает задание ТС, то ты просто не понимаешь, что требовалось от ТС.
Объясняю для невежд (с) :)
1) надо написать на PHP простенький веб-сервис (я не силен с синтаксисе PHP, поэтому сигнатуру пишу условно):
- moveFile (string from, string to)
- deleteFile (string path)
- downloadFile (string path)
- list<JSONData> getFolderContent (string path) // тут надо вернуть массив данных в JSON (тут можно даже не учитывать подпапки, но имея JSON отличить папку от файла - вообще не проблема)
2) над этим веб-сервисом сделать простенький GUI, чтобы можно было дернуть каждую из этих функций. Тут единственное ограничение - нельзя перегружать страницу целиком.
Собственно говоря, если посмотреть на это задание, то
- moveFile - 1 строчка кода
- deleteFile - 1 строчка
- downloadFile - хз сколько строчек, но тоже врядли больше 5
- getFolderContent - тут строчек 15-20 наверно
- GUI - 2 одинаковых div'а (слева и справа), в каждом div'е сверху строка, в которой указан путь, снизу еще один div с списком файлов. Каждый див состоит из имени, расширения, размера, времени действия и 2-х кнопок - посмотреть и удалить.
- при нажатии на "удалить" сначала спросить юзера, уверен ли он, и если да, то дернуть соответствующую функцию
Все.
Ты правда думаешь, что это аналогичные задания?
PS: а вообще, очень часто вспоминаю своего препода по физике, который говорил "если решение задачи сложное, значит оно неправильное" :)
ты просто не понимаешь, что требовалось от ТС
-----
Ты в этом уверен?
Все.
-----
Ты таки кое-что выкинул...
С васиком выше было сказано MrSanders - Ворд, Ехсел, ПоверПоинт с макросами.
Если есть желание - детачнутый файл мсскл-базы из под винды перекинули под луня - надо просмотр таблиц и реляций...
На все про все - заявленные 30 минут - время пошло, ждем решения как в GOOGLE DRIVE... там ведь пустяки...
Ты правда думаешь, что это аналогичные задания?
------
Да, вполне.
Мое даже чуточку проще - нет заморочек с возможными прочтениями требований,
хотя кое-что Я не указал, чтобы иметь возможность маневра.
Реализация - сервер пишет лог сгенерированных файлов.
Лог читается по ФТП любым клиентом, синхронизируется с внутренним списком файлов с отметками статуса.
Тем же ФТП клиентом по списку тянутся файлы нужным количеством потоков, отмечается статус.
В логе ожидается запись об завершении генерации и докачиваются оставшиеся файлы.
Тут действительно ВСЕ.
Ну и по крайней мере оно пишется весьма средненьким прогером за то время которое Я указал.
Объем реализации - 100-400 строк (8-32 часа) - зависит от способа реализации синхронизации списка и управления потоками.
Вот для модификации уже будет нужен веб-сервис - мерге по ФТП не пройдет, если не мониторить ФС.
Ну так оно в отдельную задачу выделено.
"если решение задачи сложное, значит оно неправильное" :)
-----
Математик нам говорил - если решение сложное - вероятно задача сформулирована неправильно.
Это не значит, что есть простое решение - это значит что имеющийся уровень понимания/способ формулировки задачи не позволяет понять существует ли простое решение.
Ты в этом уверен?
Уверен :)
Ты таки кое-что выкинул...
Да? Что я выкинул? :) Цитату из 1-ого поста приведи :)
С васиком выше было сказаноMrSanders - Ворд, Ехсел, ПоверПоинт с макросами.
Ну MrSanders пошел по твоим стопам и довел тестовое задание до абсурда. И что? И странно, что никто из вас не предложил отклывать sln, при этом так, чтобы подтягивались все исходники и компилировались на клиенте в написанном на JS компиляторе, после чего запускались бы :) Ну а фигли? Это же тоже файлы :D :D :D
Да и вообще много разных форматов данных. Можно еще чертеж самолета открыть. А почему нет? :)
Задание, которое привел ТС делается максимум за 30
минут... ну за час. Не больше.
Цитату из 1-ого поста
-----
* Функционал:
* * Просмотр файлов.
* * kak Google Drive.
довел тестовое задание до абсурда
-----
Тестовое задание не может быть сформулировано так, чтобы его интерпретация приводила к абсурду.
Если такое возможно - надо очень серьезно думать об работе с такой шараге...
Именно об этом и было мною написано.
за 30 минут... ну за час
------
Свое таки Я тоже напишу где-то за час - с ФТП клиентом работал недавно. Правда без документации.
Ну а от тебя ожидается просмотрщик детачнутой базы - не тяни, время идет...
* Функционал:
* * Просмотр файлов.
* * kak Google Drive.
Там не так написано. Пойди-ка и внимательно прочитай описание. И там не написано, что надо повторить функционал Google Drive. Это уже твоя фантазия.
Тестовое задание не может быть сформулировано так, чтобы его интерпретация приводила к абсурду.
Ну если ищут исполнителя, задача которого будет "копать от сюда и до обеда", то конечно не может :)
Если же нужен адекватный сотрудник, то приведенное выше задание показывает сразу две вещи:
1) насколько кандидат соответствует требованиям (знание php, JS итд)
2) насколько кандидат способен понимать задания, которые пишутся простыми смертными.
Если такое возможно - надо очень серьезно думать об работе с такой шараге...
Ну-ну :)
Ну а от тебя ожидается просмотрщик детачнутой базы - не тяни, время идет...
Ну так пусть идет ;) Мне не жалко, у меня свои дела есть. Твои проблемы я решать не буду и не работу к тебе я тоже не устраиваюсь :)
Слив чего? :)
Ты, батенька, бредишь :) Я нигде не говорил, что собираюсь решать твою задачу :)
Это ты с чего-то решил, что твоя задача и задача ТС идентичные. Ну так это исключительно твои проблемы :)
А вот ты со своим видением тестового задания плотно сидишь в луже :)