Программирование, Путешествия, Покер

Последний пост:1 апреля
810
Статистика
Всего постов
3225
843,374 просмотров
Новых постов
+0
1 в день
Лучшие посты автора
27.09.2022 +233
21.12.2019 +196
22.02.2023 +169
04.01.2023 +166
13.07.2019 +154
Лучшие посты читателей
inpace +111
justpus7 +98
vsobakekot +88
Gtrdy +85
s4ekotilla +78
Самые активные читатели
1 27 47 48 49 50 69 162
  • Цитата (Pivot_Pointer @ 16.9.2018)
    может какой материал посоветуешь на тему ии в джаве

    Рад был бы, но только я не в теме совсем. Вообще для всяких ИИ и машинного обучения питон активно юзают.
    Цитата (VANISH @ 16.9.2018)
    А есть тут люди, знающие текущие ЗП в IT в Праге?

    Думаю, что можно на glassdoor глянуть еще.
    405/1049
    Ответить Цитировать
    1
  • Цитата (strkk @ 16.9.2018)
    А есть тут люди, знающие текущие ЗП в IT в Праге?


    https://www.jobs.cz/prace/praha/programator/?locality%5Bradius%5D=10
    26/27
    Ответить Цитировать
    1
  • Таймлайн, часть 2.

    В прошлом посте, который в данный момент входит в топ-5 постов блога, я описывал начало карьеры. Прошло уже более двух лет с того момента, и я решил написать и про них.

    Итак, прошлый пост закончился на июле 2016 года.

    Август 2016
    Начал проект с обучением.

    Октябрь - Декабрь 2016
    Наконец-то начался новый проект, на котором я был "главным" джава-разработчиком. Со мной вместе работала женщина, которая писала на С++ и переключилась на джаву. Я скидывал ей некоторые задачи, ну и в целом старался помогать ответами на вопросы по языку, а также делал код-ревью. Где-то в это время возник небольшой конфликт, от которого у меня очень сильно подгорело. Дело в том, что делать новый проект, в 2016 году решили на шестой джаве, с использованием кривого самописного тула. На все мои предложения сделать все по-человечески я получал отказ, а причины были довольно тупыми. В тот момент я понял, что работать дальше с такими людьми (это касалось немецкой части) смысла нет никакого. Сложился план - дождаться мая, получить годовой бонус и начать поиски нового места для продолжения карьеры.

    Январь 2017
    Сдал сертификацию Java 7 Certified Professional, набрал 93%. Смысла в этой сертификации большого не было, однако она была нужна для выполнения годовых целей, которые нужны для получения бонуса. Взял второго ученика.

    Март - Апрель
    Постепенно работа на проекте закончилась, и в это время я реально страдал полной фигней. От скуки начал изучать Scala, ковырять Jenkins,в общем, развлекал себя как мог. К сожалению или счастью, но я не могу просто так сидеть и ничего не делать. Это банально скучно, даже если тебе за это платят весьма неплохие деньги. К этому моменту решение сменить компанию сформировалось окончательно. Я пообщался с менеджером и сообщил ему о своем решении.

    Май - Июль
    Этот период был посвящен, главным образом, передаче знаний по проекту стажеру, которого взяли на мое место. Чувак оказался очень толковым, все прошло очень гладко и сомнений в том, что с проектом все дальше будет ок, у меня не было.
    Вдобавок к текущему проекту появилась еще одна отличная идея у наших немецких коллег - меня включили в качестве "консультанта" по миграции какого-то старого проекта на другие сервера. Вещи, которые я увидел, можно рассказывать джунам в качестве страшилок на ночь. И что взбесило меня еще больше, так это тот факт, что моего приемника решили тоже туда вписать после моего ухода. Глупость всей этой затеи меня порядком взбесила, отмазать его тоже не вышло, т.к. сделали это вопреки моему мнению.
    Про походы на собеседования я много писал. Повторяться не буду, оставлю лишь несколько ссылок - раз, два. Одно собеседование было довольно анекдотичным и запомнится надолго.
    Закончилось все на мажорной ноте - я получил должность старшего разработчика в биг дата отделе компании ЕПАМ, где работаю в данный момент.
    14 июля отработал последний день, после чего слетали на неделю в Барселону и 26 июля вышел на работу в новом месте.
    Помимо повышения зарплаты, офис находится гораздо ближе к дому. Про сам офис и его содержимое я тоже писал.

    Конец июля - начало сентября
    Проходил курс по Биг дате. В целом, достаточно уныло было сидеть целыми днями и смотреть видосы, периодически пописывая код. Была парочка собеседований на проекты, однако варианты меня не впечатлили. В обоих случаях планировали писать на питоне, который мне как не нравился, так и до сих пор не нравится, хотя сейчас на нем приходится писать.

    Сентябрь - Июнь
    Довольно длинный период, связанный с работой в проекте для финансового фонда из Нью-Йорка.
    Можно выделить три стадии.
    1. Мне дико не нравилось происходящее, постоянные смены хотелок нашего заказчика по имени Сураб, неопределенность и бардак. Не было ясного понимания что мы делаем и зачем, целые компоненты переписывались с нуля несколько раз, возникали проблемы с запуском, что выливалось в изматывающие митинги по 3-4 часа. Пару раз происходили конфликты с Сурабом из-за того, что мы делали не совсем то, что соответствовало его ожиданиям.
    2. Процесс наладился. Питерскую часть команды (4 человека) посадили в одном месте, что существенно упростило коммуникацию и ускорило работу. Началась работа с новыми интересными штуками из AWS, сформировались процессы. Наш заказчик тоже привык к нам, общение стало происходить в дружеской манере, неадекватно длинные митинги тоже ушли в прошлое.
    3. Было довольно круто, все работало отлаженно, не было строгих дедлайнов, полная свобода в выборе технологий и доверие со стороны Сураба. Довольно показательно все это выглядело на этапе написания фидбеков. В графе "Хотели бы вы работать с ним/ней в следующем проекте" у всей питерской части команды стояло "Точно да". У нас был еще тимлид-венгр, пожалуй он не очень вписывался во всю эту картину, но хотя бы не очень сильно ее портил.
    В целом, этот проект в данный момент является самым интересным и лучшим в моей не очень долгой карьере.

    Параллельно с этим стоит отметить еще несколько интересных моментов.
    1. Выступление на биг дата встрече с докладом про StanfordNLP. Мое первое публичное выступление. Я очень волновался, но, как это часто происходит со мной, коленки трясутся до и после выступления, но вся нервозность пропадает, как только я начинаю говорить.
    2. Выступление на ITSubbotnik с паззлерами. В этот раз людей было куда больше и другой формат. Рассказывать что-то с умным видом куда проще, чем устраивать интерактив с аудиторией. Несмотря на некоторые негативные моменты (жара, сбоящий кликер) вышло довольно неплохо. Большую роль, как мне кажется, сыграло качество материала.

    Также я прошел внутренние курсы по Scala и по лидерству (как быть тимлидом, если говорить упрощенно).

    Июль
    Беспроектный период. От скуки проходил различные обучающие курсы, начал активно решать задачки на hackerrank.
    Сходил к менеджеру и получил повышение зарплаты, что, конечно, очень радует.
    Ближе к концу месяца ко мне пришли с предложением поработать в проекте тимлидом, что я инста вколлил. Начался новый период карьеры. Необычно было проводить собеседования в проект, выдвигать какие-то оценки и налаживать процессы внутри команды.

    Август - Сентябрь
    Работаю лидом. Количество написанного мной кода сократилось, однако скучать не приходится. Постепенно готовлюсь к прохождению ассессмента (а-ля внутренний собес) для получения должности лида де юре.

    Каждый раз, когда я получал какие-то новые назначения, были сомнения - а гожусь ли я? После назначения меня людом данный вопрос тоже мучал меня какое-то время, однако постепенно я пришел к пониманию того, что вполне себе подхожу. Даже более того, в данный момент я вижу потенциал для дальнейшего роста, а текущий статус - просто промежуточной ступенью. Может это звучит туповато, но работа лидом, несмотря на большую ответственность, кажется мне очень простой.

    Продолжение следует...
    406/1049
    Ответить Цитировать
    15
  • Цитата (strkk @ 17.9.2018)
    Каждый раз, когда я получал какие-то новые назначения, были сомнения - а гожусь ли я?


    'Синдром самозванца'. Я хоть этим и не страдаю (и считаю себя таким умным и достойным - думаю как и большинство проф покеристов, пусть и бывших, т к это занятие накладывает отпечаток на эго, кмк). Но при этом я осознаю огромное влияние случая на то, кем я сейчас работаю.
    Читал обсуждения по поводу уточнения требований - очень больная тема (и на то есть комплекс причин, но тут целый доклад можно сделать), но времени обстоятельно ответить не было. Если коротко, то ТС прав, а проходивший собес и решивший таск 'на отвали' - нет) Я просто сейчас занимаюсь улучшением процессов и вопрос с требованиями очень сложный. И когда в текущих неидеальных условиях таск попадает к формально сениору, который не хочет заниматься уточенениями и вообще глубоко вникать в задачи, то я страдаю.
    Одно из заданий, которое я даю на собесе (на тестировщика) как раз направлено на то, что кандидат должен обязательно уточнить требования, а только потом начинать что-то тестировать. Если этого не происходит, то человек как правило сам себе придумывает 'как должно быть' и это проверяет, мне такие люди в команде не нужны, т к этот подход рано или поздно оборачивается факапами.
    32/33
    Ответить Цитировать
    2
  • Возвращаясь к теме требований на собесах - я спросил насчет такого кейса у одного из коллег(миддла, но это не суть как важно) и его ответ меня вообще поразил - "Я бы на собесе решил на отъебись простейшим способом, а на реальном проекте выяснял бы детали"
    Просто по сути, решение такой проблемы на собесе - это мини-демо реальной работы. Показывать свои умения и продавать себя надо там. Экстрасенсорными способностями интервьюверы не обладают.


    Еще один забавный момент был недавно, когда наша эйчар общалась со мной по поводу вопросов, которые могут задать на ассессменте на лида. Вопрос, который поставил меня в тупик, звучал довольно просто: "Перечислите ценности ЕПАМ?".
    Речь идет обо всяких корпоративных лозунгах из серии "Делаем все качественно" и т.п.
    Зачем про это спрашивать, понятия не имею. Да и зачем мне это знать, тоже не очень понятно. Знание корпоративного брендбука и лозунгов в работе мне никогда не пригодится, а о профессиональных качествах говорит ровно ничего.
    А вообще такие "цели компании" очень распространены и есть мнение, что эти принципы зачем-то нужны. Для меня, впрочем, сейчас это вызывает лишь недоумение.
    407/1049
    Ответить Цитировать
    2
  • Молодо зелено)
    strkk, это примерно тоже самое как ты был недоволен прежним лидом, а теперь оказавшись на его позиции понимаешь.
    Когда доростншь до СТО, все сойдётся.
    2/111
    Ответить Цитировать
    0
  • Цитата (VANISH @ 17.9.2018)
    это примерно тоже самое как ты был недоволен прежним лидом, а теперь оказавшись на его позиции понимаешь.
    Когда доростншь до СТО, все сойдётся.


    Ну, я и сейчас им недоволен, а многие вещи как были отстойными (как, например, качество кода и полный игнор код ревью и юнит тестов), так и остались.
    В некоторых вопросах я был неправ, но общую картину это не изменило.

    А какие аргументы в пользу корп. принципов/лозунгов с позиции СТО?
    Мне не кажется, что наличие таких вещей поможет улучшить разработку хоть как-то.
    408/1049
    Ответить Цитировать
    1
  • Один из читателей скинул задачи, которые дает хедхантер при наборе в школу программистов.
    Обе задачи, в принципе, я решил (в теории). Свои мысли по решению напишу позже.
    Задача 1, она же на stackoverflow.

    Цитата
    Ограничение времени 1 секунда
    Ограничение памяти 64Mb
    Ввод стандартный ввод или input.txt
    Вывод стандартный вывод или output.txt

    Необходимо найти минимальное натуральное число, которого нет во входном массиве.

    На вход подается строка, содержащая не более 10 в 6 степени целых чисел в диапазоне от -10 в 9 степени до 10 в 9 степени, разделенные пробелом.

    На выходе ожидается одно число, удовлетворяющее условию задачи.



    Задача 2, она же на stackoverflow.


    Цитата
    Раздели карту
    Ограничение времени 1 секунда
    Ограничение памяти 64Mb
    Ввод стандартный ввод или input.txt
    Вывод стандартный вывод или output.txt
    Представьте, что карта задана следующим прямоугольником:
    ........
    ..o.....
    ...o....
    ........
    где о - это местоположение вакансии. Необходимо разделить карту на N равных прямоугольных частей так, чтобы в каждой была одна вакансия. В случае, если решения нет - ничего выводить не нужно.
    Порядок частей в ответе должен быть сверху вниз, слева направо, т.е. по положению левой верхней точки региона.
    Если решений несколько - нужно выбрать решение с максимальной шириной первого элемента.
    Примеры:
    1) Выбор из нескольких решений:

    .o......
    ......o.
    ....o...
    ..o.....
    Для этой карты мы можем найти 3 решения:
    Решение 1 (горизонтальное разделение):

    .o......

    ......o.

    ....o...

    ..o.....
    Решение 2 (вертикальное разделение):

    .o
    ..
    ..
    ..

    ..
    ..
    ..
    o.

    ..
    ..
    o.
    ..

    ..
    o.
    ..
    ..
    Решение 3:

    .o..
    ....

    ....
    ..o.

    ....
    ..o.


    o...
    ....
    Правильным решением будет первое, т.к. оно имеет наибольшую ширину первого элемента.
    2) Решение с частями разной формы:

    .o.o....
    ........
    ....o...
    ........
    .....o..
    ........
    Решение:

    .o
    ..
    ..
    ..
    ..
    ..

    .o....
    ......

    ..o...
    ......

    ...o..
    ......
    Несмотря на то, что части имеют разную форму, они все - одной площади.
    3) Пример входных данных, для которых решения не существует:

    .o.o....
    .o.o....
    ........
    ........
    ........
    ........
    В данном случае ответом будет пустая строка ”

    Формат ввода
    ........
    ..o.....
    ...o....
    ........
    Формат вывода
    ........
    ..o.....

    ...o....
    ........
    Примечания
    Размер карты по горизонтали и по вертикале не превышает 100.
    Количество вакансий всегда больше 1 и меньше 10
    Каждая часть должна быть прямоугольником
    Равные прямоугольные части - это части, равные по площади, хотя их формы могут быть разными
    Части в ответе должны быть упорядочены по координатам своей левой верхней точки. Из двух частей в ответе раньше должна идти та, верхняя левая точка которой находится выше. Если левые верхния точки обеих частей находятся на одной высоте, то первой должна быть та часть, верхняя левая точка которой находится левее.
    Из всех возможных решений задачи следует выбрать решение с максимальной шириной первого элемента. Если у нескольких возможных решений первый элемент имеет одинаковую ширину, то следует выбрать решение с максимальной шириной второго элемента и т.д.
    409/1049
    Ответить Цитировать
    6
  • привет, strkk и читатели.

    прошу опытных java программистов прокомментировать, по возможности, данный пост

    какие последствия, что ждет java? поделитесь мыслями
    9/34
    Ответить Цитировать
    1
  • Цитата (Pivot_Pointer @ 28.9.2018)
    какие последствия, что ждет java?


    Да ничего особо не изменится. Просто надо будет устанавливать OpenJDK вместо ораклового дистрибутива.
    Полностью платной джава никогда не будет.
    410/1049
    Ответить Цитировать
    1
  • Ну 1 задача под спойлером не точна - нет скоростей: ни процессора, ни его кэшей, ни памяти, ни скорости ввода.
    На ассемблере алгоритм вроде пролазит за 1 проход на среднем 486.
    И по моему для мапа память больше 1мегабита не нужна.
    Сообщение отредактировал Test2 - 29.9.2018, 7:43
    10/20
    Ответить Цитировать
    1
  • Test2, обычно таких деталей знать не нужно. Но в целом да, требования к коду расплывчатые, особенно с учетом того, что I/O операции могут работать дольше самого алгоритма.

    В целом эти ограничения следует понимать как "Алгоритм должен работать за вменяемое время в худшем случае", т.е., к примеру, для первой задачи, способы с хранением всех чисел и последующей сортировкой не подойдут.
    411/1049
    Ответить Цитировать
    0
  • Цитата (strkk @ 28.9.2018)
    Один из читателей скинул задачи, которые дает хедхантер при наборе в школу программистов.
    Обе задачи, в принципе, я решил (в теории). Свои мысли по решению напишу позже.
    Задача 1, она же на stackoverflow.

    Ограничение времени 1 секунда
    Ограничение памяти 64Mb
    Ввод стандартный ввод или input.txt
    Вывод стандартный вывод или output.txt

    Необходимо найти минимальное натуральное число, которого нет во входном массиве.

    На вход подается строка, содержащая не более 10 в 6 степени целых чисел в диапазоне от -10 в 9 степени до 10 в 9 степени, разделенные пробелом.

    На выходе ожидается одно число, удовлетворяющее условию задачи.


    Мне было бы интересно для самопроверки попробовать решить такую задачу, но есть вопрос - как мне отконтролировать память в 64 мб (по времени, я допустим создам некий поток с таймером)
    6/9
    Ответить Цитировать
    0
  • MagicGog, у задачи только одно возможное решение, на сколько я понял. Так что выкладывай код, посмотрим)
    1/16
    Ответить Цитировать
    0
  • Цитата (Malevin @ 29.9.2018)
    MagicGog, у задачи только одно возможное решение, на сколько я понял. Так что выкладывай код, посмотрим)


    Я же написал словечко "бы".
    У меня есть в голове примерный алгоритм

    1. Для начала посмотрим на условие 10 в 6 степени это миллион, а нам дают числа от - 1 миллиарда до 1 миллиарда и нам надо найти 1-е пропущенное натуральное число (т. е. целое число, больше 0).
    2. Нам надо массив входных чисел уменьшить максимально возможным способом. Удаляем все, что <=0, а также все числа, превышающие N, где N - количество входящих значений (Если есть число N+2 в списке, при общем количестве чисел N, значит какое-то число пропущено от 1 до N)
    3. Теперь надо подумать. Мы сделали оптимизацию.
    Чисел стало сильно меньше. Но в худшем случае мы не удалили ничего, что означает, что у нас все цифры по порядку с пропуском 1-го числа. А может быть не по порядку. Хм...
    Исходим из худшего варианта. У нас в массиве N чисел.
    4. Пробегаемся по массиву, считаем сколько в нем чисел < N/2 Если их N/2, то значит от 1 до N/2 пропусков нету и искомое число находится от N/2 до N, если меньше, то там где-то пропуск был пропуск. В любом случае создаем новый массив, в который копируем соответствующие числа из первоначального массива (тут надо еще раз пробежаться по массиву). Далее делаем это итеративно, у меньшая каждый раз массивы поиска.
    При этом массивы пересоздавать каждый раз необязательно, можно пользоваться 2-мя, просто ввести служебные переменные, которые будут означать длину массива.
    В целом как-то так.
    7/9
    Ответить Цитировать
    0
  • Вы что все шутите? Я же вам уже все рассказал - битовый обнуленный мап 1 мбит, входные числа меньше 0 и больше миллиона не надо рассматривать, т.к. длина "не более 10 в 6 степени целых чисел". Остальные устанавливают "1" в битмапе. После обработки всего ввода меньший адрес "0" в битмапе - искомое число. Итого памяти вместе с кодом ~128 килобайт.
    11/20
    Ответить Цитировать
    4
  • Цитата (Test2 @ 29.9.2018)
    Вы что все шутите? Я же вам уже все рассказал - битовый обнуленный мап 1 мбит, входные числа меньше 0 и больше миллиона не надо рассматривать, т.к. длина "не более 10 в 6 степени целых чисел". Остальные устанавливают "1" в битмапе. После обработки всего ввода меньший адрес "0" в битмапе - искомое число. Итого памяти вместе с кодом ~128 килобайт.


    Несколько вопросов.
    1. Что за битмап
    2. Ваш алгоритм будет работать быстрее сортировки, а потом проходу по массиву ?
    3. Мой вариант выше, где нету никаких динамических структур, разве не должен работать быстрее ?
    8/9
    Ответить Цитировать
    0
  • Вообще Test2 все верно написал, идея именно такая - бежим по массиву, неотрицательные числа "запоминаем" выставлением флага в массиве/битмапе, а затем просто ищем первый свободный индекс, который как раз будет являтся первым отсутствующим числом.
    Цитата (MagicGog @ 29.9.2018)
    2. Ваш алгоритм будет работать быстрее сортировки, а потом проходу по массиву ?

    Слово "сортировка" в решении уже говорит о большей сложности алгоритма (в терминах О), чем просто один проход по массиву.

    Цитата (MagicGog @ 29.9.2018)
    3. Мой вариант выше, где нету никаких динамических структур, разве не должен работать быстрее ?


    Неа, он будет работать существенно дольше.

    Цитата (MagicGog @ 29.9.2018)
    1. Что за битмап


    Имеется в виду эта штука, для описания подобных задач есть даже отдельная секция, да и подход типовой, его стоит запомнить.
    В джаве представлено классом java.util.BitSet, ну или можно использовать массив булеанов (не так изящно и эффективно, но тоже работает).
    412/1049
    Ответить Цитировать
    0
  • Да, я понял алгоритм, предложенный Test2 (я при слове битмап пошел искать и в инете и увидел SortedMap, думал он куда-то в ту сторону клонит, отсюда и про сортировку).
    9/9
    Ответить Цитировать
    0
  • По поводу второй задачи.
    Основные моменты, которые надо отметить при поиске решения.

    Цитата
    Если решений несколько - нужно выбрать решение с максимальной шириной первого элемента.
    ...
    Если у нескольких возможных решений первый элемент имеет одинаковую ширину, то следует выбрать решение с максимальной шириной второго элемента и т.д.


    Эти формулировки наводят на мысль а том, что нужен жадный алгоритм, который сразу будет искть решение с максимально широкими прямоугольниками. В таком случае искать все решения смысла нет, т.к. жадный алгоритм сразу найдет самое подходящее и сэкономит время.

    Все части в ответе одного размера, поэтому мы можем определить площадь одного прямоугольника, поделив общую площадь на количество "вакансий". Тутже можно проверить, что площадь - целое число, т.к. в противном случае решения нет.

    Также задача выглядит подходящей для рекурсивного решения. Выходим из рекурсии когда закончились свободные клетки.

    Отсюда вытекает следующий алгоритм.

    1. Определяем площадь одного прямоугольника.
    2. Для этой площади ищем все варианты длины и ширины и сохраняем их в список в виде кортежей (длина, ширина).
    3. Список из п.2 сортируем по ширине.
    4. Для какой-то точки берем прямоугольники из списка по очереди и пытаемся их разместить. Если прямоугольник размещен - ищем верхнюю левую точку в оставшейся фигуре и вызываем этуже функцию с другими координатами. Если клетки кончились - решение найдено, заканчиваем.
    Если ни один из прямоугольников не подошел - возвращаемся на предыдущий шаг.
    413/1049
    Ответить Цитировать
    0
1 27 47 48 49 50 69 162
1 человек читает эту тему (1 гость):
Зачем регистрироваться на GipsyTeam?
  • Вы сможете оставлять комментарии, оценивать посты, участвовать в дискуссиях и повышать свой уровень игры.
  • Если вы предпочитаете четырехцветную колоду и хотите отключить анимацию аватаров, эти возможности будут в настройках профиля.
  • Вам станут доступны закладки, бекинг и другие удобные инструменты сайта.
  • На каждой странице будет видно, где появились новые посты и комментарии.
  • Если вы зарегистрированы в покер-румах через GipsyTeam, вы получите статистику рейка, бонусные очки для покупок в магазине, эксклюзивные акции и расширенную поддержку.