Что делает Вас C программирование эксперта? [закрытый]

Когда вы объявляете ссылочную переменную (т. е. объект), вы действительно создаете указатель на объект. Рассмотрим следующий код, в котором вы объявляете переменную примитивного типа int:

int x;
x = 10;

В этом примере переменная x является int, и Java инициализирует ее для 0. Когда вы назначаете его 10 во второй строке, ваше значение 10 записывается в ячейку памяти, на которую указывает x.

Но когда вы пытаетесь объявить ссылочный тип, произойдет что-то другое. Возьмите следующий код:

Integer num;
num = new Integer(10);

Первая строка объявляет переменную с именем num, но она не содержит примитивного значения. Вместо этого он содержит указатель (потому что тип Integer является ссылочным типом). Поскольку вы еще не указали, что указать на Java, он устанавливает значение null, что означает «Я ничего не указываю».

Во второй строке ключевое слово new используется для создания экземпляра (или создания ) объекту типа Integer и переменной указателя num присваивается этот объект. Теперь вы можете ссылаться на объект, используя оператор разыменования . (точка).

Exception, о котором вы просили, возникает, когда вы объявляете переменную, но не создавали объект. Если вы попытаетесь разыменовать num. Перед созданием объекта вы получите NullPointerException. В самых тривиальных случаях компилятор поймает проблему и сообщит вам, что «num не может быть инициализирован», но иногда вы пишете код, который непосредственно не создает объект.

Например, вы можете имеют следующий метод:

public void doSomething(SomeObject obj) {
   //do something to obj
}

В этом случае вы не создаете объект obj, скорее предполагая, что он был создан до вызова метода doSomething. К сожалению, этот метод можно вызвать следующим образом:

doSomething(null);

В этом случае obj имеет значение null. Если метод предназначен для того, чтобы что-то сделать для переданного объекта, целесообразно бросить NullPointerException, потому что это ошибка программиста, и программисту понадобится эта информация для целей отладки.

Альтернативно, там могут быть случаи, когда цель метода заключается не только в том, чтобы работать с переданным в объекте, и поэтому нулевой параметр может быть приемлемым. В этом случае вам нужно будет проверить нулевой параметр и вести себя по-другому. Вы также должны объяснить это в документации. Например, doSomething может быть записано как:

/**
  * @param obj An optional foo for ____. May be null, in which case 
  *  the result will be ____.
  */
public void doSomething(SomeObject obj) {
    if(obj != null) {
       //do something
    } else {
       //do something else
    }
}

Наконец, Как определить исключение & amp; причина использования Трассировки стека

22
задан Bill the Lizard 30 July 2010 в 13:09
поделиться

19 ответов

Опыт является ключевым, зная "правила", и синтаксис языка является, конечно, необходимостью, но это - только основа. Изучение распространенных ошибок и идиом для того, чтобы сделать вещи правильно является ключевым.

Знание, что, если какие-либо ресурсы существуют для получения справки от того, в то время как программирование, и конечно, зная Вы - набор инструментальных средств. Я знал много C++ "эксперты", которые никогда не использовали отладчик или средство отслеживания памяти. Если Вы спрашиваете меня, быть экспертом в чем-то отличается от того, чтобы быть опытным в чем-то в Вас знающий все аспекты его.

14
ответ дан Adam 29 November 2019 в 03:19
поделиться

Как насчет того, что считал "Опытное Программирование C" липой Peter van der и запоминанием всего он покрыл?

0
ответ дан Slapout 29 November 2019 в 03:19
поделиться

Я думаю, что справедливый ответ понял бы все intracies ISO C.

действительность, как любой comp.lang.c постоянный клиент скажет Вам, то, что почти ничто, что должны сделать люди, не может быть сделано в чистом ISO C, поскольку обычно необходимо взаимодействовать со средой более четко определенным способом. Это - то, где POSIX появляется.

я не закрыл бы глаза ни на кого, кто самооценил себя как "Эксперт", у которого были основательное понимание языка C, достойное понимание того, что ISO C обещает, и понимание работы функций POSIX.

