모든 좋은 .NET 개발자가 질문에 대답 할 수 있어야합니까?


우리 회사는 .NET 개발자 를 고용하려고합니다. 우리는 다양한 .NET 플랫폼 (ASP.NET, Compact Framework, Windowsforms, 웹 서비스)에서 작업합니다. 나는 신청자가 경험이 있는지보기 위해 최소한의 표준의 일종 인 좋은 질문 목록 / 카탈로그를 작성하고 싶다. 그래서, 내 질문은 :

좋은 .NET 프로그래머가 어떤 질문에 대답 할 수 있어야한다고 생각하십니까?

나는 또한 내 자신의 결점이 어디에 있는지 알기 위해 나 자신을위한 체크리스트 로 보았다.

* 업데이트 : .NET 지식에 대해서만 테스트하지는 않으며, 문제 해결 기능과 일반적인 프로그래밍 기술은 우리에게 더욱 중요하다는 것을 분명히하고 싶습니다.



Answers


기본적인 질문은 다음과 같습니다.

나는 보통 다음과 같은 간단한 코딩 연습을 완료하도록 신청자에게 요청하는 것이 도움이된다고 생각합니다.

  • 내장 클래스를 사용하지 않고 링크 된 클래스를 작성하십시오.
  • 내장 클래스를 사용하지 않고 자신 만의 해시 테이블 클래스를 작성하십시오.
  • 이진 트리를 나타내는 클래스를 작성하십시오. 트리의 모든 노드를 가로 지르는 메소드를 작성하십시오.
  • 내장 메서드를 사용하지 않고 배열에서 이진 검색을 수행하는 메서드를 작성합니다.
  • 블로그에 대한 데이터베이스 스키마를 그립니다. 각 사용자에게는 하나의 블로그 만 있고 각 블로그에는 많은 카테고리가 있으며 각 카테고리에는 많은 게시물이 있으며 각 게시물은 둘 이상의 카테고리에 속할 수 있습니다. 귀하의 신청자에게 특정 정보를 빼내기위한 질문을 작성하라고 요청하십시오.

다음으로 구체적인 기술 노하우를 찾으십시오.

  • (이벤트 핸들러) 커스텀 이벤트 핸들러로 클래스를 생성하고, 커스텀 이벤트 핸들러에 후킹하는 또 다른 클래스를 생성하십시오.
  • (XML) XML 문서를로드하고 x, y 및 z 속성을 가진 모든 노드를 선택합니다.
  • (함수형 프로그래밍) 다른 함수를 매개 변수로 받아들이는 함수를 만듭니다. 지도 또는 접기 기능이 실제로 효과적입니다.
  • (리플렉션) 클래스에 특정 속성이 있는지 결정하는 함수를 작성하십시오.
  • (Regex) HTML 블록에서 모든 태그를 제거하는 정규식을 작성하십시오.

이 중 어느 것도 능숙한 C # 프로그래머가 대답하기에는 특히 어려운 질문이 아니며, 그들은 당신에게 지원자의 특별한 강점에 대한 좋은 아이디어를 제공해야합니다. 특정 디자인 패턴을 사용하는 몇 가지 질문 / 코드 샘플로 작업하고 싶을 수도 있습니다.

[설명을 위해 편집] :

많은 사람들이 왜 이런 종류의 질문을하는지 이해하지 못하는 것 같습니다. 소수의 사람들의 의견을 언급하겠습니다. (나는 직접 인용하지 않고 대신 의역을 말합니다) :

Q : 휘발성 물질이나 약한 참조 물질을 사용한 사람은 언제 마지막 이었습니까?

A : 기술 인터뷰를 할 때 .NET의 고수준 저수준 기능을 이해하고 있는지 확인합니다. 휘발성 물질과 약한 참조는 .NET에서 제공하는 두 가지 저수준 기능입니다. 실제로 이러한 기능을 실제로 사용하지 않더라도 이러한 질문에 대한 답변은 매우 드러납니다.

  • 휘발성 물질을 잘 이해하면 컴파일러 최적화가 코드의 정확성을 변경하는 방법, 스레드가 공유 상태의 로컬 복사본을 유지하는 방식을 이해할 수 있으며이 상태는 언제든지 동기화되지 않을 수 있으며 다중 스레드 코드의 복잡성을 최소한으로 인식합니다 .

  • 약한 참조를 잘 이해하면 가비지 수집기의 세부적인 내용과 메모리를 해제 할시기를 결정하는 방법을 잘 알고 있습니다. 물론, 당신은 후보자에게 "가비지 컬렉터는 어떻게 작동합니까?"라고 물어볼 수 있지만, 약한 참조에 대해 묻는 것은 훨씬 더 사려 깊은 대답을 얻습니다.

