Рекомендую для знакомства с синтаксисом: https://www.w3schools.com/sql/
Это больше справочник, но есть возможность прямо в браузере писать запросы.
Книга "SQL для простых смертных" - сам читал, довольно полковая.
На домашний компьютер можно поставить продукты от MS:
MS SQL Ecpress - бесплатный SQL сервер
MS SQL Managenet Studio - бесплатная среда разработки
Учебные базы данных: https://github.com/Microsoft/sql-server-samples/tree/master/... Надо скачать скрипты создания БД и запустить их.
Думаю здесь надо подходить с разных точек зрения.
Во-первых, нужна систематическая база по самому языку. Лично я бы рекомендовал "Полное руководство по Java" от Шилдта. Сам читал его уже 2 раза и планирую перечитывать. Очень качественно, и самое главное полно и методично, рассказывается про язык. Можно читать параллельно с практикой.
Когда уже будет какой-то опыт можно взяться за "Философия Java". Сам уже 2 раза читал. Объясняется почему язык устроен именно так, а не иначе.
Во-вторых, это практика. Лучшая среда разработки для Java (и лучшая среда разработки вообще с которой я работал) IntelliJ IDEA. Хз что будет, вроде как уходят с российского рынка.
Насчет курсов точно не скажу. Коллеги с работы хвалят Sptepik.
Начиная с Джавы 8 элементы перечислений можно использовать в switch().
Я обычно делаю примерно так:
switch(enumEl):
case enum1:
//somecode
break;
case enum2:
case enum3:
//somecode
break;
default:
//some code
Sales (MonthId int, RTN int, sales_rub float)
Где MonthId - Id месяца, вида 202101, где первые 4 цифры год, 2 последних – номер месяца
, RTN – Id рук-ля товарного направления (РТН)
Написать скрипт.
Добавить столбец, где будет рассчитана разница между среднемесячным (за квартал) значением продаж и текущим значением продаж в месяце
Можете ещё подсказать, как такой запрос выполнить? Хотя бы с чего начать.
AVG - агрегатная функция, которая возвращает среднее значение.
Сначала надо найти средние значения за квартал, а потом эту таблицу присоединить выборке с группировкой по месяцам. Соединять по номеру квартала + год.
В Базе данных есть 2 таблицы:
Sales (MonthId int, RTN int, sales_rub float)
Plans (MonthId int, RTN int, plan_rub float)
Где MonthId - Id месяца, вида 202101, где первые 4 цифры год, 2 последних – номер месяца
, RTN – Id рук-ля товарного направления (РТН)
Написать скрипт.
Который выведет сумму фактических продаж и плановых продаж по месяцам(MonthId) за 2021 год. При этом план может быть не по всем РТН, а продажи есть у всех РТН, по которым есть план.
SELECT s.Monthid,SUM(s.sales_rub), SUM(p.planes_rub)
FROM sales AS s
LEFT JOIN Plans AS p
ON s.Monthid = p.Monthid
AND s.Rtn = p.Rtn
WHERE s.Monthid LIKE'2021%'
GROUP BY Monthid
;
Добрый день!
Соединение по РТН не нужно, так как группировка делается в разрезе месяца.
Тут вопрос: если продаж и планов нет на какой-нибудь месяц, то его надо выводить или нет? Если нет, то такое решение подойдёт, если надо - то придётся усложнять.
Так как факт всегда есть, когда есть план, то можно использовать простое соединение - JOIN, а не левое соединение.
смысл дергать вас по одному вопросу, если для этого полно чатов, где поможет не один чел, а сразу много? Как долго ждать ответа если вы заняты например? )
SQL - это стандарт.
MySQL - это одна из реализации этого стандарта.
Вообще на сегодняшний день уже созданы десятки разных СУБД. Все они в разной степени поддерживает SQL. Это означает, что процентов 90 того, что создано в рамках стандарта SQL будет работать на всех этих СУБД.
К тестированию лучше подходить с точки зрения, что любое ПО постоянно меняется. Не всегда в лучшую сторону, но меняется постоянно.
Наличие тестов позволяет значительно ускорить внесение изменений. Допустим у Вас есть программа из 10 классов. В один из них Вы добавили новую функциональность. Но классы же связаны между собой. И чтобы убедиться в правильность работы желательно всё протестировать, или ошибка всплывёт при работе приложения.
Первый вариант - ручное тестирование. Когда изменения в программе становятся небольшими, по сравнению со всей программой, то ручное тестирование начинает занимать в разы большее время по сравнению с самой разработкой.
Вот тут мы приходим к тому, что нужно этот процесс автоматизировать.
Суть простая - на каждый метод каждого класса создаётся тест - то есть вызывается этот метод и мы знаем, что должны получить.
Желательно запускать с неправильными данными: передавать отрицательные числа, нули или очень большие значения и смотреть, что произойдёт.
enum.valueOf() будет искать элемент перечисления, название которого совпадает с переданной строкой. Допустим у нас есть перечисление enum ANIMALS{ CAT, DOG}; Если вызвать ANIMALS.valueOf("DOG"), то метод вернёт элемент перечисления DOG.
Так же для сравнения элементов перечисления можно использовать ==, так как все элементы перечисления это статические объекты, то и ссылки на них равны.
Метод object.equals() будет работать по той же причине.
Вот код класса:
public class Main {
enum ANIMALS {DOG, CAT};
public static void main(String[] args){
System.out.println(ANIMALS.valueOf("DOG"));
ANIMALS animal = ANIMALS.DOG;
if (animal == ANIMALS.DOG)
System.out.println("Равны!!!");
if (animal.equals(ANIMALS.DOG))
System.out.println("Тоже равны!!!");
}
}
Есть несколько вопросов на которые я не смог найти адекватного ответа. Я джаву изучаю всего пару месяцев, так что простите если где-то глупость спросил.
1. Type alias. Я могу в С++ написать using MyType = std::vector<std::pair<std::string, MonstrousSuperClass>> и дальше везде использовать MyType, что заметно повышает читаемость кода. Есть ли что-то аналогичное в джаве?
2. Можно ли как-то сделать константные методы? Хочу написать интерфейс, в котором будет чётко видно, что некоторые методы не должны менять состояние объекта (т.к. я на это опираюсь при реализации некоторых алгоритмов, работающих с объектами этого типа).
3. Есть ли какой-то аналог декораторов из питона? Хочу, например, сделать мемоизацию функции (т.е. обёртку, которая будет запоминать с какими аргументами вызывали функцию и в следующих вызовах сразу возвращать сохранённый результат для "запомненного" набора аргументов). Ну или хочу сделать обёртку для автоматического ретрая в случае некоторых исключений.
4. Если я не собираюсь заниматься мобильной разработкой - какие есть у джавы преимущества над сочетанием "питоном + С++"? Это не попытка начать холивар, а вполне искреннее любопытство, т.к. пытаюсь понять, насколько мне вообще имеет смысл погружаться в этот язык.
1) Насколько я знаю, такого нет.
2) Возможно Вам поможет использование аннотаций. То есть создаёте свою аннотацию и помечайте ей те методы, которые не должны менять состояние объектов.
Возможно поможет использование final перед описанием параметров методов. Это запретит менять входящие объекты, но не их содержимое.
3) С питоном знаком поверхностно, не очень понимаю как должно работать.
4) Думаю, что особых преимуществ нет. Мобильная разработка под андройд, наверное основное преимущества Джавы, как языка для изучения. Сочетание Pyton и C++ - очень хороший вариант для широкого круга задач.
JPA - это спецификация. То есть как должно работать объектно-реляционное отображение.
Hibernate - одна из реализаций этой спецификации.
Попробую привести аналогию. Легковой автомобиль - это четырёхколесное транспортное средство с двигателем и массой до 3,5 тонн. Это аналог JPA.
А вот Lada седан или Газель - это уже реализация (аналог Hibernate).
Привет, я в мире Java относительно недавно. В прошлой работе не вижу перспективы, да и достиг там потолка, а с переходом в Java открылись такие большие широты, что сложно сориентироваться. Подскажи, где можно вполне реально искать фриланс/подработку по Java? Подойдут как и мелкие доработки, так и серьезные проекты. Работаю джавистом в приличной конторе, по работе и росту всё ок. Но я "хочу заработать все деньги", поэтому в свободное от работы время за хобби у меня - фриланс по всему, что знаю)
Хочу для разминки написать какую-то банальность на Java. Скажем, калькулятор под Андроид. На чем пишут фронтенд? Какая библиотека "в тренде"? Спасибо.
В андройд свой нативный способ для визуализации.
Java AWT уже давно устарел, даже не начинайте
Java Swing - вроде современный. Вроде как ему на замену пришел Java FX, но с ним не работал.
Так же можете попробовать создать сервлет.
А что нибудь посоветуйте по оптимизации запрос на ORACLE почитать? Или обычно это происходит добавлением индексов и изменение плана запроса?
Для оптимизации 90% запросов достаточно выбрать правильные индексы. Посмотрите какие индексы уже есть.
Иногда помогает уничтожение статистики. Сама СУБД собирает информацию о планах предыдущих запросов. По мере роста БД может получиться так, что статистика уже не соответствует текущему состоянию БД. Первое время будет снижение производительности, но со временем наберётся новая статистика и всё будет работать как раньше. Если повезёт - то даже лучше.
Ещё для 9% достаточно изучить план запроса и переделать запрос. Особое внимание стоит уделить группировкам и фильтрам.
В оставшемся 1% - чистая жесть, которая требует создания временных таблиц и всяческих других извращений.
Если я правильно понял можно сделать мапу ключём в которой будет enum и значением количество вхождений.
чем отличается ioc от di? передача параметров по ссылке или значению? что лучше, linkdList or arrayList? :D
Ioc - инверсия управления. Это больше про фреймворки. Например, Collection Framework. У Вас, как у программиста, нет полного контроля за поведением. Вы можете только менять то, что доступно. То есть сам фреймворк управляет, а не Вы. В этом и идея инверсии управления.
Dependemcy Injection - тоже часть инверсии управления. Допустим у Вас есть приложение, которое что-то пишет в БД. Причем планируется поддержка разных СУБД. И для объектам нужен объект для работы с СУБД. Чтобы не переписывать каждый раз код заботу о создании объекта для подключения к БД можно вынести за пределы этих классов.
чем отличается ioc от di? передача параметров по ссылке или значению? что лучше, linkdList or arrayList? :D
чем отличается ioc от di? передача параметров по ссылке или значению? что лучше, linkdList or arrayList? :D
Ну, по очереди. linkdList и ArrayList
LinkedList реализует связный список. Он хорош когда планируется добавлять/удалять элементы в середину списка. Пример задачи: оптимизация маршрута. Есть набор точек, которые надо объехать. Нужно меняя маршрут вычислять станет лучше-хуже.
Но чтобы найти i-й элемент нужно пройти весь список.
ArrayList - хранит элементы в той последовательности, в какой они поступают. Быстрый поиск по номеру элемента. А вот добавление/удаление элементов в середину списка - просто боль.
Ещё короче: если планируется частая вставка/удаление в середину списка - то лучше LinkedList. Если обновление списка не планируется, или происходит редко, но часто нужно считать элемент с нужным индексом - то ArrayList.
Обратите внимание, что все коллекции реализуют интерфейс List, то есть с обоими коллекциями можно обращаться одинаково, если использовать методы общего интерфейса List.
Привет , очень поможет небольшое описание возможности фреймворка sprint просто коротко и на пальцах.
хоть и говорят что java может работать где угодно, но у меня пока нет понимания как примеру она на симках может работать , хотя кто то прокидывал такую информацию.
Помощники
236 постов785 подписчиков
Правила сообщества
Нельзя обсуждать Политику.
Ругаться и оскорблять.