Результаты поиска
ITVDN: курсы программирования
Видеокурсы по
программированию
Подписка

300+ курсов по популярным IT-направлениям

Выбери свою IT специальность

Подписка
Подписка

300+ курсов по популярным IT-направлениям

Результаты поиска по запросу: mvc 5*
ТОП 20 тестовых заданий на интервью для Java разработчика

Автор: Армен Маилян

Напишите программу на Java для переворачивания строки, изменив расположение символов в строке задом наперёд без использования встроенных в String функций Напишите программу на Java для переворота последовательности символов в строке без использования встроенной в String функции reverse() Напишите программу на Java для того, чтобы поменять местами значения, хранящиеся в двух переменных с помощью третьей переменной Напишите программу на Java, чтобы поменять местами значения, хранящиеся в двух переменных, без использования третьей переменной Напишите программу на Java для подсчета количества конкретных слов в строке, используя HashMap Напишите Java-программу для итерации объекта типа HashMap с использованием цикла while и улучшенного цикла for Напишите программу на Java, чтобы узнать, является ли число простым или нет Напишите Java-программу, чтобы определить, является ли строка или число палиндромом, или нет Написать программу на Java для вычисления серии чисел Фибоначчи Напишите Java-программу для обхода ArrayList с использованием цикла for, while и улучшенного цикла for Напишите программу на Java, чтобы продемонстрировать явную проверку условий ожидания Напишите Java-программу для демонстрации прокрутки вверх / вниз Напишите программу на Java, чтобы открыть все ссылки на gmail.com Напишите код для Selenium, чтобы перейти на предыдущую вкладку Напишите программу на Java, чтобы найти повторяющиеся символы в строке Напишите Java-программу, чтобы найти второе по величине число в массиве Напишите Java-программу для проверки является ли введенное число - числом Армстронга Напишите Java-программу для удаления всех пробелов из строки с помощью replace() Напишите Java-программу для удаления всех пробелов из строки без использования replace() Напишите Java-программу для чтения данных из таблицы Excel В этой статье мы приведем достаточно большое количество примеров программ из тех, что просят написать соискателей во время прохождения интервью на вакансию Java разработчика.  Указанные тестовые задания мы приводим с реальными примерами кода, заданными в интервью как начинающих, так и достаточно опытных кандидатов. На сегодня среди интервьюеров стало обычной практикой давать тестовые практические задания во время интервью, не фокусируясь только на теоретических вопросах. Такие задачи обычно задаются на техническом этапе интервью Java разработчика. Для того, чтобы помочь соискателям подходящих вакансий пройти такие интервью, мы хотим перечислить несколько очень важных примеров программ на Java вместе с надлежащим описанием каждого. Кроме того, мы также добавляем соответствующие пояснения кода. Эти пояснения дадут вам четкое представление о том, как работает каждая программа.   Самые популярные вопросы интервью Java-программирования.   Q # 1) Напишите программу на Java для переворачивания строки, изменив расположение символов в строке задом наперёд без использования встроенных в String функций. Ответ: Для начала инициализируем строковую переменную st и используем класс StringBuilder. Объект класса StringBuilder strB будет в дальнейшем использоваться для добавления значения, хранящегося в строковой переменной st. После этого мы используем встроенную в StringBuilder функцию reverse() и сохраняем новую - обращенную строку в stB. Наконец, мы выводим на экран stB.   public class FirstTask{               public static void main(String[] args) {                    // ITVDN.com 1 из ТОП 20 тестовых заданий на интервью для Java разработчика                    String st = "Задача1";                    StringBuilder stB = new StringBuilder();                    stB.append(st);                    stB = stB.reverse();       // используем StringBuilder для переворота строки                    System.out.println(stB);           }   }   На экране получим: 1ачадаЗ   Q # 2) Напишите программу на Java для переворота последовательности символов в строке без использования встроенной в String функции reverse(). Ответ Способ 1: Есть несколько способов, с помощью которых вы можете перевернуть вашу строку, если вам разрешено использовать другие встроенные функции строки. В этом способе мы инициализируем строковую переменную с именем st значением заданной строки. Затем мы конвертируем эту строку в массив символов с помощью функции toCharArray(). После этого мы используем цикл for чтобы взять все символы в обратном порядке и вывести их так на экран поочередно.   public class SecondTask {           public static void main(String[] args) {                //ITVDN.com 2 из ТОП 20 тестовых заданий на интервью для Java разработчика                String st = "Учимся программировать";                char symbols[] = st.toCharArray();  // конвертируем строку в массив символов, затем выводим символы на экран в обратном порядке                for(int x= symbols.length-1; x>=0; x--) {                        System.out.print(symbols [x]);                }         } }   На экране получим: ьтавориммаргорп ясмичУ Способ 2: Это еще один способ выполнить задачу с переворотом последовательности символов в строке. В этом способе вы объявляете строковую переменную st, а затем используете класс Scanner, объявляя объект scannerQ для работы со стандартным потоком ввода данных. В данном случае программа примет строковое значение через командную строку (при ее выполнении). Далее мы использовали метод nextLine(), который прочитал нашу строку при вводе ее через консоль с пробелами между словами строки. После этого мы использовали метод split() для разделения строки на ее подстроки (здесь не указывается разделитель). Затем, мы выводим строку в обратном порядке, используя цикл for.   import java.util.Scanner;     public class SecondTask {           public static void main(String[] args) {                // ITVDN.com 2 из ТОП 20 тестовых заданий на интервью для Java разработчика                String st;                Scanner scannerQ = new Scanner(System.in);                System.out.println("Введите вашу строку:");                st = scannerQ.nextLine();                String[] temp = st.split("");    //используем метод split для вывода строки в обратном порядке                for(int x= temp.length-1; x>=0; x--)                {                        System.out.print(temp [x] + "");                }                        }   }     На экране получим: Введите вашу строку: asfasdf aasdfasdfadsf fsdafdsafdsaa fdsafsa Способ 3: Это способ почти такой же, как способ 2, но здесь мы не используем метод split(). Мы используем класс Scanner и метод nextLine() для чтения входящей строки. Затем мы объявили целочисленную переменную stringLength, присваивая ей значение длины входящей строки. После этого мы вывели строку в обратном порядке, используя цикл for. Однако мы использовали метод charAt(index), который будет возвращать символ по конкретному индексу. После каждой итерации символ будет добавлен в новую строку для получения перевернутого значения строковой переменной. Затем, мы выводим переменную перевернутой строки.   import java.util.Scanner;     public class SecondTask {           public static void main(String[] args) {                // ITVDN.com 2 из ТОП 20 тестовых заданий на интервью для Java разработчика                String mainString, reverseString = "";                System.out.println("Введите нужную строку, чтобы получить перевернутую:");                Scanner scannerQ = new Scanner(System.in);                mainString = scannerQ.nextLine();                int stringLength = mainString.length();                for(int x= stringLength -1; x>=0; x--) {                        reverseString = reverseString + mainString.charAt(x);   //используем встроенный метод charAt() чтобы перевернуть строку                }                System.out.println(reverseString);         } }     На экране получим: Введите строку, чтобы получить перевернутую: Введенная строка акортс яаннедевВ Q # 3) Напишите программу на Java для того, чтобы поменять местами значения, хранящиеся в двух переменных с помощью третьей переменной Ответ: В этом примере мы создаем объект класса Scanner для работы со стандартным потоком ввода данных System.in. Эта программа будет принимать значения a и b через командную строку. Мы использовали nextInt(), который будет помещать введенные пользователем значения целочисленнох переменных в a и b. Также объявляем временную переменную. Теперь логика программы выглядит следующим образом: мы создаем временную или третью переменную с именем temp, присваиваем ей значение, хранящееся в переменной a, а затем мы присваиваем a значение b, и снова присваиваем b значение temp. Таким образом, после выполнения всех операций temp будет хранить в себе значение a, a получит значение b, а b будет иметь значение temp (которое равно a).   import java.util.Scanner;     public class ThirdTask {         public static void main(String[] args) {                // ITVDN.com 3 из ТОП 20 тестовых заданий на интервью для Java разработчика                int a, b, temp;                System.out.println("Введите значения a и b");                Scanner scannerQ = new Scanner(System.in);                a = scannerQ.nextInt();                b = scannerQ.nextInt();                System.out.println("До обмена значениями " + a + b);                temp = a;                a = b;                b = temp;                System.out.println("После обмена значениями " + a + b);                        } }   На экране получим: Введите значения a и b 23 45 До обмена значениями 2345 После обмена значениями 4523   Q # 4) Напишите программу на Java, чтобы поменять местами значения, хранящиеся в двух переменных, без использования третьей переменной. Ответ: В начале все будет так же, как и в приведенном выше примере. Только дальнейшая логика изменится. Здесь мы сначала присваиваем переменной a значение a + b, что означает, что a будет теперь иметь в себе значение как a, так и b. Затем мы присваиваем переменной b значение a - b, что означает, что мы вычитаем значение b из суммы (a + b). До сих пор a все еще хранит в себе сумму изначальных a и b. Но b имеет теперь значение первоначального a. Наконец, на третьем шаге мы присваиваем a значение a - b, что означает, что мы вычитаем значение переменной b (которая сейчас уже имеет в себе значение a) из суммы (a + b). В результате этих действий мы поменяли местами значения, хранящиеся в переменных.   import java.util.Scanner;     public class FourthTask {    public static void main(String args[])    {       int a, b;       System.out.println("Введите нужные значения a и b");       Scanner scannerQ = new Scanner(System.in);         a = scannerQ.nextInt();       b = scannerQ.nextInt();         System.out.println("До обмена значениями\na = "+a+"\nb = "+b);         a = a + b;       b = a - b;       a = a - b;         System.out.println("После обмена значениями без промежуточной переменной\na = "+a+"\nb = "+b);    } }   На экране получим: Введите нужные значения a и b 23 45 До обмена значениями a = 23 b = 45 После обмена значениями без промежуточной переменной a = 45 b = 23   Q # 5) Напишите программу на Java для подсчета количества конкретных слов в строке, используя HashMap. Ответ: Это программа работает с классом-коллекцией, в которой мы использовали HashMap для хранения строки. Прежде всего, мы объявили нашу строковую переменную с именем st. Затем мы использовали функцию split(), с одиночным пробелом, чтобы можно было разбить строку на массив из нескольких слов. После этого мы создали экземпляр HashMap и цикл for. Внутри цикла for мы используем оператор if else. Мы заходим в каждый элемент массива split и добавляем элементы этого массива. Слова мы добавляем в качестве ключей экземпляра HashMap. В качестве значений HashMap  мы будем добавлять то число, сколько раз при обходе массива слов нам данное слово встретилось. Если в наш экземпляр HashMap мы уже добавили данное слово – при обходе мы увеличим значение, записанное в HashMap в соответствии с данным словом-ключом. Каждый раз, когда слово будет встречаться повторно (мы видим, что слово в экземпляр HashMap мы уже добавляли) – значение-счетчик увеличивается на 1. Если такое слово ранее не встречалось – значение-счетчик устанавливается на 1. Наконец, мы выводим на экран HashMap. Обратите внимание: ту же программу вы можете использовать и для подсчета количества символов в строке. Все, что вам нужно сделать, это удалить один пробел (удалить пробел, указанный в методе split) и прописать String [] words = st.split (“”);   import java.util.HashMap;     public class FifthTask{           public static void main(String[] args) {                // ITVDN.com 5 из ТОП 20 тестовых заданий на интервью для Java разработчика                String st = "Current task posted for Java developers developers";                String[] words = st.split(" ");                HashMap<String,Integer> keyValue = new HashMap<String,Integer>();                for (int i=0; i<= words.length-1; i++) {                        if (keyValue.containsKey(words[i])) {                                int counter = keyValue.get(words[i]);                                keyValue.put(words[i], counter+1);                        }                        else {                                keyValue.put(words[i], 1);                        }                }                System.out.println(keyValue);         } }     На экране получим: {Java=1, task=1, developers=2, for=1, Current=1, posted=1}   В # 6) Напишите Java-программу для итерации объекта типа HashMap с использованием цикла while и улучшенного цикла for. Ответ: Здесь мы для начала вставили три элемента в переменную типа HashMap с именем keyValue, используя функцию put(). Размер переменной keyValue можно получить с помощью метода size(). После этого мы использовали цикл While для обхода keyValue, которая содержит по одной паре ключ-значение для каждого элемента. Ключи и значения могут быть получены с помощью методов getKey() и getValue(). Аналогично, мы используем расширенный цикл for, на элементах «qurentMe2» в HashMap.   import java.util.HashMap;   import java.util.Iterator; import java.util.Map;   public class SixthTask{           public static void main(String[] args) {                // ITVDN.com ТОП 20 тестовых заданий на интервью для Java разработчика                HashMap<Integer,String> keyValue = new HashMap<Integer,String>();                keyValue.put(1, "Hello");                keyValue.put(2, "World");                keyValue.put(3, "Have a nice day!");                System.out.println(keyValue.size());                System.out.println("Цикл While:");                Iterator iter = keyValue.entrySet().iterator();                while(iter.hasNext()) {                        Map.Entry qurentMe = (Map.Entry) iter.next();                        System.out.println("Ключ это " + qurentMe.getKey() + " Значение это " + qurentMe.getValue());                }                System.out.println("Цикл For:");                for(Map.Entry qurentMe2: keyValue.entrySet()) {                        System.out.println("Ключ это: " + qurentMe2.getKey() + " Значение это: " + qurentMe2.getValue());                }         }   }   На экране получим: 3 Цикл While: Ключ это 1 Значение это Hello Ключ это 2 Значение это World Ключ это 3 Значение это Have a nice day! Цикл For: Ключ это: 1 Значение это: Hello Ключ это: 2 Значение это: World Ключ это: 3 Значение это: Have a nice day!     Q # 7) Напишите программу на Java, чтобы узнать, является ли число простым или нет. Ответ: Мы объявили две целочисленных переменных temp и number и использовали класс Scanner с nextInt (поскольку у нас может быть на рассмотрении только целое число). Объявляем логическую переменную numberIsPrime и устанавливаем ее значение - true. После этого мы используем цикл for со значением переменной итератора, начинающемся с 2. Количество итераций, нужное нам, будет равно половине введенного числа. Счетчик итераций увеличивается на 1 после каждой итерации. В переменную tempNumber мы будем помещать остаток от деления значения введенного числа на значение счетчика. Если остаток от деления в одной из итераций будет равен 0, тогда numberIsPrime будет установлен в false, введенное число не будет простым, и мы выходим из цикла. Если во всех итерациях мы будем получать в temp некие остатки от деления, отличные от нуля – число будет простым. Основываясь на значении numberIsPrime, мы приходим к выводу, является ли наше число простым или нет.   import java.util.Scanner;     public class SeventhTask {           public static void main(String[] args) {                // ITVDN.com ТОП 20 тестовых заданий на интервью для Java разработчика                int temp, number;                boolean numberIsPrime = true;                Scanner scannerQ = new Scanner(System.in);                number = scannerQ.nextInt();                scannerQ.close();                for (int x = 2; x<= number /2; x++) {                        tempNumber = number %x;                                     if (tempNumber == 0) {                                numberIsPrime = false;                                break;                        }                }                if(numberIsPrime)                        System.out.println(number + " число является простым");                        else                                System.out.println(number + " число не является простым");                                               } }   На экране получим: 27 27 число не является простым   Q # 8) Напишите Java-программу, чтобы определить, является ли строка или число палиндромом, или нет. Ответ: Чтобы проверить, является ли число или строка палиндромом или нет, вы можете использовать любую переворачивающую строки программу, из описанных выше,. Что вам нужно сделать, так это добавить один оператор if-else. Если исходная строка равна перевернутой строке, то число является палиндромом, в противном случае - нет.   import java.util.Scanner;     public class EighthTask{         public static void main (String[] args) {                // ITVDN.com ТОП 20 тестовых заданий на интервью для Java разработчика                String inputString, reversedString = "";                Scanner scannerQ = new Scanner(System.in);                int stringLength;                System.out.println("Введите число или строку");                inputString = scannerQ.nextLine();                stringLength = inputString.length();                for (int x = stringLength -1; x>=0; x--) {                        reversedString = reversedString + inputString.charAt(x);                }                System.out.println("перевернутое значение: " + reversedString);                               if(inputString.equals(reversedString))                        System.out.println("Введенное значение является палиндромом");                else                        System.out.println("Введенное значение не является палиндромом");                        } }   На экране получим: Для строки- Введите число или строку dfggg перевернутое значение: gggfd Введенное значение не является палиндромом Для числа- Введите число или строку 777 перевернутое значение: 777 Введенное значение является палиндромом   Q # 9) Написать программу на Java для вычисления серии чисел Фибоначчи. Ответ: Ряд Фибоначчи — это такая серия чисел, где после первых двух чисел - каждое встречающееся число является суммой двух предыдущих чисел. Пример: 0,1,1,2,3,5,8,13,21 ……… В этой программе мы снова использовали класс Scanner с nextInt (описывалось выше). Первоначально мы вводим (через командную строку) некое число, какое количество чисел Фибоначчи мы должны получить. Мы объявили целочисленные переменные number, x, y и z, инициализировали x и y нулем, а z - единицей. Затем мы использовали цикл for для итерации. Процесс решения в цикле выглядит так – мы присваиваем x значение равное y (которое в первой итерации равно 0), затем y присваиваем значение переменной z (равное в первой итерации 1). Затем переменной z присваиваем значение равное сумме значений x и y.   import java.util.Scanner;     public class NinthTask{         public static void main(String[] args) {                // ITVDN.com 9 из ТОП 20 тестовых заданий на интервью для Java разработчика                int number, x = 0, y=0, z =1;                Scanner scannerQ = new Scanner(System.in);                System.out.println("Введите количество значений");                number = scannerQ.nextInt();                System.out.println("Серия чисел Фибоначчи: ");                for (int i=0; i<= number; i++) {                        x = y;                        y = z;                        z = x+y;                        System.out.println(x + "");    // если вы хотите вывести в текущей строке - используйте print()                }                      } }   На экране получим: Введите количество значений 10 Серия чисел Фибоначчи: 0 1 1 2 3 5 8 13 21 34 55   Q # 10) Напишите Java-программу для обхода ArrayList с использованием цикла for, while и улучшенного цикла for. Ответ: В этой программе мы добавили три элемента в ArrayList и вывели его размер. Затем мы используем цикл While с итератором. Всякий раз, когда итератор получает следующий элемент, он будет отображать этот элемент, пока мы не достигнем конца списка. В нашем случае это будет повторяться три раза. Аналогично, мы сделали для улучшенного цикла for, где мы создали объект o для ArrayList с именем testList. Затем вывели на экран значение объекта. После этого мы создали цикла for, где итератор i установлен сначала на индекс 0, а затем увеличивается на 1 при каждой итерации, пока не будет достигнут предел ArrayList. Наконец, мы выводим на экран каждый элемент, используя метод get(index) для каждой итерации цикла for.   import java.util.*;     public class arrayList {         public static void main(String[] args) {                // ITVDN.com 10 из ТОП 20 тестовых заданий на интервью для Java разработчика                  ArrayList testList = new ArrayList();                testList.add("50");                testList.add("60");                testList.add("70");                System.out.println(testList.size());                System.out.println("Цикл While:");                Iterator iter = testList.iterator();                while(iter.hasNext()) {                        System.out.println(iter.next());                }                System.out.println("Улучшенный цикл For:");                for(Object o : testList) {                        System.out.println(o);         }                System.out.println("Цикл For:");                for(int i=0; i< testList.size(); i++) {                        System.out.println(testList.get(i));                } } }   На экране получим: 3 Цикл While: 50 60 70 Улучшенный цикл For: 50 60 70 Цикл For: 50 60 70   Q # 11) Напишите программу на Java, чтобы продемонстрировать явную проверку условий ожидания. Ответ: В Selenium есть два основных типа ожидания – неявное(Implicit Wait) и явное (Explicit Wait). (Мы не рассматриваем явное (свободное) ожидание в этом примере). Неявное ожидание - объявляется один раз в коде вне операции поиска и действует до изменения.  Это ожидание выполняется независимо от какого-либо условия и применяется ко всем последующим операциям поиска неявно. В приведенной ниже программе вы можете видеть применение такого ожидания для Google Chrome.  Мы использовали несколько встроенных методов для установки свойства, максимизации окна, навигации по URL и поиска веб-элементов. WebDriverWait waitWD = new WebDriverWait(curentDriver, 20); WebElement secondElement = waitWD.until(ExpectedConditions.visibilityOfElementLocated(By.partialLinkText("Тестирование программного обеспечения - Википедия"))); secondElement.click(); В приведенном выше фрагменте кода вы можете видеть, что мы создали объект waitWD для WebDriverWait, а затем мы выполнили поиск WebElement с именем secondElement. Условие установлено таким образом, что веб-драйверу придется ждать, пока мы не увидим ссылку «Тестирование программного обеспечения - Википедия» на веб-странице. Команда не выполнится, если не найдет эту ссылку. Если ссылка будет найдена, то веб-драйвер выполнит щелчок мышью по этой ссылке.     package Codes;   import java.util.concurrent.TimeUnit; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait;   public class EleventhTask{              public static void main(String[] args) {                     // ITVDN.com 10 из ТОП 20 тестовых заданий на интервью для Java разработчика                     System.setProperty("webdriver.chrome.driver", "C:\\driver\\chromedriver.exe");                    ChromeOptions cOptions = new ChromeOptions();                    cOptions.addArguments("--disable-arguments");                    WebDriver curentDriver = new ChromeDriver();                    curentDriver.manage().window().maximize();                    curentDriver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);                    curentDriver.navigate().to("https://www.google.com.ua");                    WebElement curentElement = curentDriver.findElement(By.name("q"));                     curentElement.sendKeys("Testing");                     curentElement.submit();                     WebDriverWait waitWD = new WebDriverWait(curentDriver, 20);                        WebElement secondElement = waitWD.until(ExpectedConditions.visibilityOfElementLocated(By.partialLinkText("Тестирование программного обеспечения - Википедия"))); secondElement.click(); } }     Q # 12) Напишите Java-программу для демонстрации прокрутки вверх / вниз. Ответ: Все строки кодов легко соотносятся с кодом из предыдущего примера. В код этой программы мы включили JavascriptExecutor jscript, который будет выполнять прокрутку. На последней строке кода мы передаём window.scrollBy(argument1, argument2). Если нам нужно выполнить прокрутку вверх, тогда передаем некоторое значение в argument1, если нам нужно прокрутить вниз - передаем некоторое значение в argument2.     package Codes;     import java.util.concurrent.TimeUnit;   import org.openqa.selenium.By; import org.openqa.selenium.Keys; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebElement;     public class TwelfthTask{             public static void main(String[] args) {                    // ITVDN.com 12 из ТОП 20 тестовых заданий на интервью для Java разработчика                    System.setProperty("webdriver.chrome.driver", "C:\\driver\\chromedriver.exe");                    WebDriver qurentDriver = new ChromeDriver();                    JavascriptExecutor jscript = (JavascriptExecutor) qurentDriver;                    qurentDriver.manage().window().maximize();                    qurentDriver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);                    qurentDriver.get("https://www.google.com.ua");                    WebElement qurentElement = qurentDriver.findElement(By.name("q"));                    qurentElement.sendKeys("SoftwareTestingHelp");                    qurentElement.sendKeys(Keys.ENTER);                     jscript.executeScript("window.scrollBy(0,900)");   }   }     Q # 13) Напишите программу на Java, чтобы открыть все ссылки на gmail.com. Ответ: Это типичный пример применения улучшенного цикла for, который мы видели в наших предыдущих примерах. После того, как вы открыли веб-сайт, такой как Gmail, используя get() или navigate().to(), вы можете использовать локатор tagName, чтобы получить все ссылки на веб-сайте, имеющие одинаковые теги. У нас есть улучшенный цикл for, в котором мы обходим все найденные ссылки по нашему тегу.  Для каждой ссылки типа WebElement в нашем листе ссылок, мы получаем сами ссылки через getAttribute(«href») и тексты через getText().     package Codes;     import java.util.concurrent.TimeUnit;   import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver;   public class ThirteenthTask{           public static void main(String[] args) {         // ITVDN.com 13 из ТОП 20 тестовых заданий на интервью для Java разработчика           System.setProperty("webdriver.chrome.drive", "C:\\driver\\chromedriver.exe");         WebDriver curentDriver = new ChromeDriver();         curentDriver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);         curentDriver.manage().window().maximize();         curentDriver.get("https://www.gmail.com/");         java.util.List<WebElement> linkList = curentDriver.findElements(By.tagName("a"));        System.out.println(linkList.size());          for (WebElement thisLink: linkList) {          //выводим на экран ссылку http://google.com или https://www.gmail.com       System.out.println(qurentLink.getAttribute("href"));         //выводим на экран текст ссылки      System.out.println(qurentLink.getText()); } } }   На экране получим: Starting ChromeDriver 2.38.551601 (edb21f07fc70e9027c746edd3201443e011a61ed) on port 16163 Only local connections are allowed. 3 https://support.google.com/accounts?hl=ru Справка https://policies.google.com/privacy?gl=IN&hl=ru Политика конфиденциальности https://policies.google.com/terms?gl=IN&hl=ru Условия использования   Q # 14) Напишите код для Selenium, чтобы перейти на предыдущую вкладку. Ответ: Мы используем класс Robot. Этот пример является  достаточно важным, потому что, если вы знаете сочетания клавиш, вы можете использовать различную навигацию в браузере и его вкладках. Например, если у вас в Chrome открыто три вкладки, и вы хотите перейти на среднюю вкладку, то вам нужно нажать + 2 на клавиатуре. То же самое можно достичь с помощью кода. Применяйте следующий код (сразу после того, как мы увидим создание экземпляра класса Robot). Мы использовали объект qurentRobot класса Robot, с двумя встроенными методами keyPress(KeyEvenet.VK_ *) и keyRelease(KeyEvenet.VK_ *).   package Codes;     import java.awt.AWTException; import java.awt.Robot; import java.awt.event.KeyEvent; import java.util.concurrent.TimeUnit; import org.openqa.selenium.By; import org.openqa.selenium.Keys; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; public class FourteenthTask{           public static void main(String[] args) throws AWTException {                // ITVDN.com 14 из ТОП 20 тестовых заданий на интервью для Java разработчика               System.setProperty("webdriver.chrome.driver", "C:\\driver\\chromedriver.exe");              WebDriver curentDriver = new ChromeDriver();              curentDriver.manage().window().maximize();              curentDriver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);              curentDriver.get("https://www.google.com");              WebElement firstElement = curentDriver.findElement(By.name("q"));              firstElement.sendKeys("software testing help");              firstElement.sendKeys(Keys.ENTER);              String str = Keys.chord(Keys.CONTROL,Keys.RETURN);              curentDriver.findElement(By.partialLinkText("Software Testing Help - A Must Visit Software Testing Portal")).sendKeys(str);              Robot qurentRobot = new Robot(); // Инициализируем экземпляр класса Robot              qurentRobot.keyPress(KeyEvent.VK_CONTROL); // применяя класс Robot вы легко можете получить необходимый результат если вы знаете нужные комбинации кнопок              qurentRobot.keyPress(KeyEvent.VK_2); // тут мы нажимаем ctrl+2              qurentRobot.keyRelease(KeyEvent.VK_CONTROL); // как только мы нажмем и отпустим ctrl+2, мы перейдем на вторую вкладку.              qurentRobot.keyRelease(KeyEvent.VK_2); //если вы хотите снова вернуться к первой вкладке нажмите и отпустите vk_1              } }   Q # 15) Напишите программу на Java, чтобы найти повторяющиеся символы в строке. Ответ: В этой программе мы создаем строковую переменную st и инициализируем целочисленный счетчик, начиная с нуля. Затем мы создали массив символов для преобразования нашей строковой переменной в этот массив. С помощью двух циклов for мы проводим сравнение символов с разными индексами. Если два символа последовательного индекса совпадают, то этот символ будет выведен на экран и счетчик количества совпадающих символов увеличится на 1.     public class FifteenTask{                      public static void main(String[] args) {                    // ITVDN.com 15 из ТОП 20 тестовых заданий на интервью для Java разработчика                   String st = new String("Hello");                   int counter = 0;                   char[] charsArray = st.toCharArray();                   System.out.println("Повторяющиеся символы тут:");                   for (int i=0; i<st.length();i++) {                               for(int j=i+1; j<st.length();j++) {                                          if (charsArray [i] == charsArray [j]) {                                                     System.out.println(charsArray [j]);                                                     counter ++;                                                     break;                                           }                                }                    }            } }   На экране получим: Повторяющиеся символы тут: l   Q # 16) Напишите Java-программу, чтобы найти второе по величине число в массиве. Ответ: В этой программе мы инициализировали массив с 10 случайными элементами, из которых мы собираемся найти второе по величине число. Далее мы создали две целочисленные переменные, которым будем присваивать значения двух целых чисел из массива - самого большого и второго по величине. Обе переменные изначально получают значения первого по индексу элемента массива. Затем мы выводим на экран все элементы, используя цикл for. Дальнейшая логика работы программы в том, чтобы используя цикл for обойти массив. При обходе, если элемент массива с текущим индексом больше, чем значение, хранящееся в переменной biggest, тогда переменной secondBiggest присваиваем значение, хранящееся в biggest, а переменной biggest – новое наибольшее значение в соответствии со значением текущего элемента массива. Опять же, если элемент по текущему индексу больше, чем secondBiggest, то присвойте secondBiggest значение этого элемента. Это будет повторяться для каждой итерации и, в конечном итоге, после завершения обхода массива в цикле вы получите элементы наибольший и второй по величине элементы массива в переменных biggest и secondBiggest соответственно.   public class SixteenthTask {   public static void main(String[] args)     {         // ITVDN.com 16 из ТОП 20 тестовых заданий на интервью для Java разработчика           int numbersArray[] = { 10, 15, 32, 100, 16, 11, 98, 36, 95, 33 };         int biggest= numbersArray[0];         int secondBiggest = numbersArray[0];         System.out.println("Полученный массив: ");         for (int i = 0; i < numbersArray.length; i++)         {             System.out.print(numbersArray[i] + "\t");         }         for (int i = 0; i < numbersArray.length; i++)         {             if (numbersArray[i] > biggest)             {                 secondBiggest = biggest;                 biggest = numbersArray[i];             }             else if (numbersArray[i] > secondBiggest && numbersArray[i] != biggest)             {                 secondBiggest = numbersArray[i];             }         }         System.out.println("\nВторое по величине число:" + secondBiggest);     } }     На экране получим: Полученный массив:  10     15      32      100     16      11      98      36      95      33       Второе по величине число: 98   Q # 17) Напишите Java-программу для проверки является ли введенное число - числом Армстронга. Ответ: Прежде всего, нам нужно понять, что такое число Армстронга. Число Армстронга это число, значение которого равно сумме цифр, из которых оно состоит, возведенных в степень, равную количеству цифр в этом числе. Как пример - число 371: 371 = 3*3*3 + 7*7*7 + 1*1*1 = 27 + 343 + 1 = 371 Если у вас число четырехзначное: 8208 = 8*8*8*8 + 2*2*2*2 + 0*0*0*0 + 8*8*8*8 = 4096 + 16 + 0 + 4096 = 8208 Выполняя решение, для начала мы объявляем целочисленные переменные tempNumber, x и y. Мы инициализировали переменную y значением 0. Затем мы создаем переменную qurentNumber и присваиваем ей целочисленное значение, которое мы собираемся проверить является ли оно числом Армстронга (в нашем случае это 371). Затем мы присвоили нашей переменной tempNumber то значение, которое хранится в проверяемой переменной qurentNumber. Далее в цикле while мы переменной a присваиваем остаток от деления числа qurentNumber на 10 – и получим число единиц в изначальном числе qurentNumber. Затем мы заменяем значение переменной qurentNumber на результат деления введенного числа на 10. Нашей переменной y, значение которой изначально было установлено как 0, присваивается результат y + (x* x * x). Таким образом во время первой итерации в y попадет результат возведения в нужную степень значения числа единиц в изначальном числе, при следующей итерации в y к степени числа единиц добавится результат возведения в степень числа десятков, и так далее по всем разрядам до конца числа qurentNumber с права налево. Наконец, мы используем оператор if-else для проверки, будет ли полученное значение переменной y равно значению переменной tempNumber (в которой хранится исходное число). Если y = tempNumber, то загаданное число является числом Армстронга, иначе - нет.     public class SeventeenthTask{     public static void main(String[] args)  {          // ITVDN.com 17 из ТОП 20 тестовых заданий на интервью для Java разработчика           int y=0, x, tempNumber;          int qurentNumber=371; //Данное число мы будем проверять на то, является ли оно числом Армстронга          tempNumber = qurentNumber;          while(qurentNumber >0)          {          x= qurentNumber %10;          qurentNumber = qurentNumber /10;           y=y+(x*x*x);          }          if(tempNumber ==y)          System.out.println("Данное число является числом Армстронга");           else                 System.out.println("Данное число не является числом Армстронга");      }  }     На экране получим: Данное число является числом Армстронга   Q # 18) Напишите Java-программу для удаления всех пробелов из строки с помощью replace(). Ответ: Это простая программа, в которой у нас есть строковая переменная st1. Другая строковая переменная st2 инициализируется с помощью метода replaceAll, который является встроенным методом для удаления n числа пробелов. В итоге мы выводим на экран st2, которая уже не содержит пробелов.     public class EighteenthTask   {     public static void main(String[] args)     {         // ITVDN.com 17 из ТОП 20 тестовых заданий на интервью для Java разработчика           String st1 = "Мы готовимся     к интервью   на вакансию    Java разработчика";           //Используем метод replaceAll()           String st2 = st1.replaceAll("\\s", "");           System.out.println(st2);              } }     На экране получим: МыготовимсякинтервьюнавакансиюJavaразработчика   Q # 19) Напишите Java-программу для удаления всех пробелов из строки без использования replace(). Ответ: Это еще один подход к удалению всех пробелов. Опять же, для начала у нас есть одна строковая переменная st1 с некоторым значением. Мы преобразовываем эту строку в массив символов, используя toCharArray(). Затем у нас есть один объект StringBuffer strB, который будет использоваться для добавления значения, хранящегося по индексу chars [i] после того, как мы добавили цикл и одно условие if. Условие установлено так, что элемент с индексом i массива символов не должен быть равен символу пробела или табуляции. Наконец, мы выводим на экран наш объект StringBuffer strB.   public class NineteenthTask   {     public static void main(String[] args)     {         // ITVDN.com 17 из ТОП 20 тестовых заданий на интервью для Java разработчика           String st1 = " Мы готовимся     к интервью   на вакансию    Java разработчика";           char[] charsArray = st1.toCharArray();           StringBuffer strB = new StringBuffer();           for (int i = 0; i < charsArray.length; i++)         {             if( (charsArray[i] != ' ') && (charsArray [i] != '\t') )             {                 strB.append(charsArray [i]);             }         }         System.out.println(strB);               } }   На экране получим: МыготовимсякинтервьюнавакансиюJavaразработчика   Q # 20) Напишите Java-программу для чтения данных из таблицы Excel. Ответ: Эти типы программ обычно используются в рамках Selenium framework. Мы добавили подробные комментарии для каждого шага, чтобы сделать программу более понятной. Логика начинается с того момента, как мы загрузили лист, на котором хранятся данные. Мы пытаемся импортировать электронную почту и пароль. Для этого мы извлекаем ячейку с помощью методов getRow() и getCell(). Допустим, у нас есть электронная почта и пароли в 1-й и 2-й ячейке. Далее мы устанавливаем тип ячейки - строковой. После этого мы выполняем обычную операцию локатора веб-элемента (By.id), куда мы передали уникальные значения локатора, такие как «email» и «пароль», которые будут идентифицировать эти элементы. Наконец, мы отправляем ключи, используя element.sendKeys, где cell.getStringCellValue() - это ключ. Эта операция вернет вам значение, сохраненное в ячейках № 1 и 2 соответственно.     @Test    public void ReadData() throws IOException  {          // импортируйте лист Excel из директории web диска c.          //QurentSourceFile – это имя нужного файла excel          File sourceFile=new File("C:\\web\\QurentSourceFile.xls");           // На этом шаге мы загружаем файл. Мы используем FileInputStream для чтения из // файла excel. В случае если вы хотите проводить запись в файл - // вам следует использовать FileOutputStream. Путь к файлу передается в качестве // аргумента FileInputStream          FileInputStream fileInput = new FileInputStream(sourceFile);                    // На этом шаге мы загружаем рабочую книгу excel с помощью HSSFWorkbook,          // в который мы передаем fileInput в качестве аргумента         HSSFWorkbook book = new HSSFWorkbook(fileInput);                    // На этом шаге мы загружаем конкретный лист excel, на котором хранятся данные.                   qurentSheet= book.getSheetAt(0);                    for(int i=1; i<= qurentSheet.getLastRowNum(); i++)          {                 // Import data for Email.                 qurentCell = qurentSheet.getRow(i).getCell(1);                 qurentCell.setCellType(Cell.CELL_TYPE_STRING);                  driver.findElement(By.id("email")).sendKeys(qurenrCell.getStringCellValue());                                  // Импортируем данные из ячеек с паролями.                 qurentCell = qurentSheet.getRow(i).getCell(2);                 qurentCell.setCellType(Cell.CELL_TYPE_STRING);                 driver.findElement(By.id("password")).sendKeys(qurenrCell.getStringCellValue());                                       }   }   Резюме В этой статье мы рассмотрели наиболее распространенные тестовые задания для Java разработчиков с примерами кода. Эти задачи применяются на большинстве технических интервью Java-разработчиков. Мы рассмотрели такие приемы работы с данными с помощью Java, как базовые манипуляции со строками, целыми числами и символами, использование Selenium, чтение данных из файла. Теперь у вас есть достаточно информации о том, как проходить технический этап интервью на вакансию Java разработчика. Конечно, вам нужны будут и другие навыки. Изучение наизусть решений 20 задач не может быть главным способом подготовиться к интервью. Вам следует иметь хороший набор теоретических знаний и практических навыков. С нашей стороны портал ITVDN.com готов предложить программу подготовки Java разработчика, включающую в себя видео курсы как по Java, так и по сопутствующим технологиям.  Также рекомендуем вам ознакомиться с серией видео «Подготовка к собеседованию в IT компании. Вопросы и ответы. Хитрости. Трюки.» По материалам статьи. 
Что такое адаптивная верстка и зачем она нужна