.NET은 매우 추상적 인 언어이지만 스타 개발자는 거의 항상 CLR 및 .NET 런타임의 하위 수준 세부 정보를 깊이있게 이해하고 있습니다.

Q : 왜 자신의 해시 테이블이나 링크드리스트를 구현해야합니까?

A : Dictionary 클래스가 열등하거나 사람들이 자신의 해시 테이블을 굴려야한다는 것을 의미하지는 않습니다. 이것은 사람이 데이터 구조에 대해 최소한의 지식을 가지고 있는지 여부를 테스트하는 기본적인 질문입니다. 이 질문들이 테스트하는 것 : 최소한의 이해.

데이터 구조 101의 첫날에 이러한 해시 테이블과 연결된 목록에 대해 배웁니다. 누군가 해시 테이블이나 연결된 목록을 처음부터 작성할 수 없으면 기술 지식에 차이가 있습니다.

Q : 왜이 질문들은 그렇게 진부한가?

A : 이 스레드의 제목은 "모든 .NET 개발자가 알아야 할 질문"입니다. 모든 .NET 개발자는 까다로운 응용 프로그램 작성 경력을 쌓기 시작하고 생존을 위해 모든 응용 프로그램 개발 사용자의 90 %가 기간 업무 (LOB) 응용 프로그램과 관련됩니다.

나는 컴파일러 개발, 게임 엔진 개발, 정리 증명, 이미지 처리 등과 같은 매우 특정한 틈새에서 개발자를 찾고 있지 않는 한, 대부분의 경우, 기간 업무 (LOB) 지식을 테스트하는 질문이 적절하다고 생각한다. .




Scott Hanselman 의 블로그 에서이 목록을 발견했습니다.

다음은 카테고리로 분류 된이 게시물의 가장 중요한 질문입니다. 나는 그들을 편집하고 재 배열했다. 다행히도 이러한 질문의 대부분은 에 대한 좋은 대답입니다. 그냥 링크를 따라 가십시오 (나는 최대한 빨리 업데이트 할 것입니다) .

플랫폼 독립적 인. NET 질문

ASP.NET




이것은 듣고 싶은 것이 아니지만 폭이 좁은 기술이 아니라 일반적인 프로그래밍 및 문제 해결 기술에 중점을 두는 것이 좋습니다. 견고한 개발자는 원하는 모든 것을 빨리 배울 수 있습니다.

예를 들어, 나는 Compact Framework 사용자가 아니므로, 당신이 그 방향으로 간다면 당신의 인터뷰를 실패 할 수도 있습니다. 그러나 그것을 사용해야 할 경우 몇 가지 조사를하고 바로 뛰어들 수 있습니다.

Joel의 책 Smart and Get Things Done 은 개발자를 고용하는 데 큰 조언을하고 있으며 질문 할 질문에 대해 많은 정보를 제공합니다. 나는 그것을 매우 추천한다.




나는 LINQ 경험이있는 사람을 인터뷰했다면 LINQ를 설명하도록 요청했을 것입니다. 그들이 지연된 실행, 스트리밍, IEnumerable / IEnumerator 인터페이스, foreach, iterator 블록, 표현 트리 (보너스 포인트 용)를 설명 할 수 있다면 나머지 부분은 대처할 수 있습니다. (확실히 "OK"개발자 일 수도 있고 LINQ를 아직 얻지 못했을 수도 있습니다 - 나는 그들이 공정한 질문을하기에 충분한 LINQ를 알고 있다고 주장한 경우를 정말로 생각하고 있습니다.)

과거에는 이미 나열된 몇 가지 질문과 몇 가지 다른 질문을했습니다.

  • 참조 유형과 값 유형의 차이점
  • 참조로 전달하고 값으로 전달
  • IDisposable 및 finalizers
  • 문자열, 불변성, 문자 인코딩
  • 부동 소수점
  • 대표자들
  • 제네릭
  • Null 가능 유형



나는 당신이 조회하고 기억할 수있는 것보다 문제 해결 능력을 찾고있는 사람들과 함께 있습니다.

예를 들어 자신을 인용하기 위해 나는 일상적으로 사용해야하는 것을 '알고있는'경향이 있습니다. 나는 거의 사용하지 않는 것을 잊어 버리고 (나중에 다시 찾아야한다) 경향이있다.

당신이 인터뷰에서 나를 여행하고 싶다면, 그것은 매우 쉬울 것입니다.

