Страницы

Поиск по вопросам

среда, 16 января 2019 г.

Отслеживание действия garbage collector в java

Есть ли какой нибудь способ отслеживать в программе действия garbage collector? например писать в логи все его похождения. вот он запустился, прошелся по классу, что затронул? young/old и пр. типы памяти.


Ответ

Вы можете включить логирование сборок мусора передав JVM параметр -Xlog:gc* при запуске программы.

Как правильно присваивать переменную?

Почему такая конструкция работает:
let outputData = document.querySelector('#outputData'); outputData.innerHTML = 'Введите значение';
А вот такая уже нет:
let outputData = document.querySelector('#outputData').innerHTML; outputData = 'Введите значение';
Складывается впечатление, что методы нельзя добавлять в переменную. Или возможно я не до конца понимаю особенности присваивания переменной.
Кто может объяснить эту ситуацию?


Ответ

Складывается впечатление, что методы нельзя добавлять в переменную.
Методы можно добавлять в переменную, однако, в данном случае в коде нет методов.
innerHTML - это свойство, возвращающее строку.
возможно я не до конца понимаю особенности присваивания переменной.
Особенностей нет: присваивая что-то в переменную, никак не влияет на предыдущее значение переменной.
var a = {}; a = 'a'; a = 3;
Во всех трех случаях предыдущее значение теряется и никак не меняется.

Почему работает первый вариант?
В первом варианте: outputData.innerHTML = 'Введите значение';
Нет присваивания переменной. Есть изменение значения свойства объекта.
При этом, .innerHTML еще и особое свойство, которое разбирает переданную строку и генерирует нужный html, который затем и отображается.

Как найти в тексте слова с нечетным количеством букв и удалить из них среднюю букву?

Нужно на C# с помощью регулярных выражений в введенном тексте найти слова с нечетным количеством букв, а потом удалить из них среднюю букву.


Ответ

Возможно, это будет проще и понятнее:
string input = "aaa bbbb ccccc dddddd"; string pattern = @"\w+"; string RemoveCentralSymbol(string s) => s.Remove(s.Length / 2, s.Length % 2); var result = Regex.Replace(input, pattern, match => RemoveCentralSymbol(match.Value)); Console.WriteLine(result);
Используем перегрузку Regex.Replace, принимающую MatchEvaluator (делегат, который составит строку для замены)

Не создается структура проекта ItelIiJ IDEA

Каждый раз когда я создаю проект, не создаются некоторые папки из проекта, такие как resource, main, даже когда жму галочку "создать с главным классом".
Структура проекта:

Как можно это исправить?


Ответ

Щелкните правой кнопкой мыши на модуль, выберите «Добавить поддержку фреймворка ...» и используйте технологию Maven. Это преобразует проект в Стандартный макет Maven
Это также создаст pom.xml для вас, чтобы вы могли потом изменить его.

Spring Value: почему некорректно видит переменные?

Я вынес все данные в properties, например, с такими полями:
email.content.charset=utf-8
Я создал отдельный класс с пропертями, ResourcesProperties, в котором у меня есть это поле и геттер:
import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component;
@Component public class ResourcesProperties {
@Value("${email.content.charset}") private String emailCharset;
public String getEmailCharset() { return emailCharset; } }
Проперти-файл сканируется спрингом:
@PropertySource({"classpath:/properties/mail.properties"})
Я автовайрю класс проперти в нужный мне класс:
@Autowired private ResourcesProperties properties;
и вывожу на экран:
System.out.println(properties.getEmailCharset());
Результат:
${email.content.charset}
Делаю то же самое через Environment:
System.out.println(environment.getProperty("email.content.charset"));
Результат:
utf-8
Подскажите, что я делаю не так?


Ответ

Добавьте в ваш класс ResourcesProperties след код.
@Bean public static PropertySourcesPlaceholderConfigurer propertyConf() { return new PropertySourcesPlaceholderConfigurer(); }
Если не инициализировать PropertySourcesPlaceholderConfigurer то считыватся через аннотацию property не будет

Обработка динамического JSON в Retrofit2

Имеется метод в сервисе:
@DELETE("api/rest/dir/{dir_path}/") Call delete(@Path("dir_path") String dirPath);
В виде ответа могут придти разные JSON.
{ "dir": { "status": "success" } }
или
{ "dir": { "error_code": "{error number}", "error_message": "{description or error}" } }
Соответственно имеются классы:
public class BaseResponse { }

public class Error extends BaseResponse { @SerializedName("error_code") private int errorCode;
@SerializedName("error_message") private String errorMessage;

public class Status extends BaseResponse { @SerializedName("status") private String status;
Как правильно обрабатывать ответы? А то всегда в response находится BaseResponse и не приводится ни к одному из двух наследующих его типов.


Ответ

Классы менять не нужно, класс остаётся один и тот же, только в случае успешного ответа в status возвращается success, а ваши error будут null, и наоборот в случае ответа с ошибкой - status == null, а в error будут данные:
public class AwesomeResponse extends ErrorResponse {
@Nullable @SerializedName("status") public String status;
// сколько угодно полей
}
public class ErrorResponse {
@Nullable @SerializedName("error_code") public Integer errorCode;
@Nullable @SerializedName("error_message") public String errorMessage;
}

Роль организации GNU

Не могу понять роль организации GNU. Переводится как некий проект ***not Unix. Эм...ну если not Unix, то почему тогда их проект gdb это отладчик под Unix системы?


Ответ

Проект GNU (англ. The GNU Project) — проект по разработке свободного программного обеспечения (СПО), является результатом сотрудничества множества отдельных проектов. Проект был запущен программистом и сторонником СПО Ричардом Столлманом 27 сентября 1983 года в Массачусетском технологическом институте. Изначальной целью проекта было «разработать достаточно свободного программного обеспечения, чтобы можно было обойтись без программного обеспечения, которое не является свободным».
Текущая работа проекта GNU включает в себя разработку программного обеспечения, повышение осведомлённости, проведение политических кампаний и раздачу новых материалов.
Пожалуй, в контексте твоего вопроса, интереснее всего фраза
является результатом сотрудничества множества отдельных проектов
Манифест
Лицензии
Программы. Уверен, тебя заинтересует список.

Философию происходящего в этом проекте хорошо иллюстрирует существование нежно мною любимой LibreJS
дополнение к Firefox, позволяющее отказаться от выполнения несвободного JavaScript-кода. По мнению Ричарда Столлмана, проблема с JavaScript состоит в том, что код загружается без ведома пользователя, не давая возможности оценить степень его свободности перед загрузкой и воспрепятствовать выполнению проприетарного JavaScript-кода. Определение применяемой в JavaScript-коде лицензии производится через указание на сайте специальных меток или через анализ наличия упоминания лицензии в комментариях к коду. Кроме того, по умолчанию допускается выполнение тривиального JavaScript-кода, известных библиотек и кода с сайтов, занесённых пользователем в белый список.