Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/48: Рейтинг темы: голосов - 48, средняя оценка - 4.77
1 / 0 / 0
Регистрация: 01.07.2016
Сообщений: 13

Задача на собеседовании

01.07.2016, 19:13. Показов 10625. Ответов 41
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.

Являюсь начинающим разработчиком и пытался проходить одно собеседование на позиции стажера Junior Java и после моего предложенного решения мне отказали.
Хотел бы все-таки попытаться решить данную задачу или как минимум то решение, которое хотели от меня интервьювер.

Задча была следующей. Написатть метод merge, который принимаем в качстве параметров два ArrayList a и b.
Данные коллекции можно представить в виде a = [a1, a2, a3, ....] и b = [b1, b2, b3, ...]. По результату выполеения программы
надо получить в коллекции а следующее a= [a1, b1, a2, b2, a3, b3.....]. При этом необходимо написать метод, который
экономный к процессорному времени и памяти.

Я предложил следующий вариант решения задачи:
Java
1
2
3
4
5
6
7
8
9
10
    static void merge(ArrayList a, ArrayList b) {
    int size = b.size();
    for (int i=0; i<size; i++){
    a.add(null);
    }
    for (int i=size; i>0; i--){
    a.set((i<<1)-1,b.get(i-1));
    a.set((i<<1)-2,a.get(i-1));
    }
    }
подскажите как можно сделать лучше?? Хочется попробовать отпрофилировать метод )) но не с чем сравнивать )
Учитывая, что в принципе знаю внутреннюю реализацию этой коллекции, постарался избежать ситуаций копирования массива, который
справа от вставляемого элемента и начал задачу с конца, и по большей части полагаясь на не ресурсоемком методе get.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.07.2016, 19:13
Ответы с готовыми решениями:

Задача на собеседовании
Доброго времени суток, написал задачу с собеседования прошу Вас посмотреть, и указать мои ошибки- недостатки. Код написан в NetBeans вложил...

Задание на собеседовании - в чём ошибка?
Вот что попалось: Отпишите кто может. Всё-таки интересно какие же тут есть ошибки.

Для работающих Java-программистом. Вопросы на собеседовании
Народ (кто работает или уже пытался устроиться), можете поделиться вопросами, которые вам задавал работодатель на собеседовании?

41
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
02.07.2016, 00:58
Студворк — интернет-сервис помощи студентам
brainleo, думаю когда вас просили решить эту задачу, никто не стоял над вами с замером фактического времени выполнения. Ждали оптимальный алгоритм по памяти и быстродействию чтобы понять насколько вы знаете внутреннее устройство коллекций и быстродействие операций над ними. Замерять тут нет смысла. Надо смотреть алгоритмическую сложность каждого решения.
0
1 / 0 / 0
Регистрация: 01.07.2016
Сообщений: 13
02.07.2016, 01:02  [ТС]
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
brainleo, думаю когда вас просили решить эту задачу, никто не стоял над вами с замером фактического времени выполнения. Ждали оптимальный алгоритм по памяти и быстродействию чтобы понять насколько вы знаете внутреннее устройство коллекций и быстродействие операций над ними. Замерять тут нет смысла. Надо смотреть алгоритмическую сложность каждого решения.
печальнее, что в приблизительной реализации этой коллекции я знал..... но результат отсался тем же. Более того это был онайн-тест, перед приглашением на собеседование мне надо было пройти тест из вопросов, а потом еще и эту задачу рещить. Найти первую работу не так легко, как могло показаться. В любом случае мозг размяли, задача может и тривиальная, но ее можно откровенно всехтаки решить не правильно, например с помощью вставкой в середину методом add. И это все на стажера Junior...
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,977
02.07.2016, 05:24
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import java.util.*;
 
public class MergeLists {
    static List<Integer> merge(List<Integer> a, List<Integer> b) {
        List<Integer> ret = new ArrayList<Integer>(a.size() + b.size());
        ListIterator<Integer> pA = a.listIterator();
        ListIterator<Integer> pB = b.listIterator();
        
        while ( pA.hasNext() ) {
            ret.add(pA.next());
            if ( pB.hasNext() )
                ret.add(pB.next());
        }
        while ( pB.hasNext() )
            ret.add(pB.next());
        
        return ret;
    }
    
