Go hay Golang là ngôn ngữ lập trình do Google thiết kế và phát triển từ năm 2009, ra đời với mục đích khai thác tối đa nền tảng đa lõi của bộ vi xử lý và hoạt động đa nhiệm tốt hơn. Với sức mạnh của Golang, hiện nay có khá nhiều dự án đang lựa chọn ngôn ngữ lập trình này để phát triển, và vì thế nhu cầu tuyển dụng Golang ngày càng lớn hơn. Trong bài viết này chúng ta cùng nhau tìm hiểu top 10 câu hỏi phỏng vấn Golang Developer để cùng có sự chuẩn bị tốt nhất trước cơ hội việc làm này nhé.
Câu 1: Bạn có thể nói gì về ngôn ngữ lập trình Golang
Go hay Golang là một ngôn ngữ lập trình mã nguồn mở giúp xây dựng phần mềm một cách dễ dàng, tin cậy và hiệu quả do các kỹ sư hàng đầu của Google phát triển. Golang được khởi nguồn từ năm 2007 và được chính thức công bố dưới dạng mã nguồn mở năm 2009. Phiên bản ổn định 1.0 được Google giới thiệu vào tháng 3/2012. Năm 2018, Google có thông báo về Golang 2 với sự chung tay phát triển của cộng đồng, mặc dù vậy đến hiện nay thì Golang 2 vẫn chưa có kế hoạch về ngày ra mắt.
Sứ mệnh của Golang là giúp tăng năng suất phần mềm, đặc biệt là ở lĩnh vực multicore processing (xử lý đa nhân), network (mạng) và những dự án có source code rất lớn.
Câu 2: Nêu những đặc tính của Golang
Golang là một ngôn ngữ kiểu tĩnh (static typed) tức là mọi thứ trong nó đều phải được khai báo kiểu. Ban đầu ngôn ngữ này sử dụng trình biên dịch thông qua ngôn ngữ C, từ phiên bản 1.5 thì tác giả đã tự viết luôn một trình compiler dành riêng cho ngôn ngữ. Ưu điểm của trình compiler này là thời gian build rất nhanh so với các trình biên dịch của các ngôn ngữ kiểu tĩnh khác.
Golang hỗ trợ kiến trúc 64 bits, nó cũng có một trình thu dọn rác tự động (Garbage Collector), ngoài ra nó còn hỗ trợ cả Web Assembly. Golang hỗ trợ lập trình đồng thời (concurrent) với từ khóa go đặt ngay trước nơi gọi hàm, kỹ thuật này gọi là Goroutine.
Với những đặc tính trên, Go là một ngôn ngữ phù hợp với việc phát triển các dự án về system như Network, Proxy, Distributed Computing, Cloud Native,…
Câu 3: Những kiểu dữ liệu trong Golang
Trong Go, có 3 loại dữ liệu cơ bản bao gồm:
- Kiểu bool (true/false)
- Kiểu dữ liệu số: int, float, byte, complex, ..
- Kiểu chuỗi (string)
Kiểu dữ liệu dẫn xuất (derived types) xây dựng từ những kiểu dữ liệu cơ bản và tích hợp sẵn trong Golang bao gồm Pointer (con trỏ), Array (mảng), Structure, Union, Function (hàm), Slice, Interface, Map và Channel.
Tham khảo việc làm Golang hấp dẫn trên TopDev!!
Câu 4: Methods trong Golang khác gì với function
Golang không phải là một ngôn ngữ lập trình hướng đối tượng nên nó không hỗ trợ các lớp (class), mặc dù vậy chúng ta có thể sử dụng struct trong Golang nhằm thay thế cho class. Để có được hành vi tương tự như các lớp (class) trong các ngôn ngữ lập trình khác, Golang hỗ trợ các methods (phương thức) – nó là một hàm(function) được khai báo cho riêng một kiểu dữ liệu đặc biệt được gọi là receiver. Cú pháp để tạo một Method như sau: “func (t Type) methodName(parameter list)”.
Điểm khác cơ bản của methods so với function là việc khai báo receiver, từ đó cho phép khai báo trùng tên và chỉ cần khác kiểu dữ liệu nhận (receiver).
Câu 5: Interface trong Golang là gì?
Interface trong OOP giúp chúng ta xác định các hành vi sẽ có của một đối tượng (chưa cần khai báo nội dung bên trong). Interface trong Golang cũng là tập hợp những khai báo phương thức mà cho phép chúng ta có thể định nghĩa hoạt động cho nó được. Khi một kiểu dữ liệu định nghĩa tất cả các phương thức trong một interface thì nó được gọi là implement của interface đó. Hay nói cách khác thì trong Golang, Interface được implement một cách ngầm định (implicitly) mà không cần khai báo tường minh bằng từ khóa nào.
Một tính năng thú vị khác của interface là dùng để khai báo kiểu dữ liệu any (đại diện cho bất kỳ kiểu dữ liệu nào). Cú pháp interface{} gọi là Empty Interface giúp bạn không cần xác định rõ kiểu dữ liệu của biến, rất hay được sử dụng khi làm value cho kiểu dữ liệu map trong Golang.
Câu 6: Phân biệt Array, Slice và Map trong Golang
Array hay mảng là một tập hợp các phần tử có cùng kiểu dữ liệu nằm liên tiếp nhau, hay nói cách khác thì Array là một tập hợp có thứ tự, vì thế chúng ta có thể truy cập Array bằng chỉ số (index) của phần tử đó trong mảng.
Slice về bản chất là các tham chiếu đến mảng hiện có, nó mô tả một phần hoặc toàn bộ Array, vì thế nó có kích thước động (thay đổi được). Thông thường Slice sẽ được tạo từ 1 Array bằng cách lấy từ vị trí phần tử bắt đầu và kết thúc trên Array đó.
Map cũng là một kiểu dữ liệu tập hợp, tuy nhiên các phần tử trong nó không có thứ tự, tức là chúng ta không thể truy xuất đến phần tử trong Map bằng chỉ số như Slice hay Array. Map sẽ chứa các phần tử dạng key-value, từ đó việc truy xuất sẽ thực hiện qua các key.
Câu 7: Giải thích về Concurrency trong Golang
Concurrency là tính năng xử lý song song nhiều tác vụ cùng một lúc, giúp tận dụng năng lực xử lý của CPU. Trong Golang, một luồng được quản lý bởi Go runtime gọi là Goroutine, cú pháp khai báo của Goroutine đơn giản chỉ cần thêm từ khóa “go” vào trước mỗi hàm cần gọi.
Các Goroutine có khả năng chạy song song cùng lúc, ngoài ra chúng có thể trao đổi dữ liệu với nhau trong qua Channel (kênh). Việc sử dụng Channel cho phép đồng bộ hóa dữ liệu giữa các Goroutine; khi một Goroutine truyền dữ liệu vào Channel thì nó sẽ dừng lại để đợi một Goroutine khác lấy dữ liệu ra thì mới tiếp tục thực hiện tiếp.
Câu 8: Phương pháp xử lý lỗi trong Golang
Xử lý lỗi (error handling) trong Golang không giống với xử lý try/catch như các ngôn ngữ khác; lỗi trong Go sẽ được trả về như 1 giá trị của hàm nếu có điều gì không mong đợi (errors hoặc exceptions) xảy ra.
Kiểu error trong Go có một phương thức Error() trả về thông báo lỗi dưới dạng string. Go cũng cung cấp cho chúng ta một package error tích hợp sẵn và public với hàm gọi New. Để đưa ra những Exception thì Go cung cấp cho chúng ta cơ chế Panic. Khi một hàm gặp Panic, nó lập tức dừng xử lý, chấm dứt chương trình và giải phóng stack gọi; thông báo lỗi sẽ được trả về khi chương trình kết thúc.
Câu 9: Kể tên một số thư viện, framework phổ biến của Golang
- Beego: web framework với các module chứa các tính năng phổ biến cho ứng dụng web, nó cũng bao gồm 1 ORM (object relationship map) để truy cập dữ liệu và thư viện cho các operation với những đối tượng HTTP
- Iris: cũng là một web framework, ưu điểm của Iris là khả năng xây dựng các ứng dụng web và API hiệu suất cao
- Viper: thư viện giúp viết và đọc các nội dung liên quan tới thông số cấu hình trong Golang, hỗ trợ các định dạng như TOML, JSON, YAML,…
- Cobra: một thư viện giúp bạn xây dựng một CLI (command line interface: giao diện dòng lệnh) trong Golang
- Colly: công cụ thu thập dữ liệu tùy chỉnh từ các trang web của Golang
Câu 10: Kể tên những dự án nổi tiếng viết bằng Go
- Docker: nền tảng cung cấp cách dựng, kiểm thử và triển khai ứng dụng nhanh chóng thông qua các container
- Kubernetes: một hệ thống mã nguồn mở giúp việc triển khai, nhân rộng dễ dàng và tự động thông qua việc sử dụng các container Docker
- NATS: một Message System, là thành phần quan trọng trong các hệ thống pub/sub, event-driven
- Consul: một service dành cho việc thiết lập mạng (network) trong microservices một cách dễ dàng
Kết bài
Như vậy chúng ta đã đi qua được top 10 câu hỏi phỏng vấn thường gặp nhất cho vị trí Golang Developer. Hy vọng bài viết này mang lại thêm sự tự tin cho bạn để chinh phục được nhà tuyển dụng. Hẹn gặp lại các bạn trong bài viết tiếp theo của mình.
Tác giả: Phạm Minh Khoa
Xem thêm:
- Tìm hiểu về Graceful Shutdown, Graceful Shutdown trong Golang
- #2 Lập trình Golang ăn xổi: Clean architecture
- Thủ thuật xử lý lỗi trong Golang
Xem thêm Việc làm Developer hấp dẫn trên TopDev
Doc Comment Và Javadoc Trong Java
Bài viết được sự cho phép của tác giả Nhựt Danh
Nhắc Lại Kiểu Documentation Comment
Từ bây giờ chúng ta hãy gọi chức năng này bằng một tên chuẩn tiếng Anh cho thống nhất, hãy gọi chức năng này là Documentation Comment, hay gọi tắt là Doc Comment cũng được. Chúng ta đều hiểu nó là cách comment code theo kiểu document vậy.
Tất cả các kiểu comment đều có một điểm giống nhau là khi build, trình biên dịch sẽ bỏ qua chúng, không build comment vào file build cuối cùng. Nhưng, khác với anh em trong họ comment, Doc Comment không đơn thuần chỉ là để comment, chúng được dùng trong một chuyện khác. Công dụng cụ thể của Doc Comment là gì thì mời bạn xem qua mục sau. Dưới đây là một ví dụ sử dụng comment theo kiểu Doc Comment.
Công Dụng Của Doc Comment
Về phía kinh nghiệm code bao lâu nay của mình, mình vẫn rất thích kiểu Doc Comment này hơn các kiểu comment khác, là vì có các lợi ích sau đây.
Thứ nhất, về mặt giải thích cho các dòng code bạn đang làm, thì Doc Comment sẽ luôn rõ ràng hơn do chúng có được sự hỗ trợ về mặt định dạng nổi bật hơn cho các tham số.
Thứ hai, là lợi ích về mặt sử dụng các dòng code có comment theo kiểu Doc Comment này. Thì khi sử dụng các thành phần được comment “chuẩn”, bạn sẽ thấy comment, hay document sẽ xuất hiện ở thanh ngữ cảnh của Eclipse hay InteiJ (bạn dễ dàng nhìn thấy các document này khi đưa chuột vào lớp hay hàm có Doc Comment).
Thứ ba, về mặt xuất xưởng các thư viện. Doc Comment sẽ được một công cụ có tên Javadoc build ra một trang mô tả theo kiểu HTML. Nó là một trang Web được xây dựng hoàn chỉnh và bạn có thể dùng để publish hay nhúng vào trang Web khác. Rất thích hợp để bạn tạo ra các thư viện Java và gửi đến người dùng thư viện của bạn với đầy đủ các hướng dẫn sử dụng các Java code mà bạn xây dựng. Với lợi ích thứ ba này thì mình mời các bạn đến với mục tiếp theo để trải nghiệm nhé.
Thử Tạo Một HTML Document
Bước này chúng ta hãy cũng trải nghiệm việc sử dụng công cụ Javadoc để tạo ra một HTML document xịn xò.
Thật may là Eclipse hay InteliJ đều hỗ trợ các tương tác đến công cụ Javadoc một cách dễ dàng. Bạn hãy chọn một trong hai công cụ này để thực hành theo các chỉ dẫn sau.
Tạo HTML Document trên Eclipse
Với Eclipse. Với project đang mở. Và dĩ nhiên phải có một vài Doc Comment đã được bạn định nghĩa trong source code. Bạn hãy chọn theo menu Project > Generate Javadoc….
Một cửa sổ xuất hiện, bạn hãy để nguyên như mặc định. Chúng là các thiết lập đường dẫn đến file thực thi Javadoc, project cần tạo Javadoc, cũng như nơi mà thành phẩm HTML document được trích xuất ra (đó chính là thư mục /doc bên trong project của bạn).
Hãy đảm bảo các chọn lựa của bạn giống như hình trên. Sau đó nhấn Next. Một cửa sổ chọn lựa khác xuất hiện như sau.
Ở bước trên, bạn hãy nhập vào tiêu đề cho document (mục Document title). Khi này bạn có thể nhấn Finish vì thực chất bước sau nữa cũng không có gì đáng chú ý cả.
Sau một lúc, bạn sẽ thấy xuất hiện thêm một thư mục /doc bên trong project của bạn ở của sổ Package Explorer. Hãy xổ thư mục này ra và tìm đến file index.html và click đúp vào đó, bạn sẽ thấy nội dung document đã được tạo ra tự động y như một trang Web thực thụ vậy. Và đây là những gì chúng ta đã comment vào source code theo dạng Doc Comment.
Bạn hãy thử trải nghiệm bằng cách click chuột đi tới đi lui trong trang Web này để xem Javadoc giúp tạo các hướng dẫn cho code của chúng ta như thế nào.
Ở mục sau chúng ta sẽ tìm hiểu sâu hơn việc tạo document một cách chỉn chu hơn, đầy đủ và chuyên nghiệp hơn như thế nào nhé.
Tham khảo việc làm Java hấp dẫn trên TopDev
Tạo HTML Document Trên InteliJ
Với InteliJ. Với project đang mở. Và dĩ nhiên phải có một vài Doc Comment đã được bạn định nghĩa trong source code. Bạn hãy chọn theo menu Tools > Generate JavaDoc….
Một cửa sổ xuất hiện, bạn hãy để nguyên như mặc định. Chúng là các thiết lập phạm vi áp dụng để tạo HTML document (scope), cấp độ chia sẻ private/package/protected/public. Và thiết lập nơi mà thành phẩm HTML document được trích xuất ra, bạn có thể chỉ định xuất vào thư mục /doc bên trong project của bạn như dưới đây.
Sau khi nhấn OK ở cửa sổ trên, bạn sẽ thấy ngay lập tức Web Browser mặc định trên máy bạn được mở ra với nội dung chính là giới thiệu về project của bạn kèm với các Doc Comment trong đó.
Bạn hãy thử trải nghiệm bằng cách click chuột đi tới đi lui trong trang Web này để xem Javadoc giúp tạo các hướng dẫn cho code của chúng ta như thế nào.
Ở mục sau chúng ta sẽ tìm hiểu sâu hơn việc tạo document một cách chỉn chu hơn, đầy đủ và chuyên nghiệp hơn như thế nào nhé.
Định Dạng Java Doc Thông Qua Sử Dụng Tag
Ở các ví dụ trên đây, bạn đã nhìn thấy một số Tag được dùng trong Javadoc như @author, @version, @since, @param. Và bạn đã hiểu các Tag này giống như các tham số giúp cho Javadoc có thể tạo ra các HTML và truyền các định nghĩa của từng Tag vào HTML như thế nào rồi đúng không nào. Các Tag trong Javadoc thường không ràng buộc một công thức nào kèm theo cả, bạn chỉ cần vận dụng Tag ở những nơi bạn cần HTML làm nổi bật thông tin đó lên thôi, vì dù sao Doc Comment cũng chỉ là một kiểu comment, nên bạn cứ thoải mái sử dụng đi nhé.
Mình sẽ không giải thích dài dòng về Tag nữa mà vào cụ thể việc sử dụng Tag trong Javadoc như thế nào luôn.
@author, @version, @since
Mời bạn xem ví dụ sử dụng Tag và kết quả xuất ra dưới dạng HTML document.
{@code}, @param
Chi tiết về cách sử dụng 2 Tag này được thể hiện qua ví dụ dưới đây.
@deprecated, {@link}
“Hiệu ứng” của các Tag này được minh họa bằng các ví dụ dưới.
@exception, @throws
Hai Tag này có công dụng như nhau. Giúp thêm một thông tin Throws trong document báo hiệu phương thức này sẽ tung ra một exception.
@return, @see
{@value}
Giúp hiển thị giá trị của các static field.
Tham Khảo Thêm Các Định Dạng Khác
Trên đây mình có trình bày qua các định dạng Tag phổ biến trong Javadoc. Tuy nhiên vẫn còn một số định dạng khác, chẳng hạn như vận dụng thêm các thẻ HTML vào Doc Comment, thì bạn có thể làm quen thông qua việc tìm hiểu chính source code của “chính chủ” Oracle, hoặc bạn hãy để ý các Doc Comment từ các source code của các thư viện khác. Đảm bảo bạn sẽ thấy thích và ngộ ra được nhiều phong cách Doc Comment từ các nguồn này, bạn sẽ nhanh “lên tay” hơn cho việc comment cho source code của chính bạn thôi.
Để xem source code của JDK, đơn giản, khi Eclipse hoặc InteliJ đang mở, hãy nhấn giữ phím Ctrl (Windows) hoặc Command (Mac) và click vào lớp được xây dựng sẵn từ JDK. Như ví dụ dưới đây mình mở ra lớp String, bạn sẽ nhanh chóng nhìn thấy source code của lớp này trên chính IDE của bạn.
Hoặc bạn có thể xem ở một số link online cũng được. Như một vài link mình liệt kê sau.
Kết Luận
Chúng ta vừa xem qua các cách sử dụng Doc Comment trong lập trình Java như thế nào. Hi vọng thông qua bài viết này, các bạn sẽ nâng cao hơn tính “thẩm mỹ” và tính dễ đọc đối với các source code của các bạn thông qua việc nâng cao kỹ năng comment. Cũng như hiểu rõ các document được tạo ra như thế nào ở các thư viện mà các bạn đang dùng.
Bài viết gốc được đăng tải tại yellowcodebooks.com
Xem thêm:
Tìm việc làm IT mọi cấp độ tại TopDev