Chào các bạn, hôm nay có một chuyện khá thú vị mà lần đầu tiên mình gặp phải khi đi làm phần mềm, mà chắc các bạn cũng sẽ có lần phải trải qua đó là onsite interview, thực chất đó là bên onsite sẽ phỏng vấn để có quyết định thuê người bên mình hay không.
1. Em so sánh thế nào về 2 ngôn ngữ Objective C và Swift.
TL: Bản chất thì hai ngôn ngữ không khác nhau quá nhiều, một bạn học Objective C thì có thể chuyển qua làm Swift nhanh chóng và ngược lại. Quan trọng là Swift là ngôn ngữ mới được Apple suggest, nó có cấu trúc đơn giản, tường mình hơn để giảm effort của lập trình viên nên em cũng hướng đến phát triển ứng dụng trên Swift nhiều hơn.
2. Em có dùng design pattern nào khi lập trình không
TL: Design pattern thì vô cùng quan trọng trong việc phát triển phần mềm. Với mỗi ngôn ngữ lập trình thì sẽ có các cách implement khác nhau nhưng về bản chất khi giống nhau. Các design pattern em thường sử dụng là singleton(vô cùng phổ biến), delegate pattern, observer pattern, repository, MVC, MVVM... Và còn rất là nhiều nữa :))
3. Em phân biệt block(closure) với delegate
TL: Block là cơ chế để xử lý callback trong lập trình iOS với cú pháp ngắn gọn, dễ hiểu. Trong khi delegate là một pattern. Nó sử dụng một protocol(tương tự như interface để phản hồi lại đối tượng khác). Điểm khác nhau là khi dử dụng delegate sẽ giảm tính kết nối giữa 2 thành phần do thành phần cha chỉ cần implement 1 protocol. Trong khi block lại giải quyết tốt bài toán truyền dữ liệu giữa nhiều thành phần, dễ testing sau này. Do đó tuỳ từng trường hợp mà chúng ta sẽ chọn cách thích hợp. Ngoài ra để xử lý callback chúng ta có thể sử dụng observer pattern, mà trong iOS thì đã có NSNotification implement sẵn cho mình. Ưu điểm của observer là thực thi đơn giản, không tạo kết nối chặt chẽ giữa 2 đối tượng tương tác như block hay delegate. Nhưng nhược điểm của nó là khó kiểm soát do thiếu tính liên kết chặt chẽ.
4. Em phân biệt strong reference với weak reference
TL: Vấn đề này liên quan đến quản lý con trỏ trong ngôn ngữ lập trình. Nếu bạn muốn 2 đối tượng của bạn liên kết mạnh với nhau thì sử dụng strong, ngược lại thì sẽ dùng weak. Một đối tượng chỉ có thể giải phóng khi nó không còn tồn tại liên kết mạnh nào.
5. Các giao thức khi em làm việc với RestAPI
TL: GET: lấy dữ liệu, POST: thêm 1 bản ghi mới, PUT, PATCH: cập nhật 1 bản ghi, DELETE: xoá 1 bản ghi
6. Ngoài ra còn có các câu hỏi khác ngoài lề cũng khá thú vị như khi anh giao một task cho em gồm 1 file spec và 1 file design, em sẽ làm như thế nào?
TL: Mục đích đầu tiên khi nhận 1 task là phải hiểu rõ yêu cầu được giao. Tuỳ theo mục đích mỗi công việc mà sẽ có các bước thực hiện khác nhau. Thông thường em sẽ mở file design để nhìn tổng quan về app trước. Sau đó sẽ đi vào đọc spec để hiểu rõ chi tiết từng module, chức năng. Sẽ liệt kê ra list các chức năng chính, focus vào những cái nào, các công nghệ nào mình đã làm, đã biết, những cái nào chưa làm. Sau đó sẽ đi tìm hiểu từng và xử lý từng phần nhỏ. Cuối cùng là liên kết tất cả các module đó lại.
Trên đây là list các câu hỏi và câu trả lời mình đã trả lời. Có thể có nhiều chỗ chưa đúng do là kiếm thức cũng như quan điểm cá nhân của mình. Mong anh em chỉ giáo :))
Comments
Post a Comment