Re[5]: Пригласите меня к себе на собеседование!
От: mgu  
Дата: 25.04.18 00:23
Оценка:
Здравствуйте, Muxa, Вы писали:

M>>>>А если в Королеве придешь в рабочий день?

RF>>>Только в обеденный перерыв (с 13 до 14). Или после 17:35. (В пятницу--после 16:20).
AN>>Ты и в Москву на собеседование в 19:00 — 19:30 успеешь.
M>Слишком поздно.
M>Мамка заругает.

Гопники...
Re[11]: Пригласите меня к себе на собеседование!
От: mgu  
Дата: 25.04.18 00:45
Оценка:
Здравствуйте, VladFein, Вы писали:

VF>Я это и не предлагаю; просто можно заметить, что в 64-битный unsigned long помещается только 20!, и дальше идти по циклу не стоит...


А вот, кстати, интересно, можно ли написать функцию, которая возвращает 21! и более в виде строки цифр? Что-то у меня математического аппарата не хватает.
Re[7]: Пригласите меня к себе на собеседование!
От: _ABC_  
Дата: 25.04.18 00:52
Оценка:
Здравствуйте, AlexRK, Вы писали:

ARK>

пойду повешусь... я не знаю... какие отличия между C# и Java

Если опыт реален, конечно.

Re[6]: Пригласите меня к себе на собеседование!
От: Блудов Павел Россия  
Дата: 25.04.18 04:38
Оценка:
Здравствуйте, mgu, Вы писали:

P>>string p = 25.ToString();

mgu>string -- это объект с поведением примитивного типа, это во многих яхыках так, в т. ч. и С++-ах с человеческим лицом.

Речь не о строках, а о магии боксинга для value-типов в C#.
Re[5]: Пригласите меня к себе на собеседование!
От: elmal  
Дата: 25.04.18 05:09
Оценка:
Здравствуйте, mgu, Вы писали:

mgu>Так вы уже практически всё и рассказали. Эти вопросы, скорее, к архитектору. А знания си-шарпа как языка -- это отличия класса от структуры и using от using.

Я понятия не имею, чем должен заниматься архитектор, а то директор сам меня так называет, хотя я 99 процентов времени обычной разработкой занимаюсь, а принятие стратегических решений один черт за начальством и за исполнителями. Могу только советовать как консультант. У юниоров полномочия 1 в 1 как у меня, если что, хоть и явный юниор у нас один, и выше этого уровня он вряд ли когда поднимется по объектичным причинам, хоть и его уровень на много порядков круче чем уровень топикстартера.

mgu>А зачем приглашали питониста? Джавистов-то как собак нерезаных.

Затем, что нам язык программирования не важен. Тот, на котором мы пишем, один черт никто не знает, наверное единственные в мире кто его в продакшене применяет . Но платформа JVM. А вот общая эрудиция важна, как и умение программировать и знание алгоритмов и общего курса Computer Science. Если опыт только Java, думает только энтерпрайзами, формочками и базами данных, а весь опыт это багфикс какого легаси — это наоборот недостатком будет. Черти какой хайлоад тоже нам не нужен.
Re[6]: Пригласите меня к себе на собеседование!
От: Privalov  
Дата: 25.04.18 05:27
Оценка:
Здравствуйте, mgu, Вы писали:

P>>string p = 25.ToString();


mgu>string -- это объект с поведением примитивного типа, это во многих яхыках так, в т. ч. и С++-ах с человеческим лицом.


Про это уже объяснили.

P>>int c = a + b;

P>>чем
P>>int c = a.add(b);

mgu>В Джаве есть плюс как сложение, от сотворения мира.


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

mgu>Если блюёт исключениями, то оборачивать всю функцию в try/catch нэ надо.


Может и не надо. Но я не рассуждаю, как надо, а как нет. Код, с которым мне приходилось работать, оборачивали. Видимо, боялись, что полетит исключение из catch.
И ставили throws Exception потому, что тупо лень было перечислять весь список исключений, которые мог выбросить метод.
Re[12]: Пригласите меня к себе на собеседование!
От: koenig  
Дата: 25.04.18 05:54
Оценка: +1
mgu>А вот, кстати, интересно, можно ли написать функцию, которая возвращает 21! и более в виде строки цифр? Что-то у меня математического аппарата не хватает.

а вот это тебе аукается нелюбовь к фреймворкам и желание делать все самому. бери готовые
Re[11]: Пригласите меня к себе на собеседование!
От: AleksandrN Россия  
Дата: 25.04.18 07:14
Оценка:
Здравствуйте, VladFein, Вы писали:

VF>Я это и не предлагаю; просто можно заметить, что в 64-битный unsigned long помещается только 20!, и дальше идти по циклу не стоит...


Задачу на факториал на собеседовании имеет смысл спрашивать только для того, что бы поговорит с кандидатом о двух вещах:
1. Понимание размера данных и переполнения.
2. Понимание отличий рекурсии от итерации.

Для практической задачи на вычисление факториала с ограничением входных параметров, лучше не по циклу идти, а делать так:
unsigned long fact( unsigned long value )
{
    // Для 64-х битной платформы.
    static const unsigned long MAX_FACT_ARG = 20;
    static const unsigned long FACT[ MAX_FACT_ARG + 1 ] = 
        {
            1,
            1,
            2,
            6,
            24,
            120,
            720,
            5040,
            40320,
            362880,
            3628800,
            39916800,
            479001600,
            6227020800,
            87178291200,
            1307674368000,
            20922789888000,
            355687428096000,
            6402373705728000,
            121645100408832000,
            2432902008176640000
        };
        
    if ( value > MAX_FACT_ARG )
        return -1;
        
    return FACT[ value ];
}


Или воспользоваться подходящей библиотекой.
Re[12]: Пригласите меня к себе на собеседование!
От: aik Австралия  
Дата: 25.04.18 08:12
Оценка: +1
Здравствуйте, mgu, Вы писали:

mgu>А вот, кстати, интересно, можно ли написать функцию, которая возвращает 21! и более в виде строки цифр? Что-то у меня математического аппарата не хватает.


Не хватает аппарата — займи у питона:
>>> math.factorial(50)
30414093201713378043612608166064768844377641568960512000000000000
Re[6]: Пригласите меня к себе на собеседование!
От: Тёмчик Австралия жж
Дата: 25.04.18 09:52
Оценка:
Здравствуйте, AlexGin, Вы писали:

AG>P.S. Статический метод — это метод не принадлежащий ни одному из объектов (экземпляров) класса.

Как может метод принадлежать экземпляру? Метод всегда принадлежит классу. Просто обычный метод применяется к instance, т.е. к полям объекта, а статический — к классу, т.е. к полям класса.


AG>Он просто объявлен в пространстве имён данного класса. Фактически — это аналог глобальной функции (просто объявленной в составе класса).

Одинаковая реализация не говорит, что это идеалогически одно и то же. И кроме того, в чистых OO языках нет глобальных функций.
Re[5]: Пригласите меня к себе на собеседование!
От: Тёмчик Австралия жж
Дата: 25.04.18 09:55
Оценка: :)
Здравствуйте, AlexRK, Вы писали:

RF>>>Тем, что он выполняется для всех объектов этого класса при его вызове.


AG>>Значит ли это, что если НЕТ НИ ОДНОГО объекта этого класса, что статический метод выполняться НЕ БУДЕТ?


ARK>На некоторых компиляторах будет, но медленно. Но вообще это undefined behavior.


Будет на всех и очень быстро. Когда много объектов этого класса, тогда медленно.
Re[12]: Пригласите меня к себе на собеседование!
От: AlexRK  
Дата: 25.04.18 11:12
Оценка: +1
Здравствуйте, mgu, Вы писали:

mgu>А вот, кстати, интересно, можно ли написать функцию, которая возвращает 21! и более в виде строки цифр? Что-то у меня математического аппарата не хватает.


Ну вот что-то типа того — на си краше. Получился какой-то кусок говна, но вроде работает:

https://ideone.com/3rcJlH

using System;

namespace Symbolic
{
    class Program
    {
        static char Char(int d)
        {
            return (char)(d + (int)'0');
        }

        static int Digit(char c)
        {
            return (int)(c - '0');
        }

        static string Multiply(string a, string b)
        {
            int[] acc = new int[a.Length + b.Length];

            for (int i = a.Length - 1; i >= 0; i--)
            {
                int rest = 0;
                for (int j = b.Length - 1; j >= 0; j--)
                {
                    int temp = acc[i + j + 1] + (Digit(a[i]) * Digit(b[j])) + rest;
                    acc[i + j + 1] = temp % 10;
                    rest = temp / 10;
                }
                acc[i] = acc[i] + rest;
            }

            int start = 0;
            while (acc[start] == 0)
            {
                start++;
            }

            char[] result = new char[acc.Length - start];
            for (int i = start; i < acc.Length; i++)
            {
                result[i - start] = Char(acc[i]);
            }

            return new string(result);
        }

        static string Previous(char c)
        {
            return Char(Digit(c) - 1).ToString();
        }

        static string Decrement(string a)
        {
            string prev = Previous(a[0]);

            if (a.Length == 1)
            {
                return prev;
            }

            if (a[a.Length - 1] != '0')
            {
                var rest = a.Substring(0, a.Length - 1);

                return rest + Previous(a[1]);
            }
            else
            {
                var rest = a.Substring(0, a.Length - 2);

                if ((rest == "") && (prev == "0"))
                    prev = "";

                return rest + prev + '9';
            }
        }

        static string Fact(string value)
        {
            string result = "1";

            while (value != "0")
            {
                result = Multiply(result, value);
                value = Decrement(value);
            }

            return result;
        }

        static void Main(string[] args)
        {
            Console.WriteLine(Fact("30"));
        }
    }
}


(Никаких проверок от ошибок нету.)
Re[2]: Пригласите меня к себе на собеседование!
От: Victor Ivanidze Россия  
Дата: 25.04.18 15:02
Оценка:
M>... есть ненулевой риск нарваться на Ашишкутропаля, которому карри за завтраком не понравился...

Не вижу принципмиального отличия от похмельного А.Ф. Бздыкина.
Re[7]: Пригласите меня к себе на собеседование!
От: AlexGin Беларусь  
Дата: 25.04.18 15:06
Оценка: +1
Здравствуйте, Тёмчик, Вы писали:

Тё>Здравствуйте, AlexGin, Вы писали:


AG>>P.S. Статический метод — это метод не принадлежащий ни одному из объектов (экземпляров) класса.

Тё>Как может метод принадлежать экземпляру? Метод всегда принадлежит классу. Просто обычный метод применяется к instance, т.е. к полям объекта, а статический — к классу, т.е. к полям класса.
Что за дичь! К каким полям класса? Разве что к статическим полям...

Вот пример:
class CMyClass
{
public:
    CMyClass() // c-tor
    {
    }
    void foo()
    {
    }
private:
    int    m_field1;    
    static double m_field2;
public:
    static void bar()
    {
        std::cout << m_field1 << std::endl; // OMG!!!
        std::cout << m_field2 << std::endl; 
    }
};

У кого какие мнения — строка с OMG:
— скомпилируется/ не скомпилируется
— выполниться/ не выполниться

AG>>Он просто объявлен в пространстве имён данного класса. Фактически — это аналог глобальной функции (просто объявленной в составе класса).

Тё>Одинаковая реализация не говорит, что это идеалогически одно и то же. И кроме того, в чистых OO языках нет глобальных функций.
Я в курсе, что в новых ЯП нет понятия глобальная функция, тем не менее — не будешь спорить, что статические — аналоги глобальных.
НАПОМНЮ — речь шла об C++
Отредактировано 25.04.2018 15:13 AlexGin . Предыдущая версия .
Re[6]: Пригласите меня к себе на собеседование!
От: AlexGin Беларусь  
Дата: 25.04.18 15:08
Оценка:
Здравствуйте, Тёмчик, Вы писали:

Тё>Здравствуйте, AlexRK, Вы писали:


RF>>>>Тем, что он выполняется для всех объектов этого класса при его вызове.


AG>>>Значит ли это, что если НЕТ НИ ОДНОГО объекта этого класса, что статический метод выполняться НЕ БУДЕТ?


ARK>>На некоторых компиляторах будет, но медленно. Но вообще это undefined behavior.


Тё>Будет на всех и очень быстро. Когда много объектов этого класса, тогда медленно.


Какую траву куришь, Артём?
Re[6]: Пригласите меня к себе на собеседование!
От: mgu  
Дата: 25.04.18 23:06
Оценка:
Здравствуйте, elmal, Вы писали:

E>Я понятия не имею, чем должен заниматься архитектор, а то директор сам меня так называет, хотя я 99 процентов времени обычной разработкой занимаюсь, а принятие стратегических решений один черт за начальством и за исполнителями. Могу только советовать как консультант. У юниоров полномочия 1 в 1 как у меня, если что, хоть и явный юниор у нас один, и выше этого уровня он вряд ли когда поднимется по объектичным причинам, хоть и его уровень на много порядков круче чем уровень топикстартера.


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

Интересно, а какие объективные причины могут мешать профессионально расти?

mgu>>А зачем приглашали питониста? Джавистов-то как собак нерезаных.

E>Затем, что нам язык программирования не важен. Тот, на котором мы пишем, один черт никто не знает, наверное единственные в мире кто его в продакшене применяет . Но платформа JVM. А вот общая эрудиция важна, как и умение программировать и знание алгоритмов и общего курса Computer Science. Если опыт только Java, думает только энтерпрайзами, формочками и базами данных, а весь опыт это багфикс какого легаси — это наоборот недостатком будет. Черти какой хайлоад тоже нам не нужен.

Пойду повешусь на бис.
Re[7]: Пригласите меня к себе на собеседование!
От: mgu  
Дата: 25.04.18 23:18
Оценка:
Здравствуйте, Privalov, Вы писали:

P>>>string p = 25.ToString();


mgu>>string -- это объект с поведением примитивного типа, это во многих яхыках так, в т. ч. и С++-ах с человеческим лицом.


P>Про это уже объяснили.


А я всё равно ничего не понял, в чём фишка-то? И ещё больше зауважал JavaScript, где нет этих Баден-Баденов.

P>>>int c = a + b;

P>>>чем
P>>>int c = a.add(b);

mgu>>В Джаве есть плюс как сложение, от сотворения мира.


P>Только для примитивных типов. Если кому-то понадобятся, к примеру, комплексные числа, плюс работать не будет. Впрочем, может, в новой Java все изменилось, я давно ее не видел.


В нашем колхозе мнимые числа только в отчётности. А точки складываем методом, да.

mgu>>Если блюёт исключениями, то оборачивать всю функцию в try/catch нэ надо.


P>Может и не надо. Но я не рассуждаю, как надо, а как нет. Код, с которым мне приходилось работать, оборачивали. Видимо, боялись, что полетит исключение из catch.


Ужас какой.

P>И ставили throws Exception потому, что тупо лень было перечислять весь список исключений, которые мог выбросить метод.


Так и ссылочные типы бы выбросили до кучи, оставили бы вместо них Object.
Re[13]: Пригласите меня к себе на собеседование!
От: mgu  
Дата: 25.04.18 23:22
Оценка:
Здравствуйте, koenig, Вы писали:

mgu>>А вот, кстати, интересно, можно ли написать функцию, которая возвращает 21! и более в виде строки цифр? Что-то у меня математического аппарата не хватает.


K>а вот это тебе аукается нелюбовь к фреймворкам и желание делать все самому. бери готовые


Ненавижу фреймворки и велосипеды.
Re[8]: Пригласите меня к себе на собеседование!
От: ned Австралия  
Дата: 26.04.18 01:22
Оценка:
Здравствуйте, AlexGin, Вы писали:

AG>У кого какие мнения — строка с OMG:

AG>- скомпилируется/ не скомпилируется

Если нет объектов этого класса, то скомпилируется. Но медленно!
Re[8]: Пригласите меня к себе на собеседование!
От: Тёмчик Австралия жж
Дата: 26.04.18 03:07
Оценка: :)
Здравствуйте, AlexGin, Вы писали:

Тё>>Как может метод принадлежать экземпляру? Метод всегда принадлежит классу. Просто обычный метод применяется к instance, т.е. к полям объекта, а статический — к классу, т.е. к полям класса.

AG>Что за дичь! К каким полям класса? Разве что к статическим полям...
Статик это и есть поле класса. А ещё, копий класса может быть несколько- по одной на ClassLoader

AG>>>Он просто объявлен в пространстве имён данного класса. Фактически — это аналог глобальной функции (просто объявленной в составе класса).

Нет. См ниже мой коммент.

Тё>>Одинаковая реализация не говорит, что это идеалогически одно и то же. И кроме того, в чистых OO языках нет глобальных функций.

AG>Я в курсе, что в новых ЯП нет понятия глобальная функция, тем не менее — не будешь спорить, что статические — аналоги глобальных.
Нет

AG>НАПОМНЮ — речь шла об C++

Где? C++ это гибрид ежа с ужом, потому приводить в пример его для подтверждения OOP концепций неправильно.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.