Pull to refresh
-1
0
Денис Гребенников @Denis631

User

Send message

«12 часов, 10 интервьюеров»: Как получить работу в сфере финансов на примере собеседования в Goldman Sachs

Reading time 6 min
Views 31K


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

Сегодня же речь пойдет о том, насколько вообще сложно получить работу в области финансов — на примере процесса прохождения собеседования в инвестбанке Goldman Sachs, который поможет составить мнение о том, чего ждать при трудоустройстве в компании финансового сектора.
Читать дальше →
Total votes 17: ↑10 and ↓7 +3
Comments 60

Архитектурные паттерны в iOS

Reading time 14 min
Views 198K

Введение в MVP, MVC, MVVM и VIPER. Что между ними общего и в чем разница.



Делаете все по MVC, а получается некрасиво? Сомневаетесь, переходить ли на MVVM? Слышали о VIPER, но не уверены, стоит ли оно того?

В этой статье я кратко рассмотрю некоторые популярные архитектурные паттерны в среде iOS и сравню их в теории и на практике. Больше информации вы найдете при переходе по ссылкам, указанным в тексте.
Читать дальше →
Total votes 28: ↑28 and ↓0 +28
Comments 18

Анатомия программы в памяти

Reading time 6 min
Views 85K
Управление памятью – одна из главных задач ОС. Она критична как для программирования, так и для системного администрирования. Я постараюсь объяснить, как ОС работает с памятью. Концепции будут общего характера, а примеры я возьму из Linux и Windows на 32-bit x86. Сначала я опишу, как программы располагаются в памяти.

Каждый процесс в многозадачной ОС работает в своей «песочнице» в памяти. Это виртуальное адресное пространство, которое в 32-битном режиме представляет собою 4Гб блок адресов. Эти виртуальные адреса ставятся в соответствие (mapping) физической памяти таблицами страниц, которые поддерживает ядро ОС. У каждого процесса есть свой набор таблиц. Но если мы начинаем использовать виртуальную адресацию, приходится использовать её для всех программ, работающих на компьютере – включая и само ядро. Поэтому часть пространства виртуальных адресов необходимо резервировать под ядро.

image

Это не значит, что ядро использует так много физической памяти – просто у него в распоряжении находится часть адресного пространства, которое можно поставить в соответствие необходимому количеству физической памяти. Пространство памяти для ядра отмечено в таблицах страниц как эксклюзивно используемое привилегированным кодом, поэтому если какая-то программа пытается получить в него доступ, случается page fault. В Linux пространство памяти для ядра присутствует постоянно, и ставит в соответствие одну и ту же часть физической памяти у всех процессов. Код ядра и данные всегда имеют адреса, и готовы обрабатывать прерывания и системные вызовы в любой момент. Для пользовательских программ, напротив, соответствие виртуальных адресов реальной памяти меняется, когда происходит переключение процессов:
Читать дальше →
Total votes 62: ↑61 and ↓1 +60
Comments 24

Культ работы, к которому ты не собирался присоединяться

Reading time 10 min
Views 30K


Эксплуатируются ли на работе наши самые ценные качества? Давайте взглянем на то, как наши сильные стороны оказываются впутаны в формирование плохих привычек, которые – если мы не изменим свою жизнь – вполне могут убить нас.

Ты и не думал, что столкнёшься с подобным. Ты даже не заметил, как сам сюда пришел.
Читать дальше →
Total votes 25: ↑24 and ↓1 +23
Comments 19

Вставка в середину: ArrayList против LinkedList

Reading time 5 min
Views 82K
Как-то на собеседовании мне задали вопрос: какая реализация списка выполнит вставку в середину быстрее: ArrayList или LinkedList? С первого взгляда вопрос простой — нужно посчитать алгоритмическую сложность каждого варианта и сравнить их.
Читать дальше →
Total votes 42: ↑31 and ↓11 +20
Comments 116

URI — сложно о простом (Часть 1)

Reading time 12 min
Views 292K
image

Привет хабр!

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

"Пфф, ссылки они и в Африке ссылки, чего тут разбираться?" — скажете вы, тогда я задам вопрос:

Что есть что и куда нас приведет?
  • http://example.com
  • www.example.com
  • //www.example.com
  • mailto:user@example.com

Если вы не знаете однозначного ответа или вам просто интересно и если вы не боитесь огромного количества трехбуквенных аббревиатур — милости прошу под кат.
Читать дальше →
Total votes 80: ↑77 and ↓3 +74
Comments 47

Грязные решения в реверс-инжиниринге

Reading time 7 min
Views 29K
image

