• IDE для PostgreSQL?

    mmmaaak
    @mmmaaak
    Ответ написан
    Комментировать
  • Есть ли целесообразность использования оператора throws?

    compilator
    @compilator
    Senior Data Engineer
    "Т.е. теперь мне непонятно зачем использовать оператор trows, ведь и без него все работает?"

    Есть исключения проверяемые (checked), а есть не проверяемые (unchecked). Отсюда и пляшите )
    Легко гуглится.
    Ответ написан
    Комментировать
  • Какую книжку прочесть где хорошо описывается Java многопоточность?

    TheKnight
    @TheKnight
    Программист
    Блог Алексея Шипилёва Правда это уже для продвинутых.
    Ответ написан
    Комментировать
  • Удалять ли данные из бд?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Удалять записи можно только если они гарантированно не понадобятся в будущем и на них не ссылаются другие записи.
    Ну и если таблица большая и содержит много индексов, то быстрее пометить запись на удаление, а реальное удаление и, соответственно, перестроение индексов делать при периодическом обслуживании.
    Ответ написан
    Комментировать
  • Как сравнивать дженерики в java?

    artemgapchenko
    @artemgapchenko
    Java это не C++, не Kotlin и не Scala. Перегрузки операторов нет, поэтому сделайте так:
    if (a.compareTo(b) > 0) {
        doSomething();
    }

    В вашем случае MyClass должен имплементировать Comparable<MyClass<T>>, а не Comparable<T>. В compare() можно будет сравнивать между собой x.data и y.data, которые, в вашем случае, являются инстансами обобщенного типа, имплементирующего Comparable. Как-то так:

    class MyClass<T extends Comparable<T>> implements Comparable<MyClass<T>> {
        T data;
    
        MyClass(T data) {
            this.data = data;
        }
    
        @Override
        public int compareTo(MyClass<T> another) {
            return data.compareTo(another.data);
        }
    }
    Ответ написан
    2 комментария
  • Стоит ли изучать Java после прекращения разработки EE?

    jaxtr
    @jaxtr
    JavaEE/Spring-разработчик
    Для начала: Java != Java EE. Прекращение разработки Java EE со стороны Oracle никак не повлияет на жизнь самого языка программирования. Есть вообще сомнения, что Oracle решится на этот шаг, т.к. у них самих большое количество проектов именно на Java EE разработано.

    Плюс стоит помнить, что Java EE - это набор спецификаций, а не конкретная реализация. Java EE состоит из кучи JSR, которые обсуждаются и принимаются JCP (Java Community Process), то есть сообществом, в котором кроме самих Oracle есть Red Hat, IBM, Spring, Apache и многие другие. Oracle может просто передать управление Java EE сообществу. И да, новые JSR выходят вне зависимости от Java EE.

    И стоит помнить, что на Java EE интерпрайз не кончается, ведь есть ещё Spring, который развивается гораздо быстрее и занимает существенную нишу на рынке.

    Так что, учитывая сказанное выше, учить однозначно стоит, если есть желание.
    Ответ написан
    Комментировать
  • Нормально ли проверять одни и те же данные по десять раз?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Проверять данные в каждом методе - это вполне отличная практика, по сути это соблюдение интерфейса метода.
    Но возвращать при этом null/false - практика хреновая, если ваш метод на вход требует int, а получил array - надо бросать исключение. Так вы будете знать, что внешний код, который использует ваш метод работает не корректно.

    Для объектов настоятельно рекомендую использовать type hinting:

    public function test(MyObject $object, $id)
    {
        if (!is_int($id)) {
            throw new \InvalidArgumentException('Argument "id" must be int');
        } elseif ($id < 0) {
            throw new \InvalidArgumentException('Argument "id" must be positive');
        }
    ...


    Если пишете на семерке, то и для скаляров и на вывод - тоже стоит указывать type hinting. Правда с выводом не всегда это можно делать, например возврата null, или что-то еще.

    public function checkPositive(int $intData): bool

    Для сокращения проверок можете мой пакет заюзать https://packagist.org/packages/ko-ko-ko/assert, он спроектирован под максимальную производительность и использование в каждом методе.

    Стоит ли продолжать заморачиваться с проверкой передаваемых данных в каждой функции?

    Да. За счет этого вы выигрываете в безопасности, надежности и времени поиска багов.
    Ответ написан
    8 комментариев
  • Нормально ли проверять одни и те же данные по десять раз?

    @AndryG
    Разделите код на группы:
    - контачит с опасным миром входных данных (публичный метод, которому скармливают $_POST['x'] и т.д.)
    - используется только в безопасной среде (приватные методы, классы глубоких внутренностей бизнес-логики, которые по нормальному никогда не используются из "грязной" среды)

    И станет ясно, где проверка нужна строгая, а где достаточно указать типизацию параметра и в остальном доверять данным, которые 100% уже проверил другой код-санитар.

    И веселее было бы использовать исключения. В этом случае b($array) из вашего примера уже никто и не вызывали бы.
    Ответ написан
    Комментировать
  • В чем преимущества формата JSON(b) в PostgreSQL?

    sim3x
    @sim3x
    json тебе нужен только если у тебя постоянно меняется структура лога
    Если у тебя есть конечное число типов логов, то лучше перед сохранением их преобразовывать в свой стандарт
    Ответ написан
  • Как правильно указать тип ответа для REST API?

    @CobaltTheTerrible
    Копипастю код на Python
    В принципе любой из двух ваших вариантов подходит и будет в духе REST. Это неоднократно обсуждалось.

    Однако я бы хотел предложить вам рассмотреть третий вариант: использование расширений:
    super-rest/employees.xml
    super-rest/employees.json
    super-rest/employees.bin

    Вот мнение Роя Филдинга на тему type vs extension
    Regardless, it is a fact that the distinction between path and query in the URI syntax has nothing to do with how a service is implemented or whether a given representation of a resource can be saved as a file. Likewise, the only relevant distinction between file extensions and query-based media-type indicators is that the latter are too long and far more likely to cause undesirable cache impacts (many general-purpose caches refuse to store responses that look like queries because, historically, they tend to have lower hit rates than simple paths). That's why I always prefer extensions.

    Neither choice has anything to do with REST.
    Ответ написан
    Комментировать
  • Знаете ли вы программистов которые в одиночку создали крутой проект?

    @asd111
    Google - два парня Сергей Брин и Ларри Пейдж
    Facebook - начал Марк Цукерберг
    Instagram - два парня, один делал приложение для iPhone, другой делал сайт, потом заработали расширились
    MsDOS - первую версию сделал один человек, потом Баллмер у него купил за 50 000 $ и права перешли Microsoft
    Nginx - начал Игорь Сысоев
    Компьютер Apple I - дело рук Стива Возняка
    Linux - начал Линус Торвальдс
    Git - начал Линус торвальдс
    Redis - Salvatore Sanfilippo ( antirez )
    Minecraft - начал Маркус Перссон ( также известный как notch )
    Dropbox - начал Дрю Хьюстон
    Shadertoy - создан Iñigo Quilez ( также известен как iq )
    C++ - начал Бьёрн Страуструп
    Python - Гвидо ван Россум
    PHP - Расмус Лердорф

    SimplaCMS - начал один человек
    DLE CMS - начал один человек
    TYPO3 CMS - начал один человек

    P.S. ответ редактировался и дополнялся
    Ответ написан
    20 комментариев
  • Как ускорить запрос в postgresql?

    Melkij
    @Melkij
    PostgreSQL DBA
    По порядку:
    Повторно запрос выполняется много быстрее.

    Значит, вы с головой упёрлись в диск.
    Вариант есть только один - ставить быстрый диск.
    Вариант похуже, т.к. диск всё равно у вас останется медленный и если не на чтении, то на старте и на записи вы туда упрётесь очень хорошо - использовать больше памяти. Чтобы как можно данных было в памяти. Но при работе эти данные всё равно надо поднимать с медленных дисков, потому базу сначала придётся разогревать. Есть даже штатная утилитка pg_prewarm

    В конфиге postgresql менял настройки только авторизации.

    По дефолту там что-то несмешное вместо shared_buffers. 32 что ли мегабайта? И это на ключевую характеристику базы.
    Увеличивать хотя бы до 20% от общего объёма памяти на машине.

    В третьих, актуальный Postgresql довольно плохо умеет развесистый IN. И тому есть не совсем очевидное решение - переписать в join:
    select count(*) from test JOIN (VALUES (1),...,(10000)) AS v(val) USING (val);

    Такой вот hash join работает быстрее IN. На 10000 элементах получали 10мс против 380мс у IN.
    Ответ написан
    Комментировать
  • Нормализация БД. Зло или добро?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Все зависит от контекста высказывания (задачи разные бывают). Бросаться в крайности это глупо (только ситхи все возводят в абсолют (с) Оби)

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

    p.s. уточните о чем был проект или скиньте ссылку, любопытно посмотреть на безумца или понять его хотя бы.
    Ответ написан
    Комментировать
  • Какие книги и статьи посоветуете по профилированию Java-приложений?

    angry_cellophane
    @angry_cellophane
    1. Java performance - the definition guide. Не самая свежая, но в ней много полезной информации.
    2. java-performance.com
    3. Про учечки - хороший блог от plumbr
    4. Подписывайтесь на каналы: java, jugru, codefreeze
    5. Читайте java magazine
    6. Гуглите java performance
    7. etc
    Ответ написан
    Комментировать
  • Как повторить текущую итерацию while C#?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Зависит от логики. Если, как показано ниже, то можно использовать continue:
    int i = 0;
    bool b = false;
    while (i < 10)
    {
    	Console.WriteLine("Текущее: {0}", i);
    			
    	if (i == 5 && !b)
    	{
    		b = true;
    		continue;
    	}
    			
    	i++;
    }

    В крайнем случае есть goto:
    int i = 0; 
    bool b = false;
    while (i < 10)
    {
    	again: // точка возврата
    	Console.WriteLine("Текущее: {0}", i);
    			
    	if (i == 5 && !b)
    	{
    		b = true;
    		goto again;
    	}
    			
    	i++;
    }

    Посмотреть online-пример

    Однако не следует злоупотреблять подобными переходами. От обилия операторов goto в коде, у программиста может случиться разрыв мозга, что приведет к неминуемой гибели проекта и его возрождению в новом виде, если, конечно, сам программист не скопытится. Травма та серьезная :-) Если есть возможность, желание и время, лучше изменить логику так, чтобы не приходилось делать такие «прыжки».

    Для получения файлов или вообще работы с файлами (ожидание доступа для чтения или удаления, получение данных из сети и т.п.), можно использовать вложенный цикл, который будет пробовать выполнить задачу до тех пор, пока она будет успешно выполнена или не истечет отведенное время на выполнение задачи (или количество попыток):
    // пауза между попытками (100 мс)
    var interval = new TimeSpan(0, 0, 0, 0, 100); 
    // максимальное время ожидания (1 секунда)
    var timeout  = new TimeSpan(0, 0, 0, 1); 
    while (true)
    {
      var totalTime = new TimeSpan(); // счетчик времени
      var заданиеВыполнено = false;
    
      while(!заданиеВыполнено) // повторять, пока задание не будет выполнено
      {
        try
        {
          // тут код задания
          // если ошибок не будет, то
          заданиеВыполнено = true; // работа цикла будет завершена
        }
        catch
        {
          // если ошибка, делаем паузу
          System.Threading.Thread.Sleep(100);
          // увеличиваем счетчик времени
          totalTime += interval;
          if (totalTime > timeout)
          {
    				// превышен таймаут, выходим
    				Console.WriteLine("Превышено время ожидания");
    				break;
          }
        }
      }
    }
    Ответ написан
  • Как написать бота для выставления счета?

    Neuroware
    @Neuroware
    Программист в свободное от работы время
    Не нужно костылей, у QIWI есть API
    Ответ написан
    4 комментария