Автор: Редакция ITVDN

Что такое адаптивная верстка? Преимущества мобильного адаптивного дизайна Почему адаптивный дизайн важен для бизнеса Как создать адаптивный дизайн Плавающая Сетка (Fluid Grid) Гибкий текст и изображения Медиа-запросы Пользовательское тестирование адаптивных сайтов Браузерное и устройство-зависимое тестирование на адаптивный дизайн Вдохновение от других адаптивных сайтов Будущее адаптивного дизайна для мобильных устройств Является ли ваш сайт Mobile-Friendly? Подводя итоги От редакции ITVDN Еще в 2015 году Google внедрил изменения в алгоритмы своей поисковой системы, которые теперь учитывают адаптированность сайта под мобильные устройства как важный пункт при ранжировании сайта. Дата была удачно названа Мобилгеддон (Mobilegeddon), как сравнение с Армагеддоном. Одно только такое введение требований от поисковиков к наличию мобильной версии сайта может оправдать важность адаптивного дизайна. Проще говоря, веб-сайт должен быть удобным для просмотра на смартфоне. Требования к адаптивной верстке включают в себя такие элементы дизайна, как: читаемый текст без необходимости его увеличения; достаточное количество места для целей касания (tap targets); отсутствие горизонтальной прокрутки. На сегодня уже почти 4 миллиарда пользователей используют смартфоны для серфинга в Интернете. Веб-сайты, не оптимизированные для всех небольших экранов смартфонов, имеют рейтинг в поисковых системах ниже тех, что выполнены адаптивно. Более 50% поисковых запросов в Интернете теперь происходит с мобильного устройства. Чтобы ваш веб-сайт мог работать с карманными устройствами (не создавая отдельное приложение), вам для начала стоит признать – адаптивная вёрстка важна для пользователей смартфонов. Давайте рассмотрим более детально, почему и как это происходит. Прежде всего ... а что такое адаптивная верстка и мобильный дизайн, и почему вы вообще должны о них заботиться?   Что такое адаптивная верстка? Адаптивный веб-дизайн (RWD - Responsive web design) создает систему, позволяющую одному сайту (с одним URL-адресом и одним источником контента) реагировать и адаптироваться к размерам устройства пользователя. Адаптивный веб-сайт создан с использованием верстки с гибким макетом, который подстраивается под размеры экрана устройства. По-сути, благодаря адаптивной верстке, ваш веб-сайт будет отлично выглядеть и хорошо работать как на настольном компьютере (или ноутбуке), так и на планшете, и в браузере мобильного телефона. В прошлом разработчики создавали более одного сайта, для соответствия страниц экранам разных размеров. С учетом того, что на рынке сегодня представлено много типов устройств, это кажется совершенно неэффективным… верно? Сам термин «адаптивная верстка» был фактически придуман в 2010 году веб-дизайнером Итаном Маркоттом. Сегодня адаптивная верстка в веб-дизайне уже не новая тенденция, а скорее проверенный временем способ мышления, стоящий за созданием сайтов. На сегодня наличие адаптивного веб-сайта больше не является еще одной возможностью для развития вашей инфраструктуры — это уже необходимость! Преимущества мобильного адаптивного дизайна Преимущество адаптивного макета номер один— это получение гарантии того, что любой пользователь на любом устройстве будет иметь наилучшие возможности взаимодействия с контентом на вашем сайте. Адаптивная верстка веб-сайта также является отличным способом улучшить контент на вашем сайте. Вы сможете убедиться, что те, кто использует мобильное устройство, видят всю важную информацию. Благодаря особенностям алгоритма Google, адаптивный веб-дизайн повышает видимость сайта в поисковых системах, поскольку он удобен для просмотра на мобильных устройствах. Сайт с качественным представлением контента на мобильном устройстве будет находиться в результатах поиска выше, чем сайт, хорошо отображающий контент только на десктопах.   Почему адаптивный дизайн важен для бизнеса Расширяется охват клиентов благодаря захвату пользователей небольших устройств (планшетов и смартфонов); Постоянный опыт работы с широкой аудиторией, который может увеличить количество потенциальных клиентов, продажи и конверсии; Аналитика, отслеживание и отчетность по версиям сайтов для десктопов и мобильных устройств могут быть в одном месте; Затраты времени и стоимость управления контентом снижается; Более 60 % запросов в Google на конец первого квартала 2019 делаются с мобильных устройств. Обратите внимание, что есть еще два способа, с помощью которых можно обеспечить взаимодействие пользователя с сайтом через мобильные приложения. Первый называется динамическим показом (Dynamic Serving), в котором используется один и тот же URL-адрес, но разные коды HTML и CSS. Страницы распознают устройство, на котором они просматриваются, и предоставляют соответствующий код. Второй способ — это вообще отдельный мобильный сайт. Когда пользователи посещают сайт с мобильного устройства, они отправляются на другой - мобильный URL-адрес. Вам следует выяснить, какой вариант лучше всего подходит для вашего присутствия в Интернете, прежде чем остановиться на одном. Учтите, что на Google ежедневно приходится более 5,6 миллиардов поисковых запросов. Рекомендуемая Google конфигурация для сайтов, оптимизированных для смартфонов, - это сайты с адаптивным веб-дизайном. Google даже предлагает тест на адаптивность сайта под мобильные устройства, чтобы вы могли увидеть, насколько легко посетитель может использовать вашу страницу на мобильном устройстве. Вы просто вводите URL страницы и получаете оценку. Как создать адаптивный дизайн Как сделать адаптивную верстку? Есть несколько моментов, о которых стоит подумать при создании адаптивного макета. Это процесс, который требует определенной системы проектирования и иерархии контента среди различных устройств. Три основных компонента адаптивного веб-дизайна включают в себя: Гибкая (плавающая) сетка - fluid grid; Гибкий текст и изображения; Медиа-запросы. Рассмотрим каждый из этих элементов детальнее.   Плавающая Сетка (Fluid Grid) Сетка является ключевым элементом для создания адаптивного макета. На сегодня сетки уже не являются чем-то новым. Веб-дизайнеры использовали сетки для создания веб-сайтов с самого начала. Однако в прошлом эти сетки имели фиксированную ширину и не позволяли поддерживать плавную компоновку. Гибкая сетка, используемая для адаптивных веб-сайтов, обеспечит вам гибкость и масштабируемость дизайна. Элементы будут иметь постоянный интервал, пропорции и смогут настраиваться на определенную ширину экрана в процентах. Гибкий текст и изображения Способ отображения текста зависит от того, на каком устройстве пользователь просматривает ваш сайт. Однако текст должен оставаться читаемым, несмотря ни на что. На адаптивных веб-сайтах есть возможность увеличить размер шрифта и высоту строки (расстояние между каждой строкой текста) для удобочитаемости. Гибкий текст и изображения настраиваются в пределах ширины макета, в соответствии с иерархией содержимого, заданной с помощью CSS (таблицы стилей). Текст на сайте с адаптивной версткой теперь может быть разборчивым независимо от устройства конечного пользователя. Благодаря гибкому контейнеру (внутри сетки) текст может переноситься с увеличением размера шрифта на небольших устройствах. Гибкие изображения могут оказаться более сложными из-за времени загрузки в небольших браузерах устройств. Но эти изображения могут масштабироваться, обрезаться или исчезать в зависимости от того, какой контент необходим для мобильных устройств. Медиа-запросы Медиа-запросы - это код, который обеспечивает гибкость макета на адаптивных веб-сайтах. Медиа-запросы определяют код CSS, который будет применен соответственно, в зависимости от размеров и ориентации устройства (например, книжная ориентация iPhone или альбомная ориентация iPad и т. д.). Медиа-запросы допускают существование несколько макетов дизайна, которые будут использовать одну и ту же HTML-кодированную веб-страницу. Все три указанных элемента являются основой адаптивной верстки. Однако есть и другие важные средства, которые могут помочь определить акценты и усовершенствовать адаптивный веб-дизайн ваших сайтов для мобильных устройств. Обратите внимание на: Пользовательское тестирование адаптивных сайтов Информация о том, как пользователи взаимодействуют с вашим сайтом, - бесценна и точно стоит того, чтобы заплатить за ее получение. Существует множество способов провести пользовательское тестирование, чтобы получить максимально полезную обратную связь. Такие сайты, как UserTesting.com, предоставляют пользователям тестирование за небольшую плату или бесплатно. Различные методы, такие как тестирование in-the-wild и карточная сортировка (Card Sorting), также могут помочь обнаружить неожиданные болевые точки и слабые места в использовании вашего продукта.   Браузерное и устройство-зависимое тестирование на адаптивный дизайн Убедитесь, что ваш адаптивный дизайн и верстка совместимы со всеми соответствующими браузерами и сохраняет целостность вашего пользовательского опыта и дизайна. Не полагайтесь только на изменение размеров окна браузера при тестировании адаптивного веб-дизайна для мобильных устройств. Попробуйте просмотреть сайт на как можно большем количестве физических устройств. Вы будете удивлены тем, что можно обнаружить при переходе от одной операционной системы к другой, от одного устройства – к другому.   Вдохновение от других адаптивных сайтов Точно также, как и выполняя любой другой дизайн-проект, обратитесь к опыту других людей. Найдите другие адаптивные веб-сайты, которые творчески обыгрывают концепцию адаптивного веб-дизайн. Задумайтесь над следующими вопросами: Какие веб-сайты или приложения вы часто используете на своем мобильном телефоне или других портативных устройствах? Почему вы предпочитаете один сайт другим, которые могут предоставлять аналогичные услуги? Предпочитаете ли вы использовать их на смартфоне или на настольном компьютере? Поиск ответов на эти вопросы может помочь вам найти слабые места, которые вы, возможно, никогда не замечали, во время ежедневного использования своего вебсайта. Будущее адаптивного дизайна для мобильных устройств Мы знаем, что Google требует следующих оптимизированных элементов для эффективного взаимодействия с пользователями мобильных интерфейсов, используя адаптивный веб-дизайн: Текст, с читаемым размером без необходимости его принудительного увеличения; Контент, который умещается на экране устройства, без необходимости горизонтальной прокрутки; Ссылки и кнопки, расположенные на достаточном расстоянии друг от друга, чтобы не было затруднений в работе с интерфейсом; Разумное время загрузки страниц; Не используйте Flash! Эти правила адаптивной верстки очень важно соблюдать. Рост числа мобильных устройств — это только начало перехода к более удобному использованию Интернета. Нужно быть уверенными, что пользователи могут просматривать ваш сайт в любом месте на любом устройстве, самые разнообразные мобильные носимые устройства становятся все более популярными. Важным моментом будет учитывать современные размеры гаджетов, чтобы понимать в вашей адаптивной верстке какие разрешения учитывать. К примеру, на 2019 год все еще лидирующим остается разрешение экранов - 360х640. Является ли ваш сайт Mobile-Friendly? Пройдите тест Google, чтобы узнать, насколько адаптирован ваш сайт для мобильных устройств. Ваш сайт получил зеленый свет? Отлично, значит вы прошли тест Google на адаптивность. Вы уже прочитали выше причины, почему адаптивный дизайн важен для пользователей вашего сайта. Вместо зеленого видите большие красные иксы? Значит вам следует начать предпринимать определенные шаги для оптимизации работы вашего сайта под пользователей мобильных устройств. Помните, что изменения в алгоритмах Google и требованиях к адаптивному дизайну в настоящее время мало учитывают планшеты, но, если вы сделаете ваш сайт полностью адаптивным - вы будете впереди тех конкурентов, которые этого еще не сделали!   Подводя итоги Согласно требованиям сегодняшнего времени, ваш веб-сайт должен отлично выглядеть и хорошо работать как на настольном компьютере, так и на планшете, и в браузере смартфона. Адаптивный веб-дизайн может помочь вам достичь этого. В этой статье мы ответили на общий вопрос «что такое адаптивный дизайн?». Есть три компонента адаптивного веб-дизайна: плавающая сетка, гибкий текст и изображения и медиазапросы. Помните о важности адаптивного веб-дизайна для вашего бизнеса.  Выполнение вашего сайта по всем правилам адаптивной верстки поможет вам: Увеличить охват потребителей на всех устройствах; Поддерживать постоянный качественный пользовательский опыт, который увеличивает удержание аудитории на сайте; Консолидировать данные аналитики, отслеживания и отчетности; Сократить время и стоимость управления контентом; Конкурировать в своей отрасли с другими брендами. Google привлекает к коммерческим сайтам более 85% трафика мобильного поиска и рекомендует применять на ваших сайтах адаптивный дизайн. Поскольку адаптивный веб-дизайн удобен для мобильных устройств, он помогает улучшить видимость в поисковых системах, что, в свою очередь, может увеличить количество посетителей вашего сайта. Увеличение трафика приводит к лучшей генерации потенциальных клиентов, дополнительным конверсиям и увеличению продаж - три основные причины, по которым вам нужен адаптивный веб-дизайн!   От редакции ITVDN Мы с вами рассмотрели необходимость адаптивной верстки для каждого современного сайта. Такой подход является конкурентным преимуществом для компании из любой сферы бизнеса. Если говорить о разработчике, то навыки создания адаптивных web-сайтов будут существенным конкурентным преимуществом при поиске работы. Специальные знания и навыки вы можете получить, обучаясь по видео курсам ITVDN. В первую очередь это курсы: HTML5&CSS3 Advanced Практический курс по верстке лендинга Создание адаптивного сайта с Bootstrap 3 Также вам могут быть интересны другие курсы и технологии, которые входят в программу обучения по специальностям Верстальщик сайтов и FrontEnd разработчик. По материалам статьи за авторством Сони Грегори.
Обзор конструкторов сайтов – критерии выбора и преимущества использования

