“사진 앨범 응용 프로그램을 디자인하는 방법 설명”, “이 특정 웹 사이트의 특정 기능을 디자인하는 방법 설명”(예 : Facebook의 추천, Amazon의 추천, 쇼핑 카트, 게임)과 같은 인터뷰 질문을 많이 모았습니다. 검은 색 잭). 그렇다면 수백만의 것이 있다면 어떨까요? 무엇을 바꾸시겠습니까?
이것이 데이터베이스 스키마 또는 많은 클래스 정의 (또는 둘 다)를 기대하는 것 같습니다. 학교의 데이터베이스에 대해 배웠지 만 실제로는 응용 프로그램을 실제로 설계 한 적이 없으며 어디서부터 시작해야하는지, 내가 디자인 한 것이 “좋은”것인지, 확장 가능하도록 변경할 수 있는지를 아는 데 어려움을 겪고 있습니다.
이러한 시스템을 설계 할 때 일반적인 접근 방식이나 사고 과정이 있습니까? 그리고 피해야 할 디자인에서 많은 문제가 발생하는 일반적인 문제 / 문제는 무엇입니까? 누군가 나를 이것들 중 하나 (또는 바람직하게는 각각의 요구를 비교하면서)로 안내하고 설명 할 수 있습니까?
1) 어떤 엔티티가 필요한지 어떻게 알 수 있습니까? 2) 모든 것이 어떤 관계에 있는지 어떻게 결정합니까? 3) 성능 최적화를 설계에 어떻게 통합합니까? 4) 클래스 나 데이터베이스를 사용하여이 작업을 수행합니까? 차이가 있습니까 (예를 들어 실제로 데이터베이스 테이블로 변환 할 수없는 클래스가 있습니까?)
내가 묻는 주된 이유는 “Cdinging the Coding Interview”을 겪고 있고 답변이 저자의 답변과 완전히 달랐기 때문입니다. 나는 수업이 중요한 클래스에 대한 아이디어가 매우 달랐습니다.
내 ATTEMPT :
사진 공유 앱을 사용하면 사진 / 사용자 클래스 / 테이블이 있습니다.
그런 다음 스키마를 만들려고 할 때 사진의 각 사람이 사진에 연결되어 있다고 가정하면 사진과 사용자를 연결하는 테이블이 있다고 생각합니다 (이 테이블이 필요한가? 그렇지 않은 경우 여전히 일반적인 관행입니까? 다 대 다 관계에 대한 별도의 테이블을 갖지 않겠습니까?).
그러나 객체 지향 접근 방식을 사용하려는 경우 대신 모든 작업을 수행하고 다른 두 테이블 / 클래스의 모든 정보를 가진 album이라는 클래스가있을 수 있습니다. 이것은 내가 책에서 주목 한 것입니다-많은 클래스가 있고 기본적으로 모든 정보를 가지고 있고 다른 클래스를 연결하는 하나의 클래스가 있습니까? 예를 들어, 위의 예에서 이것이 적용되는 것처럼 보입니까?
지금은 대규모 시스템에 적합한 아키텍처가 어떻게 보이는지 알 수 없기 때문에 일반적인 규칙 / 지침을 따르기를 바라고 있습니다.
답변
이러한 질문의 요점은 소프트웨어 응용 프로그램 작성에 실제 기술이 있는지 여부를 평가하는 것입니다. 당신은 어떤 이론을 배웠지 만 이론적 인 지식은 지금까지만 갈 수 있습니다. 소프트웨어 개발을 진정으로 이해하는 유일한 방법은 소프트웨어 개발을하는 것입니다.
“어떤 엔티티가 필요한가?”와 같은 질문에 대한 재고 답변이 없기 때문에 이에 대한 지름길은 없습니다. 대신, 다양한 도구와 패러다임에 대한 경험과 함께 작동하는 방식을 적용하여 당면한 문제에 대한 실질적인 해결책을 찾아야합니다.
“클래스 나 데이터베이스를 사용하여이 작업을 수행합니까?”와 같은 질문 사물이 무엇이고 어떻게 작동하는지에 대한 기본 지식이 부족하다고 제안합니다. 클래스 는 코드를 구성하는 패러다임입니다. 데이터베이스 는 데이터 저장 방법입니다. 그것들은 본질적으로 무관 한 두 가지 개념입니다 (함께 작용할 수는 있지만) 이것은 하나 또는 질문이 아닙니다.
나는 가혹하다는 의미는 아니지만, 그런 면접에서 성공하기 위해서는 코딩 경험을 개발해야한다고 생각합니다. 사진 공유 앱에 대한 토론에는 올바른 아이디어가 있으며 올바른 방향으로 향하고 있습니다. 그러나 이것이 어떻게 작동하는지 배워야합니다. 인터뷰를 준비하는 가장 좋은 방법은 실제로 처음부터 끝까지 응용 프로그램을 만드는 것입니다. 사진 공유 앱은 적절한 크기의 프로젝트이거나 다른 것을 선택할 수 있습니다. 모든 부품이 함께 작동하여 작동하는 응용 프로그램을 만드는 방법을 알면 지식이 실제로 확장됩니다.
답변
이것이 데이터베이스 스키마 또는 많은 클래스 정의를 기대하는 것 같습니다 (또는 둘 다?)
나는 당신이 여기에 세부 사항에 너무 집중하고 있다고 생각합니다. 이 질문으로, 모집자는 당신이 작성하는 모든 수업에 대한 완전한 설명을 기대하지 않습니다 (그렇지 않으면 코드를 쓰지 말고 이야기하지 말 것).
대답은 먼저 아키텍처, 계층, 계층, 프로젝트 수명주기 및 개발 프로세스에 이르기까지 큰 그림에 대한 것이어야합니다. 주저하지 말고 요구 사항과 응용 프로그램이 실행되는 환경에 대한 답변을 조정하십시오. dan1111이 지적했듯이 올바른 응용 프로그램 디자인을위한 일반적인 방법은 없습니다. 모든 디자인은 상황에 따라 다릅니다.
모집자가 실제로 특정 질문을하기 시작한 경우에만 어떤 클래스, 엔티티 또는 데이터베이스 테이블에서 사용할 것인지에 대해 자세히 설명해야합니다.
또한 경험이 거의없는 경우에는 “지금까지 가르쳐 왔고 사용했던 응용 프로그램 디자인 유형을 사용하여 솔루션을 보여 드리겠습니다.이 방법과 내가 설명 할 수있는 다른 방법을 알고 있습니다” “하지만 다른 사람들을 발견하고 적용 할 수 있습니다.”
툴박스에 너무 많은 도구가 있다는 사실만으로도 아무런 경험이 없습니다. 실제로는 실제로 어떻게 작동하는지 전혀 알지 못하는 리허설 된 답변을 내놓는 것보다 낫습니다.
답변
나는 당신의 첫 번째 질문에 대해 빠른 논평을 할 것이라고 생각했습니다.
1) 어떤 엔티티가 필요한지 어떻게 알 수 있습니까?
새 프로젝트를 위해 가장 먼저해야 할 일은 화이트 보드 나 큰 백지에 나와 나와 팀이 생각할 수있는 특정 프로젝트에 대한 모든 물리적 및 개념적 사항을 기록하는 것입니다. 브레인 스토밍 세션입니다.
명사는 객체 인 경향이 있고 동사는 사용 사례 또는 방법 인 경향이 있습니다.
물리적 : 사진 (명백한!), 표시 유형, 시스템, 사진 파일, 파일 형식, 사용자, 날짜 ….
개념 : 사진 추가, 삭제, 저장 / 저장, 검색, 정렬, 수정, 사진보기 / 표시 ….
명사와 동사를 연결하십시오. 사용자가 사진을 추가합니다. (음-사용 사례가 있습니다!)
또한 UML 및 디자인 패턴을 살펴보고 일반적인 OOD에서 사용하는 방법을 제안합니다. (주의 사항-위의 언어 또는 데이터베이스에 대해서는 언급하지 않았습니다. 언어를 선택한 다음 OOD를 수행하십시오. OOL로 디자인을 구현할 수있는 방식으로 OOD를 수행하십시오.