Ответы пользователя по тегу Java
  • Стоит использовать исключения или if/else?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Господа, что-то в разум не возьму... Всегда сам считал, что Exception - зло, а тут решил проверить. Я понимаю, что JVM может чего и оптимизнула...

    Упс! Все встало на свои места!
    IF execution time: 1231
    EXCEPT execution time: 1260

    package jtests;
    
    import java.util.HashMap;
    
    public class MyTest2 {
    
    	String testIf(HashMap<String, String> h, int i) {
    		String r = "None";
    		if(h.containsKey("NONEKEY")) {
    			r = h.get("NONEKEY");
    		}
    		return r;
    		
    	}
    	String testExept(HashMap<String, String> h, int i) {
    		String r = "None";
    		try {
    			r = h.get("NONEKEY");
    		} catch(Exception e) {
    			return e.getMessage();
    		}
    		return r;
    		
    	}
    	public static void main(String[] args) {
    		MyTest2 m = new MyTest2();
    		HashMap<String, String> h = new HashMap<String, String>();
    		h.put("KEY", "VALUE");
    		
    		long startTime = System.currentTimeMillis();
    		for (int i = 0; i < 900000000; i++) {
    		  m.testIf(h,i);
    		}
    		long endTime = System.currentTimeMillis();
    		System.out.println("IF execution time: " + (endTime - startTime) );
    		
    		startTime = System.currentTimeMillis();
    		for (int i = 0; i < 900000000; i++) {
    		  m.testExept(h,i);
    		}
    		endTime = System.currentTimeMillis();
    		System.out.println("EXCEPT execution time: " + (endTime - startTime) );
    	}
    
    }
    Ответ написан
  • Как ответить на вопрос по поводу полиморфизма в Java?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Может быть так проще будет?
    Класс В наследует методы и переменные класса A. И когда мы вызываем метод объект В, то он может использовать методы и переменные объекта А, также можно представить объект В, как объект А, но поведение будет все равно, как у объекта В.
    В моем примере произошел вызов переопределённого метода b класса B с последующим вызовом родительского оригинального метода класса A. Причем видно, что принудительная кастенация (приведение типов) класса В к классу А - ничего не меняет, как был объект класса В, так он и остался, с переопределённым методом.
    И еще, объектом обычно называют экземпляр класса, то, что образовалось после new.
    package jtests;
    import java.lang.System;
    
    public class MyTest {
    
    	class A {
    		String  a () {
    			return("from A:a");
    		}
    		String b() {		
    			return("from A:b - " + a());
    		}
    		
    	}
    	class B extends A {
    		@Override String b() {
    			return ("from B:b - " + super.b());
    		}
    	}
    	
    	public static void main(String[] args) {
    		MyTest m = new MyTest();
    				
    		System.out.println("A");
    		A a =  m.new A(); // Используем A
    		System.out.println(a.getClass().getName() + " * " + a.b());
    		
    		System.out.println("B");
    		B b =  m.new B(); // Используем B
    		System.out.println(b.getClass().getName() + " * " + b.b());
    		
    		System.out.println("B -> A");		
    		A ab = (A) m.new B(); // Используем B как A
    		System.out.println(ab.getClass().getName() + " * " + ab.b());
    	}
    }


    И Вывод:
    A
    jtests.MyTest$A * from A:b - from A:a
    B
    jtests.MyTest$B * from B:b - from A:b - from A:a
    B -> A
    jtests.MyTest$B * from B:b - from A:b - from A:a
    Ответ написан
    Комментировать
  • Java. Как корректно организовать взаимодествие с сетью?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Так или иначе, лучше использовать NIO, и проверять наличие данных через selector! Вот на почитать - www.javaportal.ru/java/articles/useselectfast.html... (ожидание входящих данных)
    И откажитесь вообще от sleep - это не очень красиво.
    Да, возможно, данные придется буферировать, так как они могут прийти в двух пакетах, например "BEG" и "IN"
    С файлами отдельная история - наверное поможет вот это! Механизм аналогичный - https://docs.oracle.com/javase/tutorial/essential/...
    Ответ написан
    2 комментария
  • Почему Hibernate не подхватывает новые записи в базе?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Подозреваю, что дело в кешировании. Чтобы сбросить кеш, используйте Session.clear()
    Ответ написан
    1 комментарий
  • Как лучше оформить java code?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Создаем case-классы: помещаем их в HashMap и... Вуаля! Никаких ифов! Расширяется просто - добавлением нового класса и инициализацией мапа.
    Context используем для хранения в передачи всякой фигни.
    package my.com;
    
    import java.util.HashMap;
    import java.util.Map;
    
    public class MyJob {
    	class Context {
    		private String astring;
    
    		public Context(String string){
    			this.setAstring(string);
    			// set properties
    		}
    
    		public String getAstring() {
    			return astring;
    		}
    
    		public void setAstring(String astring) {
    			this.astring = astring;
    		}
    	}
    	
    	interface Worker {
    		public int doWork(Context c);
    	}
    
    	class MultiChoose implements Worker {
    
    		@Override
    		public int doWork(Context c) {
    			c.getAstring();
    			System.out.println(c.getAstring() +" MultiChoose");
    			c.setAstring("Новая фигня");
    			return 0;
    		}
    		
    	}
    
    	class Choose implements Worker {
    
    		@Override
    		public int doWork(Context c) {
    			System.out.println(c.getAstring() +" Choose");
    			return 0;
    		}
    		
    	}
    	class AnotherString implements Worker {
    
    		@Override
    		public int doWork(Context c) {
    			System.out.println(c.getAstring() + " AnotherString");
    			return 0;
    		}
    		
    	}
    
    	class Nothing implements Worker {
    
    		@Override
    		public int doWork(Context c) {
    			System.out.println("Nothing");
    			return 1;
    		}
    		
    	}
    	public static void main(String[] args) {
    		MyJob job = new MyJob();
    		Map<String, Worker> cases = new HashMap<String, Worker>();
    		cases.put("Выбор", job.new Choose());
    		cases.put("МультиВыбор", job.new MultiChoose());
    		cases.put("yetanotherSubString", job.new AnotherString());
    		
    		
    		String[] keys_for_test = {"Выбор","МультиВыбор","yetanotherSubString","WrongKey"};
    		Context content = job.new Context("Всякая фигня");
    
    		for (String key:keys_for_test) {
    			Worker worker = cases.getOrDefault(key, job.new Nothing());
    			worker.doWork(content);
    		}
    
    	}
    
    }

    Результат
    Всякая фигня Choose
    Всякая фигня MultiChoose
    Новая фигня AnotherString
    Nothing
    Ответ написан
    1 комментарий
  • Как избавится от проблемы "Database is locked"?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Что за база? Connection pool используем?!
    Ответ написан
    Комментировать
  • Как подгрузить блоки в HTML по запросу JS?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Ответ написан
    Комментировать
  • Выбор фреймворка для сервера на java?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Если просто потренироваться или писать что-то совсем особенное, то можно и напрямую на сокетах. А в плане фреймворка рекомендую посмотреть на netty.io
    Ответ написан
    Комментировать
  • Решил попробывать написать игру слова на Java, как мне решить проблему?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Вместо того, чтобы приводить весь класс, описали бы алгоритм. А вообще-то похоже, что у вас происходит вывод с нескольких потоков одновременно, отсюда и чехарда с буквами. Ну и существует такая весчь как дебаггер, доступный в любой IDE, даже в emacs, не говоря об эклипс, нетбинс и идеа. Просто прошагайте алгоритм и поставьте точки останова на непонятных местах.
    Ответ написан
    Комментировать
  • В какой сфере веба сейчас не стыдно применять java-апплеты?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Java-апплеты - тупиковый путь эволюции. Поэтому на них все ругаются, считают яву тормозной и глючной. Применять их практически перестали по десятку причин. Банки их используют только как наследие прошлого, от которого иногда очень трудно уйти, тоже по десятку разных причин.
    Сама же ява развивается, цветет и пахнет. Работает и на серверах в качестве вебприложений, распределенных вычислений, кучи всего, что можно делать на серверах. Также ява активно используется в качестве GUI, как программы для доступа к данных, или просто как клиентские приложения с графикой.
    Ответ написан
    Комментировать
  • Какие есть технологии и способы захвата видео с камеры через сайт?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    В общем случае это работает так:
    1) установить на сервер видеосервер
    2) пишется приложение для браузера например на флеше или c использованием javascript, которое открывает камеру и передает (публикует) поток на видеосервер.
    3) со стороны видеосервера пишется приложение или сам видеосервер настраивается на запись потока от пользователя
    4) видеосервер также может отдавать этот поток на кучу клиентов

    Теперь о технологиях. Есть их пока всего две
    RTMP - технология Adobe, встроена во flash-плагин. Видеосерверов куча, от nginx+rtmp_module и до red5, включая сотню-другую коммерческих. Соответственно клиент браузера будет написан на флеше. Работает не во всех мобильных браузерах :-( Прощай IOS...

    www.webrtc.org - новая модная технология, встроена пока не во все браузеры
    Видеосерверов не очень много, но вот хороший пример открытого сервера - www.kurento.org

    Я бы тянулся к webrtc, но если нужно поддержка "всего на свете", то придется и flash подтягивать и делать транскодинг на сервере.
    Ответ написан
    Комментировать
  • Как добавить переменные в определенное место, поудобнее?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Хотелось бы добавить к предыдущим ораторам. Попробуйте системы логирования, например slf4j, log4j или logback. Все три совершенно изумительны!
    Ответ написан
    3 комментария
  • Как в Java преобразовать математическую функцию типа String в обычную функцию?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Ха, проще всего подцепить какой нибудь интерпретируемый язык. Например запустить это в jython, groovy или даже javascript!
    Другими словами. Линкуете свое приложение с библиотекой любимого интерпретатора и вызываете
    BSFManager manager = new BSFManager();
    Vector<String> ignoreParamNames = null;
    Vector<Integer> args = new Vector<Integer>();
    args.add(2);
    args.add(5);
    args.add(1);
    Integer actual = (Integer) manager.apply("groovy", "applyTest", 0, 0,
            "def summer = { a, b, c -> a * 100 + b * 10 + c }", ignoreParamNames, args);
    assertEquals(251, actual.intValue());

    docs.groovy-lang.org/latest/html/documentation/ind... - дока
    commons.apache.org/proper/commons-bsf/manual.html - менеджер скриптовых языков
    www.groovy-lang.org - сам груви.

    Удачи.
    Ответ написан
    2 комментария
  • RESTful-сервис: как реализовать выборку новых сообщений?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    А на rabbitmq nосмотреть не хотите?
    На каждого клиента заводится очередь, из которой он черпает сообщения. Вариантов масса.
    Ответ написан
    7 комментариев
  • Правильная обработка исключений?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Сейчас в меня будут кидать камни... Но исключения - это зло!
    Жрут кучу времени и ресурсов, часто ничего поправить уже нельзя, рвется контекст выполнения, и т.д.
    Так что,
    1) Делайте проверки, везде, где это возможно, используйте значения по умолчанию.
    2) Если уж возникло исключение, то обрабатывать его тут же, на этом же уровне.
    3) Не стоит увлекаться созданием собственных исключений! В 95% случаев ситуацию можно устранить и без них! А в остальных 5% достаточно стандартных системных.
    4) Все непрерываемые исключения - обрабатывать на верхних уровнях
    Вотч то я хотел сказать - java-performance.info/throwing-an-exception-in-jav...
    Ответ написан
    6 комментариев
  • Программирование автомобилей?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Нет, понимаете совсем неправильно! Программирование "под автомобили", отдельный класс задач, со знанием кучи оборудования и протоколов типа CAN. Ну а язык программирования скорее всего C/C++/Java, возможно каких-то языков стандарта IEC61131-3, не считая частно-фирменных решений. Просто знать язык - мало, есть еще куча библиотек и куча всего другого. Разберитесь сначала что конкретно вы под automotive (термин такой) хотите делать. Головное устройство, отдельные элементы типа контроллеров двигателя или климатических систем, возможно контроллеры реакции или безопасности?
    Ответ написан
    8 комментариев
  • Как интегрировать Notepad++ c Java интерпретатором?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Не мучайся, поставь www.eclipse.org или netbeans.org
    Оно абсолютно бесплатно. Я за эклипс. Программирую на нем под C/Java/Python/PHP
    Если тормозит, добавь памяти. Хотя у меня уже лет 10 как не тормозит и без ssd.
    Ответ написан
    Комментировать
  • Как продумывать архитектуру java приложения?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Да зачем ее продумывать?! Пишем класс, пишем еще 10. О! Потом заводим пакет! О, еще 10 пакетов. Что-то пошло не так... Рефакторим - Мартин Фаулер злобно хихикает.
    Еще рефакторим, еще и еще.... Икона - Мартин Фаулер.
    Заказчики в трансе, разрабочики тоже... А мы все рефакторим и рефакторим..
    (сарказм)
    А структура приложению все-же нужна.
    1) Начните с постановки задачи
    2) Потом определите архитектуру приложения
    3) Определите как эта архитектура будет расширяться
    4) Начинайте писать
    5) Ну, если не получилось - рефакторить
    6) Закрыть проект - он бесполезен...

    Ах, ну я же забыл про тесты. И их тоже можно рефакторить.
    Agile Way to Hell.
    Ответ написан
    2 комментария
  • Одно из заданий школьной олимпиады по информатике. Как решить?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    О! Самое простое решение, скорее всего самое неэффективное!
    Есть двумерный массив поля 1000х1000, заполненный нулями.
    Есть Х прямоугольников
    Делаем цикл по прямоугольникам
    Берем первый и ЗАКРАШИВАЕМ ВСЕ ЕГО ТОЧКИ, делая +=1 в нашем массиве
    Берем следующий прямоугольник и повторяем предыдущее

    Результат: сканируем все точки нашего массива и выводим те, у которых точка равна Х
    Done.
    Ну а как это записать на яве, попробуйте сами.

    Оптимизировать можно, для этого точки прямоугольников нужно логически складывать (конъюкция, если не ошибаюсь) каждый с последующим, результатом следующего должно быть разультатом сложения. Другими словами, результатом сложения двух прямоугольников является прямоугольник их пересечения. На следующем цикле берем этот результат и следующий прямоугольник, результат используем на следующем.
    Можно вообще ничего не рисовать в координатном массиве! Быстро и очень эффективно, всего 4 операции на каждый прямоугольник.
    Ответ написан
    1 комментарий
  • Как по-другому вывести сервлет на java?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Вариантов несколько:
    - не отправлять на другую страницу, а возвращать ту же самую, в форме указываем туже самую страницу
    - использовать javascript и onclick на кнопку, результат формы отправлять через javascript
    - тоже самое, что и выше, но использовать при этом json как формат обмена данными с сервлетом.
    Ответ написан