Это копия, сохраненная 26 января 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Продолжаем сидеть на карантине, отныне и на java есть удаленка
Q: Поздно ли вкатываться в айти в 20/30/40/100 лет?
А: А хуй его знает, с этим ковидом
https://github.com/random76/Java-Thread/wiki
https://github.com/qqqlll/Java-Thread/wiki
Это на мидла тестовое, я ниже кидал на джуна. Там проще, без шифрования и всякой хуйни.
Ну в прошлом треде многие проголосовали за эту пикчу
Не нужно. Это не рандомное онэмэ.
Не вкатишься, уважающий себя тимлид-джавист не станет тратить время на собеседование человека без образования.
>>мне это все в psvm запустить?
через спринг бут, например
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
>>Как мне затестить UserService?
Создаешь юнит тест через junit и тестишь, в чем проблема то? Репозитории в тесте сервиса мокаешь через mockito.
class UserServiceImplTest {
@InjectMocks
UserServiceImpl userService;
@Mock
UserRepo userRepo;
@BeforeEach
void init() {
MockitoAnnotations.initMocks(this);
}
@Test
void loadUserByUsername_success() {
User mockUser = new User(){{
setUsername("username");
setPassword("pass");
setEmail("
}};
when(userRepo.findByUsername(anyString())).thenReturn(mockUser);
UserDetails user = userService.loadUserByUsername(anyString());
assertNotNull(user);
assertEquals(mockUser,user);
}
>>Читаю-читаю, но до сих пор не могу понять
Ты спринг кор или спринг бут то уже освоил?
>>мне это все в psvm запустить?
через спринг бут, например
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
>>Как мне затестить UserService?
Создаешь юнит тест через junit и тестишь, в чем проблема то? Репозитории в тесте сервиса мокаешь через mockito.
class UserServiceImplTest {
@InjectMocks
UserServiceImpl userService;
@Mock
UserRepo userRepo;
@BeforeEach
void init() {
MockitoAnnotations.initMocks(this);
}
@Test
void loadUserByUsername_success() {
User mockUser = new User(){{
setUsername("username");
setPassword("pass");
setEmail("
}};
when(userRepo.findByUsername(anyString())).thenReturn(mockUser);
UserDetails user = userService.loadUserByUsername(anyString());
assertNotNull(user);
assertEquals(mockUser,user);
}
>>Читаю-читаю, но до сих пор не могу понять
Ты спринг кор или спринг бут то уже освоил?
>>мурзилку
Откуда это слово то пошло? Звучит как то пренебрежительно. Выходит анон считает бумажную книгу от rackt более авторитетным источником, чем любая официальная дока в интернете?
К примеру https://tools.ietf.org/html/rfc7519 или https://docs.oracle.com/en/java/index.html это тоже "мурзилки"?
Спасибо большое! Сейчас буду пробовать запускать.
>Ты спринг кор или спринг бут то уже освоил?
Нет же, я думал спринг дата - это автономный фреймворк, которому не нужны прочие спринги. Поэтому и принялся читать по советам анонов сразу после хибернейта.
>>43282
Мурзилка - это говняк статьи/курсы. "Справочная документация" звучит как-то сложно, поэтому пусть тоже будет мурзилкой.
Его наверное можно и автономно использовать, но лучше поставь себе спринг бут и не еби мозг себе и окружающим. Там гайд по хелловорлду на спрингбуте на 1 страничку. Зато у тебя сразу все заработает без регистрации и смс без конфигов в хмл. Ну и спринг тест заодно подключи - там junit и mockito уже есть.
Окейчики.
Если просто голое джава-приложение, то в мавене драйвер базы данных в зависимостях и все. Дальше с jdbc работай.
Спасибо.
Вылезли из говна?
Goвна? Кто-то вляпался (в основном, питонщики, пхпшники и макакаскриптеры), кто-то не лез.
Пользователь сохраняет файл, я добавляю к имени UUID и сохраняю, а теперь нужно этот файл прочитать и отдать ему с исходным названием, отрезав лишнюю часть с UUID. По гайдам его надо через File или Path копировать или переименовывать, но мне эти файлы на диске не нужны, записывать их в систему/копировать/удалять излишне. Могу конечно в ResponseEntity контролера просто указывать другое имя, но логика не должна утекать из сервиса в контроллер. Это все на спринге само собой.
Как это все реализовать? В голову приходят мысли просто сохранять исходное название отдельно и присылать его вместе с файлом от сервиса контроллеру. Но как то это костыльно выглядит. Должно же быть достаточно элегантное решение. монгу пока не пробовал, возможно она станет решением проблем
Я обычно после 700 пощу. Раз тред только начался, построил по последним 6 тредам.
Ну и небольшой бонус, пока двощ опять не начали дудосить.
Самый ассоциирующийся с бекендом язык у нас по-прежнему PHP, аниме в /pr/ обсуждать в целом не любят, а о работе чаще всего вспоминают пхпшники и макакаскриптеры (искать просто слово "работа" нельзя, ибо оно часто юзается в значении "помогите, почему X не работает").
Поясните плес ньюфагу, что происходит под капотом с хэшами объектов, когда с ними оперируют структуры коллекций для совершенствования поиска. Правильно ли я понимаю, что даже разные хэши попадают в один "сегмент" (bucket) пула хэшей (или как оно там может называться, хз, я не нашел где изучить, потому и спрашиваю)?
В чем вообще прикол домножения на простое число вроде 31 в процессе переопределния hashCode()? все что мне в голову приходит, это нужно чтоб размазать диапазон значения хэшей пошире, например с 0...10 до 0...310. Но если складывание в бакеты происходит по принципу остатка от деления (хз, так ли это), то там выходит есть какое-то требование, чтоб бакетов было строго не равно числу, используемому при домножении? (иначе домножение просто смысл теряет, все равно все будет "падать" в один и тот же сегмент).
Хз, кажется пояснил свои мысли как даун, но может кому-то будет понятно.
>даже разные хэши попадают в один "сегмент" (bucket)
Ну конечно попадают, куда им еще деваться, когда домен хешей int, а бакетов всего 16 по дефолту?
Взять .hashCode() у объекта это первая стадия, далее хеш приводится к индексу массива (номеру бакета) внутренней функцией hash, которая тоже что-то там гарантирует, типа что не будет больше чем 8 элементов в бакете при нормальных условиях (uniform распеределении хешей). 8 там это такое магическое число, при котором связный список переходит в дерево (нововведение в Java 8).
>В чем вообще прикол домножения на простое число вроде 31
Существуют и другие числа. Да, чтобы растянуть хеш, и чтобы вычислялось относительно просто. Подробнее хотя бы тут:
https://stackoverflow.com/questions/299304/why-does-javas-hashcode-in-string-use-31-as-a-multiplier
>когда домен хешей int, а бакетов всего 16 по дефолту
ну вот это вот как раз и хотел увидеть достоверно. Потому что во всяких популярных статьях для вкатывальщиков иногда указывается, что назначение всей затеи просто дать возможность "искать не по набору из 100 полей, а только по хэшу". И только если есть коллизия там уже вызвать equals. Если взять это на веру, то быстрее будет даже если бакетов 4g штук, ведь искать все равно надо только во одному значению int.
Идея хеш-таблиц в том чтобы для каждого хеша приведенного к номеру бакета в бакете был только один элемент. Т.е. в идеале - один бакет = один элемент. Причем equals нужно вызывать в любом случае даже если всего один элемент. А любая коллизия это зло. Число бакетов есть capacity таблицы. Начинаем с 16 с загрузкой в 0.75, т.е. при достижении 12 элементов в таблице (даже если они все в одном бакете изза неудачного хешкода) таблица расширяется и элементы перераспределяются (ре-хеш). Операция дорогостоящая, поэтому важно понимать как все работает внутри и какие параметры выставлять в конструкторе.
>Так по ссылке вообще ничего нет, кроме ссылки на Блоха, где он и сам просто говорит "так нада".
А чего именно ты ждал? "Так надо" потому что это уже лет 30 назад было протестировано вместе с другими числами, а потом доказано теорией - нечетное простое число, хорошо расширяет базовое число и относительно просто вычисляется (в две операции - сдвиг и вычитание).
>нихрена не понял. так сколько в итоге бакетов?
Совершенно верно, они расширяются при необходимости (но не уменьшаются, поэтому нужно пересоздавать хешмапу сли много добавил а потом много удалил - она все равно места много жрать будет поюзанная но пустая). Бакеты находятся в прямой зависимости от количества элементов в коллекции, и как я выше сказал - идеально чтобы одному элементу свой бакет. Дефолтная хешмапа дачинает с 16ю бакетами и лоад фактором в 0.75, т.е. 12 элементов изначально можно добавить безопасно до первого ре-хеша.
16 гигабайт на микросервис должно хватить
бееекенд
Самый анимешный тред, считаю это достижением.
И еще, если запустить три раза такой стрим, но с filter + forEach, то как-то возможно синхронизировать их исполнение, чтобы они по одному элементу пропускали, а потом вставали на задержку, пропуская следующий стрим, и так далее? что-то вроде yield-return в шарпах.
как вообще такое решить красиво на стримах?
Как будто не на легаси джави пишешь:
https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition
А вообще вот норм решение - https://javarevisited.blogspot.com/2015/04/fizzbuzz-solution-in-java-8.html?showComment=1429962405529#c462468318572005480
>https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition
Самое смешное, что этот монстр падает с NPE.
> IntStream.rangeClosed(1, 100)
> .mapToObj(i -> {
> if ((i % 15) == 0) return "fizzbuzz";
> if ((i % 3) == 0) return "fizz";
> if ((i % 5) == 0) return "buzz";
> return null;
> })
> .filter(Objects::nonNull)
> .forEach(System.out::println);
Как любое легаси
https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition/issues/434 - вот фикс на который положили хер
как тогда это сработает? (из второго примера в том посте)
public static String fizzBuzzInJava8(int number) { String result = Optional.of(number) .map(n -> (n % 3 == 0 ? "Fizz" : "") + (n % 5 == 0 ? "Buzz" : "")) .get(); return result.isEmpty() ? Integer.toString(number) : result; }
А, я в шары долблюсь. там же еще проверка на налл дописана
Какая-то сложная пиздецома для меня. Я второй день стримы только пробую.
>>https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition
Зачем интерфейсы хранить отдельно от реализации? Неудобно же.
Вот ты смеешься, а ведь это нихера, блять, не смешно.
https://www.securitylab.ru/news/509722.php
Где файл то хранится? Куда его сохраняют? В каком виде собираешься отдавать? Ничего не понятно.
Муськой уже никто не пользуется. Мы за слоника.
Ты еблан?
мне нужно менять значения нескольких переменных перед прогоном тестов
Выражайся четче, что тебе надо задать флаги JVM которая запускает Maven. Или флаги JVM которая тесты запускает?
Если второе, то у surefire плагина надо задать <argLine> вот пример
http://maven.apache.org/surefire/maven-surefire-plugin/examples/fork-options-and-parallel-execution.html
мне нужно создать свои дополнительные флаги для команды mvn clean test, которые будут менять значения переменных(напр. адрес хоста)
Возможно, ты хочешь это: https://stackoverflow.com/questions/5510690/environment-variable-with-maven
решил сделать для себя небольшой пет-проект в виде календаря/таск менеджера под андройд.
Реквестирую подходящую литературу по жаба фуфыкс чтобы всё это по человечески реализовать.
Есть небольшие познания в джава уровня основ языка, просто хочу сделать что-то для себя, мотивация есть, а вот с источниками знаний проблемы, посему и создаю данный тред
> фуфыкс
Принципиально? Пока ты будешь его изучать и разбираться, как его запустить на андроиде, 100 раз уже успеешь наформошлёпать нативными средствами андроида.
Если не шаришь в самом андроиде, вот пара мурзилок:
- https://startandroid.ru/ru/uroki/vse-uroki-spiskom.html
- http://developer.alexanderklimov.ru/android/
спасибо огромное!
MAVEN_OPTS или -D в помощь
Хорошо, но мавен у меня тоже последней версии. Кстати, еще вопрос, тот мавен, что в IDE и тот, что я установил в PATH один и тот же? Не пробовал до установки создавать мавен проект.
>>Где файл то хранится? Куда его сохраняют?
На жестком диске
>>В каком виде собираешься отдавать?
Как обычный файл. В том же виде, в котором его загрузили.
В итоге стал передавать как массив байтов, File/Path как я понял это просто ссылка и данных в себе он не несет, а значит его передавать контроллеру бессмысленно. Имя файла хранится в базе данных, и когда нужен файл - достаю файл с диска, перегоняю в массив байтов, массив и название из базы засовываю в дто и отправляю контроллеру, а тот эти байты перегоняет в Resource, прикрепляет название и отдает пользователю.
В итоге файл который пользователь скачивает имеет тоже название что и при загрузке на сайт, но на физическом носителе на серваке он хранится под своим уникальным именем вроде f467026a-bbd7-409f-846d-492793c70535.pdf
Это и в последней версии так.
http://maven.apache.org/plugins/maven-compiler-plugin/
Полагаю, это поведение по умолчанию не меняют, чтобы что-то не сломалось.
> один и тот же
Не юзал эклипс, но почти наверняка он тащит свой мавен сам. И у тебя два разных мавена в системе.
У быдлокодеров работа встала!
Спасибо.
Можешь дать пару слов комментариев о ней? Просто я начинал читать хедферст по самой джаве и чуть не блеванул от стилистики книжки.
> Можешь дать пару слов комментариев о ней? Просто я начинал читать хедферст по самой джаве и чуть не блеванул от стилистики книжки.
Я не тот чел, но скажу, что хедферст по паттернам на удивление заебись написан. В отличие от говна по джаве
Кто тебе сейчас, мешает наследоваться и реализовывать?
Эрих Гамма и Ричард Хелм говорят заебись.
Выбора у тебя не так много - банда четырех по хардкору на плюсах.
Хед фест - картинки и комиксы вперемешку с кодом и объяснением.
Вроде как еще есть Гранд - Шаблоны проектирования, тож на джава, но его не читал, вроде как что то среднее между 1 и 2.
Вобщем читай хед фест - если потянет блевать хотя конкретно эта книга от ХФ норм, как уже отмечали выше - переключайся на Гранда.
А потом почитай почему половина этих патернов уже стали антипатернами.
> чуть не блеванул от стилистики книжки.
есть такое. но справедливости ради, разжевано в ней все достаточно годно. Хоть и подача как для даунов. не сильно-то и блевотнее того же Файна.
Spring, все паттерны проектирования. Страниц 50 осилил, вроде норм.
В прошлом треде её у анона увидел.
Ты про пикрелейтед? Судя по имени и издателю самая рассово верная книга по паттернам.
https://itnan.ru/post.php?c=1&p=504638
Но я совсем не знаю спринг.
https://refactoring.guru/ru/design-patterns
по запросу паттерны на джава - первая ссылка на руссом сабж. Там сайт и книга.
Стоит читать?
Это всё магия исполняющей среды, в данном случае JVM, статик тут не при чём. Например, когда ты вызываешь метод из какого-то потока, JVM ведь тоже как-то понимает, что запускать его нужно именно в том потоке.
Ну, просто эффект от выполнения чего-то вроде Math.pow(2,2); будет одинаков для любого потока, потому что никакой код не использует контекст вызова. Хотя, безусловно, вызов делается из какого-то потока. Но вызов Thread.sleep() всякий раз имеет результат, зависящий от вызывающего потока. Еще можно было бы понять, если бы потоки имели каждый свой heap, но, насколько я понимаю, треды эксплуатируют все одну кучу своего процесса. Как в одной куче могут быть разные статик-элементы для класса Thread?
В общем случае не одинаков. Среда должна знать, в какой поток возвращать результат, к тому же бывают ThreadLocal-переменные.
"Статик-элементы" одни и те же, это сам sleep понимает, какой поток его вызвал.
Олсо, все что в голову приходит, это что имеет место какая-то особенность реализации, что эти классы static только для пользователя, а для исполняющей среды "не совсем static". Только в чем смысл этого? почему не вызывать sleep из под самого треда this.sleep()? чем так было бы хуже?
Это же прекрасно. Всегда знаешь, где, что и чем инициализируется, всегда можно в одном классе юзать несколько апишек. А при наследовании у тебя что-то неявно вызовется и ёбнет, и долго будешь искать, почему у тебя при создании объекта эксепшен.
Пришлось как-то дебажить один код с целым деревом абстрактных классов и постоянно прыгать по ним, пытаясь понять, куда дальше пойдёт вызов. Как же я проклинал того, кто это придумал.
Погуглил немного. В целом, ясно. Думаю для вкатывальщика это слегка глубоковато и пока можно не морочиться над такими тонкостями. Спасибо за подсказки.
Чувак "вспылил" в относительно стрессовой ситуации и не осилил условия задачи, хотя в примерах было показано что на входе и что на выходе.
Итого, выглядит это как: "Вы мне всё тут распишите досконально, а я уж вам наверчу архитектуру! Да с паттернами! Да с женериками!". А бизнес не волнуют паттерны, его волнуют деньги, которые принесёт автоматизация процессов. И, зачастую, задача инженеров, начиная с senior, а уж тем более staff, понимать и выяснять требования заказчика. И ублажать его, ага. А что поделать.
>this.sleep()?
Можно. Ничем не хуже, только писать больше. Конечно есть отличия, гугли если интересно "java 8 wait vs sleep", но для тебя результат будет аналогичен.
Просто запусти сборку, мавен сам увидит, что чего-то не хватает локально, и скачает.
mvn clean package.
Мда.
Могу я как-то использовать этот класс без компилятора груви? Или может есть отдельная библиотека какая-то для такого синтаксиса строчек? Или, там, в недрах Гуавы есть что-то похожее?
Синтаксис списков и for (i in 1...10) тоже конечно очень приятны но без них моя жизнь сильно хуже не станет, учитывая существование стримов.
Держи братан, я тебя ждал. https://gist.github.com/Stingray42/feb16623f1328dd8d1eb42fafdec8612
Обозначить некоторое подмножество английского языка как формальный язык для описания байт-кода. Например:
The first byte is two hundred two
The second byte is two hundred fifty-four
The third byte is one hundred eighty-six
The fourth byte is one hundred ninety
Написать тулзу для преобразования в байт-код не составит труда.
Жава не про это
Загугли название чата.
Стиль один-в-один гугловский, буээээ.
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
С 8.0.18 на 8.0.20, запустил компиляцию mvn clean compile, но идея выводит предупреждение "Duplicating managed version 8.0.20 for mysql-connector-java". Что можно прописать, чтобы этого не было?
Динамикодрисня как всегда не меняется.
Маша, 2, 1500
Даша, 3, 1500
Вера, 2, 1200
Зина, 4, 500
Корзина, 3, 1200
___должны отсортироваться так:
Вера, 2, 1200
Маша, 2, 1500
Корзина, 3, 1200
Даша, 3, 1500
Зина, 4, 500
О, тут уже улучшают ту задачу на шлюх. Потом из этого вырастет энтерпрайзное приложение и кто-то разбогатеет.
удобно оказалось со шлюхами, у них много параметров можно придумать за 10 сек.
Олсо, задача конечно не сложная сама по себе. Вопрос скорее правильно должен звучать, как это сделать наиболее кратко, за один проход стрима например
просто напиши компаратор не лямбдой, а создай класс который имплементит интерфейс Comparator в котором переопредели метод compare так, чтобы он сравнивал по двум полям
>>47428
Ну, про thenComparing компаратора я знаю. Меня скорее интересует это с точки зрения мощности стримов как инструмента. Окей, пусть надо по трем полям это сделать.
Можно ли например отсортировать сначала по одному полю, потом как-то собрать куски сортировки в Listы, в каждом из них зародить собственные стримы, не выходя из внешнего, и сортировать уже там, и так далее, а потом как то выйти и все это обратно разобрать в один List. Что-то такое. Учитывая что все там как-то по ебанутому работает, с конца выражения и вот это вот все, мне не хватает понимания их работы чтоб понять можно ли так в принципе
ну да.
Иди лисп уч
через thenComparing любой осел сделает. ты в шары что ли долбишься, я же написал что интересует не решение само по себе, а возможность так написать цепочку Streamов без потомСравнение
>за один проход стрима например
Ты бы хоть почитал про стримы для начала, про промежуточные и терминальные операции, всю эту хуйню.
Если коротко и с учётом, что пишу я это в пятницу и в говно, то вот допустим государство локализовало проституцию, и тебе надо посчитать цену любой шлюхи после ндс.
Т.е.
stream().map( whore -> whohre.getPrice() 1.2).findAny.get()
не будет каждый прайс перемножать, перемножится только первый и его же тебе отдаст.
>>47438
>как-то собрать куски сортировки в Listы
groupingBy()?
>в каждом из них зародить собственные стримы
У стримов есть метода parrallel() или как-то так. Если ты хочешь параллельно что-то хуярить. Но это мутная хуйня, вроде у Блоха упоминалось, что для того, чтобы распаралелливание начало приносить профит по производительности надо чтоб число элементов число операций было больше 100к или как-то так. Смысла в этом мало, сейчас мощности процессоров такие, что мозга ебать многопоточностью смысла мало. Всё скорее упрётся в пропускную способность интернет канала и HDD/SSD, чем процессор.
Скорее ты будешь SQL запрос оптимизировать, чем распараллеливать что-то.
>Ты бы хоть почитал про стримы для начала, про промежуточные и терминальные операции
и так все это знаю и понимаю.
>надо посчитать цену любой шлюхи после ндс.
збсь пример. правда, простой как 5 коп. и вообще не о том. хз зачем ты его привел. разве чтоб поучаствовать в проекте по энтерпрайзу шлюх.
>Но это мутная хуйня
Бля, но я бы и не стал тут спрашивать как хэлоуВорлд написать
>пишу я это в пятницу и в говно
кстати, заметно
тем не менее, блаадарю за попытку. я понял что это говно достаточно сложное, чтоб никто на практике не стал это делать
Так а чё ты спрашиваешь тогда, раз понимаешь?
thenComparing, тебе выше написали.
Жаба там сама всё оптимизирует. Это не тот язык, где надо этим голову ломать. Хуярь бизнеслогику, делай вэлью.
Капитализм, счастье, заебись.
>Можно?
Конечно, но тебе не понравится процесс. Удобнее использовать предназначенные для этого инструменты, которые аноны выше написали.
Применение шаблонов Java Стивена Стелтинга
refactoring.guru для каждого шаблона есть примеры на разных языках, в том числе и на Java
то есть вместо того, чтобы набрать в поисковике какого-нибудь торрента-сру ровно одно слово, ты сначала приперся сюда, я правильно понимаю?
я спрашиваю про активацию, то есть не крякнутую штуку, которая блочит тебе обновления, а полноценный прикол от джетбрейнса
тогда тебе надо быть студентом. там есть какая-то поддержка для них, с выдачей во фрии анлимит-версий
ну а как ты хотел? как, блять, может быть одновременно и спизжено, и не крякнуто? я только не понимаю нахуя тебе обновления эти. ты что ли из тех клоунов которые любой софт на своем пк держит в состоянии полного максимума версии?
еще варик есть - отсосать кому-то у кого лицуха уже есть. ты вроде похож на гея своими манерами. как тебе такой совет?
То есть "впердолить агент" это нечто, не связанное с торрентом и вообще пиратками?
> вертекс
чет дрисня какая-то, не? вразнобой всего натыкано, про обобщения вообще ничего не увидел
этот гей мог бы тебя разъебать по фактам, такие двачерки как ты отлетают за одно сообщение плакать в подушку, но я просто сказал тебе, чтобы ты мне не писал
Тебя ебать не должно.
Нет, фасоль Ява лучше.
Хуйня. Ты на спринговые репозитории из одного интерфейса насмотрелся что ли? Под капотом там такие же лютые запросы через JdbcTemplate или че-то подобное.
Посоны есть пример вкатывания мидлов/синьоров в джаву с другого бекенд стэке? Это вообще имеет смысл? Хочется сложности, нагрузок и денег.
Нет, это прокси ебаное. Вся логика внутри repository, и ее тут не видно.
Но сами-то репозитории предоставляют легковесные методы, типа получить шлюху по имени, получить шлюх по ценам. А если мне надо написать запрос на получение шлюх с сотнями джоинов к другим таблицам, тысячью юнионами и тд. Уместно ли для этого использовать репозитории?
Ты вызываешь метод whoreRepository.getWhoreByName("Natasha"). Тебя ебет, что там внутри?
Это означает, что клиентский код не связан с реализацией запросов и бд, а полагается на интерфейс доступа к данным - репозиторий. Почитай фаулера шаблоны корпоративных приложений или мартина чистая архитектура
Вот именно. Причем тут реализация?
А если мне нужен метод whoreRepository.получитШлюхуПоИмениЕслиИхБатиЛысыеИБратьяБатейМертвы(String name)?
Тебе нужен не метод, а другой способ описания параметров. В спринге есть замечательный методв findByExample, почитай про него.
Вроде бы это то, что нужно. Спасибо.
Спринг дата работает через орм. Запрос ты пишешь к объекту(который @Entity), а не к таблице, а спринг сам решает что к чему он джойнить будет по твоему запросу. Но если хочешь можешь конечно ебануть @Query и ебашить на чистом sql.
>Запрос ты пишешь к объекту(который @Entity), а не к таблице
Ты имеешь ввиду хибернейтовские билдеры, типа Criteria API?
ты троллишь? в чем смысл...
Не ебу что за пандас, но про эксель это Apache POI
PHP-макака?
>В спринге есть замечательный методв findByExample, почитай про него.
У by example много ограничений, и вообще это все боль спрингдаты - пока ты на уровне findByName все прекрасно, а как только понадобится что-то нетривиальное, то даже просто чтобы написать что-то напрямую с jpa, начинаются эти неуклюжие приседания с дополнительными интерфейсами. И начинаешь думать - не проще ли было чистым хибернейтом обойтись.
Чтобы использовать репозитории спринга достаточно создать интерфейс, объявить там пару методов и повесить аннотацию на main класс. Нет, зибернейт не проще. Вообще ничего проще нет.
Ты прежде чем отвечать пытаешься прочитать пост и понять его мысль? Как объявлением метода в интерфейсе сделать условное вон то получитШлюхуПоИмениЕслиИхБатиЛысыеИБратьяБатейМертвы?
https://hyperskill.org/learn/step/3658
Серьезно, сидел думал, пробовал разные решения, рисовал в тетрадке - и все равно так и не смог придумать алгоритм, который бы прошел все тесты. Пришлось подсмотреть решение, а оно оказалось таким простым, что я сейчас сижу в ахуе.
Такую тупость можно как-то исправить решением задач и написанием кода?
Юмор, конечно, на любителя, но мне нравиться как все разжевано и как медленно поднимается уровень сложности - в отличии от ебанутых курсов с курсеры и степика с их мастурбацией грейдера, сложностью и подачей материала уровня пикрелейтед хотя может я пропустил годные, посоветуете ?
>java head first - не слишком старая
Старая она конечно, но на этом самом начальном уровне оно не критично. Если нет аллергии на этот стиль, вполне годно
Ну я смарт калькулятор сейчас делаю, вот там как раз была эта тема со стеками и очередями. Правда эта задача у меня как дополнительная была, хотел просто потренироваться.
Ты че дурак?
Я свежий вкатывальщик, начинаю с Java core
Начал с видео follow the white rabbit по джаве на Ютубе
Короче, там 34 видео, и я только под конец понял, что походу автор не до конца раскрыл тему кор джавы
Опасаюсь, что могу упустить из-за этого важные вещи и пришел с вопросом
Джаву кор то по какому ресурсу лучше выучить на приемлимом уровнеперед продвижением далее?
>Джаву кор то по какому ресурсу лучше выучить на приемлимом уровнеперед продвижением далее?
hyperskill + книга хорстманна
>мурзилку
Что за уебанская лексика у нас тут теперь
>посмотришь
Так смотрел, не видел там такого. Что ожидаемо для концепции by example. И много чего еще не видел, например, запросов вида "вес шлюхи меньше". О чем и толкую.
findWhoreByNameAndBatyaHeadIsBoldAndBrothersStatusIsDead()
Ты недооцениваешь спринг, выборки по полям это ещё не сложные запросы, пирожок.
>запросов вида "вес шлюхи меньше"
findByWeightLessThan()
Нихуя ты не смотрел, там всё это есть в документации и с примерами.
Это невозможно пропустить, это гуглится за 2минуты.
Зря я в прошлом треде этот пример со шлюхами придумал, сдаётся мне, теперь в тред набежали их дети.
что за книга? почему на нее такой яростный дроч здесь? На русском есть? дай название, и имя автора желательно
>findByWeightLessThan
Чтобы не удержать в голове контекст беседы аж на два поста глубиной и забыть, что речь о "query by example", это чьим ребенком надо быть, интересно
Ты че еблан? Тебе одно сказали и у тебя другое из головы вылетело? Ты че забыл тут?
>почему на нее такой яростный дроч здесь
ну там вроде неплохо написано про джава кор. практикуясь и читая отдельные главы оттуда можно неплохо подучить кор.
на русском есть, правда забыл как называется, в шапке есть название на английском
Про findByExample тебе другой анон написал, мне нечего добавить. Я ответил тебе про запросы уровня БольшеМеньшеЧем.
Всё это есть в документации, всё это гуглится. Не понимаю, зачем задавать вопросы, на которые уже 5 лет есть ответы на том же SO.
Спринг позволяет полностью отказаться от написания простых (и не очень) CRUD запросов и сосредоточиться на бизнес-логике. Обмазываться навороченными SQL конструкциями надо только во имя оптимизации, когда у тебя база в CH на сотни терабайт.
Да блять, что ж тут все отвечают не на то, о чем написано. Вот смотри, там был анон со своими шлюхами и примером типа поИмениЕслиИхБатиЛысыеИБратьяБатейМертвы. В жизни бывают случаи, когда нужно шлюху найти вот такую и вот сякую либо вот еще такую и может быть такую. И с вот таким братьями и такими сыновьями. Которые еще в отдельных таблицах. Ты согласен, что спрингдатовые волшебныеОченьДлинныеИВитиеватыеМетодыИгнорироватьКейс не очень пригодны для всех возможных сложных случаев? И by example тоже далеко не всегда помогает.
Если тебе нужно четкий ответ на твой вопрос, то обращайся к мурзилкам, друг.
Здоровья тебе и денег
Я только после твоего ответа опять полезу шапку
И понял, что ебался в глаза и не видел кнопочки с книгами и так далее, там увидел
Спасибо большое, продолжу изучение
>еще в отдельных таблицах
Да спрингу похуй же, связи указывай и хоть как храни.
>не очень пригодны для всех возможных сложных случаев
Ясен пень, все случаи он не покрывает. Тот же CH в спринге не поддерживается и запросы приходится руками писать.
Но 99% CRUD операций спринг выполнит без проблем.
>ИгнорироватьКейс
IgnoreCase.
Я не понимаю, в чём у тебя проблема с этими методами. Там ничего волшебного нет, те же самые SQL запросы под капотом, просто не надо их писать.
Или ты и геттеры/сеттеры сам пишешь, вместо ломбока?
Так и должно быть.
Но имя автора Кей, а не Хорстманн.
О, знакомые мурзилки.
>>Что за уебанская лексика у нас тут теперь
Пару тредов назад какой то дурачек начал форсить свое слово, ньюфаги подхватили.
>Да спрингу похуй же, связи указывай
Падажжи, и для длинныхВолшебныхМетодов похуй?
>все случаи он не покрывает
О, хоть где-то мы согласились. Про 99% CRUD все понятно, но бывает в жизни не только прям круд-круд уровня "юзер редактирует справочник".
>те же самые SQL запросы под капотом
ДА ЛАДНО ПРАВДА ЧТО ЛИ. Заметь, кстати, я нигде не пишу о том, что ORM нинунжа и лучше писать SQL. Я об ощущениях от использования именно спрингдаты и о границах применимости ее волшебных интерфейсов.
>в чём у тебя проблема с этими методами
Да не то что большие проблемы, но странно не видеть их недостатки и ограничения. Забываем даже если случаи, которые они вообще не покрывают, остается тот факт, что они могут очень быстро разрастись до неприличной совершенно и нечитаемой длины. При чем ведь часто бывает, что простое становится сложным постепенно. Можно начать с понятного findByName, а потом оказаться в ситуации, когда надо добавить очередное условие, и ты либо получаешь уродливую хуйню либо идешь переписывать весь запрос на что-то другое.
А я такую доску не видел.
Пиздец как заебали с хеллоуворлдами, надо репортить.
Это всё потому, что из шапки (НЕ НУЖНА) убрали EE и спринг.
Ну вон десятью постами выше какой то срач про энтерпрайзных шлюх на спринг дате был.
Полгода уже жду, когда они вкатятся. Вот вычищатель, вроде бы, здесь, но про него ничего не слышно.
Алсо, хеллоуворлды и после 1500 обсуждают, но меньше мимокрокодилов со своими "джава - это кобол".
Какой я олдфаг, я всего-то год здесь сижу.
Ну как же?
ПОСТПРОЦЕССОРЫ БИНОВ
@
НЕСКОЛЬКО КОНТЕКСТОВ
Спрингдатые шлюхи достойны пополнить этот ряд ящитаю
Разве джава и джава скрипт - это разные языки?
>>по пиратству и убыткам от этого?
Как ты собираешься убытки считать? Спиратили 10 человек приложуку за 300 баксов - убытки 3к? Ты ж понимаешь что без пиратов ее покупать никто бы не стал все равно?
И дело не только в покупках. В пиратских приложениях отключена реклама, разблокирован платный функционал.
Когда джава апплеты возродят и мы снова их сможем увидеть в обновленном виде на любимых веб-сайтах?
Такого не знаю, ты ошибся аноном, друг.
Потому что часто это выбор не между спиратить/купить, а между спиратить/пройти мимо.
При всей моей любви к котлину, не могу понять зачем нужен kotlinjs в его текущем виде. Кажется, оно не взлетает точно так же, как все прочие попытки сделать подобное. Вообще сама по себе возможность компилировать js из джавы/котлина дает профит, только если есть много фронтэнда-кода с какой-то самостоятельной инкапсулированной логикой. Может быть для чего-то типа браузерных игр это имеет смысл.
А вот этот типичный js-код, который обновляет dom и дергает бэк, его есть смысл писать на котлине, только если в комплекте будут мощные котлиновые же либы/фреймворки, которые заменят условный реакт. А нет таких, да и не нужны, выходит.
Так и задумано с целью показать вывод в консоли. Если нужен лист то откати два последних шага и там коллект сделай, т.е. вместо
>.map(Whore::toString)
>.collect(Collectors.joining("\n"));
делай
>.collect(Collectors.toList());
Миша, какой проект посоветуешь запилить?
>бывает в жизни не только прям круд-круд
Моё уважение, если ты действительно на таком проекте. А не просто сам себе работу усложняешь.
>ORM нинунжа и лучше писать SQL
Так спрингдата это и есть же эволюция ORM, не? Сохранение сущностей, без заёбов о том, как в каких таблицах какие связи делать.
>неприличной совершенно и нечитаемой длины
А SQL запросы при это остаются приличными? Особенно учитываю эту ёбаную разметку, когда помимо самого SQL ещё и слешами всё измазывается при каждом переносе.
Дальше, ты сами методы запросов не должен напрямую использовать, их будет использовать сервис.
Ну и я не вижу ничего плохого, в том, чтобы смешивать и то и другое. Одни запросы писать на спринг дате, другие на чём-то другом, второе наследуешь от первого или как-то так и вот у тебя уже общий интерфейс. В котором ты хоть как методы можешь назвать.
>Одни запросы писать на спринг дате, другие на чём-то другом, второе наследуешь от первого или как-то так и вот у тебя уже общий интерфейс. В котором ты хоть как методы можешь назвать.
https://dzone.com/articles/add-custom-functionality-to-a-spring-data-reposito
>я планировал дочитать Блоха, сесть за алгоритмы, паттерны, роберта мартина, а потом уже осваивать
Pft,bcm
Стек по умолчанию что-то около 8 мегабайт на современных десктопных ОС. Так что его более чем хватит, если только ты не придумаешь какую-нибудь рекурсию с кучей переменных на каждом фрейме стека
При возврате из метода, все что аллоцировано на стеке удаляется. Вернее указатель стека сдвигается и эта область снова считается свободной для аллокации.
spring.io/projects/spring-data
Говно без задач
У Мокрософта было куча технологий которые они бросили. Непонятно сколько они будут с .Net Core возиться, не закроют ли завтра.
Я в курсе, что там исходники открыты, но без главного мейнтейнера проект сдохнет очень быстро.
Если страна Россия, то работы мало и в большинстве это js + ASP.net
И никто не даже не расстроился.
Да, но он к тому моменты был практически мертв, уже все перешли на пружину. К тому же EE это только спецификация, реализации там сторонние. Так что это вполне реально поддерживать силами комьюнити.
Почему ты спрашиваешь здесь, а не в точкаНЕТ-треде?
На джаве больше работы, и джава-related технологии проверены временем. Кор же появился недавно, интереса к нему мало, и рекламный лозунг, что он стал кроссплатформенным, очень сомнительный, ибо всё остальное было кроссплатформенным с самого начала. Конкурентных преимуществ у него нет, даже если он реально работает.
Вообще, я пытался как-то потыкать кор на линуксе, мне он показался очень сырым. Поддержка C# в доступных компиляторах сильно отставали от его последних версий + при гуглении сложно понять, что кроссплатформенно, а что только для винды, и узнаёшь это только тогда, когда попытался у себя запустить и пытаешься понять, почему не работает.. С джавой же сразу качаешь хоть последнюю версию JVM и запускаешь без проблем жарник, собранный хоть на винде. Может, у меня руки кривые, и на самом деле проблемы с кором решаются просто, но зачем это нужно, если джава просто работает.
В общем, если бы я ненавидел джаву, я бы скорее в говноланг вкатился, чем в эту поделку.
>Почему ты спрашиваешь здесь, а не в точкаНЕТ-треде?
Ты читал их шапку? Эти шизики сидят в своем треде и довольно нюхают свои пуки.
Что для этого можно использовать? Что-то типо мини игры (на самом деле перемещение по Множеству Мандельброта), в десктопе уже сделал.
Комменты читал к видео, по которому ты проект пилишь? Возможно это особенности мускла. С постгрессом таких проблем не было.
>Кто юзает mysql:
1) создаем базу либо через консоль, либо через десктопное проложение - create database sweater
2) в application.properties прописываем:
spring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:3306/sweater?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
>>50050
В последних версиях автоимпорт перестал работать, надо принудительно качать
Например для
whore1, tits 2, //+ other params
whore2, tits 2
whore3, tits 1
whore4, tits 1
whore5, tits 4
ответ 3, потому что есть сиськи №№1,2,4
Я подозреваю что как-то надо запилить reduce, но понять не могу как
о, блин, точно. ну я и даун. спасибо.
а через reduce можно? я не очень понимаю его сигнатуры. че он там может а чего нет, хз вообще.
>В последних версиях автоимпорт перестал работать
Как он может перестать работать? Ты рофлишь так? И у меня не последняя версия 2019.3.3 build on February 11, 2020
Добрый человек, носящий с собой чемодан тестов и помогающий ньюфагам с хелловорлдами.
Мертворождённый
Не-а.
.mapToInt(Whore::getTits).distinct().count()
Если хочется reduce то: https://pastebin.com/zKspPKvg
годно!
если я буквально дрочу на стрим АПИ, везде пытаюсь это пихать, это значит что мне надо перекатываться к функционалопидорам, или это, в целом, нормально?
А какие потом проекты на этом говне делать?
У вас стримоз, у большинства проходит со временем. Но некоторым приходится переходить на Скалу/Кложуру.
Не доводите до этого, хотя бы раз в неделю практикуйте циклы.
Это ж вкусовщина.
Двощую. Как понять, зачем вообще нужен спринг? Почему я не могу написать сервер без него? Что это вообще такое?
Ну тип связывать друг с другом модули через DI, пилить связь с БД. Я сам диван правда как и вы.
Посоветуйте годный сквозной курс по Джаве для тех, кто уже умеет хорошо кодить, но на другом языке.
Синтаксис понятен, типизация тоже (на фуллтайме пишу на Typescript), структуры данных/ООП знаю и юзаю каждый день.
Интересует именно сжатый курс, чтобы быстро освоиться во всяких пакетных менеджерах, подводных камнях создания/запуска проекта (есть IntelliJ Idea, если что), best-practices, чтобы лучше понимать чужой код и не делать в своем распространенных, специфичных именно Джаве ошибок.
Конечная цель - лучше понимать язык, чтобы легче заходили примеры в документации йобы от Apache - Zookeper, Kafka, etc. Добра.
Подход такой, что да, нужно верить в магию.
> и? зачем? как? почему? что это такое? нахуй нужно?
При изучении любой новой хуйни всегда замечаешь, что всё слишком взаимосвязано, и, чтобы полностью понять A, надо понять B, а чтобы понять B, надо понять A. Поэтому тупо переписываешь код с туториала, смотришь, что он работает, читаешь объяснения и начинаешь гуглить и экспериментировать.
Надо было ответить "Идеален".
ЖДБСи же слишком низкоуровневый? Я сам люблю разбираться во всем вплоть до напряжений на полевиках в процессоре, но для кровавого энтерпрайза ОРМ получше будет, не?
SWT + Eclipse RCP
Есть хипстерский JdbcTemplate - обёртка над ждбс, у нас в основном он. ОРМ у нас не любят, много неявной магии, и часто, когда кто-то пытается его притащить, это потом выстреливает.
Его в апреле выпилили, но уже вернули через настройки, когда народ стал жаловаться, что стало неудобно.
Да.
пойду чекну мурзилку по нему. самому надо забахать небольшой проектик демо-характера, пробовать лепить туда целый спринг со всем окологовном как-то кажется странным.
Какой-нибудь бут норм, это не сервера приложений, у тебя будет всего лишь один жарник метров на 20-50.
>нахуй нужно?
Чтоб время экономить.
Написать несколько десятков строк и получить результат, или написать одну строчку, а всё остальное напишет машина.
Выбери одно и ты поймёшь нужен ли тебе спринг.
Не нужно смотреть на фреймворк как на необходимость. У тебя есть труп шлюхи, тебе надо его закопать? Взял лопату и по-быстрому вырыл яму. А если у тебя Дом-2 по соседству и шлюх тебе отгружают штабелями, ты что будешь под каждую яму копать? Нахуй надо, лучше купить экскаватор. Спринг бесплатный если что. Правда ковшом надо уметь пользоваться, но и выхлоп будет соответствующий же.
Далее. Ты ж не ради лулзов учишь жабу, а для работы. И вот как-то так сложилось, что умение использовать "экскаватор" требуется довольно часто. Но не везде, даже по треду посмотри. И на хибернейте, и на JDBC кто-то пишет. Давно хх не смотрел, но помню что были и без спринга вакансии. Т.е. это не прям вот обязательное требование.
Venkat Subramaniam - Functional Programming in Java (The Pragmatic Programmers).
Там про стримы норм написано, сам читал когда вкатывался, мне понравилось. Как крутить списки, вот всю эту хуйню. Довольно короткая мне показалась, легко прочитал.
Коузен К. - Современный Java. Рецепты программирования.
Тоже самое, но поновее и не только про стримы. Есть на русском.
Хз что тебе посоветовать даже, Блох Д.- Java. Эффективное программирование, на ум приходит, я читал, но это нихуя не сжатое же.
А, во, есть же мурзилка от метанита. Короче не придумаешь!
Зависит от того кто гайды пишет. Вот читаю щас на баелданге регистрейшн флоу и что я вижу? Он мне в примере в страничку хтмла на тимлифе (у меня тоже тимлиф) повтыкал всякой хуйни типа <h1 th:text="#{label.form.title}">form</h1>
и ни слова сука не написал что это за ссылка, пришлось отдельно гуглить, что это ссылка на параметр из пропертей из бандла меседжей (короче для интернализаации). Нахуй мне эта интерналиазация тут? А по итогу нихуя же не работает из за этого и не понятно - то ли я криво скопипастил и что то прпустил, то ли автор мудак. Ну и пропустить пару строчек кода в примере, чтоб это даже не компилировалось - тоже норма. С импортами тоже разберешься, там всего по 2-3 аналогичных варианта. Ну а что статик импорты были ты и сам догадался, правда же?
хотя конечно это куда лучше, чем слушать очередной гайд на индусском на ютабе.
Ты наверное хотел это кинуть анону который реквестил что-то по стримам? стрим стрим функциональщиной погоняет у тебя
Так хибер и ждбс вдовесок к спрингу идут чаще всего.
Не, всё правильно. Раз он знает про ООП и основы, то ему как раз это и нужно. 8ая жаба и прочие стримы, прочитать про них и вперёд.
>баелданг
Да, вот меня это тоже поначалу выбешивало, потом привык. Он там пишет так, будто для себя памятку составляет, т.е. самое главное запишу, а всё остальное я итак помню, поэтому пропишу.
Как у шизиков в старых учебниках, 2 страницы формул, потом "очевидно, что..." и из этого какой-то вывод на ещё 2 страницы.
Ок, спасибки. Я юзал стримы в Node.js (юзаются например для асинхронного неблокирующего чтения большого файла, чанки которого тут же пихаются в другой стрим, или пихаются в ответ запроса), тут я так понимаю суть та же?
Я не знаю, как там в ноде. Мне стримы Scala напоминают.
В джаве острейший дефицит библиотек для длинной арифметики.
Эти гитхабы часто не компилируются/не запускаются. Их чинить дольше, чем разобраться почему у тебя это не работает.
Пусть есть класс Whore, а внутри него вложенный нестатический класс Tit.
У класса Whore есть list объектов Tit (список титек). Чтоб иметь к нему доступ, есть метод addTit(Tit tit).
Я могу добавить титьку так:
masha.addTit(masha.new Tit());
Внимание вопрос:
Как мне предотвратить возможность такой конструкции:
masha.addTit(krissy.new Tit());
короче, как не позволить добавить шлюхе сиську, привязанную к другому инсту. Можно ли для этого просто поменять какие-то модификаторы, или надо пилить какую-то ёба-логику в addTit?
Проще всего сделать конструктор приватным и не принимать титьку, а создавать внутри addTit()
Ну или проверять владельца при добавлении.
У титьки добавить метод
void checkOwner(Whore whore) {
if (Whore.this != whore) {
throw new PomogiteNasilyutException();
}
}
а нет чего-то вроде ссылки на владельца, вроде как this всегда ссылка на объект-овнер метода, который вызвали?
Вроде, вкурил
Whore.this - это и есть овнер. Я и не знал такого синтаксиса, либо забыл. Спасибо, анонче
Внутри титьки Whore.this это и есть ссылка на владельца. Снаружи она не доступна, надо писать метод который ее вернет.
А вообще все это жуткий антпатерн. Все эти неявные this это костыли из старой Явы. Если у тебя есть концепция владения - делай это явным образом.
Ну я запилил такие два метода на выбор
public boolean checkIsOwner(Whore w) {
return w == Whore.this;
}
public Whore getOwner() {
return Whore.this;
}
Это тоже антипаттерн и за такое надо палками пиздить или норм?
Тут проблема в Whore.this. Нужен владелец - сделай обычный статический класс и поле owner в нем. И дальше уже можно в add() устанавливать нового владельца, а у старого делать remove() и т.д.
А вот эти скрытые ссылки на родительский объект это тяжкое наследие Java 1.2 просто не используй.
Ну, ведь сама идея Inner-class в джава заключается в том что у инстанса такого класса обязательно есть единственный овнер. Зачем пилить велосипеды на эту тему? Или в сообществе считается что эта тема с иннерами в джава плохая сама по себе?
А что еще обсуждать? просто шлюх?
Иннер классы это костыль который сделали чтобы можно было легко создавать листенеры.
Нужен был способ лекого создания всяких листенеров, для этого замутили:
- внутренние классы, которые через костыльные прокси методы имеют доступ к приватным мемберам друг друга в будущих релизах обещают сделать по нормальному
- анонимные классы
- замыкание которое по умолчанию захватывает this родителя, чтобы можно было легко вызывать методы родительского класса ты в классе Tits можешь вызвать любой метод Whore без дополнительных усилий
Если использовать это для чего-то еще - то тут есть куча проблем. Самая главная это неочевидность такой связи, одно дело поле owner которое явно присваивается, другое дело Tits.this которое часть компиляторной магии. Плюс это поле нельзя менять. Создание объекта через жопу.
> Кто сможет убедить, почему не стоит вкатываться в NET Core?
Конечно сами майки https://twitter.com/JavaAtMicrosoft
Сейчас бы в 2020 не отличать маркетинговый ход, от реальности. МС всеми силами пытается примоститься в разные комьюнити, чтобы создать образ своего парня.
Спасибо. Надо просто все запихать в какой-нибудь CommonSrc pkj тогда наверное и порядочек.
Реальность состоит в том, что майки поняли что проиграли битву за серверсайд (ну кроме гейдева и интеграций с офис365). Но приняли мудрое решение не копротивляться, а возглавить. Тем более что сейчас деньги в облаках и вебе, а не десктопах. Поэтому и Edge теперь на хромиуме и VS Code на JS, а не .Net Core.
Так что будущее .Net Core непонятно, если он так и останется на задворках серверсайд разработки а прелпосылки для этого есть - его не поддерживают другие IT гиганты https://en.wikipedia.org/wiki/Programming_languages_used_in_most_popular_websites . То майки могут решить, что ну его нахер.
Как же все перемешано, вроде и правильные мысли, вроде и повторил тоже что и я сказал, но в тоже время просрался.
Мне так то срать на си шарп, но его нет в крупных компаниях, потому что раньше он не был опенсорс и кроссплатформенным. Кроме примитивных галлер, никто не держит сервера на винде. Каким местом ты хотел увидеть сишарп вообще там.
Двач, хочу начать изучать java. Посоветуйте с какой книги из пикрилов начать.
После того как завезли котлин, на жабе уже не так больно писать.
Может для бизнес-аналитиков
В глаза ебешься? Я писал что отсутвие интереса у крупных компаний к .Net - снижает его и у мелких компания и индивидуальных разработчиков. Новые инструменты для разработчиков будут в первую очередь поддерживать стек самой компании. И уже потом энтузиасты допилят поддержку остальных языков. На интервью в FAANG coding chalenge доступен на Яве да Питоне, иногда С++.
Что касается хостинга, то все крупные облачные провайдеры хостят .Net с этим нет проблем.
Какая строка даст совпадение?
Чел ты же к мему приебался...
А саны такое не писали?
Хочу в бэкенд.
>Не вижу там примеров с Classname.this
Это просто пример листенера, если хочется с Classname.this то вот пример с неявным https://www.javamex.com/tutorials/swing/text_fields_labels.shtml
тут в строке
resultField.setText("n 2 = " + String.format("%.2f", n));
на самом деле происходит
MyApplication.this.resultField.setText("n 2 = " + String.format("%.2f", n));
Но это за тебя делает компилятор. Это как раз то, про что я писал анонимный класс замыкается на объект предка и дает доступ к приватным данным. там если поля сделать приватными и прошерстить класс рефлексией еще синтетические методы для доступа к полям всплывут
Уже есть десятое издание Шилдта. Вопрос в другом. Как проникнить в DarkWeb?
А, точно, эти свинговые приложения с наследованием от JFrame и анонимными классами на листенерах. Как же хорошо, что вышла 8 джава.
Ну в Котлине это понятно, они не контролируют платформу и не могут добавить нужные вещи в JVM. Но когда сами авторы JVM вместо того, чтобы сделать по уму - костылят компилятором доступы. Это выглядит не очень.
Я учил по Шилдту в основном. Годный автор, только сухой. Издание надо новее. Правда я не професси-анал, тупо могу навелосипедить довольно многое, считаю что знаю кор.
Эккеля видел очень уцененного в магазине, брать не стал, хотя хотелось: появилось ощущение что там ультрастарая джава, вроде как еще до 8-ки, когда много чего впилили
А что плохого что анонимный класс, либо иннер-класс, может получать в управление свое окружение, и наоборот? Это же вполне логично, учитывая семантику этих вещей, нет?
Если брать тот пример из шлюхокруда, что плохого в том чтоб из сиськи написать Whore.this.doSomething()
Если это внутренний класс и создается внутри метода родительского - то нет никаких проблем. Так например создаются итераторы у листа.
Но в оригинальном шлюхокруде сиськи предполагается создавать все метода шлюхи, а потом еще валидировать чтоб чужую сиську не подсунули. А вот это уже трешь и угар, даже сам синтаксис
mashka.new Tits()
говорит - не используйте меня!
А, ну то да, дичь. Надо бы их где-то внутри изолировать и конструировать по воздействию извне, типа addOneMoreTit, я так думаю
Это ж двач, скорее у омежек проебётся икапсуляция, начнётся рефлексия, в результате всякие мутные объекты получат доступ к приватным полям, а там уже и до изучения GC на практике недалеко, если ты понимаешь о чём я.
Или она с общим кэшем сотрудничает просто? Типа, для геттеров - Cacheable, а для сеттеров - CachePut?
Видимо так и есть. По формулировкам из гайдов и документации не сразу понятно.
Во первых, почему он не статический? Он разве использует поля внешнего класса? Можешь пояснить, с какой целью был выбран внутренний класс?
CachePut - гарантированно выполняет метод. Например метод который гарантированно перечитает данные из базы. Кто-то пошарил ручками в базе и не сбросил кеши. И тогда пользователь жмет force refresh.
Туплю уже целый день не могу придумать как правильно реализовать задачу.
Вообщем есть абстрактный класс драконов. От него хочу создать еще 3 класса в который будет переопределены несколько методов отвечающих за передвижение. (полет, плавание , хождение)
Также у меня есть уже не абстрактные классы dragon1,dragon2,dragonN+
В них тоже должны быть переопределены методы которые отвечают за размер модельки конкретного дракона и его реальные параметры.
Также я хочу создать фабрику которой нужно будет передать builder в котором указан тип создаваемого дракона.
Вопрос как лучше это все соединить ? Я не могу использовать интерфейсы по типу IcanFly, IcanSwimm потому что в них не могу переопределить методы движение.
Скорее всего я просто тупой. Но прошу помочь.
У тебя ООП головного мозга. Студентик небось? В вузах любят такого говна в мозги насовать.
Например
>В них тоже должны быть переопределены методы которые отвечают за размер модельки конкретного дракона и его реальные параметры.
Делаешь класс Дракон с полями цвет и размер, а не абстрактный класс дракон с подклассами КрасныйМаленькийДракон и СинийБольшойДракон.
Я наверно глупо обьяснил.
Я хочу чтобы при помощи билдера я создавал любого дракона.
У менять есть моделька и его параметры (урон цвет размер), они не изменяемые , изменяется только тип перемещения (летает плавает ходит)
В конечном результате я хочу получить билдер которому я передаю параметры дракона , а он сам мне создает того который нужен.
Что-то ты дохуя переусложняешь. Начни с простой иерархии без фабрик с билдерами и куч интерфейсов. Лучше зарефакторить потом, как возникнет необходимость.
Я уже реафкторю и хочу избавится от такого кода, его просто слишком много.
@FunctionalInterface
static interface DragonBuilder {
public GragonAbstractClass create(String name, int speed);
}
private static DragonBuilder action(int number) {
switch (number) {
case 1:
return Dragon1::new;
case 2:
return Dragon2::new;
case 3:
return Dragon3::new;
default:
return Dragon4::new;
}
}
Чтобы работало нужно, чтобы все наследники GragonAbstractClass имели одинаковые параметры конструкторов (String name, int speed).
Мимо другой тупой студент, не проверял, но можешь попробовать
Спасибо конечно, но проблема не в том чтобы работало.
А в том чтобы выглядело красиво и работало.
Свитч плохая штука в таких делах, представь что у тебя драконов 120.
мимо-джун
public interface Dragon {
void action ();
Dragon getNew(int param, String name);
}
public class WhoreDragonMother implements Dragon {
private int parameter;
private String name;
public WhoreDragonMother(int parameter, String name) {
this.parameter = parameter;
this.name = name;
}
public WhoreDragonMother() {}
@Override
public void action() {
System.out.println("Даю под хвост дикарям, сосу хуй карликам, инцест приветствуется.");
}
@Override
public Dragon getNew(int param, String name) {
return new WhoreDragonMother(param,name);
}
}
import java.util.function.Consumer;
public class DragonBuilder {
private Dragon dragon;
private int param;
private String name;
private DragonBuilder() {}
DragonBuilder dragon (final Dragon dragon) {
this.dragon = dragon;
return this;
}
DragonBuilder param(final Integer param) {
this. param = param;
return this;
}
DragonBuilder name(final String name) {
this. name = name;
return this;
}
static Dragon build (final Consumer<DragonBuilder> block) {
final DragonBuilder builder = new DragonBuilder();
block.accept(builder);
return builder.dragon.getNew(builder.param, builder.name);
}
}
public class Main {
public static void main(String... args) {
Dragon denie = DragonBuilder.build(dragonBuilder ->
dragonBuilder.dragon(new WhoreDragonMother())
.param(3)
.name("Дейнерис"));
denie.action();
}
}
мимо-джун
public interface Dragon {
void action ();
Dragon getNew(int param, String name);
}
public class WhoreDragonMother implements Dragon {
private int parameter;
private String name;
public WhoreDragonMother(int parameter, String name) {
this.parameter = parameter;
this.name = name;
}
public WhoreDragonMother() {}
@Override
public void action() {
System.out.println("Даю под хвост дикарям, сосу хуй карликам, инцест приветствуется.");
}
@Override
public Dragon getNew(int param, String name) {
return new WhoreDragonMother(param,name);
}
}
import java.util.function.Consumer;
public class DragonBuilder {
private Dragon dragon;
private int param;
private String name;
private DragonBuilder() {}
DragonBuilder dragon (final Dragon dragon) {
this.dragon = dragon;
return this;
}
DragonBuilder param(final Integer param) {
this. param = param;
return this;
}
DragonBuilder name(final String name) {
this. name = name;
return this;
}
static Dragon build (final Consumer<DragonBuilder> block) {
final DragonBuilder builder = new DragonBuilder();
block.accept(builder);
return builder.dragon.getNew(builder.param, builder.name);
}
}
public class Main {
public static void main(String... args) {
Dragon denie = DragonBuilder.build(dragonBuilder ->
dragonBuilder.dragon(new WhoreDragonMother())
.param(3)
.name("Дейнерис"));
denie.action();
}
}
Извиняюсь за спойлеры, конечно, но 2020 на дворе. Учи мемасы, не будь батхёртом.
@
ВЕРНУЛАСЬ С СУТЕНЕРОМ
@
СУТЕНЕР ОТПИЗДИЛ
@
УШЛИ
@
ОПЯТЬ ВЕРНУЛАСЬ, НА ЭТОТ РАЗ С МУСОРАМИ И ЗАЯВЛЕНИЕМ ОБ ИЗНОСЕ.
@
МЕНТЫ ПОГРУЗИЛИ В БОБИК, ПОЕХАЛИ ШИТЬ ДЕЛО, ДАЛЬШЕ 2 НЕДЕЛИ ОБЕЗЬЯННИКА И ЭТАПОМ НА ТЮРЬМУ
@
НА ВХОДЕ ПРЕДЛОЖИЛИ ПОЛОТЕНЦЕ УНД ДВА СТУЛА
@
ТЕМ ВРЕМЕНЕМ МУСОРА УЖЕ ПРИДЕЛАЛИ НОГИ ВСЕМУ ИЗЪЯТОМУ В ДОМЕ ИМУЩЕСТВУ, ВКЛЮЧАЯ КАКТУС У ПЕКАРНИ, САМОЙ ПЕКАРНИ, ВСЕЙ МЕБЕЛИ И ДАЖЕ УМУДРИЛИСЬ ТОЛКНУТЬ РАКОВИНУ.
@
НАЧАЛИ ПЕРЕПИСЫВАТЬ ТВОЮ СЫЧЕВАЛЬНЮ НА ИБРАГИМА МАГОМЕТОВИЧА-ОГЛЫ И ЕГО СЕМЬЮ
@
ТЕМ ВРЕМЕНЕМ ПО ТВОЮ ЖОПУ УЖЕ БЕЗ СМАЗКИ И КОНТРАЦЕПЦИИ ГОТОВИТСЯ СИФОЗНО-ГЕПАТИТНЫЙ ЗЕКА
@
ВЕРНУЛАСЬ С СУТЕНЕРОМ
@
СУТЕНЕР ОТПИЗДИЛ
@
УШЛИ
@
ОПЯТЬ ВЕРНУЛАСЬ, НА ЭТОТ РАЗ С МУСОРАМИ И ЗАЯВЛЕНИЕМ ОБ ИЗНОСЕ.
@
МЕНТЫ ПОГРУЗИЛИ В БОБИК, ПОЕХАЛИ ШИТЬ ДЕЛО, ДАЛЬШЕ 2 НЕДЕЛИ ОБЕЗЬЯННИКА И ЭТАПОМ НА ТЮРЬМУ
@
НА ВХОДЕ ПРЕДЛОЖИЛИ ПОЛОТЕНЦЕ УНД ДВА СТУЛА
@
ТЕМ ВРЕМЕНЕМ МУСОРА УЖЕ ПРИДЕЛАЛИ НОГИ ВСЕМУ ИЗЪЯТОМУ В ДОМЕ ИМУЩЕСТВУ, ВКЛЮЧАЯ КАКТУС У ПЕКАРНИ, САМОЙ ПЕКАРНИ, ВСЕЙ МЕБЕЛИ И ДАЖЕ УМУДРИЛИСЬ ТОЛКНУТЬ РАКОВИНУ.
@
НАЧАЛИ ПЕРЕПИСЫВАТЬ ТВОЮ СЫЧЕВАЛЬНЮ НА ИБРАГИМА МАГОМЕТОВИЧА-ОГЛЫ И ЕГО СЕМЬЮ
@
ТЕМ ВРЕМЕНЕМ ПО ТВОЮ ЖОПУ УЖЕ БЕЗ СМАЗКИ И КОНТРАЦЕПЦИИ ГОТОВИТСЯ СИФОЗНО-ГЕПАТИТНЫЙ ЗЕКА
А туда ли ты зашел? Тут принято все в шлюхах оформлять. Твои драконы никому не интересны фантазер фэнтезист
Уже лучше.
да уже понял, жарко сегодня
Мне кажется погромирование это не твоё. Если навестись мышкой на красненькое, там тебе прямо английским языком будет написано, что объект с таким именем уже определён и надо его переименовать.
Из контента будут всякие новости об их успехах и статьи как помочь другим и прочая дичь.
Вопрос, где хранить картинки можно бесплатно? Очень хотелось бы aws s3, но каждый год регать акк геморно.
Смотрю на фришный план cloudinary, хватит ли его для этой идеи?
Я в сервисах для хранения файлов полный ноль. Раньше пришёл на проект и уже что-то есть, все юзают. А тут надо самому найти, да и чтоб денег не надо было, жопа короче.
Я уже думаю, мб с гугл драйва можно как-то по конченному вытягивать?
Обоссыте, но помогите плез
кор, бут, мвс, дату мб и тамлиф
>это что имеется в виду
Это значит ты можешь сделать тестовое. Его не просто так дают, а чтобы проверить.
>сколько его надо изучать, чтобы знать на джуна
Пару вечеров, если знаешь жабу, и потом пару раз сделать такое тестовое. Ты уже нашёл вакансию - вот осталось только тестовое взять прямо там, у них же.
Прям так и напиши хрюше, "дайте тестовое", она тебе на почту его вышлет.
>как его изучать
Без задней мысли.
> напилить сайтец для волонтёрской организации
PHP.
> мб с гугл драйва можно как-то по конченному вытягивать?
Да, но он не резиновый + хз, какие проблемы могут быть. https://lifehacker.ru/embed-google-photos/
Ну даже если так, всё равно ведь сиквенс к ключу привязывается в СУБД? Каким образом тут JPA участвует? Ему же просто надо сущность вставить, а ключ база сама сгенерирует, не?
Сиквенс сиквенсом, но к нему не менее традиционно пишется триггер.
Странные у тебя кумиры.
>Тагир Валеев
Загуглил, выдало какой-то доклад с оптимизациями хешкодов.
Пиздец, заниматься оптимизацией на жабе, это всё равно, что придти в дорогой итальянский ресторан, заказать лучшее блюдо, а потом закинуть ноги на стол и попросить официанта принести мазика или кетчупа из пятёрочки.
А то чёт невкусно нихуя))
годно. я правда не тот фантазер с дракенами
>>51760
Сеньор Миша на связи
>Свитч плохая штука в таких делах, представь что у тебя драконов 120
Плохая штука это у тебя на ифах в >>51770, а 120 кейсов в свиче это нормально (загугли рекомендуемую реализацию html парсера от w3c на конечных автоматах). Другое дело что 120 разных классов драконов - это уже попахивает... Я прочитал твою архитертуру и согласен с комментаторами выше - че-то у тебя переусложнено все, ты точно все хорошо понимаешь? А я вот не понял - классы "dragon1,dragon2,dragonN+" - они от кого наследуются? Они вообще точно наследуются, это точно классы, а не объекты? По описанию характеристик - размер модельки, реальные параметры - эти характеристики вполне могут быть полями и 120 классов здесь не нужно.
И еще:
>я хочу создать фабрику которой нужно будет передать builder в котором указан тип создаваемого дракона
В фабрику передать билдер? Нахуя тогда нужна фабрика вообще? Это ты так создаешь и конфигуришь абстрактную фабрику или прям в статик-фактори метод ебашишь? Непонятно. Может лучше фабрикой создавать билдер хотя бы? Типа:
DragonBuilderFactory.create(SwimmableDragon.class).size(123).name("").build();
Подробнее на пиках. Методы create1 и create2 делают одно и то же, первый чуть проще для понимания и читабельности, второй чуть более универсальный и профессиональный.
Храни в base64 или векторе.
>calling .persist() will not automatically set the id value. Your JPA provider will ensure that it is set before the entity is finally written to db. So you are right to assume that the id will be assigned when the transaction is committed. But this is not the only possible case. When you call .flush() the very same will happen.
>Thomas
>Update: Pay attention to Geek's comment, please. -> If GenerationType.Identity is used, the id will not be set by the provider before the entity is written to db. In this case id generation happens during the insert process on db level.
Почему ответ на такой очевидный вопрос приходится выискивать по крупицам. Есть аннотация, пиши в неё, кто генерирует ключ. Нахуя фреймворку эта информация? - прост))
На вордпрессе пили, проще ничего нет, а про хостинг это тебе в хостинготреды в /web
Ну, в своё оправдание могу сказать, что никогда до этого не сохранял из кода сущности с ключами.
>>сколько его надо изучать, чтобы знать на джуна
>>Пару вечеров, если знаешь жабу
Хуя тут гении сидят, а еще за пару вечеров осилишь ангуляр и кафку?
Точняк, совсем я поехал с этой теорией.
На самом деле его не так круто надо знать, рили пару вечеров как анон выше писал. Надо понимать зачем этот Spring нужен, что за DI и IOC такие, как конфигурируется и основные аннотации. Почитай по верхам и попиши примерчики. Сможешь ответить на базовые вопросы типа какие скоупы бинов в Спринге и все, велком он боард.
Да, потому что сама суть всех ORM, включая легаси хибернейт, всегда состоит в подходе "Верь в магию и не задумывайся".
Я бы вкинул пост, как одна тян хаскель за вечер обещала выучить, но у меня нет скрина.
Ты ж не знаешь его уровень. Может он опытный жаба синьёр, пару статей прочитает, аннотации запомнит и будет хуярить круды как чумачечий?
Далеко пойдёт, если догадается их себе в резюме вставить.
Обычно джуна от сеньора несложно отличить за простой беседой.
Мимо провёл сотни интервью в крупный вендор.
У меня был один его пост.
А я могу куда-нибудь закинуть свой пак с книгами по Java.
Философия Java была написана в 2006. Т.е. ещё до семёрки.
>>Есть хороший скан?
Есть электронная версия.
rutracker.org/forum/ viewtopic.php?t=1748467
Там же был какой то мегапак всех книг по жаве, его ищи сам.
А без ключа хуй пасасешь)
Первая строчка в джавадоке
>>Assertion utility class that assists in validating arguments.
намекает что ассерт спользуется спрингом для валидации.
UserRepository extends CrudRepository
потом пишу метод
FindByTag(tag);
а потом в контроллере пишу
@Autowired
private UserRepository userRepository;
И пользуюсь методами save, например и тем же FindByTag которые реализованы где? В каком классе?
Просто забудь об этом кейворде и никогда не используй, как не используешь strictfp, volatile и transient.
В прокси-классе, который ты не видишь, сгенерированном спрингом. Верь в магию и не задумывайся.
Там пропустили значит. Как ты себе это представляешь, не может же класс работать без имплементации.
> не может же класс работать без имплементации
Ты недооцениваешь спринг, он вообще парсит название метода из интерфейса и генерирует SQL-запросы ио нему.
Хеллоуворлды закончились, раскапываем сервера приложений и ламповую 4 джаву без аннотаций.
--------------- 500 ПОСТОВ ---------------------
Ты не представляешь, как бы я хотел, чтобы ты был прав.
Ну, если у тебя зеон платинум долбиться в строчку от твоих паттернов по госту, то придется жрать мазик.
Или купить Graal VM
На ЮТ выкладывают ролики с 700кк глубиной/точностью 1e1500, пиздец, хотя у меня подозрение, что там считают на суперкомпьютерах.
Ну вот же он.
Я в свинге никак, что такое класс Picture? Если в 131 строке у тебя в цикле вывод каждого нового пикселя сразу на экран, то могу сказать по опыту десктопных приложений на других языках что это очень затратно. Рисовать надо в памяти, и выводить по фреймам или по строкам хотя бы. Создавать класс Color тоже можно не надо, лучше сырой массив интов. Это статическая картинка вообще или анимация? Если статическая, то даже прорисовка каждого отдельного пиклеля из 1500*1500 это ничто по сравнению с 80 минутами, и выигрыша не получишь. Я просто волнуюсь не перерисовывают ли они там друг друга, т.е. если один пиксель из картинки рисуется только один раз то все ок, а если нет то точно есть пространство для оптимизации.
Взял первый попавшийся класс картинки https://introcs.cs.princeton.edu/java/stdlib/Picture.java.html
вроде он не предназначен для постоянной перерисовки. Задумака такая, чтобы можно было перемещаться по множеству, нажимая клавиши на клавиатуре (с даблом неплохо работает даже с этим классом). А с BigDecimal время улетает в небеса, так что прорисовка отдельного пикселя ничто. Не разбирался, как он устроен, но, вроде, там части в Long int хранятся, точность 50 - больше двух переменных нужно из-за этого сильный скачок, возможно, хотя не разбираюсь. Завтра на вопросы отвечу, если будут, сегодня уже спать иду, анонсы.
В ArrayList при создании передавай предполагаемое количество элементов, а то он успевает несколько раз расшириться.
Работа с многопоточностью тоже детская:
- слишком много потоков, количество потоков делай по ядрам процессора
- с тредами не работай, используй экзекуторы
- вместо thread.join() могу посоветовать CountDownLatch
>>52470
Если жесткая именно математика и много создается там объектов, то посмотреть как уменьшить количество создаваемых объектов. Еще можно от чисел с плавающей запятой перейти к целочисленным, тут придется исправлять алгоритм, всякие там ухищрения. Кстати я не знаю как там внутри BigDecimal работает, может там уже по максимуму оптимизировано. И самое главное - разбить код на виртуальные секции и измерять куски кода по времени, смотреть какой метод/цикл выполняется гораздо дольше остальных (бутылочное горлышко) и оптимизировать сперва именно там.
1)Сделать ещё один класс который делает почти тоже что и первый (с очень маленькими отличиями) для второй entity
2)Сделать так чтобы эти ентити ебаные имплементировали пустой интерфейс без нихуя и переписать "некий класс который работает с бд и высирает определенную entity" так чтобы он высирал этот интерфейс вместо entity.
На какой стул сесть?
А почему тогда идея их подчеркивает? просто акцентирует внимание что это говно не финальное?
> копьютер сайнс
Смутно представляю, что это, да и похуй в целом. Впервые услышал этот термин здесь, но начал сидеть тут уже после устройства на работу. Если подразумевается информатика на уровне вуза, то да.
> sicp
Ни разу не открывал. Это учебник лиспа для новичков в программировании? А прочитанную книжку по хачкилю для не-новичков можно считать?
> алгоритмов
Изучал, более того, часто спрашивают на собесах. Но 20 сортировок и 30 деревьев не задрачивал.
>Изучал, более того, часто спрашивают на собесах.
А что изучал? И что спрашивают? И главное, зачем?
Когда какой-то член не используется, есть свой паттерн шрифта в Идее - такой член пишется темно-серым цветом. Подчеркивание делается для полей, которые инициализированы, но после изменены:
int someValue = 0;
someValue = 5;
> что изучал?
Стандартная хуйня - несколько сортировок, обход деревьев, бинарный поиск и т.д. Учится быстро.
> И что спрашивают? И главное, зачем?
Могут так и спросить - как работает такая-то популярная сортировка. Или попросить написать её. Это минимальный фильтр, так проверяют, что чел может в алгоритмизацию, а значит, может решать хоть какие-то рабочие задачи. Иногда ещё просят решить задачу, с популярными алгоритмами в целом не связанную, но тоже про алгоритмизацию, в духе "есть двумерный массив, заполненный таким-то способом, нужно оптимально найти такие-то значения". Вот.
потому что я сеньор пиздобол на дваче. конечно же никто не будет спрашивать эту теоретико-академическую хуиту.
>обход деревьев
Нас в универе заставили свой класс сбалансированного бинарного дерева писать. Хотя я обычное бинарное дерево с прошлой лабы достаточно быстро переписал в сбалансированное.
Ну и считай тогда, что уже знаешь это. Освежить память будет несложно, если понадобится.
Это да, правда, на 1 курсе высирать лабы на 1000 строк кода немного пиздецово для мозга, ахуевающего все это в голове держать за раз. Хотя, может, я просто туповатый.
Нам это только на 2 курсе давали. На 1 были простейшие лабы на 30 строчек, затем постепенно усложнялись.
>На 1 были простейшие лабы на 30 строчек
Ох, май. Ты ещё наши контрольные не видел. На препода в конце 2 семестра почти вся группа жаловалась.
У меня вывод дерева в файл дохуя занимает c помощью велосипедов. Еще постоянная ебля с выделением/освобождением памяти, так как писал на C-массивах и указателях. Плюс меню и доп задания. всего 1042 строчки
https://pastebin.com/esheTgEw
Пошел вон, ты профнепригоден
Вот на пикче. Этот маппинг значит, что в таблице vehicle будет создан столбец с айдишником владеющего им patient? И JPA будет привязанные vehicle получать именно по этому столбцу? А в таблице patient ничего не поменяется?
Да нет вроде. Каша в голове просто пока. А что тебя смутило?
Я просто не понимаю, загуглить вопрос и открыть первую попавшуюся мурзилку - это сложно? Надо высрать свой убогий вопрос на двач?
Годный ASCII-вывод, спасибо за объяснение, так и знал что дополнительные фичи были.
Я их полдня уже читаю. Может, не выспался просто сегодня, но как-то эта тема пока реально кажется труднее, чем всё остальное.
А спринг вспоминаешь вечерами?
Что будешь делать когда появится ещё 2 энтити?
Зачем читать полдня, если можно после первой статьи открыть иде написать пару строк кода и посмотреть как все работает?
>ебаные имплементировали пустой интерфейс
Лучше не имплементируй интерфейс, а наследуй какой-нибудь класс. Например, Object.
Аче)
select *
from affiliate_programs ap
left join affiliate_programs_statistics aps on ap.id = aps.affiliate_program_id
where ap.deleted = false and aps.date between '2020-07-20' and '2020-08-20';
P.S. Там еще перед .from(affiliateProgram) потерялся .distinct()
А вот никак, насколько я знаю. Даже в двух профилях одного помника приходится копипастить.
Можно сделать родительский помник и настроить в нём, но если в помнике уже используется другой родительский помник, то облом.
Ещё некоторые плагины можно настроить через отдельный properties-файл, но там только ключи-значения, сложную иерархию тегов не вынести.
Ты можешь нах-=хачепичаочеа\оевитекчоуягквьуквотмна
по сложности желательно по возрастанию.
Откуда вас столько начинающих? Я почти год назад тут сидел, новичкам похуй было на джаву.
reduce он для другого, это если тебе с двумя шлюхами надо что-то сделать. Например, запилить всем наибольший размер.
А так, вот, без коллекта можно так сделать
long countOfSizes = whores.stream()
.mapToInt(Whore::getTitsSize)
.distinct()
.count();
я еблан и там уже посоветовали этот метод. Могу сказать что проверил на списке из 999999 шлюх, посчитав макс\мин\среднее за 1000 подходов для трёх вариантов решения этой задачи. Результаты на скрине, этот метод лучший.
И как? как вызвать метод не принадлежащий объекту стрима, еще и оперирующий над его двумя членами? У самого Town нет метода getDistToNext и поля nextTown, это было бы полной хуитой с точки зрения архитектуры.
Не слушай его - никак это стримами не сделать, кроме forEachOrdered().
reduce() вообще не так работает, у тебя есть условный ноль, есть бинарная операция и бинарная операция по комбинированию предыдущей операции.
Если ты хочешь это именно функциональным стилем, то тебе нужна операция типа zip, которой нет в Яве, но есть в Скале или сторонних библиотеках. https://stackoverflow.com/questions/17640754/zipping-streams-using-jdk8-with-lambda-java-util-stream-streams-zip
Пы.сы. я понимаю что одного кора мало
> прочел 2 тома Хорстмана
Этого вполне достаточно.
> теперь хочу написать пет прожект
Интересного на одном коре много не сделать (хотя Stingray42 безуспешно пытается). Потыкай базы и спринг и пили какую-нибудь социалочку.
Хорошая, интересная и сложная идея, но лучше пока торопиться не буду и попробую сторонние вещи > базы и спринг
подучить.
>на собесе про неё не рассказывай
лол, я почему то уверен что 95% айтишников это двачеры или бывшие двачеры
> Хорошая, интересная и сложная идея
Ну, она довольно популярная. Разве что необычные интересные фишечки придумать.
> лол, я почему то уверен что 95% айтишников это двачеры или бывшие двачеры
У меня все коллеги - нормисы лет 30-и. Даже аниме почти никто не смотрит, что там двач.
> Если у меня страницы рендерятся на стороне сервера это у меня соап чтоле?
Нет, это разные вещи, это как сравнивать json и html. Соап - это как рест, но подход несколько другой. Рендеринг же - это просто генерация html-нек на сервере, чтобы их было видно в браузере.
Так как мне обозвать свой сервис если я не джейсоны раздаю, а хтмл сгенереный тимлифом отдаю? Это рест или что? Я просто не понимаю как это гуглить. как уже писал, мне нужен свагер, который переварит обычный @Controller
> Это рест или что?
Это серверный рендеринг. Так и называется.
Но хочешь ты чего-то странного. Как ты собрался документировать контроллеры для вебни? Это не апи. Пользователь не будет лезть в доки и читать, что там хтмл-страница передаёт под капотом. Текст ссылок на сайте - вот и вся документация.
А вот как это выглядит на скале
val numbers = LazyList(1, 2, 4, 8)
numbers.zip(numbers.tail).map { n => n._2 - n._1 } reduceLeft (_ + _)
>numbers.zip(numbers.tail).map { n => n._2 - n._1 } reduceLeft (_ + _)
И вот как, глядя на это строчку, что-то понять кроме того, что где-то в жопе застрял плюс
А я думал + это ascii-сфинктер
Скала это вообще рабочая вещь, или какая-то околоакадемическая хрень? Есть ли смысл вкатываться с Джавы я каких-то целей? Насколько сложно изучить в сравнению с джа?
Я что-то нажал в идее, и у меня отвалились эти подсказки внутри стрима, какой тип стрима сейчас идет. Не подскажешь как включить?
Если тебе сам язык у функциональщина не нравиться - то не стоит.
Работы мало, порог вхождения высокий. Да он позволяет писать код короче и выразительней, но только после нескольких лет обучения. А вначале у тебя будет крайне кривой скала код в стиле джавы. у самого такие проблемы
Особо незачем чтоб в prevBuf присваивать без автобоксинга.
Но по сути операций анбоксинга здесь будет больше и лучше оставить сырой стрим микрооптимизации!!.
Так подсказки появляются только когда у тебя по одной операции на строку. И когда у тебя больше кажется трех (настраивается) разных стримов, т.е. для многочисленных операций возвращающих один и тот же стрим тоже не показываются.
>>54125
Да я эту строчку сговнячил только что на коленке как пример. На самом деле там полно стримов есть, но давно уже пропали подсказки. И как ее не перестраивай по строкам - ничего не появляется. Олсо, раньше такой хинт вылазил и для записанного в одну строку длинного стрима.
Олсо, подобное есть в вызове конструктора, когда подсказываются названия аргументов. Эта фича вполне себе работает. А хинты стримов отвалились(
Ты типа тот анон, какое-то тебе даже имя тут придумали еще? Типа, подсказываешь всякое имбецилам вкатывальщикам лайк ми
Это один какой-то шизик ему имя придумал.
Держи в курсе.
>задача на обычном цикле решается за три строчки для чего никакой котлин не нужен
Тут есть такой нюанс, что на котлине в функциональном стиле это тоже максимум три строчки, только более удобные, потому что одно выражение, и более понятные, потому что декларативно.
Да, это одна из самых сложных тем. Можно с первого-второго вопроса уже все понять.
Зачем нужен volatile?
Если он такой хороший, почему бы не ставить его везде?
Но я не злой на самом деле, часто приходится "вытягивать" - видно что понимают, но объяснить толком не могут.
>>54154
Вы мне льстите, уважаемый. Я никогда не сообщал такой информации)
>>54151
Сеньор в ))). Часто дают беру собеседовать кандидатов. Нет, кстати, не так давно, треда с 16го. Не знаю чому раньше не додумался поискать такой уютный тематический тредик как ваш наш.
Сучка двач, красиво же было, смешно.
>Зачем нужен volatile?
В основном для мелких атомарных операций типа x += y, и атомарной записи в лонг и дабл.
>Если он такой хороший, почему бы не ставить его везде?
Потому что не обеспечивает достаточную потокобезопасность.. Короче, надо использовать AtomicXXX и не задавать вопросов. Я прошел?
Как понять, что я достаточно знаю JabaCore чтоб посягать на JJuniorа? что еще за технологии нужны чтоб стать макакой такого ранга?
Блин, ну сорян. Частично что-то верно, но я бы прикопался и начал раскапывать. Например, самое первое предложение:
>В основном для мелких атомарных операций типа x += y
Здесь я удивленно переспрошу считаете ли вы += атомарной операцией. Ну и покатился диалог)
А, ну я имел ввиду, операции, которые с volatile будут атомарными, воть. Надо перечитать, в общем, чтобы уложилось все в голове нормально.
Сложно сказать. Вопросы и там и там задаются одинаковые (но дойти до последних могут не все), а по ответам ты набираешь баллы. Вон анончик выше из двух вопросов ответил где-то на 0.2/2, это приблизительно потому что в реале не блиц "вопрос-ответ", а добивание вопроса полностью, вытягивание наводящими вопросами/примерами. Что ты точно обязательно должен знать это многопоточность, стримы, работа с I/O (и консоль, и файлы, и сеть), что у программ есть stdin/stdout, минимальное устройство JVM - GC + JMM, околоплавающие штуки типа мавена, консольные команды (ключи) на запуск джарника, classpath, указание размера доступной памяти, выбор GC, и даже ключ, который обязан знать каждый джун, который поможет тебе найти чому программа падает с OOM (знаешь?). Я считаю это кор. Потому что тут только джава. Тут мы не затронули ни спринг, ни хибернейт, ни EE.
>Зачем нужен volatile?
>Если он такой хороший, почему бы не ставить его везде?
В приличных домах уже считается плохим тоном такое спрашивать, слишком избито.
Лучше спросите как сделать лок на двух волатайлах.
>>54183
Еще могу посоветовать вот такую книжку как ориентир на джуна не только третья глава, а вся книжка. Только осторожно, сама книжка содержит хуиллиард ошибок, вот список:
https://www.selikoff.net/java-oca-8-programmer-i-study-guide/
Только обязательно добавить многопоточность и стримы, а то оракл почему-то считает что джунам можно этого не знать. Забавно. Ну и вон те штуки околоплавающие которые выше озвучил.
Спасибо, обязательно спрошу, только объясни что ты имеешь ввиду? На ум сразу приходит double-checked locking, но там всего один волатайл, и вряд ли ты так ошибся. Может быть ты имелл ввиду как сделать дедлок? Но тут прямой связи с волатайлами нет.
Выходит чтоб вкатиться нужно отложить спринг и прочее в сторону и начать задрачивать теорию кора и олимпиалные задачки?
Все же, джуниора нанимают работать. Потому не обязательно знать, как в точности работают JVM и GC. Да и ключи для запуска жарника никому не нужны (ну, в том плане, что тебе нужно запустить -> идёшь в доку и все делаешь). И уж тем более запариваться с выбором сборщика не задача джуна.
Понимать принципы работы сборщика, в базовом виде, ну, пожалуй да, а остальное все не так важно. Важны стримы, важно понимание работы фреймворка, хотя бы на уровне того, почему тут мы возьмем аннотацию Service, а тут Component, важно знать о том, насколько странно иногда работает хибернейт и помнить про то, что иногда, все же, стоит написать запрос руками и т.д.. Джуна нанимают для работы. Да, он будет спрашивать и учиться на месте, но, все же, в первую очередь он должен уметь расширять кодовую базу, хотя бы на уровне крудов и т.д.
Мы давно знали, что анон с 2к строками синьор. Ты ньюфаня.
Не, вопрос был про кор, я и написал про кор. Спринг откладывать не нужно, если идешь туда где он используется, а это почти везде. Олимпиадных задачек я не приводил, там все реально нужное и в повседневной работе используемое, разве что I/O сети и файлов не в каждом проекте есть (обычно тут MQ для первого и логгер для второго). Алгоритмические это да, но не олимпиадные (поиск цикла в списке, уникальность числа в массиве, обязательно указать какая сложность это будет).
>>54255
Почти, но с некоторыми деталями я могу поспорить.
>не обязательно знать, как в точности работают JVM и GC
У нас обязательно. В точности нет, но в общих чертах да, даже джуну. Могут ли перемещаться объекты в памяти GC'ом? Stack/Heap. Связь значения Object.hashCode() с памятью никакой)). Да это за день учится в худшем случае, вы чо.
>Понимать принципы работы сборщика
А я не говорил про выбор, основы - да. Отличия мавена от градла, как посмотреть дерево зависимостей, какой смысол в <parent>.
Да, именно для работы, но каждый работодатель выбирает лучшего джуна всегда, потому что этих позиций не так много, основные места это мид и сеньор (может быть у вас не так?).
>>54237
Пасиба! Но я насчитал 3 (три) волатайла чтобы это работало. А ты говорил про два. Это вопрос с двойным дном? Может быть я ошибся, завтра свежим взглядом взгляну. Кстати пока ознакамливался то вспомнил что видел эту статью несколько лет назад, но за неиспользованием забывается.
Тогда и правда пора спать.
>>54255
>ключи для запуска жарника никому не нужны (нужно запустить -> идёшь в доку)
Нда, только один момент: на собеседовании уже поздно (или рано, кому как) лезть в доки, а правильный ответ на этот вопрос "здесь и сейчас" показывает что ты реально сам запускал джарники, а не только зеленый треугольничек в IDE тыкал.
Не совсем. Знание команд мавена это безусловно плюс, но это не отвечает на базовый вопрос: кандидат все-таки никогда не запускал джарник вне девелоперской среды.
Да, хотя бы java -jar. Удивлен? Интервьюер не знает твой уровень и пытается понять. Ты прошел первый этап. Далее скорее всего будет вопрос: а что делать если есть библиотечный jar, классы которого используются в основном jar'е?
Ну да, не ответил. Но ведь это показывает твою неопытность, так ведь? И ты ведь пойдешь сейчас гуглить этот вопрос и пытаться запустить самостоятельно если тебе это надо конечно же?
Но я и правда джарник запускал в последний раз год назад, когда певые хелоуворлды писал.
А так или варник томкату подложить (через мавен автоматом после сборки, ибо мне лень руками его таскать), или через ембедед томкат спринга - зеленый треугольник. Там же можно и параметры прописать, только мне оно один раз пригодилось. Только я все равно не понимаю, зачем запускать из консоли, если можно запустить из идеи? Джуна то вряд ли допустят до деплоя.
Я-то загуглю, конечно, оказался вопрос с подвохом но следующим же вопросом будет "как упаковать исполняемый джарник, если class файлы разбросаны по папкам разной вложенности" и т.д.
На этом очень легко завалить, потому что с современными IDE этих вещей почти не делают, а мозг забывает то, чем не пользуешься.
Команды мавена не в счет, их мы пишем и знаем.
>но следующим же вопросом будет
Правильно мыслишь) Но тут не "валят", не депрессируй. Тут хотят понять насколько глубоки твои знания, что ты умеешь делать, уже точно делал 100 раз, что не делал, что хотя бы примерно представляешь как делать. Все надо говорить, мысли вслух приветствуются. Поэтому ответы вида "минус-цп-звездочка" и дальше пауза это плохо, рот не должен закрываться, нужно упомянуть что делал так, или не делал но предполагаешь что это заработает потому что точно знаешь что "цп это класспас" а вот дальше не совсем уверен т.к. в последнее время деплоил под томкет. Валят это где-нибудь в яндексе, а в других конторах обычно хотят все-таки взять человека, но всегда есть порог (про яндекс просто много жалоб что он там очень высокий).
>как упаковать исполняемый джарник, если class файлы разбросаны
Про именно упаковать я никогда не спрашивал, это очень такие детали, а вот то что джарник бывает обычный и executable это да, милое дело, и что хотя бы примерно нужно прописать чтобы получить последний. Тут опять отталкиваются от того что в продакшене надо: запустить джарник из консоли - надо, это запуск бут приложения; собрать исполнимый или библиотечный джарник - надо; собрать руками классфайлы и написать манифест - ну такое...
>>54345
Допустят без проблем до деплоя на тестовой среде, которых обычно не одна. Расти ты собираешься? Так вообще можно прийти к тому что запускают только девопсы, а программисты даже слов "ps rm cat grep kill" знать не должны. Нужно показывать интерес, показывать реальные скиллы: отмазка томкетом канает, отмазка спринг бута через зеленый треугольник - не канает.
>джарник бывает обычный
И можно ли всё-таки запустить такой джарник без пересборки в исполнимый.
>>54345
>Там же можно и параметры прописать, только мне оно один раз пригодилось
Вот это желательно подтянуть, command line arguments испольузется часто и много, даже в бут приложениях с конфигом неподалеку (хотя бы указать где этот конфиг лежит, указать профиль, пароль, всякие другие вещи).
Можно поучить для того, чтобы лучше понимать функциональщину и типы.
На работу хуй устроишься, там на полном серьёзе джунами берут джавистов с 5летним опытом.
Переписал таким образом.
Уже лучше? Использовал вместо CountDownLatch CyclicBarrier. Но если чисто на код смотреть, не прыгая туда-сюда, не очень понятно, что происходит. В new Processing передаю CyclicBarrier один для всех потоков.
Чему ты удивляешься? Я так и делал. Сначала с такой же ухмылкой думал, что ну никто в 2020 не будет спрашивать методы класса обжект.
Или про линкед лист.
Или про двоичные деревья.
Или про хешмапы. КАЖДЫЙ. ВТОРОЙ. СОБЕС. ЧТО БУДЕТ ЕСЛИ ЗАПИХНУТЬ В МАПУ ЭЛЕМЕНТЫ С НЕПРАВИЛЬНОЙ ФУНКЦИЕЙ ХЕШКОД???!???!?
Или про @Component и @Service.
Или про кучу и стек.
Или HTTP методы.
Или отличия 500ых от 400х ошибок.
Или разницу IP адреса и MAC адреса.
Или про джойны в бд.
Ну и конечно, никто не будет давать избитые задачки на нахождение факториала, простых чисел, развороты списков, имплементацию какого-нибудь дефолтного метода или фичи из кор жабы своими руками на бумажке. Эх, с улыбкой вспоминаю этого шизика из одного банка, который меня Optional на листочке попросил имплементировать. На всю жизнь воспоминания, только ради этого стоит по собесам походить, это лучше цирка, анон, я гарантирую. Особенно когда клоун это ты.
Я вот уже после второго собеседования выучил наизусть всю избитую хуйню. До сих пор где-то в телефоне лежит файл со шпаргалками про public/protected/private, О-большое для всех структур, транзитивность, рефлексивность, SOLID, полиморфизм, наследование, инкапсуляция...
>может быть у вас не так?
Мидлов, конечно, значительно больше. Но, в целом, джунов много, растут быстро. Приходят, уходят. У нас и со стажировками программы есть, так что молодой крови достаточно. В целом, мне сложно сказать, зачем джуну может понадобится большая часть перечисленных теоретических вещей, ну, а если понадобится - загуглит или спросит. Для того наставники и есть.
Адекватен, нормально решает алгоритмические задачи и может написать простенький спринг-бекенд - в принципе, можно начинать работать и подключать к проектам.
ну, опять же, так у нас заведено, всегда может так оказаться, что в какой-то компании джава-бекендеру требуется знать как работают указатели в C++, просто потому что там считают, что это основы без которых нельзя писать программы
"Мурзилка" это значит поверхностно. Тот же метанит, прекрасный пример. Чтобы начать вкатываться хорошо подходит, любой даун осилит.
Но дальше всё равно придётся книги читать, мурзилками не отделаешься.
>Но дальше всё равно придётся книги читать, мурзилками не отделаешься.
Двачую и 90% на английском.
Пожалуй самое главное - есть ли выигрыш в производительности?
А так да, эститетически стало намного лучше, но еще есть над чем поработать. Начнем с более простых вещей.
1) Количество ядер можно получить так: Runtime.getRuntime().availableProcessors(). Должно дать 12 в твоем случае, проверь.
2) Цепочка if-else-if страшненькая, наверняка можно переписать хотя бы на свиче (возможно чуть подправив логику)
3) Бесконечный цикл в Processing.run(), отсутствие (видимых на скринах) условий выхода из потоков. Не надо так.
4)
>вместо CountDownLatch CyclicBarrier
Вот честно не знаю, так то они разные и тут ты немного изменил прежнюю логику, возможно и правда больше подошел CB, но я все еще сомневаюсь. CDL позволил бы не делить на 12 кусочков (processings), а оставить как было - 50, или поиграться с числом дальше, потыкать другие варианты. Т.е. да, задач получается больше чем потоков, это нормально, каждый поток будет выдергивать из очереди задачи пока они не кончатся. Но если в твоем случае можно разделить исходную задачу на подзадачи по количеству потоков возможно так будет даже лучше. Также CDL позволит убрать костыль из п.5
5)
> Thread.sleep(20000);// main program run time
Это конечно костыль. Здесь ты хочешь остановить главный поток чтоб подождать потоков на экзекуторе. Способа два.
5.1) Ждать завершения экзекутора
executorService.shutdown(); // не убивает сразу и НЕ отбрасывает задачи которые уже в очереди
executorService.awaitTermination(20, TimeUnit.SECONDS);
executorService.shutdownNow(); // отбрасывает задачи в очереди и пытается остановиться чуть более жестко
Способ по поведению полностью аналогичный твоему но более правильный: ждем 20 сек, ниче не происходит (экзекутор все еще работает, т.к. условий выхода из потоков нет, внутри Processing.run() бесконечный цикл), прибиваем экзекутор. Кстати в реальной жизни этот алгоритм (с бесконечными потоками) сломан, т.к. shutdownNow() (сюрприз) не может сделать ничего сверхестесственного по убийству потоков, и если они у тебя в коде не завершаются сами или повисли то экзекутор никогда не остановится -> утечка памяти и ресурсов
5.2) CDL
Здесь главный поток может легко просто сделать cdl.await() и все, ждем завершения задач. В общем случае это выглядит как то так:
int cycles = 0;
while (cycles < 10) {
CDL cdl = new CDL(12);
for (0..11) { executorService.submit(...); }
cdl.await();
cycles++;
}
В данном случае в Processing.run() нет бесконечного цикла, метод будет спроектирован так чтоб рассчитать все и завершиться. Processing объекты можно сделать одноразовыми или переиспользуемыми, не суть. Такой способ (с конечными вычислениями в потоках) более предпочтителен.
Пожалуй самое главное - есть ли выигрыш в производительности?
А так да, эститетически стало намного лучше, но еще есть над чем поработать. Начнем с более простых вещей.
1) Количество ядер можно получить так: Runtime.getRuntime().availableProcessors(). Должно дать 12 в твоем случае, проверь.
2) Цепочка if-else-if страшненькая, наверняка можно переписать хотя бы на свиче (возможно чуть подправив логику)
3) Бесконечный цикл в Processing.run(), отсутствие (видимых на скринах) условий выхода из потоков. Не надо так.
4)
>вместо CountDownLatch CyclicBarrier
Вот честно не знаю, так то они разные и тут ты немного изменил прежнюю логику, возможно и правда больше подошел CB, но я все еще сомневаюсь. CDL позволил бы не делить на 12 кусочков (processings), а оставить как было - 50, или поиграться с числом дальше, потыкать другие варианты. Т.е. да, задач получается больше чем потоков, это нормально, каждый поток будет выдергивать из очереди задачи пока они не кончатся. Но если в твоем случае можно разделить исходную задачу на подзадачи по количеству потоков возможно так будет даже лучше. Также CDL позволит убрать костыль из п.5
5)
> Thread.sleep(20000);// main program run time
Это конечно костыль. Здесь ты хочешь остановить главный поток чтоб подождать потоков на экзекуторе. Способа два.
5.1) Ждать завершения экзекутора
executorService.shutdown(); // не убивает сразу и НЕ отбрасывает задачи которые уже в очереди
executorService.awaitTermination(20, TimeUnit.SECONDS);
executorService.shutdownNow(); // отбрасывает задачи в очереди и пытается остановиться чуть более жестко
Способ по поведению полностью аналогичный твоему но более правильный: ждем 20 сек, ниче не происходит (экзекутор все еще работает, т.к. условий выхода из потоков нет, внутри Processing.run() бесконечный цикл), прибиваем экзекутор. Кстати в реальной жизни этот алгоритм (с бесконечными потоками) сломан, т.к. shutdownNow() (сюрприз) не может сделать ничего сверхестесственного по убийству потоков, и если они у тебя в коде не завершаются сами или повисли то экзекутор никогда не остановится -> утечка памяти и ресурсов
5.2) CDL
Здесь главный поток может легко просто сделать cdl.await() и все, ждем завершения задач. В общем случае это выглядит как то так:
int cycles = 0;
while (cycles < 10) {
CDL cdl = new CDL(12);
for (0..11) { executorService.submit(...); }
cdl.await();
cycles++;
}
В данном случае в Processing.run() нет бесконечного цикла, метод будет спроектирован так чтоб рассчитать все и завершиться. Processing объекты можно сделать одноразовыми или переиспользуемыми, не суть. Такой способ (с конечными вычислениями в потоках) более предпочтителен.
Почему вместо доступа к полям через точку все клепают тысячи геттеров-сеттеров? А вот никто не знает, но все пишут, так исторически сложилось. И сделать ничего нельзя - куча либ вообще игнорирует поля и сразу ищет get и set,
Спасибо большое, анон, все учту.
>Пожалуй самое главное - есть ли выигрыш в производительности?
Засекал на коленках на секундомер, было то же самое, надо что-то более технологичное попробовать.
>>54876
Вы зеленые чтоли или на полном серьезе? Инкапсуляция же. Да-да, вы можете сказать что теоретически предполагалось использовать в сеттерах логику для валидации, но на практике это не рекомендуется. А я иногда так делаю, мне пох, это удобно. И в геттарах тоже.
И потом: иммутабельность. Зеленые конечно не поймут что и для чего, но вот например задача: шлюха, которая должна сама маинтейнить свои сиськи:
>class Whore { private List<Tit> tits; }
Ну и вот получается что через точечку whore.tits - получаем полный неограниченный доступ на ЗАПИСЬ в сиськи, можем сделать три, пять, ни одной. А если через геттер:
>public List<Tit> getTits() { return new ArrayList<Tit>(this.tits); }
То вызывающий код не может сделать нам нихуя. Впитывайте, заебали.
Няш, че такой агрессивный? Ладно тебе, а в место них же можно конструкторы хуячить? Или это другое?
Да. Ещё можно юзануть ломбок. который все так ненавидят, для генерации get и set, но их всё равно придётся вызывать самому. Ну или юзать котлин.
> не рекомендуется. А я иногда так делаю
Ну ты и пидор, охуеваю каждый раз, когда приходится дебажить подобный код.
> иммутабельность
final + конструктор + билдер
>Няш, че такой агрессивный?
На самом деле нет, эта экспрессия чтоб лучше усваивали материал. Помогает?)
Конструкторы не помогут полностью, это замена сеттерам. Они помогают с иммутабельностью - полностью исключить сеттеры из класса (боже храни новую аннотацию @ConstructorBinding), но как конструкторы защищят от примера с доступом к листу выше? Только get.
> как конструкторы защищят от примера с доступом к листу выше
А это не простой геттер в тонком дата-классе, а бизнес-логика уже пошла. Классический геттер тупо возвращает ту же ссылку, а ты возвращаешь хуйню, наёбывая того, кто вызывает.
>Ну ты и пидор
Ниче не могу сказать в свое оправдание, наверное ты прав.
Однако, зная проблему, я абузю эти штуки более аккуратно. Например, по контракту мутабельный класс не должен возвращать null. Но юзер не засеттил поле. Я не сеттю поле за него, я возвращаю дефолтный объект. Миллион примеров такого поведения в SDK.
>>54899
Выше кто-то упомянул тонкие дата-классы? Я не заметил. Классический пускай и возвращает, а геттер в иммутабельном классе не допускает доступа к своим членам. О чем ты споришь? Возвращаешь сырую ссылку -> non-thread-safe класс, со всеми вытекающими, точка.
Справедливости ради хочу заметить что лично я не возвращаю новую коллекцию на геттерах, это не разумно, но это классический книжный пример нарушения иммутабельности, алло. Другой пример - присвоить полю переданную ссылку коллекции в конструкторе вместо создания своей собственной.
Потому что с прямым доступом ты можешь захуячить туда абсолютно что угодно, а это может противоречить бизнес-логике. Например в int weightOfWhore ты можешь передать минус 45 кг. Ясное дело, что вес у шлюхи всегда положительный. Через сеттер ты можешь вписать эту проверку и проворачивать на хую тупого юзера каждый раз, когда он пытается что-то такое сделать
Меня подбешивает, что весь код в идее от него становится красным.
Вывод типов проёбывается нахуй, non static method cannot be referenced from a static context и ты сидишь блядь как фувлыжник, смотришь в код, где блядь ты с типами ошибся. Фувлыжно сидишь.
Без ломбока я сразу нахожу где ошибка, например.
Но вообще, штука очень удобная. Надо её в кор встраивать и пилить полную поддержку везде, тогда будет вообще круто.
На другой стороне весов - а нахуй это вообще надо? Есть же alt + insert и ты получаешь тоже самое.
Я когда выбирал, то намеренно шёл на какую-то проверенную хуйню, чтоб она не сдохла КЁМ через полгода, как я вкачусь.
Жаба везде, банки, блядь, хуянки, гос.аппарат. Может и сдонет, но я к тому времени уже и сам сдохну.
Про легаси - а в чём тут минус? Перед тобой будет огромная куча кода, сиди, изучай, перенимай опыт. Ты молодой, шутливый, а на самом деле, сидеть и править 2 строчки кода раз в день и получать за это стабильную зарплату это не самый плохой вариант, который может с тобой произойти.
Сам недавно вкатился, сначала был на какой-то старой хуйне, сделал фичу - через 3 месяца её начали выкатывать, я к тому времени уже и забыл что я делал.
Потом поставили на другой проект, с одной стороны это охуенно интересно, когда из сраного голого помника вырастает хуйня на десятки тысяч строк кода, классно работать в связке с фронтом, когда в реальном времени что-то меня приходится, править, обсуждать это всё, смотреть как топ-менеджеры реагируют на говно, что ты высрал.
С другой - прибегает ПМ, "вот хуйня от заказчика, к четвергу должна быть готова". А сейчас среда... И дрочишься часов 8, забывая пообедать.
Понял, анон, спасибо за ответ)
>Бесконечный цикл в Processing.run(), отсутствие (видимых на скринах) условий выхода из потоков. Не надо так.
Там с помощью эксепшенов выход из цикла.
Не имеет права.
Зачем одно ии то же? Даже когда анон нарисовал птицу в 15-16 треде, там номер на рисунке хоть меняли.
Если на текущую пикчу добавить номер, тебя устроит?
но он не становится..? Ты же плагин ставишь вместе с зависимостью. alt+insert, ну, во-первых визуально кода больше становится, во-вторых, ну, например, с аннотацией Data Pojo выглядит просто как набор полей (чем он и является), а все иквалсы, хеши, геттеры и сеттеры обеспечит ломбок, да и билдер самому писать, ну, фу
>>Есть же alt + insert и ты получаешь тоже самое.
@Getter @Setter ты пишешь 1 раз, а alt + insert каждый раз после добавления поля.
Сделай макрос.
В райнтайме ничего не происходит, там будет тот же байт-код, будто написал всё сам. При компиляции процессор аннотаций ломбока тупо вставляет определения методов, и дальше они компилируются.
>При компиляции процессор аннотаций ломбока тупо вставляет определения методов, и дальше они компилируются
То есть просто в этом же файле дописывает код, правильно?
Нет, исходный файл остаётся как есть. Процессор аннотаций запускается самим компилятором джавы и всё делается в памяти. Считай, что это вроде экстеншена для компилятора.
Понял, спасибо.
>Но я насчитал 3 (три) волатайла чтобы это работало. А ты говорил про два. Это вопрос с двойным дном?
Нет, это я просчитался. Давно реализовывал - уже успел все забыть.
Просто.
Создаёшь дубликат файла с кодом без комментариев и запускаешь
Вспомнил, перед кодом добавить перевод строки в виде \u чето-там.
Где там слово "только"?
спасибо
Только не говори, что ты пытаешься передать клиенту Entity, полученное напрямую из базы.
Создать отдельный класс-DTO со структурой, похожей на Entity, но только с полями, предназначеными для клиента, а не с вообще всеми. Каждый раз конвертировать Entity в эту DTO и возвращать клиенту. Просто из соображений безопасности. Хорошо ещё, что ты заметил, что у тебя там поле с паролем, а если бы нет, и задеплоил на прод? Один раз так забудешь - и привет от хацкиров. А если у тебя там ещё какой-нибудь @OneToMany, и передашь ты не только один пароль, а целый список паролей связанных юзеров?
Без конвертации во вторичные DTO-шки.
Во многих случаях так делаю и прекрасно себя чувствую. Аннотаций вполне достаточно, чтобы не передавать лишних паролей, OneToMany и прочего
А затем кому-нибудь другому понадобится новая колонка таблице, и он её добавит в Entity, ничего не зная про твои аннотации и думая, что этот объект никогда не передаётся на клиент как у всех нормальных людей.
ну я только учусь, так что какой прод=)
а если вот нужно много представлений объекта? или к примеру в случае с PagingAndSortingRepository, он же возвращает Page<Object>, как мне быстро сконвертировать его в Page<ObjectDTO>?
Через ConversionService
Обычно для этого пишут ещё один конструктор или статик метод, в сложных случаях - сервис-конвертер. Ну и последовательность вызовов сеттеров/других конструкторов внутри.
Если нужно преобразовать коллекцию, то со стримами будет удобно: objects.stream(ObjectDTO::new).collect(...)
>добавит в Entity, ничего не зная
Решается настройками, при которых передаются только явно отмеченные свойства
>у всех нормальных людей
Дай угадаю, это те же нормальные люди, у которых каждый класс в коде обязательно продублирован интерфейсом
> Дай угадаю, это те же нормальные люди, у которых каждый класс в коде обязательно продублирован интерфейсом
Именно. А также по отдельной сущности на каждый SQL-запрос и по простыне паблик геттеров-сеттеров там, где они не нужны.
ого, оч круто, спасибо
ой блин только заметил, что там через геттеры, сеттеры, а я на котлине пишу, там будет все как надо работать?
О как.
Как ты умудряешься писать на котлине, не понимая, что свойства транслируются в те же геттеры
крууууть
>>как мне быстро сконвертировать его в Page<ObjectDTO>?
в StringUtils есть метод для мапинга (не помню какой, может так и называется map), но в глубину он не замапит(если у тебя в этом энтити другие энтити и их тоже надо преобразовать), лучше использовать modelmapper/dozer/mapstruct.
Ну или свой мапер напиши. Хоть на генериках, хоть тупо статичными методами Utils.convertObjectToDto (если не генерики - то для каждого преобразования придется метод писать)
А смысл в вышке? Например у меня друг учиться в унике и там за 4 года обучения не разу не было Java, только C, C++ и основы веб (html, css и js). И какие по твоему у такого челика преимущества перед парнем который прочитал Шилда и просмотрел кучу лекций по Java, Spring, Hibernate?
В вуз кодеры идут не за знаниями, а ради корки, чтобы соответствовать стереотипам работодателей.
Вышмат.
>А смысл в вышке?
>у меня друг учиться в унике
Блять, я не смог удержаться.
Ну а серьезно, уже миллион раз обсуждали: многие работодатели просто требованием это ставят и все. Вот например на пике: загрузить необходимые документы в систему, обязательное поле. И что ты сделаешь? Это же как типа начальная проверка долбоеб ты или нет, по сути ничего не проверяет кроме дисциплины. Но надо. Такие блять правила. Конечно вкатываться можно и без В/О, но только через небольшие конторки - а оно тебе надо - отсекать сразу пласт компаний которые тебя бы потенциально взяли? И потом, в ДС (по слухам) есть для студентов всякие стажировки в луксофтах/кроках.
> есть для студентов всякие стажировки в луксофтах/кроках.
А ещё в сберах и втб как минимум. Причём ты реально должен числиться в вузе, и если уже закончил, то на стажировку не берут, лол.
Разве диплома из колледжа будет не достаточно? Мне казалось, что смотрят больше на скиллы.
Но в любом случае сам планирую после колледжа идти на вышку заочно, но только потому что хочу свалить из этой страны. А рабочая виза только с вышкой идёт(
>Разве диплома из колледжа будет не достаточно?
>рабочая виза только с вышкой идёт(
Ну ты сам все сказал. Много где вышка идет как само собой разумеющееся, а на кандидатов без в/о как на недолюдей смотрят, как расизм, натурально. Будет ли достаточно диклома из колледжа или в/о по кулинарии это решает конкретный работодатель, у некоторых требования разнятся, но многие, если не большинство, требуют именно вышку по специальности/околоспециальности (на программера - инженер, физик, математик).
>смотрят больше на скиллы
Смотрят в первую очередь на проекты, а скиллы без проектов это такое: долго проверять умеешь или нет, риск брать или вообще начинать возьню с таким кандидатом когда сейчас сразу доступны кандидаты получше.
>мутабельности
Сайд-эффектов.
>>55816
По новейшим программерским понятиям не рекомендуется каким-либо образом изменять параметры, переданные в метод (добавление в Model/ModelMap), а только возвращать значения (new ModelAndView()). Иногда лень такие контейнеры лепить, или чтоб быстро проверить, тогда изменяешь, а иначе - делаешь как положено.
Максимум что позволяется сделать с параметром переданным в метод - перезаписать полностью, т.е. использовать под свои нужды как буфер, т.к. это переменная на стеке и ее изменение ничем не грозит вызывающему коду.
бля, анон чё-то ты меня пиздец расстроил(
У меня что совсем нет шансов найти работу, если нет без вышки?
Реально, но сложнее. Попробуй всякий networking - хакатоны, стажировки, чатеги в телеграме. Чтобы тевою резюмуху напрямую отправили техническим чувакам минуя хрюш.
Есть, но меньше, я же выше написал: твой путь лежит через мелкие конторы, можешь и через крупные тоже, но сразу уточняй что нет вышки и следи за реакцией, а то обидно будет пройти два собеса (HR и техническое), а потом тебя не примут из-за этой вот "мелочи", еще и обидятся что время их потратил. А лучше каждому работодателю это говори как можно раньше, типа "не будет ли это проблемой, уважаемые?" Параллельно учись на заочке, лучше сразу в СШАшной, если англ. позволяет. У нас коллега так делал (не вкат, а заочка американская), и потом туда уехал, но уже после диплома. Только я требований не знаю, может там тоже требуют вышку местную для зачисления. Могу уточнить какой универ если надо.
Надо специалиста. Бакалавры - это зумеры, их в жабу не берут.
Это одна из верхних строчек вакансий, которые я получил по запросу "джун жаба" в дс.
В среднем в каждом 10ом требуется корка нормальных вузов.
Я смог, сижу на удалёнке теперь, тоже в потолок плюю. Но ещё и зарплата капает.
Ты сам для себя выбирай, будешь ли ты пытаться, терпеть насмешки уебанов, каждый раз вытираться, вставать, потом пытаться ещё раз, до тех пор пока не получится или сдашься и упадёшь кверху лапками.
Справедливо.
Либы на все случаи жизни в питон-мире.
Наверняка и для джавы полно подобных либ, но нужно выбирать язык под задачу, а не наоборот.
Ну либо которая умеет считать с конца.
@Column(name = "student_id", nullable = false)
private Integer studentId;
@Column(name = "firstName", nullable = false)
private String firstName;
Почему бы не написать просто:
@NotNull
private Integer studentId;
@NotNull
private String firstName;
- OkHttp для низкоуровневой работы с запросами (для REST или других выебонов).
- Jsoup для парсинга статических страниц.
- HtmlUnit для парсинга динамических страниц.
Для удобства.
Колонка может быть "student_id_in_this_table_и_ещё_20_слов", а поле просто id. Ты же не всегда имеешь возможность создавать и изменять бд.
С JoinColumn там вроде запросов меньше будет или что-то такое.
>>56566
Зумерская хуйня. Пару раз попадал на собеседование общаясь там с лидом напрямую. Иногда там проскакивают вакансии, которых нет на хх.
Но в целом хуита для даунов. Как и любой чатик всё скатывается в фажество чуть быстрее, чем сразу.
Есть некоторое количество тематических чатов в телеге типа:
https://tg1.me/jvmchat — чат для разработчиков на Java.
https://tg1.me/javarush — еще один чат про Java.
https://tg1.me/javastart — новички в Java.
там можно поспрашивать вопросы по разработке и поискать работу, может кто ищет. Еще по моему опыту хорошо работает пост в линкедине, если его лайкнет много народу.
Спасибо анончег.
Но зачем?
Попробуй посиди во всех, будет бесполезно - выйдешь.
Ну это же хорошо. Борда живая :з
Начиная с 1995
Джава 5 2004 г.
Джава 8 2014 г.
Ждем 2024
>>Колонка может быть "student_id_in_this_table_и_ещё_20_слов", а поле просто id
Просто я вижу что в ентити 10полей и все называются ровно так, как в @Column(name). Если там будет ебанутое название, то можно прописать руками, но зачем дублировать то что и так очевидно? Это ж как раз таки не удобно и только загромождает код.
Потому что explicit обычно лучше чем implicit - нагляднее, меньше "магии". Но не до абсурда конечно, когда иногда это становится слишком verbose, и начинаются появляться инструменты типа ломбока, генерирующие тебе аксессоры/мутаторы. Это правило везде прослеживается, не только про колонночки. Если что-то явно написано то это можно в случае чего быстро изменить/дописать, не вводя новую сущность. В примере с аннотациями на колонночки при пуше в гит изменений, например, у тебя будет "изменение строки", а не "новая строка", что может тоже влиять на восприятие (семантика коммита будет - изменение, потому что ты именно изменил поле, а не добавил). А еще вот пример лично мой: я ставлю всегда скобки вокруг тела в форах и ифах, даже если там в теле только один стейтмент: то же самое правило - explicit лучше чем implicit - мне так удобнее видеть блок, плюс можно легко в блок дописать новый стейтмент и будет всего одна строка в гите, а не три строки если к одному стейтменту без скобок дописать еще один с добавлением этих скобок.
О, ты вроде что-то понимаешь, расскажи про гит.
Я вот хуярю один коммит - один таск.
Т.е. мне говорят "почини вот это". Я делаю, и заливаю. Иногда там одна строчка, иногда 20.
Или "добавь функционал". И это тоже один коммит, хотя там может быть 2 репозитория, 3 новых сервиса, 5 сущностей и ещё в других классах изменения.
Как правильно?
Да они еще несколько версий минимум в превью будут, когда завезут.
Это тебе должен объяснять твой менеджер проекта. Если ты сам коммитишь в мастер, то разницы нет и ты все делаешь правильно - в первом случае у тебя багфикс, во втором добавление фичи. Добавление фичи можно разделять на несколько коммитов, например ты целую неделю над фичей работаешь и вполне можешь несколько точек успеть создать. Только не пуши коммиты сразу, по одному, чтобы они, из незавершенной фичи, перемежались с другими коммитами других людей. Коммити в отдельную ветку (git checkout -b <branch_name>). А потом по завершении фичи есть два варианта:
1) просто мердж в мастер, тогда параллельная ветка сливается с последним коммитом мастера, "вливается" в него;
2) ребейз (иногда со squash'ем - чтоб всего один коммит получился) - перемещение твоей ветки на топ коммит мастера.
Вот как именно вы захотите в своем проекте так и делаете. Обычно финал добавления в мастер - мердж или ребейз - делает специально выделенный человек, предварительно проверив код, а ты просто ветки свои ему пушишь.
>>56874
Да, еще забыл, если отвечать прям на вопрос "а как мне разделять изменения на коммиты?": главное правило - каждый коммит не должен ничего ломать, т.е. продукт, после очередного коммита должен запускаться и работать, без ошибок компиляции например, даже если типа ничего не добавилось. Объясню на твоем примере: допустим у тебя "2 новых репозитория, 3 новых сервиса, 5 сущностей и ещё в других классах изменения", которые эти все новые классы используют. Т.к. новые классы создаются раньше, чем их использование в других классах, можно их коммитить отдельно. Понедельник: создал энтити и репозиторий, набросал зачатки сервиса, написал тесты, проверил что работают энтити и репо. И в конце дня коммитишь репо и энтити, но не сервис, а т.к. эти классы никто не использует еще, то коммит ничего не ломает. И так всю неделю новые классы хуячишь которые нигде не используются, кроме твоего "грязного" состояния гита, а в пятницу уже коммитишь весь сервис (что само по себе тоже ничего не сломает, ведь он нигде еще не используется), потом коммитишь уже вставку сервиса в другие классы. Аккуратно следишь чтобы не было такого что закоммитил сначала связку, а потом уже новый класс - это плохо.
> каждый коммит не должен ничего ломать, т.е. продукт, после очередного коммита должен запускаться и работать, без ошибок компиляции например
Эх, вот бы этому ещё всегда следовали.
В смысле? Кто-то действительно так косячит?
Меня ебут и за всякие мелочи, вроде нейминга переменных.
Если после моего коммита что-то по пизде пойдёт, боюсь я из офиса выйду через окно.
>каждый коммит не должен ничего ломать, т.е. продукт, после очередного коммита должен запускаться и работать, без ошибок компиляции
Схуяли? В фича бранче у тебя полная свобода действий, ломай как хочешь.
Если у тебя огромный проект и ты делаешь какой-то рефакторинг который касается всего проекта, то ты просто не сможешь работать так, чтобы каждый коммит ничего не ломал.
Да, действительно, есть такие случаи поймал меня, тоже так делаю. Речь была скорее про публичные ветки, но даже в личных стараюсь придерживаться того правила, однако это не всегда удается.
>>56892
Я не говорю на каждый класс прям отдельный коммит хуярить, нет, но лично мне нравится разбивать: этап подготовки - коммитим новые классы, этап связки - коммитим использование новых классов в различных местах. Это позволяет в случае чего прыгнуть на этап подготовки и что-то добавить, переписать историю оттуда (разумеется только пока ветка еще локальная).
У нас не ебут, даже иногда бывает, что в мастере некомпилирующийся код. Особого смысла ебать и нет - до релиза времени полно, сотню раз все успеют всё поправить и протестировать.
Спринг.
Завезли наполовину. Тем, кто коммитил, приходит уведомление, что сборка свалилась, и всё.
Ахуеть. И тимлид не пиздит палкой по голове, если ты хуйню запушил, не смотрит код, ничего?
>Почему хибернейт легаси?
Потому что какой-то местный дурачок форсит словосочетание "легаси хибернейт". Вместо того чтобы писать, допустим, "говнохибернейт", раз уж он так ему не нравится.
Смотрит, т.к. пуллреквест делаешь на него. Но в браузере можно что-то и не досмотреть, особенно когда дохуя изменений.
Ну, есть давным-давно сломанный плагин для запуска анализатора и предварительной сборки по пуллреквесту, но чёт никто не чинит, всем похуй.
Например если у меня стоит, что я не годен по 18 статье (по дурке), то могут послать нахуй?
Особенно интересуют банки.
>>я ставлю всегда скобки вокруг тела в форах и ифах
Даже в таком случае? По мне так без скобок не всегда плохо, если это умещается в 1 строку.
if (flag1) {
return false;
}
if (flag2) {
return false;
}
if (flag1) return false;
if (flag2) return false;
Получилось как свич, только без свича.
А вот писать в 2 строки без скобок - конечно свинство.
У меня в одном зелёном банке, подозреваю, только наличие смотрели. Не знаю. Они берут твои документы, записывают данные и возвращают, и это уже при непосредственном оформлении уже после всех собесов и согласований, так что вряд ли они пошлют нахуй в самый последний момент.
А постгрес искаропки подключается без ебли. Но это скучно.
Поэтому фронтендеры и не любят такое. Куча сил, куча кода, а результат - пшик.
Вангую проблему из-за com.mysql.cj.jdbc.Driver
>Куча сил, куча кода, а результат - пшик
Это хорошо, что они так думают. И не знают, что у нас есть спринг и его магия.
Прописал другой плагин аутентификации
Апнул коннектор до совместимой версии с MySql
После апа прописал mvn clean package, так как появилась новая ошибка
Пришлось прописать версию компилятора mvn
Исправил ошибку с временной зоной
И запустилось
> временной зоной
Мне когда-то пришлось в URL для подключения кроме этого добавить ещё десяток ключей про кодировки, SSL и хуй знает что ещё, хотя у всех в примерах вообще ничего такого не было. Может, с конфигами мускла что-то не так было.
Тернарный тут не подойдет, у меня же флаги разные, а после них еще код пойдет.
flag1 ? false : flag2 ? false : <куча кода со своей логикой>
Да, даже в таком случае. Я подозреваю что ты показываешь early-exit - механизм раннего выхода из метода при неудовлетворении каких либо условий или параметров. У меня это обычно выглядит так, см. пикрилы. Я могу в любой момент захуярить там вывод в лог или ассерт, блок всегда к этому готов. Я на автомате уже так пишу: "if () {}", а потом расставляю внутренности. А если в идее то макросами: ifn, fori.
>проверяли военник
"Вам 30 лет, проблем с армией у тебя уже нет..."
Если это можно назвать проверкой - то да.
Мне безопасники разок звонили ещё до подписания документов (забыл кое-что заполнить в анкете), правда, в то время они знали обо мне только родной город, инфу о родственниках, где учился и ещё что-то. Понапроверять они успели бы что угодно - с собеса до выхода на работу у меня прошёл месяц.
Здесь у всех в среднем столько, по крайней мере, кого я спрашивал.
Бюрократии много, бесконечные согласования, ожидания исполнений, пока документ дойдёт до самого главного, пока у него найдётся время. Никто никуда не торопится.
> Вопрос к энтерпрайз-рабочим, у вас проверяли военник при устройстве на работу?
Конечно. Просили отсканировать для личного дела
Нихуя не понимаю, что импортить.
Откуда пакет javax берется?
Фу жавараш
>>Откуда пакет javax берется?
Зз JRE.
Анотацию Id лучше импортировать стандартную(javax), а не спринговую.
Вместо Date лучше использовать LocalDate - меньше будет проблем с бд.
Конкретно у меня это настолько обыденный офис, что вместо нас могли бы сидеть 50-летние тёти и заниматься делопроизводством в ворде и экселе. Есть кухня с кофеваркой, есть стол для пинг-понга, пара диванов. Ну и кабинеты, где сидим по 10-15 человек.
Приставки зло, и так весь день сидишь.
Д-да...
Первые 2 года, меня ещё интересовали подобные вещи. Но сейчас глубоко похуй, насмотрелся синдром гинеколога.
Переписал на c++, и там и там на даблах без длинной арифметики. Ни коим образом не научное сравнение, за который сеньер или миддл постучат по головушке. Но все равно потратил пару часов и написал то же самое на с++ и SFML Graphics.
Думал, будет быстрее, но вышло в несколько раз медленнее, так что хз, как это трактовать. Логическая часть точно такая же, работа с тредами примитивная, не было желания сейчас вникать в них на с++. Делаешь больше 1 треда - становится быстрее, значит, многопоточность работает(-с). Пикчу рендерил, в ргба, а не ргб из-за особенностей сфмл, но прям такой большой разницы не должно быть. Ебли с синтаксисом больше. Получил обратный эффект от того, что ожидал. Хотя это как сравнивать время, за которое ты пропрыгаешь вокруг стадиона на пружине или проедешь на самокате. Хуйня, но почему бы и нет.
> SFML
Надеюсь, ты создаёшь буфер с пикселями и текстуру, а не рисуешь 100500 прямоугольников размером 1х1?
мимо-тред не читал
Вот так.
static sf::Uint32 picture; // rgba
// {update picture logic ...}
texture.update((sf::Uint8)picture, n, n, 0, 0);
// virtual draw func
target.draw(sprite, states);
Спрайту 1 раз текстура задается.
Тогда хз.
Привет, я тот анон что тебе комментил про улучшения.
Объяснить можно тем, что у тебя похоже действительно работа с графикой сжирает больше времени чем вычисления. Тебе надо отделить код вычислений от кода на вывод, а то у тебя там перемешано было все.
Грубо говоря надо так:
int[] image = largeCalculations();
drawImage(image);
largeCalculations() можно и нужно распараллеливать, а вывод распараллеливать не надо. В largeCalculations() не должно быть кода на вывод, потоки там не должны знать ничего о SFML или Picture, в идеале они даже в цвета не должны превращать результаты вычислений (но это уже от алгоритма зависит, можно так сделать в твоем случае или нет я не знаю, т.к. не знаю алгоритм), просто возвращать массив даблов например, а уже потом промежуточная функция переводит это в массив цветов, а третья - выводит на экран.
При такой компоновке кода тебе нужно будет сравнить только время реальных вычислений на построение массива результатов, а оно должно быть предполагаемо меньше в си хотя бы из-за работы на одних даблах.
У меня есть один статик массив не синхронизированный, к которому я обращаюсь из потоков, не залезающих на на одинаковые пиксели. Один поток - одна область пикселей.
Вычисления происходят в run() функции (набрался привычек от жабы) и именно ее я параллелю.
Методы и поля пришлось сделать статик, когда игрался с потоками, возможно было правильнее без статика обойтись (что, если статик контент по умолчанию синхронизируется, а я не знаю, хотя вряд ли). По уму надо избавиться от конструктора и сделать сеттер на статик контент в такой реализации и конструктор в прайват секции, чтобы вообще не плодить объекты. Сейчас на ноуте нет нужной версии VS, чтобы исправить.
Потоки создаются в void MLogic::main().
Изменение текстуры после joinа всех логических потоков, вывод в отдельной функции.
>При такой компоновке кода тебе нужно будет сравнить только время реальных вычислений на построение массива результатов, а оно должно быть предполагаемо меньше в си хотя бы из-за работы на одних даблах.
Тоже об этом думал. Завтра замерю.
Код https://dumpz.org/bEhFE4ZZ3FnB
В книжке пишут массив чаров.
Открываю класс стринг в джаве 11 - private final byte[] value;
Да хоть массив булеанов вперемешку с флоатами. Это детали реализации, нет смысла о них задумываться, это ничего не даст.
Главное что это даст - удовлетворит мой интерес.
Ну а во вторых. Вроде byte занимают в 2 раза меньше места, чем char.
Глянул в исходниках 8, там чары, в 14 - байты. Интересно. Возможно, в одной из спецификаций джавы это даже описывается. Но это долго копаться надо, чтобы найти.
Берутся биты чара и сохраняются как идущие подряд отдельные байты с учётом всяких правил кодирования юникода, endianness и т.д.
Начиная с Java 9 там массив байтов, до этого был массив чаров. Изменение называется "Compact Strings".
Смысл в том что если строка содержит только символы ISO 8859-1 (Latin-1), то она хранится "компактно" в представлении один символ-один байт, иначе - в обычном UTF16 по два байта на символ, с суррогатными парами и прочим.
https://www.baeldung.com/java-9-compact-string
if S is a supertype of T then List<S> is considered to be a supertype of List<? super T>. The feature is called contravariance
По идее должно же быть наоборот? Если S супертип для T, то тогда List<? super T> является суперклассом для List<S>?
List<Number> numbers = List.of(1, 1.0);
List<? super Integer> integers = List.of(1, "2");
numbers = integers; // ошибка
integers = numbers; // OK
Жирный участок с 10к итераций рекурсии.
То есть в данном примере integer = numbers выполняется, потому что numbers является объектом класса-наследника?
Это философские рассуждения.
Он как раз наоборот же спросил, дано:
>List<S> is considered to be a supertype of List<? super T>
Из твоего примера List<Number> это supertype List<? super Integer> из дано и должно быть как раз numbers = integers, но так нельзя.
А еще так нельзя: List<Number> numbers = List.of(1, 1.0); // Cannot resolve method 'of(int, double)'
И так: List<? super Integer> integers = List.of(1, "2"); // Cannot resolve method 'of(int, String)'
И если первое исправляется легко, это ошибка внимательности, то что ты имелл ввиду под вторым совершенно неясно, очевидно что стринг вообще в другой ветке иерархии, а Object не добавишь.
> а как это работает?
Как если сделать List<Object>, а потом привести к List<? super Integer>. List<? super Integer> это ведь не более чем List, в который можно положить Integer. Так что как бы ничего не нарушается.
List<Number> numbers = List.of(1, 1.0);
List<? super Integer> integers = List.of(1, "2", numbers.get(0), new Object(), new ArrayList<String>(1)); // Ok
В чем отличие от Object? Integer тут вообще никаким боком.
Другой анон
Тут как бы правая сторона осполняется ДО левой и поэтому никаких интеджеров еще нет, результат правой стороны - List<Object>, а уже потом при присвоении накладывается ограничение.
Как понять последнее предложение? В чем его смысл?
А, там потом засетить можно минимум Integer.
Ну а все же, как понять запись:
class Test<T extends Test<T>>
Получается какой-то рекурсивный тип. Для чего это нужно?
> It means that the Enum type must be instantiated for one of its subtypes.
Я вот это на русский язык перевести никак не могу и понять тоже.
> It means that the Enum type must be instantiated for one of its subtypes.
Это значит что этот Энум тип должен быть инстанциирован для одного из его подтипов.
Напиши сам, да посмотри что получится.
>этот Энум тип должен быть инстанциирован для одного из его подтипов
Что значит "инстанцирован для одного из его объектов"?
Когда ты объявляешь новый enum, под капотом там происходит что-то подобное. Например class UserRole extends Enum<UserRole>
Спасибо. А где больше почитать про такие штуки под капотом и вообще про то как работает jvm?
В интернете.
В фулл скрине я знаю как такое сделать, а вот в оконном режиме нет.
В дикой природе такое встречается сплошь и рядом, как и много другой хуйни. Но нет никакого смысла плодить такие интерфейсы, не делай так. Если действительно потом понадобится несколько реализаций, тогда и отрефакторишь, это тривиально.
>нормальные люди
Смотря что ты подразумеваешь под этим.
На какой-нибудь галере, где главное это сделать побыстрее, отдать заказчику и съебаться в закат - там можно хоть одной стеной текста хуярить всё в одном классе.
В продуктовой же конторе, которая сама свой код поддерживает и постоянно улучшает, вроде какого-нибудь московского банка - ебут за все проёбы. DRY,SOLID, просто метод на страницу ебанул, неправильно назвал переменную/класс/метод, скобку не так поставил - получаешь пизды, на код-ревью с тебя смеются, показывают пальцем, неделю сидишь рядом с туалетом.
> банк
Ахахах, на нашем проекте всем похуй, хоть определённый кодстайл и есть.
Каждый файл наполовину выделен идеей из-за дубликатов, 5 POJO с одинаковыми полями и конвертеры между ними, методы на 200 строчек, куча классов со своими костылями и общим наследниками вместо одного универсального решения, в базе 10 таблиц для одного и того же вместо одной.
Но это не от хорошей жизни, обычно времени на рефакторинг тупо нет, и пишут обычно так, чтобы говнокод хотя бы не растекался.
Мимо >>56966 - кун
Да, все так. Есть места "вроде какого-нибудь банка", где, как тут недавно замечали, "никто никуда не торопится". Там совершенно нормально, когда отдел хорошо оплачиваемых специалистов неделю решает вопрос о правильности имени переменной. Туда за такой работой и идут. А есть другие места, где больше думают о реальном выхлопе, об эффективности, о производительности труда...
>5 POJO с одинаковыми полями и конвертеры между ними
Так это как раз то что надо, солидно, по-банковски. Тут недавно поясняли
Зачем ты там работаешь? Платят хорошо?
>>60061
>думают о реальном выхлопе
Высрать побыстрее бажное неподдерживаемое говно это не выхлоп, это высер.
>об эффективности
Если ты под эффективностью погромиста подразумеваешь SLOC - то несомненно!
>о производительности труда
Какая нахуй может быть производительность, когда всё как в посте выше?
Неделя уйдёт на то, чтобы разобраться в ебучей лапше, ещё неделя на то, чтобы добавить туда ещё одну макаронину, месяц потом твоя мать икать будет, когда тестировщики будут её вспоминать, вылавливая новые баги.
В то время как с нормальной архитектурой ты на ходу можешь добавлять новый функционал, почти никак не влиять на старый и в случае чего другой человек может взглянуть на код и быстро понять что и как там работает.
>Высрать побыстрее бажное
Не так сложно прийти к той мысли, что "побыстрее бажное" и "неделю согласовывать имена переменных" - это всего лишь две противоположных крайности, а не единственно возможные варианты
>всё как в посте выше
Где-то как в посте выше, где-то нет
Так а если вернуться от общих рассуждений к конкретике. Допустим, у на продуктовая контора, которая "...постоянно улучшает". Надо ли нам возле каждого WhoreService обязательно иметь одноименный интерфейс? Что именно мы этим улучшаем и какую практическую задачу решаем?
> Зачем ты там работаешь?
Знаний и опыта у меня маловато, чтобы искать место лучше.
> Платят хорошо?
Средне по рынку.
>Что именно мы этим улучшаем и какую практическую задачу решаем?
Спроси у того, кто так делает. Думаю, ответят, что делают это потому что спринг за них всё связывает.
>>60085
>Средне по рынку
Я вот так и не понял до сих пор сколько это. На хх одни циферки, на деле другие.
Как на базаре, сколько наторгуешь, столько и дадут.
Подскажите плез , читаю сейчас Герберт Шилдт Java 8. Полное руководство 9-е издание . Все достаточно понятно , но тут нет никаких заданий для практики , где можно попрактиковаться находясь еще на уровне изучения языка помимо CodeWars ?
заранее спасибо за ответы
Требования в вакансиях, в целом, не врут.
- Spring (Core, Data, MVC, транзакции) и EE (EJB, JMS, JNDI)
- Понимать SOAP/REST
- Oracle или Postgres на уровне DDL/DML
- JUnit/TestNG
- Желательно JS/React, но не обязательно.
- алгоритмы/структуры данных
- также можно потыкать какой-нибудь шаблонизатор freemarker, попарсить XML и т.д.
- ну и очевидные мавен с гитом.
Прям задрачивать всё это не нужно, хватит знаний от написания пары пет-проектов на этом стеке.
спасибо
Вот и я к 80 потихоньку подошёл почти за полгода.
Что делать, если вдруг вылечу с работы через год-другой (мало ли что может случиться), сколько просить, не представляю.
Если на ждуна я ещё мог понять среднее, от 60 до 100, то вот мидлы и выше это уже какая-то размытая хуета.
Одни на 160 ищут людей с 10 годами опыта, другие на 300к с парой лет. Сложна.
>>60093
Это всё мои посты. И я тебе свою версию назвал. Для DI это делается.
Всякое бывает. У меня один знакомый фронтендер за полгода вообще до 150 поднялся, до этого не работал никогда. Всё сильно от организации зависит, от проекта, от тебя самого, от левой пятки нанимателей. И миддлами тоже разных людей везде считают.
Я бы где-нибудь через год претендовал на 100-120. Хуй знает. Со мной не торговались, просто по факту уже прислали оффер с суммой.
>Это всё мои посты. И я тебе свою версию назвал.
Столько шума было, а как дошли до сути, так "хз, я джун, но в серьезных банках так делают..."
>Для DI это делается
DI прекрасно работает и без интерфейсов. Что по своей сути, что конкретно в спринге и аналогах
Спасибо большое анончик.
>EJB, JMS, JNDI
Как оно юзается вообще в проекте? В спринговых доках этих терминов не встречал, их обязательно надо знать?
>где-нибудь через год претендовал на 100-120
Один в один мысли. А потом то что?
Когда можно запросить к примеру 200к и чтоб на тебя не посмотрели как на идиота? Для меня это пока что тайна.
>>60149
То, что я ждун не делает меня слепым и глухим. Тимлид ебёт за запах в коде всех, независимо от должности.
Можешь дальше смеяться с GoF и прочего. Я вот чётко усвоил, что без этого подняться выше макаки не получится.
Объяснить, в чем конкретно тут суть запаха и при чем тут GoF ты не можешь, но четко усвоил, что надо копать от забора до обеда, а свою голову не включать, а то выебут. Ок, это тоже путь.
>Объяснить
Поопытней кого поищи, чтоб он тебе объяснял. Мишу попроси, например.
Свою точку зрения я высказал. Делаешь интерфейс, делаешь реализацию, потом где надо спринг это всё подтянет и соберёт.
Принцип открытости/закрытости. Захочешь ты чего-то особенного, понадобится когда-нибудь GayWhoreServie, достаточно будет просто другую имплементацию сделать и аннотацию поставить, чтоб не было неоднозначности.
"Потом отрефакторю, если понадобится". Ахуенные истории. На деле оно понадобится, когда там уже 9000 других сервисов на этой хуйне будет завязано и исправлять всё надо будет чуть дольше, чем сделать нормально с самого начала.
Буквально вот на днях с этим столкнулся.
>при чем тут GoF
У меня сейчас это в голове. До этого только читал про это, теперь на практике постигать начинаю, как и где это всё применять надо, чтоб методы на 100+ строк не лепить и прочий треш.
И чёт нихуя не смешно от того, что мои же ошибки кто-то 30 лет назад делал, рефакторил, а потом ещё и книгу написал, как правильно.
>надо копать от забора до обеда, а свою голову не включать, а то выебут. Ок, это тоже путь.
Да, и так пару лет нон-стоп, минимум. Это ты ещё забыл самое главное. Развиваться постоянно и учиться на ошибках, в том числе и чужих.
А с точки зрения простоты и перегруженности?
> потом где надо спринг это всё подтянет
И без этого тоже подтянет, поверь мне
>понадобится когда-нибудь GayWhoreServie, достаточно будет просто
А если не понадобится? Попробуй прикинуть, сколько в твоих проектах всего подобных сервисов и сколько из них тех, где и правда понадобилось.
>"Потом отрефакторю, если понадобится". Ахуенные истории. Буквально вот на днях с этим столкнулся.
Штука в том, что именно такой рефакторинг - выделить интерфейс - это буквально кнопка в IDE, да и без нее было бы достаточно тривиально. Поэтому что-то мне подсказывает, с чем-то иным ты столкнулся. Не, бывают, конечно, случаи, когда и правда стоит сразу заложить какую-то гибкость. Если есть понимание, что она с высокой вероятностью будет нужна, и если расходы на нее прямо сейчас при этом не слишком велики. Но не по принципу "не задумываясь хуярим на каждый чих, а то вдруг понадобится".
>Да, и так пару лет. Это ты ещё забыл самое главное.
Знал бы ты, как забавно для меня звучат эти поучения
А это не спринговый стек. Вместо EJB в спринге IoC (@Autowired и т.д.), они в целом по сложности/фичам аналогичны. JMS - честно говоря, хз, у нас над ним куча обёрток, и обычно юзаем их, а не javax.jms.* напрямую. JNDI - тоже обёртки, но там и учить нечего.
Надо ли знать, зависит от проекта. У нас куча легаси-говна на EE, проект изначально создавался вообще без спрингаю Но во многих других проектах только спринг.
>>60166
> Когда можно запросить к примеру 200к и чтоб на тебя не посмотрели как на идиота? Для меня это пока что тайна.
К тому времени уже будешь всю эту кухню понимать, и появится реальная уверенность в своих знаниях. Сможешь с полпинка вникать даже в самый хуёвый код, и знать, что всем от тебя нужно, даже если они этого не говорят. Ну, это предположение, я не сильно о долгосрочной перспективе сейчас парюсь, до этого пока как до луны.
Изучи спринг и хибернейт, например. Это не так сложно, как кажется. Раз уж осилил SQL, то и это быстро осилишь.
>А если не понадобится?
Ну и заебись. 2 строчки кода больше написал, вот это потеря.
>есть понимание, что она с высокой вероятностью будет нужна
Обычно ты нихуя не знаешь, делаешь то, что говорят. А потом приходит пм и говорит, что надо бы ещё вот это добавить. В изначально ущербную архитектуру это добавить сложнее, чем заранее перестраховаться и сделать задел на будущее.
>Знал бы ты, как забавно для меня звучат эти поучения
Не знаю, мне похуй. Ты спросил - я ответил. Или погоди. Ты выебнуться пытаешься? На харкаче? Где каждый второй это помидор 300к на удалёнке?
>>60219
>К тому времени уже будешь всю эту кухню понимать
>знать, что всем от тебя нужно, даже если они этого не говорят
Вот я по этому поводу парюсь больше всего. Ведь по сути, большую часть времени хуярю код. Мне по сторонам смотреть то и некогда, а проебать момент, когда скилы уже вырастут несколько выше текущего оклада, как-то не хочется.
>2 строчки кода больше написал
Таскать по интерфейсу на каждый спринговый бин в проекте это далеко-далеко не 2 строчки.
>Обычно ты нихуя не знаешь, делаешь то, что говорят
Да-да, если ты рядовой, то делаешь то, что говорят, а то придет сержант и выебет, а как в жизни иначе, надо уметь вертеться. Все ок, дальше не интересно.
> проебать момент, когда скилы уже вырастут
Этот момент будет сложно пропустить. Ты заметишь, что больше не бывает такого, что сидишь неделю над непонятым багом, а потом поправляешь одной строчкой. Что решаешь задачи быстрее, чем они были оценены. Что с тобой советуются и даже зовут поревьюить чей-то код.
> Это разве не уровень помидора уже?
В целом, да, но для него это уже давно само собой разумеется + ещё много чего сверху. Мидол же только начинает что-то понимать.
>Это уже шизофазия
Слушай, а это мы неплохо продвинулись по сути вопроса. Так может уже выходит, что не обязательно нужно иметь WhoreService в виде интерфейса c WhoreServiceImpl, и можно как-то эти случаи различать - когда нужен интерфейс, и когда нет? Если бы ты в изначальном посте по теме о чем-то таком писал, а не начинал в том духе, что лишь бы тимлид не выебал, меньше было бы непонимания.
Огромные методы - ещё ладно. Хуже, когда долго что-то дебажишь, прыгаешь по фреймам стека, наконец-то дошёл до конца метода, возвращаешься в место вызова и вспоминаешь, что это всё была только первая строчка во внешнем методе, а там ещё 30 других вызовов, и за каждым кроется по такому же огромному куску кода, и в каждый надо вникать.
>Ты бы изначальным примером взял какую-нибудь шлюхину титьку
Я не знаю, что за иерархии титек ты себе представляешь и что именно тебя заставляет делать твой тимлид, но тот анон с вопросом про интерфейсы скорее всего имел в виду именно что эдакую шизофазию, которую и правда можно встретить. Когда код, как обычно, полон типичных сервисов-синглтонов с бизнес логикой (по размещению заказов на шлюх), но при этом каждый, сука, с интерфейсом. Ну просто потому что интерфейсы это хорошо, и буква D из SOLID велит юзать интерфейсы, да и вообще "вдруг понадобится".
Под сервисом я представляю какую-то хуйню, которая будет в разных местах использоваться, возможно по разному.
Титьки - ну хотя бы натуральные/силиконовые. И шлюха же может их менять. Т.е. уже можно интерфейс делать и его в шлюхе указывать а не конкретный класс.
>Когда код, как обычно, полон типичных сервисов-синглтонов с бизнес логикой (по размещению заказов на шлюх), но при этом каждый, сука, с интерфейсом
>сервис
>по размещению заказов на шлюх
>синглтон
Ахуенные истории. Тут 15 лет опыта не надо иметь, чтоб понять, что их будет чуть больше одного.
Пример говно. Не надо в одну кучу сваливать объект, который очевидно будет в одном экземпляре и сервис, где само название уже намекает.
>что именно тебя заставляет делать твой тимлид
"Покажи где он тебя трогал..."
>Ахуенные истории. Пример говно.
Перестал успевать за твоей мыслью. Чего будет больше одного? Сервис по размещению заказов не может быть синглтоном? На это намекает само название "сервис"? Это имеет в любом случае отношение к интерфейсам?
ООПшные иерархии разновидностей сисек это отдельная история (и так ли их вообще много в энтерпрайзе), но в первоначальном вопросе было про сервис, а это слово и правда намекает, только, кажется, не на то, о чем ты думаешь.
В моём воображении сервис почему-то явно никак не может быть синглтоном. Это штука, которая что-то обрабатывает и отдаёт результат. Уже подразумевается, что способы обработки могут быть разные. Вызвать шлюху с мобильного, через приложение, через сайт, разные бд шлюх, скидочки по праздникам.
Просто его надо учить на деле, а не по 1000страничным докам и спринг про.
Почитай разные книги, посмотри что больше нравится. Новшества Java 7 можно отдельно глянуть в книгах Хортсмана, например.
Стримы и лямбды тоже отдельно в современных книхах есть.
Java 9 нужна далеко не везде, но и по ней есть отдельные книги.
Загуглил за 15секунд 9ое издание.
Апплеты, свинг, свич конструкции. Это местные так троллят ньюфагов, советуя такое?
Даже если для вызова через сайт и приложение разные сервисы, ничто не мешает каждому из них в отдельности быть синглтоном. Разных сервисов (классов) может быть много, но каждый из них нужен в одном экземпляре. На всякий случай напомню, что в спринге все бины по умолчанию это синглтоны. Оглядись, они повсюду.
А даже если и не синглтоны, к вопросу об интерфейсах это все прямого отношения не имеет. Ну да и уже хер с ними.
>Апплеты, свинг
Не читал, но не вижу в этом большой проблемы. Пропускаешь эти главы, читаешь только про кор.
У меня обратная ситуация - на спринге приложения писать интересно, а как учить кор я хз. Писать унылую сортировку пузырьком, laba1 и машинные тесты javarush/codewars/hackerrank/leetcode.
А нахуя тогда вообще это читать? Лучше уж мурзилку какую для быстрого старта, а потом что посовременней осилить, где стримам и прочему уделено больше времени. А для более глубокого понимания ООП и паттернов наворачивать более специализированную литературу. Того же Мартина и Фаулера.
Начитаются про свои свичи и 5ую жабу и долбят потом свои макарошки.
>как учить кор
Коузен Кен, Современная жаба. Мне зашла легко, этого уровня тебе точно на ждуна хватит. 250 страниц всего, есть на русском.
Не помню разве что про женерики там, придётся отдельно где-то обмазаться этими PECS.
Посмотрел оглавление - вроде норм. Никакой ненужно хуиты. Спасибо, анон.
>Начитаются про свои свичи и 5ую жабу
А что там в новой жабе, что-то другое вместо свичей? А то чего-то вон в 13й их даже дорабатывают.
Так а стоило бы выпилить, ты считаешь? Не нужны?
Нет никакой проблемы, это хипсторки выёбываются.
Мы тут с аноном на десяток сообщений развели срач про интерфейс сервиса со шлюхами, а тут пришёл ты и вкинул вот это.
Неплохо.
Полиморфизм, Стратегия. Гугли.
Или вот выше анон ссылчку кинул, для тех кто любит саморазвиваться через ютуб.
> Стратегия
Ура, десяток классов вместо нескольких строчек.
не зря там выше писали про измерение эффективности программиста в количестве LOC.
Так а что там, во вкинутом, своими словами перескажи суть. Неужто говорят, что никак не обойтись без интерфейса на каждый бин?
Никак не обойтись, а также желательно никогда не юзать циклы и if и реализовывать всё через ПАТТЕРНЫ, чтобы занимало в 100 раз больше места и было настолько же непонятно.
А если так не делать, то выебет тимлид?
Какой-то человек (не знаю кто это, но вроде норм, в закладки добавил) рассказывает про свич конструкцию, как она появляется на начальном этапе, как потом разрастается до хуеты из 250 кейсов. Рассказывает о том, что это всегда начинается с 2-3, ведь на начальном этапе никто не может предсказать сколько кейсов действительно будет. А потом добавляется ещё один. А потом кто-то ещё добавляет один. И т.д.
Рассказывает о том, что никто не хочет это говно рефакторить до тех пор, пока что-нибудь по пизде не пойдёт и в жопу ебать не начнут уже тимлида, а тот соответственно начинает ебать всех остальных уже без вазелина и вот это всё.
>>60790
Ты знаешь, вот я тебя тут даже поддвачну. Последние примеры с инжектами автовайред в методах интерфейсов это пиздец.
Ну то есть, когда он начал делать отсылочки на скалу, я примерно понял, что он хочет и зачем. Но это пиздец. Такое применять на крудах для шаурмечной у Ашота никто не будет.
Рядовая макака эту хуйню не повторит никогда, уж лучше свитч. А команду таких вот выпускничков топовых московских вузов себе могут позволить далеко не все.
>рассказывает про свич конструкцию, как она появляется на начальном этапе, как потом разрастается до хуеты
Так а бин без интерфейса можно сделать или нет, я так и не понял. Опять не по теме что ли
>>Так а бин без интерфейса можно сделать или нет, я так и не понял.
Компонент? Можно, но это как то не интерпрайзно получится. Помидор должен нахуячить десять слоев абстракции по паттернам с алгоритмами, чтоб понятно было за что ему платят 300к/нсек.
Нельзя.
Лучше не смотри, там не то что бин без интерфейса, там вообще срака.
Он там имплиситно спрингом мапу собирает по айди бинов.
Т.е. Map<Id, Interface> для всех бинов.
Скала головного мозга, это ещё хуже чем GoF. Как только в коде появляется дохуя имплиситов порог входа взлетает невообразимо, магия спринга и хибернейта покажется мурзилкой.
Так deprecated же.
Что бесит в интерфейсах - нельзя сразу перейти на реализацию одним кликом. Попадаешь на интерфейс и надо искать кто его реализовывает.
Так есть же сайты с анкетами. Все как полагается: фото, отзывы, фильтрация по услугам, местонахождению, цене, фигуре. Как в интернет магазине заказать.
Так эти сайты все же недалеко ушли от формата тупой доски объявлений. В 2020 уже надо так, чтобы тыкнул пару раз пальцем в телефон и все, к тебе едут. И потом с карты само списалось.
>так джавадоки удобнее
Это кстати единственный адекватный аргумент, который тут пока звучал. А дальше, как мне кажется, стоит взвесить, настолько ли разница в этом удобстве велика и важна, чтобы ради неё фактически удваивать количество классов.
Количество классов не удваивается. У тебя есть интерейс (заголовочный файл) и класс (реализация). Все по заветам предков.
Спасибо, ахуенно.
>Количество классов не удваивается
Почему тогда оно компилируется в WhoreService.class? А количество файлов *.java тоже не удваивается?
>Все по заветам предков
А еще предки завещали перфокарты и кобол
И список из кучи классов где этот интерфейс упоминается. Это не то чтобы делало поиск невозможным, но минибатхерт каждый раз вызывает.
>ПОСТПРОЦЕССОРЫ БИНОВ
и не понял соли бугуртов, че вы вообще ими постпроцессите?
Несколько контекстов по умолчанию есть в Spring Cloud. А вручную их создавать тоже не нужно, да.
В том-то и дело, что ничего, потому что нахуй никому не нужно. Читаешь талмуд по спрингу, про все эти постпроцессооы, контексты, эвенты, аспекты, прототипы, а потом из всего спринга юзаешь только @Autowired, @Service, Data, JdbcTemplate и @RestController.
А что из себя вообще контекст представляет? В доке слабо объяснили. Как я понял, отдельный контекст для сервисов, отдельный для контроллеров или типа того, не?
Ну да. Ничего круче заебавшего всех процедурного программирования по сей день не придумали. Те же бины в спринге - это по сути модули с процедурами, а больше обычно ничего не юзают. Любые попытки сделать что-то сложнее превращают отладку в ад, хотя в идеале всё выглядит красиво.
>Ничего круче заебавшего всех процедурного программирования по сей день не придумали.
Где-то в параллельной вселенной при этом существуют сторонники DDD и rich domain model. Как там у них дела, интересно
Место на диске экономь.
Тред не последний на доске.
@Autowired
ЖабаТредСервис тред;
тред.перекат();
ПерекатЕксепшен: прошлый тред не утонул
... 123 common frames omitted
А в исходниках openj9 он просто пустой метод, т.е. ничего не делает. И он не native.
Нет.
Ну или просто у меня чат-бот, который я хочу, чтобы отключался на 1 минуту и в этот момент ему нельзя было задать какой-либо вопрос, а он бы только отсчитывал время до пробуждения.
@TEST(timeout = )?
Я бы ничего не ждал (да и вряд ли подобное есть в junit), а вместо этого в начале и конце метода с тестом лез в базу, смотрел, сколько осталось до снятия бана, и сравнивал.
Эта аннотация не для твоего случая.
Время инжектить просто и все. Как ты текущее время получаешь? Если из какого-то источника, то мокаешь этот источник, если напрямую в метод передаешь, то подставляешь нужное тестируемое время параметром.
Я только осваиваю тестирование (как и всю джаву), вот и думаю, как сделать. Вполне вероятно, что усложнил задачу и это так не работает.
беру две переменные LocalDataTime, только одно now(), а вторую plusSecond, дальше у меня крутится while, пока они не сравняются.
Здорово. Я бы посмотрел как ты будешь тестировать валидность токенов, которые выданы на день, месяц, год...
Mockito тебе изучить надо в любом случае, а конкретно здесь архитектура такая должна быть, что ты время должен получать внешним источником - либо напрямую в метод - validateTime1(LocalDateTime now), либо заворачиваешь в сервис, сервис инжектишь в сервис проверки (в этом случае сервис получения времени можно будет мокать).
Добра тебе. По поводу день, месяц, год, я думаю, что это вопрос того, на какое именно время я хочу блокировать. У меня пока стоит задача до 1 минуты. Про Mokcito почитал, видимо нужно изучать. Еще раз спасибо.
Ой, блять, че я в тесте написал. Строки 62-64 - ошибки копипаста.
Смотрю многние говорят что моки это плохо и надо юнит тесты писать без моков и показывает в примерах какие то хэлоуворлды. А у меня сервисы которые лезут к другим сервисам и к репе. Я вот не пойму они все таки имеют ввиду свои хэлоуворлды, а сервисы ЭТО ДРУГОЕ (только у меня такой логики не так уж много - утилитные классы разве что проверять). Или я что то делаю не так? У меня обычно тесты выглядит так
@Test
when(WhoreRepo.getByTitSize(anyInteger)).thenReturn(makeTestListWith3Whores())
List<Whore> whoreList = WhoreService.getByTits(anyInteger)
validate(WhoreRepo).getByTitSize(anyInteger)
assertEquals(3, whoreList.size)
Я хз как тут избавиться от мока и сделать его обычным юнитом. Юниты с созданием объектов сложнее конечно, но суть та же - моки-вызов-валидация-ассерт.
>многние говорят что моки это плохо и надо юнит тесты писать без моков
Да? Кто так говорит и почему плохо? А вообще говорят много чего, у нас тут давеча вот if-else из языка выпилить предлагали. Другое дело, что ситуации бывают разные и тесты для них разные тоже.
>when(WhoreRepo.getByTitSize(anyInteger))
По моему опыту на попытках мокать/стабить работу с БД не уедешь дальше каких-то самых простых случаев. Лучше поднимать настоящую БД и заполнять ее данными.
Не слышал чтобы говорили что моки это в принципе плохо. Есть такое мнение, что мокать нужно только интерфейсы, но не имплементации, и я могу сказать что не согласен. Типа тест не должен знать деталей реализации. Но это именно тест интерфейса, а я хочу протестировать свою реализацию, поэтому идите нахер, я пишу тесты классов. Любой инструмент нужно юзать с головой, и наверное есть случаи злоупотребления, но я о них не знаю или не помню. Тесты это вообще мое личное пространство - если упадет моя реализация именно я буду виноват, что мой класс что-то не сделал. Поэтому я пишу тесты как удобно лично мне. У меня, например, есть своя мини-либа с рефлекшеном для тестов приват методов и других страшных вещей. Кто-то пишет либы для тестов статик-методов. Этому всему можно найти применение, ведь под конец дня главное чтобы продукт работал (пусть даже и со свичами).
Так что ты пока делаешь все правильно, а люди с "передовой", с прогрессивным мышлением, еще не до конца оформили эту свою идею бест практиками, паттернами и прочим.
А тем кто скажет, что мои классы потом будет поддерживать кто-то другой, для вас есть аргумент - буква O из SOLID (да и другие буквы тоже). Наследуйтесь, оверрайдите, с нуля реимплементируйте, а потом тестируйте "прогрессивно", по-научному, как угодно.
Хочу сейчас опять вкатиться.
Последние 2 раза, когда ходил собеседоваться, я жидко оподливился на банальный вопросах о том, для чего нужен спринг.
Начал читать Про Спринг 5 в переводе. Ощущение, что я делаю что-то не так.
Подскажите, куда направить своё свободное время, чтобы сделать это наиболее эффективно?
Ну и для чего нужен спринг?
Там слышал в каком-то AS запрещено вообще свои потоки создавать, он вместо тебя многопоточность делает сам. Вот это кайф наверное, не надо учить одну из сложных частей кора.
И правильно, ресурсы должны менеджиться сервером приложений, а не вручную, меньше вероятность неправилтного их юзания и последующих трудноуловимых багов. Юзкейсов у тредов не так много, да и в EE-мирке никто не перформансом не гонится.
>в каком-то AS запрещено вообще свои потоки создавать
О, это чудесная тема. Там ведь не то что буквально запрещено, так что поток не заработает, а просто в спеке записано, что не следуют так делать, потому что, дескать, AS не обязан обеспечить в твоем потоке корректную работу всяких ежб. Реально при этом обычно все работает, нечему там особо не работать.
Но бывало, видишь, что сидят какие-нибудь чуваки и не решаются создать поток, даже для какой-то ерунды, где не нужны ресурсы ASа. Прочитали же, что нельзя, так что мало ли. И вместо этого пердолятся через какие-то EE-подпорки. Потом наконец какой-то смельчак сделает поток, он прекрасно работает, и все такие - а чо так можно было. Дивный мир.
пишу клиент для своего рест апи, нужна либра для хттп реквестов, не могу найти ничего годного, пишу на котлине кстати
а еще как отправить хттпс реквест? или это на сервере надо настроить чтобы только хттпс был?
Я надеялся, что ты что-то посоветуешь! Я уже спрашивал тут как-то на тему того, как можно проверить лежат ли объекты определенного класса в листе или нет, до сих пор твой код вкуриваю. Спасибо большое!
Попросил стакан воды и зубочистку.
Чтобы передать аргументы командной строки бину для какого-нибудь консольного приложения (ну или не консольного).
Склоняюсь к респонсу, но думаю не оверинжиниринг ли это. Мне уже как то удобней стало создать дто с одним полем, чем просто булин или стринг вернуть.
Это оверинжиниринг в любом случае, так что ебашь СервисРеспонс.
Если ты хочешь показывать сообщения об ошибке, очевидно через эксепшены, трайкечить в коде, вызываемый сервис. Хотя я бы просто опшиналы возвращал.
Молю помогите, сегодня установил андроид студио 3.0.1, делая все по гайду с курсеры. Так вот там при установке надо дополнительно загрузить несколько библиотек, в том числе и Android SDK tools (не платформ тулс не билд тулс а просто тулсы ебучие). По скринам у чела была возможность загрузить прямо из SDK мэнеджера внутри студии, но у меня этой ебалы не было. В результате нихуя не работает. Я нашел эти тулсы архивом в инете, но куда его распаковывать не ебу. Помогите плз я нулевый совсем и тупой.
я так уже делал, и запускал несколько раз. думаю обновиться до последней версии и так уже пробовать
Поищи в студие в настройках эти тузлы, где-то есть возможность их автоматически скачать
там есть встроенный мастер их закачки, но там нет нужной ебалы, в настройках покопался вроде тоже нет, но он есть в инете. собсна вопрос в том, куда мне архив со всеми тулсами распаковать.
хорошо, я попробую, спасибо. но когда я просто запустил рабочее пространство он изначально выдал ошибку и не предложил дозагрузить что-либо. в пизду, вообще пойду дальше теорфиз учить, не дано мне вашим программированием заниматься.
Правда. Ну может не за 1.5 часа, но за пару вечеров точно учится. Сразу после этого можно писать как на джаве с чуть другим синтаксисом, потом надо еще немного времени, чтобы освоиться и начать что-то делать более "идеоматично".
Нет, спринг, увы, так не учится. Впрочем, могу уточнить - котлин за пару вечеров в том случае, если ты не тупой и если джаву знаешь достаточно давно и уверенно.
Не совсем понял твою идею. Контроллер обратился к методу, а тут рантайм эксепшен. Спринг эксепшен хендлер перехватил эксепшен и вернул ModelAndView пользователю с вставленным описанием ошибки? Так?
А как понять, что я не тупой для джавы?
У большинства знание спринга = Autowired+Service+RequestMapping.
2.5 аннотации, понятных по названию, можно выучить за полчаса.
Само собой, если заниматься вещами чуть сложнее крудов и/или обмазываться паттернами, тут уйдёт дохуища времени, но почитай тред.
Всё что чуть сложнее вызывает негативную реакцию.
"REEE у тебя гофчанка, используй свич, мы так 10 лет делали и ты делай! "
"REEE, хибернейт со своей магией не нужен, идите вы нахуй, я буду делать всё через JDBC, мне Transactional вообще нахуй не упал!"
"Spel, какой нахуй spel, ни нужен, я сказал!"
И так далее.
Я хотел сказать, что если всё, что чуть сложнее основ отбрасывать с аргументацией "ни нужна", то выучить спринг за пару вечеров это вполне посильная задача.
Понял.
Мне вот например было интересно учить алгоритмы разные, но веб разработка кажется максимально скучной.
В плюсы что-ли перекатиться?
Смотря что считать интересным. Дрочки алгоритмов, оптимизации и прочего здесь сравнительно немного.
Джава - не обязательно веб, а любой бекенд как таковой, хоть у тебя сокеты, вебсокеты, SOAP, очереди сообщений, REST. Кому-то это интересно.
Перекатись. Выучить синтаксис плюсов, как познать суть вселенной.
Ну вот алгоритмы и оптимизация в целом интересно, да.
Правда боюсь, что перекачусь на плюсики, а буду хуярить формочки на Qt или MFC каком-нибудь. Ну или под железки что-то писать, а это ну хз, не особо вкатывает и перспективы так себе.
Хз, особой разницы нет, с помощью чего создаётся окошко для контекста OpenGL. А дальше LWJGL.
>>63252
В формочках на самом деле тоже может быть полно задач оптимизации и алгоритмов, но это должна быть какая-нибудь САПР, а не хуйня из пары окошек. Но в железках будет точно.
Тут ещё многое упирается в то, есть ли у тебя тонна времени и усидчивости, чтобы осилить плюсы и найти на них норм работу, потому что это намного сложнее, чем в джаве. Я вот решил не рисковать, хотя сам изначально хотел плюсы (да и до сих пор хочу).
Мне мои задачи нравятся. Не только очередной круд писать, а оптимизировать запросы к бд, например, думать об архитектуре, сделать что-то асинхронно по возможности. Иногда есть нестандартные вещи, например сделать какой-то алгоритм для обработки хуйни_нейм, которого нет в библиотеках.
Вообще нравится думать о том, как реализовать то, что хочет пм в проект добавить, так чтобы и быстро, и красиво, и понятно всё получилось.
Но я джун, может и заебёт со временем, хз.
>"REEE, хибернейт со своей магией не нужен, идите вы нахуй, я буду делать всё через JDBC, мне Transactional вообще нахуй не упал!"
Это все до первого инцидента с утечкой конешенов из-за некорректной работы afterCommit()
Вот тогда то и начинаешь ценить простой JDBC.
А новичку надо его учить? Просто может это какие-то основы, которые надо знать.
>Это все до первого инцидента
Это примерно как из-за одной поломки автомобиля решить ходить отныне только пешком
чел ты долбаеб
Это не поломка, это ДТП да еще с тяжелыми последствиями в виде нескольких прод инцидентов и недели потраченной на исследования, написание пула с трассировкой кто берет конекшены и прочее.
Тут проблема в том, что фреймворк делает за тебя магию. И надо очень хорошо разбираться, что там под капотом, чтобы не выстрелить в ногу. В тред дампах у тебя будет только спринг и ожидания на блокировках. А если ты руками все делаешь - у тебя первый же дамп покажет, где ты облажался.
И я не утверждаю что @Transactional не нужен, я говорю про то что у него тоже есть проблемы.
>>63675
Кого его? Хибер? Да нужно, т.к. он много где используется.
Ну можешь пересмотреть другие видосы потрошителя. У него их штук 5 по спрингу.
Потоки конечно.
class Downloader{
download(несколько, аргументов){
//.....
//некоторый код
//.....
ImageDownloader().downloadImage(аргумент);
}
}
class ImageDownloader{
downloadImage(аргумент){
//.....
//парсинг документа (аргумента)
//.....
downloadFromField(некоторые, аргументы);
}
downloadFromField(некоторые, аргументы){
//загрузка и сохранение изображения
}
}
Так вот я тут почесал репу и подумал: а может лучше Настя лучше написать интерфейс, сделать от него имплементс в выше описанных классах и реализовать какой-нибудь там download..()?
Интерфейсы не нужны только ради интерфейсов. Если у тебя много кода, которые что-то скачивает, но не знает, что именно, т.к. реальный объект передаётся извне, то лучше сделать интерфейсами. Если такого нет - забей.
А ещё можно придумать какой-нибудь DownloadStrategy.
В лесу из наследований и генериков ничего страшного нету, а многопоточность - это уже неприятно и неловко
Понял, спасибо,
Жду не дождусь. Наконец-то дефолтную версию джавы поменяют с 5 на 8, а maven-war-plugin по умолчанию больше не будет ругаться на отсутствие web.xml.
Девелопишь на винде/маке, деплоишь на линупс.
Тут потихоньку ARM сервера и десктопы подвозят.
Весь код: pastebin.com/FbsVQdRu
a = Integer.parseInt(new StringBuilder(Integer.toString(a)).reverse().toString());
Не, ну можно, конечно, сделать цикл, где ты будешь b умножать на 10 и прибавлять остаток от деления a на 10, а саму a делить на 10, пока не будет 0, но мы ведь не в C++-треде.
У меня вот так получилось.
a = Integer.parseInt ((new StringBuffer(a.toString()).reverse().toString()));
Я даже не знаю, что происходит в Java при переполнении. Если будет отрицательным, можно max int присвоить, или сделать выброс exception.
>Есть переменная int a = 55234;
>как её перевернуть, чтобы вышло a = 43255?
Значит тип поменяться не должен, при этом число должно перевернуться.
Я вот пиксельки несколько дней рисую.
Ну вообще эти перевороты числа и надо делать интежеровским делением и остатком. Мне препод не засчитывал, говорил, что я со строкой манипуляции делаю, а он мне число дал.
На любом статическом языке. Это тупо алгоритмическая задачка, а переворот строки это уже другая задача. В проектах ты вряд ли будешь переворачивать цифры.
Бля ну помогите пожалуйста. Я конечно понимаю что для вас это максимально тупой и лёгкий вопрос но я реально не знаю.
Жыза, анончик.
>для вас это максимально тупой и лёгкий вопрос
Вряд ли здесь кто-то в этом шарит, потому что свинг нахуй никому не нужен.
Как у тебя блок кода связан с пониманием?
На мой взгляд, для простых операций наоборот лучше лямбды писать, а не отдельные функции.
Короче, ты охуеешь, но разные джавы показывают разное значение. Я на openjdk 14 запускал, сейчас запустил на openjdk 8, она вообще показала 1290x730.
Да, сейчас в IDEA запустил через Java 11, всё нормально работает. Окно такое большое так как у меня 125 масштабирование стоит, главное что внутри окна всё правильно считает.
Спасибо вам! Один бы я до такого не додумался.
Че за проект то делать собрался? Библиотеку очередную?
Это-то да, но кто-то ведь переехал на 11, а там модули. Бррр.
И никакой мозгоебли ради уменьшения рантайма на какие-то 50 метров.
Всё сложнее и сложнее. Лучше уж закрытие сорцы и коммерческая лицензия, ей-богу.
Чтобы не устанавливать идею на продовский сервер.
Меня интересует именно рантайм на проде, при разработке-то понятно, что JDK будет в любом случае.
>Ими действительно кто-то пользуется
Не замечал такого
>все тупо ставят JDK на прод?
И до 9 не было причин не ставить на сервер jdk
Понял, спасибо.
Проще, конечно, тестировщиком, но это настолько рутинная и унылая работа, что ну нах.
Работать надо там, где тебе нравится. Или хотя бы не возникает неприязни от собственной деятельности.
По-другому ты не сможешь жить, будет вот это т.н. выгорание.
Я проебался и попал в около государственную компанию... А там был пиздец никак не относящийся к тому,что я хотел попробывать, 1с битрикс пхп и прочее
Ну я ,например, разницы не вижу между автоматизатором и программистом, оба пишут код, а вот ручные тестировщики, это да, одно уныние.
Я про ручных. Вообще, автоматизаторов почему-то некоторые несправедливо считают на ступень ниже разрабов, хотя разницы никакой.
Для меня и то и другое всё же будет просто работой, а сейчас просто смену курса делаю, ибо нравился питон, но не смог залететь никуда на стажировки с ним, ибо там требовались мальчики математики и аналитики, а не я.
В джаве пугает пока объём необходимый для старта, но нравится то, что она распространена везде где только можно и с работой проблем не будет, если приложить должные усилия, а в тестировании напрягает проходить через ручного тестера.
Я знаю как минимум одну, которая основана спикерами известных конференций (JPoint, Joker), там часто можно встретить "звёзд". Но тем не менее, известны ли более локальные?
Да он охуеет от предметной области банка. Он наверное имеет в виду перевод денег с одного акка на другой.
>просто работой
И как скоро ты начнёшь лезть на стену от этой работы? Жаба это стабильность, но раз ты вчерашний студень, то уж лучше бы ещё с питоном повозился. Мне кажется там больше всякой хипстерской хуйни, не так скучно, как ковырять очередное легаси.
Ну на самом деле это полезно, если нету опыта в построении устойчивых систем.
Даже задача про написание CRUD приложения без использования баз данных и транзакций, JDBC темплейтов и тд уже очень интересная. Один раз мне дали такую на собесе, наши обсуждения ушли достаточно далеко
Ну нужно мне
Задача была такая:
1) Напишите rest api сервис с помощью spring boot
2) данные храните в оперативной памяти, они не должны быть персистентными
Прикол задачи заключался в том, что как написать потокобезопасный код, который не испортит данные, когда запросы прилетают на воркер
Очень популярный вопрос, в интернете много материала на эту тему https://www.baeldung.com/circular-dependencies-in-spring
Это уже вопрос реализации. Я лично хранил в обычной HashMap'е, но доступ к данным был через Reentrant Read/Write lock. Безусловно, ConccurentHashMap'а всё это имеет под капотом и доступ на чтение тоже идет через read lock, но мне было важно показать, что я понимаю принцип работы мьютекса и как нужно ставить блокировки, какие стандартные библиотеки использовать и тд.
В итоге мне задали достаточно интересные вопросы, мы поболтали на тему многопоточности
То и значит. Случайно наткнулся на легаси туториал по javaee5 от оракла, там была тема "the duke’s bank application", плюс еще нашел пару статеек, решил потом реализовать через спринги. Вообще, хотелось бы не только перевод денег с одного акка на другой, ну как получится.
Тогда начни с чего-то попроще, куда тебе целую банковскую систему писать.
Сначала рекомендую разобраться с тем, как в принципе работает транзакция, что есть под капотом у движков SQL, тот же transaction log.
А то при создании банковской системы нужно не только учитывать правильный конкурентный доступ к данным, но так же стоит учитывать идемпотентность операций, ретраи, ролбэки
Еще для начала можно почитать очень полезные книжки и посмотреть курсы по многопоточности
Хорошо. А то ты так достаточно отстраненно писал "однажды на каком-то собесе..." что я волноваться начал.
Конечно, все это я буду осваивать, спасибо.
А чего волноваться? Думаю у каждого разработчика со временем возникает необходимость в собеседовании. Кто-то делает это раз в пол года, чтобы узнать свою актуальную цену на рынке6 кто-то реже, кто-то чаще. Я сам хожу, вот за весну был на 3-4 собесах (три из них это сбертех)
Если автовайред написать над полем - должно работать без проблем.
Если в банках так заботятся с роллбэками, почему до сих пор нельзя вернуть отправленные деньги хотя бы в первые 30 минут? Ни в одном банковском приложении такого нет.
Транзакции так не работают. Если ты отправил деньги, и они упали на чужой счёт, то транзакция уже закоммитилась. Закоммиченную транзакцию нельзя отменить, можно только провести ещё одну транзакцию, противоположную по действию. Но это именно две транзакции, а не откат первой.
Но даже если бы можно было откатить, это всё равно не сработает. Банк - это сложная распределённая система из сотен сервисов, транзакции живут только в рамках одного сервиса, из-за чего, кстати, микросервисная архитектура плохо уживается с таким использованием транзакций.
Ну а почему нельзя вернуть отправленные деньги - это не техническое ограничение, а бизнес-требование. Сам я об этом не знаю, но подозреваю, что чтобы не кинули никого (оплатил в магазине, сразу откатил транзакцию и убежал, к примеру).
мимо
Ты сука самый умный?
Даже в школьных олимпиадах на паскале не прокатило бы, там всегда от неизвестрых входных данных.
Да я понял, что неправильно заюзал слово "rollback". Но вопрос в другом. А именно откатом в предыдущее состояния, как бы бэкап.
Типа я могу им неделя+месяц+месяц бесплатно пользоваться, а потом 25 баксов в месяц придется отваливать?
Алсо после прохождения всей джавы на данном ресурсе через проекты будут ли иметься навыки для поиска работы джуном, или ещё пахать и пахать?
Заранее спасибо
По завершении курса сразу автоматом офер от джетбрейнс прилетает на 300к/нс
Я просто отвечать на это говно перестал уже. Если человек тред не может прочитать, что уж о книгах то говорить.
Пчел, работа тестировщиком это, мягко говоря, работа для тех, кто не осилил разработку. Вот и думай.
https://stackoverflow.com/questions/63216544/kotlin-spring-boot-validation-does-not-work
Прикрепи при перекате обе пикчи, так надо.
Как можно подсмотреть апи в приложении? Достаточно ли открыть через Apktool приложуху и походить по коду, или может ваершарк какой-то поставить и посмотреть урлы, которые, вероятно, будут по https?
Если у сайта вообще есть апи, целесообразнее научиться его использовать. Бывает и такое, что апи можно использовать свободно, а парсинг детектится и банится (потому что рендерить хтмл намного тяжелее, чем гонять жсонки).
Ну а если нет, ваершарком охуеешь копаться, даже если хттп. Проще смотреть исходники.
>Как можно подсмотреть апи в приложении? Достаточно ли открыть через Apktool приложуху и походить по коду, или может ваершарк какой-то поставить и посмотреть урлы, которые, вероятно, будут по https?
Тебе надо будет добавить свой сертификат и потом уже перехватывать трафик https://medium.com/androgoat/intercept-https-traffic-from-android-app-androgoat-part-1-c563e6350fbe
Хотя особо хитрые приложухи могут такой финт ушами обнаружить
Stream.of(collectionA, collectionB)
.flatMap(Collection::stream);
Stream.concat(
collectionA.stream(),
collectionB.stream());
Как все красиво оказалось. Я нуб еще в стримах.
> круды
Наглый пиздёж. В основном придётся писать service layer, то есть тонны бизнес-логики. А "круды" пишутся мгновенно и сразу забываются. Скучно ли тебе копаться в бизнес-логике, решай сам.
>бизнес-логике
А вот что это? Я просто немного из далекой сферы, студент, пишу на плюсах разную геометрию, расчеты на прочность, МКЭ, вот это все.
Думал в джаву вкатиться, но непонятно, какие вообще задачи вы решаете.
Я вот сейчас пишу штуки для расчета сопромата - потом инженер может на компьютере загрузить геометрическую модель и прога посчитает нагрузки и деформации, и инженеру уже не нужно все вычисления делать вручную, как это было 100 лет назад.
А что у вас? Какие-нибудь конкретные примеры есть?
Сложно сказать "в общем". Это куча алгоритмов, сильно завязанная на предметную область и бизнес-требования. Приложение - это ведь не просто обёртка над данными в табличках, но и всевозможные обработки и преобразования, отправка сообщений в другие системы, обновление статусов и прочих характеристик бизнес-сущностей с учётом их жизненного цикла, что-то написать в лог для безопасников, что-то отправить в аналитику и т.д.
> конкретные примеры
Светить ими никто не хочет, велик шанс деанона. Да и сильно зависит от каждого конкретного проекта.
Это говноскрипты какие-то.
То есть, пардон за предыдущее сообщение, ты с нуля сам придумываешь аналог ансиса\фемапа? Нихуясе.
Если ты не можешь вкатиться в спринг, потому что не знаешь спринга, как ты собрался вкатываться в программисты, не имея коммерческого опыта?
Насколько же годный ответ! Сначала подумал, что это ирония, а потом задумался, вспомнил свой опыт и понял, а ведь так оно и есть. Лучше и не скажешь.
Для работы нужен опыт, для опыта нужна работа. Больше сыра = больше дырок = меньше сыра.
>>68172
Отрицание это первая стадия, насколько я помню. Не ёрничай, а лучше подумай как разорвать этот круг.
Хорошо было, когда они сидели в своём загоне и не высовывались, а теперь скоро весь /pr превратится в филиал /b. Пиздец. Даже в /s не так токсично.
>когда они сидели в своём загоне
Ты про вкатывальщиков? "Сап дващ, какие курсы проплатить, чтоб через месяц 300к получать? Сам 30лвл, вышки нет."
В том числе.
>Я вот сейчас пишу штуки для расчета сопромата
А джавист может писать, например, штуку для расчета комиссии при заказе шлюхи переводе денег между счетами. Только расчета не в смысле перемножения чисел по формуле, а в смысле учета всех бизнес-требований, которые на нее влияют. Куда именно переводим? Кто такой отправитель и сколько он уже переводил в этом месяце? Нет ли сейчас каких-то временных скидок-акций, которые отключают эту комиссию? И прочее и прочее в таком духе. В процессе может быть придется и в свою БД запросы поделать, и к другим системам обратиться, сделать с ними интеграцию. Задача и во всей бизнес-логике не запутаться, и при этом сделать что-то надежное и не совсем уж тормозное.
Как эти два вопроса связаны?
Если правильно тебя понял, "Бекенд, который не энтерпрайз" на джаве пишут редко.
> Почему все упирается в business логику? Любой бэкенд же можно написать на буте или нет?
Ты вообще понимаешь, о чем пишешь? Причем тут бизнес логика и фреймворк? Ты можешь хоть на иврите писать, если заказчик ожелает остаться на этом довольным
> Если правильно тебя понял, "Бекенд, который не энтерпрайз" на джаве пишут редко.
Ну тут спорно
Ну да, пишут. Но намного реже, чем энтерпрайз джава ее веблоджик оракл 10 абстрактных фабрик из 10.
А это смотря что считать энтерпрайзом. Крупный интернет-магазин, например, это он или нет?
> Ты вообще понимаешь, о чем пишешь?
Нет.
> Причем тут бизнес логика и фреймворк?
Везде, где упоминается Spring, говорится о бизнес логике, поэтому кажется, что в другом его использовать, как пересекать пустыню на лошади.
Он слишком сложен или не удобен для остальных не бизнес задач? Например, если я захочу сделать бэкенд сайта с регистрацией пользователей и покупками какой-нибудь еба-хуйни, это бизнес логика? Или написать Двач бизнес логика? Почему лучше что-то, а не Спринг в таком случае?
Или, например, вообще не иметь дело с вебом, но использовать какие-нибудь части вроде бинов, то же самое, что использовать мужику менструальную чашу?
Подходит, но это из пушки по воробьям. Спринг рассчитан на огромные тяжёлые проекты, и всякую мелочь целесообразней писать на пыхоплеяде.
> А это смотря что считать энтерпрайзом. Крупный интернет-магазин, например, это он или нет?
Ну какой-нибудь wildberries - конечно интерпрайз
> > Ты вообще понимаешь, о чем пишешь?
> Нет.
> > Причем тут бизнес логика и фреймворк?
> Везде, где упоминается Spring, говорится о бизнес логике, поэтому кажется, что в другом его использовать, как пересекать пустыню на лошади.
Переведи два слова: "бизнес" и "логика" на понятный тебе язык. На крайняк уже можно было и загуглить.
Тогда, я думаю, сложно не согласиться, что на джаве скорее пишут тот бэк, что ближе к wildberries, чем к какому-нибудь магазинчику электрочайников (который на пхп)
> Переведи два слова: "бизнес" и "логика" на понятный тебе язык
Бизнес, это когда Вася обкашливает вопросики с родственником по маминой линии. Логика - из А следует Б из Б следует С, значит, из А следует С.
Ну и хули я тут должен понять, сделать теорию относительности бизнес логики?
>Бизнес-логика — в разработке информационных систем — совокупность правил, принципов, зависимостей поведения объектов предметной области (области человеческой деятельности, которую система поддерживает). Иначе можно сказать, что бизнес-логика — это реализация правил и ограничений автоматизируемых операций. Является синонимом термина «логика предметной области» (англ. domain logic). Бизнес-логика задает правила, которым подчиняются данные предметной области.
Это получается типо ООП для какой-то области, которую мы пишем. Весьма расплывчато, но можно еще понять.
Я писал расчет цены опциона по Б-Ш, работало нормально, из бизнеса никто не жаловался, что мы там клиенту не то напрайсили.
Везде где смотрел, нужны на полный день люди. А мне нужно как-то обучение в вузе еще совмещать.
Маловероятно.
Я конечно не люблю этого майдауна, но для твоего уровня самое оно.
https://www.youtube.com/watch?v=9DW-xdwjop8
Если студентик из норм вуза, то, скорее всего, тебе будут доступны программы стажировки в крупных конторах.
Если вкатывальщик, то, скорее всего, ничего не найдешь.
А как их искать, эти стажировки? В университет никто не приходит и не зовет, кроме разве что мейла. Пытался вкатиться в яндекс стажером, но как оказалось я слишком тупой для них
Ну тут бесспорно) для заказчика на джаве дороже выйдет написать, чем на пыхе
> > Переведи два слова: "бизнес" и "логика" на понятный тебе язык
> Бизнес, это когда Вася обкашливает вопросики с родственником по маминой линии. Логика - из А следует Б из Б следует С, значит, из А следует С.
Слушай, может все-таки формочки на js шлепать? С такими проблемами будет тяжело бэк писать
> Везде где смотрел, нужны на полный день люди. А мне нужно как-то обучение в вузе еще совмещать.
Работаю со 2-го курса. Нахуй тебе сидеть в универе каждый день по 3-4 пары? Ты в МГУ/Бауманке учишься, чтоб так дрочить на свой вузик? Всегда можно договориться с работодателем, чтоб отпустил на экзамен/зачет, либо взять на этот день больничный. В универ практически не ходил. Только чтоб сдать какие-то работы, на зачеты и экзамены. С таким подходом закончил бакалавриат, а затем и магу. Главное общаться со своей группой, чтоб быть в курсе событий
Тоже так планирую, к середине или концу 2 курса пойти на стажировку или работу. Проблемы только с хуевый английским, а он для стажёров нужен.
Спросить преподов. Спросить "центр занятости", который должен быть, по-идее.
Идти в mail и не выёбываться.
вот есть у меня пакетная функция print в папке c:\code\print, как ее мне влключить в других файлах? Писать напрямую import c:\code\print;
или как?
У тебя пакеты начинаются с какой-то директории
package com.myprog.spring;
в данном случае с папки com. Дефолтный пакет не используй.
Ну и дальше ты указываешь через точку путь к папке класса, потом имя публичного класса.
Что значит пакетная функция, может, тебе в другой тред?
Через фронт запрос с телом класса формирует JS, те, там надо описать точно такой же класс, как в Java, и такой же класс для ответа?
А если мы общаемся сугубо через бэкенд, можно импортить класс контроллера и пользоваться его методами, или надо тоже отправлять запросы?
Относительных импортов в джаве нет, всё идёт от корня. Считай, что названия пакетов через точку - это на уровне кода один идентификатор.
Не обязательно класс, изначально это тупо жсонка. Да и классы в жс - так, сахарок для объектов. И можно работать с объектом напрямую, почти как в джаве мапа с определёнными ключами.
У меня лабы по многим предметам, их нужно очно сдавать и защищать. Ну и физра еще в этом году будет, ее нельзя проебывать. Поэтому вообще никак не вариант полностью проебывать вуз.
> У меня лабы по многим предметам, их нужно очно сдавать и защищать. Ну и физра еще в этом году будет, ее нельзя проебывать. Поэтому вообще никак не вариант полностью проебывать вуз.
Я тебя, наверное, удивлю, но лабы и физра есть у любого студента вуза. Лабы, хуябы , курсачи можно сдать в конце семестра, либо вообще в следующем/через один. Физру можно купить за условный сертификат в спортмастер на косарь преподу. Пиздец, с таким подходом можно и до сдачи диплома сидеть тупить в универе у мамки на шее. А потом в армию еще сходить не забыть. Но вообще, поступай как знаешь. Я твоих способностей пиздеть, крутиться и договариваться с людьми не знаю, поэтому насоветую тебе тут сейчас на отчисление.
Я вот тоже довольно поздно (курсу к третьем) понял, всё, что ты сейчас пишешь.
Это же школьник вчерашний, он не понимает ещё, как вообще можно уроки прогулять и с преподом за бабло договориться.
Не дави на него так.
ОП - ХУЙ, НЕ ДОБАВИЛ FAQ В ШАПКУ
На старте 2 вышки айтишных (краснодипломных), опыт 1С Программистом 3 года, которая заебла, дорос до 100к+ ЗП даже в городе с 600к населения на Дальнем Востоке, но я рот ебал до конца жизни в этом болоте оставаться.
Есть финансовая подушка, которая позволит год не работать. Также много на C/C++ кодил (все 6 лет универа, дипломные проекты тоже на нём всё). Какие-то стартовые навыки по ООП тоже есть, книжки читал.
Буду перекатываться к Москве с финансовой подушкой, где есть вакансии на нормальные технологии программирования. Интересует бизнес-логика, разработка под мобилы неинтересна.
1. КАКОЙ уровень владения английским надо (B2 хватит ?)
2. КАКОЙ конкретной фреймворк надо изучать
3. ЕСТЬ ЛИ комплексные курсы по стеку технологий, который нужно знать jav'исту ? Без объяснения, что такое циклы, переменные, классы и т.д.
3. Как обстоит дела с языком запросов там. Я правильно понимаю, что есть какая-то ORM'ка ? И тогда какая.
Да
Спринг
Нет
Хибернейт/спринг дата жпа. Но будь готов, что большинство запросов придётся писать руками.
Это не Оп хуй, а ты настолько тупой, что не можешь перейти по ссылкам в ОП-посте и ознакомиться со всеми вопросами вкатышей. В том числе и про книги
https://www.coursera.org/specializations/pcdp
Что джава-господа думают про это?
Нужно иметь в виду, что во многих вакансиях почти не расписывают стек, и "уверенное значение java" включает знание всего популярного стека, особенно если в такой вакансии ещё и опыт требуют. Да и андроидовских вакансий немало.
Я дюк юниверсити проходил - мне понравилось. Начал изучение джавы с написания дешифровщика по методу частотного анализа и написания цепей маркова. Сан диего какой то невнятный и устаревший с гвт и эклипсом - что делает его похожим на любой индусский курс. Рис не пробовал.
>Физру можно купить за условный сертификат в спортмастер на косарь преподу
Лабы и курсачи если и можно сдать в конце семестра, то с физрой у нас все строго и уже лет 15 как ничего не покупается, к большом у сожалению. И людей реально отчисляют из-за одной физры.
>с таким подходом можно и до сдачи диплома сидеть тупить в универе у мамки на шее
Кстати в топ вузах очень много кто так делает. Иначе вылетишь за через 1.5 наносекунды, если начнешь работать на 3 курсе.
Отучился в бауманке кстати в прошлом году на робототехника, отходил почти на все пары, диплом со средним баллом 4.5, ни разу не работал, с 3 курса просто с ноутом сидел на последних рядах и лениво ковырял пердун и курсачи, гордость не позволяла их купить за 5-6к оглядываясь назад, лучше бы я их купил, они сожрали месяца два моей жизни в часах. Денюжка была с различного рода шабашек на фрилансе, телеботы, боты для любимой игры, чтобы автоматизировать процесс гриндилова и всякие задачки долбоебам и т.п.
Щас я понял, что пердун говно и собираюсь ПЕРЕАБУЦЦА чтобы в офисе сидеть. Но фактического опыта-то у меня нет, интересно, смогу ли я найти стажировку на жабе\котлине и как это гуглить.
Кстати я тоже на РК учусь, на 2 курс вот перешел. Что посоветуешь делать?
Вот решил в жабу и алгоритмы понемногу вкатиться.
Кафедру скажи, я на РК9 был просто. С третьего курса там поездка на кабриолете вдоль берега моря под бризовым ветерком.
Ммм, халявная кафедра с айти уклоном. Лично видел, как самых конченных долбоебов вытягивали на тройку, а еще у вас нет Карпачева, который меня в академ отправил за незнание теоретической механики.
Я тебе мало чего скажу за нее, извини. Но общий посыл - на втором курсе сукаблядь не смей расслабляться, 90% отчислений происходят на 1-2 курсах, потому что уженешкольник забивает хер на учебу и затягивает все сроки, после чего умирает на преподе факере и берет академ.
А так в целом в даунке похуй на посещения, у меня на 4 курсе 80% потока не ходило на пары, ыыы
Вот такой результат получил на пикрил. Смогу ли я, в перспективе, составить конкуренцию гениальным синьорам из мехматов с их пятизнаками icq? Или лучше пойти красить кнопки в мобилки?
Алсо делитесь своими результатами.
>Тест проверяет твою способность решать простые задачки в короткие сроки.
Кстати, я догадывался, что там учёт времени идёт, но не был уверен. Я нередко долго соображаю, хотя вроде почти всегда нахожу решение.
>А по поводу конкуренции - 99% времени ты будешь решать однотипные задачи, многократно решенные до тебя
Понял, спасибо за ответ. Просто мне всегда казалось, что в бэке много алгоритмов и мат.логики, поэтому боялся оказаться ситуации, когда начну и в какой-то момент уже не потяну.
>много алгоритмов и мат.логики
Этого нигде нет в большом количестве, забей.
Алгоритмы нужны только для того, чтобы на собеседованиях не обосраться жидко.
>Алгоритмы нужны только для того, чтобы на собеседованиях не обосраться жидко.
Возможно, ты прав, так как у меня нет практического опыта, ориентировался исключительно по требованиям в хороших вакансиях и необходимой теоретической базе.
Плюс те же конференции, типа джиконф и джокер посмотрел, где крутые спикеры выступают. Посмотрел, построение какой-нибудь отказоустойчивой, оптимизированной архитектуры веб-приложений, или работа какой-нибудь очереди я смотрел доклад о апач кафка выглядит довольно интересно для меня. Понимаю, что там люди с колоссальным опытом а не я - лох с дивана. Но все-равно смотрю, там, к примеру, какие-то мат.расчеты отказоустойчивости формулами из, видимо, тервера, которые я не очень понимаю. Вообще я не полный ноль в математике, более-менее в универе её тянул, но как-то не особо удовольствия доставляет. Поэтому был некий страх, что не осилю профессию на хорошем уровне.
Можешь вообще не переживать. математика даже в датасаенсе далеко не везде юзается, что там про бекенд говорить.
> мат.расчеты отказоустойчивости формулами
Этим почти никто не занимается, да и знают про это немногие. Да и даже если заниматься, но не заморачиваться, там расчётные формулы на уровне методичек для лаб по физике.
Что делает няшный мавен когда встречается с циклической зависимостью? Фейлит билд с сообщением об ошибке - разберитесь, потом компилировать будем.
Что делает блядский грейдл? Нихуя! Просто потом упадет с ошибкой компиляции - класс не найден. И ебись как хочешь, какого хера он не найден.
Это копия, сохраненная 26 января 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.