• Как перебрать JSON в JAVA?

    Beshere
    @Beshere
    Разработчик
    Вам помогут классы JSONArray и JSONObject.

    Массив объектов получаем при помощи getJasonArray(), отдельные объекты - при помощи getJSONObject(), сами значения - getString().

    Удачи!
    Ответ написан
    1 комментарий
  • Какую библиотеку лучше использовать?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Здравствуйте!
    Я использовал Selenium + firefox browser (понадобится gecko driver). Понравилось с ним работать.
    Ответ написан
    2 комментария
  • Как подменить объект заглушкой в spring контексте для тестов?

    @Shiftuia
    Java-программист
    Можно попытаться написать отдельный класс, в котором будет происходить создание вашего объекта
    Общий смысл в том, чтобы использовать Primary, которому будет отдаваться предпочтение при создании бина
    Что-то типа

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Primary;
    
    import static org.mockito.Mockito.*;
    
    @Configuration
    public class MockConfiguration {
    
    
    	@Primary
    	@Bean
    	public ActivitiGetTimerValueDelegateService activitiGetTimerValueDelegateService() {
    		ActivitiGetTimerValueDelegateService service = mock(ActivitiGetTimerValueDelegateService.class);
    		when(service.getTimerValue(any(), any(), any())).thenReturn(42);
    
    		return service;
    	}
    
    }
    Ответ написан
    Комментировать
  • Какая сертификация по JAVA актуальна?

    al_gon
    @al_gon
    Если в РФ то никакие.
    Если в EU например в Германии, то тоже никакие. НО!

    Если вы устраиваетесь на работу в Германии из РФ из двух с одинаковым опытом пригласять первым скорее того кто с сертификатом, и если всё будет ок, то у второго меньше шансов на интервью.

    OCA и OCP соответсвенно имеются ввиду. В остальных мало смысла.
    Ответ написан
    3 комментария
  • Какая сертификация по JAVA актуальна?

    alfss
    @alfss
    https://career.habr.com/alfss
    Если в рф, то всем чхать, в остальном Oracle.
    Ответ написан
    Комментировать
  • Какой логгер для Java использовать в 2017 году?

    @protven
    slf4j - не логгер, а апи к логгерам, обертка над ними. Я бы рекомендовал slf4j + logback. Мы используем, по-моему стандарт де-факто сейчас.
    Ответ написан
    3 комментария
  • Какой объект object ко мне пришел?

    @aol-nnov
    public MyClass(Integer o){
          //Действия для Integer
    }
    public MyClass(Double o){
          //Действия для Double
    }

    нэ?!

    то, что ты делаешь - это примерно как void* везде передавать в с++. в чем профит-то?
    Ответ написан
    Комментировать
  • Какой объект object ко мне пришел?

    @KeyJ
    Используйте ключевое слово instanceof

    public MyClass(Object o){
       if (o instanceof Integer) {
          //Действия для Integer
       }
       if (o instanceof Double) {
          //Действия для Double
       }
    }


    Но если вам требуется реализация подобного условия, то, скорее всего, у вас имеется где-то ошибка в архитектуре приложения.
    Ответ написан
    6 комментариев
  • Почему у меня программа не работает так, как надо, когда я запускаю её двойным кликом?

    @MaxLich Автор вопроса
    java developer
    В общем-то решил эту проблему. Получился такой метод:
    private static String getClassLocation(Class<?> c) {
            URL pathURL = c.getProtectionDomain().getCodeSource().getLocation();
            try {
                Path path = Paths.get(pathURL.toURI());
                String rootStr = path.getRoot().toString();
                return rootStr + path.subpath(0, path.getNameCount()-1).toString() + File.separator;
            } catch (URISyntaxException e) {
                e.printStackTrace();
                return "";
            }
        }

    На вход подаю класс, в котором лежит этот метод. В итоге получается абсолютный путь к папке, в которой лежит джар-файл. Ну а дальше всё просто: присоединяю к этому пути имя проперти-файла, подаю эту строку на вход методу load() из класса Properties (естественно, перед этим создаю объект этого класса), и дальше получаю объект Properties с нужными данными. Работает и в линуксе (убунту), и в виндоуз (виндоуз 7 в моём случае).
    Ответ написан
    Комментировать
  • Где нужно писать generics в Java?

    zolt85
    @zolt85
    Программист
    В первом случае у вас будет типизированный классом Shape ArrayList и вы сможете обращаться к элементам, как к объектам Shape.
    Во втором случае у Вас будет также типизированный ArrayList, только типизирован он будет классом Object (не зависимо от того, как Вы инициализировали ArrayList), и если Вы захотите обратиться к элементу как к классу Shape, Вам придется кастовать элемент к классу Shape.

    Ну это если совсем по простому.
    Ответ написан
    Комментировать
  • Оправданно ли поведение менеджера проекта в описанной ситуации?

    lxsmkv
    @lxsmkv
    Test automation engineer
    был у нас такой руководитель, любил твердить одни и те же догмы, начинать письма с "как я уже говорил". Мы конечно все про себя закатывали глаза, и все такое. Но когда он ушел и его работу передали двум нашим лучшим программистам, те, через два месяца признались, что с ним было лучше. Он, имея способность как убеждать так и обрубать людей (такой спорщик-манипулятор), в конечном итоге помогал нам, вырезая из требований всякий бред. Добивался ясности в концептах и документах. Отфутболивал баги, которые нашей команды не касались. Всячески переводил стрелки. Все это он делал из желания прикрыть себе тыл. Так что с одной стороны качества руководителя могут быть не заслуживающими уважения но с другой стороны - полезными. Постарайтесь понять именно полезные стороны. Они есть.
    Ответ написан
    Комментировать
  • Язык программирования для 40летнего начинающего?

    dom1n1k
    @dom1n1k
    Я бы посоветовал отталкиваться не от языка, а от своей нынешней специальности и имеющегося опыта. Объясню.
    Просто пойти в "программирование вообще", особенно если в веб - это действительно столкнуться с дикой конкуренцией 20-летних, которые программируют если не с пеленок, то со школы точно. И шансов выиграть эту борьбу, откровенно говоря, немного. Не, какую-то работу вы, конечно, найдёте - но вряд ли она будет очень уж завидной.
    Нужно поискать сферы на стыке вашего опыта и IT. Например, вы врач - искать места, где программируют медицинские системы. Если строитель - системы связанные со строительством. Если химик - связанное с химией, ну и так далее. Тогда большим плюсом будет ваше глубокое понимание предметной области, которого нет (и не предвидится!) у тех самых 20-летних.
    Найти такие места, разведать там обстановку и вот то и учить.
    Ответ написан
    7 комментариев
  • Изучать только git?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Mercurial
    Седой и строгий
    А моё мнение, что да. Потратить один день на Mercurial и один на Subversion - это небольшое вложение в расширение собственного кругозора и профессиональных возможностей. Тем более, не исключено, что Mercurial понравится больше Git.
    Ответ написан
  • Как приостановить поток до определенного события?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Во-первых, возможно, что ответ содержится в самом вопросе. У Spring есть высокоуровневые абстракции исключающие во многих случаях нужду в явной работе с потоками - события и асинхронные методы. Во-вторых, как уже написал Никита есть множество способов синхронизации потоков, чтобы дать правильный ответ, надо знать ваш алгоритм. Может быть, вам нужен CyclicBarrier, а может эффективнее будет HashMap заменить на BlockingQueue ¯\_(ツ)_/¯
    Ответ написан
    Комментировать
  • AlertDialog срабатывает только со второго раза, почему?

    В комментарии ты показал, как вызывается метод settingCount:
    <item
        ...
        android:onClick="settingCount" />

    Тут и заключается проблема. Метод settingCount вызывается первым нажатием, в этом методе добавляется ещё один обработчик и только потом все последующие нажатия на кнопку уже обрабатываются им.

    Замени код метода на это:
    public void settingCount(MenuItem item) {
                    LayoutInflater layoutInflater = LayoutInflater.from(context);
                    View view = layoutInflater.inflate(R.layout.setting_dialog, null);
                    AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context);
                    dialogBuilder.setView(view);
                    final EditText editTextString = (EditText) view.findViewById(R.id.editTextDialogString};    
                    dialogBuilder
                            .setCancelable(false)
                            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                                ///.....///
                            })
                            .setNegativeButton("Отмена",
                                    new DialogInterface.OnClickListener(){
                                       ///.....////
                                    });
                    AlertDialog alertDialog = dialogBuilder.create();
                    alertDialog.show();
        }
    Ответ написан
    1 комментарий
  • Каким образом лучше добавить авторизацию на сайт?

    zolt85
    @zolt85
    Программист
    Если нужно прям все самому сделать, то можно реализовать свой фильтр (реализовав интерфейс javax.servlet.Filter), в котором пытаться понять, авторизован пользователь или нет. Такой фильтр надо прописать в web.xml в виде
    <filter>
    		<filter-name>requestInterceptor</filter-name>
    		<filter-class>com.example.RequestInterceptorFilter</filter-class>
    </filter>

    Такой фильтр будет перехватывать абсолютно все http запросы.
    Ответ написан
    Комментировать
  • Как правильно организовать регистрацию и авторизацию пользователей сайта (Java)?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    В основном всё верно. Я бы немного подправил следующие моменты:
    >> Пользователь отправляет, это "что-то", полученное при регистрации и в ответ получает страницу
    Не пользователь, а клиент (пользователь сидит за компом). Но клиент - не ваша программа, а в основном браузер (curl - тоже клиент) и ваша программа максимум может иметь доступ к некоторым кукам, да и то не ко всем (как настроит куку сервер, см. cookie httponly). Сервер проверяет токен и сопоставляет контекст приложения (php/java) с параметрами пользователя (_GET/_POST/_SESSION), поэтому код backend как правило никак не может влиять на контекст пользователя, только если в нём нет ошибок на выполнение критичных операций. (Естественно, что нужно разбираться в архитектуре сервера, т.к. на уровне фильтров, а в tomcat/IIS они есть, можно сделать много чего нехорошего ещё до обработки запроса под пользователем).

    >> Что представляет из себя токен? (случайную строку, которая является по сути идентификатором? Если да - то какой она должна быть длины, нужно ли ее шифровать и где хранить на стороне клиента?
    Токен - это уникальный идентификатор сессии в формате именно строки. Можно в него вставить JSON.stringify(), но браузер всё равно будет идентифицировать его как строку. Символы ему без разницы. Выдаётся на сессию на одном клиенте. Т.е. если вы подключитесь/логинитесь разными браузерами под одним логином пользователя, то у них будут разные токены. Однако, если вы технически сможете своровать токен из одного браузера и воткнуть его в другой, то фактически будете работать под одной сессией в разных браузерах и проходить аутентификацию во втором браузере не придётся (Иногда этим можно пользоваться для тестов). Именно по этом причине токены надо зарывать по максимуму, т.е. отправлять их в заголовках и в протоколе HTTPS. Только это не касается протокола Kerberos, там аутентификация производится другим механизмом и завладевание кукой не даст результата (весьма сложный механизм, используется в корпоративных сетях, не в интернете).
    где хранить на стороне клиента - Для кук браузер сам их хранит и сам же дописывает в заголовки при выполнении запросов, так что это делается прозрачно. Поставьте fiddler, там всё видно.
    нужно ли ее шифровать - Обычно нет.

    >> Слышал про OAuth и долго и коротко живущие токены
    OAuth используется, когда вы хотите привлечь большое количество пользователей, предполагая, что у них есть аккаунты в соцсетях, т.е. этот протокол упрощает и регистрацию и аутентификацию, но сложнее в настройках, чем form-based. тут есть одна тонкость - аккаунт пользователя в вашей программе надо будет всё равно создавать и связывать его с аккаунтом профиля в соцсети (сейчас подробнее не скажу, давно занимался)
    Теперь какая связь между токеном и OAuth - Делаем выход из контекста рассуждения "на уровень выше" и вспоминаем, что OAuth - протокол аутентификации, а после аутентификации нужно (барабанная дробь ...) тадам - установить токен сессии!!! Т.е. с помощью OAuth вы только проверяете валидность пользователя, затем ваша программа выясняет с каким аккаунтом на вашем сайте он связан и устанавливает токен/куку, чтобы не проходить аутентификацию каждого запроса от пользователя аккаунтов с соцсети. Ну, представьте, что даже на CSS и IMG надо будет требовать подтверждение? (если только не настроен NGINX для отдачи статики, как вы указали выше).

    >> Если да - то какой она должна быть длины
    Посмотрите на форматы и размеры токенов, которые выдают соцсети? Да, взять этот же toster.ru, вот прям сейчас:

    719fc6c4999547af95b58b252dd5255d.png

    Токен сессии придумываете самостоятельно. Хоть sid. Формат строки токена ничем не определён. Главное, чтобы при идентификации пользователя случайно не выдать аналогичный токен другому пользователю, а то получится, что два пользователя идентифицируются сервером как один, кто первый залогинился. Так что одна из проблем сервера - обеспечить уникальность токенов сессий, а это важный раздел безопасности. Вполне можно поискать способы компрометации выдачи "нужных" токенов и тогда безопасность сайта под большой угрозой.

    >> Достаточен ли уровень безопасности OAuth или стоит искать что то другое? jwt?
    Поскольку OAuth тоже начинается с "вешалки", т.е. с form-based аутентификации в соцсети, то главное обеспечить достаточный уровень секретности - HTTPS и всё будет норм.
    Ответ написан
    Комментировать
  • Перспективы embedded разработки?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Программирование на "низком" уровне не всегда низкоуровневое. Но лично для себя я вижу проблему интернета вещей/роботов/умных домов в том, что как разработчик я надолго должен оказаться привязан к проекту одной вещи. Я, например, не могу представить себе, чтобы я при программировании, условно, кофеварок мог легко закончить этот "проект" и переключиться, например, на робота на сборочном конвейере автомобилей. Как правило люди в этой сфере должны отдать много лет проекту (взять, например, медицинское оборудование, так люди там вообще пожизненно завязаны). В WEB/desktop ситуация немного другая - сегодня сайт, завтра утилита или конвертер. При должном усердии задачи, сферы приложения знаний и люди сменяют друг друга и не скучно работать. Но это исключительно МОЁ мнение, может быть вы видите работу в IT в принципе по другому и вам будет нравится то, что лично не нравится мне.
    Мнение других людей - это неприятие их положения на вашем месте. Только и всего.
    Нужно научиться уверенности в своём выборе, тогда мнение других людей не будет вас волновать.
    Ответ написан
    Комментировать
  • Веб-приложение на java?

    saboteur_kiev
    @saboteur_kiev Куратор тега Веб-разработка
    software engineer
    В сторону java webstart.
    Но на клиентской машине все равно должен быть установлен java runtime
    Ответ написан
    3 комментария
  • Помимо знаний, имеют ли толк сертификаты udemy, coursera, codeacademy?

    Нет
    Ответ написан
    Комментировать