Перед разработчиками довольно часто встаёт выбор — сделать всё правильно, потратив на решение задачи уйму времени, или сделать так, чтобы работало, не особо вдаваясь в детали того, как именно это получилось. Со стороны заказчика, разумеется, наиболее привлекательной является некая золотая середина, которая в данном случае заключается одновременно и в хорошем понимании программистом выполненного таска, и в как можно меньшем количестве затраченных на него человеко-часов. С разработчиками тоже не всё так однозначно — с одной стороны, понимать, что происходит в своём собственном коде, это вполне естесственное желание (особенно если поддержка данного продукта также будет лежать на его плечах), а с другой стороны, если результаты работы приложения представлены в наглядном виде (графики / звуковые или видео-фрагменты etc), разработка разовая, и отдел тестирования говорит, что всё хорошо, то почему бы не проскроллить оставшуюся часть рабочего времени Хабр, посвятив время себе любимому?

Ближе к делу. В одной из предыдущих статей я уже упоминал о программе под названием «Говорилка». Несмотря на название, сама по себе она ничего не озвучивает, а лишь является связующим звеном между пользователем и речевыми движками, предоставляя более удобный интерфейс и возможность конфигурации. Одним из наиболее популярных в узких кругах движков является «Digalo 2000 text-to-speech engine» (далее — Digalo), ссылку на который можно найти как раз на сайте «Говорилки». Как вы уже, наверное, догадались из тематик моих предыдущих статей, не всё с ним так хорошо, и без багов тут также не обошлось. На этот раз проблема проявилась при озвучивании текста «ааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааа». Немного поэкспериментировав, я обнаружил, что при достижении определённого количества «неразрывных» символов Digalo начинает крашиться, предлагая отладить свой процесс. Ну, а что, почему бы и нет?

Как протекал процесс, и что из этого вышло, читайте под катом (перед прочтением данной статьи я настоятельно рекомендую ознакомиться с предыдущими, которые можно найти, например, тут).
Читать дальше →
Total votes 54: ↑54 and ↓0 +54
Comments 9

9 анти-паттернов, о которых должен знать каждый программист

Reading time 9 min
Views 148K
В программировании самокритика – это умение распознать контрпродуктивные решения в дизайне, коде, процессах и поведении. Знание о вредных шаблонах решений полезно для программиста. В этой статье я опишу анти-паттерны, которые я встречал на своём личном опыте время от времени.

Некоторые из них напрямую или косвенно связаны с когнитивными искажениями человеческого сознания – в этих случаях я даю ссылки на соответствующие вики-статьи. Также интересен список известных когнитивных искажений.

1 Преждевременная оптимизация


В 97% случаев надо забыть об эффективности малых частей программы: преждевременная оптимизация – корень всех зол. Но в 3% случаев об оптимизации забывать не нужно.
Дональд Кнут

Хотя никогда зачастую лучше, чем прямо сейчас
Тим Питерс, Зен языка Python


Что это

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

Почему плохо

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

Как избежать

Сначала пишите чистый, читаемый, работающий код, используя известные и проверенные алгоритмы и инструменты. При необходимости используйте инструменты для профилирования для поиска узких мест. Полагайтесь на измерения, а не на догадки и предположения.
Читать дальше →
Total votes 117: ↑97 and ↓20 +77
Comments 123

Прохождение интервью. Легендарные книги Амазона

Reading time 1 min
Views 13K
Привет, Хабр!

А давайте поговорим про одну из легенд Амазона — книгу «Elements of Programming Interviews: The Insiders' Guide».

image
Читать дальше →
Total votes 10: ↑6 and ↓4 +2
Comments 11

Разбор задач 3-го квалификационного раунда Russian Code Cup 2015

Reading time 4 min
Views 7.8K


В воскресенье 31 мая прошел последний 3-й квалификационный раунд RCC 2015. Первым за 1 минуту и 49 секунд решил задачу A (Покупка велосипеда) Григорий Резников (grikukan), он же раньше всех справился с задачами B (Цифровые корни) и C (Две улитки) — 7:26 и 18:39 соответственно. Адам Бардашевич (subscriber) раньше всех решил задачу D (Игровые автоматы) за 14 минут и 20 секунд. 

Олег Меркурьев (Merkurev) стал первым при решении последней задачи E (Интернетопровод) — 1 час и 1 минута. По итогам 3-го раунда первую строчку в турнирной таблице занял Евстропов Глеб (GlebsHP) из Москвы.

Немного фактов: в раунде сразились 3762 программиста, из них хотя бы одно правильное решение прислали 664. Всего за раунд было прислано 3536 решений. 202 лучших участника было квалифицировано (200-е место поделили 3 участника). 3 участника были дисквалифицированы жюри. 604 участника, прошедшие квалификацию в трех раундах, сразятся 14 июня за звание финалиста. Все участники отборочного раунда получат онлайн-сертификаты, а 200 лучших из них получат футболки RCC 2015.
Читать дальше →
Total votes 28: ↑26 and ↓2 +24
Comments 0

Да начнется unit-тестирование (Objective-C)

Reading time 10 min
Views 36K
Данная статья посвящена вопросу тестирования в рамках Objective-C используя Xcode 6. Рассматриваются стандартная библиотека для тестирования и сторонняя библиотека OCMock. Опытные разработчики, возможно, не найдут здесь слишком полезной информации, тем же, кто недавно встал на этот путь — статья откроет необходимые базовые знания по написанию unit-тестов на языке Objective-C.

Для основы тестирования просьба обратиться сюда.
Для основы unit-тестирования сюда.

А теперь мы начнем изучение unit-тестирования в рамках Objective-C.
Читать дальше →
Total votes 20: ↑17 and ↓3 +14
Comments 11

Анализ изображений и видео. Классификация изображений и распознавание объектов

Reading time 1 min
Views 26K
Сегодня мы публикуем седьмую лекцию из курса «Анализ изображений и видео», прочитанного Натальей Васильевой в петербургском Computer Science Center, который создан по совместной инициативе Школы анализа данных Яндекса, JetBrains и CS-клуба.



Всего в программе девять лекций, из которых уже были опубликованы:
  1. Введение в курс «Анализ изображений и видео»;
  2. Основы пространственной и частотной обработки изображений;
  3. Морфологическая обработка изображений;
  4. Построение признаков и сравнение изображений: глобальные признаки;
  5. Построение признаков и сравнение изображений: локальные признаки;
  6. Поиск по подобию. Поиск нечетких дубликатов.

Под катом вы найдете план новой лекции и слайды.
Читать дальше →
Total votes 34: ↑33 and ↓1 +32
Comments 0

Лекции Техносферы. 2 семестр. Современные методы и средства построения систем информационного поиска

Reading time 6 min
Views 21K


Снова в эфире наша образовательная рубрика. На этот раз предлагаем ознакомиться с очередным курсом Техносферы, посвящённым информационному поиску. Цель курса — рассказать об основных методах, применяемых при создании поисковых систем. Некоторые из них представляют собой хороший пример смекалки, некоторые показывают, где и как может применяться современный математический аппарат. Преподаватели курса: Алексей Воропаев, Владимир Гулин, Дмитрий Соловьев, Игорь Андреев, Алексей Романенко, Ян Кисель.
Читать дальше →
Total votes 21: ↑21 and ↓0 +21
Comments 0

Простое суффиксное дерево

Reading time 12 min
Views 74K
ДеревоСуффиксное дерево – мощная структура, позволяющая неожиданно эффективно решать мириады сложных поисковых задач на неструктурированных массивах данных. К сожалению, известные алгоритмы построения суффиксного дерева (главным образом алгоритм, предложенный Эско Укконеном (Esko Ukkonen)) достаточно сложны для понимания и трудоёмки в реализации. Лишь относительно недавно, в 2011 году, стараниями Дэни Бреслауэра (Dany Breslauer) и Джузеппе Италиано (Giuseppe Italiano) был придуман сравнительно несложный метод построения, который фактически является упрощённым вариантом алгоритма Питера Вейнера (Peter Weiner) – человека, придумавшего суффиксные деревья в 1973 году. Если вы не знаете, что такое суффиксное дерево или всегда его боялись, то это ваш шанс изучить его и заодно овладеть относительно простым способом построения.
Читать дальше →
Total votes 41: ↑40 and ↓1 +39
Comments 20

Переходы при помощи CoreAnimation: анимируем появление изображения

Reading time 6 min
Views 12K
Недавно я наткнулся на интересный концепт банковского приложения. Интересен он не только лишь тем, что выглядит значительно удобнее мобильного приложения любого банка, но и своими невероятными анимациями. Некоторые мне так понравились, что я решил незамедлительно их где-нибудь применить. В частности, мне показалась очень интересной анимация появления на экране фотографии пользователя и иконок управления его картой.
Читать дальше →
Total votes 13: ↑11 and ↓2 +9
Comments 1

BalanceBall. Самобалансирующая платформа от А до Я

Reading time 4 min
Views 32K
Я студент Физтеха, факультета радиотехники и кибернетики, и как положено всем второкурсникам, в весеннем семестре надо сделать проект по информатике и микроконтроллерам. Я решил убить двух зайцев одним выстрелом и объединил два проекта в один.