그럼에도 불구하고 필자는 WinForms 및 ASP.NET 구현을 위해 동일한 Business Objects 및 Data 레이어를 사용하는 시스템을위한 많은 인프라를 설계하고 코딩했으며 코드베이스는 강력하고 재사용이 가능하기 때문에 20 개 이상을 지원하고 개발할 수 있습니다. 웹 사이트의 다르게 구성된 버전뿐만 아니라 증가하는 WinForms 응용 프로그램 (현재 5 개) ...

2 명의 개발 팀이 있습니다.

저는 기술 리더로서 팀을 꾸리는 데 익숙했습니다. 제 직업은 채용과 인터뷰를 많이 포함했습니다. 가장 저의 가장 큰 실수는 저를 포함하여 나머지 모든 사람들이 사용하는 기술보다 우리가 사용하고있는 기술에 대해 더 많이 아는 사람을 고용하는 것이 었습니다. 저는 전문가로서 자신을 카운트했습니다. 그는 모든 것을 알고 ...

... 요구 사항을 충족하거나 자신을 제외한 모든 사람이 이해할 수있는 코드를 작성하는 방법은 제외합니다. 결국 PM이 자신의 계약을 갱신하지 않도록 설득했을 때, 그가 작성한 모든 일은 다시 써야했습니다.

현명하게 인터뷰 구조 ...




Jon Skeet은 누구입니까?




내가 묻는 좋은 질문은

  • .NET에 대해 좋은 점이 무엇이라고 생각하십니까?
  • .NET에 대해 나쁘다고 생각하는 부분은 무엇입니까?

후보자가 무엇을 생각해 내는지 보는 것은 흥미로울 것이고 당신은 확실히 그 / 그녀가 프레임 워크를 어떻게 사용하는지에 관해 꽤 많이 배울 것입니다.




나는 항상 자신의 연약한 기술을 찾겠다. 그래서 좋은 OO 디자인, 테스트 주도 개발, 좋은 멀티 (프로그래밍) 언어 배경과 모든 라운드 일반 smartness (그리고 점점 일을 다 끝났어!).

지능적인 개발자는 이전에 한번도 본 적이 없더라도 알 필요가있는 개별 기술을 배우는 데 어려움을 겪지 않아야합니다. 따라서 WCF / 소형 프레임 워크와 관련된 특정 질문에 대해서는 크게 걱정하지 않아도됩니다.

나는 그들이 그들이 무엇을 알고 어떻게 작동하는지 알아내는 가장 좋은 방법을 몇 가지 코드로 작성하게 할 것이다. 누구나 '참조 유형과 값 유형의 차이점은 무엇입니까?'라는 대답을 암기 할 수 있습니다.




솔직히?

".NET은 무엇입니까?"

그들이 .NET이 무엇인지, 무엇이 아닌지, 어떻게 사용되었는지, 구성 요소가 무엇인지 등과 같은 명확한 답을 줄 수 있다면 ... 그들이 당신에게 그들이 무엇인지 알 수 있다면, 그것을 아주 잘 알아라.

문제는 많은 사람들이 .NET이 무엇인지 실제로 알지 못한다는 것입니다. 심지어 프로그램을 작성하는 사람들.




없음. 아마도 세계에서 가장 똑똑한 사람들이 답을 모른다는 것은 매우 간단한 질문 일 것입니다. 그들이 열심히하기 때문에가 아니라 단순히 그들이 그걸 보지 않았기 때문입니다. 개발자는 임의의 질문에 답할 수 있는지 여부가 아닌 전체 패키지와 개발자의 기술을 조사해야합니다.

질문이 짧은 문장이나 2 문장으로 쉽게 대답 할 수 있다면, 모르는 사람에게 말하기 만하면됩니다. "모든 .NET 개발자가 대답 할 수 있어야합니다."라는 질문에 대답하는 능력이 아니라 개념과 추론 능력에 대한 이해를 찾고 있어야합니다.




참조 유형과 값 유형의 차이점을 알아야합니다.

이벤트가 하드 참조로 저장된다는 것을 알아야합니다 (예 : 이벤트 등록 취소 또는 메모리 누수가 있음을 기억하십시오).

문자열은 변경할 수 없습니다.







나는 블로그에 대해 그들이 정기적으로 읽고 개인적인 프로그래밍 프로젝트를 그들이 이것에 대해 배울 의사와 프로그래밍에 대한 열정을 보여줄 것입니다으로 일한 것에 대해 문의하는 것이 좋습니다.




다음은 C # 프로그래머로 일하는 프로그래머를 필터링하는 데 사용 된 몇 가지 예입니다.

참조 유형과 값 유형의 차이점은 무엇입니까?

