The Six Most Common Species Of Code

User avatar
АццкоМото
Уже с Приветом
Posts: 15242
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: The Six Most Common Species Of Code

Post by АццкоМото »

Не, кошкин код прекрасен, хоть и бажный :)
Мат на форуме запрещен, блдж!
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: The Six Most Common Species Of Code

Post by crypto5 »

dimp wrote:Кстати, характерно, что ни один вариант не использует unsigned int :lol:
В jvm нету unsigned типов, нет и проблем с ними ))
In vino Veritas!
Zorkus
Уже с Приветом
Posts: 6969
Joined: 26 Feb 2011 17:40

Re: The Six Most Common Species Of Code

Post by Zorkus »

А вот и прекрасный вопрос для интервью. Как добавить в JVM unsigned int?
User avatar
Интеррапт
Уже с Приветом
Posts: 17281
Joined: 07 Sep 2011 10:05
Location: Seattle, WA

Re: The Six Most Common Species Of Code

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

Zorkus wrote:А вот и прекрасный вопрос для интервью. Как добавить в JVM unsigned int?
Что значит в JVM? На уровне байт-кода?
Zorkus
Уже с Приветом
Posts: 6969
Joined: 26 Feb 2011 17:40

Re: The Six Most Common Species Of Code

Post by Zorkus »

Открытый вопрос для обсуждения :-) Предположим, у меня есть исходники javac/hotspot, я хочу добавить новый примитивный тип uint, 32-битный, беззнаковый. Я естественно хочу, чтобы все было сделано аккуратно и оптимально. Расскажите, какие изменения в javac и JVM и где будут нужны.
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: The Six Most Common Species Of Code

Post by crypto5 »

Zorkus wrote:Открытый вопрос для обсуждения :-) Предположим, у меня есть исходники javac/hotspot, я хочу добавить новый примитивный тип uint, 32-битный, беззнаковый. Я естественно хочу, чтобы все было сделано аккуратно и оптимально. Расскажите, какие изменения в JVM и где будут нужны.
Лучше сразу лаптоп с сорцами дать и время засечь когда будет готово ))
In vino Veritas!
User avatar
Интеррапт
Уже с Приветом
Posts: 17281
Joined: 07 Sep 2011 10:05
Location: Seattle, WA

Re: The Six Most Common Species Of Code

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

Zorkus wrote:Открытый вопрос для обсуждения :-) Предположим, у меня есть исходники javac/hotspot, я хочу добавить новый примитивный тип uint, 32-битный, беззнаковый. Я естественно хочу, чтобы все было сделано аккуратно и оптимально. Расскажите, какие изменения в javac и JVM и где будут нужны.
Боюсь, что я завалил бы такое интервью.
Сабина
Уже с Приветом
Posts: 19041
Joined: 11 Jan 2012 09:25
Location: CA

Re: The Six Most Common Species Of Code

Post by Сабина »

Zorkus wrote:А вот и прекрасный вопрос для интервью. Как добавить в JVM unsigned int?
Опоздал :mrgreen:
https://blogs.oracle.com/darcy/entry/unsigned_api
https://www.youtube.com/watch?v=wOwblaKmyVw
User avatar
Интеррапт
Уже с Приветом
Posts: 17281
Joined: 07 Sep 2011 10:05
Location: Seattle, WA

Re: The Six Most Common Species Of Code

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

Сабина wrote:
Zorkus wrote:А вот и прекрасный вопрос для интервью. Как добавить в JVM unsigned int?
Опоздал :mrgreen:
https://blogs.oracle.com/darcy/entry/unsigned_api
Не... это совсем не то. Я этот блог еще в прошлом году читал. Тут чувак пишет про несколько добавленных классов во фреймворк, но уж никак не на уровне JVM добавление беззнаковых типов.
Zorkus
Уже с Приветом
Posts: 6969
Joined: 26 Feb 2011 17:40

