суббота, декабря 05, 2015

вторник, октября 20, 2015

We're hiring: Bing Ads, modern C++

Update 30.10.2015: Я закончила принимать резюме. Всем спасибо!

В моей команде открылось несколько позиций: Software Engineer, Software Engineer II, Senior Software Engineer.

Пишем распределенные высоконагруженные системы на С++, приветствуем знание C++11/14. Находимся в Бельвью, штат Вашингтон, США. Работаем в отдельных офисах.

Визы делаем, но, возможно, придется поработать в Ванкувере (Канада) какое-то время.

Если интересно, присылайте свое резюме мне, адрес есть в профиле.

Официальное описание позиции Software Engineer II:
Online Advertising is one of the fastest growing businesses on the Internet today, with $40 billion of a $600 billion advertising market already online. Microsoft is innovating rapidly to grow its share of this market by providing the advertising industry with a world-class online advertising platform and service. The Microsoft Ads Research & Development team is one of the most strategic and growing teams at Microsoft.

As part of a software company with powerful innovations and part media company with global properties, at Microsoft Ads we bring both our technical and creative side to the table. Through incisive analytics, we know who cares - both when and where. We understand how to get in front of the right people at the strongest point of influence. Above all, we love data and excel at interpreting it for our partners. Collecting valuable information from every campaign and mining it for insights.

Selection and Ranking team in Ads platform is responsible for selecting all possible ads and run the machine learned models to find the most relevant Ads for the user queries. This requires processing enormous amount of data in real time, within a few milliseconds. We are looking to grow our system to n times the current scale. This team provides a good opportunity to learn advertising business. If you like to work in a fast paced and highly innovative environment, SnR platform team is the right place for you. Come join us if you feel passionate about building distributed, highly scalable and performance intensive system.

∙ Excellent OO design and implementation skills.
∙ Excellent knowledge of algorithms and data structures.
∙ Passion for building high-quality and scalable online backend services.
∙ Great communication and cross-team collaboration skills.
∙ Highly self-motivated with a demonstrated ability to work in a fast-paced environment
∙ Good Understanding of distributed system is a strong plus.

∙ BS or MS degree in Computer Science or related technical discipline.
∙ 3+ years of professional software development experience.
∙ Expert development skills in multithreaded C++.
∙ Solid design skills, with a strong eye toward maintainability and flexibility of code.
∙ Excellent analytical and problem solving skills and foundation in OO principles.
∙ Knowledge of Search/Ads serving platform is a plus to have but not required.
∙ Experience in building scalable and performant distributed systems desirable but not required.

Microsoft is an equal opportunity employer.  All qualified applicants will receive consideration for employment without regard to race, color, gender, sexual orientation, gender identity or expression, religion, national origin, marital status, age, disability, veteran status, genetic information, or any other protected status.

вторник, сентября 01, 2015

Практический английский. Цифры и буквы.


После приезда в США я обнаружила неожиданные пробелы в своем английском. И это оказался отнюдь не герундий. Если вы собираетесь ехать в США или работать с американцами, проверьте себя.

Вы не знаете цифры
Не верите мне, да?
Возмущены? И прямо сейчас готовы это опровергнуть. "Алена, ты чего, смотри: one, two ..."
А теперь быстро и без запинки попробуйте произнести на английском свой номер телефона. На память, не подглядывая. Попросите друга быстро произнести 10 случайных цифр и запишите их на бумагу. Вам придется это делать часто.
Некоторое время спустя я осознала, что цифры в английском тексте я читала по-русски. И никогда об этом не задумывалась.
Здесь многие вопросы решаются по телефону. Вам придется много и часто проговаривать свой номер телефона (а он будет новый). Номер своей кредитной карты. Иногда на той стороне будет робот.
Напоминаю, что тут очень любят считать сотнями 1200 - twelve hundred.

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

понедельник, июня 29, 2015

Фрагментация памяти в C++ приложениях

Поскольку памятью в С++ приложении программист управляет самостоятельно, то и за фрагментацией памяти приходится следить самим. Память фрагментируется, если приложение работает достаточно долго и при этом активно работает с памятью. Не такая редкая проблема. Я это видела в играх, игрок бегает, юнитов убивает, локации меняет, надо под это память выделять и потом освобождать. И в высоконагруженных системах, запросы приходят, надо под них память выделять, потом освобождать.

Чем это плохо? Во-первых, память может внезапно закончиться. Во-вторых может просесть производительность. Вот тут можно почитать историю как это выглядит на практике: Out of memory

Вот тут с картинками написано как оно происходит: Holier Than Thou
Но не написано - а что с этим делать-то? Итак, с чем я работала.

Region-based memory management. Выделяем память большим куском, например, под уровень в игре.  Популярный термин для такого куска - "арена". Потом уже внутри этого куска создаем нужные нам объекты. Когда все это стало не нужно - весь кусок памяти освобождаем. Заодно с утечками памяти проблем меньше.
Арену можно использовать вместе с STL, см. "STL custom allocators".


Boost.Pool. Там есть несколько разных интерфейсов, я использовала object_pool, который помогает эффективнее создавать и удалять большое количество сравнительно маленьких объектов.

Также я видела разное креативное использование placement new, как правило его можно заменить Boost.Pool'ом.

среда, мая 13, 2015

"Марсианин" на русском языке

Пока писала пост про книги по С++11 обнаружила, что "Марсианин" Энди Вейера переведен на русский. Это отличная бодрая научная фантастика, пока не встречала человека, которому он бы не понравился.

В оригинале - "The Martian".

суббота, мая 09, 2015

Хорошие книги по С++11

Я сейчас в работе активно использую фичи C++11 и C++14, чего и вам рекомендую. Вот вам отличные книги по новыму стандарту.

Самая лучшая книга по C++11 и C++14. Просто, понятно с примерами. Для тех, кто знает С++ и хочет использовать фичи нового стандарта. На русский, похоже, не переведена
В переводе "Параллельное программирование на С++ в действии. Практика разработки многопоточных программ"
С фокусом на многопоточность, которой раньше в стандарте не было. Если душит жаба эту книгу покупать, то написана она на основе вот этих статьей Уильямса: Multithreading in C++0x Series
В переводе "Стандартная библиотека C++. Справочное руководство"
Джоссатис обновил свою книгу про STL. Много букв. Очень много букв. Выискивать там куски, относящиеся именно к C++11, смысла не имеет. Многопоточность, правда, вынесена в отдельную главу, но по многопоточности лучше Уильямса почитать.
Поэтому рекомендую эту книгу тем, кто решил начинать изучать STL. Обратите внимание на издание, вам нужно второе издание, там на обложке крупно написано С++11.
Вообще это относится ко всем книгам по С++. То, что издано до 2012 года можно считать устаревшим.

Про качество переводов ничего сказать не могу.

Ссылки по теме:
Хорошие книги по С++

суббота, января 24, 2015

Юбилей подкрался незаметно

Десять лет назад я написала первый пост в этот блог. Не ожидала, что он продержится так долго.
После рождения дочки я стала писать сюда несколько реже. Ну вы, наверное, заметили. Моя активность сместилась в Твиттер. https://twitter.com/alenacpp

Другие социальные сети где я есть
http://instagram.com/alenacpp/ - я ни разу не фотограф, но поддалась всеобщей моде
http://facebook.com/alenacpp - использую для чтения Facebook'а, также туда идет трансляция из твиттера. В друзья добавляю тех, кого читаю.