Это копия, сохраненная 11 декабря 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
Объясните, в чем джава лучше сисярпа, кроме кроссплатформенности? Такое ощущение, что сисярпа во всем если не превосходит джаву, то равен ей. Почему кто-то продолжает вкатываться?
Бля, я не знаю почему, но я не могу тебя понять, вообще никак, иди бля книжки почитай там, или ещё что-нибудь поделай развивающее, шизоид сука.
1) Потому что 90% серверов работают на никсах и до-диез на них это отдельный вид извращений
2) Чем лучше? Можно бенчмарков в студию пожалуйста?
3) Перекатиться на Шарп значит переносить существующую кодовую базу.
Я все ещё работаю жабамакакой, так что не думаю. Просто заебало дрочить один язык ради одинаковых задач.
Ты понимаешь, насколько ты жалок? Я, как настоящий чад, могу вызвать любой метод и обратиться к любому свойству любого объекта. Более того, я могу прям на ходу добавлять и удалять свойства и методы объекта, потому что мой язык меня не ограничивает. Он знает, кто здесь босс.
А ты делаешь то, что тебе компилятор скажет. Он пошлёт тебя нахуй, если ты попытаешься сделать что-то подобное, он тупо не скомпилит программу! Вывод: ты омежка и куколд.
Зачем швепс мешать с яванским кофе?
>Будем пытаться чет пилить)0
Звучит как "я не умею, но вместе мы сможем".
Что конкретно нужно знать, чтобы взяли с нулем опыта реальной работы? (И что вообще этот джун делать будет?)
Если я просто знаю и понимаю, для джуна это нормально? а то я чувствую, что я как мудак все делаю наооборот, там где нужны просто знания, что это за штука и что она делает - я углубляюсь, а где наоборот нужна практика, приняв во внимание концепцию - иду дальше. Ткните котенка носом плиз, моя тревожность выходит из под контроля.
Что имеется на данный момент:
- Java Core, без конкаренси ёба уровня, то есть до уровня монитора, лочек, шаблона producer-consumer или что-то такое, забыл уже название бля.
- SQL, все постандарту знаю-делал хотя бы раз, джоины - много раз.
- maven, git, не знаю нахуй я это пишу но раз уж похоже как на резюме уже пусть будет.
(ну и ниже мои сомнения по поводу знаний)
- jdbc немного практиковался в этом, но кажется большее уже начал забывать.
- servlet API, знаю зачем это нужно где используется, но не ковырялся с этим глубже.
- spring core, знаю что это IoC container и зачем это нужно, DI, события и т.д. короче все что связанно с бинами. Подделку на это все писал для практики. Но большего не знаю.
- spring mvc, знаю что это сервлеты со спрингом, чтобы пилить rest api ну или дедовским способом сразу рендерить страничку в ебало пользователя сразу, тут уже плавать пиздец начинаю.
hibernate\jpa знаю для чего это нужно и все, сам еще не касался.
Не нужно? Я поэтому и спрашиваю, потому что тревожникибанный боюсь что делаю не то что нужно для устройства на работу.
>что делаю не то что нужно для устройства на работу
Что бы устроится на работу, надо делать то что будешь на этой самой работе делать.
Откуда он ни дня в жизни не проработав по крайней мере жаба разрабом знает что на этой работе он будет делать?
Что бы не пускать вкатывальщиков, сээр.
Поэтому он и не устроится. Попал бы на стажировку за еду, может и мог бы продолжить, а так бесполезно. Джунов без опыта не берут. Изучать, что то дома, а потом придя на собеседование узнать, что это не применяется в этой галере, супер фэйл. Поэтому надо как то узнать что требуется на галере конекретно и под нее пилить пет проекты.
Большая нехватка кадров. Нужно хорошо знать Java Core, SQL на уровне запросов, запилить простое CRUD на гитхаб с использованием spring/hibernate. С таким резюме к вам будет интерес. А дальше как пройдете собеседование на знание указанных технологий.
https://career.ru/vacancy/24197306
Ну раз ты веришь в чудеса, вот еще вакансия, как устроишься отпишись.
Алсо в самом профиле компании нету таких вакансий.
Нужно написать REST-микросервис для обработки JSON. Писать буду на спринг буте. Есть предложение для реста использовать Spark Framework. Мне нравится спарк, но, по-моему, он хорош для компактных приложений с легкими библиотеками. А если использовать жирный спринг, тогда можно реализовать рест и через starter-web. Подскажите, как поступить.
И еще. Как абстрагировать обработку JSON? Создать отдельный JSONService, в котором выполнять весь требуемый процессинг? Формат JSON-пакетов может меняться со временем.
А то что такие вакансии аномалия, вроде она есть, а туды никого не берут.
В крупных компаниях взаимодействие с бд идет через фреймворк. Поэтому требуют его знание. JDBC нужно знать - спросят на собеседовании.
алсо, купил сегодня подписку за 1800, чувство двоякое,
поддерживает мотивацию хоршо, тк я нубас.
С другой стороны чувствую себя ленивым тюленем тк можно было всё из интернета выучить и из книг. =_=
такие дела.
мимикрок
>С другой стороны чувствую себя ленивым тюленем тк можно было всё из интернета выучить и из книг. =_=
Это было мое самое сильное бомбилово: я считал, что вот я купил джавараш и там будет все: и теория, и практика, и направление.
Хуй там плавал, читать книги и интернет надо будет практически столько же. Теория в джавараше написано не то чтобы на отъебись, а так, чтобы ты полез разбираться дальше.
select Count(*)
from OrderDetails as OD inner join [Order] as O
on OD.idOrder=O.id
where SalePrice = all
(
select Price
from OrderDetails inner join [Order]
on OrderDetails.idOrder=[Order].id
where idCustomer!=O.idCustomer and OrderDetails.idProduct=OD.idProduct
)
А, блин, как тут можно написать вывод, если я таблицы не привел. Тогда этого я не прошу.
Как говориться, пофиксил проверочку блять.
больше ничего нету, у тебя остальные методы ексепшены не бросают, мог быть нул поинтер, но при работе с командной строкой ты получаешь только строки
Я потерял всего 200 долларов, круто.
> Формат JSON-пакетов может меняться со временем.
Передавай первым полем версию пакета и на ее основании отправляй соответствующему обработчику.
Так ты сможешь корректно обрабатывать запросы в старом и новом формате обеспечивая безболезненный переход старых клиентов на новую версию.
Ну для начала нормально же че ты сам учился по книжкам, но коллега очень хвалил джава раш за то что помогает втянутся
В питоне вообще-то int(val), str(val) и т.п. А (int)val пошло с си с давних времен.
Первый пример из кода с точки зрении красоты и правильности кода правилен? Это нормально, что ты вызываешь конструктор самого приложения для создания окна. Как по мне надо это выделять в отдельный класс лучше.
Ты мне блять рассказываешь?!
Хех
Первоначальная идея, как и первая версия с футурамой были годные, душевные. Потом конечно все трансформировалось в бездушную и жестокую машину по зарабатыванию бабла. Но для для новичка это все равно остается крутым проектом дял прокачки скила.
К слову кто-то еще рекомендовал курс stepik.
Ага. А еще круто утром за 5 минут решить то, над чем просидел весь вчерашний день.
try {
Object object;
// Действие которое надо проверить
// Работаем с object
}
catch (Exception ex) {
// Ловим ошибку
}
Или
Object object
try {
// Действие которое надо проверить
}
catch (Exception ex) {
// Ловим ошибку
}
// Работаем с Object
В первом варианте будет большой цикл try, а во втором будет глобальная переменная. Что лучше?
Я после джавы ахуел с типизации когда срочно нужно было на питоне работать, отвык от такой простоты.
>DE
Голая убнту 18.04, там теперь расширения с гнома завезли, вообще кашерно.
Окей, прям щас поставлю наверное. Главное чтобы опять загрузчик не полетел во время установки.
Если ты погромист, то да. Только вот поиграть нельзя. Поэтому я всегда дуалбут держу.
>Если ты погромист
Да там уже давно вся сложность это гугл и контрол + V в терминал
>дуалбут
Я тоже так-то, хотя уже забыл когда на шиндовс возвращался.
>Я тоже так-то, хотя уже забыл когда на шиндовс возвращался.
Я недавно обновлялся на kubuntu до версии 18.10 и ахуел с лагов, вылетов, приветов моей мамаше и т.п. Даже терминал вылетать начал. Поэтому подгорел и снес все нахуй.
Теперь вот опять хочу вернуться на линукс, ибо заебно на винде.
можешь мне помочь? тоже убунту. я неправильно джава хом поставил или что?
Бро, после ебли с mysql я даже на этот скрин смотреть не хочу, давай гугл в руки и дальше сам, сорян.
третий день с этой залупой ебусь, аноны, хелпаните(
или как это гуглить? гугол выдает страницы где у людей ждк не установлен, им говорят установить и все ЗАебись. у меня ждк стоит, но его это штука не видит.
$ java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
Блин, дистанционно я хуй что тебе посоветую, попробуй удалить джаву нахуй и заного поставить, я так обычно делаю когда с настройкой чего-нибудь проебусь.
ладно, попробую. в то же место установить? тут просто в некоторых гайдах ее в usr/bin/jvm ставят, у меня в opt.
спасибо, что откликнулся, няша
JDBC хорош когда у тебя база сверхнормализована из-за количества данных.
Это не SQL тред, но думаю суть в том чтобы вытащить все цены где неправильно назначен idCustomer, и иного способа это сделать я не вижу. Вообще, очень изящно.
Но ведь idCustomer и O.idCustomer - одно и то же, ведь таблица-то одна с таким полем. И почему тогда оно работает, если айди сравниваются сами с собой, а значит должны быть равны?
Потому что ты не знаешь значения "на порядок".
Потому что больше фриланса на щедрых буржуев, рабы бегут
>from OrderDetails
Ну не факт, например.
Если все как ты говоришь, подзапрос будет возвращать пустой набор строк, и все это будет ебучим индусским кодом чтобы получить 0.
Лучше скажите как мне в веб-приложении захуярить так, чтобы back-forward страницы не возвращали пользователя обратно на страницу профиля если он совершил logout ? Spring-boot если что.
Вот и я про то же. Ноль - неверный ответ (ну или верный, но частично, я хз, там ебанутый интерфейс). Если интересно - олимпиада "я профессионал", вбей в гугле, можешь тоже порешать вот это вот все.
Для этого есть специальный тред. Вопрос по sql сюда бы зашел, будь это ебля с jdbc/jpa/hibernate или что ты там задумал и почему у тебя не работает. А так ты спрашиваешь про голый sql, что немного не сюда.
> как мне в веб-приложении захуярить так, чтобы back-forward страницы не возвращали пользователя обратно на страницу профиля если он совершил logout
Это ещё менее релевантный вопрос в контексте жабы. В браузере никак не сделать, есть метод https://developer.mozilla.org/en-US/docs/Web/API/History_API#The_replaceState()_method но в твоём случае его можно будет применить только для последней страницы непосредственно перед выходом. Впрочем для 99% случаев сойдёт.
Ещё можно для страниц профиля отключать кеш браузера.
>метод
Интересно, это хоть что-то.
>отключать кеш браузера
А вот это ведь действительно может сработать, спасибо.
Помнится мне кто-то сказал, что это можно поправить, использую HttpSessions, но я не особо понял как оно
может. Может ты разбираешься? Хотелось бы просто узнать, если это возможно усилиями спринга.
>>288435
Вопрос не в том как редиректнуть и вернуть страницу. Это я и в POST методе могу. А в том, чтобы пользователь не нажал кнопку в верхном левом углу браузера и его не вернуло обратно, когда logout был уже сделан. Я и Spring-Security прописал и поставил в конфиг опцию для logout и прописал то, что нужно авторизоваться, чтобы просматривать профиль, но увы, блядский back всё равно возвращает.
https://www.humblebundle.com/books/java-by-packt-books?hmb_source=navbar&hmb_medium=product_tile&hmb_campaign=tile_index_4
блят. у меня стоит ждк и жре. у меня стоит джава хом на ждк(внутри которого жре). нужно прям две системные переменные их bin папок? как эти переменные назвать? чето я не понимаю как это сделать. попробовал дописать пути к bin'ам в path - не работает.
У меня стоит системная переменная и переменная среды JAVA_HOME на саму папку, где находится bin, lib и файлы. Т.е E:\OP-hui\JDK.
И стоит переменная среды JRE_HOME, которая тоже ведёт на саму папку, внутри которой стоит /bin. Покажи как у тебя стоит.
Решил проблему добавлением ?useUnicode=true&characterEncoding=utf8 к url, всем спасибо, ебать.
Обращайся.
Ну ты особенный у нас конечно. Так а чего ты в консоли клац-клац и готово? У вас ведь линукс за вас всё сам делает!!111 А если серьёзно, то мб нужно в разные папки или тупо снеси всё и переустанови. Попробуй из какой-то IDE посмотреть если она находит, Intellij тебе вроде даже сам установить может и сделать за тебя.
Дока не говорит о других способах конфигов в спринге. Ну можешь создать нахуй никому не нужный бин, инжектить в него контекст и назначать, но тогда для каждой смены конфига нужна будет перекомпиляция, что в прод-условиях подобно сосанию хуя когда рядом лежит только что заправленная баблом шлюха.
Бля, никто не знает? Или всем поебать? Я просто додумался только до пикрил, мне кажется не лучший вариант.
Если таблица не очень большая, то это хороший вариант.
Если большая, то надо делать sort by id + limit , а потом новый селект с where id > n
сраный mysql, чтоб ты сдох!!!111
Таки да, таблица не большая, слава богу блять.
сажа прилипла
Гугл в помощь брат, гугл в помощь, тут тебе не помогут.
Бля, только недавно с этой хернёй ебался, там какую-то ебату с юзерами сделали, можно вообще написать sudo mysql и он откроет всё. Не нашёл как исправить просто откатился на семнадцатую. Если найдёшь или нашёл решение, то отпиши, пожалуйста.
Это не то, в клауд конфиге просто проперти, а мне нужен именно класс с аннотацией @Configuration.
Решение я нашёл, но я уже не вспомню на каком сайте, а история у меня забита говном на эту тему, хз откуда я взял, сорян(
А ты где то этот драйвер прописал, чтоб его получать то блядь? На кури код и не задавай больше тупых вопросов, у тебя в логах уже инфы выше крыши
Мне кажется, ты базу данных не прописал в url, к которой подключаешься.
>К У Р С О Р
Ты же понимаешь что это мне нихуя не говорит, мне даже гугл нихуя об этом не говорит.
Да я уже понял.
Ну всем спасибо кароч, переделал на пикрил, сейчас остальные исключения буду фиксить.
Зачем исключение? Проверяй что rs.next() вернуло false - тогда ничего не нашлось.
Еще один мамкин пограмист, которому впадлу логи почитать
Эй, дружок-пирожок, тобой выбрана неправильная дверь. Клуб 1с-ников на два блока вниз. Хоть бы почитал немного теории по sql что ли.
О, Вы из /b? Мое увожение. Сренькать гринтекстом это вам не книжки читать.
arraylist удолить зобыл((99(
Если на спринге пишешь то легче создать класс таблицы загрузить его и как то вот так написать:
taskRepo.findAll().stream().map(Task::getId).collect(Collectors.toList())
и все
В команде неправильно указал, написал
mvn exec:java -Dexec.mainClass="com.app.ToDo"
вместо
mvn exec:java -Dexec.mainClass="ToDo"
На работе сказали. Дежурное нытье, один хуй буду учить.
@
ОБОСРАЛСЯ
Если делаешь на JavaFx, то да, на Qt можешь попердолиться.
че несет? переведите плиз))
Ага
Библиотеку? Тут же одного метода хватит. Но идея классная.
Такое уже есть.
Или типа есть такая хуйня чтобы 2 раза на неё кликнул и скрипт тупа сам выполнился?
https://github.com/Weydile/ToDo-List
int secondTerm = Math.ceil(floatingsecondTerm);
long composition = firstTerm * secondTerm;
int kopeck = composition % 100;
Жава ругается на вторую и четвёртую строку, якобы possible missy, но на деле же нихуя не потеряется. Как её переубедить?
Пропустил вторую строку сначала через Math.round и привелось к лонгу, окей, хотя и убого как-то.
Остался вопрос по поводу копеек
long secondTerm = Math.round(Math.ceil(floatingSecondTerm));
long composition = firstTerm * secondTerm;
long kopeck = composition % 100;
Тем временем я пошёл по ШИРОКОЙ дорожке и копейки у меня теперь представлены лонгом. Пиздец-пиздец
BigDecimal
У меня двухзначный айсикью, поэтому я страдаю хуйнёй
Как призвать модератора в тред чтоб добавил тег в заголовок треба? ОП-хуй же не проставил нихуя.
*Треда
В методе сначала проверяется условие @PreAuthorize, т.е. даже если юзер с запрашиваемым id не существует, возвращается 403. Как сделать, чтобы сначала проверялось наличие юзера (и выбрасывалось 404 исключение, если он не существует) и только потом проверялось условие в @PreAuthorize? В моем понимании надо заменить @PreAuthorize на @PostAuthorize и откатывать транзакцию при фейле (т.е. после выполнения метода). Вопрос как сделать, чтобы чек авторизации был внутри транзакции и она откатывалась при AccessDeniedException? Или может есть другой способ?
Ну ты траль, конечно, ссылку скриншотом кидать.
Настолько тупо что смешно
Не, рил улыбнуло
Я хотел сказать сори, что тег не проставил, потом передумал, а галку убрать забыл, кек.
Соре за тег
Классический сярп люто отсасывает по перфомансу. Особенно это заметно по веб-фреймворкам: у джавовских rps в тысячи раз больше. Речь, разумеется, не про кор: он пиздат и примерно на одном уровне с джавой.
Самое основное превосходство в том, что на жаве гораздо больше написано. Больше либок, больше фреймворков, больше примеров кода. Даже есть кроссплатформенные окошки, если угодно.
Ну и вакансий почти в полтора раза больше.
Вот это манямирок. Особенно с перфоманса орнул. Джава это один из самых тормознутых языков, хуже наверно только Питон.
Лет 6 назад так же думал когда в олимпиадах участвовал и там на джаву были особенные инвалидные условия по времени.
Сейчас уже все совсем не так, вот тут вроде чувак очень подробно все описал https://stackoverflow.com/questions/2163411/is-java-really-slow ща бы ссылками на стековерфлоу кидаться, как пруфами
Что-то мне подсказывает, что твоя иерархия классов - дичайший говнокод. Это было трудно читать, непонятно, зачем пихать столько классов.
Ты чё, ньюфаг? Это же джава, у нас тут вообще-то принято на каждый пук писать класс. Чем больше классов, тем больше ты сеньор.
Ты абсолютно прав, 1 пук = 1 класс, но ты забыл, что сеньерность это ещё умение классифицировать пуки по пекейджам, а в этом коде их нет а вообще да, очень сложно читается
>>289997
Фикс в процессе: https://github.com/wolches/huilib/commit/0eb730c9996fa567037484ec05a53b9f8b4f19bc
1) Нахуй свой эксепшон, нпе вполне сойдет
2) Если пустая строка нихуя не делаем
3) Впихнул все в интерфейс + класс
4) Стоит ли учитывать иные символы кроме пробелов?
Ты что-то гуйное пишешь? У меня в C# была куча подобных мап для кеширования объектов, которые описываются атрибутами и получаются при помощи рефлексии в рантайме.
BufferedReader reader = null;
try {
URL site = new URL("http://www.cbr.ru/");
reader = new BufferedReader(new InputStreamReader(site.openStream()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
} catch (IOException ex) {
//...
} finally {
try {
reader.close();
} catch (IOException ex) {
//...
}
}
}
Спиздил вот такой кроулер, он мне через принтлн выдаёт кучу всякой хуйни внутри тэгов. Как её пропарсить и вытащить курс доллара на сегодня? JDOM скачал, а что делать с ним не знаю.
Тёма, ты?
Ну по сравнению с jsoup это и было бычками с параши, но ладно
Пытался менять кодировку самой БД на cp1252 - он искал, но в этой БД и в ответах отображались символы как ?????? ????? ?????.
Куда копать-то?
Тут экстрасенсов нет. Какая СУБД, как ты к ней подключаешься, как делаешь запросы?
>Какая СУБД
MySQL
>как ты к ней подключаешься
через jdbc
>как делаешь запросы?
SELECT * FROM personal WHERE NAME LIKE N'%Мих%' COLLATE utf8_general_ci
Готовился по SICP, прошло гладко, теперь я сеньор.
>для подготовки к собеседованию на синьора.
Походил по барам случайно один раз, меня сразу с джуна до синьора помидора повысили. Рабочий метод, советую. Сейчас сижу на работе пишу одну строчку за восемь часов, а в остальное время пизжу в курилке.
Пиздец, это же на первой странице гугла, ну ты и пидор.
Подтверждаю. Хоть Оракл и пыжится изо всех сил, но лошадь уже очевидно сдохла. Писать веб-приложение на связке JSF-EJB-JAX-RS в 2018 будет только ебанат.
> Хоть Оракл и пыжится изо всех сил
Под "пыжится" ты подразумеваешь "удалил из jdk и отдал сообществу"? По мне так наоборот выглядит как похороны.
В jdk её, тащемта, и не было. JDK это Java SE + JavaFX (до недавних пор).
А слив Java EE в Apache и правда больше похож на похороны, тут ты прав. Хотя всего год-два назад Оракл бил себя пяткой в грудь, поясняя про неебические перспективы развития. Где-то статья на Хабре была, лень искать.
> В jdk её, тащемта, и не было. JDK это Java SE + JavaFX (до недавних пор).
Тащем-та в Java SE была своя собственная часть EE начиная с шестой жавы. Вот тут написано подробней: http://openjdk.java.net/jeps/320
> Java SE 6 included a full Web Services stack for the convenience of Java developers. The stack consisted of four technologies that were originally developed for the Java EE Platform: JAX-WS (Java API for XML-Based Web Services), JAXB (Java Architecture for XML Binding), JAF (the JavaBeans Activation Framework), and Common Annotations. At the time of inclusion, the versions in Java SE were identical to the versions in Java EE, except for Java SE dropping a package in Common Annotations that concerned the Java EE security model. However, over time, the versions in Java EE evolved, which led to difficulties for the versions in Java SE.
> А слив Java EE в Apache
Только не Apache, а Eclipse.
Тем, что EJB сам по себе практически бесполезен. Написание бизнес-логики на энтерпрайз-бинах вынуждает тебя все остальные слои твоего убер-приложения также ебашить на Java EE библиотеках.
Хочешь веб-морду? Вот тебе JSF. А всякие Bootstrap и Angular засунь себе в жопу, никакого открытого API у бинов нету.
Работа с базой? Онли JPA, хотя в этом случае всё ещё вполне неплохо. Но Spring DAO всё равно пизже будет.
Хочешь взаимодействия с другими приложениями? Если синхронно, то только JAX-RS (или -WS, хотя про SOAP уже почти все забыли, и поделом), если асинхронно, то только JMS, причём в качестве брокера ты можешь использовать только тот сервер, на котором вертится и EJB-контейнер, про легковесные ActiveMQ забудь (если, конечно, твой сервер не TomEE).
Их тяжело отлаживать, сам процесс постоянного деплоя и разворачивания на монструозном сервере с конфигурированием в xml после Spring MVC выглядит каким-то дикарством, тем более, что на горячую этого и не сделаешь (хоть поставщики серверов и пиздят про такую возможность, на деле там дохуя нюансов, в итоге всё равно приходится перестартовывать сервак целиком).
А с появлением божественного Spring Boot концепция веб-приложений в корне поменялась. Теперь не приложение вертится внутри сервака, теперь сервак подтягивается внутрь приложения просто как зависимость, избавляя тебя от ебли с настройкой JNDI-ресурсов (брррр...), и тем более ручной маршрутизации и распределения нагрузки. Всё это теперь делается парой аннотаций и десятком строчек в application.yml.
Всему этому Java EE ничего противопоставить не смог.
Да, точно, в Eclipse. В Apache был слит NetBeans.
А вот что будет с GlassFish, вообще не ясно. Надуюсь, что Payara не даст ему умереть.
Такое же туманное будущее у WildFly после поглощения IBMом RedHat. У IBM есть WebSphere, ещё один сервак им нахуй не упал.
Подтверждаю, он сказал.
А, это ты тот мелкобуква, который доебывался до мелочей из-за того, что ему скучно? Как говорится, узнал тебя по твоим шизоидным высерам. А теперь пiшов нахуй, как говорится.
Ох и удваиваю этого мудреца.
Например есть связь manytomay.
Как сделать лучше и ПОЧЕМУ:
1. получить коллекцию объектов нужной стороны. Достать из них через форич через геттер каждого объекта нужную колумн(поле объекта).
2. Написать запрос @Query, который будет возвращать уже нужные поля объектов и возвращать коллекцию.
Первый способ через джаву, второй через ДБ. Что быстрее выполниться? Лучше грузить ДБ запросами или сервак логикой?
Лучше грузить бд хранимками.
Но зачем? Если это можно сделать рекегсами без каких либо дополнительных либ.
Парсинг HTML регэкспами — грубейший анти-паттерн, который наказывается немедленным расстрелом на месте!
>в качестве брокера ты можешь использовать только тот сервер, на котором вертится и EJB-контейнер
Почему это?
Неплохо его накрыло. Но, как я могу заметить, кроме его нытья насчет нечитабельности такого парсинга, никаких аргументов против этого нет. Так что почему бы и не парсить так, если уж хочется.
Если ты message-driven бины используешь, как они в этом случае должны очередь сообщений прослушивать, крутясь в EJB-контейнере? Реализация EJB эту магию скрывает внутри себя: ты создаёшь на сервере JMS Queue, и его же указываешь в @MessageDriven аннотации бина. Можно ли в нём внешнюю очередь указать? В стандартном EJB нет пруфани, если я неправ.
Возможно, в каких-то реализациях такую возможность и добавили, но это уже по-любому специфичное для конкретного сервера расширение стандарта, то есть если вдруг тебе по каким-то причинам пришлось пересесть на другой сервак, есть шанс лососнуть тунца.
Напрямую в @MessageDriven-бине в конфигурации указать адрес, где крутится брокер, либо в настройках контейнера прописать.
Бля, братан, если не влом, запили хеллоуворд. Рили интересно.
Лол. А ведь и правда может быть препод.
Например метод должен возвращать объект || или булевое значение в случае, если такой объект не существует.
Имхо, а я нубас
Зависит от задачи. Исключения нужны, когда программа дальше не может полноценно работать. Если нулл не сломает твою прогу - возвращай его
Может быть есть какой то шаблон или бест практис. Каштомых экспшенов на все случае жизни накатать и кидать их из рантайма. Хуй знает кароч.
>Каштомых эксепшонов
Такое тоже практикуется. А вообще даже в каркасе коллекций есть методы типа remove() и poll() . Один кидает эксепшн, другой - возвращает нулл, если список пуст. Так что и впрямь от задачи зависит.
Не, ну а чо. Как будто на лекции дают то, чего нет в методичке. Хз, зачем вообще их посещать, если можно самому все изучить быстрее. Хотя может у вас в шараге и впрямь есть смысл ходить на лекции, не знаю.
Лучше походить на эти ёбаные лекции, чем потом в ужасе переписывать конспекты перед сессией.
М е т о д и ч к а. Смысл переписывать конспекты, если их не проверяют (не проверяют ведь?), а все необходимое для подготовки уже написано за тебя в методичке?
Проверка на нулл в Optional нужна только для стримов
>не проверяют ведь?
Оо, еще как проверяют, а после проверки дырявят гвоздём. Без полного конспекта недопуск и ебись как хочешь. Как говориться, не можешь — научим, не хочешь — заставим. Конеш, не по всем предметам так, но по многим.
Смотря какая методичка. У нас жутко формализованные, просто пиздец, как будто лицензионное соглашение читаешь. А препод может на простом языке объяснить эту же тему и сказать, что в методичке суть, а что - вода для презентабельности/просто для галочки. Кроме того можно сразу вопрос задать, если не всек что-то, преподы, если сами понимают тему, обычно с удовольствием отвечают на вопросы
> Если метод фейлиться, стоит возварщать эксепшен или нулл?
Видел очень хорошую речь на конференции по C++ по этому поводу. null как и optional плохи тем, что ты не знаешь почему зафейлился твой метод. В жаве null ещё и плох тем, что он никак не выделяется, поскольку все ссылочные типы могут быть null и зачастую это не является ошибкой.
Можно, конечно, возвращать самодельный discriminated union (который в жаве можно имитировать несколькими классами с наследованием), который будет хранить и ошибку и результат, но сомневаюсь что это будет быстрее эксепшонов. Благо VM эксепшоны очень хорошо оптимизирует.
> в случае, если такой объект не существует.
В таком случае optional идеален. В конце концов тут ведь ошибки нет, ты просто указываешь, что объект не найден. null плохо использовать потому, что объект может быть найден и равен null.
>>291192
> Каштомых экспшенов
Я такое пишу только если эксепшон кидается самому пользователю API. В противном случае (если эксепшон ловится внутри самой программы и никак пользователю не виден) в 90% случаев хватает IllegalStateException (если программа находится в таком состоянии, что выполнить метод невозможно) и IllegalArgumentException (если переданный аргумент имеет неправильно значение). При конструировании передаю message, который затем логгируется.
Спасибо. Наверно остановлюсь на эксепшенах. К этому и склонялся.
Потому что да, если метод вернул нуль ну блять ну нуль и нуль хуй его знает почему.
Иногда используют оба этих подхода, даже в одном методе.
Например InputStream.read() - возвращает -1 если дошли до конца потока и бросает IOexception. Просто это семантически разные вещи.
Конец потока это ожидаемое состояние, все потоки рано или поздно закончатся. IOexception это исключительная ситуация - в идеальном мире ее быть не должно.
Применительно к твоему случаю - поиск может не найти объект - это штатная ситуация (как правило). Поискать не удалось по каким-то причинам - это нештатная ситуация.
>но сомневаюсь что это будет быстрее эксепшонов.
При чём тут скорость вообще?
Ты про ФП слышал когда-нибудь?
Понимаешь, зачем такое делают?
Тому що это разные подходы для того чтобы сделать одно и то же. Но в жаве уже есть эксепшоны, а значит для того чтобы использовать тип-сумму (да ещё и написанную с использованием ООП-костылей) должны быть какие-нибудь преимущества у него. Вот например в C++ хотят ввести expected, потому что он может быть быстрее выброса эксепшонов. В жаве такого не будет, поскольку VM эксепшоны неплохо оптимизирует.
Балуюсь тут с джавой и вот на что наткнулся:
https://ideone.com/RJNQr6
Если у переменной num тип int, то она может принять верхнее значение диапазона в 2147483647.
Если поставить тип Integer, то вылезает ошибка.
Я не понимаю этого! Ведь Integer- это просто обертка для примитивного типа!
Какой у неё тогда вообще диапазон?
Лол, исчезла.
Но так, на будущее: я правильно понимаю, что у классов-оберток ровно тот же самый диапазон, что и у примитивов?
Алсо, а как элегантно можно решить вопрос ввода числа, чтобы пользователь мог ввести число любой длинны?
Или это вообще невозможно, и мой максимум - это long ?
> Алсо, а как элегантно можно решить вопрос ввода числа, чтобы пользователь мог ввести число любой длинны?
Если совсем любой, то BigInteger (если целое) или BigDecimal (если дробное), но операции с ними будут медленней чем со стандартными int, long, double, float. Вот например твой код с BigInteger: https://ideone.com/N4DdGK
>я правильно понимаю, что у классов-оберток ровно тот же самый диапазон, что и у примитивов
Да. Integer.MAX_VALUE и Integer.MIN_VALUE в помощь.
>как элегантно можно решить вопрос ввода числа, чтобы пользователь мог ввести число любой длинны?
BigInteger, BigDecimal
А вообще кончай байтодрочить, жаба предназначенная для ловли асинхронных колбеков через рекурсию в бинах.
> через рекурсию в бинах
> рекурсию
Но зачем нужна рекурсия, если есть божественные императивные циклы? Фу, со своей функциональщиной всю жавку портите.
>А вообще кончай байтодрочить
Я ещё учусь и вряд ли сейчас напишу что-то, не вызывающее слабительный эффект.
> Я ещё учусь и вряд ли сейчас напишу что-то, не вызывающее слабительный эффект.
Так это наоборот самый крутой скилл. Осталось подучить шпринг и можно вкатываться в ынтерпрайз.
Хм. А есть где-нить инфа, какой проект можно самостоятельно запилить, чтоб в резюме годно смотрелся?
Я сейчас с шарагр домой приду дам тебе проект который сам делаю, там веб приложуха.
Буду признателен!
Через трансформацию в строку или через измерение длинны? Или тупо, циклом, пока не закончится?
Вот так легче всего:
public int reverse(int num){
return Integer.parseInt(new StringBuilder(num+"").reverse().toString());
}
>BigInteger
public BigInteger reverse(BigInteger num){
return new BigInteger(new StringBuilder(num+"").reverse().toString());
}
А это стандартное поведение для всех EJB-контейнеров? Да нихуя!
Маппинг JNDI-ресурсов по факту в каждом сервере свой, и все реализации нихуя не совместимы между собой, так что привязавшись к какому-нибудь WildFly, ты уже от него никуда не денешься.
Например, есть у тебя список пользователей. У каждого уникальный логин, по которому тебе нужно осуществлять поиск. Вот и будет у тебя HashMap<String, User>.
Для такой хуйни нужно уже бд подключать, хотя если это какой-нибудь чатик то да, можно.
>наглядный пример использования хешмапа против списка?
Вот недавно нужно было определить наиболее часто встречающийся объект в коллекции. Попробуй реализовать такой алгоритм на списках, а потом на хэшмап, почувствуешь разницу.
Только в твоём случае не хэшмап нужен,а хэшсет (хотя он зачастую делается на основе хэшмапа).
Хотя не, вру. Можно использовать Map<T, int>.
А вообще хэшмапы используются в качестве кэша. Хотя что смешно, если элементов меньше 10-15 зачастую лист оказывается быстрее, поскольку перебор занимает меньше времени чем хэширование.
>Что мне мешает контейнс для листа применить
Почитай, как устроены разные коллекции, интересная тема. В хэш-мапе используется хэширование, что позволяет проверять равенство объектов, сравнивая числа, а не через жирный equals(), как в случае с методом contains() списка.
Хэшмап быстрее при большом количестве элементов в коллекции (когда хэширование становится быстрее чем перебор). Хотя например для строк есть ещё более быстрые коллекции, например, trie.
Википедия говорит, что в trie можно получить максимум O(n). Хэш-мап же дает максимально O(1). Почему дерево быстрее?
Потому что O(1) - это только поиск, сам алгоритм хэширования займёт O(n), где n - длина строки, что аналогично O(n) в trie.
И да, там не O(1), а O(k), где k зависит от количества bucket'ов, которые в свою очередь зависят от количества элементов (хотя зависит от того каким образом был сделан hash-map, например в мультипоточных хэш-мапах bucket'ы имеют меньший размер чтобы меньше блокировать элементов при записи, однако получение элемента становится чуть медленней).
Знаешь какой-нибудь ресурс, где обо всем этом написано? А то не охота весь интернет обыскивать, собирая по крупицам.
Да там ничего сложного нет. Представь List, где хранятся пары хэш->значение. При попытке получения элемента ты высчитываешь хэш ключа, перебираешь List сверяя все хэши, если найдено получаешь значение, которое представляет из себя LinkedList со всеми данными, у которых одинаковый хэш. После чего проходишь по этому LinkedList уже сверяя сам ключ и оттуда выбираешь совпавший элемент. Это самый простой вариант. Если куча оптимизаций, где например вместо LinkedList используется дерево или вместо массива с хэшами используются другие коллекции, но суть остаётся такой же.
>Можешь по хешмапу примерный алгоритм накидать
Лови -> https://ideone.com/RBPcqr
ток ногами не бейте, лучше обоссыте
Там в hashmap'е есть специальные методы для упрощения подобных вычислений. https://ideone.com/PFNumK
Нойс. Надо бы побольше почитать про функциональшину.
На Spring (Boot).
Это тоже спринг.
Там много всего.
MVC - это "классический" способ делать веб-приложения, типа php, например.
В этом случае html создаётся на сервере.
Можно иначе - не сервере rest веб-сервисы, а весь пользовательский интерфейс на клиенте - на JS - React и т.п.
Аноны, представим что есть конструктов класса, он принимает в себя 2 строки (String). Как запретить передачу 2 одинаковых строк?
Только проверять и вызвать исключение.
Но, исключение в конструкторе - это не очень хорошо.
Можно вообще не использовать (публичный) конструктор.
А использовать factory/билдер, и заставить клиента передавать строки по отдельности, с говорящими именами методов. Это если проблема в опечатках в коде, например.
MyClass o = MyClass.withFirstString("Ololo").andSecond("LoL").create();
>использовать factory/билдер
Хорошее решение жаль я не додумался до него лол этим утром.
Сегодня на собеседовании про исключения вспомнил, но начал сомневаться можно ли их к конструктору прикрутить или нет.
var filteredList = users.stream().filter(user -> user.getUsername().equals("VasyanNagibator2005")).collect(Collectors.toList());
Ну и нах мне твоя мапа??
Так как ты никто делать не будет. Будут делать запросы к базе данных, а для поля имени сделают индекс, который по сути и есть ассоциативный массив (правда в зависимости от типа индекса он может быть как хэш-мапом, так и какой-нибудь разновидностью дерева).
Лол, ты и вправду думаешь, что это будет работать быстрее поиска по хэшу в хэш-мапе?
Для маленьких листов (меньше 20 элементов) оно действительно может быстрее работать (из-за того что процессор любит запихивать небольшие массивы в кэши и мегабыстро работать с ними). Однако stream всё портит. С ним всё будет в разы медленней. https://blog.jooq.org/2018/10/29/imperative-loop-or-functional-stream-pipeline-beware-of-the-performance-impact/
Хотя да, жавы это не касается. Ведь в ней все коллекции хранят ссылки, а не значения, а значит кэш тут никак не поможет. Остаётся ждать пока доделают value types и reified generics.
Тебе-то конечно не нужны. Ты даже что это такое не знаешь. Это для тех кто пишет библиотеки, а не для тех кто хуячит круды.
>Остаётся ждать пока доделают value types и reified generics.
Сударь видимо не в курсе, во что превратился Project Valhalla ради совместимости. Я бы на твоём месте не ждал ничего.
питон
Сынок, питон - вообще последний язык, на котором надо делать фп.
Хуже только 1С, наверное.
Хуеет он после питона, ну надо же.
Не после надо хуеть, а во время, лол.
Это не говоря уже о том, что фп на любом языке без статической типизации - это как онанизм в ежовых рукавицах, примерно.
И во что он превратился? Если будет возможность создать ValueList<T>, где внутри массива будут зраниться значения (а не ссылки как сейчас), то всё что я написал будет работать, а всё остальное не имеет значения.
>Поясните за функциональщину
Это долго.
Но, если коротко, то основная, на мой взгляд, идея - это то, что всё является значением.
Т.е. в программе нет "команд", а есть различные трансформации значений с помощью чистых функций. Например, вместо того, чтобы выбросить исключение, функция возвращает определённое значение.
Почитай Functional Programming in Scala:
http://www.allitebooks.com/functional-programming-in-scala/
Скалу там знать не обязательно, объясняется в процессе и используется относительно небольшое подмножество языка.
Есть ещё прекрасная "Functional Programming in Java" и "The Joy of Kotlin" (та же книга, но в версии для Kotlin).
Это значит лист будет выглядеть внутри примерно так:
<размер>,<объект1>,<объект2>,...,<свободная_зарезервированная_память>
Сейчас он выглядит так:
<размер>,<указатель_на_объект1>,<указатель_на_объект2>,...,<свободная_зарезервированная_память>
Возможно такой лист можно сделать и сейчас (используя какие-нибудь unsafe-техники), но хотелось бы возможность такой специализации шаблонов изкаробки.
Это очень простая специализация и доступна в том числа и на C#. Магии шаблонов для неё не требуется.
Я не об этом спросил.
Если ты привык писать на плюсах или даже на шарпе, то надо понимать, что в джаве - несколько другие правила игры.
И на джаве надо писать как на джаве.
Это не другие правила. Это искусственное ограничение, снять которое в том числе и призван project valhalla. Ты мне напоминаешь ватников с их "никогда хорошо не жили, неча и начинать" и "диды так не писали и ты не будешь".
Ок, спасибо.
> ватников с их "никогда хорошо не жили, неча и начинать"
Лол.
Суть ватников несколько иная, но не думаю, что сейчас уместно было бы это обсуждать.
На любом языке нужно писать идеоматический код.
Играть по правилам.
А не лезть в чужой монастырь со своим уставом (что есть признак непрофессионализма).
Смысл в этом.
Это непросто, но надо стараться.
> Играть по правилам.
Ещё раз. Это не правила, это ограничение. В первую очередь ограничение условленное изначально кривыми генериками со стиранием типов. Сейчас хотят сделать структуры и нормальные генерики для них, а значит станет возможным и их специализация. Ты какой-то странный. Тебе говорят, что в язык добавляют новые фичи, а ты пишешь что они, это самое, нарушают правила. Может у тебя var тоже нарушает правила? Диды ведь так не писали. А в java 12 вообще столько нарушений завезли:
- паттерн матчинг: http://openjdk.java.net/jeps/325
- raw-строки: http://openjdk.java.net/jeps/326
Ухх, скоты. Столько правил нарушают. Посадить их надо за это!
> паттерн матчинг
Хотя не, вру. Это http://openjdk.java.net/jeps/305 а завезли только его подмножество. Конечно, нарушение правил есть, но можно этому скоту Brian Goetz, уже выдать не смертную казнь, а только пожизненое заключение за посягательство на швитые правила.
анон >>292311 поясняет
>Это тоже спринг.
mvc это не спринг блять загугли, малыш
>MVC - это "классический"...
загугли если не умеешь то mvc это паттерн согласно которому код принято разделять на back и front части то бишь клиентскую часть и серверную
>html создаётся на сервере.
???
ты по http реквесту строкой отсылаешь хтмл а браузер уже рендерит
>сервере rest веб-сервисы
rest это архитектурный стиль основанный на концепции ресурсов он не мешает тебе его с mvc применять
А с жавой как?
Малыш, слово "контекст" тебе, видимо, пока незнакомо.
Для программиста это не очень хорошо, лол.
Речь шла про Spring MVC, про Spring REST сервисы, и про всю остальную многочисленную спринг-хуету.
О которой ты, до сегодняшнего дня, даже не слышал, как и о самом спринге.
Алсо, "MVC", "back-front" и "клиент-сервер" - это очень разные вещи.
Общего у них разве что сама идея разделения на части.
>А mvc это шо?
где ты там spring увидел?
>Речь шла про Spring MVC
и?
https://softwareengineering.stackexchange.com/questions/324730/mvc-and-restful-api-service
в гугл переводчик можешь закинуть
Нет, я не тролль.
Я просто очень давно всем этим занимаюсь, и воспринимаю эти вещи несколько иначе.
А ваша категоричность и придирчивость, юноша, выдаёт в вас восторженного неофита, который пока не научился видеть лес за деревьями, лол.
>где ты там spring увидел?
Там парой комментов выше вот это:
http://java-master.com/spring-mvs-настройка-без-xml-web-xml/
И, я решил, что это пишет один и тот же человек.
На этом предлагаю закончить.
Покормил, да и хуй сним, лол.
{
"username":"user"
"state":"active"
}
И вот я должен на основании этого написать логику которая будет генерировать тесты типа:
- отправь запрос с пустым body и проверь что response code такой-то
- отправь запрос с пустым "username" и проверь что response code такой-то
- отправь запрос с пустым "state" и проверь что response code такой-то
- и т.д и т.п
За основу предложили взять https://github.com/OpenAPITools/openapi-generator/tree/master/modules/openapi-generator который позволяет авто генерировать по одному success тесту на каждый endpoint описаный в swagger спецификации. Мол я должен форкнуть его чтобы он также генерил тесты которые я описал выше.
И теперь внимание вопрос, насколько вы считаете это сложная задача?
Опыта в программировании у меня всего нихуя, могу писать авто тесты используя существующие фреймворки и поэтому мне эта задача кажется пиздец сложной, но отказатся делать ее мне как то неудобно, боюсь менеджмент посчитает меня лошарой(они все разработчики с большим опытом), мол хули там делать, а если не можешь, тогда возьмём другого QA кто напишет.
Сказали — выполняй. Не можешь — уволят за несоответствие должности и правильно сделают)
Без опыта - это очень сложная задача.
Да и с опытом - непростая.
>мол хули там делать
Разработчики с большим опытом обычно избегают подобных формулировок.
Алсо, документация на эту хуету оставляет желать, мягко говоря.
Но, это не значит, что не стоит пробовать.
Может быть, там всё не так уж и сложно.
https://pastebin.com/gT7z9sb5
для личной практики
Задача такая: На вход поступает строка математического выражения, содержащая
- переменные
- цифры
- унарные функции
- бинарные операторы
На данный момент есть распознавание для строки, где разные обьекты разделены пробелами, с помощью словаря записаны некоторые константы, с помощью этого же словаря меняются переменные.
~ Стоит ли модифицировать исходную строку при получении с помощью регулярных выражений: между [a-Z]и[+-*)(/] вставлять пробелы для того, чтобы строка была валидной для имеющейся функции
> Алсо, документация на эту хуету оставляет желать, мягко говоря.
Та пиздец, сижу вот дебажу уже 3й час. Пока вообще нет идей как там происходит эта генерация. Классы, блядь, по 1000 строк
Погугли язык FORTH и его реализации.
На джаве тоже что-то было.
Может, наведёт на какие-то мысли.
Насколько я понял, тебе что-то подобное и нужно, только в весьма упрощённом виде.
Добавлю:
Если тебе нужно именно RPN, то идея в том, чтобы _вычислять_ результат. Помещая промежуточные результаты на стек.
Если же тебе надо просто прикрутить возможность вычисления строковых выражений, то лучше использовать Groovy или даже JEXL, и просто вычислять нормальные выражения, безо всякого RPN.
Есть ArrayList<boolean[]> field - игровое поле, и есть метод update. Каждый раз при вызове update() первый элемент убирается и происходит сдвиг всего массива, после чего на освободившееся место ставится новый массив.
[CODE]for (int i = 0; i < height - 2; i++)
getField().set(i, getField().get(i + 1));
getField().set(height - 1, new boolean[width]);[/CODE]
Это же нихуя не ссылочно происходит? То есть,
> field.set(y, field.get(y+1));
скопирует массив, и в итоге всё будет засрано массивами? Если нет, то заебись, если да, то как это сделать правильно?
>скопирует массив
Нет.
Более того, чтобы именно скопировать массив - надо специально постараться.
Алсо, нахуя массивы в списке?
Или двумерный массив (всё будет тоже ОК), или, тогда уже, список в списке.
Вообще - массив (переменная) - это всегда указатель. Даже в Си.
> нахуя массивы в списке?
Потому что изначально это был именно что boolean[][], и когда я делал так:
>field[y] = field[y+1];
- Idea мне это дело подчеркнула с комментарием "ага копируеш". Собственно я и сам знаю то, что ты написал, но этот инцидент вынудил засомневаться.
>ага копируеш
Лол.
Идея имела в виду, что ты копируешь _первый_ уровень (тот, что стал списком потом) массива _вручную_.
Но, ты же и правда это делаешь (частично).
Копируешь значения (ссылки на вложенные массивы) в соседние ячейки.
Используй System.arraycopy с соотв. индексами, и копируй (сдвигай) массив за один вызов метода.
Алсо, какая длина массивов второго уровня?
Можно же вместо них использовать битовые поля в long (если 64 колонки тебе хватит).
Байтоёбить, так по хардкору.
Всё, спасибо, успокоил, про arraycopy она и писала. Всё время дрочусь с этими ссылочными типами, а тут массив в массиве да ещё и на джаве, которую я не очень хорошо знаю.
>>292538
10. Думал об этом, но опять-таки засомневался в своих знаниях, так что решил сначала написать как-то, а потом допилить. Так что ещё раз спасибо за подсказку, откуда подступиться.
Программирование не твое. Попробуй JavaScript.
Конфиг-то есть? Как ты думаешь спринг создаст репозиторий?
Ты или должен в классе помеченном аннотацией @Configuration пометить какой-то метод возвращающий UserRepository аннотацией @Bean. Если есть спринг дата можно написать интерфейс расширяющий JpaRepository/CrudRepository, добавить нужных методов и пометить класс-входную тчоку (где main) аннотацией @EnableJpaRepositories, и тогда оно само создаст реализации репозиториев.
Я не до конца понимаю, и ты мне кажется тоже, что от тебя хотят? Чтоб все тесты за тебя писала машина? Или просто сгенирировать java-клиент по swagger-спецификации, который ты будешь использовать в тестах?
Какая-то хуйня.
Зачем подсаживаться на какой-то мутный проприетарный инструмент?
Я, вообще, не занимаюсь такими вещами, но недавно пришлось иметь дело с SoapUI (тоже SmartBear).
Лютая хуета, совершенно не юзабельна, делали какие-то дегенераты.
И вот, те же самые дегенераты делают сваггер.
Нахуй он нужен?
ага
как с тобой можно связаться, тем же самым сейчас занимаюсь
Чтобы тесты генерировались автоматически. Предположим что у нас в спецификации есть request body у которого есть атрибут username со следующими параметрами:
Type: Int
Min length: 2
Max length: 12
То мы на основании этого должны сгенерировать, к примеру, след тесты:
- Запрос в котором username будет String
- Запрос в котором длина username будет Min length - 1
- Запрос в котором длина username будет Max length + 1
- и т.п
Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.5.3.RELEASE:run
Да, будет проверяться что возвращатся 400
Там старый спринг, старый бут.
Ангуляр не смотрел, но, думаю, тоже не новый.
И эклипса.
Поверь, тебе это не надо, найди другое что-нибудь.
На сайте спринга есть пошаговые примеры подобной хуйни.
Он нужен что бы описать, добавить документацию, наладить контракты передаваемых данных, а потом сгенерировать имплементацию, первая часть работает, а на вторую я слышал все плюются, в итоге пользуются первой его частью, а имплементацию делают сами или другими инстурментами.
Захотел тут в функциональном программировании в Жаве разобраться. Шло вроде нормально, разобрался с предикатами, стримами, но блять наткнулся на эту задачу и второй день как дебил.
Там в комментах даже бабы ее решили чувствую себя каким-то неполноценнымю
В России нет производств с высокой степенью передела, технологии не развиваются, нет науки, нет образования.
И нет инженеров.
А 100 лет назад - были.
>java.io.FileNotFoundException: /opt/tomcat/webapps/manager/META-INF/context.xml (Отказано в доступе)
судя по тому, что я нашел в гуголе, я хуево права доступа (не)настроил. пикрил не работает, в чем может быть проблема?
Выясни, от имени какого пользователя у тебя запускается tomcat.
И дай ему нужные права на директорию.
Или наоборот, запускай от имени того пользователя, у которого права есть.
И поставь Midnight Commander (mc), чтобы было попроще всё это делать.
И Попов такой молодой...
если я правильно понимаю, он запускается от root'а, а у него вроде бы есть все права. Забыл уточнить, в консоли он прекрасно работает вроде, а вот из intellij не хочет. Как узнать от имени кого идея запускает томкат?
https://pastebin.com/N2Q8JMXr
Запусти:
ps -ax | grep tomcat
и посмотри.
И вот это вот почитай:
https://scanlibs.com/komandnaya-stroka-linux/
А, вижу, ты уже так делал.
И что, когда через идею, то его не видно в ps?
Если так, то он запускается от твоего имени, как идея.
Добавь себя в нужную группу.
у меня проблема в том, что я не знаю, какая группа "нужная". судя по гуглам, группа "tomcat", но терминал мне говорит
>chgrp: неверная группа: "tomcat"
знание Джава: не расскажу про рефлексию, плаваю в джава 8, не расскажу подробно про канкарент, базовый мультитрединг расскажу: как запускаются потоки, дедлок и рэйс кондишн, волатайл, вэйт, нотифай, джойн, слип и тд, потокобезопасный синглтон напишу по типичным вопросам собеседования задрочен нормально.
мавен: расскажу про пом.хмл, репозитории, жизненный цикл клин-билд-сайт, без глубоких подробностей цикла билд(тест, сборка ресурсов, билд, пэкедж, деплой), сгенерю через консоль артифакт, запакую в пакет
спринг: расскажу про апликейшн контекст виды, деплоймент дескриптор, аннотации, бины, их жизненный цикл, напишу хеллоуворлд и задеплою на томкат или jboss
В принципе расскажу про сервлеты, контейнеры, jsp, сессии, куки, гет, пост, http без погружения в аттрибуты head
jdbc: подключу драйвер, установлю коннекшн, создам стэйтмент, пройдусь по резулт сэт, знание sql на уровне объединения, получения итоговых значений и вложенных селектов
ооп, солид, знаю простые шаблоны вроде адаптера, декоратора, композита, фасада, синглтона(лэйзи и нет), мвс
не работал с гитом вообще. кроме коммит и роллбэк ничего не знаю.
алгоритмы и структуры данных: понимаю но не воспроизведу по памяти(узнавание) квиксорт, сортировку вставками, пузырьком напишу. рекурсию напишу, стэки, очереди, массивы, списки расскажу вкратце, бинарное дерево расскажу, красно-черное - нет.
из практики пройденный до 35 уровня джавараш.
ну и так по мелочам всяким. xml, xsd, json, хуй знает, один день кажется, что я уже дохуя знаю и нужно пиздовать работать, на следующий день кажется что не знаю нихуя
Так создай группу tomcat.
А хуле нада то?
Все всегда пишут очень много всего в требованиях.
Не обращай внимания.
Если надо - соври.
Скажи - фрилансил.
Если заморачиваешься - найди в интернетах какую-нибудь охуительную историю начинающего фрилансера, и сделай себе легенду по ней.
Если складывается так, что ты чего-то не знаешь - скажи, что сейчас не в теме, надо подумать, забыл, надо освежить память и т.п.
Бля, там реально всю эту хуйню спрашивают? Я вот например на большинство вопросов хуй отвечу, максимум своими словами, но блять это не мешает мне писать код и в принципе знать как всё работает.
Посмотри ASM и/или BCEL.
И вот это посмотри:
http://www.allitebooks.com/java-performance-the-definitive-guide/
А компиляция? Просто все курсы джавы учат "напиши вот так и вжух будет вот так". Потом тебя на собеседовании спрашивают почему такое не компилируется и всё, приехали. Не могу я как то проложить дорожку до самого исполнения на проце, или я должен спеку заучивать для программирования на джаве?
Спасибо, бро. Еще вопрос, имеет ли смысл суваться к гигантам через тренинги и лабы или пробовать в мелкие конторы?
Судя по вопросам, ASM и BCEL тебе смотреть рановато, лол.
И ту книжку тоже.
Хотя, книжку, всё-таки, посмотри.
>почему такое не компилируется и всё, приехали
Не компилироваться может только из за ошибок в коде.
Или синтаксических (это просто, хотя, иногда, не очевидно с первого взгляда).
Или логических - использование неверного типа, отсутствующий return, использование неинициализированной переменной, нарушение правил доступа (public/private) и т.п.
Чтобы это видеть - надо знать язык и иметь некоторый опыт программирования.
Исполнение на проце тут ни при чём.
Спецификацию заучивать не обязательно.
вот этого удвоил, годноту несёт
Если честно - не знаю.
Это зависит от кучи причин.
Мелкая контора может быть предпочтительнее для начала.
Меня не кинут там в самое пекло, где я жиденько обосрусь? По сути, я же не умею толком писать нормальный код. То, что я на кодварс пишу в 10 строчек некоторые пишут в 3. Я хуй знаю что где и как комментить, бэд практис, пропущу где-нибудь проверку на null или еще какую-нибудь примитивную хуйню.
@FunctionalInterface
interface RequestHandler {
Request handle(Request request);
default RequestHandler setSuccessor(RequestHandler other) {
return (request) -> other.handle(this.handle(request));
}
}
Я совершенно запутался. В setSuccessor передаётся параметр "RequestHandler other". Откуда там берётся еще какой-то "request"?
>Меня не кинут там в самое пекло
Есть только один способ проверить.
И это может быть как минусом, так и плюсом.
Вообще, это такой вопрос, который ты должен решить сам, исходя из имеющихся вариантов и личных предпочтений.
>пропущу где-нибудь проверку на null или еще какую-нибудь примитивную хуйню
Для этого есть тестировщики же.
Возвращается новый инстанс хендлера с определенным методом хендл (который и принимает реквест этот)
>>293219
Спасибо конечно за советы, но "не компилируется потому что ошибки" это топ, да. Может подскажешь какие нибуд книжки по процессу превращения джава кода в инструкции на проце? Как это всё jit компилируется, бегает крутится?
Я понял, что возвращается RequestHandler, это в определении видно.
Мне непонятно, откуда этот сраный параметр (request) появляется и как он передается в эту функцию?
Возвращается анонимный класс хэндлера у которого реализуется метод хендл. Здесь он никак не передается, это лишь сигнатура, скажем так, реализованного метода. Аналог:
default RequestHandler setSuccessor(RequestHandler other) {
return new RequestHandler() {
public Request handle(Request request){
other.handle(this.handle(request))
}
};
}
Почему бы тебе не почитать одну из книг, которые я упомянул выше?
Порешать примеры оттуда?
В твоём коде метод setSuccessor() возвращает функцию.
request - это параметр, который принимает возвращаемая функция.
И он, естественно, используется в её теле.
Нюанс тут в том, что при возвращении эта функция кастится к интерфейсу. Т.е. эта функция - это реализация метода handle() этого интерфейса.
Т.е. раньше (в Java 7) там было бы:
return new RequestHandler {handle(Request request){...}};
Всё это - специфика практического прикладного ФП на джаве.
И начинать с такого я бы не советовал.
Найди в интернетах книжку Functional Programming in Java и почитай. Там объяснются именно общие идеи ФП, но с примерами на джаве.
>Как это всё jit компилируется, бегает крутится?
Ты странно спрашиваешь странные вопросы.
Внутренняя механика компиляции не имеет никакого отношения к вопросу "почему не компилируется этот код", понимаешь?
И, тем более, JIT и т.п.
Джаву для того и придумали, чтобы программист не думал обо всей этой хуете.
Но, если любопытно - читай спецификацию JVM, смотри байткод и т.п.
ASM и BCEL, опять же.
https://bytecodeviewer.com посмотри.
Гуглить ещё можно, например.
>185 страниц,
Это MEAP, видимо (до окончательной публикации).
Так-то там 476 страниц.
Но, книга охуенна, хотя и не особо легко читается.
И читать надо неспеша.
Это не та тема, которая поможет быстро найти работу с нуля, например.
Это, скорее, про то, как стать лучше, когда ты уже и так неплох.
Я понимаю что механика компиляции не связана с правилами в спецификации. Но мне интересно почему именно такие правила? Просто заучивать факты сложнее, чем если бы ты знал азы, на которых мог строить предположения.
Всё равно спасибо.
Точно.
>>293246
Я имею в виду вот эту книгу:
https://www.manning.com/books/functional-programming-in-java
>>293257
>почему именно такие правила?
Потому, что это такой язык.
Других причин нет.
Большинство правил - просты и интуитивно понятны.
И совпадают в большинстве Си-подобных языков.
И эти правила, в 99.9% случаев, никак не связаны с особенностями компиляции в байткод, и тем более, с особенностями работы JVM (нативный код).
JLS/JVMS
JLS/JVMS
А еще автор предлагает учить жава скрипт, лол, В учебнике по жаве.
Правильно предлагает, как ещё фронт писать. Только фреймворк какой-нить по типу бутстрапа юзать, а это по сути тот же джаваскрипт
Хуй его знает, за шесть лет работы не видел ни разу. Хотя легаси по-любому есть.
Не отменяет того что он мудак и дает не рабочий код в учебнике для нубов. По мнению автора это хуйня - рабочая форма пост формы с тимлифом.
Ну попробуй ее скомпилировать. Тимлиф тебя пошлет нахуй. Спринг тебя пошлет нахуй. Получишь нульпоинтер.
До компилятора мне далеко, но вот я не вижу проблемы. Нуллпоинтер где выдаёт? Запусти в дебаге и скажи на чём. Просто судя по примеру, есть одна форма и один контроллер, ну и там только один постмаппинг, а потому он будет все посты обрабатывать. Может автор пока не дописал репозиторию?
Для постмапинга не нужна модель, сохранил - редиректнул в ретурне. Давай лучше скажи какая это глава, а на гитхабе посмотрим фулл код.
На гитхаб я не лез, глава вон есть на скринах. Один хер с этим потом ничего не сделаешь. Даже валидацию полей не получиться прикрутить.
А куда ты собирался прикручивать валидацию полей? Почему просто не в класс своего User.
@NotNull( message = "Ты чмо");
Ну и в листке прописать еррор на это дело.
До завтра
попробуй в @GetMapping сначала добавить RegistrationForm в модель
Очень дохуя кода уже написано и работает.
И никто его не будет переписывать на другую технологию, в обозримом будущем.
И это не обязательно какое-то древнее "легаси".
Другой вопрос, что весь EE не нужен, нужен только Web Profile.
Сервлеты и JSP, короче.
Ты это руками набирал, или копипастил из книги?
Зачем?
Есть код на гитхабе, его и компилируй.
А в книге - иллюстрации.
Тем не менее, могу сказать, что пятое издание сильно отличается от предыдущих, и не в лучшую сторону. Принципы работы контейнера и т.п. почти не рассматриваются, типа и так всё понятно.
Видимо поэтому Маннинг даёт бесплатно предыдущее издание при покупке пятого, лол.
Нет.
Т.е., с одной стороны они говорят, что ЕЕ будут убирать, а с другой - ничего взамен.
То же и с десктопным GUI (Swing), который весьма востребован в корпоративных приложениях. И в IDE.
Оракл охуел.
Из сторонних решений - Spring.
Сысле то же и с десктопным гуем? Тебя уже ЖаваФХ не устраивает? Годная вещь же.
Во первых, FX - хуета без задач.
Я тут уже писал на эту тему раньше, сейчас лень.
Во вторых - его сливают на 2 года раньше, чем Swing.
Swing - в 2026-м, а FX - то-ли в 24-м, то-ли в 22-м, или даже раньше.
Потому, что Swing реально востребован, в отличие от.
Я лично думаю, что за эти годы появится что-то новое на эту тему.
Или Swing проапгрейдят.
Потому, что народ уже порядком подустал от дивного нового мира фронтенда на джаваскрипте. Года с 2016-го начали уставать.
А через несколько лет устанут гораздо сильнее.
>Тебя уже ЖаваФХ не устраивает? Годная вещь же.
Прямо сейчас пишу на этом говне жирное десктопное приложение. Ну в общем оно сырое.
Я его сравниваю с 4м да. Его читал с год назад. Там и про аспекты и про много много всего базовго. А 5я - ну тип хуярим вот тут так, потом бля тут куска кода нет и мы его вставим в 3-5-15 главе ну и хуй с ним что переписывать все, и все что писалось до этого говно и нинужна.
Тесты? Какие тесты. Их там нет. 1-2 попалось базовые за 200 страниц.
Сижу ковыряю баелдунга, хули делать.
Куча мелких багов типа непрорисовывания строк в tableView. И хз что с этим делать.
Или например под линуксом не получается сделать окно "подождите, выполняется операция". Оно рисует пустое окно. При этом под виндой норм.
Отсутствие вменяемого профайлера. Есть какой-то, но онтоже кривой и сырой. Слава богам есть возможность делать формочки через гуй, для идеи есть плагин. Но опять же надо все это потом доделывать руками.
Позиционирование элементов относительно друг друга - ебаная магия. Я так и не понял как это должно работать. В свинге гораздо проще и логичнее.
У классов куча методов, дублирующих друг друга, и при этом не работающих.
И вообще такое ощущение, что этот фх делала какая-то фемка, получившая место по квоте. Уж очень все по-женски нелогично, нет единой философии и бест практис. Ощущение что копаешься в куче налепленного говна
В 2021-м половина фронтенда будет на Питхоне, который будет поддерживаться всеми браузерами наряду с JS.
Запомните этот пост.
Дело не только в языке.
В первую очередь - в HTML (DOM).
Он не предназначен для создания динамических UI. Это язык разметки текста.
Но, и в языке, конечно, тоже.
Питон, как и JS - динамически типизирован, и непригоден для больших проектов.
Даже хипстеры-смузихлёбы уже поняли важность статической типизации, и начали переползать с JS на TypeScript. Но, TS - говно по своей сути, чужеродная надстройка над JS.
И даже упоротые питоноёбы начали это понимать - и прикрутили типы в последних версиях питона. Что из этого выйдет - посмотрим.
Пока - компилятор/интерптетатор их не обрабатывает, и какой в них толк - не очень понятно.
>Позиционирование элементов относительно друг друга - ебаная магия.
Попробуй MigLayout.
Это лучший layout manager на сегодняшний день.
Оптимизирован для ручного кодирования, но, поддерживается и в JFormDesigner (только для Swing).
Там есть модуль для FX (и даже для SWT).
Сайт у них старый, актуальную версию кода и примеры надо смотреть на гитхабе.
На сайте - доки. Основной - White Paper. Есть ещё Getting Started и Cheat Sheet.
Хм, ну ладно, понятно, хотя я пока с багами не сталкивался. А насчет нелогичности - не знаю, по-моему довольно удобно, хотя и действительно не вижу общей философии.
Приведи пример, что ты хочешь сделать.
Просто для складывания классов с конкретной аннотацией в коллекцию не нужен спринг
Ну ясен хуй, что спринг у мен не для этого. Коллекция должна быть бином.
Нужно выполнить операции над джейсоном:
1) распарсить джейсон
2) валидировать поля
3) добавить несколько своих полей
4) сохранить в базе
Какой библиотекой можно все это сделать? Хватит jackson-databind? Есть примеры?
Gson от Google глянь.
Не "распарсить/сохранить" а десериализация и сериализация.
Суть в том, что с джейсоном ты имеешь дело только в пунктах 1 и 4.
Остальное - уже с джава-объектом некоего класса.
Чтобы выполнить п. 3 твой класс должен уже иметь эти поля, просто при десериализации в п. 1 они останутся пустыми.
И да, из готового - Gson.
Надо делать реальный проект.
А просто изучать - там очень много всего, и далеко не всё это нужно в каждом проекте.
>Надо делать реальный проект.
Я сука не могу, слишком много всего из нихуя появляется, просто блять создал проект а там уже 100500 всякого говна налетело.
Попробуй сначала минимальные проекты.
На сайте спринга есть пошаговые руководства, например.
Надо попытаться понять, как работают отдельные куски, и потом из них уже собирать что-то побольше.
И делай паузы.
А запиливаю все примеры из гада.
Прям по инструкции, pom.xml я копипастой делаю, остальной код пальцами набираю.
На 3-ем примере уже руки помнять что там должно быть и появляются мысли что можно поменять и как кой пед проект запилить из этого.
Всё это естественно на гитхаб.
По итогу руки пишут код и гитхаб зеленеет.
После того как все примеры прочекаю думаю уже вкуривать мануал с самого начала.
>
>И да, из готового - Gson.
Чем он лучше jackson из спринг бута?
Алсо, как в спринг буте писать информационные сообщения в один лог, а сообщения об ошибках в другой лог?
Можно ли в спринге перехватить исключения десериализации джейсона и записать сообщение и сам json в лог ошибок?
У меня в спринге сложности вызывает только написание тестов по сути. Сам спринг как лего, если соблюдать логику слоев и не хуярить репозитории прям в контроллер.
Тем, что он не в спринг буте, очевидно. И вопрос с исключениями сразу отпадает.
Кое-кто совсем не умеет гуглить. На русском этого издания нет, но на английском ищется за пару минут. Даю подсказку.
Ну так он и обозначил, что желательно на русском. Но раз на русском нет, пусть читает на ангельском.
>jackson из спринг бута
Вообще-то, в спринге можно использовать что угодно.
Никаких ограничений не накладывается, и даже наоборот.
Насчёт лучше или хуже - я вообще использую свой десериализатор, потому, что готовые меня не устраивают. И это несложно.
спасибо, скачаю 9 издание в ангельском пока слабоват
на русском есть просто в интернеты видимо ещё не завезли https://www.ozon.ru/context/detail/id/145826480/
Зачем тебе Шилдт? Да ещё на английском?
Когда есть Хорстман, например (на обоих языках)?
https://scanlibs.com/java-tom-1-osnovy-10-izd/
https://scanlibs.com/java-se-8-vvodnyy-kurs/
Есть ещё вот это (не смотрел, но название заманчивое):
https://scanlibs.com/izuchaem-java-na-primerah-i-zadachah/
>Хорстман
у меня он есть я его читаю сейчас просто мне посоветовали именно Шилтда, и где то слышал что Хорстман больше как справочник или между ними в целом всё равно что читать?
а 9 Шилтда издание кстати на русском есть
Бамп.
Если я правильно понял вопрос
Ты можешь сделать @Autowired над ,скажем, листом, и тогда спринг соберет все бины типа этого листа собвстенно в этот лист. Однако стоит действовать аккуратно, так как спринг версии 3 и ниже попытается инжектнуть собственно готовый лист, а не собирать его из бинов и можно напороться на NPE
Да, это я как раз понял, что чтобы собрать коллекцию из бинов, они должны реализовывать один интерфейс или наследоваться от одного класса. Меня интересует, можно ли сделать так, чтобы в коллекцию собирались все бины с какой-то аннотацией.
Вопрос в другом - для трудоустройства мне везде говорят что нужна поебота под названием Spring (и еще Hibernate говорят не будет лишним). А вот тут я вообще не что за хуета и с чем едят.
Пните в нужном направлении - курсы я разные нагуглил, на торрентах и вообще, но хотелось бы проверенное что-нибудь и актуальное, чтобы с практикой (без практики всё забывается за неделю).
Спасибо, няши.
Ну чисто теоретически ты можешь сделать свой кастомный BeanPostProcessor, который будет после инициализации бина, через рефлексию проверять если у бина есть твоя аннотация, класть бин в коллекцию.
Как это реализовать? Собственно хуй его знает. Сам в такие кишки не лез, возможно вообще спизданул не то. Если разберешься что к чему, то напиши, а то интересно
Так у тебя бин должен быть коллекцией или коллекция из бинов?
Если и то и другое:
>@Bean("ListBeanName")
>@Autowired
>public List<Clazz> getMotherFuckingBean(Clazz beanX, Clazz beanY, ..., Clazz beanZ) {
>List<Clazz> res = new ArrayList<>();
>res.add(beanX);
>res.add(beanY);
>//...
>res.add(beanZ);
>return res;
>}
https://www.youtube.com/watch?v=3wBteulZaAs
Оно? 2015 год, еще актуально?
А то я как долбоеб начал Java Enterprise Beans учить по видео Специалиста, а оказалось это нахер не нужно.
Вдогонку: хз, как там с vararg
Перекат >>1294482 (OP)
Перекат >>1294482 (OP)
Перекат >>1294482 (OP)
Перекат >>1294482 (OP)
Перекат >>1294482 (OP)
Очень много воды утекло. Ни дженериков, ни функционального программирования, ни фреймворков.
Если не с нуля - лучше фреймворки изучай, толку больше будет. Там же и стиль посмотришь.
Люди говорят, что Шилдт - скучный и нечитабельный.
Я это очень давно слышал и не раз.
Сам я его не читал за ненадобностью.
Вот, и тут, например, пишут, что Хорстман лучше:
https://www.reddit.com/r/java/comments/7oip71/book_choice_schildt_vs_horstmann/
Тут ещё многое зависит от того, что ты уже знаешь/умеешь, и от личных склонностей. Выбери сам.
гляну обе а там решу спасибо большое анон
Прочитал и Шилдта и Хорстмана. Сейчас перечитываю по второму кругу некоторые моменты спустя полгода. Так вот Шилдт лично мне заходит на порядок легче.
Выше в треде была книжка. Параллельно такая последовательность: "Спринг Юрий Ткач" и "letscode springboot"
ЕРАМ скорее всего , галера не с лучшей репутацией в IT кругах
ИлИлоо
и смог мимо пройти не
стеком
Это копия, сохраненная 11 декабря 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.