суббота, сентября 10, 2016

Bing UX нанимает

Updated 26.9.2016: Собеседования будут проходит в Москве в конце октября. Предполагается, что вы будете работать в Москве какое-то время, если вам нужно разрешение на работу в России, упомяните это в сопроводительном письме, пожалуйста.

Группа Bing UX нанимает специалистов, готовых переехать в США, Бельвью. Виза оформляется минимум год, это время вы будете работать в московском офисе Майкрософт.

Вот письмо от рекрутера:
At Microsoft we're always hiring top talent to help us build the products of the future. Bing is one of the flagship products. With 100s of millions of users already we have bold ambitions to make Bing the #1 search engine in the world and the most desired homepage in people’s browsers. We wouldn’t be able to achieve this without amazing engineers that we hire from all over the world.  We have big plans and this means we need to hire passionate and productive engineers like yourselves.   

We’re hiring for Bing UX group (about 500 engineers) based in Bellevue. This group is responsible for many projects including multimedia search, growth & engagement, maps and local search, whole page relevance, APIs and many others. Depending on the specifics of the team you would be working for we are searching for a number of skillsets. Detailed job description can be viewed  here but we’re looking for 4 kinds of profiles:

  1. With a UX focus (javascript, front end development) 
  2. With full stack experience  
  3. With machine learning experience 
  4. With data pipeline experience    

Regardless of what is your area of expertise for each Software Engineer role we always look for a set of skills / knowledge which include:  
  1. Algorithms and data structures  
  2. Coding  
  3. Systems design  
  4. Problem solving


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

Актуально до конца сентября.

четверг, февраля 25, 2016

Несколько интересных свойств умных указателей в C++

Об этом полезно знать при использовании умных указателей в С++:

У shared_ptr есть конструктор, который позволяет создавать зависимости между shared_ptr'ами. (std::shared_ptr's secret constructor  by Anthony Williams)
Допустим, я хочу создать указатель на объект типа Y, py, который является членом экземпляра класса X, px. Мне нужно, чтобы px не удалялся, пока я не закончу работать с py.


void bar(){
    std::shared_ptr<X> px(std::make_shared<X>());
    std::shared_ptr<Y> py(px,&px->y);
    store_for_later(py);
} // our X object is kept alive



unique_ptr не такой уж и уникальный. (unique_ptr–How Unique is it? by Bartosz Milewski)

void f(Foo * pf) {
    globalFoo = pf; // creates a global alias
}

unique_ptr<Foo> pFoo(new Foo());
f(pFoo.get()); // leaks an alias


Передача shared_ptr по значению - дорогое удовольствие. (The Real Price of Shared Pointers in C++ by Nico Josuttis)
При передаче по значению происходит его копирование и к его внутреннему счетчику прибавляется единица, это нужно сделать атомарно, что влияет на производительность. Передавайте его по ссылке, где возможно.


Зачем нужен scoped_ptr, если есть shared_ptr. (shared_ptr vs scoped_ptr)
shared_ptr "тяжелее" чем scoped_ptr, потому что он гарантирует корректную работу  в многопоточных программах. Поэтому, если вы работаете с одним указателем, и вам просто нужно автоматически освободить память из-под него, лучше использовать scoped_ptr.


Чтобы корректно возвращать shared_ptr на this надо использовать enable_shared_from_this. (std::enable_shared_from_this на cppreference.com)
Пример с  cppreference.com демонстрирует что случится, если вы не используете enable_shared_from_this.


#include <memory>
#include <iostream>

struct Good: std::enable_shared_from_this<Good>
{
    std::shared_ptr<Good> getptr() {
        return shared_from_this();
    }
};
 
struct Bad
{
    std::shared_ptr<Bad> getptr() {
        return std::shared_ptr<Bad>(this);
    }
    ~Bad() { std::cout << "Bad::~Bad() called\n"; }
};
 
int main()
{
    // Good: the two shared_ptr's share the same object
    std::shared_ptr<Good> gp1(new Good);
    std::shared_ptr<Good> gp2 = gp1->getptr();
    std::cout << "gp2.use_count() = " << gp2.use_count() << '\n';
 
    // Bad, each shared_ptr thinks it's the only owner of the object
    std::shared_ptr<Bad> bp1(new Bad);
    std::shared_ptr<Bad> bp2 = bp1->getptr();
    std::cout << "bp2.use_count() = " << bp2.use_count() << '\n';
} // UB: double-delete of Bad


Бонусная ссылка:
Smart Pointer Parameters by Herb Sutter

суббота, декабря 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.