Задать вопрос
  • Как построить такой запрос?

    opium
    @opium
    Просто люблю качественно работать
    Примерно так:
    INSERT INTO c (aID, bID,date) 
         SELECT a.ID, b.ID,NOW()
         FROM A a,  A b 
         WHERE a.Name='Вася'
         AND b.Name='Петя';
    Ответ написан
    1 комментарий
  • Как построить такой запрос?

    kawabanga
    @kawabanga
    insert into table2 (col1, col2, col3)  values 
    (
    (select id from table1 where name='Вася' ),
    (select id from table1 where name='Петя' ),
    NOW()
    )
    Ответ написан
    Комментировать
  • Как грамотно построить архитектуру базы для логов?

    gbg
    @gbg
    Любые ответы на любые вопросы
    Если данные однородны и все чаты одинаковы - первое. Если есть вероятность, что набор сохраняемого для разных чатов будет различным - второе.
    Ответ написан
    Комментировать
  • Выполнение цикла длительностью 6 минут или какой мощности нужен VPS?

    akubintsev
    @akubintsev
    Опытный backend разработчик
    По хорошему, надо бы профилировать ваше приложение с целью оптимизации узких мест. Возможно что-то даже распараллелить.
    Только затем уже думать о наращивании вычислительной мощности.
    Либо смириться с большим временем выполнения.
    Ответ написан
    Комментировать
  • Есть ли основные правила супер оптимизации?

    gbg
    @gbg Куратор тега Программирование
    Любые ответы на любые вопросы
    Главный вопрос - а что мы оптимизируем? Память? Скорость? Размер программы? Легкость модификации? Тут как в RPG - качаем силу, персонаж тупеет; Увеличили скорость - сожрали кучу памяти. И так далее.
    Ответ написан
    Комментировать
  • Есть ли основные правила супер оптимизации?

    ErmIg
    @ErmIg
    Программист
    Есть развернутый ответ для С++ кода, но его можно обобщить и на другие языки и платформы:

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

    1) Важно понимать, что алгоритмическая оптимизация практически всегда может дать лучший эффект, чем программная. Так, если алгоритм имеет сложность O(n^2), то на больших исходных данных он при любой оптимизации будет медленнее, чем неоптимизированный алгоритм сложности O(n). Впрочем, при выборе алгоритма, опираться только на его сложность не стоит: если объем исходных данных не велик, то вполне может оказаться, что алгоритм со сложностью O(n^2) будет работать быстрее, чем с O(n).
    2) Очень важно повторное использование (кеширование) промежуточных данных, вычисленных в программе – ибо быстрее всего выполняется работа, которую не надо делать. Тем не менее, не надо чрезмерно кешированием увлекаться – если объем кэшируемых данных слишком велик, то это может отрицательно сказаться на общей производительности программы (некоторые данные быстрее вычислять на лету, чем считывать из памяти).
    3) Следует избегать излишнего копирования данных (например, передавать сложные типы данных по ссылке, а не по значению).
    4) По возможности следует избегать условных операторов во вложенных циклах. Так как условные переходы, вызываемые такими операторами, плохо обрабатываются современными процессорами с конвейерной архитектурой.
    5) Данные в памяти, которые используются алгоритмами, должны по возможности лежать упорядочено, и использоваться последовательно. Это позволит процессору их эффективно кешировать. Важно помнить, что доступ к кэшу процессора значительнее быстрее, чем к оперативной памяти.
    6) Если алгоритмы это позволяют, то возможно стоит реализовать их параллельное исполнение (в отдельных потоках или процессах). Это позволит эффективно задействовать современные многоядерные процессы.
    7) В некоторых случаях (например обработка изображений) большого эффекта можно достичь применением специализированных расширений процессора (SSE, SSE2, AXX, AVX2 и другие). Стоит отметить, что большинство современных компиляторов (GCC, MSVS, ICC) поддерживают непосредственное использование данных расширений непосредственно из С++ кода при помощи специальных встроенных функций (intrinsics). Минусами такого подхода является потеря переносимости (впрочем, эта проблема решается наличием разных веток программы под разные процессоры) и значительное усложнение программы.
    8) Также большого эффекта можно достичь применением специализированных ускорителей, например GPU (технологии CUDA, OpenCL). Минусами таких решений являются потеря универсальности и значительное усложнение программы, а также то, что на специализированных ускорителях, как правило, хорошо работает далеко не каждый алгоритм.
    Ответ написан
    Комментировать
  • Есть ли основные правила супер оптимизации?

    evnuh
    @evnuh
    Поиск Гугл помог мне, впусти и ты его в свой дом
    Разбираетесь как работает память, проц, диск - узнаете про архитектуру, про виды памяти, про кеши и синхронизацию.
    Разбираетесь как работает язык на котором пишете - узнаете про его слабые стороны, про практики проектирования на нем, про компиляторы, виды автоматической оптимизации и анализаторы кода.
    Разбираетесь как работает программа которую оптимизируете - профилируете, исправляете уже с учетом полученных знаний из первых двух пунктов.

    По другому никак. Без знаний оптимизацией не занимаются.
    Ответ написан
    Комментировать
  • Есть ли основные правила супер оптимизации?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Главное правило оптимизации - не заниматься преждевременной оптимизацией.

    Вообще все просто - пишите код, пишите нагрузочные тесты, профилируете, оптимизируете узкие места. С опытом ляпов будет меньше изначально. Ну и книжки стоит читать всякие, желательно обобщенные (типа там паттерны проектирования и т.д.) что бы можно было вместо оптимизации просто быстро систему масштабировать (это дешевле). Ну и еще теория алгоритмов помогает, если у вас есть именно обработка больших объемов данных (массивы на миллионы айтемов, на тысячах пофигу обычно)
    Ответ написан
    1 комментарий
  • Как делать копию (можно и в ручную) Базы Данных MySQL на Centos 6?

    @AlexLIn
    mysqldump -u root -p --all-databases > backup.sql

    mysqldump database_name > database_name.sql

    mysqldump --databases database_one database_two > two_databases.sql
    Ответ написан
    5 комментариев
  • Переменная vs цикл в данном случае?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Зависит от статистики обращений.
    Если проверки идут намного чаще, чем изменения массива - то переменная. Причём при "удалении" цифры придётся не просто очищать ячейку, а пройтись по всему массиву - нет ли там ещё одной такой цифры.
    Если проверки и изменения идут сериями (много изменений - много проверок), то две переменных. В одной - индекс, в другой признак того, не испортился ли он. Тогда при проверке с "испортившимся" индексом придётся пройтись по массиву и посмотреть, где теперь цифра. Хотя можно просто проверить, что лежит сейчас в ячейке с индексом. Если не нужная цифра - новый проход по массиву. Но здесь уже надо смотреть, какая ячейка портится чаще - та, в которой цифра появилась раньше всего, или та, где она появилась позже всего.
    Если проверки идут достаточно редко, то цикл.
    В сложных случаях - когда в массиве не 10, а 1000 ячеек, цифр может быть много, меняются они часто, и нужно часто проверять, есть ли цифра, и где именно - надо будет хранить индексы ячеек с этими цифрами в какой-нибудь структуре. Например, в двусвязном списке, построенном на двух массивах, параллельных рабочему. Тогда все изменения и проверки будут работать за O(1).
    В общем, всё зависит от ситуации.
    Ответ написан
    Комментировать
  • Переменная vs цикл в данном случае?

    GavriKos
    @GavriKos
    Конечно цикл. Что вы будете делать, когда вам надо узнать наличие двух определенных цифр?
    Ответ написан
    Комментировать
  • Можно ли передать вирус или что-то сделать не хорошее скинув ссылку на картинку?

    gbg
    @gbg Куратор тега Компьютерные сети
    Любые ответы на любые вопросы
    К некоторым данным - получил, опросив ваш браузер. Мог и дыру в нем заэксплуатировать, установив вам троянов.

    Компьютер необходимо немедленно выключить (лучше, прямо из розетки - при штатном выключении гад может порезвиться), загрузиться с LIVE-носителя, снять снимок ЖД. Подождать две-три недели, проверить его последними антивирусами, извлечь недостающие данные.

    На самом компьютере операционную систему следует удалить, диски отформатировать, данные восстановить из резервных копий, сделанных до инцидента.

    Кроме того, желательно переустановить интернет-сессию, если у вас динамический белый IP.

    Тогда с вероятностью 95% угроза будет снята.
    Ответ написан
    3 комментария
  • Можно ли передать вирус или что-то сделать не хорошее скинув ссылку на картинку?

    Scorpi
    @Scorpi
    С вашими данными всё в порядке.
    При просмотре страниц в интернете ваш браузер каждый раз передаёт некоторую информацию о системе (в том числе о самом браузере). Никаких личных данных там нет.
    С помощью этого можно узнать: IP, браузер, ОС, разрешение экрана и некоторые другие некритичные данные.
    https://ru.wikipedia.org/wiki/User_Agent
    Ответ написан
    Комментировать
  • Можно ли передать вирус или что-то сделать не хорошее скинув ссылку на картинку?

    mrdubz
    @mrdubz
    front end developer
    Это не вирус. При обращении за картинкой ваш браузер передает кучу информации о вашей системе и имея доступ к логам сервера ее можно увидеть.
    Ответ написан
    Комментировать
  • Вопрос дизайнерам. Как научиться разрабатывать хороший дизайн сайтов?

    suhodolskiy
    @suhodolskiy
    Нравится дизайн - сядь и нарисуй такой же , тем самым набивая руку и чувство стиля! Читай разные паблики про дизайн и тд. Кради как художник!

    Часто использую при выборе цвета: www.flatuicolorpicker.com
    Ответ написан
    Комментировать
  • Какой вариант оптимальней?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    В первом случае варианты не эквивалентны. При a=3, b=4 в первом варианте CallMe() вызовется дважды, а во втором - только один раз.
    Первый вариант написан оптимально. Чтобы заставить его вести себя, как второй вариант (с одним вызовом CallMe()), достаточно вставить else:
    if(a == 3)    CallMe();
    else if(b == 4) {
        CallMe();
        Giveme();
    }

    Это будет оптимально по времени. Если же вместо CallMe() стоит более сложный вызов или длинный блок, и вас волнует длина кода (например, на микроконтроллере), то берите второй вариант. Если при этом и общее условие сложнее, чем b==4, то придётся его запомнить:
    bool cond1=(sin(x)>=sin(y));
    if(cond1 || cos(x)<cos(y)) Draw(tan(x),tan(y));
    if(cond1) CloseLine();


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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    А что по вашему читается лучше?

    для первого примера - второй вариант как более читабельный. Пусть лучше дублируется условие чем действие по этому условию.

    По второму - как вам удобнее и если логика допускает реверс порядка.
    Ответ написан
    Комментировать
  • Какой вариант оптимальней?

    @MarkusD
    все время мелю чепуху :)
    По первому блоку:
    switch( b )
    {
    case 4:
    	GiveMe();
    case 3:
    	CallMe();
    	break;
    };

    А вообще, это не вопрос оптимальности. Это вопрос подхода реализации. Легко можно придумать ситуацию, в которой разработчик огребает со всеми подобным подходами, кроме одного или пары.

    Касательно второго блока: предлагаю самостоятельно собрать в дебаге и релизе следующий код, да убедиться в сомнениях самому.
    class A
    {
    public:
    	inline size_t begin()
    	{
    		printf( "begin();\n" );
    		return 0;
    	};
    	
    	inline size_t end()
    	{
    		printf( "end();\n" );
    		return 10;
    	};
    };
    
    A cont;
    for( size_t iter = cont.begin(); cont.end() > iter; ++iter )
    {
    	printf( "%d\n", iter );
    };


    Но тут всегда надо понимать, на какие траты допустимо идти ради удобства. Не стоит увлекаться вторыми переменными в объявлении for если тот же "end()" является легкой и оптимизируемой компилятором конструкцией. В этой связи советую уделить куда большее внимание области инкремента в "for".
    Постфиксная форма всегда приводит к созданию временной переменной, префиксная - нет. Префиксные формы для счетчиков циклов в Google Code Style помечены как хорошая практика.
    Ответ написан
    Комментировать
  • За скорость обработки циклов отвечает процессор?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    За скорость обработки циклов отвечает процессор?

    1. Да. Но, если в цикле присутствуют обращения к диску, сети или чему-то внешнему, кроме памяти и самих регистров процессора, то процессор в периоды этих обращений будет простаивать.

    Если в однопоточном выполнении какого-либо сценария будет 50 тысяч итераций, это нормально?

    2. Нормально, если задачу нельзя разбить на независимые подзадачи. Пример неразбиваемой задачи найти сложно, но например задача комивояжера в классическом исполнении.

    А если поставить всё это дело на машину с высокочастотным процессором?

    3. Будет быстрее, если нет НО из первого ответа.

    А если многоядерный процессор?

    4. Будет быстрее, если нет НО из второго ответа.

    И если программа выполняется в одном потоке, то количество ядер не важно?

    5. Да, неважно.
    Ответ написан
    Комментировать