Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Вопросы по C#


Автор: ptybn8407 13.1.2014, 11:03
На собеседовании задали несколько вопросов. Получил отказ без пояснений. Хотелось бы узнать точные ответы на них.

1 вопрос.
Пусть есть 2 таблицы
table Table
  TableID int,
  ... 

table TableItem
  TableItemID int,
  TableID int, 
  ... 

Пусть в Table строка с TableID = 1 и в TableItem есть несколько строк с TableID = 1. Необходимо поменять TableID на 2.
  
Я предложил такой вариант решения.
Alter table TableItem add 
foreign key (TableID) REFERENCES Table (TableID) on update cascade


2 вопрос
Что делает этот код, какие плюсы и минусы и как его улучшить?
static int Func( int a, int b, int c )
{
  if ( 1 < c )
    return Func( b, b + a, c - 1 );
  else
    return a;
}


3 вопрос
Что делает этот код, какие плюсы и минусы и как его улучшить(причем тут есть несколько улучшений как мне сказали хотя это просто сортировка пузырьком)?
int[] Sort( int[] arr )
{
  for( int i = 0 ; i < arr.Length ; i ++ )
    for ( int j = 0 ; j < arr.Length - 1 ; j ++ )
      if ( arr[ j ] > arr[ j + 1 ] )
      {
        int t = arr[ j ];
        arr[ j ] = arr[ j + 1 ];
        arr[ j + 1 ] = t;
      }
  return arr;
}

4 вопрос
Найти все возможные проблемы в коде. Необходимо составить пары "Проблема" - "Решение":
[WebMethod]
public Order LoadOrderInfo( string orderCode )
{
  try
  {
    Debug.Assert( null != orderCode && orderCode != "" );
    Stopwatch stopWatch = new Stopwatch();
    stopWatch.Start();
    lock ( cache )
    {
      if ( cache.ContainsKey( orderCode ) )
      {
        stopWatch.Stop();
        logger.Log( "INFO",
          "Elapsed - {0}", stopWatch.Elapsed );
        return cache[ orderCode ];
      }
    }
    string queryTemplate =
      "SELECT OrderID, CustomerID, TotalMoney" +
      "  FROM dbo.Orders where OrderCode='{0}'";
    string query = string.Format( queryTemplate, orderCode );
    SqlConnection connection =
      new SqlConnection( this.connectionString );
    SqlCommand command =
      new SqlCommand( query, connection );
    connection.Open();
    SqlDataReader reader = command.ExecuteReader();
    if ( reader.Read() )
    {
      Order order = new Order(
        ( string ) reader[ 0 ],
        ( string ) reader[ 1 ],
        ( int ) reader[ 2 ] );
      lock ( cache )
      {
        if ( !cache.ContainsKey( orderCode ) )
          cache[ orderCode ] = order;
      }
      stopWatch.Stop();
      logger.Log( "INFO", "Elapsed - {0}", stopWatch.Elapsed );
      return order;
    }
    stopWatch.Stop();
    logger.Log( "INFO", "Elapsed - {0}", stopWatch.Elapsed );
    return null;
  }
  catch ( SqlException ex )
  {
    logger.Log( "ERROR", ex.Message );
    throw new ApplicationException( "Error" );
  }
}
public IDictionary<string, Order> cache;

Автор: jonie 13.1.2014, 11:17
Цитата(ptybn8407 @  13.1.2014,  12:03 Найти цитируемый пост)

Пусть в Table строка с TableID = 1 и в TableItem есть несколько строк с TableID = 1. Необходимо поменять TableID на 2.

вас просили Update сделать поди, притом простейший.

Цитата(ptybn8407 @  13.1.2014,  12:03 Найти цитируемый пост)

3 вопрос
Что делает этот код, какие плюсы и минусы и как его улучшить(причем тут есть несколько улучшений как мне сказали хотя это просто сортировка пузырьком)?

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

На остальные - где ваши ответы? Мы-то знаем много чего, но зачем это расписывать - не на собеседовании ж мы.

Автор: ptybn8407 13.1.2014, 13:56
Цитата(jonie @ 13.1.2014,  11:17)
Цитата(ptybn8407 @  13.1.2014,  12:03 Найти цитируемый пост)

Пусть в Table строка с TableID = 1 и в TableItem есть несколько строк с TableID = 1. Необходимо поменять TableID на 2.

вас просили Update сделать поди, притом простейший.

Цитата(ptybn8407 @  13.1.2014,  12:03 Найти цитируемый пост)

3 вопрос
Что делает этот код, какие плюсы и минусы и как его улучшить(причем тут есть несколько улучшений как мне сказали хотя это просто сортировка пузырьком)?

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

На остальные - где ваши ответы? Мы-то знаем много чего, но зачем это расписывать - не на собеседовании ж мы.

По 1-му. Там было указано: "Пусть есть строка с TableID = 1 и несколько TableItem с TableID = 1. Нужно изменить TableItem на 2". Я подумал, что внешний ключ с апдейтом лучшее решение.

По 4-му я указал проблему с блокировками. По 3-му вопросу - я сломал голову, пытаясь получить формулу.

Я попросил подсказать с вопросами, а мне в ответ "Мы-то знаем много чего, но зачем это расписывать - не на собеседовании ж мы". Ну что, спасибо.


Автор: jonie 13.1.2014, 15:10
Цитата(ptybn8407 @  13.1.2014,  14:56 Найти цитируемый пост)
По 3-му вопросу - я сломал голову, пытаясь получить формулу.

Вас не просили нигде получать фомулу. Вас просили пояснить что делает код.
Цитата(ptybn8407 @  13.1.2014,  14:56 Найти цитируемый пост)

По 4-му я указал проблему с блокировками.

а архитектурные проблемы не видите? А sql injection не? А отсуствие Dispose() вызовов (я уж молчу про вообще закрытие коннешена)? А обработки нормальной ошибок? А то что это впринципе устаревшая методика разработки сервисов Вы тоже не видите? Просто быть может вам стоит подучить C# ?)

Автор: ptybn8407 13.1.2014, 15:33
Цитата(jonie @ 13.1.2014,  15:10)
Цитата(ptybn8407 @  13.1.2014,  14:56 Найти цитируемый пост)
По 3-му вопросу - я сломал голову, пытаясь получить формулу.

Вас не просили нигде получать фомулу. Вас просили пояснить что делает код.
Цитата(ptybn8407 @  13.1.2014,  14:56 Найти цитируемый пост)

По 4-му я указал проблему с блокировками.

а архитектурные проблемы не видите? А sql injection не? А отсуствие Dispose() вызовов (я уж молчу про вообще закрытие коннешена)? А обработки нормальной ошибок? А то что это впринципе устаревшая методика разработки сервисов Вы тоже не видите? Просто быть может вам стоит подучить C# ?)

Да, просили указать что делает код. Но еще в задании было "Что делает этот код, какие плюсы и минусы и как его улучшить". Что можно улучшить в такой примитивной рекурсии? А подучить C# - да, стоит. Учится вообще всегда полезно, как я считаю))

Автор: jonie 13.1.2014, 18:57
Цитата(ptybn8407 @  13.1.2014,  16:33 Найти цитируемый пост)

Да, просили указать что делает код

ну и указали бы что считает что-то вроде (пишу тут пределы лень проверять):
\sum_{0}^{c-1} {x_{i-1} + x_{i-2}}\\
x_{0}=a, x_{1}=b,

Или говоря языком - сумма каждого следующего значения равна сумме двух предыдущих.

ну и соответвественно это считать можно и не рекурсией (вспоминаем школу)...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)