Skip to main content

Kinh nghiệm phỏng vấn (p2)



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

Popular posts from this blog

Swift GCD part 1: Thread safe singletons

Preview Singletons are entities, referenced to the same instance of a class from everywhere in your code. It doesn't matter if you like them or not, you will definitely meet them, so it's better to understand how they work. Constructing and handling a set of data doesn't seem to be a big challenge at first glance. The problems appear when you try to optimise the user experience with background work and your app starts acting weird. ??‍♂️ After decades of watching your display mostly with a blank face, you finally realize that your data isn't handled consistently by the manager because you're accessing it (running tasks on it) from multiple threads at the same time. So you really do have to deal with making your singletons thread safe. This article series is dedicated to thread handling using Swift. In the first part below you will get a comprehensive insight into som...

Kiến thức cơ bản về RxSwift

Bài viết với mong muốn cung cấp thông tin cơ bản về kiến trúc, các thuật ngữ được sử dụng phổ biến về RxSwift, giúp những lập trình viên lần đầu làm quen RxSwift sẽ trở nên dễ dàng hơn. Trong bài viết có sử dụng một số từ khóa tiếng Anh, mình xin phép sẽ giữ nguyên bản không sử dụng tiếng Việt vì có lẽ sẽ dễ hiểu hơn cho người đọc. Observable Sequences Mọi hoạt động trong RxSwift từ việc đăng ký và xử lý sự kiện đều thông qua một Observable Sequences Trong RxSwift , các kiểu dữ liệu như Arrays , Strings hoặc Dictionary sẽ được convert sang Observable Sequences . Ta có thể tạo ra "Observable Sequences" của bất kỳ kiểu đối tượng nào tuân theo Sequence Protocol của Swift Standard Library . let helloSequence = Observable.just( "Hello Rx" ) let fibonacciSequence = Observable. from ([ 0 , 1 , 1 , 2 , 3 , 5 , 8 ]) let dictSequence = Observable. from ([ 1 : "Hello" , 2 : "World" ]) Đăng ký nhận event từ ""Observable Se...

Thread safe singleton’s in Swift

What are singletons? — Singleton is design patterns which says that there should be only one instance of the class for the lifetime of the application. One the best example of Singleton is AppDelegate . How to write a singleton class ? class DefaultDict{ private var dict:[String:Any] = [:] public static let sharedManager = DefaultDict() private init(){ } public func set(value:Any,key:String){ dict[key] = value } public func object(key:String) -> Any?{ dict[key] } public func reset(){ dict.removeAll() } }   Testing singleton class under concurrent circumstances. We are going to write an example where we will set values in dict from various threads and even try to access some with different threads. When we do this we will encounter a crash. If you look closely it will be because of race condition and the crash will be on line set(value:Any,key:String) . class ViewController: UIViewController { ...