Автор: Редакция ITVDN

WIX uKit Tilda Weebly Nethouse Какой конструктор подойдет для создания сайта? Конструкторы сайтов представляют собой сервис по самостоятельной разработке интернет страниц. В отличие от CMS они просты в управлении, а также открывают множество возможностей настройки и опций, востребованных в современном онлайн мире. Существенным преимуществом конструкторов является то, что создать сайт с помощью этих сервисов можно, не обладая навыками программирования и знанием кода. Кроме этого, большинство современных конструкторов позволяет использовать их бесплатно, немного ограничивая возможности пользователя. Покупка платных пакетов услуг поможет избавиться от неудобств бесплатного аккаунта и сделать сайт еще более актуальным и удобным для посетителя. WIX Конструктор WIX – это международная платформа для создания современных сайтов любого направления. Для новичков система предложит задействовать искусственный интеллект, который поможет максимально адаптировать страницу под тематику и задачи проекта. Более опытные пользователи смогут всецело оценить возможности визуального редактора (drag & drop editor) и различные функциональные опции конструктора позволяющие значительно увеличить возможности сайтов. Ключевые преимущества сервиса: Большой объем опций в бесплатной версии сайта, Креативные шаблоны для конструирования стильных страниц, Широкий выбор дизайнерских решений под разные виды деятельности, Возможность создания одностраничников, многостраничных сайтов, порталов, блогов, страниц-портфолио, интернет магазинов и т.д., Фирменный магазин приложений, расширяющий возможности оплаты, онлайн консультаций, оптимизации и прочего. Для полноценного коммерческого проекта целесообразно купить платный пакет, выбрав среди 4 предложенных вариантов. В этом случае пользователь получит возможность подключать собственный домен, дополнительное пространство для размещения контента, сможет интегрировать сервисы аналитики поисковых систем. Перед тем как начинать работу с WIX, обратите внимание на следующие моменты: Визуальный редактор конструктора требует опыта в оформлении сайтов, Административная панель достаточно сложная и насыщенная функциями, Стоимость пакетов платного доступа относительно высокая.   uKit Конструктор uKit ориентирован на коммерческие сайты, здесь даже новичок сможет без труда сконструировать бизнес страницу. В течение 15 дней пользователь имеет возможность протестировать сервис, по окончании пробного периода понадобится внести оплату, иначе сайт будет снят с публикации. Те, кто примет решение пользоваться сервисом, получат следующие преимущества: Удобная административная панель для работы с сайтом, Обширные SEO настройки для оптимизации страниц, Адаптивный формат ресурса, который корректно отображается на всех типах устройств.   Сервис направлен в первую очередь на бизнес клиентов, этим объясняется его коммерческая направленность – бесплатная версия конструктора отсутствует. Конструктор предлагает 4 тарифных плана, среди которых можно выбрать вариант, подходящий по наполнению. Для удобства пользователей представлена услуга «Сайт под ключ», которая предполагает изготовление страниц специалистами uKit.   Пользователи отмечают ряд недостатков, присущих этому конструктору: Достаточно дорогие пакеты услуг, Небольшой выбор шаблонов, Сложности в уникализации страниц, придании им индивидуального дизайна.     Tilda Tilda – это модульный конструктор со множеством эффектов, актуальных для стильных сайтов. Модули уже созданы специалистами, пользователь лишь расставляет их согласно задачам будущего сайта.   Конструктор позволяет создавать современные и функциональные сайты, однако, сам сервис в большей степени рассчитан на конструирование продающих страниц. Пользователю доступно около 400 блоков для уникализации своего сайта. Присутствует возможность создавать небольшую онлайн витрину с товарами.   Преимущества конструктора Tilda: Профессиональные качественные элементы конструктора для сборки страниц, Возможность создавать несколько сайтов на одном аккаунте, Современный дизайн и функциональность готового продукта, Интеграция с сервисами аналитики, CRM, социальными сетями, Встроенные инструменты для работы с онлайн витриной.   Доступно два платных пакета и один бесплатный. Последний имеет множество ограничений, поэтому покупка расширенного пакета опций необходима для нормального функционирования проекта.   Пользователи конструктора сталкиваются с неудобствами, связанными с использованием сайта на этой платформе: Высокая стоимость предоплаченных пакетов услуг, Однотипность шаблонов, которые выдают происхождение сайта, Сложности в освоении административной панели для начинающих создателей веб-страниц. Weebly Этот сервис позволяет создавать полноценные интернет магазины с информативными карточками товаров, онлайн оплатой, корзиной, фильтрами товаров и т.д. Среди ассортимента шаблонов легко ориентироваться, благодаря фильтрации по цветам и стилям. Выбранный шаблон можно в любой момент поменять на более подходящий.   Преимущества конструктора Weebly: Есть возможность добавить разработанный дизайн в виде кода, Удобная и интуитивная панель управления сайтом, Количество и качество предлагаемых шаблонов, Есть бесплатная версия работы с конструктором с ограниченным функционалом.   Weebly предоставляет возможность управлять сайтом с помощью смартфона или планшета – в магазине приложений можно установить официальную программу. Важно взвесить и особенности сервиса, оцените, насколько для вас критично: Высокая цена за пакет для запуска интернет магазина, стоимость использования конструктора достигает 300 долларов в год, Отсутствие интеграции с социальными сетями ВКонтакте и Одноклассники, Комиссия в 3% за онлайн платежи с сайта. Nethouse Конструктор Nethouse позволяет создавать любые форматы современных сайтов от одностраничников до полноценных интернет магазинов.   Платформа ориентирована на простоту настройки сайта, однако, не имеет большого количества предустановленных шаблонов. Существует 5 групп для разделения дизайнерских решений по направленности сайта: Профессиональный, Лендинг, Универсальный, Визитка, Презентационный.   Редактирование дизайна производится установкой и перестановкой функциональных блоков страницы. Можно задать фон и цветовую гамму страниц, изменить их структуру, в остальном шаблон статичен.   Преимущества конструктора Nethouse: Качество и актуальность шаблонов, Возможность добавления виджетов, Гибкие настройки оптимизации страниц, Возможность заказать продвижение специалистами компании.   Бесплатная версия конструктора позволяет интегрировать SSL сертификат и открывает неограниченный хостинг. Платные пакеты снимают ограничения бесплатного сервиса и позволяют добавить необходимый функционал для решения задач.   Пользователи ресурса иногда выделяют следующие моменты при работе с конструктором: Недостаточный выбор шаблонов и ограничения в кастомизации, Перегруженная панель управления сайтом, Небольшое количество функциональных приложений. Какой конструктор подойдет для создания сайта? Выбрать оптимальный конструктор будет легко, исходя из задач, которые стоят перед разработчиком, типа разрабатываемого сайта, бюджета на реализацию проекта, навыков в создании сайтов, опыта использования того или иного конструктора и личных предпочтений в интерфейсе сервиса. Мы рассмотрели лишь некоторые из популярных конструкторов сайтов – но в действительности их намного больше. Проверьте этот обзор, если желаете протестировать больше конструкторов сайтов.
ТОП-7 популярных IDE для программирования на С++

Автор: Армен Маилян

