Tôi nên mong đợi gì từ một đánh giá kỹ thuật cho C ++? [đóng cửa]


10

Tôi đã được yêu cầu kiểm tra / đánh giá kỹ thuật cho một công việc như một nhà phát triển cơ sở, chủ yếu sử dụng C ++. Đây là bài kiểm tra / đánh giá đầu tiên của tôi và nó dài 2 giờ.

C ++ của tôi hơi bị rỉ sét vì tôi đã thực hiện các dự án gần đây trên PHP.

Đây là một công ty của Vương quốc Anh, tuy nhiên tôi đoán thử nghiệm kỹ thuật của các ứng cử viên sẽ khá giống nhau ở mọi nơi.

Tôi nên mong đợi điều gì trong một trong những thử nghiệm này?


1
Câu hỏi này là dành cho PHP, nhưng câu trả lời áp dụng: programmers.stackexchange.com/questions/73654/...
Eric Wilson

Câu trả lời:


5

Đó là C ++, vì vậy bạn có thể mong đợi bất cứ điều gì, ý tôi là THỰC SỰ bất cứ điều gì.

Thông thường liên quan đến câu hỏi mẹo và một số loại câu hỏi đa hình.

Nhưng có thể là một cái gì đó đơn giản là tốt.

Hãy sẵn sàng trả lời một câu hỏi về một cái gì đó như "tại sao bạn lại tạo ra một kẻ hủy diệt ảo", "dễ bay hơi", "thiết kế một lớp" cho một số vấn đề không thực tế, "thực hiện một danh sách được liên kết", "đảo ngược chuỗi", v.v.


Tôi thêm vào " mutabletừ khóa được sử dụng để làm gì?" đến thể loại gì cũng được.
Tom

5

Nếu đây là thử nghiệm C ++ thuần túy (nghĩa là không phải thử nghiệm Windows / MFC / Managed C ++), thì hãy dành vài giờ hoặc một ngày với C ++ hiệu quả của Scott Meyer và bạn nên làm rất tốt. Nó không bao gồm các mẫu và STL, nhưng nếu họ quan tâm đến điều đó, có lẽ họ sẽ không cho bạn kiểm tra hai giờ. Đã được vài năm, nhưng tôi thường phỏng vấn các nhà phát triển C ++. Mặc dù các ý tưởng trong C ++ hiệu quả là nền tảng cho lập trình C ++, nhưng chỉ có khoảng mười phần trăm các ứng cử viên biết chúng.


1
+1 cho đề xuất sách - và bỏ qua Sách C ++ hiệu quả hơn của Scott Meyer. Khi tôi từng phỏng vấn các lập trình viên, tôi cũng sẽ nhìn vào sự trung thực về trí tuệ (bạn có cố gắng và vô tội vạ hay bạn thừa nhận bạn không biết), bạn có biết những gì bạn không biết, và bạn có biết tìm ở đâu không một câu trả lời. (Nếu phỏng vấn ai đó tuyên bố đã làm việc trong C ++, các câu hỏi sẽ khó hơn nhiều). Nếu không có bất cứ điều gì gợi ý các kỹ năng lập trình bằng các ngôn ngữ khác trong CV của bạn, tôi cũng sẽ yêu cầu bạn viết một chương trình đơn giản và xem xét liệu bạn có bao quát chính xác các trường hợp góc hay không.
MZB

Tôi tốt nghiệp ngành điện toán, tôi được dạy cách làm các chương trình trong bảng điều khiển trong C ++, tôi được dạy để thực hiện Cây phân loại nhị phân, và các danh sách được liên kết đôi, v.v. làm thế nào để thực hiện chúng. Vai trò công việc là dành cho một sinh viên tốt nghiệp, vì vậy tôi không biết họ mong đợi gì ở tôi, vì tôi không có kinh nghiệm làm việc thực tế về C ++.
gấu

4

Vâng, nó phụ thuộc vào thời tiết hay không họ sẽ cho phép bạn sử dụng google. : P

Tôi thường làm khá tốt trong các bài kiểm tra kỹ thuật, miễn là tôi có thể sử dụng các công cụ xung quanh mình. Khi họ muốn tôi viết mã bị mù khi tôi gặp rắc rối. Vì vậy, lời khuyên tốt nhất tôi có thể cung cấp cho bạn là mã mù ở nhà ... Hãy chắc chắn rằng bạn nhớ những thứ tầm thường mà chúng ta cho là vì chúng ta có thể kiểm tra chúng dễ dàng nếu chúng ta không nhớ.

