Придумать задачу для интервью по JAVA.

User avatar
Kolbasoff
Уже с Приветом
Posts: 3481
Joined: 02 Jan 2005 22:10

Re: Придумать задачу для интервью по JAVA.

Post by Kolbasoff »

Dweller wrote:3*3 можно захардкодить :)
Хе-хе, тут вызвали после телефонного скрина на интервью сразу. Дали задачку: написать функцию isPrime(int number), которая проверяет number на простоту. Наверное, предпологалось, что я засажу цикл с проверкой типа number%i == 0. Я предложил захардкодить все primes от 1 до 2^32-1 в static HashSet в отдельном классе, написать isPrime(int number){ return set.contains(number) } и сэкономить пару-тройку драгоценных микросекунд по сравнению с любым вычислением. Чуваки были удивлены нестандартным подходом!
User avatar
Komissar
Уже с Приветом
Posts: 64661
Joined: 12 Jul 2002 16:38
Location: г.Москва, ул. Б. Лубянка, д.2

Re: Придумать задачу для интервью по JAVA.

Post by Komissar »

а сколько времени хардкодить будете?
rorp
Уже с Приветом
Posts: 314
Joined: 24 May 2013 22:04

Re: Придумать задачу для интервью по JAVA.

Post by rorp »

reality wrote:Вот задача на час.
Мне эту задачу давали для итервью по Scala. :pain1:
User avatar
Dweller
Уже с Приветом
Posts: 12257
Joined: 20 Dec 2000 10:01
Location: Bellevue, WA

Re: Придумать задачу для интервью по JAVA.

Post by Dweller »

Kolbasoff wrote:
Dweller wrote:3*3 можно захардкодить :)
Хе-хе, тут вызвали после телефонного скрина на интервью сразу. Дали задачку: написать функцию isPrime(int number), которая проверяет number на простоту. Наверное, предпологалось, что я засажу цикл с проверкой типа number%i == 0. Я предложил захардкодить все primes от 1 до 2^32-1 в static HashSet в отдельном классе, написать isPrime(int number){ return set.contains(number) } и сэкономить пару-тройку драгоценных микросекунд по сравнению с любым вычислением. Чуваки были удивлены нестандартным подходом!
2^35-1 ? можно кодировать битами :)
User avatar
Kolbasoff
Уже с Приветом
Posts: 3481
Joined: 02 Jan 2005 22:10

Re: Придумать задачу для интервью по JAVA.

Post by Kolbasoff »

Komissar wrote:а сколько времени хардкодить будете?
а я напишу програмку, которая сгенерит код Джава класса, который будет содержать все primes. Один раз напишу програмку, один раз ее запущу, класс сохраню в своей commons либе, и фсе. Берете на работу?
User avatar
Sergunka
Уже с Приветом
Posts: 34124
Joined: 03 Dec 2000 10:01
Location: Vladivostok->San Francisco->Los Angeles->San Francisco

Re: Придумать задачу для интервью по JAVA.

Post by Sergunka »

Komissar wrote:а сколько времени хардкодить будете?
http://primes.utm.edu/lists/small/millions/

первые 50 миллионов можно здесь скачать.
"A patriot must always be ready to defend his country against his government." Edward Abbey
IContentProvider
Уже с Приветом
Posts: 5542
Joined: 30 Aug 2007 17:39
Location: USA

Re: Придумать задачу для интервью по JAVA.

Post by IContentProvider »

Krys-Krys wrote:
Komissar wrote:а в чем хранится correspondence between element A and elements B?
Так в чем сохраните. :-) Есть 2 листа на входе с числами, а дальше делайте с ними что хотите включая создание новых структу. Один из вариантов решения например засунуть все в HashMap где ключи это числа из 1го списка и пройдясь по 2му списку разок можно в значение для ключа класть кол-во сколько встретили.
Т е на входе что-то типа
A - [1, 6, 7, 8]
B- [1, 6, 8, 8, 7, 1, 8, 7, 6]
Как-то так.
Задача на пересечение двух листов (хотя почему они превратились в arrays?), одна функция, нет?

B.retainAll(A);
return B;

Понятно, что не все помнят API, но лучше по-моему, тот кто скажет "это такая-то задача, конкретную функцию посмотрю в документации", чем будет выдумывать какие-то свои.
Last edited by IContentProvider on 23 Jan 2014 02:27, edited 1 time in total.
User avatar
Komissar
Уже с Приветом
Posts: 64661
Joined: 12 Jul 2002 16:38
Location: г.Москва, ул. Б. Лубянка, д.2