    public static void main(String[] args){
        List<Integer> a = new ArrayList<Integer>();
        a.add(1);
        a.add(3);
        a.add(5);
        
        List<Integer> b = new ArrayList<Integer>();
        b.add(2);
        b.add(4);
        b.add(6);
        
        List<Integer> c = merge(a, b);
        for ( int n : c )
            System.out.print(n + " ");
        System.out.println();
    }
}
Code
1
2
3
4
andrew@debppc:~/workspace/java/numbers$ javac MergeLists.java 
andrew@debppc:~/workspace/java/numbers$ java MergeLists 
1 2 3 4 5 6 
andrew@debppc:~/workspace/java/numbers$
0
1 / 0 / 0
Регистрация: 01.07.2016
Сообщений: 13
02.07.2016, 11:23  [ТС]
easybuddа спасибо. Забыл написать что в условии две коллекции одинакового размера и плюс через ромедуточную коллекцию уде пробовали вариант. Этот вариант плох потому что мы создаем новую коллекцию хотя есть способ не уступающий по времени и не использует пром коллекцию
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
02.07.2016, 11:50
Цитата Сообщение от brainleo Посмотреть сообщение
Этот вариант плох потому что мы создаем новую коллекцию
ваш вариант тоже использует новую коллекцию. Все варианты создают новые массивы.
0
1 / 0 / 0
Регистрация: 01.07.2016
Сообщений: 13
02.07.2016, 11:52  [ТС]
У меня есть варианты с двумя коллекциями. Естественно в их основе лежит массивы. Тут три коллекции и три массива. Не понимаю о чем вы?
0
 Аватар для reisal78
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,925
02.07.2016, 12:11
Цитата Сообщение от brainleo Посмотреть сообщение
который принимаем в качстве параметров два ArrayList
Вы уверены что в задаче прописано именно ArrayList, а не просто List?
0
1 / 0 / 0
Регистрация: 01.07.2016
Сообщений: 13
02.07.2016, 12:13  [ТС]
Уверен. Сигнатура метода бвласти дана void merge (Array list a, Array list b)
А если лист то хотели через linkedlist решить?
0
 Аватар для reisal78
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,925
02.07.2016, 13:17
Цитата Сообщение от ninjacut Посмотреть сообщение
Вот здесь вместо a.addAll(c), a = c попробуй.
Обратите внимание, что то действие, которое вы советуете, не изменяет состояние коллекции a.
0
 Аватар для ninjacut
155 / 154 / 53
Регистрация: 30.04.2016
Сообщений: 321
02.07.2016, 13:45
reisal78, да, но в условии не было сказано чтобы изменения происходили строго в а, сказано лишь чтобы результат был в а.
0
 Аватар для SergioO
261 / 209 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
03.07.2016, 00:34
Java
1
2
3
4
5
6
7
 
        a.addAll(0,a);
             for (int i=0; i < 2n-1; i+2){
                a.set(i,a.get(n+i/2));
                a.set(i+1,b.get((i+1)/2))
              }
         return a;
индексы особо не высчитывал - идея думаю понятна.
0
502 / 348 / 134
Регистрация: 14.06.2016
Сообщений: 669
07.07.2016, 06:50
Тоже самое, только чуть-чуть распараллеленно
Java
1
2
3
4
5
6
        static void merge0(ArrayList a, ArrayList b) {
            a.addAll(a);
            IntStream.range(0, b.size()).parallel()
                .forEach(item -> a.set(item * 2 + 1, b.get(item)));
 
        }
