[Chia sẻ] Tổng hợp những câu hỏi kinh điển khi phỏng vấn kỹ thuật vị trí Ruby Dev - Phần 1: SQL, OOP

Lời mở đầu

Chào các bạn! Hôm nay, mình xin được chia sẽ một số câu hỏi khi tham gia phỏng vấn kỹ thuật của 1 Ruby Dev mà mình đã gặp hoặc bịa thêm (nếu mình là người phỏng vấn ^^). Với mình, bài viết này có ý nghĩa giúp mình tự kiểm tra lại kiến thức cơ sở, và cũng hi vọng những bạn sắp phỏng vấn có thể tham khảo để tự tin hơn 😄 Những câu trả lời trong bài viết là do mình hiểu và chém theo cách hiểu của mình, các bạn nên google thêm để có câu trả lời tốt nhất khi tham gia phỏng vấn.

Bắt đầu thôi!

Câu hỏi kinh điển đầu tiên: "Hãy tự giới thiệu bản thân mình", hãy PR bản thân nhiều nhất có thể =)) (cơ mà đừng chém quá đà, không biết nói biết coi chừng thảm họa :v) Sau chuyên mục quảng cáo sẽ là chuyên mục chính "Dân hỏi bộ trưởng trả lời", "Hỏi cung", bla bla, ... Mình xin được chia các câu hỏi thành các phần chính như sau:

  • Kiến thức SQL
  • Kiến thức OOP
  • Hiểu biết về Ruby
  • Hiểu biết về Rails
  • Các hiểu biết liên quan như REST, Javascript

Các bạn hãy cùng thử sức nhé!

Những câu hỏi về SQL

Phân biệt các loại join

-> Với câu hỏi này thì các bạn phải trả lời 2 vế là có bao nhiêu loại join và khác nhau giữa các loại join đó. Theo mình biết thì có 5 loại join là Inner Join, Left Join, Right Join, Full Join và Self Join. Inner Join trả về những record có chung giá trị của 2 bảng Left Join trả về tất cả record của bảng bên trái và những record phù hợp của bảng bên trái Right Join ngược lại với left join Full Join trả về hết Self Join tự join chính nó

Quan hệ nhiều - nhiều thể hiện như thế nào

-> Câu này khá là vi diệu. Theo mình thì nó được thể hiện qua bảng trung gian và liên kết bằng các trường khóa chính và khóa ngoại giữa các bảng

Các kiểu index trong sql

-> Tất nhiên là liệt kê xong thì auto phân biệt rồi 😄 Index nó giống như cái mục lục của cuốn sách. Mục đích là nhằm tăng tốc độ truy xuất dữ liệu. Có 2 loại index là Clustered Index và Non-Clustered Index. Tham khảo tại đây nhé: http://sinhvienit.net/forum/clustered-index-va-non-clustered-index.41251.html

Lợi, hại của việc đánh index

-> Lợi là nó sẽ truy xuất dữ liệu nhanh hơn Hại là mỗi lần update, destroy nó lại phải đánh lại cây index (trong trường hợp Non-Clustered Index)

Phân biệt delete và truncate

-> Link tiếng việt full không che 😄

Phân biệt WHERE và HAVING

-> Tham khảo nè!

Phân biệt UNION và UNION ALL

-> UNION được dùng để phối hợp kết quả của 2 hay nhiều câu lệnh select. KHi dùng UNION thì các bản ghi trùng nhau sẽ bị distinct, nếu muốn giữ lại thì dùng UNION ALL

Viết một số câu SQL theo yêu cầu

-> Vạn sự tùy duyên =))

Những câu hỏi về OOP

Đúng như khi đi học, mọi thứ khá là trừu tượng, hãy trả lời theo cách hiểu của bạn ^^

Lập trình hướng đối tượng là gì?

-> Nói ngắn gọn: Nó là phương pháp lập trình qui tất cả về 1 đối tượng, khi cần chỉ việc lấy ra sử dụng.

4 tính chất của OOP. Định nghĩa, ví dụ

-> Google: Tính kế thừa, tính trừ tượng, tính đóng gói, tính đa hình

3 cơ chế của OOP. Phân biệt, ví dụ

-> Public: Thể hiện và con nó có thể truy cập Protected: Chỉ thằng con nó có thể truy cập Private: Không cho ai truy cập Tất nhiên là chỉ tính kế thừa và ngoài class, con trong class thì truy cập tất rồi :v

Hàm dựng, hàm hủy nó hoạt động như thế nào?
Phân biệt class và object

-> Class là một khuôn mẫu để tạo ra object Object là 1 thể hiện được đặt tên của class

Phân biệt interface với abstract

-> Giống nhau: Đều không thể tạo đối tượng trực tiếp từ 1 abstract hoặc interface Đều có thể khai báo các phương thức nhưng không thực hiện chúng Đều bao gồm các phương thức abstract Đều được thực thi từ các class con hay còn gọi kế thừa, dẫn xuất. Khác nhau: Abstract cho phép khai báo field còn interface thì không. Abstract có thể có thân hàm hoặc không còn interface thì chỉ có khai báo thân hàm thì không. Abstract có chứa contructor còn interface thì không. Abstract có thể xác định modifier còn interface mặc định public

Các hiểu biết liên quan như REST, Javascript

Hiểu biết về RESTful

-> Link đây

POST và GET khác nhau thế nào?

-> Mình nghĩ cơ bản thì 1 thằng giấu params, 1 thằng khoe params

PATCH và PUT khác nhau thế nào?

-> Nói dễ hiểu thì PATCH nó như bản vá, bạn cập nhất trường nào thì gửi trường đó lên. Còn PUT như bản thay thế, cập nhật thì gửi luôn các trường không đổi

Gắn sự kiện, hủy sự kiện trong js

-> Có khá nhiều cách bind(), addEventListener(), unbind(), removeEventListener(), ...

Cơ chế ajax

Phun link!

To be continued ....

Phần này mình xin dừng tại đây. Ở phần sau mình sẽ tiếp tục với những câu hỏi về Ruby và Rails. Câu trả lời trong bài chỉ là mình tự ôn lại kiến thức, nếu có gì sai rất hi vọng được mọi người chỉ giáo (quaylen)