Это копия, сохраненная 3 августа 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
Какой-то совсем зелёный троль. С приближением каникул таких в прогромаче будет появляться всё больше, к сожалению.
/pr всегда был прибежищем для дурачков и вайтишников, ну и пары процентов залетных спецов. От времени года мало что меняется.
Надо ли открывать книгу для чайников и реально учить все с нуля?
> с JS
У тебя необратимо поврежден головной мозг. Так что придется тебе остаться на долларовом фрилансе на апворке, учить ноду и возможно го, после длительной медитации.
var есть и там и там. Остальное несущественно
React Native
гуи на джаве не нужны
Одной из главных фишек Джавы была обратная совместимость, а теперь её полностью проебали, кек.
починят
веб. По моему субъективному мнению, всякие системы реального времени нельзя переводить на веб, он для этого не подходит
qt, gtk кроссплатформены
Можно через код, в который ты сам подставишь значения из .properties или откуда удобно
Ноль на входе - ноль на выходе.
>Хибернейт можно сконфигурировать через .properties файл или только через хмл? Читал сейчас доки хибернейта и там ничего по этому поводу не нашел.
Через проперти можно конфигурировать конект к базе, маппинг через XML или аннотации.
>>187239
https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#lines-java.nio.file.Path-
>Через проперти можно конфигурировать конект к базе
Да, мне это и нужно. Как это сделать?
У меня сейчас есть hibernate.properties в класспасе, но вылетает ошибка
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory'
Есть статья как это правильно сделать? Весь гугл облазил и не нашел
Настроить коннект к базе != сконфигурировать хибернейт. Раз у тебя спринг, гугли PropertyPlaceholderConfigurer
>PropertyPlaceholderConfigurer
Наверное для моей задачи он был не нужен. Я просто хотел коннект к базе указать в .properties.
Короче я решил иначе внезапно, я так уже делал, но не работало, а сейчас заработало:
Я просто прописал в application.properties
[CODE]spring.datasource.url = jdbc:mysql://ip/db
spring.datasource.username = 123
spring.datasource.password = 123
spring.datasource.driver-class-name = com.mysql.jdbc.Driver[/CODE]
И всё заработало. Хотя до этого была проблема что EntityManager не автовайрился через @PersistenceContext
бизнес не может просто взять и написать как оно должно быть в идеале, ибо бизнес сам не знает, что должно получиться в итоге.
Итого делаем одно. После некоторого периода эксплуатации переделываем. Потом опять. И так до состояния, когда всех более-менее устраивает.
И тут приходит время добавления фич, а после и доработки этих фич.
Дальше два пути:
1) Если менеджмент неадекватный, если нет единого хозяина-конечной точки принятия решения, то этот проект тонет под грузом неюзабельного интерфейса и неюзабельных фич
2) Хороший менеджмент, есть конечная точка принятия решения, фичи не добавляются ради фич. В таком случае проект живёт и приносит деньги
Ты бы хоть почитал что такое SPA что ли. В любом случае для SPA нужен JS, весь вопрос в том кто будет его писать.
без JS можешь в сторону GWT или Vaadin посмотреть
>Все равно фронтендом не планирую заниматься.
Лучше при этом все равно сделать нормальный REST-бэкэнд. А дальше можешь какой угодно к нему фронт делать, хоть на JS через немогу как умеешь, хоть консольное приложение, хоть телеграм-бота. Все больше пользы, чем от возни с неактуальным server-side рендерингом.
неактуален он только во влажных мечтах фронт-эндеров, большая часть ресурсов на сервер-сайд рендеринге работает без проблем, для SPA он не подходит конечно
Я уже делал rest-бекенд, фронт там был сделан с помощью freemarker, а в js коде использовал только jquery. Просто хочу сделать все более стандартно и сам.
Хрюкни.
Точнее не сгенерировались бы, а я сразу мог их использовать, а в коде класса ничего не писать.
дык эти аннотации в рантайме работают все, у тебя не скомпилится если ты будешь геттеры дёргать
Ну ломбок же как-то работает.
Ломбок при компиляции дохуярит.
>>188432
Какие параметры генерации?
https://projectlombok.org/features/Data
Вот именно что на котлин, если есть задача просто убрать бойлерплейт, а не получить полностью другой язык
>rest-бекенд
>freemarker
Это был не rest-бэкэнд (ну или только частично rest)
>хочу сделать все более стандартно
Стандартно на сегодняшний день - именно чистый rest, без фримаркера и подобного
Да, можно.
Виндоус?
Вначале ищещь как это сдлеать на твоей платформе из нативного кода. Потом пишешь этот код, конкпилируешь его проверяешь что рабоатет. Потом закидываешь как динамическую бибилиотеку и подключаешь к джаве. Вуаля.
codewars
чтобы был выбор
Как сказать, что этот метод может выкинуть исключение, и что его надо обязательно обрабатывать?
Javadoc.
> его надо обязательно обрабатывать
Что ты подразумеваешь под словом "обработать"? 99% случаев они логируются и выполнение кода прерывается. А в 1% случаев разработчик сам знаешь как обработать и продолжить выполнение кода.
>Что ты подразумеваешь под словом "обработать"?
Прологгировать и выкинуть код бизнес-ошибки на выход например.
Чекед ЗАСТАВЛЯЕТ тебя знать и обрабатывать эксепшены.
Анчекед просто вывалятся в рантайме и все, с непредсказуемым результатом
По-моему анчекед не нужны.
ЭКСЕПШНЫ НЕ НУЖНЫ
Пусть метод возвращает юнион успешного результат и возможных ошибок. А кидать только ошибки которые никак не хендлятся.
хуй такое в джаве будет
Тебе не нужен стектрейс если ты (и автор библиотеки) обязан обработать все варианты поведения.
нигга.жпг
Для стектрейса конструкция try/catch необязательнп. Его можно создавать в конструкторе эксепшена. Речь идёт о другом способе передачи эксепшона наверх, к вызывающей функции.
И да, в жаве оно сильно и не нужно. Это для пирформанса или взаимодействия с другими языками может быть удобно (одна из причин, почему хотят сделать подобную штуку в C++ [1]).
[1]: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0709r0.pdf
manjaro linux, openjdk-8
(На oracle java то же самое было)
Впервуюочередьябысталискатьпроблемувсистеме,скореевсегоджаватутсовершеннонепричемещевозможнопроблемазаключаетсявсамойideтакчтоябыпопробовалпереустановитьее
Для редких ситуаций (см. Эксепшнл) эксепшны в джаве работают быстрее, чем ретурн флаги. Гугли The exceptional performance of Lil' exception.
Потмоу я и сказал, что в жаве (как и любом языке, работающем поверх VM) оно особо и не нужно. JIT эту хрень может неплохо соптимизировать. А вот для компилируемых в нативный код языков этот вариант гораздо лучше.
Ну у нативных тоже не всё так просто. Вон в цпп до сих пор не решили как им работать: так и компилят стандартную либу в двух вариантах, половина либы в макросах.
В ЦПП стандарта на такие ошибки просто не было (впрочем и сейчас нет, не факт, что документ вышу примут к C++20). Тут стоило бы вспомнить об optional, который добавили только недавно, а в стандартной библиотеке вместо него используют итераторы.
А ошибки там это вообще больная тема. Вспомнить хотя бы ублюдский math.h с наследием Си.
как тебе пришла в голову перекатываться с джс на джаву?
лучше на clojure
это задача groov7
Ну там многие проблемы - наследие си. Его главная проблема - там не изобрели мавен до сих пор. Только по этой причине писать на плюсах не хочется.
Не помогут. Пиздуй нахуй отсюда.
Я ебу поспрашивай красноглазых.
https://stackoverflow.com/questions/17510099/ugly-fonts-in-java-applications-on-ubuntu
Знаю что жидея по идее (привет тавтология) это вроде должна фиксить, точнее во встроенной жре у нее есть фикс.
1) Код типа такого (спринг) - норм или как такие вещи делают нормальные люди?
@Async
ListenableFuture<Void> doSomethingAsync() {
dolgayaOperacija();
}
...
где то в другом месте
ListenableFuture<Void> result = superService.doSomethingAsync();
result.addCallback(s -> {
resultatGotov(); // #1
}, e -> {
// хуй
});
2) как в коллбаке #1, убедится что транзакция которая вызывала метод doSomethingAsync() уже закоммитилась?
> норм
Не норм. ListenableFuture костыльная хуйня без задача. Если так уж хочется - используй CompletableFuture, он намного удобнее в чейне операций. Если у тебя IO операция, или хочешь быть модным - используй rxjava или reactor.
> 2) как в коллбаке #1, убедится что транзакция которая вызывала метод doSomethingAsync() уже закоммитилась?
Чоблять? Транзакции не вызывают методы.
Если тебе нужно знать закоммитилась ли уже транзакция в рамках которой был вызван метод, то выбрасывай архитектуру компонента и переделывай заново на функциональный подход, чтобы лямбде в колбеке было вообще похуям что было до нее и что вокруг нее. Костыли с пробросом объекта мануальной транзакции монадой до добра не доведут и сделают еще хуже.
Если ты говнокодер и не можешь сделать иначе, то хотя бы вызывай асинхронщину в самом конце транзакции.
> Чоблять? Транзакции не вызывают методы.
Не кипятись, писал быстро и неправильно выразился. Ты же понял о чем я.
Мне надо чтобы транзакция в контексте которой был вызван асинхроный метод была закончена на момент колбека, чтобы обновить там стейт объекта.
> то хотя бы вызывай асинхронщину в самом конце транзакции.
Вот я хотел спросить, как это правильно сделать? она не всегда завершается раньше, чем приходит коллбек.
примерно так:
Request r = new Request();
r.setState(NEW);
....
ListenableFuture<Void> future = superService.doSomethingAsync();
future.addCallback({
// вот тут изначальная транзакция еще не обазательно закоммитилась, поэтому нельзя сделать просто
r.setState(DONE);
}, e -> {
r.setState(FAILED);
});
Ты делаешь транзакцию и изменяешь какие-то данные. Во время транзакции запускаешь асинхронную операцию, которая выполняется в отдельной транзакции, и тебе нужно, чтобы первая транзакция уже завершилась, чтобы вторая транзакция с увидела изменения первой транзакции (вангую дефолтная read commited изоляция) и изменить их.
Просто все эти данные в одной транзакции, а не занимайся ебатекой, что у тебя может быть логически неконсистентность, что транзакция выполнилась, а асинхронщина ебнулась и хули теперь.
> Вот я хотел спросить, как это правильно сделать?
Ты накурился там? Просто вызываешь свой superService.doSomethingAsync() после завершения транзакционного метода (если декларативно) или транзакционного блока (если вручную рулишь).
Лучше тупо запустить асинхронщину после завершения метода (как уже писали выше), но если сильно приспичило, спринг позволяет вешать колбэки на завершение текущей транзакции, см. TransactionSynchronizationManager
Норм фильмец.
Или сформулирую подругому - как получить из entityManager текущий объект/класс текущей сессии? или только обращаться к sessionManager? Я ньюфаг, поэтому неуверен что четко сформулировал вопрос.
>неуверен что четко сформулировал вопрос.
Не зря сомневаешься, получился совсем бессвязный набор слов, попробуй ещё раз
google: spring security example
Книги для начала. На курсах тебе предложат те же книги только ужатые раз в 50. А потом можно на всякие coursera записаться. Из отечественных говорят хекслет норм. Но опять же новичкам иам тяжело по тем же отзывам.
Ну а если спросишь меня то самый православный вариант это учить java core по книгам потом spring in action и пиздуй кодить где только можно
>
>Книги для начала. На курсах тебе предложат те же книги только ужатые раз в 50. А потом можно на всякие coursera записаться. Из отечественных говорят хекслет норм. Но опять же новичкам иам тяжело по тем же отзывам.
>Ну а если спросишь меня то самый православный вариант это учить java core по книгам потом spring in action и пиздуй кодить где только можно
Я про себя могу описать кратенько.
Лет 10 назад на заочке закончил универ по ИТ, все языки были базово. Потом подзабил и вот пару лет как хочу вкатить.
Мне главное повторить то что знаю хорошо, прокачать то чего не было тогда (тот же гит) и понять как работают паттерны и прочие новые фишки. читать пробовал, ролики смотрел но вопросы задавать некому и по большому счету. цена вопроса не такая большая чтобы в случае неудачи винить кого-то кроме себя. А там вроде и обратная связь и соревновательная часть.
>то чувтсва кагда использавал линкед лист потому что она начинается с буквы Л хатя аррай лист лучши...
> Лет 10 назад на заочке закончил универ по ИТ
> 30+ (33-34+ по факту)
> заочка говноадмина
> 0 коммерческого опыта разработки
Мы вам перезвоним.
29 по факту
ну перезвоним так перезвоним чо. бабки говорю же небольшие, профессий за плечами уже много: от продажников до руководителя небольшого производства
сам то где работаешь и кем? сколько лет? какой опыт?
У меня всё хорошо с работой, не переживай. И расслабь булки, от твоих постов несет детской злостью.
Нечего сказать - пройди мимо, не вываливая дерьмо из своей головы.
Это же двач, тут омежки могут себя немного людьми почувствовать. В реальной жизни же слова боятся сказать, не принимай близко к сердцу.
Вкатывайся, в отрасли жуткий кадровый голод, места хватит всем.
Все равно этот рынок имеет один из самых высоких планок по входу. Все остальные уйдут или в php или в js.
Ну да ладно
Глупости. Джава не особо сложнее промышленного php и современного фронтенда. Особенно на юаньском уровне.
Тогда как каждая каждая школа по объебу вотивайти на доллары, обещая золотые горы за минимум усилий и скромную сумму за курсы, учит именно джаве.
Я провел небольшой анализ рынка и понял что собственно java выше всего оплачивается, или почти
да и времени на чтение остается мало после работы. Товарищи говорили уйдут выходные на чтение и понимание материала, но что-то как-то не идет. Может это я такой тупой.
Понравился сайт этого чувака, где все просто и лаконично укладывается без тонны текста: http://developer.alexanderklimov.ru/android/
еще опробовал codecademy - вещь прикольная, теория+практика считай что без отрыва от производства Но у них проблема - курс заканчивается быстро, и нет больших проектов. Надо бы ресурсу больше проектов замутить
К чему это я? Может кто подскажет интерактивное обучение по типу джавараш/codecademy/developer.alexanderklimov.ru немного теории+практика на месте+проекты
Буду признателен
Много раз писалось - udacity. Для вката в джаву книги не нужны, достаточно гугла и онлайн туториалов. Особенно игнорируй SICP, который так любят тут советовать. Ну, как будешь сениором можешь прочитать на досуге.
Если ты не можешь осилить простую фесолофию java, то это значит, что ты тупой программирование не твое и твои мозги заточены под другую сферу деятельности.
Скажи это фронтенд-разработчикам, у которых долларового фриланса полон апворк и полно хорошо оплачиваемых фуллтайм позиций что здесь, что там.
Подскажи где найти? Реакт нужен.
Запостил джобу на апворке - ни одного нормального кандидата. Есть парочка нормальных с Украины, но они хотят овер $40 в час, я же могу макс $25 платить.
Если твои конкуренты - это школьники и индусы, то у тебя все не очень хорошо.
Нормальное образование не может дешево стоить. Посмотри на зарплаты среднего java сеньора и прикинь сколько будет стоить у него обучение. Так что дружище не страдай херней и прочти хотя бы базовую книгу а вопросы гугли или тут задавай
>С чего начать погружение в архитектуру распределенных систем на java
Что именно интересует? Кластеры, что бигдату мапредусят? Микросервисы? Горизонтальное масштабирование по типу N копий за балансировщиком?
>каких практик стоит придерживаться, чтобы бек можно было относительно безболезненно разнести по разным нодам
Видимо, речь все же о масштабировании/отказоустойчивости. Тут достаточно понимать, что все состояние (сессии, кэши, локи), которое можно было бы держать в памяти с одной нодой, теперь придется как-то разделять между всеми. Иногда может оказаться достаточным просто все вынести в БД, в более интересных случаях можно использовать хранилища вроде Redis либо какой-нибудь встраиваемый IMDG.
>как масштабировать классическую sql базу, чтобы ее тоже можно было разнести по разным нодам
Сильно зависит от специфики приложения и того, в каком режиме собираешься использовать ноды. В любом случае не помешает грамотный DBA.
Как уже говорил в твоем вылезатор тредике -
1) Караван всегда движется со скоростью самого медленного верблюда. Хоть усрись.
2) Распараллеливание работает на независимых данных/тасках. На зависимых оно не работает.
И в реальной жизни, тем более в реальном интырпрайзе, такой лафы, конечно же, не будет, или будет очень мало. Основным твоим геморроем будет придумать как преобразовать алгоритмы/входные данные в независимые друг от друга.
3) Балансировка сама по себе не балансируется, ебись с ней сам, перепиливаю граф тасков полностью по 4 раза в день. Я запускаю профайлер по 1 раз в день, каждое профилирование с правками занимает 24 часа.
Забыл:
4) Распараллеливание работает онли на большом объеме данных, в проитивном случае будет только проигрыш на оверхеде и latency, особенно в варианте с распределенным сетевым кластером.
Собственно, вот посмотри пример из гейдева:
http://www.gdcvault.com/play/1022186/Parallelizing-the-Naughty-Dog-Engine
>Java для распределенных систем.
>брокеры сообщений
>бек
>масштабировать классическую sql базу
>пример из гейдева
Энтерпрайз-макаке не нужна
>http://www.gdcvault.com/play/1022186/Parallelizing-the-Naughty-Dog-Engine
> Мы разнесли обработку рендера и игровой логики на разные кадры и теперь у нас все охуенно, джобы не простаивают.
> Enterprise Java
У меня знакомый уехал в тайланд на 100 баксов в час рейт работать на калифорнийскую компанию.
Так что прибереги свой пиздеж для кого-нибудь другого. Если твой уровень это школьники и индусы, то проблема в тебе.
диванон по знакомому, азазаз
я не знаю как еще проще объяснить
lлава 7. Наследование
Iлава 8. Пакеты и интерфейсы
lлава 9. Обработка исключений
Iлава 10. Ввод-вывод данных
lлава 11. Мноrопоточное программирование
lлава 12. Перечисления, автоупаковка, статический импорт и аннотации
lлава 13. Обобщения
Iлава 14. Лямбда-выражения и ссылки на методы
lлава 15. Аплеты, события и другие вопросы
lлава 16. Введение в Swing
Глава 17. Введение в JavaFX
чето типо постоянная работа с файлом. Открывать его заново, когда закончились строки для чтения
ой плес. у всех есть такой знакомый. по факту заграницей требуются спецы по нормальным языкам типа жавы или функциональщины, а не индусофронтендеры
> у всех есть такой знакомый
Вот только по факту все эти знакомые это фронтендеры, сидящие либо на долларовом фрилансе тут ебанутые, либо сидящие на долларовом фрилансе в более приятных странах.
>Q: Что скажете за джавараш?
>Если вкатываешься с нуля, то можешь написать пару "хеллоу ворлдов" до 10 лвла. Дальше курс рассчитан на ленивых и не умеющих читать книжки людей. Количество говнокода зашкаливает, годных задачек пару штук на весь курс. В любом случае решать тебе.
Можно подробнее? Кто-нибудь пробовал - как оно?
вцелом тоже можешь пропустить.
Нужны. Хуево без них было раньше
Лямбды сделали Джаву менее громоздкой, более удобной, добавили гибкости, которой так не хватало, убрали анальное ООП.
И вот, вопрос: как лучше всего спроектировать/оформить библиотеку? Хочется, чтобы она была неблокирующей, простой в своем АПИ, ну и чтобы она НЕ создавала свой собственный Selector, и НЕ делала бесконечный цикл в отдельном треде (хочется оставить контроль пользователю библиотеки).
Если есть пример какой-нибудь высокоуровневой библиотеки поверх java.nio.channels.SocketChannel, был бы благодарен за ссылку, потому что гуглил-гуглил - а ни одну не нашел, у всех хелловорлдов высокоуровневая логика непосредственно рядом с while (true) { selector.selectedKeys() ... }, и все норовят создавать тред сами, а я хочу это оставить за пользователем.
>ну и чтобы она НЕ создавала свой собственный Selector, и НЕ делала бесконечный цикл в отдельном треде (хочется оставить контроль пользователю библиотеки).
Как-то мало вяжется с высокоуровневостью, у тебя кишки имплементации видно получается.
Сделай POJO модельку.
Делай класс, не обмазывайся мап-говном.
>>191627
Хочется, чтобы если пользователь захочет - он сможет в том же треде и в том же while (true) работать с другими высокоуровневыми надстройками над nio. Я вообще даже предполагаю, что библиотека не будет никуда ни с кем соединяться, а требовать готовый SocketChannel в конструкторе (ее еще будет в таком случае удобно тестировать).
Реально что ли плохая идея держать библиотеку минималистичной? Почему "Не создавать свой селектор это слишком"? Я же не знаю, что еще захочет пользователь в том же треде организовать.
он разве не утратил свою актуальность с появлением nio? да и хочется минимум зависимостей, тут будет из пушки по воробьям
Наоборот, netty нужен, чтобы не ебаться напрямую с низкоуровневым nio
Напиши лучше новый фейсбук.
Чтобы понять как библиотека должна работать, нужно понять какую проблему ты решаешь. Если у тебя нет никакой проблемы, а хочется просто библиотеку, то забудь и не трать время.
Если ты не знаешь, как с ходу сделать идеальное API, то начни с любого, т.к. с первого раза не получится в 99%. Потом в процессе использования (да даже тестирования. У тебя ведь будут тесты?) поймешь ту "боль", которая возникает у пользователя.
>Почему "Не создавать свой селектор это слишком"? Я же не знаю, что еще захочет пользователь в том же треде организовать.
Потому что неясно, в чем тогда смысл такой "высокоуровневой" библиотеки
Ну вот и пиши типа как юнит, только на целые законченный сценарии. В чем сложность? Какого типа приложение?
Хуйней не страдай и используй thrift или protobuf, если тебе нужен бинарный протокол. Лучше все равно не напишешь, а если ты хочешь ПРОСТ, то ты не в тот язык зашел, байтоёбушек.
Тогда тебе повезло, там все для тестов есть. Гугли по словам вроде spring test или читай https://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html
Идея в том, чтобы поднять вместе с тестом целый спринговый контекст, желательно максимально приближенный к "настоящему", и in-memory БД вроде hsqldb
> он там полубинарный, JSON, перед которым идет бинарный хедер.
И нахуя? Оверхед на обязательства по http протоколу хуй три пизды да нихуя по сравнению с самими джейсонами.
> смысл в том, чтобы высокоуровнево создавать сообщения, а не конвертить туда-сюда самостоятельно в/из ByteBuffer
И трифт, и протобаф умеют вполне высокоуровнево конвертить сразу в классы.
>>191819
> объяснять тестирование спринга как какое-то откровение
Чет слегка кекнул.
>смысл в том, чтобы высокоуровнево создавать сообщения, а не конвертить туда-сюда самостоятельно
Т.е. сериализация тебе нужна по сути, а дальше ебись с сокетом как хочешь. Для этого уж точно свой велосипед лучше не изобретать.
Вариант. Или проигнорировать. Если человек даже не пытался погуглить миллиарды статей на хабре про интеграционное тестирование самого популярного кейса использования самого популярного джава фреймворка, то разжевывать ему и засовывать пережеванное в крепко сжатый рот это просто себя и свое время не уважать.
На русских сайтах я нихуя не вижу кроме доисторических изданий. На амазоне она стоит неебических 30 бачей. На пиратских сайтах чёт все ссылки битые.
Покажите долбоёбу, где её взять, не потратив две моих дневных зарплаты, пожалуйста.
>не проверил рутрекер
я долбоёб, игнорьте вопрос
Но тем не менее, где вы покупаете книги, если хочется в бумажном виде?
Я книги уже 4 года не читаю.
Не знаю. Не помню когда последний раз читал бумажную книгу. Лет 5 назад? Больше?
Есть в треде господа, работавшие с REST-приложениями на фреймворке Stripes?
Я собрал maven'ом фреймворк Stripes из исходников. Убедился, что в библиотеке есть все нужные мне классы. Написал такой простой компонент: https://ideone.com/DGZ1cv
Как заставить это работать, чтобы приложение принимало запросы и возвращало ответы? Чтобы можно было запросить API через браузер, curl или postman.
И если я на самом деле буду передавать в loadUserByUsername id пользователя (буду наёбывать Spring Security!), это нормально или плохо?
При клике на иконку должно меняться изображение и цвет задника. Это я сделал. После этого кнопка остается "нажатой". Как сделать так чтобы после нажатия цвет обратно становился серым?
Spring Boot, если для ленивых, а так вариантов - масса.
http://developer.alexanderklimov.ru/android/java/java.php
Я по этому сайту начал, вроде норм.
Есть смысл ковырять версии до 2 или уже все на нее переехали?
ЯННП
Сап, джава-мэны. Написал такой код для обработки запросов: https://ideone.com/z7VioE
Если потребуется делать роутинг многих путей запросов, как избавиться от увеличения рамера кода? Можно как-то более красиво добавлять обработчики?
Кароч я понял, тут username это необязательно тот юзернейм, который используется при логине в паре с паролем. Поэтому буду его генерировать каким-нибудь образом (например, user_id[id юзера]_[рандомная строка]), а для логина через имя пользователя и пароль буду использовать другое поле.
От увеличения какого кода ты хочешь избавиться?
Добавь отдельный файл с маппингом запросов на методы контроллера. Или возьми любой mvc фреймворк и не изобретай велосипед.
Откуда get post методы взялись? ЯННП.
Ну и говнокод. Даже обоссывать противно, вдруг зашквар через мочу вверх по струе передается.
Сперва я испугался, что тырпрайз совсем меня кодить разучил, но потом понял, что ты просто хуйню написал.
Что за буйный шизик. Почти забыл что я на дваче.
Он релизнулся полтора месяца назад. Spring Cloud соответствующей версии ещё не релизнулся. Как думаешь?
То есть одна версия еще недостаточно устарела, а другая не доработана. Заебись.
Например есть страничка пользователя которой нужно подгрузить аватарку инфо комменты и тд. Лучше сделать это как
/user/1
или
/user/1
/photo/1
/messages/1
и тд?
В первом случае отпугивают проблемы с тем как это кэшировать и проблемы с реализацией. Но это кагбы быстрее чем много запросов.
Андроиду тоже хтмл передавать?
Описалово не полное у тебя.
Если брать в пример соцсеть со страничкой, сообщениями, оповещениями и т.п., то тут нужно какую-то середину искать, не отсылая 500 запросов на каждую хуйню, но и не передавая огромные пакеты данных. Я бы отдавал страницу с фото, например, а сообщения и оповещения отдельным запросом забирал, тебе ведь их в любом случае отделить надо.
Глянь вообще апи разных сетей, как они это сделали.
Ну вообще то там солидная разница в конфигурации.
>не отсылая 500 запросов
Только что смотрел Фейсбук который буквально делает 250 запросов чтобы загрузить страничку группы.
>Эх, сейчас бы в 20!8 рендерить HTML на сервере.
придумывать себе проблемы, а потом героически с ними бороться
Можно было бы по делу обоссать тупоголового деграданта, но ты спалился раньше - не ставящая точек мелкобуква.
Это ставит на тебе крест.
Гугл выдает старье 1,5+.
Спасибо. Мне просто интересно почему гугл выдавал какие то говнобложики вместо офф документации.
>Запускаю идею
>Обновление политики безопасности, пожалуйста прочтите
>Мы собираем ваши юзернеймы, пароли, телефоны, куки и ИНН
>Принять/Отказаться и выйти
Как же я блядь это обожаю.
Для начала, ты же понимаешь, что вся эта jsp-херня не нужна, ее можно скипать?
>мы объект в модели не сохраняем, откуда спринг берет значения неправильно введенных полей
Подозреваю, что как изначально спринг забайндил форму в объект и засунул его в модель, в соответствии с modelAttribute="spitter", так и оставляет его там, в том числе на время рендеринга результата.
>И вообще нахера эти теги нужны
Чтобы вот это самое modelAttribute="spitter" писать, а потом в инпутах только path="firstname", типа форму целиком на объект байндишь. Иначе надо рисовать обычные html-инпуты с конкретным value; можно, действительно, и так, без специальных тэгов.
Аргументируй
Там можно отключить отправку данных
Ну если валидация настроена, то все в порядке.
Открываешь исходники спринга и обмазываешься.
>На время какого блин рендеринга? Аттрибуты модели не сохраняются между запросами
У тебя один запрос, POST на /register, в ответ на него сервер отправляет ту же самую html-страницу (return "registerForm"), во время ее рендеринга в модели лежит объект, который спринг туда положил в начале обработки этого же запроса.
Я понимаю, что он в модели, но я не понял, почему спринг его туда самостоятельно добавил.
Но судя по ответам отсюда https://stackoverflow.com/questions/8688135/modelattribute-annotation-when-to-use-it/26916920#26916920 объекты автоматически добавляются в модель, тогда собственно все понятно
java.lang.NullPointerException
как фиксить?
У тебя где-то строка становится равна null. Вот проверку на null и надо добавить. Желательно найти причину почему в функцию передаётся null вместо строки. Так что отладчик в руки и вперёд.
Ты ведь не поленился и загуглил, в каких случаях получается такой эксепшен?
В чем разница в спринге между использованием DAO, Сервисами и ЖПА/XYZрепозиториями? По сути это же одна и та же хуйня, не?
Не.
Телепат из отпуска заглянул. У тебя передается null вместо пустой строки, т.е. "". В Жабе это разные вещи.
Сдрисни, войтивайти.
Ну как бы методы в репозитории, которые отдают данные постранично, принимают параметр Pageable.
Можешь еще изгавнякать кэшы оберток над примитивами.
Анончик. Помоги, пожалуйста, ответить на несколько вопросов.
Какими из следующих способов можно запретить наследование класса (речь идет о top-level классах в Java)?
Отметьте все подходящие варианты ответа.
1. Добавить модификатор abstract
2. Добавить модификатор final
3. Добавить модификатор private
4. Не определять конструктор
5. Объявить все конструкторы класса private
6. Запретить наследование нельзя
За сколько вкатились/устроились, сколько зп была по началу и вообще, как устроились в первый раз. Особенно интересно, если город милионник, не более.
спс
А, ну я сам ответил на свой вопрос) кек. Какой я догадливый:
removeAll(Collections.singleton(null)) спасло если шо
>removeAll(Collections.singleton(null))
Как же хочется лямбдочку... Но понятно, что это android
Ты из listClients по индексу нулл вытаскиваешь, придурочный.
Устроился без опыта, первые два года 70-80к, потом 140
Сейчас пытаюсь на апворк войти, но там на хуях катают пока что.
Я знаю лямбды только на примитивном уровне и вообще далек от версии 8 и выше. Пока андройд на 8-ой сидит и меня все устраивает, да и код других людей вполне читаем.
И вообще я удивляюсь тому, как джава стартанула до 10 версии. Совсем они там ебу дали я смотрю.
> Пока андройд на 8-ой сидит и меня все устраивает
Чоблять? В ведро восьмую джаву завезли только в седьмой версии ведра. 99% устройств на предыдущих версиях.
че блять? прописываешь compileOptions {
targetCompatibility 1.8
sourceCompatibility 1.8
}
и идешь нахуй.
> java.util.streamAPI level 24 or higher.
> java.lang.FunctionalInterfaceAPI level 24 or higher.
> java.util.functionAPI level 24 or higher.
Так что нахуй придется пройти тебе, мелкобуква.
Class A{ public void print(){} }
Class B extends A{ public void print(){} }
Class C extends B{ public void print(){} }
A a = new C();
a.print();
Здесь происходит восходящее преобразование и позднее связывание метода, я прав?
Здесь происходит вызов виртуальной функции, а у тебя какой-то новояз. Студент чтоле?
Впрочем да, в жаве почти все функции (кроме тех, что отмечены private или final) являются виртуальными.
Хотя ладно, есть, я обосрался.
Есть они там, просто тебе не надо писать virtual, чтобы получить определённое поведение. Они там все по-умолчанию виртуальные, чтоб ынтерпрайс-макаки не заморачивались с виртуальными деструкторами и прочим говном из C++-мирка.
Если jvm и компилятор могут доказать, что a всегда будет инстансом C, то хуй знает что там будет на самом деле.
в примере есть позднее связывание(late binding) и восходящее преобразование типов (upcasting)? все методы кроме статических, финальных и прайвет связываются во время выполнения, и для ускорения их записывают в таблицу методов, правильно?
Меня заставили ковырять опердень. Есть прототипы на го и джаве. Суть такова, что надо написать рест, который будет позволять заливать файлы большого размера и файлы, помещающиеся целиком в тело запроса пост, добавлять их в GridFS и запрашивать метаинформацию о файлах. Есть рабочий прототип, но мне не нравится, что пришлось писать свое локальное файловое хранилище. Есть библиотека, которая позволяет развернуть локальное хранилище, создавать файлы, удалять и добавлять к ним байты по имени файла или по его метаинформации (например, идентификатору)?
Как выстроить архитектуру приложения? Про архитектурные слои я только читал. Додумался своим микромозгом только до создания классов-обработчиков HTTP-запросов, у который вызывается статический метод при роутинге реквестов.
Система хранения контента. Почти классическая тащемта задача с множеством подводных камней.
Задача для повидла или помидорки. Учитывая, что ты задаешь такой вопрос и тем более несешь какую-то хуйню про ручную статику при роутинге HTTP-запросов, то очевидно, что не являешься ни одним из перечисленных. Поэтому объяснять тебе что-то абсолютно бессмысленно - не поймешь.
Поэтому покупай IBM Filenet или юзай какой-нибудь бесплатный owncloud и используй их.
>Есть библиотека, которая позволяет развернуть локальное хранилище, создавать файлы, удалять и добавлять к ним байты по имени файла или по его метаинформации (например, идентификатору)?
https://docs.oracle.com/javase/7/docs/api/java/nio/package-summary.html
>BM Filenet или юзай какой-нибудь бесплатный owncloud и используй их
Говно. Нужно хранить файлы локально, а потом, если выполняются некоторые условия, перегонять их в GridFS. Есть локальные системы управления контентом?
> объясните для чего здесь оператор return
Потому что возвращается значение из функции.
> и почему именно val
Потому что так эту переменную назвали.
А вообще попробуй написать этот же код в редакторе с подсветкой кода (или IDE) и подобыне вопросы сразу уйдут.
Да бля хз почему но именно на этом ебучем return пиздец туплю. Ни с чем до этого момента проблем не возникло. Вот нихуя не могу понять.
Скачал intelijIDE но пока не использую. В онлайн компиляторях работаю. Видимо действительно стоит в IDE начать практиковаться
>Поэтому объяснять тебе что-то абсолютно бессмысленно - не поймешь.
А ты не выебывайся, а дай совет по инструментам и архитектуре. Мне это задание дали, потому что никто не брался за эту грязь и занимались простыми вещами. Меня попросили сделать хотя бы работающее хранилище, а я еще хочу создать хорошую архитектуру.
Принес годноты для нюфань. Бесплатный курс основ Java. На инглише.
Ну бля там интермидиэт уровня хватит. Еще и сабы завезли.
> А ты не выебывайся, а дай совет по инструментам и архитектуре.
Заплати за консалтинг - дам на понятном тебе языке.
> Мне это задание дали
Ну и делай.
Токсичный ребенок, ты вообще из этого треда не вылезаешь, что ли?
Читай спецификацию языка, она как затычка для жопы. Если ты ее не знаешь, то тебя ей будут тыкать.
Может есть какой-то другой способ быстро и эффективно прочитать только нужные байты?
И это не считая того, что байты в строку переводятся через new String() и пришлось свой метод перевода байтов в uint32 (long в жабе, охуеть) писать
Добавить final. Так ты запрещаешь иметь подклассы основному классу.
>InputStream
Это абстрактный класс. FileInputStream работает по-другому, а реализация зависит от платформы.
>другой способ
RandomAccessFile
Idea. По-мне, самая удобная ide. Все, что тебе нужно идёт из коробки. Только немного глуповатый "Jar of Web". На том же pycharm работает лучше.
Поясните нуфагу за лямбда и функциональные интерфейсы. Их часто используют? А ссылки на методы вообще нахуя нужны?
JPanel otherPanel = new JPanel( new BorderLayout() ) {
@Override
public void paintComponent( Graphics g ) {
super.paintComponent( g );
// Apply our own painting effect
Graphics2D g2d = (Graphics2D) g.create();
// 50% transparent Alpha
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f));
g2d.setColor(getBackground());
g2d.fillRect( 0, 0, getWidth(), getHeight() );
g2d.dispose();
}
}; otherPanel.setOpaque( false );
Хранится в базе данных. Задача: нужно чтобы при нажатии на кнопку edit вместо ссылки с названием появлялся input.
Как лучше всего реализовать?
На js
Очень просто фиксится. не использовать новую версию
Всё равно 90% говна написали ещё 20 лет назад.
Можешь сунуть bufferedreader в поле класса и в close методе класса закрывать его. Тогда можешь в блоке инициализации try with resources хуячить свой autocloseable класс - по выходу из блока вызовется close метод твоего класса. А там что напишешь в методе.
Пшел нахуй.
В сервисе офк.
Стажирвался сначала месяцев 5, но можно было и быстрее, если бы времени больше уделял.
Далее 3 месяца испытательног сроки с зп в $250, после этого $500, так уже работаю чуть меньше года, скоро обещают поднять
на апворк именно с джавой хочешь войти?
Пиздец. Хорошо, что я на восьмёрке.
Вставь дженерики вида ? extends ...
Пoтому что иначе можно было бы:
class NotStudent implements Human {...}
humanContainer.add(new NotStudent);
Student student = studentContainer.get(0); <-- ClassCastException
КлассКасты должны происходить только при явных кривых кастах, неявные кривые касты должны выявляться и заворачиваться компилятором.
Но и тут джаваны обосрались - https://dev.to/rosstate/java-is-unsound-the-industry-perspective
>https://dev.to/rosstate/java-is-unsound-the-industry-perspective
Жабу год от года хоронят, но год от года выясняется, что альтернатив-то и нет нихуя, кек.
это называется generic invariance
Обычные массивы же covariant, поэтому с ними бы такой финт сделать можно было бы
Удваиваю, по ссылке от этого >>197591 теоретическое дрочево той же степени полезности, что и бага найденная в реализации сортировки (timsort). Я сам топлю за формальные методы, но нужно остановиться и понять, где, блядь, академическая поебота оправдывающаяся за гранты (со всей демагогией в аргументации) и где промышленное программирование с перспективами.
Условно говоря, Мартин со своим вкладом в реализацию дженериков - это полезная академия и даже промышленное программирование. Чуваки нашедшие изьян в этой работе, что ж, проделали интересную и даже полезную работу, но для академии. Как только они начинаю верещать о надежности и промышленной разработки, можно слать на парашу.
Как там обратная совместимость поживает? Готовы переписывать всё под новую скалу? Вам создатель языка в рот уже который раз ссыт таким образом? Третий?
>Котлин
Хватит пиарить это говно уже.
Это недоязык, сделанный для внутреннего применения в компании.
Состоит из грязных хаков чуть более чем полностью.
>>1193615
> А вот и имбецилы из секты свидетелей отрицания главной Java-конференции в СНГ подъехали.
> Мне кажется, что отношение к Котлину это такая же лакмусовая бумажка как мелкобуквенность. Человек вопит, что Котлин не нужен - бац, он долбоеб, с ним все ясно - нет нужны разговаривать с ним дальше и выяснять, что он и джейпоинт отрицает и наличие остального долбоебизма.
грязных
Так как для конвертации в другую последовательность нужно читать байты, возник вопрос: "создавать массивы байтов в методах или создать их один раз как члены класса?"
Снова выхожу на связь
>наследовать свой класс
наследование противоречит ООП. Создавай utility-класс, а в нем статический метод long readUIntLE(RandomAccessFile)
>>197922
>A dry summary of all their arguments is that utility classes are not proper objects; therefore, they don't fit into object-oriented world. They were inherited from procedural programming, mostly because we were used to a functional decomposition paradigm back then
Короче, создам класс, но не буду наследовать. Сделаю хэндл RandomAccessFile членом, а в конструкторе инициализирую его. Методами класса буду обращаться к файлу и возвращать что нужно.
> Сделаю хэндл RandomAccessFile членом, а в конструкторе инициализирую его
Во, правильное решение. Композиция решает. Гораздо гибче наследования и, в отличие от последнего, вписывается в ООП.
> Методами класса буду обращаться к файлу и возвращать что нужно.
Заодно implement-ь те же интерфейсы, что и RandomAccessFile.
Да, знаю. Я недавно решал проблему с endianness по другому: (надо было поддержать разные платформы):
interface Endianness () {
int readInt (Stream);
}
class BigEndianness implements Endianness {...}
class LittleEndianness implements Endianness {...}
ну и статический метод getInstance для подбора верной реализации для текущей платформы
Неужели на жаве так тяжело байтоёбить? Даже в JS, когда добавляли типизированные массивы сделали специальные методы для работы с порядком байтов.
Впрочем да, о чём это я. В жаве же даже нет беззнаковых типов, а я тут о байтах что-то говорю.
Даже в си эта экономия спичек на беззнаковости не оправдана
> Неужели на жаве так тяжело байтоёбить?
В Java™-вселенной в этом нужды нет.
Конкретно эту хрень >>197949 мне пришлось ввести исключительно потому, что локальный IPC-сервер написан на голых сях, а авторы не озаботились кроссплатформенностью его протокола (на разных процессорах разный протокол, охуеть). Т.о. если в Java™ и встает вопрос об endianness, то только из-за косяков низкоуровневых товарищей.
Мне не тяжело, просто есть подводные камни. В 1.8+ вроде как завезли всякие облегчающие штуки.
Смотрю в код читалки на С# - там все гораздо проще. На руби код так вообще пиздато выглядит.
>Неужели на жаве так тяжело байтоёбить?
Нет, не тяжело.
Постоянно это делаю вообще без проблем.
http://www.allitebooks.com/java-performance-the-definitive-guide/
Ну и очевидную Java Virtual Machine Specification.
> альтернатив-то и нет нихуя, кек
Альтернатив чему? Ёбаному легаси по ставке 15 баксов в час? Ты думал как языки умирают - хоп и всё, все отказались и разошлись? Да хуй тебе, даже на RPG можно найти вакансии.
Очнись, пидрила, на джаве новый проект уже стрёмно стартовать - к выкату на рынок всё нахуй поменяется. Та жаба которую ты знаешь уже агонизирует и переписывается под новые концепции последнего десятилетия, как это было сделано с плюсами и c# несколько лет назад, лол - и тут жаба в хвосте, скоро жаба так же развалится на 2 языка, сторонники которых будут ненавидеть друг друга. И нужна ли будет кому-то та часть языка, который по удобству использования отстала даже от плюсов? Конечно нет, старая жаба умрёт, а если что-то и выживет, то похоже оно будет на своих современных "убийц".
Эх, святая толстота
>Очнись, пидрила, на джаве новый проект уже стрёмно стартовать - к выкату на рынок всё нахуй поменяется. Та жаба которую ты знаешь уже агонизирует и переписывается под новые концепции последнего десятилетия, как это было сделано с плюсами и c# несколько лет назад, лол - и тут жаба в хвосте, скоро жаба так же развалится на 2 языка, сторонники которых будут ненавидеть друг друга. И нужна ли будет кому-то та часть языка, который по удобству использования отстала даже от плюсов? Конечно нет, старая жаба умрёт, а если что-то и выживет, то похоже оно будет на своих современных "убийц".
Лол, сохрани себе это - сможешь постить и через 15 лет.
Именно это и слышно каждый год.
Что-то подобное помню в начале 2K было. Только упоминалась еще, что мультиязыковость .Net, но и здесь убийцы обосрались.
Обход беззнаковости. Читаем два раза по 32 бита и суем в 64, так что бы ничего не проебалось.
> помню в начале 2K было
А теперь сравни жабу тогда и жабу сейчас.
В начале 2K и вплоть до выхода 1.5 ява была тем ещё дерьмом общим с современной явой имеющим только подмножество синтаксиса. Что характерно для явы, она уже тогда отставала от плюсов.
И так же как сейчас помирает java pre-1.8, java 1.4 уже сдохла и библиотек, поддерживающих её, кот наплакал, а жопосед поколения 1.4 хуй что разберёт в 1.8. Как и жопосед поколения 1.8 возненавидит код эпохи 1.4.
>Альтернатив чему? Ёбаному легаси по ставке 15 баксов в час? Ты думал как языки умирают - хоп и всё, все отказались и разошлись? Да хуй тебе, даже на RPG можно найти вакансии.
>Очнись, пидрила, на языкнейм новый проект уже стрёмно стартовать - к выкату на рынок всё нахуй поменяется. Тот языкнейм которую ты знаешь уже агонизирует и переписывается под новые концепции последнего десятилетия, как это было сделано с плюсами и c# несколько лет назад, лол - и тут языкнейм в хвосте, скоро языкнейм так же развалится на 2 языка, сторонники которых будут ненавидеть друг друга. И нужна ли будет кому-то та часть языка, который по удобству использования отстала даже от плюсов? Конечно нет, старый языкнейм умрёт, а если что-то и выживет, то похоже оно будет на своих современных "убийц".
Эй, бротан-наротан, подготовил тебе боевую пасту.
Работает, просто теперь они отдельно подрубаются, а не сразу идут.
Есть такое. Только вот видишь в чём разница - c++11 не просто новая версия языка, а вообще нахуй новый язык. А в java 1.8 в качестве языковых фич мы получили стримы, лямбды и обвязки для удобного их использования, а также возможность протащить в язык var через 5 лет. Стримы охуенны, к ним вопросов нет. И ...всё? Охуенно, чё, дайте две! А теперь мотаем на 3 года вперёд и получаем Map.of - это ж вообще нельзя воспринимать иначе чем как толстый троллинг. Да я блять не удивлюсь если они джепы на одобрение Кубо шлют перед реализацией.
Нормально выглядит. Решился байты ебать - не плачь.
инб4: как можно кодить на чёрном фоне
Несколько библиотек поотваливались из-за неправильного определения версии. 10 они воспринимали как 1. https://github.com/rzwitserloot/lombok/commit/9ecfe2302f3cd1d654196e072cce0b334f21ffd9
Зато сейчас, когда хипстерская параша под названием Руби окончательно умерла, Го и прочие "убийцы" джавы сдулись, а сами она развивается семимильными шагами. На подходе джава 11, котлин уже давно в релизе, выкатили Spring 5 с лучшей облачной инфраструктурой.
Из конкурентов правда остался питон (ноду не рассматриваю, писать бекенд на js это детект).
HR-ы заваливают офферами на 150к+, даже на upwork куча заказов на Spring.
Джава (JVM) явно не умерла, она упала, чтобы вновь подняться.
Это очевидно любому человеку с более-менее нормальным кругозором.
JVM это охуительная платформа, без вендор лока, с кучей либ промышленного качества.
А Говно потеряло для меня всякий авторитет, когда его разработчики, взяв GC коллектор 40 летней давности, начали орать что ГС бистрее чим в джави, что радостные фанбои подхватили, не понимая, какой ценой в их производительном го
Там ни о чем. Если бы ты работал в компании с собственностью кодовой базы под 100К человеко-лет, то понял бы, как языковые перделки уходят на второй план.
Меньшая пропускная способность.
Вообще все алгоритмы GC подчиняются эмпирическому правилу "величина stop-the-world паузы * cpu-overhead-rate = константа"
В альтернативных jvm есть альтернативные реализации сборщиков, например С4 в azul jvm, разумеется не бесплатно, производительность у этой реализации хуже.
Стоит ли учить джаву для того чтобы скатится в мобильный игрострой?
Сколько вообще нужно минимум потратить времени на учебу чтобы соответствовать джуну без опыта работы?
Ну я вообще ньюфаг. Просто мне всегда казалось что игры на андроид пишут на джаве.
> времена ИК-портов и J2ME игр
На календарь посмотри, долбоеб. Java ME использовать собрался.
И да, застал, Siemens CX 75 до сих где-то лежит. Но какое отношение имеет твоя ремарка? Пока ты будешь думать, я на работу схожу.
> 100k человеколет
> 2000 человек в течении 50 лет
Ты совсем там ебанулся человекоднями однострочники считать? Ой прости, какие однострочники, ведь в жабе до Stream Api одной строчкой можно было сделать ровно нихуя только поебаться по аннотациями.
Какая разница как? Я имею в виду использует кто-то override хеш функции на практике или нет?
В каком смысле? Если вы тут дохуя сеньеры - объяснили бы нубу что не так. В том что я сказал что переопределять в хешмапе, а не в объекте? Из за этой неточности вы тут распетушитились?
Не стоит. Джава не для игр, серьёзно. А если линала не знаешь, то и ты не для игр.
Покажи код, где ты переопределяешь её. В процессе написания поймёшь, где именно ты обосрался.
Например, есть файл со строками:
x1 y1 z1
x2 y2 z2
xn yn zn
Изначально я не знаю, какого типа будет объект, поэтому создаю объект класса A и функцией read() читаю нужные переменные (их нужно будет хранить и потом использовать). И тут появляется два варианта:
Либо создавать новый объект через конструктор В(A object) и внутри перезаписать переменные (this.x = object.x)
Либо создавать новый объект через конструктор B(int object.x, int object.y)
Но это как-то не очень выглядит, хочу чтобы было красиво и легко переделывалось (общих переменных позже может оказаться другое количество или с другими значениями).
Сделай отдельный класс, который будет читать эти твои строки и на основе их содержание решать создавать и возвращать нужный объект.
Это надо будет либо строки повторно читать, либо как-то передавать в конструктор переменные.
Если читать строки повторно, то придется повторять код в каждом подклассе. Если передавать в конструктор, то опять придется одно и то же писать.
Попробую метод с кастом return (AA) A;
Ну написал, и что, ублюдок? От того что я говорился в каком месте переопределять, ты тут распетушился, вместо того чтобы ответить по теме?
>либо как-то передавать в конструктор переменные
Позже они могут оказаться в других типах и в другом количестве.
С кастом действительно тоже дерьмово выглядит. Тогда попробую так:
Создам новый класс H, который и будет хранить эти общие переменные.
На основании значений этого H буду вызывать конструкторы и передавать H, а у родительского класса будет переменная типа H, где наследуемые объекты и будут их хранить.
Но этого тоже как-то избыточно выглядит.
Ну заоптимизировали латенси за счет throughput, никто же не жалуется. Народу хватает производительности + многопоточность дешевая. Я то думал сейчас будет срыв покровов, а ты упомянул какой-то нерелевантный довод, иначе бы не плодилось на go новых сервисов/субд.
Конечно блять, посмотри на hashCode Object'a
И теперь подумай что это выдаст для:
var pojo1 = new POJO(1, "kek");
var pojo2 = new POJO(1, "kek");
> pojo1.hashCode() == pojo2.hashCode();
> pojo1.equal(pojo2);
А, это я наркоман.
Да, используют. В любой нормальной IDE есть генерация методов equals() и hashCode().
Постоянно будешь недоумевать, что программа крашится, если где-то пустая ссылка. А ещё будешь забывать ставить ; в конце
А в том, что когда у тебя 10 полей, вероятность получить конфликт в ПР при малейшем изменении в pojo возрастает раз так в дохуя. Это, конечно, не долго подмержить говно и исправить конфликт в модели, но это все равно время. Да и классы короче выглядят для восприятия. Про другую годноту генерала деломбока я и не говорю.
Нужно передать достаточно большой файл по НТТР. Сервер читает куски файла прямо из тела пост-запроса. Для передачи файла на клиентской стороне я использую apache httpclient 4. Проблема в том, что при передаче запроса как multipart сервер получает в теле запроса какое-то говно: например, рандомные разделители параметров запроса. Как при помощи этой библиотеки сформировать запрос так, чтобы в теле запроса были только сырые данные, а не разделителя, параметры и прочее дерьмо?
нет
Тогда каким образом передавать большие файлы? Почему почти во всех результатах в гугле для аплоада используется мультипарт?
Используй веб-сокеты и алгоритм как в торрент-кдиентах. Делаешь несколько веб-сокет соединений (чтобы лучше нагрузить канал) разбиваешь файл на несколько частей (например по 8Мб) и передаёшь кусок + индекс + хэш. Сервер проверяет правильность получения куска по хэшу и если что-то пошло не так просит отправить кусок снова. Потом всё собирает воедино, опционально проверяет хэш уже собранного файла и готово.
>Используй веб-сокеты и алгоритм как в торрент-кдиентах
Не я это решаю. Мне дали спецификацию рест-апи для аплоада файлов, и я пишу. Файлы требуется передавать в теле запроса. Я ищу способ написать это как можно лучше, короче и надежнее. Рабочий код уже есть, но он мне не нравится.
Я про то что мультипарт СПЕЦИАЛЬНО вставляет разделители, и если бекендер не криворукий мудак то все нормально читается, а ебля с сокетами это экзотика.
Вот попробуй на каком-то сервисе аплоаднуть фотку и посмотри в консоли браузера что там в теле запроса.
Допустим, есть у меня абстрактный класс Entity с полями long id и boolean active. Я могу сделать конструктор и там назначить, а потом просто в подклассах в родительский конструктор передавать.
А с интерфейсами как? Композиты - по-гейски.
Переделал сервер под получение мультипарт запросов. Ну ладно, пусть так работает. Тимлид сказал, что никаких вебсокетов. Рест и только рест.
что ты будешь делать, когда в одном из наследников нужно будет например сменить тип active на integer?
Кто-нибудь имел опыт там?
Смотри:
abstract class Entity {
long id;
boolean isActive;
public Entity(long id, boolean isActive) {
this.id = id;
this.isActive = isActive;
}
}
final class EntityX {
public EntityX() {
...
super(id, isActive);
}
public EntityX() {
super(id, isActive);
}
}
У EntityX extends Entity забыл.
теперь тебе в EntityX isActive нужно сделать integer. А в EntityY оставить по-старому
Так не может быть потому, что к EntityX и EntityY я буду обращаться как к Entity.
Не всегда же. Я обращусь к ним как к Entity, если мне нужные общие поля или переопределенные методы. В остальных случаях как к объектам подклассов.
Swing или JavaFX?
Насколько это будет перспективно в будущем? Правда, что десктоп приложения умирают?
JavaFX. Сыроватый он. Свинг получше будет, и продуманней
Да выше уже похожее кидал. Если более конкретно, то есть файл со строками вида:
entry_length entry_type data_1 data_2 ... data_n
Типов записи несколько, всю информацию считывать не нужно. Создал абстрактный класс FileEntry с переменными entry_length и entry_position (они потом пригодятся), от него наследовал классы FileEntryData, FileEntryTree и тд.
Кроме entry_length и entry_position подклассы содержат
FileEntryData: hash name data_type
FileEntryTree: name tree_entries_number tree_entries[tree_entries_number]
Ну вот и смотри: если делать не через абстрактный класс, то мне в каждом подклассе придется объявлять и инициализировать entry_length и entry_position.
Снова хотел спросить совета по другой проблеме, но пока описывал, придумал возможное решение. Спасибо, моя уточка.
Только декомпилировать и исправлять код. Впрочем если авторы не предусмотрели ресайз от простого включения у окна толку не будет. Просто при увеличении размера будет появляться пустое место, а все элементы будут оставаться там где они есть.
хуево, спасибо за ответ.
Все равно решение не сработало - мешают downcasts.
Нужно построить многоуровневое дерево записей исходя из типа и содержащейся информации в записи:
FileEntry fileEntry = MyFile.readEntry(position); //Фабрика, так что я не могу знать заранее возвращаемый тип
FileTreeNode.addChild(fileEntry);
Вот тут и возникает проблема:
if(fileEntry.isNode()) { //Пришлось добавить в абстрактный класс этот метод, чтобы не использовать instanceof
int[] positions = ((FileEntryTree) fileEntry).getEntries(); //Без каста метод не вызвать, а он только есть только у этого подкласса
}
Дальше рекурсивно все читается-добавляется. Но как избавиться от этих кастов и проверок? Неужели только для каждого подкласса по списку и методу вводить, чтобы фабрика сама сразу ноду добавляла?
В Интернете много что пишут.
Пытаюсь настроить среду джава разработки.
В мануале по настройке написано что нужно прописать в переменную среды CLASSPATH значение
C:\Users\username\algs4\algs4.jar;
Я так понял это дает знать рантайму джавы где в первую очередь искать собранные исходники.
Пытаюсь запустить через cmd как в книге
java RandomSeq 1000 100.0 200.0
пишет Error: Could not find or load main class RandomSeq
Так работает
java edu.princeton.cs.algs4.RandomSeq 1000 100.0 200.0
даже без настройки класспаса
Что я делаю не так?
Лезешь куда тебя не просят.
public class Test {
public static void act(){
String phrase;
Scanner sc = new Scanner(System.in);
System.out.println("Да или нет?");
String ans [] = {"да", "нет"};
phrase = sc.next();
phrase = phrase.toLowerCase(); //конвертируем всю строку в строчные буквы
boolean a = phrase.equals(ans[0]);
boolean b = phrase.equals(ans[1]);
if (a == true || b == true) {
System.out.println("На что ты ответил то?!");
} else {
while (!a || !b)
System.out.println("Я просто просил ответить 'да' или 'нет', не более!");
phrase = sc.next();
}
}
}
Сап как дело доходит до цикла, он выполняется бесконечно. Объясните почему и как исправить.
Во-первых, код выкладывают на pastebin или ideone или на что-то еще.
Во-вторых, чтобы цикл не выполнялся бесконечно, нужно либо чтобы условие цикла перестало быть истиной, либо чтобы где-то внутри цикла его выполнение прерывалось (break/return/exception). Ничего из перечисленного у тебя я не вижу.
Есть тут hybris макаки?
https://pastebin.com/ZUBs6SWX
Объясните, зачем в восьмой строке брать создание HelloThread в отдельные скобки?
Это тема многопоточности, но я не знаю, распространяется ли такое написание в других разделах.
Читал до этого Философию Java, там все писалось без скобок. А тут вот набрел на такой пример со скобками и не понимаю, зачем оно нужно и что это меняет.
Видимо, new имеет больший приоритет, чем вызов методов, а скобки - Abundant Parentheses.
Раз не изменилось, то и разницы нет. Поздравляю, ты ответил на свой вопрос.
Ситуация такова: 30 лет от роду, 9 лет коммерческой разработки на PHP, сеньер, в общем. Применяю Linux, postgres, rabbitmq, docker, nginx и тп.
Задача: максимально быстро перейти на Java, для разработки серверных приложений. Посоветуйте, что почитать про саму Java и про Spring, чтобы это было... как бы выразиться, сразу по теме, без нубства, с нормальными примерами.
Аноны, помогите плиз отвтетить на пару вопросов
1 вопрос такой
Что будет выведено при выполнении следующего кода?
String str = "0";
str += 1;
str *= 3;
System.out.println(str);
варианты ответа
Ошибка во второй строке
Ошибка в третьей строке
Будет выведено «3»
Будет выведено «010101»
Спасибо огромное
Есть еще один вопрос
Какой из методов доступен в любом экземпляре класса в Java?
1. main (String[] args)
2. notify()
3. parallel()
4. plus(Object o)
5. sleep (long timeout)
6. stream()
>PHP
>думает, что умеет программировать и способен сходу вкатиться в язык белых людей
>не умеет гуглить
Ну такое.
Незачем.
Что «ну такое». У тебя аутизм?
Я спрашиваю про джавовские литературные бестселлеры.
Нагуглить говна, В котором дауны для даунов объясняют наследование и дженерики я могу легко. И последнее: мне не нужно уметь программировать на джаве, мне нужно уметь разрабатывать с использованием джавы. Это две разные вещи.
Ну и пошел нахуй тогда, раз сам все знаешь.
Если бы ты хоть немного интересовался вопросом,
то знал бы, что Java чуть ли не единственный язык со строгой спецификацией языка и виртуальной машины, за это все её любят,
это значит, что если ты будешь соблюдать все стандарты (что там написано), то у тебя всё будет хорошо и у тебя будет обратная совместимость, а если нет, то у тебя будет шанс, что твоё приложение лет через 10 на новой JVM не запустится
раз такой сеньёр помидор и подавай тебе туториалы "недлябыдла"
https://docs.oracle.com/javase/tutorial/java/
Бля, идёшь и читаешь reference documentation Spring, Spring Boot, Spring Cloud, Spring Integration. Именно в таком порядке. Десять лет в ит, а спрашиваешь как маленький.
Нет, там все правильно. Для строки + означает конкатенцию, str += 1 это "0" + 1, т.е. "01".
Ошибка будет в третьей строке, т.к. для String операция * не определена.
>Потому что так эту переменную назвали.
Потому что автор тупорылый быдлокодер, тоже видимо из бывших похэпешников.
Remote interface
и
ThreadSafe interface
Не работает авторизация in-memory.
Да и он вообще игнорит мой xml security файл, а из класса java аннотация работает. Но авторизация - нет.
Чувствую, что не добавил какую-то важную ерунду куда-нибудь, но не знаю какую и куда.
Подскажите, куда копать?
tg: sickboi
Поясните за разницу между close() и disconnect(). И за разницу между вызовом этих close/disconnect у Channel и ChannelHandlerContext.
Например во фронтэнде понятно что разрабывается на интутитивном уровне. Но что делают бэкендеры?
Если он нужен только для того чтобы связать ООП и реляционную базу данных,
то используют ли его, когда используют Spring, учитывая, что там есть Spring Data??
Используют. Spring Data это не замена, а еще один необязательный слой поверх JPA/Hibernate.
Это реализация JPA.
Используется для любой серверной джавы. Т.е. в вебе тоже, если считать что на джаве бывает "веб".
В каждой второй вакансии вижу желательно знание html css javascript. Это ли не веб?
Веб, да, но если ты противопоставляешь его корпоративным приложениям, возможно, о вебе у тебя некое узкое представление.
Вызов getMessage не выводит сообщение в консольку, а просто отдаёт значение, которое уже ты сам дополнительно должен вывести в консоль. С отдельным классом ты вызываешь не ту функцию. Надо вызывать callDivide, а ты вызываешь divide, который выдаёт эксепшн, который отлавливает уже сама JVM.
на самом деле я сейчас онял, что правильней сделать вот так и вообще не обрабатывать unchecked exception, просто потому что это ненужно,
но почему тогда JVM не может точно так же обработать такое же по типу исключение, не выводит сообщение для нуллпоинтер?
> что правильней сделать вот так
Не, не правильней. Даже наоборот, некоторые в code style запрещают делать else, если в предыдущем if есть throw или return.
> но почему тогда JVM не может точно так же обработать
Потому что конструкцией try/catch ты сообщаешь, что хочешь самостоятельно обработать данное исключение. А то что ты не умеешь выводить содержимое эксепшона в консольку JVM уже не ебёт.
так что ли правильней? а я думал обрабатьвать самому unchecked исключения это зашквар
Тут я кстати в консоль сам ничего не вывожу, а вызываю все тот же гет мессадж,
https://geekbrains.ru/geek_university/java
Потому что ты не понимаешь что делаешь.
1) s.length само кинет эксепшн;
2) В блоке catch ты словил эксепшн, достал его месадж, но в консоль не вывел, из-за кетча приложение нормально закончилось.
>1) s.length само кинет эксепшн;
бля, вот этого я реально не понимал, по сути программа и не доходила до моего второго эксепшена,
спасибо
Да хрен их знает. Чтоб от мейл сру что-то годное было... Если шаришь в англюсик хотя бы на интермидиет уровне то вот годные курсы.
https://www.udemy.com/java-tutorial/learn/v4/overview - бесплатный курс по основам
https://www.udemy.com/java-design-patterns-tutorial/ - бесплатный курс от них же. Design patterns and architecture
https://www.udemy.com/java-multithreading/ - от них же про многопоточность курс.
https://www.udemy.com/spring-hibernate-tutorial/ - платный курс по Спрингу. 35 часов лекций за 11 долларов. Нормальная цена.
Спс анон, а то на курсере они скурвились и берут денюжку
А потом?
Я же не прошу конкретных вещей. Можно же примерно сказать что делаешь для человека который только пару недель изучает жаву кор.
>Я даже хуй знает как загуглить.
Вбиваешь на hh.ru слово java, читаешь в вакансиях описания проектов или самих контор, в ужасе дропаешь жаву и забываешь навсегда
Ширина и высота есть?
Берешь сканнер и читаешь инты/флоты. Или можешь построчно считывать и дальше разбивать как тебе надо.
Слишком много вопросов, хочется живого общения.
Ознакомился с книгой Шилдта, более менее выучил базис и в состоянии писать мелкие консольные приложения типа поиска последовательности Фибоначчи или факториала. Знаком с ООП. Хочу идти в андроид/вэб, но не имею понятия, что делать дальше. На оф.сайте андроида скудная документация, на мой взгляд. А гайды типа "ну, ебашим эту строку потому что так надо" кажутся не очень эффективными. Какие движения делать дальше? inb4: рычать и двигать тазом
>Хочу идти в андроид/вэб
Так в андроид или в вэб? По андроиду может быть лучше в соответствующем треде спрашивать.
Моудли, var, Graal вот-вот почти, сотни-милион диприкейтов.
https://www.udemy.com/spring-framework-5-beginner-to-guru/
Никак не решу какой из курсов купить. Curriculum какого курса вас впечатлил больше?
Кросскомпилятор пишу, который генерит код для ZX Spectrum. BASIC подобный язык с ООП, лямбдами и подсчетом ссылок.
Но застопорился на делении целых чисел. Умножение легко выразить через сложение и сдвиги, типа 123x17 = 123x16 + 123x1 = 123 << 4 + 123, а вот как можно делить не знаю...
Официальная документация must have конечно. Но приступаю к ней когда уже имею опыт какой-никакой. Да и 10 баксов небольшая цена за курс хороший.
Проблема этих курсов, что там учат делать все по шаблону, без понимания общей архитектуры. Пока все делаешь по методичке - ок, как только нужно что-то поменять, приходиться гуглить и копипастить кучу непонятного кода, переопределять какие-то методы, о которых вообще ничего не рассказывали и т.д. В итоге приходится учить все ту же документацию.
Да согласен.
Но я делаю так.
1. Краткий курс по основам.
2. Книга по нужной теме
3. Офф документация.
И в голове потом много чего остается.
> Ознакомился с книгой Шилдта
нинужна
> поиска последовательности Фибоначчи
нинужна
> На оф.сайте андроида скудная документация
нужна
>
В контексте моего вопроса это не так важно. Я не знаю, что делать после выбора специальности. Пока пробую себя в андроиде. Стоило бы спросить в их треде, да.
Ну тебе виднее, мне лично жалко отдавать бабло на пересказ бесплатных статей с хабра.
Лучше купить хорошую книгу.
Состояние, т.е. данные в интерфейс ты не запихнешь.
Т.е. я задал определение отправляющегося объекта от типа полученной ссылки HttpServletRequest request, String link = request.getRequestURL.
Но есть одна нестыковочка в этой структуре, я не знаю как задать эти ссылки в апаче. Их где то надо захардкодить? Или ониваляются в xml каком то.
Все работало когда я стучался на сервер по названию сервлета StartServer. Перестало когда мне понадобилось работать с разными типами ссылок, которые отправляют разные типы xml.
Сори за сумбур, если вкратце, то как создавать ссылки в Apache TomCat?
Пока изучаешь, не обязательно. На линуксах работают все серверы, но вести разработку на джаве прекрасно можно и под вендой.
Линукс он и в африке линукс. Ты наверное имеешь в виду какой дистрибутив/Desktop Environment?
Да, именно это и имею в виду. А то как наслушаешься, то каждый дистрибутив чуть ли не отдельный мир
Понял, спасибо
Можно лучше.
1. переименовываешь файлы (сперва запатентуй эту технологию)
2. создаешь двоичную кучу, в нее суешь названия файлов
3. проходишь по одной из веток
4. как только доходишь до пустых детей разворачиваешь дерево
5. идешь по одной из веток
Так в папке по имени все равно отсортируются, да и читает с флешки по порядку.
Нихуя не понял, но вангую тебе надо слать get-запросы? Возьми у разрабов, или посмотри по коду, чё там должно быть.
Не знаю.
Набросал примерный каркас
https://pastebin.com/AKrVernG
Скажите, это приемлимое решение? Интересует использование разных Executor'ов под различные задачи - не слишком ли это плохо? До этого с многопоточкой почти не работал, потому предупреждаю, код может вызвать неудержимые приступы смеха.
У меня есть макулатурка с описанием всего ЭТРАН. В ней указан формат записи эндпоинтов, сказано, что запросы делаются при помощи процедуры GetBlock, есть wsdl-описание этой процедуры и куча запросов.
Как все это использовать?
Приблизительно понимаю, как создаются SOAP-сервисы на джаве. Я написал простейший сервис и клиент к нему.
Не понимаю, как соединиться с эндпоинтом и выполнять запросы. Со своим простым сервисом я соединяюсь, получая при помощи wsimport классы, описывающие сервис, и для моих четерех круд-методов их получилсь дохуя (66 или 7). Что будет, если так же я попробую сгенерить классы для всего огромного ЭТРАН? Пиздец.
Как лучше написать простой клиент для ЭТРАН? Нужно показать выполнение хотя бы одного любого запроса.
Что делать с WSDL ЭТРАНа?
То есть, wsimport'ом генерю классы, подключаю к проекту клиента и при помощи них выполняю запросы. Не знаю, как лучше сделать это для этрана.
Гугли cxf-maven-plugin. Класть в проект генерируемые файлы - зашквар. Ну и не похуй ли тебе сколько там методов тебе нагенерируют? Используй то, что надо и всё.
1. Java 8 тебе недоступна? В ней есть удобный CompletableFuture на замену ListenableFuture из гуавы.
2. В твоем коде создается newCachedThreadPool(), который нигде не используется, а также directExecutor необязательно в явном виде запихивать в addCallback, там должна быть перегрузка без 3-го параметра. В целом нормально, если считать что сидим на java 7.
Вот и поковыряй спринг пока, раз все равно висит.
>Гугли cxf-maven-plugin
Ок, научился генерировать классы этим сервисом. Куда их сохранять? В отдельную директорию или в исходники src/java? Как подключать сгенерированные классы в свой проект, если они сохранены не в директории исходников?
>Класть в проект генерируемые файлы - зашквар
Куда их класть?
Предлагают просто айтишником\техподом, кем я и работаю. Максимум было по тестерству.
Пока знаю только кор и jdbсне знаю
>Ок, научился генерировать классы этим сервисом. Куда их сохранять?
Два варианта:
1. Никуда не сохранять, будут генерироваться при каждой сборке перед компиляцией
2. Положить в исходники (src/java), но настроить сборку (maven) так, чтобы можно было в любой момент их перегенерировать.
Т.е. wsdl в проекте в любом случае тоже будет лежать.
Окей, с этим понятно. В моем маленьком проекте все заработало. Хочу вернуться к исходной задаче. Есть спека на ИС РЖД, два wSDL-описания методов SendBlock и GetBlock, при помощи которых клиент общается с ИС. И есть описание всех запросов. Как это использовать?
Систему, кстати, с 93 или 95 года писали на делфи 10 лет, а потом 5 лет запускали, лол. На их сайте конкурс частушек, конкурс "лучший работник РЖД" и какие-то матрешки. Пиздец.
>Как это использовать?
В чем проблема? Ты ж писал, что в принципе клиенты к сервисам у тебя получались. Или ты хочешь, чтобы тут кто-то за тебя разбирался со спецификой твоего ржд?
>Ты ж писал, что в принципе клиенты к сервисам у тебя получались
Ладно, дальше я сам. У меня из дома недоступен эндпоинт, а ставить випнет мне лениво, поэтому я даже не знаю, что меня ждет на работе. Наверно, получится с ним работать так же, как с моими сервисами.
Ну с одним кором тяжело устроиться. Спринг нужен джуну. Плюс еще html css js нелишним будет.
Что тогда делать в таком случае? В Факе темы вон тоже написано что поможет не писать костыли.
Напиши пару крупных консольных программ, потом сам поймешь, что тебе нужно.
https://www.youtube.com/watch?v=TBWX97e1E9g&list=PLE7E8B7F4856C9B19
Лень коменты прочитать? Второй же комент отвечает на вопрос
Поясните вкатывальщик за апплеты, господа! Нужно их учить или пропустить, так как они диприкейтед?
Это копия, сохраненная 3 августа 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.