Home Blog Page 47

Lombok là gì? Sinh code tự động trên Eclipse – Intellij

Lombok là gì? Sinh code tự động trên Eclipse – Intellij

Bài viết được sự cho phép của tác giả Trần Hữu Cương

1. Lombok là gì?

Lombok là một thư viện Java giúp tự sinh ra các hàm setter/getter, hàm khởi tạo, toString… và tinh gọn chúng.

Thực tế thì hầu hết các IDE hiện này đều hỗ trợ sinh code tự động ví dụ như trên eclipse ta click chuột phải vào file cần sinh code và chọn Source và chọn các method cần sinh rLombok

Tuy nhiên với những class có nhiều thuộc tính thì việc hiển thị các hàm getter/setter hay các hàm toString sẽ khiến cho class bị rối. Lombok sinh ra chính là để khắc phục những điểm đó.

Ví dụ class không sử dụng lombok và class có sử dụng lombok:

Lombok

2. Cài đặt Lombok

Để sử dụng các annotation của Lombok ta cần sử dụng thư viện lombok:

Sử dụng maven:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.20</version>
    <scope>provided</scope>
</dependency>

Hoặc download file lombok-1.16.20.jar

  Project Lombok là gì? Getter, Setter và Constructors với Project Lombok

  Sử dụng Lombok để rút gọn code trong Java

Cài đặt plugin lombok cho IDE

Với Intellij: vào File/Settings/Plugins và nhập lombok ở ô tìm kiếm và click install.

Lombok

Với Eclipse: ta click vào file lombok-1.16.20.jarhoặc chạy lệnh java -jar lombok-1.16.20.jar

Trên giao diện cài đặt lombock, ta click button “Specify Location” và trỏ tới file eclipse.exe

Lombok

Lombok

Sau khi cài đặt thành công ta sẽ thây lombok xuất hiện trong phần about của eclipse.

Lombok

Tuyển dụng lập trình viên Java lương cao

3. Code ví dụ với lombok

Đầu tiên là với annotion @Getter @Setter sẽ giúp sinh ra các  method getter/setter

Lombok

Ngoài cách dùng annotation @Getter @Setter trước các field ta có thể dùng trước class để áp dụng cho tất cả các field

Lombok

Annotation @AllArgsConstructor và @NoArgsConstructor giúp tạo ra các hàm khởi tạo với tất cả các tham số và hàm khởi tạo không tham số

Lombok

Annotation @ToString @EqualsAndHashCode giúp tạo ra các hàm equal và toString theo tất cả các thuộc tính.

Lombok

Nếu bạn chỉ muốn equal hay toString cho một số field thì có thể dùng thêm thuộc tính exclude:

Ví dụ mình chỉ muốn toString trả về name, và hàm equal theo name:

@ToString(exclude="address")
@EqualsAndHashCode(exclude="address")
public class Person {
  @Getter @Setter private String name;
  @Getter @Setter private String address;
}

Annotation @Data sẽ tương đương với annotation @Getter + @Setter + @ToString + @EqualsAndHashCode + @NoArgsConstructor

Lombok

Demo:

Ta không khai báo hàm khởi tạo với tham số và các hàm getter/setter nhưng vẫn có thể gọi nó vì lombok đã tự generate và tối ưu nó.

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.ToString;

@ToString(exclude = "address")
@AllArgsConstructor
@Data
public class Person {
  private String name;
  private String address;

  public static void main(String[] args) {
    Person person = new Person("kai", "Ha Noi - Viet Nam");
    System.out.println(person);
    System.out.println("Address: " + person.getAddress());
 }

}

Kết quả:

Lombok

Bài viết gốc được đăng tải tại stackjava.com

Bạn có thể quan tâm:

Xem thêm các việc làm công nghệ hấp dẫn trên TopDev

CQRS pattern là gì? Ví dụ dễ hiểu về CQRS Pattern

CQRS pattern là gì? Ví dụ dễ hiểu về CQRS Pattern

Quay lại với chuỗi bài về pattern và các pattern trong thiết kế hệ thống, bài viết hôm nay xin phép được trình bày một cách rất chi là cẩn thận, dễ hiểu cho anh em về CQRS pattern.

À trước khi bắt đầu thì thông tin thêm cho anh em là pattern này nằm trong danh sách các pattern thường apply vào thiết kế hệ thống.

Dành cho anh em nào chưa biết pattern.

In software engineering, a design pattern is a general repeatable solution to a commonly occurring problem in software design. A design pattern isn’t a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that can be used in many different situations.

Trong phần mềm, design pattern là một giải pháp chung để giải quyết các vấn đề lặp đi lặp lại trong thiết kế phần mềm. Design pattern không phải là một khuôn mẫu hoàn chỉnh có thể quăng ra thành code luôn. Nó là khuôn mẫu xử lý một vấn đề được sử dụng trong nhiều hoàn cảnh khác nhau.

CQRS pattern

Rồi, tản mản về Design Pattern vậy là đủ, giờ quay qua nhân vật chính (CQRS pattern). Bắt đầu ngay thôi nào!.

1. CQRS pattern là gì?

Vẫn luôn bắt đầu với định nghĩa theo phong cách viết bài của tui. Bóc tách từng chữ từng chữ một.

Đầu tiên thì CQRS là viết tắt của Command and Query Responsibility Segregation. Bóc tách từng chữ ra thì Segregation là phân tách, Responsibility là trách nhiệm. Vậy dịch sơ sơ cái CQRS có nghĩa là phân tách trách nhiệm giữa Command và Query.

Command and Query Responsibility Segregation, a pattern that separates read and update operations for a data store. Implementing CQRS in your application can maximize its performance, scalability, and security. The flexibility created by migrating to CQRS allows a system to better evolve over time and prevents update commands from causing merge conflicts at the domain level

CQRS là pattern chia việc đọc và cập nhật dữ liệu thành 2 phần khác nhau. Ứng dụng CQRS vào ứng dụng có thể giúp nâng cao hiệu năng, khả năng mở rộng và tính bảo mật. Tính linh hoạt khi chuyển qua CQRS cho phép hệ thống phát triển tốt hơn theo thời gian và ngăn các lệnh cập nhật gây xung đột trên cùng một domain.

Vẫn hơi khó hiểu, thôi thì tạm bỏ qua phần định nghĩa ta đi tới từng phần trong đó (Command và Query).

  SAGA Pattern trong Microservices
  Hướng dẫn Java Design Pattern – Object Pool
  

2. Command và Query

CQRS pattern hướng mục tiêu chia tách Command và Query ra thành 2 phần khác biệt. Anh em lưu ý là commands sẽ bao gồm các HTTP method: POST, PUT, DELETE và PATCH.

Còn phần query theo đúng nghĩa tên gọi của gói, chỉ là GET method, lấy data từ DB.

CQRS pattern

Như hình vẽ trên đây thì findProductById sẽ lấy product theo ID. Còn createProduct sẽ gọi method POST, tạo record mới về product. Cả hai phần này đều nằm trong microservices nhưng độc lập với nhau ha.

Sau khi đã hiểu sơ Command là gì, Query là gì?. Giờ là lúc quay ngược trở lại với câu hỏi tại sao lại cần pattern này?. Anh em có hiểu được mục đích sinh ra pattern mới nhớ được lâu, mới trả lời được mục đích của pattern là gì ha.

3. Tại sao lại cần CQRS pattern?

Chính vì CQRS pattern tách GET và các Http method còn lai ra thành hai phần. Mà GET sử dụng để truy vấn data, còn các method khác là để thao tác với dữ liệu. Nên nguyên nhân đầu tiên và dễ hiểu nhất là:

Do nhu cầu giữa việc truy vấn dữ liệu và thao tác với dữ liệu khác nhau. Một ứng dụng có thể thực hiện cả triệu câu query GET hằng ngày nhưng chỉ thao tác insert vài câu.

Một số nguyên nhân khác:

  • Các tiếp cận cả Command và Queries trên cùng một services có thể gây ảnh hưởng tới performance.
  • Sự khác biệt về quyền được thực hiện Commands và Queries khác nhau đôi khi cũng làm services trở nên phức tạp.
  • Dữ liệu có thể bị xung đột khi thực hiện song song cả truy vấn và thao tác.

Tuyển dụng lập trình viên Frontend lương cao tại đây!

CQRS pattern

4. Hiện thực CQRS pattern

Như đã nói ở trên CQRS pattern tách việc đọc và ghi thành 2 models khác nhau. Ta có thể tối ưu cho từng models

  • Phần commands phải dựa trên nhiệm vụ mà nó thực hiện.
  • Trường hợp có nhiều commands, các commands sẽ đem vào hàng đợi để thực hiện bất đồng bộ.
  • Phần Queries chỉ thực hiện truy vấn dữ liệu, không bao giờ thao tác trên dữ liệu. Dữ liệu trả về theo kiểu DTO không giới hạn. Tuỳ thuộc dữ liệu muốn lấy.

Đạt được 3 điểm này là đã hiện thực được CQRS Pattern.

CQRS pattern

5. Ưu nhược điểm

Phù, cuối cùng cũng nói xong về định nghĩa và giải thích. Mong rằng tới đây anh em đã hiểu rõ mục đích của pattern này.

Giờ tới phần ưu nhược điểm, phần này giúp anh em hiểu rõ hơn ưu nhược điểm để cân nhắc lúc nào thì nên apply pattern này.

5.1 Ưu điểm

CQRS pattern có một số ưu điểm có thể nhìn được rõ:

  • Independent scaling (khả năng mở rộng độc lập). Thay vì scale cho cả đọc và ghi thì giờ phần nào nhiều anh em có thể scale phần đó. Nếu truy vấn nhiều có thể maintain, tối ưu phần queries services.
  • Optimized data schemas (các schema khác nhau). Đã chia nhỏ ra hai phần độc lập và đọc và ghi dữ liệu thì có thể tạo các schema khác nhau cho đọc và ghi.
  • Separation of concerns (tách rời các mối quan tâm). Việc tách riêng 2 phần cũng giúp hệ thống dễ bảo trì, linh hoạt hơn trong phát triển và maintain. Phần logic phức tạp có thể đem qua commands, phần queries thì đơn giản hơn, tuy nhiên cần tối ưu tốc độ.

Nói chung tất cả các benefit của CQRS đều nằm ở việc phân tách rõ ràng giữa Commands và Queries.

5.2 Nhược điểm

Toàn ưu điểm nhưng pattern nào cũng tồn tại nhược điểm của riêng nó. Đối với CQRS tồn tại một số nhược điểm:

  • Complexity (phức tạp). Cái này rõ ràng là phân tách sẽ phức tạp hơn nhiều so với cách làm truyền thống. Nếu microservices của anh em còn có Event Sourcing pattern thì lại càng phức tạp. Cái này tui sẽ nói ở bài Event Sourcing ha.
  • Eventual consistency (nhất quán của sự kiện). Khi đã phân tách commands và queries. Sự nhất quán của dữ liệu có thể bị ảnh hưởng. Phần dữ liệu đã ghi vào rồi nhưng queries lấy ra lại chưa có. Cái này là vấn đề lớn

5.3 Lúc nào không nên apply

Pattern này được khuyến cáo không nên apply nếu:

  • Mô hình business đơn giản, không có quá nhiều truy vấn hay thao tác tới dữ liệu.
  • Ứng dụng CRUD đơn giản, hoặc ứng dụng chỉ yêu cầu truy vấn dữ liệu

Viết ra đây không lỡ anh em cứ cắm đầu apply lại mệt, thực chất tách ra cũng không phải dễ mà triển khai.

6. Tham khảo

Bài sau sẽ là Event Sourcing Pattern nha anh em. Ráng biết nhiều để phục vụ được các ý tưởng sáng tạo nha.

Cảm ơn anh em đã đọc bài – Thank you for your time – Happy coding!

Tác giả: Kiên Nguyễn

Xem thêm: 

Xem thêm Việc làm IT hấp dẫn trên TopDev

DRM là gì? DRM hoạt động như thế nào?

DRM là gì? DRM hoạt động như thế nào?

Anh em dạo gần đây nếu chụp screenshot cho Udemy hay Netflix (cả trên MacOS và Windows), anh em có thấy màn hình đen thùi lùi không?, đó chính là DRM (Digital Right Management).

Bài viết này giới thiệu cho anh em đôi điều về DRM và giải thích DRM hoạt động như thế nào?

DRM

Mong rằng kiến thức về DRM sẽ hữu ích với anh em nếu sau này có làm gì liên quan tới media và muốn protect media. Tất nhiên nhu cầu bảo vệ bản quyền là chính đáng ha, tất cả đều là tài sản trí tuệ nên bảo vệ được anh em cứ bảo vệ nha.

1. Nhu cầu cần có

Bảo vệ tài sản kỹ thuật số từ lâu đã không còn là nhu cầu mới mẻ đối với cá nhân, tổ chức. Tất cả các tài liệu kỹ thuật số (từ hình ảnh, video, file pdf). Tất cả tạo ra với chi phí lớn, bao gồm bản quyền trí tuệ của cá nhân tổ chức.

Chính vì lí do đó, tất cả cần được bảo vệ ở mức độ thích hợp. DRM là công nghệ sinh ra để bảo vệ bản quyền trí tuệ đó. Nhờ có nó mà hạn chế được rất nhiều các vụ vi phạm bản quyền, ăn cắp trí tuệ. Bảo vệ được bản quyền cũng đồng nghĩa với việc bảo vệ được người tạo ra sản phẩm đó. Từ đó giúp phát triển hơn nữa các sản phẩm trí tuệ có tính ứng dụng cao.

DRMNhư Netflix hoặc Udemy anh em cứ vào thử chụp hình đảm bảo là đen thùi lùi, đó là DRM ha.

2. DRM là gì?

Digital rights management is a technology that helps control what viewers or users can do with digital assets. For example, DRM software can prevent unauthorised copying, forwarding or editing of a media file

DRM (Digtal right management) là công nghệ giúp kiểm soát người xem hoặc người sử dụng những gì họ có thể làm với các tài nguyên kỹ thuật số. Ví dụ, phần mềm DRM có thể bảo vệ khỏi sao xem, gửi hoặc chỉnh sửa bất hợp pháp các nội dung không được cho phép

Tất nhiên là DRM không phải là công cụ duy nhất sử dụng để bảo vệ các tài nguyên kỹ thuật số nha anh em. Những file cần có yêu cầu bảo mật cao nên được lưu trữ trong hệ thống an toàn, khó bị tấn công đánh cắp.

Chứ tới lúc đã vào xem được file, xem được nội dung mà dùng DRM thì không ổn lắm. Vì thực chất DRM chặn copy từ chính máy đang xem, chứ DRM không thể bảo vệ trường hợp dùng điện thoại hoặc máy ảnh khác chụp lại.

Về mặt lý thuyết thì DRM nên đứng sau, chứ không phải đứng trước để bảo vệ tài nguyên. Tất cả nên được bảo vệ và kiểm soát kĩ trước khi được phép truy cập tài nguyên.

  Tại sao Web Developer nên học về Digital Marketing?
  Digital Twins – xu hướng công nghệ cho ngành IoT

DRMBảo vệ thật sự chứ không phải bảo vệ giữa chừng nha anh em.

3. DRM bảo vệ nội dung như thế nào?

DRM (Digital rights management) hoạt động bằng cách mã hoá file (encrypting files). Về cơ bản là làm cho nội dung bị trộn lẫn, không thể đọc được. Công nghệ DRM hiện tại thường dùng mã hoá AES 128 bit.

Mặc dù như bộ phim ở Netflix anh em có thể xem được bình thường, nhưng tải về mà không giải mã được thì file đó cũng trở thành file vô dụng. Để DRM có thể hoạt động thì phía nội dung cần dựng lên một máy chủ (server).

Về phía browser thì browser cần nhận biết được nội dung đang phát là nội dung được bảo vệ và cần có key để yêu cầu mở khoá. Từng bước hoạt động của DRM có thể hiểu theo các bước đơn giản dưới đây:

  • Nội dung được mã hoá
  • Trình chiếu yêu cầu key mã hoá
  • Licence service (service này dùng để kiểm tra key đúng không) xác thực người dùng
  • Server trả về key cho người dùng hợp pháp
  • Người dùng sử dụng key để mã hoá nội dung

Hiện nay trên thị trường đang có 3 hệ thống DRM lớn là:

  • Widevine của Google,
  • FairPlay của Apple
  • PlayReady của Microsoft.

Tham khảo việc làm Web Developer hấp dẫn trên TopDev

DRM

Với 3 hệ thống DRM này thì việc xác thực và giải mã không hề gây gián đoạn cho người xem.

4. Tham khảo

Cảm ơn anh em đã đọc bài – Thank you for your time – Happy coding!

Tác giả: Kiên Nguyễn

Có thể bạn quan tâm:

Tìm kiếm việc làm IT mới nhất tại TopDev!

SAGA Pattern trong Microservices

SAGA Pattern trong Microservices

Tìm ra bài viết này chắc hẳn anh em đã biết về microservices, concept của micro services chia các service nhỏ để scale và quản lý, nhưng nó lại phát sinh vấn đề về sự nhất quán của dữ liệu giữa các micro services, đó là lý do tui viết bài về SAGA Pattern cho anh em.

SAGA pattern Anh em yên tâm, nhức đầu sẽ theo cấp độ. Cứ nhức đầu dần thôi à =)))

Vậy SAGA pattern là gì? Bằng các nào nó có thể quản lý và đảm bảo được sự nhất quán dữ liệu giữa các micro services?

Tất cả sẽ được trình bày rõ trong bài viết này.

Microservices concept thì nhiều anh em biết rồi, nhưng SAGA pattern thì ít

Bắt đầu thôi anh em. Luôn là định nghĩa.

1. Saga Pattern là gì?

The Saga design pattern is a way to manage data consistency across microservices in distributed transaction scenarios. A saga is a sequence of transactions that updates each service and publishes a message or event to trigger the next transaction step. If a step fails, the saga executes compensating transactions that counteract the preceding transactions.

Saga design pattern là cách quản lý sự thống nhất của dữ liệu giữa các microservices trong các kịch bản việc giao dịch là phân tán (distributed). SAGA là một chuỗi các giao dịch cập nhật giữa các service và publish thông báo hoặc trigger các bước transaction. Nếu một bước thất bại, SAGA sẽ thực hiện giao dịch tương tự để khoả lấp cho các transactions trước đó

Ôi lạy chúa cái định nghĩa đọc thôi đã thấy khó hiểu. Để tóm tắt lại cho anh em, đơn giản thì có 2 ý:

  • SAGA Pattern là pattern đảm bảo tính nhất quán của dữ liệu (bằng các quản lý transactions) giữa các microservices khác nhau.
  • Vì là hệ thống phân tán nên mỗi ông có thể xử lý một phần (nằm trên một transactions), nếu một cái bị fail thì SAGA lúc này có thể thực hiện một transactions thay thế bù vào cái transactions bị fail đó.

SAGA pattern Phân tán (distributed) nghĩa là chia rỏ và nằm rải rác nhiều nơi. Kiến trúc này có thể apply cho cả hệ thống, database,…

  Phát triển phần mềm theo kiến trúc microservice
  Thiết kế service có tải ghi cao không gây tranh chấp tài nguyên

2. Giải pháp

Về mặt ý tưởng, mỗi micro services khi nhận được yêu cầu thực hiện transactions, bản thân micro services đó sẽ thực hiện transactions tại chính services đó. Sau khi đã thực hiện xong, theo hướng của SAGA Pattern, services đó sẽ publish một thông báo (message) hoặc một events (sự kiện).

Từ thông báo hoặc sự kiện đó sẽ biết được transactions nào nên được thực hiện tiếp.

SAGA pattern

Như hình phía trên, Order Services sau khi thực hiện transactions tại service sẽ publish message hoặc event để biết kế tiếp sẽ phải thực hiện transactions tại Customer Service.

Customer Services sau đó publish tiếp để biết cần phải quay lại Order Service để thực hiện tiếp transactions.

Tuyển dụng lập trình viên Frontend lương cao tại đây!

3. Hai cách quản lý