0
ответ дан Daniel Papasian 29 November 2019 в 03:19
поделиться

Я сказал бы, что для любого данного языка, опыт является ключевой вещью. Это просто занимает время, чтобы выучить язык и изучить API и 'идиомы', которые использует язык. Является ли кто-то экспертом в чем-нибудь или не является чем-то, что нужно спросить коллег. Для перефразирования Jeff Foxworthy, "При ответе на большее количество вопросов, чем Вы спрашивают, Вы могли бы быть экспертом".

0
ответ дан SteveDonie 29 November 2019 в 03:19
поделиться

Мастерство указателей.

0
ответ дан J Miller 29 November 2019 в 03:19
поделиться

Вообще говоря, никто присутствующий на ярмарке вакансий не является экспертом в C.

я сказал бы точку, в которой Вы - эксперт в C, то, где у Вас есть знание стандарта до такого градуса, что Вы понимаете, почему вещи как устройство Вареного пудинга работают, не нуждаясь в отдельных объяснениях. Кроме того, Вам нужны несколько больших проектов под Вашим поясом.

0
ответ дан Jim 29 November 2019 в 03:19
поделиться

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

, не смотря на документацию:

  • Знают приоритет основных операторов, таким образом, Вы не должны замусорить свой код parens, чтобы не получать неправильный порядок оценки

  • Быть в состоянии записать, что прототип для простого указателя функции

  • Быть довольным передачей указателя на указатель

  • Понимает блок, функцию, объем модуля

существует больше объектов как это.

, С другой стороны, я не думаю, что необходимо быть в состоянии понять или быть в состоянии выписать устройство Вареного пудинга, или фигура запутала конкурсы C в голове для рассмотрения себя экспертом.

, Даже если бы я считал меня экспертом (не уверенный я делаю) я, вероятно, никогда не требовал бы его в собеседовании.

Andrew

1
ответ дан Andrew Queisser 29 November 2019 в 03:19
поделиться

Вопросы об интервью как это всегда жестки. Вы хотите хвастаться немногим, но не походить на хвастуна.

, Если бы Вы сделали много с C (говорят, работал над проектами с открытым исходным кодом в C), тогда я ответил бы этим, но не только, указав на список достижений на Вашем резюме, но путем разговора об одном или нескольких из них и что было особенно интересно или сложно об этом (в отношении его использования C).

1
ответ дан nsayer 29 November 2019 в 03:19
поделиться

Вы - эксперт в C, когда можно записать собственный компилятор C.

2
ответ дан Steve Baker 29 November 2019 в 03:19
поделиться

Ответы на этот вопрос действительно делают для некоторого интересного чтения - кажется, что мы не можем надеть хорошую сходимость, что определяет эксперта здесь. Чем надежда там будет на более широком форуме как ярмарка заданий?:-)

, Но вставить мои собственные 2 цента... Я думаю, что существует два вида эксперта C.

  • существует эксперт в академическом смысле (поскольку в "мог записать их собственный компилятор", "написал работы").
  • существует прагматически настроенный эксперт. Я хотел бы определить это как "кого-то, кто может записать изящный код C, который любой может понять".

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

Проекты обычно имеют достаточно технической проблемы, не добавляя потребность во всех членах команды запомнить C '99 стандартов.

3
ответ дан Andrew Edgecombe 29 November 2019 в 03:19
поделиться

Некоторые могут не согласиться, но я думаю, что опыт является ключевым для того, чтобы быть экспертом на любом языке. Я знаю много людей, которые имеют мимо сертификационного теста, но не могли применить их знание ни к чему практическому в реальном мире.

, Таким образом, я думаю, в целом будучи экспертом, продукт наличия достаточного знания о данной теме (C) и затем применявший его к достаточному количеству сценариев реального мира, чтобы сделать ошибки, которые все мы делаем и изучаем от них.

3
ответ дан Smallinov 29 November 2019 в 03:19
поделиться

Это непосредственно не отвечает на Ваш вопрос (извините), но он мог бы помочь Вам решить, как Вы классифицируете себя.

