2010-05-17 7 views
20

저는 최근에 많은 .NET 프로그래머들과 인터뷰를 해왔고 IDisposable이 무엇인지, 어떤 용도로 사용되는지 알고있는 사람을 만났습니다. 4-6 년의 경험을 가진 사람이 그 사실을 알기를 기대하는 것은 정말 무리입니까?면접 질문 : IDisposable 이해하기가 어렵습니까?

+2

관련이 있지만 약간 다른 메모에서 인터뷰에서 "처분 패턴"을 설명하는 후보자를 묻는 메시지가 자주 들립니다. 내가 처분 패턴을 알고 사용하고있는 동안, 나는 그것에 대한 지식이 개발자의 품질이나 깊이에 대한 유용한 지표가 아니라는 것을 알았다. 부분적으로 당신이 * IDisposable (* 사용 * 말하기 - 말장난)을 구현하는 경우에만 필요하기 때문에, 그리고 어쨌든 훌륭한 패턴이 아니기 때문에 부분적으로 필요하기 때문입니다. – hemp

답변

32

아니요, 죄송합니다. 그들은 IDisposable을 모르는 경우 .NET에서 객체 수명을 이해하지 못하므로 GC이 어떻게 작동하는지 알 수 없다고 가정하는 것이 안전합니다. 4-6 년의 경력을 쌓은 사람에게 그는 "드래그 앤 드롭"개발자이거나 거짓말 쟁이입니다. 어느 쪽이든, 고용 할 필요가 없습니다.

+12

글쎄, 그는 같은 첫 해의 경험을 4-6 번 가질 수있다 :) – kemiller2002

+3

@ 케빈 : 너는 머리에 못을 박았다. 많은 프로그래머들이 일하는 (그러나 잘못 작성된) 소프트웨어를 작성하는 데 필요한 것 이상을 배우지 않고 오랜 시간 동안 지내고 있습니다. –

+1

-1이 대답은 개발자가 IDisposable을 알지 못한다고 가정 할 때 생산성이 떨어질 수 있다고 가정합니다. – RollRoll

8

나는 그렇게 생각하지 않을 것이다. IDisposable이 무엇인지 이해하지 못하면 using 문을 언제 사용해야하는지 제대로 이해할 수 있습니까?

내 생각에 많은 사람들이 특정 코드를 문장을 사용하는 것으로 알고 있지만 어째서 어느 것이 두려운 것인지 알 수 없을 것입니다.

+4

화물 컬트 프로그래밍은 어디에서나 발생합니다. 우리는 .NET에서도 그렇게 놀랄 필요가 없습니다. – Oded

+1

오, 오해하지 마라, 나는 그것에 놀라지 않을 것이다. 코드를 볼 때 자신이 "이 작업을 실제로 수행 했는가, 아니면 수행하지 않았는지를 확인했기 때문에 수행 했는가?"라고 물어봐야 할 때가 조금씩 괴롭습니다. – kemiller2002

+0

@Oded, 나는 LOL에 가야했다 - 많은 사람들이화물 숭배가 무엇인지 안다. – code4life

2

IDisposable에 대한 지식이 너무 낮습니다. 닫아야 할 리소스가 있고 using 문을 사용하지 않을 때마다 IDisposable을 사용해야합니다.

+4

사실, * IDisposable을 구현하는 클래스를 사용해야합니다. 그리고 내가 본 적이 있거나 사용 된 대부분의 모든 일회용품은 마무리 자에 폐기되기 때문에, 폐기하거나 잊지 않고 아무런 문제가없는 것을 잊을 수도 있습니다. – cHao

2

방금 ​​오늘 취업 면담을 한 데서 나는 그런 질문을 받았다면 좋겠다. 모든 프로그래머는 IDisposable에 대해 알아야합니다. 논쟁의 여지는 있지만 using 문 때문에 이해해야 할 가장 중요한 인터페이스입니다.

4 ~ 6 년의 경험을 가진 프로그래머는이 사실을 알지 못한다는 것을 알게되었습니다.

7

나는 그 수준의 경험을 가진 개발자가 IDisposable을 알기를 기대합니다. 그러나 모든 세부 사항을 파헤 치기를 원하면 복잡한 주제입니다. Joe Duffy wrote a rather elaborate post on the subject some years ago. 나는 모든 개발자들이 그 게시물의 모든 세부적인 내용을 다 커버 할 수있을 것이라고 기대하지는 않는다.

+0

저는 기본적인 이해에 대해서만 이야기하고 있습니다. 인터뷰에서 Duffy의 게시물에 대해 반드시 이야기 할 필요는 없다는 것에 동의 할 것입니다. –

1

예, 부당합니다. + 3 ~ 5 년 대학생 (항상 선호되는 후보자) 인 프로그래머는 "관리되지 않는 리소스"가 어떤 모습인지 알기 위해 순수 Win32 코드를 작성한 적이 거의 없습니다. 전형적으로 대학 시절에 일어난 일은 아닙니다. 자바는 요즘 같은 교육 방식을 사용하지 않는 언어입니다.

많은 .NET 프로그래머가 .NET 코드를 작성하고 을 처리하지 않고 프로덕션 코드를 제공했습니다. 다른 인터뷰 질문을 권하고 싶습니다.

  • 왜 Java에 IDisposable 패턴이 필요하지 않습니까?
  • .NET 프로그래머가 왜 아무 것도 처리하지 않는 이유는 무엇입니까?

로테 프로그래밍보다는 통찰력을 테스트합니다. 아마도 두 번째 인터뷰에 더 적합할까요? 누군가가 IDisposable을 이해하는 기대에

+2

다른 언어에서 나온 경험이있는 개발자는 IDisposable에서 실행되지 않을 수도 있지만 이는 .NET 개발자가 아니라는 것을 의미합니다. 그것이 고용 기준으로 사용되어야하는지 여부는 전혀 다른 주제입니다. 특히 .NET 작업을 신청할 때 가비지 수집의 기초를 이해하지 못하는 .NET 경험이있는 사람이라면 누구나 .NET에 대한 엄청난 수준의 이해가 있습니다. 따라서 그들은 자신의 경험을 과장하거나 조나단이 추구하는 양질의 개발자가 아닙니다. – hemp

+0

실생활 문제를 알고리즘으로 변환하는 방법을 알기 위해 타고난 말 감각을 가진 후보자를 고용합니다. 책술 지식은 결코 문제가 아니며 코드 검토로 쉽게 다루어집니다. 말 감각과 경험은 약하게 연결되어 있습니다. –

+1

dispose를 사용한 적이없는 .NET 프로그래머는 데이터베이스 나 파일 액세스를 결코 다루지 않은 프로그래머 일 수도 있습니다. 둘 다 내가 일하는 명확한 무직자입니다. –

13

그것은 불합리 아니지만, 나는 또한, IDisposable -themed 질문 발생 빈도의 측면에서 단지 Linq는 질문에 두 번째 여기에 스택 오버플 것으로 나타났습니다. 너무 소수의 프로그래머 만이 모든 것에 대해 진정으로 이해해야한다는 것을 분명히 알았습니다. 솔직히 이유를 모르겠습니다. 그것 이 될 수 없다는 것입니다. 모두 적합하지 않습니다. 단지 교육이 너무 적다고 생각합니다.

델파이 또는 C++에서 왔으며 과거에는 수동 리소스 관리를 수행해야했던 사람들에게 이것은 blindingly입니다.하지만 Java 나 Python 또는 VB로 학습 한 사람들에게는 그리 많지 않습니다. Dispose 객체를 잊어 버리면 컴파일러 경고 메시지가 표시되지 않습니다. .NET 프로그래밍이 진행되는 동안 자율 학습을한다면 실제로 문제가 있다는 것을 깨닫지 않고 쉽게 갈 수 있습니다. 그들은 의미와 IDisposable의 적절한 사용을 이해하지 않은 경우 염두에 너무

, 나는 즉시 는 인터뷰에서 사람을 실패하지 않을 것입니다,하지만 난 그것을 많은 다른 것들처럼 붉은 깃발을 고려할 것 . 나무 구조를 가로 지르는 방법이나 FizzBuzz를 쓰지 못하는 방법을 모르는 것만 큼 (예를 들어) 나쁘지는 않습니다.

나는 물어 보는 것이 좋은 질문이다. 누군가가 이전에 들어 본 적이 없다면, 나는 아주 빠른 설명을 한 다음 후속 질문을 할 것이다. ".NET 가비지 수집기는 만 관리 할 수 ​​있습니다. 메모리. IDisposable을 사용하면 명시 적으로 다른 종류의 리소스를 해제 할 수 있습니다.이 범주에 해당하는 리소스는 있습니까? 그들은 질문 중 하나를 다음 응답 할 수없는 경우 그것은 .NET Framework의 특정 인터페이스뿐만 아니라 일반적으로 리소스 관리의 무지를 나타 내기 때문에 나는 걱정할 것입니다. 학교에서 Java를 배우더라도 열어 본 파일과 연결을 닫아야한다는 것을 이해해야합니다.

또 다른 빨간색 플래그는 아마도 IDisposable 블록을 using 블록에 넣어야한다고 말하면서 그 이유를 설명하거나 규칙 (즉, 팩토리 메소드)에 대한 예외를 나열 할 수 없습니다. 그것은 카고 컬트 프로그래밍 경향을 나타내는 지표 일 수 있기 때문에 저에게는 더 나쁩니다.

질문을 계속하지만 어쩌면 반응을 부드럽게 할 수 있습니다. 누군가가 대답을 못하면 즉시 인터뷰를 끝내지 마십시오. .NET 프로그래머가 실제로 을 가지고 있다고 생각하면 작동하는 (버그는 있지만) 소프트웨어를 작성하기 위해 이것을 배울 수 있습니다.