Theo như concept này, có 2 cách để SAGA có thể quản lý được transactions:

  • Thứ nhất là Choreography (Vũ đạo), ở đây anh em hiểu là vũ công cũng được, vì người nào múa người đó. Cái này như ví dụ phía trên, mỗi transactions tự quản lý transactions nào sẽ cần được thực hiện kế tiếp, ông nào lo ông đó.
  • Thứ hai là Orchestration (Ban nhạc), ban nhạc thì anh em biết rồi, có ông nhạc trưởng ban nhạc mới chơi nhạc được. Cách số hai này hướng tới một ông có thể điều phối, tức là hết transactions ở ông Order Service sẽ qua Customer Services, cái này ông điều phối lo.

SAGA pattern Các khái niệm trong lập trình nếu có tên đều có concept giống với thực tế. Anh em cố gắng liên tưởng tí là sẽ hiểu concept

Ngoài ra cách hiểu theo ví dụ thực tế như thế này sẽ nhớ rất lâu. Rất khó quên, anh em nên luyện tập nhớ theo kiểu này nha.

Rồi đi vào từng cái với hình ảnh minh hoạ cho dễ hiểu hơn.

4. Choreography-based saga

Như đã giải thích sơ với anh em ở phía trên, Choreography trong SAGA Pattern theo concept ông nào lo ông đấy.

SAGA pattern

SAGA Pattern mà cụ thể là Choreography thường được áp dụng cho các sàn giao dịch thương mại điện tử. Như ví dụ trên đây:

  • 1. Đầu tiên khi anh em đặt hàng, ông Order Service nhận được một POST request /orders. Lúc này đơn hàng ở trạng thái PENDING.
  • 2. Sau khi đơn hàng đã xong, services này đẩy ra một event là order created.
  • 3. Customer Service nhận được event (hoặc nó trigger events) này, xử lý thanh toán liên quan tới thẻ tín dụng của khách
  • 4. Sau khi đã xong nó sẽ publish lại một event hoặc message cho ông Order biết để approver hoặc reject đơn hàng của khách.

Đơn giản, dễ hiểu. Services nào tự lo, tự xử lý cái event của riêng mình, cần ông nào thì publish ra cho ông đó xài.

4.1 Ưu nhược điểm

Về ưu nhược điểm của Choreography chắc anh em nào code nhiều sẽ đoán ra được. Đầu tiên là ưu điểm:

  • Mẫu này đơn giản, dễ hiểu nên có thể apply nhanh chóng cho các business nhỏ
  • Do services nào handle event, message của services đó nên có thể implement nhanh chóng

Về nhược điểm thì lúc có nhiều hơn events sẽ khiến logic trở nên phức tạp và khó kiểm soát.

5. Orchestration-based saga

Orchestration trong SAGA Pattern thì ngược với Choreography. Chỗ này các micro services không tự handle event mà tập trung lại ở ông Message Broker. Ông này đóng vai trò như người điều phối trong dàn nhạc.

Event nào tới, event nào đi đều phải thông qua ổng, ông điều tới điều lui

SAGA pattern

Giải thích cho hình vẽ phía trên:

  • 1. Anh em cũng nhận được order từ POST request, trạng thái order lúc này vẫn là PENDING.
  • 2. Microservices vẫn đẩy event ra là nhận được order, nhưng nó không cần biết services nào sẽ xử lý tiếp theo, chỉ việc đẩy lên message brokers
  • 3. Ông message broker lúc này gửi tới Customer Services là xử lý credit đi.
  • 4. Ông Customer services xử lý
  • 5. Đẩy lại lên message broker về đơn hàng thanh toán thành công hay thất bại
  • 6. Message broker đẩy lại cho Order service xử tiếp

5.1 Ưu nhược điểm

Về ưu điểm thì Orchestration thích hợp cho các mô hình kinh doanh phức tạp. Cần phải quản lý và xử lý liên quan nhiều giữa các micro services. Trường hợp có thêm services hoặc thêm event, message cũng không quá phức tạp

Về nhược điểm thì có 2 nhược điểm rõ ràng là:

  • Tốn effort để manage và xử lý với message broker. Cái kia chỉ viết logic publish message hoặc event ngay trong services.
  • Signle point of failure -> Ông message broker mà ngủm thì toàn bộ ngủm theo. Cái này không đúng với concept của microservice. Một cái ngủm các cái khác vẫn hoạt động.

6. Tham khảo

Chỉ một bài viết này e là chưa đủ với SAGA Pattern, hẹn anh em ở phần hai, đi sâu hơn và ví dụ sử dụng cho từng loại.

Cảm ơn anh em đã đọc bài – Thank you for your time – Happy coding!

Tác giả: Kiên Nguyễn

Xem thêm: 

Xem thêm các vị trí IT Job hấp dẫn trên TopDev

Tổng hợp 10 câu hỏi phỏng vấn Android Developer thường gặp

Tổng hợp 10 câu hỏi phỏng vấn Android Developer thường gặp

Lập trình Android hiện nay không còn xa lạ với các bạn lập trình viên, nó đã trở thành một hướng đi mà nhiều bạn lựa chọn nhờ thị trường vô cùng rộng lớn. Nếu bạn đang có nhu cầu tìm kiếm một vị trí Android Developer, bài viết hôm nay mình sẽ giúp các bạn chuẩn bị cho buổi phỏng vấn sắp tới bằng top 10 câu hỏi về Android thường gặp nhất đến từ nhà tuyển dụng nhé.

Câu 1: Android là gì?

Android là gì?

Android là một hệ điều hành mã nguồn mở dựa trên Linux được sử dụng trong các thiết bị di động như điện thoại thông minh, máy tính bảng, tivi,… Được Google phát hành lần đầu vào năm 2008, sau nhiều lần cập nhật thường xuyên định kỳ hàng năm, Android hiện đang trở thành nền tảng hệ điều hành điện thoại thông minh (smartphone) phổ biến nhất thế giới.

Android có một hạt nhân dựa trên nhân Linux; middleware, thư viện và API được viết bằng C; còn phần mềm ứng dụng chạy trên một nền tảng ứng dụng gồm các thư viện tương thích với Java. Nó sử dụng máy ảo Dalvik với một trình biên dịch động thường được biên dịch sang Java bytecode.

Câu 2: Lập trình Android sử dụng ngôn ngữ gì?

Hiện nay có nhiều cách để tạo ra các ứng dụng Android, có thể là native app, cross-platform app hay hybrid app. Đối với Native App chỉ những ứng dụng được viết bằng công cụ và SDK mà Google cung cấp cho lập trình viên, chúng ta có thể sử dụng ngôn ngữ lập trình Kotlin, Java hoặc C/C++ cho việc viết source code và phát triển phần mềm. Ngoài ra thì trong lập trình Android, để dựng giao diện ứng dụng chúng ta sử dụng ngôn ngữ XML; thao tác với cơ sở dữ liệu bằng hệ quản trị CSDL quan hệ SQLite. 

Android cung cấp công cụ phát triển chính thức dành cho lập trình viên bao gồm:

  • Android SDK (Software Development Kit) bao gồm ADB (Android Debug Bridge), Fastboot và gói ứng dụng Android (APK)
  • NDK (Native Development Kit): bộ công cụ giúp sử dụng code C/C++ trong Android
  • ART (Android Runtime) – một sự thay thế cho Dalvik là môi trường chạy ứng dụng Android
  • Android Studio: IDE môi trường phát triển tích hợp

  Sử dụng Sqlite trong Android như thế nào hiệu quả nhất?

Câu 3: Nêu vòng đời của một Activity trong Android

Activity trong Android

Activity là thành phần quan trọng nhất của ứng dụng Android, thông thường sẽ cung cấp một cửa sổ (window / frame) hiển thị các thành phần UI (giao diện người dùng) để tương tác. Mỗi Activity sẽ có một vòng đời cụ thể trong quá trình hoạt động tương ứng với những trạng thái cùng methods mà Android cung cấp:

  • Launched: trạng thái mà Activity được kích hoạt, hệ thống đẩy vào stack. Lúc này lần lượt các callback methods sẽ được gọi: onCreate, onStart và onResume.
  • Running: trạng thái Activity đang chạy, người dùng sẽ nhìn thấy UI của Activity và có thể tương tác với chúng. Trong lúc này, nếu có một Activity nào khác chiếm quyền hiển thị thì Activity của chúng ta sẽ callback method onPause. Lúc này nếu người dùng quay lại Activity thì method onResume sẽ được gọi, nếu Activity không được hiển thị lên nữa thì method onStop sẽ được gọi. Khi Actvity đã onStop, để mở lại Activity thì method onRestart sẽ được gọi.
  • Process Killed: Trong trường hợp Activity đang ở không được Active, hệ thống thiếu bộ nhớ để hoạt động thì Activity sẽ bị thu hồi (xử lý hủy) để giải phóng tài nguyên. Khi Activity được gọi lại thì nó sẽ call lại method onCreate.
  • Shutdown: Khi người dùng chủ động tắt ứng dụng thì Activity cũng kết thúc vòng đời của nó và call method onDestroy.

Tham khảo nhiều việc làm Mobile Developer hấp dẫn tại đây!

Câu 4: Fragment là gì? Khi nào sử dụng Fragment

Fragment là một thành phần độc lập trong Android, được sử dụng bởi một Activity, có thể hiểu như một sub-Activity. Fragment có vòng đời và UI riêng. Trong ứng dụng Android, tại một thời điểm thì chỉ có 1 Activity được hiển thị duy nhất lên màn hình; vì thế để đáp ứng cho các giao diện cần chia màn hình ra thành nhiều phần (ví dụ như dạng Tab) để sử dụng, chúng ta sử dụng Fragment cho bài toán này.

  Hướng dẫn sử dụng Content Provider trong Android

Nhiều fragment kết hợp với nhau trong một Activity để xây dựng giao diện đa cửa sổ và có thể tái sử dụng. Lợi ích khi sử dụng Fragment:

  • Có tính module hóa cao hơn
  • Quản lý tốt hơn cho vòng đời của một phần UI riêng biệt
  • Có khả năng tái sử dụng trong các Activity
  • Dễ dàng giải phóng dữ liệu, giảm chi phí bộ nhớ
  • Khả năng xử lý logic linh hoạt hơn nhờ khả năng chia sẻ dữ liệu giữa các Fragment trong cùng một Activity

Câu 5: Nêu các thành phần cơ bản xây dựng UI trong Android

Trong Android, để xây dựng giao diện người dùng (UI) chúng ta sử dụng thành phần cơ bản bao gồm View, ViewGroup và Layout. 

  • View là lớp cơ sở (class) của tất cả các thành phần giao diện được Android cung cấp sẵn như Button, TextView, CheckBox, RadioButton, ImageView,…
  • ViewGroup là một lớp trừu tượng (abstract) kế thừa từ View, nó cũng chính là View nhưng có khả năng chứa các View khác bên trong. 
  • Layout chính là các ViewGroup được xây dựng sẵn với mục đích chứa các View con cùng các điều khiển để sắp xếp vị trí cho các View đó hiển thị lên màn hình. Layout phổ biến sử dụng bao gồm: FrameLayout, ConstraintLayout, LinearLayout, RelativeLayout, GridLayout, TableLayout,…

Câu 6: Canvas là gì?

Canvas được xem như một bề mặt 2D để chúng ta có thể vẽ bất cứ thứ gì lên đó và hiển thị cho người dùng thấy. Chẳng hạn chúng ta có thể vẽ một điểm, một đường thẳng, một hình chữ nhật, đường tròn, elip hay thậm chí cả những hình ảnh phức tạp khác. Có rất nhiều bài toán mà chúng ta sử dụng đến Canvas khi mà nội dung chúng ta muốn hiển thị lên cho người dùng không thể biểu diễn được bằng các View sẵn có. 

Android cung cấp cho chúng ta những method để vẽ các đối tượng trong Canvas như sau:

  • Các đối tượng hình học cơ bản: Point, Line, Oval, React,…
  • Vẽ hình ảnh: Bitmap, Drawable
  • Vẽ tập hợp các điểm: Path
  • Vẽ Text

Câu 7: Làm sao hiển thị các nội dung dạng danh sách trong Android

ListView và RecycleView

ListView và RecycleView là 2 ViewGroup phổ biến sử dụng để hiển thị các nội dung dạng danh sách. ListView giúp hiển thị các thành phần (elements) theo dạng một danh sách có thể cuộn được theo chiều thẳng đứng và được sử dụng như một class cơ bản trong Android từ những phiên bản đầu tiên. RecycleView mới được giới thiệu trong Android L (API level 21) với sự mạnh mẽ và bổ sung nhiều chức năng hơn so với ListView.

RecycleView hỗ trợ scroll theo cả chiều ngang (horizontal) và chiều dọc (vertical); ngoài ra RecycleView.LayoutManager cho phép layout các item trong list theo dạng grid hay staggered grid. RecycleView còn nhiều hỗ trợ bổ sung đáng giá như Animation khi thêm hay xóa 1 item trong danh sách; hỗ trợ draw divider tùy ý. Thêm một cải thiện nữa là RecycleView bắt buộc sử dụng ViewHolder khi tạo một Adapter nhằm cải thiện performance của danh sách tốt hơn.

Câu 8: Broadcast Receiver là gì?

Broadcast Receiver là một trong 4 components lớn trong Android với nhiệm vụ lắng nghe các sự kiện, trạng thái của hệ thống phát ra ví dụ như có tin nhắn đến, hành động rút / cắm sạc, hành động bật/ tắt mạng,… từ đó ứng dụng của chúng ta sẽ xử lý các hành động tương ứng bên trong. Broadcast Receiver có thể hoạt động cả khi ứng dụng đang ở background mode và hay được sử dụng với Service.

Để thực thi được Broadcast Receiver, chúng ta cần phải đăng ký Broadcast trong file Android Manifest hoặc trong file Java (source code) của ứng dụng thông qua lớp IntentFilter tương ứng với từng hành động, sự kiện cụ thể xảy ra trên thiết bị. Chúng ta cũng có thể tự định nghĩa các Custom Broadcast Receiver để truyền thông điệp trong và ngoài ứng dụng mà chúng ta mong muốn. Ngoài ra, Android cũng cung cấp component Local Broadcast Receiver cho việc gửi thông điệp gói gọn trong project, không thông qua hệ thống nhằm tránh bị rò rỉ thông tin ra ngoài các ứng dụng khác.

Câu 9: Có những loại Service nào trong Android

Service cũng là một thành phần chính trong ứng dụng Android giúp chúng ta thực hiện các tác vụ cần nhiều thời gian, không có giao diện người dùng (UI) và không bị tắt khi đóng ứng dụng; chẳng hạn như download file từ Internet, chạy nhạc, đồng bộ dữ liệu lên cloud,…

Service được chia thành 3 loại:

  • Foreground Service: là những services mà người dùng chú ý và thấy rõ ràng như play music (người dùng có thể tương tác control nó). Một điều bắt buộc là Foreground Service phải hiển thị một Notification.
  • Background Service: những services mà người dùng không chú ý trực tiếp như thu gom bộ nhớ của hệ thống.
  • Bound Service: là những services được ràng buộc bởi một thành phần trong ứng dụng và khởi động nó bằng lời gọi bindService. Điều đó cũng có nghĩa là khi thành phần ràng buộc này tháo bỏ ràng buộc với service thì Service đó cũng bị destroy.

Câu 10: Hãy giải thích về kiến trúc MVP trong Android

MVP viết tắt bởi Model – View – Presenter là một kiến trúc phần mềm thường được đề xuất, khuyến nghị sử dụng trong các dự án Android. MVP được thiết kế để tạo điều kiện cho việc kiểm thử đơn vị tự động (Automated Unit Testing) và cải tiến Separation of Concerns (tách biệt thành phần) trong việc trình bày logic (presentation logic).

Với Android, MVP tách ứng dụng (cấu trúc source code) thành 3 tầng Model, View, Presenter và trong mỗi tầng đều được chia thành module nhỏ có vai trò riêng biệt. Tầng Presenter là nơi tập trung xử lý logic, cũng là cầu nối giữa Model và View. Đây là nơi theo dõi sự thay đổi của ứng dụng, các biến trạng thái và xử lý logic tương ứng. Presenter có phần giống với Controller trong mô hình MVC, dù vậy thì trong mô hình MVP, Model và View không hề liên kết với nhau mà tất cả phải qua Presenter.

Kết bài

Như vậy chúng ta đã đi qua được top 10 câu hỏi phỏng vấn dành cho vị trí Android Developer. Lập trình Android là mảng khá rộng và có rất nhiều kiến thức xung quanh để nhà tuyển dụng có thể hỏi bạn, vì thế hãy trang bị thêm thật nhiều những câu hỏi lập trình khác để chuẩn bị tốt nhất cho buổi phỏng vấn của mình nhé. Cảm ơn các bạn đã đọc bài và hẹn gặp lại trong các bài viết tiếp theo của mình.

Tác giả: Phạm Minh Khoa

Xem thêm:

Tìm việc làm IT mọi cấp độ tại TopDev

Software Manager là gì? Kỹ năng cần thiết để trở thành Software Manager

Software Manager là gì? Kỹ năng quan trọng để trở thành Software Manager

Trong một công ty hay một dự án phần mềm có rất nhiều vị trí chức danh tương ứng với vai trò khác nhau. Software Manager hay Quản lý phần mềm là một chức danh mà không phải ở công ty nào cũng có, mặc dù công việc và trách nhiệm của họ rất quan trọng và có nhiều điểm giống với một vài vị trí khác. Trong bài viết hôm nay chúng ta cùng tìm hiểu về công việc của một Software Manager cũng như những kỹ năng cần thiết để trở thành quản lý phần mềm nhé.

Software Manager là gì?

Người quản lý phần mềm là vị trí trong công ty, tổ chức có nhiệm vụ giám sát sự phát triển, việc cài đặt và bảo trì một phần mềm mới và những phiên bản cập nhật mở rộng (upgraded) của nó.

Với tư cách là một Software Manager, bạn sẽ phải phối hợp với các thành viên khác trong team hay trong công ty để xác định nhu cầu và mong đợi của khách hàng; từ đó thiết lập ngân sách (budgets) và thời gian (schedules) cũng như đảm bảo rằng người sử dụng thao tác với sản phẩm đúng cách. Bên cạnh đó là việc đào tạo, hướng dẫn người sử dụng thao tác với phần mềm sau khi phần mềm được cài đặt để khắc phục các sự cố phát sinh.

  IT Manager Là Gì? Những Điều Bạn Cần Biết Về IT Manager

Software Manager

Công việc của một Software Manager

1. Quản lý team phát triển phần mềm

Trong một dự án phần mềm, team phát triển thông thường sẽ bao gồm nhiều vị trí khác nhau như:

Software Manager trực tiếp trao đổi và làm việc với team phát triển nhằm đảm bảo yêu cầu của phần mềm được đáp ứng đúng, đủ và kịp thời theo yêu cầu về ngân sách và thời gian. Ở yếu tố này, công việc của quản lý phần mềm khá tương đồng với quản lý dự án; mặc dù vậy điểm khác biệt ở đây là một Software Manager không đi sâu vào trực tiếp các nhiệm vụ chi tiết trong dự án như Project Manager, đồng thời họ cần quản lý nhiều hơn một team dự án cho cùng một sản phẩm phần mềm.

  Tạo thư viện bằng Swift Package Manager trong Xcode

2. Tuyển dụng, điều phối nhân sự

Việc quản lý nhân sự trong team là yếu tố quan trọng quyết định đến sự phát triển của phần mềm cũng như ảnh hưởng đến việc cài đặt, bảo trì trong tương lai. Nhân sự có kiến thức về phần mềm luôn có vai trò quan trọng, đồng thời có giá trị cao trong việc vận hành sản phẩm phần mềm. Một nhà quản lý phần mềm luôn cần có kỹ năng tốt trong việc tìm kiếm nhân sự phù hợp cho sản phẩm của mình; vì thế việc tham gia vào quá trình tuyển dụng cũng là điều cần thiết.

  Bộ câu hỏi phỏng vấn IT Manager và cách trả lời hay nhất

3. Đảm bảo chất lượng phần mềm