Re: Придумать задачу для интервью по JAVA.

Post by Komissar »

Kolbasoff wrote:
Komissar wrote:а сколько времени хардкодить будете?
а я напишу програмку, которая сгенерит код Джава класса, который будет содержать все primes. Один раз напишу програмку, один раз ее запущу, класс сохраню в своей commons либе, и фсе. Берете на работу?
для ситуации, когда в ран-тайме надо часто проверять, прайм-не-прайм, кстати, неплохое решение, хотя потребует много памяти.
User avatar
Sergunka
Уже с Приветом
Posts: 34124
Joined: 03 Dec 2000 10:01
Location: Vladivostok->San Francisco->Los Angeles->San Francisco

Re: Придумать задачу для интервью по JAVA.

Post by Sergunka »

Kolbasoff wrote:
Komissar wrote:а сколько времени хардкодить будете?
а я напишу програмку, которая сгенерит код Джава класса, который будет содержать все primes. Один раз напишу програмку, один раз ее запущу, класс сохраню в своей commons либе, и фсе. Берете на работу?
Я бы еще подумал о лези инициализашин и написал бы пачку классов типо от 1 до миллиона от миллиона до трех миллионов и тд. Чтоб все махом не грузить.
"A patriot must always be ready to defend his country against his government." Edward Abbey
IContentProvider
Уже с Приветом
Posts: 5542
Joined: 30 Aug 2007 17:39
Location: USA

Re: Придумать задачу для интервью по JAVA.

Post by IContentProvider »

Kolbasoff wrote: а я напишу програмку, которая сгенерит код Джава класса, который будет содержать все primes. Один раз напишу програмку, один раз ее запущу, класс сохраню в своей commons либе, и фсе. Берете на работу?
А я пошарую по гуглю и скачаю готовую, с подходящей лицензией.
User avatar
Dweller
Уже с Приветом
Posts: 12257
Joined: 20 Dec 2000 10:01
Location: Bellevue, WA

Re: Придумать задачу для интервью по JAVA.

Post by Dweller »

Sergunka wrote:
Kolbasoff wrote:
Komissar wrote:а сколько времени хардкодить будете?
а я напишу програмку, которая сгенерит код Джава класса, который будет содержать все primes. Один раз напишу програмку, один раз ее запущу, класс сохраню в своей commons либе, и фсе. Берете на работу?
Я бы еще подумал о лези инициализашин и написал бы пачку классов типо от 1 до миллиона от миллиона до трех миллионов и тд. Чтоб все махом не грузить.
и засунуть в распределенный key value store, так чтобы scalable solution
User avatar
Kolbasoff
Уже с Приветом
Posts: 3481
Joined: 02 Jan 2005 22:10

Re: Придумать задачу для интервью по JAVA.

Post by Kolbasoff »

Dweller wrote:
Sergunka wrote:
Kolbasoff wrote:
Komissar wrote:а сколько времени хардкодить будете?
а я напишу програмку, которая сгенерит код Джава класса, который будет содержать все primes. Один раз напишу програмку, один раз ее запущу, класс сохраню в своей commons либе, и фсе. Берете на работу?
Я бы еще подумал о лези инициализашин и написал бы пачку классов типо от 1 до миллиона от миллиона до трех миллионов и тд. Чтоб все махом не грузить.
и засунуть в распределенный key value store, так чтобы scalable solution
вот нашел здесь: http://primes.utm.edu/howmany.shtml The Prime Number Theorem: The number of primes not exceeding x is asymptotic to x/log x.
Для 2^32-1 = 4294967295, Pi(4294967295) ~ 445861641. Жалкие 445М * 4 bytes = 2.5Gb. Вам что, жалко памяти? :-)
Last edited by Kolbasoff on 23 Jan 2014 02:44, edited 1 time in total.
User avatar
Интеррапт
Уже с Приветом
Posts: 17281
Joined: 07 Sep 2011 10:05
Location: Seattle, WA

Re: Придумать задачу для интервью по JAVA.

Post by Интеррапт »

Kolbasoff wrote:
Komissar wrote:а сколько времени хардкодить будете?
а я напишу програмку, которая сгенерит код Джава класса, который будет содержать все primes. Один раз напишу програмку, один раз ее запущу, класс сохраню в своей commons либе, и фсе. Берете на работу?
Не беру:

http://docs.oracle.com/javase/specs/jvm ... vms-4.html

При попытке компиляции получите что-то вроде too many constants дойдя до 65 с чем-то тыс констант в своем Джава файле.
User avatar
Kolbasoff
Уже с Приветом
Posts: 3481
Joined: 02 Jan 2005 22:10

Re: Придумать задачу для интервью по JAVA.

Post by Kolbasoff »

Интеррапт wrote:
Kolbasoff wrote:
Komissar wrote:а сколько времени хардкодить будете?
а я напишу програмку, которая сгенерит код Джава класса, который будет содержать все primes. Один раз напишу програмку, один раз ее запущу, класс сохраню в своей commons либе, и фсе. Берете на работу?
Не беру:

http://docs.oracle.com/javase/specs/jvm ... vms-4.html

При попытке компиляции получите что-то вроде too many constants дойдя до 65 с чем-то тыс констант в своем Джава файле.
Но вы оцените нестандартность подхода!
User avatar
Интеррапт
Уже с Приветом
Posts: 17281
Joined: 07 Sep 2011 10:05
Location: Seattle, WA

Re: Придумать задачу для интервью по JAVA.

Post by Интеррапт »

Kolbasoff wrote:Но вы оцените нестандартность подхода!
Не факт :D
User avatar
valchkou
Уже с Приветом
Posts: 4185
Joined: 27 Apr 2011 03:43
Location: Сергели ->Chicago

Re: Придумать задачу для интервью по JAVA.

Post by valchkou »

Kolbasoff wrote:
valchkou wrote:Кандидату будет дан 1 час и комп с эклипсом в уединенном помещении.
А прекрасная тестировщица?
прекрасную тестировщицу можно привести с собой, тоже рассмотрим. А так только индуса, если он согласится.
reality wrote:Вот задача на час. Довольно простая но на мой взгял показательная
Dweller wrote:вот вариант для senior level
выдана схема кроссворда и словарь из 50-100 тыщ слов
спасибо, задачи бесспорно замечательные, но не интересные,
не хочется тесировать кандидата на абстрактное перекладывание из пустого в порожнее.
А потом это все расхлебывать. Мы ж не гугл или амазон.
Sergunka wrote: Задача лифта
я её тоже решал, у нас она уже есть, как стандарт, но от нее как раз и пытаемся уйти.

Я придумал вариант более близкий к домену и вроде бы все в курсе.
есть два объекта

Code: Select all

Account 
    -number

Transaction
    - id
    - dateTime
    - amount
и даны 3 класса

Code: Select all

Main
AccountService
AccountDAO
AccountDAO содержит in memory 1 account и список транзакций за последние 3 месяца.

Требуется
1) ввести понятия дебит/кредит транзакции (на усмотрение кандидата). Дебит - деньги снимает, кредит - добаляем
2) закодить API сервисов
- посчитать баланс на выбранный день
- выдать дебит или кредит или все транзакции за определенный день
- выдать дебит, кредит или все транзакции за интервал (startDate, endDate).
выяснилось что наиболее часто будет запрашиваться разбивка по дням, поэтому желательно её оптимизировать.
3) Добавить еще 1 account в DAO. (проверка на то как кандидат поженит объекты account с transdactions)
4) покрыть тестами.

цель посмотреть насколько кандидат далеко зайдет, задание не обязательно должно быть завершено за час.

как вам задачка, не слишком ли тупая ?
mr boombastic
Уже с Приветом
Posts: 150
Joined: 18 May 2012 20:00

Re: Придумать задачу для интервью по JAVA.

Post by mr boombastic »

reality wrote:Вот задача на час. Довольно простая но на мой взгял показательная :-) Готовый юнит тест можно не давать, или дать базовый и попросить дописать до 100% покрытия к примеру

Code: Select all

import java.util.List;

/**
 * A template file with basic JUnit tests has been provided.
 * Note that your program will be evaluated by a more comprehensive test suite.
 *
 * Please consider the runtime and space complexity of your algorithms and comment on those trade offs.
 *
 * Good luck!
 */

public class ArrayFun {

    /***
     *  @param chars an array of characters
     *  @return the same array with the character order reversed
     */
    public static char[] reverse(char[] chars){
        //TODO - implement me!
        return null;
    }