IDisposable 인터페이스를 설명하십시오. C # 언어 구문에는이 인터페이스가 필요하며 구현 방법은 무엇인지 설명하십시오.

null가 그 파라미터에 null를 허가하지 않는 계약을 가지는 메소드에 인수로서 건네받는 경우는, 어느 쪽의 예외를 throw합니까?




"ASP 중 어떤 것을 컨트롤에서 생산에 사용하겠습니까?"

이렇게하면 피사체가 실제로 DataGrid 및 LinkButton에서 불타 오랫동안 큰 프로젝트를 작성하고 유지했는지 여부 또는 Drag / Drop "21 일만에 스스로 학습"단계에 있는지 여부를 빠르게 알 수 있습니다.

(대답은 ASP : Repeater, ASP : PlaceHolder, ASP : Literal, ASP : Content)




스레드 란 무엇입니까?

GC가 무엇입니까?




이 질문은 약간 변하기 쉬운 것이고 지금은 완전히 대답 할 수있는 질문은 아니지만 적절할 때 대답 할 수 있어야합니다.

".NET 프레임 워크는 X 작업을 완료하기 위해 제공합니까?"

또는 구체적으로 :

".NET 프레임 워크에는 X를 수행하는 객체가 포함되어 있습니까?"

예를 들어, 최근에 나는 부울 배열을 저장하고 그것을 조작하는 것과 같이 collection-wise NOT, OR, XOR, AND와 같은 모든 값을 설정하는 등의 최적화 된 객체를 개발하는데 몇 시간을 보냈습니다. 모든 단위 테스트를 작성하고 최고의 성능을 위해 가능한 조정할 때까지는 "BoolArray"개체가 .NET Framework에서 "BitArray"라는 이름으로 이미 존재한다는 것을 깨달았습니다.

이것은 여러 번 물체 / 도우미가 사용하는 것에 대한 최선의 대답이 당신이 모르고 있거나 완전히 이해하고있는 대답이기 때문에 대답하기 힘든 것일 수 있습니다. 모든 사람들이 성능을 크게 향상시킬 수있는 기본 도구 인 StringBuilder조차 실제로 알고 있다면 .NET 세상이 얼마나 훌륭한가.




몇 가지 질문은 dotnet을 사용하여 프로그래밍 개념을 이해하는 데 중점을 둘 것입니다.

관리되는 환경과 관리되지 않는 환경의 차이점은 무엇입니까? GC 장단점 JIT 장단점 우리가 X 응용 프로그램을 개발해야한다면 dotnet을 사용할 수 있습니까? (이것은 그가 어떻게 도트 넷을 보는지 식별 할 것입니다)

작은 방법을 쓰고 더 나은 닷넷 클래스 나 표준 방법을 사용하여 더 나은 성능으로 다시 작성하도록 요청합니다. 또한 논리적 인 방법이나 부정확 한 방법을 논리적으로 작성하고 수정하도록 요청하십시오.




나는 이미 언급 된 몇 가지 질문 외에도 다음과 같은 팬입니다.

  • 대의원은 무엇입니까?
  • 앱 도메인이란 무엇입니까?
  • lock 키워드는 언제 사용 하시겠습니까?
  • 표준 라이브러리 제네릭 컬렉션 클래스는 스레드로부터 안전합니까?
  • 확장 방법이란 무엇입니까?
  • XmlDocument와 XmlReader의 차이점은 무엇입니까?
  • 응용 프로그램 구성 파일에서 구성 설정을 어떻게 읽습니까?



이것은 흥미 롭습니다. 내 의견을 말하면서 투표를 거절 당할 위험에 처해 있습니다. 귀가 먹었을 때, 개인적인 생각으로 의사 소통을 할 때 더 많은 노력이 필요합니다.

무디게하기 위해서, 나는 전형적인 질문을 너무 많이 읽지 않을 것입니다. 근본적인 패러다임은 ' 당신의 생각과 이해를 얼마나 잘 표현할 수 있습니까? ', 그것은 정말로 면접관이 찾고있는 것입니다. 의사 소통은 내가하는 방식으로 인해 항상 가장 큰 약점이며 아주 쉽게 좌절 할 수 있습니다.

지식을 갖고 노하우가있는 유형이되는 것이 이상적이지만 불행히도 모르는 일이 있습니다. 실제로 대답을 모르고 허풍을 부르는 대신 두려워하지 마십시오. 그것을 통해. 면접관이 위의 질문 중 하나와 같은 질문을했는데 질문을 잘못 이해했거나 잘못 해석 한 경우이를 개인적으로 당혹스럽게 할 수는 있지만 선생님은이를 처리하는 방법을 배웠습니다.

