IT story

모든 훌륭한 .NET 개발자가 대답 할 수있는 질문이 있습니까?

hot-time 2020. 4. 6. 08:14
반응형

모든 훌륭한 .NET 개발자가 대답 할 수있는 질문이 있습니까? [닫은]


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

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

또한 내 결함이있는 곳을 확인하기 위해 스스로 점검 목록 으로 볼 것입니다 (많은 ...) .

대체 텍스트

* 업데이트 : .NET 지식 만 테스트하는 것이 아니라 문제 해결 기능과 일반적인 프로그래밍 기술이 더 중요하다는 점을 분명히하고 싶습니다.


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

일반적으로 지원자들에게 다음과 같은 간단한 코딩 연습을 완료하도록 요청하는 것이 도움이된다고 생각합니다.

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

다음으로 특정 기술 노하우를 찾으십시오.

  • (이벤트 핸들러) 사용자 정의 이벤트 핸들러를 사용하여 클래스를 작성하고 사용자 정의 이벤트 핸들러에 연결되는 다른 클래스를 작성하십시오.
  • (XML) XML 문서를로드하고 속성 x, y 및 z를 가진 모든 노드를 선택하십시오.
  • (기능 프로그래밍) 다른 기능을 파라미터로 받아들이는 기능을 작성하십시오. Map 또는 Fold 함수는이 작업에 실제로 효과적입니다.
  • (반사) 클래스에 특정 속성이 있는지 확인하는 함수를 작성하십시오.
  • (정규식) HTML 블록에서 모든 태그를 제거하는 정규식을 작성하십시오.

이 중 어느 것도 능숙한 C # 프로그래머가 대답하기 어려운 어려운 질문은 아니며 지원자에게 특정 강점을 잘 알려 주어야합니다. 특정 디자인 패턴을 사용하는 몇 가지 질문 / 코드 샘플로 작업 할 수도 있습니다.

[설명 편집] :

내가 이런 유형의 질문을하는 이유를 많은 사람들이 이해하지 못하는 것 같습니다. 몇 가지 사람들의 의견에 대해 살펴 보겠습니다 (직접 인용하지 않고 대신 해석합니다).


Q : 휘발성 물질이나 약한 참조를 마지막으로 사용한 사람은 언제입니까?

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

  • 휘발성을 잘 이해하면 컴파일러 최적화가 코드의 정확성을 변경하는 방법, 스레드가 특정 시점에 동기화되지 않을 수있는 공유 상태의 로컬 사본을 유지하는 방법을 이해하고 다중 스레드 코드의 복잡성을 최소화하는 방법을 이해한다는 것을 알 수 있습니다 .

  • 약한 참조를 잘 이해하면 가비지 수집기의 친밀한 세부 사항과 메모리를 언제 비울 수 있는지 결정하는 방법을 알 수 있습니다. 물론 후보자에게 "가비지 수집기의 작동 방식"을 물어볼 수는 있지만 약한 참조에 대해 묻는 것이 훨씬 더 좋고 신중한 답변을 얻을 수 있습니다.

.NET은 상당히 추상적 인 언어이지만 스타 개발자는 거의 항상 CLR과 .NET 런타임의 하위 수준 세부 사항에 대해 깊이 이해하고 있습니다.


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

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

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


Q : 이 질문들이 왜 그렇게 방향이 정교합니까?

A : 이 글타래의 제목은 "모든 훌륭한 .NET 개발자가 알아야 할 질문"입니다. 모든 .NET 개발자는 크루 드 앱을 작성하면서 경력을 쌓기 시작하며 사람들이 일상적으로 사용하는 모든 응용 프로그램 개발의 90 %는 업무용 응용 프로그램과 관련이 있습니다.

컴파일러 개발, 게임 엔진 개발, 정리 증명, 이미지 처리 등과 같은 특정 분야의 개발자를 찾고 있지 않다면 업무용 앱에 대한 지식을 테스트하는 질문이 대부분의 경우에 적절하다고 생각합니다. .


Scott Hanselman블로그 에서이 목록을 찾았습니다 .

다음은 게시물로 분류 된 가장 중요한 질문이라고 생각합니다. 나는 그것들을 편집하고 재정렬했다. 다행히도 이러한 대부분의 질문에 대해서는 스택 오버플로에 대한 좋은 대답이 이미 있습니다. 링크를 따라 가십시오 (나는 최대한 빨리 업데이트 할 것입니다) .