Re: The Six Most Common Species Of Code

Post by Zorkus »

Интеррапт wrote:
Zorkus wrote:Открытый вопрос для обсуждения :-) Предположим, у меня есть исходники javac/hotspot, я хочу добавить новый примитивный тип uint, 32-битный, беззнаковый. Я естественно хочу, чтобы все было сделано аккуратно и оптимально. Расскажите, какие изменения в javac и JVM и где будут нужны.
Боюсь, что я завалил бы такое интервью.
Да ну ладно тебе. Естественно, кроме инженеров сана кто это делал в свое время, точно никто не расскажет - вопрос в том, кто насколько приблизится в своих рассуждениях к идеалу.

Но вопрос имеет массу плюсов для интервью, согласись. Если требуются не просто кодеры.

- К нему не подготовиться по книжке "cracking the coding interview: 150 typical questions"
- позволяет выделить людей, кто заглядывал под капот платформе, с которой работает
- людей, которые могут быстро набросать план решения задачи, которая кажется крайне трудной сходу
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: The Six Most Common Species Of Code

Post by crypto5 »

Интеррапт wrote:
Zorkus wrote:Открытый вопрос для обсуждения :-) Предположим, у меня есть исходники javac/hotspot, я хочу добавить новый примитивный тип uint, 32-битный, беззнаковый. Я естественно хочу, чтобы все было сделано аккуратно и оптимально. Расскажите, какие изменения в javac и JVM и где будут нужны.
Боюсь, что я завалил бы такое интервью.
Ну это типичная задача Ферми (http://en.wikipedia.org/wiki/Fermi_problem), более многоуровневая чем скажем вопрос сколько пианистов живет в Чикаго. Нужно сделать ряд предположений, о том как люди пишут обычно виртуальные машины, и компиляторы, и какие изменения нужно что бы поддержать новый тип: типа лексический/семантический и т.д. анализатор, формат байтока, jit compiler, либы наверное какие то и АПИ переписать, тесты поправить.
In vino Veritas!
slozovsk
Уже с Приветом
Posts: 13080
Joined: 14 Sep 2001 09:01
Location: Odessa, Ukraine -> Santa Clara, CA

Re: The Six Most Common Species Of Code

Post by slozovsk »

Я большой любитель рекурсии, много писал на LISP в свое время (там, обычно, рекурсия используется вместо циклов). Но, за двойную рекурсию на пустом месте, на интервью, могут дать по голове. Итерация - лучше всего, в данном случае.
User avatar
dotcom
Уже с Приветом
Posts: 9035
Joined: 25 Oct 2011 19:02
Location: SVO->ORD->SFO

Re: The Six Most Common Species Of Code

Post by dotcom »

slozovsk wrote:Я большой любитель рекурсии, много писал на LISP в свое время (там, обычно, рекурсия используется вместо циклов). Но, за двойную рекурсию на пустом месте, на интервью, могут дать по голове. Итерация - лучше всего, в данном случае.
В данном случае как раз правильно написать с простой рекурсией, если не спрашивают другого. Как в оргигинальной картиинке было упомянуто, этому учат в CS, если не 101, то к 301 точно. :)
Hamster
Уже с Приветом
Posts: 11475
Joined: 20 Nov 2000 10:01
Location: Escondido, CA

Re: The Six Most Common Species Of Code

Post by Hamster »

dotcom wrote:
slozovsk wrote:Я большой любитель рекурсии, много писал на LISP в свое время (там, обычно, рекурсия используется вместо циклов). Но, за двойную рекурсию на пустом месте, на интервью, могут дать по голове. Итерация - лучше всего, в данном случае.
В данном случае как раз правильно написать с простой рекурсией, если не спрашивают другого. Как в оргигинальной картиинке было упомянуто, этому учат в CS, если не 101, то к 301 точно. :)
Лично для меня двойная рекурсия была бы красным флагом. Ее применение означает, что испытуемый закончил CS 101, но лишен всякого представления о производительности написанного им кода.
Протоукр
NYgal
Уже с Приветом
Posts: 12303
Joined: 23 Mar 2004 21:10

Re: The Six Most Common Species Of Code

Post by NYgal »

Hamster wrote:
dotcom wrote:
slozovsk wrote:Я большой любитель рекурсии, много писал на LISP в свое время (там, обычно, рекурсия используется вместо циклов). Но, за двойную рекурсию на пустом месте, на интервью, могут дать по голове. Итерация - лучше всего, в данном случае.
В данном случае как раз правильно написать с простой рекурсией, если не спрашивают другого. Как в оргигинальной картиинке было упомянуто, этому учат в CS, если не 101, то к 301 точно. :)
Лично для меня двойная рекурсия была бы красным флагом. Ее применение означает, что испытуемый закончил CS 101, но лишен всякого представления о производительности написанного им кода.
Я рекурсией баловалась, когда есче на C писала, сразу после института, в конце 80х. Красиииво. И работало, что самое интересное, свою миссию выполняло. Интересно было бы как-то восстановить етот код.
User avatar
Komissar
Уже с Приветом
Posts: 64661
Joined: 12 Jul 2002 16:38
Location: г.Москва, ул. Б. Лубянка, д.2

Re: The Six Most Common Species Of Code

Post by Komissar »

компактно, но не эффективно, и мало-мальско сложные задачи трудно отдебажжить.
Ненавижу.
User avatar
Мальчик-Одуванчик
Уже с Приветом
Posts: 15475
Joined: 27 Sep 2007 22:53

Re: The Six Most Common Species Of Code

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

crypto5 wrote: Модные перцы пишут вот так:

Code: Select all

def fib: Stream[Int] = 0 #:: 1 #:: fib.zip(fib.tail).map{case (a,b) => a + b}
А еще вот так:

Code: Select all

fibs = 0 : 1 : [ a + b | (a, b) <- zip fibs (tail fibs)]
rorp
Уже с Приветом
Posts: 314
Joined: 24 May 2013 22:04

Re: The Six Most Common Species Of Code

Post by rorp »

slozovsk wrote:Я большой любитель рекурсии, много писал на LISP в свое время (там, обычно, рекурсия используется вместо циклов). Но, за двойную рекурсию на пустом месте, на интервью, могут дать по голове. Итерация - лучше всего, в данном случае.
+100500


Говнокод

Code: Select all

def fibonacci(n: BigInt): BigInt = {
     @tailrec
     def fib(i: BigInt, a: BigInt, b: BigInt): BigInt = {
        if (i < 0)
           a
        else
           fib(i - 1, b, a + b)
     }
     
     fib(n, 0, 1)
  }
транслируется модным компилятором в реально кошерный код по типу динамического программирования

Code: Select all

  public BigInt fibonacci(BigInt n)
  {
    return fib$1(n, BigInt..MODULE$.int2bigInt(0), BigInt..MODULE$.int2bigInt(1));
  }

  private final BigInt fib$1(BigInt i, BigInt a, BigInt b)
  {
    while (true)
    {
      if (i.$less(BigInt..MODULE$.int2bigInt(0))) {
        return 
          a;
      }
      b = a.$plus(b); a = b; i = i.$minus(BigInt..MODULE$.int2bigInt(1));
    }
  }
rorp
Уже с Приветом
Posts: 314
Joined: 24 May 2013 22:04

Re: The Six Most Common Species Of Code

Post by rorp »

Мальчик-Одуванчик wrote:
crypto5 wrote: Модные перцы пишут вот так:

Code: Select all

def fib: Stream[Int] = 0 #:: 1 #:: fib.zip(fib.tail).map{case (a,b) => a + b}
А еще вот так:

Code: Select all

fibs = 0 : 1 : [ a + b | (a, b) <- zip fibs (tail fibs)]
Те же яйца, вид сбоку. Если памяти не жалко, пойдет.
User avatar
dotcom
Уже с Приветом
Posts: 9035
Joined: 25 Oct 2011 19:02
Location: SVO->ORD->SFO

Re: The Six Most Common Species Of Code

Post by dotcom »

Hamster wrote: Лично для меня двойная рекурсия была бы красным флагом. Ее применение означает, что испытуемый закончил CS 101, но лишен всякого представления о производительности написанного им кода.
Я бы еще понял такие суровые нравы, если интервьюируемого попросили написать эффективный код, а он выдал бы стандартную "отписку". А иначе красный флаг вывешивать - это не больше чем самодурство интервьюирующего.
Hamster
Уже с Приветом
Posts: 11475
Joined: 20 Nov 2000 10:01
Location: Escondido, CA

Re: The Six Most Common Species Of Code

Post by Hamster »

dotcom wrote:
Hamster wrote: Лично для меня двойная рекурсия была бы красным флагом. Ее применение означает, что испытуемый закончил CS 101, но лишен всякого представления о производительности написанного им кода.
Я бы еще понял такие суровые нравы, если интервьюируемого попросили написать эффективный код, а он выдал бы стандартную "отписку". А иначе красный флаг вывешивать - это не больше чем самодурство интервьюирующего.
То, что код должен быть эффективным (или по крайней мере не работать экспоненциальное время) - подразумевается само собой.

Если этот перец пишет код с двойной рекурсией, работающий за время O(2^n), на интервью, когда он может подумать еще минуту и написать код со временем O(n), то какие у меня будут гарантии, что он не станет так же подходить к написанию продукционного кода?

И в чем вообще смысл этой задачи? Проверить, что человек знает, что такое число Фибоначчи? Для этого необязательно писать код. Проверить, что он знает, что такое рекурсия? Подразумевается, что это знает любой человек, пытающийся устроиться на работу программистом. Логически следует, что это проверка на способность писать качественный код. Которым рекурсия, очевидно, не является.
Протоукр
Hamster
Уже с Приветом
Posts: 11475
Joined: 20 Nov 2000 10:01
Location: Escondido, CA

Re: The Six Most Common Species Of Code

Post by Hamster »

Кстати, а кто-нибудь может придумать, как посчитать в целых числах быстрее O(n)?

Вариант от Math Ph.D. это в принципе O(ln(n)), если считать, что экспоненциация это O(ln(n)). Но он на плавающей точке и на целые числа очевидным способом не обобщается.

Lookup table не предлагать (хотя в большинстве случаев это будет самым быстрым вариантом). Граничные условия: 1 <= n <= 93, fib(n) <= 2^64.
Протоукр
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: The Six Most Common Species Of Code

Post by crypto5 »

По ссылке из самого первого поста темы есть за константу ))
In vino Veritas!
User avatar
Dweller
Уже с Приветом
Posts: 12257
Joined: 20 Dec 2000 10:01
Location: Bellevue, WA

Re: The Six Most Common Species Of Code

Post by Dweller »

Hamster wrote:Кстати, а кто-нибудь может придумать, как посчитать быстрее
можно изгалиться с multi-threading или на hadoop, но в этом случае наверное лучше считать по приближенной формуле а не точное LongInt значение :)
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: The Six Most Common Species Of Code

Post by crypto5 »

Hamster wrote:Кстати, а кто-нибудь может придумать, как посчитать в целых числах быстрее O(n)?

Вариант от Math Ph.D. это в принципе O(ln(n)), если считать, что экспоненциация это O(ln(n)). Но он на плавающей точке и на целые числа очевидным способом не обобщается.

Lookup table не предлагать (хотя в большинстве случаев это будет самым быстрым вариантом). Граничные условия: 1 <= n <= 93, fib(n) <= 2^64.
Известно точное решение за O(logn), думаю можно найти в википедии
In vino Veritas!

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