Visual Studio Qt Creator CLion Eclipse Xcode Code::Blocks NetBeans Отличия между IDE и текстовым редактором Рейтинг IDE для С++ по данным Standard C++ Foundation Рейтинг IDE среди пользователей reddit Рейтинг IDE для C++ от компании JetBrains Рейтинг лучших сред разработки для C / C++ IDE от G2 Crowd Вывод В работе любого современного разработчика программного обеспечения существуют инструменты, ставшие практически обязательными для каждодневного применения. Если говорить о программировании на языке C++, таким инструментом, в первую очередь, будет конечно интегрированная среда разработки или IDE (Integrated Development Environment). Конечно, опытный программист может обойтись и без использования IDE, но это существенно скажется на таких моментах как скорость разработки, качество кода и, конечно же, на удобстве самого процесса написания этого кода.   Сегодня мы рассмотрим ТОП-7 лучших сред программирования на C++. Это наиболее часто применяемые инструменты от разных компаний и сообществ.   Отличия между IDE и текстовым редактором Для начала напомним разницу между текстовым редактором, применяемым для написания программ и полноценной IDE. Если упростить, текстовый редактор – это программа, с помощью которой разработчик взаимодействует непосредственно с кодом как текстом. Используя клавиатуру, с помощью текстового редактора разработчик вводит символы и ключевые слова языка программирования, описывая этими словами некий алгоритм, понятный в дальнейшем компьютеру. Код, написанный на C++ с помощью текстового редактора кода, нужно будет в дальнейшем отправить на компилирование в другую программу – компилятор, который не входит в состав текстового редактора. Интегрированная среда разработки, в свою очередь, это некий комплекс отдельных инструментов разработчика, позволяющий не только написать код программы, но и скомпилировать этот код в готовое приложение, провести тестирование этой программы, поиск ошибок, рефакторинг и другие действия. В состав современных IDE, как отдельные элементы уже входят: текстовый редактор; компилятор (или интерпретатор – для интерпретируемых языков программирования); отладчик; система управления версиями; другие инструменты. Современные IDE могут существенно расширять свой функционал благодаря различным плагинам. Стоит отметить, что некоторые текстовые редакторы (например Vim, Visual Studio Code, Emacs), благодаря доступным плагинам, также расширяют свой функционал, доводя его до практически IDEшных возможностей. Однако, это все же два разных инструмента разработчика. Текстовый редактор предназначен скорее для внесения мелких изменений в код отдельных файлов будущей программы. IDE, в свою очередь, работает с программой комплексно, рассматривая ее в целом как «проект» или набор «проектов», а не как отдельные текстовые файлы с кодом. Отсюда и разница в доступных возможностях этих инструментов.   Рейтинг IDE для С++ по данным Standard C++ Foundation Познакомимся с данным опроса, проведенного среди 3240 разработчиков в феврале 2018 организацией Standard C++ Foundation (Некоммерческая организация с Бьёрном Страуструпом в качестве одного из руководителей. Целью организации является поддержка сообщества разработчиков программного обеспечения C ++). По данным этого опроса, разработчики на C++ выделили такие средства разработки, как наиболее часто используемые: Первое место среди IDE у Visual Studio с 55.28% использующих его разработчиков, второе у Qt Creator - 24.41% разработчиков, третье место у CLion - 14.66%, четвертое место занимает Eclipse - 12.78% разработчиков, пятое место у XCode - 12.22% разработчиков, шестое место у Android Studio – 5.15%, седьмое у Code::Blocks – 4.85%.   Как мы видим многие разработчики для работы используют текстовые редакторы с различными расширениями функций или без них. В число таких входят: Vim - 37.93% разработчиков, Visual Studio Code - 25.77% разработчиков, Emacs (технически, это текстовый редактор с расширениями функционала до IDE) - 13.55%, Sublime - 12.78%.   Рейтинг IDE среди пользователей reddit По результатам опроса, проведенного среди 1860 участников в конце февраля 2018 года в сообществе r/cpp на портале reddit.com, первое место также занимает Visual Studio – 28.43%:   Среди представителей IDE в число наиболее часто используемых также вошли: Qt Creator – 11.64%, CLion – 8.91%, Xcode – 4.05%, Eclipse – 3.98%, Code::Blocks – 2.43%.   Рейтинг IDE для C++ от компании JetBrains Компания JetBrains, одна из ведущих компаний - создателей инструментов для разработчиков (в частности создатель и владелец одного из ведущих IDE для C++  - CLion), представила в 2018 году свою статистику наиболее часто используемых интегрированных сред программирования С++. По данным этой статистики, первое место среди различных сред разработки для C++ также получает Visual Studio, используемая 32% программистов. Следующие места в этом рейтинге интегрированных сред разработки распределились таким образом: второе место у CLion – 11%, третье место у Xcode – 5%, четвертое место у Eclipse – 5%, пятое место у QtCreator – 4%, шестое место у Atom – 3%, седьмое место у NetBeans – 3%.   Также полезной будет статистика от той же компании JetBrains, показывающая наиболее часто применяемые в разработке компиляторы: Рейтинг лучших сред разработки для C / C++ IDE от G2 Crowd Интересные данные предоставляет аналитическая платформа G2 Crowd. Проанализировав частоту использования разработчиками различных сред разработки на C / C++ и степень удовлетворенности этими инструментами, компания представила такую инфографику: Из этой схемы мы все еще наблюдаем лидирование Visual Studio, среди других сред разработки для C++. Достаточно нишевыми продуктами оказываются CodeLite и Code::Blocks. Мы рассмотрели несколько открытых рейтингов лучших сред программирования C++. Используя указанные данные, мы сделали свой рейтинг лучших сред разработки.   1) Visual Studio Visual Studio занимает первое место в нашем рейтинге. Это широко известная полнофункциональная среда разработки от компании Microsoft, которая позволяет работать с такими платформами, как Windows, Интернет, облако и Android. Возможности IDE Visual Studio позволяют правильно и эффективно писать код, реорганизовывать, анализировать и исправлять проблемы с кодом. Система IntelliSense предсказывает API-интерфейсы по мере их написания и выполняет автоматическое завершение для повышения скорости и эффективности разработки. Именно эта IDE позволяет новичку легче всего войти в процесс разработки. Официальный сайт - https://visualstudio.microsoft.com/ru/ Особенности Visual Studio: Свой компилятор – MSVC. Существуют версии, работающие на macOS и Windows. Поддерживает такие языки: ASP.NET, Ajax, DHTML, Visual C++, JavaScript, JScript, Visual Basic, Visual C#, Visual F#, XAML и др.   Плюсы IDE Visual Studio: Бесплатно распространяется Visual Studio Community, с достаточным набором возможностей. Платные версии могут предоставляться учебным заведениям и студентам бесплатно. Удобная система умного автодополнения. Большое количество настроек среды разработки под «себя», благодаря встроенным механизмам и доступным дополнениям.   Минусы IDE Visual Studio: Версии Visual Studio Professional и Visual Studio Enterprise являются платными. Тяжеловесная IDE, достаточно требовательная к железу. Ряд разработчиков считают ее избыточной для создания мелких проектов. Достаточно маленькая скорость запуска проектов и приложений. Не работает на Linux. Платные версии с расширенным функционалом распространяются по подписке: Professional – от 45$ в месяц, Enterprise – от 250$ в месяц.   2) Qt Creator QT Creator - еще одна достаточно удобная и быстрая интегрированная среда разработки C++, предлагающая интересные возможности для разработчика. Эта кроссплатформенная IDE имеет современный редактор кода C++, встроенный удобный графический интерфейс, дизайнер форм, инструменты навигации и многое другое. Среди разработчиков многие выбирают его за его API и библиотеки, поскольку они последовательны, подробны, удобны и хорошо документированы.   QT Creator поставляется с полным набором инструментов разработчика, которые предназначены для одновременного создания приложений и пользовательских интерфейсов, а затем для дальнейшего их развертывания в различных мобильных ОС и настольных ПК. Часто отмечают простоту и отзывчивость интерфейса. В себя он включает удобный редактор кода с возможностью подсветки синтаксиса и автозаполнением, возможность создания интерфейса пользователя используя перетаскивания, инструмент визуальной отладки и др. Официальный сайт: https://www.qt.io Особенности IDE QT Creator: Доступны версии под Linux, macOS, Windows. Поддерживаемые компиляторы: GCC / G++; MinGW; Linux ICC; Clang; Nim; QCC; MSVC. Доступны расширения, позволяющие работать с такими языками как Python, Ruby, Java, PHP и другими. Плюсы IDE QT Creator: Наличие бесплатной версии. Интеллектуальная система подсказок. Возможность компиляции проектов для различных систем. Минусы IDE QT Creator: Платная версия от 459$ в месяц. Бесплатная версия имеет ряд ограничений.   3) CLion Clion - это мощная и кроссплатформенная IDE для C и C++ от компании JetBrains, которая включает в себя современные стандарты C ++, libc ++ и Boost. Эта IDE хорошо знает коды и упрощает рутину, позволяя сосредотачиваться на основных вещах разработки. Одной из его основных возможностей является рефакторинг, который позволяет вам переименовывать символы, сдвигать элементы вверх или вниз по ранжированию, изменять сигнатуру функции, а также гарантировать, что ее автоматический рефакторинг будет правильно генерировать необходимые изменения в коде.   Интегрированный отладчик анализирует и решает проблемы с помощью дружественного пользовательского интерфейса IDE с GDB / LLDB в качестве бэкэнда. Более того, он также удаленно связывается с нативными процессами или отладками. Официальный сайт IDE Clion - https://www.jetbrains.com/clion/ Особенности IDE Clion: Только платные версии IDE. Поддерживаемые языки C и C++. Доступны версии под Linux, Windows, macOS. Поддерживает такие компиляторы: GCC /G++; MinGW; MSVC. Плюсы IDE Clion: Удобные инструменты для разработки визуальных интерфейсов. Удобные механизмы отладки приложений. Возможности расширения функционала плагинами. Инструменты поиска ошибок в коде в потоковом режиме. Минусы IDE Clion: Отсутствует бесплатная версия этой IDE. Годовая подписка от 199$.   4) Eclipse IDE Eclipse, основанная на платформе Eclipse, является одной из ведущих IDE для разработчиков на C ++ и C. Eclipse предлагает поддержку разработки проектов и управляемую среду разработки с различными наборами инструментов. Он также поддерживает различные инструменты, сортировку, навигацию по гиперссылкам, редактор кода с функцией подсветки синтаксиса, инструменты визуальной отладки и многое другое. Это бесплатное ПО с открытым исходным кодом, работающее со всеми основными ОС, включая Windows, Mac OS X и Linux. Eclipse может похвастаться удобным интерфейсом. Особенности IDE Eclipse: Работает на таких ОС - Windows, macOS, Linux. Работает с такими языками - C, C++, Java, Perl, PHP, Python, Ruby и другие. Работает с такими компиляторами: GCC / G++; MinGW; Cygwin. Плюсы IDE Eclipse: Простота как установки, так и применения. Удобный механизм разработки графических интерфейсов. Инструмент с открытым исходным кодом. Распространяется бесплатно. Кроссплатформенность. Большое количество доступных модулей расширения – многие разработчики отмечают, что возможности модулей этой IDE значительно опережают таковые у других сред разработки. Минусы IDE Eclipse: Ряд разработчиков отмечают неудобство использования механизмов автодополнения при написании кода.   5) Xcode Xcode — это полноценная IDE, включающая комплект инструментов для разработки, созданная компанией Apple для написания ПО под macOS, iOS, WatchOS и tvOS. Xcode — считается лучшей IDE для Mac, будучи созданной разработчиками самой операционной системы. Официальный сайт IDE Xcode - https://developer.apple.com/xcode/ Особенности IDE Xcode: Работает с такими языками, как - AppleScript, C, C++, Java, Objective-C. Работает только на macOS. Использует Apple LLVM и GCC компиляторы. Плюсы IDE Xcode: Удобные инструменты для создания ПО под комплекс платформ Apple. Механизмы автодополнения кода. Удобные инструменты для работы с графическими интерфейсами. Минусы IDE Xcode: На ОС Windows и ОС Linux данная IDE не работает.   6) Code::Blocks Code::Blocks или CodeBlocks - это IDE с открытым исходным кодом, распространяемая бесплатно.  Code::Blocks написана на C++ с использованием wxWidgets в качестве инструментария GUI. Code::Blocks - это расширяемая и настраиваемая IDE, которая работает на таких платформах, как Windows, Linux и macOs. Различный функционал может быть добавлен ​​в эту IDE путем установки или написания плагина. Например, благодаря таким плагинам, доступны функции компиляции и отладки. Code::Blocks поддерживает добавление различных, как готовых, так и пользовательских плагинов. Разработчики могут легко настроить эту IDE под свои нужды, а также легко перемещаться по интерфейсу вкладок. Изначально IDE Code::Blocks был создан для работы с C ++, но теперь вы также можете запускать программы на C и Fortran. Официальный сайт IDE Code::Blocks - http://www.codeblocks.org/   Особенности Code::Blocks: Поддерживает работу с такими компиляторами: MingW / GNU GCC; MSVC++; Clang; Digital Mars; Borland C++ 5.5; Open Watcom. Полностью написан на C++; Работает на Linux, Mac и Windows; Поддерживает такие языки: C, C++, Fortran; Плюсы Code::Blocks: Встроенный отладчик. Кроссплатформенный. Поддержка параллельной сборки. Является открытым программным обеспечением. Полная поддержка точек останова. Интегрированная интеллектуальная подсветка синтаксиса. Достаточно отзывчивое сообщество. Возможность настройки IDE разработчиками под «себя».   Минусы Code::Blocks: Данная IDE плохо подходит для разработки больших проектов.   7) NetBeans NetBeans - это одна из часто используемых разработчиками интегрированный сред программирования C++. Спонсируемый компанией Oracle, проект IDE NetBeans был передан в 2016 году в руки фонда Apache.  На сегодня NetBeans поставляется с открытым исходным кодом. Написанная на Java, эта IDE имеет возможность работать на всех системах, которые поддерживают Java -  Windows, Linux, macOS и Solaris. NetBeans IDE выглядит как интерфейс с функцией перетаскивания, совместно со списком шаблонов проектов. Использовать NetBeans удобно для создания приложений C / C++ как с динамическими, так и со статическими библиотеками. Кроме того, он предоставляет большой набор инструментов для программистов на C / C++. NetBeans имеет множество плагинов, которые могут расширить возможности программного обеспечения. Официальный сайт NetBeans   - https://netbeans.apache.org Особенности IDE NetBeans: Находится под управлением Apache Software Foundation. Поддерживает такие языки - Java, HTML, HTML 5, C, C++ и другие. Работает на Windows, Linux, macOS и Solaris. Поддерживается работа с такими компиляторами: Oracle Solaris Studio; GCC/G++; CLang/LLVM; Cygwin; MinGW. Плюсы IDE NetBeans: Бесплатное распространение под лицензией свободного ПО. Удобный интуитивный инструмент построения графического интерфейса GUI Builder. Большое количество расширений. Кроссплатформенность. Интеллектуальное автозавершение кода. Большое сообщество. Минусы IDE NetBeans: Пользователи отмечают долгий запуск приложения. Ряд пользователей отмечают неудобство работы с дебаггером. Вывод Существует достаточно большое количество интегрированных сред разработки на C++. Для выбора IDE под разработку на C++, как и для любого другого инструмента разработчика, справедлив индивидуальный подход. Отталкиваясь от текущих задач, базовой ОС, используемых языков, необходимых плагинов, требований команды и других, сугубо индивидуальных факторов разработки, выбор вами лучшей среды программирования C++ будет различным. Мы рекомендуем выбирать среду разработки из нашего ТОП 7. Если же вы хотите конкретный совет для начинающего – под Windows попробуйте начать разрабатывать с Visual Studio в бесплатной версии Community. В качестве лучшей бесплатной среды разработки C++под Linux попробуйте Code::Blocks и NetBeans. Упоминая выбор лучшей платной среды разработки C++ для Linux и macOS, в свою очередь, мы рекомендуем попробовать триальную версию платной IDE – CLion.   В любом случае, если вы планируете разрабатывать на C++ в течение длительного времени, выбор главного инструмента вряд ли будет для вас окончательным. Пробуйте разные варианты и следите за новшествами и изменениями. Начинающим разработчикам на C++ мы рекомендуем ознакомиться с видео курсами ITVDN: C++ для начинающих. C++ Essential. C++ Advanced.
Обзор основных SQL запросов

Автор: Армен Маилян

Виды SQL запросов Типы SQL запросов по их видам Создание и настройка базы данных Примеры простых запросов SQL к базам данных SELECT INSERT UPDATE DELETE ​DROP Примеры сложных запросов к базе данных MS SQL Выводы Каждый сайт в Интернете, любой проект, обрабатывающий значительный объем информации, вынужден хранить эту информацию в тех или иных базах данных (БД). Подавляющее большинство проектов информацию сохраняют в БД реляционного типа, делая записи в различных подобиях таблиц. Как внесение новых записей, так и обращение к имеющимся, осуществляется с благодаря использованию запросов, составляемых конструкциями SQL (structured query language) – непроцедурного декларативного языка структурированных запросов. В нашем случае это подразумевает, что, используя конструкции SQL, мы будем обращаться к БД, сообщая что нужно сделать с данными, но не указывая способ, как именно это нужно сделать. Фактически, SQL является набором стандартов, для написания запросов к БД. Последняя действующая редакция стандартов языка SQL - ISO/IEC 9075:2016. Основываясь на указанных стандартах языка SQL, ряд организаций выпустили свои, расширенные версии стандартов указанного языка. Подобные версии иногда называют диалектами SQL. Варианты спецификаций SQL разрабатываются компаниями и сообществами и служат, соответственно, для работы с разными СУБД (Системами Управления Базами Данных) – системами программ, заточенных под работу с продуктами из своей инфраструктуры. Наиболее применяемые на сегодня СУБД, использующие свои стандарты (расширения) SQL: MySQL – СУБД, принадлежащая компании Oracle. PostgreSQL – свободная СУБД, поддерживаемая и развиваемая сообществом. Microsoft SQL Server – СУБД, принадлежащая компании Microsoft. Применяет диалект Transact-SQL (T-SQL). Благодаря тому, что диалекты SQL что создаются, специфицируются и используются разными организациями, имеют как общие черты, так и ряд отличий в возможностях расширений. Общими чертами диалектов являются основные конструкции, применимые практически без отличий во многих реляционных БД. Основные отличия диалектов состоят в различиях использованных типов данных, количеством, реализацией и детальными возможностями команд. Разные диалекты применяют как разные наборы зарезервированных слов, так и разные наборы команд. Здесь мы будем рассматривать запросы, применяя конструкции из спецификаций диалекта T-SQL. Коснемся классификации SQL запросов.   Выделяют такие виды SQL запросов: DDL (Data Definition Language) - язык определения данных. Задачей DDL запросов является создание БД и описание ее структуры. Запросами такого вида устанавливаются правила того, в каком виде различные данные будут размещаться в БД. DML (Data Manipulation Language) - язык манипулирования данными. В число запросов этого типа входят различные команды, используя которые непосредственно производятся некоторые манипуляции с данными. DML-запросы нужны для добавления изменений в уже внесенные данные, для получения данных из БД, для их сохранения, для обновления различных записей и для их удаления из БД. В число элементов DML-обращений входит основная часть SQL операторов. DCL (Data Control Language) - язык управления данными. Включает в себя запросы и команды, касающиеся разрешений, прав и других настроек СУБД. TCL (Transaction Control Language) - язык управления транзакциями. Конструкции такого типа применяют чтобы управлять изменениями, которые производятся с использованием DML запросов. Конструкции TCL позволяют нам производить объединение DML запросов в наборы транзакций. Основные типы SQL запросов по их видам: Ниже мы рассмотрим практические примеры применения SQL запросов для взаимодействия с БД используя запросы двух категорий – DDL и DML.   Создание и настройка базы данных Нам нужна будет для примеров БД MS SQL Server 2017 и MS SQL Server Management Studio 2017. Рассмотрим последовательность действий того, как создать SQL запрос. Воспользовавшись Management Studio, для начала создадим новый редактор скриптов. Чтобы это сделать, на стандартной панели инструментов выберем «Создать запрос». Или воспользуемся клавиатурной комбинацией Ctrl+N. Нажимая кнопку «Создать запрос» в Management Studio, мы открываем тестовый редактор, используя который можно производить написание SQL запросов, сохранять их и запускать. Используем для начала простые запросы SQL, благодаря которым можно создать и настроить новую БД, чтобы получить возможность в дальнейшем с ней работать. Создадим новую БД с именем «b_library» для библиотеки книг. Чтобы это делать наберем в редакторе такой SQL запрос: CREATE DATABASE b_library; Далее выделим введенный текст и нажмем F5 или кнопку «Выполнить». У нас создастся БД «b_library». Все дальнейшие манипуляции мы можем провести с этой созданной нами БД. Для этого сначала подключимся к этой базе: USE b_library; В БД «b_library» создадим таблицу авторов «tAuthors» с такими столбцами: AuthorId, AuthorFirstName, AuthorLastName, AuthorAge: CREATE TABLE tAuthors ( AuthorId             INT              IDENTITY (1, 1) NOT NULL, AuthorFirstName      NVARCHAR (20)    NOT NULL, AuthorLastName       NVARCHAR (20)    NOT NULL, AuthorAge            INT               NOT NULL  ); Заполним нашу таблицу таким авторами: Александр Пушкин, Сергей Есенин, Джек Лондон, Шота Руставели и Рабиндранат Тагор. Для этого используем такой SQL запрос: INSERT tAuthors VALUES ('Александр', 'Пушкин', '37'), ('Сергей', 'Есенин', '30'), ('Джек', 'Лондон', '40'), ('Шота', 'Руставели', '44'), ('Рабиндранат', 'Тагор', '80'); Мы можем посмотреть в «tAuthors» записи, путем отправления в СУБД простого SQL запроса: SELECT * FROM tAuthors; В нашей БД «b_library» мы создали первую таблицу «tAuthors», заполнили «tAuthors» авторами книг и теперь можем рассмотреть различные примеры SQL запросов, которыми мы сможем взаимодействовать с БД. Примеры простых запросов SQL к базам данных. Рассмотрим основные запросы SQL. SELECT 1) Выведем все имеющиеся у нас БД: SELECT name, database_id, create_date FROM sys.databases; 2) Выведем все таблицы в созданной нами ранее БД «b_library»: SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' 3) Выводим еще раз имеющиеся у нас записи по авторам книг из созданной выше «tAuthors»: SELECT * FROM tAuthors; 4) Выведем информацию о том, сколько у нас имеется записей строк в «tAuthors»: SELECT count(*) FROM tAuthors; 5) Выведем из «tAuthors» две записи, начиная с четвертой. Используя ключевое слово OFFSET, пропустим первые три записи, а благодаря использованию ключевого слова FETCH – обозначим выборку только следующих 2 строк (ONLY): SELECT * FROM tAuthors ORDER BY AuthorId OFFSET 3 ROWS     FETCH NEXT 2 ROWS ONLY; 6) Выведем из «tAuthors» все записи с сортировкой в алфавитном порядке по первой букве имени автора: SELECT * FROM tAuthors ORDER BY AuthorFirstName; 7) Выведем из «tAuthors» данные, предварительно по AuthorId отсортировав их по убыванию: SELECT * FROM tAuthors ORDER BY AuthorId DESC; 8) Выберем записи из «tAuthors», значение AuthorFirstName у которых соответствует имени «Александр»: SELECT * FROM tAuthors WHERE AuthorFirstName='Александр'; 9) Выберем из «tAuthors» записи, где имя автора AuthorFirstName начинается с «се»: SELECT * FROM tAuthors WHERE AuthorFirstName LIKE 'се%'; 10) Выберем из «tAuthors» записи, в которых имя автора (AuthorFirstName) заканчивается на «ат»: SELECT * FROM tAuthors WHERE AuthorFirstName LIKE '%ат' ORDER BY AuthorId; 11) Сделаем выборку всех строк из «tAuthors», значение AuthorId в которых равняется 2 или 4: SELECT * FROM tAuthors WHERE AuthorId IN (2,4); 12) Выберем в «tAuthors» такую запись AuthorAge, значение которой - наибольшее: SELECT max(AuthorAge) FROM tAuthors; 13) Проведем выборку из «tAuthors» по столбцам AuthorFirstName и AuthorLastName: SELECT AuthorFirstName, AuthorLastName FROM tAuthors; 14) Получим из «tAuthors» все строки, у которых AuthorId не равняется трем: SELECT AuthorId, AuthorFirstName, AuthorLastName  FROM tAuthors WHERE AuthorId!='3'; INSERT INSERT – это вид запроса SQL, при применении которого СУБД выполняет добавление новых записей в БД. Добавим в «tAuthors» нового автора – Уильяма Шекспира, 51 год. Соответственно в поле AuthorFirstName добавится Уильям, в AuthorLastName добавится Шекспир, в AuthorAge – 51. В AuthorId, в нашем случае, автоматически добавится значение, инкрементированное от предыдущего на 1. INSERT INTO tAuthors VALUES ('Уильям', 'Шекспир', '51'); Проверим: SELECT * FROM tAuthors; UPDATE UPDATE – SQL запрос, позволяющий внести изменения или дописывать новую информацию в те записи, которые уже существуют. Внесем корректировки в шестую запись (AuthorId = 6). Значения изменим для полей имени, фамилии и возраста автора. UPDATE tAuthors SET AuthorFirstName = 'Лев', AuthorLastName='Толстой', AuthorAge = '82' WHERE AuthorId = '6'; Затем, обратимся к БД, чтобы вывести все имеющиеся записи: SELECT * FROM tAuthors; Мы видим изменения информации в записи автора под номером 6. DELETE DELETE – SQL запрос, выполняя который в СУБД производится операция удаления определенной строки из таблицы в БД. Обратимся к «tAuthors» с командой на удаление строки, где AuthorId = 5: DELETE FROM tAuthors WHERE AuthorId = '5'; Чтобы увидеть изменения, снова обратимся к базе для вывода всех записей: SELECT * FROM tAuthors; Мы видим, что запись автора под номером 5 теперь отсутствует в «tAuthors» и, соответственно, не выводится с другими записями. DROP DROP – ключевое слово в SQL, применяемое для удаления данных с помощью запроса. К примеру удаление некоторой таблицы из БД. После рассмотрения ряда простых запросов к БД мы можем полностью удалить нашу таблицу «tAuthors» целиком, выполнив простой SQL запрос: DROP TABLE tAuthors;     Далее рассмотрим сложные запросы SQL. Примеры сложных запросов к базе данных MS SQL Сложные запросы SQL представляют из себя комбинации простых запросов. Выполняясь, простые запросы возвращают сгруппированные в промежуточные таблицы наборы данных. А сложный запрос уже манипулирует данными, полученными благодаря простым «подзапросам». Сложные запросы получаются следующими способами: Помещением одного запроса в другой. В этом случае внешнее выражение будет называться основным запросом, а вложенное выражение - подзапросом. Применение с SQL запросами различных операторов объединения результатов выполнения подзапросов. Такие операторы называют реляционными. Рассмотрим в SQL примеры сложных запросов. Воспользуемся нашей предыдущей таблицей «tAuthors» и создадим дополнительно еще одну таблицу с книгами этих авторов – «tBooks». В качестве идентификатора авторов книг используем значение AuthorId из «tAuthors», а название книги - BookTitle. CREATE TABLE tBooks ( BookId               INT              IDENTITY (1, 1) NOT NULL, BookTitle            NVARCHAR (20)    NOT NULL, Author               INT              NOT NULL ); Заполним «tBooks» такими книгами: INSERT tBooks VALUES ('Руслан и Людмила', '1'), ('Кавказский пленник', '1'), ('Евгений Онегин ', '1'), ('Радуница', '2'), ('Преображение', '2'), ('Мартин Иден', '3'), ('Морской волк', '3'), ('Белый Клык', '3');   1) Сделаем выборку из БД всех книг, у которых имя автора - «Александр»: SELECT BookId, BookTitle FROM tBooks WHERE Author = (SELECT AuthorId FROM tAuthors WHERE AuthorFirstName = 'Александр'); Получим: 2) Сделаем выборку данных из «tBooks» всех книг, авторами которых являются люди, с именами «Александр» или «Сергей»: SELECT BookTitle FROM tBooks WHERE Author = SOME(SELECT AuthorId FROM tAuthors  WHERE AuthorFirstName IN ('Александр', 'Сергей'));   3) Сделаем выборку по книгам из таблицы «tBooks», у которых именами авторов являются НЕ «Сергей» и НЕ «Александр»: SELECT * FROM tBooks WHERE Author != ALL(SELECT AuthorId FROM tAuthors WHERE AuthorFirstName IN ('Александр', 'Сергей')); 4) Возьмем таблицу «tBooks» и сделаем из нее выборку всех книг с указанием как имен, так и фамилий авторов этих книг из «tAuthors»: SELECT tBooks.BookId, tBooks.BookTitle, tAuthors.AuthorFirstName, tAuthors.AuthorLastName FROM tBooks JOIN tAuthors ON tAuthors.AuthorId = tBooks.Author; Выводы Мы с вами рассмотрели несколько вариантов простых и сложных SQL запросов. Конечно эту статью не стоит рассматривать ни как учебное пособие, ни как исчерпывающий перечень возможностей запросов в T-SQL, и других диалектах. Скорее ее можно считать примером SQL запросов для начинающих. Однако она может послужить для Вас отправной точкой. Существует намного большее количество различных SQL запросов. Это и запросы с циклическими конструкциями, и рекурсивные, и различная работа с переменными, и другие виды запросов и подзапросов. Если Вы хотите изучить этот очень важный специфический язык составления запросов к БД – вы можете пройти соответствующие курсы на нашем портале ITVDN.com, выбрав подходящий Вам диалект: Transact-SQL -  https://itvdn.com/ru/video/ssms_tsql SQL Essential -  https://itvdn.com/ru/video/sql-essential SQL Практикум - https://itvdn.com/ru/video/sql-workshop MySQL -               https://itvdn.com/ru/video/mysql-essential PostgreSQL -      https://itvdn.com/ru/video/postgresql
ТОП 6 популярных CMS

