루비 인터뷰 질문
일반적인 경우 면접관은 미리 준비된 일련의 작업을 가지고 있습니다. 다른 사람들은 기술적인 질문과 혼합된 경험에 대한 대화를 선호합니다. 반면에 일부 회사는 소프트 스킬에 가장 관심을 가집니다. 그러나 이들 모두는 한 가지를 올바르게 이해하고 있습니다. 인터뷰는 비용이 많이 드는 과정입니다. 모든 기업은 비용 절감을 원합니다.
많은 회사를 인터뷰한 후 지원자는 최신 애플리케이션이 구축되는 기본 원칙을 알고 적용할 수 있어야 한다는 것을 이해했습니다. 제 실무에서는 첫 번째 오답으로 면접이 끝나는 경우는 없었지만 미리 이해해야 할 기본 사항이 있습니다.
주니어 개발자는 어떤 식으로든 프로그래밍 언어에 얽매이지 않지만 시니어 개발자는 더 복잡한 코드를 작성할 수 있습니다. 그런 다음 힌트 없이 이러한 문제를 해결할 수 있다면 중간 위치에 대한 실질적인 준비는 대부분 통과되며 면접을 준비하는 동안 다른 주제에 집중할 수 있습니다.
1. Array#map 메소드 구현
가능한 대답
class Array
def map
return unless block_given?
result = []
i = 0
while self[i] do
result << yield(self[i])
i += 1
end
result
end
end
사용량 확인
[1,2,3,4].map { |x| x * 10 }
2. attr_accessor 메소드 구현
가능한 대답
module AttrAccessor
def self.included(klass)
klass.extend(ClassMethods)
end
module ClassMethods
def custom_attr_accessor(*args)
args.each do |arg|
define_method(arg) do
self.instance_variable_get("@#{arg}")
end
define_method("#{arg}=") do |value|
self.instance_variable_set("@#{arg}", value)
end
end
end
end
end
사용량 확인
class Car
include AttrAccessor
custom_attr_accessor :wheels_count, :driver_name
end
car = Car.new
car.wheels_count = 4
car.wheels_count
car.driver_name = 'Kevin'
car.driver_name
3. if 를 제거하여 코드를 리팩터링합니다.
class HtmlFormatter
def initialize(body)
@body = body
end
def to_s
"<body>#{@body}</body>"
end
end
class JsonFormatter
def initialize(body)
@body = body
end
def to_s
"{ body: #{@body} }"
end
end
class Text
def initialize(body)
@body = body
end
def formatted(type=nil)
if type == :json
JsonFormatter.new(@body)
elsif type == :html
HtmlFormatter.new(@body)
else
raise 'an unknown format type'
end
end
end
가능한 대답
class Text
def initialize(body, formatter)
@body = body
@formatter = formatter
end
def formatted
@formatter.render(@body)
end
end
class BaseFormatter
def render(text)
raise 'Not implemented :render method'
end
end
class HtmlFormatter < BaseFormatter
def render(text)
"<body>#{text}</body>"
end
end
class JsonFormatter < BaseFormatter
def render(text)
"{ body: #{text} }"
end
end
class XmlFormatter < BaseFormatter
end
사용량 확인
text = Text.new('Text', JsonFormatter.new)
puts text.formatted
4. 명령 (1..10).select(&3)이 [3, 6, 9]를 반환하는 데 도움이 되는 코드를 작성합니다.
가능한 대답
class Fixnum
def to_proc
Proc.new { |item| item % self == 0 }
end
end
5. 코드가 있습니다
class Post
attr_reader :state, :title, :body
def initialize(title, body)
@title = title
@body = body
@state = :draft
end
def publish!
@state = :published if @state == :draft
end
def delete!
@state = :deleted if @state == :published
end
end
Post 인스턴스의 속성을 변경할 수 있는 Post 클래스의 기능을 확장합니다.
예:
Post.new.force_title('An awesome article')
정확할 것입니다.가능한 대답
module Forceable
def method_missing(method, *args, &block)
if method =~ /force_(\w+)/ && previous_value = self.instance_variable_get("@#{$1}")
self.instance_variable_set("@#{$1}", args.first)
puts "Post changes #{$1} value from #{previous_value} to #{args.first}"
else
super
end
end
end
Post.include(Forceable)
사용량 확인
post = Post.new('Title', 'Body')
post.force_state(:draft)
p post.state
Reference
이 문제에 관하여(루비 인터뷰 질문), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/neodelf/ruby-interview-questions-1k4c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)