Вместо просто "эксперта" и "невежественного новичка" я предпочитаю трехуровневую систему экспертных знаний, используемых средневековыми гильдиями:

Ученик

  • Все еще потребности к прочитайте руководство.
  • Понимание инструментов и методов его ремесла.
  • контроль Потребностями.

Подмастерье

  • Считало Effin' Руководство.
  • Компетентный со всеми стандартными инструментами и методами его ремесла.
  • Может работать один и может контролировать учеников на стандартных заданиях.

Ведущее устройство

  • , Возможно, Записало Effin' Руководство.
  • разрабатывает или принимает новые инструменты и методы.
  • Может наблюдать за главным проектом, который никогда, возможно, не предпринимался прежде.

На ярмарке вакансий? Нет никаких экспертов: общий эксперт.:)

5
ответ дан Pitarou 29 November 2019 в 03:19
поделиться

Вы - эксперт в c, если можно ответить на отмеченный "c" всех вопросов на stackoverflow.com без мигания.

6
ответ дан Ian Terrell 29 November 2019 в 03:19
поделиться

Все - эксперт на ярмарке вакансий

8
ответ дан Kristian 29 November 2019 в 03:19
поделиться

Кому-то менее квалифицированному, чем Вы, Вы - эксперт.

кому-то более квалифицированному, чем Вы, Вы - новичок.

16
ответ дан JosephStyons 29 November 2019 в 03:19
поделиться

Когда я взял интервью с Google, интервьюер сказал мне думать об этом этот путь. В масштабе 1-10 для мастерства C, для высказывания Вы "10", означает, что Вы написали работы и/или книги или были докладчиком на конференции по программированию в C. На основе этого очень немного людей являются 10-ми.

FWIW, я программировал в C в течение 15 лет. Я считаю меня очень опытным. Я, возможно, дал бы мне твердые 8 или 8.5.

18
ответ дан EmmEff 29 November 2019 в 03:19
поделиться

Я думаю, что проблема с этим вопросом состоит в том, что ответ довольно бессмыслен. Я вижу, что люди говорят об опыте, и это хорошо, и я вижу, что люди говорят о понимании запутанности языка, и это хорошо. Однако, если бы я нанимал кого-то для работы над моим проектом C, и у меня было волшебство, с 8 шарами, который дал бы мне точный ответ любому (и только один) вопрос, я никогда не просил бы, чтобы это, "Были они эксперт C".

, Почему?

Просто, потому что кто-то - эксперт C, не означает, что они - хороший разработчик программного обеспечения. Опыт и знакомство языка хороши, но я думаю, что они оба превзойдены тем неосязаемым, неисчислимым свойством, которое делает кого-то "хорошим разработчиком программного обеспечения". То, что я пытаюсь сказать, "Что делает Вас C программирование эксперта?" не полезный вопрос, потому что существуют более важные вопросы. Если кто-то будет Good Programmer, они повысятся до случая.

Как пример: можно быть C программирование эксперта и быть ужасными в команде. Можно быть C программирование эксперта и отказаться использовать управление версиями. Можно быть C программирование эксперта, не зная, как к на самом деле ДЕЛАЮТ что-либо с C.

"без" пунктов в тех предложениях одинаково важные вопросы: Что делает Вас хорошим программистом команды? Что лучший способ состоит в том, чтобы использовать SCM x или y? Как Вы приближаетесь к программированию клиент-серверной игры, или приложения биллинга, или веб-браузера, или операционной системы или компилятора, в C? Если кандидат сказал мне "нет, Я не эксперт C", но дал мне большие ответы на эти другие вопросы, я найму их в heartbeat по парню, которого сказало волшебство, с 8 шарами, был эксперт C, но не знает, как проверить его код в подрывной деятельности и не выучил новый язык за 12 лет.

30
ответ дан Max Cantor 29 November 2019 в 03:19
поделиться

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

0
ответ дан AviD 29 November 2019 в 03:19
поделиться

Возможность писать статьи / книги не обязательно делает человека опытным программистом. Это требует большого труда, практического опыта и хорошего понимания различных библиотек C.

Удачи!

1
ответ дан 29 November 2019 в 03:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: