Рубрика «Учебный процесс в IT» - 152

Всем привет!

Меня зовут Женя, и мне давно хотелось попробовать написать что-то на Хабр, но было непонятно, с чего начать. Недавно мной был обнаружен сервис Witget.com, позиционирующий себя как конструктор инструментов повышения конверсии, после непродолжительного знакомства с ним стало понятно, что установка кода «витжетов» на различные сайты почти наверняка встречается с проблемой разных CMS-систем, на которых эти сайты основаны. Эту проблему и достаточно простое ее решение – установку кода при помощи FTP-SFTP — было решено сделать темой первого поста для Хабра, возможно, кому-то это будет полезно, хотя продвинутые программисты вряд ли узнают что-то новое для себя. В похожей ситуации находятся многие другие SaaS-сервисы, для которых нижеследующая инструкция легко адаптируется.
Читать полностью »

Обсуждение начну с весьма печального твита Криса Аллена (Chris Allen, @bitemyapp):

«Мне немного грустно от того, что некоторые организации твердят мантру „Вы сможете использовать haskell“, чтобы заполучить толковых инженеров подешевке».

Untyped is unsane (@bitemyapp) 3 июня 2014 г.

Почему программистам не удается заработать: многомерность и нескончаемое бремя HaskellДля тех, кто не знает: Haskell — продуктивный и мощный язык, позволяющий программистам, по крайней мере талантливым, быстро писать правильный код. По сравнению с разработкой на Java скорость возрастает в 2–5 раз при сопоставимой производительности и меньшем количестве ошибок. Крис совершенно верно заметил, что разработчик, использующий Haskell, чаще всего не получает достойного вознаграждения. Если вы твердо решили использовать функциональное программирование, то будете зарабатывать меньше коллег, которые разгребают базы кода C++ в банках, накопленные за 30 лет. Как-то это все неправильно. Почему к программистам, применяющим более мощные инструменты, применяются экономические санкции? В отличие от управленцев, ставящих во главу угла выгоду, программисты действительно хотят сделать свою работу как можно лучше. Почему же вместо «пряника» за благие намерения они получают «кнут»?Читать полностью »

Cобрал небольшую подборку вопросов. Возможно кому-то она будет полезна.

Общая иерархия

— Расположите в виде иерархии следующий интерфейсы: List, Set, Map, SortedSet, SortedMap, Collection, Iterable, Iterator, NavigableSet, NavigableMap.
— Почему Map — это не Collection, в то время как List и Set являются Collection?
— как одной строчкой преобразовать HashSet в ArrayList?
— как одной строчкой преобразовать ArrayList в HashSet?
— Как перебрать все ключи Map учитывая, что Map — это не Iterable?
— Как перебрать все значения Map учитывая, что Map — это не Iterable?
— Как перебрать все пары ключ-значение в Map учитывая, что Map — это не Iterable?
— В чем проявляется «сортированность» SortedMap, кроме того, что toString() выводит все по порядку?
— Как одним вызовом копировать элементы из любой Collection в массив?
— Реализуйте симметрическую разность двух коллекций используя методы Collection (addAll(), removeAll(), retainAll())
Читать полностью »

Девять лет назад я начал «в свободное от основной работы время» преподавать компьютерные дисциплины в одном из университетов Санкт-Петербурга. И только сравнительно недавно к своему удивлению обнаружил, что в наших вузах практически отсутствуют курсы с фокусом на проблематику распределённых вычислений. И даже на Хабре эта тема не раскрыта в достаточной мере! Надо прямо сейчас исправлять ситуацию.

Этой теме я и хотел посвятить статью или даже серию статей. Но потом решил выложить своё учебное пособие по основам распределённых вычислений, вышедшее в свет в этом году (читай, небольшую книгу объемом 155 страниц). В итоге получился гибрид – статья со ссылкой на книгу. Книга распространяется бесплатно и доступна в электронном виде.

Вместо пролога. Приступив к тексту статьи, я в очередной раз задумался, а зачем программисту нужно знать теоретические основы распределённых вычислений. Этот вопрос я неоднократно слышал (и продолжаю слышать) от студентов и специалистов, уже работающих в области ИТ. Действительно, зачем, например, знать, что «множество событий распределённого вычисления упорядочено частично, а не линейно»? В чем, так сказать, каждодневная практическая польза этого фундаментального знания?

Должен признать, что у меня нет готового заученного ответа, который я могу выдать не задумываясь. Поэтому каждый раз приходится напрягаться извилинами, и каждый раз ответы и аргументы получаются разными. Вот и сейчас всё как впервые…
Читать полностью »

Последний день регистрации на трехдневную программу «Создание глобального IT startup а»

Как создать стартап, вывести его на международный рынок, привлечь инвестиции и открыть представительство в Кремниевой долине?

Чтобы получить ответы на эти и другие вопросы, Киево-Могилянская Бизнес Школа при поддержке проекта GeeksLab приглашает на трехдневную программу «Создание глобального IT startup-а», которая состоится 7-9 августа в Киеве. Автор и преподаватель программы — предприниматель из Кремниевой Долины, генеральный директор компании rollApp Влад Павлов (Пало-Альто, Калифорния).
Читать полностью »