Ngoài ra, thường là kiểm tra các kỹ năng đặc biệt mà họ cần, vì vậy nếu bạn biết bạn sẽ làm gì, hãy tập trung vào đó.

(Đây là kinh nghiệm chung của tôi, tôi không đến từ Vương quốc Anh)


Thế còn lý thuyết, đa hình, kế thừa. Tôi chỉ biết lý thuyết cho điều đó từ khi mới tốt nghiệp nhưng tôi không biết cách thực hiện nó trong C ++
bearbread

Việc thực hiện của họ không khó lắm, có lẽ bạn có thể xem lại chúng rất nhanh. Phần quan trọng là biết khi nào nên sử dụng chúng, khi nào bạn sẽ cần nó. Chúng là một mô hình chức năng hơn là một điều kiện tiên quyết thực tế. Ý tôi là bạn có thể thoát khỏi mà không cần sử dụng chúng, nhưng bạn sẽ được biết là sẽ biết chúng nếu cần.
AJC

@bearbread: lý thuyết tự nó không có giá trị nhiều. đọc về các mẫu thiết kế và cố gắng thực hiện chúng
Karoly Horvath

Tôi biết các mẫu thiết kế như MVC cho PHP, đó có phải là ý bạn không?
gấu

1

Mã thực hành kata Chọn một thuật toán đơn giản (bộ đệm vòng, tháp Hà Nội, tìm kiếm nhị phân, bất cứ thứ gì) và mã từ đầu. Sau đó làm lại lần sau, lần sau và lần sau, và lần sau, v.v. Nhìn vào cách bạn có thể cải thiện chúng ở mỗi lần lặp.


1
+1. Cũng làm điều đó với một người bạn có nhiều kinh nghiệm hơn một chút. Thay phiên nhau để lập trình, cả hai bạn sẽ học được điều gì đó mới.
Tom

0

Đó là sự thật bạn có thể mong đợi bất cứ điều gì.

Họ nói với bạn rằng bài kiểm tra là C ++ nhưng có lẽ đó thực sự là tập con C của C ++ mà họ sử dụng trong các bài kiểm tra của mình (bạn sẽ sử dụng mảng char thay vì chuỗi thư viện chuẩn). Điều này sẽ khó biết.

Nếu đó thực sự là C ++, tôi sẽ khuyên bạn nên xem những điều cơ bản:

  • Các lớp, biến, mảng
  • tài liệu tham khảo, con trỏ (và tại sao bạn không nên sử dụng chúng theo mặc định)
  • việc sử dụng từ khóa const
  • Các khái niệm đối tượng định hướng (kế thừa, đa hình ...)
  • Mẫu

sau đó:

  • Sử dụng thư viện tiêu chuẩn (std :: string, std :: vector, container, ...)

0

Những gì đã được đăng lên là tuyệt vời cho đến nay, nhưng tôi sẽ thêm một cái gì đó và một câu chuyện! Tôi muốn nói rằng thực hành áp dụng những gì bạn biết trong C ++ cho các vấn đề trong miền của công ty phần mềm. Thật tuyệt nếu bạn biết tất cả các vấn đề trong và ngoài C ++ nhưng nếu bạn không thể áp dụng cho một vấn đề, bạn sẽ vô dụng với công ty. Xem như đây là một vị trí nhà phát triển cơ sở, tôi sẽ không nghĩ họ sẽ mong bạn biết mọi thứ về C ++.

Tôi đã thực hiện bài kiểm tra kỹ thuật đầu tiên cho công việc nhà phát triển đầu tiên của mình vào tuần trước và rất ngạc nhiên với những gì tôi tìm thấy. Tôi đã mong đợi một cái gì đó như FizzBuzz hoặc một cái gì đó khó chịu hơn (đây là cho Java, btw) nhưng những gì tôi tìm thấy là họ đã đưa cho tôi một tệp và đưa tôi phân tích nó sang một định dạng mới, đó là một phần của công việc. Trên hết, họ cho tôi sử dụng Google và các thư viện của riêng họ. Tóm lại, bạn cần biết C ++ nhưng nếu bạn muốn biết thử nghiệm có thể như thế nào, hãy xem tên miền của vị trí bạn đang ứng tuyển và thực hiện C ++ theo hướng nào đó trong miền đó.


Tôi đoán rằng <1% số lập trình viên C ++ biết mọi thứ của ngôn ngữ :) Chỉ cần lấy tất cả các trường hợp hành vi không xác định / không xác định / xác định thực hiện làm ví dụ.

0

Bạn có phải:

  1. Viết mã
  2. nhiều lựa chọn
  3. Phỏng vấn trực tiếp

Khi viết mã

Họ sẽ mong bạn biết (và sử dụng):

  • RAII
  • Quy tắc ba
  • Hiểu con trỏ thông minh

Họ có thể sẽ kiểm tra bạn trên:

  • Di sản
  • Chức năng ảo
  • Tuần tự hóa đến / từ một luồng
  • quá tải các toán tử số học (không thường được sử dụng trong cuộc sống thực nhưng dễ dàng viết một bài kiểm tra xung quanh).

Nếu bạn không may mắn, họ có thể nghĩ

  • Nhiều lớp kế thừa và lớp cơ sở ảo là điều bạn nên biết.
    • Nó không nhưng một số người phát điên.

Khi có nhiều lựa chọn

  • Hiểu tất cả các thuật ngữ OO
  • Biết các cách thực hiện O ++ của C ++

Phỏng vấn cá nhân

  • Tất cả những điều trên.
  • Kiến thức về đệ quy
  • Làm thế nào để chuyển đổi đệ quy thành một vòng lặp
  • Cách ước tính độ phức tạp Big O ()
  • Các thuật toán sắp xếp tiêu chuẩn (không chỉ bong bóng).

1
Tôi là một lập trình viên C chứ không phải C ++, vì vậy tôi không biết nói chuyện ... nhưng tôi chưa bao giờ nghe về RIAA và quy tắc ba. Tuy nhiên tôi đã nghe nói về RAII (thu thập tài nguyên là khởi tạo, tức là hàm hủy của bạn sẽ dọn sạch mớ hỗn độn của chính nó) và tôi biết rằng nếu mã của bạn cần một bản sao ctr, toán tử gán quá tải hoặc hàm hủy, thì nó cần cả ba. Dường như với tôi rằng một cuộc phỏng vấn là một câu đố vặt trong tiếng lóng lập trình hơn là một bài kiểm tra kỹ năng của bạn, nói điều gì đó không tốt về công ty.

1
Và tương tự, nếu họ hỏi về nhiều kế thừa và đệ quy, tôi sẽ cho rằng cơ sở mã của họ là một mớ hỗn độn lớn. Nếu họ mong đợi bạn biết tất cả các thuật toán sắp xếp phổ biến ngoài màu xanh, làm thế nào để thực hiện đệ quy unrolling, tuần tự hóa đối tượng, v.v., nó cũng nói điều gì đó không tốt về công ty. Họ không mong đợi devs của họ cho robot? Trong thế giới thực, bạn nhìn những thứ như vậy trước khi sử dụng chúng. Ngay cả khi tôi biết lý thuyết đằng sau tất cả những điều đó, tôi vẫn sẽ tìm kiếm chúng, chỉ để đảm bảo rằng tôi sử dụng giải pháp tối ưu hơn là một cái gì đó vì vậy tôi đã tự mình nghĩ ra.

@Lundin: Bạn không cần biết những cái tên mượt mà nhưng bạn cần phải biết các nguyên tắc, bằng cách đề cập đến chúng ở đây sẽ giúp bạn dễ dàng tra cứu. Bạn cần biết các thuật toán sắp xếp bởi vì bạn cần biết nên sử dụng thuật toán nào và khi nào (và quan trọng hơn là tại sao) (những điều robot không thể làm nhưng con người làm rất tốt).
Martin York

Không có gì sai với đệ quy hoặc tăng cường nhiều. Vấn đề là với các nhà phát triển về việc sử dụng nó (và thực hiện nó không chính xác). Một số vấn đề chỉ có thể được giải quyết (dễ dàng) bằng cách sử dụng đệ quy (phân tích độ sâu cấu trúc cây trước).
Martin York


-1

Tôi đã nhận được trong cuộc phỏng vấn cuối cùng của tôi:

Sự khác biệt giữa việc truyền một đối tượng cho một hàm theo giá trị / tham chiếu / con trỏ và vị trí và lý do bạn sẽ làm điều đó.

Hoán đổi 2 bit cuối cùng của một số nguyên, ví dụ RGBA sang RGAB.

RIAA là gì?

Xác định lập trình meta mẫu: bạn có thể nhận được câu hỏi về "giải quyết vấn đề này với TMP .."

Những gì có thể thay đổi, dễ bay hơi, const vv vv có nghĩa là gì? biết tất cả các từ khóa.

nhiều kế thừa .... một lần nữa và một lần nữa.

Đa luồng: Người tiêu dùng sản xuất và bộ đệm chia sẻ đối tượng.

Một vài câu hỏi ngoại vi nữa:

Tập hợp và tổng hợp UML

Các mẫu thiết kế: triển khai một singleton ... Các thành phần phổ biến của MVC là gì?

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.