플랫폼 독립적 .NET 질문

ASP.NET


이것은 당신이 듣고 싶지 않을 수도 있지만 좁은 기술에 중점을 두지 말고 일반적인 프로그래밍 및 문제 해결 기술에 중점을 둘 것을 권장합니다. 견고한 개발자는 원하는 모든 것을 빠르게 배울 수 있습니다.

예를 들어, 나는 Compact Framework 사람이 아니므로, 당신이 그 방향으로 가면 인터뷰에 실패 할 수 있습니다. 그러나 그것을 사용해야한다면 연구를하고 바로 들어갈 수 있습니다.

Joel의 저서 Smart and Gets Things Done 은 개발자 채용에 대한 훌륭한 조언을 제공하며, 질문 종류에 대한 수분이 많은 섹션이 있습니다. 나는 그것을 강력히 추천합니다.


내가 LINQ 경험이있는 사람을 인터뷰한다면, 나는 아마도 거라고 생각 LINQ를 설명하도록 요청합니다. 지연된 실행, 스트리밍, IEnumerable / IEnumerator 인터페이스, foreach, 반복자 블록, 표현식 트리 (보너스 포인트의 경우)를 설명 할 수 있다면 나머지 부분에 대처할 수 있습니다. (실제로 그들은 "OK"개발자 일 수는 있지만 아직 LINQ를 "얻을"수는 없습니다. 저는 그들이 LINQ를 공정한 질문으로 만들기에 충분한 지식을 가지고 있다고 주장한 경우를 생각하고 있습니다.

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

  • 참조 유형과 값 유형의 차이점
  • 참조로 전달 및 값으로 전달
  • IDisposable 및 종료 자
  • 문자열, 불변성, 문자 인코딩
  • 부동 소수점
  • 대의원
  • 제네릭
  • 널 입력 가능 유형

저는 '101 top .NET interview Qs and As'에서 찾아보고 암기 할 수있는 것보다는 문제 해결 능력을 찾고있는 사람들과 함께 있습니다.

예를 들어 자신을 인용하기 위해, 나는 매일 사용해야하는 것들을 '알고'있습니다. 나는 거의 사용하지 않는 것들을 잊어 버리는 경향이있다.

인터뷰에서 나를 위로하고 싶었다면 매우 쉬울 것입니다.

그럼에도 불구하고, WinForms 및 ASP.NET 화신에 대해 동일한 Business Objects 및 Data 계층을 사용하는 시스템을 위해 많은 인프라를 설계하고 코딩했으며, 우리의 코드베이스는 20+ 이상을 지원하고 개발할 수있을 정도로 강력하고 재사용 가능합니다. 다르게 구성된 웹 사이트 버전과 WinForms 응용 프로그램의 수 (현재 5) 증가

... 두 명의 개발 팀과 함께.

예전에는 기술 책임자로 팀에서 일 했었고, 많은 직업과 인터뷰가있었습니다. 저의 가장 큰 실수는 저를 포함하여 우리 모두가 합쳐 놓은 것보다 우리가 사용하고있는 기술에 대해 더 잘 아는 사람을 고용하는 것이 었습니다. 그는 모든 것을 알고 있었다

... 요구 사항을 충족하거나 자신을 제외한 다른 사람이 이해할 수있는 코드를 작성하는 방법을 제외하고. 계약을 갱신하지 말라고 PM을 설득했을 때, 그가 쓴 모든 것을 다시 써야했습니다.

인터뷰를 현명하게 구성하십시오 ...


존 스키트는 누구입니까?


좋은 질문은

  • 당신은 어떻게 생각하십니까 좋은 .NET에 대한?
  • .NET에 대해 나쁜 점은 무엇이라고 생각 하십니까?

후보자가 무엇을 보게 될지를 보는 것은 흥미로울 것입니다. 그리고 프레임 워크를 어떻게 사용하는지에 대해 확실히 배울 것입니다.


나는 항상 부드러운 기술을 찾고 싶습니다. 그래서 좋은 OO 디자인, 테스트 주도 개발, 좋은 멀티 (프로그래밍) 언어 배경 및 모든 둥근 일반 영리 (그리고 추측이 끝난 것입니다!).

지능형 개발자는 이전에 본 적이 없어도 알아야 할 개별 기술을 배우는 데 어려움을 겪지 않아야하므로 WCF / 컴팩트 프레임 워크와 관련된 특정 질문에 대해 너무 걱정하지 않아도됩니다.

나는 그들이 알고있는 것과 작동하는 방법을 찾는 가장 좋은 방법 인 코드를 작성하도록 할 것입니다. 누구나 '참조 유형과 값 유형의 차이점은 무엇입니까?'에 대한 답변을 외울 수 있습니다.


솔직히?

".NET은 무엇입니까?"

.NET이 무엇인지, 무엇이 사용되지 않는지, 어떻게 사용되는지, 어떤 요소로 구성되어 있는지 등에 대해 명확하게 대답 할 수 있다면 ... 그것이 무엇인지 알 수 있다면, 그들은 기회 일 것입니다 잘 아세요.

문제의 사실은 많은 사람들이 .NET이 무엇인지 실제로 모른다는 것입니다. 프로그램을 작성하는 사람들조차도.


정말이지 세계에서 가장 똑똑한 사람들이 답을 모르는 매우 간단한 질문이있을 것입니다. 그들이 힘들 기 때문이 아니라 단순히 그것을 겪지 않았기 때문입니다. 임의의 질문에 대답 할 수 있는지 여부가 아니라 전체 패키지와 개발자의 기술을 살펴보아야합니다.

질문이 짧은 문장이나 두 문장으로 대답하기에 충분히 쉬운 경우, 모르는 사람에게 간단히 말할 수 있습니다. "모든 .NET 개발자가 대답 할 수 있어야합니다."


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

이벤트가 하드 참조로 저장되어 있음을 알고 있어야합니다 (예 : 이벤트 등록을 취소해야합니다. 그렇지 않으면 응용 프로그램에서 메모리가 누출 됨).

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


Martin Fowler 는 플랫폼 지식보다 디자인 기술을 선호합니다 . 반면에 다음과 같이 디자인 패턴 및 .NET 플랫폼에 대한 지식을 보여주는 질문을 할 수 있습니다.

  • 알고있는 디자인 패턴과 원칙의 이름과 .NET Framework에서 어떻게 사용되는지?

나는 정기적으로 읽는 블로그와 그들이 해왔 던 개인 프로그래밍 프로젝트에 대해 물어 보는 것이 좋습니다. 이것이 배우려는 의지와 프로그래밍에 대한 열정을 보여줄 것입니다.


다음은 C # 프로그래머로 작업을 신청하는 프로그래머를 필터링하는 데 사용한 것입니다.

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

C # 언어 구성에 필요한 IDisposable 인터페이스와 구현 방법을 설명하십시오.

해당 매개 변수에 대해 널을 허용하지 않는 계약이있는 메소드에 널로 인수로 전달되면 어떤 예외가 발생합니까?


"ASP의 어느 쪽 : 프로덕션에서 어떤 컨트롤을 사용하겠습니까? 그 이유는 무엇입니까?"

그것은 당신의 주제가 DataGrids와 LinkButtons에 의해 태워 질 정도로 오랫동안 오랫동안 큰 프로젝트를 실제로 구축하고 유지했는지, 또는 그가 여전히 드래그 / 드롭 "21 일 안에 자신을 가르 칠"단계에 있는지 여부를 빠르게 알려줄 것입니다.

(답은 asp : Repeater, asp : PlaceHolder, asp : Literal 및 asp : Content입니다)


실이란?

GC 란 무엇입니까?


이것은 약간 가변적 인 질문이며, 실제로 지금 완전히 대답 할 수있는 질문이 아니라 적절한 경우 대답 할 수있는 질문입니다.

".NET 프레임 워크는 태스크 X를 수행하기 위해 무엇을 제공합니까?"

또는 더 구체적으로 :

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

예를 들어, 최근에는 컬렉션 방식의 NOT, OR, XOR 및 AND를 수행하고 모든 값을 설정하는 등 부울 배열을 저장하고 그에 대해 작동하도록 최적화 된 객체를 개발하는 데 몇 시간을 보냈습니다. 모든 단위 테스트를 작성하고 최상의 성능을 위해 조정 한 후에야 "BoolArray"개체가 .NET 프레임 워크에 "BitArray"라는 이름으로 이미 존재한다는 사실을 깨달았습니다.

어떤 객체 / 도우미가 사용하는지에 대한 가장 좋은 대답은 당신이 모르거나 완전히 이해하지 못하는 것이므로 여러 번 대답하기가 어려울 수 있습니다. 모든 사람이 실제로 성능을 크게 향상시킬 수있는 기본 도구 인 간단한 StringBuilder에 대해 알고 있다면 .NET 세계는 얼마나 멋진 지 알 수 있습니다.


닷넷을 사용하여 프로그래밍 개념을 이해하는 데 초점을 둔 몇 가지 질문을 제안합니다

관리되는 환경과 관리되지 않는 환경의 차이점은 무엇입니까? GC 장단점 JIT 장단점 응용 프로그램 X를 개발해야하는 경우 닷넷을 사용할 수있는 이유는 무엇입니까? (그는 그가 닷넷을 보는 방법을 식별 할 것입니다)

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


이미 언급 한 몇 가지 질문 외에 다음을 좋아합니다.

  • 대리인은 무엇입니까?
  • 앱 도메인은 무엇입니까?
  • 언제 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를 사용할 것으로 예상)
  • 싱글 톤, 전략 및 명령 패턴 구현
  • 테스트를 위해 코드 조각을 리팩터링하십시오. 테스트 대상 장치에서 외부 서비스를 추상화하고 자체 테스트 서비스를 두 배로 구현할 것으로 예상 (모의 프레임 워크 제공 안 함)