Chất lượng phần mềm là yếu tố quan trọng nhất đối với một sản phẩm phần mềm, vì vậy đây cũng là một công việc quan trọng của Software Manager. Các quy trình đảm bảo chất lượng trong tổ chức được áp dụng vào, đồng thời có thể có sự tham gia của thành viên QA (Quality Assurance). Mặc dù vậy công việc của quản lý phần mềm vẫn phải là đảm bảo chất lượng sản phẩm đầu cuối đến tay khách hàng một cách hoàn thiện nhất.

Tham khảo việc làm IT Manager hấp dẫn trên TopDev

4. Chỉ đạo lựa chọn kiến trúc phần mềm

Đây được xem như là công việc quyết định đến sự thành công của phần mềm ở giai đoạn thiết kế. Software Manager là người chỉ đạo, tổ chức các cuộc họp thống nhất kiến trúc của sản phẩm phần mềm cũng như đảm bảo khả năng mở rộng của hệ thống. Sự tham gia của các bên phụ trách kỹ thuật, cùng với yêu cầu từ khách hàng về sản phẩm kết hợp với những hiểu biết về phần mềm, quản lý phần mềm sẽ giúp cuộc họp đưa ra quyết định cho kiến trúc tốt nhất của phần mềm sẽ xây dựng.

5. Thúc đẩy chiến lược sản phẩm 

Việc xác định các tính năng và yêu cầu cốt lõi là nhiệm vụ cần thiết để Software Manager đưa ra phương pháp và hệ thống phát triển phù hợp, hay nói cách khác là chiến lược phát triển sản phẩm. Quản lý phần mềm lúc này đồng thời cũng là một chuyên gia về sản phẩm, tham gia đóng góp tiếng nói về lộ trình của sản phẩm bằng việc liên lạc trao đổi thường xuyên với chủ sở hữu sản phẩm đó (Product Owner).

Những kỹ năng cần có của một Software Manager

Software Manager

Trong một công ty phát triển phần mềm sẽ có nhiều vị trí khác nhau bao gồm cả phụ trách kĩ thuật và các công việc quản lý. Một người xuất sắc trong việc phát triển sản phẩm và xây dựng kiến trúc hệ thống không phải lúc nào cũng giỏi trong việc giải quyết các vấn đề về ngân sách, chính sách trong dự án, quản lý con người. Chính vì thế có nhiều vai trò khác nhau trong công ty đi cùng các kỹ năng yêu cầu đặc thù. Với Software Manager, một vị trí thiên về vấn đề quản lý thì những kỹ năng cần có bao gồm:

  • Kiến thức và chuyên môn sâu về ngành và sản phẩm
  • Kỹ năng tuyển dụng và xây dựng đội ngũ
  • Kỹ năng setup, xây dựng một sản phẩm phần mềm mới từ đầu
  • Duy trì hay cập nhật, cải tiến một sản phẩm hiện có
  • Kỹ năng quản lý dự án: bao gồm các kĩ năng của một Project Manager
  • Kỹ năng nói chuyện với khách hàng hay chủ sản phẩm
  • Kỹ năng giải quyết vấn đề và đàm phán với các bên liên quan

Kết bài

Trong bài viết này chúng ta đã cùng tìm hiểu về Software Manager và các công việc mà họ đảm nhận. Tùy thuộc vào từng công ty hay tổ chức thì chức danh có thể sẽ khác với quản lý phần mềm, nhưng chắc chắn sẽ có những người đảm nhiệm vai trò cụ thể quản lý phần mềm như Giám đốc công nghệ hay Giám đốc phần mềm. Hy vọng bài viết này mang lại cho các bạn cái nhìn tổng quát về vị trí này, nếu đây là định hướng của bạn trong tương lai, hãy trang bị những kỹ năng cần thiết mà trong bài đã đề cập đến nhé. Hẹn gặp lại các bạn trong các bài viết tiếp theo của mình.

Tác giả: Phạm Minh Khoa

Có thể bạn quan tâm:

Xem thêm tuyển dụng việc làm IT hấp dẫn trên TopDev

Hướng dẫn sử dụng Content Provider trong Android

Hướng dẫn sử dụng Content Provider trong Android

Bài viết được sự cho phép của tác giả Lê Hồng Kỳ

Hướng dẫn sử dụng content provider trong android sẽ giới thiệu về Content Provider, vai trò và cách sử dụng nó.

Content Provider là thành phần giúp cho những ứng dụng khác nhau trong cùng một thiết bị có thể đọc và ghi dữ liệu từ file hoặc từ SQLite của ứng dụng khác.

Hướng dẫn sử dụng Content Provider trong Android

Như vậy, content provider cho phép chúng ta tập trung dữ liệu tại một nơi mà có nhiều ứng dụng khác truy cập vào khi cần thiết.

Hướng dẫn sử dụng content provider trong android – Ứng dụng hiển thị danh sách contact hiện có trong thiết bị

Mô tả chức năng

Hiển thị danh sách contact hiện có trong thiết bị khi người dùng chọn nút “LOAD ALL CONTACTS”. Ứng dụng có hỗ trợ thanh cuộn (scrollbar) cho phép người dùng trượt lên, xuống để xem hết contact.

Mỗi một contact được hiển thị theo định dạng Tên : Số điện thoại

  Sử dụng Sqlite trong Android như thế nào hiệu quả nhất?

Hướng dẫn thực hiện

Bước 1: Tạo mới activity tên RetrievingContactsListActivity

1/ Thiết kế giao diện

Hướng dẫn sử dụng Content Provider trong Android

2/ Viết xử lý cho nút “Load all contacts”

LoadContactsAyscn lca = new LoadContactsAyscn();
lca.execute();

Code của lớp LoadContactsAyscn

3/ Cấp quyền cho ứng dụng tại AndroidManifest.xml

<uses-permission android:name="android.permission.READ_CONTACTS" />

Bước 2: Build và run

Tham khảo việc làm Android hấp dẫn trên TopDev

Hướng dẫn sử dụng content provider trong android – Ứng dụng gửi tin nhắn (SMS)

Mô tả chức năng

Một ứng dụng cho phép người dùng gửi tin nhắn đến một số điện thoại được chỉ định ngay trong ứng dụng android của bạn.

Hướng dẫn sử dụng Content Provider trong Android

Lưu ý khi người dùng chọn “SEND”, Số điện thoại và tin nhắn không được bỏ trống.

  Cách Thiết Lập Máy Ảo, Máy Thật & Khởi Chạy Ứng Dụng Trong Android

Hướng dẫn thực hiện

Bước 1: Tạo mới activity tên SMSAppActivity

1/ Thiết kế giao diện

Hướng dẫn sử dụng Content Provider trong Android

2/ Viết xử lý cho nút “SEND”

// Khởi tạo đối tượng
SmsManager sm = SmsManager.getDefault();
// Gửi tin nhắn
sm.sendTextMessage(Số điện thoại người nhận, null, Nội dung tin nhắn, null, null);
// Thông báo
Toast.makeText(this, "Tin nhắn đã được gửi", Toast.LENGTH_LONG).show();

3/ Viết xử lý cho nút “EXIT”

finish();

4/ Cấp quyền cho ứng dụng

<uses-permission android:name="android.permission.SEND_SMS" />

Bước 2: Build và run

Bài viết gốc được đăng tải tại giasutinhoc.vn

Xem thêm:

Tìm việc làm IT mọi cấp độ tại TopDev

NFT tiềm năng hay “bong bóng công nghệ”?

NFT tiềm năng hay

Bài viết được sự cho phép của tác giả Võ Xuân Phong

Câu chuyện đằng sau sự ra đời của NFT

Chắc các bạn cũng đã biết các hình thức đấu giá, vật được đấu giá có thể là bất kỳ đồ vật nào được mọi người quan tâm, nó mang tính chất khan hiếm, một tính chất hay một niềm tin nào đó, mà người tham gia đấu giá bỏ ra số tiền rất lớn để sở hữu được đồ vật đó bằng được. NFT cũng vậy người mua NFT cũng đang đấu giá để sở hữu được tài sản kỹ thuật số mà họ tin tưởng nó quý hiếm và có thể mang lại lợi nhuận tiềm năng trong tương lai. Tính khan hiếm của tài sản kỹ thuật số và quyền sở hữu tài sản kỹ thuật số đó, có lẽ là điều mà người mua NFT đang quan tâm chăng? Họ có thể quan tâm những thứ khác như mua NFT để đầu tư, đầu cơ lướt sóng thần hay họ bị hiệu ứng FOMO (Fear Of Missing Out) của đám đông tác động v.v. Nó có thể là bất kỳ thứ gì nhưng điều tiên quyết vẫn là tính khan hiếm và quyền sở hữu, bởi vì người sưu tầm ai cũng đồng ý rằng thứ họ săn đuổi phải có số lượng giới hạn.

Đi đến một câu chuyện khác. Để tạo ra được một tác phẩm nghệ thuật như một bức tranh, một bài nhạc hoặc một bộ phim v.v. Các nghệ sĩ và người sáng tạo ra nội dung đó phải mất rất nhiều thời gian và chất xám của mình để hoàn thành tác phẩm. Sau khi hoàn thành tác phẩm nghệ thuật, những người nghệ sĩ buộc phải nhờ đến bên thứ ba để sản phẩm nghệ thuật của họ được truyền bá rộng rãi ra thế giới. Ví dụ như muốn một bài nhạc của nghệ sĩ được truyền bá rộng rãi, bên hãng thu âm và phát hành sẽ hứa hẹn mang lại khả năng sinh lời cho tác phẩm, để đổi lại phần lợi nhuận tương xứng hoặc thậm chí là bản quyền sở hữu của tác phẩm đó.

Lúc này NFT ra đời giúp các chủ thể sáng tạo nội dung lấy lại được vô lăng, bỏ qua sự góp mặt của bên trung gian, và toàn quyền sở hữu, kiểm soát tài sản trí tuệ của mình.

Ví dụ về NFT Everydays: The First 5000 Days của Mike Winkelmann (Beeple). Tác phẩm nghệ thuật kỹ thuật số này đã được bán với giá 69 triệu đô vào tháng 3 năm 2021. Tại sao một tác phẩm nghệ thuật kỹ thuật số như thế lại có mức giá trên trời như vậy. Thực sự thì bên trong tác phẩm này là một câu chuyện truyền cảm hứng cho rất nhiều người, kể cả tôi. Beeple đã bắt đầu tạo ra tác phẩm đầu tiên trong bộ sưu tập Everydays của mình vào tháng 5 năm 2007, ông là một nhà khoa học máy tính nên không có nền tảng về nghệ thuật, đơn giản ông chỉ muốn học vẽ và cho rằng việc tạo ra tác phẩm liên tục mỗi ngày sẽ giúp ông tiến bộ và tạo nên kỳ tích. Hơn 5000 tác phẩm đã được tạo ra trong suốt gần 14 năm, đó là cả một quá trình rất dài, ông đã kiên trì, bền bỉ để không bỏ lỡ một ngày nào kể cả là ngày đám cưới và ngày con ông được chào đời. Qua câu chuyện truyền cảm hứng này, thì người sưu tầm NFT này chắc chắn sẽ có lý do đủ thuyết phục để mua nó với mức giá cao như vậy phải không?

Đằng sau NFT còn có nhiều câu chuyện thú vị khác nữa, mình xin được đề cập ở một bài viết khác.

Thời điểm để hòa mình vào dòng xu hướng NFT là năm 2020, nhưng thời điểm tốt thứ hai là ngay bây giờ. (Trích từ: NFT Handbook)

  The Merge – Bước tiến quan trọng của blockchain Ethereum

  Tiềm năng ứng dụng thực tế của blockchain & Web3

NFT là gì?

NFT được viết tắt của Non-Fungible Token, tạm dịch là Token không thể thay thế. Vậy như thế nào là Token không thể thay thế? Trước khi đi vào câu hỏi này thì chúng ta nên hiểu Fungible là gì.

Fungible là tính từ mang ý nghĩa “cùng tính chất, cùng thể loại có thể trao đổi hoặc thay thế một cách tự do, một phần hoặc từng phần cho các vật phẩm khác tương tự (đặc biệt khi nói về các loại hàng hóa)”. Ví dụ mình có tờ 50 ngàn và bạn có 2 tờ 20 ngàn và 1 tờ 10 ngàn thì chúng ta có thể hoàn toàn trao đổi 1 tờ của mình lấy 3 tờ của bạn, vì chúng có cùng chung giá trị. Hoặc hôm trước mình mời bạn uống một lon Coca-Cola và bạn hứa lần sau bạn sẽ mời lại mình một lon Coca-Cola khác. 2 lon Coca-Cola này có thể trao đổi với nhau bởi vì nó không phải là độc nhất và có cùng chung giá trị.

Vậy thì Non-Fungible mang tính độc nhất và không thể dễ dàng thay thế hay trao đổi. Ví dụ như bức tranh Mona Lisa của thiên tài toàn năng Leonardo da Vinci, bức tranh này là độc nhất trên thế giới và không thể thay thế hay trao đổi với một bức tranh khác. Một ví dụ khác như mỗi viên kim cương có kích thước, màu sắc, độ trong và đường cắt khác nhau mang tính độc nhất. Nếu bạn sở hữu một viên kim cương cụ thể nào đó, thì viên kim cương đó không thể dễ dàng hoán đổi hay thay thế bằng một viên kim cương khác.

Còn Token trong NFT được nhiều người hiểu theo nghĩa “kỷ vật”, bởi vì NFT được biết đến như là một đồ sưu tầm kỹ thuật số nhưng nó hoàn toàn không có ý nghĩa như vậy. Token ở đây mang ý nghĩa hoàn toàn khác. Bạn có thể đọc tiếp phần Phân biệt Coin và Token thì bạn sẽ hiểu Token ở đây là gì.

Tham khảo việc làm Blockchain mới nhất tại đây!

Vì sao NFT có giá trị?

Ngoài việc NFT là một tác phẩm hiếm có và số lượng giới hạn, người ta muốn sưu tầm bởi vì nó như một kỷ vật thì NFT có giá trị bởi vì đằng sau NFT đó là một câu chuyện truyền cảm hứng như NFT Everydays: The First 5000 Days của Beeple. Người mua NFT đó ngoài quyền sở hữu các tác phẩm nghệ thuật, còn bị câu chuyện đằng sau nó thuyết phục.

Người mua NFT cũng tin rằng danh tiếng và sự đảm bảo của nghệ sĩ tạo ra NFT đó, sẽ thúc đẩy giá NFT mà họ mua tăng trưởng trong tương lai.

Có nhiều người lầm tưởng rằng cứ đúc NFT ngày hôm nay và đăng bán vào ngày hôm sau trên các sàn giao dịch sẽ có người bỏ tiền ra mua NFT của mình và thu được món hời lớn như những thương vụ NFT đình đám. “Thành công sau một đêm” là chuyện không thể, nó đòi hỏi quá trình gian nan và sự hiểu biết. Chúng ta đã quen với các thuật toán quảng bá của các trang mạng xã hội như Youtube, Tiktok, Facebook v.v. Nhưng các sàn giao dịch không hoạt động dựa trên những thuật toán như vậy, sẽ không ai tìm đến NFT của bạn nếu như bạn không quảng bá nó. Trước hết hãy tìm hiểu về những khán giả hay khách hàng tiềm năng của bạn, và xây dựng một cộng đồng để giới thiệu và quảng bá cho mọi người quá trình mà bạn làm ra NFT đó. Mọi người sẽ hiểu câu chuyện của bạn và sẽ không ngại bỏ tiền ra ủng hộ những tác phẩm nghệ thuật đó.

Blockchain là gì?

Để hiểu rõ hơn về NFT, chúng ta nên hiểu về Blockchain và cách hoạt động của nó. Bởi vì việc mua bán các NFT sẽ dựa trên nền tảng công nghệ Blockchain. Blockchain như cái tên của nó là chuỗi khối, là một chuỗi các khối được liên kết với nhau, mỗi khối sẽ chứa đựng thông tin từng giao dịch một đã xác minh và xảy ra trong Blockchain đó. Mỗi khối sẽ có một dung lượng lưu trữ nhất định, sau khi giao dịch đã được xác minh và khối đã đầy thì khối mới sẽ được tạo ra gắn liền vào khối liền trước đã được xác minh.

Blockchain là mạng lưới phi tập trung bao gồm nhiều máy tính ở khắp nơi trên thế giới liên kết lại với nhau. Mỗi máy tính này lại lưu trữ một bản sao về các khối và thông tin giao dịch trong mỗi khối, nên việc hack và thay thế thông tin trong mạng lưới Blockchain là rất khó, bởi vì hacker phải thay đổi toàn bộ thông tin trên rất nhiều máy tính đó thì mới có thể thao túng và làm giả được các thông tin đã được xác thực trên Blockchain. Bất kỳ thông tin nào không trùng khớp với các khối còn lại thì giao dịch đó sẽ không được công nhận và không được ghi vào mạng lưới Blockchain.

Blockchain hiểu ngắn gọn như là một cuốn sổ cái kế toán dài lê thê, ghi lại các giao dịch trong mạng lưới. Cuốn sổ cái đó được sao chép và phân phát cho mọi người tham gia vào Blockchain đó. Nếu muốn thêm thông tin gì mới vào cuốn sổ cái đó, thì phải được sự đồng ý của tất cả mọi người trong mạng lưới đó chấp thuận. Nếu như một người bị mất cuốn sổ cái, thì có thể sao chép từ mạng lưới Blockchain và luôn chắc rằng cuốn sổ bạn giữ sẽ có đầy đủ thông tin như mọi người trong mạng lưới Blockchain.

Cuốn sổ cái Blockchain là công khai, ai cũng có thể truy cập và xem thông tin từng giao dịch, đó là tính chất minh bạch của Blockchain. Ví dụ các bạn có thể truy cập trang https://etherscan.io để tìm kiếm và xem tất cả các giao dịch của một địa chỉ trong Blockchain của Ethereum, để xem thông tin giao dịch của địa chỉ nào đó trên Blockchain của Bitcoin thì các bạn có thể tìm và truy cập Blockchain explorer https://www.blockchain.com/explorer.

Một số đồng tiền kỹ thuật số như Bitcoin, Ethereum v.v. sẽ có mạng lưới Blockchain riêng của nó. Ngoài việc xác thực việc giao dịch các đồng tiền kỹ thuật số như Bitcoin, Ethereum v.v. Blockchain còn nhiều ứng dụng tuyệt vời khác nữa.

Ứng dụng trong nông nghiệp như truy xuất được nguồn gốc của trái cây, hoa màu v.v. Để có thể đảm bảo được nguồn gốc, chất lượng và độ tin cậy của sản phẩm. Ví dụ như mình sống ở Sài Gòn, đi dọc đường sẽ thấy người ta rao bán dâu tươi Đà Lạt, nhưng liệu đó có phải là dâu Đà Lạt hay không thì cần phải xem xét lại, nguồn gốc của nó vẫn đang là một dấu hỏi lớn.

Trong lĩnh vực sản xuất như quản lý kho bãi và hàng tồn kho, tránh việc hao hụt hay mất mác tài sản của doanh nghiệp v.v.

Ngoài ra Blockchain còn nhiều ứng dụng trong các lĩnh vực khác như giáo dục, y tế, tài chính ngân hàng, các bạn có thể tìm hiểu thêm về các ứng dụng tuyệt vời của Blockchain mang lại.

Phân biệt Coin và Token

Coin là đồng tiền kỹ thuật số có Blockchain của riêng từng loại như Bitcoin, Ethereum, Litecoin v.v. Trong khi đó Token là loại tiền điện tử không sở hữu Blockchain riêng của nó mà nó tận dụng Blockchain của những đồng coin khác. Hiện tại hầu hết các NFT được tạo ra và vận hành trên Blockchain của Ethereum. Môt số NFT được tạo ra  và hoạt động trên WAX, Binance Smart Chain và một số Blockchain khác.

Các loại NFT phổ biến

Các NFT là một sản phẩm kỹ thuật số có thể là:

    – Hình ảnh

    – Video

    – Audio

    – GIF

    – Mô hình 3D

    – Sách và văn bản

    – Tên miền (tên miền trên blockchain)

    – Bất động sản ảo

    – Vật phẩm game

NFT và những nghi hoặc

