Вы видите копию треда, сохраненную 10 февраля 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
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://exercism.io/tracks/java
В 10 раз пизже обоссаного джавараша и в 10 раз полезнее + у вас есть персональный ментор, которого можно иногда подзаебать.
мимо из го- треда
Да та же олимпиадная хуйня как и везде. Нужно что-то поближе к реальности, но не слишком элементарное.
И че там за херня с настройкой CLI, они че в браузере песочницу не могли запилить как обычно?
Там все задания из реальности. По- крайне мере, я прошел весь курс по Go. Каждое новое задание - новый экспириенс. Ты осваиваешь язык, а не матан. Мне суперзашло. Я думаю, курс по жабе - не хуже.
>>20002
Ничего платить не надо. Все бесплатно. Причем, можешь рандомно получить какого- нибудь известного в мире жабы чувака, нахаляву.
>>20021
Добавить в рут - слишком сложно ?
Я под виндой, у меня параноя всякие левые екзешники добавлять куда не надо. Я даже кряков для идеи боюсь.
//Given
init();
mock.whatever();
Object exp = xxx;
//When
Object res = testedClass.everever(Object wtf);
//Then
assertEquals(res, exp);
Что-то в этом духе
За время собеседования практически невозможно написать алгоритм из головы, только если ты писал его заранее.
знаю с#, но не глубоко
насколько джава и с# похожи?
есть рекомендации, чтобы одно и тоже два раза не читать?
Есстественно это пример говнокода но смысл думаю ясен.
С учетом того, что раз,два, три это сложные конструкции, например забит путь до папки вида Paths.get(FileSystemView.getFileSystemView().getHomeDirectory().getAbsolutePath())...
public class A{
final int one = 1;
final int two = one + 1;
final int three = one + two +1;
//Getters
}
public class B{
final int number;
final A a;
pubic B(final A a){
this.a = a
number = a.getThree
}
}
А кроме тго, что хуйня градл перед тем, как это сказать, что вышла хуйня, ещё и собирает все по 5 минут. Хелловорд ебаный 5 минут.
Вопросы:
1) Что делать когда нет jar-файла библиотеки? Только через этих уёбищ что-то собирать?
2) Не уже ли вообще никуда без этих уёбищ нельзя? В андроиде,тоже градл, ок. Но я не понимаю зачем они нужны, если честно. Разве все эти зависимости так нужны? А если да, то почему их не нужно при обычных jar библиотеках? Я просто запутался
А по мне так удобней мейвен/грейдел. После работы со спринг бутом/докером вообще кажется ахуительно все. Хотя немного напоминает xmlns.
Сайт, конечно, годный, но не совсем. Я подобрал там нужный паттерн, но для Java он не подходит.
>* repetition is not allowed inside lookbehind
>Look-behind group does not have an obvious maximum length
Че огромного? У тебя в ide уже все есть, пока ты тут семенишь, мог уже за час этот несчастный мавен выучить
Ведь java же очевидно намного лучше чем пхп!
Ведь молоток же очевидно намного лучше чем пила!
Чем уступает-то?
Потому что пыха изначально создавалась для интеграции с хттп. В категории "щлёпнуть сайт" пыха ебёт весь мир.
Меня смущает вот это:
inal int number;
final A a;
pubic B(final A a){
this.a = a
number = a.getThree
}
может для number сделать
public int getNumber(){
return a.getThree
}
Тебе уже четко и ясно русским языком сказали чтобы ты шёл нахуй. Почему ты все еще здесь?
Обычно все константы широкого доступа, типа адресов или путей, пихают в один статик класс. А уже потом из него дергают когда необходимо.
Если что то сложное нужно присвоить то делать это лучше в конструкторе или в блоке инициализации. Там уже можно и проверки делать и ошибочку выкинуть не делай так
Ну я так и хочу. Только там в
>один статик класс
уже есть необходимость вот в такой фигне для читаемости больше даже.
Чтобы не ебенить путь до десктопа каждый раз в просто сделать
putiDoDesktopa.resolve("vasha papka"). не транслитом кончено это я так
Ну и статик классы в целом это тоже такое себе...
>>20548
Да может быть. Я ищу бест практис. Один хуй это говно работает как его не пиши. Не хочу плодить говнокод.
Я пробовал через jansi, но почему то не работает. Хотя сама jansi работает. Вон хеловорд разноцветный.
Ухебать. Если кому интересно я р\нашел решение но какое то внезапное блять.
It seems like some default is broken in 2.10.0. By adding disableAnsi options, I could get the colors back with the last release.
<PatternLayout pattern="%highlight{...}" disableAnsi="false"/>
In the docs, it is said to default to false but it doesn't seem the case
https://stackoverflow.com/questions/48472049/how-to-colorize-log4j2-output-on-console-in-intellij
лол, классика
Новый ResponseStatusException или по старому через @ControllerAdvice + ентети под error?
Есть у меня задание по потокам. И один из них должен находить в строке самую длинную повторяющуюся подстроку.
Нашёл на сайте паскаль реализацию, но чёт не одупляю.
Function Rep(s : String) : String;
Var i,j,k : Byte;
Begin
For i:=Length(s) div 2 downto 2 do
For j:=1 to Length(s)-i+1 do
For k:=j+i to Length(s) do
If Copy(s,j,i)=Copy(s,k,i) then
Begin
Rep:=Copy(s,j,i);
Exit;
end;
end;
Никто не отменял псевдокод
double dx, dy, sx, sy, mx, my = 0 ;
и нужно делать это так:
double dx = 0;
double dy = 0;
double sx = 0;
double sy = 0;
double mx = 0;
double my = 0;
ну что за засада? в jshell это отлично срабатывает в одну строчку.
Там довольно сложный алгоритм - https://en.wikipedia.org/wiki/Longest_repeated_substring_problem
С наскока хуй напишешь.
>>21466
Потому что жаба это топовый обфускатор.
Потому что ты хуесос и не знаешь основ.
Неинициализированная переменная примитивного типа это 0 или false для boolean. В своем говнокоде из jshell ты нормально задаешь только последнюю из них.
>double dx = 0, dy = 0, sx = 0, sy = 0, mx = 0, my = 0;
Вот так пиши, если уж хочется в одну строку, жуебок.
Проблема в том что понаобъявляли чекд эксепшнов, но многие специально пишут код который игнорирует их throw, так как в их методе они ничего осмысленного с экспешном сделать не могут, приходится заворачивать в какой-нибудь свой эксепшн, который при этом не должен быть чекед.
Если кто на крестах писал, есть для жабы годное чтиво наподобие Мейерса или Саттера в крестах?
"Thinking in Java" позволяет понять как писать на языке так чтобы это соответствовало основным парадигмам и общепринятым стандартам джавы. Хортсман неплох ещё говорят, но я не читал.
Я прям JDBC сейчас вспомнил. Куча ексепшинов которые не делают ничиго и их надо все ловить. Кто то еще пользуется этим говном?
То есть я могу делать что то типо:
public Object checkIfNull(Object o){
if(o==null)throw MyCustomException("We got null")
return o;
}
Или суда еще try/catch все таки нужен? Поймать нульпоинтер в трайкетче напримре и пробросить опять мой эксепшн.
В ресте ессно есть класс под это дело который возвращает читабельный джейсон в случае чего.
Есть 2 энтити Продукт и его наследник ПкПродукт.(пик1 и пик2)
Есть 2 недофабрики пик3 и пик4. Фабрика ПкПродукта как видно наследуется от фабрики Продукта.
Ну и чтоб код для ПкПродукта не копипастить, я вызываю super.create() в нём. Однако он возвращает мне Продукт.
Норм ли я сделал, что написал конструктор в наследнике, которые принимает этот продукт, и сетает из него все поля? Или дичь полная? Как лучше можно?
Тебе здесь больше паттерн Builder подходит. И id лучше генерировать, а не указывать руками.
Юзер например сохраняет файлы на сервер через браузер, сервер говорит иди нахуй ваш файл слишком большой/пустой/что то еще. Прокидывается внутренний эксепшн аля "Пизда рулю вася что ты делаешь прекрати". Ну и отображаешь месседж юзеру.
Я пока как то не придумал как это по другому сделать.
Можно ид вообще статический сделать. Может быть там не БД,
Что блет?
Потому что это разные вещи?
Это получается ты логику работы реализуешь через ексепшены а хуёвое решение.
Проверил файл на размер, пустоту (удалил нахуй если нужно) и прост без задней мысли говоришь тупому юзеру чтоб нахуй двигал!
Да как проще так и делай. Главное что бы было понятно что конкретный тест делает.
Ну там скорее не стал сохранять если файл валидацию не прошел.
Не прошел валидацию - по идее ошибка же - показать пользователю где он ошибся. А эксепшн так и так будет пробрасываться, почему бы не взять с него месагу и не показать пользователю. Там же просто страница в браузере.
Ога, оно самое. Хотя бы иде генерить умеет и то хорошо.
Сериализация. Эклипс создает автоматом. Вроде можно самому не писать. Он автоматом генерится.
Дык может пользователю вернуть не страницу с ошибкой, а через AJAX закинуть результат и показать к примеру модальное окно (там у тебя йоба фреймфорк поди какой) с сообщением об ошибке
Юзабилити там, хуёмоё. Негоже на каждый чих пользователя нахуй посылать!
NullPointerException не я вляется checked, его нет смысла ловить, это ошибка предположения. А вот с каким-нибудь IOException бывает такое говно:
...
File f = ...;
try {
return doSomething(f);
} catch (IOException e) {
throw new BadFileException(f, e);
}
>Неинициализированная переменная примитивного типа это 0
за основы чего ты мне затераешь, петушок? основы бейсика? в яве нельзя не инициализировать переменные, иначе у тебя сразу выйдет error: variable might not have been initialized
>>21647
>Потому что так делают пидорасы?
ты так говоришь пидорасы, словно это хуже колбасы из дублирующихся строк. хотя может ты оплату построчно получаешь, но это, конечно, ещё хуже.
Допустим, веб-приложение. А блять какое именно? Нужно кароч расписанное тз с используемым стеком, а не моя больная фантазия. Есть такое в интернетах?
>неинициализированная переменная примитивного типа это 0 или false для boolean
неа, иди чекай.
вот если массив не заполнить ничем, то там нулики будут.
Соси.
>error: variable might not have been initialized
Это ведь тебе идея подсветила final поле, а ты уже спизданул как долбоеб?
ахахахахахахаххахахахахаха, вот ты долбоёб, васяня.
Паесните за будущее джавы. Интерпрайз сейчас весь на восьмёрке, а чё будет, когда её поддержка закончится? Оракл обещал, что бесплатная поддержка будет только у последнего майлстоуна а.к.а. последний мажорный релиз. Катиться на 11-12ую или как? Или башлять за поддержку с каждого процессора? Что же делать, как же быть?
Чтоб когда очередной брич в тлсе случится, чтоб его запатчили по-быстрому.
Ты бы еще аську кинул.
Сап, двач. Здесь же есть автоматизаторы тестирования? Какой проект с selenium webdriver можно сделать, чтобы и самому хорошо разобраться, и показать потом работодателям как пример того, что можешь? Т.е. что-то или приближенное к работе, или просто сложного уровня. В wrk треда нет...
Было бы очень даже неплохо. Как сделаешь - обязательно поделись инвайтом
Покупать поддержку у другого вендора/пользоваться openjdk/использовать промежуточные релизы оракла, они вроде бесплатные, и каждые полгода пересажываться.
> Неинициализированная переменная примитивного типа это 0 или false для boolean
Если ты говоришь в контексте поля класса - то да, ведь оные дефолтно инициализируются конструктором. Если ты говоришь про переменную внутри метода/блока - то бред. В Си, например, неинициализированная переменная заполняется мусором из памяти, а в Джаве запрещено использовать "пустую" переменную.
Джава - она как твои учителя в школе, подавляют любую попытку выйти за границы правил :)
> вот если массив не заполнить ничем, то там нулики будут.
Массив - это объект, а не примитивный тип. В этом и отличие. Содержимое объекта (его поля) как раз и инициализируются дефолтно.
Но это не столь важно, ведь в джаве многие фичи SE инициализированы через native (http://www.quizful.net/interview/java/native-keyword).
Такой себе экспирианс. Нормальные PM'ы выделяют бюджет на покупку лицензии.
Идея в разы удобнее и имеет куда больше фич.
Правда есть моменты, когда приходится её юзать. У нас на работе чувак реализовывал кастомный JBPM, а плагинов в идеи не было, ему и пришлось использовать Jboss'овскую тулзу в эклипсе
таблица книг [books]
id(int) | title(str) | genre (int)
1 | Bolshoy Yoba | 1
2 | Maly Yoba | 2
3 | Ogromny Yoba | 1
...
таблица жанров[genres]
id (int) | genre(str)
1 | drama
2 | action
...
Цель - заджойнить текстовый вариант написания жанра к таблице с книгами
Делаю следующее
====================================================
====Books.java (таблица: books)=========================
_@OneToOne(cascade = CascadeType.ALL)
_@JoinTable(name = "genres",
________joinColumns = @JoinColumn(name="genre"), // берем id жанра?
________inverseJoinColumns = @JoinColumn(name="id")) // берем текстовый вид жанра?
_private Genres typed;
_public Type getTyped() {
________return typed;
_}
====================================================
==Genres.java (таблица: genres)=========================
_@OneToOne(mappedBy = "typed")
_private Books books;
_public Books getBooks() {
________return books;
_}
====================================================
Но получаю: ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-1) ERROR: operator does not exist: bigint = character varying
Очевидная несовместимость типов, но я не понимаю почему это происходит, вроде все как надо написал.
таблица книг [books]
id(int) | title(str) | genre (int)
1 | Bolshoy Yoba | 1
2 | Maly Yoba | 2
3 | Ogromny Yoba | 1
...
таблица жанров[genres]
id (int) | genre(str)
1 | drama
2 | action
...
Цель - заджойнить текстовый вариант написания жанра к таблице с книгами
Делаю следующее
====================================================
====Books.java (таблица: books)=========================
_@OneToOne(cascade = CascadeType.ALL)
_@JoinTable(name = "genres",
________joinColumns = @JoinColumn(name="genre"), // берем id жанра?
________inverseJoinColumns = @JoinColumn(name="id")) // берем текстовый вид жанра?
_private Genres typed;
_public Type getTyped() {
________return typed;
_}
====================================================
==Genres.java (таблица: genres)=========================
_@OneToOne(mappedBy = "typed")
_private Books books;
_public Books getBooks() {
________return books;
_}
====================================================
Но получаю: ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-1) ERROR: operator does not exist: bigint = character varying
Очевидная несовместимость типов, но я не понимаю почему это происходит, вроде все как надо написал.
ибать ты довен
> operator does not exist: bigint = character varying
Ты неправильно джойнишь. У тебя энтити Book имеет поле-класс энтити Genres. Внутри энтити Genres, по всей видимости, есть необходимый тебе genre (string'а).
Сделай @JoinColumn(name = "genre", referencedColumnName = "id").
Так же, это будет работать лишь при uni-directional связке.
И ещё, у тебя архитектурная связка энтити неправильная. У книжки должна быть множественная реляция к жанрам (One-to-many).
И ещё один момент. Если ты хочешь из Genre вытащить только стрингу жанра, то хибер тебе это так гибко не пропишет. используй DTO, которое ты будешь маппить.
class BookDTO {
privare String genre;
...
// Setters & Getters
}
И потом в маппере будешь инициализировать genre значением энтити -> bookDTO.setGenre(genre.getGenre())
ну выглядело не как пример.
да и хуёвый ты пример ему дал, там блять пару строк всего получится.
Ну да, лучше делать это на каком-то сайте с авторизацией, чтобы предварительно надо было заполнить формочку. Все равно в большинстве случаев ничем сложнее не придется заниматься.
Но это ведь слишком легко, нет? Ладно еще там взять валидные и не валидные данные для регистрации из какого excel(?) и после попыток регистрации помечать, где прошло успешно, а где нет. Но даже это еще легким кажется
Получается? Рот рабочий?
Я понял,что первый это реализация JPA с провайдером hibernate. Второй - реализация hibernate API. Так?
Бтв сейчас поставил такую строчку Сlass.forName("com.mysql.jdbc.Driver").newInstance();
Посмотрим что будет.
Весьма странно, getConnection по документации кидает эксепшн, а не налл вовзращает. Какой конкретно метод ты используешь?
Да и Class.forName вроде уже делать не нужно и если драйвер правильно упакован, то все само найдется по субсхеме.
Ну т.е. да, меня кидает в экспеншен и сам метод возвращает нул. Только я не понимаю почему неделю воркает а потом падает.
>Какой конкретно метод ты используешь?
Метод чего?
с официального сайта. а через левое мыло какого-нибудь пердольского вуза в кекестане так и про версия. как тебе так, иван?
Покажи код, возвращает null и кидает эксепшн это взаимоисключающие вещи. Ну епт что написано в эксепшне? Может там сервак перезагружают/инетренет переподключался/луна в другой фазе.
на лекции
SessionFactory - Hibernate specific API. EntityManager - стандартная джавовская спецификация так что да. Если есть выбор, не стоит юзать проприетарное Api , то есть однозначно EntityManager. Кстати, если я правильно помню, из него можно получить сессию но не наоборот. Да и нахуй это тебе, когда можно юзать репозитории в Спринг дата?
>Ну епт что написано в эксепшне?
НУЛ и написан!
В методе сказано что кидается когда:
- if a database access error occurs or the url is
Но у меня юрл то рабочая, и падает спустя неделю.
Так у тебя не налл возвращается, ты просто налл записал, а DriverManager.getConnection ничего не возвращал, вот как был вместо connetion null, так и остался, а ты его вернул и у тебя где-то далеко далеко потом об этот налл кто-то споткнулся.
Это не тот стектрейс что тебе нужен. Подключи sl4j или что там у спринга легко подцепится и нормально логни SQLException через logger.error.
Зачем молоток если есть топор?
Или забить и хуярить как есть?
хуй его знает, нормальные люди пишут на питоне, для дегенератов и пидорасов есть всё остальное. так что ответ какбы лежит на поверхности.
>Нормальные люди все строят с помощью гигтанского розового дилдо, а остальные используют инструменты.
Плодить дохуя классов на одну сущности изначально хуёвая идея, потому что потому, если придётся расшить модель, то придётся вносить правки в 150 разных классов добавляя геттеры и сеттеры.
На мой взгляд, на одну сущность можно сделать максимум два класса: модель(ДТОха, ЖПАшный бин) и представление(уже классик, который ты будешь сериализовать уже и в джейсон и во что хочешь, хоть в жпс возвращать).
Хотя, если следить за посдении веяниями, все отказываются даже от представления и работают сразу с ДТОхой, обмазывая её аннотациями.
Так, в общем я допер до того, что нужно использовать ActiveDirectory. Суть в том, что некоторые сервисы в нашей корпоративной сети уже используют такой подход. Мой компьютер также подключен к ActiveDirectory сервера. Могу ли я реализовать прозрачную авторизацию, не запуская свой сервис на сервере сети, а запустив его на своей локальной тачке?
Ебаные двачеры тупорылые. Как обсуждать круды с дебилами и простейшие маппинги через спрингбут - так обсуждение на пару тредов, а как помочь с реальной задачей, так хуй кто что знает.
Хуй знает, у меня не возникло с этим проблем, если я правильно понял о чем ты. Правда сегодня я сделал то же самое на Antlr, получилось быстрее.
А хули ты ждал, двач это тебе не форум для синьоров помидоров.
Веяниями здравого смысла в тырпрайзе.
я не знаю, что ты парсишь. так что может и не обосрёшься. но загугли что такое иерархия чомского и какие грамматики он различает. можешь даже для быстрого понимания на ютубе ликбез посмотреть. если совсем на пальцах, ты, скорее всего, пытаешься обработать контексно-свободный язык методами для регулярных языков (последнее это лишь собственное подмножество первого) и обосрёшься, если будешь открывать/закрывать скобочки или другие попарные символы. но это не единственное место, конечно.
Как же все это тяжело воспринимается, если в вузе я изучал другую специальность. Вообще не понимаю эти грамматики. С вложенными выражениями никаких проблем не было, там все очень просто. Находится закрывающая скобка, а все выражения внутри скобок добавляются как дочерние к выражению, которое было перед скобками. Все рекурсивно, разумеется.
До сегодняшнего дня только лениво читал Шилтда, дошел до 300 страницы.
Ты, наверное, просто себя ни разу в руки не взял и не работал целый день, как я сегодня.
Тебе стоит попробовать видеолекции.
добро пожаловать в теоритическую информатику. макаки в этом треде даже и не слышали про такое, не то чтобы разбирались. так что не унывай.
ещё интересный случай: "((")"")"
оставь ссылу, поизучаемс
Простая система библиотечного учета. Есть книги. Есть посетители. Посетители берут книги. Нужно знать какая книга у кого. Если он просрачил сдачу книги, начислять ему штраф. Есть два типа ролей - пользователь и библиотекарь. Первый может онли брать-сдавать книги и видеть список книг который у него. Библиотекарь, например прощать штрафы. Естественно есть регистрация. По желанию OAuth. Ну и веб-интерфейс - можно по православному на JSP, можно на Thymeleaf, можно на Ангуляре
Двачаю. Жава не для игорей в виду необходимости установки жава машины. Максимум под андройид что то.
Четко. 12 часов на нигде ненужную хуйню
Я сделол похожее без морды на реакте/хипстера в виду того что учил питон а не ЖС. Сейчас понимаю что питон нахуй никому не всрался.
В любом правиле есть исключения. Еще 5 примеров хотя бы.
Забавно, что я могу написать на спринге сам рест сервис с БД и обработкой исключений но не понимаю кто будет делать пост запросы в эту апи.
Что, простите? Тебе из джавы? Ну есть такая хуйня у Springа - RestTemplates, кури туда.
Какой вопрос - такой ответ.
Я не спрашиваю как работает хттп. Я спрашиваю конкретное применение пост запроса в рест сервисах. Кто его делать будет? Откуда блять он придет? В тот же сраный спрингкроме которого в жаве все мертво с его сраным рестконтролером как делать будет совершаться запрос?
покормил
Окей у тебя есть некий сервис, подцепленный к базе юзверей (логин пароль) и у него наружу торчит API. Есть другой сервис, в котором происходит регистрация (веб-морда). Когда юзверь жмет зарегистрироваться, на твой первый сервис отсылается джейсон, что то типа
POST user/add
{
login: xxxxx
password: xxxx
}
Контроллер первого сервиса ловит его, и вызывает сервис по конверту джейсона в энтити и персисту его в базу. Усе
Дед пихто. Ты нихуя не понимаешь, как работает хттп. Иди читани хотя бы википедию.
Ну вот. Живой пример спасибо. Это все еще через кролика скорее всегоRabbitMQ. Трули нон хуман экспириенс вобщем.
Все это наверно лучше на вебфлюксе хуярить?
Это больше для тестов. Вртяли кто то будет сидеть через курл писать запросы тебе в апи.
Первые два варианта ты проигнорил? Если сервис внутренний, то запросы вполне могут пуляться каким-нибудь баш скриптом. Хелсчек микросервиса, запущенного через ci.
Да, блять, в микросервисной архитектуре сервисы между собой по рестам общаются. Вы совсем что ли ебанутые тут?
Спасибо.
По шагам:
1. В SQL создаются три таблицы.
Первая таблица содержит информацию о книгах (праймери = инвентарный номер книги, заголовок, имя читателя, дата выдачи).
Вторая таблица: праймери = номер читателя, имя читателя, суммарный штраф.
Третья таблица: праймери = номер события (нарушения), читатель, книга, просрочка в днях, штраф.
2. Собственно приложение на Java.
2.1. Подтянул JDBC.
2.2. Подключение к БД SQL
2.3. Приложение создаёт нужные statement'ы.
2.3. В приложении есть класс user, от него классы reader и librarian с разными правами.
2.4. Подсчёт и управление штрафами в зависимости от даты.
3. Интеграция веб-интерфейса при помощи Spring.
Как-то так?
>2.1. Подтянул JDBC.
>2.2. Подключение к БД SQL
>2.3. Приложение создаёт нужные statement'ы.
Вообще нет. Читай про гибернейт и spring data.
1. А где таблица юзер-роль? Где логин-пароль? Вообще садись и думай, как лучше сделать и не забывай, что все это должно быть нормализовано.
2. Ты хочешь юзать Хибер, но ты даже не понимаешь что это такое. Из третьего пункта видно что ты не понимаешь что такое спринг.Короче, кури Spring in Action 4 (не 5 - там Boot и Data - нихуя не поймешь)
Короче, рано тебе ещё так сразу, для начала, попробуй просто в памяти всё хранить, БД прикрутишь потом.
Сделай простенькие классы, связи, посоздавай объекты в юниттекстах, посмотри чё как. Не надо так сразу.
Ну и начни с простого, сделай класс юзера, сделай класс книжки, сделай так, чтоб юзер мог брать книжки(не абы какие, а нужные), и выводи списочком аккуратно.
два разных типа, которые имеют открывающий и закрывающий символ/тег, вложены в друг-друга, то есть перекрываются. и тут ты никак регулярками это не разрулишь.
в примере я проебался и лишнюю кавычку добавил. просто мысленно убери какую-либо, и попробуй распарсить на листочке бумаги это. можешь для пущей забавы представить себе, что скобка и кавычка имеют одинаковый приоритет.
Что за набор смотрел?
Спасибо.
Спринт даёт абстракцию над хибером, так что разбираться в нём нужны нет, а вот в спринте есть что покурить - да.
Никакие ждбц драйверы тебе не нужны, всё должно настраиваться в конфиге простым указанием типа БД.
Идея всё сама генерит. Нахуй этот ваш ломбок нужен.
То есть начать нужно с хибера.
Это ты ебанутый. Нахуя пилить целый слой реста, когда можно просто модель с валидацией сделать.
Рест нужен для общения между собой 2х разных приложений. Отдельных блять.
Например рест апи вк и "твое говно нейм", которое туда подключается.
Никто в здравом уме не будет логин/регистрацию юзера тянуть через рест.
Ты застрял в XIX веке примерно. Сейчас фронт-энд как раз и делают как отдельное приложение на каком-нибудь Реакте.
Сам сейчас hibernate изучаю. Обрати больше внимания JPA, hibernate используй как провайдер. Так меньше кода получается и конфиг проще.
Как раз сел читать по Hibernate.
Вкратце, я вижу три этапа задачи:
1) Код на Java - объекты и их взаимодействие.
2) Передача данных в SQL через Hibernate
(https://proselyte.net/tutorials/hibernate-tutorial)
3) Создание веб-интерфейса (надо полагать, с использованием Spring).
Беру ИДЕЙку, создам SE-проект, напишу логику, прикручу hibernate.
Интересно, почему в Java такая каша из технологий в сравнении с тем же C#?
Варианты: создать через диалог в IDE, использовать Maven.
В чём разница?
потому что оракл нихуя не делает, что позволяет всяким пидарасам писать велосипеды для неё. мелкомягкие в этом отношении молодцы и не ленятся обновлять свой .нет
Хорошие люди мелкомягкие. На сольдиезе ты просто садишься и пишешь ПО, а на кофе ты сначала ломаешь голову про зависимости-хуисимости.
Была идея пробежаться по классам, и схоронить в map эти чары и классы. А уж потом уже пихать в фабрику чар, а она будет заглядывать в map и дёргать правильный класс и конструктор.
Правильно думаю?
С любовью, твой Питон-Петян.
Странно, сел писать CRUD и затупил, как всё это организовать, хотя у меня же есть собственные готовые образцы.
Допустим, у Юзера есть список книг, это понятно.
У Книги будет ссылка на пользователя, которому она сейчас передана (эта ссылка не будет входить в equals и hashcode).
Ты?
набросай пример
switch(class) {
case "class1" : return new Class1(ctx.getVar1());
case "class2" : return new Class2(ctx.getVar1(), ctx.getVar2());
case "class3" : return new Class3(ctx.getVar3(), null);
...
}
Даже не близко. Сейчас на рестах работает всё. ТОт же сабмит мессаги на сосаче через рест идёт, можешь сам посмотреть.
пока делай так, потом рефакторнёшь, когда поймёшь как сделать шоб нравилось, а то блять нашелся тут эстет. классы не крутятся, лавэха не мутится, пока ты хуетой занимаешься
Что ты подразумеваешь под диалогом?
Это две разные ващи, блять.
Мавен это хуйня для менеджмента зависимостей в проекте, а диалог в ИДЕ это просто диалог в ИДЕ, который выставит какие-то внутренние настройки и подключит какие-то дефолтные либы.
ну спасибо, твой пистон-петян
Мало быть сеньёром, надо ещё понимать, что ты делаешь. Клин Код читануть пару разиков, Эффектив Джава - что-нибудь в таком духе.
>кок пок я кекитектор! я скозал!
Ну и чем тебе не нравится абсолютно читаемый, пусть и топорный, код? Алсо, кукарекнуть ты кукарекнул, а свою представление правильного в контексте данного примера так и не представил.
Всём ёпто. Наличие такой хуиты свидетельствует о том, что изначально никакой архитектуры или дизайны в код заложено не было. Типичный спагетти говно-код, который потом заебёшься дебажить. Править тут нечего, надо всё рефакторить в пезду от основания, чтобы такие конструкции даже примерно использовать не пришлось.
Так и есть. Причинно-следственная связь - то, что отличает нормального софтваре инженера от говнокодера. Один будет бороться с "root cause", в то время, как второй будет всю хуйню ифами оборачивать.
понятно, пиздабол в чати.
Ты мне бросаешь корпоративный репо?) Во-первых, как я должен его открыть? Во-вторых, даже если бы я мог, как понять, что ты там пушил, а что другие делали)) Вас там по объявлению что ли набирают?
Ясно. Действительно, кукаретектор, как задали реальный вопрос -испугался обосраться)
Какой блять реальный вопрос ты мне задал? Дать тебе ссылку на хитхаб, которым:
1. я не пользуюсь
2. даже если бы и пользовался, репо бы был приватный ибо корпоративная код-база
Ты хуйню просил, я тебе как мог ответил.
Ну хуй с тобой (хотя оч странно, что нет даже завалящего акка на гитхабе, ну да в рот его ебать). Тогда ответь как правильно, чтобы не было спагетти кода
Я написал уже выше. Спагетти код, это результат хуёвого дизайна/архитектуры приложения/модуля/фичи, называй как хочешь. Что делать? Читать книжки в этой области, применять. Какие? Да хоть какие. Лично я всем "ньюкамерам" рекомендую head first: design patterns по 8 жабе. Там как раз про уточек и пиццу, всё как мы любим.
Решать проблему в отдельно взятом кейс стейтменте - это хуита хуёт, говно-код.
лол
Ясна-панятна. Джуна после жава-школки взяли на работку он вообразил себя аркитекчуром. Потому что нормальный аркитекчур, как ни странно, если у него есть время (а у тебя оно есть если ты на двачах висишь) ткнет ньюкамера хотя бы в конкретном направлении, а не начнет рекомендовать хэд фёрст).
Особенно блядь это смешно на фоне засилья 23-летних синьоров, которые прочитают хэд фёрст, нихуя не поймут зачем и почему, не видят дальше собственного носа, но все равно наворотят сраных паттернов и ОРХЕТЕКТУРЫ, а потом паттерны есть, а код либо нихуя не работает, либо соплями к костылям приклеен) И девы лепят все новые и новые костыли, потому что "Я кокитектор, я так козал". В итоге ПО превращается в какой-то комок дерьма, в котором одни тесты на тесты и конвертеры из ДТО в ДТО, посреди сидит гордый кокитектор, ковыряется в этом говне пальцем и говорит "Я сделалъ", а девы уебывают с проекта, потому что саппортить это говне просто нет сил. Остаются только джуны, которые рады что хоть так вкотились, но не могут самостоятельно разобраться (и не потому что они тупые, а потому что пиздец) и , блядь, кокитектор им советует почитать хед фёрст. А дальше гроб-гроб-кладбище-пидор и кокитектор тоже уходит разваливать очередной проект.
Хуйню несёшь. Ну то есть как, в принципе всё правильно, только в кал код превращается, когда джуны(да вощемта и сеньёры есть такие) начинают хуячить по принципу "ой, у меня тут нулпоинтер, оберну ка я его ифом", не разобравшись проблеме. А чтобы разобраться в проблеме, нужна таки какая-то экспертиза или хоть какое-то понимание. А где его взять? В 2019 году то? Ну хуй знает, может на заборе где-то написано "рэп - кал", в тех окраинах можно поискать.
Что-то читать надо, в любом случае. Надеяться, что к тебе придётся добрый дядя и всё объяснит - это хуита из детского сада. Как правило, если джун не справляется и не учится, он остаётся джуном ОЧЕНЬ на долго. Через пару лет мидла дают, за выслугу лет, так сказать.
И да, это не роль архитектора бегать и говорить "ой а давай ка тут спагетти код перепишем". Архитектор говорит, что нужен компонент, например, который будет делать вот это. И дальше уже всё идёт от тимлида/сеньёров.
Ну и из своего опыта скажу, что менторить джуна, который пришёл из джава-школы и сидит ждёт пока ему всё объяснят - работа не благодарная. Нахуй не нужно, пошёл нахуй. Раз сказал книжку почитать, два, а на третий просто послал юниттесты писать, или хмл какой править.
ахахахахахаххахахахахахахахахахахахахахахахахахахахахахааххахаахахахахахаахахаххаххахахахахахахахахахахахахахахахахахахахахахааххахаахахахахахаахахахахахаххахахахахахахахахаххахахахахахахахахахахахахахахахахахахахахахааххахаахахахахахаахахахахахаххахахахахахаххаххахахахахахахахахахахахахахахахахахахахахахааххахаахахахахахаахахахахахаххахахахахахаххаххахахахахахахахахахахахахахахахахахахахахахааххахаахахахахахаахахахахахаххахахахахахахахахахахахахахахахахахахахахахааххахаахахахахахаахахахахахаххахахахахахахахахахахахахахахахахахахахахахааххахаахахахахаха... нет.
>Раз сказал книжку почитать, два, а на третий просто послал юниттесты писать, или хмл какой править.
лооооооооооооооооооол чувак, ты точно работаешь на призводстве?
>Через пару лет мидла дают, за выслугу лет, так сказать.
Охуеть блять маняфантазии. Через пару лет тебя нахуй сокращают.
Такие-то фантазии про СТРОГОГО НО СПРАВЕДЛИВОГО синьёра-кокитектора, который левой рукой отправляет читать хед ферст, а правой новых суперперспективных гребцов набирает, ибо старых он отправил иксэмэльки править.
Ну тут он прав, в Т-Системс, вроде бы, чтобы уволили, надо сделать что то совсем экстраординарное, типа набить ебало кокитектору
я так понял, чувак маняфантазирует про своё светлое будущее, ибо его взяли в лабу 2 месяца назад
блять, мемное на 100% видео. если бы оно появилось в сети в эпоху маввовости производства мемов...
Если ты работаешь в мелком шараше из 3 землекопов - да, могут и уволить, наверное, а из больших аутсорсинговых контор, где в общем-то самые деньги сейчас, никого не увольняют в принципе. Переводят с проекта на проект и т.п. В некоторых конторах есть даже практика СКАМЕЙКИ запасных, когда девелопер просто сидит в ожидании проекта и ничего не делает - в епаме том же. Бодишоп, хуйли.
>если девелопер не просто макакич с клавиатурой, но может и грейдловские скрипты подмандить
Девелоперы, которые не разбираются в зависимостях, Jenkins, Linux – это просто пиздец какое позорище.
Ну, блять, тут спорно. Дженкинс, да и пердолинг с линуксом, это всё же для девопсов а.к.а. одминов работа. Хоть как-то разбираться, конечно, желательно, но не обязательно. Да и этой хуйне проще обучиться.
На первом месте с зарплатой от 574 тысяч рублей до вычета НДФЛ оказалась позиция врача — акушера-гинеколога-репродуктолога в Москве. По 500 тысяч в месяц работодатели готовы платить техническому директору и менеджеру по продажам нефтепродуктов в столице, а также финансовому директору во Владивостоке. Замыкает первую пятерку самых «дорогих» вакансий Python developer в Москве с зарплатой $4 тысячи на руки.
В десятку предложений с самыми высокими вознаграждениями также вошли позиции командира воздушного судна, директора по рекламе и маркетингу, коммерческого директора, Senior Java Developer и стоматолога-ортопеда.
https://www.bfm.ru/news/404235
Жабоиндусов опускают на самое дно, к другим компилируемым языкам вроде C++ и Delphi, с чем мы их и поздравляем.
Вот прикол будет, когда PHP'шники начнут получать больше и надсмехаться над аутистами, ебущимися с багами Спринга.
> В десятку предложений с самыми высокими вознаграждениями также вошли позиции командира воздушного судна, директора по рекламе и маркетингу, коммерческого директора, Senior Java Developer и стоматолога-ортопеда.
Но опущен оказался только ты, безглазый шизик.
Фронтендомакак нет и на том спасибо.
Если я делаю например спринг бут(что уже ахуенный чит) + ангуляр2 чем он мне поможет?
в т системс уебаны и работают, это сразу видно, так как т системс ничего сделать не могут.
Это генератор проектор, написано же, блять.
Чтобы каждый раз не придумывать авторизация, интеграцию с БД и всякие кэши. Чтоб не писать одни и те же гредловские скрипты - создаёшь проект джипстером и отдыхаешь.
+ у него есть ахуенный JDL, который позволяет генерить весь круд.
Ну и сразу прод/дев профайлы настроены. Для микросервисов есть годная реализация еврики и спринг клауд конфига, акчуатора и т.п.
Ваще оч крутая тема.
Толсто.
>Для микросервисов есть годная реализация еврики и спринг клауд конфига, акчуатора и т.п.
Хуя, а мне тогда что писать?
Бизнес логику, ёпт.
Ох ебать. А я это все руками хуярил. Пойду скачаю посмотрю.
Уноси свой кривой костыль.
>>25718
>>25719
Ладно, допустим, возвращаю false, но в самом методе (который защищен @PreAuthorize) тоже надо по id искать, а спринговские репозитории возвращают Optional, который в данном случае не имеет смысла, потому что я уже проверил существование объекта в эвалюаторе. В Optional писать сразу get без проверки?
Но в PermissionEvaluator уже проверили, что объект существует и вернули true, а значит репозиторий просто вернет объект из кэша
Можно сделать через optional.orElse(...) или orElseGet(...) вернёт либо значение из опшенала, либо чё скажешь, если пусто. Ну или можно варнинг засапрессить на уровне метода, лол.
Напишешь сразу get и сонар и тому подобная хуйня скорее всего ебанет тебе критикал или мейджор
Их в работе кто то юзает вообще?
@param,@return и т д?
>>25072
Короче, написал я логику своего КрУДа в Джаве.
Есть менеджер библиотеки, имеющий списки книг и читателей (пользователей). Менеджер создаёт, изменяет и удаляет книги и читателей (создание объекта одновременно заносит объект в список). Книга содержит информацию о том, у какого читателя она, а читатель содержит информацию о том, какие книги у него есть.
Вызов метода выдачи книги пользователю в менеджере одновременно заставляет книгу прописывать своего читателя, а читателя записывать книгу себе в список. У книги есть дата выдачи (обнуляется при возврате в библиотеку), от неё считается штраф по дням.
Штраф рассчитывает менеджер, просто перебирает все книги читателя и проверяет, какие просрочены, пересчитывает заново общий штраф и назначает читателю (можно прописать и отдельный штраф за каждую книгу).
Теперь к этому всему нужно прикрутить взаимодействие с MySQL через Hibernate (сливать списки пользователей и списки книг в database, вызывать их из database), и веб-интерфейс через Spring (вносить данные книг и пользователей).
Всё правильно понимаю?
Что упустил?
Пытаюсь разобраться в заполнении массива.
Почему в первом случае получаеться код - понятно.
Нашел в гугле решение, но как оно работает понять не могу. '0' - что дает этот нолик?,
https://www.cs.cmu.edu/~pattis/15-1XX/common/handouts/ascii.html
Там же объясняется что даёт "— '0'" нолик даёт 48
Есть у меня кнопка, которая перекидывает на hui/pizda/stats?catalog={catalog}.
catalog - переменная, а потому может иметь много значений, писать полный url не вариант.
RequestMapping ловит hui/pizda/stats и ему похуй что там написано дальше. Но теперь мне понадобилось добавлять инт в конец, т.е чтобы кнопка кидала hui/pizda/stats?catalog={catalog}/1 и я ловил вот этот инт последний. Но сколько бы я не пытался, сделать аля @RequestMapping(value = "{number}", method = RequestMethod.GET)
И я так же не могу поставить "stats/{number}" и прочее, ведь там есть ?catalog={catalog}. Как мне быть? Как словить вот этот инт в конце? Он тоже может быть переменной потому писать просто 1 не вариант.
Вообще без вариантов? Просто мне только в конец добавить надо, а менять в середине или ещё где похерит всё остальное ибо остального дохуя
Пасибо, попробую на РАБоте и завтра отпишу
Создал приложение в JavaFX с тремя элементами: текстовое поле для ввода числа, кнопка "подтвердить" и лабель для отображения результата.
К кнопке "подтвердить" привязан слушатель, в теле которого и вычисляется результат по формуле.
Вопрос: как я могу использовать один этот графический интерфейс для многих приложений, но с другими формулами в теле слушателя? Конечно, можно просто скопировать и вставить код, переписав формулу в теле слушателя, но я ищу объектно-ориентированный метод.
Сделай интерфейс, который будет реализовываться слушателем, и подменяй слушателя через полиморфизм.
Спасибо. А можно ли сделать абстрактным этот JavaFX-класс с кнопками и лабелями, оставив тело слушателя нереализованным, унаследоваться от этого класса и реализовать слушателя? Это будет правильнее?
Не знаю что за JavaFX-класс, если ты про gui, то его лучше делать через fxml файл.
Первая ссылка в Гугле, карл
Идею не предлагать.
Notepad++
VSC
щас бы лучшую и единственную полнофункциональную иде для жабоэкосистемы не предлагать....
Джавадок в 2019 пишут только ебанаты.
Первый признак, что код уебанский - джавадок и миллионы комментариев.
Да, с ОСА на джуна возьмут без проблем.
>Теперь к этому всему нужно прикрутить взаимодействие с MySQL через Hibernate (сливать списки пользователей и списки книг в database, вызывать их из database), и веб-интерфейс через Spring (вносить данные книг и пользователей).
>Всё правильно понимаю?
Нахуй мускл, для девелопмента используй H2. Ну и чтоб версию базы контролить прикрути liquibase. В спринге это всё изи, репозитории тока создать нужно будет и аннотах накидать туда-сюда. Хибер нахуй не нужен, спринг дата даёт абстракцию на ним - читай в ту сторону.
>hui/pizda/stats?catalog={catalog}/1
Хуита какая-то, работать не будет, если уж хочется в угле всё передавать, пределай на hui/pizda/stats/catalog/{catalog}/1.
Кстати, почему в Джаве так много костылей и велосипедов?
Причём тут спринг? У тебя формат УРЛа из жопы.
Это такой тролинг? На сраковерфлоу пишут типо наоборот надо писать причем так, как если бы это все читал маньяк-убийца, который знает где ты живешь, и которому завтра сдавать проэкт.
Картинка не открывается на локал хосте.
Беру в идее в хтмл прописываю нормальный путь, хуевый путь, картинку кидал уже и в статик сурс проекта, в папку с хтмл файлом, дописывал перед путем локалхост и номер порта, и многоточие, все равно одна хуйня выходит. В пути есть рузке буквы и заглавные тоже( это если полный путь указывать), а ещё ругается на двоеточие(:) как фиксить
Просто картинку без хтмл файла я могу открыть хостом, прописав путь, но в хтмле этот путь почему-то не пашет
Это не про джавадок, а про код. 90% джавадока - это срань уровня "этот метод возвращает объект юззера по айди" и метод называется getUserById(...) - к таком коду джавадок не нужен.
H2 это признак девелопера, который пишет нормальные интеграционные тесты, а не хуиту, которая сама себя тестирует.
Он же про нетбинс не писал вроде.
Таких не бывает. Всё на бумаге.
Ну хзхз, Мартин в чистом коде писал типа чем меньше комментариев, тем лучше, код должен говорить сам за себя и свободно читаться и в редких случаях содержать коментарии
Комменты нужны когда не очевидно, что делает метод, например, или для чего нужен интерфейс - взять тот же жаба.утил.конкуренси - там без поллитра не разобраться и там уместен джавадок, а когда у геттера пишет "yep, its getter" - за это надо убивать.
Комментарии нужны там, где не очевидно, что делает код. ПО коду должно быть очевидно, что он делает, но этого не всегда получается добиться. А для API всегда нужен джавадок.
Просто берешь и хуячишь всякую бессмыслицу, ассерты нуля с нулями, заменяешь моками половину функционала проверяемового кода. Главное - процент покрытия строк, чтобы пройти квалити-гейт.
Ентерпрайз-джава-джун-кун
Для интерсептора надо было
Чем делаешь юниттесты, версия?
нет. вышка нужна, если ты метишь куда-нибудь выше ремесленника
В джаве- да, и при чём чем выше ты забираешься- тем профильнее она должна быть. На нормальных местах без вышки топ-10 вуза даже резюме не будут рассматривать, будь ты хоть трижды Крисом Касперски
А еще, если тебе больше 25, можешь даже не стараться. Ты уже отработанный материал, годный разве что мыть пол под ногами двадцатитрёхлетних сеньёров.
Давчую. Джава энтерпрайз это место для молодых смышленых ребят с вышкой. Если тебе за 25 или ты без вышки, то тут только один выход. В окно.
ну или в жабаскрипт тред
где я неправду сказал, ммм?
Делаю Spring-boot приложение, то одна хуйня не работает, то другая. Разные туториалы, разные ответы на StackOverflow, разные pom.xml, в итоге постоянно что-то не работает.
Кажется, никто толком не понимает, как эту хуйню запускать.
Шапка треда с тобой не согласна.
>>Q: Что скажете за джавараш?
>>Если вкатываешься с нуля, то можешь написать пару "хеллоу ворлдов" до 10 лвла. Дальше курс рассчитан на ленивых и не умеющих читать книжки людей. Количество говнокода зашкаливает, годных задачек пару штук на весь курс. В любом случае решать тебе.
У меня было такое же ощущение пока не написал несколько хеловородов на спринге.
Пиши мок-тесты, юнит тесты к своему говнокоду. Намного будет быстрее и проще пониматься где косяк.
>>>Q: Что скажете за джавараш?
>
>>>Если вкатываешься с нуля, то можешь написать пару "хеллоу ворлдов" до 10 лвла. Дальше курс рассчитан на ленивых и не умеющих читать книжки людей. Количество говнокода зашкаливает, годных задачек пару штук на весь курс. В любом случае решать тебе.
Не согласен.
Я с нуля прошёл весь курс JavaRush (), там:
1. Автоматическая проверка выполнения задач, написания кода. Где-то после 12 уровня идёт уже далеко не hello world, а работа с потомками, мультитрединг, всё познаётся на чистой практике.
2. Я бы посоветовал пройти как минимум 20 первых уровней (Syntax+Core) + уровней 5 от раздела коллекций. Купил подписку Javarush по акции на год за 5 тысяч.
Возьмем метод
void doSmth(int x){
long a = 0L;
for (int i = 0; i<Integer.MAX_VALUE; i++)
a += i*x;
}
запустим 5 раз:
doSmth(1);
doSmth(2);
doSmth(3);
doSmth(4);
doSmth(5);
Если замерим время, то получится (на вскидку) выполнение методов так (миллисекунд)
3000000
2800000
60
60
58
Можете объяснить, что происходит под капотом JVM? Как я понимаю, код скомпилировался в байт-код, JVM запустила один метод, потом второй, некий счетчик увеличился, JVM поняла, что это популярный метод и скомпилировала его в машинный код. Правильно? Ок, но ведь параметр Х каждый раз разный. Как достигается такое быстродействие?
Возьмем метод
void doSmth(int x){
long a = 0L;
for (int i = 0; i<Integer.MAX_VALUE; i++)
a += i*x;
}
запустим 5 раз:
doSmth(1);
doSmth(2);
doSmth(3);
doSmth(4);
doSmth(5);
Если замерим время, то получится (на вскидку) выполнение методов так (миллисекунд)
3000000
2800000
60
60
58
Можете объяснить, что происходит под капотом JVM? Как я понимаю, код скомпилировался в байт-код, JVM запустила один метод, потом второй, некий счетчик увеличился, JVM поняла, что это популярный метод и скомпилировала его в машинный код. Правильно? Ок, но ведь параметр Х каждый раз разный. Как достигается такое быстродействие?
>Лох бы я был, если бы выкинул сотню на какой-нибудь SkillBox или GeekBrain. А тут соотношение цена-качество отличное. Как пару раз в кафе или баре посидеть.
Нет, лучше бы получил вышку до 25 и стал сеньёром в 23.
Оно работает без конкретной имплементации?
Я сейчас немного прихуел когда из контроллера пишет сразу в БД, без каких либо вызовов методов вообще.
@PutMapping(value = "/put/{id}", consumes = {MediaType.APPLICATION_JSON_UTF8_VALUE})
public ResponseEntity<String> update(@PathVariable("id") Long id, @RequestBody @Valid Entity){
return new ResponseEntity<>("User was successfully updated", HttpStatus.OK);
}
Ты отдал деньги за сомнительную хуйню, вместо которой мог просто скачать из интернета книги + иде и учиться ПРАВИЛЬНЕЕ И БЫСТРЕЕ, лол.
Нет не лох кончено же.
Продолжаю писать CrUD.
Написал черновую логику КрУДа.
Создал maven-проект с Spring Boot, всё работает, генерируются динамические web-страницы.
Поставил MySQL, буду подключать Hibernate.
Потом после всего создам веб-интерфейс и импорт из CVS.
Возникли вопросы по архитектуре.
1.
В SQL у меня будет таблица с книгами и таблица с юзерами (считателями). В ООП у меня будут такие поля книги, как
User holder (у кого книга),
Date checkOut дата выдачи (буду считать штраф)
Boolean available (доступность книги) // подумал, что эта переменная не нужна, вместо неё можно просто проверять, является ли holder null
Соответственно, эти переменные (holder, checkOut) предусматривать в таблице book?
2.
У меня в классе User будет поле-список books (книги, которые взял именно этот юзверь). Как это предусмотреть в SQL-таблице users?
>Ты отдал деньги за сомнительную хуйню, вместо которой мог просто скачать из интернета книг
Ты глупый.
Читать книги != писать код и проверять его.
Книгами и ютубом можно заменить лекции и вебинары, но не задачки с проверкой.
Скачать иде и писать код + писать к нему тесты.
Денег отдал ты, а глупый я.
Тебе жава раш за пиар платит чтоль? Ты там СММшикн? Говно же лютое. Сириосли.
Есть гугл, есть стаковерфлоу, баелдунг и куча куча всего.
Это не считая нормальных книг. Которые лучше и полнее чем жава раш/лекции/вебинары.
Нужен только нормальная голова и минимальные знания английского. Если последнго нет, иди сперва учи инглишь, иначе хуй ты чего накодишь.
>Скачать иде и писать код + писать к нему тесты.
Много ты напишешь с нулевыми знаниями. Ну скачаешь ты идейку, напишешь хелло ворд, а дальше что, сразу веб-приложения писать?
Задачки Javarush - хороший источник практики на старте.
>Это не считая нормальных книг. Которые лучше и полнее чем жава раш/лекции/вебинары.
Книги лучше чем лекции или вебинары, но книги не заменяют практику. А полный новичок на этапе перехода от теории к практике и завязнет благополучно.
>Нужен только нормальная голова и минимальные знания английского. Если последнго нет, иди сперва учи инглишь, иначе хуй ты чего накодишь.
Мой английский лучше твоего, мань.
>Мой английский лучше твоего, мань.
Ясно все с тобой.
Кроме жава раша задачек то нет наверное нигде, ладно.
>Кроме жава раша задачек то нет наверное нигде, ладно.
Какие бы альтернативы ты мог посоветовать?
Скажи еще сколько задач скопипастил с гитхаба?
Алсо, сам прошел джавараш, но он был ДО хорстмана и шилдта и мало кто может представить, сколько боли и страданий он мне принес.
Хотя в целом концепция годная.
>Скажи еще сколько задач скопипастил с гитхаба?
99% честно решал сам.
Лез сверяться только в самом крайнем случае когда валидатор зверствовал
>Алсо, сам прошел джавараш, но он был ДО хорстмана и шилдта и мало кто может представить, сколько боли и страданий он мне принес.
Я полностью заменил лекции жавараша Эккелем.
Сделай отдельную таблицу для отслеживания всех выданных книг. И храни там исторические записи с данными: айди холдера, айди книги, дата начала и окончания. Так как только одно состояние может быть актуальным на данный момент, то можно завести флажок, отружающий последнюю строку в таблице, и создать индекс на книгу и этот признак.
Как корректно заммапить это с помощью JPA, я затрудняюсь ответить, но беглый гуглинг показал, что один из вариантов: OneToMany + Filter.
>>27258
Я пробовал курс на udemy, правда по Спрингу. Автор давал задание, а потом в следующем уроке его разбирал. Но, блджад, почему-то он быстро скатывался в говнокод, и я в итоге склоняюсь к тому, что этот курс дропну. Но при этом объяснения касательно самого Спринга давал нормальные.
>>27266
Стоит ли проходить Джавараш, если я получил OCA и более-менее ориентируюсь в базовых вещах? Ты написал про изучение синтаксиса и основ ООП - в принципе OCA на это и заточен.
Если я полностью пройду computer science + software engineering курс от ossu https://github.com/ossu/computer-science затем пройду это https://www.udacity.com/course/android-developer-nanodegree-by-google--nd801 и напишу 10 собственных типовых анроид-приложений для портфолио на основе полученных знаний, я смогу сходу вкатиться на upwork в качестве полноценного middle android developer?
>Стоит ли проходить Джавараш, если я получил OCA и более-менее ориентируюсь в базовых вещах? Ты написал про изучение синтаксиса и основ ООП - в принципе OCA на это и заточен.
Я думаю нет. В Жавараше мне понравились раздел, касающийся работы с потоками, в том числе с архивами, обмен данными, сериализация и класс лоадеры. Но я думаю, всё это можно почерпнуть уже самостоятельно, если ты умеешь писать простые приложения.
Да, конечно, проходи курсы, пиши хеллоуворлды, а я пока буду работать.
>Сделай отдельную таблицу для отслеживания всех выданных книг. И храни там исторические записи с данными: айди холдера, айди книги, дата начала и окончания. Так как только одно состояние может быть актуальным на данный момент, то можно завести флажок, отружающий последнюю строку в таблице, и создать индекс на книгу и этот признак.
Вот неплохой ролик, но автор напихал в pom.xml слишком много зависимостей сразу. Мне бы хотелось разобрать подключаемые технологии по шагам, тем более, что у меня будет информация не только по книгам, но и по юзерам.
Хуй его знает что там JIT устроит, может например вообще все вычисления убрать если ты их не используешь никак. Может векторные инструкции для твоего проца сделать, смотри как анализировать перформанс в выступлениях Шипилева, посмотри про JMH и HROF, perf и вот это https://stackoverflow.com/questions/1503479/how-to-see-jit-compiled-code-in-jvm
>>27379
Если говорить в общем о повторных вызовах, то да, скорость улучшается за счёт оптимизации байткода на лету:
https://stackoverflow.com/questions/16970191/why-does-my-algorithm-become-faster-after-having-executed-several-times-java
Время выполнения из твоего примера скорее всего не в милли, а в микро секундах. Несколько секунд первого прогона говорят о том, что JVM честно выполнила цикл, а 60 мс - о том, что твой цикл был удалён JIT компилятором, потому что результат вычисления нигде не используется. Выведи a хотя бы в System.out.
Но даже учитывая тот факт, что JVM - дохуя умная штука, она не сделает априори медленный код быстрым. Твой цикл в следующем виде:
for (int i = 0; i<Integer.MAX_VALUE; i++)
a += i;
a *= x;
Даёт те же результаты, но работает намного быстрее.
Четя туплю, но как a+= ix; может быть эквивалентно a += i; a = x;
x = 2;
i = 0; a1 = 0; a2 = 0;
i = 1; a1 = 2; a2 = 2;
i = 2; a1 = 8; a2 = 8;
i = 3; a1 = 14; a2 = 22;
>а 60 мс - о том, что твой цикл был удалён JIT компилятором, потому что результат вычисления нигде не используется. Выведи a хотя бы в System.out.
Вот этот момент меня интересовал больше всего и так оно и оказалось. Спасибо.
В цикле я использовал несколько более сложные вычисления, чтобы получить более наглядную задержку. При использовании sout в конце цикла и замерами System.currentTimeMillis() я получил такие цифры:
4003
3985
2949
2942
2980
Приблизительно такой результат я и ожидал увидеть в самом начале.
Мультимап-то нет.
Стрим апи - это библиотека, предоставляющая ленивую коллекцию, стрим (по сути просто итератор в красивой обертке)
Лямда - синтаксический сахар для оборачивания интерфейсов с одним методом
Не так, да?
Прочитал книгу, выучил английский, прописал свои проекты, устроился на работу
Ангуляр2 или Реакт?
Какие то доводы в пользу одного или другого.
Двачую. Самый верный путь. Книг только не 1 а штук 5+ хотя бы. Одна-две из которых по алгоритмам.
Data Structures and Algorithms in java например.
Можно еще Кукбук почитать по джаве.
Это все не считая полной документации фреймворков и всяких вариаций жава ин практис.
По крайней мере это не говнораш, который тут их сммшик пытался пиарить.
Видосы это потеря времени за редким исключением.
О'рейли неплохие, больше так на память не приходит ничего.
Слабый байт. Проследуйте в петушинный угол.
Ах да, забыл сказать - я начинал писать на сервлетах, соблюдая mvc. Потом узнал, что такое Spring, Hibernate, Angular 2, React, Redux и тд. И вот потом уже Spring Boot.
Анон ебать ты гений. Охуенное тебе человеческое спасибо.
Я достиг 15 лвл на джавараше и заебался ним (ну чисто не прёт). Решил попробовать твою ссылку - проебался 2 суток и чуть не охуел пока не сделал 1 задачу на написание хэлоуворлда.
Установил этот ебаный CLI, пришлось зарегистрироваться в Gitlab и Github, запилить Gradle (IDEA у меня уже была), запустить там тест, разобраться с TUTORIAL.md - короче заебался конкретно. И хэлоуворлд там ни хуя не System.out.println.
Короче пока скачал исходники, пока закачал решение обратно через командную строку - чуть не ебанулся. Но зато в конце просто гением себя почувствовал!
ЧСВ выросло до 20лвл. Буду жать дальше.
Огромнейшее тебе человеческое спасибо значит.
Angular - самодостаточный фреймворк
React - библиотека, которой нужны другие библиотеки
Так же Angular имеет привычную java программисту layer-ную структуру
там всё фри. алсо один из майнтейнеров жава трека шестнадцатилетний пиздюк, который только мечтает о трудоустройстве
будущий 23-ий сеньёр?
btw, через три года на веб галере с выполнением заказов от клиентов аля "нужно собрать стату по этому говну с сайта и потом в пдф выгружать" и "прикрути мне сбор статы по кликам от жопы до шеи и потом отфильтруй" можно стать синьёром?
мимо 20-й джун.
Так ты задание читай правильно.
>Write a function that returns the string "Hello, World!".
Написать метод, который возвращает строку "Hello, World!".
Пишу, значит, CruD по туториалу для Spring MVC (в туториале приложение обращается к серверу TomCat).
https://www.youtube.com/watch?v=e7swABdqOS4&feature=youtu.be&t=165
Но сам я начал с использованием только Spring.Boot (has a complete Tomcat inside).
Остановился на этапе, где автор туториала прописывает mvc-dispatcher-servlet.xml
1. Сижу и думаю, какую зависимость добавить в pom.xml (и какие файлы создать), чтобы создавать веб-страницы через Spring.boot?
2. Или же лучше не использовать Spring.boot, а использовать Spring.MVC и обращаться к запущенному серверу TomCat?
>Двачую. Самый верный путь. Книг только не 1 а штук 5+ хотя бы. Одна-две из которых по алгоритмам.
>Data Structures and Algorithms in java например.
>Можно еще Кукбук почитать по джаве.
>Это все не считая полной документации фреймворков и всяких вариаций жава ин практис.
>По крайней мере это не говнораш, который тут их сммшик пытался пиарить.
Токсичный студентик, который гордится своим intermediate-английским.
>2 - лучше понять spring, перед тем как лезть в boot
Я так понимаю, Spring.boot многое берёт на себя, в чём лучше разобраться самостоятельно?
Spring Boot берёт на себя конфигурацию приложения.
Если заглянуть внутрь аннотации @SpringBootApplication, то там внутри будет аннотация @EnableAutoConfiguration, которая и проворачивает всю магию. При старте приложения Spring сканирует зависимости и создаёт экземпляры конфигурейшен-классов по умолчанию.
Например, из дебаг-лога:
H2ConsoleAutoConfiguration matched:
- @ConditionalOnClass found required class 'org.h2.server.web.WebServlet' (OnClassCondition)
- found 'session' scope (OnWebApplicationCondition)
- @ConditionalOnProperty (spring.h2.console.enabled=true) matched (OnPropertyCondition)
Spring задетектил, что я использую
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
Поэтому создал Configuration-класс с настройками по умолчанию. А именно, БД работает в in-memory режиме, а Hibernate настраивается так, чтобы автоматически при старте создавать схему из Entity-классов.
А вот обратный пример:
JooqAutoConfiguration:
Did not match:
- @ConditionalOnClass did not find required class 'org.jooq.DSLContext' (OnClassCondition)
Я не использую JOOQ, поэтому он не конфигурируется при старте приложения.
>1 - гугли Spring Boot web starter
Суть в том, что я уже подключил Spring Boot web starter в pom.xml, у меня запускается Embed tomcat.
Теперь мне нужно вместо hello world создавать hmtl-страницу, через которую я буду вбивать названия книг и читателей в MySQL.
Штука в том, что большая часть внятных туториалов на эту тему используют Spring MVC, файл mvc-dispatcher-servlet.xml и сервер TomCat.
Братюнь, ты в начале запусти/потыкай все примеры использования Spring.boot с официального сайта.
Там быстро поймёшь как сделать минимальный проект (без MVC) и запомнишь необходимые для этого 1,5 аннотации.
Дальше ты уже будешь кумекать нахуя MVC и что он добавляет из ништяков!
Ну и соответственно в начале дрочка mysql в консольке, затем jdbc, а после глядеть что там spring предлагает для удобства.
Ещё JSP не забудь, бины прочекай и прочее гавно где xml дрочево
@RestController
public class pdr{
....@RequestMapping("/")
....public String ska(@RequestParam(value="id", defaultValue="42") String id){
........return String.format("<h1>%s</h1>", id);
}
}
Я занимался по туториалу, где всё конфигурировалось в Джаве.
Вот приложение: https://github.com/springframeworkguru/sfg-pet-clinic.
Автор курса при этом сказал, что JSP нахер, сейчас все пересели на Thymeleaf. Вакансий с ним мало, но для приложения на коленке пойдёт - он очень прост и интуитивно понятен. Шаблоны на нём без ошибок можно открывать в браузере.
>что JSP нахер, сейчас все пересели на Thymeleaf
Это для синьоров-помидоров или если повезёт для мидла-повидла!
Тебя как ждуна посадят как обычно на поддержку уже готового проекта.
Я уже понял, что он перемудрил.
Короче, у меня всё просто:
1. у меня есть spring.boot + Hibernate + Servlets
2. у меня есть готовые классы для CrUD (DAO + Service).
Цель: на Embded Tomcat создать веб-форму для внесения данных книг в базу данных.
Подозреваю, нужно что-то добавить в папку main/resources
Нашёл официальный проект, использующий минимум:
Spring.boot + Thymeleaf
http://projects.spring.io/spring-petclinic/
Я так понимаю, что это именно то, что мне нужно?
>у меня есть готовые классы для CrUD (DAO + Service).
Для CRUD вообще ниичего писать не нужно. Подключаешь spring-boot-starter-data-jpa, который тянет за собой spring jdbc, hibernate и spring data.
Создаешь интерфейс, наследуешь его от org.springframework.data.repository.CrudRepository, и всё - репозиторий готов. Так же Spring Data имеет генерировать методы по сигнатуре (например, findByNameContainingIgnoreCase создаст тебе метод поиска книг по имени)
Блядь ну куда ты лезишь то???
Начни с простого говна вроде
https://spring.io/guides/gs/serving-web-content/
Там таких хелоувордов дохуя, вот их и разбирай, хули ты лезешь в большой проект если ты с простыми вещами не разобрался!!
Хлебани гавна с хелоувордами вроде таких где Redis и RabbitMQ
https://spring.io/guides/gs/messaging-redis/
https://spring.io/guides/gs/messaging-rabbitmq/
>Начни с простого говна вроде
У меня уже есть простое: реализованный Spring.Boot'ом "hello world" на http://localhost:8080
Мне нужно понять, куда и как двигаться дальше.
>return new ResponseEntity<>("User was successfully updated", HttpStatus.OK)
>из контроллера пишет сразу в БД
Ты шо, ебанутый? Пруф неси, что оно тебе записало в бд.
бамп
Там в тесте был сеттер, который писал в БД. Хибернейт прямо из сеттера без вызова save() пишет. Я его не видел прост.
Но пока дебажил это были минут 20 ступора: как так не может быть и т.д. Даже суда запостил.
Не слушай долбоеба. Петклиник - это легендарный демо-проект, который как раз являет собой полноценное простое боевое приложение. Другое дело, что по шагам они не объясняют, а предлагают тебе самому во всем разобраться. Советую присмотреться к https://github.com/spring-petclinic/spring-petclinic-reactjs как к хайповому стеку и делать свою библиотеку по аналогии. Пляши от контроллеров.
Пруфов чего? Что сеттер @Entity пишет сразу в базу?
Не думал об этом с этой стороны. Почему то те кто пишут на джаве предпочитают ангуляр. Его MVC там все дела.
Спасибо тебе! Я так и подумал, что Петклиник - это именно то, что мне нужно.
Пока я не следующем этапе:
1. Я собираю с нуля простейшие Spring.boot веб-приложения, в которые используют Контроллер и шаблоны html-файлов (Thymeleaf). Я правда не до конца понял, как Spring.boot выбирает шаблоны из папки Resources. Видимо, как и всё в этом
2. Как я понял, для создания CrUD я могу использовать spring-boot-starter-data-jpa или Hibernate (или их вместе).
В туториале https://youtu.be/e7swABdqOS4?t=165, как я понял, много лишнего, громоздкого и ненужного мне. Проще создать веб-интерфейс на Thymeleaf и связать его с MySQL при помощи boot-starter-data-jpa.
1) C# - 0.1% рынка
2) Дальше ковыряния в байтах ядра или ещё чего ты не пойдёшь, про бизнес-логику можешь забыть
3) Только аутисты могут на работе дрочить микроконтроллеры и прочую хуйню вместо того же вротенда
думаю, после такого ответа средний айсикю жавадебилов в этом треде упал на 10 пунктов
>1) C# - 0.1% рынка
Пятый по востребованности ЯП.
>2) Дальше ковыряния в байтах ядра или ещё чего ты не пойдёшь, про бизнес-логику можешь забыт
Это в крестах. C# как раз ООП, как и Кофе.
>3) Только аутисты могут на работе дрочить микроконтроллеры и прочую хуйню вместо того же вротенда
Опять же, речь про кресты.
Короче, разберусь, как создать html-форму для загрузки данных (о книгах и читателях), потом разберусь с загрузкой в SQL.
Вот честное слово, лучше бы этого говна в джаве не было - одни проблемы от этого.
Жаба это тыпрайз, сервера, мобилки и дестктоп только для извращенцев.
Сольдиез - десктоп. + Юнити.
У жабы рефлект уебищный.
Много чего, особенно корпоративной хуиты.
Я в курсе, чем отличается сет от листа, но мне надо просто положить объекты, а потом забрать их оттуда. Вообще без разницы как.
Если бы ты был в курсе, то таких вопросов бы не задавал, ибо в любой брошюрке по коллекциям - это первая глава.
>Я в курсе, чем отличается сет от листа
Лол
Спросил у одного знакомого выпускника "Алгоритмы и структуры данных знаешь?"
Нет и не надо. В С# уже всё реализовано
1. Автоконфигурация starter-thymelef по дефолту смотрит шаблоны в resources/template. Это можно переопределить но надо пердолить с мавеном
2. Starter, внезапно, и еюзает хибернэйт. JPA - это просто API, а хибер - реализация этого API. Кстати, если встает вопрос юзать JPA API или проприетарные имплементации хибера (EntityManager vs SessionFactory), то выбирать надо в пользу JPA (хотя вроде есть хитрые штуки которые можно пердолить в хибере, но их уже давно никто не юзает)
В туторе юзается чистый спринг, без бута (как деды воевали кароч) и проприетарные методы хибера. Действительно, не нужно по современным меркам, но способствует более глубокому понимаю, что вообще за хуйня происходит
Очередь вообще нигде не используется, да.
Как это фиксить? Идея не показывает красную полоскуобоже!! и не резолвит путь. Хотя все замечательно работает.
Спринг бут2.
В пом.иксимеле что стартер-тимлиф что просто тимлиф разницы никакой.
Например, есть эндпоинт /api/comments/{id}. id должно быть числом. Если я напишу что-то вроде /api/comments/abasbfqwf, то Спринг просто автоматически отправит ответ со статусом 400. А я хочу, например, отправить JSON типа {"message": "Invalid comment id, must be a number"}.
Можно, конечно, сделать так, чтобы метод контроллера принимал строку, потом в методе делать Integer.parseInt(), ловить NumberFormatException и бросать своё исключение, но это идиотизм. Что делать? Писать кастомный HandlerMethodArgumentResolver?
Гугли @ControlerAdvice.
Можно екстиндиться от ResponseEntityExceptionHandler и овверайдить дефолтные методы.
+ сделать свой класс для еррора где прописать вменяемый ответ в виде джейсона.
Возвращать из методов что то типо ResponseEntity<ТвойЕрорКласс>.
Вполне годно для реста.
Для МВС-вебморды можно сделать /error и там сделать шаблонч с надписью все поломалось. Ну и там обработка в контроллере всего этого добра с логированием.
А потом еще все это тестить.
Это так, минимальный вариант.
Это просто пиздец. По запросу thymeleaf template custom folder гугыль выдал решение в первом же вопросе. Нахуй не нужны такие вкатывальщики
Я знаю про ControllerAdvice, проблема в том, что я не знаю, откуда бросать исключение. Мне нужно либо самостоятельно проводить валидацию параметров запроса (до того, как они попадут в контроллер), либо каким-то образом отслеживать, что вот по такому-то эндпоинту было выброшено такое-то исключение и бросать своё исключение в случае необходимости. Думаю, для первого варианта подойдёт кастомный HandlerMethodArgumentsResolver.
@Valid на параметре в контроллере.
На классе модели ставить параметры валидации.
javax.validation.constraints* Аннотации отсюда.
Исключения кидаешь из методов из сервис леера.
В контролер эдвайсе что то типо:
@ExceptionHandler(YourException.class)
public ResponseEntity<Object> handleYourException(...){
логируешь тут, вовзращаешь ентити
}
Как так так.
Это не кастомный фолдер. Это папка внутри стандартных темплейтс.
В контролере папка даже не указана, просто возврат имени вьюхи.
Все работает. Просто Идея показывает красную полоску + не дает авто заполнения пути до папки.
Spring.boot+JPA+Hibernate+Thymeleaf+MySQL CrUD
Библиотека с книгами, книги раздаются читателям.
Ты знаешь что такое jsp? Как ты в статику собираешься динамику добавить, без использования Ajax?
>Ну и как это без js сделать?
Без JS никак.
>нахуя мне вообще jsp тогда нужен
JSP — это шаблон, который используется для начального рендера страницы.
Мож идею сперва обновить. Я чет год уже на одной и той же версии. Хуй знает кароч.
>Я надеялся сделать без js, а то нахуя мне вообще jsp тогда нужен, можно же просто html юзать.
Ну как бы да. JSP не нужны, можешь только в качестве шаблонизатора использовать.
Ну просто статичную страничку то отобразить можно. Ток частичную предзагрузку не сделать. И 2 реквеста пост и гет поддерживаются.
>>28188
>>28192
Первый раз сел за jsp из-за того что в тестовом задании было такое условие.
Была мысль что если там можно использовать жаву, то и данные можно динамически добавлять используя только её. Оказалось что нет. ну как бы и хуй с ним, сделал как сделал уже
Теперь только один вопрос остался - зачем оно надо если есть js + html? Чтобы охуеть от того как можно?
Б Э К В А Р Д К О М П А Т И Б И Л И Т И
Почему не тимлиф? Зойчем жсп то. Им кто то пользуется в реальной жизни вообще?
Да и тимлифом не пользуются.
Не ебу, какое тестовое прислали так и говорю. Мб там у них какой-то старый проект надо поддерживать.
Если бы я знал как с ними работать, то да. В частности как сделать регистрацию\аутентификацию
Как и всё остальное. Тебе в сервлет пришёл хттпРеквест, ты из него выдернул что надо, и погнали.
В этом плане сервлеты и фильтры простые, как палка.
Э, ало, ето интерпрейз.
JSP и подобные технологии используются для динамического рендера html-страницы на стороне сервера. JS в таких приложениях используется для динамического обновления страницы на стороне клиента. Это довольно просто, удобно и дёшево.
Писать фронт-энд чисто на JS, конечно, можно, и сейчас все так и делают. Но там тоже есть свои нюансы. Например, если у тебя бэк на Джаве, а фронт на JS, то для того, чтобы прикрутить тот же SSR, тебе придётся как минимум поднять ещё один NodeJS-сервак для фронт-приложения. Ну и да, добро пожаловать в удивительный мир бабелей, вебпаков и прочих JSSов.
Тут всё зависит от потребностей приложения. Если у тебя "богатый" клиент с охуенно сложной логикой и кучей динамических элементов, то однозначно лучше писать его на JS-фреймворке. Если же у тебя простенькая веб-морда, то JSP/Thymeleaf с жиквери и бутстрапом вполне может хватить.
Jsp было создано для того, чтобы вынести логику представления.
Jsp компилируется в сервлет.
Чтобы разработчики не писали и html и business logic в сервлетах, придумали jsp, которые позволяют разделить ответственность.
Panama/Amber/Loom/Valhalla?
Да чо ты доебался до этого таймлифа? Вообще не слышал, чтобы он где-то юзался. Или JSP/JSF или уж тогда, по-человечески, на каком нибудь ангуляре
Просто в коре уже собаку съел но на собесе начинают ебать мозги по JTA спрашивать за сервлеты, спринги.
Это вообще нормально?
1. Есть pom.xml, в котором прописаны:
spring-boot-starter-web
spring-boot-starter-data-jpa
mysql-connector-java
hibernate-core
hibernate-entitymanager
2. Есть model (book) с аннотацией @Entity, переменные с аннотациями @Column
@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
3. Есть репозиторий BookDAOImpl @Repository, пример метода:
private SessionFactory sessionFactory;
@Override
public void addBook(Book book) {
Session session = this.sessionFactory.getCurrentSession();
session.persist(book);
}
4. Есть сервис BookServiceImpl @Service, пример метода:
@Override
@Transactional
public void addBook(Book book) {
this.bookDAO.addBook(book);
}
MySQL запущен, в application.propetries
database=mysql
spring.jpa.hibernate.ddl-auto=none
spring.datasource.url=jdbc:mysql://localhost:3306/bookmanager
spring.datasource.username=нутыпонел
spring.datasource.password=нутыпонел
При запуске ругается на:
1) The server time zone value 'RTZ 2 (çèìà)' is unrecognized or represents more than one time zone.
В Таблице есть графа
2) org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource
3) Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
4) Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
Цель: подключить моё приложение на Spring.Boot к MySQL
Вроде всё правильно делаю?
1. Есть pom.xml, в котором прописаны:
spring-boot-starter-web
spring-boot-starter-data-jpa
mysql-connector-java
hibernate-core
hibernate-entitymanager
2. Есть model (book) с аннотацией @Entity, переменные с аннотациями @Column
@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
3. Есть репозиторий BookDAOImpl @Repository, пример метода:
private SessionFactory sessionFactory;
@Override
public void addBook(Book book) {
Session session = this.sessionFactory.getCurrentSession();
session.persist(book);
}
4. Есть сервис BookServiceImpl @Service, пример метода:
@Override
@Transactional
public void addBook(Book book) {
this.bookDAO.addBook(book);
}
MySQL запущен, в application.propetries
database=mysql
spring.jpa.hibernate.ddl-auto=none
spring.datasource.url=jdbc:mysql://localhost:3306/bookmanager
spring.datasource.username=нутыпонел
spring.datasource.password=нутыпонел
При запуске ругается на:
1) The server time zone value 'RTZ 2 (çèìà)' is unrecognized or represents more than one time zone.
В Таблице есть графа
2) org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource
3) Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
4) Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
Цель: подключить моё приложение на Spring.Boot к MySQL
Вроде всё правильно делаю?
Братюнь, если ты не можешь готовый проект собрать, и вместо гугления ищешь совет на дваче, по просто сделай шаг назад.
>spring-boot-starter-web
>spring-boot-starter-data-jpa
>mysql-connector-java
>hibernate-core
>hibernate-entitymanager
Ты вначале с каждой из этих залуп в отдельности поебись!
К примеру возьми только "spring-boot-starter-web" и запили с этим хелоуворд. Так ты поймёшь кишочки и что под капотом...
Постепенно усложняй проект добавляя разную хуиту.
Тыж пограммист а не макака!
>К примеру возьми только "spring-boot-starter-web" и запили с этим хелоуворд.
Ну скажем с этим я уже разобрался.
Отдельно Spring.boot-проект с spring-boot-starter-web запускает эмбдед Кота и генерит hello-world. От этого можно переходить к созданию темплейта для формы внесения данных.
Но у меня проблема именно с SQL возникла, хотя по логике проекта это должно работать.
>генерит hello-world
>От этого можно переходить к созданию темплейта для формы внесения данных
А что тебе мешает вместо хелоу ворда запилить форму внесения данных? Без всяких там темплейтов?
>private SessionFactory sessionFactory;
Я почитал документацию и понял, что мне нужно:
1. Дропнуть Hibernate из pom.xml (Spring.boot и так запустит Hibernate), достаточно просто JPA.
2.Вместо SessionFactory sessionFactory использовать EntityManagerFactory.
Сегодня вечером освобожусь, попробую переписать всё.
Ты блядь без него сделай в начале, оптом с JSP а потом если мало будет Thymeleaf-ом подтирайся!
Вот ты сука тупой дебил!
Посмотри сколько вакансий на хх с JSP и Thymeleaf!
>Ты блядь без него сделай в начале,
Ну и как ты сгенерируешь динамическую таблицу без какого-либо инструмента вроде JSP, Thymeleaf или Angular?
>Вот ты сука тупой дебил!
Плис, не визжи.
4 аннотации
@SpringBootApplication
@RestController
@GetMapping
@RequestParam
2 два класса
main
controller
>Контроллер функция которая return String.
>И в этот String вместо
>"<h1>Hello World!</h1><p>Я у мамы пограммист!</p>"
>Хуярь что там тебе нужно, <form action>, <input>, <хуй>, <пизда>.
>Динамическую таблицу через StringBuilder сообразишь наверное как сделать!
Окай
Делаю через пом:
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.3.1-1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.webjars/popper.js -->
<dependency>
<groupId>org.webjars</groupId>
<artifactId>popper.js</artifactId>
<version>1.14.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.webjars/bootstrap -->
<dependency>
<groupId>org.webjars</groupId>
<artifactId>bootstrap</artifactId>
<version>4.1.1</version>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>webjars-locator</artifactId>
<version>0.30</version>
</dependency>
И в самом хтмл файле :
<link rel='stylesheet' th:href="@{/webjars/bootstrap/css/bootstrap.min.css}">
<script th:src="@{/webjars/jquery/jquery.min.js}"></script>
<script th:src="@{/webjars/popper.js/umd/popper.min.js}"></script>
<script th:src="@{/webjars/bootstrap/js/bootstrap.min.js}"></script>
Оно работает но как то криво пиздец.
Например кнопочки
<button type="button" class="btn btn-success">This is a success button</button>
Выглядят нормально
Навбар выглядит уебищно. Если соеденять с тегами тилифа то ломается нахуй вообще.
Делаю через пом:
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.3.1-1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.webjars/popper.js -->
<dependency>
<groupId>org.webjars</groupId>
<artifactId>popper.js</artifactId>
<version>1.14.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.webjars/bootstrap -->
<dependency>
<groupId>org.webjars</groupId>
<artifactId>bootstrap</artifactId>
<version>4.1.1</version>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>webjars-locator</artifactId>
<version>0.30</version>
</dependency>
И в самом хтмл файле :
<link rel='stylesheet' th:href="@{/webjars/bootstrap/css/bootstrap.min.css}">
<script th:src="@{/webjars/jquery/jquery.min.js}"></script>
<script th:src="@{/webjars/popper.js/umd/popper.min.js}"></script>
<script th:src="@{/webjars/bootstrap/js/bootstrap.min.js}"></script>
Оно работает но как то криво пиздец.
Например кнопочки
<button type="button" class="btn btn-success">This is a success button</button>
Выглядят нормально
Навбар выглядит уебищно. Если соеденять с тегами тилифа то ломается нахуй вообще.
Хтмл / цсс ни разу не трогал вообще. Только С и java и питон.
у каждой пики есть метод void cutHuy(Huy h);
как срубить все хуи? то есть первой пикой первый хуй, второй пикой второй хуй, и т.д. Желаю читаемых или модных решений через стримы. Не желаю это делать так:
int counter = 0;
for (Pika pika: piki) {
pika.cutHuj(huji.get(counter));
counter++;
}
Что посоветуешь, Антоха?
static <?> pickRandom(<?>[] array){
int idx = new Random().nextInt(array.length);
return array[idx];
}
Пересобрал проект через мейвен и все стало норм.
Странное дело.
Можно теперь прям копипастить с сайта бутстрапа и все 1 в 1.
Все таки вебджар локатор хорошая весчь.
Спасибо, Антоха! Нефти тебе!
>одинаковой длины
for (int i=0; i < length; i++) {
piki.cutHuy(huyi);
}
И не надо выебываться со стримами.
Так блядь, двач жрет квадратные скобки.
Безопасностью. Кто то вместо String поставит Integer и такой код скомпилируется.
Да та же хуйня.
+ Я ща сидел правил хтмл под бутстрап. Глаза вытекают нахуй.
Как люди вообще работают верстальщиками это же пиздец.
>zalando problem
Загуглил. Позже обязательно поковыряю.
Но уже каштомных хендлеров наклепал под вменяемые ответы в жейсоне. Так что пусть будет.
int[] sex_positions = {1, 2, 3, 4};
int[] [] shalava_stats = { {1, 2, 3}, {1}, {4, 5, 6, 7}, sex_positions};
Хочу создать массив массивов разной длины. Ещё было бы охуенно, чтобы можно было при инициализации вкладывать другой уже инициализированный массив. Или мне ебаться со списками? Но я не знаю, как они сходу заполняются при инициализации так одной строчкой.
Как тебе и посоветовали лучше не выебываться, но если сильно хочешь пофункциональничать, то нужен zip, вот только беда - его не завезли, написать его не сложно, но в стандарт он не вошел.
он автоматически приведёт int[] к List<Integer>?
https://habr.com/ru/post/334118/
Читай дальше, неосилятор:
>Тут обычно следует реплика: «Теперь вы можете делать всё с помощью аннотаций! Больше никакого XML!». Здорово, когда не нужно программировать на XML, но аннотации — это всё ещё магия. Пока вы не запустите приложение, вы понятия не имеете, свяжется ли оно правильно. И даже потом вы не знаете, правильно ли оно связалось; вы всего лишь знаете, что оно связалось.
>Про аннотации в самой же статье сказали, а про магию — ну извините, это инверсия. В любой инверсии вам придется знать ЧТО именно делает каркас к который вы встраиваетесь — это не магия спринга это магия DI.
Если ты сам не знаешь, что ты пишешь, то фреймворк тебе тут не поможет.
Процедурки.
Не все спринговые поделия умеют в жава конфигурацию.
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/
Например у ВТБ платежная система сделана на жаве. Там прям видно жсп расширение у вьюхи.
1. Spring.boot без дополнительных фремворков позволяет создавать динамические веб-страницы.
2. Существует ряд фреймворков для создания веб-страниц, включая JSP, Thymeleaf, Angular.
Посоветуйте, пожалуйста, хороший туториал по созданию динамической веб-страницы базовыми средствами.
Ну есть 2 варианта:
1. Рендер на сервере и возврат html-страницы клиенту. Для этого используются обычные контроллеры + JSP или Thymeleaf для шаблонов.
2. Rest API (@RestController) на сервере + JS-клиент, который страницу динамически заполняет данными самостоятельно.
Если не знаешь js и его фреймворков, выбирай первый вариант.
> динамические веб-страницы
Это когда йяваскрипт у тебя в браузере ебошит!
На йаваскрипкте дохуя фреймворков всяких, пока не лезь туда!
Спринг.бут выплёвывает тебе в браузер то что ты ему скажешь.
JSP и вторая хуита позволяет "удобнее готовить хуиту" для отправки тебе в браузер.
1) чекай HTML, CSS, JavaScript и отдельно тренируйся делать странички.
2) Java и spring.boot дрочи параллельно.
>Спринг.бут выплёвывает тебе в браузер то что ты ему скажешь.
Мне не вполне понятно, как заставить Спринг.бут выплевывать что-то сложнее hello world. Все туториалы, на которые я натыкаюсь, используют Thymeleaf.
Thymeleaf с пол пинка не особо приятен попробуй Mustache
хтмл не нужно! плюй json'оми
1) исходный код о его существовании знать не должен, никаких @Inject;
2) конфигурять его исключительно через XML. Другие форматы, если такие вообще бывают, тоже рассматриваю, главное, чтоб не через Java/другой ЯП, потому что конфигурацию будет писать конечный пользователь.
Очень хочу Spring, но можно ли его включить в проект с минимальными зависимостями, чтоб работал только IoC?
Попробуй \bin добавить.
>Очень хочу Spring, но можно ли его включить в проект с минимальными зависимостями, чтоб работал только IoC?
Да.
Один.
Кто-нибудь может объяснить мне эту магию свинга?
Есть JTextArea с JScrollPane, а так же кнопка, в обработчике которой вызывается метод textArea.getDocument().remove(0,2) при этом вертикальный скролл сразу же смещается наверх, причем, если в textarea изменить/вставить/удалить символ, то метод remove не дергает скролл. Wtf?
https://pastebin.com/5bUcXLzD
Как я понял, OAuth просто предоставяет данные о пользователе не предоставляя его пароль, тип какой нить гугл говорит этот челик заебца, ему можно верить. Смысла делать смену пароля действительно нет, так как пароль контролируются ресурсом, предоставлящим данные
Как в XML передать некие значения из явы? Чтоб не из properties-файла, а реально из кода.
beanFactory = new DefaultListableBeanFactory();
reader = new XmlBeanDefinitionReader(beanFactory);
myMap = new HashMap<String, String>();
myMap.put("aaa", "bbb"); // куда бы этот myMap только вставить?
reader.loadBeanDefinitions(new ClassPathResource("my.xml"));
И вот, в этом my.xml я хочу заюзать value="${aaa}". Как его сделать видимым в XML? Гуглю-гуглю - не найду.
есть определенное нежелание палить некоторые значения в properties-файлах
Хорошо, тогда спрошу то, что мне реально нужно. Как считывать из XML значения env vars? При этом в properties они фигурировать не должны.
Встречается упоминание запилить круд на Spring JDBC.
Что блядь под этим подразумевается?
Использование jdbctemplate? Hibernate?
перерыл stackoverflow, так ничего дельного и не нашел, вся надежда на то, что какой-нибудь сеньор подскажет
Дальше добавлю регистрацию пользователей, управление базой, пользователями, и будет готовая, работающая CRM.
ЧСХ, процентов 90 времени копался в документации, 10% времени писал код. Проследил эволюцию Spring от эпохи множества xml-конфигураций до нынешней эпохи аннотаций. По сути, Spring.boot - это фреймворк для управления... фреймворком Spring. Мне кажется, это всё не очень хорошо. Надо посмотреть, насколько проще эта же задача решается под .NET
Нужно было по чужому примеру делать круд, там бы сразу практические задачи решал, у меня был пример без бута, с сервлетами или хуй пойми как они называются и сразу c jdbc ну и конечно ещё с jsp вот я там говна хлебанул, ебать нахуй, весь стакоферфлоу переебал. И самый лол там ещё и бины были. Конечно я до этого спрингбутовые хелоуворды с оф сайта тыкал, так уже понимал что куда.
>Нужно было по чужому примеру делать круд
Мне важно иметь понимание того, что я делаю, по шагам. Вот, скажем, шаг 1 - зачем он, к чему он ведёт? И так далее.
Ну ты когда проект сморишь ты же код набираешь сам, пока набираешь уже понимаешь, если что меняешь как захочешь, если не получается смотришь ошибки и гуглишь как нужно делать, помимо этого там в спринге одно и тоже можно сделать разными способами и будет работать. Там конечно может есть каноничное решение, но я по быстрому протыкал и понял что и так и так работает.
Стоит ли переходить на linux? Какие плюсы будут с перехода?
Понимаю, что не совсем этот тред, но где еще спрашивать если не здесь.
>Стоит ли переходить на linux? Какие плюсы будут с перехода?
Давно уже убунту бы поставил!
Меньше будешь в игори играть а больше делом заниматься.
Будешь богом консоли и повелителем вима с емаксом!
Как раз задумываюсь над этим. А "богом консоли", я думал богом консолей, ну ладн.
>не получается смотришь ошибки и гуглишь как нужно делать
Вот на это и уходит львиная доля времени.
Foo foo = new Foo();
Bar bar = foo.bar();
Ну если у тебя сервер свой и клиент свой, то делай авторизацию через логин и пароль (user credentials flow). Другие способы (например implicit flow) используются для сторонних клиентов.
Я спрашивал, как регистрацию сделать, просто через rest api? Посмотри изначальный вопрос
Да ебать хоть на чистом Js пиши, это вообще не важно. У тебя есть REST API, а обращаться к нему ты можешь как угодно.
Ага, а потом решил обновится до jdk 11, забыл что там нету javafx и проебался еще час. Зато не десятилетнюю. И какая вообще разница, насколько старыми технологиями выводить окошко с одной картинкой?
Сам себя на 0 делишь.
>там нету javafx
>какая вообще разница
Из-за того что технология старая и бесполезное говно Swing и то лучше её перестали поддерживать и в новых версия её нет. А теперь на пару лет вперёд загляни. К примеру в 15 тоже не будет fx, а у тебя будет. Будешь пердолить легаси на 8?
>её перестали поддерживать и в новых версия её нет
Хуйню несешь. Хоть бы почитал что там с fx сейчас.
>Выпилили из 11, выкинув как отдельный модуль на опенсорс
>МАМ, НУ СКАЖИ ЧТО ПОДДЕРЖИВАЮТ, МАМ!
https://www.udemy.com/java-the-complete-java-developer-course/
какие видосы орейли?
Чем тебя не устраивает отправка обычного POST-запроса с нужными данными? =/
Так-то у Джавы много чего популярного в опенсорсе, я бы даже сказал большинство фреймворков. Те же Спринг и Хибернейт. Так что это не значит, что FX похоронен.
Достаточно MVC-шно? Или лучше метод updateColor перенести в контроллер? И еще запуск приложения через метод init это какая-то хуита, но для FX я не нашел других вариантов.
Неплохо. Австралийский мужик с пика научит Яве 7-8 и чуть-чуть 9, много про SQLite-JDBC, JavaFX, Concurrency, I/O. Про фреймворки там не слова. Это энтрилвл, наверное, но лучше всех бесплатных курсов (с codeacademy и audacity).
Вот здесь можно скачать торрентом бесплатно много курсов с Удеми (не реклама) - https://freecoursesite.com/
Там найди еще курс про Спринг-Java и прочее, что тебе нужно будет. https://freecoursesite.com/?s=spring
спасибо за ответ
https://pastebin.com/jMZtB5eu
Не совсем понимаю почему в invoke нельзя передать prx вместо runs. Как пофиксить?
Error:
В сообщении присутствует слово из спам листа
если нет, то установи. что ты блять как маленький?
А где безопасность?
service()
Он создает новый поток исполнения, создает объекты request responce и передает их соответствующий метод.
>Стоит пытаться?
Ты вакансии чекал что там просят от ждунов?
>java ee
Что из этого знаешь? Бины ебанные?
И где чистый sql?
Я чекал тесовые и обычно все просят круд разной степени сложности, срок дают примерно неделю.
У ты должен знать html, css, javascript на уровне запилить не уродскую форму и сделать валидацию полей (хотя могут попросить bootstrap прикрутить)
Бд обычно просят на jdbc
JSP естественно, для данных могут попросить спарсить из хорошо документированного источника и ОБЯЗАТЕЛЬНО будет какая-то хуита которую ты точно не знаешь!
Там специально подбирают ёбатню где только документация на английском, и таким образом проверяют как быстро ты можешь реальную проблему решать.
а что сейчас модно?
Запили фейк ждуна на хх, с вузиком профильным и минимальной информацией.
Проси тестовое задание на фейк почту.
многие игнорируют, или отказывают но пару тройку тестовый получишь.
>Джуну на жаве нужен фронт? С каких пор?
Хули ты споришь со мной? Внимательно вакансии почитай и тестовые задания посмотри.
>Какое ждбс? Откуда ты вылез блять. Из 2007?
Ты думал ждуна в модный стартап возмут писать на свежем смузи фреймфорке?
А что там в jdbc сложного? Проверить как ждун на чистом sql шпарит
>Хули ты споришь со мной? Внимательно вакансии почитай и тестовые задания посмотри.
Он прав. Никто не просит от тебя ксс-ов. Хватает банального знания выставления <form> для контроллеров.
>Ты думал ждуна в модный стартап возмут писать на свежем смузи фреймфорке? А что там в jdbc сложного? Проверить как ждун на чистом sql шпарит
Да даже и не в модный, нигде чистый jdbc не юзают. Следи за руками extends CrudRepository
мимо
//code
{
//code
Calendar c = Calendar.getInstance();
}
Calendar c = Calendar.getInstance();
//code
Ну и сами вопросы. Оборачивание в скобки даёт нам эдакую вариацию чего-то вложенного, где после выполнение все объекты cg почистит и переменные фсё?
Ну и второй вопрос такое имеет вообще смысл делать? Тип почему бы просто не назвать по другому?
это просто маркирует scope, в котором вся эта хуйня действительна. зачем и почему, придумай сам.
Вы видите копию треда, сохраненную 10 февраля 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.