Началось все с простого — один мой друг захотел писать проги на яве. Естественно, что просто выучив синтаксис языка, никакого опыта в программировании не наберешся, и потому нужно просто писать уже хоть что-нибудь. Вот я и обдумывал вопрос, что же лучше всего подойдет для этого. Я пришел к выводу, что самое лучше в начале пути, на мой взгляд, это создать простенький класс который бы описывал абстрактную «сущность», но при этом был прост в понимании. В итоге было решено выдать тренировочное задание по написанию самопального класса комплексного числа.
Конечно можно было бы просто написать на листочке все требования к этому классу, описать интерфейс всех его методов и тому подобное, однако потом это пришлось бы проверять, и при этом очень даже вероятно что проверять по нескольку раз, так как товарищ только обучается.
Но тут меня потянуло в сторону экспериментов, а так как я нетак давно заинтересовался TDD, то и эксперименты пошли в ту же степь.
Читать полностью »

Cобрал небольшую подборку вопросов. Возможно кому-то она будет полезна.

Общие вопросы

— В чем разница между потоком и процессом?
— Что такое кооперативная многозадачность и она ли в Java. Если да, то какие преимущества. Если нет, то какая тогда в Java?
— Сравните кооперативную и вытесняющую многозадачности.
— Что такое «зеленый потоки» и они ли в Java (в HotSpot JVM 7)?
— Когда началась «Multicore Era»?
— Что такое — Планировщик потоков? Предположите алгоритм работы.
— Какие выигрыши может дать многопоточность на одноядерной машине?

«Железо»

— Что такое Flynn's taxonomy, SISD/MISD/SIMD/MIMD? К какому классу относятся CPU? GPU?
— Расскажите про иерархию кэшей L1/L2/L3? Что вызвало ее появление?
— Что такое Memory wall?
— Что такое Memory Hierarchy?
— Что такое Cache line? В виде каких эффектов проявляется?
— Что такое False sharing? Плохо это или хорошо? Как с этим бороться?
— Что такое Memory padding?
— Что такое Cache pollution? Плохо это или хорошо? Как с этим бороться?
— Что такое Cache miss? Плохо это или хорошо? Как с этим бороться?
— В чем разница между SMP и NUMA? Как это сказывается на программах?
— В чем разница между Multicore и Multisocket?
— Что такое Thread affinity? Можно ли сделать в Java?
— Что такое Inter Thread Parallelism? Task Parallelism?
— Что такое Branch Prediction?
— Что такое Speculative Execution?
— Сравните с точки зрения программиста — машину с четырехядерным процессором и двумя двухядерными процессорами.
— Напишите программу, которая демонстрирует False sharing.
— Напишите программу, которая демонстрирует размер кэша L1.
— Напишите программу, которая демонстрирует размер кэша L2.
Читать полностью »

В данной статье я предлагаю рассмотреть 10 способов реализовать потокозащищенный стек на Java.

Почему стек?
Потому что это одна из простейших в реализации структур данных, так что это не будет «затенять» многопоточную логику. Также из трех основных операций (push, pop, peek) — есть как операции исключительно чтения мутирующей совместно используемой памяти, так и операции записи.

Целью статьи не было проведение сравнительного анализа различных подходов. Задача статьи — показать разнообразие возможностей. Однако в целом стоит отметить, что основная проблема демонстрируемых реализаций стека — наличие одной «горячей точки».

Существуют реализации, которые ослабляют семантику FIFO (или, в других терминах, являются нелинериализуемыми) и «расщепляют» эту точку в «пятно», что улучшает показатели при высококонкурентном доступе. Возможно, это тема для еще одной статьи «Еще 10 способов ...».

Это не просто статья, это — материал к весеннему вебинару «Multicore programming in Java». Видео к занятию #13 я выкладываю в свободный доступ для сообщества.

1. Не синхронизироваться, использовать чужой happens-before
2. На основе synchronized
3. На основе synchronized + идиома Private Monitor
4. На основе ReentrantLock
5. На основе Semaphore
6. На основе ReentrantReadWriteLock
7. На основе Spin Lock (неблокирующий)
8. Treiber stack (неблокирующий)
9. Используем идиому Copy-on-write
10. В функциональном стиле: Persistent stack

Вот видео вебинара (Лекция #13), где мы разбираем данные 10 способов

Читать полностью »

Стать менеджером IT-проекта довольно сложно. И, думаю, не у меня одного появилась проблема с написанием первого технического задания. Но, давайте по порядку. Какие знания и навыки я имел перед началом работы?

На данный момент я являюсь студентом, уже закончившим 3 курс Санкт-Петербургского государственного электротехнического университета «ЛЭТИ». Учусь на кафедре автоматизации процессов управления (АПУ) по специальности информационные системы и технологии в бизнесе. Фактически из меня клепают менеджера проектов, запихивая в голову знания по базам данных, нереалиционным системам, программированию (в основном JAVA и С++ на первых курсах), процессов управления и контроля проектов.
Читать полностью »

Учеба за границей: Вьетнам

Некоторое время назад на хабре были весьма популярны статьи об обучении за границей, но так уж получилось, что все статьи были в основном про варианты в «первом мире»: Европа, Америка, Япония. Однако, я думаю, что существуют много интересных вариантов и в других странах.

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

Однако, первое, что хочу сказать, разумеется, это то, что обучение происходит в Австралийском университете на английском языке. Учить вьетнамский вам не потребуется.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js