“Tại sao tôi lại muốn mua một thứ gì đó mà ai cũng có thể xem được trực tuyến, chụp lại màn hình và tuyên bố quyền sở hữu với sản phẩm kỹ thuật số ấy?”. Để trả lời cho câu hỏi này thì chúng ta hãy xem lại mục, tại sao NFT có giá trị và mục đích mà người ta sưu tầm kỹ vật.

NFT là một phương tiện để mua bán trao đổi các sản phẩm kỹ thuật số, vậy còn việc NFT hóa các tài sản thực như một đồ vật nào đó thì sao? Người mua NFT đó chỉ sở hữu NFT và một lời hứa hẹn, và chuyện gì sẽ xảy ra khi người tạo NFT không bàn giao tài sản ở dạng vật chất cho người mua NFT. Điều này đi ngược với giá trị của tài sản Blockchain, khi ta phải phụ thuộc vào bên thứ ba.

Nội dung của NFT ví dụ như hình ảnh, video sẽ không được tải lên Blockchain bởi vì nó có dung lượng lớn và chi phí cao. Trên các sàn giao dịch như OpenSea người đúc và bán NFT sẽ phải cung cấp đường dẫn đến hình ảnh hoặc video đó và chuyện gì sẽ xảy ra khi hình ảnh NFT đó được tải lên một máy chủ tập trung và hiện tại nó đã chết? NFT của bạn sẽ tan tành phải không. Hãy áp dụng những giải pháp lưu trữ phi tập trung như IPFS (InterPlanetary File System) hay những nhà cung cấp dịch vụ đám mây đáng tin cậy như AWS hay Google Cloud. Đừng nên tải nội dung NFT lên các dịch vụ lưu trữ web tập trung, trang web cá nhân hay tài khoản lưu trữ cá nhân.

Các sàn giao dịch NFT

Tên sàn Trang web Mô tả
Open Sea https://opensea.io/ Đây là sàn giao dịch NFT đầu tiên cũng là sàn giao dịch lớn nhất thế giới. Open Sea có vô số các NFT được đúc ra và rao bán, giao diện người dùng đơn giản và dễ tiếp cận.
Nifty Gateway https://www.niftygateway.com/ Là sàn giao dịch chỉ bán NFT của các nghệ sĩ có tên tuổi, ở đây các bạn có thể mua NFT bằng thẻ tín dụng hoặc thẻ ghi nợ.
Super Rare https://superrare.com/ Như tên gọi của nó, đây là sàn giao dịch chỉ bán những NFT có một phiên bản duy nhất. Các NFT kỹ thuật số không mua được ở bất kỳ nơi nào khác thì mới có thể bán được tại Super Rare.
WAX https://wax.atomichub.io/ Sàn WAX dựa trên Blockchain WAX với chi phí giao dịch (phí gas) nhỏ hơn rất nhiều so với phí gas của Ethereum. WAX sử dụng phương thức xác thực proof of stake giúp ít tiêu tốn năng lượng và giảm tác động đến môi trường tự nhiên.
Foundation https://foundation.app/ Cách thiết kế và hoạt động của sàn này ảnh hưởng từ mạng xã hội. Người dùng được Khuyến khích liên kết trang mạng xã hội với Foundation. Ai cũng có thể đăng ký sử dụng Foundation, nhưng nếu muốn bán NFT thì phải nhận được upvote như cộng đồng, điều này khiến cho người dùng khó bán được NFT nhưng phần lớn NFT được cộng đồng đón nhận đều có chất lượng.

Tóm lại

Nhiều nhận định cho rằng thị trường NFT là thị trường đầu cơ, và bong bóng NFT sẽ vỡ như bong bóng dot-com vào cuối thập niên 1990. Nhưng suy cho cùng thị trường NFT đã tạo ra một sân chơi và nhiều lợi ích cho các nghệ sĩ và người sưu tầm kỹ thuật số. NFT nói riêng và Blockchain nói chung đã và đang mang lại những ứng dụng và tiện ích công nghệ không thể phủ nhận.

Bài viết gốc được đăng tải tại anhlamweb.com

Xem thêm:

Top Developer đừng bỏ lỡ Top việc làm IT mới nhất trên TopDev!

Top 10 câu hỏi thường gặp khi phỏng vấn WordPress Developer

Top 10 câu hỏi thường gặp khi phỏng vấn WordPress Developer

Để xây dựng một website cơ bản với các chức năng viết bài, đăng bài đầy đủ với các thao tác cơ bản thì WordPress là một lựa chọn không thể tốt hơn dành cho chúng ta. Sự đơn giản, linh hoạt và dễ sử dụng khiến WordPress trở thành một CMS phổ biến nhất hiện nay, cùng vì thế mà nhu cầu tuyển dụng lập trình viên WordPress luôn luôn ở mức cao. Bài viết hôm nay chúng ta cùng nhau điểm qua top 10 câu hỏi phỏng vấn WordPress Developer thường gặp nhé.

Câu 1: CMS là gì? Các chức năng cơ bản của CMS

CMS – Content Management System là hệ thống quản trị nội dung là nơi mà người dùng có thể thao tác cập nhật, thay đổi nội dung text, video, hình ảnh, files, .. trên website của họ mà không cần sự hỗ trợ từ lập trình viên thông qua việc sửa source code. Các chức năng cơ bản của CMS bao gồm:

  • Quản lý nội dung: text, hình ảnh, files, video,… trên website
  • Quản lý quyền truy cập, sử dụng, vai trò trên trang web
  • Quản lý các tài nguyên sử dụng, themes, plugin,… 
  • Quản lý cấu hình: các thông tin liên quan đến domain, cấu hình bài viết, tài khoản thanh toán,…
  • Chức năng giao diện tương tác tức thời (WYSIWYG) – kết quả chỉnh sửa sẽ được hiển thị ngay trong quá trình chỉnh sửa

CMS là gì

Câu 2: WordPress là gì?

WordPress là một CMS mã nguồn mở, miễn phí dùng để xây dựng các blog, website được viết bằng ngôn ngữ lập trình PHP, sử dụng hệ quản trị cơ sở dữ liệu MySQL. WordPress thích hợp cho các trang web dạng blog cá nhân, portfolio online, các diễn đàn, group thảo luận hay các trang web thương mại điện tử, giới thiệu sản phẩm, doanh nghiệp. WordPress ra mắt chính thức từ năm 2003 và nhanh chóng trở thành một nền tảng phổ biến trên website, chiếm khoảng 40% thị phần các trang Web trên Internet.

Đến nay có hơn 75 triệu trang web sử dụng nền tảng này với một vài thương hiệu nổi tiếng thế giới như Coca Cola, CNN hay BBC,…

  Hướng dẫn Export và Import dữ liệu trong WordPress

  26 đoạn code hay dùng trong lập trình theme WordPress

Câu 3: Ưu điểm của WordPress

Ngoài việc là một CMS mã nguồn mở và miễn phí, WordPress cũng được cộng đồng lập trình Web ưa chuộng vì những ưu điểm sau:

  • Tính đơn giản và dễ sử dụng: Một người không cần biết nhiều về lập trình cũng có thể dễ dàng thao tác với WordPress. Giao diện Admin của WordPress rất dễ hiểu, thân thiện với người sử dụng và còn hỗ trợ đến hơn 50 loại ngôn ngữ khác nhau.
  • Khả năng mở rộng cao: WordPress có hệ sinh thái phong phú với các themes (giao diện) và plugins đa dạng tùy theo nhu cầu và mục đích sử dụng.
  • Tối ưu hóa SEO và tốc độ website: Website đã tối ưu sẵn SEO trong phiên bản miễn phí cung cấp của mình. Ngoài ra các hosting từ nhà cung cấp cũng cho phép cài đặt các công cụ giúp tăng tốc độ website WordPress, tối ưu hóa tìm kiếm từ các công cụ.
  • Cộng đồng hỗ trợ lớn: với tính phổ biến và thị phần của nó, WordPress thu hút hàng triệu lập trình viên và các nhà phát hành. Bạn dễ dàng nhận được hỗ trợ từ cộng đồng nếu gặp phải bất cứ vấn đề gì liên quan đến WordPress.

Tham khảo việc làm WordPress lương cao trên TopDev

 Câu 4: Những công việc của WordPress Developer

Từ việc cung cấp một CMS hoàn chỉnh thì WordPress tạo ra 3 vai trò riêng biệt khá rõ dành cho các lập trình viên có thể đảm nhiệm.

  • Quản trị hệ thống WordPress

Đây là những người có kiến thức về WordPress từ việc sử dụng mã nguồn cung cấp sẵn kết hợp với các bộ giao diện (themes) và plugins sẵn có và tạo nên website theo yêu cầu của khách hàng. Công việc này cũng đòi hỏi những kiến thức liên quan đến hosting, domain,… để setup hệ thống chạy WordPress tối ưu nhất, đồng thời hỗ trợ bảo trì trong suốt quá trình sử dụng. 

  • Xây dựng, tạo ra các themes cho WordPress

Đây là công việc của những Frontend Developer, có nhiệm vụ xây dựng giao diện cho các website WordPress theo yêu cầu của khách hàng, hoặc tạo ra những themes được nhiều người yêu thích và sử dụng, có thể trả phí để sử dụng. Ngoài những kiến thức về HTML, CSS, JS thì PHP cũng là bắt buộc vì source code của WordPress kể cả phần giao diện cũng được viết bằng PHP. Bạn bắt buộc phải viết theo đúng quy tắc hiển thị mà WordPress đã tạo ra.

themes cho WordPress

  • Tạo ra các plugins

Plugins là những chức năng được thêm vào trang web WordPress để mở rộng hay thêm mới các tính năng của website. Để tạo ra các plugins cho WordPress, lập trình viên sử dụng PHP để tạo ra các function để giao tiếp với phần core của nó. Bạn có thể sử dụng plugins cho website của mình hoặc có thể phát hành chúng lên store của WordPress.

Câu 5: Phân loại nhóm người dùng theo quyền (User Roles) trong WordPress

Có 6 nhóm người dùng gồm:

  • Super Admin: Quyền cao nhất quản trị toàn bộ hệ thống. 1 hệ thống có thể có nhiều website
  • Administrator: Người dùng có toàn quyền với những website được chỉ định trong hệ thống
  • Editor: Nhóm có quyền đăng bài viết, quản lý bài viết của những người khác
  • Author: Nhóm có quyền đăng bài viết và quản lý bài viết của chính họ
  • Contributor: Nhóm có quyền viết bài, lưu nháp và gửi duyệt nhưng không có quyền duyệt để đăng bài
  • Subscriber: Nhóm người dùng đăng ký trang để theo dõi, chỉ có quyền sửa thông tin cá nhân của họ

Câu 6: Widget trong WordPress là gì?

Widget là một trong những công cụ cơ bản của WordPress với các chức năng chính là định hình cho chân trang (footer), thanh bên (sidebar) hoặc thêm nội dung mới. Widget mang đến nhiều chức năng và lợi ích; ví dụ như người đọc sẽ có thể xem được những bài viết mới nhất trên website, hoặc tìm kiếm nhanh bài viết theo chủ đề, danh mục, …

Có một số Widget có sẵn trong WordPress và bạn có thể kéo thả vào để sử dụng. Để tạo những widgets mới chúng ta có thể viết thêm source code tùy chỉnh trong plugin, file functions.php hoặc theme website.

Widget trong WordPress

Câu 7: Cách xử lý lỗi Error establishing a database connection

Đây là lỗi thông dụng trong WordPress, thường gặp lúc dựng trang web hoặc có tác động liên quan đến việc kết nối đến cơ sở dữ liệu. WordPress viết bằng PHP và sử dụng MySQL làm database. Khi người dùng truy cập  vào website của bạn, source code viết bằng PHP sẽ truy xuất database MySQL để lấy các thông tin cần thiết để chạy trang cũng như xử lý tương tác với người dùng. Nếu quá trình truy xuất này thất bại, lỗi “Error establishing a database connection” được WordPress trả ra và hiển thị cho người dùng. Để xử lý lỗi này, chúng ta cần kiểm tra lại cấu hình kết nối database, thông thường được thiết lập trong file wp-config.php.

Câu 8: Permalink là gì?

Liên kết tĩnh Permalink là đường dẫn (URL) của một trang web, bài viết, chuyên mục mà không thay đổi trong suốt quá trình xây dựng website. Các dạng permalink gồm có:

  • Mặc định: sử dụng id mặc định
  • Ngày và tên bài viết: đường dẫn chứa ngày tháng và tên bài viết
  • Tháng và tên bài viết: đường dẫn chứa tháng năm và tên bài viết (không có ngày)
  • Chuỗi mã bài viết: hiển thị id bài viết
  • Tiêu đề bài viết: chỉ hiển thị tên bài viết trên đường dẫn
  • Tùy biến: tùy chỉnh URL theo ý người dùng

Câu 9: Làm sao để kiểm tra website được tạo bằng WordPress

Có một vài cách để kiểm tra xem website bất kỳ có phải được tạo ra bằng WordPress hay không như sau:

  • Có chứa credit WordPress trên trang: thông thường source code mặc định của WordPress hoặc các dịch vụ tạo website bằng WordPress miễn phí sẽ vẫn còn chứa các dòng credit powered by WordPress.
  • Kiểm tra đường dẫn /wp-admin: đây là đường dẫn mặc định để truy cập vào trang admin (quản trị) của WordPress.
  • Kiểm tra mã nguồn trang: trong mã nguồn website tạo bằng WordPress sẽ luôn chứa các đường dẫn có chứa những từ khóa wp như wp-includes, wp-content, wp-ver,….
  • Các dịch vụ kiểm tra: Ngoài những cách trên thì chúng ta cũng có thể kiểm tra bằng một số website như Is It WordPress hay Built With để xem website có được tạo bằng WordPress hay không.

Câu 10: Một số plugins thường dùng dành cho WordPress

Thông thường các plugins sẽ hỗ trợ cho website của bạn những yếu tố liên quan đến tính bảo mật, khả năng tăng tốc website, khả năng backup sao lưu dữ liệu hoặc giúp website SEO tốt hơn. Dưới đây là một vài plugins được đánh giá cao mà lập trình viên WordPress thường sử dụng:

  • WooCommerce: plugins hỗ trợ việc bán hàng, biến website của bạn thành các trang bán hàng trực tuyến hay thương mại điện tử. Đây được xem là nền tảng phổ biến nhất hiện nay trên WordPress.
  • CloudFlare: sử dụng CDN để phân phối các file, hình ảnh một cách nhanh chóng giúp website của bạn trở nên nhanh hơn.
  • WP Rocket: một cache plugin giúp bạn giảm tải trên server, chức năng preload giúp người truy cập load website nhanh hơn.
  • iThemes Security: plugins hỗ trợ bảo mật tốt nhất hiện nay.
  • Yoast SEO: giúp tối ưu SEO đơn giản mà hiệu quả.

Kết bài

Trên đây là top 10 câu hỏi dành cho vị trí lập trình viên WordPress mà bạn sẽ thường xuyên gặp phải trong buổi phỏng vấn của mình. Hy vọng bài viết hữu ích dành cho những bạn chuẩn bị tìm kiếm một công việc mới; hẹn gặp lại các bạn trong các bài viết tiếp theo của mình.

Tác giả: Phạm Minh Khoa

Xem thêm Việc làm Developer hấp dẫn trên TopDev

Web Security – Dữ liệu người dùng được an toàn (Phần 1)

Web Security - Dữ liệu người dùng được an toàn

Bài viết được sự cho phép của tác giả Lê Nhật Thanh

Có một câu nói cực kì nổi tiếng trong thế giới hacker. “Không có một hệ thống nào là an toàn tuyệt đối”. Website của bạn cũng vậy, là một hệ thống thì luôn luôn có lỗ hổng bảo mật. Trong series web security này, bạn sẽ được học về những thứ cơ bản nhất trong thế giới security.

Vì lý do đó, một lập trình viên phải biết những kĩ thuật đơn giản để bảo mật cho một website. Trong bài viết này, bạn sẽ học cách để giữ cho người dùng, nội dung, và mọi thứ trên website bạn được an toàn và bảo mật.

#1 Giới thiệu về Security hay Web Security

Trước khi bắt đầu bài, mình muốn hỏi bạn một câu hỏi. Khi nhắc tới chữ “security”, bạn sẽ tưởng tượng gì trong đầu?

Hackers? Tấn công? Phòng thủ? Một hacker trong một phòng tối và đang mặc một chiếc áo khoác đen? Có phải bạn đang suy nghĩ về các bối cảnh trên?

Lý do là bạn cũng thường nghe thấy những thông tin như. “Một mạng xã hội lớn đã bị lộ thông tin người dùng”. “Một hacker đã tấn công và lấy đi hàng triệu thẻ tín dụng của một website mua sắm”.

Nhưng thực tế, security (ở đây là web security) một cách đơn giản có thể hiểu là bảo mật bảo mật tài nguyên dữ liệu và dự án trước, trong, và sau quá trình phát triển sản phẩm (ở đây là web development).

Ví dụ như bảo mật dữ liệu người dùng database, bảo mật source code. Bảo mật resource trong khi làm việc giữa các team, hay trong và ngoài công ty, bảo mật tài liệu, dụng cụ, phần cứng. Hay ai có thể xem và tham gia và dự án phần mềm, và ai thì không được. Các quy định bảo mật đối với từng dự án nhất định.

Còn đối với từng user trong hệ thống, họ được cấp những quyền hạn gì. Hay cách ngăn chặn việc “leo thang đặc quyền” (privilege escalation) của các users, …. Chúng ta có thể gọi chung là “user experience” hay “accessibility”.

Web securityWeb security

Trong phần hướng dẫn tiếp theo, bạn sẽ được học về các khái niệm và kĩ thuật cơ bản trong security dành cho một lập trình viên.

  Bảo mật ứng dụng Java web bởi Spring Security

  Security Considerations khi Designing Web Applications

#2 Lỗ hỏng bảo mật là gì?

Trong lĩnh vực phát triển phần mềm (software development), khi một ứng dụng hay một chức năng nào đó chạy không đúng với yêu cầu (requirement), bạn sẽ gọi đó là một “bug”. Một bug về security (security bug) được định nghĩa là một lỗ hỏng bảo mật hay một điểm dễ bị tổn thương (vulnerability).

Trong quá trình phát triển phần mềm, bạn – một lập trình viên luôn luôn tạo ra bug, hãy ghi nhớ điều này, dù ít hay nhiều. Thậm chí bạn sẽ luôn lặp lại những bug bạn đã tạo ra trong quá khứ.

Cho nên, để trở thành một lập trình viên giỏi và tốt, bạn phải rút kinh nghiệm của mình qua những lần học hỏi từ các sai lầm để dần dần giảm thiểu số bug ít nhất có thể.

Sau đây là một số kĩ thuật cơ bản nhất để giảm thiểu số bug mà bạn có thể tạo ra:

  • Luôn luôn kiểm tra các giá trị người dùng nhập vào (not null, not empty string, kiểm tra số lượng dữ liệu). Kĩ thuật này còn gọi là validation.
  • Đảm bảo rằng một người dùng không được có quá nhiều thời gian với hệ thống của bạn. Ví dụ số lần đăng nhập sai cho phép, thời gian tồn tại trong một session.
  • Luôn xây dựng unit test cho source code của bạn. Bạn có thể tham khảo kĩ thuật test TDD.

Tham khảo việc làm Web Developer hấp dẫn trên TopDev

#3 Tính năng bảo mật (Security Feature) là gì?

Các tuyến phòng thủ đầu tiên của bạn chính là các tính năng bảo mật ví dụ như sử dụng HTTPS và CORS (bạn có thể tìm hiểu trên internet về HTTPS và CORS trước, và đừng lo lắng, bạn sẽ được học trong những bài sau).

Ví dụ, việc mã hóa dữ liệu của bạn sử dụng HTTPS có thể sẽ không fix được bug của bạn, nhưng việc này đảm bảo an toàn cho việc truyền nhận dữ liệu giữa các bên, tránh được các cuộc tấn công cơ bản như nghe lén, sniffer, MITM (Man in the middle).

#4 Sự ảnh hưởng của các lỗ hổng bảo mật

Khi sản phẩm của bạn không được bảo mật một an toàn, một số vấn đề sau có thể gây ra:

Ảnh hưởng tới người dùng Những thông tin nhạy cảm, dữ liệu cá nhân người dùng có thể bị lộ ra ngoài.
Ảnh hưởng đến sản phẩm Người dùng sẽ cảm thấy không tin tưởng vào sản phẩm của bạn, từ đó việc kinh doanh sản phẩm sẽ không thuận lợi nữa.
Ảnh hưởng đến hệ thống khác Khi hệ thống của bạn bị chiếm tấn công. Hacker có thể dùng hệ thống của bạn để tấn công các hệ thống khác. Ví dụ như tấn công DDOS sử dụng botnet.

Việc đảm bảo an toàn và bảo mật cho hệ thống ứng dụng của bạn còn đảm bảo sự an toàn cho người dùng và các hệ thống khác liên quan. Cho nên vấn đề an toàn bảo mật luôn được đặt lên hàng đầu trong quá trình phát triển phần mềm.

Như vậy bạn đã có một số khái niệm tổng quan và có cái nhìn dễ chịu hơn về web security. Phần tiếp theo chúng ta sẽ cùng nhau tìm hiểu về khái niệm về các loại tấn công cơ bản.

Bạn có biết tấn công (attack) là gì? Khi sản phẩm của bạn có những lổ hỏng, các hacker khai thác các lổ hổng đó và gây ra các thiệt hại cho sản phẩm của bạn, thì đó được gọi là tấn công. Trong thế giới của security, có 2 loại tấn công: Active attack và passive attack.

#5 Active Attack

Ở các cuộc tấn công này, attacker sẽ cố gắng xâm nhập hệ thống của bạn một cách trực tiếp. Ví dụ cố gắng truy cập vào những dữ liệu nhạy cảm của bạn, hoặc các cuộc tấn công từ chối dịch vụ DDOS.

Có một loại tấn công khác có tên gọi là phishing, đây cũng là một active attack. Lúc này, attacker sẽ cố gắng sửa đổi thông tin trên website bạn đang truy cập. Hoặc cố gắng điều hướng bạn đến một website khác nhằm chiếm đoạt thông tin của bạn.

Bối cảnh một cuộc tấn công phishingBối cảnh một cuộc tấn công phishing

#6 Passive Attack

Các attacker sẽ cố gắng thu thập thông tin cần thiết và không làm ảnh hưởng gì hệ thống sản phẩm của bạn. Thì đây được gọi là passive attack. Kẻ tấn công luôn tìm cách thu thập thông tin một cách âm thầm nhất. Khi đã có đầy đủ thông tin cần thiết. Họ có thể sẽ có một cuộc tấn công active attack hoặc một hành động nào đó.

Bối cảnh của một passive attackBối cảnh của một passive attack

Trong bên trên, bạn là người đang truy cập internet, kẻ tấn công sẽ đứng ở giữa. Và cố gắng nghe lén các cuộc giao tiếp của bạn với các máy chủ khác. Nhằm mục đích đánh cắp các thông tin cá nhân nhạy cảm như password, profile, history, … Kĩ thuật này còn được gọi là sniffer.

Trên đây mình đã giới thiệu cho bạn 2 loại tấn công và một số ví dụ về các cuộc tấn công trong thực tế. Ở phần tiếp theo, bạn sẽ biết cách làm thế nào để ngăn chặn các cuộc tấn công này. Để bảo vệ dữ liệu, thông tin của mình.

#7 Làm sao để phòng chống các cuộc tấn công

Attacker là những người luôn có thể phá hoại hệ thống, website của bạn. Hay đánh cắp dữ liệu, chèn mã độc hay làm bất cứ điều gì gây hại cho bạn. Vì vậy, bạn cần biết một số kĩ thuật, cơ chế để phòng chống và bảo về khỏi các cuộc tấn công.

Như mình đã nói ở đầu bài, không có một hệ thống nào là an toàn tuyệt đối. Một số kĩ thuật cơ bản đã được trình bày ở đầu bài. Như là luôn kiểm tra input nếu website của bạn có form input. Luôn sử dụng giao thức HTTPS để bảo mật cho dữ liệu truyền đi. Và còn rất nhiều kĩ thuật cụ thể khác mà bạn sẽ được tiếp cận sau này.

#Kết

Bạn chính là người bảo vệ cho tài sản, sản phẩm, website, thông tin của bạn. Để làm được điều đó, bạn cần tích luỹ kiến thức về security (web security) nhiều hơn. Vì điều này dường như bắt buộc đối với lập trình viên.

Bài viết gốc được đăng tải tại lenhatthanh.com

Xem thêm:

Xem thêm IT Jobs hấp dẫn trên TopDev

Flask python là gì? – Những điều cần biết

Flask python là gì? - Những điều cần biết

Flask Python WTF, xin lỗi anh em nhưng không có gì là bậy bạ ở đây nha. FlaskWTF mà F ở đây là Forms. Ông này là một plugin hỗ trợ integration giữa Flask và WTForms. Ông WTForms lại là form validation và form render viết bằng Python.

Ối dồi sao cái tên nhạy cảm thế.

Flask PythonBậy nào bậy nào

À mà giật tít vậy thôi chứ bài viết này tập trung nhấn nhá, nhấn tới nhấn lui và giải thích về Flask Python nha.

1. Flask Python là gì?

Flask Python là web framework (giúp anh em xây dựng và phát triển web application). Framework thì anh em biết rồi, thay vì phải dựng trăm thứ bằng tay thì framework sẽ xử giúp anh em. Cứ xài là có, cứ cần là dùng.

Flask Python giúp phát triển web nhanh hơn, dễ dàng hơn. Nói chung chung vậy chứ cũng phải tổng kết lại một vài ý ha.

  • Đầu tiên Flask xây dựng trên ngôn ngữ Python
  • Flask xây dựng một phần core nhỏ gọn, dễ dàng mở rộng gọi là microframework
  • Microframework này của Flask tất nhiên không bao gồm trong đó phần ORM (Object Relational Manager). Core chỉ là core và nó chứa những thứ cơ bản nhất.
  • Flask có nhiều thứ hay ho như url routing, template engine (kỹ hơn sẽ nói ở phần sau nha anh em).

Flask Python

Xin mạn phép đá qua tí về microframework. Sợ là sợ đôi khi đọc microframework anh em lại tò mò. Mà tò mò lại không nói ra thì cũng dở. Nên thôi cứ viết ra đây cho anh em.

  Python là gì? Tổng hợp kiến thức cho người mới bắt đầu

2. Microframework

Anh em cứ tách keywork ra thành micro (nhỏ) và framework. Hai thứ này làm rõ ra được concept của từ khoá. Microframework ở đây là phần core (phần lõi của cả framework). Flask Python xây dựng phần lõi này với 2 tiêu chí

  • Thứ nhất là nhỏ (micro), đúng như tên gọi.
  • Thứ hai là nó dễ dàng mở rộng (scalable)

Ngoài ra microframework tuy nhỏ nhưng dễ dàng để mở rộng và kết nối bởi các extension. Anh cũng có thể dễ dàng kế thừa phần core này để phát triển tiếp.

Về ưu điểm thì microframework có bộ khung nhẹ, vì càng nhỏ càng tốt mà. Thứ hai là ít phải cập nhật, vì phần core nhỏ gọn nên ít phải cập nhật. Có thể đứng độc lập.

Về nhược điểm thì do phần core quá nhỏ gọn nên nó không hỗ trợ được anh em quá nhiều. Nếu cần gì thêm anh em sẽ phải nhờ cậy tới plugin.

Tham khảo Job HOT Python Developer Hồ Chí Minh hấp dẫn trên TopDev

2.1 Sự phụ thuộc

Nói là độc lập nhưng Flask Python vẫn có phụ thuộc vào 2 plugins là:

  • Werkzeug là WSGI utility library
  • jinja2 là template engine

Dành cho anh em nào chưa biết thì WSGI về cơ bản là một giao thức giúp web application python có thể dễ dàng giao tiếp với server.

Kế tới là phần quan trọng template engine. Xin mời anh em di chuyển tới mục số 3.

  Tạo kho lưu cho các gói thư viện Python

3. Template Engines là gì?

Anh em đã từng thay đổi UI hay cập nhật style của một component nào đó trên web application của anh em chưa?

Ok, thay thì thay hoài, nhưng nếu thay ít vài chỗ thì không sao. Hoặc có chia theo concept atomics design thì cũng dễ, nhưng mà nhiều thì chắc bở hơi tai.

Flask Python dùng template engines cũng với mục đích tương tự. Templates đây được hiểu là các thành phần chung như header, footer. Những thành phần này khi anh em cần thay đổi thì chỉ cần thay đổi ở một chỗ. Không phải mất công sửa đi sửa lại ở nhiều chỗ khác nhau.

Flask Python

Templates Engines cũng là một ưu điểm của Flask so với các web framework khác. Tuy nhiên để mà nói cho đầy đủ về ưu nhược điểm của Flask thì phải viết rõ hơn.

  Biến toàn cục (global), biến cục bộ (local), biến nonlocal trong Python

4. Ưu điểm của Flask

Dưới đây là một số ưu điểm của Flask anh em có thể lướt qua, cân nhắc lúc nào chọn framework này, lúc nào chọn framework khác nha.

4.1 Scalable – Mở rộng

Chính nguyên lý và áp dụng microframework đã giúp cho Flask Python có thể dễ dàng mở rộng nếu có nhu cầu từ Web Application. Do phần core chạy độc lập và ít phụ thuộc, nên cho dù mở rộng ở mức quy mô thì web application sử dụng Flask Python vẫn đáp ứng được.

4.2 Flexible – Linh hoạt

Sự linh hoạt là tính năng cốt lõi và cũng là ưu điểm của Flask Python. Chính vì giữ cho core và các thành phần khác đơn giản nên ít bị phụ thuộc vào nhau. Sự đơn giản này giúp cho anh em có thể chuyển hướng web application theo business owner dễ dàng hơn.

Ngoài ra do ít bị phụ thuộc lẫn nhau nên một thành phần nào đó bị sập cũng khó mà kéo theo cả hệ thống bị sập. Về sự linh hoạt, Flask thường được đánh gia cao hơn Django.

Flask Python

4.3. Easy to negotiate – Dễ trao đổi

Về mặt cốt lõi thì phần core của Flask Python rất dễ hiểu với anh em developers. Phần triển khai cũng vô cùng nhanh chóng. Anh em chỉ cần tập trung viết code, viết cho chính xác cái thứ mà web application mình cần làm là được.

Ngoài ra Flask Python còn được đánh giá là framework nhẹ, về phần tài liệu thì khá đầy đủ và dễ hiểu cho anh em mới bắt đầu.

5. Nhược điểm của Flask

Nhược điểm của Flask Python cũng bắt đầu từ chính ưu điểm của nó. Do phần core được giữ cho thật sự đơn giản nên trong quá trình phát triển anh em nếu cần gì thêm sẽ phải cài riêng.

Cần gì cài nấy thì ít không sao nhưng Web Application cần nhiều thì sẽ tốn thời gian của anh em để cài cho đủ các thành phần.

Flask PythonĐôi khi không có log thôi là đủ để bị xử rồi anh em ạ

Về điểm này thì cá nhân tui thấy Flask Python không bằng được với Django, support quá chời quá đất.

6. Tham khảo về Flask Python

Cảm ơn anh em đã đọc bài – Thank you for your time – Happy coding!

Tác giả: Kiên Nguyễn

Hàng loạt việc làm IT lương cao trên TopDev đang chờ bạn, ứng tuyển ngay!

Top 5 câu hỏi phỏng vấn ASP.NET thường gặp và cách trả lời

Top 5 câu hỏi phỏng vấn ASP.NET thường gặp và cách trả lời

Quay lại với chuỗi bài phỏng vấn các ngôn ngữ lập trình, lần này là ASP.NET. Thế gian không chia thành 2 phe là .NETJava nha.

Anh em nào có dự định phỏng vấn .NET thì bài viết này đích thị là danh cho anh em rồi. Nhưng nếu anh em làm Java, làm Golang, anh em cũng có thể tham khảo. Nắm được một số điểm cơ bản của .NET cũng như kiến trúc .NET cũng tốt.

Ôi dào dễ ăn lắm anh em ơi. Dễ hơn JS, SQL này kia đấy. Cứ tự tin mà xúc thôi à.

Bắt đầu thôi anh em, điểm qua lần lượt 5 câu nha!

1. Giải thích mô hình MVC trong ASP.NET

Câu hỏi đầu tiên phỏng vấn ASP.NET tất nhiên là câu hỏi về architectural pattern. Với một số anh em đi làm đã có kinh nghiệm thì MVC không còn là gì quá xa lạ. Nhưng thôi cũng điểm qua chút định nghĩa.

MVC is a software architectural pattern that divides an application into three main parts Model, View, and Controller. MVC là mẫu kiến trúc phần mềm chia ứng dụng thành 3 phần chính là Model, View và Controller.

Cùng đi qua từng thành phần để hiểu sâu hơn.

  • Model: Model là thành phần làm việc với data và đại diện cho các thuộc tính công khai, các logic chính về business của ứng dụng. Phần này thường thiên về xử lý logic.
  • View: View thường được sử dụng để xử lý dữ liệu bảng, các đồ thị cũng như hiển thị data có được từ phía model.
  • Controller: Controller xử lý các thao tác của người dùng và kiểm soát flow hoạt động của app sao cho đúng với business đã được đề ra.

MVC là câu hỏi cơ bản, anh em chú ý nêu đúng và rõ các thành phần và chức năng của từng thành phần. Một số câu hỏi khác liên quan tới kiến trúc ASP.NET anh em có thể xem lại để củng cố kiến thức.

  • ASP.NET life cycle, các loại life cycle (Application Life Cycle, Page Life Cycle).

  Architectural Styles vs. Architectural Patterns vs. Design Patterns
  ASP.NET MVC5 #3: Thêm mới View

2. Early Binding là gì?

Sau khi hệ thống lại các kiến thức tổng quan thì câu hỏi phỏng vấn thứ hai về ASP.NET chủ yếu liên quan tới khái niệm. Lần này là Early Binding, một khái niệm chỉ có ở .NET

Early Binding is used to check the methods and properties during compilation. It is fast and easy to code and also reduces the compilation time. It also reduces the time by identifying the errors. Early Binding thường được sử dụng để kiếm tra các phương thức và thuộc tính trong lúc compile source code. Nó nhanh và dễ dàng để code, giảm thời gian compile. nó cũng giúp giảm thời gian lúc có lỗi, xác định nguyên nhân lỗi

Sau khi đã nêu ra định nghĩa anh em có thể viết luôn code ví dụ.

class Simplilearn

{

  public string name;

  public int roll no;

  public void details(string name, int roll no)

  {

    this.name = name;

    this.roll no = roll no;

    Console.WriteLine("My name is :" + name);

    Console.WriteLine("My roll no is: " + roll no);

  }

}

class Simplicode

{

  public static void main(String[] args)

  {

    Simplilearn s = new Simplilearn();

    get.details("Kumar", 20);

    s.mymethod();

  }

}

Một số câu hỏi bổ sung kiến thức phần này anh em có thể hệ thống lại bao gồm:

  • Caching trong ASP.NET
  • Late Binding là gì? (Early rồi thì Late là hợp lý ha)
  • MultiView trong ASP.NET

Câu hỏi thứ hai trong bộ câu hỏi phỏng vấn ASP.NET liên quan tới các khái niệm. Anh em nếu có thời gian cố gắng đọc lại nha.

Tham khảo việc làm ASP.NET MVC hấp dẫn trên TopDev

3. ASP.NET có bao nhiêu kiểu Authentication

Câu hỏi số 3 trong bộ câu hỏi phỏng vấn ASP.NET liên quan tới Authentication. Cái này để nhớ được đòi hỏi anh em có kinh nghiệm làm thực tế.

Ngoài nêu ra các khái niệm authen, còn phải nêu được ưu nhược điểm từng loại. Lúc nào thì nên dùng cái nào. 4 loại authentication trong ASP.NET ở đây là:

  • Form Authentication
  • Windows Authentication
  • Custom Authentication
  • Passport Authentication

Trong .NET, việc xác thực thường sẽ thông qua authentication providers. Cái hay của authentication với các phương thức sẵn có chỉ cần thực hiện thông qua file config.

// Web.config file     
<authentication mode= "[Windows|Forms|Passport|None]"/>

Chi tiết thêm về Passport Authentication anh em có thể tham khảo video dưới đây.

https://www.youtube.com/watch?v=R1w4ITJJUog

4. Giải thích về concept middleware trong ASP.NET

Trong kiến trúc của ASP.NET core, middleware là các lớp C# xử lý các yêu cầu http request khi nó được gửi tới client và xử lý một http response khi nó đang trên đường trả kết quả lại cho phía client.

Phỏng vấn ASP

Middleware đóng vai trò là bên nhận request tới, có thể can thiệp để thay đổi request tới. Sau đó gửi qua phần còn lại của middleware. Ví dụ như hình trên sẽ là logging. Việc này nêu bật lên concept của middleware.

  • Thứ nhất là chỗ tập trung để xử lý request, response
  • Thứ hai là middle không chỉ handle một việc, có thể custom và đẩy nhiều hơn các xử lý vào trong middleware.

Phần này anh em có thể tham khảo thêm một số câu hỏi khác:

  • Cookie trong ASP.NET?
  • Dependency injection hoạt động như thế nào trong ASP.NET
  • Sự khác biệt giữa IIS và Kestrel

Câu hỏi này được đánh giá là câu hỏi phỏng vấn ở mức experienced (có kinh nghiệm tốt).

Xem ngay tin tuyển dụng .NET tại các doanh nghiệp hàng đầu trên TopDev

5. Sự khác biệt giữa .NET Core và ASP.NET Core

Câu hỏi cuối cùng trong phần 1 về phỏng vấn ASP.NET là sự khác biệt giữa ASP.NET và NET core.

Trả lời câu hỏi này cũng không quá khó .NET core thì chỉ tập trung vào những gì core nhất là core. Còn ASP thì có thêm những library cần thiết.

  • .NET Core là runtime. Nó có thể thực thi các ứng dụng được xây dựng cho nó.
  • ASP.NET Core là tập hợp các thư viện tạo thành Framework để xây dựng ứng dụng web. Các thư viện ASP.NET Core có thể được sử dụng trên cả .NET Core và “Full .NET Framework”.


Phần này chú trọng tới sự khác biệt giữa ASP.NET với không chỉ là .NET core mà các framework khác. Anh em có thể tham khảo thêm một số câu hỏi:

  • ASP.NET có gì khác so với các framework khác?
  • Điểm mạnh, điểm yếu của ASP.NET
  • Lựa chọn giữa ASP.NET 4.x ASP.NET Core
  • Các loại cookies trong ASP.NET

6. Tham khảo thêm về phỏng vấn ASP.NET

Hẹn gặp lại anh em ở phần 2 – Thank you for your time to read – Happy Coding!

Tác giả: Kiên Nguyễn

Xem thêm:

Xem thêm tuyển dụng nhân viên IT hấp dẫn trên TopDev

Top 10 vị trí tuyển dụng IT hấp dẫn 2024

tuyển dụng IT
tuyển dụng IT

Viêc làm ngành IT đang nhận được sự quan tâm lớn. Với thị trường tuyển dụng cạnh tranh như hiện tại, các ứng viên tiềm năng có nhiều sự lựa chọn hơn trong việc chọn lọc và apply các job. Bài viết sau đây, TopDev sẽ chia sẻ với các bạn về 10 vị trí tuyển dụng IT hấp dẫn năm 2023.

tuyển dụng IT

Các vị trí tuyển dụng IT phổ biến

1. Lập trình Mobile (Web/ ứng dụng)                   

Thiết bị di động đang ngày càng trở nên phổ biến, nhu cầu sử dụng Mobile App ngày càng cao. Từ đó mở ra nhiều cơ hội vệc làm cho các Lập trình viên/ Kỹ sư công nghệ mảng Di động. Cùng xem qua vài vị trí tuyển dụng Mobile tại TopDev nhé!

Xem thêm việc làm Mobile từ level Fresher trên TopDev

2. Lập trình Back-end         

Theo số liệu từ IT Market report 2022 – Tech Hiring do TopDev phát hành, Back-end Developer là việc làm IT được tuyển dụng nhiều nhất, đồng thời cũng là hướng công việc được nhiều Lập trình viên lựa chọn theo đuổi.

Tổng hợp các việc làm Back-end đang tuyển trên TopDev

3. Lập trình Full-stack 

Lập trình Full-stack cũng là một trong số các vị trí tuyển dụng IT phổ biến nhất. Các doanh nghiệp có xu hướng tập trung hơn vào vị trí này, đồng thời đây cũng là công việc được nhiều Lập trình viên lựa chọn (Theo Báo cáo thị trường IT Việt Nam – Tech Hiring 2022 do TopDev phát hành).

Việc nắm bắt các Job việc làm đối với tuyển dụng cho ngành IT có một ý nghĩa quan trọng. Chẳng hạn như bạn biết apply vị trí FULLSTACK DEVELOPER, bạn cần tự đánh giá lại các kỹ năng để nỗ lực rèn luyện. Hoặc ít nhất là biết cách chọn lọc các năng lực phù hợp để CV IT DEVELOPER của mình ghi dấu ấn với nhà tuyển dụng.

Đồng thời, viết CV giúp bạn định hình và có những trải nghiệm tốt hơn. Trường hợp bạn ứng tuyển các vị trí khác như freelancer it hay Senior Developer đều sẽ đạt hiệu quả ứng tuyển cao hơn.

Các vị trí thuộc nền tảng tuyển dụng IT TopDev với đa dạng các vị trí mà bạn có thể quan tâm. Từ Fresher, Junior, Senior Developer đến các vị trí cấp cao thuộc các công ty IT hàng đầu chắc chắn sẽ là nguồn tài nguyên tuyển dụng giá trị dành cho dân lập trình.

4. Lập trình Front-end       

Lập trình Front-end đứng vị trí thứ 3 theo bảng xếp hạng các vị trí việc làm IT phổ biến nhất so với nhu cầu cao nhất theo Báo cáo thị trường IT Việt Nam – Tech Hiring 2022.

Mức lương của vị trí này với kinh nghiệm thực chiến dưới 3 năm nằm ở khoảng $951.

Tham khảo các vị trí việc làm IT HCM trên TopDev

5. Phát triển phần mềm

Phát triển phần mềm vẫn luôn là một trong những vị trí được tuyển dụng nhiều tại các doanh nghiệp,… Sau đây là một số công việc hấp dẫn liên quan đến xây dựng và phát triển phần mềm:

[Full remote/Web]Front-end Lead Software Engineer (Angular/ReactJS/VueJS)

REERACOEN VIETNAM Co.,Ltd. – Offer lên đến 80 triệu VND

Software Engineer (NodeJS) – NGÂN HÀNG Á CHÂU (ACB) – Offer Từ $1,000

Software Developer (Java) – Laudert Vietnam – Offer từ $1,000 đến $1,800

Xem thêm các việc làm Software Developer Hồ Chí Minh tại đây

Các công việc IT theo xu hướng phát triển 

tuyển dụng it hcm

6. Việc làm Data

Data Science, Data Engineer, Data Analytics, Big Data, phát triển AI/ Machine Learning/ IoT là các vị trí bạn có thể lựa chọn khi bản thân đam mê những con số hay định hướng  phát triển sự nghiệp theo mảng này.

7. DevOps

DevOps Engineer được đánh giá là một trong những vị trí tuyển dụng nhiều nhất trong những năm gần đây. DevOps Engineer là người giám sát các quy trình coding, scripting và phát triển. Họ cũng phụ trách nhóm phát triển phần mềm tham gia vào các hoạt động triển khai và mạng.
Một số kỹ năng DevOps Engineer bao gồm: Ngôn ngữ lập trình, chẳng hạn như Python và R, coding & scripting, nắm bắt tốt các công cụ như Git và Jenkins, làm chủ trong Linux hoặc UNIX System, kỹ năng giao tiếp và giao tiếp tốt, hiểu biết sâu sắc về các best practice của DevOps (Trích: Báo cáo thị trường IT Việt Nam – Tech Hiring 2022 do TopDev phát hành)

8. Cloud Architect

Cloud Architect tạo ra cấu trúc & chiến lược trên Cloudd. Họ cũng phối hợp, thực hiện và triển khai các dịch vụ đám mây. Cloud Architect đảm bảo kiến trúc ứng dụng chính xác và thực hiện trên các nền tảng Cloud.
Một số kỹ năng của Cloud Architect bao gồm: các ngôn ngữ lập trình như Python, Ruby, Nguyên tắc cơ bản lưu trữ dữ liệu, Route 53 (DNS), CloudFront (CDN) và Virtual Private Cloud (VPC), các khuôn mẫu và công nghệ cụ thể của Cloud.

(Trích: Báo cáo thị trường IT Việt Nam – Tech Hiring 2022 do TopDev phát hành)

Tuyển dụng ngành IT đang diễn ra sôi nổi và chưa bao giờ hạ nhiệt. Các ứng viên ngành lập trình ngoài tìm kiếm các việc làm thích hợp với bản thân, họ cần quan tâm đến nhiều khía cạnh hơn. Chuẩn bị CV Template IT như thế nảo? Đâu là một Cover Letter cho Dev thu hút nhà tuyển dụng cho các vị trí đòi hỏi nhiều năm kinh nghiệm như Senior Developer,… Mọi ứng viên cần chuẩn bị sẵn sàng trước mọi thách thức từ cuộc chơi tuyển mảng IT.

Xem thêm các việc làm Cloud tại đây.

9. Blockchain Developer   

Blockchain Developer phát triển và thực hiện kiến trúc và giải pháp dựa trên blockchain. Một Blockchain Developer nên có khả năng lập trình mạnh và hiểu biết đầy đủ về các công nghệ, chẳng hạn như điện toán đám mây, security protocol stacks, crypto libraries, functions và quy trình đồng thuận.
Một số kỹ năng của Blockchain Developer bao gồm: các ngôn ngữ lập trình như C ++,
Java, Python, JavaScript và C#, làm việc với các cơ sở mã, kiến thức tốt về thuật
toán và cấu trúc dữ liệu.

(Trích: Báo cáo thị trường IT Việt Nam – Tech Hiring 2022 do TopDev phát hành)

Xem thêm các việc làm Blockchain tại đây.

10. AI / Machine Learning / Deep Learning

Sự phát triển mạnh mẽ của Trí tuệ nhân tạo trong giai đoạn gần đây đã gay được sự chú ý của các doanh nghiệp. Chat GPT, Bing AI, Bard,.. là những cái tên được nhắc đến. Theo xu hướng, các vị trí này ngày càng được quan tâm và tuyển dụng.

Xem thêm các vị trí về AI, Machine Learning trên TopDev

Lời kết

Phía trên là top 10 vị trí tuyển dụng IT hấp dẫn được TopDev cập nhật. Để biết thêm nhiều job IT hơn, bạn có thể truy cập tại đây. TopDev hi vọng với những thông tin kể trên, các ứng viên sẽ sớm tìm được cho mình một ví trí thật sự phù hợp với bản thân. Đừng quên sự đầu tư về kỹ năng và các trải nghiệm thực tế. Chúc các bạn thành công!


Tuyển Dụng Nhân Tài IT Cùng TopDev
Đăng ký nhận ưu đãi & tư vấn về các giải pháp Tuyển dụng IT & Xây dựng Thương hiệu tuyển dụng ngay!
Hotline: 028.6273.3496 – Email: contact@topdev.vn
Dịch vụ: https://topdev.vn/page/products

Phân biệt giữa Java ME, Java SE và Java EE

Phân biệt giữa Java ME, Java SE và Java EE

Bài viết được sự cho phép của tác giả Trần Hữu Cương

Java ME/SE/EE là ba phiên bản khác nhau được xây dựng dựa trên nền tảng Java.

Phân biệt giữa Java ME, Java SE và Java EE

Java SE(Java Platform, Standard Edition)

Java SE còn được gọi là Java Core, đây là phiên bản chuẩn và cơ bản của Java, được dùng làm nền tảng cho các phiên bản khác.

  • Chứa các API chung (như java.lang, java.util...) và nhiều các API đặc biệt khác.
  • Bao gồm tất cả các tính năng, đặc trưng cơ bản của ngôn ngữ Java như biến, kiểu dữ liệu nguyên thủy, Arrays, Streams, Strings, Java Database Connectivity (JDBC)…
  • Tính năng nổi tiếng nhất của Java là JVM cũng chỉ được xây dựng cho phiên bản này.
  • Java SE được sử dụng với mục đích chính là để để tạo các ứng dụng cho môi trường Desktop.

  Top 10 câu hỏi phỏng vấn Java Developer thường gặp

  Internationalization và Localization trong Java

Java ME(Java Platform, Micro Edition)

Java ME – Đây là phiên bản được sử dụng cho việc tạo các ứng dụng chạy trên các hệ thống nhúng như thiết bị mobile và các thiết bị nhỏ.

  • Các thiết bị sử dụng Java ME thường có các hạn chế như giới hạn về khả năng xử lý, giới hạn về nguồn điện (pin), màn hình hiển thị nhỏ…
  • Java ME còn hỗ trợ trong việc sử dụng công nghệ nén web, giúp giảm dụng lượng sử dụng (network usage) và cải thiện khả năng truy cập internet giá rẻ.
  • Java ME sử dụng nhiều thư viện và API của Java SE và nhiều thư viện, API của riêng nó.

Tham khảo việc làm Fresher Java mới nhất trên TopDev

Java EE(Java Platform, Enterprise Edition)

Java EE là phiên bản Enterprise của Java, được sử dụng để phát triển  các ứng dụng web.

  • Java EE chứa các Enterprise APIs như JMS, EJB, JSPs/Servlets, JNDI
  • Java EE sử dụng nhiều thành phần của Java SE và có thêm nhiều tính năng của riêng nó như Servlet, JavaBeans…
  • Java EE sử dụng HTML, CSS, JavaScript… để tạo trang web và web service.
  • Nhiều ngôn ngữ khác cũng được dùng để phát triển ứng dụng web giống như Java EE (.Net, PHP..) nhưng Java EE được sử dụng nhiều bởi tính năng hoạt, khả năng bảo mật, khả chuyển…

Bài viết gốc được đăng tải tại stackjava.com

Có thể bạn quan tâm:

Đừng bỏ lỡ việc làm IT mọi cấp độ tại TopDev

Tại sao Web Developer nên học về Digital Marketing?

Tại sao Web Developer nên học về Digital Marketing?

Bài viết được sự cho phép của tác giả Lê Nhật Thanh

Có phải bạn đang cảm thấy hiếu kì về bài viết này? Vì digital marketing thì liên quan gì tới sự nghiệp làm dev của bạn? Trong bài viết này, bạn sẽ có câu trả lời.

Đối với các lập trình viên, đa số trong các bạn quan tâm rất nhiều về kĩ năng mềm (non-tech skill) để hổ trợ cho công việc. Nhưng đối với một doanh nghiệp, các kĩ năng mềm không giúp họ nhiều bằng kĩ năng digital marketing.

Chia sẻ thêm, ngoài marketing, Tiếng Anh cũng là một kĩ năng cực kì cực kì quan trong. Không chỉ đối với developer mà còn tất cả mọi người. Khi bạn biết một trong hai kĩ năng này. Bạn sẽ không phải lo thất nghiệp trong thế giới phẳng 4.0 ngày nay.

#1 Kỹ năng coding thì liên quan gì tới Digital Marketing?

Một câu trả lời ngắn gọn: Không! Đúng vậy, coding chẳng liên quan gì tới digital marketing.

Nhưng nếu bạn là một developer biết digital marketing, và bạn biết cách phối hợp chúng lại với nhau. Bạn sẽ có được được một trong những kĩ năng có ích nhất cho sự nghiệp của mình. Dù bạn là người đang có một công việc full-time hoặc kinh doanh tự do (freelancing business).

#2 Vậy, Digital Marketing là gì?

Giải thích một cách ngắn gọn, digital marketing là việc quảng bá, marketing cho các sản phẩm, dịch vụ sử dụng các thiết bị điện tử hiện đại (điện thoại, laptop,…). Và hình thức phổ biến nhất và có lẽ bạn cũng quen thuộc nhất của digital marketing là online marketing.

Online marketing hiện hữu mọi lúc mọi nơi trong cuộc sống của bạn ở thời điểm hiện tại, mình chắc chắn như vậy.

Trước khi đi xa hơn, điều quan trọng là bạn cần phải hiểu chính xác những thứ có trong digital marketing. Sau đây là một danh sách rút gọn:

  •  SEO: là những quy trình tối ưu website để có được vị trí cao trong các công cụ tìm kiếm như Google, Bing.
  •  Analytics: lien quan đến việc phân tích dữ liệu ví dụ, phân tích hành vi người dùng.
  •  AdWords: đây là nền tảng hiển thị quảng cáo trả tiền trên Google hoặc các công cụ tìm kiếm khác. Bạn muốn hiển thị quảng cáo, bạn phải trả tiền cho Google chẳng hạn.
  •  Social Media: mạng xã hội hiện đang phổ biến trên toàn thế giới, việc sử dụng mạng xã hội cho marketing là một điều cực kì dễ hiểu.
  •  Email Marketing: sử dụng các nền tảng email để marketing. Bạn sẽ thường thấy những email quảng cáo sản phẩm hay dịch vụ nào đó trong hòm thư. Đó chính là email marketing.
  •  Content Marketing: mọi thứ liên quan đến những nội dung hay, nổi bật, nhằm tạo sự khác biệt và thu hút khách hàng chính là Content Marketing.
  •  Online Advertisements: bất kì quảng cáo nào liên quan tới các nền tảng và thiết bị trực tuyến đều là online Advertisements. Như quảng cáo trên TV, youtube hay để cả AdWords.
  •  Conversion Rate Optimization: Quá trình tìm hiểu những gì hoạt động và những gì không hoạt động của sản phẩm, dịch vụ để chuyển đổi khách hàng, thử nghiệm và cải thiện để đạt được kết quả tốt nhất.

Và nếu bạn có thêm về kĩ năng design, sẽ là một điểm cộng rất lớn. Cho thấy bạn là một người có đầu óc sáng tạo.

Tiếp theo sẽ đến phần rất quan trọng và cốt lõi của bài viết! Việc học digital marketing sẽ đem lại lợi ích gì cho developer?

  Machine Learning góp phần cải thiện chiến lược Digital Marketing của bạn như thế nào?

  Top 10 câu hỏi phỏng vấn Web Developer và cách trả lời hay nhất

#3 Trở thành một ứng viên hoặc một nhân viên đặc biệt

Bạn là một developer có thể tạo ra một website hoạt động đúng với requirement (đúng yêu cầu của khách hàng). Nhưng với các kĩ năng digital tuyệt vời, bạn biết cách làm thế nào để tăng traffic (lưu lượng truy cập của người dùng) website lên. Hay tối ưu hóa những dòng code để có một website tối ưu SEO tốt hơn (SEO on page). Hiểu về digital marketing để xây dựng những hệ thống hổ trợ digital marketing. Và còn rất nhiều lợi thế nữa, và đó là cách để bạn gây ấn tượng mạnh đến khách hàng và nhà tuyển dụng.

Hoặc là bạn có thể đề xuất với xếp hoặc manager về những ý tưởng, idea để cải thiện sản phẩm, website, hay dịch vụ. Và đề xuất luôn rằng bạn có thể đảm nhận những công việc về marketing.

Nếu bạn là một freelance web developer, với kĩ năng marketing, bạn có thể tiếp cận được nhiều khách hàng hơn. Kiếm về được nhiều hợp đồng, và đặc biệt bạn biết cách để có thể cung cấp thêm các dịch vụ đi kèm. Nhằm mang lại giá trị cho bạn và kiếm nhiều tiền hơn.

Ví dụ khi bạn thiết kế một website cho khách hàng, bạn có thể cung cấp thêm các dịch vụ như trình quản lý AdWords. Hay các dịch vụ về content marketing, design hoặc SEO. Hoặc bạn có thể lên kế hoặc tư vấn, coaching cho khách hàng của mình về những chiến lượt marketing mà họ cần.

It is digital marketing

Tóm gọn lại, hãy trở thành một người sáng tạo. Hiểu biết rộng hơn không chỉ là kĩ năng chính của bạn. Tăng giá trị của bạn lên, vì chính bạn là người trả lương cho bạn.

Tham khảo việc làm Web Developer hấp dẫn trên TopDev

#4 Tăng thu nhập

Như mình để cập trong phần #1, khi giá trị của bạn tăng lên. Chắc chắn lương, thu nhập của bạn cũng sẽ tăng lên dù bạn có đang làm cho một công ty hay là freelancer.

Có thể bạn chưa nhận ra, việc bạn đang làm hiện tại, chính là kinh doanh đấy!

Hãy để mình giải thích. Kinh doanh hiểu đơn giản chính là việc mua bán. Nếu bạn đang đi làm full-time, bạn đang bán sức lao động của mình. Còn nếu bạn làm tự do, bạn đang bán cả sức lao động và sản phẩm của mình. Vậy tại sao bạn không bán với giá cao hơn.

Khi bạn có hiểu biết về digital marketing, khi bạn biết xây dựng một thương hiệu cá nhận. Thì việc “kinh doanh mua bán” sẽ dễ dàng hơn đối với bạn.

Chính vì lý do đó, việc tăng giá trị bản thân là một điều cực kì quan trọng để có được thu nhập cao hơn.

#5 Xây dựng thương hiệu cá nhân

Dưới đây, mình sẽ đưa ra hai bối cảnh và bạn hãy trả lời mình câu hỏi. Bạn muốn bạn ở bối cảnh nào và thật sự là bạn đang ở bối cảnh nào?

Bối cảnh 1: Bạn đang làm freelancer, bạn luôn đi tìm khách hàng của mình mỗi tháng để nhằm tăng doanh thu. Hoặc, bạn đang gửi đơn đi xin việc khắp nơi để có một việc làm tốt hơn nếu bạn đang muốn có một công việc full-time.

Bối cảnh 2: Khách hàng luôn tìm đến bạn vì muốn có được sản phẩm của bạn. Các nhà tuyển dụng luôn muốn tuyển bạn vì năng lực của bạn.

Có phải bạn muốn mình ở trong bối cảnh 2, nhưng thật sự bạn đang ở bối cảnh 1!

Trong thực tế, bối cảnh 2 rất khỏ xảy ra, nhưng khó chứ không phải là không thể xảy ra.

Và để bối cảnh 2 có thể xảy ra trong cuộc đời bạn. Hãy phát triển một thương hiệu cá nhân cho chính bạn. Bạn có thể bắt đầu với một blog hoặc bất kì một nền tảng nào. Để chia sẻ kiến thức kinh nghiệm trong lĩnh vực, thế mạnh của bạn cho mọi người. Và dần dần theo thời gian, giá trị, thương hiệu của bạn sẽ ngày càng tăng và được nhiều người biết tới. Cho đi luôn luôn được nhận lại, hãy ghi nhớ điều này!

Và có một điều mình muốn nhấn mạnh một điều. Khi bạn chia sẻ cho người khác kiến thức của mình. Thì là lúc kiến thức của bạn được tăng thêm và củng cố vững chắc một lần nữa.

Xây dựng thương hiệu cá nhân

Hãy nhìn những developer của Việt Nam: Lê Trần Đạt (founder của daynhauhoc.com – stackoverflow của Việt Nam), Thạch Phạm (CEO tại Azdigi, founder của thachpham.com – website về lập trình, wordpress, SEO lớn nhất Việt Nam), Nguyễn Hồng Phúc (boss tại HVA online), Nguyễn Mạnh Tuấn (boss tại J2Team). Ngoài ra còn rất rất nhiều những developer khác như: Tôi đi code dạo, Kteam,… Họ là những người cực kì giỏi trong lĩnh vực chính của mình là developer. Ngoài ra họ còn có những kĩ năng về digital marketing để bạn có thể biết đến họ và nhận được những giá trị từ họ.

Ngày nay, người người nhà nhà sử dụng internet, smartphone, máy tính bảng, laptop,… Nên việc xây dựng thương hiệu cá nhân không phải là một điều gì hàn lâm, cao siêu cả. Điều quan trọng là ở chính bạn, sự kiên trì và đam mê của bạn.

