Это копия, сохраненная 12 марта 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
Caused by: java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
Выскакивает когда я подключаю arquillian
через dependencyManagement
<artifactId>arquillian-bom</artifactId>
<version>1.4.1.Final</version>
Я хуй знает нахуя оно пытается подписывать и как это отключить нахуй
Лол, какие сто срок то, подключить библиотеку и одной строкой замапить в обьект?
5 минут и 8 строчек (не считая data-класса). ЧЯДНТ?
HttpClient client = HttpClient.newBuilder().build();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("http://demo0424665.mockable.io/hui"))
.header("Content-Type", "application/json")
.GET()
.build();
HttpResponse<String> httpResponse = client.send(request, HttpResponse.BodyHandlers.ofString());
Response response = new ObjectMapper().readValue(httpResponse.body(), Response.class);
Ты компьютерный гений?
>что такое JavaBean и зачем он нужен
Типа обычный класс с сериализацией и геттерами сеттерами.
Нужен чтобы скармливать интырпрайзной поеботе.
> Что такое model в MVC
хранилище данных и его логика
> Что такое JSP
Стандартный жабошаблонизатор из бородатых годов. Шаблонирует шаблоны.
> почему нельзя заменить его на HTML страницу?
Вопрос в 2к19 нужно заменить на другой:
> "Нахуя его использовать в эпоху SPA и реакта"
Например, я пытаюсь написать подобие электронной школы, то есть где хранятся оценки, дата по ученикам, расписания, все такое. И вот постоянно ломаю голову для чего создавать отдельный класс, массив, объект и прочие вещи. Например создавать ли отдельные классы для отдельных предметов(уроков), использовать ли наследование при этом, либо вообще не создавать классов для этого, а вносить всю дату непосредственно в объекты(учеников). И подобные вопросы встают на каждом шагу.
Вопрос: стоит ли мне сейчас над этим так задумываться, или просто делать как удобно? Я свободно владею английским, но не могу найти подходящее объяснение в каких именно ситуациях что использовать, лишь определения по типу "что такое класс", а это и так понятно.
> я понимаю как работают классы, методы, объекты и тд, но не понимаю когда и что лучше применить.
>базовые навыки программирования с использованием любого объектно-ориентированного языка
Я в душе не ебу что такое ООП, и за сколько можно выучить джаву, чтоб жойти до этого самого ООП. И базовые навыки это на сколько?
До 8 февраля подача документов
Нормально же общались
Изи. Никакого наследования. Хранение в базе
PupilService
CheduleService
ReportService
И сущности PupilEntity, ScheduleEntity, LessonEntity и т.д.
Всё, что является объектом - класс, урок, школа, расписание и т.д, можно и нужно сделать классом. К наследованию подходи осторожно - не применяй его там, где оно не нужно, и не плоди сложные иерархии. Предпочитай композицию наследованию.
Очевидно, что учителя и ученика можно занаследовать от абстрактного пёрсона, а вот лицей и школу разными классами делать не стоит - они должны отличаться стратегиями преподавания. Школа-интернат может наследовать интерфейс школы и тем самым декорировать как лицей, так и обычную школу, добавляя в эти классы новое поведение. Это тебе для затравки, а дальше думай сам. Можешь закодить и закинуть на гитхаб, что получится.
Но для начала настоятельно рекомендую ознакомиться, что такое SOLID, а потом прочитать Head First Design Patterns, где эта концепция раскрывается вместе с основными паттернами проектирования.
Есть кусок кода заточенный на производительность.
Есть два стула написать: x = object.getMyPropertyValue() или объявить свойство public final и написать x = object.myPropertyValue
Где:
public int getMyPropertyValue() {
return myPropertyValue
}
Аргументы за первый вариант: Это правильно с точки зрения кода
Аргументы против первого варианта: Вызов функции ради извлечения четырёх байт - не круто
Аргументы за второй метод: Это должно работать быстрее
Аргументы против второго варианта: Код менее читабельный.
Сидел ебал я себе мозг, а потом вспомнил о такой херне как оптимизация при компиляции и компоновка коротких методов в inline функции с последующим вынесением их в целевой код. Но я нихера не помню, будет ли вынесено чтение private/protected метода или нет? Сейчас что-то этот пункт в описание найти не могу, там только говориться о коротких методах.
Выберите мне стул
https://github.com/spring-projects/spring-petclinic
>Посоны, в Спринге есть аннотация @Autowired, которая судя по документации заменяет сеттеры и геттеры при связи репозитория, сервиса и контроллера. Правильно ли я понимаю, что это ужасный, построенный на рефлексии, костыль, который лучше не использовать?
А на чём ему ещё быть? Но он теоретически не так страшен, так-как по "уму" должен использоваться единожды при инициализации глобальных переменных.
Сложнее инлайнить методы, которые могут быть переопределены в сабклассах. С private или static методом вероятность наоборот будет выше. Попробуй это и проверь, инлайнится или нет.
http://normanmaurer.me/blog/2014/05/15/Inline-all-the-Things/
Но оно должно того стоить - т.е. JIT должна посчитать метод достаточно горячим, чтобы от этого был профит.
С позиции дизайна, Джош Блок считает, что раскрытие иммутабельного final поля неоднозначно, но допустимо.
>>33630
Нет, ты понял неправильно. Почитай сначала, что такое inversion of control. @Autowired это добро, и эта аннотация не заменяет ни геттеры, ни сеттеры. Спринг даёт тебе IoC-контейнер и сам управляет инициализацией классов и внедрением зависимостей. @Autowired означает, что в поле твоего экземпляра нужно засунуть экземпляр другого класса из контейнера. Причем хорошей практикой является использование интерфейса, чтобы Спринг сам заинжектил подходящую реализацию. Реализация может быть выбрана на основе профиля, мок-реализация может быть использована в интеграционных тестах, и т.д.
И не используй @Autowired с private полями, желательно всё инжектить с помощью конструкторов.
Гродно
http://www.jsonschema2pojo.org/
Типа вот так Set<Integer |>, а я же хочу вот так Set<Integer> |, чтобы без лишних нажатий набрать имя переменной и не жать End. Я что-то не понимаю? Это можно настроить?
обнял
>>33590
Тащем-то анон все расписал. Но я добавлю.
Если в универе не прогуливал философию, то помнишь, что Аристотель выводил форму и материю.
Представь стакан в своей голове, он нематериален – это форма, т.е. класс. Он не занимает никакого пространства.
По форме создается сущность – т.е. форма, заполненная материей (стакан на твоем столе). Это объект, созданный по некому классу. Он физически есть на диске в виде байтиков. Эти объекты по разному заполнены материей (отличаются свойствами (значением полей), один стакан толще, другой выше), тем самым, объекты одного класса отличаются друг от друга (помимо ссылки). У любого объекта есть метод .toEquals(), переопределив его можно сравнивать объекты одного класса.
Кроме того, объекты делятся на низшие (т.н. POJO или DTO) и высшие.
Низшие объекты – это тупые объекты, болванки. Они просто несут информацию. Тут подробнее (https://www.yegor256.com/2016/07/06/data-transfer-object.html). Высшие объекты это те, которые проявляют некоторую активность (т.е. имеют функции).
Кроме того, есть интерфейсы. Взять тот же стакан – основная его цель это удерживать жидкость. Т.е. он имеет некий контракт. Если он выглядит как стакан, но не имеет дна – это не стакан, т.к. он не отвечает контракту (интерфейсу) на удерживание воды – она будет выливаться.
При чем тут вообще сервисы/репозитории? Это аннотация для автоматической подстановки зависимостей (бинов) из спринг-контейнера. Вообще весь спринг - это сплошная рефлексия, включая @Autowired. Короче говоря, не понял ты ничего.
Достаточно MVC-шно? Или лучше метод updateColor перенести в контроллер? И еще запуск приложения через метод init это какая-то хуита, но для FX я не нашел других вариантов.
Попробуй любой из популярных курсов на udemy.
Например в методе:
public void foo(@RequestBody String bar) {...}
необходимо, чтобы вместо String отображался другой класс, но использовать класс прямо в параметре не могу.
есть код вида
String yoba;<-результат вернуть сюда
try{
разные действия;
yoba=результат разных действий;
}catch{}
Вывод(йоба);
Ретурн не работает
Запихни в finally
1. В большинстве случаев в Spring.boot+Hibernate люди оборачивают методы класса-Репозитория методами класса-Сервиса, и из Контроллера вызывают уже эти классы.
В отдельных случаях из Контроллера вызывают напрямую классы Репозитория. В чём плюсы?
2. Я написал метод поиска элемента по названию. Создаю форму, получаю искомое значение, перебираю Репозиторий, выбираю совпадения, вывожу их. Все верно?
>2. Я написал метод поиска элемента по названию. Создаю форму, получаю искомое значение, перебираю Репозиторий, выбираю совпадения, вывожу их. Все верно?
В смысле, не слишком ли это по велосипедному?
1. репозиторий отвечает за сохранение/получение данных в бд, а сервис за обработку этих данных. можешь менять реализацию репозитория (запилить все через JDBC, например) или сервиса(после извлечения firstName добавить к нему "tvoya_mamka"), и если они сохраняют/расширяют уже имеющиеся интерфейсы, то все заебись будет. вся эта делается, чтобы твоя абстракция не зависела от конкретной реализации.
2. для себя - сойдет, но в спринге есть JpaRepository, например, который все делает без тебя. читай документацию.
>2. для себя - сойдет, но в спринге есть JpaRepository, например, который все делает без тебя. читай документацию.
Там есть только
1) findById(id) - очевидный вариант
2) findOne() - хз, как он работает, но возвращает 1 результат. А я написал поиск с выводом списка подходящих вариантов (похожие названия и иные поля).
Там есть все методы для всех полей, которые у тебя есть в твоей сущности, читай внимательнее.
Есть метод findOne()
Returns a single entity matching the given Example or null if none was found.
Throws:
IncorrectResultSizeDataAccessException - if the Example yields more than one result.
Поиск в базе данных не по Id (PrimaryKey) может дать множество значений, поэтому разумнее вывести список.
>дать множество значений
Кроме того, пользователь может искать только по одному полю из множества.
Читай внимательнее про репозитории в спринге. Он сам генерирует все необходимые методы для поиска чего угодно по любым полям.
Для поиска по id я использую, тут всё просто.
Optional<Book> book = this.bookRepository.findById(id);
@Override
public Book getBook(Integer id) {
//return bookRepository.findOne(id);
Optional<Book> book = this.bookRepository.findById(id);
if (book.isPresent()) {
return book.get(); // If a value is present in this Optional, returns the value, otherwise throws NoSuchElementException.
} else {
return null;
}
}
Но допустим, мне нужно создать форму поиска, позволяющую искать книгу по заголовку (пользователь может внести, например, только заголовок). Моя конструкция выглядит так:
@GetMapping("/books/search")
public String showSearchForm(Model model) {
Book book = new Book();
model.addAttribute("book", book);
return "/books/searchForBook";
}
@PostMapping("/processSearchForm")
public String processSearchForm(Book bookToFind, Model model) {
List<Book> foundBooks = new ArrayList<>();
// strict search by ID
if (bookToFind.getId() != null) {
foundBooks.add(bookService.getBook(bookToFind.getId()));
}
// search by title & author
else
{
for (Book currentBook : bookService.getAllBooks())
{
if (bookToFind.getBookTitle()!= "" && currentBook.getBookTitle().toLowerCase().contains(bookToFind.getBookTitle().toLowerCase()))
{
foundBooks.add(currentBook);
}
else if (bookToFind.getBookAuthor() != "" && currentBook.getBookAuthor().toLowerCase().contains(bookToFind.getBookAuthor().toLowerCase()))
{
foundBooks.add(currentBook);
}
}
}
model.addAttribute("books", foundBooks);
return "/books/booksList";
}
Это позволяет мне получать список со всеми книгами, в заголовке которых есть искомая строка.
1. Для чего мне нужен findOne в данной схеме?
2. При попытке реализовать findOne(Book book) у меня подсвечивается ошибка:
inferred type s for type parameter s is not within its bound should extend...
Конструкция
Optional<Book> book = this.bookRepository.findOne(Optional.of(bookToFind));
не помогает.
Для поиска по id я использую, тут всё просто.
Optional<Book> book = this.bookRepository.findById(id);
@Override
public Book getBook(Integer id) {
//return bookRepository.findOne(id);
Optional<Book> book = this.bookRepository.findById(id);
if (book.isPresent()) {
return book.get(); // If a value is present in this Optional, returns the value, otherwise throws NoSuchElementException.
} else {
return null;
}
}
Но допустим, мне нужно создать форму поиска, позволяющую искать книгу по заголовку (пользователь может внести, например, только заголовок). Моя конструкция выглядит так:
@GetMapping("/books/search")
public String showSearchForm(Model model) {
Book book = new Book();
model.addAttribute("book", book);
return "/books/searchForBook";
}
@PostMapping("/processSearchForm")
public String processSearchForm(Book bookToFind, Model model) {
List<Book> foundBooks = new ArrayList<>();
// strict search by ID
if (bookToFind.getId() != null) {
foundBooks.add(bookService.getBook(bookToFind.getId()));
}
// search by title & author
else
{
for (Book currentBook : bookService.getAllBooks())
{
if (bookToFind.getBookTitle()!= "" && currentBook.getBookTitle().toLowerCase().contains(bookToFind.getBookTitle().toLowerCase()))
{
foundBooks.add(currentBook);
}
else if (bookToFind.getBookAuthor() != "" && currentBook.getBookAuthor().toLowerCase().contains(bookToFind.getBookAuthor().toLowerCase()))
{
foundBooks.add(currentBook);
}
}
}
model.addAttribute("books", foundBooks);
return "/books/booksList";
}
Это позволяет мне получать список со всеми книгами, в заголовке которых есть искомая строка.
1. Для чего мне нужен findOne в данной схеме?
2. При попытке реализовать findOne(Book book) у меня подсвечивается ошибка:
inferred type s for type parameter s is not within its bound should extend...
Конструкция
Optional<Book> book = this.bookRepository.findOne(Optional.of(bookToFind));
не помогает.
Какой ты хуйней страдаешь, открой уже петклиник да посмотри как там сделано. Я не видел, но наверняка там используется интерфейс CRUDRepository и нет такого говна в контроллере.
1. ПэтКлиник недалеко ушёл.
2. Да, я делаю велосипед, но только для того, чтобы разобраться.
@GetMapping("/owners/find")
public String initFindForm(Map<String, Object> model) {
model.put("owner", new Owner());
return "owners/findOwners";
}
@GetMapping("/owners")
public String processFindForm(Owner owner, BindingResult result, Map<String, Object> model) {
// allow parameterless GET request for /owners to return all records
if (owner.getLastName() == null) {
owner.setLastName(""); // empty string signifies broadest possible search
}
// find owners by last name
Collection<Owner> results = this.owners.findByLastName(owner.getLastName());
if (results.isEmpty()) {
// no owners found
result.rejectValue("lastName", "notFound", "not found");
return "owners/findOwners";
} else if (results.size() == 1) {
// 1 owner found
owner = results.iterator().next();
return "redirect:/owners/" + owner.getId();
} else {
// multiple owners found
model.put("selections", results);
return "owners/ownersList";
}
}
И репозиторий:
public interface OwnerRepository extends Repository<Owner, Integer> {
/
Retrieve {@link Owner}s from the data store by last name, returning all owners
whose last name <i>starts</i> with the given name.
@param lastName Value to search for
@return a Collection of matching {@link Owner}s (or an empty Collection if none
found)
/
@Query("SELECT DISTINCT owner FROM Owner owner left join fetch owner.pets WHERE owner.lastName LIKE :lastName%")
@Transactional(readOnly = true)
Collection<Owner> findByLastName(@Param("lastName") String lastName);
1. ПэтКлиник недалеко ушёл.
2. Да, я делаю велосипед, но только для того, чтобы разобраться.
@GetMapping("/owners/find")
public String initFindForm(Map<String, Object> model) {
model.put("owner", new Owner());
return "owners/findOwners";
}
@GetMapping("/owners")
public String processFindForm(Owner owner, BindingResult result, Map<String, Object> model) {
// allow parameterless GET request for /owners to return all records
if (owner.getLastName() == null) {
owner.setLastName(""); // empty string signifies broadest possible search
}
// find owners by last name
Collection<Owner> results = this.owners.findByLastName(owner.getLastName());
if (results.isEmpty()) {
// no owners found
result.rejectValue("lastName", "notFound", "not found");
return "owners/findOwners";
} else if (results.size() == 1) {
// 1 owner found
owner = results.iterator().next();
return "redirect:/owners/" + owner.getId();
} else {
// multiple owners found
model.put("selections", results);
return "owners/ownersList";
}
}
И репозиторий:
public interface OwnerRepository extends Repository<Owner, Integer> {
/
Retrieve {@link Owner}s from the data store by last name, returning all owners
whose last name <i>starts</i> with the given name.
@param lastName Value to search for
@return a Collection of matching {@link Owner}s (or an empty Collection if none
found)
/
@Query("SELECT DISTINCT owner FROM Owner owner left join fetch owner.pets WHERE owner.lastName LIKE :lastName%")
@Transactional(readOnly = true)
Collection<Owner> findByLastName(@Param("lastName") String lastName);
>Да, я делаю велосипед, но только для того, чтобы разобраться
Еще раз, разбирайся правильно. https://habr.com/ru/post/139421/
>Еще раз, разбирайся правильно.
>Не буду объяснять свою позицию, буду загадочно умничать и слать в гугл.
Я тебе уже все объяснил и дал ссылку на конкретный пример, но ты, видимо, просто не хочешь разбираться.
Зачем ты фильтруешь в джаве, когда есть sql? Пишешь метод в BookRepository: List<Book> findByTitle(String title). Все.
По поводу findOne. Он использует EntityManager.getReference(...) и возвращает прокси (НИКОГДА null), и если объект не найден, то при первом обращении к этому прокси вывалится EntityNotFoundException (см. доки на EntityManager).
>Я тебе уже все объяснил
Нет, ты токсичный дурак, который самоутверждается на анонимном форуме.
>CRUDRepository
>сам генерирует все необходимые методы для поиска чего угодно по любым полям
>Там есть все методы для всех полей, которые у тебя есть в твоей сущности
>Зачем ты фильтруешь в джаве, когда есть sql?
На данном этапе я работаю с h2. Когда пропишу все методы работы с объектами, переключусь с h2 на SQL.
>Пишешь метод в BookRepository: List<Book> findByTitle(String title).
Спасибо.
>По поводу findOne. Он использует EntityManager.getReference(...) и возвращает прокси (НИКОГДА null), и если объект не найден, то при первом обращении к этому прокси вывалится EntityNotFoundException (см. доки на EntityManager).
Спасибо.
Бтв, я перепутал, не findOne, а getOne. Если тебе нужно найти по произвольным полям, причем некоторые могут быть null, попробуй query by example.
h2 это такая же бд, хоть она у тебя и в памяти. Пиши сразу sql репозитории, потом сможешь заменить базу, а код менять не придется.
Нубский вопрос
Создал проект Spring Initializr.
Запихнул в него index.html со скриптом.
Скрип посылает запрос get.
@GetMapping метод принимает запрос и возвращает строку.
Скрипт отправлявший запрос отлавливает строку, вплоть до этого момента всё работает как и ожидалось.
Но затем содержимое html-страницы подменяется строкой (если был прописан @RESTController, иначе в ответ на запрос GET возвращается хуйня).
Как предотвратить подмену содержимого страницы?
Джун хочет съебать из этой страны. Английский в порядке. Откуда начинать? Пока зарегался на linkedin, но что делать дальше непонятно.
У тебя там какие где URL?
1) html это наверное "/index.html"
2) в form action у тебя что?
>Но затем содержимое html-страницы подменяется строкой
Ты просто перешёл на другую страницу
Ты хоть ajax используешь? Если нет, то у тебя просто страница открывается с твоей строкой.
нужно установить возвращаемую строку, как атрибут модели:
model.addAttribute("name", name);
включить этот атрибут в html страницу с помощью какого-нибудь thymeleaf:
<p th:text="'Hello, ' + ${name} + '!'" />
>>34997
>>34999
Я вообще неправильно отправлял запрос GET. Я обращался к localhost:8080, и поэтому ответ подменял собой index.html.
Сейчас обращаюсь к localhost:8080/controller и всё отрабатывает как надо.
Единственная проблема - браузер постоянно цепляет старую версию скрипта, которая посылает запрос на localhost:8080.
Старый файл с яваскриптом цепляется из кэша браузера?
Можешь в режиме инкогнито открывать.
В русском только 3-е нашёл, пробовал читать пятое но пиздец быстро устаю.
Спасибо, то, что надо.
плиз респонд
Это нормально в ДС3 получать 70к с 5 годами опыта в серверной джаве?
Ну, под дс 3 я имел в виду Новосибирск.
Кто может объяснить, или скинуть годную статью по теме как происходит взаимодействие backend(Spring) с frontend(JS). Нагуглил про AJAX и прочее, но это только еще больше меня запутало. Раньше старался не лезть в мир фронтенда, но обстоятельства заставили. Например представим ситуацию: моя задача написать на серверной стороне спринговое веб-приложение которое ходит в бд и возвращает данные для отображения на странице. Как это сделать по-современному? Потому что раньше я делал это только через jsp и прочие статические вьюхи, без js на стороне клиента. Интересно как это происходит в реальном мире?
REST на бекенде (@RestController и иже с ним), и какой-нибудь способ слать HTTP запросы с фронта (в каком-нибудь Angular.js эта штука есть из коробки). Фронт ходит по REST эндпоинтам и получает данные с бекенда. Ну, это если коротко.
Понял, спасибо, а есть видео/статья где это подробно описуется? Буду очень благодарен.
Еще по REST вопрос. Я так понимаю это отдача данных по HTTP обычным JSON/XML/etc ?
Да ты открой гайды по спринг буту. Там есть 5 минутные гайды, где собирают такой рест сервис.
Да, обычно отдача инфы идет в формате JSON, реже в XML. Иногда бывает, что нужно отдать какой-нибудь файл, например - тут отдаешь бинарный поток.
Обычно делается так - один докер контейнер, в котором крутится nginx и твой фронт. nginx раздает статику и хранит в себе твою фронт-логику. Также nginx проксирует запросы к твоему API через себя и к твоему Spring Boot (или что там у тебя) приложению, которое развернуто в другом докер контейнере.
Такие дела.
https://github.com/spitfireoverwatch/BookManager_Spring.boot
Чего ещё к нему добавить, помимо подключения к SQL вместо H2?
Чем пользовался? Доки мануалы книги?
Сколько времени потратил?
1) Запили read.me где расскажи как запускать.
(mvn compile spring-boot:run)
2) Что за хипстерские maven враперы?
...зачем?
>2) Что за хипстерские maven враперы?
Для сборки и запуска без установленного maven
>Чем пользовался? Доки мануалы книги?
>Сколько времени потратил?
Туториалы + документация. Потратил довольно много времени на чтение, само приложение пишется быстро. Думаю, суммарно вышло по несколько часов в течение дней четырёх. 90% - чтение.
Я вот после джавы - жабаскрипт осиливаю. Пиздец это говно кривое. Просто пиздец. Как на нем писать.
Зная немного С и питон не лезет вообще, организм прям отторгает.
>>35608
> bookToFind.getBookTitle()!= "" && currentBook.getBookTitle().toLowerCase().contains(bookToFind.getBookTitle().toLowerCase()))
> (bookToFind.getBookAuthor() != "" && currentBook.getBookAuthor().toLowerCase().contains(bookToFind.getBookAuthor().toLowerCase()))
зачем пустую строку проверяшь наркоман
null хотел написать?
Я в это даже вчитываться не стал, лол.
У нас в оффисе все программисты получают минимум 150к, и это даже не джуниоры, а какие то духи 16-ти летние после школы.
Миддл с 5 годам опыта получает примерно 120к.
Сделал круд, даже кириллицу отображает нормально (та ещё проблема)
И я решил сам себя взломать мамкин хакер
В форме отправляю теги, но они все отображаются просто как текст!
Пишу в форме <h1>Fuck</h1>
Вывод получаю такой же <h1>Fuck</h1> (смотрю результирующий html, там лишних тегов нет, но эти теги не подсвечиваются )
С кодировкой что-то наверное?
А ты блядь сам понял!
В хроме если по F12 код смотреть то там он не подсвечивает теги потому что это блядь не теги а < и >
И у видеть это можно только если нажать редактировать как html!
Нет не стоит. Выкинутые деньги. Все есть в шапке.
Если тебе нужны именно КУРСЫ чтобы тебя учили, можешь сразу забить на попытки начать кодить вообще, лол.
>скажите плз стоит ли тратить деньги (которых немного ибо студент) на их подписку
Да. Я с удовольствием 3/4 их курса прошёл.
>>35812
Поясняю за Javarush.
Это сервис автоматической проверки кода. Ты пишешь код по заданию, валидатор проверяет код. Начинаешь с хелло ворд, но уже скоро пишешь маленькие приложения, работаешь с потоками, файлами, объектами.
Бывают очень заковыристые задачи. Валидатор в 90% случаев проверяет точно, при этом у тебя есть возможность решить поставленную задачу несколькими путями. Будет несколько задач, где валидатор будет лютовать.
Теория там вся из книг, но теорию ты можешь почерпнуть без них, из книг и туториалов. То есть вся фишка Javarush вовсе не в каких-то лекциях, семинарах, вебинарах, прочей лабуде уровня Skillbox, а именно в получении сотен часов простой практики.
Быстро пробежавь Javarush с нуля, можешь переходить к фреймворкам вроде Спринга, писать веб-приложения и КрУДы для баз данных, после чего идти и работать.
Мне лично Javarush много дал, я доволен.
Осваиваешь синтаксис.
+ читаешь всякие хед ферст / кук бук с паттернами/алгоритмами.
И дальше ПРОСТО:
Пиши свое что нибудь, неважно что.
Калькулятор, часы, радио, генератор лабиринтов + решение этих лабиринтов (поиск в ширину), игры на любом движке, говномикросервисы, что угодно.
И пока ты это будешь писать будешь решать реальные задачи.
Копать стаковерфлоу и дрочить с самыми банальными моментами, которые потом войдут в подкорку.
Задачки для олимпиадников.
похоже на то, плохо становится когда вижу эти ресунки и ОЧЕНЬ ИНТЕРЕСНЫЕ ИСТОРИИ
Сюда выкладывай, пацаны оценят!
ого, а я как раз щас этим занимаюсь
Не спорю, но это, чего ждут от программистов. Хороший, большой КрУД - это CRM для бизнеса.
> Такая параша, господи прости меня. Какие-то математичкеские задачки, операции над массивами
Вот кстати на Javarush упор именно в специфику Java и ООП. Все адаптеры, врапперы, паттерны.
Но в целом мне теперь Javarush кажется полностью пройденным этапом.
Jsp еще кто то использует?
ООП, коллекции, но на самом деле по java я не так много знал (голый jdbc, зачем-то сервлеты и сё). В основном вывез за счёт того, что хорошо знал SQL/работу баз данных (транзакции блокировки хуё моё) и что шёл на стажёра.
Если бы сейчас снова с нуля учил, я честно не знаю, откуда можно начать. У спринг бута например есть туториалы, но они сводятся к тупому копипасту без объяснений, книжки в отрыве от практики тоже пользы мало принесут.
>>35904
Я чутка глянул их программу, вроде адекватно выглядит. Только цену не нашёл, если там какие-нибудь 100к как у мейл.ру, проще стажёром пойти куда-нибудь.
Я с его помощью не знаю ЖС наебенил норм страничек. С показом полей по авторизацией и т д. Норм штука.
>туториалы, но они сводятся к тупому копипасту без объяснений
Да ты ахуел.
https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc
И это только офф сайт. Пиздос какие тут дауны сидят.
тогда имеет смысл проверить через StringUtils.isEmpty()
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/util/StringUtils.html#isEmpty-java.lang.Object-
Походу да. Делаешь темплейты из html, делаешь фрагументы, и всё.
Картинку. Попробовал щас свинг прикрутить, вроде прикрутился, но что дальше делать - не ебу, графовый обход по гексагонам и преобразование неведомым хуем гексагона в элемент игрового мира, мейби, но я хз
Причем тут свинг? Покажи картинку, откуда у тебя там гексагоны?
Вопрос: как лучше отдавать закреплённые посты на клиент?
Делать отдельный эндпоинт /blogs/:blogId/blog-posts/pinned
vs
Включать закреплённые посты в ответ на запрос /blogs/:blogId/blog-posts, если запрашивается самая первая страница
все уже порешал, там ошибка была на фронтенде
Я просто наливаю кипяток в чайник, кидаю заварку, жду и наливаю чай, а что там происходит внутри все это время мне все равно.
Попробуй кидать на сервисах и на ресте ловить эдвайсом.
Из внешней системы присылают. Для тестирования чайника беру из папки где лежат кипятки разной температуры.
Хотя норм.
Как по понятиям сделать?
Мне нужно сделать валидацию данных / защиту от дурака.
В каком месте нужно это делать?
Сам думаю что в сервисе, хотя хз
Controller тут только получаю нужные String и передаю дальше
Service тут проверяю корректность данных, парсинг и создание переменных нужных типов (вроде int, float). Чистые данные идут в жопу далее
DAO тут дёргаю анус базу данных через preparedStatement
Model тут просто POJO
Нужно ли тут делать DTO?
>Мне нужно сделать валидацию данных / защиту от дурака.
>В каком месте нужно это делать?
В контроллере. По крайней мере если речь о формате данных, а не о бизнес-правилах.
>Controller тут только получаю нужные String
Spring MVC уже прекрасно умеет парсить параметры в инты и флоаты. Сервисы для круда могут быть вообще не нужны.
>Нужно ли тут делать DTO?
Нет
Сколько же я говна нахлебался пока кириллица начала работать на всех этапах.
В JSP нужно указать!
В JDBC тоже нужно указать!
В MySQL тоже само собой!
Ох ты блядь сука!
Решил ещё по умному при старте системы загружать shema.sql и data.sql!
И тут подлянка, весь гугл сломал пока понял.
Нужно то всего в properties 5 параметров datasource указать и в pom.xml подключить ещё одну зависимость.
Потому что SQL-запросоебство - есть аналогия байтоебства.
Пока начальство/клиенты не начнут вайнить что не могут купить топовые сервера под СУБД - этим заниматься не нужно.
Тем более для запросоебов уже давно придумали HQL, а бизнеслогика на джойнах и тем паче - на вендорлокнутых аналитических расширениях - это сразу вон из профессии и го бомжевать да перед пенсионерами оракла и фокспро 90х выёбываться.
Точнее под апликейшон. СУБД как раз тыквит от SQL-мастеров с хранимками и сложносочиненными запросами из таблиц.
Может кто пояснить для чего она вообще реально будет нужна джуну, ну и мб ссылок покидать на статьи для быстрого вката в эту тему
Делаю CRUD повышенной сложности на Spring + Hibernate + PostgreSQL + React, вообще никаких проблем с кириллицей, всё работает из коробки :)
Делал тестовый после внутренних курсов галеры для быдлостудентоты(коей сам и являюсь), собственно после них меня и решили не выгонять, а дать шанс. Теперь вот техническое.
Стоит наверное сказать, что до этого про джаву просто что-то слышал и начал буквально с нуля. Так за 3 месяца и успел кое что узнать, но остались пробелы кое-где.
По факту в T попадают ссылки на объекты.
Как обратиться к полям данных этих объектов?
Забыл про тайпкаст
T это type.
//code
{
//code
Calendar c = Calendar.getInstance();
}
Calendar c = Calendar.getInstance();
//code
Ну и сами вопросы. Оборачивание в скобки даёт нам эдакую вариацию чего-то вложенного, где после выполнение все объекты cg почистит и переменные фсё?
Ну и второй вопрос такое имеет вообще смысл делать? Тип почему бы просто не назвать по другому?
Почитай про synchronized, volatile, про immutable классы и зачем это нужно в многопоточности, виды локов.
Знаешь, я когда-то писал себе небольшой конспект по многопоточности(чтобы быстро вспомнить всю эту фигню, страниц 5) - могу тебе скинуть скрины в телегу
Смари кароче
наверное ты видел подобные блоки где-нибудь
static{
тут инициализация static переменных
}
Это называется блок статической инициализации
Так вот тобой вышеуказанное, это аналогичная херня, только не статическая, а для каждого объекта, то есть при инициализации объекта через конструктор, этот блок будет выполняться, такие дела
Смысл делать или нет решать тебе, я с таким никогда не сталкивался все всяких хитровыебанных квизов на знание возможностей языка.
Синьеры-помидоры поправьте если я обосрался где нить
List<T extends MyClass>?
>Оборачивание в скобки даёт нам эдакую вариацию чего-то вложенного, где после выполнение все объекты cg почистит и переменные фсё?
Как и в любом с-подобном языке оборачивание в скобки создает безымянный scope, работающий аналогично прочим scope - if(){},for(){},while(),{} int method(){} и.т.д. То есть да, переменные и объекты инициализированные в scope за его пределами убираются из стека/попадают в GC.
Я то тут причём? Я ебу вообще хули их 3?
Узнаю родные Структуры и Алгоритмы Обработки Данных!
Зачем букСервис файнал в контроллере?
Почему автоваришь в конструктор а не просто в свойство?
Сам нуб
Лучше спецификацию добавить и динамически собирать ее?
Я эту исповедь к чему пишу: самостоятельное обучение технологиям, которые требуются на позицию джуниора, релевантно задаче найти в кратчайший срок работу? Или больше смысла будет в трате денег на то, что меня кто-то направит и объяснит актуальные, необходимые в работе шаблоны? Единой точки зрения в Сети я не нашел, а мое увлечение чтением тематической литературы как будто в этом вопросе - наименее действенный выбор.
>Или больше смысла будет в трате денег на то, что меня кто-то направит и объяснит актуальные, необходимые в работе шаблоны?
Методики обучения тех, "кто не умеет, но учит" за деньги могут отличаться от "актуальных, необходимых в работе шаблонов", западзывать на n-лет. Не торопись дарить деньги таким людям.
Самое надежное это подучить уровень английского до возможности чтения, а лучше понимания на слух, и читать/смотреть актуальные курсы, лекции. На том же удеми есть более-менее актуальные курсы, которые продаются на торрентах по цене интернет-траффика (https://freecoursesite.com/ ищи java, hibernate, spring и прочие buzzwords, поглядывая на список требуемого в вакансиях на hh.ru). Конечно же, на изучение всего этого уйдет какое-то кол-во времени, также без гарантии трудоустройства.
Спасибо за ссылку. К тематическому английскому, думаю, за месяц-другой привыкну.
Чё никто не шарит?
Тогда или ванильный Java EE 8 и жирные интырпрайз-сервера на 32+ГБ, там есть хуитки, или велосипедь сам на сессиях и кукисах. Проблема "не гонять без шифрования" решается HTTPS.
бамп
Спизди у идеи.
Аноны, подскажите, что с наибольшей вероятностью будут спрашивать при собеседовании на стажёра/джуна?
ООП. Алгоритмы и их сложность(самые бесполезные знания, но зачем то это постоянно спрашивают). Структуры данных. Возможно конкарренси в общих чертах. HTTP, возможно. Сукель скорей всего. Вон сверху лежит список вопросов.Выкидываешь оттуда фреймворки и дж-эс (если его нет в вакансии) вот это и будут спрашивать.
А да анончик, забыл добавить, что 90% спрашиваемого ты никогда не применишь в практике, потому что для дерганья БД за анус через спрингдатку даже понимания инкапсуляции не надо
http://blog.simonrodriguez.fr/articles/30-07-2016_implementing_fxaa.html
https://pastebin.com/wSjaLF0Z
Я скопировал, он не работает.
Планирую выкатиться из своей галеры в енеми компанию. Опыт 2 года. Беспокоит вопрос, нормально ли скиллов, которые я знаю, мб добрый анон даст совет, что подкачать буду рад.
Сейчас у меня в арсенале есть: Java(до 11 версии основные фичи), Spring(IoC, MVC, Security, Boot), Hibernate, RabbitMQ, Kafka, RDBMS(Postgres, юзал MySQL но не смогу за них пояснить преимуществах/недостатках), NoSQL(CouchDB), Groovy.
Из окольных тем небольшой опыт работы с JS, React, Electron, NodeJS, WebSocket.
Паттерны проектирования, опыт код ревью и бест практик чистого кода знаком, использую.
Подскажите, что еще хорошо было бы подтянуть? Буду благодарен?
Нужно ли шарить за протоколы сети TCP/IP, и т.д.?
Причем тут вообще GUI?
Ну для джуна хуйня всякая, java core эксэпшоны, multithreading, коллекции, инпут оутпут и прочая ебота из руководства Шилдта , oop, sql, jdbc, сервлеты ебаные, jsp, мавены там всякие с иксэмэлями, всё хочу в спринг забурится но сложно пока.
на само деле Spring на ур-не для джуна ез освоить. Посоветую использовать стартовать используя Spring Boot. Реализую свой-мини проектик на MVC
мими-мидл-который-в-глубокой-юности-не-разобрался-в-spring-т.к.-все-сложна
Есть какие-нибудь туториалы по различным видам шифрования, использованию XOR, анализу и дешифровке?
Просто тема слишком абстрактная, хочется конкретики, поэтому прошу подтолкнуть в нужном направлении.
Без туториалов не как?
Берёшь классическую книгу по криптографии, там все алгоритмы начиная от щифра цезаря заканчивая твоим ксором
Эллиптическая криптография. Нахуй твой ксор, Арви ебучий.
Нихуёвый такой арсенал
>Нужно ли шарить за протоколы сети TCP/IP, и т.д.?
Если собираешься в веб - да. Всё ж зависит от того, на какое место хочешь податься
Ну и нахуя ему TCP/IP?
@RequestBody @Valid @NotEmpty List<Foo> values,
нужно проверить, что лист не пуст, но аннотации не триггерятся. В чем проблема?
Так вот, с чего конкретно начать? Учтите, что у меня нет технического образования, но есть работа в IT (что я делаю: файловые скрипты, то запарси, это автоматизируй, найди и выеби того, кто сожрал весь дискспейс, schedulers, немного ETL, немного дотнета, немного линупсов).
Стать программистом - моя мечта, и я близок к ее реализации, как никогда. Помахите.
Может из тебя хотят толкового DEVOPSа сделать а ты не понял намёка?
Если прям хочешь погромировать по пробовать, бери любой язык и начинай решать простые олимпиадные задачки типо как на acmp.ru
Если сделаешь первые 50 (отсортируй по сложности и начинай с простых) задач и не захочешь всё бросить, то у тебя есть все шансы.
Надо в депенденси добавить того кто имплементирует @Valid и @NotEmpty, насколько я помню.
Обычно это hibernate-validator
Все добавлено. Почему-то спринг триггерит только аннотации внутри класса (когда помечаешь аннотациями поля класса + @Valid на объекте). Аннотации на самом объекте, как у меня в примере, не работают.
Бмап.
Решил остановится на Жабе, скачал курс от ITVDN, но сразу появилась загвоздка, что гайд 16-го года и там используется Java SE 8, а сейчас уже есть 11.
Вот вопрос, ставить 8 как на курсах версию или 11?
Ставь 11 и выбирай уровень языка 8.
Я начинающий программист в колхозной конторе на 700 человек.
По всем показателям и требованиям JAVA подходит как основной язык разработки.
Но у моего начальника какие-то предрассудки по поводу Java. "Все, что касается как-то Java постоянно выбивало ошибку то там, то там".
Я не хочу, чтобы отдел продолжал катиться в сторону C#/Python - все, что нужно нашему отделу это Java
Как можно смотивировать начальника на дальнейшее развитие в сторону Java? Ну, то есть, отдел разработки не против. Нужны какие-то мотивационные статьи
Ну во первых, если тебе кажется, то не обязательно так и есть, а во вторых, если ты его уломаешь на жабу и потом что-то случится он тебя с говном сожрёт.
1) C# имеет платную IDE
2) Платная ОС для работы c десктопом на C#
3) Платные сервера для запуска ASP.NET
JAVA) Free for all
Ну и пусть. Предприятие не проиграет от этого.
Стоимость java разработчика в разы меньше, чем C#)
C# уже не видать нам, так как переходим на Python. потому что бесплатно. А python это те еще копейки
Анончи, я тут прочитал про то, что Java станет платной. Причем довольно дорогой для русского сегмента.
начальник это узнает и скажет "продолжай колупать вилкой пихон, пока этот удав бесплатный!"
Так что не стать мне разрабом java :(
Какой-то парень на реддите сейчас регулярно выкладывает спидвидео создания простенькой 2д бродилки в стиле пиксель-арт.
Там от всего fx только ImageView и WritableImage.
Папка должна называться не daoimpl, а dao, а внутри уже impl. Дальше даже не смотрел.
И на этом спасибо
Это именно требование такое - голый jpa, без Springa (или EJB) для управления транзакциями? В реальном мире такое довольно редко встречается. Даже если так, копипаста из открытия транзакции, коммита и т.п. в каждом методе - это пиздец, выноси это все в отдельный общий код. Свой маленький TransactionManager можешь сделать.
Что еще бросилось в глаза - flush нет необходимости каждый раз делать, a remove не будет работать работать в таком виде, надо сначала смерджить сущность с этим EntityManager.
И интерфейсы. Вот зачем тебе интерфейсы?
>голый jpa, без Springa (или EJB)
Тоже подумал, что как-то странно, но в тз ничего про спринг не написано. Так бы просто навесил везде @transactional из спринга. это же так работает?
>интерфейсы
Мне - абсолютно не зачем, но когда меня учили делать dao, то делали интерфейсы. Полагаю что это такая общепринятая практика, вдруг понадобятся разные реализации. мне то ясен хуй не понадобятся
Это на ждуна? Какие там требования в вакансии (по технологиям)?
Ты прям по этому vadin-у упарывался или для тестового по быстрому обмазываешься?
Вообще первый раз с ваадином буду разговаривать. До этого в свинге малёха формочки делал. Вроде похоже.
Я хз какая это вакансия. Написано нужен опыт работы 2 года в ИТ компании, при этом у меня в резюме написано, что я нигде не работал, но они решили кинуть мне тестовое.
Тащемто пикрилейтед
>Вообще первый раз с ваадином буду разговаривать
Сейчас развелось дохуя русскоязычных ресурсов где круды на спринге разжевывают!
На тестовое задание мне кажется стараются специально редкую хуиту дать и проверить как ждун будет манулы на англицком читать и разбираться по коду что и как делать.
Ну они походу реально ваадин юзают.
А что значит >круды на спринге
Там что есть какие-то встроенные инструменты для вёрстки? Насколько я знаю там можно просто через html+css+js или всякие jsp.
CRUD
Зачем в вакансиях пишут "опыт работы с Hibernate"? Разве Spring Data недостаточно? И если нет, то какой лучший способ изучить данную технологию?
BTW, где достать High-Performance Java Persistence? На либгене лежит обрезанная версия в 200 страниц. Когда на амазоне в книге более 400 страниц.
Ебать сколько лишнего говна, для такой простой задачи. Какой же все-таки php красивый язык. Не то что ЭТО. Как же я рад что являюсь PHP разработчиком, настоящий программист, не то что вы джава-макаки! ёпта.
Забл добавить еще, что не хуёво так админю *nix системы. Потому что php разраб - это еще и админ/devops. А вы как видите командную строку, сретесь от страха...
Как писали выше - копипаст кода. Это можно исправить написав универсальные методы через лямбды.
Подключи логгер.
Может быть попробовать сделать один параметризованный интерфейс dao?
Добавить слой service, где будут кроме crud специфические методы для работы с сущностями.
Нормально, только зелени маловато, такую тудушечку нужно край за неделю делать, без паники, итого за месяц 4-круда, каждый раз ты будешь чуть усложнять и добавлять новые фишечки.
Это, в первую очередь, не работает - у тебя разные (параллельные) запросы в разных потоках через это одно общее поле обрабатываются.
Бля
>параметризованный интерфейс dao
Вот так хотел, но столкнулся с проблемой, что мне в findAll или других findХуяйнд надо вызывать namedQuery и туда передавать Client.class например. Так же NamedQuery имеют имена типа "Client.findAll".
>Как писали выше - копипаст кода
Вот за это и переживал, не знаю как выкрутиться. Про какие универсальные методы ты говоришь? Можешь дать пример? я знаю что такой лямбды, просто не совсем понял о чём ты конкретно
Тут нужен пул соединений да?
Нет не хватит
Ну и говнокода ты наворотил. Загружать драйвер можно 1 раз в статическом блоке, необязательно каждый раз это делать. Почему поля в JdbcConnection не приватные? Сделай статический метод run, который возвращал бы новый Connection, а close вообще убери, Connection и так AutoCloseable, закрывай в try. И в твоей ловле эксепшенов нет вообще никакого смысла, что толку, что ты их поймал, если вызывающий код не сможет дальше работать, поскольку к бд подключения нет? Лучше добавить throws или перевыкинуть RuntimeException. Короче, переделывай.
QA хотят раскидать между самими разработчиками и дев-опсами
Берешь и запускаешь, в чем проблема?
Да уже сделал по сути. Остались только преломления, но я не вижу смысла их делать без полупрозрачных объектов, а с ними я не очень разобрался. А потом кроме сфер сделать полигоны, и останется только интерфейс прикрутить.
Посоветуйте:
1. Курс/Книги/Чёт ещё по джаве, где бы не рассказывали что такое переменная, класс и прочую банальщину. Java rush говно.
2. Идею для петпроджекта. Сам я думаю написать себе кошелёк для криптовалюты, так как им бы я и сам с удовольствием пользовался, не дело в том, что там негде применить базы данных и elasticsearch какой-нибудь.
У меня с ними такой себе опыт работы, так как я в основном low level код пишу, с базами знаком очень слабо.
3. На каком уровне можно апплаиться на работу? Я уже второй год работаю программистом на C++, опыт в разработке есть. Понятно, что потребуется акклиматизация, но ведь я ж не совсём зелёный типа. Если у кого-то есть опыт свча - делитесь историями.
Сперва чекай вакансии на ждунов и смотри что там нужно по технологиям, запили фейка на хх и проси тестовые задания, там поймёшь что нужно.
1) По яве видосики технотрека майловского, годнота!
2) Круды, круды, круды, начни с простых, без гибернатов
3) Иди на честного ждуниора, ты там самый бодрый будешь среди вкатальщиков после жидбрейнса
Тогда поновее бери руководство
>2) Круды, круды, круды, начни с простых, без гибернатов
А можно поподробнее? CRUD -- это концепт, а не идея.
Почитай выше по треду. Система учета сотрудников, библиотека, ветеринарная клиника, все что угодно с сущностями и базами данных.
Хочется что-то полезное написать, а не очевидную laba1. Ну ладно, наверно полезное я сам обязан придумать. Спасибо.
Все полезное уже написано.
А сколько на крестах зарабатываешь и какой стек?
Переделал через лямбды-хуямбды, реквестирую ещё немного мочи на этот код. Спасибо за советы кстати, прошлым ораторам.
Я тоже вкатывальщик, но попробую посоветовать.
Certification Guide от Mala Gupta - пролистать, чтобы понять, зачем в Java string pool, зачем при конкатенации использовать StringBuilder, что такое боксинг/анбоксинг, как Java хендлит overflow/underflow у примитивов и т.п. Это базовые вещи, без знания которых можно писать код, но лучше их всё-таки знать.
Далее, освежи свои знания по ООП. Можно навернуть Head First Design Patterns. Часть книги устарела (особенно где там про удаленные вызовы), но другая вполне себе актуальна и по сей день, так как основы ООП за прошедшие 20 лет не сильно изменились. Наверни статьи про Dependency Injection и Inversion of Control.
Набей руку в SQL по sql-ex.ru.
Ознакомься с основыми коллекциями: ArrayList, LinkedList, HashMap, TreeMap, и как они работают внутри (базово, естественно). Ты должен суметь объяснить, что для ArrayList получение элемента работает за константное время, а для LinkedList за линейное. Получи общее преставления о работе со Streams.
Далее всё зависит от того, как быстро ты хочешь вкатиться. Если время поджимает, то посмотри какою-нибудь серию видео по Spring на udemy или youtube. Какое-то конкретное посоветовать не могу - мне они все довольно быстро начали казаться говном. Но они хороши для получения общего представления, чтобы не смотреть как баран на новые ворота.
Проект естественно должен собираться через maven. Для получения базового проекта с зависимостями используй https://start.spring.io/
тыкаешь switch to full version и выбираешь Web, JPA, H2, MySQL.
Таким образом ты получаешь возможность легко и быстро приступить к созданию приложения на Spring MVC и Spring Data, используя встроенные Tomcat и ин-мемори базу H2. H2 для разработки: каждый раз при старте приложения создаётся схема и данные - схема создаётся автоматом по аннотациям Entity-классов, а данные грузишь через Spring Data репозитории (которые построены на базе Хибернейта). А MySQL - для прода.
Также можно где-нибудь спереть шаблон со стилями и картинками и красиво выводить данные через Thymeleaf при околонулевых знаниях html/css, но это сугубо по желанию.
Если есть время попердолиться с Java подольше, то можешь параллельно читать Effective Java и Modern Java in action. Я начал первую - могу сказать, что местами реально читается непросто, книжка для опытных программеров.
Я тоже вкатывальщик, но попробую посоветовать.
Certification Guide от Mala Gupta - пролистать, чтобы понять, зачем в Java string pool, зачем при конкатенации использовать StringBuilder, что такое боксинг/анбоксинг, как Java хендлит overflow/underflow у примитивов и т.п. Это базовые вещи, без знания которых можно писать код, но лучше их всё-таки знать.
Далее, освежи свои знания по ООП. Можно навернуть Head First Design Patterns. Часть книги устарела (особенно где там про удаленные вызовы), но другая вполне себе актуальна и по сей день, так как основы ООП за прошедшие 20 лет не сильно изменились. Наверни статьи про Dependency Injection и Inversion of Control.
Набей руку в SQL по sql-ex.ru.
Ознакомься с основыми коллекциями: ArrayList, LinkedList, HashMap, TreeMap, и как они работают внутри (базово, естественно). Ты должен суметь объяснить, что для ArrayList получение элемента работает за константное время, а для LinkedList за линейное. Получи общее преставления о работе со Streams.
Далее всё зависит от того, как быстро ты хочешь вкатиться. Если время поджимает, то посмотри какою-нибудь серию видео по Spring на udemy или youtube. Какое-то конкретное посоветовать не могу - мне они все довольно быстро начали казаться говном. Но они хороши для получения общего представления, чтобы не смотреть как баран на новые ворота.
Проект естественно должен собираться через maven. Для получения базового проекта с зависимостями используй https://start.spring.io/
тыкаешь switch to full version и выбираешь Web, JPA, H2, MySQL.
Таким образом ты получаешь возможность легко и быстро приступить к созданию приложения на Spring MVC и Spring Data, используя встроенные Tomcat и ин-мемори базу H2. H2 для разработки: каждый раз при старте приложения создаётся схема и данные - схема создаётся автоматом по аннотациям Entity-классов, а данные грузишь через Spring Data репозитории (которые построены на базе Хибернейта). А MySQL - для прода.
Также можно где-нибудь спереть шаблон со стилями и картинками и красиво выводить данные через Thymeleaf при околонулевых знаниях html/css, но это сугубо по желанию.
Если есть время попердолиться с Java подольше, то можешь параллельно читать Effective Java и Modern Java in action. Я начал первую - могу сказать, что местами реально читается непросто, книжка для опытных программеров.
Я конечно не авторитетный критик, но в глаза бросается следующее.
У тебя классы Transactional и, например, ClientDAOImpl, делают по сути разные вещи - один управляет транзакцией а другой достаёт данные. Но они почему-то в одной иерахии.
Может сделать класс Transactional обычным классом и включать его в ClientDAOImpl через конструктор?
Да, нормальная идея. Скорее всего так и переделаю. А по реализации транзакций через лямбды и вот этот класс замечаний нет?
У меня с JPA маловато опыта, но вот какие еще мысли: у тебя при каждом вызове transaction() вызывается initTransaction();
Смотрим что происходит в этом методе:
1) entityManagerFactory.createEntityManager(); - его действительно нужно каждый раз пересоздавать? У меня сомнения на этот счёт. Но даже если всё-таки требуется, то для него справедливо всё то же самое, что я опишу ниже для EntityTransaction.
2) this.entityTransaction = this.entityManager.getTransaction();
Не думаю, что это хорошая идея. Scope каждого объекта должен быть минимальным. Следовательно транзакция должна запрашиваться в методе transaction(), и ссылка на полученный экземпляр будет жить ровно столько, сколько выполняется метод.
После завершения работы метода ссылка на транзакцию автоматически улетает со стека, и GC сможет уничтожить объект транзакции, если entityManager тоже от него избавиться. Твой же код держит ссылку на транзакцию, хотя больше он её никогда не воспользуется - ведь всё равно вызовется getTransaction() и ссылка перезатрётся.
Метод closeTransaction() можно оставить как есть, просто передавать транзакцию внутрь метода параметром.
Еще один подводный камень - это потокобезопасность. Представим, что два потока одновременно выполняют this.entityManager.getTransaction() - если метод возвращает разные объекты, то первый будет потерян, второй обхект будет помещён в поле класса. В итоге оба потока продолжат работать с одной и той же транзакцией, и я хз, к чему это приведёт.
> createEntityManager(); - его действительно нужно каждый раз пересоздавать?
Нужно
>В итоге оба потока продолжат работать с одной и той же транзакцией, и я хз, к чему это приведёт.
Все будет плохо
Вот есть например приложение на спринге, для его работы нужна база с заполненными справочниками. Схему генерит хибер, пес бы с ней, а вот данные откуда брать - хз.
Есть вариант использовать data.sql файл, но это не очень интересно для разработки, т.к. чтобы он работал, нужно при перезапуске все из базы вытирать. Запустил дебаг - потерял результаты работы с базой из предыдущего запуска.
На сервере-то, понятное дело, это не проблема, там хоть в скрипт деплоя можно делит-инсерты вкрутить, и никому не помешает.
Пока что решил вопрос слушателем contextReloadEvent, и ручками дозабиваю базу, сохраняя все некоторое дерьмо, которое там уже накоплено, но это костыль, да и чем больше справочников, тем больше этого, по сути, ненужного кода придется поддерживать.
Гугли фикстуры
Вроде бы liquibase такое умеет.
Спринг и гибернейт придумали жидорептилоиды из майкрософта, чтобы сгубить родную Жабушку. И проклятые модули пришли от них же.
Надо все писать на сервлетах и JDBC, вручную запускать Tomcat и деплоить, вот это по-нашему, православному.
Это был не я бро.
>Почему поля в JdbcConnection не приватные
Потому что я юзаю их в других классах.
> Сделай статический метод run, который возвращал бы новый Connection
А в чём смысл? Зачем везде создавать новые конекшоны и прочее если можно их прописать в jdbcConection и пользовать везде?
Нужно, конечно. Как ты будешь свои апплеты на веб-странице размещать без ксс? А в JavaFX ксс повсеместно юзается вместо layout'ов и FXML.
Аноны, помогайте, кто уже нашёл сервер лицензий/ключ на новый патч? Моя idea вырубилась :C
Бери bootstrap и ебош как будто ты десигнер.
– просыпаешься в 14.50 дня, берешь банку пива из холодильника чтобы опохмелиться
– в 3.00, собес (без камеры)
– поясняешь по ооп своими словами (выдал определение по Аристотелю через форму и материю)
– поясняешь по основным методам объекта (equals, hash-чето-там, что те, кто используют clone – люди не особо умные)
– неспешно поясняешь по спрингу, после рассказываешь пару историй из нелегкой жизни спринг девелопера, все все понимают, слышышь кивания и взгласы обобрения даже без камеры, 30 секунд молчания
– спрашивают про java concurrency, говоришь, что сам не сталкивался, но вот читал, что .... ответ всех устраивает, идем далее
– вопрос по БД – нормализация, индексы, транзакция – на расслабоне все поясняешь со всеми trade offs, дело двух минут, все сталкивались, все все понимают
– какой-от легкий вопрос про структуры, типа чем list отличается от likedlist (на деле посложнее), как-то на опыте выруливаешь, остальное договаривает интеврьюер, под твои возгласы, что эта хуйня нигде, по сути, не используется, "ага, это и хотели услышать"
– вопрос про хайповую джава технологию, отвечаю, что не успел выделить времени на ее изучение, но вот знаю того-то, кто сталкивался и все не так однозначно
Ну вот как-то так.
Разумеется, потом уже были более материальные вопросы про зарплату, легаси на проекте (и заверения, что я буду работать только на хипстерских с контейнерами и кубером), что чем именно я хочу заниматься.
удаленка офк
Что за камера, вебка? По телефону что ли собеседовался?
Так он и есть свой, и всё остальное своё, везде создаётся новый jdbcConection со своими конекшонами и оттуда всё это пользуется. Посмотри скрины ещё раз.
только я немного не понял как именно можно юзать классы, в какой задаче, я был на плюсах, потом пришлось изза универа на си перейти, и там подход к решению простых задач совсем не тот, там можно функций насоздавать навпример чтобы в массиве найти макс. элемент и переместить его вместо 1 элемента, это 2-3 функции, а с классом как работать, просто рандомный класс создать и туда методов напихать и в мейне заюзать?
У тебя в трех методах используется один и тот же Connection по одной только тебе известной причине. Зачем тебе вообще метод run, если он выполняет функцию конструктора, ммм? Зачем тебе prepared statement/result set внутри класса, если можно просто снаружи создать переменные? А их кстати тоже закрывать надо, ты в курсе, и делать это надо в finally, а не просто close писать.
Если не выёбываешься и не пиздишь - затащил, молодец. Что по условиям работы и кэшу?
Аноны, я тут вот: https://sourceforge.net/p/jstego/code/HEAD/tree/
нашёл да-да, откопал какую-то недопиленную прогу.
Тут, по ссылке - исходник на JAVA, и jar-файл тоже доступен к закачке (Files -> Download -> jstego-0.3.jar).
Попытался запустить из под командной строки:
>java -jar jstego-0.3.jar
Вроде запускается, но не пашет нифига.
Помимо алгоритма f5 steganography,
который, кстати, на JavaScript'е имплементирован вот тут: https://github.com/username1565/js-jpeg-steg
В этом JAR-файле есть ещё какой-то интересный алгоритм jsteg.
Если кто из спецов, может допилить его, был бы благодарен.
Я также поискал здесь этот алго: https://github.com/search?q=jsteg
вижу пару исходников на Java, но ни одного рабочего jar-файла. Как компилировать - не помню уже...
Есть также исходники на C и на Go, уровень их "рабочести" - не проверял.
Если всю эту шнягу довести до ума, то нборода того же карасика - могла бы в и жипег.
Посему, просто запомните - f5 и jsteg
>Помимо алгоритма f5 steganography,
>который, кстати, на JavaScript'е имплементирован вот тут: https://github.com/username1565/js-jpeg-steg
Там исходник, а демка - вот тут: https://username1565.github.io/js-jpeg-steg/
Поясните пошагово или покажите настройки, как посредством hibernate/jpa и liquibase напихать данных в таблицы для тестирования.
Лицензию купи, жлобяра. Даже обоссанный джун может позволить себе тратить $500 в год на инструмент.
В голос.
Цепляешь няшу в близлижащей шараге.
Регаешь на неё студенческую лицензицию на продукцию Jet Brains - https://www.jetbrains.com/student/.
Получаешь кей.
Дропаешь няшу.
Цикл замкнулся.
Повторять 1 раз в год.
Ты только в гит выкладывай, будем тебе с анонами кодревью делать кек
Аноны, подскажите, какого хуя в java запрещено множественное наследование от абстрактного класса(да и от любого иного), но не запрещена множественная имплементация от интерфейсов? В чём разница? Будет ли моветоном, если полностью откажусь от наследования в пользу имплементации? Удобно же. Прошу пояснений у знатаков
Наследование это наследование, имплементация это имплементация, при чём тут блять абстрактные классы?
Дядя, учись гуглить.
Наследование в принципе - моветон. Редко, когда оно необходимо. Юзай интерфейсы смело.
Wut? Более мемного вброса не видал в этом году. Эх, вот бы В ООП-ориентированном-ЯП называть имплементацию маветоном
Наследование и правда не нужно, это анти-паттерн и применять его надо лишь в крайнем случае.
Наследование следует использовать только для незначительных изменений поведения + чтоб компилятор смог отловить ошибки. Например, у тебя есть класс Jopa, у которй есть свойство цвет. По какой-то причине у тебя есть методы bringMeRedJopa и bringMeBlackJopa. Наследуешь два класса: RedJopa и BlackJopa, и вуаля, компилятор тебя обругает, если что.
Во всех остальных случаях использования наследования получаешь хрупкую архитектуру.
В твоём вбросе нет конкретных кейсов, почему наследование это плохо. Пример также ничего не иллюстрирует.
Знаю, про ромбовидную проблему наследования .
Окей, пойду спрошу у гугла, что там за проблемы есть у наследования. Интересно.
Отсылка к стату КакАйПросто?
>В твоём вбросе нет конкретных кейсов, почему наследование это плохо
Почти любое использование наследования это плохо. Лень объяснять. Просто попробуй запилить с нуля какой-нибудь обобщенный сериализатор Object->Json/Yaml/Huiaml и обратно, с использованием различных источников/приемников - файл, память, сеть итд с возможностью побайтового/ленивого чтения, обработки ошибок итд, используя лишь наследование. Гарантирую, что соснёшь уже на этапе выстраивания иерархии наследования классов.
В наследовании нет ничего такого, ради чего его стоит повсеместно использовать. Наследование - это хитровыебанная замена копипасту. Разработчики пхп, кстати, это давно поняли и запилили traits.
>Пример также ничего не иллюстрирует.
Пример иллюстрирует один из немногочисленных случаев, когда наследование оправдано.
Я и не агитирую выстраивать модули исключительно на наследовании. В большинстве случаев используется композиция. Но для конкретных кейсов - наследование отлично подходит, уменьшает кол-во бойлерплейт кода и улучшает читабельность.
В любом случае, спасибо за комментарии. Как-минимум прочту вечером пару статьй с компнями в огород наследования.
Многие статьи рекомендуют это. Why not?
Ноу дискасс, если хочешь понимать, что и как работает, нужно поднимать руками
Нуфаг или тайм-тревелер из 90-ых детектед. Наследование - антипаттерн. Алсо, гугли expression problem.
Есть нисходящий и восходящий подходы к изучению.
Многие рекомендую сперва ознакомиться с основными концепциями, для этого как-раз и поможет Spring Boot. Когда уже каркас небольшого проекта есть, начинаешь углубляться в дебри и т.д.
Просто если сразу вдаваться в дебри, можно там и остаться.
Не вижу ничего плохого, чтобы поднять бут-проект, поиграть с ним пару деньков, парралельно изучая, что как работает и устроено.
Иди смотреть стримы унтерменшей, если можешь лишь просраться, даже вопрос не прочитав
Спасибо. Прочёл всю цепочку срача с аноном, растолковал
Есть книга типа краткий курс джавы для плюсовиков?
Алсо что помимо кор знать нужно? Хочу перекатиться в джависты, заебало байтоёбствовать.
Магия спринга генерит тебе сыкуль и всякие штуки по названию метода интерфейса, таким образом импементируя твой интерфейс
джуном сходу ответил бы на все это
Смысл в том, чтобы продовать несуществующий товар. Слушай сюда. Открываеешь компанию "Пидрильный клуб любителей пощекотать очко". Даешь рекламу в пидрильный журнал: мол, у тебя такой инструмент для внедрения в очко. Ну, дескать, делает то, что не может ни одно другое устройство, последний прорыв в сексуальных технологиях, удовлетворение гарантированно. Иначе возвращаешь деньги, ну и всё такое. Эти приблуды продаются по двадцать пять фунтов за штуку. Для клиента это херня, за такую кучу удовольствия. Но чеки они шлют в адрес другой компании, с приличным названием, типа, "Мелочевка Бобби" или что-то в этом роде. По двадцать пять фунтов каждый. А ты в банке обналичиваешь и получаешь деньги. А запутка вот в чем: ты отправляешь чек назад, от компании "Пидрильный клуб любителей пощекотать очко", со словами "Извините, товар из Америки не поступил, у них закончились запасы". И тогда посмотришь, сколько человек обналичат такие чеки – ни единая душа, кому охота, чтобы менеджер их банка знал, что в свободное от получения чеков время они щекочут свое очко.
Перечитай sql распечатку, которую я скинул выше, потом отчитайся перед тимлидом. Если ничего не поймёшь, то завтра на планёрку.
Читай про WeakReference и всю хуйню.
НЕ БУ-ДЕТ! ТВЁРДО И ЧЁТКО!
Статик поля (у тебя же инстанс синглтона статик?) не очищаются коллектором.
А с чего он должен его очистить? Статик ссылка на объект ведь никуда не девается
>Наследование и правда не нужно, это анти-паттерн
Если прям уж моветон и антипаттерн, почему всякие спринги, хибернейты и гуавы состоят из наследования чуть менее, чем наполовину? Это все говнокод?
Java за 21 день.
Так исторически сложилось.
Как тебе удобнее. Если он всегда точно будет пустой, то вообще похуй. Я обычно делаю в конструкторе.
Но тут от задачи зависит. Иногда может и так, и так неправильно, а надо вообще через параметры конструктора или через билдер, а то вдруг там будут какие-то изначальные значения?
Нет, изначально он 100% пустой. Просто я использую ломбок, а так бы пихнул без задней мысли в конструктор.
Прочитал про ломбок, там типа аннотацией можно указать дефолтное значение?
Хз, в конструкторе всё равно лучше. Да, если будет много конструкторов, то придётся в каждом указывать. Зато, когда ты определяешь в конструкторе, ты как бы говоришь своим кодом - я определяю мапу как пустой хэшмап, находясь в добром здравии и уме, это моё сознательное решение, принимайте его во внимание, когда захотите рефакторить.
В ломбоке автоматически генерируется пустой конструктор, поэтому нет возможности там что-то задать. Можно написать конструкторы руками, конечно, но будет не стильно.
>В ломбоке автоматически генерируется пустой конструктор
Он же в джаве и так генерируется автоматически.
3 анотации, 2 класса и у тебя готовая приложуха которая обрабатывает запрос с ебучей веб формы.
Что ещё надо для быстрого вката в технологию?
Бинами обмазываться? Иксэмэли править?
>3 анотации, 2 класса
Надо тогда вообще в джаву вкатываться со спринг бута, хуякс хуякс и уже веб приложиуха. Что ещё надо для быстрого вката?
Циклами обмазываться? Эксэпшоны прописывать?
Спринг секьюрити из коробки например там вообще хуйня ебаная, в любом случае придётся ебаться с конфигами.
Ебан просто сути ломбока не понимает. Там аннотаций у него до жопы. Можно прописать для пустого конструктора@NoArgsConstructor, нужен, если есть не пустой, по сути как и в простой джаве, но ты пишешь это всё не в ручную, а аннотацией указываешь, и она закулисами автоматом хуярит конструктор без аргументов., для конструктора со всеми аргументами, кастомный конструктор, геттеры/сеттеры и тп.
Считаю, что имею некоторый опыт в пагромеровании, mysql, nginx, все такое, баловался питоном, настроил бота постить что-то абстрактное в Инстаграмме и подписываться по тегам мрази банят аккаунты по первому же подозрению, но заниматься сборкой Лего по чужим апи достало, неужели вся суть программирования сводится к этому?
За месяц лениво пролистал джаву от орейли, узнал что-то новое для себя, упорядочил знания о наследовании и тд, в целом понравилось.
Хочется ЗДЕЛОТЬ С НУЛЯ что-то свое, но не пойму с чего начинать. Подсмотрел у одного индуса ГуглДрайвФтпАдаптер, хочу сделать такой же, у него говнокод какой-то. Или свой сайт с встроенными другими программами, но мне кажется тут уже не джава начинается, а JS/Django.
Как вообще проектируется проект, если нет дяди который тебе спустит ТЗ
>Или свой сайт с встроенными другими программами, но мне кажется тут уже не джава начинается
Почему? Апплеты.
>2к19
>Апплеты
Хороший траленг
По теме: ебани rest сервис на спринге. По ходу дополняй его всякими штуками-дрюками
Да ето изи.
Как выучить Hibernate? Требуют в каждой вакансии. А я только с Spring Data работал.
на самом деле это второй выбор кровавого тырпрайза после жабы
С хуяли функция принта в консоль должна интерпретировать html-теги? Для него это просто строка.
Это на джуна? Выглядит интересно на самом деле, хотя, как мне кажется, многовато требований для тестового. Можно не торопясь написать самому, потом на собесах показывать.
Стажировки??? Да пошли они нахуй с такими тестовыми тогда.
Это просто бесплатная работа, которую они интегрируют в свой высер, а лоху перезвонят.
это ты тупое говно тупого говна, если не понимаешь что консоль и браузер это разные вещи.
BUMP
Лол. А я собирался подаваться в эту контору. Это же СКБ Контур? Пиздец говнище.
Что за рейтинг компаний? Сейчас загуглил, нашёл какую-то хуйню, в которой нет ни яндекса, ни мистера мэйлеца, только галеры разные.
Много мейлру и яндекс поставляет ПО, автоматизированных систем банкам и прочему интерпрайзу? Похоже ты понятия не имеешь, о чем говоришь.
http://www.cnews.ru/reviews/rynok_it_itogi_2017/review_table/5ea292822e4f02a7c71a3495f1e456e5b320f86a
То есть, ИТ-уровень компании определяется количеством аутсорса? По моему, это ты не понимаешь, о чём говоришь. А то сейчас окажется, что гугл и эппл тоже не айти-компании, как же, они же БАНКАМ программы не пишут!
https://habr.com/ru/post/439432/
Ничего не понимаю. Где эти вакансии, на которые берут без знания спринга, гибернейта и кучи других фреймворков? Или его взяли из-за прохождения сертификации Oracle?
Выглядит как тестовое на миддла, которое дают после прохождения собеседований, чтобы подтвердить наличие опыта и знание технологий.
Выглядит как наебалово.
Я как ждун вкатальщик иногда охуеваю от таких тестовых!
Так то реально всё, гуглить всякие бестпрактисы, две недели хуярить код!
А разгадка проста.
Рыночек программистешек то уже все.
Еще хуже чем с юристами и бухгалтерами.
Выполняешь такой тикет на мидла, бесплатно, даже как ждуну не платят.
1) Рынок программистов все
2) Заводов нет
3) В питорочках тоже
Куда работать-то? Стоматологом что ли
Мылыш, если ты предоставишь 2 этих сертификата при устройстве на позицию джуна, будет ОЧЕНЬ большой глупостью не взять тебя
Пизда не актуально же, айтипедия сказал.
Если ко мне придут 2 кандида на одно место, у одного в CV будут эти 2 сертификата, у второго кровавый-стек(Спринг, Хайбернейт, etc). Я с долей 80% возьму первого.
мимо-мидл
Вот я дохуя времени потратил на сертификат и могу сказать, что OCA - это повод позвать на собеседование. Но на самом собеседовании у тебя начнут спрашивать за ООП, паттерны, архитектурку простенькую попросят нарисовать. Если на этом поплывёшь, то ничего не светит. Я вообще охуел, когда меня на одном собеседовании спросили, как return значения внутри JVM на стеке работает и понял, что пока искать работу мне еще рановато.
Конечно рановато, ведь на работе ты будешь писать компиляторы, хули ее искать, пока не напишешь свой компилятор.
Ну короче я придумал и чет как-то дохуя всего. Лень.
> как return значения внутри JVM на стеке работает и понял, что пока искать работу мне еще рановато.
лол, попался тебе даун который решил поумничать скорее всего, таких надо самих гнать из компании. Нахуя тебе это знать если ты джун и твоя задача будет клепать REST API на спринге?
Ну да, зачем понимать, как освобождается память и другие ресурсы, для клепания крудов это совершенно лишняя информация.
В очередной раз убеждаюсь, что мелкобуквенность - стопроцентный индикатор двузначного IQ.
Лол, вот типичный пример - вот таких как ты и надо гнать из компании как можно быстрее, или как минимум не давать им проводить интервью (хотя скорее всего ты школьник). Совершенно верно - для клепания крудов не нужно знать как освобождается память, нет, это не лишняя информация - но и не настолько необходимая, чтобы реджектить кандидата который этого не знает.
Объясни мне, нахуя мне знать, как освобождается память, если в Java у меня попросту нет даже средств для того, чтобы ею управлять (кроме Unsafe)? И это одна из ключевых фишек Джавы: разработчику вообще нахуй не надо задумываться о такой низкоуровневой хуйне и он может сосредоточиться на программировании, а не на ебле с указателями на указатели и на отлавливании утечек памяти. Поэтому данные знания действительно нахуй не нужны, если ты конечно не собираешься писать собственную JVM.
Нужно очень сильно постараться, чтобы выстрелить себе в ногу этим :)
А мне наоборот понравилось, это был хороший вопрос. Особенно если он задаётся не из воздуха, а по ходу беседы, как было в моём случае. Ты ходел бы работать с людьми, которые хорошо понимают устройство языка, или с даунами, которые только вчера хеллоу ворлд освоили, и считают, что этого достаточно?
>>44292
Ну как минимум с вышеупомянутыми слабыми ссылками ты уже обосрался, средства есть. Но ты прав, в большинстве случаев достаточно просто позволить ссылке на объект вывалиться из скоупа и не морочить себе голову. Но если пишешь свой хитрожопый кэш, коллекцию, да или просто любой другой класс, который управляет своей памятью (хранит ссылки на другие объекты), то понимать это надо.
>Ты ходел бы работать с людьми, которые хорошо понимают устройство языка, или с даунами, которые только вчера хеллоу ворлд освоили, и считают, что этого достаточно?
Да, я хотел бы - но реальность такова что хороших работников не найти, поэтому на такие вещи можно закрыть глаза, если на позиции где будет работать интервьюируемый нет явной необходимости это знать. Я провел много собеседований в большую финтех компанию, и когда только начинал тоже был как ОП, спрашивал всякие "сложные" вопросы, где я хорошо разбирался (про алгоритмы например), но потом понял, что это не нужно, компании всего лишь нужно найти "приемлимого" работника на данную позицию, а не идеального.
А как прально? В import.sql? Чем плоха автогенерация?
1) Через IDE это запускается, но как мне запустить это все через консоль? При попытке запустить через "java Main", появляется ошибка "Could not find or load main class Main.class". Пробовал различные варианты из гугла в стиле "-classpath . ", "-cp", но мне кажется, что проблема в чем-то другом.
2) Как правильно писать маленькие, прикладные программы? Уточню: есть у меня .java файл, я компилю его в .class файл. А дальше что? Каждый раз через консоль "java main.class"? Писать скрипт? Есть ли способ сделать джава код исполняемым файлом?
Could not find or load main class Main.class
Надо запускать класс в котором, есть метод
"public static void main(String[] args)"
javac Class.java
java Class
Такой вопрос. Есть 3 класса, с почти одинаковыми методами. Не хочу повторять один и тот же код в 3 классах. Интерфейс не вариант использовать, так как в этих 3 классах могут потом методы отличаться.
Я сделал абстрактный класс в нём реализовал все методы, которые похожи между 3 классами. А методы которые отличаются реализовал в каждом из этих 3 классов отдельно. (Воспользовался перегрузкой методов).
Получилось следующее: Есть 4 класса. 1 класс является абстрактным и в нём по умолчанию реализованы методы, которые используются в 3 классах. В каждом из 3 классов есть по одному методу, которые реализуются по разному в каждом классе.
Это быдлокод или нормально? Просто смущает, что я создаю класс, ради одного метода.
АХАХХАХАХАХА в голосину проорал) Это этот Егорка) Который призывал отказаться от сущностей? Мол зачем создавать класс, если он ничего не умеет.
>Ты ходел бы работать с людьми, которые хорошо понимают устройство языка, или с даунами, которые только вчера хеллоу ворлд освоили, и считают, что этого достаточно?
>Раздает советы насчёт работы
> Завалил собес
>Считает даунами тех, кто знает технологию хуже, чем он
>Определяет айсикью по орфографии
>Сам пишет с ошибками
Диагноз: чсвшный безработный школьник
Рекомендованное лечение: качать софт-скилы, убавить токсичность
>
> Есть годные книги о том, как правильно сделать слои приложения и как правильно писать чистый, понятный и хороший код?
Очевидная Elegant Objects. Еще прочитай какую-нибудь книжку по скале\хаскелю\окамлу.
class It's alive! It's alive! {
public static void main(String[] args) {
System.out.println("It's alive! It's alive!");
}
}
Выдает ошибку
Main.java:1: error: unclosed character literal
public class It's alive! It's alive!
^
Main.java:8: error: reached end of file while parsing
}
^
Может удастся мне помочь?
Название класса должно быть одним словом
В имени класса могут быть только буквы, цифры, _ и $ (эти 2 не используй), причем имя должно начинаться с буквы.
Загугли бля, там статей про это море, про манифест узнаешь еще!
callboard/src/main/resources/templates/registration.html
27-я строчка
Уже зарегестрированы?
Ах ты пидор безграмотный! Пиздуй в макдональдс!
>callboard/src/main/resources/templates/registration.html
>27-я строчка
https://github.com/Weydile/callboard/blob/master/src/main/resources/templates/registration.html#L27
тебе туда же.
Там же авторизация и прочая хуита из коробки есть!
Глянь хелоу ворд на оф сайте про спринг секурити!
Из коробки прям к бд подключается сама и авторизует?
> Как джарник в мавене собрать
Ага!
А ещё какие требования к бд, где смотреть и менять её конфиги (логин пароль)
Ну перенести в сервис добавление пользователя и использовать сервис в контроллере вполне можно (а может даже и нужно). Но я говорил про Throws в доках, которые ты так и не прочитал, хотя я тебе сказал это сделать.
Ок
Регистрации юзеров в security нет.
Сложно
Классные названия коммитов.
*8828_!==
Эта хуйня - два инпут поля. Юзер может вводить туда цифры либо оставить пустим, но пагинация должна быть доступна всегда. В итоге я застрял на том, чтобы передавать эти два Integer-a в контроллер. Пробовал вставлять как @RequestParam да только в любом из раскладов у меня всегда null, наверно я не правильно передаю или ещё что.
Плодить контроллеры я не хочу, а потому не юзаю @PathVariable. По мне так это по говнокодски делать:
@GetMapping(value = "/hui/{input1}"
@GetMapping(value = "/hui/{input2}"
@GetMapping(value = "/hui/{input1}/{input2}"
Как можно нормально передавать три и более параметров в контроллер? Вот кусок кода пагинации в JSP
<form method="get" class="row" >
<select name="pageSize" class="pull-right page-selector" onchange="this.form.submit()">
Понятное дело, что я передаю один параметр - pageSize при помощи "this.form.submit()", но а как мне передать два других параметра, не плодя контроллеры на каждый пук?
на форму добавь еще сколько надо параметров
типа <input name="hui" />
тогда этот hui передастся как RequestParam (..&hui=value)
У меня за этими двумя инпутами уже закреплён POST да и добавить нельзя, ибо тогда фронт будет очень кривым.
Я бы хотел что-то вроде <var="input1" value=${input1}/> Так нельзя но мысль понятна.
А это может быть. Надо попробовать. Отпишу в понедельник как успехи, спасибо.
Лучше JSP ебануть.
А в воскресенье посмотри фильм "2001 год Космичесская Одиссея"
>а как мне передать два других параметра, не плодя контроллеры на каждый пук?
@RequestParam Map<String, String> requestParams
Статичный абстрактный метод вообще невозможно сделать?
Есть абстрактный класс. Хочу, чтобы в каждом классе потомке обязательно был объявлен и определён некий статичный метод.
Нет, переопределять можно только не статик методы.
>чтобы в связке html+css+js использовать джаву вместо js
Как это? Знаю Vaadin, где можно писать только на Java, а на выходе у тебя будут формочки в браузере. Но хз, это ли ты имел в виду.
Собрал себе, но понимаю что для убунты оверпрайс. Естественно раздел не тот, но мне интересно именно у местных анонов спросить, у которых линух + idea + веб и сериальчики. В общем на каких машинах сидите аноны?
Купи с рук любой ноут где стоит что то уровня i3 на авито.
Вот тебе и машина на которой можно Linux mint ставить
Разве что может ССД придется поставить.
Клиент-Серверное (под tomcat) приложение.
Разработать страницу, отображающую в браузере древовидную структуру.
Функциональность:
∙ выделенный элемент должен быть отмечен отличной от других папок цветом иконки;
∙ реализовать «ленивую» загрузку папок, искусственно добавить задержку в 2 секунды при раскрытии папки, задав такой папке иконку загрузки, при этом должна быть возможность производить различные операции и навигацию по дереву;
∙ возможность добавления/изменения/удаления узлов дерева.
∙ перенос папки, включая вложенные под-папки в выбранную папку;
∙ опционально - организовать хранение данных в БД .
Задание будет оцениваться по следующим критериям:
∙ приятный и интуитивно понятный интерфейс приложения;
∙ краткий и понятный исходный код;
∙ использование паттернов.
Что использовать для решения задачи? Я вижу только вариант с html+css+javascript на фронте и java на беке.
Да, вполне.
Я в 2014 году (по старому курсу ещё) купил системник примерно за 30к (i7-3770, GeForce GT640, SATA-500, 16GB)
Оперативу Android Studio жрёт как не в себя и хром (когда много вкладок открыто).
Сейчас поди уже 32гб нужно брать на хоум тачку.
Нет, на на вакансию Intern Java Developer/Стажер. Я сейчас работаю на php и подозреваю, что у меня подход не правильный
Не рвись манька, не в сем дано вникать в длинные истории, может когда-нибудь твой мозг сможет удерживать в памяти сюжеты длиньше пары часов, но пока что книги и сериалы не для тебя.
Перекотился из офиса (3к евро на руки было) в апворк и топтал - стало 10к на руки, олсо можно перерабатывать если деньги нужны позарез, доходило и до 20к в месяц (по 80-100 часов в неделю сидел), но долго конечно так не проработаешь.
Джава-реакт фулл стек. Ничего сверх естественного не делаю, всякие веб аппы с рест апи. Английский upper-intermediate я бы сказал, проблем с общением не было, кроме тех случаев когда попадались клиенты-бриты, вот там порой пиздец было ничего не понять.
Кстати ты правильно что это упомянул, это очень важно в процессе поиска клиентов, помню как то не выспался, а интервью было в 2:00 AM, так вот там я инглиш зафейлил полностью, естественно клиент решил со мной не работать (и это не смотря на длительную историю на апворке с 100% success rate все ревью хорошие и тд).
Реакт это который JS фрэймворк? или RxJava интерфейсы пользовательские тоже делаешь? я просто фронт очень плохо знаю в части вёрстки например
Ты из россиюшки? ИП оформлял? как с налогами?
react-spring-mongodb/mysql (но последнее время почему то клиенты полюбили монго)
>>45293
>Реакт это который JS фрэймворк? или RxJava интерфейсы пользовательские тоже делаешь?
Да, нет.
Кстати если еще знаешь React Native то в топтале жуткая нехватка кадров с таким скиллом, велком (можно поделить $500 referral bonus лол).
Охуеть успешный в треде.
Дай совет вкатывальщику, куда двигаться сейчас: в активе джава, спринг, пару курсов по хибернейту, андройд бэйсик. Привлекает больше андройд, но вакансий в моем 400к мухосранске практически нет. Но я так понимаю, что даже думая про мобайл, спринг пригодится для написания тех же рест сервисов. Короче как-то я в растерянности.
Обязательно, ну скажем процентов 20 клиентов не любят разговаривать и берут тебя просто на основании фидбека, даже без интервью, потом просто в слаке с ними общаешься. Но это скорее исключение, большинство любят делать видео чаты, еще и каждую неделю, а то и чаще.
>>45314
уже писал выше - React, React Native, вакансий тысячи, рейт обычно $50 и больше, но как вкатывальщик начни например с $30/h проблем найти не должно быть.
фее
Подожди, я правильно понимаю, что для полноценной работы с React Native все равно нужно знать Java/Object-C и Android/iOS SDK?
Не знаю, я работаю только с React, просто упомянул что на топтале много вакансий на React-Native, даже дают реферал бонус в $500 если приведешь годного девелопера.
Еще раз для тех кто в танке: можно ли с нуля не зная Java/Object-C и Android/iOS SDK выучить один лишь React Native за полгода и пиздовать во фриланс?
React очень прост, думаю можно выучить гораздо быстрее. Еще раз - я работаю только с React (тот который для веб-аппов), с React Native пока не работал, поэтому точно не берусь сказать нужно ли там знать iOS/Android, но полагаю что вряд ли это необходимо.
Я понял, спасибо. Добра.
Ок, верю.
Есть в нем кастомный ексепшен, который кидается если не найдена ентети.
Я хочу этот эксепшен поймать в контролер эдвайсе и дальше отправить статус NOT_FOUND - получить редирект на страницу 404.
Контролер для /ерорр наследован от ErrorController.
spring.mvc.throw-exception-if-no-handler-found=true - указано
Что еще надо то блять?
Перерыл гугол и уже немного заебался.
Один из вариантов / попыток :
@ExceptionHandler(NotFoundException.class)
public ResponseEntity<Object> handleUserNotFoundException(RuntimeException exc, WebRequest request){
String message = exc.getMessage();
log.error(message, exc);
return ResponseEntity.notFound().build();
У меня так, например (точно работает)
@ControllerAdvice
@Slf4j
public class RESTExceptionHandler {
@ExceptionHandler(RuntimeException.class)
@ResponseBody
@ResponseStatus(code = HttpStatus.INTERNAL_SERVER_ERROR)
public ApiError handleRuntimeException(RuntimeException e) {
Это не рест, в это весь цемес. Смутно подозреваю что надо екстендить что то другое например ResponseErrorHandler.
РЕСТ кстати работает нормльно.
Кароче, я решил это так.
Просто добавил респонс статус сверху и вернул тупо шаблон.
Я понимаю что это хуевое решение, но оно сука работает. И по тестам и если так потыкать.
@ExceptionHandler(NotFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
public String handleUserNotFoundException(RuntimeException exc, WebRequest request){
String message = exc.getMessage();
log.error(message, exc);
return "404";
}
Зочем? Если есть @ResponseBody то спринг обернет автоматически
Слушай, а у тебя есть высшее образование? Какой специальности диплом?
У меня ситуация - добавился объект, с коунтером 100.
Потом я добавляю 400 - становится 500. - но сука объект не сохраняет это состояние. ЧТО ЗА ПИЗДЕЦ?
У меня вечно 500, сколько бы я объектов туда не отправил. В каком месте жабы я оподвилился?
Ну barcodeList.set там не нужен, это лишняя строчка ( я экспереминтировал другие пути), все равно не работает без этого.
А у тебя equals/hashcode переопределены? А то может он просто новый элемент добавляет.
Ты еще скажи, что и деда мороза тоже.
Решил использовать embed MongoDB.
Прописал зависимости так:
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'
implementation 'de.flapdoodle.embed:de.flapdoodle.embed.mongo'
implementation 'org.thymelea:thymeleaf'
compile group: 'cz.jirutka.spring', name: 'embedmongo-spring', version: '1.1'
}
Прописал кофигурацию:
@Configuration
public class MongoConfig {
@Bean
public MongoTemplate mongoTemplate() throws IOException {
EmbeddedMongoFactoryBean mongo = new EmbeddedMongoFactoryBean();
mongo.setBindIp("localhost");
MongoClient mongoClient = (MongoClient) mongo.getObject();
MongoTemplate mongoTemplate = new MongoTemplate(mongoClient, "embeded_db");
return mongoTemplate;
}
}
Получаю ошибку:
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
Reason: Failed to determine a suitable driver class
ЧЯДНТ?
Решил использовать embed MongoDB.
Прописал зависимости так:
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'
implementation 'de.flapdoodle.embed:de.flapdoodle.embed.mongo'
implementation 'org.thymelea:thymeleaf'
compile group: 'cz.jirutka.spring', name: 'embedmongo-spring', version: '1.1'
}
Прописал кофигурацию:
@Configuration
public class MongoConfig {
@Bean
public MongoTemplate mongoTemplate() throws IOException {
EmbeddedMongoFactoryBean mongo = new EmbeddedMongoFactoryBean();
mongo.setBindIp("localhost");
MongoClient mongoClient = (MongoClient) mongo.getObject();
MongoTemplate mongoTemplate = new MongoTemplate(mongoClient, "embeded_db");
return mongoTemplate;
}
}
Получаю ошибку:
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
Reason: Failed to determine a suitable driver class
ЧЯДНТ?
Не делай через @Autowired. Делай через конструктор с final полями.
https://dzone.com/articles/spring-di-patterns-the-good-the-bad-and-the-ugly
Еще у баедулга есть подробно на эту тему.
Спасибо за статью, поправил, пытаюсь сделать что-то такое:
@RunWith(MockitoJUnitRunner.class)
public class MockitoControllerTest {
private PartiesRepository repository = Mockito.mock(PartiesRepository.class);
private PartyService service = Mockito.mock(PartyService.class);
private PartiesController controller = new PartiesController(service);
@Test
public void testCreation() {
assertThat(this.service).isNotNull();
}
}
Но вылетает мокитоэксепшн, который говорит, что мокнуть сервис не может. У сервиса есть зависимость от репозитория, я так понимаю, что мокнуть надо сначала его, потом сервис, а потом уже всю эту красоту к контроллеру подключать, да?
Строгая типизация.
Ты определеись ЧТО ты хочешь потестить, а потом уже пиши тест. Выбери только одно. Каждый метод - один случай.
Какое поведение ты исследуешь.
Я дооолго ебался с тестами по началу кстати, так что понимаю твое замешательство.
Рекомендую искать статьи про тесты только старше 2018 года и только 5й спринг ( или какая там у тебя версия), потому что сейчас тесты пишутся сильно по другому.
-------------------
У тебя нет сетапа, у тебя до теста нужно сперва сделать предварительно все.
https://dzone.com/articles/spring-boot-unit-testing-and-mocking-with-mockito
https://www.baeldung.com/spring-boot-testing
Для общего развития.
Спасибо за помощь, обязательно почитаю
На собеседовании дали задание:
Клиент-Серверное (под tomcat) приложение.
Разработать страницу, отображающую в браузере древовидную структуру.
Функциональность:
∙ выделенный элемент должен быть отмечен отличной от других папок цветом иконки;
∙ реализовать «ленивую» загрузку папок, искусственно добавить задержку в 2 секунды при раскрытии папки, задав такой папке иконку загрузки, при этом должна быть возможность производить различные операции и навигацию по дереву;
∙ возможность добавления/изменения/удаления узлов дерева.
∙ перенос папки, включая вложенные под-папки в выбранную папку;
∙ опционально - организовать хранение данных в БД .
Я как перекатывающийся из php вижу решение этой задачи как java servlet на бекенде, но в качестве фронта я вижу только html+css+js.
Причем большая часть задачи, как перенос папки, включая вложенные под-папки в выбранную папку, решается исключительно на js.
Или я не правильно думаю и есть какой-нибудь swing в браузере?
JSF, JSP.
Ты очевидно хотел сказать "за хуй в рот"
Сделать задание и просить хотя бы 150к, даже если опыта на джаве нет. Но ждать что будут ебать 24/7 и делать будешь видимо ВСЕ.
Как оно ИРЛ?
Хуярят 2 отдельных сервака. 1 со сприрнгом, который раздает РЕСТ апи + еще 1 на ноде(?) где уже работает реакт или ангуляр апп.
Или примерно как здесь.
https://habr.com/ru/company/alfa/blog/340776/
Сливают воедино все в экстазе и единственным бэком будет собственно спринг?
градлом/мевеном билдят фронт, бек, минифицированную версию фронта кладут в /static и вуаля.
В статике лежит нода, на которой крутится фронт?
Доступ у фронта к {жава-объектам}, как у тимлифа есть?
Ноды нет. Фронт билдится один раз, во время релиза и в итоге получается папка с минифицированными ресурсами и index.html, которую копируют в статик.
Это видимо другое в твоем варианте.
Когда просто импортируются скрипты в шапке хтмл.
Я про полноценный апп на фронте.
Посоны есть ли какой-то смысл покупать в 2к19 эту книгу для самообучения ? Знаю только основы и то ...
Государство Платона лучше читни, там реальная философия.
Можно поймать исключения в try/catch, засунуть их все в список List<MyException>, а после выполнения метода, если список не пуст, выкинуть свой эксепшн, который в конструкторе будет принимать этот список и извлечет все сообщения сразу.
>Можно поймать исключения
Можно поймать одно исключения. Я как раз и спрашиваю, как после этого продолжить с того места, на котором мы остановились. В случае построчной обработки докуента все просто, а если там что-то с вложенностью, то уже не очень.
Я же сказал, поймай одно и засунь в список, выполнение продолжится после catch. Если это не подходит, то кидай код, я же не экстрасенс.
Разные элементы документа обрабатываются разными классами, не копипастить же везде try/catch и списки ошибок.
Ты спросил как выкинуть несколько, я тебе ответил. Больше никак.
Класс клиента - https://ideone.com/v27XKw
main - https://ideone.com/xUwc87
Ожидание: клиент отправляет серверу две строки, принимает их, выводит в консоль и закрывает соединение, после чего программа завершается.
Реальность: зацикливание в методе receiveAll().
Пробовал прогонять в IntelliJ дебагом, выставив брейкпоинт на начале цикла. После приема двух строк оно перестает показывать состояние каких-либо переменных вообще.
Что я делаю не так?
Добавлю, println внутри receiveAll() строки выводит, т.е. от сервера ответ все-таки есть.
Спасибо, анон.
Пикрелейтед аналогичная настройка в лучшей иде.
Эту настройку я открывал. Но у меня на компе кроме 1.8 jdk никакого нет, он сам как бы должен понизить с обратной совместимостью, а не выбрать другой.
Блин, я поспешил. Там есть такое. Оу щит айм сорри.
Аноны, что почитать/посмотреть по теме spring'a стоит начинающему разработчику? В моём городе в большинстве контор требуют его на позицию стажёра
Нет никакого смысла, web.xml не нужен, но желателен, ибо апликейшен-сервер его мониторит для обновлений, а класс «в коде» - нет
Приложения на реакте и ангуляре это статика, которая работает в браузере клиента. Нода используется только для сборки проекта
Попизди мне тут. Если нужен SSR, то надо поднимать отдельный сервак на Ноде для клиентского приложения.
Oчевидно что задающий вопрос вообще не ебет что такое SSR
Двач, посоветуй, что бы такого можно было написать, чтобы на этом проекте научиться и показать потенциальному работодателю свои возможности?
Какой проект подходит для уровня middle java developer? junior не беру, т.к. там может повести и возьмут с минимальными умениями. А надо наверняка
Есть 2 направления куда зовут. Hybris и ATG от Оракла. И там и там с обучением.
На какой стул сесть?
имхо лучше читать православного Олифера. В сетях тоже будет глубоко, точнее от самой истории и древних архитектур до новых всяких хуинь
- сап, народ, хочу засунуть себе в жопу кактус, знаю, что будет больно и опасно. Совал вот так и вот так (скриншоты прилагаются), не лезет. Как правильно засунуть себе в жопу кактус?
- вот ты лалка, в 2019 в жопу кактусы совать, все православные посоны давно уже сосут хуй!
Сука, как я вас таких ненавижу.
Стоит учить или можно забить?
Ну олифер подойдёт шоб иметь общее представление о работе, мб какие нюансы полезные, но не лезть в жёсткую прикладную хуйню которая будет усваиваться через 20 перечитываний и мне никогда не пригодится?
Еще пока стоит.
А еще?
Только спринг и мобилки. Остальное нинужно.
>JSP используется в реальной работе или все уже используют жс фрейворки / тимлиф?
Во всяком легаси-говне только JSP и используется, а легаси-говно - половина вакансий Джавы.
Да, вполне подойдет, где то читал что дело вкуса мол читай что хочешь. В любом случае если зайдет одна книга, то можешь читануть другую и она будет как по маслу лететь
Поставил спринг секьюрити. Посадил апи за него.
Теперь если сделать запрос к апи без пароля редиректит на страницу логина.
Как отправить 403 вместо 302 на лоигн пейдж?
Спринг не выкидывает никаких ексепшенов в консоль.
Ответ мок теста:
MockHttpServletResponse:
Status = 302
Error message = null
Headers = {X-Content-Type-Options=[nosniff], X-XSS-Protection=[1; mode=block], Cache-Control=[no-cache, no-store, max-age=0, must-revalidate], Pragma=[no-cache], Expires=[0], X-Frame-Options=[DENY], Location=[http://localhost/login]}
Content type = null
Body =
Forwarded URL = null
Redirected URL = http://localhost/login
Неплохая идея, кстати чет я не подумал, вопрос только с кем. Писал одно время с одним немцем модик к 3 арме довольно неплохо получалось именно с точки зрения мотивации.
Спасибо)
Но апплеты и вебстарт никто не юзает.
Ты на одном проекте не научишься!
Загуглишь хуиту и потом сразу забудешь.
Нужно несколько крудов запилить.
Каждый сложнее предыдущего!
Оставь какие-нибудь контакты, можно попробовать
Аноны, нид хелп! настраиваю спринг сикьюрити и тут понеслось.
В матчерах прописываю директории как в доках спринга, а именно:
"/static/ и /partials/". по факту ничего из этого не работает. с статиком решил так: "//*.css", прошло, а вот как с теймплейтами быть?Спринг не хочет видеть, что лежит в партишелах, но видит, что лежит в корне темплейтов. Структуру папок прилагаю. префикс шаблонизатора на "/templates/".
Нахуй ты такой нужен джуном если самообучение не тянешь? Думаешь на галерах кому то будет интересно тебя обучать?
Значит так. 3 этапа.
1.
Пишешь крад сервлетами. Авторизацию/аутентификацию/ фильтрами. Без жпа. Только сессии, только конекшн, только нативный скл. Минимальные стили . Пушишь в репу.
Важно понимать, как это работает на низком уровне. Только jsp эта вот хуииа тебе ещё понадобится в жизни. Обязательно миграции бд - самое лёгкое - флайвей. Реализовать минимальные релейшены между таблицами.
2. Крад на том же спринг буте, но уже с жпа, нормальными стилями, с бутстрапом, с нормальной спринг секьюой. Таймлиф или фримаркер. Миграция - ликвбейс. Реализовать все виды релейшенов между таблицами.
3. Фул рест крады, с джаваскриптом и норм стилями. С рассылкой почты, с рекапчами, с полным логированием, миграция на выбор.
Спринг бут сам тебе настроит томкат или андертоу, остальное зависит, насколько у вас сильно развит ci и devops. Докер, линуксовые команды, монго/постгрес/оракл.
Со спринг бутом понятно, но там анон советовал по хардкору с сервлетами поебаться, вот и спрашиваю, а то там помимо томката ещё и джетти есть, вилдфлай и глассфиш!
И хз что из этого нужно ждуну вкатальщику трогать
Пачиму??
Сам не знаю, но вот идея же написана
я слышал в пятом ошибочки есть или около того. Тем более в 4 показывают xml конфиги, это тоже полезно я думаю
>в 4 показывают xml конфиги, это тоже полезно
Только если собираешься месить легаси-говно. Не видел ещё ни одного проекта, где Спринг настраивался через xml - когда такое было модно, в России все пилили проекты на JavaEE, но даже там старались угорать по аннотациям.
Ну да, я понимаю, что большинство предпочитает аннотации, но по хорошему же стоит понимать откуда все начиналось
Да нахуй тебе ничего не надо. плагин томката для мейвена накати для сервлетов, на нем и делай.
Докер по желанию, но лучше знать. если не линкус тачка, то жопоболи наберешься.
Мимо тот анон.
Молодца, Бугаенко бы оценил.
Дайте какую-то книгу или рессурс или видео, которое обьясняет, как работает спринг под капотом, на самом низком уровне.
Общего сборника, к сожалению, нет.
Что-то можно почерпнуть из Spring in Action. его нужно читать в первую очередь, там получишь объяснение довольно многих вещей.
Затем (или параллельно) рекомендую посмотреть видосы Spring-потрошитель от Борисова на ютубе.
Какие-то вещи я почерпывал в процессе изучения конкретного модуля. Например, на канале https://www.youtube.com/channel/UCLMPXsvSrhNPN3i9h-u8PYg
есть много записей докладов от самих разработчиков, где они расказывают подкапотные вещи.
netbeans,
только надо настроить как на скрине.
.ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_1234567890
Саблайм это текстовый редактор, а не IDE
Spring in Action на русском
Что в книгах пишут такого (seriously asking)? все что нужно в туториалах имхо, которые гораздо быстрее просканить можно.
Тоже предпочитаю аннотации, но в xml конфигах есть свои плюсы, например посмотри конфиг сокет коннекшина со spring-integration [1], весь конфиг в паре строчек, на аннотациях это было бы разбросано по многим классам.
1. https://github.com/spring-projects/spring-integration-samples/blob/master/basic/tcp-client-server/src/main/resources/META-INF/spring/integration/tcpClientServerDemo-context.xml
Я по туториалу с spring.io почти запилил свой таск манагер, но ощущение, что я тупо копипащу без нормального понимания кто что делает. В гайдах есть небольшие пояснения но хз.
О спасибо за канал. Я прям тем же самым занимаюсь. Спринг в действии читаю и Борисова смотрю.
Я тут прочел, что начиная с java 11 больше стандартной jre у джавы не будет, и предполагается, что для каждого приложения будет генерироваться свой рантайм, в котором будут только необходимое для приложения модули, и этот рантайм надо распространять вместе с приложением. Вроде бы идея не плохая, но как же быть если у пользователя будет много джава-приложений, неужели для каждого приложения будет свой рантайм?
Придумают что-нибудь типа докера.
Для десктопных и сейчас многие инклюдят JRE в дистр, на случай если у пользователя нет джавы например.
Я уже написал пару приложух на спрингбуте по мануалам, но это казалось мне реальной магией. Решил прояснить все чтением спринг ин экшн 5. Читаю, а там основной посыл такой "спрингбут эта круто, заморачиваться не надо, добавьте депенденси и все само заработает".
Поэтому пришлось откатиться до спринг ин экшн 4. Вот тут я реально очень многое осознал и понял.
Что, теперь три рантайма для винды, линукс и макоси надо собирать и вкладывать в приложение, не жирно ли выходит?
Ну вот какой тебе смысл сейчас узнавать, что там под капотом ? Все равно на данном этапе не поймешь. Попиши крады, поделай рест. Устройся на работу, апни мидла, тогда и углубляй знания. Сейчас это тебе не надо. Многие д3 стримов не знают и живут.
Инсталлятор то все равно специфик для платформы. Мы билдили .msi и .dmg отдельно например
Смотря какие книги и смотря кто их пишет. 90% туториалов пишутся Васянами и это является пересказом других Васянов
Меня сходу на собесе спросили про депенденси инжекшн, какие способы внедрения зависимостей я знаю, какой способ лучше использовать. Все это я как раз и вычитал в спринг ин экшн 4 пару дней назад.
Все, я тупой, я понял.
4(
Это сделали для микросервисов и прочей инфраструктуры, где жирный рантайм ни к чему. Также Ораклы пилят GraalVM, который способен сгенерировать нативный бинарник: насчёт применения пока не уверен, но наверное серверлесс, IoT девайсы и тому подобное.
нет.
Не, перепробовал уже все. Это кодировка внутри жабы похоже или приходящая с хттп пост запросом, я точно не понял, но она зашивается в реквест и её хуй поменяешь. Я прост конвертером перевожу её. Используйте конвертер короче в таких случаях.
Ебусь там с начальным спрингом, аннотациями и передачей объектов на хытымл с контроллера
http://stackoverflow.com/questions/54761923
>Это кодировка внутри жабы похоже или приходящая с хттп пост запросом
Попробуй заглянуть в запрос до того, как он провалится в жабу. Как - не знаю.
Это тоже нагугливал, пишут что там в хедере как раз и указывается эта ебучая исо 8859-1. Писали пару решений как кому то помогло, но мне не помогло.
А ты сам возьми да посмотри. Либо fiddler, либо просто добавь логи на фронте.
Какая выгода от DI фрэймворков? Чем плохо реализовать DI просто ограничившись добавлением интерфейса в конструктор, просто сделать интерфейс IFoo, сделать класс Bar с конструктором Bar(IFoo foo), и готово, потом сам создаешь конкретные реализации IFoo и передаешь их в конструктор, безо всяких контейнеров
Для больших проектов так просто удобнее и требуется меньше кода. Для маленьких конструктор вида
MyClass(A a, B b, C c) {
this.a = a;
this.b = b;
this.c = c;
}
уже будет выполнять все функции DI фреймворка.
От ЕПАМА нормальная книга.
>На джаве фриланса нет. Хочешь фрилансить — дуй в ПХП/раби/1С тред.
А нахуй он нужон тогда? Чтобы сидеть офисной макакой в какой нибудь компании и с 8 до 5 пилить всякие штуки?
Понял принял
В чем прикок этой ваши джавыраш, там ведь нихуя толком не объясняется, например, че вот такое string че такое arcs нахуй оно вообще присутствует в коде или это чисто для того чтобы понять что по шаблону ты можешь что то "кодить" а дальше уже или покупай курсы или пиздуй сам учиться?
Архитектурный стиль поверх протокола HTTP. Простыми словами, список ссылок, к которым обращаешься с помощью HTTP-запросов, данные передаются обычно в json или xml. Например, отправив POST-запрос с данными по ссылке /users ты создашь нового пользователя, отправив GET /users, получишь список пользователей, GET /users/1 вернет пользователя с id=1. Клиент (мобильное приложение, например) потом эти данные динамически вставляет на страницу.
У меня относительно старый проц и 8 гб оперативы и идея открывается за 1 мин 02 сек. Хотя видюха у меня гтх 1060
А дело тут в том, что жесткий диск медленный, а не проц или оперативки мало. Покупайте ССД.
мимохакер
А чем Spring MVC отличается от Spring Rest? Можно ли писать веб-приложения на rest не используя jsp?
>А чем Spring MVC отличается от Spring Rest? Можно ли писать веб-приложения на rest не используя jsp?
Ты туториалы с официального сайта запусти, там простые примеры, сразу по коду всё поймёшь.
И главное запомнишь 3 аннотации которые позволят тебе минимальную приложуху создать!
Spring Rest - это надстройка на MVC. Для Rest'a JSP не нужен. Используя rest, ты, грубо говоря, можешь загрузить 1 раз страницу, а потом вставлять туда полученный json (гугли single page app). В случае jsp ты генерируешь каждую html на сервере, самостоятельно вставив туда данные, и отдаешь клиенту полностью готовую страницу.
Говно мамонта
В старых проекта используется. В новых в основном javascript-фреймворки (Angular, React, Vue и т.д.) + REST backend.
>>51770
SOAP - это протоколы (строгие стандарты, в отличие от REST) поверх xml, причем HTTP используется просто для передачи данных (только POST-запросы). Куча статей есть на эту тему.
флайвей
Ликвибейз.
А ещё можно прикрутить Quartz, который охуенно гибок, но это если надо будет изъебнуться с цикличностью/персистивностью/какой другой хуйнёй.
Спасибо за развернутые ответы.
Есть @Around-эдвайс, в котором написан примерно пикрелейтед. В случае, когда try-catch-finally завершается нормально, энтити сохраняется, а когда выбрасывается исключение - нет. ЧЯДНТ?
Действительно. Вызываемый метод обёрнут в транзакцию. Это как-нибудь можно обойти?
>нахуя тебе аспекты?
Логгирование.
Ха, достаточно было повесить @Order(Ordered.HIGHEST_PRECEDENCE) на @Aspect-компонент.
Вот я долбоеб конечно, смотрел не туда пару часов.
Например есть у меня сканпелиный war-файл. Я иду к заказчику, ставлю у него томкэт, базу данных. Деплою свой варник.
Но куда мне например внести (где хранить) реквизиты к БД, если у меня итоговый продукт - один war-файл?
Или я должен нести к заказчику сорцы, на месте править проперти-файл, прописывать там реквизиты БД, и все собирать мавеном? Некоторые пишут, что можно в pom-файле хранить реквизиты, чтоб сорцы не трогать вообще, но чёт не очень как по мне.
Короче, как на деле обстоит процесс дистрибуции ентерпрайз софта?
проперти оверрайдятся он деплоимент через environment variables
типа:
java -Dspring.datasource.url=mysql://blahblah -Dspring.datasource.username=lox -jar superspringbootapp.jar
есть на AWS 2 EC2 сервера
на одном крутится некий процесс который генерирует месседжи и кидает их в ActiveMQ.
Процесс на другом сервере читает их и обрабатывает,
так вот лейтенси 100-200 мс, нужно 10-20 мс, поможет ли свитчнуть activemq на кафку? а то лень просто ради эксперимента менять.
месседжей немного где-то 300/сек
-D это не environment variables, это system properties
Ну с jar понял, что так можно. Кстати пароли красиво лягут в файл .bash_history
Но вот с war не совсем понятно, там в томкате же просто выбираешь файл и жмешь кнопку деплой, где задавать систем проперти.
>ентерпрайз приложение.
>В каком виде я должен нести его заказчику?
>ставлю у него томкэт, базу данных.
>Деплою свой варник.
В наше время докерами нужно всё обмазывать или накройнях скрипт онитик написать на ебаше который сам всё там проставит и за деплоит.
с томкатом аналогично, гугли tomcat + environment variables.
Ох он и джаву поддерживает, пойду пробовать
Хуиту наворотил!
>type.toString().toLowerCase()
Гугли методы enum и конкретно name()
Гетеры и сетеры запили блядь.
Налепил стримов нахуя?
Привыкай писать логи на каждый чих!
Тогда по консольке будешь заранее видеть где ты проебался!
Значит следующая ситуация. Есть четыре класса. Один - Reminder - класс из которого я делаю напоминания. Есть main, откуда я все запускаю. И есть два класса с ArrayList - один со списком напоминаний, другой с выполненными напоминаниями.
Так вот, я хочу сделать метод, чтобы из листа с напоминаниями переводить их в лист выполненных и удалять из первого листа. Получается следующий код (конечно, я все упростил для примера):
Main:
public class Main {
public static void main(String args[]) {
TaskList list = new TaskList();
Reminder rem = new Reminder();
DoneList done = new DoneList();
list.list.add(rem);
list.setDone(0);
}
}
Список напоминаний:
public class TaskList {
ArrayList<Reminder> list = new ArrayList<Reminder>();
DoneList done = new DoneList();
public void setDone(int i) {
done.done.add(list.get(i));
list.remove(i);
}
}
Список выполненныйх напоминаний
public class DoneList {
ArrayList<Reminder> done = new ArrayList<Reminder>();
}
Объясните, пожалуйста, почему "done.done.add(list.get(i));" не добавляет объект во второй лист?
Конечно, способ, наверняка, говно, но очень хочется понять почему не катит. Читал все, включая документацию и не могу найти ответа.
Значит следующая ситуация. Есть четыре класса. Один - Reminder - класс из которого я делаю напоминания. Есть main, откуда я все запускаю. И есть два класса с ArrayList - один со списком напоминаний, другой с выполненными напоминаниями.
Так вот, я хочу сделать метод, чтобы из листа с напоминаниями переводить их в лист выполненных и удалять из первого листа. Получается следующий код (конечно, я все упростил для примера):
Main:
public class Main {
public static void main(String args[]) {
TaskList list = new TaskList();
Reminder rem = new Reminder();
DoneList done = new DoneList();
list.list.add(rem);
list.setDone(0);
}
}
Список напоминаний:
public class TaskList {
ArrayList<Reminder> list = new ArrayList<Reminder>();
DoneList done = new DoneList();
public void setDone(int i) {
done.done.add(list.get(i));
list.remove(i);
}
}
Список выполненныйх напоминаний
public class DoneList {
ArrayList<Reminder> done = new ArrayList<Reminder>();
}
Объясните, пожалуйста, почему "done.done.add(list.get(i));" не добавляет объект во второй лист?
Конечно, способ, наверняка, говно, но очень хочется понять почему не катит. Читал все, включая документацию и не могу найти ответа.
Не понял, к сожелению. Как это можно сделать в eclipse? Гуглить eclipse see console logs пробовал.
Пых знаю вдоль и поперек, от корки до корки перечитал всю документацию и пр.
Ввиду некоей похожести синтаксиса выбор пал на эту вашу джаву., но ничего о ней не знаю.
Скажите, стоит ли? Много ли времени уйдет на вкот? Какие подводные?
Ну вот я передаю в метод setDone аргумент int i, и пытаюсь удалить пункт в списке за номером "i", это получается. Но как же тогда передать этот самый пункт в другой список? Разве list.get(i) не возвращает (returns, не знаю как по-русски правильно, тк изучаю на английском) нужный мне пункт? И done.add.add по сути указывает на нужный объект и лист в нем.
возвращает, но он добавляет этот элемент в список DoneList, инициализированный внутри объекта TaskList, а это не тот же самый список, что и инициализированный внутри main().
Ну и добавь сеттеры/геттеры, ради б-га
Помоему эклипс перестал по дефолту окно с логами показывать
поэтому window -> show view - console
Спасибо, мужик, я реально ломал голову целый день. На стак оверфлоу боялся пойти, так как говном забросают. Теперь чувствую себя тупым.
Мог бы написать, зачем в данном случае сеттеры/геттеры? Я в принципе их использую, но вот конкретно в этом примере не совсем понял.
геттеры/сеттеры нужны, чтобы сохранять преемственность при наследовании и чтобы имплементацию за ними прятать.
По твоему коду еще один комментарий: я бы эти оба списка за сервисом бы спрятал, как-то нелогично, что один список в другом
stackoverflow.com/questions/54851353
>один список в другом
Имеется в виду, что у меня в классе с одим списком объект класса другого списка?
>за сервисом
Спасибо огромное, как это гуглить? В англ варианте так и будет java service? На данном этапе обучения не знаю что это, но, опять же, с русской терминологией не знаком.
Сейчас круды кругом, так что в веб вкатывайся с базовых хтмл, ксс, йаваскрипт.
Если же тебя на будущей работке занесёт нелёгкая ковырять махровый легаси, вот на чем там десктоп нахуярен в том и разберёшь, там и ява будет 4-ая или 5-ая.
А сейчас только время зря тратишь!
Сейчас джунам на тестовое дают круды где минимум бустсрапон ну или консольное на смекалку.
Мидлы повидлы, синьоры помидоры сраные, перекатить не могут даже!
СРАМОТА!
>Имеется в виду, что у меня в классе с одим списком объект класса другого списка?
да, некошерно это. Ты либо сделай что-нибудь типа такого:
public class TaskList {
ArrayList<Reminder> list = new ArrayList<Reminder>();
public ArrayList<Reminder> getDoneReminders() {
return list.filter(Reminder::isDone)
.collect(Collectors.toList());
}
public ArrayList<Reminder> getPendingReminders() {
return list.filter(r -> !r.isDone())
.collect(Collectors.toList())
}
}
public class Reminder {
private int status;
public void setDone() {
this.status = 1;
}
public boolean isDone() {
return this.status == 1;
}
Либо, сделай сервис (это просто паттерн), который будет прятать оба списка за собой, типа
public class ToDoService {
ArrayList<Reminder> pendinglist = new ArrayList<Reminder>();
ArrayList<Reminder> donelist = new ArrayList<Reminder>();
public void setDone(int i) {
donelist.add(pendinglist.remove(i))
}
public void setPending(int i) {
pendinglist.add(donelist.remove(i))
}
...
}
И обращайся к сервису, когда тебе надо поменять статус у элементов.
Сервис тогда будет тебе определять интерфейс, с которым ты можешь работать, а внутреннюю имплементацию ты потом можешь легко поменять. Например, поставить за сервисом базу данных, или использовать всего один список, как в примере выше и тд
>Имеется в виду, что у меня в классе с одим списком объект класса другого списка?
да, некошерно это. Ты либо сделай что-нибудь типа такого:
public class TaskList {
ArrayList<Reminder> list = new ArrayList<Reminder>();
public ArrayList<Reminder> getDoneReminders() {
return list.filter(Reminder::isDone)
.collect(Collectors.toList());
}
public ArrayList<Reminder> getPendingReminders() {
return list.filter(r -> !r.isDone())
.collect(Collectors.toList())
}
}
public class Reminder {
private int status;
public void setDone() {
this.status = 1;
}
public boolean isDone() {
return this.status == 1;
}
Либо, сделай сервис (это просто паттерн), который будет прятать оба списка за собой, типа
public class ToDoService {
ArrayList<Reminder> pendinglist = new ArrayList<Reminder>();
ArrayList<Reminder> donelist = new ArrayList<Reminder>();
public void setDone(int i) {
donelist.add(pendinglist.remove(i))
}
public void setPending(int i) {
pendinglist.add(donelist.remove(i))
}
...
}
И обращайся к сервису, когда тебе надо поменять статус у элементов.
Сервис тогда будет тебе определять интерфейс, с которым ты можешь работать, а внутреннюю имплементацию ты потом можешь легко поменять. Например, поставить за сервисом базу данных, или использовать всего один список, как в примере выше и тд
Дима, ты ? Узнал меня ? Это я, твой физрук ! Узнал тебя по твоим шизоидным высерам
А Я НАПОМИНАЮ, ЧТО ЛББОЙ ИЗ ВАС ВСЕ ЕЩЁ МОЖЕТ ПОЛУЧИТЬ 5 БАКСОВ ЗА РЕШЕНИЕ ЭТОЙ ЛЕГКОЙ ЗАДАЧКИ. КОШЕЛЕК BTC прикрепляйте сразу к ответу
Там намного больше классов икода на этом гите, у меня проблема в куске той главы
ты свой проект скинь, чтобы мне понять что ты наворотил. Хули мне на уже рабочий пример смотреть.
Разбираюсь, как залить
Ебанись, как пришел к этому и как долго шел? Ты у мамки крутой олимпиадник? И почему в шапке тогда написано, что на джаве нету фриланса?
Не крутой, но участвовал да, в лучшее время был красный рейтинг, сейчас недавно попробовал на топкодере едва первую задачу решил на 160 баллов.
Не знаю почему там так написано, но могу точно сказать, что это не правда.
3 года фриланс до этого в офисе
Спс за пояснения, анон. В этом свинге, как и во всех остальных джавовских после нормальных гуй, того же qt анрил ковыряться.
В Jfx норм ковыряться. Не могу остановиться никак.
В гит залил уже?
http://github.com/Denis2281488/trytaco1.git
pr/атья, чекните пж, что не так ? Не отображается корректно в бровзере.
Сап, подскажите плз, застрял с одной хуйней в спринг в действии 5 ( в главе 2-3) конкретно с передачей с контроллера на хтмл и последующим отображением. Гуглил-хуюглил, гитхабил-оверфловил, все бестолку. Уже на неделю застрял. Жалко время и свои нервы, может кто-то ткнуть ебалом что не так ?
stackoverflow.com/questions/54851353
ну ты и нахуевертил.
Короче, если я вот к такому виду приведу DesignTacoController.java (https://pastebin.com/q7f0m4D0):
1) Уберу @ModelAttribute("design") с метода с ним вообще страница /design не открывается, сыпясь с ошибкой
2) Поменяю @PostMapping на методе на @GetMapping
3) Уберу method = RequestMethod.POST с аннотации на контроллере нахуя вообще это на контроллер лепить
То в браузере у меня видать пикрелейтед
Я честно говоря хуй пойми, какую ты проблему на стековерфлоу описывал, потому как твой код ее не воспроизводит
сука, двоеточие в ссылку попало. Вот правильная ссылка на пейстбин: https://pastebin.com/q7f0m4D0
Спасибо большое за ответ, у меня все так и было. До того как стал менять по советам с стака все подряд. НО БЛЯТЬ, у меня даже сейчас отображается какая-то хуйня, вместо того что у тебя. Я вроде не ебанулся ещё головой, я же запускаю мейн класс, жду когда запустится и переходжу на хтмл страницу и там выбираю иконку браузера которым я хочу отобразить ?
Вот тут-то ты и косячишь.
Ты же просто смотришь браузером шаблон для таймлифа, а надо-то на сервер заходить, чтобы он как раз тебе на основании этого шаблона контроллером страницу сгенерировал.
Вот этот самый сервер как раз ты и запускаешь через TrytacoApplication.java
Читай лог, который тебе приложение при запуске показывает, там будет написан порт, на котором приложение крутится. Заходишь на http://local host:порт браузером и оттуда пляшешь на свою страницу
Я и запускал сервер, а потом открывал страницы.
Но вот где надо с контроллера передать что-то - открывается, но ничего не передаёт, выдает только статический текст.
Я уже подумал, что у меня сервер не запускается.
И да, в логах же выдает стандартный 8080, а из под него ни одна из 2 страниц не хочет открываться в браузере, выдает white label ошибку какую-то. Это значит, что сервер не работает ?
Я нашел гайд для ангуляра
https://spring.io/blog/2015/01/12/the-login-page-angular-js-and-spring-security-part-ii
Где предлагают передать срсф-токен в кукисах, и как то меня это напрягает. К этому токену по идее может получить доступ любой другой сайт же. Да обратно он видимо пересылается в хедере, но это как то неправильно.
А если я хочу например фронт на реакте сделать или вообще просто на на чистом js.
+ видимо если фронт будет на другом серваке надо еще CORS настроить, но это уже не по теме.
Блин, все, спасибо большое, это я идиот.
Когда сервер запущен, к тому порту надо просто имя файла было докинуть, а я фул путь прописывал и из-за этого не находилось
9 из 10 ошибок это просто не поставленная запятая или какое то такое дерьмо. Глаз замыливается и не видишь очевидный косяк.
Братиш, ты матчасть-то подучи. А то ты совсем какие-то нелепые ошибки делаешь
Вот курс неплохой: https://www.udemy.com/share/1000qYA0QecF9SRno=/
В нем, правда, про спринг клауд ничего нет, но это не страшно
Такое возможно? Я вот безработный все еще выкурил несколько мануалов по хиберу, курс по спрингбуту с ютуба(letscode), дочитываю спринг ин экшн 4 и 5 с пройденным джаварашем.
Подскажите, как правильно спроектировать приложение для дальнейшего возможного расширения.
Лично мне в голову лезет создание интерфейса "PageChecker" с методом "checkPage", а класс PageChecker переименовать в WildberriesPageCheckerImpl чтобы можно было добавлять другую имплементацию чекера, например, Ламоды.
Ну и SoundClipPlay переименовать в SoundClipPlayImpl, унаследовавшись от интерфейса, например, Notifier с методом "notifyApperence".
Я правильно рассуждаю? Что еще можно изменить?
Хочу вкатиться в java, сам знаю только c#
Дак вот вопрос кто работал с обоими языками, они ведь похожи?
DataSource хранит в себе ConnectionPool, который создаётся на сервере.
Теперь вопрос. Когда я в спринге задаю конфигурацию Datasource и описываю соединение с БД, на каком именно этапе сервер поймёт, что приложение использует датасорс и сконфигурит пул соединений? На каком этапе сервер, допустим, поймёт, что датасорса в прилодении не используется, а используется прямое подключение через jdbc и пул соединений поднимать не нужно?
>на каком именно этапе сервер поймёт, что приложение использует датасорс и сконфигурит пул соединений
Тогда, когда ты попробуешь получить конекшен с этого датасурса.
>На каком этапе сервер, допустим, поймёт, что датасорса в прилодении не используется, а используется прямое подключение через jdbc и пул соединений поднимать не нужно?
Если ты датасурс не используешь, а идёшь напрямую в jdbc через драйвер менеджер - то сервер и не будет тебе поднимать никакого датасурса, даже если ты сконфигурил его.
Блядь ну читай ты логи!
И сорцы смотри!
Тогда поймёшь что там твой спринг делает!
Можно прост использовать ждбс, можно подключить конекшен пул типо хикари
Ну типа в методе берется лок по айдишнику какой-то сущности. В другом треде мы проверяем, есть ли лок на этот айдишник, и если он залочен, то кидаем исключение.
Можно в JPA заюзать Pessimistic лок с timeout=0 при запросе, тогда, если поток запросит лок на уже занятый объект, то получит LockTimeoutException.
А ты пиши понятно, че тебе надо. Если ты говоришь про сущности и айдишники, то я и подумал про JPA. Попробуй с обычным локом и таймаутом то же самое, Lock.trylock может быть.
Да я знаю как это делать, я спрашивал, норм ли эта практика или нет.
Поправка: пробовал создать новую таблицу (успешно) и вставить в несуществующую (фейлится как и должно).
>Вкатился в спринг,
>плохо понимаю потоки, reflection
Забудь про спринг пока йаву не вкуришь!
Про идею, делай игорю простую (времён денди) и голову не грей!
Не, пробовал и с коммитами. Скрипт почему-то выполнялся до того как хибер создаст таблицы, т.е. он вставлял в старые таблицы, потом хибер их дропал и создавал заново. Как пофиксить порядок я так и не понял,разве что заменить data.sql на import.sql.
сегодня же уволюсь и начну писать контру
Контролер перехватывает 404 и вместо ответа в виде джейсона выдает страницу хтмля. Остальные эксепшены долетают видимо до эдвайса и выдается джейсон.
Ох лол, я с помощью fetch а поймал респонс и распрсил его как джейсон. Оказывается сочетать можно. До этого выбивало страницу целиком.
Хочу шо нить по спрингу почитать.
Аноны, что по вашему мнению лучше мб читал кто нить
Spring Boot 2 Recipes или Spring. Все паттерны проектирования
ПС Spring in Action читал
Все сервисы, которые есть в приложении, пометить аннотацией @Service и инжектить в нужные места с помощью @Autowired или не помечать их как сервисы, а забивать через конструктор их экземпляры в нужные места?
Есть веб-скрвис, частично написанный на Spring и jpa. Слой Dao написан руками, без использования Repository. Как протестировать этот слой? Я понимаю, что нужно еще один persistence.xml с настройками in-memory db. Но в тестах не подхватывает entityManager bean с новыми настройками, а инжектит старый из production. Как решить?
Сделать класс, в котором с помощью @Bean возвращать инстансы сервисов. Так вся конфигурация в одном месте
Лучше пометить аннотацией и заинжектить. Это же Spring.
Если DAO написан руками то ты полюбому конфигурили DataSourse, верно? Так что тебе мешает сделать две конфигурации датасорса и инжектить для прода норм, а для теста какую нить H2. Можно даже профилировать типа если профиль - test, то инжектить h2, если прод то норм базу
Идти в нетсракер в принципе идея так себе, разве что через их курсы на первое время.
Ебать я осилил жаву но с иногда трудом понимаю что там делать в этом сраном гите впринципе блять.
Вот допустим я получил данные от фейсбука (например), и потом хочу зарегать пользователя себе в БД.
На основе чего мне делать пароль? Если кто то получит данные к коду то будет ясно из чего пароль создается.
Делать регистрацию не полностью автоматической, просить юзера сделать еще пароль? Смысл тогда в oauth2. Можно и так зарегаться.
Лучше с @Qualifier.
>Хули гит такой ебанутый. Все через сосноль, все через жопу.
Сам ты пидор тупой через жопу!
Все нормальные пацаны через консоль выучили команды и делают по красоте!
А то сегодня у тебя божественная IDEA, а завтра богомерзкий Eclipse и ты блядь будешь опять читать мануал и гуглить где там и как коммит сделать.
Открываешь гит перспективу, подключаешь локальный гит (ссука сразу не может найти что ли?) файл открывает не от текущей директории а блядь от домашней папки сука бесит
Но теоретически, я могу выдернуть данные и зарегать пользователя, записать в БД. Чем не вариант.
Правда все АПИ хотят реальный адрес сайта а не локалку.
Сейчас пердолюсь с shh. Посмотрю что получиться.
Чтобы сделать ему учетку и потом дать делать что то в личном кабинете например, сохранять какую т освою хуету, которая отдельно для каждого пользователя.
Качаешь себе GitKraken и не ебешься в жёпы, всё чинно-красиво драг энд дроп и подобная хрень. Один минус - не захочешь потом на соснольке прописывать, а это полезно ващета
Ну я немного могу в соснольку. Но когда начинается всякое типо гит ребейз -1 ХЕАД~5 и блокнотики я ебал эту хуйню блять. Нахуй это так было делать то.
Деды в терминале работали и нам велели. Один хуй, все эти ваши гиткракены и сорстри так же точно гит в бекграунде вызывают
На вкус и цвет как говорится
бтв у самого за пол года только 1 раз кракен ебнулся и пришлось консолечку открыть.
Овертаймы, большая текучка, в целом куча говнокодеров
Ну честно сказать, я разве что мерджить/ребейзить из терминала не умею без хорошего diff тула, остальное типа коммитов/чекаутов там нечего уметь
спасибо за ответ)
А ты хорош.
Сделал хеловорлд на спринге с БД и еще какой то хуетой типо реста + могу в ЖС немного (без фреймворков, реакт читаю сижу). Джаву кор на боле мене приемлемом уровне и алгоритмы несложные. Красно-черные деревья по памяти не напишу, но какой нить БФС осилю. Есть опыт работы манагером комерческого отдела и эконом вышка.
Что искать то куда податься.
Софт скилы норм, внешне нормис, могу пиздеть ни о чем и производить впечателние.
Курсы какие-нибудь официальные проходил? Хоть на курсере, хоть на юдеми? Добавь их
>Сделал хеловорлд на спринге с БД и еще какой то хуетой
У меня весь гит крудами забит, уже несколько тестовых заданий по 2 недели делаю а мне даже обратную связь не дают!
Неа, ничего такого.
Деанон и т д. Я хз даже. Я туда даже бустрап прикрутил и на нем фронт .
Сразу после изучения свинга видимо. Следующий пункт.
Например если привык к спринговым абстракциям @Scheduled, @Async и т.д, а сам http сервер не нужен, удобно.
не оп
Для автоконфигураций и ioc, а ты думал зачем он?
Сап. Довольно странный вопрос: удобно ли использовать Spring Security для бекэнда - авторизация/регистрация/аутентификация и вот это вот всё, без веб клиента мобилки? Все гайды, которые видел (в том числе офицальный Spring'овый) работают с веб мордой. Если кто-то использовал, можете поделиться инфой или гайдами, как адаптировать Security, или подскажите, что можно прикрутить к Spring'у для решения этой задачи.
>Там 1 достаточно чтобы понять как работает.
А через неделю вспоминать что там делать ага?
И гуглить сигнатуру основных функций
Про эксепшон хуй его знает, а по второй и третей всё просто.
В первом случае у тебя идёт перемножение двух интов, переполнение, а потом каст в лонг при присваивании.
Во втором у тебя сначала происходит явный каст i в long. Потом, при умножении long на int, происходит неявный каст int в long.
Приоритеты же, ёпта. Тайп каст по приоритету выше умножения.
Во, по ексепшону. Короче, это ФИЧА.
>The native methods this function uses does take long values without reporting an error. You can call them using reflection. However you would have test whether they work for you on your system and using memory mapping this way, could confuse you more than be useful.
>The best approach is to create an array of MappedByteBuffers, e.g. 1 GB each in size and create a wrapper which hides this ugliness.
>While not technically a bug, it is BAD (Broken As Designed) Part of the reason this was done originally could be that 32-bit JVM could not support this, but I don't see why 64-bit JVMs still have this limit.
и
https://bugs.java.com/bugdatabase/view_bug.do?bug_id=7147951
В восьмой версии завезли беззнаковые костыли. Теперь хуй проссышь вообще, какой там Integer.MAX_VALUE. Но это жи жаба, хуле ты от неё хочешь.
Это копия, сохраненная 12 марта 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.