얼마나 많은 사람들이 실제로 와플을하고 허세 부리는 것이 놀랍습니까? 하루가 끝나면 은유 적으로 말하면서 '바지를 내리고'내려갑니다.

내 2 센트, 안부 인사, 톰.




몇 가지 더 :

  1. 부분 수업. 그리고 그것의 한계?
  2. 봉인 된 클래스
  3. .NET에서 지역화를 수행하는 방법은 무엇입니까?
  4. 데이터베이스 연결
  5. 다양한 구성 파일
  6. 대의원 대 이벤트
  7. 관리되지 않는 dll 액세스
  8. 반사
  9. 일반 수업
  10. 가장 인기있는 .NET 3.5
  11. 당신이 사용한 단위 테스팅 프레임 워크.



나는 그 사람들에게 "교과서의 어떤 것을 안다"는 질문을하지 않고 오히려 다음과 같이 약간의 질문을한다.

  • foreach 루프는 평범한 C #에서 무엇을합니까? (반복자 루프를 작성해야한다.)
  • 싱글 톤은 무엇입니까?
  • 그 / 그녀가 Datetime에 문자열을 파싱하게하십시오 (try / catch 대신 TryParse를 사용할 것을 기대합니다)
  • 싱글 톤, 전략 및 명령 패턴 구현
  • 시험용 코드 조각을 리팩터링하게하십시오. 시험중인 장비에서 외부 서비스를 추상화하고 자체 Test-double 서비스를 구현할 것을 기대합니다 (조롱 프레임 워크 제공 없음).

이것들은 제가 물어볼 수있는 사람에 따라 100 % 확실하지 않습니다 :

  • 그 / 그녀가 null 입력에서 방법을 지키게하십시오 (그 / 그녀가 여러 반환을 사용하여 중첩을 줄이기를 기대 함)
  • 객체 이니셜 라이저는 어떻게 작동합니까? (스레드 안전 지정을 쓰려고합니다)

또한 나는 그 / 그녀가 그 / 그녀의 물건과 그 / 그녀가 읽고있는 것 (블로그, 책)을 어떻게 배웠는지 물어볼 것입니다.




몇 가지 더 :

가비지 수집의 한계는 무엇입니까?

파이널 라이저와 IDisposable에 대해 알고 있습니다.

쓰레드 풀과 언제 사용할지를 숙지하십시오.

GUI 응용 프로그램을 수행하는 경우 - Windows GUI는 단일 스레드임을 알고 있어야합니다.

foreach 사용 (많은 사람들이 MoveNext를하는 것을 볼 수 있습니다.)




나는 그것이 단지 질문이 아니어야한다고 생각한다. 나는 당신이 인터뷰 할 때 매우 빛나는 몇 사람을 안다. 그러나 그들은 현실주의에 빠지면 너무 많은 완벽 주의자이다. 나는 그들이 비참하게 작업을 코딩하지 못한다고 말할 것이다.

나는 한 번 인터뷰를 한 적이 있는데, 처음 고용주가 30 분 안에 기술 설문지를 작성하는 접근법을 좀 좋아했습니다. 하나가 성공하면 성격 심판 및 인물 찾기 질문과 기술 전문 용어를 포함하는 1 시간의 인터뷰를 요청 받게됩니다.

그런 다음 6 시간 안에 3 페이지 웹 응용 프로그램을 개발하도록 요청 받았습니다. 작은 ERD, Layerd 디자인, UI 일관성, GridView에서 라디오 버튼 사용, 웹 페이지의 DB에서 이미지 유형 가져 오기, 특정 알고리즘 개발과 같은 특정 문제 제어와 같은 애플리케이션 개발의 주요 측면을 스마트하게 응용 한 제약이있었습니다. 보안, 암호화, 해싱, 데이터 표현 및 조작.

그런 다음 다음 날 그들은 성능 병목 영역과 디자인 및 사용 된 알고리즘의 개선을 다루는 개발 된 응용 프로그램에 대한 30 분 토론을했습니다. 그리고 특정 조건으로 이전 단계에서 개발 된 알고리즘을 개선하기위한 1 시간 옵션 테스트.

따라서 상당한 시간이 걸렸지 만,이 방법을 사용하면 고용인이 잘 아는 개발자가 될 수있는 개념을 알 수 있습니다.




나는 그에게 문제를 부여하고 당신이 알고있는 .net의 특징을 사용하여 그 문제를 해결하길 원하며, 왜 그것이 최상의 해결책이라고 생각 하는가?

이것은 문제 해결을위한 그의 접근법과 함께 기술, 분석 및 문제 해결 기술 측면에서 후보자의 거의 모든 능력을 해칩니다.










Tags