    /***
     *  A palindrome is a word, phrase, number, or other sequence of units that may be
     *  read the same way in either direction.
     *
     *  Caveat 1 : punctuation and spaces do not count as contributing characters
     *    (hint) use the static method Character.isLetter(char c)
     *
     *  Caveat 2 : upper case letters should still match with lower case
     *    (hint) use the static method Character.toLowerCase(char c)
     *
     *  Examples of valid palindromes :
     *
     *  "Never odd or even"
     *  "No trace; not one carton"
     *  "A Toyota! Race fast... safe car: a Toyota"
     *  "Sums are not set as a test on Erasmus"
     *
     *  @return true if chars form a valid palindrome, otherwise false
     */
    public static boolean isPalindrome(char[] chars){
        //TODO - implement me!
        return false;
    }

    /***
     * Find the most used char in the following char[]
     * If a few chars share the top count, return them all.
     *
     * Caveat 1: exclude the space (' ') character from your count.
     * Caveat 2: treat all uppercase characters as their lowercase counterpart
     *
     * @return the characters which appear most frequently
     */
    public static List<Character> mostUsedCharacter(char [] chars){
        //TODO - implement me!
        return null;
    }

    /***
     * Find the number of unique palindromes in the char array
     *
     * Example: for the array {'a', 'b', 'b', 'a', 'c', 'c', 'a', 'b' 'b', 'a', 'd', 'd', 'a'}
     *  the palindromes are
     *      abbaccabba
     *      bbaccabb
     *      baccab
     *      acca
     *      cc
     *      abba
     *      bb
     *      adda
     *      dd
     *
     * @return the number of unique palindromes in the character array
     */
    public static int numberOfPalindromes(char[] chars){
        //TODO - implement me!
        return 0;
    }

}

Code: Select all

import org.junit.Assert;
import org.junit.Test;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class ArrayFunTest {

    @Test
    public void testReverse() throws Exception {
        final char[] chars = "Novus".toCharArray();
        final char [] reversed = "suvoN".toCharArray();
        Assert.assertArrayEquals(reversed, ArrayFun.reverse(chars));
    }

    @Test
    public void testIsPalindrome() throws Exception {
        final char[] palindrome = "A Toyota! Race fast... safe car: a Toyota".toCharArray();
        final char[] notPalindrome = {'N','o','v','u','s'};
        Assert.assertTrue(ArrayFun.isPalindrome(palindrome));
        Assert.assertFalse(ArrayFun.isPalindrome(notPalindrome));
    }

    @Test
    public void testMostUsedCharacter() throws Exception{
        final char[] chars = "A Toyota! Race fast... safe car: a Toyota".toCharArray();
        final List<Character> output = ArrayFun.mostUsedCharacter(chars);
        Assert.assertEquals(output.size(), 1);
        Assert.assertEquals(output.get(0), new Character('a'));

        final char[] chars2 = "Abcba".toCharArray();
        final List<Character> output2 = ArrayFun.mostUsedCharacter(chars2);
        final Set<Character> resultSet = new HashSet<Character>(output2);
        Assert.assertEquals(output2.size(), 2);
        Assert.assertTrue(resultSet.contains('a'));
        Assert.assertTrue(resultSet.contains('b'));
        Assert.assertFalse(resultSet.contains('c'));
    }

    @Test
    public void testNumberOfPalindromes() throws Exception {
        char[] chars = "abbaccabbadda".toCharArray();
        int numPalindromes = ArrayFun.numberOfPalindromes(chars);
        Assert.assertEquals(numPalindromes, 9);
    }
}
etot coding interview proidut vse. a vozjmut u kogo pricheska po lutshe.
[mod_on]предупреждение за оверквотинг[/mod_on]
mr boombastic
Уже с Приветом
Posts: 150
Joined: 18 May 2012 20:00

Re: Придумать задачу для интервью по JAVA.

Post by mr boombastic »

napishite etot kod,pust' zapustit', i poprosite objasnit' shto budet

Object obj = new Object();
WeakReference<Object> ref = new WeakReference<Object>(obj);

List<byte[]> filler = new LinkedList<byte[]>();
while (ref.get() != null) {
filler.add(new byte[1000]);
}
System.out.println("Filler size " + filler.size());
User avatar
Интеррапт
Уже с Приветом
Posts: 17281
Joined: 07 Sep 2011 10:05
Location: Seattle, WA

