Java Developer
6.45K subscribers
235 photos
8 videos
12 files
279 links
MAKE JAVA GREAT AGAIN

Мемы: @java_memes
加入频道
Вопрос про анонимные классы. Какие из этих утверждений верны?

A. Анонимный класс может указывать абстрактный класс в качестве своего базового типа.

B. Анонимный класс может указывать интерфейс в качестве своего базового типа.

С. Анонимный класс может указывать одновременно абстрактный класс и интерфейс в качестве своих базовых типов.

D. Анонимный класс всегда может быть заменен лямбда-выражением.

E. Анонимному классу нужен конструктор без аргументов для своего родительского класса.
Правильный ответ: А, В
​​Статистика языков программирования

Сотрудники HeadHunter провели исследование и вычислили самые востребованные языки программирования в России. Они посчитали упоминания в вакансиях и резюме, вычислили средние зарплаты и разложили всё по табличкам. Короч получилась интересная статья
https://habr.com/company/hh/blog/418079/

Коротко: Джава в топах, в Москве и Питере сосредоточились больше половины вакансий для программистов
Почему

Самый главный вопрос, который должен задавать разработчик - «почему?» Почему технология так устроена? Почему в проекте используется именно эта либа? Почему метод так работает?

Умение задавать себе и окружающим вопрос «почему?» помогает докапываться до первопричины и расти, как специалисту. И наоборот, если не искать причин и полагаться на магию, то крутым спецом не стать.
​​Final

• От final классов нельзя наследоваться. Соответственно методы такого класса не будут переопределены. Пример: класс String.
• Final методы нельзя переопределять в подклассах. Методы нужно делать final, когда мы хотим, чтобы их реализация не изменялась.
• Final переменные не могут быть изменены: примитивам нельзя присвоить другое значение, ссылочным - ссылку на другой объект.
• Если final переменная содержит ссылку на объект, то объект можно изменять, но переменная всегда будет ссылаться на тот же самый объект.
• Final аргументы метода предназначены только для чтения. Если попытаться изменить их, то произойдет ошибка компиляции.
• Конструктор не может быть static, abstract или final
​​Super

В Джаве ключевое слово super обозначает суперкласс. Его нужно использовать, когда хотите вызвать конструктор суперкласса или обратиться к члену суперкласса, который скрыт членом подкласса. Вызов super() должен быть первым оператором в конструкторе, если мы его используем.
​​Static nested class

Определение класса можно размещать внутри другого класса. Существует два типа таких классов - статические и нестатические. Область видимости внутренних классов ограничена областью видимости внешнего класса.

Если нам не нужна связь между объектом внутреннего класса и объектом внешнего класса, то делаем внутренний класс статическим. Он называется static nested class, в русском переводе - вложенный.

• вложенный класс имеет доступ к статическим свойствам и методам внешнего класса, включая private.
• из объекта вложенного класса нельзя обращаться к нестатическим членам внешнего
• чтобы создать объект вложенного класса, не нужен объект внешнего

Пример вложенного класса в jdk - HashMap.Node
​​Inner class

Нестатические внутренние класса называются inner classes, в русском переводе - просто внутренние.

• Внутренний класс имеет доступ ко всем переменным и методам своего внешнего класса
• Может содержать только нестатические методы и поля
• Если хотим получить ссылку на объект внешнего класса, то нужно написать OuterClass.this
• Пример внутреннего класса в jdk - HashMap.KeySet

Для более глубокого понимания внутренних классов прочитайте в Effective Java главу "Предпочитайте статические классы-члены нестатическим".
​​Anonymous class

• Анонимный класс не имеет имени
• Не является членом внешнего класса
• Объявляется и сразу создает экземпляр
• Можно поместить в любом месте программы, где разрешается применять выражения
• Обычно реализует только методы и своего интерфейса или суперкласса
• Должны быть короткими, так как объявляются среди других выражений
​​Кстати, пример с Runnable можно заменить лямбдой
​​Local class

Локальный класс определяется в блоке кода. Часто объявление происходит в методе другого класса. Но его можно объявить в статических или нестатических блоках инициализации.

• Локальный класс виден в пределах блока, где он объявлен
• Не может быть объявлен как 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
Вопросы с собеседований по Spring

— что такое 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

#чтопосмотреть
Как выучить Java за месяц, занимаясь 2 часа в день










Никак.
Как вы относитесь к Kotlin?
Как воспитать привычку

У Аркадия Морейниса прочитал о воспитании привычек и решил написать пост о своих, которые два года назад помогли мне начать учить Джаву.

Воспитание привычки – когда вы решили делать что-то каждый рабочий день определенное количество раз.

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
Плохо – хорошо

Плохо
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);