Методы Object
На собеседованиях Java Junior’ов часто просят перечислить методы класса Object. Если сходу вспомнил все – ставь рок 🤘
На собеседованиях Java Junior’ов часто просят перечислить методы класса Object. Если сходу вспомнил все – ставь рок 🤘
Приведение типов
Приведение типа показывает использование объекта одного типа, как объект другого типа.
Неявное приведение типа:
Явное приведение:
Приведение типа показывает использование объекта одного типа, как объект другого типа.
Неявное приведение типа:
String s = “java_dev”;
Object o = s;
Явное приведение:
String t = (String) o;
Преобразование примитивов
Автоматическое приведение типов возможно, когда выполняются два условия:
— оба типа совместимы;
— размер исходного типа меньше размера типа, который хотим получить.
Числовые типы: целочисленные и с плавающей точкой, совместимы друг с другом. Но не существует автоматического преобразования числовых типов в тип
Так как целочисленные константы по дефолту
Во время вычислений происходит повышение типа.
— Тип всех значений
— Если один операнд имеет тип
Пример:
Примеры явного приведения:
Прочитать:
— 3 главу у Шилдта. Типы данных, переменные и массивы
— Подробная статья о преобразовании примитивов
https://bit.ly/2NYFxcr
Автоматическое приведение типов возможно, когда выполняются два условия:
— оба типа совместимы;
— размер исходного типа меньше размера типа, который хотим получить.
Числовые типы: целочисленные и с плавающей точкой, совместимы друг с другом. Но не существует автоматического преобразования числовых типов в тип
char
и boolean
. Так как целочисленные константы по дефолту
int
, то Джава выполняет автоматическое преобразование типов при их сохранении в переменные типа byte
, short
, long
или char
. Пример:byte b = 127;
Во время вычислений происходит повышение типа.
— Тип всех значений
byte
, short
, char
повышается до int
.— Если один операнд имеет тип
long
, тип всего выражения повышается до long
. Если один операнд имеет тип float
, тип всего выражения повышается до float
. Если один операнд имеет тип double
, тип всего выражения повышается до double
. Сокращенно:int -> long -> float -> double
Пример:
byte b = 1;
b = b * 2; // compile error
int i = b * 2; // ok
Примеры явного приведения:
byte b = (byte) 300;
0000 0001 0010 1100 -> 0010 1100
byte b = (byte) 128;
0000 0000 1000 0000 -> 1000 0000
Прочитать:
— 3 главу у Шилдта. Типы данных, переменные и массивы
— Подробная статья о преобразовании примитивов
https://bit.ly/2NYFxcr
Переопределение и сокрытие
Метод переопределяет метод суперкласса, если они оба нестатические, и у них совпадают сигнатуры. Вызвать метод родителя можно с помощью ключевого слова
Статический метод скрывает метод суперкласса, когда у методов совпадают сигнатуры и параметры, которые относятся к возвращаемому типу, оператору
Метод переопределяет метод суперкласса, если они оба нестатические, и у них совпадают сигнатуры. Вызвать метод родителя можно с помощью ключевого слова
super
.Статический метод скрывает метод суперкласса, когда у методов совпадают сигнатуры и параметры, которые относятся к возвращаемому типу, оператору
throws
и доступности.Подкаст про трудоуйстройство
Недавно познакомился с крутейшим подкастом об Android разработке. Линк на 68-й выпуск, который послушал https://soundcloud.com/leonid-bogolubov/68a
Ведущие вместе с гостем, опытным hr, обсуждали тему найма. Какую зарплату получают в России Android и iOS разработчики. Как разговаривать с начальством о повышении зарплаты. Что такое оффер и контр-оффер. Что hr ожидает увидеть в резюме. Как грамотно составить резюме.
Ведущие выкладывают выпуски в @androiddevpodcast_news. Плюс там же публикуют полезные линки: примеры резюме, вопросы для Android-разработчиков, свежие новости.
Ставь рок, если за материалы и рекомендации на тему Android.
Недавно познакомился с крутейшим подкастом об Android разработке. Линк на 68-й выпуск, который послушал https://soundcloud.com/leonid-bogolubov/68a
Ведущие вместе с гостем, опытным hr, обсуждали тему найма. Какую зарплату получают в России Android и iOS разработчики. Как разговаривать с начальством о повышении зарплаты. Что такое оффер и контр-оффер. Что hr ожидает увидеть в резюме. Как грамотно составить резюме.
Ведущие выкладывают выпуски в @androiddevpodcast_news. Плюс там же публикуют полезные линки: примеры резюме, вопросы для Android-разработчиков, свежие новости.
Ставь рок, если за материалы и рекомендации на тему Android.
Private
• компоненты не наследуются у суперкласса
• доступны через унаследованные
• у вложенного класса есть доступ к
•
• компоненты не наследуются у суперкласса
• доступны через унаследованные
public
или protected
методы• у вложенного класса есть доступ к
private
полям и методам своего внешнего класса•
private
компоненты неявно доступны через унаследованный вложенный класс10 правил проведения эффективных встреч
В большой компании эффективность встреч имеет большой смысл. Иногда обсуждения занимают целый день, а результат от этого нулевой. Сегодня в одной из переговорок увидел лист с правилами для тех, кто дорожит временем.
1. 😎 Назначил – отвечай
Организатор отвечает за эффективность встречи
2. 🎯 Нет цели – нет встречи
Можете решить вопрос без встречи? Решайте
3. 📝 Повестка
Составляйте повестку и список вопросов с таймингом
4. 📣 Нужен – зови
Приглашайте только тех участников, кто действительно нужен
5. 🚶🏻♂️Бесполезен – уйди
Если на встрече чувствуете себя бесполезным, то можете её покинуть
6. ⛔️ Отказал – объясни
Если отклонили встречу, аргументируйте отказ чётко и понятно для организатора
7. 📆 Готовность один день
Приглашение и материалы встречи отправляйте минимум за день
8. ⏰ Начинайте вовремя
Заранее подключайте презентацию к монитору и удаленных участников по видео и телефонной связи
9. ⏳Минус 5 минут
Завершайте встречу за 5 минут до конца, чтобы успеть на следующую
10. 🙌🏻 Итоги
После встречи отправляйте участникам короткое резюме
В большой компании эффективность встреч имеет большой смысл. Иногда обсуждения занимают целый день, а результат от этого нулевой. Сегодня в одной из переговорок увидел лист с правилами для тех, кто дорожит временем.
1. 😎 Назначил – отвечай
Организатор отвечает за эффективность встречи
2. 🎯 Нет цели – нет встречи
Можете решить вопрос без встречи? Решайте
3. 📝 Повестка
Составляйте повестку и список вопросов с таймингом
4. 📣 Нужен – зови
Приглашайте только тех участников, кто действительно нужен
5. 🚶🏻♂️Бесполезен – уйди
Если на встрече чувствуете себя бесполезным, то можете её покинуть
6. ⛔️ Отказал – объясни
Если отклонили встречу, аргументируйте отказ чётко и понятно для организатора
7. 📆 Готовность один день
Приглашение и материалы встречи отправляйте минимум за день
8. ⏰ Начинайте вовремя
Заранее подключайте презентацию к монитору и удаленных участников по видео и телефонной связи
9. ⏳Минус 5 минут
Завершайте встречу за 5 минут до конца, чтобы успеть на следующую
10. 🙌🏻 Итоги
После встречи отправляйте участникам короткое резюме
Передача данных по ссылке и по значению
По значению - выполняется копирование самого значения, то есть образуются две независимые друг од друга копии. Примитивы передаются по значению.
По ссылке - копируется только ссылка на объект. Так как переменные будут ссылаться на один объект, то они все будут аффектить один объект при изменениях.
По значению - выполняется копирование самого значения, то есть образуются две независимые друг од друга копии. Примитивы передаются по значению.
По ссылке - копируется только ссылка на объект. Так как переменные будут ссылаться на один объект, то они все будут аффектить один объект при изменениях.
Вопрос про анонимные классы. Какие из этих утверждений верны?
A. Анонимный класс может указывать абстрактный класс в качестве своего базового типа.
B. Анонимный класс может указывать интерфейс в качестве своего базового типа.
С. Анонимный класс может указывать одновременно абстрактный класс и интерфейс в качестве своих базовых типов.
D. Анонимный класс всегда может быть заменен лямбда-выражением.
E. Анонимному классу нужен конструктор без аргументов для своего родительского класса.
A. Анонимный класс может указывать абстрактный класс в качестве своего базового типа.
B. Анонимный класс может указывать интерфейс в качестве своего базового типа.
С. Анонимный класс может указывать одновременно абстрактный класс и интерфейс в качестве своих базовых типов.
D. Анонимный класс всегда может быть заменен лямбда-выражением.
E. Анонимному классу нужен конструктор без аргументов для своего родительского класса.
Статистика языков программирования
Сотрудники HeadHunter провели исследование и вычислили самые востребованные языки программирования в России. Они посчитали упоминания в вакансиях и резюме, вычислили средние зарплаты и разложили всё по табличкам. Короч получилась интересная статья
https://habr.com/company/hh/blog/418079/
Коротко: Джава в топах, в Москве и Питере сосредоточились больше половины вакансий для программистов
Сотрудники HeadHunter провели исследование и вычислили самые востребованные языки программирования в России. Они посчитали упоминания в вакансиях и резюме, вычислили средние зарплаты и разложили всё по табличкам. Короч получилась интересная статья
https://habr.com/company/hh/blog/418079/
Коротко: Джава в топах, в Москве и Питере сосредоточились больше половины вакансий для программистов
Почему
Самый главный вопрос, который должен задавать разработчик - «почему?» Почему технология так устроена? Почему в проекте используется именно эта либа? Почему метод так работает?
Умение задавать себе и окружающим вопрос «почему?» помогает докапываться до первопричины и расти, как специалисту. И наоборот, если не искать причин и полагаться на магию, то крутым спецом не стать.
Самый главный вопрос, который должен задавать разработчик - «почему?» Почему технология так устроена? Почему в проекте используется именно эта либа? Почему метод так работает?
Умение задавать себе и окружающим вопрос «почему?» помогает докапываться до первопричины и расти, как специалисту. И наоборот, если не искать причин и полагаться на магию, то крутым спецом не стать.
Final
• От final классов нельзя наследоваться. Соответственно методы такого класса не будут переопределены. Пример: класс
• Final методы нельзя переопределять в подклассах. Методы нужно делать final, когда мы хотим, чтобы их реализация не изменялась.
• Final переменные не могут быть изменены: примитивам нельзя присвоить другое значение, ссылочным - ссылку на другой объект.
• Если final переменная содержит ссылку на объект, то объект можно изменять, но переменная всегда будет ссылаться на тот же самый объект.
• Final аргументы метода предназначены только для чтения. Если попытаться изменить их, то произойдет ошибка компиляции.
• Конструктор не может быть static, abstract или final
• От final классов нельзя наследоваться. Соответственно методы такого класса не будут переопределены. Пример: класс
String
.• Final методы нельзя переопределять в подклассах. Методы нужно делать final, когда мы хотим, чтобы их реализация не изменялась.
• Final переменные не могут быть изменены: примитивам нельзя присвоить другое значение, ссылочным - ссылку на другой объект.
• Если final переменная содержит ссылку на объект, то объект можно изменять, но переменная всегда будет ссылаться на тот же самый объект.
• Final аргументы метода предназначены только для чтения. Если попытаться изменить их, то произойдет ошибка компиляции.
• Конструктор не может быть static, abstract или final
Super
В Джаве ключевое слово
В Джаве ключевое слово
super
обозначает суперкласс. Его нужно использовать, когда хотите вызвать конструктор суперкласса или обратиться к члену суперкласса, который скрыт членом подкласса. Вызов super()
должен быть первым оператором в конструкторе, если мы его используем.Static nested class
Определение класса можно размещать внутри другого класса. Существует два типа таких классов - статические и нестатические. Область видимости внутренних классов ограничена областью видимости внешнего класса.
Если нам не нужна связь между объектом внутреннего класса и объектом внешнего класса, то делаем внутренний класс статическим. Он называется
• вложенный класс имеет доступ к статическим свойствам и методам внешнего класса, включая private.
• из объекта вложенного класса нельзя обращаться к нестатическим членам внешнего
• чтобы создать объект вложенного класса, не нужен объект внешнего
Пример вложенного класса в jdk -
Определение класса можно размещать внутри другого класса. Существует два типа таких классов - статические и нестатические. Область видимости внутренних классов ограничена областью видимости внешнего класса.
Если нам не нужна связь между объектом внутреннего класса и объектом внешнего класса, то делаем внутренний класс статическим. Он называется
static nested class
, в русском переводе - вложенный
.• вложенный класс имеет доступ к статическим свойствам и методам внешнего класса, включая private.
• из объекта вложенного класса нельзя обращаться к нестатическим членам внешнего
• чтобы создать объект вложенного класса, не нужен объект внешнего
Пример вложенного класса в jdk -
HashMap.Node
Inner class
Нестатические внутренние класса называются
• Внутренний класс имеет доступ ко всем переменным и методам своего внешнего класса
• Может содержать только нестатические методы и поля
• Если хотим получить ссылку на объект внешнего класса, то нужно написать
• Пример внутреннего класса в jdk -
Для более глубокого понимания внутренних классов прочитайте в Effective Java главу "Предпочитайте статические классы-члены нестатическим".
Нестатические внутренние класса называются
inner classes
, в русском переводе - просто внутренние
.• Внутренний класс имеет доступ ко всем переменным и методам своего внешнего класса
• Может содержать только нестатические методы и поля
• Если хотим получить ссылку на объект внешнего класса, то нужно написать
OuterClass.this
• Пример внутреннего класса в jdk -
HashMap.KeySet
Для более глубокого понимания внутренних классов прочитайте в Effective Java главу "Предпочитайте статические классы-члены нестатическим".
Anonymous class
• Анонимный класс не имеет имени
• Не является членом внешнего класса
• Объявляется и сразу создает экземпляр
• Можно поместить в любом месте программы, где разрешается применять выражения
• Обычно реализует только методы и своего интерфейса или суперкласса
• Должны быть короткими, так как объявляются среди других выражений
• Анонимный класс не имеет имени
• Не является членом внешнего класса
• Объявляется и сразу создает экземпляр
• Можно поместить в любом месте программы, где разрешается применять выражения
• Обычно реализует только методы и своего интерфейса или суперкласса
• Должны быть короткими, так как объявляются среди других выражений
Local class
Локальный класс определяется в блоке кода. Часто объявление происходит в методе другого класса. Но его можно объявить в статических или нестатических блоках инициализации.
• Локальный класс виден в пределах блока, где он объявлен
• Не может быть объявлен как private, public, protected или static
• Не может содержать статические объявления, только константы
• Имеет окружающий их экземпляр только в нестатическом контексте
• Видны все поля и методы внешнего класса обычные и статические (в зависимости от контекста)
Локальный класс определяется в блоке кода. Часто объявление происходит в методе другого класса. Но его можно объявить в статических или нестатических блоках инициализации.
• Локальный класс виден в пределах блока, где он объявлен
• Не может быть объявлен как private, public, protected или static
• Не может содержать статические объявления, только константы
• Имеет окружающий их экземпляр только в нестатическом контексте
• Видны все поля и методы внешнего класса обычные и статические (в зависимости от контекста)
Собеседование Android-разработчиков
Составил вместе с моим другом, разработчиком мобильных приложений и админом канала Android Live, пост, который поможет подготовиться к собеседованиям на Андроид-разработчика.
Теоретические вопросы – первое, на что стоит обратить внимание при подготовке к собеседованиям. На работе мы большую часть времени пишем код. А чтобы писать качественный код, разработчик должен как минимум хорошо знать свой язык программирования и разбираться в алгоритмах. Поэтому часто на собеседованиях сначала спрашивают теорию, потом дают решать алгоритмические задачи и в конце вопросы по архитектуре приложений.
Вопросы по Андроид зависят от позиции, на которую собеседуешься. Если претендуешь на junior, то важно хорошо ответить на вопросы по основным компонентам: Service, Activity, Fragment. На middle и seniour – готовься к вопросам, которые связаны с архитектурой и применением специфических для проекта библиотек.
77 вопросов и ответов с собеседований
https://android.jlelse.eu/android-interview-questions-cheat-sheet-96ea01c88def
Репозиторий с ресурсами по алгоритмам: линки, книги, курсы, реализации на многих языках программирования
https://github.com/tayllan/awesome-algorithms
Сайт для прокачки себя в алгоритмах
https://www.hackerrank.com
Канал моего друга Саши об Андроид-разработке
https://yangx.top/android_live
Составил вместе с моим другом, разработчиком мобильных приложений и админом канала Android Live, пост, который поможет подготовиться к собеседованиям на Андроид-разработчика.
Теоретические вопросы – первое, на что стоит обратить внимание при подготовке к собеседованиям. На работе мы большую часть времени пишем код. А чтобы писать качественный код, разработчик должен как минимум хорошо знать свой язык программирования и разбираться в алгоритмах. Поэтому часто на собеседованиях сначала спрашивают теорию, потом дают решать алгоритмические задачи и в конце вопросы по архитектуре приложений.
Вопросы по Андроид зависят от позиции, на которую собеседуешься. Если претендуешь на junior, то важно хорошо ответить на вопросы по основным компонентам: Service, Activity, Fragment. На middle и seniour – готовься к вопросам, которые связаны с архитектурой и применением специфических для проекта библиотек.
77 вопросов и ответов с собеседований
https://android.jlelse.eu/android-interview-questions-cheat-sheet-96ea01c88def
Репозиторий с ресурсами по алгоритмам: линки, книги, курсы, реализации на многих языках программирования
https://github.com/tayllan/awesome-algorithms
Сайт для прокачки себя в алгоритмах
https://www.hackerrank.com
Канал моего друга Саши об Андроид-разработке
https://yangx.top/android_live