Рубрика «Блог компании Контур» - 4

Разбор последней четвёртой задачи:

    public double octaPow(double a) {
        return Math.pow(a, 8);
    }

    public double octaPow(double a) {
        return a * a * a * a * a * a * a * a;
    }

    public double octaPow(double a) {
        return Math.pow(Math.pow(Math.pow(a, 2), 2), 2);
    }

    public double octaPow(double a) {
        a *= a; a *= a; return a * a;
    }

Условие (упрощённо):

Определить, какие методы быстрые, а какие — медленные (JRE 1.8.0_161).

Под катом бенчмарки, куски ассемблера и разбор оптимизаций со стороны JVM.

Другие публикации серии: Часть 1, Часть 2 и Часть 3.
Читать полностью »

Мечтаешь сделать игру с собственными правилами и бомбическим сюжетом? Надоело ждать Half-Life 3 и смотреть, как battle royale разрывают гейм-индустрию? Тогда регистрируйся на хакатон Контура и сделай что-то по-настоящему взрывное! 7 и 8 апреля тебя ждет 27 часов непрерывной работы над собственным проектом, знакомство с самыми крутыми разработчиками города и командное месилово за призы.

Хакатон и гейм-джем в Екатеринбурге - 1

Мы не будем ограничивать ни жанром, ни технологиями. Хочешь Super Mario на Марсе? Вперед! Любишь коллекционные карточные игры? Действуй! Каким бы шерстяным волчарой ты ни был, запилить крутой проект за сутки будет сложно. Даже если ты отличаешь друг от друга Defold, Corona, Unity и Unreal Engine. Поэтому тебе помогут другие разработчики, гейм-аналитики, дизайнеры — хакатон будет командным. Если у тебя есть проверенная команда — бери всех с собой. Не каждый может затусить в нашем офисе разработки на Широкой речке. А ты сможешь!

Хакатон и гейм-джем в Екатеринбурге - 2
На нашем предыдущем хакатоне было клёво.

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

Публикую предпоследнюю часть разбора с третьей задачей. До этого выходил разбор первой задачи и второй задачи.

Код к третьей задаче:

    public static double compute(
            double x1, double y1, double z1,
            double x2, double y2, double z2) {
        double x = y1 * z2 - z1 * y2;
        double y = z1 * x2 - x1 * z2;
        double z = x1 * y2 - y1 * x2;
        return x * x + y * y + z * z;
    }

    public static double compute(
            double x1, double y1, double z1,
            double x2, double y2, double z2) {
        Vector v1 = new Vector(x1, y1, z1);
        Vector v2 = new Vector(x2, y2, z2);
        return v1.crossProduct(v2).squared();
    }

    public final static class Vector {
        private final double x, y, z;

        public Vector(double x, double y, double z) {
            this.x = x; this.y = y; this.z = z;
        }

        public double squared() {
            return x * x + y * y + z * z;
        }

        public Vector crossProduct(Vector v) {
            return new Vector(
                    y * v.z - z * v.y,
                    z * v.x - x * v.z,
                    x * v.y - y * v.x);
        }
    }

Условие (упрощённо):

Определить, какие методы быстрые, а какие — медленные (JRE 1.8.0_161).

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

Только поутихли страсти с первой части разбора, вышедшей на прошлой неделе, как публикую продолжение: сегодня речь пойдёт о второй задаче.

Код второй задачи:

    String format(String user, String grade, String company, String message) {
        return String.format(
                "Он, %s, придумал такие %s задачи. Приду на стенд %s и скажу ему %s",
                user, grade, company, message);
    }

    String format(String user, String grade, String company, String message) {
        return "Он, " + user
                + ", придумал такие " + grade
                + " задачи. Приду на стенд " + company
                + " и скажу ему " + message;
    }

    String format(String user, String grade, String company, String message) {
        return new StringBuilder("Он, ")
                .append(user)
                .append(", придумал такие ")
                .append(grade)
                .append(" задачи. Приду на стенд ")
                .append(company)
                .append(" и скажу ему ")
                .append(message)
                .toString();
    }

Условие (упрощённо):

Определить, какие методы быстрые, а какие — медленные (JRE 1.8.0_161).

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

Контур ежегодно запускает бесплатные курсы по программированию для студентов в Екатеринбурге, Питере, Новосибирске, Ростове-на-Дону, Ижевске, Перми и Казани. С 2013 мы выросли до 7 городов и 13 университетов, разработали свою онлайн-платформу ulearn.me, где с февраля 2018 есть курсы не только для разработчиков на C#, но и курс для тестировщиков.

Именно о нем мы поговорили с Катей Чаплинской, менеджером разработки и организатором курса. Катя рассказала какие фишки ждут курсантов в этом году, как проходила подготовка и какие перспективы у курса.

Катя, буквально в двух словах расскажи что это за курс?

— Это уже пятый курс для новичков, который знакомит курсантов с основами тестирования. Традиционно в конце февраля мы набираем группу примерно из 30 студентов и молодых специалистов. Такая небольшая группа дает возможность уделить внимание каждому курсанту, да и преподаватели не утомляются, проверяя домашку. По опыту прошлых лет предполагаем, что 10-15% студентов не дойдут до конца курса, так что группа еще сократится. Занятия начались 22 февраля, все они будут проходить на Малопрудной два раза в неделю, по вторникам и четвергам. Курс закончится еще до майских праздников, потому что в середине мая курсантам становится не до занятий =)

Как мы переняли опыт Khan Academy и сделали свой курс для тестировщиков - 1
Читать полностью »

Появляется все больше SPA салонов. Даже лендинги люди пилят на React. А действительно сложное веб-приложение уже трудно представить с другим подходом. Одна из главных проблем современного фронтенда — это сборка таких проектов. С этим помогают справляться бандлеры.

Иван Соснин, фронтенд-разработчик Контура, рассказывает как настроить webpack 2 и 3, чтобы получить ощутимый прирост в скорости сборки статики. Статья будет полезна тем, кто уже работает с webpack или смотрит в его сторону.

Стоит начать с ремарки, что недавно вышел webpack 4. Там вообще все супербыстро и ничего делать не надо, а еще изменилось процесс разбиения кода на чанки.

Но тащить в продакшен библиотеки, которые обновились вчера — не мой путь.

Webpack

Webpack — это сборщик модулей (бандлер). Он собирает различные модули с зависимостями в один или несколько файлов (бандлов). У webpack модульная архитектура, а это значит, что его можно гибко настраивать. Сборка кода настраивается при помощи плагинов, а трансформации кода производятся с помощью загрузчиков (loaders).

Если хочется больше базовых подробностей, можно почитать статью Рахима Давлеткалиева про webpack 1. Она немного устаревшая, но идеи и примеры в ней разобраны подробно.

За всю эту гибкость приходится платить сложной конфигурацией.

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

Первая часть — разбор самой холиварной задачи из четырёх:

    void forEach(List<Integer> values, PrintStream ps) {
        values.forEach(ps::println);
    }

    void forEach(List<Integer> values, PrintStream ps) {
        values.stream().forEach(ps::println);
    }

    void forEach(List<Integer> values, PrintStream ps) {
        values.parallelStream().forEach(ps::println);
    }

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


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