Вообще, задача сводилась к созданию двух потоков выполнения и синхронизации один за другим.
0
0 / 0 / 0
Регистрация: 08.09.2016
Сообщений: 4
08.09.2016, 18:11
Цитата Сообщение от ninjacut Посмотреть сообщение
Вообще я думаю что это дебильное задание для собеседования, но не суть.
Посмотри в сорсах как реализован метод add, обрати внимание на вызов ensureCapacity
я автор этого дебильного задания. и пока вот такие темы не будут плодиться, оно будет эффективно отсеивать людей, с которыми нет большого смысла разговаривать. как-то так.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
08.09.2016, 18:25
rudy123, непонятно только как вы сможете связать никнейм человека, который хочет чтобы за него решили задание и реального кандидата на интервью с которым вы не хотите разговаривать
0
0 / 0 / 0
Регистрация: 08.09.2016
Сообщений: 4
08.09.2016, 18:48
а зачем связывать? те, кто не осилят - отсеятся. те, кто напишут что-то хорошее или спишут - с теми будет разговор. не думаю, что те, кто спишут, покажут себя хорошо в бедесе. поэтому такие темы просто отнимают время на собеседование, которого не должно было быть.

польза задания в том, что на отсев сырых кандидатов нужна от силы пара минут в день.

Добавлено через 2 минуты
конкретно к brainleo претензий у меня нет - интересуется человек - на здоровье. но его решение уже попадается у людей, которые не могут даже рассказать, что это за код. к счастью, таких мало. станет значительный процент - будет новое задание.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
08.09.2016, 18:50
Цитата Сообщение от rudy123 Посмотреть сообщение
кто напишут что-то хорошее или спишут - с теми будет разговор
Цитата Сообщение от rudy123 Посмотреть сообщение
не думаю, что те, кто спишут, покажут себя хорошо в бедесе.
я думал что задача этого вопроса отсеивать кандидатов ещё до личной встречи чтобы не тратить время.
0
0 / 0 / 0
Регистрация: 08.09.2016
Сообщений: 4
08.09.2016, 18:54
что-то пост пропал. короче попадаются уже люди, которые показывают это решение, но не могут сказать ничего путного даже про этот код. только время впустую на таких тратится. пока таких мало, к счастью.

Добавлено через 1 минуту
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
я думал что задача этого вопроса отсеивать кандидатов ещё до личной встречи чтобы не тратить время.
так и есть. те, кто не справляются с такой задачей, не проходят на интервью. просто экономия времени. "проходное" решение не даёт никаких плюсов и ни о чём не говорит. на собеседовании потом разбираемся, что человек знает и умеет.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
08.09.2016, 19:01
rudy123, а что за фирма?
0
0 / 0 / 0
Регистрация: 08.09.2016
Сообщений: 4
08.09.2016, 19:16
она не очень большая и нероссийская. писать не буду, чтоб не приманивать тех, кто списывает. в приват разве что.

но идея предварительной задачки точно универсальная
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,780
10.09.2016, 15:34
Цитата Сообщение от brainleo Посмотреть сообщение
У меня есть варианты с двумя коллекциями. Естественно в их основе лежит массивы. Тут три коллекции и три массива. Не понимаю о чем вы?
Вероятно, о том, что при добавлении новых элементов в a, произойдёт создание нового массива с большей вместительностью и копирование в него всех элементов из старого массива. Чем это отличается от явного создания нового массива и слияние элементов a и b в него?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.09.2016, 15:34
Помогаю со студенческими работами здесь

Задача на собеседовании
Текст задачи: Создать страницу с 2-мя блоками. В первом блоке ссылки, при нажатии на которые во втором блоке изменяется информация. ...

Задача на собеседовании
дана матрица NxM по ней можно двигаться либо вниз либо вправо найти минимальную сумму элементов находящихся на пути такого движения из...

Задача при собеседовании!
Не могу понять , как ее реализовать (не очень ясна поставлена задача ) помогите разобраться TODO List: Написать приложение списка...

Задача на логическое мышление на собеседовании
Имеется несколько классов. В каждом классе есть функция, внутри которой имеется длинный switch с одними и теми же логическими условиями для...

Задачка на собеседовании
Дали задачку на собеседовании.A,B-булевские переменные. Есть выражение A?B:!B нужно переписать вроде не используя условный оператор If.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru