Уважаемые форумчане, здравствуйте! С рождеством!
Нужен ваш совет.
Очень нужно сделать тестовое задание.
Ну уровень не смотрите — это новый аккаунт в связи с продлением подписки, плюс, я проходил другие курсы. Уровень знаний: +- основы JDBC и сервлетов без Spring.
Задание по ссылке. В какую сторону копать, пожалуйста, подскажите?
https://drive.google.com/open?id=1kcLCYtCkzDwNs0cFpDIZ-VpyOiX_Y3ed
Никита
17 уровень
Вытесняющий кэш для высоконагруженной системы.
Комментарии (8)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Никита
29 января 2020, 07:16
Уважаемые форумчане, здравствуйте.
Нужен ваш совет.
У меня получилась вот такая простая реализация Java LRU cache: https://gist.github.com/ryabinskiyna/18fcaf795cf4f7495ccd96ca0842cd54
Вопрос, а как мне написать юнит тесты? На что тестировать?
Пробую как-то так:
и как сделать нагрузочные тесты. с этим я вообще не сталкивался. пожалуйста, подскажите
P.S. И кстати, вопрос, а если я делаю так
то нужна ли мне вообще логика в методе put? 0
Take_it_easyExpert
10 января 2020, 10:17
Можешь попробовать такую структуру для кэша - сделай класс например CasheMap <K, V>, положи в него private ThreadLocal Map <K,V>
и реализуй public методы соответственно
put - класть в мапу
get - читать из нее
(те реализации методов которые я видел, были сделаны через TransactionSynchronizationManager)
плюс добавь в этот класс механизм, который будет делать вытеснение (эт гуглить надо, какие записи и когда нужно удалять при реализации вытесняющего кэша).
Кстати, например если нужно удалять записи из мапы, которые там более часа висят - есть вот такая удобная реализация, которая удаляет после определенного времени записи
https://github.com/google/guava/wiki/CachesExplained
И вместо обращения к базе обращаешься к этой мапе, что намного быстрее. При этом надо эту мапу естественно синхронизировать с тем, что у тебя в БД, когда ты удаляешь, добавляешь или изменяешь записи. Но get делаешь к кэшу, а не в БД, и это экономит тебе кучу времени.
У нас на проекте это как то так и работает
0
Стас Пасинков Software Developer в Zipy Master
10 января 2020, 10:37
а почему ThreadLocal?
0
Никита
9 января 2020, 17:13
Признаться, я когда получил это задание, первая мысль была, это что, на древнеегипетском?
Это были небольшие оффлайн-курсы, после которых одна организация, в случае успешной защиты итогового проекта, обещалась позвать на собеседование. Итоговый проект был веб-сервис без использования Spring поисковая система: загружаешь текстовые файлы, вводишь поисковый запрос, получаешь файл со строчками в которых содержится поисковый запрос, желательно с многопоточностью.
После итогового, они сказали, мол, ну будем считать, что на ваш код мы посмотрели, теперь дадим вам задание, чтобы посмотреть, как выдумаете.
Серьезно? Это вот это вот посмотреть, как мы думаем? Над чем? Это что, новогодний розыгрыш был? Ну типа люди знали наш уровень, что мы худо бедно что-то понимаем в Java Syntax, Core, Collections, имеем какое-то отдаленное представление о Multithreading, SQL, JAVA EE. И дают вот такое задание, которое не похоже на задание для предJunior/Junior.
Я до сих пор допускаю мысль, что они либо перепутали ТЗ, либо сделали это специально, чтобы нас слить по какой-то причине.
P.S. "...По времени жёсткой привязки нет, главное что бы соискатели озвучили срок и уложились в него..." А препод по курсам нам сказал: "По задачкам : они на самом деле не сложные, вам нужно просто:
1. Загуглить все умные слова и понять, что они значат
2. Упростить задачу (не переусложнять решение) - на самом деле оно на поверхности и достаточно просто гуглится (нужно будет изучить штук 5-6 ссылок в результатах Google)"
+1
Justinian Judge в Mega City One Master
9 января 2020, 17:32
О подобных заданиях ходят шуточки, что на хабре, что на доу.
Обычно такие очень любят давать либо большие продуктовые компании, либо компании поменьше, но которые плотно работают по направлению - бигдата, высоконагруженные системы и тд.
То что ты описываешь похоже на обычный отбор, я часто пишу о том, чтобы люди не путали курсы на которых учат, и курсы на которых отбирают.
Так а что у тебя в итоге, ты сделал? Делаешь? Начитался статей?
+1
Стас Пасинков Software Developer в Zipy Master
7 января 2020, 23:16
вытесняющий кеш - вроде не оч сложная тема.
насколько я понял, это кеш фиксированного размера.
насколько я понял, на вход ему даешь SQL-запрос, на выходе получаешь ответ (из кеша или же напрямую после обращения к субд)
соответственно, кешировать значения такие, у которых ключем будет строка. еще надо будет учитывать дату-время последнего запроса из бд. ну или же складывать в очередь какую-то. вариант с очередью вроде проще. соответственно, смотрите в сторону таких мап, которые чем-то похожи на очередь. в стандартной реализации java есть LinkedHashMap, посмотрите на нее, может она вам подойдет. или поищите, может что-то готовое подойдет даже лучше.
ну или напишите свою структуру данных. если захотите подглядывать куда-то - можете делать так
+3
VladimirMaster
8 января 2020, 01:45
Стас, спасибо. 👌 Будет, что поковырять в интерес на выходных, для развития мировоззрения.
0
Justinian Judge в Mega City One Master
7 января 2020, 13:20
Какие чудные задания, вот бы показать их тем, кто жалуется на условия задач на джава раше :)
На другом форуме тебе ответили, и я с этим ответом согласен, искать другое тестовое.
Не могу сказать что оно нерешаемое, но если ты даже не знаешь куда копать, это тревожный звоночек.
Думаю, если рамки по времени сжаты, то наиболее реальный вариант тебе просто найти того кто за деньги это сделает, а ты потом разберешь.
А так по сути, добавить нечего, как ни странно копать нужно в структуру и построение кеша и оптимизацию структур данных, и да, предполагается что ты с ними знаком ближе чем написание пары имплементаций упрощенных стандартных коллекций. Хотя..все зависит от строгости проверки и конкурса, если будешь конкурировать с призерами международных олимпиад одно дело, если с казуальными свитчерами другое.
По твоему вопросу рулит копипаст в строку гугля фраз из условий - много интересных материалов, которые можно взять за основу, отправную точку, бери ключевые словосочетания и в гугль. Особенно на английском.
Таким образом направление у тебя есть, весьма конкретное, перечитывай условие по сто раз и отталкивайся буквально от каждого слова.
Удачи
+3