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
Вопросы с собеседований по Spring
— что такое Spring
— как понимаете Dependency Injection
— как понимаете Inversion of Control
— примеры DI и IoC
— что такое бин Spring’е
— какие есть scope у бина
— можно ли задать свой scope
— жизненный цикл бина
— что такое жизненный цикл бина
— можно ли добавить бин, если приложение уже стартануло
— как получить объекты ServletContext и ServletConfig
— виды внедрения зависимостей
— для чего нужна аннотация
— разница между аннотациями
— как работает транзакция в Spring
— что знаете о DispatcherServlet и ContextLoaderListener
— рассказать как устроен Spring MVC
— для чего нужны аннотации
— что лежит в основе Spring Security
— преимущества и недостатки Spring Data
— что такое Spring
— как понимаете Dependency Injection
— как понимаете Inversion of Control
— примеры DI и IoC
— что такое бин Spring’е
— какие есть scope у бина
— можно ли задать свой scope
— жизненный цикл бина
— что такое жизненный цикл бина
— можно ли добавить бин, если приложение уже стартануло
— как получить объекты ServletContext и ServletConfig
— виды внедрения зависимостей
— для чего нужна аннотация
@Qualifier
— разница между аннотациями
@Component
, @Repository
, @Service
— как работает транзакция в Spring
— что знаете о DispatcherServlet и ContextLoaderListener
— рассказать как устроен Spring MVC
— для чего нужны аннотации
@RequestBody
, @PathVariable
, @RequestParam
— что лежит в основе Spring Security
— преимущества и недостатки Spring Data
Что посмотреть на выходных
Крутое мок интервью от Стаса Лозенко
https://youtu.be/E6_IVAbBIug
Красно-черные деревья
https://youtu.be/-gKLTH0KTF4
Мотивация для программирования
https://youtu.be/J1usv2Hn-pU
#чтопосмотреть
Крутое мок интервью от Стаса Лозенко
https://youtu.be/E6_IVAbBIug
Красно-черные деревья
https://youtu.be/-gKLTH0KTF4
Мотивация для программирования
https://youtu.be/J1usv2Hn-pU
#чтопосмотреть
Как воспитать привычку
У Аркадия Морейниса прочитал о воспитании привычек и решил написать пост о своих, которые два года назад помогли мне начать учить Джаву.
Воспитание привычки – когда вы решили делать что-то каждый рабочий день определенное количество раз.
1. Перестаньте думать нужно ли это делать и есть ли на это время.
Решите один раз и двигайтесь в этом направлении. Когда я решил стать разрабом, начал каждый день кодить, смотреть лекции и читать книги.
2. Привяжите каждый подход ко времени или событию.
Сразу после завтрака я повторял вчерашний материал, после решал задачи, а за час до сна читал книги.
3. Подход – это выполнение определенных действий нужное количество раз.
Мои подходы: решить 10 задач, сделать конспекты по 2-м лекциям, прочитать 30 страниц, разобрать 10 вопросов с собеседований. Главное установить количество – не «почитать книгу», а именно «прочитать 30 страниц».
4. Не переборщите с количеством действий внутри подхода.
Каждый подход не должен вызывать дикого отвращения. Когда я понимал, что задача занимает овер дохрена времени, переключался на следующую. Нерешенная задача становилась первой в списке на следущий подход. Если все задачи в списке были сложными, то снижал ежедневную планку.
5. Не пропускайте ни одного подхода.Никогда.
Для этого правильно выбирайте привязку по времени и количество действий в подходе. Я понимал, что если перестану решать задачи хотя бы один день, то есть вероятность надолго отбросить мечту стать программистом.
6. Придумайте вознаграждение.
Это сильно ускорит привыкание. Когда я учил Джаву, у меня не было вознаграждения. А вот писать посты каждый день меня подстёгивают просмотры, лайки и сообщения в личку.
7. Привычка воспитывается не быстро.
Некоторые говорят, что достаточно 21 дня, но это не всегда так. Не расстраивайтесь, если были пропуски, у меня тоже получилось не с первого подхода.
У Аркадия Морейниса прочитал о воспитании привычек и решил написать пост о своих, которые два года назад помогли мне начать учить Джаву.
Воспитание привычки – когда вы решили делать что-то каждый рабочий день определенное количество раз.
1. Перестаньте думать нужно ли это делать и есть ли на это время.
Решите один раз и двигайтесь в этом направлении. Когда я решил стать разрабом, начал каждый день кодить, смотреть лекции и читать книги.
2. Привяжите каждый подход ко времени или событию.
Сразу после завтрака я повторял вчерашний материал, после решал задачи, а за час до сна читал книги.
3. Подход – это выполнение определенных действий нужное количество раз.
Мои подходы: решить 10 задач, сделать конспекты по 2-м лекциям, прочитать 30 страниц, разобрать 10 вопросов с собеседований. Главное установить количество – не «почитать книгу», а именно «прочитать 30 страниц».
4. Не переборщите с количеством действий внутри подхода.
Каждый подход не должен вызывать дикого отвращения. Когда я понимал, что задача занимает овер дохрена времени, переключался на следующую. Нерешенная задача становилась первой в списке на следущий подход. Если все задачи в списке были сложными, то снижал ежедневную планку.
5. Не пропускайте ни одного подхода.Никогда.
Для этого правильно выбирайте привязку по времени и количество действий в подходе. Я понимал, что если перестану решать задачи хотя бы один день, то есть вероятность надолго отбросить мечту стать программистом.
6. Придумайте вознаграждение.
Это сильно ускорит привыкание. Когда я учил Джаву, у меня не было вознаграждения. А вот писать посты каждый день меня подстёгивают просмотры, лайки и сообщения в личку.
7. Привычка воспитывается не быстро.
Некоторые говорят, что достаточно 21 дня, но это не всегда так. Не расстраивайтесь, если были пропуски, у меня тоже получилось не с первого подхода.
Книги для Джава-разработчика
Я выкладывал книги, которые сам прочитал в начале пути, и которые мне советовали опытные разрабы. Подборка моих обзоров:
Head First Java
https://yangx.top/java_developer/10
Грокаем алгоритмы
https://yangx.top/java_developer/28
Complete Reference Java
https://yangx.top/java_developer/48
Clean code
https://yangx.top/java_developer/71
Concurrency in practice
https://yangx.top/java_developer/77
Effective Java
https://yangx.top/java_developer/127
Я выкладывал книги, которые сам прочитал в начале пути, и которые мне советовали опытные разрабы. Подборка моих обзоров:
Head First Java
https://yangx.top/java_developer/10
Грокаем алгоритмы
https://yangx.top/java_developer/28
Complete Reference Java
https://yangx.top/java_developer/48
Clean code
https://yangx.top/java_developer/71
Concurrency in practice
https://yangx.top/java_developer/77
Effective Java
https://yangx.top/java_developer/127
Плохо – хорошо
Плохо
Хорошо
Пример взял с одного из докладов JPoint 2018
Плохо
List<T> list = new ArrayList<>();
for (T item : set) list.add(item);
Хорошо
List<T> list = new ArrayList<>(set);
Пример взял с одного из докладов JPoint 2018
Плохо – хорошо
Плохо
Хорошо
Плохо
Iterator<T> itr = list.stream().iterator();
while (itr.hasNext())
consumer.consume(itr.next());
Хорошо
list.stream().forEach(consumer);
Плохо – хорошо
Плохо
Хорошо
Плохо
list.stream().
allMatch(set::contains);
Хорошо
set.containsAll(list);
Как выучить горячие клавиши
Знание горячих клавиш – главный навык программиста, который умеет быстро кодить. Есть крутой плагин для IntelliJ Idea, который просто заставит их заучить. Называется Key Promoter. Первое время он бесит своими всплывающими окнами, но потом принимаешь его правила игры и быстро заучиваешь клавиши.
Еще про настройку Idea
https://yangx.top/java_developer/9
Знание горячих клавиш – главный навык программиста, который умеет быстро кодить. Есть крутой плагин для IntelliJ Idea, который просто заставит их заучить. Называется Key Promoter. Первое время он бесит своими всплывающими окнами, но потом принимаешь его правила игры и быстро заучиваешь клавиши.
Еще про настройку Idea
https://yangx.top/java_developer/9
Что посмотреть на выходных
В постах «Что посмотреть на выходных» я делаю подборки видео для прокачки: доклады, лекции, курсы. И в конце поста – видео для расслабона: интервью разработчиков, мотивашка, какой-нибудь обзор. Все подборки:
Что посмотреть на выходных — 1
https://yangx.top/java_developer/126
Что посмотреть на выходных — 2
https://yangx.top/java_developer/152
Что посмотреть на выходных — 3
https://yangx.top/java_developer/158
Что посмотреть на выходных — 4
https://yangx.top/java_developer/176
Что посмотреть на выходных — 5
https://yangx.top/java_developer/184
Что посмотреть на выходных — 6
https://yangx.top/java_developer/207
#чтопосмотреть
В постах «Что посмотреть на выходных» я делаю подборки видео для прокачки: доклады, лекции, курсы. И в конце поста – видео для расслабона: интервью разработчиков, мотивашка, какой-нибудь обзор. Все подборки:
Что посмотреть на выходных — 1
https://yangx.top/java_developer/126
Что посмотреть на выходных — 2
https://yangx.top/java_developer/152
Что посмотреть на выходных — 3
https://yangx.top/java_developer/158
Что посмотреть на выходных — 4
https://yangx.top/java_developer/176
Что посмотреть на выходных — 5
https://yangx.top/java_developer/184
Что посмотреть на выходных — 6
https://yangx.top/java_developer/207
#чтопосмотреть
Регистрация в приложении в 2018 году, чтобы что-то купить – полнейшая дичь