Вначале про бизнес-логику. Есть идея программы, часть функций уже реализована, структура (как на картинке) уже создана. Встал вопрос насколько такая структура и идея логики программы вообще применимы, какие в них есть недостатки. Основные действия программы помещаются в Main и влезают примерно в 10-50 строчек, которые, по сути, являются приказами для других отделов (инициализация).
Получается, что к Class 2 и Class 3 образуются и взаимодействуют только в Class 1 , а остальные (например Class10 , Class25 ) даже и не предполагают что такие существуют вовсе, они обращаются только к Class1 . Class 1 и Class 10 extend Thread и после инициализации ожидают, когда их вызовут. Теперь два главных вопроса: 1. Это вообще возможно?
Это первая крупная задача, которая встала передо мной, и я столкнулся с некоторыми сложностями, которые у меня остались, наверно, из-за нехватки знаний. А именно: допустим, я создал объект класса Class1 (это в Main ). Теперь я хочу обратиться к нему из класса Class25 , чтобы получить ответ на вопрос, который решают Class2 и Class3 . Как это сделать?
Какие бывают реальные задачи в Java Enterprise?
Важно — я не хочу создавать директора отдела ( Class1 ) в каждом из подклассов, я хочу чтобы он был один, и в будущем был потоком, если это возможно. 2. И если это все-таки возможно, то насколько это правильно, почему я не видел такой логики в других программах? Связь GETTER-SETTER сводится к минимуму, а ООП развивается по максимуму.
Отслеживать
9,574 4 4 золотых знака 34 34 серебряных знака 71 71 бронзовый знак
Источник: ru.stackoverflow.com
Три задачи на знание Java от ChatGPT
Попросили языковую модель ChatGPT составить три задачи на знание Java: простую, среднюю и сложную.
К первым двум нейросеть прикрепила ответы, но третья задача осталась нерешённой. Сможете ли вы справиться с ней?
Простая задача по Java
Напишите программу на Java, которая будет считывать массив целых чисел и выводить на экран их сумму и среднее арифметическое.
Подсказки:
- Для считывания массива целых чисел используйте Scanner или BufferedReader.
- Для вычисления суммы и среднего арифметического используйте цикл for .
- Не забудьте проверить ввод на корректность (например, что введено число и не превышает максимально возможное значение для int ).
- Сначала мы создаем экземпляр Scanner для считывания ввода от пользователя.
- Затем мы просим пользователя ввести количество элементов в массиве и создаем массив с заданным размером.
- Используя цикл for , мы считываем каждый элемент массива и записываем его в массив numbers .
- Далее, мы используем цикл for-each , чтобы посчитать сумму всех элементов массива.
- Наконец, мы вычисляем среднее арифметическое деля сумму на количество элементов и выводим его на экран.
import java.util.Scanner; public class Main < public static void main(String[] args) < Scanner scanner = new Scanner(System.in); System.out.print(«Enter the number of elements in the array: «); int n = scanner.nextInt(); int[] numbers = new int[n]; for (int i = 0; i < n; i++) < System.out.print(«Enter element » + (i + 1) + «: «); numbers[i] = scanner.nextInt(); >int sum = 0; for (int i : numbers) < sum += i; >double average = (double) sum / n; System.out.println(«Sum: » + sum); System.out.println(«Average: » + average); > >
Задача средней сложности по Java
Напишите класс «Решето Эратосфена» для нахождения всех простых чисел в диапазоне от 2 до n. Класс должен иметь метод «просеивание» для построения решета и метод «вывод» для вывода всех найденных простых чисел.
#1 Java с нуля: находим наименьшее из 3 чисел JAVA |Задачи по программированию| JAVA базовые задачи
Этот код реализует класс SieveOfEratosthenes , который использует алгоритм «Решето Эратосфена» для нахождения всех простых чисел в диапазоне от 2 до n. В конструкторе создается массив primes , который инициализируется как все true , кроме 0 и 1. Метод sieve использует алгоритм «Решето Эратосфена» для отметки составных чисел как false . Метод output выводит все простые числа из массива primes .
public class SieveOfEratosthenes < boolean[] primes; int n; public SieveOfEratosthenes(int n) < this.n = n; primes = new boolean[n + 1]; Arrays.fill(primes, true); primes[0] = primes[1] = false; >public void sieve() < for (int i = 2; i > > > public void output() < for (int i = 2; i > > public static void main(String[] args) < int n = 100; SieveOfEratosthenes sieve = new SieveOfEratosthenes(n); sieve.sieve(); sieve.output(); >>
Сложная задача по Java
Реализуйте класс «Матрица» с методами:
- Конструктор для создания матрицы размером nxm с нулевыми значениями.
- Метод « setValueAt(int i, int j, int value) » для установки значения элемента в матрице по индексу i, j.
- Метод « getValueAt(int i, int j) » для получения значения элемента в матрице по индексу i, j.
- Метод « multiplyByScalar(int scalar) » для умножения каждого элемента матрицы на скаляр.
- Метод « add(Matrix m) » для сложения двух матриц.
- Метод « transpose() » для транспонирования матрицы.
- Перегрузите оператор «+» для сложения двух матриц и оператор «*» для умножения матрицы на скаляр.
- Реализуйте итератор для класса матрица, чтобы проитерироваться по всем элементам матрицы.
Проверьте работу класса с помощью JUnit тестов.
Подсказки:
- Создайте класс « Matrix » с переменными экземпляра для хранения количества строк, столбцов и двумерного массива для хранения элементов матрицы.
- Реализуйте конструктор для инициализации матрицы с заданным количеством строк и столбцов и установите все элементы в 0.
- Реализуйте метод setValueAt() для установки значения элемента матрицы в указанной позиции.
- Реализуйте метод getValueAt() для получения значения элемента матрицы в указанной позиции.
- Реализуйте метод multiplyByScalar() для умножения всех элементов матрицы на указанное скалярное значение.
- Реализуйте метод add() для сложения двух матриц.
- Реализуйте метод transpose() для транспонирования матрицы.
- Переопределите операторы «+» и «*» для сложения и умножения матриц соответственно.
- Реализуйте итератор для класса Matrix , чтобы можно было выполнять итерацию по всем элементам матрицы.
Напишите тестовые примеры JUnit для проверки всех реализованных методов и убедитесь, что они работают правильно.
Рекомендуется реализовывать каждый метод по одному и тестировать их по мере выполнения, чтобы избежать большой кучи кода, который трудно отлаживать.
Ответа к этой задаче нет. ChatGPT призналась, что ей как языковой модели это не по зубам. Найдутся ли среди читателей те, кто сможет решить её?
public class Matrix < private int rows; private int columns; private int[][] data; // constructor public Matrix(int rows, int columns) < this.rows = rows; this.columns = columns; this.data = new int[rows][columns]; >// setValueAt method public void setValueAt(int i, int j, int value) < this.data[i][j] = value; >// getValueAt method public int getValueAt(int i, int j) < return this.data[i][j]; >// multiplyByScalar method public void multiplyByScalar(int scalar) < for (int i = 0; i < this.rows; i++) < for (int j = 0; j < this.columns; j++) < this.data[i][j] *= scalar; >> > // add method public void add(Matrix m) < if (this.rows != m.rows || this.columns != m.columns) < throw new IllegalArgumentException(«Invalid matrix dimensions»); >for (int i = 0; i < this.rows; i++) < for (int j = 0; j < this.columns; j++) < this.data[i][j] += m.data[i][j]; >> > // transpose method public void transpose() < int[][] transposedData = new int[this.columns][this.rows]; for (int i = 0; i < this.rows; i++) < for (int j = 0; j < this.columns; j++) < transposedData[j][i] = this.data[i][j]; >> this.data = transposedData; int temp = this.rows; this.rows = this.columns; this.columns = temp; > //override «+» operator public static Matrix operator+(Matrix m1, Matrix m2) < Matrix result = new Matrix(m1.rows, m1.columns); for (int i = 0; i < m1.rows; i++) < for (int j = 0; j < m1.columns; j++) < result.data[i][j] = m1.data[i][j] + m2.data[i][j]; >> return result; > //override «*» operator public static Matrix operator*(Matrix m1, int scalar) < Matrix result = new Matrix(m1.rows, m1.columns); for (int i = 0; i < m1.rows; i++) < for (int j = 0; j < m1.columns; j++) < result.data[i][j] = m1.data[i][j] * scalar; >> return result; > // Implement iterator public Iterator iterator() < return new MatrixIterator(this); >private class MatrixIterator implements Iterator < private int currentRow = 0; private int currentColumn = 0; private Matrix matrix; public MatrixIterator(Matrix matrix) < this.matrix = matrix; >public boolean hasNext() < return currentRow < matrix.rows currentColumn < matrix.columns; >public Integer next() < int result = matrix.data[currentRow][currentColumn]; currentColumn++; if (currentColumn == matrix.columns) < currentColumn = 0; currentRow++; >return result; > >
Обратите внимание, что приведенное выше является примером и может не работать идеально, если вы скопируете его без понимания кода, вам следует протестировать и отладить его.
Как вы считаете, справилась ли ChatGPT с формулировкой задач и их решением? Если нет, то где ошиблась языковая модель?
Сколько задач их трёх вам удалось решить? Присылайте свои решения на GitHub в комментарии.
Источник: tproger.ru
Задачи на собеседованиях, спецвыпуск. Стань богатым Java-программистом!
Java-программисты на протяжении нескольких лет остаются самыми востребованными специалистами на рынке IT. Они получают зарплату, привязанную к курсу доллара, и не испытывают дискомфорта от экономических кризисов. Невзирая на все мрачные предсказания, проектов, связанных с Java-технологиями, становится все больше. Профессиональные Java-специалисты ценятся по всему миру.
Независимо от их страны проживания работодатели согласны вкладывать в них деньги. Если ты задумываешься о карьере Java-разработчика, то эта статья для тебя. В ней собраны практические советы по подготовке и прохождению собеседования, поиску работы в офисе и удаленно.
TL;DR
Составляя резюме, старайся выделить знание именно тех технологий, которые требуются в вакансии. Описывая проекты, в которых ты принимал участие, не забудь указать свои обязанности и задачи в рамках проекта, не только связанные с написанием кода, но и бета-тестирование, unit-тесты, билд-скрипты, настройку сервера приложения, Jenkins’а или создание базы данных. Имей в виду, что тебе придется ответить за каждую технологию, которую ты указываешь в резюме, так что не стоит вписывать то, что ты совершенно не знаешь.
Подготовка к собеседованию
Теперь займемся подготовкой к самому собеседованию. Независимо от проекта и используемых фреймворков для начала нужно показать твердые знания Core Java.
По Java существует множество всевозможных пособий и обучающих курсов, но лучшим пособием будет литература для подготовки к сдаче экзамена на сертифицированного программиста Java от Oracle, например OCA OCP Java SE 7 Programmer I https://xakep.ru/2016/02/08/coding-challenges-205/» target=»_blank»]xakep.ru[/mask_link]