Сегодня я бы хотел разобрать ТЗ на позицию стажера-разработчика.
Когда-то давно я его писал: хочу поделиться своими соображениями на этот счет.Новичкам будет полезно иметь представление о том, что их ожидает в будущем при трудоустройстве.
Вакансия выглядит следующим образом:
Стажер-разработчик PostgreSQL
от 30 000 руб. до вычета НДФЛ
ООО Бизнес Технологии
Санкт-Петербург, Коломяжский проспект, 33к2
Бизнес Технологии
Требуемый опыт работы: не требуется
- Полная занятость, полный день
- Реализация задач не высокого уровня сложности под руководством разработчика
- Постоянный рост квалификации
- Понимания принципов структурного программирования, теории реляционных баз данных.
- Ответственность, самостоятельность, инициативность
- Коммуникабельность, умение и желание работать в команде
- Высокая обучаемость
- Знание
- Sql;
- Pl\sql;
- Pl\pgSql;
- C++, java, pascal.
- Работа в стабильной, динамично развивающейся компании
- Комфортные условия труда
- Отсутствие формализма и бюрократии
- Обширные возможности для профессионального и карьерного роста
- Заработная плата по итогам собеседования
- Оформление по ТК, оплачиваемый отпуск согласно трудовому законодательству.
- Просьба в заголовке письма указывать код вакансии: Project04
- Отступ от левого поля указывает на уровень вложенности.
- Циклы while, for, repeat и условные конструкции имеют тот же смысл, что и в pascal-е.
- Символ “--” обозначает комментарий
- Символ “:=” обозначает присваивание
- Переменные локальны в рамках процедуры, если не оговорено иначе
- Индекс массива пишется в квадратных скобках, конструкция A[i] означает i элемент в массиве A
Возможно использование объектов, состоящих из нескольких полей, или имеющих несколько атрибутов, значения поля записывается как ИмяПоля[ИмяОбъекта].
К примеру, длина массива A записывается как Length[A]; что означают квадратные скобки - выясняется по контексту (переменная, обозначающая массив, или объект является указателем на составляющие его данные). После присвоения y:=x для любого поля f будет выполняться равенство f[y]=f[x]; определение того, что является атрибутом – функция, переменная или что-либо еще, - делается по контексту.
- Указатель может иметь специальное значение NIL, не указывающее ни на какой объект.
- Параметры передаются по значению: вызванная процедура получает собственную копию параметров, изменения параметров внутри процедуры снаружи не видно. При передаче объектов копируется указатель на данные, соответствующие этому объекту.
public class Main {
public static void main(String[] args) {
int[] massif = {13, 3, 8, 1, 15, 2, 3, 7, 4};
System.out.print("Массив до сортировки: ");
for (int i = 0; i < massif.length; i++)
System.out.print(massif[i] + " ");
System.out.println("");
massif = sort(massif);
System.out.print("Массив после сортировки: ");
for (int i = 0; i < massif.length; i++)
System.out.print(massif[i] + " ");
}
public static int[] sort(int x[]) {
if (x.length == 1) //Рекурсия идет до тех пор, пока массив делится
return x;
else {
int half = (int) Math.floor(x.length / 2); //Разбиваем массив на 2 части
int halfFirst[] = new int[half]; //1 часть, пустой массив
int halfSecond[] = new int[x.length - half]; //2 часть, пустой массив
for (int i = 0; i < x.length; i++) { //Заполняем новосозданные массивы значениями
if (i < half)
halfFirst[i] = x[i];
else
halfSecond[i - half] = x[i];
}
halfFirst = sort(halfFirst); //Рекурсия
halfSecond = sort(halfSecond); //Рекурсия
x = sortNext(halfFirst, halfSecond); //Отправляем заполненные значениями массивы в следующий метод
return x;
}
}
public static int[] sortNext(int x[], int y[]) {
int c[] = new int [x.length + y.length]; //Создаем результирующий массив из суммы длин массивов из аргументов метода
int a = 0, b = 0;
for (int i = 0; i < x.length + y.length; i++) { //Сравниваем массивы, меняем местами элементы, заполняем новосозданный массив
if (a == x.length) {
c[i] = y[b];
b++;
}
else if (b == y.length) {
c[i] = x[a];
a++;
}
else if (x[a] > y[b]) {
c[i] = y[b];
b++;
}
else {
c[i] = x[a];
a++;
}
}
return c;
}
}
Ссылка с рабочим кодом на Ideone: ТУТ
Задача была успешно сдана, после чего пригласили на интервью, где, вместо собеседования, в меня кинули очередную порцию подобных задач и удалились на два часа, выдав ручку и 2 листочка А4. Забрали листочки, не посмотрев в них, и сказали, что перезвонят. Мое удовольствие от подобного времяпрепровождения не описать цензурными словами. Но, как минимум, это та суровая реальность, с которой многим придется столкнуться в начале своего пути.
Искренне желаю Вам интересных и конструктивных собеседований. С умом выбирайте работодателя. Всем добра!)
П.С.: мой обзор компаний-работодателей за апрель 2018 (Санкт-Петербург) можно посмотреть ТУТ
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