# Kết

Khi bạn đã là một developer giỏi, hãy trở thành một developer tuyệt vời! Digital marketing sẽ giúp bạn làm điều đó. Không phải ai cũng muốn và làm được điều này. Nhưng khi bạn đã làm được rồi thì hãy nhìn xem những thành quả mà nó mang lại.

Bài viết gốc được đăng tải tại lenhatthanh.com

Xem thêm:

Xem thêm các việc làm Developer hấp dẫn tại TopDev

Substr trong php là gì? Ví dụ về substr

Substr trong php là gì? Ví dụ về substr

Anh em làm việc hoặc có một thời gian tìm hiểu về ngôn ngữ lập trình php chắc không còn lạ gì với các phương thức trong php, tuy nhiên với những anh em mới bắt đầu thì phương thức nào cũng có ví dụ, có người giải thích sẽ dễ hiểu hơn, bài viết này giải thích cụ thể và đem tới nhiều ví dụ về substr trong php.

substr trong php
Php còn nhiều điều hay ho lắm, anh em cứ chờ đón từ từ. =)))
Substr là phương thức trong ngỗn ngữ lập trình php. Cụ thể về cú pháp cũng như các ví dụ sử dụng như thế nào. Tất cả sẽ có trong bài viết này.

1. Substr trong php là gì?

Đầu tiên như phía trên đã có nói qua với anh em, substr là phương thức, tức là một hàm được cung cấp sẵn trong các version của ngôn ngữ php.

Chia thành 2 phần nhỏ, đầu tiên là sub, sub ở đây hiểu la một phần nhỏ của một cái gì đó lớn. Str là viết tắt của String, là chuỗi dài.

Vậy substr trong php là chuỗi con ngắn trong chuỗi con dài lấy được. Giống y chang như định nghĩa luôn nha.

The substr() function returns a part of a string.

Hàm substr trả về một phần của chuỗi.

  Hướng dẫn viết code PHP chuẩn – PSR tiêu chuẩn khi lập trình PHP

  Chuẩn coding convention trong PHP với PSR

2. Cú pháp và giải thích ví dụ

Về cú pháp thì substr trong php tương đối rõ ràng và dễ sử dụng về mặt cú pháp.

substr(string,start,length)

Giải thích các parameter cho function này như sau:

Đầu tiên là string: cái này là bắt buộc, tìm chuỗi con của một chuỗi mà không có chuỗi đầu vào thì quăng. Vậy cái này là required (bắt buộc).

Thứ hai là start: cái này cũng bắt buộc. Cái này là vị trí bắt đầu lấy của chuỗi con

Cuối cùng là length: cái này không bắt buộc. Là độ dài mong muốn của chuỗi anh em cần lấy, mặc định sẽ lấy tới cuối cùng của chuỗi.

Phương thức nào cũng có ví dụ, có người giải thích sẽ dễ hiểu hơn, bài viết này giải thích cụ thể và đem tới nhiều ví dụ về substr trong php.

Trong start thì riêng với ngôn ngữ lập trình php lại có một số điểm khác hơn như sau:

  • Số dương – Vị trí bắt đầu lấy cho chuỗi con (vị trí cố định)
  • Số âm – Ví trí cố định bắt đầu từ cuối của chuỗi
  • 0 – Bắt đầu từ chữ cái đầu tiên của chuỗi

Xem thêm các việc làm PHP lương cao trên TopDev

3. Một số lưu ý

Ngoài lưu ý về start phía trên đã có đề cập thì substr trong php còn có một số điểm lưu ý sau:

  • substr là function chỉ được hỗ trợ từ phiên bản php 4 trở lên
  • Ở phiên bản php 7.0, nếu string = start (lúc này chuỗi trả về sẽ là empty). Ở các phiên bản khác sẽ trả về FALSE.
  • Hai phiên bản này PHP 5.2.2 – 5.2.6 sẽ trả về false nếu start được điền vào là số âm.

4. Ví dụ

Sau khi đã nắm rõ cú pháp, các lưu ý về substr trong php thì giờ là lúc đi vào ví dụ cụ thể.

<?php
echo substr("Hello world",0,10)."<br>";
echo substr("Hello world",1,8)."<br>";
echo substr("Hello world",0,5)."<br>";
echo substr("Hello world",6,6)."<br>";

echo substr("Hello world",0,-1)."<br>";
echo substr("Hello world",-10,-2)."<br>";
echo substr("Hello world",0,-6)."<br>";
?>

Anh em lưu ý 3 hàm substr trong php cuối cùng sẽ có giá trị âm ở cả start và length. Lúc này giá trị sẽ cắt từ phía cuối chuỗi đi lên. Kết quả in ra màn hình lần lượt cho 3 hàm đó như sau.

Hello worl (bỏ đi chữ cuối cùng) 
ello wor
Hello (bỏ đi 6 kí tự sau)

5. Tham khảo thêm substr trong php

Cảm ơn anh em đã đọc bài – Thank you for your time – Happy coding!

Tác giả: Kiên Nguyễn 

Có thể bạn quan tâm:

Bộ câu hỏi phỏng vấn Embedded Developer chinh phục nhà tuyển dụng

Bộ câu hỏi phỏng vấn Embedded Developer & cách trả lời hay nhất

Embedded hay Embedded System được gọi là hệ thống nhúng, là một hệ thống có khả năng tự trị được nhúng vào một môi trường hay hệ thống mẹ. Đó chứa cả phần cứng và phần mềm nhằm phục vụ cho các bài toán chuyên dụng trong nhiều lĩnh vực đặc biệt là công nghiệp tự động hóa. Với sự phát triển của AI, IoT và cuộc cách mạng công nghiệp 4.0 hiện nay; lập trình viên nhúng đang là vị trí được nhiều công ty săn đón. Hôm nay chúng ta cùng nhau tìm hiểu top 10 câu hỏi phỏng vấn cho vị trí Embedded Developer thường gặp nhất nhé. 

Câu 1: Nêu những thành phần cơ bản của hệ thống nhúng

Một hệ thống nhúng thông thường gồm những thành phần cơ bản là:

  • ROM: Nơi chứa chương trình và dữ liệu cố định dùng để nạp và sử dụng khi chạy chương trình
  • RAM: Chứa chương trình thực thi và các biến tạm
  • MCU: Bộ xử lý tính toán trung tâm
  • Các bộ phận khác: gồm các thiết bị ngoại vi như ADC, DAC hay các khối giao tiếp như UART, I2C,…

Embedded System

Câu 2: Liệt kê một số hệ thống nhúng trong các lĩnh vực thực tế

  • Hệ thống định vị vệ tinh, tên lửa, dẫn đường,…
  • Hệ thống viễn thông, di động
  • Thiết bị kết nối mạng như Gateway, Router,…
  • Thiết bị y tế như máy chụp X-quang, máy điều hòa nhịp tim,…
  • Thiết bị điện tử dân dụng như Tivi, tủ lạnh, điều hòa,…
  • Ngành sản xuất ô tô, chế tạo robot, các dây chuyền sản xuất công nghiệp,…

Hệ thống nhúng hiện nay có mặt gần như ở tất cả các lĩnh vực từ trong cuộc sống hàng ngày đến sản xuất công nghiệp và kỹ thuật cao.

  Embedded Developer là gì? Cần học gì để trở thành Embedded Developer

  Cơ bản về Embedded và ứng dụng

Câu 3: So sánh công việc của Embedded hardware và Embedded software 

Embedded hardware là những công việc liên quan đến phần cứng như thiết kế board mạch, thiết kế PCB, test board mạch. Những công việc này cần đòi hỏi kiến thức chuyên môn liên quan đến mạch, điện tử cũng như phần cứng của hệ thống, thiết bị,… Ngược lại với Embedded software là những công việc liên quan đến phần mềm, là những lập trình viên thực hiện việc xây dựng và phát triển phần mềm cho các sản phẩm nhúng như driver, hệ điều hành, firmware, phần mềm ứng dụng, …

Một dự án phát triển hệ thống nhúng luôn đòi hỏi sự hợp tác chặt chẽ của 2 phần hardware và software; vì thế các lập trình viên trong ngành này thường cũng có kinh nghiệm về phần cứng nhất định.

Tuyển dụng kỹ sư lập trình nhúng đãi ngộ hấp dẫn tại đây!

Câu 4: Ngôn ngữ nào được sử dụng phổ biến nhất trong lập trình nhúng

C và C++

Trong lập trình nhúng, C và C++ vẫn là những ngôn ngữ phổ biến và được hỗ trợ rộng rãi nhất. C hay C++ là những ngôn ngữ gần với phần cứng, giúp tối ưu phần mềm, không đòi hỏi nhiều thư viện, vì thế giúp chương trình nhẹ nhàng và phù hợp với các hệ thống nhúng giới hạn về phần cứng. 95% mã nguồn hệ thống nhúng hiện nay đang được viết bằng C/C++.

Ngoài C/C++ thì hiện nay Python cũng đang là ngôn ngữ được nhiều hệ thống nhúng sử dụng; nó đang là ngôn ngữ có tốc độ phát triển người dùng nhanh nhất. Ưu điểm của Python là khả năng ghi, giảm lỗi và dễ đọc, các thư viện mã nguồn mở phong phú giúp các lập trình viên giảm thời gian viết code. Mặc dù vậy Python chỉ được dùng cho những hệ thống mà có cấu hình tốt về phần cứng.

Tham khảo tuyển dụng embedded Hà Nội lương cao trên TopDev

Câu 5: Giải thích từ khóa Volatile trong lập trình nhúng

Trong lập trình nhúng, trình compiler có sẵn tính năng optimization (tối ưu) sẽ thực hiện việc lược bỏ những phần code mà nó nghĩ là không cần thiết (ví dụ như biến không sử dụng). Trong một số trường hợp biến của bạn được khai báo nhưng để sử dụng ở 1 vị trí khác (biến global) hoặc map vào vùng nhớ ngoại vi khác dẫn đến việc thực chất là biến “có ích” và có nhiệm vụ của nó nhưng tính năng tối ưu sẽ vẫn đánh dấu nó là không cần thiết.

Để tránh việc tự động này, từ khóa Volatile đặt trước biến để báo cho trình optimization rằng không cần quan tâm đến nó. Trong thực tế, có 3 trường hợp bạn hay sử dụng từ khóa này:

  • Thanh ghi ngoại vi có ánh xạ đến ô nhớ
  • Biến toàn cục được truy xuất từ các tiến trình con xử lý ngắt
  • Biến toàn cục được truy xuất từ nhiều tác vụ trong một ứng dụng đa luồng

Câu 6: Phân biệt Little Endian và Big Endian

Little Endian và Big Endian là hai cơ chế lưu trữ dữ liệu theo việc sắp xếp các byte dữ liệu. Little endian xuất phát từ little-end nghĩa là kết thúc nhỏ – tức là byte cuối cùng trong biểu diễn nhị phân sẽ được ghi trước; và ngược lại Big endian hay big-end là cơ chế ghi dữ liệu mà byte đầu tiên sẽ ghi đầu tiên. Lưu ý là BE hay LE chỉ khác ở thứ tự các byte chứ không ảnh hưởng đến thứ tự các bit trong byte.

Big Endian sẽ phổ biến và thuận tự nhiên cho chúng ta đọc hơn. Đối với máy tính, không có sự khác biệt nào về tốc độ trong việc đọc ghi thứ tự các byte theo 2 cách trên. Dù vậy có 1 số trường hợp mà BE và LE thể hiện sự khác biệt, ví dụ:

  • Nếu chúng ta ép kiểu từ int (4 bytes) sang big int (8 bytes), với LE chúng ta không cần thay đổi địa chỉ bộ nhớ, chỉ cần ghi tiếp các byte lớn hơn mà thôi. BE sẽ phải làm bước dịch địa chỉ bộ nhớ hiện tại thêm 4 bytes thì mới có không gian lưu trữ.
  • Tuy vậy nếu khi cần đọc byte đầu tiên để xác định xem giá trị đó là số âm hay số dương (được quy định bởi byte lớn nhất) thì BE sẽ tỏ ra lợi thế hơn so với LE.

Câu 7: Sự khác nhau giữa Inline Function và Macro

Macro là những hàm được viết ở phần Preprocessor, một loại lệnh mở rộng tại thời điểm gọi của nó. Inline Function (hàm nội tuyến) cũng là một loại lệnh mở rộng tại thời điểm gọi của nó, nhưng nó được mở rộng trong quá trình biên dịch.

Hàm nội tuyến sử dụng từ khóa inline để đề nghị trình biên dịch (compiler) thực hiện inline expansion (khai triển nội tuyến) – chèn code của hàm đó tại địa chỉ mà nó được gọi. Sử dụng inline functions không khác nhiều so với hàm thông thường, tuy vậy khi thực thi nó sẽ chạy nhanh hơn, tiết kiệm chi phí gọi hàm.

Macro định nghĩa một cách chuyển văn bản code đầu vào nào đó thành văn bản code đầu ra theo ý mình muốn sử dụng từ khóa define. Macro giúp chúng ta tiết kiệm thời gian viết những đoạn code lặp lại trong chương trình.

Inline Function và Macro
Nguồn ảnh: https://stackoverflow.com/questions/70103669/difference-between-a-macro-and-function-outside-c

Câu 8: So sánh các giao thức UART, SPI và I2C

UART, SPI và I2C là 3 chuẩn truyền thông nối tiếp cơ bản nhất với MCU, trong đó:

  • UART là một chuẩn nối tiếp không đồng bộ, còn SPI và I2C là 2 chuẩn nối tiếp đồng bộ nên chúng có đường clock còn UART thì không.
  • SPI hỗ trợ tốc độ truyền lớn nhất nhưng các kết nối của nó phức tạp nhất.
  • UART có thể truyền đi với khoảng cách xa hơn, SPI và I2C chỉ truyền trên bo mạch.

Tham khảo tuyển dụng embedded fresher lương cao trên TopDev

Câu 9: Hãy giải thích về Interrupt (ngắt) và trình phục vụ ngắt ISR

Ngắt (Interrupt) là một sự kiện khẩn cấp bên trong hoặc bên ngoài bộ vi điều khiển xảy ra, buộc vi điều khiển tạm dừng thực hiện chương trình hiện tại, phục vụ ngay lập tức nhiệm vụ mà ngắt yêu cầu. Quá trình ngắt xảy ra như sau:

  • Khi có một thiết bị bất kỳ cần được phục vụ => nó sẽ báo cho bộ vi điều khiển bằng cách gửi 1 tín hiệu ngắt.
  • Khi nhận được tín hiệu ngắt => bộ vi điều khiển ngừng tất cả những gì nó đang thực hiện để chuyển sang phục vụ thiết bị gọi ngắt đồng thời lưu lại địa chỉ của lệnh kế tiếp.
  • Sau khi phục vụ ngắt xong => bộ vi điều khiển quay trở lại điểm bị ngắt trước đó; lấy lại địa chỉ lệnh kế tiếp và tiếp tục thực hiện công việc.

Chương trình ngắt trên được gọi là trình phục vụ ngắt ISR viết tắt của Interrupt Service Routine

Câu 10: Bạn nghĩ sao về triển vọng của ngành hệ thống nhúng và IoT

IoT hay Internet of Things là một trong 4 trụ cột của cách mạng công nghiệp 4.0, có tính ứng dụng cao, đóng vai trò quan trọng trong sự phát triển của nền kinh tế, vì vậy chuyên ngành này hứa hẹn sẽ có tốc độ phát triển rất mạnh ở cả trên thế giới lẫn Việt Nam.

IoT sẽ cần phải xây dựng, thiết kế và tạo ra các thiết bị, cỗ máy thông minh có kết nối với Internet phục vụ cho nhiều lĩnh vực khác nhau; và để làm được điều này thì cũng đồng nghĩa với việc xây dựng nhiều các hệ thống nhúng gồm cả phần cứng và phần mềm. Nói cách khác thì 2 ngành này đi liền với nhau, muốn làm IoT thì phải có các hệ thống nhúng. Vì thế trong tương lai, nhu cầu về tuyển dụng ngành hệ thống nhúng sẽ ngày càng lớn hơn.

Kết bài

Trên đây là list 10 câu hỏi bạn sẽ thường gặp phải nhất khi đi phỏng vấn vị trí lập trình viên Nhúng – Embedded System Developer. Hy vọng bài viết này sẽ giúp bạn phần nào đó hoàn thành tốt những câu hỏi đến từ nhà tuyển dụng. Cảm ơn các bạn đã đọc bài và hẹn gặp lại các bạn trong các bài viết tiếp theo của mình.

Tác giả: Phạm Minh Khoa

Xem thêm:

Tham khảo việc làm IT lương cao tại TopDev

Đừng lãng phí khoảng thời gian học đại học của bạn!!

Đừng lãng phí khoảng thời gian học đại học của bạn!!

Bài viết được sự cho phép của tác giả Lê Nhật Thanh

Từ trước đến nay, IT luôn là một nghề không dễ dàng và rất khô cứng đối với nhiều người. Không phải ai cũng có đủ dũng cảm để theo ngành này. Nhưng những năm gần đây, số lượng sinh viên thi vào ngành này là cực kì nhiều, bằng chứng là điểm đầu vào của các trường đại học tăng vọt (bạn có thể kiểm chứng điều này trên internet). Tại sao bạn lại lựa chọn học đại học ngành IT?

Mình cũng công nhận rằng lương IT khá cao so với mặt bằng chung. Cho nên nhiều sinh viên đổ xô vào học là điều không thể tránh khỏi. Nhiều bạn dấn thân vào ngành này vì yêu thích, đam mê. Nhiều bạn thì vì tiền, vì bạn bè rủ rê, bị cha mẹ bắt ép. Cũng có nhiều bạn chọn đại ngành này vì không biết chọn ngành gì.

Mình không biết lý do bạn chọn ngành này là gì. Nhưng nếu trong lòng bạn đã quyết tâm theo ngành này, thì bài viết này dành cho bạn. Và đừng quên, sự nghiệp của bạn có thành công hay không là hoàn toàn do bạn (chứ còn do ai nữa -_-).

#1 Những bất lợi khi bạn không có một IT background tốt

Mình sẽ kể cho bạn nghe vài mẫu chuyện mà mình là người trực tiếp chứng kiến. Mình từng có một vài người bạn, đồng nghiệp (đương nhiên là làm trong ngành IT). Một điều đặc biệt là, họ không học ngành IT ở đại học. Người thì học cơ khí, người thì học điện, có người thì học kinh tế. Nhưng dòng đời đưa đẩy cho họ đến với IT. Và bây giờ, công việc của họ cũng khá ổn định. Phải gọi là code như thánh!

Có một điều mình muốn khẳng định trước khi kể tiếp. Họ là những người giỏi và rất giỏi, và dĩ nhiên bây giờ họ code cũng rất giỏi. Nhưng cái chính mình muốn kể ở đây, chính là quá khứ của họ. Khoảng thời gian khi họ bắt đầu bước vào con đường IT.

Rất rất khó khăn! Đúng vậy, rất khó khăn khi họ bắt đầu làm việc trong ngành IT. Lý do là vì họ không có một background IT tốt, kiến thức IT của họ rất hạn chế. Họ đã phải “cày ngày cày đêm”, và nhiều khi phải làm OT (làm tăng ca) rất nhiều để có thể hoàn thành được công việc. Phải nói rằng, họ là những người rất kiên trì, chịu khó.

Mẫu chuyện trên mình kể rất ngắn gọn và đủ để cho bạn nắm được ý chính.

Một mẫu chuyện tiếp theo (lưu ý là những mẫu chuyện mình kể là xảy ra 100% trong đời thật của mình) cũng về một vài người bạn của mình. Họ cũng là những người không học trong ngành IT, hoặc là học trong ngành nhưng kiến thức không chắc. Và bây giờ, họ đã không còn làm IT nữa. Đơn giản là vì họ không thích hợp với ngành này, hoặc không chịu được “nhiệt” ở đây.