내가 요청할 수있는 사람에 따라 100 % 확실하지 않습니다.

  • 널 입력으로부터 메소드를 지키게한다 (네스트를 줄이기 위해 여러 번의 리턴을 사용할 것으로 예상)
  • 객체 이니셜 라이저 작동 방식 (스레드 안전 할당을 작성할 것으로 예상)

또한 나는 그 / 그녀가 자신의 물건을 어떻게 배웠는지 그리고 무엇을 읽고 있는지 (어떤 블로그, 책들) 물어 보았습니다.


몇 가지 더 :

가비지 수집의 제한 사항은 무엇입니까?

종료 자 및 IDisposable에 대해 알고 있습니다.

스레드 풀과 사용시기를 알고 있어야합니다.

GUI 응용 프로그램을 수행하는 경우 Windows GUI는 단일 스레드입니다.

foreach를 사용하십시오 (MoveNext 등을하는 많은 사람들이 있습니다)


나는 그것이 단지 질문이 아니라고 생각한다. 나는 당신이 그들을 인터뷰 할 때 똑똑한 몇 사람을 알고 있지만 일단 그들이 진짜에 도달하면 너무 완벽 주의자이다. 나는 그들이 과제를 비참하게 코딩하지 못한다고 말할 것이다.

나는 한 번 인터뷰를 받았으며 첫 번째 고용주가 30 분 안에 채울 기술 설문지를 제공하는 접근법을 좋아했습니다. 사람이 성공하면 성격 판단 및 성격 찾기 질문과 기술 전문 용어를 다루는 1 시간의 인터뷰가 필요합니다.

그런 다음 6 시간 안에 3 페이지 웹 응용 프로그램을 개발하라는 요청을 받았습니다. 응용 프로그램에 부과되는 제약 조건은 작은 ERD, Layered Design, UI Consistency와 같은 응용 프로그램 개발의 주요 측면을 현명하게 다루고 GridView의 라디오 버튼 사용 및 웹 페이지에서 DB의 이미지 유형 가져 오기 및 하나의 알고리즘 개발, 보안, 암호화, 해싱, 데이터 표현 및 조작.

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

따라서 상당한 시간이 걸렸지 만이 방법으로 고용하는 사람이 훌륭한 개발자가되기 위해 반드시 필요한 개념을 알지 못하게 할 수 있습니다.


나는 그에게 문제를주고 당신이 알고있는 .net의 기능을 사용하여 문제를 해결하도록 요청하고 왜 그것이 최선의 해결책이라고 생각합니까?

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

참고 URL : https://stackoverflow.com/questions/365489/questions-every-good-net-developer-should-be-able-to-answer

반응형