Автор: Армен Маилян

Тип сайта и его тематика Функциональность сайта На сегодняшний день более половины всех сайтов в сети Интернет используют ту или иную систему управления контентом (Content Management System – CMS). Однако термин CMS не получил, к сожалению, четкого определения. Он может иметь несколько значений в зависимости от сценариев и целей человека или проекта. Некоммерческая международная организация AIIM (Association for Information and Image Management - Ассоциация по вопросам Управления Информацией и Изображениями) ввела в обиход понятия ECM (Enterprise Content Management) и WCM (система управления веб-контентом) как две составных части CMS.  В этом случае под ECM подразумевается программный комплекс, обеспечивающий документооборот, работу внутренней базы знаний и организующий в общем виде набор бизнес-процессов предприятия. Как одну из функций ECM может включать в себя и работу с веб контентом. Хорошим примером такого типа систем является платформа Microsoft SharePoint. В свою очередь WCM стало включать в себя набор инструментов в некотором комплексе, позволяющем управлять веб-сайтом и контентом на нем. Часто также CMS также называют «движком» сайта. В обиходе у разработчиков устоявшимся значением, подразумеваемым под CMS, является некоторая программная система, применяемая для создания, редактирования и управления контентом сайта и устанавливаемая на свой хостинг. В дальнейшем, в этой статье мы примем за основу именно это - последнее определение, более похожее на WCM. Стоит отметить и часто включаемые в число CMS так называемые SaaS решения (software as a service – услуга доступа к программному обеспечению). В случае такого типа услуг компании не предоставляют код, который вы можете скачать, установить и настроить под себя на своём хостинге. Провайдеры услуги SaaS предлагают для клиентов свои платформы, со своим хостингом, своими индивидуальными возможностями без предоставления CMS в обиходном понимании. При такой схеме вы фактически оплачиваете не владение вашим сайтом, а его аренду. В нашей статье мы не будем рассматривать такой тип услуг.   Рассмотрим подходы, которых следует придерживаться, решая вопрос как выбрать движок для сайта.   Критерии выбора CMS для вашего сайта Тип сайта и его тематика Большой выбор различных систем управления контентом на рынке объясняется различиями в типах сайтов, для которых лучше всего конкретная CMS подойдет. Будет это форум или интернет магазин, блог или корпоративный сайт, сайт-визитка или новостной портал – определенность с тематикой сайта это первое, от чего будет зависеть правильный выбор CMS. Функциональность сайта Не смотря на определенную специализацию каждой CMS под определенные задачи, на сегодняшний день для ТОП CMS существует огромное количество различных расширений (плагинов, модулей), существенно увеличивающих их функциональность и возможности «донастройки». К примеру существующими плагинами можно превратить «блоговый» движок в интернет-магазин, а на движке портала сделать форум. Однако нужно понимать, что большое количество дополнительных плагинов будут влиять и на быстродействие, и на безопасность, и на внутреннюю слаженность работы механизмов сайта, из-за возможных конфликтов этих расширений. Также определенный набор проблем может доставить и необходимость регулярных обновлений как самого движка, так и установленных плагинов. Без таких обновлений у вас будут открываться дыры в безопасности, а это вряд ли вам понравится. А обновление большого числа расширений может вызвать конфликты совместимости. Поэтому правильный выбор CMS это баланс между нужной готовой функциональностью движка «из коробки» и количеством (и качеством) установленных расширений. Исходя из задач и потребности в балансе, сложно однозначно ответить на вопрос «какая CMS лучше?». Требовательность к ресурсам Правильный выбор тематики сайта приводит к необходимости выбора условной «мощности» движка. «Мощнее», в нашем случае, вовсе не обязательно значит – «лучше». Если вы нуждаетесь, к примеру, в сайте-визитке, установка движка портала для вас будет избыточной. Значительная часть ресурсов мощной CMS останется не задействованной. При этом требования к хостингу такого сайта будут выше – вам понадобится больше оперативной памяти, больше ресурсов процессора, могут понадобиться некоторые специфические настройки сервера и предустановленное программное обеспечение. Также стоит понимать, что, к примеру, сайты администрации для поселка и для города миллионника хоть и имеют общую тематику, но будут иметь разный дизайн, функциональность, наполнение, разную посещаемость и, соответственно, разные требования. Поэтому, при выборе вам следует исходить и из масштабов вашего будущего сайта. Неправильный выбор выльется либо в необоснованное удорожание и хостинга, и администрирования вашего сайта, либо в нехватку ресурсов. Возможность кастомизации движка Многим владельцам сайтов не хватает возможностей «голой» CMS. Кроме того, из-за специфики каждого конкретно бизнеса и каждого конкретного сайта, возможности расширения с помощью дополнительных плагинов тоже может быть недостаточно. Может потребоваться индивидуальная доработка движка, тем оформления или доработка под заказчика тех плагинов, функциональности которых не вам хватает. В этом вопросе нам очень важно будет понимать следующие моменты: Количество разработчиков на рынке – специалистов по конкретной CMS; Количество и качество документации к CMS и плагинам; Развитость сообщества пользователей и разработчиков конкретной CMS. Можно с уверенностью сказать, что чем более распространён движок – тем больше доступных специалистов, тем проще внести нужные правки и тем дешевле эти правки обойдутся. Стоит уделить внимание и особенностям SEO-оптимизации конкретного движка. Если вы хотите, чтобы аудитория вашего сайта росла, вам придется соответствовать ряду правил, касающихся и скорости работы сайта на различных типах устройств, и внешнего дизайна сайта вообще и конкретных страниц в частности, и внутренней иерархии страниц, и правильной настройки индексации и т.п. Возможность проведения SEO оптимизации вашего сайта сложно переоценить.  Наличие уже встроенных в CMS SEO инструментов или доступных качественных плагинов, а также возможность доработки их под ваши нюансы проекта привлеченными разработчиками, будут очень важны на этапе продвижения вашего сайта. Стоимость CMS и доработки. На рынке сегодня присутствуют как качественные бесплатные, так и значительное количество различных платных CMS. Кроме того, выбирая бесплатные CMS, вам вероятно захочется добавить в них платные расширения.  Выбирая между платными и бесплатными вариантами вам стоит заранее определиться с несколькими моментами: Представить себе (хотя бы приблизительно) стратегию развития вашего сайта. От понимания дальнейших перспектив будет зависеть комбинация доступных расширений и необходимость их доработок. Может так сложиться, что выбор бесплатной CMS, с учетом плагинов и доработок для получения нужного функционала, окажется существенно дороже, чем купить платную CMS и платный плагин, получив при этом техническую поддержку разработчиков этой CMS. Также может оказаться, что нужный для вас плагин под конкретную CMS нужно будет разрабатывать с нуля, тогда как под другую CMS такой плагин есть уже готовый, давно выпущенный и протестированный в реальной работе.   Распространенность CMS и ее востребованность Если выбранный вами движок сайта окажется непопулярным и его разработчики решат перестать выпускать обновления, вы столкнетесь с рядом проблем. Это и падение уровня безопасности системы, и ухудшение внешней привлекательности на фоне новых сайтов-конкурентов, использующих новые технологические решения. Также существенно сложнее будет найти специалиста для внесения доработок в движок, использующий уже устаревшие и непопулярные технологии. В свою очередь выход новейшей версии движка может быть связан с кучей багов системы, наличия новых дыр безопасности, несовместимости со старыми плагинами и другими сложностями. Самописные движки Наличие такого числа сложностей при выборе системы управления для своего сайта может вызвать у вас желание заказать или написать свой сайт с нуля. Действительно, ряд проектов прямо потребует от вас такого подхода. Подключение к своим специфическим сервисам, интеграция с другими уникальными проектами, гибкость в дизайнерских и архитектурных решениях – в определенных обстоятельствах написание своего движка будет правильным решением. Однако стоит сразу учитывать набор проблем, с которыми вам предстоит столкнуться: Подсадка «на иглу» одного разработчика. Полноценно разбираться в куче кода, с слабо или вовсе недокументированными возможностями, сможет только сам автор кода. Новому разработчику может оказаться проще переписывать модули вашего сайта с нуля, чем тратить время на разбор чужого кода. Это с одной стороны существенно удорожит работу, а с другой жестко привяжет вас к конкретному разработчику. Даже сменив одного программиста на другого, вы оказываетесь в той же ситуации, только теперь с новым разработчиком. Сроки и цена разработки. Написание нужных модулей «с нуля» будет стоить значительно дороже и займет значительно больше времени, чем адаптация уже существующего движка и плагинов с хорошей документацией от авторов. Проблемы тестирования и ошибок. В движках, которые используют каждый день миллионы человек, есть значительный плюс – большинство багов выявляются мгновенно и быстро перекрываются обновлениями. Наличие багов в вашей самописной системе будет зависеть как от навыков вашего разработчика, так и от применяемых им технологий. Эта комбинация может нести большое количество скрытых проблем как работоспособности, так и безопасности, которые останутся не выловленными, пока не станет слишком поздно. В результате разработка своего движка оказывается выгодна, практически, только крупным компаниям со своими внутренними отделами разработки и тестирования, которые будут писать свой сайт и поддерживать его работоспособность независимо от сторонних разработчиков. Статистика использования CMS   По данным сайта w3techs.com более 55% всех Web-сайтов в Интернете управляются теми или иными CMS. Как видно из диаграммы более 33% всех сайтов в Интернете работают на движке WordPress. Фактически это более 60% от сайтов, управляемых теми или иными CMS. Следующие по популярности системы CMS: Joomla – 5.4%, Drupal – 3.5%, Magento – 1.8%, PrestaShop – 1.4%. Набравшие в этой диаграмме высокие места Shopify (2.7%), Squarespace (2.7%) и Wix (1.8%) предлагают услуги SaaS (которые мы здесь не рассматриваем). По данным портала WhatСms первое место по числу сайтов среди популярных CMS также принадлежит WordPress - 52.74%. Затем идут Joomla - 5.219%, Drupal - 3.953%, Magento - 2.840%, PrestaShop - 1.671%. Blogger, как и несколько компаний в предыдущей диаграмме, является SaaS платформой. По данным портала BuiltWith первые три места среди не SaaS CMS занимают: WordPress - 28.27%, Joomla – 26.93%, Drupal – 8.84%. По данным портала SimilarTech, предлагающего свой ТОП движков для сайтов, среди 9,5 млн сайтов на CMS также лидирует WordPress, заняв 68% рынка CMS. Слетом идет Drupal (версии 6 и ниже) – 4%, Joomla – 3%, Drupal 7 – 1%, Typo3 – 1%. В число других CMS вошли как SaaS решения, так и другие полноценные CMS, включая и Drupal 8. Проанализировав указанную статистику, мы выбрали следующий 6 ТОП CMS: WordPress, Joomla, Drupal, Magento, PrestaShop и Typo3. Проведем краткий обзор движков для сайтов, входящих в наш ТОП CMS.   1) WordPress Выпущенный впервые в 2003 году, CMS WordPress быстро завоевал популярность как у продвинутых разработчиков, так и простых пользователей. Благодаря простой настройке, не самой высокой требовательностью к ресурсам хостинга и огромному количеству расширений эта CMS уже многие годы занимает первое место. На сегодня именно WordPress называют лучшей CMS для блога. WordPress идеально подходит для довольно простых веб-сайтов, таких как ежедневные блоги и новостные сайты, и для тех, кто ищет для себя простую CMS. Дополнения позволяют легко расширять функциональность сайта. К примеру, благодаря плагину WooCommerce, из сайтов на движке WordPress получается удобный для управления интернет-магазин – один из самых распространенных вариантов интернет-магазинов в сети. Нужно отметить и большое количество SaaS решений, использующих на своей платформе этот движок. Часть успеха WordPress в представленных диаграммах без сомнения относится к SaaS решениям. Официальный сайт WordPress: https://wordpress.org/ Особенности WordPress: Последняя версия - 5.0.3 от 09.01.2019. Написан на PHP. Более старые версии чем 5.0 официально объявлены «небезопасными». Минимальные требования к хостингу, поддержку которых обещает разработчик: PHP 7.3 MySQL 5.6 или MariaDB 10.0; HTTPS; Apache или Nginx. Плюсы WordPress: Бесплатная CMS распространяется с открытым исходным кодом. Огромное количество как платных, так и бесплатных шаблонов, и плагинов. Удобная панель администратора. Простая CMS для пользователя. Отмечают простоту использования и легкость установки как движка, так и тем, и расширений. Большое сообщество. Достаточно высокая производительность. Доступные платные плагины с проверенным качеством. Минусы WordPress: Относительно не маленькая требовательность к ресурсам, особенно при установке значительного числа плагинов. Отсутствие технической поддержки в не SaaS вариантах. Многие плагины написаны некачественно, что создает проблемы в работе и дыры в безопасности. Сайты на WordPress взламывают чаще всего.   Для каких сайтов используют CMS WordPress: Популярность WordPress продолжает расти: При этом в Украине сейчас 34910 сайтов используют эту CMS, а в Российской Федерации - 297353.   2) Joomla CMS Joomla впервые увидела свет в 2005 году. Отражая философию этого движка, его назвали словом, звучащим на суахили как «всё вместе». Фактически разрабатываемая как CMS для порталов, Joomla позволяет создавать сайты с большей гибкостью контента и внутренней структуры, чем WordPress, но при этом с достаточно простым и интуитивно понятным интерфейсом. Эта CMS поддерживает электронную коммерцию, социальные сети и многое другое. Используя этот движок, разработчики создают сайты-визитки, интернет-магазины, фотогалереи, порталы (включая новостные), блоги и другие сайты. Рядом пользователей, Joomla признается лучшей CMS для сайта типа портал. Официальный сайт: https://www.joomla.org/ Особенности движка Joomla: Последняя версия – 3.9.3 от 12.02.2019. Написана на PHP и JavaScript. Минимальные системные требования: PHP 5.3.10; MySQL  5.1 или SQL Server 10.50.1600.1 или PostgreSQL 8.3.18; Apache 2.0 или Nginx 1.0 или Microsoft IIS 7. Плюсы Joomla: Бесплатное распространение с открытым исходным кодом по лицензии GNU GPL v2, включая обновления; Частое предоставление обновлений движка; Большое сообщество пользователей и разработчиков; Большое количество доступных платных и бесплатных тем и плагинов; Относительно не высокий уровень требований к разработчику и пользователю. Минусы Joomla: Отсутствие технической поддержки. Вторая CMS по числу взломов. Joomla применяется в следующих сферах: В Украине 907  сайтов используют эту CMS и 3800 сайтов - в Российской Федерации. Есть определенная тенденция по снижению популярности CMS Joomla: 3) Drupal Впервые вышедшая в 2000 году, CMS Drupal является мощным, удобным для разработчиков инструментом для создания сложных сайтов. Как и большинство мощных инструментов, Drupal требует определенных знаний и опыта для работы. На основе Drupal часто создают порталы, новостные сайты, форумы, интернет-магазины - одни из самых продвинутых сайтов. Тем не менее Drupal является самым сложным для пользователя движков из тройки лидеров. Хотя его использование с каждым выпуском и становится все проще, если вы не готовы погрузиться в изучение этого программного обеспечения или не можете нанять кого-то, кто его знает, возможно, это не лучшая система управления контентом для вас. Официальный сайт: https://www.drupal.org/   Особенности Drupal CMS: Последняя версия 8.6.10; Ядро предоставляет только минимальный функционал, нужный для работы CMS, остальной функционал добавляется за счет плагинов. Установка модулей происходит в связке. Если для реализации функционала какого-то модуля нужны другие модули – они установятся автоматически в связке с первым модулем. Минимальные требования к хостингу для CMS Drupal 8: PHP 5.x/7.x для x86 и PHP 5.x для x64; MySQL 5.5.3 или MariaDB 5.5.20, или Percona Server 5.5.8, или PostgreSQL 9.1.2, или SQLite 3.6.8; Microsoft SQL Server и MongoDB поддерживаются благодаря отдельным модулям; Apache 2.x (используется в качестве Web-сервера для Drupal чаще всего) или Nginx (0.7.x, 0.8.x, 1.0.x, 1.2.x), стабильная версия 1.8.x или 1.9.x. Плюсы Drupal: Бесплатная CMS с открытым исходным кодом GNU GPL 2+. Стабильная работа ядра движка. Большое количество бесплатных тем, и различных расширений. Достаточно развитое сообщество разработчиков. Для решения типовых задач есть готовые наборы плагинов. Drupal известен своей мощной таксономией и способностью отмечать, классифицировать и организовывать сложный контент. Минусы Drupal: Сложность использования для начинающих пользователей. Меньшее количество доступных бесплатных плагинов чем у предыдущих CMS. Отмечают большую требовательность к хостингу за счет более частых обращений движка к базе данных, чем у других движков. Сегодня эту CMS используют в 7110 сайтов в Украине и 45189 сайтов в Российской Федерации. Можно наблюдать определенное снижение интереса к этой CMS по сравнению с 2016 годом:   4) Magento CMS Magento — движок для интернет-магазинов и других вариантов электронной коммерции. В основном популярен в западных странах и слабо представлен в русскоязычной части Интернета из-за слабой интеграции с местными сервисами. В настоящий момент является собственностью Adobe Inc. В основном Magento используется для крупных проектов. Считается не рентабельным использовать его для магазинов с несколькими сотнями позиций в обороте из-за относительно высокой стоимости разработки. Официальный сайт: https://magento.com/. Особенности CMS Magento: Написан на PHP. Последняя версия 2.3.0 от 28.11.2018. Требования к хостингу: LAMP (Linux, Apache, MySQL, and PHP) или LNMP; Apache 2.x или Nginx 1.7.x; PHP 5.6 или 5.5 или 5.4; MySQL 5.6 (Oracle or Percona); HTTPS; Доступ к crontab и к записи в .htaccess. Плюсы Magento: Бесплатная система с открытым исходным кодом. Движок оптимизирован под требования поисковых систем «из коробки». Готовая функциональность движка в базовой версии. Являясь собственностью Adobe Inc., отлично поддерживает интеграцию с сервисами Adobe. Минусы Magento: Несмотря на открытый исходный код, многими разработчиками считается не удобным работать с этой CMS из-за особенности организации ее кода. В бесплатной версии нет технической поддержки, платная версия будет стоить несколько тысяч долларов в год. Отсутствует интеграция с платежными средствами и другими локальными сервисами на постсоветском пространстве. Низкая скорость загрузки страниц сайта «из коробки». Большая часть настроек сайта потребует специфических знаний и навыков.   В Украине на сегодня 1113 сайтов используют CMS Magento и 1774 используют ее в Российской Федерации. После 2016 года можно наблюдать некоторое снижение числа сайтов на этой CMS:    5) PrestaShop PrestaShop – это еще один пример простой CMS с открытым исходным кодом для создания интернет-магазина. Созданный в 2008 году, этот движок достаточно быстро обрел популярность и продолжает ее наращивать. Это достаточно простая бесплатная CMS создана для организации торговых площадок и интернет магазинов. Официальный сайт: https://www.prestashop.com Особенности PrestaShop: Текущая версия – 1.7.5.1 от 18.02.2019. Написан на PHP с применением фреймворка Symfony. Минимальные требования к хостингу: PHP 5.6; MySQL 5.0; Server RAM – чем больше, тем лучше; Unix, Linux или Windows; Apache 2.2 или Nginx 1.0 или Microsoft’s IIS Web server 6.0. Плюсы PrestaShop: Бесплатный движок с открытым исходным кодом. Большое количество доступных тем оформления и расширений. Достаточный для начала работы интернет-магазина стандартный набор базовой версии движка. Имеет отличную русскую локализацию. Богатый выбор модулей для развития интернет-магазина. Хорошая интеграция с различными сервисами на постсоветском пространстве. Простота установки и работы. Удобная интуитивно понятная панель администрирования. Базовая версия имеет хорошую SEO-оптимизацию. Активные сообщества разработчиков. Минусы PrestaShop: Качественные темы и расширения являются платными. Более требователен к ресурсам чем WordPress. Низкая безопасность у бесплатных тем и плагинов. Наблюдаются баги при проведении внутренней оптимизации. Можно видеть рост популярности CMS PrestaShop. Например, на сегодня уже 2461 сайт работает на этом движке в Украине, и 8423 сайтов - в Российской Федерации.    6) Typo3 Typo3 это CMS с открытым исходным кодом. Впервые этот относительно универсальный движок был представлен в 1998 году. Typo3 часто применяется для новостных порталов, интернет-магазинов, корпоративных сайтов и других вариантов сайтов.   Официальный сайт: https://typo3.org/.   Особенности Typo3: Написан на PHP. Последняя версия 9.5.4 от 22.01.2019. Особенностью Typo3 является то, что в проектах на этой CMS вся информация публикуется от администратора и сайты не работают с пользовательским контентом. Typo3 не приспособлена для создания блога, активно взаимодействующего с пользователем портала или социальной сети. Минимальные требования к хостингу: Linux, Windows или Mac; PHP> = 7.2; PostgreSQL / Microsoft SQL Server / MariaDB >= 10.2 / MySQL >= 5 <= 5.7 / SQLite; Apache httpd или Nginx или Microsoft IIS, Caddy Server. Плюсы Typo3: Простота администрирования сайта. Возможность управления несколькими проектами из одной панели администратора. Возможность создания отдельных разделов на сайте с раздельным доступом для разных типов пользователей. Минусы Typo3: Относительно высокая требовательность движка к ресурсам сервера. Сложность изучения документации. Основная часть материалов не переведена с английского. Также, как и у ряда предыдущих CMS, у Typo3 наблюдается снижение популярности с 2016 года. В свою очередь в Украине на этом движке зарегистрировано 399 сайтов, в Российской Федерации - 1327. Полезным будет рассмотреть и сравнение производительности среди ТОП CMS.   Популярные CMS. Сравнение производительности. Согласно опубликованным данным тестирования ряда CMS, можно сделать вывод о наиболее быстром движке (пусть и в искусственных  - «тепличных» условиях теста). Указанные данные в таблице – это количество обрабатываемых запросов в секунду. Наиболее быстрой в данном исследовании среди популярных CMS показала себя WordPress 5.0 с версией PHP 7.3.   Вывод В нашем кратком обзоре CMS мы рассмотрели ТОП 6 наиболее распространенных CMS в мире. Как мы видим, каждая из них имеет свою специфику и особенности. Из-за разных возможных сфер применения сложно выбрать лучшую систему управления сайтом. Как лучшая CMS для блогов многими пользователями отмечается WordPress, а PrestaShop многими определяется как лучшая CMS для сайта интернет-магазина. Стоит понимать, что большая часть представленных в нашем ТОП CMS движков являются относительно универсальными. Кроме PrestaShop и Magento, ориентированных на интернет-коммерцию, с помощью других движков можно делать разнотипные проекты. Однако многими разработчиками признается, что никакая универсальная CMS не будет работать в конкретной сфере также хорошо, как специально разработанная для этой цели CMS. Поэтому, полезно кроме данного обзора ТОП CMS, рассмотреть отдельно ТОП CMS для блогов, ТОП CMS для интернет-магазинов, ТОП CMS для форумов, и далее. Такие обзоры помогут лучше понять, как правильно выбрать движок для сайта с вашими уникальными потребностями. Как вы могли заметить, рассмотренные CMS из ТОП движков для сайтов написаны на PHP. Если вы определились с CMS для своего проекта и хотите его сами доработать, или просто хотите научиться работать с топовыми проектами сети Интернет - вам, вероятно, будет интересен наш набор курсов  и вебинаров на портале ITVDN: WordPress Starter и WordPress Essential WordPress: создаем блог за час Интеграция верстки лендинга на CMS WordPress PHP Starter How To PHP Starter PHP Essential 
ТОП-7 лучших Linux дистрибутивов для разработчика в 2019 году

