[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 2: Ruby, Rails

phần trước, mình đã chia sẽ với các bạn một số câu hỏi về SQL, OOP khi tham gia phỏng vấn vị trí Ruby Dev. Phần này mình sẽ tiếp tục chia sẽ với các bạn những câu hỏi về Ruby và Rails.

Bắt đầu nào!

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

Ruby là một ngôn ngữ lập trình hướng đối tượng, vì vậy những câu hỏi về ruby sẽ liên quan đến hướng đối tượng và những method mà ruby cung cấp

Class trong Ruby là gì?

-> Nghe thì màu mè, nhưng nó cũng giống bao NNLT hướng đối tượng khác, class nó được xây dựng để thống nhất giang sơn, quy các đối tượng có thuộc tính tương đương nhau về một cục, nó có các methods để tương tác với dữ liệu, và nó được sử dụng thông qua các đối tượng thể hiện của nó

Hàm dựng trong Ruby được khởi tạo như thế nào?

-> Ruby không sử dụng từ khóa constructor mà sử dụng initialize để khởi tạo hàm dựng

Module là gì? Sự khác nhau giữa module và class?

-> Module nó giống như 1 cái thư viện, có thể sử dụng nơi nào cần nó, còn class nó chỉ được sử dụng thông qua đối tượng thể hiện của nó. Class có tính kế thừa còn module thì không. Ngược lại, module có thể include vào bất cứ nơi nào trong khi class thì chỉ có thể sử dụng thông qua object, ...

Làm thế nào để getter và setter trong Ruby

-> Easy nhỉ, cứ viết bình thường thôi get_name(), set_name(name). Tuy nhiên chỉ trả lời như thế này thì chưa đủ rồi. Hãy kể đến các từ khóa attr_reader, attr_writer, attr_accessor nghe pro hơn đó =))

self nghĩa là gì?

-> Là chính nó chứ gì nữa 😮. self nó là đối tượng hiện tại. Nó có thể là class hoặc cũng có thể là đối tượng

Kể vài chiêu thức thực thi hàm trong ruby

-> Gọi hàm thì cứ .method_name chứ có cái quái gì mà vài chiêu nữa nhỉ. Tuy nhiên, khi bạn có method_name là 1 string hay 1 cái symbol thì trong Ruby có vài cách gọi thú vị khác như .send(:method_name), .send("method_name"), .method(:method_name).call, .method("method_name").call

Phân biệt class methods và instance methods

-> Bỏ qua định nghĩa, class methods nó được gọi qua class, instance methods được gọi qua object của class

Phân biêt include và extends

-> Để dễ hiểu thì methods từ module dc extends vào class thì được gọi như là class methods, còn methods từ module dc include vào class thì được gọi như là instance methods

Phân biệt map, select, collect, reject, detect, each, inject

-> Choáng! Lắm thứ vãi! map vs select: Chạy qua từng phần tử trong mảng và thực hiện câu lệnh trong block, sau đó return về mảng kết quả. collect: return về 1 mảng từ mảng ban đầu với điều kiện trong block reject: thì trái lại với collect detect: return về giá trị thõa mãn trong block, nếu có nhiều giá trị thì chỉ lấy giá trị gần nhất inject vs each: đơn giản là chạy qua từng phần tử và thực hiện các câu lệnh trong block, éo return gì cả

Block, Proc, lambda là gì? Phân biệt

-> Xin phép quăng link nhé https://viblo.asia/p/block-proc-va-lambda-trong-ruby-jaqG0lQQGEKw

Thôi qua Rails nào!

Rails là gì? Ruby on Rails là gì?

-> Học cho lắm mà không trả lời được câu kinh điển ni thì fail fail nhỉ (yaoming)

ActiveRecord là gì?

-> ActiveRecord là 1 ruby gem đóng vai trò là ORM. Oh, vậy thì ORM là gì? ORM viết tắt là Object Relational Mapping, nó giúp chuyển đổi dữ liệu giữa các hệ thống không tương thích trong lập trình hướng đối tượng. Nói cách khác, nó là cầu nối giữa DB và Rails, giúp truy xuất dữ liệu bằng các câu lệnh đơn giản mà Rails cung cấp

Action Cable là gì?

-> Action Cable mới xuất hiện trong Rails 5, nó là phương thức để thực hiện lập trình web socket trong Rails

ActiveJob là gì?

-> Nó là 1 Ruby gem phục vụ cho việc thiết lập các jobs chạy ngầm trong 1 Rails app

Filter trong controller là gì?

-> Filter là phương thức chạy trước, chạy sau hoặc chạy cùng với các action trong controller

Strong Parameters là gì?

-> Strong Parameters giống như 1 bộ lọc các giá trị được phép thay đổi trong params gửi lên

Dùng nested attributes chưa?

-> Dạ rồi, nested attributes dùng để tạo thuộc tính của bản ghi này thông qua bản ghi khác. Để dùng nó trong Rails thì model phải khai báo accepts_nested_attributes_for, trong view dùng fields_for và trong controller accept attribute như images_attributes: [:id, :url]

Phân biệt preload, include, eager_load và joins

-> Khác nhau khi truy vấn có quan hệ. Preload: Truy vấn 2 câu SQL Include: khi include không thôi thì giống preload, khi include có where với đk bảng liên kết thì sẽ là left joins Eager_load: left joins join: inner join include kết hợp với references sẽ giống như eager_load Và một số câu hỏi phân biệt khác

Phân biệt find, find_by, find_by!, where
Phân biệt take, limit, first, last
Phân biệt nil?, empty?, blank?, present? 
Phân biệt delete và destroy
Phân biệt update_attribute, update_attributes, update_column, update_columns, 
update, update!

Lời kết

Qua 2 phần, mình đã chia sẽ với các bạn những câu hỏi phỏng vấn ở vị trí Ruby Dev mà mình đã từng gặp. Hi vọng nó giúp bạn kiểm tra lại kiến thức cơ bản của mình. Và cũng hi vọng là một chút gì đó cầm tay cho các bạn sắp lên thớt phỏng vấn. Mình xin phép dừng tại đây!