Дневник цели
Буду краток: проебал.
Цель достаточно глупая, и была написана под впечатлением и ложной мотивацией от анкеты самооценки на работе. Лафоре читаю в фоне, java performance вброшу в цель с рецензиями, Шилдта туда же, Таненбаума продолжаю динамить.
Тем не менее, по количеству книг и курсов последние пол года оказались очень продуктивными. Раньше в основном просто плыл по течению и верил, что само придёт. Надеюсь, это магия смартпрогресс (не зря же плочу нологи за прем акк)
Комментарии
Aynur, у меня три его книги, но как же сложно их читать Т_Т насчет Линуса не знал, интересно)
Немного о байтоебстве. Всегда скипал эту тему, но не в этот раз.
Поразрядные операции:
~ - поразрядная операция НЕ
& - поразрядная операция И
| - поразрядная операция ИЛИ
^ - поразрядная операция исключающее ИЛИ
>> - сдвиг вправо
>>> - сдвиг вправо с заполнением нулями
<< - сдвиг влево
Плюс аналогичные, но с присваиванием. Таблицы истинности очевидны для любого, кто отсидел хоть одну пару дискретной математики (а я отсидел две).
Представление целых чисел
Все целочисленные типы данных представлены двоичными числами разной длины. Чтобы сменить знак целого числа в знаковом типе, нужно инвертировать все его разряды, а затем добавить 1 к результату. (ну почему так сложна?)
Сдвиг вправо сохраняет предыдущее значение старшего разряда (для сохранения знака). Для обнуления старшего разряда используется операция >>>.
Логические операции
Тут все достаточно просто. В тестах стоит обратить внимание на разницу между и/или(&/|) и укороченными и/или(&&/||). В первом случае вычисляются значения всех операндов, во втором - только необходимые.
Кстати, о птичках. Очень неплохие тесты:
http://www.examclouds.com/tests
Пока гоняю "Java программирование", по мере усвоения материала перейду к OCPJP. Если кто получал сертификаты, делитесь впечатлениями (всем похуй, меня всё равно никто не читает)
Начал с Шилдта. Буду отписывать заметки о вещах, которые обычно забываются почти сразу после прочтения.
Целочисленные типы данных
byte - 1 байт (-128...+127)
short - 2 байта (-32768...+32767)
int - 4 байта (-два миллиарда с чем-то...+два миллиарда с чем-то)
long - 8 байт (кому не похуй)
Все типы являются signed
Типы данных для чисел с плавающей точкой
float - 4 байта
double - 8 байт, двойная точность
Символьный тип
char - 2 байта (0...65536)
Для представления символов типа char используется кодировка юникод (2 байта на символ)
Целочисленные литералы
Создают значение типа int. Допускается использование восьмеричной формы записи - необходимо добавить начальный ноль (05), шестнадцатеричной - добавить 0x (0x123), двоичной - добавить 0b (0b1001). Для инициализации значения типа long необходимо в конце добавить символ l иди L (1234L).
Для удобства чтения можно использовать символ нижнего подчеркивания (нельзя вставить в начало и в конец литерала, в остальных случаях в любом количестве). Символы игнорируются компилятором (123_____123_123)
Литералы с плавающей точкой
Стандартная форма записи - 123.123. Допускаются также экспоненциальная и шестнадцатеричная формы записи. Создается значение типа double. Для создания float необходимо указать в конце символ f или F (123.123F). Разделение подчеркиванием аналогично целочисленным литералам.
Логические литералы
true/false
true != 1, false != 0
Символьные литералы
Представляют собой индексы символов из набора unicode. ASCII символы можно вводить непосредственно в одинарных кавычках. Также допустима восьмеричная форма записи ('\ddd') и шестнадцатеричный символ unicode ('\uxxxx').
Строковые литералы
Пишутся в двойных кавычках, остальное в основном то же что и в char. В отличие от некоторых других языков, строковые литералы реализованы не массивом символов, а представляют собой объектные типы.
Преобразование типов
Автоматическое преобразование происходит в случае соблюдения двух условий:
1. Типы являются совместимыми
2. Длина целевого типа больше длины исходного
Например, преобразование byte к int происходит автоматически, тк int может вместить в себя все значения byte. (расширяющее преобразование)
В обратном случае требуется явное приведение:
int i = 130;
byte b = (byte) i;
Называется сужающим преобразованием. В случае, когда значение i выходит за границы диапазона типа byte, оно делится по модулю на длину диапазона byte.
При присваивании значения с плавающей точкой целочисленной переменной выполняется другой тип преобразования - усечение. Вещественная часть отбрасывается, а целая при необходимости делится по модулю на длину диапазона целевого типа.
Правила продвижения типа в выражениях
Сначала типы byte, short, char продвигаются к типу int. Если в выражении встречается операнд с типом long, то тип выражения продвигается к типу long. Затем float и double аналогично long.