Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разбор выполненного задания 
:(
    Опции темы
Iktash
Дата 21.7.2010, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 1.8.2008
Где: Украина

Репутация: нет
Всего: нет



В общем, хотел получить работу джуниора в одной компании. Для проверки мне прислали пару заданий:

Цитата

Task 1

Implement Full Binary Tree and write unit tests for the class. Use JUnit to create tests.
Please, implement next methods:

1.     Insert nodes into a tree. After nodes are inserted, tree should still be binary (that is every node except leaf nodes should have two child nodes).

2.     Calculate the height of the tree

Prerequisites:

1.     Binary Tree can't be empty - at least, it should contain one node (root node)

2.     Implementation should conform to all constraints of Binary Tree

Task 2
 

Implement SimpleArrayList (see SimpleArrayList.java attached) and

Write unit tests for the class

 
Implement ReverseList.reverseList(List list) method (see

ReverseList.java attached) and write unit tests for the class




За пару дней я выполнил эти задания (смотрите вложенный архив), но мне отказали в работе. Конечно, мне не указали на ошибки. Поэтому прошу более опытных программистов покритиковать мой код. Уж очень хочется разобраться - возможно, я действительно еще не готов для этой работы. Заранее благодарю.

Это сообщение отредактировал(а) Iktash - 21.7.2010, 16:22

Присоединённый файл ( Кол-во скачиваний: 93 )
Присоединённый файл  Executed_tasks.rar 4,66 Kb
PM MAIL   Вверх
Nofate
Дата 21.7.2010, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 266
Регистрация: 13.10.2008

Репутация: 4
Всего: 8



Хм... Не вижу архив


--------------------
The future is not set, there is no fate but what we make for ourselves.
Нофейтово пространство и смежные области 
PM MAIL WWW ICQ   Вверх
Iktash
Дата 21.7.2010, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 1.8.2008
Где: Украина

Репутация: нет
Всего: нет



прошу прощения, исправил.
PM MAIL   Вверх
Nofate
Дата 21.7.2010, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 266
Регистрация: 13.10.2008

Репутация: 4
Всего: 8



Замеченное при беглом просмотре:
  • Отсутствие документации javadoc в первом задании.
  • Отсутствие пробелов вокруг операторов (лично меня это порядком раздражает). В частности длинные условия в SimpleArrayList довольно трудночитаемы.
  • В классе SimpleArrayList у вас много проверок не является ли параметр null'ом, и даже в таком случае методы отрабатывают и что-то возвращают. Наверное, предполагалось в таких случая бросать исключение NullPointerException, а не угождать пользователю.




--------------------
The future is not set, there is no fate but what we make for ourselves.
Нофейтово пространство и смежные области 
PM MAIL WWW ICQ   Вверх
intr
Дата 21.7.2010, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 18.12.2005

Репутация: 1
Всего: 2



Лично мне не понравилось:

0. Почему в "if else" в некоторых местах отсутствуют скобки? Нет если сложно их написать, то я пойму, но все же как то неаккуратно.

1. Высокая плотность кода. Вот нафига все в одну строку пихать? Отформатировать код довольно несложная штука, благо все нормальные IDE это могут.
Пример:
Код

if(!obj.getClass().getName().equals(this.getClass().getName())) return false;


2. При реализации класса SimpleArrayList реализовать интерфейс java.util.List или на худой конец java.util.Collection.

Дополнительно:

0. В большинстве случаев можно было использовать staic импорты, особенно в тестах. Так красивше.

1. Можно было тест написать пометив тестовые методы аннотаиями, а потом просто скормив класс рунеру.

Дальше лениво думать, может быть еще стоит вдумчиво задание прочитать, может быть там есть что то важно-незаметное smile
--------------------
Исследователь бытия и по совместительству Java-developer
PM MAIL WWW Skype GTalk   Вверх
agR
Дата 21.7.2010, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 19.7.2006
Где: Киев

Репутация: 2
Всего: 2



Цитата(Nofate @  21.7.2010,  16:48 Найти цитируемый пост)
при беглом просмотре

Скорее всего люди, которые проверяли, так же не сильно вдавались в подробности логики и т.д., т.к. того, что лежит на поверхности и так хватает, чтоб уже засомневаться:
  •  Unit тесты. Скачайте небольшое описание Junit and EasyMock , прочитайте и вы поймете что и где у Вас не так.
  •  В ReverseList можно было не выдумывать велосипед, а использовать 
    Код

    Collections.reverse ( list );
     
    скорее всего, проверяющие как раз это и хотели увидеть (знаете ли вы полезные библиотеки и классы)
  •  У list'ов не указаны generic типы (List<String>, например).
Плюс все другие замечания.
Конечно, при более долгом рассмотрении найдется еще что-то.

P.S. Метод equals в SimpleArrayList реализван неправильно... что будет, если obj == null?
P.P.S Очень мало Unit тестов. 

Это сообщение отредактировал(а) agR - 21.7.2010, 17:17
PM MAIL ICQ   Вверх
Iktash
Дата 21.7.2010, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 1.8.2008
Где: Украина

Репутация: нет
Всего: нет



Понятно, замечаний действительно много и все резонные. Спасибо всем. Буду стараться дальше smile 
PM MAIL   Вверх
qwertylolman
Дата 3.3.2011, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 24.5.2010

Репутация: нет
Всего: нет



о, сегодня прислали отрицательный ответ. на почти такой-же тест. возникает естественный вопрос почему я - верблюд? у меня была только вторая часть. мой код в архиве.

Implement SimpleArrayList and write unit tests for the class.
Код

package questions;

import java.util.Iterator;

/**
 * SimpleList implements some methods of List interface
 *
 *
 *
 */
public class SimpleArrayList
{
    //array to store elements of the list
    Object[] data;

    /**
     * Specified by: the same method of java.util.List
     * @param index
     * @return
     */
    public Object get(int index){
        //todo: implement
    }

    /**
     * Specified by: the same method of java.util.List
     * @param index
     * @param obj
     */
    public Object set(int index, Object obj){
       //todo: implement
    }

    /**
     * Specified by: the same method of java.util.List
     * @param index
     * @param element
     */
    public void add(int index, Object element){
        //todo: implement
    }

    /**
     * Specified by: the same method of java.util.List
     * @return
     */
    public Iterator iterator(){
       return new Iterator(){
         //todo: implement
       };
    }

    /**
     * Specified by: the same method of java.util.List
     * @return
     */
    public int hashCode(){
        //todo: implement
    }

    /**
     * Specified by: the same method of java.util.List
     * @return
     */
    public boolean equals(Object obj)
    {
        //todo: impelment
    }

    /**
     * Specified by: the same method of java.util.List
     * @return
     */
    public int indexOf(Object o){
       ////todo: impelment
    }
}


Implement ReverseList.reverseList (List list) method and write unit tests for the class.
Код

package questions;

import java.util.List;


/**
 * Test task
 */

public class ReverseList
{
    /**
     * reverse the list given as the param
     * !!! don't change the signature of the method
     * @param list to be reversed
     */
    public static void reverseList(List list)
    {
    //todo: impelment
    }
}


Присоединённый файл ( Кол-во скачиваний: 12 )
Присоединённый файл  questions.zip 15,09 Kb
PM MAIL   Вверх
carper
Дата 3.3.2011, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 2.3.2005

Репутация: 1
Всего: 8



Цитата

о, сегодня прислали отрицательный ответ. на почти такой-же тест. возникает естественный вопрос почему я - верблюд? у меня была только вторая часть. мой код в архиве.


Ну давайте погадаем, исходя из того, что тест явно преследовал цель, чтобы
вы показали во всей красе свои знания. 
В этом-то и коварство таких тестов, когда задача сама по себе в духе "2+2=?"

1. За отсутствующую документацию, полагаю, что пример не делает скидок на "самоочевидность".
То, что у вас есть, лучше бы его не было вообще, тогда хотя бы могли  рассказать про самодокументированный код. smile

2. За незнание/неумение пользоваться такими вещами как PMD, FireBug, Checkstyle, CodePro ...
Попробуйте и сразу поймете "чего в супе не хватает" - там пунктов на 50-60 в каждом классе.

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

НО!  Кто помешал ими воспользоваться сейчас ?!


3. За использование имен переменных из одной буквы, да еще буквы "o", расстреливал бы сразу, вместе с любителями буквы "l". smile

4. За область видимости по-умолчанию для  Object[] data;

5. Отдельное "спасибо" за вещи типа:
Код

  public Object get(int index) {
     Object[] list = this.getList();
     return list[index];
   }


Это вообще что было? Попытка склонировать?

И вообще, из названия метода getList следует только то, что он должен вернуть этот самый List, а не создавать его.

Ну кому нужен ваш класс, работающий с массивом, без этого самого массива?

Какой религиозный принцип заставил перенести создание массива в get метод?

6. Где GENERICS?

7. За "экономию" на фигурных скобках.

8. За множественные "return"

9. За list[i].equals(o) == true в методе indexOf(...
И там же за 
if (o == null) return -1;
Это почему же у вас я не могу поместить null в список ?

10. За подобный remove() и, особенно, за хвастовство smile
Код

//but, i can do it =)
 Object[] list = getList();
 list[pointer] = null; //??? null по-вашему == remove? Где описана работа с pointer и c  canBeRemoved ?

 canBeRemoved = false;


11. За NPE при попытке добавить объект null. И особено за тесты, которые вообще не тестируют граничное поведение.

12. За приращение массива по единичке!
Код

... add(int index, Object element){
     this.changeArrayLength(this.data.length+1);

 
За одно это надо "rip your balls off" !  smile
Вы по сути одним этим сделали ваш класс никому не нужным!

13. Да даже за комментарии в духе "SimpleList implements some methods of List interface"
Как вы сами думаете, какую это информацию несет?

Типа (Mille pardons my English)  -  
Have a look at a List interface, write down all methods on a paper, then have a look at my super class and compare!
You will be amazed! smile

Ну и т.д. и т.п.




Это сообщение отредактировал(а) carper - 3.3.2011, 17:45
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0756 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.