Góc nhìn của người tuyển dụng một lập trình viên React

Mình không nói cụ thể các câu để hỏi như bài này, sẽ tập trung hơn vào cách hỏi, cách đánh giá các bạn dựa vào câu trả lời.

Anh @dan_abramov ảnh có nói trên Twitter

Ở Facebook chúng tôi không hỏi bạn câu hỏi như sự khác nhau giữa componentWillMountcomponentDidMount, chúng tôi tìm người có kiến thức tốt javascript và kỹ năng giải quyết vấn đề. Họ có thể học bất cứ thư viện gì, hoặc tự viết để xài.

Với mình, việc lựa chọn con người không chỉ căn cứ hết vào việc anh ta có thể trả lời hết những câu hỏi đó không, hỏi mấy câu đó bởi vì công việc hàng ngày phải xài nó, hỏng phải hỏi để đánh đố, thử thách.

Mời bạn tự giới thiệu

Cần biết trước đó anh ấy đã làm gì, kỹ năng gì anh ấy đã có được, team size của anh ấy, có quản lý ai chưa, sản phẩm anh ấy làm thường có bao nhiêu người sử dụng

Điều gì xui khiến bạn học React (hay 1 ngôn ngữ nào đó)

Có phải tại thị trường đang đổ xô học React nên bạn học React? hay vì bạn anh nó xúi, React chạy nhanh hơn Angular, Vue? hay công ty anh bắt xài. Bất kỳ lý do đã học React cứ kể ra.

Mình thấy nhiều người tuyển dụng hay nhầm về việc sẵn sàng học cái mới. Bạn phải rõ ràng việc sẵn sàng học cái mới để tốt hơn, chứ không phải sẵn sàng học cái mới dù nó là bất cứ thứ gì nhé.

Ví dụ, bạn là thầu xây dựng nhà, bạn chủ yếu thầu nhà thổ cư, nhưng nếu có cơ hội bạn sẵn sàng học và đầu tư để xây dựng những công trình bự hơn như chung cư, trung tâm thương mại, cao ốc. Đó là sẵn sàng học cái mới, cái tốt hơn. Còn bạn đâm ngang, sẵn sàng đi học đóng thuyền, làm ruộng, và xem như công việc chính thì cái đó người ta gọi là hữu dũng vô mưu.

Đi sâu technical một chút

Theo như kinh nghiệm được phỏng vấn của mình, việc hỏi nhanh đáp liền như chương trình nhanh như chớp rất là khó cho ứng viên trả lời rành rọt và trọn vẹn. Cụ thể là ngay cả mình, khi được hỏi sự khác nhau giữa GET/POST/PUT, mình cũng sẽ không thể nói một cách mạch lạc được, kiến thức quá nhiều, bạn cần cho ứng viên tí thời gian để nhớ lại. Một danh sách in sẵn các câu sẽ hỏi, cho anh ấy đọc qua trước 5-10 phút chuẩn bị sẽ tốt hơn.

Vấn đề lớn nhất bạn đối mặt trong dự án cũ là gì, thành công lớn nhất bạn đạt được trong đó?

Có thể là bạn hiểu được một process phức tạp, bạn có thể nâng cao tốc độ ứng dụng lên cả trăm phần trăm, bạn đẩy được tốc độ dự án bằng cách kết hợp nhiều dev với nhau.

Nếu tiền không phải vấn đề, thời gian vô tư, bạn sẽ làm gì để nâng cấp cho dự án trước đây, tại sao?

Viết tài liệu tốt hơn, thay MobX bằng Redux, đưa unit test vào

Một số câu React cơ bản, các bạn cũng nên nắm

  1. JSX là cái gì, làm sao trình duyệt chạy được?
  2. Tại sao các component được đặt tên bằng chữ cái đầu viết hoa?
  3. 2 kiểu để khai báo component là gì, và sử dụng trong trường hợp nào?
  4. Một life cycle của React gồm các phương thức nào, gọi API ở đâu?
  5. Tại sao gọi API ở componentDidMount không phải trong constructor
  6. Làm sao để không re-fetch data khi component được re-mount
  7. Giải thích cái ý tưởng "đưa state từ dưới lên trên" (a hi hi, câu này hơi thách đố chút nha)
  8. Khi có issue thì bạn debug như thế nào? Làm sao để kiểm tra tại sao component không re-render
  9. Thử thách cũng bước nhảy - cùng nhau phá code

Sự khác biệt giữa cách truyền hàm, chuyện gì xảy ra khi click

class App extends React.Component {
  
  constructor() {
    super(); 
    this.name = 'MyComponent';
    
    this.handleClick2 = this.handleClick1.bind(this);
  }
  
  handleClick1() {
    alert(this.name);
  }
  
  handleClick3 = () => alert(this.name);
  render() {
    return (
      <div>
        <button onClick={this.handleClick1()}>click 1</button>
        <button onClick={this.handleClick1}>click 2</button>
        <button onClick={this.handleClick2}>click 3</button>
        <button onClick={this.handleClick3}>click 4</button>
      </div>
    );
  }
}

Tìm và fix lỗi

class App extends React.Component {
  state = { search: '' }
  handleChange = event => {
      clearTimeout(this.timeout);
      this.timeout = setTimeout(() => {
        this.setState({
          search: event.target.value
        })
      }, 250);
    }
  render() {
    return (
      <div>
        <input type="text" onChange={this.handleChange} />
        {this.state.search ? <p>Search for: {this.state.search}</p> : null}
      </div>
    )
  }
}

Xong phần mình, thế bạn có muốn hỏi mình gì không?

Feedback

Cái mà mình thấy rất thiếu trong đa số các buổi mình bị phỏng vấn.

Nếu có điểm nào đó bạn trả lời không tốt, mình sẽ feedback lại cho bạn giải pháp hoặc điểm bạn cần về nhà nghiên cứu.

Bạn sẽ nhận được hồi âm trong 2-3 ngày, đa phần các trường hợp lâu hơn 4 ngày là bạn nhận được thư cảm ơn. Bạn không cần lên ITViec để check vị trí đó có mới chạy quảng cáo nữa không, mình chắc chắn gửi thư cảm ơn.

Câu cuối cùng, quan trọng nhất

Câu này là câu mình được hỏi khi phỏng vấn bên Sendo.vn, dừng lại 5 giây, hít thở, mình đã không trả lời được, và mình vẫn đang tìm câu trả lời cho câu hỏi này.

Điều gì khiến bạn khác biệt với những FrontEnd Developer ứng tuyển cho vị trí này, hay lớn hơn là những dev ở ngoài kia?

Hy vọng câu này sẽ giúp bạn thấy rõ hơn con đường mình muốn đi.

Câu hỏi tổng hợp và phần trả lời