Ежедневная проблема кодирования: программирование головоломок в почтовый ящик

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

Как и в любой другой профессии, ключ к тому, чтобы стать отличным программистом, - это практика . Частые и последовательные практики - отличный и, возможно, лучший способ бросить вызов себе и улучшить свои навыки программирования.

Многие из нас хотят работать в ведущих технологических компаниях, таких как Microsoft, Google, Facebook и т. Д. Хотя многие люди боятся даже пытаться устроиться на такую высококлассную работу, чувствуя себя слишком запуганными или недооцененными. квалифицирован для работы в одной из этих компаний.

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

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

Есть много способов практиковаться, будь то личные проблемы и проекты, другие ресурсы, такие как книги, или использование других онлайн-сервисов. Daily Coding Problem{.dcp-link} - одна из таких услуг.

Что такое ежедневная проблема кодирования?

Daily Coding Problem - это простая и очень полезная платформа, которая каждое утро отправляет вам по электронной почте одну проблему с кодированием. Это гарантирует, что вы будете тренироваться последовательно и достаточно часто, чтобы оставаться в форме в течение длительного периода времени.

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

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

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

И одна из лучших особенностей DCP - это то, что вы бесплатно получаете эти проблемы с кодированием в свой почтовый ящик. За небольшую плату они также вышлют вам решения и подробные объяснения по каждой проблеме, которую вы получите по электронной почте на свой почтовый ящик, которые вы получите на следующий день после проблемы, что даст вам время решить ее самостоятельно. .

Пример проблемы

С каждой проблемой, отправленной вам по электронной почте, вы получите компанию-источник, формулировку проблемы и пример кода. В этом разделе мы рассмотрим одну из проблем кодирования DCP и соответствующее подробное решение:

 Given two singly linked lists that intersect at some point, find the intersecting node. The lists are non-cyclical. 
 
 For example, given A = 3 -> 7 -> 8 -> 10 and B = 99 -> 1 -> 8 -> 10, return the node with value 8. 
 
 In this example, assume nodes with the same value are the exact same node objects. 
 
 Do this in O(M + N) time (where M and N are the lengths of the lists) and constant space. 

Эта проблема была задана Google в реальном интервью.

Внимательно прочтите эту проблему и подумайте, как бы вы ее решить, прежде чем продолжить. Согласно часто задаваемым{.dcp-link} вопросам DCP, у вас должно быть около часа, чтобы решить эти проблемы во время собеседований, так что это также должно быть время, которое вы позволяете себе решать дома.

Как только вы думаете, что разобрались, или когда вы застряли, вы можете взглянуть на подробное решение, предоставляемое Daily Coding Problem:

 We might start this problem by first ignoring the time and space constraints, in order to get a better grasp of the problem. 
 
 Naively, we could iterate through one of the lists and add each node to a set or dictionary, then we could iterate over the other list and check each node we're looking at to see if it's in the set. Then we'd return the first node that is present in the set. This takes O(M + N) time but also O(max(M, N)) space (since we don't know initially which list is longer). How can we reduce the amount of space we need? 
 
 We can get around the space constraint with the following trick: first, get the length of both lists. Find the difference between the two, and then keep two pointers at the head of each list. Move the pointer of the larger list up by the difference, and then move the pointers forward in conjunction and check if they match. 
 
 def length(head): 
 if not head: 
 return 0 
 return 1 + length(head.next) 
 
 def intersection(a, b): 
 m, n = length(a), length(b) 
 cur_a, cur_b = a, b 
 
 if m > n: 
 for _ in range(m - n): 
 cur_a = cur_a.next 
 else: 
 for _ in range(n - m): 
 cur_b = cur_b.next 
 
 while cur_a != cur_b: 
 cur_a = cur_a.next 
 cur_b = cur_b.next 
 return cur_a 

DCP предлагает всесторонние и подробные объяснения, подобные этому, чтобы помочь вам решить каждую проблему и действительно понять решение, а также укрепить логику, которую вы использовали, если бы вы смогли решить ее самостоятельно.

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

Какие языки программирования?

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

Кроме того, DCP стремится расширить свой пул решений и на другие языки, такие как Java, JavaScript, C ++ и Ruby.

Ценообразование

Самое приятное во всем этом то, что подписаться на их сервис и получать проблемы, которые нужно решать каждое утро, абсолютно бесплатно.

С другой стороны, чтобы получить решения по электронной почте, необходимо внести небольшую плату:

Цены на Daily CodingProblem{.ezlazyload .img-responsive}

Годовой план взимает с вас всего 7,50 долларов в месяц (выставляется ежегодно) за их услуги - это немного больше, чем чашка кофе Starbucks в Германии или около двух средних чашек кофе в США!

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

Другие ресурсы для обучения

К счастью для вас, Daily Coding Problem{.dcp-link} - не единственное место, где можно практиковаться и учиться в Интернете!

Если вам больше нравятся книги, обязательно взгляните на них:

Если вы готовитесь к большому собеседованию, я также предлагаю вам прочитать несколько советов, которые помогут вам повысить свои шансы получить работу:

Или, если вам интересно прочитать статьи о некоторых из самых востребованных и популярных языков программирования в мире сегодня, ознакомьтесь с нашими статьями по Node , Python или Java.

Удачного кодирования!

comments powered by Disqus