Предлагаю вашему вниманию список хоткеев, использование которых делает работу с Windows 7 ещё более удобной (в скобках — альтернативный способ сделать то же самое):
Управление окнами
Win+Home: Свернуть/развернуть все окна, кроме активного. («Потрясти» окно)
Win+Space: Сделать все окна прозрачными. (Задержать курсор над небольшой кнопкой в правом нижнем углу экрана.)
Win+Up: Развернуть активное окно на весь экран. (Перетащить окно вверх до упора, или дважды кликнуть по верхней рамке)
Win+Down: Свернуть активное окно или восстановить размер, если оно развёрнуто на весь экран
Shift+Win+Up: Развернуть окно по высоте (Перетащить нижнюю границу окна до таскбара)
Win+Left/Right: Занять окном левую/правую половину монитора, или восстановить размер (Перетащить окно влево/вправо до упора)
Таскбар
Win+цифра: Запустить программу под этим номером или переключиться на неё
Shift+Win+цифра: Запустить новую копию программы под этим номером (кликнуть колёсиком по иконке)
Ctrl+Win+цифра: Переключиться на следующее окно программы под этим номером (кликнуть, зажав Ctrl)
Alt+Win+цифра: Открыть джамплист программы под этим номером
Win+T(+Shift): Переключаться между всеми открытыми окнами с превьюшками над таскбаром в прямом (обратном) порядке
Win+B: Фокус на трэй
Ctrl+Shift+Click: Запустить программу от имени Администратора
Shift+Right-click: Показать меню окна / группы
Проводник (и Десктоп)
Ctrl+Shift+N: Создать новую папку
Alt+Up: Подняться на уровень выше по папкам
Alt+P: Включить панель просмотра файлов
Shift+Right-Click (по файлу): Добавляет в контекстное меню пункт «Скопировать путь» и много дополнительных пунктов в подменю «Отправить»
Shift+Right-Click (по папке): Добавляет в контекстное меню пункт, позволяющий открыть командную строку из этой папки
Другое
Win+P: Открыть меню настройки режима презентации (второй монитор — проектор)
Win+(+/-): увеличить / уменьшить изображение (вызывает экранную лупу)
Win+G: Переключаться между запущенными гаджетами
Посмотрел доклад Тагира, интересные бенчмарк тесты для стримов. Много тонкостей по перфомансу со стримами.
Рекомендую смотреть для тех кто заботится о скорости работы стримов в своем приложении.
Мутационное тестирование — альтернативный подход к измерению качества модульных тестов. Вместо того, чтобы считать банальный code coverage, используется более разумный механизм. В байт-код ваших классов внедряются случайные изменения, иначе называемые мутациями. Если после такой мутации не упал ни один тест, который покрывает внесённые изменения, то велика вероятность того, что с тестами у вас не особо-то и хорошо.
Пример возможной мутации:
Было:
if(somevalue < threshold) {
doSomething();
}
Стало:
if(somevalue >= threshold) {
doSomething();
}
При проведении мутационного тестирования используется библиотека Pitest. С документацией можно ознакомиться на сайте http://pitest.org
Порядок проведения мутационного тестирования:
1. Сборку разместить в проектной области Jenkins “ссылка на проектную область Jenkins”. Сборка проекта (например: clean install -Ptest)
2. Создать отдельну ветку pitest и подключить в ней pitest-maven plugin
3. Cоздаём сборку «название репозитория в bitbucket»-pitest в проектной области Jenkins. Сборка настраивается на ветку pitest и в целях Maven верхнего уровня к командам из заявки добавляется org.pitest:pitest-maven:1.2.0:mutationCoverage site
4. После успешного выполнения сборки отчёт будет находиться в сборочной директории в папке target/pit-reports
5. Все последующие сборки разработчики запускают самостоятельно, предварительно внеся последние изменения из ветки develop в ветку pitest.
Память JVm состоит из Heap и Permanent Generation. Второй служит для хранения необходимых данных JVM, а так же сохраняет метаданные о созданных объектах. При каждом создании объекта JVM кладет некоторый объем данных в Permanent Generation.
Размер PG можно задать двумя параметрами JVM: -XX:PermSize – задаёт минимальный, или изначальный, размер PG, и -XX:MaxPermSize
Heap — это основной сегмент памяти, где хранятся наши созданные объекты. Он делятся на два подсегмента (Old Generation) и (New Generation). New Generation в свою очередь делится на Eden и два сегмента Survivor.
Новые объекты создаются в сегменте Eden.
Чем больше памяти даем GC тем ему лучше, но опять же смотрим на объем физической памяти. Если хотим оптимизировать характеристики GC, то лучше определить 2 параметра из трех. Универсального GC не будет, что хочется получить и чем мы готовы пожертвовать.
Пользователям доступны 4 сборщика мусора:
SerialGC
Работа GC:
1) Copy Collection — Помечает какие объекты не нужны, какие нужны и далее происходит копирование в область Survivor. Этот алгоритм создает эффект «Мир остановился», когда происходит копирование, то все threadы переводятся в состояние паузы. Copy Collection же работает хорошо в том случае, если у нас много мусора и мало полезных объектов.
2) Mark-Sweep-Compact Collection — Маркируются объекты, дальше они удаляются из памяти и новые объекты размещаются на местах старых.
При этом:
-Xms определяем исходный/минимальный размер heap в 512 мб
-Xmx определяем максимальный размер heap в 512 мб
-XX:NewRatio определяем размер old generation большим в три раза чем размер new generation
-XX:+PrintGCTimeStamps, -XX:+PrintGCDetails и -Xloggc:gc.log JVM печатает дополнительную информацию касаемо garbage collection в файл gc.log
-classpath определяем classpath
com.redstack.App main класс
OutOfMemoryException — Вы уже могли сталкиваться с подобным поведением и думать, почему же это произошло – особенно, если у вас большой объем физической памяти на компьютере и вы удивлялись, как такое вообще могло произойти, что не хватает памяти – теперь вы знаете, почему. Если так случится, что Permanent Generation заполнится (довольно сложно в случае нашего примера добиться этого), у вас будет брошено другое исключение, сообщающее, что PermGen заполнен.
Для вызова задачи с передачей параметров (JSON), необходимо использовать команды Windows
curl -k -u %USER%:%PASSWORD% -X POST https://URL/jenkins/job/TestProject/job/TestJob/build --data-urlencode json={\"parameter\":[{\"name\":\"ParamName\",\"value\":\"ParamValue\"}]}
Linux
curl -k -u %USER%:%PASSWORD% -X POST https://URL/jenkins/job/TestProject/job/TestJob/build --data-urlencode 'json={"parameter":[{"name":"ParamName","value":"ParamValue"}]}'
Так же вызывать Jobы можно с помощью IDEA.
IntelliJ IDEA содержит инструмент, позволяющий взаимодейтсвовать с REST сервисами, отправляя и получая запросы.
Данный интсрумент называется «Test RESTful Web Service» и доступен только в Ultimate версии.
Для того, чтобы открыть его нажимаем на вкладку меню Tools -> Test RESTful Web Service
После этого, в нижней части мы увидим окно инструмента «REST Client»