EMC
интересуется программистами с мат-меха. И позиции C++ стажёров у них бывают.
Знать надо алгоритмы
- Структуры данных: сбалансированные (и не только) деревья, хеш-таблицы, очереди с приоритетами и без, списки. Знать, конечно, не в теории, а уметь работать с ними
- Графы: как минимум обходы в ширину и глубину. А так — поиск путей, минимальные остовные деревья,
- Сортировки: quicksort, heapsort, mergesort, а так же какие-нибудь линейные вроде сортировки подсчётом и цифровой сортировки
- Чем больше — тем лучше
Для всех алгоритмов нужно знать и уметь обосновать их сложность (как по времени, так и по памяти) в терминах O-большого.
C++, разумеется, предполагается знать прилично:
- владение стандартной библиотекой (не будете же Вы raw pointer'ы в продуктовом коде использовать)
- ООП
- шаблонами
- идиомами (RAII, pimpl, etc) в довесок к паттернам проектирования
- Плюсом будет опыт работы с boost'ом.
Помимо этого надо иметь представление о сетях и многопоточном программировании, а ещё уметь организовать процесс разработки, т.е. пользоваться системой контроля версий (SVN, GIT, Mercurial), инструментами для сборки (make / cmake / etc), отладчиками (gdb, lldb, например) и другими полезными тулами (valgrind, gprof, gconv, например), но это уже менее критично. Вообще, знакомство с Linux'ом и экосистемой разработки в нём будет плюсом.
Ну и раньше третьего курса, как уже сказали, работать не рекомендуется.
А ещё можно податься в
Яндекс,
Oracle (у них не только Java, но бывает и C++, не знаю, есть ли соответствующие позиции для студентов) и Intel (насколько я знаю, на текущий момент в Питере позиций нет, только в Нижнем и Москве). Гугл, как известно, из России уехал, а JetBrains, кажется, в C++ разработчиках не нуждается.
Есть ещё куча других компаний поменьше, но их Вы найдёте сами.
Ну и почитайте другие материалы на эту тему: [
1], [
2]
P.S. Оценки в зачётке никого не волнуют. Если Вы только не собираетесь поступать в Computer Science Center, например. Или магистратуру СПбАУ.