Вы видите копию треда, сохраненную 8 августа 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Шапка треда https://github.com/qqqlll/Java-Thread/wiki
Предыдущий тонет здесь >>784720 (OP)
Желающие прекратить терпеть смерть, стагнацию, похороны и пожаловать в будущее на острие прогресса, где готовые пакеты фреймворков ломаются при обновлении, просто не работают и живут полной жизнью уебывают сюда: https://2ch.hk/pr/res/789035.html (М)
Чому джава-тян не следует конвенции, правильному форматированию, не ставит пробелы?
Джава умерла. Да здравствует Котлин!
Пугачева удивила всех своей диетой: нужен лишь утюг и серпантин...
> ЭЭЭЭ тырыпрайз перепишется на СКАЛУ
Ты че сука, ты че. А как же релизнутый вчера .net core?
Бля точно, шарп же
Разбираюсь с этой поебенью и чет трудно заходит.
БЛЯ, АКАДЕМАНЫ, ДАВАЙТЕ ПРИДУМАЕМ ЯЗЫК НА ОСТРИЕ ООП И ФУНКЦИОНАЛЬЩИНЫ И ВСЕ ЭТО СУПЕР ОХУЕННО И ДОХУЯ ВОЗМОЖНОСТЕЙ. ДА, КОНЕЧНО ПРИДЕТСЯ ЧУТЬ ПОУЧИТЬСЯ, ЧТОБЫ ВСЕ ЭТО ИСПОЛЬЗОВАТЬ, НО ЗАТО КАКОЙ ВЫХЛОП! И ВСЕ ЭТО СОВМЕСТИМО С JAVA
@
ДАВАЙТЕ!
@
...
@
БЛЯ, И ЧО ДАЛЬШЕ?
Берешь и Hadoop.
>Джава не нужна
Уточнение - не-энтерпрайзная.
>все на жс.
Все вебострадания - да, именно туда.
> Оракл кидает жаву
Все верно.
> гугл забил хуй на ведроид и берет свифт.
Рассматривал этот вариант как запасной, но выиграв у Оракела отказался от него
> тырыпрайз перепишется на СКАЛУ
Нет
Зачем мне идти в js тред?
В прошлом треде уже обсуждали. Энтерпрайз - это не когда ты из единственного MS SQL Server кидаешь в браузер формочки лопатой, это когда все немного сложнее.
Моча, цп!
Из двух - уже ближе к энтерпрайзу, ты верно уловил.
Для этого уже нужен менеджер распределенных транзакций, например. И управление им.
> I heard the read storm problem has been solved by Shenandoah, a GC developed by Christine Flood (who was in the original GC G1 team at Sun in 2001). It is under the RedHat umbrella and should be merged in OpenJDK [1].
> Shenandoah uses a forwarding pointer in each object, adding overhead but limiting the problem only to write barriers. Here is Christine commenting on Azul vs Shenandoah [2]
> From the talk: average pause is 6-7ms, max is 15ms, and the talk is one year old.
> She hints at further developments in a version 2 which would make it entirely pauseless.
[1] http://openjdk.java.net/jeps/189
[2] https://youtu.be/4d9-FQZZoVA?t=13m11s
В Data Mining / Machine Learning активно применяется, гугли Spark. Но на hh.ru такие вакансии не размещают и макак не берут.
> Hadoop
Spark для бедных, чтобы кластеризовать данные, не помещающиеся на одном сервере силами обычных макак. Но учить нужно - это то, что выведет тебя из параши крудошлепства в светлый мир функционалобогов.
ПОКА ТЫ ТУТ ЗА СВОЕЙ ДЖАВОЙ СЫЧУЕШЬ, ЕРОХИН-ТО КОТЛИН РАЗРАБАТЫВАЕТ
https://github.com/JetBrains/kotlin/commits/master?author=erokhins
ВОН ВАНЬКА-ТО ЕРОХИН В JETBRAINS УСТРОИЛСЯ
А вот эта макака (не осилившая Java 8) объясняет, почему быдлокодер лучше "широкого специалиста":
http://www.skipy.ru/philosophy/professionalism.html
Просто эталонный жатник. Еще и с гнилым ЧСВ.
Лямбды - это неплохо. Но обвешивать типичное ОО такими гроздьями статической типизации в изощренных формах как это сделано в Scala - явный перебор.
И как мне хендлеры к ним добавлять? В примере они тоже прямо в XML написаны. onAction="#handleButtonAction"
Из альтернатив вроде Kotlin, Ceylon и т.д. сейчас только Scala готова к практическому использованию. На ней написаны Spark и Akka.
Ну без мавена все в коде прописывалось. А тут как-то нипанятна.
https://www.youtube.com/watch?v=QPHUoX1rW7g
Kotlin - это примерно как менять С++ на Go, к тому же JetBrains далеко не Гугл.
Ceylon - язык действительно во многом интересный, но перспектив у него еще меньше. Несмотря на то что за ним стоит RedHat, они его практически не продвигают активно - и RedHat в Java-мире не так уж много весит. Если ситуация с Oracle дойдет до того что разработка JavaEE фактически перейдет в RedHat, и Redhat начнет все-таки Ceylon активно продвигать - может быть что-то получится.
В Scala свои проблемы. Проблемы дико переусложненного языка оставим пока, с этим и так все ясно. Akka просвистела и померкла - выяснилось (ВНЕЗАПНО!) что модель акторов это не решение всех проблем. Главноскальщик пилит Dotty, нынешняя скалка ему уже малоинтересна - и это не особо скрывается. Большие конторы, сделавшие ставку на Scala (возьми ту же Expedia) очень по этому поводу нервничают, и тоже этого не скрывают. Другие конторы на это все смотрят и принимают логичное решение переход на Scala отложить до момента когда либо Dotty релизнется, либо наоборот, сдохнет.
У Clojure проблемы с заебавшим всех Ричем, который community слушать не хочет, а хочет придумывать трансдьюсеры и выступать на конфочках. Сил пятерых его соратников ни на что не хватает, баги копятся, никто ничего не фиксит. Патчи от коммьюнити при этом все равно посылаются нахуй. Библиотек для каждой мелочи дохуя, они сменяют друга со скоростью света - причем в предыдущей модной библиотеке баги никто фиксить не собирается, потому что автор уже пилит три новых, с которыми будет то же самое. В результате настрогать быстро какую-то мелочь на кложуре выходит отлично, а что-то посерьезней, что будет эксплуатироваться (и желательно без переписывания раз в две недели) - никто в здравом уме на ней не делает.
Вот и остается опять Java.
>Kotlin - это примерно как менять С++ на Go
Можно раскрыть аналогию поподробнее? А то все остальные языки качественно обосрал, а тут как-то жидко вышло.
Если очень коротко - то создатели обоих языков "даже не стараются".
Для 1972 года оба из них были бы уже не очень интересны, всё-таки уже был Алгол68.
Изобрести современные языки, которые уступают даже C# - это надо было постараться.
Можно только позавидовать железобетонной репутации Роба Пайка и Кена Томпсона. Если их даже после разработки Go продолжают считать неглупыми людьми, то теперь, вероятно, такое мнение о них сохранится в любом случае, чтоб они не сделали. Даже если повторят любое из достижений лауреатов премии Дарвина — останутся в нашей памяти как неглупые люди.
Если замысел Go еще можно понять - это эксперимент Гугла, который проводится чтоб ответить на вопрос о том, насколько невероятно плохой язык сможет вытянуть поддержка невероятно крупной и невероятно влиятельной корпорации, то смысл Котлина полностью ускользает. Может быть у JetBrains мания величия.
найс аватарка
Залей свой говнокод на гитхаб, я тебе мигрирую его на мавен.
И как быть тогда с автоматической генерацией необходимых библиотек в рантайме?
>Может быть у JetBrains мания величия.
Так для меня это выглядело всегда первой причиной создания Kotlin'а.
Они скоре уловили что нужна New Java 2.0 совместимая в обе стороны на уровне сорцов,
но в тоже время с современными фичами.
Scala/Clojure/Groovy слишком отличаются от Java
В этом отношении они уловили правильно.
> Another downside is that you have to do a bit of jiggery-pokery to get some third-party libraries such as Dagger or Mockito to work with Kotlin
Но стоят ли "несколько приятных фишечек" минусов ровно в том аспекте, которым Java и (единственно) ценна?
В результате - поделки для Android резво все бросились писать на Kotlin, а в мире EE только пожали плечами.
> Dagger
По последним данным поддержку Dagger2 они добавили (так разработчики говорили, сам я не использую)
> Mockito
Там проблема что по умолчанию все класс final.
Пока я знаю два решения;
1) Юзать интерфейсы
2) Powermock
...
?) Обещали аннотацию "open all" (шоб как в джаве было), но что-то ничего про это не слышно
Про Dagger это, конечно, очень радостно (хотя я до сих пор не понимаю нахуй он вообще нужен).
Как насчет всех остальных 100500+ джава-библиотек, из которых неизвестно сколько сломаются на ровном месте?
> Dagger
> джава-библиотек
Не путай пожалуйста, Dagger 2 это не только библиотека.
Это плагин для gradle/maven, который встраивается в процесс сборки и на основе анатаций генерирует новый код.
Очевидно что когда разные плагины модифицируют процесс сборки, кто-то кого-то должен поддерживать.
Обычных библиотек это не касается.
Лично я по этому и не юзаю его, что не люблю кодогенерацию.
>нахуй он вообще нужен
Зря ты так, пошерсти хотя бы швабру, есть там несколько хороших примеров, как минимум дев мок и убирает отовсюду какой-нибдуь Singleton_100500.getInstance(context)
А другие либы... Ну если что-то ломается, то написать задействованный кусок на джаве. Все андроидовские части нормально работают, rx и dagger тоже. Что еще из популярного - retrofit через оболочку с rx никаких проблем.
Ну я и говорю. Для поделок на Андроиде, где библиотек хорошо если пять штук используется - и все одни и те же - нормально. Тем более что любой косяк исправляется выкладыванием в маркет новой версии и автоматическим автообновлением у всех клиентов.
Когда библиотек немного побольше, причем в разных проектах разных - выяснять что ломается что не ломается, а где вообще рыбу заворачивали (а именно высокое качество java-библиотек и есть главная её фишка) - причем, далеко не все выясняется в процессе сборки - и потом это немножко чинить, а потом с хорошей вероятностью перечинивать при обновлениях этой библиотеки - да вы смеетесь штоле. Ладно бы эти рюшечки котлиновские в 2 раза производительность повышали, так ведь хорошо если на 5% - в первую очередь потому что если сайты-визитки не штамповать тысячами (для чего Java брать в принципе не стоит), то время именно написания кода составляет процента 2-3 времени разработки проекта.
Выучи новые слова:
reflection, bytecode instrumentation, codegeneration. Пойми их значение в контексте обсуждения. Возвращайся в тред.
> The Register understands that roughly a year ago, a movement started within Oracle to mothball its Java EE efforts and create a new proprietary enterprise-friendly Java runtime and API in its place
Страхи твои - надуманные. Большинство библиотек реализовано в виде классов у которых можно дергать методы, всё. Интероперабельность с таким кодом у Коtlin проблем не вызывает.
>Большинство библиотек реализовано в виде классов у которых можно дергать методы, всё
И на каждой библиотеке сверху написано, относится ли она к большинству? И тестировали ли ее с котлином?
Что насчет JavaEE с CDI повсюду?
То есть как я и говорил - котлин годится только для андроида. Кроме как для андроида и JavaEE джаву использовать бессмысленно.
Потому что для JavaEE он не годится.
Ни для чего кроме Андроида и энтерпрайза джаву использовать не нужно и бессмысленно.
Жилы же мы как-то во времена Dagger 1 который работал и БЕЗ кодогенерации и БЕЗ рефлекшена
> Smile!Smile!Smile!
> Smile!Smile!
> Smile!
> Have the program define a function that displays the string Smile! once, and have the program use the function as often as needed.
Make a maven war project and add Hibernate, JaxB, deltaspike-data-JPA and RESTEasy as dependencies
Make a simple entity "Message" containing a String atribute and "MessageList" One
Annotate each class with @Entity @XmlRootElement
Add an jaxb.index file on these classes package listing these two Entities
Annotate your Attribute by @XmlElement @NotNull @Size(min=2, max=10)
Make a MessageListDao interface annotted with DS @Repository @Path("/")
Make a simple persistence.xml file mapping to your database
Make an interface and a REST "MessageRESTService"
Add a method to this interface: @Produces(Mediatype.Application_json)@Path("/sayMessage/{message}/{count}") String getMessage(@PathParam("message") message, @PathParam("count"));
Implement this interface injecting your DAO in your service (with @Inject), and make this implementation @ApplicationScoped
Create an index.html file referencing NPM AngularJS, Twitter bootstrap, SASS (you can use grunt, npm and bower to automatically fill your index.html file js dependencies, but you've to add the maven-exec-plugin to call your grunt script during the 'generate-resource' phase)
Make an AngularJS application, a directive, a controller
Create inputs in your angular directive html file to choose your message and the occurence number, plus an HTML table with 'ng-repeat' attribute on the 'TR'
Bind the inputs and the table to AngularJS controller methods that will call your REST service
Create an default web.xml file in your src/main/webapp/WEB-INF directory (google it)
Configure the maven-tomcat-plugin (or maven-jetty) in your Maven pom.xml file
mvn tomcat:run and point your web browser to http://localhost:8080/
> Smile!Smile!Smile!
> Smile!Smile!
> Smile!
> Have the program define a function that displays the string Smile! once, and have the program use the function as often as needed.
Make a maven war project and add Hibernate, JaxB, deltaspike-data-JPA and RESTEasy as dependencies
Make a simple entity "Message" containing a String atribute and "MessageList" One
Annotate each class with @Entity @XmlRootElement
Add an jaxb.index file on these classes package listing these two Entities
Annotate your Attribute by @XmlElement @NotNull @Size(min=2, max=10)
Make a MessageListDao interface annotted with DS @Repository @Path("/")
Make a simple persistence.xml file mapping to your database
Make an interface and a REST "MessageRESTService"
Add a method to this interface: @Produces(Mediatype.Application_json)@Path("/sayMessage/{message}/{count}") String getMessage(@PathParam("message") message, @PathParam("count"));
Implement this interface injecting your DAO in your service (with @Inject), and make this implementation @ApplicationScoped
Create an index.html file referencing NPM AngularJS, Twitter bootstrap, SASS (you can use grunt, npm and bower to automatically fill your index.html file js dependencies, but you've to add the maven-exec-plugin to call your grunt script during the 'generate-resource' phase)
Make an AngularJS application, a directive, a controller
Create inputs in your angular directive html file to choose your message and the occurence number, plus an HTML table with 'ng-repeat' attribute on the 'TR'
Bind the inputs and the table to AngularJS controller methods that will call your REST service
Create an default web.xml file in your src/main/webapp/WEB-INF directory (google it)
Configure the maven-tomcat-plugin (or maven-jetty) in your Maven pom.xml file
mvn tomcat:run and point your web browser to http://localhost:8080/
Ясно.
> А как по-моему dagger 1 работает?
Я то как-раз знаю как он работает, а с тобой диалог продолжать бессмысленно,
ибо ты решил повыебываться без знаний.
Он, кстати, с ProGuard несовместим был. Ну то есть, его можно было заставить работать, но это был тот ещё квест.
"Oracle is committed to Java and has a very well defined proposal for the next version of the Java EE specification – Java EE 8 – that will support developers as they seek to build new applications that are designed using micro-services on large-scale distributed computing and container-based environments on the Cloud." - Mike Moeller
Чтобы ты дал свою оценку.
Энжой йо ДжаваЭфИкс
Не видел вакансий с Java EE, везде только Spring. А Кобол до сих пор используется, точнее его наследники, SAP ABAP и 1C.
Ок.
http://www.java-gaming.org/
И-извините.
При чем тут мейвн? Это всего лишь сборщик.
>В примере они тоже прямо в XML написаны.
Наверно не в XML, а в fxml, и да, всякие onAction, onKeyReleased и прочее там надо прописывать.
Шакальненько.
Найс инфа про Скалу, долбоеб. То что ты прочитал какую-то хуйню на реддите или news.ycombinator не даёт тебе права делать какие-либо выводы и дезинформировать людей. Особенно с твоим уровнем интеллекта.
Да, у меня до сих пор бомбит от эффекта Даннинга-Крюгера, хотя я его наблюдаю еще со времён /c.
>То что ты прочитал какую-то хуйню на реддите или news.ycombinator не даёт тебе права делать какие-либо выводы и дезинформировать людей. Особенно с твоим уровнем интеллекта
Что именно ты готов опровергнуть? Не стесняйся.
Нормальный пример для наглядной демонстрации.
А что ты хотел бы сравнить? Качество интеграции с CICS и IMS TM? Здесь тоже COBOL впереди.
То есть ты согласен со всем про скалку, но тебе не нравится такой ход событий. И ты решил выразить своё отношение к этому доступным тебе способом.
С чем же ты несогласен в таком случае?
Ага, сейчас бы в дискуссию самодовольным дурачком вступить. Все что мне было нужно - выбросить негативные эмоции которые я случайно получил при чтении твоего поста.
Хочешь позитивных эмоций? Бери совочек, отправляйся в песочницу страны вечного джаваскрипт-детства, тред рядом.
Работает оно хуево, зато позитив у всех, велосипедов с квадратными колесами пилится 100500+ каждую секунду. Весело, задорно, девки в коротких юбках.
Обычные примеры с проперти не подходят, нужно именно в коде вальюс добавлять. В таблице есть чекбоксы.
https://ideone.com/zJue4h
Ну в эклипсе есть Action (и кнопка): Run External Tool, по идее можно описать запуск Maven с необходимыми аргументами, да ко-всему этому shortcut навесить.
Вот пример подобной замороченности
http://www.mkyong.com/maven/integrate-maven-with-eclipse-via-external-tool-configuration/
http://pastebin.com/j3ESgFfQ
default void sort(Comparator<? super E> c) {
Object[] a = this.toArray();
Arrays.sort(a, (Comparator) c);
ListIterator<E> i = this.listIterator();
for (Object e : a) {
i.next();
i.set((E) e);
}
}
Как будто лямбды полностью заменяют ифы и циклы.
Уноси обратно, воспоминания о полутора неделях в континентальной Индии уйдут со мной в могилу.
Spring, GWT vs Vaadin (и почему первый обосрался), Red Hat, Oracle, будущее джавы.
я, конечно, понимаю, что у твоих хозяев есть дурная привычка не запирать курятник, но ты уже взрослый, вернись откуда выбежал.
нет.
Почему спринг при попытке получить бин из фабрики бинов, таким вот образом:
ApplicationListener<?> listener = beanFactory.getBean(listenerBeanName, ApplicationListener.class);
тащит null, при этом если заглядывать дебагом в, собственно, beanFactory, у нее в beanDefinitionMap бин с именем переданным в listenerBeanName имеется, и бин который я пытаюсь дернуть имплементит ApplicationListener
В конфиге бин описан
Что за хуйня?
пересобери проект
так отдебаж, мудило
Пиздец - дрочат всякое говно Спринги-Хуинги, а потом ясное дело откуда в проектах всё это мракобесие.
Пример:
//Создаем несколько объектов
List<MyObject> objects = new ArrayList<MyObject>();
for(int i=0; i<6; ++i)
objects.add(new MyObject());
Соответственно мне бы хотелось извлекать по порядку объекты и работать с ними. Да, я знаю про итераторы и другие возможности пробежаться по списку, но беда в том, что я вынужден возвращаться.
Из очевидного мне пришло просто выбирать случайный номер 0..n и таким образом работать, но как-то зашкварно, хотелось бы идти по порядку, но итератор не может ресет сделать.
Да, очень дебильный кейс. Благодарствую.
Может не ясно выразился. При каждом обращении к функции должен выбираться случайный\следующий объект. Если список подошел к концу, то начать сначала (я про последовательную выборку объектов). Рандом не очень нравится.
У вас что, блядь, чебурнет уже запустили и вырубили гугл?
https://docs.oracle.com/javase/tutorial/deployment/jar/appman.html
да нет, просто пообщаться с корешами захотелось
блять, нахуй ты мне пишешь, как компилировать проект без ИДЕ, мразь тупая. Я спрашиваю, как сделать, чтобы по клику на главный jar файл приложение запускалось и не только у разработчика.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>пакет.ТвойГлавныйКласс</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
Я примерно так делаю. Хуй знает, Java только второй день ковыряю.
Через проксю загружается моментально.
В России Гитхаб теперь блочат?
Билайн (и провод, и симка - одинаково)
Открывается без проблем на очень хуевом соединении. Ростелеком.
Три дня не открывался без прокси. Сейчас на дваче написал - и всё шустро загрузилось без прокси.
Билайн, спасибо. А что за фигня-то была, зачем блочили?
Джавабоги, нужна ваша помощь.
Есть в классе метод, надо его вынести за пределы класса и вызывать из класса, откуда мы его убрали.
Как это сделать?
Я понимаю, что вопрос слишком детский для ынтырпрайз-гуру, но таки:
Как потом связать эти два класса? Как из первого класса обратиться к методу второго?
вынесенный метод обзываешь модификаторами public static и затем обращаешься к нему через ИмяКласса.имяМетода():
Helper.doSomething();
Ну я вызываю его Кококо кудах = new Кококо();
кудах.гетМани();
Вываливается ошибка:
>Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
Цикл foreach спасет будущего студента Javascript.
Пиздуй на процедуры, болезный. Коллега выше именно про устройство манифеста спрашивал.
Ты обезьяна мухосранская и индусов то не видела в живую? Пытаешься шовинизмом и айтишными стереотипами компенсировать свою уёбищность? Валяй!
Просто джаваскрипт лучше.
Спасибо. Оказалось, я вызываю метод из класса, который наследует класс, из которого я вызываю метод.
Разве конплилятор не мог так и написать, а не строить из себя умного и писать заумный код?
Иди учить в чем разница между проверяемыми и непроверяемыми исключениями. Алсо интерпретатор тебе твердо и четко написал в чем проблема.
Хочу реализовать такое
Producer->[Queue]->{Consumer_1, Consumer_n}
Только я что-то охуел от всевозможных реализаций этого паттерна. Мне просто надо класть объект в очередь, а потом с ним быстро работать. Какой самый безопасный и актуальный вариант?
Как правильнее в Java организовывать циклы? Так:
for (int i = 0; i < n; ++i) {
// do some shit
}
или так:
IntStream.range(0, n).forEach(i -> {
// do some shit
});
блохи отваливаются.
Не слушай этого >>792878 - действуй по обстоятельствам. Нужен цикл c необычным шагом или сложными условиями выхода/изменения объектов в замыкании, или скажем в теле цикла до кучи лямбд - можно и старый использовать. Или скажем тело цикла простое и есть потребность для
IntStream.range(0, n).parallel().forEach
- переключайся на новый.
ну разве что распаралелировать можно при необходимости
> Или скажем тело цикла простое и есть потребность для
> IntStream.range(0, n).parallel().forEach
Тонко.
Где почитать об этом поподробнее?
Я не знаю, как грамотно организовать работу потоков.
В облаке есть n очередей (messages queue). В них надо пушить данные. Боль в том, что эти данные разного объема (от 1кб до несколько мб). Стэк технологий не самый удачный, но самый доступный.
На данном этапе принцип примерно такой
1. data = obj.get(); //получаем данные.
2. QueueManager.send(data); //QueueManager выбирает случайную очередь и отправляет туда сообщение.
Соответственно это пиздец медленно.
Я решил организовать работу так:
1. Получаем данные
2. Пушим их в очередь
3. QueueManager вытаскивает запись и пушит это в произвольную очередь.
Другими словами obj.get() - это у нас Producer, который срет в очередь сообщений, как только извлечет сообщение.
QueueManager - это consumer, который вытягивает сообщение из очереди и отсылает в облако.
В результате я столкнулся с тем, что нужно
Один поток по статистике: сколько получено сообщений, что там с очередью и так далее.
Один поток на получение данных и загрузки в очередь.
И несколько потоков (предполагаю, что тут надо перебирать наиболее оптимальные варианты) на инстансы QueueManager, которые будут пушить при первой возможности сообщение в облако.
только что проверил
второй метод чуть менее чем в 66 раз медленнее
в моем тесте у обычного цикла 2мс у стрима - 133мс
проверял при n = 100000
вместо соме щит простой инкремент инта
поэтому сам решай надо ли оно тебе
Что-то я в запутался. Не знаю, как это все нормально организовать.
У тебя, скорее всего, еще отмерялка не выросла делать бенчмаркинг научно достоверным. Но ты прав - оверхед есть и народ обсуждает этот момент, вот например:
http://blog.takipi.com/benchmark-how-java-8-lambdas-and-streams-can-make-your-code-5-times-slower/
На секундочку - бизнесу нужны эти оптимизации? И да, подумай насчет того чтобы довериться сетевому стеку, на твоем операционном уровне кажется нерациональным что Кб и Мб сообщения могут слаться через один и тот же канал, в действительности проблемы может не быть.
>На секундочку - бизнесу нужны эти оптимизации?
Бизнесу нужны, слишком много времени занимает.
>довериться сетевому стеку
Тут проблема не в пересылке данных, а в том, что очередь нерационально используется, а доставить данные нужно как можно быстрее.
На примере простой Consumer/Producer;
Queue{
dataObject(2 мб)
dataObject(1 кб)
dataObject(5 мб)
dataObject(256 бит)
}
Соответственно один единственный consumer будет идти по очереди, пересылая данные. Одно дело отправить 1кб, а другое дело 5 мб. Очередь будет дольше разгребаться, что не совсем удобно.
С другой стороны, если очередь будет обрабатываться сразу несколькими воркерами, то я предполагаю существенное ускорение.
я какбэ и не претендовал на научную достоверность
просто хотел акцентировать внимание ананаса, что бездумно вкорячивать стримы вместо нативных циклов мягко говоря не стоит
Ебучий репортинг в ебучей бд, спроектированной так, что на одну data column приходится по 10 id columns и общей схемой запутаннее, чем схема мирового правительства рептилоидов по мнению pol с форчана.
http://jquerymy.com/lj/Optdeoptbug_F6FB/2016070816.21.28_thumb.png
https://www.reddit.com/r/javascript/comments/4oxtgk/javascript_developers_be_warned../
Не знаю на что именно ты ругаешься, но в БД-треде по соседству это и выглядело бы уместней, и конструктивно ответить можно было бы.
На описанное.
> но в БД-треде по соседству это и выглядело бы уместней, и конструктивно ответить можно было бы.
Когда я последний раз проверял, Java применялась для бэкенда и тырпрайза. Я што-то пропустил?
> function isUndefined(thing){
> return typeof thing === "undefined";
> }
> for(var i=0; i<100000; i++) console.log(isUndefined(null));
> 12291 false
> 87709 true
капитулировал с вебм.
Ругаешься ты на джойны и вложенные запросы - это все имеет отношение к джаве весьма опосредованное.
> джойны и вложенные запросы
> все имеет отношение к джаве весьма опосредованное
К джаве да. К профессии java-разработчика ни разу.
- Эй, мужик! Правду говорят, что null это не определено?
- Ну хуй знает, тут так сразу не разберешься. Раз на раз не приходится.
кратко: устарело и переусложнено на фоне скриптовых языков. как забивать гвозди телескопом.
Ну что, джаваны? Нет идей, как организовать работу?
Попробуй ExесutоrService для своих целей. Вот примерное решение: http://ideone.com/nWztVG
В строке 9 создается тредпул состоящий из числа доступных процессоров. Это значение можно задать константой, причем значительно больше числа процессоров в системе.
В строке 11 мы заполняем тредпул воркерами. Из-за того, что воркеры крутятся в бесконечном цикле, желательно не создавать их больше чем потоков.
Как работают воркеры:
Вся эта система взлетит только в том случае, если fасtory реализовывает паттерн Prоvidеr, а DаtаSender реализует Cоnsumеr. Fаctory блокирует выполнение до получения следующего результата, а когда результат получен вернет его только одному потоку.
DаtаSender потокобезопасен и блокирует выполнение потока до тех пор, пока данные полностью не будут переданы и канал данных не будет освобожден.
Если же они в эти паттерны не вписываются, то можно допилить их напильником. К примеру, если Factory не потокобезопасен, мы его можем окружить sуnchrоnized-блоком. Если factory к тому же не блокирует поток выполнения, а возвращает к примеру null когда данных нет - то заключить получение данных в бесконечный цикл.
Если DataSender не потокобезопасен, то все плохо, потому что мы не получим выигрыш от многопоточности и все мое решение летит к хуям, потому что как только мы его окружим sуnchrоnized-блоком, все процесы отправки данных будут ждать друг друга чтобы захватить lock.
Если же DataSender потокобезопасен, как например, отправка POST-запроса, то проблем нет.
Если DataSender требует каких-то предварительных действий для выбора канала данных то мы это тоже можем реализовать где угодно в Worker-е.
В идеале было бы создать по 1 воркеру на каждый доступный канал отправки данных.
(P.S. какое-то слово в спамлисте)
Сейчас перечитал твой второй пост, вот комментарии
>В облаке есть n очередей (messages queue).
Идеально будет если у тебя количество потоков будет равно числу n, тобишь на каждую очередь один воркер
>Один поток по статистике: сколько получено сообщений, что там с очередью и так далее.
Создаешь любой класс, который реализует Runnable или Callable и отдаешь его в вышеупомянутый тредпулл.
>Один поток на получение данных и загрузки в очередь.
В этом есть смысл только если obj.get() плохо работает как Producer.
>И несколько потоков (предполагаю, что тут надо перебирать наиболее оптимальные варианты) на инстансы QueueManager, которые будут пушить при первой возможности сообщение в облако.
Эти потоки у меня реализованы в классе Worker, число их тоже вычислить легко, n = количество очередей в MessageQueue.
Ты не видел ещё, когда все это добро завернуто в курсор, а внутри курсора бродит ещё один курсор, в котором селект, в котором внутренний селект юнион олл селект, мазафака бич.
Не хватало только комментария
> //я ебался и ты теперь ебись
К профессии джава-разработчика имеет отношение многое - например, психологическая устойчивость - тем не менее, её лучше было бы обсудить на доске про психологию.
Так же как твои джойны и курсоры - в БД-треде.
>Идеально будет если у тебя количество потоков будет равно числу n, тобишь на каждую очередь один воркер
Собственно, так и планирую. Вообще у меня идея, что воркер не должен знать, как работать с очередью в облаке.
У меня сейчас основная загвоздка как раскидать задачи по классам, чтобы god-object не словить.
Итак? Какие задачи
1. Создать очередь в облаке (довольно ебливый процесс, но я уже библиотеку накатал, все работает четко). Тут у меня есть класс QueueManager, который содержит список всех очередей, созданных ранее и делает Queue.push(Data) в одну из очередей из списка.
2. Создать пулл воркеров. Да, надо запилит.
3. Организовать корректную работу со всеми тредами.
На данном этапе я теряюсь как классы разместить.
Соответственно в главном классе я хочу оставить только два вызова.
CloudQueue connect = new CloudQueue(5); //5 количество облачных очередей.
connect.send(message.obj);
В свою очередь CloudQueue должен организовать следующие задачи:
Создать облачную очередь.
Создать внутреннюю очередь.
Создать пулл воркеров.
Начать пушить сообщения в внутренюю очередь и запустить всех доступных воркеров. Но в итоге мой класс CloudQueue превращается в самый настоящий god-class.
Рейт my intention.
Вот я на пхп когда кодил, там вообще классы чисто декоративные были, как и неймспейсы. Ни типов тебе, ни красивых паттернов с бросанием ошибок.
Удивляюсь, поему пхпшникам вообще на собеседах задают вопросы про сортировку пузырьком, интерфейсам и ООП, многопоточность - это ведь вообще в пхп не используется.
>2. Создать пулл воркеров. Да, надо запилит.
Если что спрашивай.
>3. Организовать корректную работу со всеми тредами.
Если в тредах потокобезопасные операции, то сами потоки безопасны. Тут еще нужно добавить, что при выключении приложения нужно выключать executorService вызовом метода shutdown().
>Но в итоге мой класс CloudQueue превращается в самый настоящий god-class.
Я в таком случае бы вынес все сложное в статические методы CloudQueueUtils, а в CloudQueue оставил бы только тот код, который бы легко читался - без циклов и ветвлений.
А что если Cloudqueue в конструкторе вызывать CloudqueueService, который будет внутренней очередью? И ещё добавить создания пула потоков?
В итоге Cloudqueue будет producer к этой очередью и будет срать в неё. Воркеры будут в отдельном классе ебаться с очередью.
Блядь, как-то убого сформулировал. Сейчас попробую написать.
Блядь, все равно какую-то хуйню написал, собирается, но походу где-то бесконечные циклы и все такое.
http://pastebin.com/wgfNFJ09
Как лучше организовать?
У меня к вам довольно странноватый вопрос. Насколько глубоко надо знать джаву?
Пару месяцев учу ее, не помню, например, сколько памяти занимают простые типы, до сих пор туплю иногда, что такое статик и где надо пихать this и все в таком духе.
Задачи решаю, тестовые вопросы вроде тоже отвечаю.
Сходи на собеседование с тетрадочкой и запиши вопросы, на которые ответить не смог. Спроси с интервьювера фидбэк. Чо как маленький.
Не-не, я говорю о ТРУ-ПРОГРАММИСТОВ.
Понятное дело, что гуру советуют учить с С, или вообще с асм. Я говорю про ГЛУБОКОЕ понимание
Настолько, чтобы любой код на ней не вызывал у тебя вопросов.
изучай кресты
жаба очень простой язык для даунов
работая с крестами ты разберешься как работает память, что такое стек, как объекты выделяются в куче, как работают мутексы и вся кое такое говно низкоуровневое
даже после легкого знакомства с крестами жаба покажется тебе простым языком с низким порогом вхождения
останется только вскользь пробежаться по стандартной библиотеке. коллекции там, утил конкаренси и все такое. и ты будешь на собеседованиях лекции читать, а пездюки будут слушать тебя раскрыв рот
>>793231
Нодогосподин.
>>793196
Осознал в чем сложность. Класс Producer имеет метод run(), который заполняет очередь. Только проблема в том, что я не совсем понимаю, как научиться срать в него не снимая штанов.
Есть кто перекатился с .Net? Интересует:
почему перешли,
как давно,
что ожидали,
что получили,
не жалеете?
Все что надо поддерживает.
>>793250
Поехавший, на днях зарелизился охуенный .net core для тырпрайза заменять место подле тырпрайза.
У тебя слишком много абстракций, в остальном норм было. Но все-же я неправильно тебе посоветовал запилить бесконечные циклы. Минус такого подхода в том, что нужно добавлять проверку что service не находится в состоянии "выключение". Это неправильно и я это переписал, код ниже. Я создал продюсер и воркер, можешь запустить и проверить как работает. Кроме shutdown у экзекутора еще есть shutdownNow, который шлет всем потокам InterruptedException, это можешь тоже потестить.
http://ideone.com/v4e7Fs
В мире есть всего три с половиной языка, которые можно слать нахуй без раздумий.
Все остальные языки включая джаву люто бешено вывозят в своих областях, но отсасывают в других. Поэтому надо выбирать инструмент под задачу, а не искать волшебные таблетки.
The Callback interface is designed to allow for a common, reusable interface to exist for defining APIs that requires a call back in certain situations.
Callback is defined with two generic parameters: the first parameter specifies the type of the object passed in to the call method, with the second parameter specifying the return type of the method.
Бля, все конечно заебись, открыл для себя множество охуенных вещей, но я все равно все также не могу решить эту проблему.
Окей, запилил CloudQueue, которая собственно треды поднимает и контролирует все, что нужно. Но вот хоть убей, я не могу понять, как сделать пресловутый CloudQueue.send("message");
Ведь где @override нельзя передавать параметры, а consumer читает из входящего потока, т.е. вообще отдельно. Походу я твой.
К слову, я не совсем понимаю. Там на каждый input создается новый Worker или как?
Передавай message в конструктор воркеру, а потом из метода run забирай. В моем примере так и сделано.
>К слову, я не совсем понимаю. Там на каждый input создается новый Worker или как?
Так и есть.
>Передавай message в конструктор воркеру, а потом из метода run забирай. В моем примере так и сделано.
Так блин, это же внутри Producer выполняется. Producer нужно все время пересоздавать или его можно каким-то образом использовать повторно?
Я вижу строчку service.submit(new Worker(input)); Только один хуй, она создается внутри метода run, который принимать никакие параметры не может.
Я вижу тут определенную логику, но как-то нащупать не могу. Извиняюсь за глупые вопросы.
>Так блин, это же внутри Producer выполняется. Producer нужно все время пересоздавать или его можно каким-то образом использовать повторно?
Ты говоришь, что тебе нужно выполнять CloudQueue.send("message"); Я сделал вывод, что тебе нужно отправлять какие-то данные. Для этого подходит Worker.
А забирать данные нужно с помощью Producer.
>Только один хуй, она создается внутри метода run, который принимать никакие параметры не может.
Ну да, я просто читаю с клавиатуры входные данные. Если у тебя, к примеру, есть возможность получать следующее сообщение с помощью CloudService.getNext(), то можно было бы передавать экземпляр CloudService в конструктор Producer, и потом вызывать его в методе run. Метод run выполняется в отдельном потоке, и ты никак его не изменишь чтобы он принимал параметры, ты только можешь модифицировать Producer таким образом, чтобы он их откуда-то забирал, или из своих собственных полей или из вебсервиса или по rest api. В конце концов ты можешь передавать BlockingQueue в конструктор Producer-у и добавлять новые данные уже непосредственно в BlockingQueue, но такая абстракция как по мне только усложнит твой код.
Хм. Боюсь спросить, Producer тоже, как и Worker должен пересоздаваться каждый раз при новом сообщении?
Хотя нет, не должен.
Можно.
Продюсор скорее для каждого источника данных свой. к примеру, один продюсор для сообщений, полученных из консоли, другой для полученных по jmx итд. Пройдись отладчиком по тому коду что я вбросил, попробуй что-нибудь допилить или выпилить и посмотри что получится. Я спать пошел, завтра отвечу.
Поведай же нам об этих трех языках, о Посвещенный!
P.S.
>Вообще у меня идея, что воркер не должен знать, как работать с очередью в облаке.
Если до сих пор так хочешь сделать, можно просто выделить интерфейс, и сделать так чтобы воркер умел работать с интерфейсом, а реализацию ему подсовывать уже в конструктор.
Ну это уже позже. Сейчас я бы хотел понять, как передать Producer хоть какую-то информацию, первая же идея была BlocingQueue, но ты сказать, что усложнит.
У меня мысль только создать действительно класс CloudService, в нем создать очередную BlockingQueue и писать туда по возможности, но это тогда Producer поверх Producer.
Не, анон, все равно не понимаю.
Кейс: отправить 10 сообщений hello world воркерам. Другими словами должен быть
CloudQueue, где мы создаем 6 тредов, а Producer получает фьючерс и все такое.
Затем пишем что-то типа цикла
for(int i=0; i<10; ++i)
CloudQueue.send("Message=" +i);
Теоретически, метод send должен обращаться к Producer и говорить ему - отправь вот эту строчку в обработку.
Но как получить этот Producer? Не понимат.
http://blog.ngopal.com.np/2011/10/01/tableview-cell-modifiy-in-javafx/
Пытаюсь, как тут делать, но бросает null point exception
Такой код http://ideone.com/ukBX2x (лишнее убрано)
Ну их хороших новостей, я научился писать говнокод, вернее что-то там делать с Consumer'ом, однако от этого не легче, ибо концептуально все равно проблемы.
Другими словами, у меня получился один единственный способ. Создать треды, наполнить очередь, запустить Producer; Другими словами все хуйня. http://ideone.com/E7vkrw
Вся надежда на тебя, анон.
Или я блядь опять не понимаю концепцию потоков? Прочитал в Javadocs, что треды должны после выполнения сразу же умирать. Другими словами, неужели мне нужно пересоздавать Producer'a каждый раз, когда я хочу отправить сообщение? Столько вопросов и так мало ответов. Пойду уже спать.
Анон, Producer не обязателен вообще в этой иерархии. Я его писал для того, чтобы выделить код в отдельную сущность. Ты можешь из любого места вызывать service.submit(new Worker("fdsfgd"));
Если ты все-же хочешь какую-никакую изоляцию, тредпул можно вынести в отдельный класс, оформить его как синглтон и управлять очередью через вызов его методов.
Пример: Singleton.getInstance() - лениво создает синглтон и тредпул
Singleton.getInstance().sendMessage("sa") { service.execute(new Worker("sa")); }
Singleton.getInstance().shutdown() - выключает тредпул
Singleton.getInstance().shutdownNow() - прерывает все выполняемые отправки сообщений.
Singleton.getInstance().addProducer(new Producer(System.in)); - добавляет новый продюсер, который берет данные из System.in. Продюсор уже сам решит когда давать данные в тредпул и когда выключиться.
То, что я описал лишь добавление уровня абстракции к тому, что уже было. Это можно реализовать и как-нибудь по-другому.
Почему синглтон? Концептуально вряд ли у тебя будет в системе более одной очереди отправки сообщений, поэтому более одной очереди создавать не желательно. Еще это удобно тем, что ты можешь получить инстанс из любого потока и из любого участка кода, не нужно ему передавать синглтон чтобы он мог поставить какое-то сообщение в очередь.
>Ну это уже позже. Сейчас я бы хотел понять, как передать Producer хоть какую-то информацию, первая же идея была BlocingQueue, но ты сказать, что усложнит.
Это нужно если ты хочешь чтобы последновательно продюсор отдавал тебе данные. Если же ты хочешь отпарвить только одно сообщение то продюсор не нужен - ты просто создаешь Worker и добавляешь его в пул.
>У меня мысль только создать действительно класс CloudService, в нем создать очередную BlockingQueue и писать туда по возможности, но это тогда Producer поверх Producer.
FixedThreadPoolExecutor внутри себя содержит BlockingQueue. Когда ты создаешь 20 воркеров, но имеешь только 5 потоков, то 15 воркеров попадают в эту BlockingQueue и ждут своей очереди. Тредпулы для того и были введены, чтобы отделить пользователя от работы с очередями, а и сразу дать быольше контроля над потоками.
>Кейс: отправить 10 сообщений hello world воркерам.
for(int i=0; i<10; ++i) {executor.submit(new Worker("Message=" + i); }
Внутри воркера, понятное дело, System.out.println нужно заменить на CloudQueue.send(msg);
>Но как получить этот Producer? Не понимат.
Продюсор в этом случае не нужен. Вот если ты захочешь, чтобы главный поток у тебя занимался какими-то своими задачами, то продюсор нужен чтобы забирать данные в фоне, не мешая главному потоку. Еще продюсор полезен если необходимо забирать данные из нескольких источников. Ты создаешь по продюсеру на каждый источник данных и отправляешь их в тредпул, а сам в основном потоке делаешь другие дела, ну или просто ждешь когда они отработают и затем завершаешь главный поток.
>Прочитал в Javadocs, что треды должны после выполнения сразу же умирать.
Это при работе с потоками напрямую. Если ты работаешь через тредпул, по поток не умирает, а приостанавливается. Когда приходит новая задача, она снова выполняется в этом потоке. Это экономит ресурсы на создание нового треда и его запуск. Т.о. даже если у тебя отработало 100 воркеров на 5 потоках, в это время будет создано только 5 потоков в пуле. Еще одна особенность плюс ExecutorService, если поток умирает в результате Exception, то он его может пересоздать и вернуть в строй. Но это уже знать не нужно.
Анон, Producer не обязателен вообще в этой иерархии. Я его писал для того, чтобы выделить код в отдельную сущность. Ты можешь из любого места вызывать service.submit(new Worker("fdsfgd"));
Если ты все-же хочешь какую-никакую изоляцию, тредпул можно вынести в отдельный класс, оформить его как синглтон и управлять очередью через вызов его методов.
Пример: Singleton.getInstance() - лениво создает синглтон и тредпул
Singleton.getInstance().sendMessage("sa") { service.execute(new Worker("sa")); }
Singleton.getInstance().shutdown() - выключает тредпул
Singleton.getInstance().shutdownNow() - прерывает все выполняемые отправки сообщений.
Singleton.getInstance().addProducer(new Producer(System.in)); - добавляет новый продюсер, который берет данные из System.in. Продюсор уже сам решит когда давать данные в тредпул и когда выключиться.
То, что я описал лишь добавление уровня абстракции к тому, что уже было. Это можно реализовать и как-нибудь по-другому.
Почему синглтон? Концептуально вряд ли у тебя будет в системе более одной очереди отправки сообщений, поэтому более одной очереди создавать не желательно. Еще это удобно тем, что ты можешь получить инстанс из любого потока и из любого участка кода, не нужно ему передавать синглтон чтобы он мог поставить какое-то сообщение в очередь.
>Ну это уже позже. Сейчас я бы хотел понять, как передать Producer хоть какую-то информацию, первая же идея была BlocingQueue, но ты сказать, что усложнит.
Это нужно если ты хочешь чтобы последновательно продюсор отдавал тебе данные. Если же ты хочешь отпарвить только одно сообщение то продюсор не нужен - ты просто создаешь Worker и добавляешь его в пул.
>У меня мысль только создать действительно класс CloudService, в нем создать очередную BlockingQueue и писать туда по возможности, но это тогда Producer поверх Producer.
FixedThreadPoolExecutor внутри себя содержит BlockingQueue. Когда ты создаешь 20 воркеров, но имеешь только 5 потоков, то 15 воркеров попадают в эту BlockingQueue и ждут своей очереди. Тредпулы для того и были введены, чтобы отделить пользователя от работы с очередями, а и сразу дать быольше контроля над потоками.
>Кейс: отправить 10 сообщений hello world воркерам.
for(int i=0; i<10; ++i) {executor.submit(new Worker("Message=" + i); }
Внутри воркера, понятное дело, System.out.println нужно заменить на CloudQueue.send(msg);
>Но как получить этот Producer? Не понимат.
Продюсор в этом случае не нужен. Вот если ты захочешь, чтобы главный поток у тебя занимался какими-то своими задачами, то продюсор нужен чтобы забирать данные в фоне, не мешая главному потоку. Еще продюсор полезен если необходимо забирать данные из нескольких источников. Ты создаешь по продюсеру на каждый источник данных и отправляешь их в тредпул, а сам в основном потоке делаешь другие дела, ну или просто ждешь когда они отработают и затем завершаешь главный поток.
>Прочитал в Javadocs, что треды должны после выполнения сразу же умирать.
Это при работе с потоками напрямую. Если ты работаешь через тредпул, по поток не умирает, а приостанавливается. Когда приходит новая задача, она снова выполняется в этом потоке. Это экономит ресурсы на создание нового треда и его запуск. Т.о. даже если у тебя отработало 100 воркеров на 5 потоках, в это время будет создано только 5 потоков в пуле. Еще одна особенность плюс ExecutorService, если поток умирает в результате Exception, то он его может пересоздать и вернуть в строй. Но это уже знать не нужно.
Можно.
Макака, ты мне весь тред засрала.
Ты просто тупой - смирись. Вот реально, javascript - это для тебя.
NC-довольно крутой вариант же.
нет
http://pastebin.com/KKwimnt4
JMS или подобная технология, если нужно чтобы очередь сохранялась при наебываении приложения
Если честно, то не ебу про другие.
Если говорить про фриланс, то да.
Но вообще, я знаю пару историй, когда всякие банки из европки нанимали фрилансеры. Один анон писал давно, что получает 4к в месяц.
Почитай алгоритмы сортировки, сначала bubblesort, потом treesort.
Сап.
Вангую, там надо jsf'ы писать. Понятия не имею, где ещё может встретиться такое сочетание.
А напомните, зачем знать что-то о сортировках, кроме пузырьковой (чтобы было), быстрой (факт того, что она сравнительно проста и быстра) и метода sort (и что он является сортировкой слиянием)?
С прикладной точки зрения - незачем. А вообще - пикрилейтед.
Меня устраивает текущая работа. К тому же не хочу писать на бинарном коде с таким подходом.
Нужна недельная экспресс-методика изучения того, чем точно будут интересоваться. Помогите червю-пидору.
> Stream.of("afytwz").flatMap(s -> Arrays.stream(s.split(""))).collect(Collectors.toCollection(TreeSet::new)).forEach(System.out::println);
И для чего же?
Они уже не берут людей. Слишком много людей для слишком стагнирующего языка. Ну в смысле что рынок насытился и больше не надо и не понадобится.
Новые языки, расширяющие и, зачастую, заменяющие оригиналы для обычных программистов. Если будешь учить Спринг, то джаву учить не надо - на чистой джаве уже никто не пишет. Сам посмотри - во всех вакансиях Spring.
А тестеры нужны. А пизды-"айтишницы" еще больше для разбавления коллектива.
а в чем профит работать в этой хуйне? мне раньше звонили много раз, звали на собеседования, а хуй забивал и говорил что работа не нужна
Опыт нужен.
Уж блядь наверное если я имею опыт энтерпрайз-разработки, я не буду искать работу джуном, а минимум мидлом пойду. А если за год программирования я все еще чувствую себя джуном- то сменю профессию, ибо я хуёвый программист.
Кто идет на такие вакансии вообще? Джун на джунскую вакансию им не подходит, мидл сам не пойдет, синьор-помидор давно в Лондоне, он не поедет в Россию за 40 к работать.
Описание вакансии в 99% случаев пишут всякие уебаны.
Как правило на собеседовании сначала убеждаются что ты в принципе адекватный человек и имеешь представление о джаве. Если ты прошел эту проверку, то на знание всяких ентерпрайзов и спрингов-хуингов закроют глаза. Тем более на джуниора.
sjw в моем треде, все в машину
>Здравствуйте, Бахтияр Салимджонович!
>Большое спасибо за Ваш интерес, проявленный к нашей открытой вакансии "Начинающий разработчик Java / Junior Java developer". К сожалению, в настоящий момент мы не готовы сделать Вам это предложение. Мы внимательно ознакомились с Вашим резюме, и, возможно, вернемся к Вашей кандидатуре, когда у нас возникнет такая потребность.
Я никуда резюме сам никогда не отправлял.
Сами звонят, а раз звонят значит уже решили что мое резюме им подходит.
Потому что джава без ЕЕ не нужна. Хотя, на собесе из ЕЕ достаточно бегло знать jpa, сервлеты, мавен и томкек как развернуть. Не так уж и сложно.
Аналогично (или F3 при наведенном курсоре - вроде на маках такая хрень).
Идея, кстати, кал. Мало того, что тормозит (по сравнению с эклипсом) и интерфейс и возможности через жопу, так они еще и лицензируют её только на год или месяц. Заказать на 3 или 4 месяца - непосильная задача.
В Идее так и научился как в autocompletion вместе с вариантами показывать документацию, соответствующую выбору. Для этого сраного окошка потребовалось что - то редактировать в конфигурационном файле, и всё равно оно какое-то неприбитое.
Иконографику тоже им больные ui-идиотией делали - и публичные и приватные методы сопровождаются иконкой с красным кружочком - путает и бесит.
А эклипс не может во _все_ (сборщики (кроме анта), vcs, автокомплит и декомпил). Просто дедектор говна.
Короче, используй ангельский и поиск по справке, если такие вопросы возникают. И изучи хотя бы введении концепцию Workspace. Надеюсь оценишь достоинства Eclipse, у них, кстати, недавно релиз был - neon.
Может может (особенно в последних релизах) - главное поменьше говна наворачивать - начинать с installer, ставишь eclipse platform, потом поддержку языка в котором разработку ведешь, потом marketplace и дальше что надо - vcs, и прочие плагины.
Слушай - декомпил и не нужен. В нормальной IDE к библиотекам привязываются исходники (это даже делается еще на уровне сборщиков maven/gradle/...) и дальше идет нормальная работа.
8363 Error syntax error, unexpected PARSEOP_INTEGER, expecting '('
9609 Error syntax error, unexpected '}', expecting '('
9667 Error syntax error, unexpected '}', expecting '('
11235 Error syntax error, unexpected '}', expecting '('
11254 Error syntax error, unexpected '}', expecting '('
11402 Error syntax error, unexpected '}', expecting '('
11923 Error syntax error, unexpected '}', expecting '('
13105 Error syntax error, unexpected '}', expecting '('
13236 Error syntax error, unexpected '}', expecting '('
13404 Error syntax error, unexpected '}', expecting '('
13416 Error syntax error, unexpected '}', expecting '('
16318 Error syntax error, unexpected $end and premature End-Of-File
Просто ты бахтияр салимжонович.
Софт для аптек необходим высоконадежный (если перепутать и фармацевт продаст не то и клиент откинет копыта, то будет пиздец), поэтому на яве он не пишется. Пишется на JS.
На ведроиде хотели заказать переделку с фонгепа на нативный. Приложуха для заказа лекарств из аптек, но для ссаного битрикса нет нормального апи, все через плагинчики. Пусть варятся в своем говне.
Кстати:
>js
>надежность
О да динамическая дрисня такая надежная. Покормил.
О чем ты вообще говоришь?
Я написал, что пропустил стажировку.
Ты мне ответил, что там только современные языки. Я так понимаю, что там нужен опыт?
СТажировка для нулевых.
И не бывает ли на практике, что проект валится из-за того, что гредл не пересобрал хуйню, которую надо было пересобрать и из-за этого происходит нападение Степана Файлюры.
Бля, анон, ты охуенен. Сделал за сегодня все, что хотел. Вообще шикарно всё.
---
Аноны, как в java строить запросы? Есть что-нибудь для SQL, чтобы без напрягов это сделать, а то просто строчку сделать пиздец напряжно.
Надо запрос типа
INSERT INTO test ("item", "item2", "item3") VALUES("v1", "v2", "v3");
Жука.
http://www.jooq.org/
http://www.jooq.org/doc/3.8/manual/sql-building/sql-statements/insert-statement/insert-values/
бля пиздос там эти xml конфигурации. Копирую пример, у меня билд maven падает. Охуенно.
> бля пиздос там эти xml конфигурации
Где ты там xml нашел? Там xml сам по себе нужен только для кодогенерации (которую, кстати, можно не использовать). Захуячь в гредл таску по генерации классов и не парься.
> Копирую пример, у меня билд maven падает
Ну охуеть просто. Ты ведь слышал, что в Java есть исключения, которые описывают проблему? :3
> Охуенно.
Охуенность на вашей стороне.
Одиночка по жизни, плз.
Ну генерируй - кто тебе мешает? Проследи где _ты_ налажал и исправь ошибку.
Насчет жука есть один ньюанс, про который форсеры умалчивают - для использования с oracle требуется покупка лицензии.
Бля, у меня нет денег на лицензию, чтобы постгресс ебать. Чо так сложно тут с запросами.
Мне вообще только SQL строчку сгенерировать и всё.
Но это не проблема для тех кто готов отстегивать ораклу, надо думать.
Для постгри лицензия не нужна.
В эксплуатации и при рефакторинге оценишь сполна этот "медленный" старт.
http://pastebin.com/2FVptxkD -- log
http://pastebin.com/9wqZGaEV -- pom.xml
Нормальный человек по своей воле без внешних факторов не будет использовать оракл вместо базы данных. А если использует, то не по своей, а по воле компании. И если она юзает оракл, то на покупку лицензии обоссанного жука деньги найдутся.
>>794860
> Чо так сложно тут с запросами.
Ты не пробовал учить JS? Язык для тебя.
>>794870
>>794881
> он мне каким-то пиздец странными ошибками срет
> [ERROR] package org.jooq.impl does not exist
> [ERROR] /home/user/gen/target/generated-sources/jooq/org/jooq/util/maven/example/tables/records/AudiodataRecord.java:[12,150] error: cannot find symbol
Ебать ты тупой.
Кыш оба два!
Никогда кстати не понимал, зачем на Java писать формочки. Для винды есть удобный C# c фреймворками, где формочки мышкой клепаются, знай только обработчиков вешай. Для Linux и консолеблядство подойдет.
> C# формочки (без Gtk костылей) нигде не работают кроме Windows
> НЕ НАДО
А как же мы, элитные пользователи макбуков/iмаков и тд?
>Для Linux и консолеблядство подойдет
Ты один из тех, кто думает, что на линуксе обязательно все через консоль делается и интерфейсов вообще нет?
Спорно. Всё-таки от шарпа у меня гораздо хуже ощущения.
Плюс, TypeScript превращает js в более менее нормальный язык.
Не. Вот Dart - что-то похожее на язык. А TypeScript все равно гейством отдает.
>>795273
Я один из тех. Приложения без консольного интерфейса под линукс - дерьмо.
Вы ищете работу на полный рабочий день?
Что больше всего интересует back-end или web?
Че мне отвечать?
пиши что готов работать забесплатно хоть в чем
Мой?
Сам на легаси сяду, кота на колени посажу.
но моя формочка откроется и для винды и для мака и любой друго ос.
Как ты вообще что-то выучил, а гуглом так и не научился пользоваться?
У хайбернейта годный референс, читай его. По Спрингу книжек не много, никакой годноты анон тебе не спалит - её попросту нет. Выбери что нравится
System.out.println(this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath());
Вот эта команда из контроллера такой аутпут дает:
/home/dmitry/NetBeansProjects/TPoster/target/TPoster-1.0-SNAPSHOT.jar
Мой файл распложен в папке /TPoster/src/json/token.json
Такие пути из контроллера пишут, что файл не найден:
"../../src/json/token.json"
"../src/json/token.json"
"/src/json/token.json"
Даже том же пакете файл не находит.
Хобби - это хобби, а работа программистишкой - это удел школьников и быдла, да.
Потому что это главный язык будущего, вселенной и всего остального. А джава умирает. Пиздуй отсюда.
>>795627
Ебырь твоей мамаши-шлюхи на спине у джавараша.
> Желающие прекратить терпеть смерть, стагнацию, похороны и пожаловать в будущее на острие прогресса
Пососали у крестов и теперь отрываетесь на миленьких языках. Ясно все с вами.
Просто хуёво работал.
Spring in action, выкладываю русский перевод: http://rgho.st/86NGlp4Bn
По Hibernate стандарт JPA описан на сайте Оракла, доп. расширения хибернейта не нужны.
А кем нужно работать небыдло-интроверту? Серьезно, не раз задумывался и приходил к выводу, что из программирования перекатиться некуда. Разве что совсем в днище вроде сторожа или охранника.
http://aot.ru/
> 23 марта 2016 года Во вьюверах перешли от java, которая работала только под Firefox, на javascript, который работает почти везде.
Бля.
> вручную управлять памятью
Словно что-то плохое.
Мне в жабе люто бешено не хватает ручного аллока/деаллока и размещения объектов на стеке. Ну или по крайней мере как-то лочить запуск мусорного коллектора во время выполнения критических ко времени участков.
>не хватает ручного аллока/деаллока и размещения объектов на стеке
Для таких хитровыебанных есть Unsafe и DirectByteBuffer. Толкьо нужно сделать сериаллизацию/десиреализацию структурок в байты и свой аллокатор/деалокатор с этого буфера.
Не очень понимаю, как этого может не хватать. Одно дело ты не привык может, но не хватать? Серьезно?
Я знаю, но согласись, что это геморно. Я много лет сидел на джаве, а тут год назад случайно переполз в кресты и охуел. Там все это на уровне языка.
А еще размещение обджектов в стеке.
Если есть код какого-то такого вида
for(int i = 0; i < 100_000_000; i++){
Huita kek = new Huita(getRandomData());
kek.someShit();
};
То у тебя после этого охуиллиард хуйты в куче и когда их там коллектор удалит.
Понятно что я утрирую, и данный код можно переписать чтобы он не генерил охуиллиард хуйты, но общий посыл ясен.
Не каждый день понятно же. Но иногда надо.
пожелайте мне удачи. Спасибо.
у тебя раньше рам закончится и комп пека зависнет прежде чем он решит эту хуиту удалить, особенно если цикл бесконечный в отдельном потоке.
Но с другой стороны грех жаловаться, ведь такую хуйню только обезьяны пишут.
потому что достаточно сделать так
Huita kek = null;
for(int i = 0; i < 100_000_000; i++){
kek = new Huita(getRandomData());
kek.someShit();
};
>у тебя раньше рам закончится и комп пека зависнет прежде чем он решит эту хуиту удалить
Че блять? Иди учи как gc работает. Поссал на долбоеба.
Хуйню какую-то написал. Коллектор за все это время очень хорошо уже оптимизирован, и он лучше любого программиста знает, когда и что нужно удалять.
ага блять, и поэтому когда я на днях по невнимательности написал такую хуйню (создавал в бесконечной петле рендера временный фреймбуфер для постпроцессинга картинки), то у меня буквально за пару секунд весь RAM (а это ~4гб) улетал в пизду, что приходилось перезапускать все нахуй.
Так что не так уж он и хорош этот мусорщик.
>>796138
все решение проблемы
>если цикл бесконечный == бесконечно дохуя
> i < 100_000_000
> 100_000_000 == дохуя
>Иди учи как gc работает
сам иди уеба, в данном случае gc будет чистить после выхода из петли, тоесть никогда
Нет. Это ничем по сути не отличается от >>796088
И там и там в хипе будет стопицот объектов на которых нет живых ссылок. И они будут лежать там до тех пор пока жвм не решит что пора запустить гц или память не кончится. И тогда жвм опять таки запустит гц, а если это не поможет - кинет оут оф мемори.
Но в любом случае в момент работы гц произойдет падение ПЕРФОРМАНСА и другие треды, работающие на этой же жвм это тоже почувствуют.
Единственный вариант тут - глубокий рефакторинг хуиты. Чтобы создать ее один раз до цикла, а в цикле только обновлять там данные (и свести их к примитивным типам или байт буфферам, само собой) и вызывать соме щит.
>создавал в бесконечной петле
Сборщик удаляет тогда, когда что-то не нужно, если у тебя в бесконечной петле что-то нужное, ясное дело он это удалять не будет и ты получишь OutOfMemoryError, gc тут никак не виноват.
хуйню сказал, в первом случае время жизни ссылки == времени жизни всего цикла, во втором == времени потребности в самой ссылке
>>796161
откуда вы беретесь, с хуяли тогда >>796138 этот вариант сработал?
В гугле блять полно ссылок по времени жизни объектов создаваемых в цикле
пральна, в пизду ее ленивую инициализацию
будем стопитсот тяжелых объектов на стеке создавать и держать до конца жизни програмы
>и свести их к примитивным типам или байт буфферам, само собой
пердолинг уровня сипетушни, в пизду gc мы же лучше знаем как память оптимизировать
>пральна, в пизду ее ленивую инициализацию
Где ты увидел там ленивую инициализацию?
> будем стопитсот тяжелых объектов на стеке создавать и держать до конца жизни програмы
Джава не создает объекты на стеке. Только примитивные типы.
Конечно в случает тяжелых данных можно использовать вариант >>796054. Но если гетРандомДата возвращает всего немного данных, то вариант со стеком более быстрый. Т.к. без стека в общей сложности на хипе будет выделено 100_000_000 * гетРандомДата. конечно, в любой момент цикла может сработать гц и удалить часть из них. Но может и не сработать. А запуститься позже и начать удалять сразу все.
>>796167
> хуйню сказал, в первом случае время жизни ссылки == времени жизни всего цикла
Грубо говоря ссылка это просто переменная с адресом объекта. Сам объект лежит в хипе и может вообще не иметь ссылок и лежать себе, ждать удаления. Ссылки передаются по стеку. Во время итерации цикла ссылки создаются в стеке и удаляются 100_000_000 раз. Объекты никуда не деваются, а ждут своего удаления гарбаг коллектором.
не знаю. как проверить, попадает ли?
Должен вмешаться.
Gc как правило оперативно запускается при неактивности ссылки и лежать и ждать объекту долго не придется, а вот если ссылка на объект жива то и gc этот объект пропустит (что мы и получим в итоге)
Это откуда?
Свой бизнес, например. Причем тут "интроверсия"? Программистишке надо гораздо в большей степени общаться с людьми и лизать всем зады, начиная с босса и заканчивая клиентами, эйчаром, секретуткой, манагерами и даже Аллахом, в отличие от бизнесмена.
ньюфаньюшка
функция которая декларирует что будет что то возвращать, должна всегда это что то возвращать
нахуй ты вообще битоебствуешь, если ты основ самого (языка)программирования не понимаешь?
ну так возвращай стринг билдер.
И да, статические методы и поля в 95% случаев это рак
не делай так.
Сначала создай инстанцию объекта содержащего метод, а уже потом используй этот метод
Запомни комбинацию и жми её после написания каждого метода и будет тебе счастье:
ctrl + a -> ctrl + shift + f.
Двачая, 2х ретанра.
ну если ты даун, не могущий в подсказки ИДЕ, то тут уже помочь нечем.
Ребятки, бросайте наш мертвый язык и пиздуйте зарабатывать деньги в JS.
COBOL Delphi Java не умрет никогда, ибо это серьезный бизнес. Что бы эти хипстеры себе там не выдумывали.
Будущее за питоном. Уже в следующем году войдёт в тройку лидеров и постепенно заменит жабу. JS как полноценная замена не подходит, так как узкоспециализирован, а на питоне много чего можно делать. Больше возможностей.
Скриптокал ничего заменить не сможет.
Это тот язык, где вместо двух операторных скобок нужно ставить в каждой строчке тела про пробелу? Ну ну
Я один из тех, кто в жмупинусе более четырех лет и уже привык все через сосноль делать.
эй эта хуйня сработает так как надо?
float[] dta = new float[...
for (float dda : dta) {
dda = makeHuita(dda);
}
эх надо уже собраться да, освоить ебаный JUnit
>1. В этом коде нет итераторов, а в for ( : ) есть.
Это сдекомпиленный foreach на массиве, не веришь - сам проверь, кукаретик.
>2. Даже с итераторами код >>796461 был бы неправильный, ибо итератором элементы можно только читать и удалять, но не изменять.
Итераторы там нахуй не нужны, нжно вручную перебирать массив но не замети что НЕТ КОКОРАТОРОВ, а затем что запись dda = makeHuita(dda); не добавит новых значений в массив.
> Это сдекомпиленный foreach на массиве, не веришь - сам проверь, кукаретик.
Проверил тебе за щеку: http://ideone.com/PTrk0O
>>796499
И тебе тоже. Вот класс Array, давай покажи, где там итератор или отправляйся под шконку:
https://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Array.html
> Итераторы там нахуй не нужны
Я не знаю, нахуя ты там используешь foreach, когда он не нужен.
Это сахарок.
ДОКУМЕНТАЦИЯ ДЛЯ ЛОХОВ
@
УЧУ ДЖАВУ ПО КУРСУ ГОЛОВАЧА
http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html
> The for-each construct is also applicable to arrays, where it hides the index variable rather than the iterator.
какой же ты долбаеб, твоя аватарка тебе идет
>Как стало известно, сейчас разработка Java EE в компании Oracle полностью остановлена. Программисты, которые занимались Java EE в штате Oracle, говорят, что их переводят на другие проекты. В сообществе усиливаются дискуссии о том, что необходимо сделать форк. Сама же компания Oracle отказывается чётко прояснить свою позицию и сделать хоть какое-нибудь официальное заявление, несмотря на требования сообщества.
Твиттер, например.
Системные требования:
>Microsoft Windows XP, Vista, Windows 7, или Windows 8;
>Pentium-совместимый процессор (Pentium III, Athlon или более современные);
>256 Мб ОЗУ (512 Мб рекомендуемая);
>До 1.5 Гб свободного пространства на жестком диске;
>Разрешение 1024x768 (рекомендуется высокое разрешение), как минимум 256 цветов;
>Java SE Runtime Environment 7.0.
нахуя ты такой умный заходишь в Java-тред?
>способы хранения фотографий и доступа к ним во всяких соцсетях
вангую что релятивные базы данных
>но вдруг там не будет видно ебальника?
значит не будет
>если ты мне пояснишь за современные технологии
дохуя серверов
>да еще и с такой скоростью ответа
прокси и отложенная инициализация
читал, что хранить пикчи в бд не православно, ибо сильно нагружает и увеличивает размер
>>796939
У меня на работке в одном проекте в базе хранились ссылки на файл на файловом хранилище.
мимо ньюфаг
Низнаю, иногда ваще софт знает што он пиратский даже после форматирования с:
У меня виндус 7.
Удалял всё из папки c:\users\user\.idea, c:\users\user\appdata\\jetrains
Один хуй он както узнает, что я жулик
Я вот столкнулся с тем, что не совсем понимаю, как организовать работу приложения.
Мой говнокод многопоточный, да. И в этих потоках он подключается к базе данных и систематически вытаскивает\добавляет данные.
Как организовать работу потоков, у меня база данных немного охуела от количества подключений.
И второй вопрос, как срать в базу данных через жука. Там множество примеров типа
insertInto(table, field1, field2, .., fieldn).values(1, 2, 3); А как-нибудь через цикл запилить?
Что-то типа
create.insertInto(table);
for( ... ){
create.fields(...).values(...);
}
create.execute();
Выглядит, как булщит, конечно.
По поводу количества подключений - используй connection pool-ы. В веб-контейнерах как правило они уже встроенные. В стандэлоун приложениях есть реализации, самая известная, на мой взгляд, c3p0. По поводу жука сказать ничего не могу, может кто другой посоветует.
>connection pool-ы
Собственно - это первое, что я загуглил, но толком ничего не нашел, к сожалению.
Как ты получаешь экземпляры Connection в своем приложении?
Есть большой файл, новые данные дозаписываются в конец.
В бд хранится ссылка на большой файл, offset и длина отдаваемого файла.
Больших файлов может быть несколько.
DSLContext create = null;
Connection conn = null;
public DB() throws SQLException {
conn = DriverManager.getConnection(url, userName, password);
create = DSL.using(conn, SQLDialect.POSTGRES);
}
}
Что-то типа такого.
Олсо, вот хуй знает, как организовать архитектуру приложения. Вернее двух штук.
Одно вытягивает данные и отправляет их в очередь, а другая берет их из очереди и пишет в базу.
Только у меня уже ебучая лапша в коде выходит. Ответ от сервера JSON формат - два типа данных. В итоге if
get(0).getAsJsonObject().get("shit").getAsString. Говно не читаемое получается. Не знаю, как все это организовать бля.
>Хуй в жопе
Это не правда.
>жаба умирает
Эни пруфс?
>JS учи
Не хочу.
ты хуесос. Почему-то захотел тебя оскорбить, не обижайся
Тебе нужен конекшон пул, сейчас у тебя оверхед от того, что каждый раз создается новое соединение. По архитектуре нехуй учить чему-то, с опытом понимание придет само.
Олсо, соединения нужно закрывать, а у тебя в коде чет не вижу такого. (спойлер: когда ты закрываешь соединение из конекшон пула, оно возвращается в пул, а когда ты закрываешь обычное соединение то оно уничтожается, так что закрывать надо в люмом случае, см. try with resources)
Щас бы брать во внимание мнение чуханов с двача.
>Одно вытягивает данные и отправляет их в очередь, а другая берет их из очереди и пишет в базу.
MQ, например AMQ.
Хотя, в твоем случае зачем тебе 2 приложения? В одном в чем проблема сделать?
Ёбаным жабоиндусам, напоминаю разницу. Зоопарк вопросов:
- где замыкания?
- где свойства?
- где шаблоны? Разработчики Sun вынуждены только облизываться. Даже генерики, введённые в 5-й версии Java — не более, чем syntactic sugar. Дотнетовские генерики это реально поддерживаемые платформой типы, которые расширяются на лету при загрузке, котрые оптимизируются JIT-компилятором. Для Java генерики существуют только в коде и ни JIT, ни загрузчик классов их никогда не видит. Поэтому проблемы боксинга, преобразования типов в runtime просто скрыты от программиста.
- где делегаты/евенты?
- где partial-классы?
- где детерминированное освобождение ресурсов (ключевое слово using + интерфейс IDisposable)?
- где оптимизация JVM для расширений процессоров?
- где аналог linq и в частности удобные мапперы?
- где расширения методов класса?
- где скрытая имплементация интерфейсов?
- где перегрузка параметров функций?
- где нормальное потребление памяти приложением?
- где быстрая работа приложения?
- где нормальные иде, с полноценными дизайнерами?
- где пользовательские value types?
- где методы у инстансов value types?
- где var и анонимные типы
- где перегрузка операторов?
- где оптимизиции хвостовых вызовов? (в свете фунционального хайпа это должно вызывать некоторый батхёрт)
- Где чёткое разделение домены и сборки? Это не учитывая, целый ворох технологий недоступный понимаю жабоиндусов, такие всякие сильверлайты/вин-веб/формочки, впф, XNA, список можно продолжать бесконечно, как впрочем и список ущербности жабы...
Всего, чего нет в жабе, автоматически объявляется хуитой, как только это появляется в жабе, это автоматически становится нехуитой. При этом, требуется сделать вид, что хуитой это называл кто-то другой.
AMQP
> Одно вытягивает данные и отправляет их в очередь, а другая берет их из очереди и пишет в базу.
>
> Только у меня уже ебучая лапша в коде выходит. Ответ от сервера JSON формат - два типа данных. В итоге if
> get(0).getAsJsonObject().get("shit").getAsString. Говно не читаемое получается. Не знаю, как все это организовать бля.
Хуйню какую-то написал. Напиши нормально что там у тебя и для чего. Алсо если я правильно понял, то ты очередь используешь тупо чтобы асинхронно базарить с базой и нет какой-то мощной масштабируемости. Тогда очередь и отдельное приложение для бд несколько оверкилл - дао/репозитории можно сделать асинхронными (или прислюнявить к датааксессу дополнительный менеджерский слой, который будет управлять дата аксессом, разруливать разные дата сорсы и разруливать асинхронку с обычными дао/репозиториями). Если же у тебя распределенность и масштабируемость во все поля, то тогда да, тебе нужен message layer для обмена информацией между компонентами.
>>797319
Кроме того, что язык умирает, а оракловский JavaEE вообще официально сдох, и язык отправляется вслед за коболом и дельфями, и на рынке все сильнее падает спрос - никаких.
>>797367
Антоний прав, охуевший долбоеб. Пиздуй учить Javascript - главный язык будущего, вселенной и всего остального. Пока ты не всрал годы на то, что уже умирает.
А где нормальная поддержка любого железа, сисярп-долбоеб? В новом дотнеткоре? Ну как там дела с релизом, вышедшим месяц назад? Все компании мира объявили о переходе на него?
> целый ворох технологий недоступный понимаю жабоиндусов, такие всякие
> сильверлайты
Лол. Сильвер лайт. 2016.
> вин-веб
А что, асп парашу использует кто-то, кроме Microsoft?
> формочки
Для формочек есть главный язык будущего, вселенной и всего остального. Здесь серьезный бузинесс.
> впф
Еще одно формошлепство, только под винду и теперь еще и мертвое. Последний релиз 4 года назад и блог блещет активностью https://blogs.msdn.microsoft.com/wpf/
> XNA
Гейм-девелопмент и прочие юнити это единственное на что годится C#.
> список можно продолжать бесконечно, как впрочем и список ущербности жабы...
А когда твой беззадачный (акромя игор) сишарп будет поддерживать серьезный тырпрайз бизнес и его задачи? Когда научится работать на каждой кофеварке? Никогда? А на хотя бы никсах и маках? Только что? И как поддержка, а? А когда научится поддерживать нормально распределенные транзакции без печати вендор локина?
Основная хуйня твоей параши - в том, что она пиратская версия джавы от обиженки, которая на волне баттхерта еще запилила почти тотальный вендор локин, чтобы заодно как-то поддерживать свою хуйню. Когда ты пишешь тырпрайз на джаве - ты пишешь тырпрайз на джаве и не связан ничем. Используй что хочешь. Когда ты пишешь говно на сисярпе (вне гейм-девелопмента), то ты залочен под инфраструктуру microsoft и винду. Так что уебывай писать десктопные формочки, игоры на юнити и приложения, работающие на одном (1) microsoft windows server.
> Всего, чего нет в жабе, автоматически объявляется хуитой, как только это появляется в жабе, это автоматически становится нехуитой. При этом, требуется сделать вид, что хуитой это называл кто-то другой.
Обоссан.
Именно так.
Ты сахара обожрался что ли?
- Все что снаружи анонимного класса/лямбды/да просто блока кода и есть замыкание, дебил.
- На месте, хочется сахара - используй Lombok
- Пилят, в 10/11 будут. Но так - то и без них жаба обошла .net
- Проблемы разработчиков языка сисярп, тащащих отовсюду что попало, без представления об ортогональности возможностей, нас не волнуют
- Хз что это - см. предыдущий пункт в котором упоминалось как шарп сосет у жабы
- вот здесь https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
- по поводу VM и опций ты бы вообще не кукарекал.
- Jooq + java8 = аналог
- В котлин дарагой
- Хз что, но звучит как содомия
- Шта? Что вообще код не пишется без этого сахара?
- У грамотных специалистов
- Ну хотя бы работают (со сравнимой скоростью) - деньги приносят. Вам в SOHO не понять.
- Шта? "полноценными дизайнерами?" - клепать круды для малых офисов???
- В 10/11 версии
- Пилят
- В Scala/Clojure/Cotlin/Ceylon/Groovy
- Бинго!!! Маня ты попала в точку. Кажется у .NET есть TCO на уровене VМ, чем жаба не может похвастать. Но как ни странно в проде больше используется ФП языков под JVM одного против F#. Подозрительно, да?
- OSGI? Java9?
Так что либо есть либо пилят (и это необходимо, спору нет). То что не пилят (всяческий пидорский сахар типа partial-классы), это не нужно, да.
Дело в том, что иногда по ночам мне кажется, что я яваблядь. Мне хочется выделять память, зарабатывать на доширак, пиздеть про энтерпрайз, сваливать свои проблемы на чужие плечи и писать нечитаемый бессмысленный говнокод.
Я ворочаюсь, страдаю, рычу, а под конец вскакиваю с кровати и хватаю первое, что попалось под руку.
Это может быть тапок, топор или простая поварешка, но в моем воображении она становится огромным прожорливым интерпретатором.
С этим интерпретатором я открываю корпус сервера, ставлю ещё две планки оперативной памяти и с громким боевым кличем выбегаю на улицу. Я бегаю под окнами своих соседей и ору: "Ява не тормозит, тупые нищебляди!! Купите нормальное железо!!"
Но они не покупают... Они привыкли.
И когда я уставший, но довольный, поднимаюсь в квартиру, наоравшись и набегавшись, одна из дверей открывается. Там, лукаво сверкая глазенками, стоит маленький соседский мальчик Женька. Он громко шепчет беззыбым ртом "Клоссплатфолменность!" и ободряюще мигает мне одним глазом.
Я, улыбаясь ему, прохожу мимо, и в душе моей поют заказчики.
А дома я открываю бутылку водки, морщась, выпиваю ее до половины, и ловлю кота. Ругая этого "сраного волосатого индуса", я сажаю его за клавиатуру, и чтобы он не убежал, приматываю его к ней скотчем.
А дальше все просто.
Я стою у окна, пуская скупую быдлокодерскую слезу по своей прыщавой щеке , и мечтаю. Я представляю, что огни домов -- это пламя костров, на которых сжигают крестопидоров, шум машин -- это рев кулеров в серверных, а в мире нет ничего, кроме великого энтерпрайза и нас, яваблядей...
И я жду, что вдруг, вот сейчас, в мою дверь войдет начальник и скажет: "Эй, раб, ты чо так так долго? Давай, быстро дописывай исходник. Похуй, если будет тормозить - разберутся те, кто будет сопровождать! ГА-га-га-га!" И ободряюще хлопнет меня по спине.
И тогда не будет в мире счастливее человека, чем я... Точнее, явабляди.
Что же мне делать, анон? Что же мне делать?
Но с котом-то потом все будет в порядке?
Ну как только ты создаешь новый проэкт в иде, уже надо указать что это мейвн-проэкт, там же своя структура.
Пиздуй. И в следующий раз иди сразу в JS, там проще, перспективнее и больше денег. И тян будут давать.
Как не нужно, когда берешь спринг, берешь @Async, и сразу нужно и без всякого экзекьютор оверхеда нужно?
>берешь спринг
Точняк, уже запускаю на своем телефоне Sprint, погоди сейчас про-коко-грузится.
По твоему сообщению можно подумать, что ты хотел попасть в ведротред или социотренд эджайлиться в жопу. Но ты зашел не туда.
Оракл разогнала или переназначила на другие проекты всех разработчиков, пиливших javaee.
>Антоний прав, охуевший долбоеб. Пиздуй учить Javascript - главный язык будущего, вселенной и всего остального. Пока ты не всрал годы на то, что уже умирает.
>Смотри мам, я траль
Ну что же тебе так неймется.
правильно из закреплённого поста понял что стоит начать с
+ Java 2. Том 1. Основы Кей Хорстманн
+ Java 2. Том 2. Тонкости программирования Кей Хорстманн
или с чтото другое посоветуете?
если нет на русском книги где всё чётко и ясно, можно на немецком, ибо я его учил всю жизнь
английский не знаю (знания позволяют только смотреть передачи типа фэллона)
для чего оно мне? я пока не решил мне плевать учу что хочу
Расскажи про лямбда-выражения поподробнее. Это автоматическая генерация анонимного класса — нэ?
Но они в разброс. ТО есть, первая новость на сайте почему-то не первая в списке, а где-то в середине.
Понимаю, что теперь мой лист нужно отсортировать. Сделать это в целом просто, ведь в середине каждого стринг в листе есть дата. Но календарь юзать тут не надо. Просто отсортирую по какая меньше-какая больше. Вот код, которым я получаю ссылки.
http://pastebin.com/dRjvtp3i
Вот то, что я получаю.
http://pastebin.com/Qvm5PsD8
Вот то, как выглядит дата:
2016/04/26/
Из неё я буду вытаскивать месяц и число.
Подскажите, чем сортировать и как это сделать?
Это решение, конечно, похоже на костыль, а если ещё и дальше делать, то больший костыль, но всё же это попытка и я хотел бы доделать её.
Спасибо, Анонимусы
Tomcat
Соответственно первый ответ - это блоки информации, которые нужно десериализовать.
Последние две - просто метаданные об ошибках\результатах.
К слову, на выходе я должен получить _абсолютно_ такую же json строчку, так как она будет использоваться повторно. Не хотелось бы писать ещё один десериалайзер.
Я пытаюсь использовать Gson, чтобы выполнить эту задачу.
Создал класс
DataModel -> ссылается на Response -> ссылается на Items;
Вот тут собственно и проблема, Gson пытается сделать каст на Stringmap, то есть объект спокойно создается, потом возвращается в Json и все отлично, но доступа к свойствам и метода последнего объекта (Items) я получить не могу, а собственно очень надо. Собственно вторая проблема - как отличать все эти 4 объекта друг от друга. Так как Items могут содержать различного рода свойства. Как видно на первой картинки - вовсе вложенные объекты.
http://ideone.com/jSZ99S --говнокод
Спасибо
Пользую кстати из-за необходимости Rubymine. Но когда на жабе надо - только эклипс.
Повторяй себе это почаще. Может с переходом с экспериментального статуса этой фичи https://pavelfatin.com/typing-with-pleasure/ печать будет побыстрее. Но пока даже в этом идея сливает. И я не говорю сейчас про тормоза идеи, когда называю калом. Там плохо все - начиная с сообщениях в джавовских компонентах ui которые не скопировать в буфер, заканчивая идиотским юзабилити.
Просто сажусь и пишу шоб работало, стаковерфлоу гуглю.
говнокодишь короче
я вот тоже как ты был еще пол года назад, а сейчас смотрю на свой прошлый код и волосы дыбом.
(говнокодящие макаки не нужны, в лучшем случае за миску риса работать будешь если не поумнеешь)
Зато их можно статически импортировать и не писать хуйняНейм.xor
Это ты кал. Пиши в нетбинсе.
Вы видите копию треда, сохраненную 8 августа 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.