CHUYÊN ĐỀ 1: NHỮNG CÂU HỎI LIÊN QUAN ĐẾN C/ C++ (phần 2)

NHỮNG CÂU HỎI LIÊN QUAN ĐẾN C/ C++

Câu hỏi 4:  C ++ đáng giá để học chứ?

( Tôi có hai khóa học ngôn ngữ lập trình:  C ++ được giảng dạy trong khóa học đầu tiên, thứ hai là C # . Tôi chưa biết gì về lập trình, và đó là lý do tại sao tôi không biết bất cứ điều gì, dễ hay khó khi học C++. Tôi nghĩ tôi sẽ tự học trước về C++ từ một số giáo trình. Nhưng trước đó, tôi muốn biết liệu có đáng để học C++ ko? Vì giả sử, C++ là ngôn ngữ lập trình cũ, và giờ đây có những ngôn ngữ khác, mới và dễ hơn?)

Trả lời:

* Chris Loughnane, tersely cogent

Dù tôi có ghét C++ đến đâu đi nữa, tôi vẫn phải công nhận, nó là nền tảng cơ bản của mọi thứ. Nếu bạn muốn học một ngôn ngữ lập trình dễ dàng hơn, thì tôi sẽ giới thiệu cho bạn Python, một phần vì nó phổ biến, phần nữa là vì tôi thích nóTuy nhiên, dù Python thực sự tuyệt vời, có cộng đồng lớn, cả tấn thư viện tốt, nó vẫn có 2 điểm thua C++:

  • Tốc độ. Dưới điều kiện tốt nhất( tức là khi Python có cấu hình hoàn chỉnh và tối ưu hóa, và được sử dụng trong một ứng dụng rất cụ thể), nó có thể có được tốc độ so sánh với C. Trong khi điều này ngày một ít hơn(chủ yếu là vì Python được viết bằng C), nó vẫn là trường hợp “ râu ria”.  Thông thường C / C ++ có thể đánh bại Python khi xét về cường độ/ tốc độ.
  • Có rất nhiều công cụ rất cool, ưu thế vượt trội đều được viết bằng C++.  Ví dụ, những thứ như OpenRAVE, OpenCV, OpenNI, ROS, … đều được viết bằng C++. Chắc chắn chúng sẽ có liên kết với Python nhưng chất lượng của chúng (trong khi nói chung là rất tốt)- đây là những gì bạn có thể mong đợi- tiếp cận C++, nhưng không bao giờ được như vậy… nó giống như công dân hạng hai.

Vì vậy, nếu bạn muốn lập trình Hardcore, hãy học C ++, đặc biệt là cho các hệ thống nhúng.

Caesar Sebastian De la Paz III, CPU/SoC Performance Modeling, Sofware Enginner

Bắt buộc ý chứ!

Môi trường làm viêc: bất cứ dự án mà bị hạn chế thường sẽ sử dụng C++. Ngay cả các ngôn ngữ lập trình/ kĩ thuật tương tự (Cuda, MPI, v…v…) đều phụ thuộc vào kiến thức về C++( con trỏ, dereference, số học, v..v..) để thực hiện nhiệm vụ. Trong lĩnh vực về kiến ​​trúc máy tính, mỗi mô phỏng nổi tiếng ra có được viết bằng C ++. Các hệ thống nhúng (một lĩnh vực không ngừng phát triển) được đánh giá là thiên về C. Hệ điều hành, mạng máy tính, đồ họa .. , hầu hết các dự án đều được mã hóa trong C ++.

Quá trình phỏng vấn: Hầu hết các câu hỏi phỏng vấn đều có ý viết bằng C++ vì chúng tập trung vào  Linked list, BST, Heaps. Mặc dù bạn có thể code chúng bằng những ngôn ngữ khác nhưng làm phép tính con trỏ bằng C++ sẽ có lợi hơn và rất nhiều nhà tuyển dụng đặc biệt yêu cầu bạn phải lập trình chúng với C/C++.

Nói chung, tuyệt đối không có ngôn ngữ nào đáng học bằng C/C++ (dù nó có lẽ không phải là ngôn ngữ tốt nhất) Mỗi lĩnh vự đều có ngôn ngữ ưa thích (web-> PHP, database->mySQL, scripting->Perl/ Python, Computational->matlab, v..v..) nhưng chắc chắn, bạn sẽ không sai khi chọn C++.

Câu hỏi 5: Làm thế nào để bạn đánh giá một lập trình viên C++ chỉ với 5 câu hỏi?

Trả lời

* Vivek Nagarajan, Writing C++ since 2003

Đối với cấp độ chuyên môn tầm trung hoặc để lọc ứng viên, tôi sẽ hỏi như sau:

  1. Các tính năng quan trọng cao cấp của C++ khiến nó trở nên khác biệt so với các ngôn ngữ cấp cao khác là gì?
  2. Tại sao thư viện chức năng chuẩn qsort() của C có thể chậm hơn STLstd::sort()của C++, cả khi chúng dùng những thuật toán giống hệt nhau?
  3. Giải thích khi nào và vì sao các tham số tới một chức năng nên được thông qua như là tham chiếu const.
  4. Thực hiện một class C ++ đơn giản như một thư viện động có chức năng có thể được sử dụng từ một chương trình C.
  5. Thực hiện một bản sao hợp lý hoàn chỉnh của std :: vector <> class.

Câu trả lời mà tôi kì vọng:

  1. RAII/Deterministic destruction và  Type safe genericity và Compile time meta-programming.
  1. Bởi vì chức năng so sánh được gọi gián tiếp thông qua con trỏ
  2. When? Khi chúng không phải là bản gốc và có kích thước lớn hơn con trỏ. Why? Bởi vì nó tránh sao chép dữ liệu.
  3. Kì vọng một thứ gì đó tương tự như thành ngữ PIMPL, mỗi một thành viên trong class được đưa ra như một function với một opaque void*
  4. Thêm điểm nếu coder tránh phức tạp bằng việc thực hiện vòng lặp như con trỏ nguyên.

 

* Dale Thomas, Professional C++ programmer for 20 years

Tôi chưa nghĩ ra câu hỏi ngay bây giờ nhưng tôi sẽ hỏi về các khái cạnh này:

  1. C: For/while/do-while loops, if/switch, functions, pointers, macros, preprocessor, vv
  2. OOP: Inheritance, polymorphism, friends, virtual, abstract, overloading, vv
  3. Templates: Function templates, class templates, specialisation, vv
  4. STL: containers, iterators, algorithms, vector, list, map, vv
  5. Khác: exceptions, casting operators, new/delete, etc.

* Pravin Chaudhary, 12 years of C++

  1. Một số điều về C++ mà bạn phát hiện gần đây là gì? ( câu hỏi dành cho mọi người, điều này sẽ giúp tôi biết thói quen học của bạn)
  2. Bạn sẽ khuyên gì với một lập trình viên mới vào nghề trong team?( câu hỏi dành cho mọi người, điều này giúp tôi biết sự hiểu biết của bạn cũng như cách bạn quan tâm đến kết quả công việc như thế nào, và cách bạn có thể tách công việc với các ý kiến chủ quan/ sở thích cá nhân của mình)l
  3. STL container nào mà bạn yêu thích? Tại sao? ( Câu hỏi dành cho người có 2+ năm kinh nghiệm. Kiểm tra mức độ hiểu biết)  
  4. Những tính năng của C ++ bạn tránh mặc dù biết chúng tốt? (4 + năm. Kiểm tra hiểu biết và mức độ sẵn sàng bạn sử dụng bất cứ tính năng gì mà bạn phát hiện ra.)
  5. Nếu bạn có thể thiết kế một phiên bản C ++ tốt hơn nữa, bạn sẽ thay đổi điều gì? (6 + năm. Kiểm tra kiến thức rộng, tổng quát về công nghệ, các mô hình, thay đổi trong thiết kế vv)

 

Câu hỏi 6: Chọn ngôn ngữ C cho phỏng vấn xin việc có phải là một ý tưởng tệ không? Có phải hầu hết các công ty lớn đều hi vọng ứng viên chuyên code về C++, Python hay Java không?

Trả lời:

* Igor Markov, EECS professor at Michigan (currently at Google)

Có 2 lý do giải thích về việc tại sao C không còn đáp ứng được nói chung:

  • Nó quá đơn giản và không nắm bắt được nhiều điều phức tạp liên quan đến phát triển phần mềm hiện đại. Trong khi C có lẽ chỉ ổn cho nhiều câu hỏi thuật toán, câu hỏi thiết kế mà giải quyết các vấn đề, kiểu, một bàn cờ hay một số biến thể của khối Rubik. Viết những thứ này trong C sẽ rất cồng kềnh. Bạn có thể mô phỏng các khía cạnh đơn giản về lập trình hướng đối tượng với C, nhưng trong một dự án lớn, điều này có thể gây nhầm lẫn và rất nhiều tính năng quan trọng của C khiến chúng không thuận tiện trong việc mô phỏng này.
  • Khi giải quyết với một cơ sở mã trong một ngôn ngữ cụ thể, bạn cần phải thành thạo ngôn ngữ đó. Hầu như không có công ty nào sẵn sàng để chờ đợi cho đến khi bạn học và thành thạo . Nếu bạn nghe về việc học một ngôn ngữ lập trình trong 3-4 ngày, đó có thể là một trò đùa chứ không phải là một công việc lập trình nghiêm túc.

Lưu ý rằng C ++, Java và đặc biệt là C # là những ngôn ngữ tương đối mới (trình biên dịch hỗ trợ cho C ++ đã được giới hạn trong những năm 90, và nó đã không được dạy tốt ở nhiều trường đại học). Vì vậy, các ngôn ngữ này không quan trọng đối với các cuộc phỏng vấn cách đây 15 năm. Tuy nhiên, với mỗi năm trôi qua số lượng lập trình viên chỉ chuyên về C ngày một giảm

Các công ty lớn (Amazon, Microsoft) có thể mở các dự án cho những người có các background ngôn ngữ khác nhau, đặc biệt là ở cấp độ entry. Google và Facebook sử dụng nhiều loại ngôn ngữ trong nhiều dự án và không ràng buộc quá trình phỏng vấn với các vị trí riêng biệt (vì vậy, nếu bạn biết Java, bạn có thể vào một dự án mà ở đó, Java là quan trọng). Microsoft, Google và Apple sử dụng ngôn ngữ riêng của họ (C #, Go, Objective C và Swift) cho một lượng lớn các dự án, do đó bạn sẽ phải học những ngôn ngữ này, dù thế nào đi chăng nữa, và quá trình phỏng vấn sẽ rất linh hoạt. Tuy nhiên, nếu bạn không biết bất kỳ ngôn ngữ hướng đối tượng, bạn sẽ được khó khăn để tìm hiểu một ngôn ngữ hướng đối tượng mới.

* Berk Gökden, Engineer – Tech Enthusiast – Programmer

Nó có thể tệ, nhưng cũng còn tùy vào câu hỏi phỏng vấn. Nếu họ hỏi tôi ngôn ngữ nào mà tôi muốn sử dụng, tôi sẽ chọn Java, bởi nó dễ hơn và viết code trong java ngắn hơn so với CTôi dùng Java, C, C++ trong suốt cuộc đời mình.

Với C, bạn cần allocate, initialize, deallocate, v…v… Tôi không đề cập đến C++ trong phỏng vấn, nếu có câu hỏi có thể trả lời với C++, tôi sẽ thay bằng Java. Nếu câu hỏi giống kiểu lặp thông qua một danh sách liên kết, tôi sẽ trả lời với C. Từ lặp với con trỏ thì nhanh và cũng dễ để viết nữa.

Trong một cuộc phỏng vấn, tôi đã chỉ sử dụng C, vì nó là cuộc phỏng vấn về hệ thống nhúng.

Tôi đã sử dụng Java trong hầu hết các cuộc phỏng vấn với start-up. Một số các nhà phát triển mới trẻ thậm chí còn không thực sự hiểu C.

Dù gì đi nữa, tôi tin C thật tuyệt, mọi thứ có thể làm nhanh hơn nếu như bạn thực sự giỏi về nó.

 

Bình luận