Quá trình suy nghĩ chung cho nhóm Làm thế nào bạn có thể xây dựng trang web / ứng dụng này Câu hỏi phỏng vấn [đóng]


14

Tôi đã thu thập một loạt các câu hỏi phỏng vấn như "Mô tả cách bạn sẽ thiết kế ứng dụng album ảnh", "Mô tả cách bạn sẽ thiết kế tính năng đặc biệt này của trang web cụ thể này" (ví dụ: thích trên Facebook, đề xuất trên Amazon, giỏ hàng, trò chơi của jack đen). Sau đó, nếu có hàng triệu thứ này thì sao? Bạn sẽ thay đổi điều gì?

Có vẻ như điều này hoặc là mong đợi một lược đồ cơ sở dữ liệu hoặc một loạt các định nghĩa lớp (hoặc cả hai?). Tôi đã học về cơ sở dữ liệu ở trường nhưng tôi chưa bao giờ thực sự kiến ​​trúc một ứng dụng trước đây và gặp khó khăn khi biết bắt đầu từ đâu, liệu các thiết kế tôi đưa ra có "tốt" hay không và tôi có thể thay đổi gì để có thể mở rộng được.

Có một cách tiếp cận chung hoặc quá trình suy nghĩ khi thiết kế các hệ thống này? Và những vấn đề / vấn đề chung dường như xuất hiện rất nhiều trong thiết kế mà tôi nên cố gắng tránh? Ai đó có thể dẫn tôi đi qua một (hoặc tốt nhất là tất cả, trong khi so sánh nhu cầu của từng người) và giải thích:

1) Làm thế nào để bạn đưa ra những thực thể cần thiết? 2) Làm thế nào để bạn quyết định những mối quan hệ tất cả mọi thứ sẽ có? 3) Làm thế nào để bạn kết hợp tối ưu hóa hiệu suất vào thiết kế của bạn? 4) Tôi có làm điều này bằng cách sử dụng các lớp hoặc cơ sở dữ liệu không? Liệu nó có tạo ra sự khác biệt không (ví dụ tôi có một lớp không thể dịch sang bảng cơ sở dữ liệu không?)

Lý do chính tôi hỏi là vì tôi đã trải qua "Bẻ khóa phỏng vấn mã hóa" và câu trả lời của tôi hoàn toàn khác với tác giả - tôi có những ý tưởng rất khác nhau về những lớp học quan trọng.

ATTEMPT CỦA TÔI: Với ứng dụng chia sẻ ảnh, tôi chắc chắn sẽ có các lớp / bảng: Ảnh và Người dùng chắc chắn.

Sau đó, tôi nghĩ rằng nếu chúng ta đang cố gắng tạo một lược đồ, sẽ có một bảng liên kết ảnh và người dùng nếu chúng ta giả sử mỗi người trong ảnh được liên kết với ảnh (bảng này có cần thiết không? Nếu không, nó vẫn còn là thông lệ để có một bảng riêng cho các mối quan hệ nhiều-nhiều hay không?).

Nhưng nếu chúng ta đang cố gắng thực hiện một cách tiếp cận hướng đối tượng, có thể thay vào đó chúng ta sẽ có một lớp được gọi là album thực hiện tất cả công việc và có tất cả thông tin từ hai bảng / lớp khác. Đây là một điều tôi nhận thấy trong cuốn sách - có một nhóm các lớp và sau đó một lớp về cơ bản có tất cả thông tin và kết nối các lớp khác - điều này có phổ biến không? Ví dụ, trong các ví dụ của tôi ở trên, điều này có vẻ như nó sẽ được áp dụng?

Tôi chỉ hy vọng một số quy tắc / hướng dẫn chung để tuân theo bởi vì ngay bây giờ tôi không biết làm thế nào để biết một kiến ​​trúc tốt cho một hệ thống lớn trông như thế nào.


1
Giả sử bạn đang mã hóa một album ảnh như một dự án sở thích. Thay vì hỏi "tôi có đang đi đúng hướng không?" (dĩ nhiên, vì tất cả các yêu cầu đang đi đúng hướng, theo một cách nào đó), bạn có thể sẽ hỏi "cảm giác như khía cạnh này của thiết kế khiến mọi thứ trở nên khó xử một cách không cần thiết; chúng ta có thể thay đổi mọi thứ xung quanh để làm mọi thứ đơn giản hơn không? " Nhưng làm thế nào để bạn biết rằng có một số khía cạnh vô duyên của thiết kế? Bằng cách làm việc thông qua các thí nghiệm suy nghĩ như trường hợp sử dụng và trường hợp xấu nhất. Ngoài ra: "yêu cầu đăng nhập này khá phổ biến; chúng ta có thể tìm một thư viện thay vì tự phát minh lại không?"
Evgeni Sergeev

Câu trả lời:


19

Điểm của những câu hỏi như vậy là để đánh giá xem bạn có kỹ năng thực tế trong việc viết một ứng dụng phần mềm hay không. Bạn đã học được một số lý thuyết, nhưng kiến ​​thức lý thuyết chỉ có thể đi xa. Cách duy nhất để thực sự hiểu phát triển phần mềm là làm điều đó.

Không có lối tắt nào cho vấn đề này, vì không có câu trả lời chứng khoán cho các câu hỏi như "những thực thể nào là cần thiết?" Thay vào đó, bạn phải áp dụng kinh nghiệm của mình về các công cụ và mô hình khác nhau và cách chúng hoạt động cùng nhau, để đưa ra một giải pháp thực tế cho vấn đề trong tay.

Một câu hỏi như "Tôi có làm điều này bằng cách sử dụng các lớp hoặc cơ sở dữ liệu không?" gợi ý rằng bạn thiếu kiến ​​thức cơ bản về những thứ và cách chúng hoạt động. Các lớp học là một mô hình để tổ chức mã của bạn; cơ sở dữ liệu là một phương pháp lưu trữ dữ liệu. Chúng là hai khái niệm vốn không liên quan (mặc dù chúng có thể làm việc cùng nhau). Đây không phải là một hoặc / hoặc câu hỏi.

Tôi không có nghĩa là khắc nghiệt, nhưng tôi nghĩ bạn cần phát triển kinh nghiệm mã hóa của mình để thành công trong một cuộc phỏng vấn việc làm như vậy. Bạn chắc chắn có tiềm năng - cuộc thảo luận của bạn về ứng dụng chia sẻ ảnh có một số ý tưởng đúng và đang đi đúng hướng. Nhưng bạn cần phải học cách làm việc này trực tiếp. Cách tốt nhất để chuẩn bị cho cuộc phỏng vấn của bạn là thực sự tạo một ứng dụng từ đầu đến cuối. Một ứng dụng chia sẻ ảnh sẽ là một dự án có kích thước phù hợp hoặc bạn có thể chọn một cái gì đó khác. Kiến thức của bạn sẽ thực sự mở rộng khi bạn thấy tất cả các bộ phận có thể làm việc cùng nhau để tạo ra một ứng dụng hoạt động như thế nào.


8

Có vẻ như điều này hoặc là mong đợi một lược đồ cơ sở dữ liệu hoặc một loạt các định nghĩa lớp (hoặc cả hai?)

Tôi nghĩ bạn quá tập trung vào chi tiết ở đây. Với câu hỏi đó, nhà tuyển dụng không mong đợi một mô tả đầy đủ về tất cả các lớp bạn sẽ viết (nếu không họ sẽ yêu cầu bạn viết mã, không nói về nó).

Câu trả lời của bạn trước tiên cần là về bức tranh lớn - kiến ​​trúc, tầng, lớp, thậm chí cả vòng đời dự án và quy trình phát triển mà bạn sẽ đặt. Đừng ngần ngại đặt câu hỏi về các yêu cầu và môi trường mà ứng dụng được cho là chạy vào để điều chỉnh câu trả lời của bạn. Như dan1111 đã chỉ ra, không có công thức chung cho một thiết kế ứng dụng chính xác. Tất cả các thiết kế là phụ thuộc vào bối cảnh.

Chỉ khi nhà tuyển dụng bắt đầu hỏi những câu hỏi thực sự cụ thể thì bạn mới nên đi vào chi tiết về những lớp, thực thể hoặc bảng cơ sở dữ liệu nào bạn sẽ sử dụng dưới mui xe.

Ngoài ra, nếu bạn có ít kinh nghiệm, chỉ bình thường khi nói "Tôi sẽ chỉ cho bạn một giải pháp bằng cách sử dụng kiểu thiết kế ứng dụng mà tôi đã được dạy và sử dụng cho đến bây giờ. Tôi biết điều này và các cách tiếp cận khác mà tôi có thể mô tả cho bạn nói chung nhưng chưa bao giờ thực sự áp dụng chúng. Tôi cũng sẵn sàng khám phá và áp dụng những người khác ".

Không có gì sai khi thừa nhận rằng chỉ có rất nhiều công cụ trong hộp công cụ của bạn mà kinh nghiệm của bạn cho phép bạn có - thực tế, tốt hơn là đưa ra một câu trả lời được diễn tập mà bạn không biết nó hoạt động như thế nào trong thực tế.


2

Tôi nghĩ tôi sẽ bình luận nhanh về câu hỏi đầu tiên của bạn:

1) Làm thế nào để bạn đưa ra những thực thể cần thiết?

Điều đầu tiên tôi làm cho một dự án mới là, trên một bảng trắng hoặc một tờ giấy trắng lớn, viết ra tất cả những điều vật lý và khái niệm về dự án cụ thể mà tôi và nhóm của tôi có thể nghĩ ra. Đó là một phiên động não.

Danh từ có xu hướng là đối tượng, động từ có xu hướng sử dụng trường hợp hoặc phương thức.

Vật lý: ảnh (hiển nhiên!), Loại hiển thị, hệ thống, tệp ảnh, định dạng tệp, người dùng, ngày ....
Khái niệm: thêm, xóa, lưu / lưu trữ, truy xuất, sắp xếp, sửa đổi, xem / hiển thị ảnh ....

Tạo kết nối giữa danh từ và động từ. Người dùng thêm ảnh. (Chà - có một trường hợp sử dụng!)

Tôi cũng sẽ đề nghị xem xét UML và các mẫu thiết kế và làm thế nào chúng có thể được sử dụng trong chung chung. .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.