Автор: Армен Маилян

ТОП 7 дистрибутивов Linux 7-е место - Gentoo 6-е место - Gentoo 5-е место - Linux Mint 4-е место - Fedora 3-е место - Debia 2-е место - Arch Linux 1-е место - Ubuntu Несколько не вошедших в ТОП рейтинга, но все еще интересных дистрибутивов Linux Antergos Puppy Linux Manjaro Linux   Существует большое разнообразие операционных систем, используемых на рабочих станциях как простыми пользователями, так и разработчиками ПО. Какую же операционную систему следует выбрать разработчику в 2019 году? Согласно опросу, проведенному среди более чем 76 000 разработчиков и опубликованному в ежегодном отчете Stack Overflow’s 2018 Developer Survey, лидирующее положение в качестве основной операционной системы все еще занимает OS Windows. Однако, уже почти четверть из числа разработчиков используют в качестве основной ОС – Linux, или правильнее сказать Linux-based операционную систему. Этот немалый процент пользователей не может не заставить задуматься – а какие плюсы дает использование Linux в качестве операционной системы для разработчика? Возможно, имеет смысл мигрировать на Linux с OS Windows и MacOS? Но давайте для начала уточним несколько моментов.   Что такое Linux История UNIX-подобных операционных систем начинается в 1960-х годах с совместного проекта Массачусетского Технологического Института и компаний General Electric и Bell Labs. В последствии компании прекратили финансирование проекта и его развитие продолжилось энтузиастами. Это привело к появлению в 70-х годах системы UNICS, затем сменившей название на UNIX. В 1980-х годах набор дистрибутивов UNIX был выпущен под коммерческой лицензией компанией AT&T, в которую входила Bell Labs. Однако, по политическим причинам, AT&T была вынуждена предоставить исходный код OS UNIX, под ограничивающей возможности лицензией, ряду вузов, включая университет Беркли. Так, начиная с 1978 года, появилось одно из первых ответвлений Unix-подобных систем – BSD Unix. (BSD - Berkeley Software Distribution). Работавший в начале 1980-х в MIT Ричард Столлман был недоволен коммерциализацией и закрытостью лицензий UNIX. В 1983 году он объявил о новом проекте – GNU (GNU – рекурсивный акроним GNU’s Not UNIX). В рамках этого проекта получила начало разработка Unix-подобной операционной системы под свободной лицензией GNU GPL. Стоит отметить, что данная лицензия не только дает право разработчику свободно использовать программы, выпущенные под этой лицензией, но и обязывает разработчика выпускать все производные программы также под данной лицензией. Операционная система Linux появилась на свет в 1991 году благодаря Линусу Торвальдсу, разочаровавшемуся в существующих на тот момент операционных системах, бывших либо платными, либо выпущенными под лицензией BSD – с правом применения только в образовательных целях. В новой операционной системе Линусом Торвальдсом было переписано ядро, задачей которого является, в основном, координация доступа приложений к ресурсам системы. Возникшая на основе UNIX-подобной системы MINIX, работавшей под лицензией BSD, операционная система Linux в дальнейшем претерпела значительных изменений. Так были заменены многие компоненты на те, что написаны под лицензией GNU. В последствии произошло более глубокое слияние проектов GNU и Linux с образованием операционной системы GNU/Linux или той, что сейчас зачастую называют просто - Linux. До сих пор существует путаница в том, какие дистрибутивы ОС следует относить к Linux, а какие – нет. Ряд пользователей называет Linux-ом все операционные системы, использующие ядро Linux. В число таких ОС входит, в частности – Android. Другие пользователи признают под Linux только те дистрибутивы, которые состоят как из стандартного ядра, так и из обязательно включенной части ПО GNU (в число таких Android входить, соответственно, не будет). В рамках данной статьи, мы примем за определение Linux следующее: Операционная система Linux – это продукт, состоящий из ядра Linux, и набора внешних модулей GNU. Часто многие обзорные статьи и рейтинги операционных систем под заголовками «ТОП ... лучших Linux дистрибутивов» включают в себя не только сборки из семейного дерева Linux, но и те, которые фактически относятся к другим ветвям Unix-подобных систем, в частности - FreeBSD. Такая путаница действительно существует. Но не стоит забывать – это разные «ветви» развития операционных систем, имеющих общий исторический «корень» – Unix.   Преимущества Linux, как системы для разработчиков Почему Linux хорошая альтернатива для разработчика? Рассмотрим отдельно преимущества и недостатки использования Linux как основной операционной системы.   Общие преимущества для пользователей: Выбор. Огромное разнообразие дистрибутивов Linux, с разным набором компонентов, позволяет профессиональному пользователю найти тот, который будет удовлетворять его потребности как в работе, так и в быту. Настраиваемость и гибкость системы. Являясь, вероятно, самой настраиваемой и гибкой системой, Linux позволяет подогнать операционную систему под себя буквально. Бесплатное распространение. Распространяясь под лицензией GNU GPL, сами дистрибутивы Linux являются бесплатными. Однако ряд дистрибутивов являются коммерческими и полный спектр возможностей (поддержка, доступ в ряд репозиториев и т.п.) предоставляют на платной основе. Открытое программное обеспечение – Open Source. Огромное количество разнообразных программ с отрытым исходным кодом, бесплатных и общедоступных. Значительное количество специфических программ для обучения. При этом сохраняется возможность установки проприетарных программ. Использование эмулятора Wine позволяет запускать  на Linux многие приложения операционной системы Windows. Низкие системные требования и высокая скорость работы. Благодаря глубокой кастомизации дистрибутивов, обеспечивается более высокая скорость работы операционной системы и приложений. Это позволяет с большим комфортом пользоваться относительно старым железом при правильном подборе дистрибутива ОС. Активное сообщество пользователей и разработчиков. Безопасность. Конечно безопасность операционной системы в первую очередь зависит от пользователя, но нельзя не признать, что количество вирусов под Linux на порядки меньше чем под Windows. Кроме того, благодаря доступу к публичным, контролируемым репозиториям для установки ПО, нет необходимости брать программы из непроверенных источников. Также нельзя не отметить глубокую настраиваемость механизмов, обеспечивающих безопасность в Linux.   Преимущества Linux для разработчиков: Возможность тестировать разрабатываемое ПО прямо в том же окружении, в котором оно будет работать после выхода в продакшн. Вы можете иметь на вашем персональном компьютере весь тот же самый софт, с теми же версиями и настройками, как тот, который будет «крутиться» на сервере для вашего приложения. Удобство при активном использовании механизмов командной строки, Git и текстового редактора Vim отмечают многие разработчики. Стабильность в работе без перезагрузок. Многие пользователи не перезагружают операционную систему, пока не появляется необходимость в обновлении. Параноикам от мира разработчиков будет приятно знать, что Linux не собирает статистику на пользователя, в отличие от той же Windows   Недостатки Linux, как системы для разработчиков: Отсутствие ряда профессиональных программ, сравнимых с таковыми под Windows. Несмотря на возможность запуска многих программ под Wine нехватка профессиональных приложений ощущается. Особенно это заметно при необходимости работы с графикой и моделированием. Сложность разработки под Windows. Если вы работаете под Linux, это не значит, что в ваши задачи не будет входить написание кода под Windows. К сожалению полноценная Visual Studio под Linux не работает, а эта IDE сейчас является основной для Windows-разработки. Определенная сложность в обучении работы с инструментами. Нельзя не отметить, что порог вхождения в работе под Linux заметно выше.   Мы выделили основные плюсы и минусы в работе на Linux для программиста. Теперь давайте рассмотрим наиболее приемлемые Linux дистрибутивы. Разнообразие дистрибутивов Linux и статистика История дистрибутивов Linux насчитывает уже более 28 лет. Не удивительно, что из года в год появляющиеся и отмирающие ветви дистрибутивов этой операционной системы сегодня представляют уже целый зоопарк – фигурально выражаясь. Для примера можно посмотреть на стилизованный под периодическую систему список наиболее используемых дистрибутивов Linux, отсортированных по материнским версиям операционных систем. Как видно из этой схемы, таких дистрибутивов – не мало. И это только наиболее популярные. Известный портал distrowatch.com насчитывает только активных более 260 дистрибутивов. Чтобы помочь определиться с тем, какой дистрибутив Linux лучше выбрать разработчику, рассмотрим несколько рейтингов дистрибутивов Linux. Статистика использования пользователями разных дистрибутивов Linux согласно порталу phoronix.com Согласно данным опроса, проведенного в 2017 году порталом phoronix.com среди почти 30 000 людей, использовавших Linux дистрибутивы на ноутбуках, лидером по применению  является дистрибутив Ubuntu. Этот дистрибутив линукс получил 38,9% голосов. Следом за Ubuntu по популярности идет дистрибутив Arch Linux, получивший 27,1% пользователей.  Затем идут, Debian, Fedora и Linux Mint, получившие, соответственно, 15,3%, 14,8% и 10,8% аудитории. Шестое место в этом рейтинге дистрибутивов Linux занял openSUSE с 4,2%, а седьмое – Gentoo с 3,9% аудитории. Стоит отметить, что почти три четверти этих пользователей (73,1%) использовали указанную ими операционную систему для разработки ПО. Топ дистрибутивов Linux по статистике портала gamingonlinux.com По данным опроса, проведенного порталом gamingonlinux.com среди более 2 500 своих пользователей и действительному на 01.01.2019 – большая часть их пользователей использует Arch Linux - 21,2%. Затем идут Ubuntu – 19,15%, Linux Mint – 9,37%, Manjaro – 7,36%, Debian – 6,28%, Fedora – 4,72%, Antergos – 4,61%.   Опрос для рейтинга дистрибутивов линукс на портале reddit.com Проведенный на портале reddit.com в 2017 году, опрос среди почти 2 500 человек в сообществе r/unixporn, показал наибольшую популярность таких дистрибутивов линукс: Arch Linux использовали 27.0% пользователей, Ubuntu – 17,9%, Debian – 11,8%, Fedora – 6,09%. Затем идут Rasbian – 5,52%, Manjaro – 5,43% Antergos – 4,67%, Linux Mint – 3,41% и Gentoo – 2,44%. Множество других дистрибутивов Linux, включая openSUSE, Puppy Linux, CentOS и т.п., использует значительно меньшая доля пользователей. При этом указанные дистрибутивы использовались на ноутбуках более чем в 80% случаев, а на стационарных компьютерах – более чем в 60% случаев. Данные Google Trends Данные Google Trends, по пяти наиболее популярным дистрибутивам, показывают существенный отрыв Ubuntu даже от других дистрибутивов первой пятерки.   Давайте рассмотрим непосредственно наш рейтинг Linux дистрибутивов, составленный на основе указанных выше статистических данных.   ТОП 7 дистрибутивов Linux   7-е место - Gentoo Дистрибутив Gentoo версии 1.0 увидел свет в 2002. Этот дистрибутив создавался Дэниелом Роббинсом на основе другой его разработки, начатой еще в 1999 году -  Enoch Linux. В 2004 году Роббинсом был создан некоммерческий Фонд Gentoo, которому он передал в последствии права на торговые марки и авторские права, после чего покинул пост главного архитектора проекта. Философия проекта Gentoo состоит в предоставлении пользователям линукс, желающим иметь полный контроль своей системы, возможность контролировать, что установлено и запущено на их компьютере.  У пользователей есть возможность собирать персональные системы и серверы очень эффективными, если они готовы потратить немалое время, для установки и настройки системы. Gentoo рекомендует пользователям создавать ядро Linux с учетом их конкретного оборудования. Пользователи могут полностью контролировать, установленные и запущенные службы. Возможно существенно уменьшить потребление системой памяти в сравнении с работой других дистрибутивов, исключив незадействованные пакеты и службы ядра. Соответственно, может быть увеличена и скорость работы операционной системы - благодаря отсечению лишнего. Само название дистрибутива, происходит от названия вида пингвинов - Gentoo penguin, самого быстрого в мире. Значительная часть версий Linux являются пакетными. Сам процесс установки дистрибутивов такого типа происходит из пакетов, заранее собранных с откомпилированными исполняемыми файлами. Gentoo, в свою очередь, дистрибутив не пакетный, а source-based. У такого типа дистрибутивов исходники пакетов хранятся в репозиториях, а при установке – пакеты собираются из исходников прямо на пользовательском компьютере. Официальный сайт – https://www.gentoo.org/   Особенности линукс дистрибутива Gentoo: source-based дистрибутив; системы менеджмента пакетами Portage, Pkgcore, Paludis; для ряда приложений (особенно долго компилируемых) есть готовые бинарные сборки; созданные при компиляции на одном компьютере бинарные пакеты можно переносить на другой, с таким же железом; скользящие обновления (rolling-релиз); возможность установки существует для таких платформ - x86, x86-64, ARM, PowerPC, PowerPC 970, SPARC, MIPS, DEC Alpha, PA-RISC, IBM/390, SuperH и 68k.   Плюсы дистрибутива линукс Gentoo: глубокая настройка ОС с компилированием под индивидуального пользователя с конкретным железом; очень большое число доступных для установки приложений; большое количество доступных репозиториев; очень высокая стабильность работы правильно настроенных приложений; благодаря rolling-релизам обновление становятся менее болезненным; развитое сообщество пользователей и разработчиков; хорошая документация; возможность продолжения компиляции пакетов в случае если она была прервана; возможность устанавливать одновременно несколько веток софта; ряд исследований показывает, что в Gentoo потребление PHP памяти может быть уменьшено на количество вплоть до 50%.   Минусы дистрибутива Gentoo: излишне высокий порог вхождения для обычного пользователя; первоначальная установка занимает много времени; необходимость в частых обновлениях; если систему долго не обновлять, то обновление потом будет по сложности сравнимо с установкой с нуля; основная работа только через командную строку; возможны проблемы в процессе установки (компиляции пакетов) на слабых компьютерах.   Минимальные системные требования Gentoo Linux для desktop: Фактически может работать на самых минимальных возможных конфигурациях, в зависимости от задач и сборки.   6-е место - openSUSE Начало дистрибутиву openSUSE положено в 1992 году, когда четыре «любителя Linux» - Роланд Дайрофф, Томас Фер, Хьюберт Мантел и Бурхард Стейнбилд запустили SuSE - свой проект по продаже локализованных наборов Slackware Linux. Начиная с 1996 года, SuSE Linux стала независимым дистрибутивом. В дальнейшем, в состав SuSE Linux добавили менеджер пакетов RPM и представили общественности YaST - графический инструмент управления системой. Частые выходы новых версий дистрибутива, доступность SuSE Linux в магазинах Европы и Америки, наличие полной печатной документации – все это смогло поднять популярность дистрибутива. Novell Inc приобрела SuSE Linux в конце 2003 года. Вскоре произошел ряд изменений в политике SuSE. Так широкой публике представили YaST, дистрибутив SuSE лицензировали под GPL, образы дистрибутива начали распространять свободно с общедоступных серверов загрузки, и, что наиболее важно, разработка дистрибутива стала открытой для участия общественности. С версии SuSE 10.0, благодаря сообществу openSUSE, дистрибутив начинает распространятся полностью бесплатно, с открытым исходным кодом. На основе кода openSUSE был создан коммерческий продукт, сначала под именем Novell Linux, но позже разделившийся на два и изменивший название на SUSE Linux Enterprise Desktop и, также, SUSE Linux Enterprise Server. Сейчас проект openSUSE финансируется как компанией SUSE, так и рядом других компаний, и энтузиастов. Сейчас openSUSE доступен в двух основных редакциях - Leap, которая обеспечивает стабильную платформу с многолетней поддержкой и Tumbleweed, который обеспечивает скользящий выпуск обновлений дистрибутива. openSUSE часто хвалят за простоту настройки (через YaST), расширенную поддержку файловой системы Btrfs, а также за автоматические снимки файловой системы и загрузочные среды. Официальный сайт - https://www.opensuse.org/ Особенности дистрибутива openSUSE: версия ядра Linux – 4.12; в качестве графических сред, использует - Cinnamon, Enlightenment, GNOME, IceWM, KDE Plasma, LXDE, LXQt, MATE, Xfce; частота обновления версий – 12 месяцев; в качестве менеджера пакетов применяется RPM; поддерживает x86-64. Плюсы дистрибутива openSUSE: комплексный и интуитивно понятный инструмент настройки; большой репозиторий доступных пакетов ПО; отличная документация проекта; файловая система Btrfs, по умолчанию. Минусы дистрибутива openSUSE: ресурсоемкая работа рабочего стола и графики зачастую замедляет работу системы. Минимальные системные требования openSUSE: Pentium 4 1,6 GHz – процессор; 1 GB – оперативной памяти; 3 GB – свободного места на жестком диске; CD-ROM или USB порт.   5-е место - Linux Mint Linux Mint - основанный на Ubuntu ирландский дистрибутив, впервые выпущенный в 2006 году. Mint доминировал во многих рейтингах с 2011 по 2017 год. Такую популярность он приобрёл за свою стабильность, разнообразие поддерживаемых настольных менеджеров и полноценные мультимедийные возможности. Изначально планировалось выпускать несколько версий дистрибутива Mint под каждый выпуск версии Ubuntu. Однако, со временем, цикл разработки удлинился, сейчас составляя 2 года. При этом теперь дистрибутив базируется только на LTS-версиях Ubuntu (. В настоящий момент разрабатывается и управляется сообществом. Разработчики Mint сосредоточены на стабильности, поэтому они предпочитают консервативный цикл выпуска. Вы не будете получать новейшие обновления, но все равно будете в курсе событий разработки. Вас также не привлекут к разработке в качестве непроизвольного бета-тестера. Официальный сайт - https://linuxmint.com/   Особенности дистрибутива Mint: основывается на LTS версиях дистрибутива Ubuntu; версия ядра линукс – 4.15; специально разработанная среда рабочего стола Cinnamon, также доступны MATE, Xfce; частота обновления версий – 2 года; в качестве системы менеджмента пакетов - применяется dpkg; поддерживает x86 архитектуру; в сравнении с Ubuntu, базовый дистрибутив включает более расширенный мультимедийный функционал; использует тот же программный репозиторий, что и Ubuntu; вход под суперпользователем по умолчанию запрещён, как и в Ubuntu; своя система как обновления, так и установки приложений.   Плюсы дистрибутива Mint: превосходная коллекция мультимедийных инструментов; высокая стабильность работы; открытое сообщество разработчиков.   Минусы дистрибутива Mint: в альтернативные «общественные» релизы редко добавлены последние функции; проект не выпускает рекомендации по безопасности.   Минимальные системные требования дистрибутива Linux Mint: x86 - процессор; 512 MB – доступной оперативной памяти; 9 GB - места на жёстком диске; CD-привод или USB-порт.   4-е место - Fedora Хотя официально год представления дистрибутива общественности - 2004, фактически история Fedora начинается в 1995. Дистрибутив, с именем Fedora, его авторами Бобом Янгом и Марком Юингом изначально был назван - Red Hat Linux. В последствии, Red Hat представила в 1997 году новый менеджер пакетов – RPM (RPM - рекурсивный акроним RPM Package Manager - менеджер пакетов), во многом признанный революционным. В 2003 году, после выхода 9й версии Red Hat, в продуктах компании произошел ряд изменений. Имя Red Hat (товарный знак) - сохранился для коммерческих продуктов, публике же был представлен дистрибутив Fedora Core (затем сменивший имя на Fedora), изначально ориентированный на сообщество «любителей Linux». Несмотря на неприятие изменений сообществом, Fedora уже через несколько выпусков смогла вернуть себе звание одной из наиболее востребованных версий дистрибутива Linux. В свою очередь компания Red Hat, благодаря внедрению множества инноваций, превосходной поддержке клиентов и ряду других моментов, смогла стать крупнейшей и прибыльнейшей Linux-компанией в мире. В 2015 году Fedora представила обновленную версию своего дистрибутива под названием Atomic Host. Используя те же пакеты, что и Fedora's Server edition, Atomic обеспечивает обновления базовой ОС используя технологию OSTree. Сегодня Fedora - это один из самых распространенных и инновационных дистрибутивов Linux. К началу 2019 года только загрузок дистрибутива с официального сайта было произведено около 1 500 000. Широко известен вклад проекта Fedora в код ядра системы Linux, в ряд библиотек и технологий. Однако, в дистрибутиве все еще отсутствует определенность в стратегии развития десктоп-сегмента, которая упростила бы использование этого линукс дистрибутива для всех тех, кто выходит за рамки цели «любителя Linux». Официальный сайт - https://getfedora.org/   Особенности дистрибутива Fedora 29: версия ядра Linux – 4.18; менеджер пакетов RPM; использует по умолчанию графическую среду GNOME 3.30; частота обновления – 6-8 месяцев; поддерживает x86, x86-64, ARM, i686, POWER, MIPS, IBM System/39 платформы; единый глобальный репозиторий с исключительно бесплатным ПО (есть ряд неофициальных репозиториев); проект как разрабатывается, так и поддерживается сообществом, при этом спонсором выступает компания Red Hat; Fedora Project запретила поставку дистрибутива в Крым, Сирию, Судан, Иран, Северную Корею, и Кубу.   Плюсы дистрибутива Fedora: значительная инновационность дистрибутива; встроенная поддержка Docker; впечатляющие возможности обеспечения безопасности; огромное количество поддерживаемых пакетов; философская концепция свободного ПО; устоявшееся сообщество разработчиков и пользователей дистрибутива; наличие Live-CD со многими графическими оболочками.   Минусы дистрибутива Fedora: приоритеты дистрибутива Fedora, ориентированы, чаще, на решения корпоративных задач, а не на удобство при использовании персональных компьютеров; некоторые передовые внедрения (к примеру - раннее переключение на KDE 4 и GNOME 3) отталкивают ряд устоявшихся пользователей настольных компьютеров.   Минимальные системные требования дистрибутива Fedora: 1 GHz - процессор; 1 GB – оперативная память; 10 GB – свободного места на жестком диске.   3-е место - Debia   OS Debian GNU анонсировали в 1993 году. Создателем дистрибутива Debian был Ян Мердок, который, совместно с сотнями разработчиков-добровольцев, проектировал новый, полностью некоммерческий дистрибутив. Несмотря на общий скепсис в отношении новой операционной системы, Debian выжил. Кроме того, он стал крупнейшим дистрибутивом и, вероятно, самым крупным совместным проектом ПО из когда-либо созданных! Успешность Debian можно проиллюстрировать следующими цифрами. Его разрабатывали более 1000 добровольных разработчиков. Репозитории Debian содержат около 50 000 бинарных пакетов (написанных для 8 различных процессорных архитектур) и участвуют в создании около 130 установочных дистрибутивов и систем LiveCD на основе Debian. Ни одна другая ОС семейства Linux не может похвастаться похожими достижениями. Фактическая разработка OS Debian происходит в четырех (включая экспериментальную) основных ветвях с повышающимися уровнями стабильности работы ПО: «нестабильная» - «sid», «тестовая» и «стабильная». Именно благодаря этой схеме постепенной стабилизации и интеграции компонентов, Debian на сегодня считается одним из наиболее протестированных и наиболее свободных от ошибок дистрибутивов Linux. Официальны сайт - https://www.debian.org/   Особенности stable дистрибутива Debian Linux: дистрибутив основан на ядре версии 4.9. работает на следующих архитектурах - Intel x86, Intel 64, AMD64, ARM, ARM с аппаратным FPU, 64-битные ARM, 32bit MIPS, 64bit MIPS, Power Systems, 64-битный IBM S/390.   Плюсы дистрибутива Debian: признанная очень высокая стабильность; глубокий и последовательный контроль качества разработки; огромная библиотека пакетов в репозиториях - более 30 000 пакетов ПО; Универсальность касательно применения с различными видами процессорных архитектур. Debian поддерживает на сегодня больше их видов, чем любые другие линукс дистрибутивы. Минусы: достаточно быстрое устаревание стабильных версий из-за длинного цикла разработки – 1-3 года на цикл; консервативный состав дистрибутива – новые технологии, зачастую, не включаются в состав дистрибутива из-за необходимости поддержки сразу многих процессорных архитектур; относительно старая версия ядра; демократичность руководства проектом зачастую приводит к неоднозначным решениям, вызывая конфликты в сообществе разработчиков и тормозя развитие проекта.   Системные требования Debian: 128 MB – оперативная память; 2 GB - свободного места на жестком диске.   2-е место - Arch Linux Дистрибутив Arch Linux был основан Джаддом Винетом на философии KISS (keep it simple, stupid - не усложняй, тупица) в 2002 году. Сначала развитие проекта Arch Linux проходило, как дистрибутива для достаточно продвинутых пользователей, и Arch был мало популярен. Ситуация изменилась после того, как к дистрибутиву была применена политика обновлений Rolling release (плавающий релиз).  Теперь операционную систему достаточно стало установить единожды, после чего мощный менеджер пакетов сам обновлял соответствующие пакеты согласно выходящим обновлениям, без необходимости переустановки ОС. Из-за этого мажорные выпуски Arch Linux немногочисленны и ограничиваются базовым установочным образом, который обновляется только при значительных изменениях в базовой версии системы. Официальный сайт - https://www.archlinux.org/   Особенности дистрибутива Arch Linux: быстрый и мощный менеджер пакетов Pacman предоставляет возможность легко управлять и настраивать под себя как пакеты, размещенные в официальных репозиториях Arch, так и собранные самостоятельно; возможность устанавливать пакеты ПО из исходного кода; доступны следующие варианты графических оболочек – GNOME, KDE, LXDE, MATE, Xfce, Cinnamon, Enlightenment. в своем базовом виде дистрибутив Arch Linux содержит тщательно отобранный набор ПО, необходимого для ежедневной работы. основанная на философии «не усложняй», Arch Linux предоставляет ПО в том виде, в котором оно изначально представлено разработчиками. Для обеспечения совместимости вносятся только минимально необходимые изменения. последняя версия работает с ядром 4.20.5.   Плюсы дистрибутива Arch Linux: отличная инфраструктура управления программным обеспечением; возможности глубокой настройки системы под себя; удобства системы обновлений Rolling release; доступность обширной библиотеки документации системы.   Минусы дистрибутива Arch Linux: опасности ошибок и нестабильности при обновлениях благодаря особенностям принципа обновлений «roll-release»; требовательность к относительно высокому уровню знаний пользователя; зачастую невозможность установки новой - «мажорной» версии ОС, поверх старой.   Системные требования Arch Linux: x86_64 - совместимый процессор; 512 MB - оперативная память; 800 MB – свободного места на жестком диске; подключение к Интернету.   1-е место - Ubuntu Топ 1 нашего рейтинга -  операционная система Ubuntu, является широко распространенной версией Linux, в свое время основанной на другом дистрибутиве – Debian. Впервые о выходе Ubuntu заявили в 2004 году. Несмотря на относительную новизну, развиваться он начал стремительно. Пройдя тернистый путь популяризации длинной в 15 лет, Ubuntu занимает место самой популярной версии Linux для настольных компьютеров. Этот проект сделал очень много для разработки простой и удобной в использовании, бесплатной операционной системы для настольных компьютеров. Сегодня дистрибутив Ubuntu успешно конкурирует как со свободными, так проприетарными ОС. В чем причины потрясающего успеха Ubuntu? Среди главных выделяют Марка Шаттлворта - автора проекта.  Участвовавший ранее до Ubuntu в разработке Debian, Шаттлворт является мультимиллионером, владеющим компанией Canonical Ltd, которая и финансирует проект в настоящее время. Во-вторых, проект Ubuntu извлек уроки из проблем в разработках схожих проектов и смог избежать их – разработчики смогли создать удобную веб-инфраструктуру с Wiki-документацией и креативным средством сообщения о багах системы, профессионально подходя к конечным потребителям. В-третьих – с помощью финансовых возможностей автора, участники проекта смогли разослать бесплатные образцы дистрибутива заинтересованным пользователям. Это напрямую поспособствовало скорейшему распространению Ubuntu. Фактически, Ubuntu основывается на нестабильной ветке дистрибутива Debian, включив в себя такие распространенные пакеты, как - GNOME, LibreOffice, Firefox и др., обновив их до стабильных версий. Этот дистрибутив Linux выходит с предсказуемым шестимесячным графиком, периодически выпуская версии с долгосрочной поддержкой (LTS), которые поддерживаются обновлениями безопасности на протяжении 5 лет. Выпуск без LTS, в свою очередь, поддерживается 9 месяцев. Официальный сайт - https://www.ubuntu.com/   Особенности дистрибутива линукс Ubuntu: дистрибутив основывается на Debian; вход под суперпользователем отключен. Для получения полномочий суперпользователя используется утилита sudo; доступны варианты дистрибутивов с разными пакетами графических оболочек - GNOME - по умолчанию в версии 18.04, KDE – Kubuntu, Xfce – Xubuntu, LXDE/ LXQt – Lubuntu и другие. в версии Ubuntu 18.04 сбор пользовательских данных включён по умолчанию (возможно отключить); ядро Linux версии 4.15 в LTS версии; проект разрабатывается и поддерживается компанией Canonical.   Плюсы дистрибутива Ubuntu: исправлен цикл релиза и период поддержки, в сравнении с Debian; наличие долгосрочной поддержки (LTS) с 5-летним сроком предоставления обновлений безопасности; интерфейс, дружественный для начинающих; множество как официальной, так и пользовательской документации; широко распространенный дистрибутив с обширным комьюнити, большим количеством репозиториев и широкой возможностью выбора программ для установки. поддержка новейших технологий «из коробки» - к примеру, 3D эффекты графической оболочки и элементов рабочего стола; простая установка проприетарных драйверов для различных устройств беспроводных сетей и видеокарт NVIDIA и ATI; возможность выбора варианта дистрибутива с менее требовательной графической оболочкой.   Минусы: отсутствие совместимости с дистрибутивом Debian; часто выходящие важные изменения дистрибутива, как правило, отталкивают некоторых пользователей; не LTS релизы поставляются только с 9-месячной поддержкой безопасности.   Минимальные системные требования дистрибутива Ubuntu: 2 GHz dual core процессор; 2 GiB – доступная оперативная память; 25 GB – свободного места на жестком диске; CD/DVD привод или USB порт для.   Несколько не вошедших в ТОП рейтинга, но все еще интересных дистрибутивов Linux   Antergos Antergos- это относительно новый дистрибутив Linux, основывающийся на Arch. Изначально выпущенный в 2012 году под именем Cinnarch, этот дистрибутив был клоном Arch Linux, с Cinnamon в качестве окружения рабочего стола. На уровне системы отличий между Antergos и Arch Linux – нет. Разница между дистрибутивами находится в подходе к пользователю. В отличие от Arch, рассчитанного на уже опытного пользователя, Antergos направлен на всех, как опытных, так и начинающих Linux пользователей. В качестве установщика Antergos использует собственную разработку - CNCHI, созданный чтобы максимально упростить для пользователя процесс установки. Минимальный набор входящих в дистрибутив приложений подойдет тем, кто хочет собрать дистрибутив под свои нужды. Если же вам нужен уже готовый к работе дистрибутив, предоставляющий полный набор приложений для повседневного использования - вам Antergos не подойдет. Галийское слово Antergos (означающее: предки) было выбрано, «чтобы связать прошлое с настоящим». Это название символизирует, что несмотря на все глубокие существенные изменения в дистрибутиве, глубокая связь с основой дистрибутива, Arch Linux - остается. Официальный сайт - https://antergos.com/   Особенности дистрибутива Antergos: основывается на Arch Linux; Использует версию ядра 4.20; Доступны такие виды графической оболочки – Cinnamon, GNOME, KDE, Xfce, Openbox, MATE Скользящая модель обновлений.    Плюсы дистрибутива Antegos: Открытое сообщество, как для разработчиков, так и для пользователей с их пожеланиями и замечаниями; Собственный установщик, упрощающий процесс установки; Поддерживается то же железо, что и у Arch Linux, Отличный внешний вид благодаря сотрудничеству с Numix; Использует репозитории Arch Linux; Быстрый выход обновлений для разнообразного ПО.   Минусы дистрибутива Antergos: Сложности с установкой проприетарных драйверов на ряд устройств - нужно ставить вручную.   Puppy Linux Puppy Linux это дистрибутив Linux, созданный Барри Каулером в 2003 году. Puppy Linux – не является цельным дистрибутивом Linux, как Debian. Puppy Linux также не является дистрибутивом Linux с несколькими разновидностями, как Ubuntu (с его вариантами Ubuntu, Kubuntu, Xubuntu и т. д.), хотя и поставляется в разных вариантах. Puppy Linux - это совокупность нескольких дистрибутивов Linux, построенных на одних и тех же общих принципах, с использованием одного и того же набора инструментов, на основе уникального набора приложений и конфигураций, специфичных для Puppy, и в целом обеспечивающих согласованное поведение и работу, независимо от того, какой дистрибутив вы выбираете. Не смотря на очень маленький размер, дистрибутив является полнофункциональным. В отличие от дистрибутивов LiveCD, которые должны постоянно подгружать данные с компакт-диска, Puppy загружается сразу в RAM. Таким образом все ПО будет запускаться практически мгновенно и мгновенно реагировать на ввод данных пользователем. Puppy Linux может загружаться с любого USB-накопителя, CD-ROM, Zip-диска или супердиска LS 120/240, дискет, внутреннего жесткого диска. Он может даже использовать мультисессионный формат CD-RW / DVD-RW, чтобы сохранить всё обратно на CD / DVD без жесткого диска вообще.   Есть три основных направления дистрибутивов Puppy Linux: официальные дистрибутивы – являются дистрибутивами общего назначения и поддерживаются командой Puppy Linux. Как правило, создаются с использованием сборщика систем Puppy Linux (называемого Woof-CE). собранные в коллекцию Woof, дистрибутивы Puppy Linux - разрабатываются для удовлетворения конкретных потребностей, предназначаются для общего пользования и собраны с использованием системного компоновщика Puppy Linux с рядом дополнительных или модифицированных пакетов. неофициальные производные дистрибутивы («щенки») - являются ремастерами (или ремастерами ремастеров), созданными и поддерживаемыми энтузиастами Puppy. Обычно предназначаются для определенных конкретных целей.   Официальный сайт - http://puppylinux.com/   Особенности дистрибутивов Puppy Linux: минимум системных служб; ядро версии 4.4. Можно обновить до 4.9; свой менеджер пакетов - Puppy Package Manage; поддерживает архитектуру i386, x86_64.   Плюсы дистрибутивов Puppy Linux: ядро и софт, оптимизированные под домашнего пользователя; содержит все инструменты повседневного использования; легкая установка – драйвера на большинство современного и старого оборудования работают автоматически; малый размер системы – 300 MB или меньше; возможна работа в режиме полной установки, а также полноценная работа c CD-ROM (LiveCD) или USB-Flash; возможность установки нескольких FRUGAL дистрибутивов на раздел с установленным Windows; удобная переносная система с вашими настройками на USB-флешке, карте памяти или HDD; удобный оконный «бабушка-френдли» интерфейс системы; большое количество производных дистрибутивов под нужды каждого пользователя.   Минусы дистрибутивов Puppy Linux: Из-за необходимости поддерживать совместимость со старым железом, графический интерфейс, некоторыми пользователями воспринимается сильно устаревшим.   Рекомендуемые системные требования: 1 или больше GHz - процессор; 2 GB - оперативная память.   Manjaro Linux Manjaro это дистрибутив Linux, основывающийся на Arch Linux. Впервые представленный в 2011 году, дистрибутив Manjaro до 2013 года находился в режиме беты. Основываясь на Arch, проект Manjaro со времен своего основания своей целью ставил создание дистрибутива, сочетающего в себе как дружественность по отношению к неопытным пользователям, так и возможности Arch Linux. Официальный сайт - https://manjaro.org/ Особенности дистрибутива Manjaro: Использует менеджер пакетов Pacman; Поддерживает платформу x86-64; Поддерживает версию ядра 4.20.3; Отказ от использования персональных архив пакетов (Personal Package Arhive - PPA).   Плюсы дистрибутива Manjaro: Удобный менеджер драйверов с возможностью автоматической установки; Поддержка обширного списка оборудования; Использование репозиториев Arch, полная совместимость с Arch User Repository; rolling release в обновлениях с предварительным тестированием пакетов участниками проекта Manjaro; удобная возможность установки множество версий ядра и удобного переключения между ними; доброжелательное сообщество.   Минусы дистрибутива Manjaro: Отказ от поддержки архитектуры i686; Пользователи отмечают перенасыщенность брендингом включая обои, закладки в браузерах и тп; Относительно малочисленной сообщество со всем вытекающим для Linux-пользователя.   Вывод. Выбирая для себя операционную систему, стоит помнить, что операционная система — это инструмент, который, с одной стороны, должен быть для вас удобным, а с другой – обладать нужным для вас функционалом. Какая система лучше для пользователя: Windows или Linux, или MacOs, или FreeBSD– это тема многих «священных форумных войн», так и не давших однозначного ответа на этот вопрос. Такие же баталии, хотя и с меньшим градусом агрессии, проходят на тему «лучший дистрибутив linux». Мы не сможем дать Вам однозначного ответа на вопрос – какой дистрибутив является лучшим дистрибутивом Linux для разработчика. Если Вы только раздумываете над возможностью перейти на работу c OC Linux, Вам будет полезно рассмотреть наш рейтинг в качестве отправной точки. Если же Вы уже являетесь опытным пользователем Linux – мы надеемся, что наш рейтинг дистрибутивов Linux поможет Вам в выборе нового инструмента, или утвердит в желании остаться на проверенном Вами. Не так важно определиться раз и на всегда в операционной системе. Не бывает однозначно абсолютно удобных инструментов (многие разработчики используют одновременно 2 и более операционных систем.). Главное, чтобы Вы продолжали профессионально расти и развиваться, используя подходящие и удобные для Вас инструменты. Со своей стороны, портал ITVDN готов предоставлять для этого развития актуальную и полезную информацию.
Популярные языки программирования на 2019 год