Trong 2 nhóm người trên, đều có chung một xuất phát điểm là background IT không tốt. Nhưng có người thì tồn tại được, có người thì không. Người tồn tại được thì đã phải trãi qua muôn vàng khó khăn thử thách, họ phải kiên trì chịu khó rất nhiều để được một chổ đứng trong ngành IT và vì muốn phát triển mạnh trong tương lai. Phần còn lại không còn trụ vững được nữa.

  [Tâm sự lâp trình – Phần 2] : Học đại học con đường trở thành lập trình viên

  Có còn nên học Công nghệ thông tin thời điểm hiện tại?

nhung-dieu-lam-tuong-khien-tan-sinh-vien-vo-mong-khi-buoc-vao-dai-hoc

Thông qua 2 mẫu chuyện trên, mình muốn nói với các bạn đọc rằng. Background IT là một điều cực kì quan trọng khi bạn muốn bước vào ngành. Nếu không có background IT tốt. Thì bạn phải kiền trì hơn người khác, chịu khó hơn người khác. Vì bạn chính là người xuất phát sau trong một cuộc đua. Cho nên khoảng thời gian ban đầu khi bước vào nghề sẽ có vô vàng khó khăn thử thách chờ đón bạn.

Các bạn đã nhìn thấy được khó khăn khi không có một background IT tốt chưa? Nói nhỏ cho bạn biết một điều, số người kiên trì trụ vững được để theo con đường IT là rất ít. Ít hơn rất nhiều so với những người bỏ cuộc.

Nếu bạn đang ngồi trên giảng đường đại học, hãy cũng cố vững chắc background IT của mình. Còn nếu bạn không học đại học, hãy tìm cách để trở thành một ứng viên có background IT tốt (bằng nhiều cách, mình không đề xuất ở đây). Và hãy xem phần sau để biết nhiều hơn về background IT tốt.

Xem thêm tuyển dụng IT Intern hấp dẫn trên Topdev

#2 Xây dựng background IT ngay trên giảng đường đại học

Từ đầu bài viết tới gì mình nói về từ background IT rất nhiều. Và trong phần này, chúng ta sẽ cùng đi tìm nó.

chuyen-tam-cay-cuoc

Tư duy lập trình chính là thứ bạn phải có đầu tiên nếu muốn bước vào con đường lập trình. Tư duy lập trình chính là cái cách mà bạn suy nghĩ (logic) để giải quyết một bài toán từ những bài toán nhỏ nhất cho đến các bài toán phức tạp, project lớn. Tư duy lập trình được rèn luyện và tích lũy mọi lúc khi bạn đang suy nghĩ để giải quyết một bài toán nào đó.

Cho nên, làm bài tập, project nhỏ, đồ án, luận văn, hay các project lớn hơn … tất cả những thứ này sẽ giúp cho bạn có được một tư duy lập trình tốt. Hãy rèn luyện nó từng ngày từng ngày một.

Nói nhỏ cho bạn một kiến thức này, tư duy lập trình của bạn liên quan mật thiết với sự liên kết của các nơron thần kinh trong não bộ của bạn. Hãy tìm hiểu thêm về vấn đề này nhé.

Lập trình hướng đối tượng (OOP) là một kiến thức tối quan trọng trong thế giới IT. Và nó sẽ đi theo bạn đến hết quảng đời của một lập trình viên. Trường đại học cũng sẽ dạy cho bạn hướng đối tượng, nhưng nó chưa đủ và bạn sẽ dần dần nắm rõ và ứng dụng được OOP trong quá trình làm việc.

Ở trong trường đại học, bạn hãy có gắng nắm rõ và hiểu được hướng đối tượng nhiều nhất có thể. Để có thể ứng dụng được trong một vài project nhỏ. Nếu có thể bạn hãy nghiên cứu thêm các project thực tế của các doanh nghiệp để có thể nắm vững hướng đối tượng và có thể ứng dụng được.

Database, tất cả các hệ thống hiện nay đều phải có một database để quản lý dữ liệu. Bạn hãy có gắng để nắm vững được cách sử dụng, thiết kế và thực thi một database. Nếu tốt hơn, bạn có thể tìm hiểu về cách tối ưu cho database, tìm hiểu thêm về SQL và NOSQL.

Ngoài ra, một số kiến thức quan trọng khác như: kiến trúc hệ thống, cấu trúc dữ liệu và giải thuật, security, testing, kiến thức về các mô hình mạng (network), mô hình client-server, … Tiếp sau đó là clean code (làm sao để viết code cho người đọc) và SOLID (các nguyên lý viết code để tối ưu hệ thống và dễ maintenance).

Tất cả các kiến thức trên, bạn sẽ được rèn luyện trong trường đại học và hãy cố gắng rèn luyện nó hết mức có thể để có một background IT tốt nhất.

Trong quá trình rèn luyện, bạn sẽ từ từ tìm ra được cách để học một công nghệ mới, kiến thức mới. Hoặc bạn có thể tham khảo bài viết này. Cách để học một thứ gì đó mới trong IT phản ánh tương đối trình độ của bạn. Hãy ghi nhớ điều này.

Lời khuyên cuối: Bạn hãy kiên trì và cố gắng hết mức có thể để lấy một background IT tốt!

# Kết

Bài viết đã đủ dài rồi, ở trong phần kết này mình muốn nói một điều ngắn gọn
“Dù bạn có là người xuất phát trước hay sau, bạn vẫn có thể về đích trước nếu bạn cố gắng hơn tất cả phần còn lại“.

Bài viết gốc được đăng tải tại lenhatthanh.com

Có thể bạn quan tâm:

Xem thêm Jobs Developer hấp dẫn trên TopDev

Bí kíp vượt qua 7 câu hỏi phỏng vấn UI/UX Designer thường gặp

Bạn muốn trở thành một UI/UX Designer và đang chuẩn bị cho buổi phỏng vấn tuyển dụng? Chắc hẳn bạn đã hiểu rằng, phỏng vấn là bước quan trọng để có thể đạt được mục tiêu nghề nghiệp của mình. Tuy nhiên, để vượt qua được buổi phỏng vấn UI/UX Designer, bạn cần có những kinh nghiệm và kiến thức vững chắc về lĩnh vực này. Để giúp bạn chuẩn bị tốt hơn cho buổi phỏng vấn, bài viết này sẽ cung cấp cho bạn những gợi ý trả lời cho các câu hỏi phỏng vấn UI/UX Designer thường gặp nhất, giúp bạn nâng cao cơ hội được nhận vào vị trí mình mơ ước.

1. UX Design khác với UI Design như thế nào?

Các thuật ngữ về UX, UI thường đi chung với nhau nhưng chúng lại thể hiện một vai trò riêng biệt. Câu hỏi này sẽ giúp nhà tuyển dụng đánh giá được kiến thức chuyên môn của bạn về UX UI. Bạn có thể trả lời câu hỏi trên theo cách này:

UX và UI có sự khác biệt cơ bản về nguyên lý thiết kế và phương thức hoạt động. Cụ thể, UX sẽ tập trung vào trải nghiệm của người dùng, giải quyết các vấn đề mà người dùng gặp phải khi trải nghiệm sản phẩm của doanh nghiệp. Còn UI sẽ tập trung vào thiết kế giao diện người dùng, nói cách khác chính là tạo ra yếu tố thị giác, hiện thực hóa UX qua mặt hình ảnh. Vì vậy, UI và UX liên quan mật thiết đến nhau trong việc tạo ra một sản phẩm với trải nghiệm người dùng tốt nhất.

>>> Xem thêm: UI UX là gì? Công việc của một UX/UI designer

UX Design khác với UI Design như thế nào?

2. Theo bạn, làm thiết kế UI UX khác gì với thiết kế website?

Bạn có thể trả lời câu hỏi này như sau: Theo quan điểm của tôi, thiết kế UI/UX và thiết kế website là hai khái niệm khác nhau, tuy nhiên chúng có sự liên quan mật thiết đến nhau. Thiết kế website tập trung vào việc xây dựng một trang web, trong khi thiết kế UI/UX tập trung vào trải nghiệm người dùng trên trang web đó. Nếu chỉ tập trung vào việc thiết kế trang web mà không quan tâm đến trải nghiệm người dùng, thì trang web đó có thể sẽ không hấp dẫn được khách hàng hoặc khách hàng sẽ không thực hiện được một số hành động trên trang web đó.

  Một số nguyên tắc thiết kế UI/UX website

3. Bạn có thể cho chúng tôi biết về quá trình thiết kế sản phẩm của bạn từ khâu nghiên cứu đến khâu triển khai?

thiết kế UI/UX

Để trả lời câu hỏi này, bạn có thể đưa ra một quy trình thiết kế cụ thể mà bạn đã thực hiện trên một dự án. Bao gồm các bước chính như nghiên cứu thị trường và đối thủ cạnh tranh, tìm hiểu nhu cầu của người dùng, xác định mục tiêu của sản phẩm, thiết kế wireframe và mockup, thử nghiệm, kiểm thử sản phẩm, và triển khai sản phẩm. Bạn nên đề cập đến các công cụ và phương pháp mà bạn đã sử dụng trong quá trình thiết kế, cũng như những thách thức và giải pháp mà bạn đã đối mặt khi làm việc trên dự án đó. Cuối cùng, hãy kết thúc bằng việc nêu ra các kết quả và thành tựu mà bạn đã đạt được từ dự án này.

  Lập trình viên có cần biết về UI/UX?

4. Làm thế nào để bạn thu thập thông tin từ khách hàng hoặc người dùng để tạo ra trải nghiệm tốt hơn cho họ?

Để trả lời câu hỏi này, bạn có thể đưa ra một ví dụ cụ thể về việc bạn đã sử dụng dữ liệu người dùng để cải thiện trải nghiệm người dùng trong một sản phẩm. Ví dụ, bạn có thể đề cập đến việc phân tích các dữ liệu người dùng như phản hồi từ khảo sát, phản hồi từ phản hồi người dùng, hoặc phân tích hành vi người dùng để hiểu được những khó khăn và thách thức mà họ đang gặp phải trong quá trình sử dụng sản phẩm của bạn. Bằng cách đó, bạn đã sử dụng dữ liệu để đưa ra những cải tiến và cải thiện trải nghiệm người dùng, đảm bảo rằng sản phẩm của bạn đáp ứng tốt hơn nhu cầu và mong muốn của người dùng.

Tham khảo việc làm UI/UX hấp dẫn trên TopDev

5. Bạn thường tìm kiếm cảm hứng thiết kế từ đâu?

cảm hứng thiết kế

Khi nhà tuyển dụng hỏi bạn câu này, họ đang muốn biết cách bạn lấy ý tưởng và bạn có thực sự hứng thú tiếp tục học hỏi hay không. Bạn có thể đề cập đến một số nguồn cảm hứng thiết kế như từ thiết kế của các sản phẩm khác, tham gia các cộng đồng thiết kế, từ các tạp chí hay trang web về thiết kế hoặc từ trong chính cuộc sống hàng ngày.

6. Làm thế nào để bạn đảm bảo rằng giao diện người dùng của bạn thân thiện với người dùng và dễ sử dụng?

Để trả lời câu hỏi này, bạn có thể nêu rõ những kỹ năng quan trọng và cần thiết nhất trong công việc UX/UI. Một số kỹ năng có thể bao gồm:

  • Năng lực phân tích và đánh giá dữ liệu: Để hiểu rõ nhu cầu và mong muốn của người dùng, bạn cần có khả năng phân tích và đánh giá các dữ liệu liên quan đến họ.
  • Kỹ năng thiết kế: Để tạo ra giao diện người dùng tốt, bạn cần có khả năng thiết kế đồ họa và sáng tạo, đảm bảo rằng sản phẩm của mình hấp dẫn và dễ sử dụng.
  • Kỹ năng làm việc nhóm: UI/UX là một quá trình phức tạp, đòi hỏi sự hợp tác giữa các bên khác nhau như bộ phận thiết kế, bộ phận phát triển sản phẩm, bộ phận quản lý dự án. Vì vậy, kỹ năng làm việc nhóm và trao đổi thông tin cũng rất quan trọng.
  • Khả năng phát triển sản phẩm: Để thiết kế sản phẩm tốt, bạn cần hiểu rõ quá trình phát triển sản phẩm để đảm bảo rằng sản phẩm của bạn có thể triển khai và hoạt động một cách hiệu quả.

7. Làm thế nào để bạn quyết định thêm/loại bỏ một tính năng nào đó?

Câu hỏi phỏng vấn UI UX này được coi là một thử thách đối với các ứng viên chưa có nhiều kinh nghiệm. Nó được sử dụng để đánh giá khả năng xử lý tình huống của ứng viên. Vì vậy, việc trả lời câu hỏi này đòi hỏi sự khéo léo và tinh ý để có thể tạo ra một câu trả lời thuyết phục và chính xác.

Bạn có thể trình bày rằng, để có thể đưa ra quyết định thêm hay loại bỏ một tính năng bạn cần xem xét các yếu tố như:

  • Nhu cầu người dùng: Tính năng đó có đáp ứng được nhu cầu của người dùng hay không? Nếu tính năng đó không cần thiết hoặc không giải quyết được vấn đề của người dùng thì có thể loại bỏ.
  • Hiệu quả: Tính năng đó có giúp tăng hiệu quả sử dụng sản phẩm hay không? Nếu tính năng đó không mang lại lợi ích cho người dùng hoặc khó sử dụng, có thể xem xét loại bỏ.
  • Khả thi kỹ thuật: Tính năng đó có khả thi để triển khai hay không? Nếu tính năng đó yêu cầu quá nhiều tài nguyên hoặc không khả thi để triển khai, thì có thể xem xét loại bỏ.
  • Thị trường: Tính năng đó có cạnh tranh với các sản phẩm khác trên thị trường hay không? Nếu tính năng đó không cạnh tranh được hoặc không đáp ứng nhu cầu của thị trường, thì có thể xem xét loại bỏ.

Tổng hợp các câu hỏi phỏng vấn UI/UX Designer trên đây cung cấp cho bạn một cái nhìn tổng quan về những câu hỏi thường gặp trong quá trình tuyển dụng. Tuy nhiên, không phải câu trả lời nào cũng phù hợp với tất cả các trường hợp, và bạn cần phải thể hiện được sự tự tin, khả năng xử lý tình huống, tư duy logic và khả năng tương tác với nhà tuyển dụng trong quá trình phỏng vấn. Hy vọng rằng những gợi ý trên sẽ giúp bạn nâng cao cơ hội được tuyển vào vị trí UI/UX Designer mình mong muốn.

TopDev tổng hợp

Xem thêm:

Xem thêm Việc làm Developer hấp dẫn trên TopDev

Virtualbox Headless Frontend là gì?

Virtualbox Headless Frontend là gì?

Nhắc đến phần mềm tạo máy ảo thì chúng ta thường nghĩ ngay đến Virtualbox, một trong số những phần mềm tốt nhất giúp bạn tạo được máy ảo để chạy và sử dụng nhiều hệ điều hành cùng lúc trên một máy tính, hơn nữa nó được cung cấp hoàn toàn miễn phí từ Oracle. Bài viết hôm nay chúng ta cùng nhau tìm hiểu về Virtualbox là gì và những tính năng mà Virtualbox Headless Frontend mang lại nhé.

Máy ảo là gì?

Máy ảo là những phần mềm giúp bạn cài đặt và chạy một hay nhiều hệ điều hành giống như một ứng dụng trên máy tính một cách song song với hệ điều hành hiện tại, không hoặc ít can thiệp và làm ảnh hưởng đến phần cứng và thiết lập phần cứng của máy tính hiện tại.

Máy ảo là gì?

2 phần mềm phổ biến được đánh giá tốt nhất hiện nay trên PC là VMWare và Virtualbox. Ưu điểm của Virtualbox chính là việc nó được cung cấp miễn phí, nhờ vậy mà nhiều phần mềm máy ảo khác cũng sử dụng nền tảng này để tạo ra những ứng dụng giả lập của riêng mình.

Ứng tuyển ngay các vị trí tuyển dụng Frontend trên TopDev

Virtualbox là gì?

Virtualbox là một công cụ GUI và dòng lệnh cho phép chúng ta triển khai máy chủ, máy tính để bàn và hệ điều hành nhúng dưới dạng máy ảo. Virtualbox cung cấp nhiều tính năng hữu ích dành cho bạn như:

  • Khả năng tương thích: tương thích hầu hết với các hệ điều hành chạy 32 hay 64 bit hiện nay, các máy ảo được tạo ra có tính năng giống hệt như một hệ điều hành trên một máy thật.
  • Hỗ trợ đa nền tảng: Virtualbox có phiên bản dành cho hầu hết các hệ điều hành trên PC hay server, từ Window, Linux hay MacOS,…
  • Khả năng tái sử dụng cao: bạn có thể tạo máy ảo trên hệ điều hành Linux, sau đó copy thư mục đã cài và import để chạy trên hệ điều hành Window hoặc MacOS một cách bình thường.
  • Khai thác tối đa tài nguyên máy tính: việc sử dụng Virtualbox giúp bạn tận dụng được tài nguyên phần cứng như CPU, RAM, ổ cứng của thiết bị một cách tối đa.
  • Tiết kiệm thời gian và không gian: nhờ việc chạy song song các hệ điều hành, cùng với việc có khả năng chia sẻ file nhanh chóng giữa các máy ảo giúp bạn tiết kiệm được nhiều thời gian và không gian thao tác.

  Hướng dẫn cài đặt VirtualBox trên Ubuntu chi tiết nhất

  Bí mật của Virtual Method và Override

Virtualbox Headless Frontend là gì?

Virtualbox Headless Frontend hay trạng thái headless của Virtualbox sẽ không hiển thị giao diện (GUI) của Virtualbox, vẫn khởi động máy ảo và thực hiện chạy các hệ điều hành một cách bình thường. VirtualBox Manager cung cấp sẵn cho chúng ta chế độ chạy này trong ứng dụng của nó.

Virtualbox Headless Frontend

Virtualbox hoạt động như một dịch vụ chạy ở nền (background) như một dịch vụ hệ thống hay daemon, vì vậy chúng ta không cần giao diện để sử dụng nó. Tất cả các thực thể (instances) của Virtualbox đều có thể chạy ở chế độ headless. Chương trình Virtualbox Manager mà chúng ta cài đặt và sử dụng chỉ là một công cụ giúp người dùng thao tác dễ dàng hơn với các instance tạo ra thôi. Thực tế các instance máy ảo trong Virtualbox sẽ có những file cấu hình (config) riêng và có thể sửa đổi bằng bất kỳ trình editor text nào. Khi bạn thực hiện lời gọi start các instance, dựa theo file cấu hình đã lưu mà những instance máy ảo trên sẽ nạp dữ liệu và hoạt động.

Tham khảo việc làm Mobile Developer hấp dẫn trên TopDev

VirtualBox Remote Display Protocol (VRDP)

Virtualbox cung cấp các tùy chọn đặc biệt để quản lý máy ảo bằng dòng lệnh bằng tiện ích VboxManage. Chúng ta có thể sử dụng chế độ Headless để khởi động máy ảo từ dòng lệnh mà không cần thông qua Virtualbox GUI, phương thức này gọi là VRDP.

Để sử dụng được VRDP, VirtualBox cung cấp một extension miễn phí có tên “Oracle VM VirtualBox Extension Pack”. Sau khi cài đặt xong thì chúng ta sử dụng các lệnh để thao tác với các máy ảo:

  • Hiển thị danh sách máy ảo: “VBoxManage list vms”
  • Khởi động máy ảo: “VBoxHeadless -s <tên-máy-ảo>”
  • Khởi động ở chế độ headless: “VBoxManage startvm <tên-máy-ảo> –type headless

Ngoài ra chế độ này cũng cho phép chúng ta thao tác với các máy ảo từ xa bằng cách ssh hay remote vào server chứa các instance của máy ảo.

VirtualBox Remote Display Protocol

Kết bài

Virtualbox là một phần mềm tạo máy ảo hữu ích, đồng thời cũng là phần nhân cho nhiều phần mềm tạo máy ảo, giả lập mà anh em lập trình viên sử dụng. Hy vọng bài viết hôm nay đã mang lại cho các bạn những kiến thức hữu ích về Virtualbox Headless Frontend, hẹn gặp lại các bạn trong các bài viết tiếp theo của mình.

Tác giả: Phạm Minh Khoa

Có thể bạn quan tâm: