| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .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; |
| Автор: ptybn8407 13.1.2014, 13:56 | ||||||
По 1-му. Там было указано: "Пусть есть строка с TableID = 1 и несколько TableItem с TableID = 1. Нужно изменить TableItem на 2". Я подумал, что внешний ключ с апдейтом лучшее решение. По 4-му я указал проблему с блокировками. По 3-му вопросу - я сломал голову, пытаясь получить формулу. Я попросил подсказать с вопросами, а мне в ответ "Мы-то знаем много чего, но зачем это расписывать - не на собеседовании ж мы". Ну что, спасибо. |
| Автор: jonie 13.1.2014, 15:10 |
Вас не просили нигде получать фомулу. Вас просили пояснить что делает код. а архитектурные проблемы не видите? А sql injection не? А отсуствие Dispose() вызовов (я уж молчу про вообще закрытие коннешена)? А обработки нормальной ошибок? А то что это впринципе устаревшая методика разработки сервисов Вы тоже не видите? Просто быть может вам стоит подучить C# ?) |
| Автор: ptybn8407 13.1.2014, 15:33 | ||
Да, просили указать что делает код. Но еще в задании было "Что делает этот код, какие плюсы и минусы и как его улучшить". Что можно улучшить в такой примитивной рекурсии? А подучить C# - да, стоит. Учится вообще всегда полезно, как я считаю)) |
| Автор: jonie 13.1.2014, 18:57 |
ну и указали бы что считает что-то вроде (пишу тут пределы лень проверять): \sum_{0}^{c-1} {x_{i-1} + x_{i-2}}\\ x_{0}=a, x_{1}=b, Или говоря языком - сумма каждого следующего значения равна сумме двух предыдущих. ну и соответвественно это считать можно и не рекурсией (вспоминаем школу)... |