Вы видите копию треда, сохраненную 20 декабря 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Q: Поздно ли вкатываться в айти в 20/30/40/100 лет?
А: Нет, не поздно.
Q: Cобираюсь учить джаву по 2/5/20 часов в день. За сколько дней я выучу достаточно, чтобы зарабатывать фрилансом?
A: На джаве фриланса нет. Хочешь фрилансить — дуй в ПХП/раби/1С тред.
Q: Хули все книги на английском?
A: Без английского ты не нужен и можешь смело идти нахуй. Ну или в 1С-тред.
Q: Что скажете за джавараш?
Если вкатываешься с нуля, то можешь написать пару "хеллоу ворлдов" до 10 лвла. Дальше курс рассчитан на ленивых и не умеющих читать книжки людей. Количество говнокода зашкаливает, годных задачек пару штук на весь курс. В любом случае решать тебе.
https://github.com/qqqlll/Java-Thread/wiki
https://coursehunters.net/course/ekspert-programmist-java-1-3-uroven
не бросайтесь тряпками, я только начинаю
про пул коннекшонов знаю, но как эффективнее будет без него?
С одной стороны, каждый раз открывать соединение - зло, ибо происходит аутентификация. С другой - держать открытым зло, ибо тогда шифрование не будет меняться. Палка о двух стульях на одной ножке, блядь. Нет разницы, кроме того что на регулярное открытие/закрытие тратятся ресурсы.
понял, большое спасибо
Люди говорят, что Шилдт - скучный и нечитабельный.
Я это очень давно слышал и не раз.
Сам я его не читал за ненадобностью.
Вот, и тут, например, пишут, что Хорстман лучше:
https://www.reddit.com/r/java/comments/7oip71/book_choice_schildt_vs_horstmann/
Тут ещё многое зависит от того, что ты уже знаешь/умеешь, и от личных склонностей. Выбери сам.
Соединение с БД в общем случае _не_ нужно явно держать открытым (в прикладном коде).
Если надо реюзить - это должен делать сервер приложений или контейнер, используя коннекшн пул, а не программист руками.
Те, кто читает Head First - не читают ни Шилдта, ни Хорстмана.
У Хорстмана очень хороши книги "for the impatient" - скала, джава.
И он давно занимается именно джавой.
А Шилдт - просто преподаватель. У него и по С++ книги есть и по C#.
Загугли horstmann books и schildt books для понимания.
А вот и дежурный смузихлёб, я спокоен.
гляну обе а там решу спасибо большое анон
В чем проблемес с первой головой? Там вообще примеры как для даунов, т.е для меня, когда я начинал, плюс "шутейки" от автора проскакивают. Читался оче легко когда начинал.
Меня спрашивали когда ходил на собес, немного прихуел с того нахуя им оно надо.
Либо в запросах, либо лямбды
>Accordingly, You confirm:
>- You are not listed on the United States Department of Treasury lists of Specially Designated Nationals and Blocked Persons, Specially Designated Terrorists, and Specially Designated Narcotic Traffickers, nor are You listed on the United States Department of Commerce Table of Denial Orders.
Посоны, а вас при приёме на галеру, проверяли по санкционным спискам?
а
Читая коменты под очередной статьёй на хабре видишь совет не ебать себе мозг этой хуйнёй и сразу пиздовать в спринг
а
Изучаешь спринг
а
Сложна
а
Психуешь и возвращаешься
а
Ахуеваешь с простоты
Я создаю степень десятки:
double result = Math.pow(10,half);
double же обязателен, потому-что компилятор, пидр, не хочет int.
Далее, я хочу разделить BigInteger на этот result
bi = sum.divide(result);
но компилятор посылает меня, потому-что не хочет делить на добл!
Окей, пытаюсь привести к int:
int i = (int) double;
Компилятор вымазывает все красным.
Почему?
Сам код - здесь: https://ideone.com/05ySYV
Вот расскажи реально как. Я делал эксперименты десятками тысяч строк в цикле, которым форсил intern(), но так и не придумал условия, когда это будет иметь большую разницу.
Случайно отправил.
А. Стоп. Очепятка.
Но даже так, сраный BigInteger не хочет делится даже на int!
Как его делить-то тогда? Пример брал отсюда и действовал по аналогии.
http://pr0java.blogspot.com/2015/05/biginteger-bigdecimal_70.html
https://ideone.com/ZvCKhS
Я шарпист сам, может хуйня, но это вообще первые две строчки которые я написал на джаве. Ну и я не понимаю чего ты добиться пытаешься к тому-же.
Твоя основная трабла в том что ты нихуя не знаешь, учись лучше.
Ну и гуглить ты не умеешь.
Вообще тот еще говнокод получился, но я именно твой вариант хотел довести до рабочего состояния, а не писать свой заново.
Нет, просто BigInteger это BigInteger, а int это int, для того чтобы записать интовые значения в BigInteger тебе нужно сначала их преобразовать к BigInteger-у, вариант в скинутом мною коде это первое же что я нашел в гугле, можешь поискать инфу по теме там же.
Короче, в этом конретном случае метод divide() класса BigInteger принимает значение Bigint, а ты пытался передать туда int.
Насколько помню в жабе нет перегрузки операторов, следственно ты можешь сделать свой метод вроде IntToBigInt(int a) и возвращать из него BigInteger со значением a, например.
Всё так.
Алсо, можно использовать и сервлеты и спринг в одном приложении. Т.к. спринг нормально прикручивается к Java EE серверу.
А Java EE сервер с IOC-контейнером типа того, что в спринге люди юзали ещё до появления спринга, в начале нулевых (Caucho Resin). И по сей день юзают.
>чтобы записать интовые значения в BigInteger тебе нужно сначала их преобразовать к BigInteger
Т.е. бигинтерег можно складывать/умножать/делить только с другим бигинтегер? Бля. Збс.
>Насколько помню в жабе нет перегрузки операторов, следственно ты можешь сделать свой метод вроде IntToBigInt(int a) и возвращать из него BigInteger со значением a, например.
В смысле, написать свою функцию с преобразованием?
BigInteger работает с помощью строк, а значит, что как и строки являестя immutale.
Я открываю, читаю и нихуя не понимаю. Сейчас я смог прикинуть то, что мне сказали и понял, что у этого класса есть метод для преобразования.
И да, прошу подтвердить или опровергнуть: получается, что BigInteger и BigDecimal - это единственные классы, которые используются для хранения значений? Ну т.е. класс-обертка - это ж ведь не полноценный класс, так?
>>294887
Как так?
Я же могу изменить его значение, через математическую операцию:
rev = bi.add(rev);
?
>BigInteger и BigDecimal - это единственные классы, которые используются для хранения значений?
Нет, есть ещё Integer, Double... да куча их
>Ну т.е. класс-обертка - это ж ведь не полноценный класс, так?
Слово "обёртка" просто указывает на назначение этого класса. Никаких отличий с другими классами нет.
>Как так?
Ну мог бы загуглить для начала, что такое immutable классы. В кратце - вместо того чтобы изменять значение метод создаст новую переменную BigInteger с новым значением и присвоит ссылку на неё твоей переменной, а старую ссылку сделает null.
могу где-то проебаться с immutable, лучше загугли
Можешь, но скорее всего для хранения очень длинных чисел внутри bigint на самом деле строка. То что ты привел в пример, это создание нового Biginteger на основе старого, примерно как со строками, на самом деле ты ничего не меняешь в уже существующей переменной.
мимо тот самый шарпер
Чуть проебался, ты не меняешь нечего в уже существующем значении, а просто на его основе создаёшь новое, на которое будет ссылаться ссылочка rev, при этом старое значение из rev просто уничтожается.
>внутри bigint на самом деле строка
Можешь посмотреть исходники.
Я не смотрел, но, думаю, что там массив байтов, а не строка (в джаве это разные вещи).
>Слово "обёртка" просто указывает на назначение этого класса. Никаких отличий с другими классами нет.
Т.е. BigInteger и BigDecimal - тоже классы обертки? Просто я не встречал их в стандартных списках классов-оберток и подумал, что они как-то особняком стоят.
>Ну мог бы загуглить для начала, что такое immutable классы
Загуглил.
>Неизменяемый объект - это такой объект, чье внешнее видимое состояние не может измениться после его создания.
>>294892
>>294890
Окей. Как я понял: есть ячейка памяти (ну или группа). В них инфа. На это все ведет ссылка. Если это immutable, то информация в ячейках не меняется, а просто создается новое, с той же ссылкой, а потом приходит сборщик мусора и удаляет старое значение.
Ну т.е. immutable - это значение по ссылке (как и полагается объекту), а не по значению (как с примитивами)?
>>294902
Так массив - это просто неразрывная цепочка байтов. Как может быть массив байтов?
> тоже классы обертки?
Ну раз ты так решил, то может скажешь мне что они оборачивают? Вот Integer оборачивает примитив int, Double - double... А что оборачивает BigInteger?
JUnit, Gradle (Groovy), Jenkins, FindBugs, JaCoCo;
Spring Core, Spring JDBC, Spring MVC, Spring Boot, Hystrix;
REST, JSON, Swagger;
PostgreSQL (Jooq, Flyway), Hazelcast, ElasticSearch, Kafka;
BitBucket (Git), Jira, Confluence;
Ansible, Zabbix, Grafana, Kibana, Zipkin;
Я читаю и читаю, книги по кроу, а когда захожу на хх.ру, у меня опускаются руки. Пиздос.
Пусть меня поправят, если это не так, но думаю, что на джуна минимум половину твоего списка можно выкинуть.
Как распарсить JSON с глубокой вложенностью в объект без вложенности, содержащий все поля json'а?
Остальную половину ты знаешь?
Ты перечислил хуеву тучу всяких баззвордов.
Большинство из которых не имеет никакого отношения к умению программировать.
"Кор" - это сам язык программирования джава + стандартная библиотека (то, что входит в состав JDK). Всё остальное сделано из этого.
Алсо, если в объявлении ты видишь очень длинный список баззвордов, то, скорее всего, это значит, что они там написали все умные слова, которые смогли вспомнить. С единственной целью - казаться самим себе умными.
> как происходит переход
Надо писать программы. И читать программы.
Любые.
Смотри, что делают другие, и пробуй сам.
Вот это вот посмотри, и поищи что-то с подобными названиями:
https://scanlibs.com/izuchaem-java-na-primerah-i-zadachah/
У джавы есть одна большая проблема - высокий порог вхождения.
Т.е. желательно уже уметь немного программировать на момент вката.
Как?
Питон, например, хороший вариант для обучения основам программирования, как такового.
прочитай книгу по сервлетам, там обычно объясняют как написать что-то более-менее реальное, поймешь как собрать в кучу jsp, jdbc, сервлеты и т.д., потом уже спринг выучить будет несложно
>питон
Я имел в виду, что есть куча материалов - книг, сайтов - которые посвящены именно изучению основ программирования с использованием питона. В том числе, и на русском. И на том же scanlibs.com.
Сынок, токсичные пидорасы идут в /бэ.
https://www.amazon.com/Murachs-Java-Servlets-JSP-Murach/dp/1890774782
я читал эту, годная книга
Head First по жабке одна из самых охуительно написанных книг.
Это именно учебник с объяснением и рассказом на пальцах + задания для самостоятельной работы. Написана очень хорошо и толково, особенно для тех кто только начинает программировать.
А Шилдт и Хорстман это высушенный в урюк reference book без задачи научить читателя чему-либо. Официальные туторы Оракл и то намного лучше объясняют чем эти телефонные справочники.
Ну не знаю, мне Шилдт зашел. Он не так уж и сухо объясняет, примеры приводит. При объяснении того же ООП, например.
А про его 24 hr Java trainer книгу?
Тут раньше был злой сеньёр-помидор, который направо и налево всех увольнял у себя в фирме, так что не надо здесь.
Замыкание (англ. closure) в программировании — функция первого класса, в теле которой присутствуют ссылки на переменные, объявленные вне тела этой функции в окружающем коде и не являющиеся её параметрами. Говоря другим языком, замыкание — функция, которая ссылается на свободные переменные в своей области видимости.
>что такое замыкания
Если знаешь немного ООП, то представь это как некий класс.
В этом классе есть внутренние переменные (поля).
И есть метод doSomething(...) - аналог нужной тебе функции.
Этот метод имеет изнутри доступ ко всем полям класса (это контекст этой функции).
И к своим параметрам.
И может что-то делать со всем этим.
До появления в джаве лямбд то же самое делали с использованием анонимных внутренних классов.
Частый случай применения замыканий - возвращение функции из другой функции, и возвращённая функция имеет доступ к переменным в том месте, где она была создана, в том числе, к параметрам исходной функции.
Т.е., как будто из функции вернули объект класса, в котором эти переменные запомнились.
Вот тебе классический пример замыкания на Груви:
https://groovyconsole.appspot.com/script/5075549181444096
Выбери там edit in console и там уже можно запускать.
Потом перепиши на джаве (код будет почти такой же).
>И куда идти с этим всем?
Я не он, но отвечу.
Это - и есть самый охуенный вопрос.
Потому, что есть куча примеров, когда люди с низкой квалификацией успешно работают в хороших местах, и наоборот.
Поэтому - надо использовать все шансы, и стучаться во все двери.
И не стараться сразу заработать много денег.
Если же тебя интересовало, куда идти со знанием сервлетов-jdbc-jsp и прочего Java EE, ответ - куда угодно. Это используется везде буквально, где речь идёт о джава бекэнде. А Спринг - это альтернативная технология, по идее - то же самое. И доучиться (даже не пере-учиться) - не так сложно.
А вот ровно тот же самый пример, но не с лямбдами/замыканиями, а с классами:
https://groovyconsole.appspot.com/script/5081059658039296
То же самое совершенно, но более многословно.
Но, и более явно и понятно, что откуда берётся.
Сложновато, я совсем тупой видимо, но спасибо.
Пытаюсь вот это понять, но не понимаю, тоже:
public class TestLambdaWaitNotify {
private static Runnable getMktNewsRunnable(Object whoToNotify){
// returning a closure
return () -> {
try{
for (int i=0; i<10;i++){
Thread.sleep (1000); // sleep for 1 second
System.out.println("The market is improving " + i);
}
synchronized(whoToNotify){
whoToNotify.notify(); // send notification to parent
}
}catch(InterruptedException e ){
System.out.println(Thread.currentThread().getName()
+ e.toString());
}
};
}
public static void main(String args[]){
TestLambdaWaitNotify thisInstance = new TestLambdaWaitNotify();
Runnable mktNewsRunnable = getMktNewsRunnable(thisInstance);
Thread marketNews = new Thread(mktNewsRunnable,"");
marketNews.start();
synchronized (thisInstance) {
try{
thisInstance.wait(20000); // wait for up to 20 sec
} catch (InterruptedException e){
e.printStackTrace();
}
}
System.out.println(
"The main method of TestLambdaWaitNotify is finished");
}
}
Сложновато, я совсем тупой видимо, но спасибо.
Пытаюсь вот это понять, но не понимаю, тоже:
public class TestLambdaWaitNotify {
private static Runnable getMktNewsRunnable(Object whoToNotify){
// returning a closure
return () -> {
try{
for (int i=0; i<10;i++){
Thread.sleep (1000); // sleep for 1 second
System.out.println("The market is improving " + i);
}
synchronized(whoToNotify){
whoToNotify.notify(); // send notification to parent
}
}catch(InterruptedException e ){
System.out.println(Thread.currentThread().getName()
+ e.toString());
}
};
}
public static void main(String args[]){
TestLambdaWaitNotify thisInstance = new TestLambdaWaitNotify();
Runnable mktNewsRunnable = getMktNewsRunnable(thisInstance);
Thread marketNews = new Thread(mktNewsRunnable,"");
marketNews.start();
synchronized (thisInstance) {
try{
thisInstance.wait(20000); // wait for up to 20 sec
} catch (InterruptedException e){
e.printStackTrace();
}
}
System.out.println(
"The main method of TestLambdaWaitNotify is finished");
}
}
Дружище, если эти два примера выше (makeAdder) тебе "сложноваты" - это нормально.
Сиди и медитируй над ними, пока не станет просто.
Экспериментировать можно прямо в консоли.
Код на Груви - это, по сути, джава код, с кучей вкусного сахара.
А тот пример, который ты запостил - это какая-то хуйня, понимаешь?
Совершенно непонятно, что именно хотел проиллюстрировать автор, и зачем.
Слово "лямбда" там использовано "просто потому что".
Там основной поток запускает на выполнение фоновый поток, и передаёт фоновому потоку себя же, чтобы фоновый поток уведомил его, когда закончит работу.
Непонятно, зачем ты лезешь в какие-то ебучие мутные дебри какого-то лютого спагетти-кода, не разобравшись с основами.
Так автор объясняет вейт и нотифай и за одно замыкания.
a->a+n это лямбда выражение? а def это от слова define ?
>Сиди и медитируй над ними, пока не станет просто.
Я постараюсь.
Я правильно понимаю, что это сахарная поебота для хипстеров и реально на этом сейчас пишут 3.5 кулхацкера, из которых 3 - создатели самого Котлина.
>реально на этом сейчас пишут 3.5 кулхацкера, из которых 3 - создатели самого Котлина.
На него переехало 69% андройд комьюнити. Остальные легаси проекты покрываются им тоже.
мимоандройд.
1/3 из всего перечисленного учится за две недели практики суммарно пока изучаешь остальное. Базарю, берешь и учишь спринг+скуль, остальное придет по ходу дела.
>a->a+n это лямбда выражение? а def это от слова define ?
Да.
def - это ещё и "как-бы тип". Как Object в джаве, но только в объявлениях. Т.е. def foo = 3 то же самое что int foo = 3 или Object foo = 3. В смысле, в груви можно и так и так.
Список:
def myList = [1, 2, 3]
Map:
def myMap = ['one': 'Один', 'two': 'Один', 'three': 'Три']
Проход по списку:
myList.each {println it}
В фигурных скобках - лямбда.
it - если лямбда принимает единственный параметр, то его можно не указывать, и в теле ссылаться на него как it.
Там есть куча фишек, подсмотренных в руби и в питоне.
Включая многострочные строки в тройных кавычках.
Груви охуенен для прототипирования и тестов (Spock framework).
Ну и Gradle, конечно.
Инфы много, можешь погуглить.
Можно просто сочетать в одном проекте джаву и груви (классы).
Можно также использовать в реальных приложениях как скриптовой движок (выполнять скрипты из фалов или из строк).
Целиком писать большие программы на груви мне не нравится, он явно не для этого (т.к. в нём необязательная типизация).
>>295060
На котлине много пишут под андроид.
>a->a+n это лямбда выражение? а def это от слова define ?
Да.
def - это ещё и "как-бы тип". Как Object в джаве, но только в объявлениях. Т.е. def foo = 3 то же самое что int foo = 3 или Object foo = 3. В смысле, в груви можно и так и так.
Список:
def myList = [1, 2, 3]
Map:
def myMap = ['one': 'Один', 'two': 'Один', 'three': 'Три']
Проход по списку:
myList.each {println it}
В фигурных скобках - лямбда.
it - если лямбда принимает единственный параметр, то его можно не указывать, и в теле ссылаться на него как it.
Там есть куча фишек, подсмотренных в руби и в питоне.
Включая многострочные строки в тройных кавычках.
Груви охуенен для прототипирования и тестов (Spock framework).
Ну и Gradle, конечно.
Инфы много, можешь погуглить.
Можно просто сочетать в одном проекте джаву и груви (классы).
Можно также использовать в реальных приложениях как скриптовой движок (выполнять скрипты из фалов или из строк).
Целиком писать большие программы на груви мне не нравится, он явно не для этого (т.к. в нём необязательная типизация).
>>295060
На котлине много пишут под андроид.
Ну что-то в духе
1)Вот задача от аналитика, вот что у нас в бд, спроси у фронтенд-куна как ему удобнее будет делать запросы и сделай микросервис.
2)Юзер словил багу/сервер упал, посмотри в чем дело и почини.
3)Иди к дба-куну, у нас запросы медленные чёт стали, посмотрите там чё там и как-нибудь оптимизируйте к следующей версии.
4)Нам нужна/заказчик хочет/из соображений безопасности требуется фича Х. Тимлид говорит используй силу инструмент Y.
Берешь, гуглишь как, делаешь.
А хули в вакансиях это не отображено?
>Куль
Скуль, лол.
SQL.
Читается, это кстати, как "сиквел" (устоявшийся англоязычный жаргонизм).
А че там учить-то я не пойму? Команду SELECT?
Правда, не пойму. Посмотрел курс на Stepik: какая-то поебота.
А я не возьму!))
interface Cat<T extends Food> {
T getFavoriteFood();
List<Integer> getAllTeeth();
}
Вопрос. Почему возникает
Unchecked assignment: 'java.util.List' to 'java.util.List<java.lang.Integer>'. Reason: 'cat' has raw type, so result of getCountOfTeeth is erased
В методе
void doSomething(Cat someCat) {
List<Integer> teethList = someCat.getAllTeeth();
}
если тип в листе не генерик и не имеет отношения к Т?
Это был, конечно, абстрактный и упрощенный пример.
Но я создал этот интерфейс с котом ради теста, и в другом классе - метод, который принимает этот интерфейс. Только то, что в посте, ничего лишнего.
И все так же подсчет зубов кота вызывает
Unchecked assignment: 'java.util.List' to 'java.util.List<java.lang.Integer>'. Reason: 'cat' has raw type, so result of getAllTeeth() is erased
Какая-то неведомая ебаная хуйня
>Какая-то неведомая ебаная хуйня
Это известная хуйня.
Не указал параметр типа - нет дженериков для этого объекта.
Алсо, в данном случае достаточно написать doSomething(Cat<?> someCat)
Т.е. ты явно говоришь, что тебе похуй на параметр типа.
Теперь все понятно. Очень познавательно. Сяп.
Я и так использую jackson. Не знаю, как замапить структуру с вложенностью на плоскую структуру.
Правило №1: пользуйся equals
*Бэком
Как минимум джойны, хранимки, апсерт и под/предзапросы.
Files.readAllLines(Paths.get("c:/1.txt"),Charset.forName("Cp1251")).stream(). ...
Как этот поток разбить и вывести пословно, побуквенно?
Не надо ничего мапить в джексоне.
Надо загрузить объект как он есть (с его нормальной иерархией) в Map или в экземпляр класса, а потом - руками его преобразовать в то, что тебе надо.
Если полей много и писать преобразование руками лень - напиши простой генератор кода - на базе данных из json-строки или через reflection исходного объекта/класса.
Считываю csv файл, с этими данными надо вести расчеты. Если в первой строке 2 значения 2 полей больше 2 значений 2 полей во во второй строке, то надо считать и делать операции и так до конца файла.
Как это легче реализовать, я ещё мало что толком знаю, поэтому не понимаю, сюда надо коллекции прикручивать и делать из файла строки и как-то считать, или юзать бд лучше. Спасибо
Решил сам так:
Files.readAllLines(Paths.get("c:/1.txt"),Charset.forName("Cp1251")).stream().flatMap((s)->Arrays.asList(s.split(" ")).stream()).forEach(s-> System.out.println(s));
Читай файл построчно:
https://www.mkyong.com/java8/java-8-stream-read-a-file-line-by-line/
Лучше - через stream, хотя не обязательно.
Из каждой строки делай объект.
Сделай класс, у которого есть нужные поля.
Строку разбивай через split.
Числа - Integer.parseInt(), Double.parseDouble()
Создавай объект и заполняй поля.
Не забывай сначала сделать trim() для всех полей.
Потом - проходишь по списку и делаешь, что надо.
Можно предварительно отфильтровать, если это stream.
linesStream -> map(line -> lineObject) -> filter(...) -> reduce (? или что там тебе надо).
Если со стримами не работал - сначала сделай просто на циклах.
двачую вопрос
Сложный JSON приходит на рест-апи, мапится в иерархию классов и передается в другой слой приложения (сервисы) для обработки. При ошибке нужно вернуть json, содержащий несколько полей. Как из слоя сервисов вернуть JSON с ошибкой? Написать свой класс исключений с нужными полями, перехватить исключение в сервисе и сконвертировать в json?
Да, дрочил тестовые в начале и конце лета в июле гиблый период для устройства, в сумме где-то 10 тестовых, 5 собесов, 3 предложения, 2 на жабе.
Начать надо с того, что убрать слово JSON из постановки задачи.
Потому, что это транспортный уровень, и к сути дела не имеет отношения вообще.
А дальше - возможны варианты.
Как правило, в таких случаях прикладная функция всегда возвращает результат. Этот результат - либо объект ошибки, либо объект результата.
Если функция (по логике) void - то всё равно надо возвращать объект, это может быть просто строка "OK", например.
Естественно, возвращаемый объект сериализуется в json и передаётся куда надо, и, соответственно, там обрабатывается - проверяется, что вернули и т.п.
И, как правило, возвращаемый объект - это специализированный контейнер, в котором уже лежит результат или ошибка. И может быть дополнительная информация.
Подобный подход применяется в функциональном программировании, и по тем же причинам - в ФП всё должно являться значением, чтобы можно было делать конвейер из функций. А исключения - это как goto - очень некошерно.
Как конкретно это реализовать - думай сам.
Можешь посмотреть книгу Functional Programming in Java (Manning, 2017):
https://scanlibs.com/functional-programming-java-improve-programs/
См. главу Handling Errors Without Exceptions.
А что ты знал перед устраиванием? Че на собеседование было? Задания тестовые можешь сбросить куда-нибудь?
Подскажите программу для проектирования ПО.
Имеется ввиду, что-то что немного автоматизировало действия для написания целей программы, указания ресурсов, проработки требований и ограничений и как вследствие создание многоуровненной иерархии состоящей из системы -> подсистем -> модулей - > классов - > методов и переменных.
Часть про классы и методы конечно проще писать в самом коде, но тем не менее..
Самостоятельный поиск дал чуть более чем ничего. Но ведь не может быть такого, что крупные компании и не очень крупные тупо всё пишут в ворде когда процессс довольно шаблонный. Хотелось бы каких нибудь кудобных окошечек и кнопочек, которые бы переключали на разный уровнеь ступени архитекруты и напоминашки, что непроработна такая-то часть проекта.
Игра для мобильных телефонов на J2ME, ныне вымерших.
К сожалению, все известные эмули ее либо не берут, либо тормозят, либо коряво отображают изображение.
Конечно, можно купить какой-нибудь древний телефон на Avito, но хотелось бы играть на компе.
Можно ли на Java написать движок, эмулирующий классы J2ME и запускающий Doom RPG на компе, с OpenGL и полноэкранным видом?
Ничего не понял.
Если тебе нужно проектирование архитектуры сложного приложения, то учи UML и используй соответствующий софт.
Если ускорение разработки, то любая IDE (для Java это IDEA, Eclipse, NetBeans) + нужные плагины. Крупные компании могут писать плагины сами.
Но.. это же среда разработки приложения, а не написания архитектуры или проектной документации.
И никак не приходит в голову, нахуя я это делаю.
Да, позволяет избегать регрессии кода и тд и тп, так говорят.
Но все не покидает чувство, что я пишу тесты ради тестов, бесполезное говно, которое частенько занимает больше усилий, чем основной код. Тем более, статическая типизация и checked exceptions не дают написать ничего лишнего, что свалит программу, если это не какой-нибудь null. А покрыть все возможные ситуации входных аргументов и того, что они там делают - в большинстве случаев нельзя, ибо зависит от состояния объекта и состояния самих входных параметров.
И что регрессию кода гораздо лучше отлавливают как раз таки интеграционные тесты, взаимодействие отдельных частей.
В том то и проблема, что и я сам до конца не понимаю о чем пишу да,да,да тупо. Просто понимание того, что кто-то уже должен был сделать такую программу, которая бы продвигалась как универсальная платформа для проектирования любых идей. Как это обычно бывает там должен быть какой-нибдуь позитивнй окрас так и намекающих манагеру, что очень хорошая идея купить эту приложуху за 19.99$.
А в итоге ничего. Да, есть зубодробительный UML с соответсующим софтом убивающий всякое желание воображать возможности и ограничения пока несозданной проги. Есть и плагины для IDEшек, но это всё же низкий уроень проектирования - классы, методы. Или есть какой-то крутой модуль для IDEA/Qt о котором я не знаю?
В общем, не ищи здесь смысла.
Писать тесты скучно и долго, но они необходимы. Иначе прога может вылететь у юзера по неизвестной причине, и отлавливать без тестов баги очень тяжело (особенно плавающие, которые возникают не всегда). Отладка глюков работающего приложения требует намного больших усилий, чем написание тестов, не говоря уже про огромные Enterprise системы.
С одной стороны, конечно, Java и C# спасают от многих багов, возможных в C/C++, вроде выхода за границы буфера, переполнения стека и т.д. С другой, в любом серьезном проекте используются тонны сторонних библиотек и фреймворков, и где-нибудь обязательно вылезет баг. Юнит-тесты позволяют быстро отыскать и пофиксить его.
Не только в коммерческом софте, но и в успешных open source проектах большая часть кода - это тесты (см. исходники SQLite, например).
Только очень небольшие программы (менее десятка классов) можно писать без тестов.
Ты зря про UML, очень удобная вещь. Нас задрачивали по нему в универе.
Можно ведь брать и использовать только то, что тебе нужно - например, диаграммы классов, компонентов, состояний и последовательностей, а на всякие actors и packages забить, если тебе они не нужны.
ИМХО, прогер уровня Senior должен владеть UML.
Может вот это тебе подойдет?
https://ru.wikipedia.org/wiki/Microsoft_Project
Прога для менеджеров, я в ней не шарю.
>Можно же паковать свой эксепшен в контейнер, а контейнер сериализовать в json.
А я о чём?
И не обязательно свой - можно и стандартный, в зависимости от того, где он выброшен.
Смысл в том, что на сервере эксепшн не выбрасывается, а возвращается как результат. А уже на клиенте можно его "выбрасывать" (в JS, например).
Как-нибудь можно разобрать war файл обратно в код?
Pattern.splitAsStream
Тесты нужны, имхо, если ты потом переписываешь что то уже написанное, чтобы можно было удостовериться что оно работает так как должно. Поэтому и нужны слои типо вью-контроллер-сервис и т д. Чтобы когда ты что то где то поменял оно выполняло свою заданную функцию.
jd.benow.ca
Если юзаешь Спринг, то можно кидать из сервиса исключение и ловить его в @ExceptionHandler.
>>295481
https://github.com/wolches то что гитовал. Попробую ещё поискать, но ничего не обещаю.
>>295417
https://start.spring.io
В ответе нужно возвращать несколько полей из принятого джейсона. Звучит легко, но пробросить ответ из нижнего слоя бизнес-логики в контроллер - задача.
Гугли ResponseEntityExceptionHandler.
Нужно обработать JSON с глубокой вложенностью по такому алгоритму:
1) Принять данные на REST API на спринге
2) Взять внутренную директорию JSON, вычислить от нее хэш
3) Добавить во внутренную структуру несколько полей
4) Сохранить в базе
Как лучше реализовать эту логику? Сразу преобразовывать JSON в HashMap в контроллере, или в контроллере принимать String, передавать ее в сервис и там выполнять все операции?
Кроме обработки внутренней структуры надо провалидировать поля из внешней структуры. Подводные кани есть и при мапинге JSON в иерархию объектов, и при мапинге в HashMap. Что из двух способов предпочесть? Для работы с моей БД HashMap более универсален.
Спасибо большое, анон, почти все так и сделал и получилось, запихнул объекты этого класса в листы и теперь хуй пойму, как делать свои расчеты. Условно говоря, есть 10 листов и в каждом по 10 переменных, надо сравнивать 1 лист с 2, 2 с 3 и так до конца, если в 2 листе некоторые переменные больше чем в 1 делать определенные расчеты. Тыкни хоть, пожалуйста, что гуглить, пока работу с коллекциями гуглю
Вроде на словах просто, а на деле затуп
>Эта аватарка
>huilib
Я конечно понимаю что хуйлиб ты недавно залил, уже будучи устроенным, и работодатели этого не застали при приеме на работу, но вот аватарка, неужели адекватных взрослых людей такое не отпугивает?
Антош, а есть текст того чего хотят от тебя в этих заданиях? Я все это время, это имел ввиду.
В шестом училище, конно-вертолетный факультет.
Так что мне можно вести себя как школотрон? Ставить всякую хуйню на аватарки и давать проектам матерные названия, главное чтобы я был охуенным программистом. Ок, запомню.
Ты с коллегами на работе себя так не веди главное, а в свободное время можешь делать что угодно. Это твой личный гитхаб, он никак к компании не относится и на ее имидж не влияет. Если же вы там им пользуетесь на работе, то заведи отдельный аккаунт, потому что работать с такого действительно некорректно.
Накидайте, пожалуйста, репозиториев на гитхабе с хорошо реализованными REST API на Spring MVC. Хочу посмотреть, как люди пишут бизнес-логику и возвращают сообщения пользователю. Хелловорлды ничему не учат.
Смотря что за книга. Справочник по языку Шилдт однозначно нет. Thinking in Java Эккель можно взять.
Все равно на полке будет стоять, пыль собирать.
Да, если это какие нить классические паттерны, но все равно придется гуглить в конце концов
Вот мой говнопроект https://github.com/PaperPlane01/equinox-backend например. Но предупреждаю, я студентик и нигде не работал даже, поэтому это далеко не эталон, а мамкины сеньоры так и вовсе наверняка засрут.
Посмотрел два таких проекта. Все равно не понимаю, как из контроллера вернуть ответ клиенту, если могут быть ошибки в разных слоях:
1) данные не сохранились в базе по 2-3 причинам
2) данные не провалидировались в сервисе
3) данные некорректно обработались в сервисе
В ответе нужно вернуть несколько полей из данных.
Пробрасывать ResponseEntity через два слоя? Это же рак.
В случае возникновения исключительной ситуации бросаешь исключение и ловишь его в @ExceptionHandler.
https://github.com/PaperPlane01/equinox-backend/blob/master/src/main/java/org/equinox/exceptionhandler/RestApiExceptionHandler.java
В исключении я могу переслать в обработчик 2-3 поля данных (идентификаторы, которые надо вернуть пользователю)?
Хз, не пробовал. Но если нельзя, то мб прямо в исключении передавать нужную информацию?
В обычном исключении можно передать только строку. А мне надо передать объект, который надо сконвертировать в json и вернуть пользователю.
Ну так сделай кастомное исключение, которому в конструктор можно передать объект. А потом через геттер к этому объекту обращайся.
Сделай собственное исключение унаследовав его от Exception и хоть 9000 полей нужных тебе туда добавь.
>унаследовав его от Exception
Лучше от RuntimeException, чтобы не нужно было его ловить в том месте, где метод вызывается.
Как вариант, не сильно шарю в жабе, основной посыл итак понятен и лучше изложен в посте выше моего.
Проходишь в цикле первый список.
Для каждого элемента - вложенный цикл - сравнение этого элемента со всеми элементами другого списка, или даже всех других списков по очереди.
Используй флаги или запоминай мин/макс значения и т.п.
Возможно, надо расширить классы объектов и добавить в них поля, в которых что-то будет накапливаться или флаги.
Возможно, каждый список объектов должен быть не совсем списком, а классом, в котором есть собственно список (в отдельном поле), и дополнительные поля для итогов, флагов и т.п.
А также, всякие хелпер-функции. Типа "сравнить (себя) с другим списком".
Наверное, надо будет сделать список, в котором будут все списки объектов, чтобы можно было их перебирать.
И т.д. и т.п.
И, сначала, неплохо бы чётко сформулировать постановку задачи.
И выразить результаты или условия в виде неких объектов.
Собственно, удваиваю этого сагера.
Аватарку поставил уже после того как устроился, лол.
>>295862
>>295885
Ололо, деанон.
splat logviewer - написать софтину для просмотра логов
nokia - там было несколько заданий, но представленные два про написание иерархии дата-классов и REST для них. Ещё в гистах скрытых лежат задания на бинарное дерево и ещё пару простеньких алгоритмов.
t-systems - описание в самом репозитории
severgroup - из логов в xml вытащить суммарное время активности пользователя по дням
Двачую вопрос
хоооспаде..
LDAP - протокол. Считай, как SQL (грубо говоря).
Хорош тем, что с ним интегрировано огромное количество различного софта. Если у тебя на работе Windows, то с вероятностью 99% у вас есть Active Directory для управления учетками сотрудников. AD поддерживает протокол LDAP, соответственно, если ты добавишь в свой софт (какую-нибудь систему для предприятия/бизнеса) аутентификацию через LDAP, пользователям не придется регистрироваться в твоей системе - они просто будут использовать свой логин/пароль от учетки Windows.
Как давно кодишь на джаве и в целом? Какой бэкграунд? Ты сейчас в лабе или пилишь курсач ератовский?
Это архитектурный стиль взаимодействия компонентов распределённого приложения в сети. REST представляет собой согласованный набор ограничений, учитываемых при проектировании распределённой гипермедиа-системы. В определённых случаях это приводит к повышению производительности и упрощению архитектуры.
На Джаве почти два года, в целом баловался кодингом где-то с 14 лет, когда у нас в школе на информатике начался Pascal/Delphi.
Во внутреннюю лабу меня не позвали. Там случилась странная ситуация, мне позвонили, спросили, хочу ли я пойти к ним во внутреннюю лабу, я ответил утвердительно, потом спросили смогу ли я совмещать стажировку с учёбой в университете, я ответил "Скорее всего да". Мне сказали, что со мной свяжутся и позовут к ним в офис, чтобы более подробно всё обговорить. И тишина. Потом недели через 4 мой одногруппник, у которого брат там работает, сказал мне, что меня не взяли из-за того, что я якобы сам отказался, так как типа не смог бы совмещать стажировку и университет. Такие дела
Ну я к тому, что нет смысла зацикливаться на ерате. Тебя на изи возьмут на стажировку в любой конторе, где есть стажеры. Меня в свое время взяли стажёром в то время как в ерате я даже собес на тренинг джава веб не прошел. И я вот сейчас 4 с копейками месяцев как джун, но я бы и близко вот такой код как у тебя там не написал. Ну я правда андроид, но параллельно я слегка и в спринг бут пытался В большинстве случаев о наборе стажёров не объявляют. Открываешь просто список контор в твоем городе, выбираешь те, что тебе подходят, и пишешь их эйчарам на почту или звонишь по телефону. Большинство проигнорят, но когда пригласят на собес, то тебя возьмут. Я тогда начал по алфавиту всем писать, и на букве E меня взяли но это не ерат. 90% даже не ответили на письмо, но первый собес - сразу всё. Так что вот так.
я много слышал о т-системз. что они такое на твой взгляд? ходил туда? там реально надо говорить на английском чтобы устроиться? что такое жаба скул?
Проблема в том, что в моём городе Караганда вакансий по Джаве почти нет. Точнее, кроме Epam, есть ровно одна компания, где применяют тот стек технологий, который я учу. Остальное либо Андроид, либо какая-то мутная хрень типа пикрелейтед.
Ещё раз. Похер, есть в конторе вакансии или нет. Надо найти список всех. Да, у тебя в городе их не так много, но население под 500к, не может быть что только 2 на джаве пишут. Но тогда значит надо более настойчиво цепляться за них. Звонить, перезванивать самому, и т.д. А вообще в больших городах полегче будет конечно.
в пизде
Жаба-скул - это такое растянутое на два месяца собеседование. Кароч, по порядку. Сначала ты выполняешь тестовое задание (и походу их никто не смотрит, главное, чтобы плашка с Codeship присутствовала о том, что все тесты прошли). Потом тебя приглашают на тестирование (вопросы в духе quizful). Если на тесте набираешь 50%, то там же тебя и собеседуют. В основном задают вопросы по кору и ООП, но если ты не тупишь как мудак, то успевают залезть в многопоточность, SQL, HTTP-методы и даже паттерны. Плюс коротенечько проверяют твой английский (ну например собеседующий попросит тебя рассказать о своей учебе на английском) - быть носителем языка необязательно, достаточно знать чуть больше, чем "Лондон из зе кэпитал оф Грейт Британ".
Если ты прошел, начинается "учеба". Тебе дают проект (круд обыкновенный - сорт оф интернет-магазин - примерно в 3к строк жабы он выходит) и куратора, которого ты можешь дрочить с разными вопросами (естественно, не теми, которые гуглятся на раз-два) и он должен уделять тебе минимум два часа в неделю (но если ты не совсем мудак, то куратор тебе будет нужен только для того, чтобы указывать тебе на очевидные косяки и подсказывать что ты еще можешь реализовать). Параллельно ходишь на лекции (темы разные - от архитектуры ПО до EJB, но скорее для общего развития, потому что сложно покрывать такие темы за два часа). Собственно учеба длится два месяца. За первый месяц ты должен заебашить свой круд - требования - спринг (без читерства типа даты и бута, даже ломбок под вопросом), хибер, сесурити с каким-никаким юаем (если ты подцепил бутстрап - этого достаточно - никто не требует от тебя невероятного дизайна), мускул, JSP, maven, тесты. За второй месяц ты должен вылизать это приложение и допилить второе приложение (на EJB), которое получает от первого данные по ресту, а "общается" с ним посредством MQ. Ну и в оставшееся время показать какой ты молодец посредством добавления в свой проект всяких разных фишечек-хуишечек, типа смс-оповещения или Докера, или еще одного приложения, например (или Сонара - Сонар там по ходу просто маст-хэв в последнее время).
Со всей вот этой поеботой ты выходишь перед слушателями. За эти 15 минут ты должен успеть рассказать о том, что ты сделал, потом тебе зададут вопросы, возможно посмотрят код (поэтому если ты пишешь с magic number'ами вместо констант или называешь методы через нижнее подчеркивание как в сишечке, а не кэмелкейсом - это сразу бросается в глаза) и отпустят с миром доучиваться.
Ну и по результатам, возможно, позовут джуном (я еще слышал, что если ты был не оч на защите, но не совсем конченным, то тебе могут предложить стажировку, но это не точно). А, возможно, не позовут. Потому что, хуй его знает какие там критерии отбора (но это, походу, не только общее качество твоего проекта)
Жаба-скул - это такое растянутое на два месяца собеседование. Кароч, по порядку. Сначала ты выполняешь тестовое задание (и походу их никто не смотрит, главное, чтобы плашка с Codeship присутствовала о том, что все тесты прошли). Потом тебя приглашают на тестирование (вопросы в духе quizful). Если на тесте набираешь 50%, то там же тебя и собеседуют. В основном задают вопросы по кору и ООП, но если ты не тупишь как мудак, то успевают залезть в многопоточность, SQL, HTTP-методы и даже паттерны. Плюс коротенечько проверяют твой английский (ну например собеседующий попросит тебя рассказать о своей учебе на английском) - быть носителем языка необязательно, достаточно знать чуть больше, чем "Лондон из зе кэпитал оф Грейт Британ".
Если ты прошел, начинается "учеба". Тебе дают проект (круд обыкновенный - сорт оф интернет-магазин - примерно в 3к строк жабы он выходит) и куратора, которого ты можешь дрочить с разными вопросами (естественно, не теми, которые гуглятся на раз-два) и он должен уделять тебе минимум два часа в неделю (но если ты не совсем мудак, то куратор тебе будет нужен только для того, чтобы указывать тебе на очевидные косяки и подсказывать что ты еще можешь реализовать). Параллельно ходишь на лекции (темы разные - от архитектуры ПО до EJB, но скорее для общего развития, потому что сложно покрывать такие темы за два часа). Собственно учеба длится два месяца. За первый месяц ты должен заебашить свой круд - требования - спринг (без читерства типа даты и бута, даже ломбок под вопросом), хибер, сесурити с каким-никаким юаем (если ты подцепил бутстрап - этого достаточно - никто не требует от тебя невероятного дизайна), мускул, JSP, maven, тесты. За второй месяц ты должен вылизать это приложение и допилить второе приложение (на EJB), которое получает от первого данные по ресту, а "общается" с ним посредством MQ. Ну и в оставшееся время показать какой ты молодец посредством добавления в свой проект всяких разных фишечек-хуишечек, типа смс-оповещения или Докера, или еще одного приложения, например (или Сонара - Сонар там по ходу просто маст-хэв в последнее время).
Со всей вот этой поеботой ты выходишь перед слушателями. За эти 15 минут ты должен успеть рассказать о том, что ты сделал, потом тебе зададут вопросы, возможно посмотрят код (поэтому если ты пишешь с magic number'ами вместо констант или называешь методы через нижнее подчеркивание как в сишечке, а не кэмелкейсом - это сразу бросается в глаза) и отпустят с миром доучиваться.
Ну и по результатам, возможно, позовут джуном (я еще слышал, что если ты был не оч на защите, но не совсем конченным, то тебе могут предложить стажировку, но это не точно). А, возможно, не позовут. Потому что, хуй его знает какие там критерии отбора (но это, походу, не только общее качество твоего проекта)
А да , забыл добавить. Если ты не проходишь тест или собеседование, то ты можешь вернуться через месяц и потраить еще раз, на это ограничений нет
Работаю в T-Systems. Преподаю в Java School. Вот этот >>296201 анон в общем прав, с небольшой поправкой на итоговую защиту. Мы это организовали по-другому сейчас. Теперь студент сидит со своим ноутом в аудитории, к нему подсаживается какой-нибудь из преподов и начинает задавать вопросы по проекту. Всё про всё минут на пять-десять. Потом кураторы меняются со студентами. В итоге каждый студент общается где-то с пятью кураторами, каждый из которых потом пищет свой отзыв. Так достигается большая объективность.
Есть у нас гора микросервисов. Моя команда из 6 тел ответственна где-то за пять из них.
1) Заказчик хочет, чтобы в такую-то команду добавился такой-то параметр. Моя задача: подправить контроллер, написать API-тесты, захуячить логику в сервисе, написать unit-тесты, задокументировать фичу в доках, закоммитить в репу, задеплоить на dev среду, запилить автоматический интеграционный тест, прогнать его напротив dev, задеплоить на test, уведомить тестеров, чтобы покрыли фичу кейсами и прогнали напротив test.
Если на каком-то этапе вылез косяк — исправляем, хуярим по-новой.
В зависимости от сложности всё про всё от одного часа (если всё изменение укладывается в одну строчку конфига) до двух недель (если вылезла какая-то неочевидная хуйня, ставящая под сомнение текущую архитектуру, надо уже с архитекторами пиздить).
2) Фиксинг багов. В целом не сильно отличается от вышеописанного.
3) Нагрузочное тестирование сервиса. Разрабатываем сценарии, пишем perf-тесты, деплоим микросервис на perf-среду, гоняем, собираем замеры, составляем отчёт, шлём заказчику.
4) Рефакторинг всего и вся, если какой-либо из предыдущих пунктов выявил потенциальную или уже существующую проблему в архитектуре.
>>296226-кун
connectionTimeout = -1 в томкатовском server.xml
>прогнать его напротив dev
>прогнали напротив test
>напротив
Это ты так "against" перевел на русский? Не делай так больше.
Нахуй иди. Перевод вполне нормальный и по смыслу понятен всем причастным к процессу.
мимоджун, которого взяли сегодня. Провалил до этого 2 собеса. 2-й собес провалил из-за одной хуйни в тестовом, о которой мне не сказали.
Вообще, если кому интересно, то в общем я написал 10 писем в разные компании, с приложенным cv офк. Ответили 4. Было 3 собеса, на третьем взяли. на 4 не пошёл ибо нехуй месяц тянуть кота за яйца.
Расскажи что умеешь? Скинь текст тестов сюда если умеешь почтой пользоваться
Смешно.
>Расскажи что умеешь?
Отпишу сухой стек, в cv я всё красиво расписывал.
Java Core.
SQL/PostgreSQL.
Spring/SpringBoot/SpringData/SpringMVC/SpringSecurity
JPA/Hibernate.
Maven/Tomcat.
Thymeleaf/JSP.
VCS: Git, Github
IDE : NetBeans/ IntelliJ IDEA
>умеешь почтой пользоваться
Не умею.))000)0
>Скинь текст тестов
На втором собесе мне ПРОСТО сказали сделать веб-хуйню, где пользователь может залогиниться/зарегаться/выйти из аккаунта. Я сделал на JDBC, а мне сказали, что ожидали от меня SpringData и JPA. Я спросил, почему не сказали ранее, я выбрал что чуть посложнее и просто потому что, мне сказали, что перезвонят.
На самом деле, ведь с JDBC это поебала куда сложнее, чем просто прописать entity на юзера и екстендить CrudRepository. Ебонутые.
Второе тестовое, которое дали на 3 собесе:
Create an application (Using Java 1.8 or higher) that serving the domain of Customers
and Orders.
Расписали подробно что им нужно и какая должна быть функциональность. За это им большой плюс.
Если вкратце, то: Новый юзер приходит. Он должен зарегаться/залогиниться. После того как залогинился, он будет в эдаком "личном кабинете". Из него он может
1) Выйти
2) Создать своего клиента
3) Добавить заказ или просто пометку уже существующему клиенту
4) Почекать какие записи и заказы есть у существующего им клиента
5) Посмотреть какие клиента не имеют ни записей, ни заказов
Сказали могу пользоваться чем хочу, но желательно использовать спринг по максимуму.
Вообще, как мне кажется, решающую роль в приёме на работе сыграло тот факт, что я сеньёру, который меня расспрашивал про тестовое и вообще задавал вопросы по всему, что я написал в cv, было то, что я ему в начале сказал, что я не особо помню многие вещи, с которыми давно или вообще не работал. Т.е если он хочет меня про MVC спрашивать, я ему в лёгкую распишу как работает моё тестовое и про любой мапинг и т.д, но если он начнёт меня ебашить каверзными вопросами про многопоточность, то я ничего не скажу. Офк я сказал что знаю что такое треды, как запускать, про дедлок, про synchronized и т.д, но я об этом знаю только по книжке, сам с этим ни разу не работал.
Ну и в таком стиле проходил собес. Он спрашивал, я говорил, если работал с этим, то могу пояснить за многие детали, что и делал дальше. Если не работал, то так и говорил, что только читал.
>Расскажи что умеешь?
Отпишу сухой стек, в cv я всё красиво расписывал.
Java Core.
SQL/PostgreSQL.
Spring/SpringBoot/SpringData/SpringMVC/SpringSecurity
JPA/Hibernate.
Maven/Tomcat.
Thymeleaf/JSP.
VCS: Git, Github
IDE : NetBeans/ IntelliJ IDEA
>умеешь почтой пользоваться
Не умею.))000)0
>Скинь текст тестов
На втором собесе мне ПРОСТО сказали сделать веб-хуйню, где пользователь может залогиниться/зарегаться/выйти из аккаунта. Я сделал на JDBC, а мне сказали, что ожидали от меня SpringData и JPA. Я спросил, почему не сказали ранее, я выбрал что чуть посложнее и просто потому что, мне сказали, что перезвонят.
На самом деле, ведь с JDBC это поебала куда сложнее, чем просто прописать entity на юзера и екстендить CrudRepository. Ебонутые.
Второе тестовое, которое дали на 3 собесе:
Create an application (Using Java 1.8 or higher) that serving the domain of Customers
and Orders.
Расписали подробно что им нужно и какая должна быть функциональность. За это им большой плюс.
Если вкратце, то: Новый юзер приходит. Он должен зарегаться/залогиниться. После того как залогинился, он будет в эдаком "личном кабинете". Из него он может
1) Выйти
2) Создать своего клиента
3) Добавить заказ или просто пометку уже существующему клиенту
4) Почекать какие записи и заказы есть у существующего им клиента
5) Посмотреть какие клиента не имеют ни записей, ни заказов
Сказали могу пользоваться чем хочу, но желательно использовать спринг по максимуму.
Вообще, как мне кажется, решающую роль в приёме на работе сыграло тот факт, что я сеньёру, который меня расспрашивал про тестовое и вообще задавал вопросы по всему, что я написал в cv, было то, что я ему в начале сказал, что я не особо помню многие вещи, с которыми давно или вообще не работал. Т.е если он хочет меня про MVC спрашивать, я ему в лёгкую распишу как работает моё тестовое и про любой мапинг и т.д, но если он начнёт меня ебашить каверзными вопросами про многопоточность, то я ничего не скажу. Офк я сказал что знаю что такое треды, как запускать, про дедлок, про synchronized и т.д, но я об этом знаю только по книжке, сам с этим ни разу не работал.
Ну и в таком стиле проходил собес. Он спрашивал, я говорил, если работал с этим, то могу пояснить за многие детали, что и делал дальше. Если не работал, то так и говорил, что только читал.
>как учился
ЦЕЛЫЙ МАТЬ ЕГО ГОЖД Я ЧИТАЛ HEAD FIRST JAVA. Тупо потому что был блядский универ и читал на парах по пять-десять страниц. Летом занимался хуйнёй и что-то учил, что-то не учил, писал всякую хуйню на чистой джаве. Пробывал в постгрес с скл, дальше иннер джоина и селекта не дошел.
Потом я подумал, что ПОРА БЫ ПОЙТИ НА ГАЛЕРУ.
Пошел на первый собес, где меня обсосали, я не смог написать селект с подзапросом, не сделал простейшую сортировку хотя там можно было бы перегнать массив чисел asList в TreeSet, после чего в массив обратно. Так бы я избавился от всех дубликатов. Но я тупой и не смог.
После этого обоссывания, где с меня тихо проигрывали, я понял, что нужно блять что-то делать. За три дня я задрочил доки и офф туториал постгреса, после чего на codewars делать 4-ые каты. Потом начал дрочить спринг и пошел на второй собес, где дали тестовое. Дали неделю. За эту неделю я как черт учил спринг и делал тестовое. Т.е учился в бою. Пока ждал результаты, неистово дрочил хибернейт и додрачивал спринг.
В итоге, когда дали 3-е тестовое, я его сделал за два дня, особо не напрягаясь, потому что после неистового дроча в голове всё оселось. Воть, теперь буду писать и какоть микросервисы и бэкенд на галере.
>>296387 -кун
Хочу сделать следующее: запустить определенный набор тестов параллельно, подождать пока они все выполнятся и запустить другой набор тестов тоже параллельно. Я пока что реализовал это добавив несколько <executions>, в каждом прописав <goal>test</goal>, но в таком варианте между запуском наборов тестов появляется существенная пауза.
1) Пришел запрос на добавление товара в корзину
2) Ищем подходящий (состояние только что создан, а не в процессе оплаты например);
3) Если не найден - создаем новый;
4) Добавляем в него (заказ) товар;
5) Сохранем заказ в репозиторий;
Бывает такая ситуация, что от клиента приходит сразу несколько запросов на добавить товары, а заказа подходящего нет - в итоге создается несколько заказов, в каждом по товару.
На методе сервиса стоит @Transactional, но чет не помогает. Заказ это гибернейтовская энтитя если что.
Подумал что можно конечно ебнуть syncronized(this) вокруг получения/создания подходящего заказ, но это выглядит как-то как как по мне, тем более тормозит других пользователей. Можно конечно пойти дальше и добавить double-check локинг, но это говно какое-то совсем.
>double-check локинг
Это нормально в данной ситуации, только не с syncronized(this), а с локом, относящимся к клиенту клиенту, для которого создается заказ
А когда эти локи удалять-то? А с дабл-локингом в принципе не часто попадаем в такую ситуацию.
а то такое чувство что эта красивая инициализация слишком уж дорого стоит
помимо геттеров и сеттеров придется еще пихать статический класс где на каждое поле будет сеттер
класс же сильно жирнеет
не лучшели просто чтобы сеттеры возвращали this
получится же почти тоже самое
Такое лучше делать не in-memory, а через pessimistic lock в БД (или что-то подобное), чтобы не потерять масштабируемость. Тогда и вопроса об удалении может не возникнуть. Но если хочется свои внутренние локи, можно их удалять через weak values.
Што блять?
Локи тут не помогут.
У вас сама идея порочна.
Создавайте пустой заказ в сеансе для каждого залогиненого пользователя.
И пишите всё в него.
Нормально - сессия должна автоматически сериализовываться сервером приложений (на случай перезагрузки сервера и т.п.), поэтому в бд заказ можно писать не сразу.
Хотя, хуй знает, как оно там, в этом вашем спринге.
Билдер нужен тогда, когда тебе надо именно создавать сложный объект, со сложной внутренней структурой.
В этом случае он предстаёт во всей красе.
В таких случаях может использоваться ещё и целая куча вспомогательных классов, чисто для работы билдера.
И это будет совершенно оправдано.
В простых случаях достаточно сеттеров, возвращающих this или типа того.
>>296470
>Ебать тут архитекторы собрались.
Собрались - это сильно сказано.
Заглядывают, иногда.
Сиквел, кстати не жаргон, а первое название языка - SeQueL (а не Structured Query Language, как принято считать)
Хз, гугли.
Есть кучка разных observable, которые должны как-то взаимодействовать через if/else, причем в одной подписке.
Допустим, я получаю некое булево значение, и в зависимости от него мне либо нужно выдать что-то, либо ничего не выдавать.
Можно сделать это как-то без Maybe?
Как вообще можно ветвить стрим?
Если я тебя правильно понял, то для этого есть операторы combineLatest и withLatestFrom. Первый выдаёт значение при получении нового объекта из любого Observables, второй только на объект одного из них.
Котлин, ещё как
Кто жирнеет? Билдер отдельный класс, у тебя в проекте гуава, апачи, спринг и куча другого говна, а ты из-за билдера экономишь на спичках.
>>296529
Но локи помогли, проблема возникала при нескольких одновременных попытках добавить товар и если ебнуть десяточку параллельно возникала железно, попроверял для 10, 20, 100.
Вообще кажется можно решить через @Transactional, но пока не получилось, просто нужно найти такой режим что бы чтение энтитей реальное произошло и запись.
Вообще ты здравую идею про сессию говоришь, но там куча других задач, все как всегда горит и тд.
Ну если ты придумаешь нахуя тебе там спринг, то почему-бы и нет, но думается мне тут все можно решить пир-ту-пир.
Я не понял, как это относится к его вопросу?
Где обработка условия у тебя?
И ему надо делать ветвление, а у тебя - слияние.
Я просто тоже потихоньку ковыряю rx, и это очень интересный вопрос.
>>296569
Думаю, тут надо использовать промежуточный узел - subject (приёмник
и передатчик в одном), и в нём принимать решение. Но, возможно, есть способ лучше, т.к. задача совершенно типовая.
Ладно это бы оно еще работало быстро, но это, к сожалению, так не работает.
И это даже если не говорить про просто известные баги вроде того, что проксированные сущности не реализуют интерфейс, который реализует нормальная сущность.
И это даже если не говорить просто то, что неявное мутирование строки в бд сайдэффектом от изменения поля объекта - это худшая практика из возможных, которая даже в простейших случаях заставляет использовать dto для всех манипуляций с данными.
Здесь я предпологаю, что у меня просто не прозошел некоторый вау-момент при изучении либы, который заставит меня сувать ее во все возможные области, ибо я просто джун. Но при каких условиях он может произойти? Ищу здесь озарения от опытных джава-господ.
> И ему надо делать ветвление, а у тебя - слияние.
Ветвление делается в замыкании. Конкретно ветвление делается при помощи оператора withLatestFrom. Первый стрим это объект (или группа объектов), который нужно изменить, а второй - предикат, по которому ветвление и выполняется. Например так:
o1.withLatestFrom(o2, (e1, e2) -> {
if (e2.equals(true)) {
return e1;
} else {
return (int)e1 + 1;
}
});
Если хочется простых ветвлений как в синхронном коде, то тогда тебе нужны корутины. Rx это больше функциональщина, со всеми её прелестями.
Error:(50, 20) java: bad operand types for binary operator '=='
first type: java.lang.Object
second type: boolean
Энджой ёр жава-генерики.
>Error:(50, 20) java: bad operand types for binary operator '=='
>first type: java.lang.Object
Вроде все ок
И в каком же случае у тебя "ничего не выдаётся"?
Перечитай условие.
Алсо, e2.equals(true) - проверяет сразу 2 вещи, а надо - одну.
Баг в таком случае искать заебёшься.
Про функциональщину я в курсе, лол.
> И в каком же случае у тебя "ничего не выдаётся"?
Увы, в функциональщине даже if'ы что-то всегда выдают. Просто их нужно игнорировать, для этого можно выдавать специальный синглтон, аналог void'а, а дальше его фильтровать.
> Алсо, e2.equals(true) - проверяет сразу 2 вещи
Он проверяет одну вещь - равенство e2 и true. Где тут две вещи-то?
>специальный синглтон, аналог void'а
Это ты так издалека начал про Option или Maybe?
Ещё раз - перечитай условие.
Алсо, реактивный != функциональный, про это тоже не надо забывать.
Я, всё же, думаю, что тут нужен subject.
>Где тут две вещи-то?
Как много нам открытий чудных, лол.
Он сначала проверяет, что это в принципе boolean.
И если нет - то возвращает false.
Кхе, это и подразумевается в "проверке на true", поскольку ничто кроме boolean (и его брата Boolean) это значение хранить не может. Я-то думал ты мне про null затирать начнёшь.
Хули у меня пакет не находится? Класспас прописал
Да я долбоёб просто, вместо стороннего пакета записал туда тот, в котором сейчас нахожусь
Сейчас методы сгруппированы, а POJO запросов/ответов распиханы по отдельным файлам. И что-то как-то не очень удобно получается.
OOM от резко разросшегося пула при создании сообщения конкатенацией.
Java Будет такой же платной и дорогой, как C# (OS + Visual IDE)
Вкатывались-вкатывались, по своим курсам 2 года, а все работодатели будут переходить на язык будущего, на Haskell/SICP
>
>Ну чЁ, Free2Play Джаванисты, скоро на мороз пойдете.
>
>Java Будет такой же платной и дорогой, как C# (OS + Visual IDE)
>
>Вкатывались-вкатывались, по своим курсам 2 года, а все работодатели будут переходить на язык будущего, на Haskell/SIC
Уже вижу, как маня-вкатывальщики переписывают свое Spring-гавнище на Deplhi
> Ну чЁ, Free2Play Джаванисты, скоро на мороз пойдете.
Ты о чём вообще? Или ты один из тех истеричек, которые не понимают, что означает смена лицензии у оракловской java11?
Птздец опять переучиватся...
Ты какой-то долбоеб. Во-первых с C# ты тоже нихуя ни за что не платишь, комюнитевской студии хватает вкатывальщику, дальше если какое-то платное говно это проблемы работодателя. Во-вторых вкатывальщик опять же ничего не платит ораклу если его продукт не коммерческий. Так что платить ораклу будут распильщики которые вместо переезда на опенждк/еще какого менее жадного вендора выберут говноракл. Ну или попадут те команды которые супер сильно завязались на проприетарные фичи хотспота.
И что она означает? И Как платные обновления с новой лицензией связаны?
А мне показалось, что он про Null-паттерн (что есть ad hoc говно и частный случай)
Ну, конечно, маня. Бесплатный он только для тебя.
А вот работодатель\галеровладелец за отдел таких C# макак выложит гораздо больше денег, чем раньше за java. У джавы хотя-бы IDE есть бесплатные
Спринг при входе / авторизации в защищенные слои приложения берет полностью запись из БД и вообще обращется к БД по объекту с полными полями ентити и выборка блоба замедлит это дело. Склоняюсь к варианту хранить на диске.
Разве нет специальных БД для хранения бинарных данных, который потом можно будет перетащить сразу на несколько серверов, если на одном вдруг перестанет хватать места?
А что прикрутить что-то другое нельзя?
Дополню. Думал еще про вариант амазон клауд. Но картинок будет не очень много глобально.
>картинку прям в БД в виде блоба?
Никогда так не делайте. Файлы нужно хранить в файловой системе, она с этим справляется лучше, так как предназначена для этого. Файлы в БД не хранят. Складывайте в базу путь к файлу, но не сам файл. Это будет гораздо эффективнее.
Вот я к этому и склоняюсь. Если бы это была отдельная таблица чисто с картинками + связь 1 к многим к юзеру я бы еще подумал о хранении в БД. А так оно прям в табличке юзера будет. 1 картинка. хуй знает почему так не спрашивайте это не моя идея
Пишут есть минусы / плюсы у обоих подходов.
https://habiletechnologies.com/blog/better-saving-files-database-file-system/
А как хранить большие тексты? Например есть блог и есть дохрена больших текстов.
>большие тексты
Тексты для людей хуйню весят. Все 3 книги Войны и Мир тупо текстом без сжатия около 3 метров весят.
Ну и пиши в БД с разметкой. Можно дополнительно писать и готовый HTML-код, и оригинал с BB, Wiki или markdown -кодом, чтоб при редактировании (или переходе на другой движок) сохранить оригинал и снова преобразовать его в HTML. Просто научи движок для поиска (а в контексте Java это 100% будет Lucene) игнорировать разметку и всё будет нормально.
1) REST API;
2) Работы с JSON;
3) Dependency Injection?
Хотелось бы поменьше ебли с аннотациями и побольше типизированности.
Есть и дохуя, могущих в нормальную бинарщину. Кассандра, игнайт, хадуп стек, куча clustered file system databases (типа цефа, бигфса, гластерфса, тысячи их).
У entity оставляешь поле avatar_id/avatar_link/avatar_file (String). Отдельно создаешь interface FileService с CRUD методами. Реализации какие угодно: FileSystemFileService, DataBaseFileService, AmazonS3FileService и т.п.
Зависит от того, нужен ли тебе полнотекстовый поиск и насколько крутой. У postgres есть поддержка полнотекстового поиска, но не такая крутая, как у Solr или ElasticSearch.
Когда при опечатке тебе сразу ругается компилятор, вместо того чтобы выбрасывать километровый стектрейс в рантайме.
Когда ты можешь нормально отлаживать код, а не думать где ты проебал аннотацию и почему оно работает не так как ты ожидал.
Ид и линк понятно зачем. поле файл зачем если картинка на диске / в файловой системе?
Да ты охуел. Без километрового трейса никто не поверит, что ты серёзным дерьмом занимаешься!
По идее даже одно и тоже значение после encode() будет давай каждый раз новый хэш.
Ладно, ты меня разоблачил. На самом деле, для хэширования используют детерминированные функции, которые всегда дают один и тот же результат для одного значения.
Скорее принял за зеленого долбоеба. Ты опять пишешь хуету. Соль всегда рандомная.
Там же внутри акторы, а их в джаве использовать НЕУДОБНА
Нет, ты. Схуяли бы мне объяснять тебе вещи, которые элементарно гуглятся?
Ещё скажи, что ты и пароль не игнорируешь.
Накроман, / значит или. Одного поля достаточно.
Толсто - это описание твоей мамаши. Сказали тебе: конфигури как хочешь. XML/annotations/code - всё работает.
Пили свой велосипед, тебе ничто не мешает, кроме отсутствия фантазии. Срать в треде все могут.
Считать Спринг говном - это твоё право. Ты спросил как его можно конфигурить - тебе ответили, а ты всё воняешь. Да похуй мне на то нравится он тебе или нет.
https://stackoverflow.com/questions/6832445/how-can-bcrypt-have-built-in-salts
Это только бскрипт. А шифрование идет не только через него.
Почитай как сейчас в 5м спринге генеряться пароли.
>Dependency Injection
Если поменьше аннотаций и побольше типизированности - то Guice.
Но, это только DI контейнер.
И, я не уверен, что есть смысл применять его в бекэнде.
А Спринг - это монструозная хуйня "платформа", если угодно. Всё в одном + возможность использовать любые сторонние либы.
Аналог Java EE в общих чертах, но с несколько иным подходом.
Так что, если мы про бекэнд - то только Спринг.
"Всегда рандомная" и генерится первый раз, а потом запоминается - это разные вещи.
Нормальна ли практика, чтобы в onNext subcriber'a создавать новые цепочки?
В интересах читабельности и поддержки кода, а то со всеми этими ветвлениями пиздец оверинженеринга какой-то.
Опускаю стоимость твоих акций ниже плинтуса.
Жму руку, повышаю до архитектора.
>Нормальна ли практика, чтобы в onNext subcriber'a создавать новые цепочки?
Нет, onNext это место где ты применяешь то что пришло, если тебе так надо это как-то еще дополнительно провести по цепочке можно сделать так:
ConnectableObservable<T1> sharedObs = createObs().publish();
Disposable d1 = sharedObs.subscribe(/.../);
Disposable d2 = sharedObs.flatMap(/.../).subscribe(/.../);
Disposable d3 = sharedObs.connect();
И все же, тут предполагается один и тот же тип на все observable.
А что если, допустим, мне нужно проверить некоторое состояние, а при его успехе получить данные от двух возвращающих разные типы observable?
Например, проверить, есть ли в системе некоторый файл.
А при успехе
1) Один observable должен выдать кусочек его содержимого.
2) Второй должен сделать вообще какую-то левую херь вроде "число гномиков в саду у тети Сраки".
И результаты 1 и 2 нужно опубликовать во вью.
У меня просто в базовом классе есть наборчик методов, которым я передаю Observable и некую лямбду, которую нужно выполнить в onNext.
И я в данный момент так и делаю. И хотелось бы знать еще подводные, кроме того что несвязанные друг с другом прямо цепочки, подписанные на что-то, кроме
.subscribeOn(Schedulers.io())
могут ударить по производительности.
Но в случае Schedulers.io() это ведь пул, разве нет?
>А при успехе
>1) Один observable должен выдать кусочек его содержимого.
>2) Второй должен сделать вообще какую-то левую херь вроде "число гномиков в саду у тети Сраки".
Или пусть будет еще и
3) Некий Completable должен что-то сделать и ничего не возвращать.
Хочется вот понять, почему в этом случае прерывать цепочку - это плохо, а ебать в рот модульность, понятные и явные абстракции, выписывать дивные нечитаемые столбы из >30 строк, у которых есть куда более краткие аналоги - это хорошо и православно?
Как это фиксить? Я уже 2 часа сижу, подключил +4 какие-то либы - нихуя не работает. Хепланины аноны.
Ааа вот, надо так. Тебя это ебать не должно.
Да блять. Какая-нахуй консоль, если я бросил его в тимкат? на моей локалке все нормально работало.
В итоге - добавил пару либ из старой версии + убрал синглтон, который держал вечную ссылку на удаленную бд и все заработало нахуй.
- 4 часа жизни сука. Я 16 сущностей war наплодил за это пвремя. пиздец.
Чет там дальше var какие-то завезли, на платную основу переходить хотят, вообще охуеть.
>
ты долбоеб? жаба платформонезависимая, процессор может быть любой - от ARM до Эльбруса ебать.
Только JNI.
И ассемблерные - это ты загнул.
Обычно обходятся сишным кодом.
Ничего особо сложного в этом нет.
А если взять JNIWrapper (https://www.teamdev.com/jniwrapper), то вообще охуенно.
Ей даже на фактическую длину машинного слова похуй.
Топ. Спасибо, многочаю тебе.
Спасибо
Ну так-то jar с хеллоуворлдом одинаково
Ну так-то jar c хеллоуворлдом одинаково работает под win, *nix и macos.
Хули тебя рейтить?
Ты ленивое гавно раз в неделю по коммиту делаешь.
Код нужно каждый день писать ебта.
Зелень гитхабу!
Вроде не плохо
https://github.com/etipsum
У андрюши свой тред вроде есть, думаю там лучше спрашивать.
да, там как раз заостряется на этом внимание
Как только так сразу.
Возможно на Dart, но это не точно.
https://www.techyourchance.com/will-google-betray-kill-android/
Читать в шапочке из фольги.
tl;dr Гугл не хочет терять статус монополиста и пытается шантажировать/угрожать, если не получится будет соскаивать на новую ось, но нужно постелить соломку что бы макаки портировали приложения, а говновендоры запихнули это в девайсы.
Политех. Мы до этого swing учили, препод обещает всем 100к зарплаты при выпуске с красным дипломом.
:^)
Из формы беретуся данные для апдейта сущности - ну и обновление БД. И через сейв метод круда с таким же ид и через просто АПДЕЙТ частичный.
Если делаю анотацию постмаппинг - все ок. все обновляется
Если @Patchmapping или @PutMapping
Получаю Request method 'POST' not supported.
Вопрос почему патч / пут не работают хотя наверно они были бы более уместны.
Ну а как еще из формы получить данные для модели?
Если че то форма создается сперва через гет - который берет данные из БД и показывает уже заполненую форму.
Тогда в каком случае применять эти две аннотации?
Ты наверное имел в виду отослать? А тут уже хуй знает, это зависит от технологии клиента.
Видимо через хтмл никак. Там я только форму с постом знаю.
Ладно спасибо, на жвскрипе допишу тогда мож быть если лень не станет. Там че хочешь отправляй.
Ну, вся эта хрень и рассчитана на джаваскрипт, в первую очередь.
Из html формы можно только get или post.
Можно и из джавы, в спринге же есть RestTemplate:
https://www.baeldung.com/rest-template
Ну, и, конечно же, в IDEA есть встроенный REST-клиент.
Ты ведь используешь идею?
Ну, или скачай отдельный, их дофига.
И плагины для браузеров есть.
Идею да. Без нее никуда. Мне кажется я без нее не смогу уже ничего.
Рест хорошо конечно, но все рано нужен жвскрипт по нормальному.
Разметки нет ессно. Но думаю понятно
@Controller
public class XuiController{
@Autowired
private PososanieService pss
//Иногда @Autowired тут. Иногда и тут и над pss.
piblic XuiController(PososaniService pss){
this.pss = pss;
}
как то так.
вся суть спринга блять
Хм. Ну ок. То есть делать только над конструктором?
Просто нигде не встречал обьяснения почему так а не иначе. Учитывая что просто обьявление что хуйнянейм будет использована и аннотация над ней работают. Помню еще в спринг ин экшон писалось мол этого хватает когда про аспекты там рассказывал, но я уже смутно помню.
Погугли, эту тему часто обсуждают.
Через конструктор - это классика.
Но, это не значит, что по-другому нельзя.
чтобы потом в юнит-тестах моки подставлять
>обещает
Ловите нормиса, который верит пирдуну, что он научит тому на чем сам мог бы рубить бабки но сидит в полятехе. А нормис на дваче шитпостит на аплеты сам не зная, что их юзают даже в сбертехе, в который пойдет полы мыть, чурка.
Пачан, у меня ДВА друга толмача закончили пту а второго пидорнули с мифи после первого курса, пошли работать на 80 косарей джава крудами. Сейчас большие люди уже.
Нахуя ты ходишь в свой чмотех? лучше бы джава изучал.
https://pastebin.com/Xbdnw462
но не вкачу, как строку на символы распотрашить в стриме, и чтоб красиво было.
Обычно все инъектируемые поля делают final, опять же в целях кошерности (а также иммутабельности, хотя вряд ли кто будет писать код, где это понадобится), и в этом случае спринг сможет их присвоить только через Autowired-конструктор, а иначе класс тупо не скомпилируется.
Я так понимаю, что после изучения основ Java надо курить Spring и это займёт времени раза в 3 больше, чем собственно Java?
Нет. Основы изучаются достаточно быстро, а нюансы можно постигать только в боевых условиях - фреймворк очень большой, плюс детишек у него много
http://www.adam-bien.com/roller/abien/entry/java_8_streaming_a_string
>>298982
Это ты про появление типов в питоне или просто в лужу пёрнул?
Алсо, питон в принципе не годен для ФП из-за синтаксиса на отступах (поэтому и лямбд нормальных нет), так что питонобоги могут пойти вон в те кусты и отсосать друг у друга.
Пока баловался со стандартными вещами типа конкаренси, семафоры, экзекуторы, коллекции, swing, sql, немного пощупал IoC weld, lombok
>Ловите нормиса
Ты в сарказм чужих не можешь?
>юзают даже в сбертехе
>сбертехе
Ты там сам полы моешь? Давно мы начали ориентироваться в гос банки?
Пусть тред читает, тут уже отписывал те, кто свой стак приводил.
Сынок - апплеты - охуенны.
В корпоративной среде, естественно.
Да, я понимаю, почему их прекратили поддерживать.
Но, адекватной замены - нет (ибо web start тоже похерили), и это очень плохо.
И, я думаю, что те, кто сейчас использую апплеты, будут продолжать это делать до тех пор, пока совсем не прижмёт, т.е. ещё лет 6-8.
И, по этой же причине, IE11 никуда не денется ещё очень долго.
Так что, если ты не в теме - просто проходи мимо, не надо тут портить воздух.
Стоит ли в гитхаб заливать учебные проекты с ютюба в стиле "я пишу и объясняю вы повторяете"?
То есть вроде ты сам написал, а вроде нет.
Объясните, я может чего еще не знаю в этом вопросе и существует действительно модификатор, который бы запрещает менять состояние объекта внутри метода?
Потому что иммутабельность полей / переменных и иммутабельность объектов это две разные вещи.
Странно, что ты этого не понимаешь, имея "бэкграунд" в крестах. Похоже, что максимум что ты там можешь это хелло ворлд написать.
cgi скорее
И я войду, вот увидишь! И не на какие-нибудь мейнстримные и банальные технологии, а на что-то новое и уникальное, где не будет конкуренции поначалу.
Как ты сразу подорвался и проецировать стал, хотя пять минут назад сам же требовал это не делать.
Я не могу проецировать чисто физически, потому что нигде не работал. А вот ты можешь.
> Я не могу проецировать чисто физически
Вот именно поэтому у тебя не получится, как я и говорил ранее - у тебя нет мозга по собственному признанию.
Сраженный войтивайти беспомощно порвался и перешел на визг. Все ясно.
У тебя не получится. Сам увидишь, раз не веришь умным людям.
чмоха слилась и проецирует
И то и другое какой-то костыль применимый только к классам, которые должны быть неизмененны вообще всегда после момента инициализации, а не в конкретном методе.
>>299081
>>Потому что иммутабельность полей / переменных и иммутабельность объектов это две разные вещи.
И это как-то отвечает на мой вопрос?
>>Странно, что ты этого не понимаешь, имея "бэкграунд" в крестах. Похоже, что максимум что ты там можешь это хелло ворлд написать.
Похоже, что ты пидор. Попробуй опровергнуть.
Формально - это легаси.
Но, на самом деле - это простая и годная вещь.
С отличной инструментальной поддержкой и прекрасным быстродействием (в сравнении с пхп, руби, питоном).
Поэтому, отказываться от этого просто потому, что эта технология придумана давно - это не очень умный подход, попахивающий несвежим смузи.
У всех разные задачи.
Сейчас хайп на клауд и микросервисы. И в этом случае JSP - не используется.
Однако, для корпоративных задач, если не нужно _беспредельное_ масштабирование (которое вовсе не бесплатно само по себе) - классические серверы приложений (Java EE или классический спринг mvc) - вполне годная тема. Потому, что сильно упрощают разработку. А масштабирование делается через кластеры (см. Caucho Resin - охуенно быстрый и удобный JavaEE 6 сервер).
Вообще, давно уже надо понять, что больше нет рецептов, которые подходят всем и под любую задачу. Как минимум, надо разделять энтерпрайз (классика, десктопные клиенты и браузеры, огромные таблицы, формы на три экрана и т.п.) и ширпотреб (mobile first и прочая ебанина для народа - ютубы с твиттерами).
>только к классам, которые должны быть неизмененны вообще всегда после момента инициализации, а не в конкретном методе
А какой в этом смысл? Если ты не доверяешь методу то зачем его вызывать?
У тебя есть другая версия отсутствия в питоне нормальных лямбд?
Код с кучей лямбд реально стал бы нечитаемым, а читаемость кода - это фетиш для Гвидо.
Кукарекание же Гвидо на тему "именованные функции лучше безымянных лямбд" - это классическое "нинужно", поэтому, не катит. Не мог же он признать, что его любимый ебучий синтаксис на отступах имеет такие интересные побочные эффекты.
Джава оуенна, а питон - годится только для скриптов.
Пытаешься быть тонким, лол?
Что не так с лямбдами и отступами, петушара? Можешь хоть нормальный пример привести, а не КО-КО-КО?
У тебя лямбда в конвейере стрима сама возвращает стрим.
Это значит, что вместо map надо flatMap.
Гугол в помощь.
Хелоу, у любого ML-подобного языка синтаксис на отступах основан, и тем не менее везде там есть нормальные многострочные лямбды, и никто даже не думает, что может быть иначе. Только питонодауны что-то кукарекают про читаемость.
Петушара - это твой папа, лол.
Я тебя спросил, есть ли у тебя другая версия отсутствия многострочных лямбд в питоне. Есть что сказать?
Можешь ли ты привести пример кода на питоне (достаточно длинный), типа конвейера в стримах или в Rx в джаве с многострочными лямбдами на отступах (если бы они были в питоне)?
Речь не про сферический синтаксис на отступах, а про питон.
многострочные лямбды не нужны, петушок. если они тебе по какой-то причине нужны, ты делаешь что-то не правильно. ПОДУМОЙ!
<head>
<link rel=stylesheet type="text/css" href="1.css">
</head>
<body>
<script>
var n=10;
var s;
document.write("<table>");
for (i=1; i<=n; i=i+1)
{ document.write("<tr>")
for (j=1; j<=n; j=j+1)
{
st=(i+j)%2
if (st==0) s="class='r1'";
else s="class='r2'";
document.write("<td "+s+"> </td>");
}
document.write("</tr>");
}
document.write("</table>");
</script>
</body>
<head>
<link rel=stylesheet type="text/css" href="1.css">
</head>
<body>
<script>
var n=10;
var s;
document.write("<table>");
for (i=1; i<=n; i=i+1)
{ document.write("<tr>")
for (j=1; j<=n; j=j+1)
{
st=(i+j)%2
if (st==0) s="class='r1'";
else s="class='r2'";
document.write("<td "+s+"> </td>");
}
document.write("</tr>");
}
document.write("</table>");
</script>
</body>
Съеби, сука.
Потому что в джаве нет понятия указателей, лол. Как ещё передать объект кроме как по ссылке?
кек, орнул че то
Что так сложно? Уже пол вечера не вкурю, что там куда идёт.
Я на питоне сходу набросал, как это работать должно:
in_lines = ['saa', 'bbb', 'ff.ff']
allowed = set("abc.")
subst = '.'
out_strings = [ "".join(map( lambda c: c if c in alowed else subst, s)) for s in in_lines]
>Я на питоне сходу набросал
Так это ты тут флудишь про питон?
>сходу набросал
А теперь распараллель по ядрам, лол.
Тема чатика располагает какрастыки, решил в него метнуться тоже, чтоб совсем дремучим долбоёбом себя не чувствовать.
Вот ты доебался. Почитай спецификацию JVM, если хочется подробностей.
Это - >>299064 - твой пост?
Да, в данном случае, можно сказать, что принципиальной разницы нет.
Почему всегда по ссылке?
Потому, что все объекты в хипе. В сишарпе, например (точнее, в дотнете) объекты могут быть на стеке. А в джаве (JVM) - нет.
Что с этим делать?
Применяют так называемое защитное копирование (руками копируют объект), но, это заёбисто.
Лучше - иммутабельные структуры данных и паттерны.
Иммутабельность - благо. А сборка мусора в отношении короткоживущих объектов весьма эффективна. Современная JVM - вообще весьма эффективная вещь.
Алсо, если ты пытаешься писать на джаве - делай это так, как принято на джаве. А не как на питоне, шарпе или 1С.
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
h1 {color:red;text-align:center;}
body {background-color:PaleGreen; font-weight:bold;}
input {font-weight:bold;}
</style>
<script>
function sqr()
{
// переменная р объект с именем t
var a=document.getElementById('name');
var b=document.getElementById('surname');
var c=document.getElementById('otchestvo');
var d=document.getElementById('dr');
var e=document.getElementById('mesto');
var f=document.getElementById('luzan');
var g=document.getElementById('neluzan');
// переменная r содержит значение свойства value этого объекта
x1=a.value;
x2=b.value;
x3=c.value;
x4=d.value;
x5=e.value;
x6=f.value;
x7=g.value;
var win=window.open("","","width=700,height=300");
win.document.open();
var str = "<h1>"О себе"</h1><hr><P>";
win.document.write(str);
var str = "<p>Я, "+x1+" " " "+x2+" " " "+x3+" родился в "+x4+" " " в городе "+x5+". Больше всего я люблю "+x6+" " " и очень не люблю "+x7+", но к сожалению приходится иногда "+x7+". </p>";
win.document.write(str);
str ='<input type="button" value="Закрыть"'+'onClick="window.close();">';
win.document.write(str);
// закрываем вывод в документ объекта win
win.document.close();
}
</script>
</head>
<body>
<h1>Анкета</h1>
<hr>
<form>
<br/>Фамилия: <input type=text value="Жмышенко" id='surname' name="surname" size="30">
<br/><br/>Имя: <input type=text value="Валерий" id='name' name="name" size="30">
<br/><br/>Отчество: <input type=text value="Альбертович" id='otchestvo' name="otchestvo" size="30">
<br/><br/>Год рождения: <input type=text value="1990" id='dr' name="dr" size="30">
<br/><br/>Место рождения: <input type=text value="Чугуевка" id='mesto' name="mesto" size="30">
<br/><br/>Любимое занятие: <input type=text value="читать" id='luzan' name="luzan" size="30">
<br/><br/>Нелюбимое занятие: <input type=text value="учиться" id='neluzan' name="neluzan" size="30">
<br/><br/><input type=button value="Сформировать биографию" OnClick="sqr()">
<hr>
</form>
</body>
</html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
h1 {color:red;text-align:center;}
body {background-color:PaleGreen; font-weight:bold;}
input {font-weight:bold;}
</style>
<script>
function sqr()
{
// переменная р объект с именем t
var a=document.getElementById('name');
var b=document.getElementById('surname');
var c=document.getElementById('otchestvo');
var d=document.getElementById('dr');
var e=document.getElementById('mesto');
var f=document.getElementById('luzan');
var g=document.getElementById('neluzan');
// переменная r содержит значение свойства value этого объекта
x1=a.value;
x2=b.value;
x3=c.value;
x4=d.value;
x5=e.value;
x6=f.value;
x7=g.value;
var win=window.open("","","width=700,height=300");
win.document.open();
var str = "<h1>"О себе"</h1><hr><P>";
win.document.write(str);
var str = "<p>Я, "+x1+" " " "+x2+" " " "+x3+" родился в "+x4+" " " в городе "+x5+". Больше всего я люблю "+x6+" " " и очень не люблю "+x7+", но к сожалению приходится иногда "+x7+". </p>";
win.document.write(str);
str ='<input type="button" value="Закрыть"'+'onClick="window.close();">';
win.document.write(str);
// закрываем вывод в документ объекта win
win.document.close();
}
</script>
</head>
<body>
<h1>Анкета</h1>
<hr>
<form>
<br/>Фамилия: <input type=text value="Жмышенко" id='surname' name="surname" size="30">
<br/><br/>Имя: <input type=text value="Валерий" id='name' name="name" size="30">
<br/><br/>Отчество: <input type=text value="Альбертович" id='otchestvo' name="otchestvo" size="30">
<br/><br/>Год рождения: <input type=text value="1990" id='dr' name="dr" size="30">
<br/><br/>Место рождения: <input type=text value="Чугуевка" id='mesto' name="mesto" size="30">
<br/><br/>Любимое занятие: <input type=text value="читать" id='luzan' name="luzan" size="30">
<br/><br/>Нелюбимое занятие: <input type=text value="учиться" id='neluzan' name="neluzan" size="30">
<br/><br/><input type=button value="Сформировать биографию" OnClick="sqr()">
<hr>
</form>
</body>
</html>
Кстати, запилите кто нибудь аниме девочку держащую какую нибудь книженцию по жабе. Я бы Spring in Action 4 тыкнул на обложку. 5-ый мне показался хуже
точно ещё девочка: ✔
явно любит косоглазую хуйню: ✔
в руках что-то держит: ✔
на картинке есть что-то про жабу: ✔
що ты негодуешь, доставил, как заказывали.
На пр/аше два самых живых треда ето жаба и жс.
ехал жаба через жаба
видит жаба в жс жаба
сунул жаба жс в жаба
жаба жаба жс жаба
потому что обе косоглазые параши на костылях, с которыми не возможно нормально работать, ебать их в сраку.
а ты между языком и платформой на которой он выполняется.
С языками либо ебутся, либо они нахуй никому не упали
А есть ли взаимосвязь и какая между JSP и презентерами(так это называется?) вроде Таймлифа, Масташа и другими?
>що ты негодуешь, доставил, как заказывали.
Нет, я написал аниме девочку а у тебя просто девочка.
Ну норм. Я когда Thymeleaf задрочил и писал на нём темплейты, прошел собес сделав тестовое на нём. На РАБоте приходится РАБотать с jsp. Жизнь не всегда идёт как ты хочешь.
Двачую.
Я то хотел в дотнет вкатиться, но в моем мухосранске из нормальных только оказалась вакансия питон разработчика в связке с QT.
Вот потихоньку курю джангу что бы найти удаленку, или сайтики в своем мухосранске клепать по сотке баксов.
А хотел на си шарпе работать.
Это разные вещи, делающие примерно одно и то же.
> презентерами
Это называется template engine.
В отличие от чисто шаблонных движков JSP может содержать и практически произвольный джава код. Т.е., это два в одном - и (view-) контроллер и view.
Это может быть очень удобно во многих случаях. Но, неопытных программистов это может спровоцировать на написание говнокода.
Также, JSP компилируется в джава код, и работает очень быстро.
Компиляция происходит автоматически (на сервере, не в IDE), при изменении кода в файле.
И, не надо забывать про инструментальную поддержку.
В отличие от типичного шаблонного динамикоговна, JSP очень хорошо поддерживается в IDEA. Что в большом энтерпрайзном проекте даёт быстрый поиск зависимостей, избавление от опечаток, подсказки и т.п.
Также, во время компиляции отлавливаются многие ошибки.
Нет. Это две технологии, которые работают по-разному, но делают одно и то же.
И да, никто не мешает тебе встроить любой другой шаблонный движок (и вообще любую хуйню) внутрь JSP страницы - с помощью библиотек тегов, например.
С инструментальной поддержкой будут проблемы, но IDEA позволяет делать inject language.
Алсо, на JSP можно генерить что угодно вообще, вплоть до excel и pdf. Для PDF есть охуеннейшая либа BFO.
В общем, это охуенная вещь, хотя и со своими недостатками.
Да, макаки часто пишут на JSP лютый говнокод, но, на то они и макаки.
Спасибо за развернутое объяснение.
К слову прохожу тренинг в одну из известных галер и там весь учебный проект пишется на jsp (что вызвало у меня некоторое удивление, но сейчас оно развеялось).
Решению задач с codewars и подабных времени почти не уделял. Понимаю, что сильно проебался с практикой, и могу обосраться с простейшей задачки на рекурсию или сортировку для школоты.
Изучаю джаву полгода, книги по java core шилдта и хорстмана читал, разбирал и делал примеры и задания оттуда. Последние несколько месяцев задрачиваю спринг по книгам и мануалам.
двачую вопрос, в принципе все входящие данные аналогичные
500$ первый год, потом 400$ второй и 300$ третий. Мне-то не проблема, галера обеспечила, а вот студентикам или войтивайтишникам это может влететь в копеечку.
>>299532
Только если ты сам работаешь. Чаще всего фирмы жмотятся и не покупают, будешь на нетбинсе кодить. Или ещё хуже, на эклипсе
>>299536
смотреть выше
>>299598
>Стоит ли нормально решать эти задачи
Если они нормальные и если ты сам их будешь набирать. А не копировать и вставлять переменную.
>олимпиадные задачки
Всегда с этого проигрываю. На РАБоте тоже будешь олимпиадные задачки решать? Лучше бы КРУД-ы делал.
>Решению задач с codewars
А лучше бы уделял. Там SQL задачи годные.
>>299599
Да заебали со своим FX, вам делать нехуй?
Вот двачую этого.
Лямбда больше одной строки - это какой-то Java-выблядок.
Используй обычные анонимные функции хотя-бы, в самом деле.
>а вот студентикам ... это может влететь в копеечку.
а не пиздишь? студентикам или любой школобляди весь арсенал продуктов предоставляется бесплатно.
(тяжелый вздох) Я не доверяю не методу, а самому себе. Не метод делает ошибки в коде. Не метод забывает о том, что нельзя менять менять объект внутри него. Это делает программист. И тот же const в C++ как раз защищает программу от программиста, чтобы компилятор смог на этапе компиляции уже вызвать ошбику, что объект переданный в качестве аргумента был изменен, хотя не должен был быть.
В джаве же предалагется просто "помнить" об этом. Не знаю как у вас ребата, но я косячу и это мало зависит от моих желаний и чем раньше я найду ошибку тем лучше. Если ошибка вылазит в runtime, а не на этапе компиляции - это херово.
Java позиционируется как замена С++ - кроссплатформеность и безопасность это основные преимущества, которые я часто читаю (а еще какая-то "простота", но вот честно хуй его знает, что это конкретно означает. Если то, что мне теперь не нужно использовать сырые указатели, то адекватные люди вместо них используют умные указателеи или строят в принципе архитектуру с минимум их использования, но это ладно. Рынок вакансий диктует свои правила.). Так как же обеспечивается безопасность состояния объекта при передаче его значения ссылки в метод? Делать его immutable? А если он не должен быть immutable? Тогда тупо не делать ошибок?
В общем, повторюсь, какие есть инструменты реализующие парадигму защиты состояния объекта в методе в Java кроме как делать класс констатным (final).
Импортировал в IntelliJ IDEA проект с мавеном, так он не запускается, пишет вот эту хуету:
[ERROR] Source option 5 is no longer supported. Use 6 or later.
[ERROR] Target option 1.5 is no longer supported. Use 1.6 or later.
Вероятно, где-то нужно что то ЕЩЕ НАСТРОИТЬ АХАХАХАХА БЛЯ
Я просто ссу на жавоблядков - это ж надо додуматься придумать хуйню Maven, чтобы не нужно было ничего настраивать и просто собирать, но один хер её нужно настраивать по факту.
Сотона, я так понимаю, в аду гугла нет?
https://stackoverflow.com/questions/37087809/how-to-find-out-if-a-class-is-immutable
>To provide additional sanity-check (if you think that annotated as immutable class can be mutable by mistake), there is Mutability Detector plugin for FindBugs (static analysis tool), which effectively doing same thing listed above: checks class has @Immutable annotation and verifies (via reflection) that all immutability rules are satisfied (with some additional things like immutable collection support from Guava etc.). Mutability detector also can be used as library without FindBugs, which allows you to write tests like that:
@Test
public void testImmutable() {
assertImmutable(MyClass.class);
}
>>299674
Слабо верится, что есть хоть один серьезный инструмент, работающий из коробки. А мавен - няшка, не надо так про него.
> мавен
Инструмент, который призван делать, чтобы всё работало из коробки, не работает из коробки, лол.
>Слабо верится, что есть хоть один серьезный инструмент, работающий из коробки.
попробуй Python, это не больно
>А мавен - няшка, не надо так про него.
Охотно верю, что, возможно, по сравнению с остальным Java-калом, он не такое говно. Но это всё сорта говна.
Питоноблядок порвался, посмотри вниз, у тебя лямбда вытекла, а ещё научись читать ошибки, довн.
Ты настолько ущербный, что даже не понимаешь того, что Мавен, по идее и создан, чтобы таких ошибок не было.
Как будто иде настраивать не надо. И вообще, задача мавена - избавить тебя от необходимости ебаться с ручной настройкой зависимостей, где ты хочешь подключить одну библиотеку, а она зависит еще от десяти. И все.
> Source option 5
Ого жава 5. Ставь maven более старой версии. Напомню, Java 1.5 вышла 14 лет назад.
Так если эта параша понимает, что версия не та, пусть сама сделает всё что надо. Максимум - выдаст предупреждение.
>>299698
При чем тут IDE? Здесь у Java и её приблуды проблема просто исходников собрать.
>>299708
Стоит последний Мавен. Это исходники старые. Вернее, там просто не указана версия и нужно форсить в конфиге 1,5
> Стоит последний Мавен.
Ну так и ставь старый мавен. Ошибка же ясно говорит, что мавен не поддерживает пятую жаву. Нужно ставить ту версию, в которой эту древность ещё поддерживают.
Какая причина сидеть на 1.5?
Либо 1.4, либо 1.7, либо 1.8, либо 1.8+.
В смысле, на то, чтобы сидеть на этих версиях - причины есть.
А на 1.5 что?
Человек хочет программировать, при чём здесь математика?
>>299714
Если ты нулевой, то начать лучше с Питона.
Это, если угодно, гибрид джавы и си, лол.
Только без статической типизации.
Да, это я обсирал питон в этом треде (см. выше про синтаксис).
И да, я бы советовал начать с питона.
Инфы куча, в том числе и на русском.
Порог вхождения - очень низкий (в отличие от джавы, и, тем более, си).
Concurrency
охуительная первью.
Это называется IDE
спасибо, няша
Имя пакета является неотъемлемой составляющей имени класса.
Из папки X:\Projects\TetrisGame
сначала выполняешь команду
javac -s src -d target com\tetris\tetrisgame\TetrisGame.java
Рядом с папкой src у тебя появляется папка target. В ней структура папок, аналогичная src.
Из той же корневой папки запускаем класс:
java -cp tagret com.tetris.tetrisgame.TetrisGame
Всё должно заработать.
Вы видите копию треда, сохраненную 20 декабря 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.