Re: Придумать задачу для интервью по JAVA.

Post by Интеррапт »

Я все понимаю, но квотить здоровенный кусок кода, чтобы высказать свое мнение одной строчкой - нет, не понимаю.
User avatar
Интеррапт
Уже с Приветом
Posts: 17281
Joined: 07 Sep 2011 10:05
Location: Seattle, WA

Re: Придумать задачу для интервью по JAVA.

Post by Интеррапт »

mr boombastic wrote:napishite etot kod,pust' zapustit', i poprosite objasnit' shto budet

Object obj = new Object();
WeakReference<Object> ref = new WeakReference<Object>(obj);

List<byte[]> filler = new LinkedList<byte[]>();
while (ref.get() != null) {
filler.add(new byte[1000]);
}
System.out.println("Filler size " + filler.size());
Ссылки на первоисточники хоть не забывайте давать:

http://jonisalonen.com/2012/can-your-in ... r-do-this/
User avatar
valchkou
Уже с Приветом
Posts: 4185
Joined: 27 Apr 2011 03:43
Location: Сергели ->Chicago

Re: Придумать задачу для интервью по JAVA.

Post by valchkou »

mr boombastic wrote:napishite etot kod,pust' zapustit', i poprosite objasnit' shto budet

Object obj = new Object();
WeakReference<Object> ref = new WeakReference<Object>(obj);

List<byte[]> filler = new LinkedList<byte[]>();
while (ref.get() != null) {
filler.add(new byte[1000]);
}
System.out.println("Filler size " + filler.size());
этим пусть оракл занимается в своих сертификациях.
у нас задача другая - выяснить какой у чела подход к работе, чтобы он ченить и задизайнил и закодил.
User avatar
Kolbasoff
Уже с Приветом
Posts: 3481
Joined: 02 Jan 2005 22:10

Re: Придумать задачу для интервью по JAVA.

Post by Kolbasoff »

valchkou wrote:как вам задачка, не слишком ли тупая ?
Задачка хорошая, и мне нравится подход. Можно сразу дать кандидату задизайненный интерфэйс AccountDAO и класс AccountDAOMemoryImpl с "пустышками" TODO. Попросить имплементировать на простых Java Collections. Написать юнит-тесты для одного API.
User avatar
Мальчик-Одуванчик
Уже с Приветом
Posts: 15475
Joined: 27 Sep 2007 22:53

Re: Придумать задачу для интервью по JAVA.

Post by Мальчик-Одуванчик »

Krys-Krys wrote:
Вчера например выяснилось что товарищ и лист-то обойти нормально не может, а про хэш мэп намека не уловил тоже, и как хэш мэп работает и индекс в таблицах у БД тоже рассказать не осилил, при этом утверждал что Lead Java Developer.
А зачем все это нужно для обхода? Вроде все стандарные коллекции в яве, аналогично плюсам поддерживают итераторы, поэтому чтобы обойти такую коллекцию, как раз знать её потроха не обязательно.
User avatar
Мальчик-Одуванчик
Уже с Приветом
Posts: 15475
Joined: 27 Sep 2007 22:53

Re: Придумать задачу для интервью по JAVA.

Post by Мальчик-Одуванчик »

valchkou wrote:[mod_on]огромный оверквотинг поскипан[mod_off]
как вам задачка, не слишком ли тупая ?
Я бы вообще не стал ставить задачу покрытия тестами а просто бы поглядел выхлоп.
Гораздо боле важно чтобы тесты последовательно появлялись в процессе решения задачи, чтобы выяснить понимает ли соискатель TDD.
mynameiszb
Уже с Приветом
Posts: 1663
Joined: 16 Jul 2009 14:18
Location: Uganda

Re: Придумать задачу для интервью по JAVA.

Post by mynameiszb »

Мальчик-Одуванчик wrote:Я бы вообще не стал ставить задачу покрытия тестами а просто бы поглядел выхлоп.
Так когда вы тесты рожаете, то ведь можно разные подходы использовать. Где-то сначала вообще тесты как таковые пишут и лишь затем кодят. А где-то пишут класс с обвязкой, реализацию, а затем пакет тестов на него. И не факт, что ваш подход понравится человеку, который интервью проводит.

Return to “Работа и Карьера в IT”