Автор: Армен Маилян

Планируя новые вехи для своего образования, полезно оценить их полезность относительно запросов общества в целом и вашей сферы деятельности – в частности. Для разработчиков программного обеспечения, как начинающих - выбирающих для себя первый язык программирования, так и опытных – выбирающих второй, третий (и тд.) язык для изучения, важно понимать востребованность этого языка на рынке. Владеть современным языком, поддерживающим большинство актуальных парадигм и технологий очень важно. Но важно и чтобы такой язык предоставлял достаточный выбор вакансий при поиске работы. Рассмотрим несколько авторитетных рейтингов, составленных для языков программирования по результатам 2018 года.   1) Популярные языки программирования на 2019 по рейтингу TIOBE   Индекс TIOBE (TIOBE programming community index) - это один из известных индексов, показывающий степень востребованности языка программирования, анализируя данные запросов в поисковых системах. Обновляется данный индекс каждый в месяц. Рейтинг учитывает как количество квалифицированных инженеров во всем мире, так и количество образовательных курсов по различным языкам. Для расчета индекса TIOBE используются данные результатов поиска в популярных поисковых системах, полученных в Google, YouTube, Wikipedia, Bing, Yahoo !, Baidu, и Amazon. Важно отметить, что индекс TIOBE не называет победителя рейтинга - лучшим языком программирования или языком, на котором написано большинство строк кода. Детальнее с методикой получения этого индекса можно ознакомиться тут.   На первом месте продолжает оставаться Java. Однако, несмотря на то, что в сравнении с декабрем 2017 его позиции поднялся на 2.66, из графика, представленного ниже, видно – показатели этого языка падают после пика популярности в октябре 2018. Второе место занимает язык C, имея 14.282% в рейтинге. Третье место получил Python с 8.376%, сместив в этом рейтинге популярности С++. Позиция Python выросла по сравнению с декабрем 2017 и продолжает расти. Язык С++, в свою очередь, уступив третье место, занимает сейчас четвертое. Его популярность, как видно из графика, колеблется относительно 8%, имея на декабрь 2018 - 7.56%. Интересной особенностью этого индекса оказывается то, что Visual Basic .NET в настоящее время находится на пятой позиции с рекордно высоким для данного языка уровнем. Это очень неожиданно, ведь профессиональные разработчики программного обеспечения крайне мало используют Visual Basic. Стоит отметить, что язык SQL снова добавлен в индекс TIOBE с февраля 2018 года. Вследствие этого, для языка SQL нет недавней истории, и может показаться, что значимость SQL растет очень быстро.   2) Статистика GitHub по языкам программирования за 2018 год     Статистика использования языков программирования на площадке GitHub показывает, что лидером по применению продолжает быть язык JavaScript. Он остается бессменным лидером и в частных репозиториях, и в публичных, а также лидирует в репозиториях организаций всех размеров вне зависимости от региона расположения во всем мире. На втором месте, также без изменений значимости, находится Java. Третье место занимает Python, чья популярность, благодаря применению его в системах машинного обучения, выросла в 1.5 раза. Четвертое и пятое место соответственно занимают, PHP и C++. По сравнению с предыдущим годом можно отметить стремительный рост применения языка TypeScript – благодаря частоте его применения, в рейтинге он поднялся с 10 места на 7. Заметным оказалось падение популярности языка С. В этом году он «провалился» сразу на два пункта, занимая сейчас 9 место. Популярность Ruby падает. Начиная с 2015 года этот язык на GitHub последовательно «сползает» с 5 места на 10 в 2018 году. Стоит также отметить существенный рост частоты применения языка Kotlin. Несмотря на то, что он пока не входит в десятку - за 2018 год частота его использования в проектах выросла в 2.6 раза.   3) Рейтинг языков программирования на Stackoverflow по результатам 2018 года   Согласно данным опроса Stack Overflow’s 2018 Developer Survey, проводимого уже восьмой год среди более чем 100 000 разработчиков, есть несколько тенденций, которые отмечают редакторы самого StackOverflow: DevOps и машинное обучение являются сегодня важными тенденциями индустрии программного обеспечения. Языки и структуры, связанные с этими видами работ, находятся на подъеме, и разработчики, работающие в этих областях, получают самые высокие зарплаты. Python поднялся в рейтинге языков программирования, превзойдя C# по популярности в этом году, так же как он превзошел PHP в прошлом году. JavaScript, согласно данным StackOverflow, остается лидирующим языком среди использованых разработчиками. Следующим после JavaScript является SQL, занимающий второе место. Затем идут Java, Bash, Python, занимающие соответственно третье, четверное и пятое места. Кроме этих, озвученных результатов опроса, мы можем увидеть и другие тенденции среди языков из первой десятки. Из графика количества вопросов на StackOverflow по различным языкам программирования видно, что уровень интереса к Python не перестает расти, как это уже было сказано выше. Это происходит на фоне некоторого снижения количества вопросов по таким языкам как PHP, C++, Java, C#. Имеет смысл рассмотреть также позиции языков Objective-C и Swift в контексте разработки под iOs. Заметно, что популярность Objective-C стабильно падает. Swift уже сейчас занимает 12 место среди языков, получив 8.1% в рейтинге. В то же время Objective-C находится на 15 месте, имея 7.0%. Полезной для понимания рынка разработки будет и статистика зарплат специалистов, применяющих в разработке те или иные языки программирования:  Как мы видим, среди языков первой десятки снова выделяется Python - предоставляющий возможность получать высокую зарплату относительно молодым специалистам. Так разработчики Java, со сходным опытом, получают в среднем на 15% меньше, чем разработчики на Python, а разработчики на PHP – почти на 30% меньше. Среди же наиболее оплачиваемых знаний языков мы можем наблюдать навыки вланения Clojure, F#, Go, Skala и ряда других языков программирования не входящий в первую десятку.   4) Рейтинг языков программирования IEEE Spectrum за 2018   Следующий рейтинг представлен IEEE Spectrum — ежемесячным периодическим изданием, представляющим Институт инженеров электротехники и электроники. Данный институт является международной некоммерческой организацией, объединяющей сотни тысяч технических специалистов со всего мира. Результаты этого анализа остаются актуальными, хотя они и были представлены в июле 2018. Согласно этому рейтингу Python занимает первое место уже второй год подряд. Такую высокую популярность языка составители объясняют несколькими причинами: Во-первых, Python стал все чаще применяться как язык embedded разработки. Все больше современных микроконтроллеров получают достаточно мощности и памяти для размещения интерпретатора Python. Следующей причиной роста популярности Python составители рейтинга видят падение популярности языка R, применяемого в основном для обработки статистических данных. Данный язык последовательно терял очки популярности и опускался с 5 места в 2016 году до 6 места в 2017 году, и 7 места в 2018 году. Соответственно Python все чаще используется для обработки больших наборов данных в статистических исследованиях и задачах машинного обучения. Заметен в рейтинге IEEE Spectrum рост востребованности PHP - он поднимается с 8-го на 6-е место. Также, согласно данным этого рейтинга, несколько снизилась доля применения JavaScript   5) Статистика W3Techs для языков WEB-разработки на 2019 году   Для понимания изменения трендов WEB-разработки полезным будет рассмотреть статистику, предоставляемую w3techs.com. Данная статистика показывает количество сайтов, применяющих для своей работы те или иные языки и платформы. В WEB проектах, среди языков фронтенда, первое место по значимости стабильно удерживается JavaScript. Рассмотрим языки бэкенда: Тренды применения языков программирования в серверной части на 08.01.2019. Для бэкенда все еще востребованным остается PHP. Несмотря на незначительные потери позиций, на фоне роста популярности других языков программирования - много кода уже написано на PHP. Около 80% всех сайтов Интернета написаны с применением PHP в серверной части. При выборе языка для изучения стоит учитывать, что на сегодняшний день PHP применяется такими популярными сайтами: Facebook.com Wikipedia.org Vk.com Sina.com.cn 360.cn Aliexpress.com Wordpress.com Pinterest.com Cobalten.com Detik.com Также мы видим, что несколько упала популярность платформы ASP.NET, хотя она и не утратила второе место по частоте использования. Растет частота применения Java, Ruby, Scala и JavaScript (благодаря активному применению платформы Node.js). Отмечается уменьшение на общем числе сайтов процента применения Python.   6) Статистика вакансий ITJobsWatch   Статистика ITJobsWatch для вакансий постоянных сотрудников в Великобритании, отсортированная именно по языкам программирования, позволяет рассмотреть языки с точки зрения количества вакансий по ним за период в 6 последних месяцев.    Данный рейтинг начинается со значения 4, поскольку 1, 2 и 3 места занимают вакансии Agile Software Development, Developer и Finance. Из представленной таблицы можно увидеть, что среди общего количества вакансий лидирует SQL, затем идут JavaScript, C# и Java. Количество вакансий со знанием указанных языков относительно прошлого полугодия практически не изменилось. С другой стороны, их догоняют Python – уже находящийся на 5 месте и C++ - на 6 месте среди языков программирования в вакансиях разработчиков. На фоне общего количества вакансий падает доля запросов на разработчиков, владеющих PHP – на 17 пунктов и владеющих T-SQL – на 7 пунктов. Наибольшая медианная зарплата соответствует Python – 60 000 £ . 7) Данные для размышления   По данным крупнейшей социальной сети для профессионалов и поиска работы - LinkedIn, за 2018 год в ТОП 5 наиболее растущих по количеству вакансий входят: блокчейн-разработчик, инженер сферы машинного обучения, специалист по машинному обучению. Стоит отметить, что, согласно данным LinkedIn, в ТОП 20 навыков, которыми должен владеть соискатель работы в Индии входят среди прочих, в порядке убывания важности: Java, SQL, HTML, JavaScript, C++. Также, в ТОП 10 навыков, наиболее часто отмечаемых у себя среди представителей молодежи Индии, Бразилии, Индонезии и Южной Африки входят: C/C++, WEB-разработка и Java-разработка.   Выводы Легко заметить, что одни данные мировых рейтингов языков программирования несколько противоречат данным других рейтингов о тенденциях изменения популярности языков. Однако есть ряд трендов, которые можно четко выделить из всех предоставленных данных: Все они отмечают заметный рост запросов на разработчиков, применяющих Python – как в уже относительно устоявшихся сферах статистической обработки, BigData и машинного обучения, так и в WEB, и в embedded разработке. Python – однозначно стоит рассмотреть в качестве языка для изучения на 2019 год. JavaScript остается бессменным лидером фронтенда и постепенно набирает очки в бэкенде и мобильной разработке под Android и iOs. Java продолжает лидировать как в разработке под Android, так и в сфере Enterprise разработки. Постепенно проникает Java и в WEB-backend. C# несколько растерял свои позиции, однако он однозначно будет находиться среди первых мест, оставаясь главным языком экосистемы Microsoft с широчайшей поддержкой этой корпорации. Также не стоит забывать достаточно глубокое проникновение С# в WEB, относительную простоту изучения, а также активное применение этого языка в разработке игр (Unity, XBOX 360) и мобильных приложений (Xamarin). Неоднозначна позиция у C++. Несмотря на то, что этот язык все еще полноценно присутствует в ТОП 10 языков и активно применяется для разработки игр, приложений для мобильных платформ, десктопных приложений и в embedded разработке – все больше заметно вытеснение его с занимаемых позиций другими языками. Кроме того, стоит учитывать, что большинство разработчиков не рекомендуют его как первый язык для изучения, из-за его сложности. В разработке под iOs Swift уже обогнал Objective-C и разрыв все еще увеличивается. Значительная часть разработчиков не считает PHP – языком «будущих разработок», при этом признавая его однозначным лидером «сегодняшних разработок» в сфере бэкенда. Падение же популярности его будет явно достаточно длительным. Ряд языков, такие как Go, Kotlin, Ruby и др. имеет смысл рассмотреть в качестве второго или третьего языка для развития себя как разработчика программного обеспечения.   Возможно на основе представленных данных Вы придете к несколько иным для себя выводам. Со своей же стороны в новом 2019 году мы желаем, чтобы и наши, и Ваши выводы помогли Вам достигнуть успеха в изучении новых языков, и технологий.
Советы новичку по обучению программированию