Долго выбирал тему проекта. Из идей была игра, похожая на Guitar Hero, но контроллером были твои руки, настукивающие барабанные биты по столу. Также задумывался над созданием светодиодной матрицы, управляемой по Bluetooth с компьютера, со своим простеньким скриптовым языком для написания анимаций. Задумки были интересными, но я все равно казались чем-то не тем. Потом я случайно наткнулся на это видео и сразу загорелся идеей реализовать что-то подобное. Вот что у меня вышло в итоге:



Кому интересен процесс создания этой платформы от проектирования деталей до написания компьютерного зрения, прошу под кат.
Читать дальше →
Total votes 65: ↑62 and ↓3 +59
Comments 10

Разбор задач 2-го квалификационного раунда Russian Code Cup 2015

Reading time 5 min
Views 13K


В субботу 25 апреля прошел второй квалификационный раунд Russian Code Cup 2015. 3516 программистов решали задачи в течение двух часов, из них хотя бы одно правильное решение прислали 458 участников.

Первым за 4 минуты и 9 секунд решил задачу A (Турникеты в метро) Машарабов Александр (map). Задачу B (Игра) за 8:48 решил Дубленных Денис (Stigius), задачу C (Палочки и шарниры) за 18:08 решил Нигматуллин Нияз (niyaz.nigmatullin). Задачу D (Числа Фибоначчи) за 1 час 5 минут и 21 секунду решил Лунев Антон (Anton_Lunyov). А последнюю задачу E (Телепорты) за 1 час 44 минуты и 55 секунд решил Кунявский Павел (PavelKunyavskiy), который занял 1 место в рейтинге по итогам раунда. Последняя успешная попытка совершена Альбертом Саакяном за 4 секунды до конца соревнования. Все пять задач сдал только Павел Куявский.

Всего участники отправили на проверку 4287 решений, на С++ их было 3145, на Java — 613. Отметим, что из 2166 решений, сданных на GNU C++, 1218 решений использует С++ 11 стандарта, а остальные все еще не применяют новые возможности языка. Правильных решений на этот раз всего 913, из них на С++ — 726, на Java — 141.
Читать дальше →
Total votes 18: ↑16 and ↓2 +14
Comments 11

Организация виртуальной памяти

Reading time 14 min
Views 73K
Привет, Хабрахабр!

В предыдущей статье я рассказал про vfork() и пообещал рассказать о реализации вызова fork() как с поддержкой MMU, так и без неё (последняя, само собой, со значительными ограничениями). Но прежде, чем перейти к подробностям, будет логичнее начать с устройства виртуальной памяти.

Конечно, многие слышали про MMU, страничные таблицы и TLB. К сожалению, материалы на эту тему обычно рассматривают аппаратную сторону этого механизма, упоминая механизмы ОС только в общих чертах. Я же хочу разобрать конкретную программную реализацию в проекте Embox. Это лишь один из возможных подходов, и он достаточно лёгок для понимания. Кроме того, это не музейный экспонат, и при желании можно залезть “под капот” ОС и попробовать что-нибудь поменять.
Читать дальше →
Total votes 39: ↑39 and ↓0 +39
Comments 4

Лекции Техносферы. 1 семестр. Алгоритмы интеллектуальной обработки больших объемов данных

Reading time 3 min
Views 48K
Продолжаем публиковать материалы наших образовательных проектов. В этот раз предлагаем ознакомиться с лекциями Техносферы по курсу «Алгоритмы интеллектуальной обработки больших объемов данных». Цель курса — изучение студентами как классических, так и современных подходов к решению задач Data Mining, основанных на алгоритмах машинного обучения. Преподаватели курса: Николай Анохин (@anokhinn), Владимир Гулин (@vgulin) и Павел Нестеров (@mephistopheies).



Объемы данных, ежедневно генерируемые сервисами крупной интернет-компании, поистине огромны. Цель динамично развивающейся в последние годы дисциплины Data Mining состоит в разработке подходов, позволяющих эффективно обрабатывать такие данные для извлечения полезной для бизнеса информации. Эта информация может быть использована при создании рекомендательных и поисковых систем, оптимизации рекламных сервисов или при принятии ключевых бизнес-решений.
Читать дальше →
Total votes 47: ↑46 and ↓1 +45
Comments 15

Objective-C Runtime для Си-шников. Часть 3

Reading time 4 min
Views 11K
image

Всем привет. Сегодня я продолжу рассказывать вам о внутреннем устройстве Objective-C Runtime, а конкретно — о его реализации на уровне языка C.

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

Тем, с кем мы ещё не знакомы, я предлагаю для начала прочитать первую и вторую части, а прочитавших и заинтересовавшихся прошу под кат.
Читать дальше →
Total votes 22: ↑20 and ↓2 +18
Comments 15
1

Information

Rating
Does not participate
Location
Германия
Date of birth
Registered
Activity