Автор: Редакция ITVDN

В этой статье вы найдёте несколько полезных советов для тех, кто хочет стать программистом. Совет 1. Определитесь с языком программирования Выбор языка программирования — первая трудность, с которой встречаются новички. Сколько программистов — столько и мнений о языках, поэтому выделить «лучший» среди них нельзя. Почему? Каждый язык создан для определённой области разработки и решения определённых задач. Для выбора языка программирования, ориентируйтесь на ваши желания. Какие программы и сервисы вы хотите создавать? Делать игры на Unity? Сайты на HTML, CSS и JavaScript? Или, может быть, бизнес-приложения на С# или Java? Python широко используется в науке для быстрых вычислений. При выборе учитывайте порог вхождения языка (Python, например, изучается быстрее и легче С++) и ваши предрасположенности. Кроме того, перед изучением любого языка стоит изучить основы программирования. Разберитесь, что такое двоичный код, компилятор, познакомьтесь с алгоритмами и шаблонами проектирования. Совет 2. Применяйте метод дробления материала Если вы решили стать программистом, вам нужно будет очень мнрогое изучить и запомнить. Сделать это «с наскока» будет трудно. Не хваатайтесь за все сразу. Ставьте перед собой небольшие реальные, достижимые цели. Например, изучайте одну тему за 1 день. При изучении любого языка начинайте с самых основ, постепенно продвигаясь вперёд. Закрепляйте пройденный материал практикой, если есть какие-то небольшие пробелы в знаниях — двигайтесь дальше, возможно, вы заполните их потом. Но не оставляйте слишком много «белых пятен», иначе запутаетесь. На помощь в структурировании информации вам придут различные техники запоминания (ассоциации, карточки) и ваш собственный дневник обучения, в котором вы можете записывать усвоенный материал, как говорят, «своими словами», и затем проверять его на практике. Совет 3.  Не стесняйтесь использовать детские обучающие программы и курсы. В детских программах часто подают упрощенные знания, основы основ. Не стесняйтесь пробовать детские игры и курсы, в которых материал усваивается значительно легче. Кроме того, это бываает весело! Прослушав материал в упрощенном виде, вы сможете понять его, и дальнейшее изучение программирования будет даваться вам значительно легче. Кроме того, к временной помощи детских курсов можно прибегнуть, если какой-то участок материала даётся вам с трудом, и понять его вы никак не можете. Прослушав упрощенный материал, вы получите взгляд со стороны и, возможно, наконец сможете понять материал. Совет 4. Разбирайте чужой код Это больше относится к практике. Разбирая чужой код, вы начнёте понимать, почему программа работает или не работает. Перенимая чужой опыт, вы получаете новые знания и фишки, которые помогут вам в будущем. Читая код другого программиста, вы улучшите своё общее понимание программирования и убережете себя от ошибок. Кроме того, разбор чужого кода также может помочь вам сдвинуться с мёртвой точки. Если вам что-то не понятно, то вы можете просмотреть чей-то код и получить его советы. Таким образом, вы сможете понять, как сделать правильно и почему часть программы у другого человека работает правильно, а у вас — нет. Совет 5. Читайте полезную литературу Не смотря на то, что сейчас больше людей предпочитают литературе курсы, статьи и видео, чтение актуальных книг по программированию поможет вам глубже изучить программирование. Некоторые книги вообще являются признанной классикой, например книга Роберта Мартина «Чистый Код» детально описывает процесс создания чистого кода, и указывает на ошибки, которые могут возникнуть при написании красивого кода. Фактически, эта книга — «библия» для тех, кто стремится писать чистый код. Поискав в Гугле другие книги по вашему направлению, вы можете скомбинировать их со справочниками, и получить «универсальный набор» программиста, в котором вы найдёте ответы на большинство своих вопросов. Общепризнанную литературу можно читать в переводе, но большинство актуальной литературы выходит в мир на английском, и переводится на русский с опозданием в год-два, когда уже всё поменялось. Поэтому дополнительный совет: уделите внимание изучению английского языка! С английским вы всегда сможете получать актуальную информацию, общаться с зарубежными программистами, английский облегчит вам изучение программирования в несколько раз, и, возможно, в будущем вы найдете работу в зарубежной компании. Совет 6. Запишитесь на курсы Для некоторых людей самостоятельное изучение программирование может даваться с трудом, ведь рядом нет никого, кто мог бы в любой момент ответить на их вопросы. Многим не понятно, с чего начинать обучение и как структурировать информацию.С наставником и одногруппниками вы будете продвигаться в обучении быстрее. Если вы хотите начать изучать программирование, вам будет интересно посмотреть записи вебинаров ITVDN из серии «С чего начать?», и «Как стать программистом?» . Ваши вопросы вы можете задать, обратившись в службу поддержки ITVDN. Консультанты нашего образовательного ресурса будут рады помочь вам.
10 полезных фич в Angular, о которых вы могли не знать

Автор: Angular Guru

10 полезных фич в Angular, о которых вы могли не знать Angular - это объемный фреймворк, и наверняка большинство из нас использует лишь небольшую его часть. Но за этим мы можем упускать некоторые весьма полезные его возможности, которые сделали бы нашу жизнь значительно проще. В этой статье я собираюсь разобрать около 12 полезных фич в Angular, о которых вы могли и не слышать. Одна из вещей, о которой часто забывают, но которая таит в себе множество полезностей, является Pipe. Итак, давайте поговорим о них. KeyValuePipe Это одна из ключевых особенностей Angular 6.1. До этого все, что позволяла директива *ngFor, так это проитерировать массив или другую счисляемую конструкцию. Что же в случае со свойствами объектов или элементов Map - перебрать их было задачей отнюдь нетривиальной. Это как раз тот случай, когда может пригодиться директива KeyValuePipe! Мы просто ставим pipe по отношению к объекту, который желаем проитерировать, и все остальное за нас совершает ngFor. К примеру:   Slice Pipe Отображение списка предметов и манипуляция большим объемом DOM-элементов - задача достаточно затратная, потому порой могут возникать ситуации, когда мы захотим уменьшить количество отображаемых элементов. Выполнить это можно многими способами, но Angular обладает прекрасным SlicePipe, который позволяет нам выполнить все это всего лишь как часть нашего ngFor - выражения. К примеру, давайте представим, что мы хотим отобразить только первые 10 элементов массива:   Decimal Pipe Этот pipe предназначен для форматирования чисел. Он может быть весьма полезен, когда мы желаем ограничить число цифр, которые будут показаны после точки. Впрочем, он также может быть использован, когда мы просто желаем представить определенное число в более "презентабельном" виде, с запятыми после каждой тысячи. Так, 1000 у нас станет 1,000. Кроме того, стоит также упомянуть еще об одной полезной фиче здесь. А именно, функции formatNumber, которая является частью @angular/common, что позволяет применять то же самое форматирование на программном уровне.   JSON Pipe Крайне полезный инструмент, особенно при отладке. Позволяет вам отобразить объект в виде строки в представлении. Подобный подход может стать неплохой альтернативой точкам остановки и командам отладчика в некоторых случаях. Просто добавьте JSON pipe объекту, который вы желаете отобразить:   Заголовок и мета-сервисы Становятся особенно полезными, когда мы работаем с поисковиками или соц. сетями (по типу Google, Twitter, Facebook и т.д.). Эти платформы для формирования контента, названия, его описания используют теги <meta>. К примеру, в нашем блоге для каждой статьи существуют свои заголовки, описания, картинки и так далее. Дабы убедиться в достоверности предоставляемой информации, мы можем поместить все необходимое в специальные мета-теги, как показано на примере ниже: Плюс у нас есть сервис Title, который, как вы понимаете, обновляет заголовок, отображаемый в окне браузера. Достичь этого можно просто и незамысловато: просто добавить значение тегу <title> в заголовке документа. Впрочем, здесь, увы, мы не сможем использовать стандартную Angular-привязку: <title>{{ myTitle }}</title>, так как <head> не находится внутри Angular-компонента. Поэтому здесь мы должны использовать сервис Title. Использовать его очень просто: Дабы позволить социальным сетям обнаружить эти мета-теги, они должны быть представлены на странице в момент ее загрузки (без использования JavaScript).   ng-container Пытались ли вы когда-либо поместить две структурные команды на один и тот же элемент, впоследствии обнаружив, что вы не можете это сделать? Или, возможно, вы применяете при этом ngTemplateOutlet, отмечая, что сие не позволяет в качестве дочернего, а лишь как родственный? Согласны, это может быть весьма утомительно, особенно если единственный способ решить сей ребус - добавить обертку в виде <div>, что, безусловно, может "замусорить" существующую DOM-структуру. К счастью, существует ng-container, что позволит вам избежать подобных проблем. Этот элемент, доступный при разработке, на самом деле не создает никаких новых элементов в структуре DOM-дерева и может быть прекрасным решением для обеих вышеназванных ошибок и даже более! К примеру, дабы использовать несколько структурных деректив, мы может просто сделать следующее: После чего просто применить существующий темплейт в качестве дочернего: Это лишь малая часть возможных применений сего инструмента, уверяю вас, при желании ng-container можно использовать и для более широкого круга задач. Декоратор атрибутов Все мы знаем, что свойства-декораторы @Input и @Output используются для привязки и порождения событий. Впрочем, существует другой, менее известный декоратор, @Attribute. Этот декоратор чем-то похож на @Input-декоратор, так как он может быть использован для передачи значения компоненту. Привязка атрибута чем-то похожа на scope-привязку AngularJS: Для начала, давайте изучим ограничения декоратора!             - Любые значения должны быть представлены строковым типом данных             - Значения статические и не изменяются, в отличие от привязок             - Мы не можем использовать синтаксис привязки [attribute] В то время, как существуют определенные незначительные ограничения, выигрыш от повышенной производительности будет более значимым. Они могут быть использованы точно так же, как и @Input-декоратор:   Мониторинг изменений профиля Я уверен, все мы знаем о функции enableProdMode, что будет вызвана в main.ts-файле любого проекта Angular CLI. Впрочем, здесь также существует функция enableDebugMode. Конечно, мы можем думать, что, мол, если я не работаю в прод-режиме, значит, я работаю в режиме отладки, но, кхм, все не совсем так. Вызывая эту функцию, мы получаем дополнительный инструмент - window.ng объект, что называют профилировщиком. Профилировщик имеет в своем арсенале функцию timeChangeDetection, при вызове которой выводится консольная информация о том, сколько произошло change-detection - циклов (а также о том, сколько времени они заняли). Может быть очень полезно при профилировании приложений с низкой производительностью. Для вызова функции добавьте следующее в коде bootstrap: Для запуска профилирования, введите в DevConsole следующее:   NgPlural Во многих приложениях бывают случаи, когда необходимо описать определенное число элементов, и в рамках нашего приложения нам нужно предусматривать различные ситуации. К примеру, рассмотрим следующие варианты:             - Предметов нет вообще             - Есть только один предмет             - Есть только два предмета Директива же ngPlural очень проста в использовании, и предназначена она для обработки подобных случаев:   ngPreserverWhitespaces & NgNonBindable Я решил сгруппировать две эти директивы, так как используются они в принципе в схожих условиях. В Angular 5 существовала опция preserveWhitespaces, добавленная в angularCompilerOptions. Если бы ее значение было равно false, оно бы позволило компилятору избавиться от пробелов, которые не считались существенными. Конечно, читабельность могла бы пострадать, но, с другой стороны, это позволило бы уменьшить размер пакета. Впрочем, бывают случаи, когда мы желаем сохранить пробелы. Если мы хотим оставить целый компонент нетронутым, нам необходимо просто использовать опцию в декораторе компонента: Впрочем, мы также можем желать оставить нетронутым пробел в определенном DOM-элементе. В таком случае мы можем использовать директиву ngPreserveWhitespaces. Также мы можем использовать {{ }} в нашем документе, впрочем, в любом случае Angular сочтет это за использование интерполяции и попытается оценить, что находится внутри ее. В таком случае нам придется кстати ngNonBindable.   Ну, вот и все! Здесь были описаны 10 вещей, которые вы могли не знать об Angular. Надеюсь, вы найдете их полезными! Автор перевода: Евгений Лукашук Источник
Notification success