Home Blog Page 35

Tổng hợp điểm chuẩn ngành CNTT các trường đại học năm 2023

Trong thời đại công nghệ 4.0, ngành công nghệ thông tin luôn được coi là một trong những ngành top đầu mỗi mùa tuyển sinh. Điểm chuẩn của ngành ở các trường đại học liên tục tăng qua các năm, có trường còn vượt qua mức 29 điểm. Điều này chứng minh cho sức hút về nhân lực công nghệ tại các doanh nghiệp ngày càng lớn.

Hiện tại, điểm chuẩn ngành CNTT tại các trường top đầu đã được công bố, nhìn chung điểm chuẩn năm nay không có nhiều biến động so với năm trước. Hãy cùng TopDev cập nhật điểm chuẩn ngành công nghệ thông tin 2023 qua bài viết dưới đây.

Top các trường Đại học đào tạo CNTT chất lượng hàng đầu Việt Nam

  • Đại học Công nghệ Thông tin – Đại học Quốc gia TP.HCM
  • Đại học Bách khoa TP.HCM
  • Đại học Bách khoa Hà Nội
  • Đại học Khoa học tự nhiên – Đại học Quốc gia TP.HCM
  • Đại học Khoa học và Công nghệ Hà Nội
  • Học viện Công nghệ Bưu chính Viễn thông 
  • Đại học Sư phạm Kỹ thuật TP.HCM
  • Đại học Công nghệ – Đại học Quốc gia Hà Nội
  • Đại học Kinh Tế Quốc Dân
  • Đại học Quốc tế – Đại học Quốc gia TP.HCM
  • Đại học FPT
  • Đại học Bách Khoa – Đại học Đà Nẵng
  • Đại học Cần Thơ
  • Đại học Công nghiệp Hà Nội
  • Đại học Giao thông vận tải 
  • Học viện Kỹ thuật mật mã

  Sinh viên CNTT làm thế nào để học tốt ở trường đại học?

  Top 10 Trường đào tạo ngành Công nghệ thông tin tốt nhất

Đại học Công nghệ Thông tin – Đại học Quốc gia TP.HCM

Đại học Công nghệ Thông tin – Đại học Quốc gia TP.HCM là một trong những trường đào tạo CNTT top đầu của cả nước. Khi học tại trường, sinh viên được trang bị kiến thức chuyên sâu và thực hành thông qua các dự án thực tế, đảm bảo tính ứng dụng và khả năng giải quyết vấn đề hiệu quả.

Năm 2023, trường Đại học Công nghệ Thông tin áp dụng 4 phương thức xét tuyển gồm tuyển thẳng và ưu tiên xét tuyển; xét tuyển dựa trên điểm thi (kết quả bài thi đánh giá năng lực của Đại học Quốc gia TP HCM và xét kết quả thi tốt nghiệp THPT năm 2023); xét tuyển dựa trên chứng chỉ quốc tế và xét tuyển theo tiêu chí riêng của chương trình liên kết với Đại học Birmingham City, Anh.

Dưới đây là điểm chuẩn đại học Công nghệ Thông tin theo kết quả thi THPT Quốc gia của UIT:

điểm chuẩn đại học 2023

Trường Đại học Bách Khoa TP.HCM

Trường Đại học Bách Khoa TP.HCM đã có hơn 50 năm kinh nghiệm đào tạo và cung cấp cán bộ kỹ thuật chất lượng cao cho ngành CNTT. Trường có phương pháp đào tạo theo xu hướng hiện đại và thực tiễn giúp sinh viên hoàn thiện xuất sắc cả về trình độ chuyên môn lẫn kỹ năng xã hội khi ra trường.

Hiện nay, ĐHBK TP.HCM đang áp dụng nhiều hình thức xét tuyển, trong đó hình thức xét tuyển kết hợp nhiều tiêu chí (kết quả thi ĐGNL, kết quả thi Tốt nghiệp THPT, điểm học THPT, năng lực khác) chiếm 60 – 90% tổng chỉ tiêu.

Sau đây là điểm xét tuyển các ngành trong lĩnh vực CNTT của trường Đại học Bách Khoa TP.HCM:

điểm chuẩn đại học 2023

công bố điểm trúng tuyển
Cách thức tính điểm theo phương thức xét tuyển kết hợp

Đại học Bách khoa Hà Nội

Đại học Bách Khoa Hà Nội (HUST) là một trong những trường đại học hàng đầu tại Việt Nam trong lĩnh vực đào tạo công nghệ thông tin. Tại đây, sinh viên được tiếp cận những kiến thức tổng quát và chuyên sâu về máy tính, các ngôn ngữ lập trình, quy trình phát triển phần mềm nhằm ứng dụng vào nghiên cứu, phát triển và gia công phần mềm.

Đại học Bách Khoa Hà Nội đã chính thức công bố điểm chuẩn trúng tuyển các ngành/chuyên ngành CNTT năm 2023. Mời bạn xem ngay thông tin dưới đây:

điểm chuẩn đại học 2023

Đại học Khoa học tự nhiên – Đại học Quốc gia TP.HCM

Đại học Khoa học tự nhiên – Đại học Quốc gia TP.HCM áp dụng chương trình giáo dục bài bản cho sinh viên, đồng thời rèn luyện khả năng tư duy và phân tích thông qua chương trình học chuyên sâu. Bên cạnh đó, sinh viên cũng được khuyến khích tham gia vào các hoạt động nghiên cứu và thực hành, từ đó rèn luyện khả năng tự tìm hiểu và phân tích thông tin một cách chính xác và sáng tạo.

Năm nay, HCMUS áp dụng tổng cộng 6 phương thức tuyển sinh. Trong đó, phương thức xét tuyển dựa trên kết quả Kỳ thi Đánh giá năng lực năm 2023 do ĐHQG-HCM tổ chức chiếm 45% – 50% chỉ tiêu ngành/nhóm ngành; phương thức Xét tuyển dựa trên kết quả Kỳ thi tốt nghiệp THPT chiếm 30% – 50% chỉ tiêu ngành/nhóm ngành.

Dưới đây là điểm xét tuyển nhóm ngành CNTT của trường KHTN – ĐHQG HCM:

điểm chuẩn đại học 2023

Đại học Khoa học và Công nghệ Hà Nội

Đại học Khoa học và Công nghệ Hà Nội (USTH) hay Đại học Việt Pháp áp dụng 3 hình thức tuyển sinh là: Xét tuyển dựa trên kết quả thi đánh giá năng lực cho USTH tổ chức; Xét tuyển thẳng theo đề án của USTH; và Xét tuyển dựa trên kết quả thi tốt nghiệp THPT.

Các nhóm ngành CNTT tại USTH luôn có mức điểm đầu vào cao ngất ngưởng. Theo số liệu năm 2022, ngành Công nghệ thông tin – Truyền thông có đầu vào cao nhất, theo sau đó là ngành Khoa học dữ liệu.

Và dưới đây là điểm xét tuyển 2023 nhóm ngành công nghệ thông tin của USTH:

điểm chuẩn đại học 2023

Học viện Công nghệ Bưu chính Viễn thông

Học viện Công nghệ Bưu chính Viễn thông tuyển sinh năm 2023 với các ngành công nghệ quan trọng như: An toàn thông tin, Khoa học máy tính, Công nghệ Internet vạn vật và Công nghệ thông tin. Các sĩ tử có thể đậu vào học viện thông qua 4 hình thức tuyển sinh: Tuyển thẳng và ưu tiên xét tuyển; Xét tuyển dựa vào kết quả điểm thi tốt nghiệp THPT năm 2023; Xét tuyển kết hợp; và Xét tuyển dựa vào kết quả các kỳ thi đánh giá năng lực.

Điểm xét tuyển nhóm ngành CNTT 2023 của Học viện Công nghệ Bưu chính Viễn thông:

điểm chuẩn đại học 2023

Đại học Sư phạm Kỹ thuật TP.HCM

Năm 2023, Đại học Sư phạm Kỹ thuật TP.HCM áp dụng 4 hình thức xét tuyển bao gồm: Xét điểm học bạ Trung học phổ thông (THPT); Xét điểm học bạ Trung học phổ thông (THPT); Xét điểm thi tốt nghiệp THPT năm 2023; Xét tuyển thẳng, ưu tiên xét tuyển thẳng.

Điểm chuẩn ĐH Sư phạm kỹ thuật TP.HCM theo hình thức xét điểm thi tốt nghiệp THPT đã được công bố. Theo đó, ngành An toàn thông tin có điểm chuẩn cao nhất 26,90 điểm. Mời bạn xem chi tiết điểm chuẩn các ngành thuộc nhóm công nghệ thông tin bên dưới:

điểm chuẩn đại học 2023

Đại học Công nghệ – Đại học Quốc gia Hà Nội

Đại học Công nghệ – Đại học Quốc gia Hà Nội hiện đang đào tạo các ngành liên quan đến công nghệ thông tin như: Trí tuệ nhân tạo, Hệ thống thông tin, Mạng máy tính và truyền thông dữ liệu, Khoa học máy tính. Điểm chuẩn ngành năm nay khá cao, cao nhất là ngành Công nghệ thông tin với 27,85 điểm.

điểm chuẩn đại học 2023

Đại học Kinh tế Quốc dân

Sinh viên học CNTT tại đại học Kinh tế Quốc dân sẽ được đào tạo các kiến thức mới trong công nghệ thông tin, chú trọng đến phát triển kỹ năng trong quản trị và vận hành hệ thống thông tin quản lý; quản lý và phân tích dữ liệu; ứng dụng và chuyển giao công nghệ trong mọi lĩnh vực đồng thời phát triển năng lực tự nghiên cứu tăng cường kiến thức theo xu hướng thời đại.

Điểm chuẩn nhóm ngành CNTT 2023 đã được công bố:

điểm chuẩn đại học 2023

Đại Học Quốc Tế – Đại Học Quốc Gia TPHCM

Khoa Công nghệ Thông tin (CNTT) là Khoa đầu tiên có chương trình đào tạo đạt tiêu chuẩn các Trường Đại học Đông Nam Á và là một trong 4 Khoa đầu tiên của Trường Đại học Quốc tế, Đại học Quốc gia TPHCM. Sinh viên sẽ được trang bị kiến thức cơ bản vững vàng, cập nhật công nghệ tiên tiến, có các kỹ năng chuyên ngành và kỹ năng mềm chuyên nghiệp để phát triển nghề nghiệp bền vững theo hướng công nghiệp hoặc nghiên cứu.

Hiện trường đã công bố điểm chuẩn 3 chuyên ngành đào tạo liên quan đến CNTT là Khoa học máy tính, Kỹ thuật máy tính và Mạng máy tính. Mời bạn tham khảo điểm:

điểm chuẩn đại học 2023

Điểm chuẩn Đại học FPT

Đại học FPT là trường tư thục nổi tiếng với nhiều phân hiệu đặt tại Hà Nội, TP.HCM, Đà Nẵng, Cần Thơ. Tại FPT, sinh viên sẽ được trang bị kiến thức chuyên sâu về CNTT như phát triển phần mềm, trí tuệ nhân tạo, an ninh mạng, big data và nhiều lĩnh vực liên quan khác. Đồng thời, trường tạo điều kiện cho sinh viên thực hành thông qua các dự án thực tế và tương tác với doanh nghiệp hàng đầu trong ngành.

Năm nay, trường áp dụng nhiều hình thức xét tuyển như: Xét tuyển Học bạ; Xét tuyển thẳng; Xét tuyển dựa trên điểm THPT Quốc gia; Xét tuyển thí sinh tốt nghiệp THPT tại nước ngoài và Xét tuyển đối với thí sinh sử dụng chứng chỉ Quốc tế.

Dưới đây là điểm chuẩn xét tuyển dựa trên điểm thi THPT Quốc gia của trường FPT:

Đang cập nhật điểm

Đại học Bách Khoa – Đại học Đà Nẵng

Trường áp dụng 6 phương thức tuyển sinh, bao gồm: Xét tuyển thẳng theo Quy chế tuyển sinh, Tuyển sinh riêng theo Đề án của Trường, Tuyển sinh riêng theo Đề án của Trường, Xét kết quả thi đánh giá năng lực do ĐHQG Tp. HCM tổ chức, Xét kết quả thi đánh giá tư duy do Trường ĐHBK Hà Nội tổ chức và Xét kết quả thi tốt nghiệp THPT.

Dưới đây là điểm chuẩn nhóm ngành CNTT dựa theo kết quả thi tốt nghiệp THPT:

điểm chuẩn đại học 2023

Đại học Cần Thơ

Đại học Cần Thơ hằng năm tuyển sinh các nhóm ngành CNTT với số lượng khá lớn. Năm nay trường áp dụng 4 phương thức xét tuyển: Tuyển thẳng, ưu tiên xét tuyển; Xét tuyển điểm Kỳ thi tốt nghiệp THPT; Xét tuyển điểm học bạ THPT; Xét tuyển thẳng vào học Bồi dưỡng kiến thức.

Điểm chuẩn các ngành Công nghệ thông tin trường Đại học Cần Thơ: 

điểm chuẩn đại học 2023

Đại học Công nghiệp Hà Nội

Đại học Công nghiệp Hà Nội tuyển sinh năm 2023 với 51 ngành học và 6 phương thức xét tuyển. Trong đó, trường đào tạo các ngành liên quan đến công nghệ thông tin như: Khoa học máy tính, Mạng máy tính và truyền thông dữ liệu, Kỹ thuật phần mềm, Công nghệ kỹ thuật máy tính, Công nghệ thông tin.

Điểm chuẩn của Đại học Công nghiệp Hà Nội 2023:

điểm chuẩn đại học 2023

Đại học Giao thông Vận tải

Đại học Giao thông Vận tải đào tạo 3 ngành là Công nghệ thông tin, Công nghệ thông tin chất lượng cao và Khoa học máy tính. Trường là đối tác các một số công ty công nghệ lớn như Samsung SRV, Viettel Network, FPT Software, Nashtech,… nên đầu ra cho sinh viên luôn được đảm bảo.

Điểm chuẩn các ngành CNTT 2023 của trường đã được công bố:

điểm chuẩn đại học 2023

Học viện Kỹ thuật mật mã

điểm chuẩn đại học 2023

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

Xem thêm việc làm IT hàng đầu hot nhất trên TopDev

Google Guice là gì – Dependency injection (DI) framework

Bài viết được sự cho phép của tác giả Giang Phan

Trong bài trước, tôi đã giới thiệu với các bạn Dependency Injection (DI) và cách tự xây dựng 1 framework đảo ngược điều khiển (IoC) để quản lý các dependency. Trong bài này, chúng ta sẽ cùng tìm hiểu về Google Guice – một framework giúp chúng ta dễ dàng quản lý và sử dụng các dependency.

Google Guice là gì?

Google Guice (phát âm là juice), là một framework DI gọn nhẹ, mã nguồn mở, giúp chúng ta phát triển các ứng dụng dạng module. Guice được phát triển và quản lý bởi Google.

Guice tận dụng thế mạnh của Generic và Annotation – các tính năng mới được giới thiệu từ phiên bản java 5, giúp chúng ta dễ dàng quản lý và sử dụng các Dependency.

Trong Guice, Annotaion @inject được sử dụng để tiêm phụ thuộc. Nó cho phép chúng ta inject sự phụ thuộc tại các constructor, field hoặc method. Sử dụng Guice, chúng ta có thể xác định scope của instance đối tượng phụ thuộc. Nó cũng có các tính năng để tích hợp với Spring và Aspect Oriented Programming (AOP).

Cài đặt Google Guice

Để sử dụng Google Guice, chúng ta cần thêm thư viện Guice vào trong project. Trong bài viết này, tôi sử dụng maven project, chúng ta sẽ thêm thư viện này như sau:

<!-- https://mvnrepository.com/artifact/com.google.inject/guice -->
<dependency>
    <groupId>com.google.inject</groupId>
    <artifactId>guice</artifactId>
    <version>4.2.2</version>
</dependency>

Các version khác của Guice, các bạn xem tại link sau: https://mvnrepository.com/artifact/com.google.inject/guice

  Inversion of Control và Dependency Injection

  Giới thiệu về JSON Binding trong Jakarta EE

Ví dụ cơ bản về Dependency Injection với Google Guice

Để sử dụng Guice cần nhớ 2 thông tin quan trọng sau:

  • Nói với Guice cái gì cần được tiêm phụ thuộc (inject) với @Inject.
  • Nói với Guice cách tiêm mô-đun: implement Asbstract Module, bind các interface với các implementation mong muốn.

Chúng ta sẽ viết lại ví dụ ở bài viết Dependency Injection Pattern bằng cách sử dụng thư viện Google Guice.

package com.gpcoder.patterns.creational.googleguice.firstexample;

import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Injector;

// Step 1: Create Interface
interface MessageService {
    void sendMessage(String message);
}

// Step 2: Create Implementation
class EmailService implements MessageService {
    @Override
    public void sendMessage(String message) {
        System.out.println("Email message: " + message);
    }
}

// Step 3: Create Bindings Module
class FirstModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(MessageService.class).to(EmailService.class);
    }
}

// Step 4: Create Class with dependency
class UserController {
    private MessageService messageService;

    @Inject
    public UserController(MessageService messageService) {
        this.messageService = messageService;
    }

    public void send() {
        messageService.sendMessage("Dependency injection with Google Guice example");
    }
}

// Step 5: Run application
public class GoogleGuiceFirstApplication {

    public static void main(String[] args) {
        // Step 5.1: Create Injector
        Injector injector = Guice.createInjector(new FirstModule());

        // Step 5.2: Get Object with dependency fulfilled
        UserController userController = injector.getInstance(UserController.class);

        // Step 5.3: Use the object
        userController.send();
    }
}

Output của chương trình:

Email message: Dependency injection with Google Guice example

Trong ví dụ trên, chúng ta thấy một số phần thay đổi so với ví dụ ở bài trước:

  • Step 3: chúng ta tạo một class extends từ AbstractModule, lớp này được sử dụng để định nghĩa cách mà một class/ interface sẽ được inject bởi một implement cụ thể nào. Trong ví dụ này, class MessageService sẽ được inject bởi implement EmailService.
  • Step 4: lớp UserController có dependency với MessageService. Trong ví dụ này, chúng ta sử dụng @Inject tại hàm xây dựng (constructor) để inject đối tượng EmailService đã được khai báo tại Step 3.
  • Step 5.1: Khởi tạo Guice Injector với config đã tạo ở Step 3.
  • Step 5.2: Lấy thể hiện đối tượng với các dependency để sử dụng.

Tham khảo thêm các vị trí tuyển lập trình SQL lương cao tại Topdev.

Các loại Binding

Binding trong Buice là cách chúng ta nói với Guice sẽ tiêm phụ thuộc vào vào một class như thế nào. Để làm được điều này, chúng ta sẽ tạo một class kế thừa từ AbstractModule và override phương thức configure(). Trong phương thức này chúng ta gọi phương thức bind() để xác định mỗi binding của một type ứng với một implement cụ thể. Sau khi đã binding các type trong Module, chúng ta sẽ sử dụng phương thức Guice.createInjector(module) để build một injector.

public class BasicModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(Type.class).to(TypeImpl.class);
    }
}

Injector injector = Guice.createInjector(new BasicModule());

Các loại Binding được hỗ trợ bởi Google Guice:

  • Linked Bindings : ánh xạ một type với một implementation cụ thể của nó.
  • Binding Annotations : Trong trường hợp, chúng ta muốn map một Type với nhiều implementation. Chúng ta có tạo một custom Annotation để sử dụng.
  • @Named Binding : một cách khác để map binding mà không cần tạo custom annotation là sử dụng @Named annotation.
  • Constant Bindings : ngoài cách binding với các class/ interface, Guice còn cung cấp một cách để tạo binding với một giá trị của một object hay constant.
  • @Provides Annotation : khi cần khởi tạo một binding value phức tạp.
  • Provider Class : có nhiều @Provide method được định nghĩa trong một module, làm cho class này quá phức tạp, chúng ta có thể move nó sang một class độc lập và implement một Provider interface.
  • Constructor Bindings : khi một class có nhiều constructor, chúng ta có thể tạo binding với constructor cụ thể của object thông qua phương thức toConstructor().
  • In-built Bindings : binding được xây dựng sẵn bên trong Guice, chúng ta chỉ việc gọi @Inject và sử dụng.
  • Just-in-time Bindings : các binding được định nghĩa trong Module, Guice sử dụng chúng bất cứ khi nào cần tiêm phụ thuộc (inject). Trong trường hợp các binding không tồn tại, nó có thể cố gắng tạo ra các binding chỉ khi cần thiết (JIT – just-in-time).

Các loại Injection

Dependency Injection Pattern tách hành vi khỏi các phụ thuộc (dependency). Thay vì tìm kiếm các phụ thuộc trực tiếp hoặc từ các factory, mẫu này khuyến nghị rằng các phụ thuộc được truyền vào từ bên ngoài. Quá trình thiết lập các phụ thuộc từ bên ngoài vào một đối tượng được gọi là tiêm (injection).

Các loại Injection được hỗ trợ bởi Google Guice:

  • Constructor Injection : đối tượng được inject thông qua constructor.
  • Method Injection : đối tượng được inject thông qua method.
  • Field Injection : đối tượng được inject thông qua field.
  • Optional Injection : đối tượng được inject được truyền từ bên ngoài thông qua constructor, method, field hoặc sử dụng một giá trị mặc định.
  • On-demand Injection : các method hoặc field có thể được khởi tạo bằng cách sử dụng một instance đã tồn tại thông qua phương thức injector.injectMembers().
  • Static Injection : đối tượng được inject thông qua static field, loại injection này thích hợp khi migrate ứng dụng sử dụng static factory sang Guice.
  • Injecting Provider : thông thường mỗi loại (type) sẽ nhận được chính xác một thể hiện của từng loại phụ thuộc. Đôi khi chúng ta muốn có nhiều hơn một instance của type phụ thuộc. Guice cúng cấp một Provider với phương thức get(). Một instance mới được tạo ra khi phương thức get() được gọi.

Scope trong Google Guice

Theo mặc định, Guice trả về một instance mới mỗi lần nó cần cung cấp một giá trị. Hành vi này có thể cấu hình thông qua phạm vi (scope). Scope cho phép chúng ta tái sử dụng instance.

Các loại Scope được hỗ trợ bởi Google Guice:

  • @Singleton : một instance duy nhất được sử dụng trong toàn bộ ứng dụng.
  • @SessionScoped : mỗi session sẽ có một instance khác nhau.
  • @RequestScoped : mỗi request sẽ có một instance khác nhau.

Trên đây là giới thiệu cơ bản về Google Guice. Nó cung cấp một cách tiếp cận mới cho Dependency Injection, tận dụng thế mạnh của Annotation và Generic để giúp chúng ta dễ dàng hơn trong việc quản lý và sử dụng các Dependency, cũng như dễ dàng phát triển các ứng dụng dạng module.

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

Xem thêm:

Tin tuyển dụng IT mọi cấp độ trên TopDev đang chờ bạn ứng tuyển!

Sử dụng miễn phí Docker Registry của Gitlab

Bài viết được sự cho phép của tác giả Tống Xuân Hoài

Vấn đề

Bạn có đang sử dụng Docker trong số các dự án nào đang tham gia không? Nếu có thì chắc hẳn vấn đề lưu trữ và chia sẻ Images cần phải được giải quyết, đơn giản bởi vì Registry mặc định của Docker giới hạn số lượng các hình ảnh riêng tư (Private Images). Điều đó có nghĩa là nếu có nhiều dự án thì bắt buộc bạn phải public số hình ảnh đó cho cộng đồng, mà chắc chắn là không phải ai cũng muốn vì dự án của chúng ta cần tính riêng tư.

Thông thường, có người sẽ chi trả khoản phí cho Docker để nhận được nhiều Private Images hơn, bên cạnh đó cũng có người chọn giải pháp tự triển khai cho mình một Registry để lưu trữ toàn bộ hình ảnh nội bộ của công ty, Docker rất “hào phóng” khi họ sẵn sàng cung cấp cho mọi người sử dụng mã nguồn mở để tự tạo registry lưu trữ. Chi tiết bạn đọc có thể xem tại Docker Registry.

Nếu bạn chỉ là một người dùng cá nhân và không có khả năng chi trả phí dịch vụ, cũng như không có tài nguyên để tự tạo cho mình một Registry thì đây là bài viết dành cho bạn, Gitlab hiện tại đang cung cấp kho Registry hoàn toàn miễn phí, tất cả những gì cần làm là có một tài khoản Gitlab.

  Cài đặt Redis sử dụng Docker

  Deploy ứng dụng load balancer sử dụng Nginx với Docker

Cách sử dụng

Registry mà Gitlab cung cấp hiện tại đang gắn với Repository, có nghĩa là để sử dụng chúng ta cần phải tạo Repos trước. Lúc này, Images sẽ đi theo Repository luôn, bạn lưu trữ bằng cách đẩy hình ảnh Docker lên trùng tên với Repository là Gitlab sẽ tự nhận.

Để sử dụng, chúng ta cần làm các bước như sau:

Bước 1: Tạo một Access Token bằng cách vào Profile > Preferences > Access Tokens. Nhập vào tên keys rồi nhớ chọn quyền read & write registry nhé.

 Sử dụng miễn phí Docker Registry của Gitlab

Sau khi tạo thành công nhớ lưu lại Access Tokens vào đâu đó để sử dụng cho lần sau.

Bước 2: Đăng nhập vào registry của Gitlab:

$ docker login registry.gitlab.com

Nhập username là tên đăng nhập Gitlab và password là Access Token đã tạo ở Bước 1.

Bước 3: Tạo một Repository trên Gitlab, ví dụ tôi tạo repos tên là “system”.

Bước 4: Build một Image bất kì, nhưng nhớ đặt tên trùng với Gitlab repository vừa tạo:

$ docker build -t gitlab.com/hoaitx/system:latest .

Bước 5: Push Image lên như bình thường.

$ docker push gitlab.com/hoaitx/system:latest

Bước 6: Kiểm tra Image đã lên Registry chưa bằng cách vào Repository vừa tạo > Deploy > Container Registry, bạn sẽ thấy tất cả Images cùng với tags ở đây.

 Sử dụng miễn phí Docker Registry của Gitlab

Registry này có thể pull, push như bình thường và đặc biệt nó là private registry cho nên bạn cần phải đăng nhập mới có thể thao tác được.

Limits

Một nỗi lo khi dùng các dịch vụ miễn phí đó chính là giới hạn của chúng trong khi sử dụng. Thật kì lạ là đối với Registry này của Gitlab không có bất kì một tài liệu cụ thể nào để cập đến giới hạn dung lượng lưu trữ của các Images. Tôi đã thử tìm kiếm và thấy có một câu hỏi trong cộng đồng đi đến kết luận là không hề có giới hạn nào cho việc lưu trữ!? Bạn đọc có thể tham khảo tại https://forum.gitlab.com/t/gitlab-saas-total-container-registry-size-limit/50808.

Bài viết gốc được đăng tải tại 2coffee.dev

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

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

Frontend cần học những gì để trở nên thật giỏi!

Frontend Developer là những người đảm nhận vai trò xây dựng giao diện website giúp hiển thị nội dung và xử lý các tương tác của người dùng. HTML, CSS và JavaScript được xem như 3 trụ cột, hay 3 ngôn ngữ chính mà mọi lập trình viên Frontend phải nắm được. Ngoài ra, còn có rất nhiều thư viện, framework cùng các ngôn ngữ, thư viện và kỹ năng khác mà một Dev Frontend cần phải nắm được để có thể đảm nhận được vai trò của mình trong tổ chức, dự án. Hôm nay chúng ta cùng đi tìm hiểu để trả lời cho câu hỏi, lập trình viên Frontend cần học những gì nhé.

Công việc của một lập trình viên Frontend

Thông thường khi phát triển một Website, chúng ta sẽ chia ra 2 phần là frontend và backend để tách biệt công việc với những yêu cầu và kĩ năng khác nhau. Đối với Frontend, là những công việc ở client-side; mô tả công việc của một Dev Frontend như dưới đây:

  • Tham gia phát triển các dự án Web trong vai trò xây dựng chức năng front-end của Website, Web-app
  • Triển khai giao diện bằng HTML/CSSJavaScript theo yêu cầu của khách hàng
  • Đảm bảo chất lượng giao diện, UI/UX của Website; khả năng responsive trên nhiều màn hình thiết bị khác nhau
  • Xử lý tương tác của người dùng với Website, trao đổi gửi nhận dữ liệu thông qua API, Sockets,… với phía server-side (Backend) hay các services khác của hệ thống
  • Nghiên cứu, đưa ra đề xuất hay tham gia vào quá trình lên yêu cầu sản phẩm của dự án; cập nhật các xu hướng, trending thiết kế mới.

Công việc của một lập trình viên Frontend

  Lập trình Web nên học ngôn ngữ nào là phù hợp?

  Nên học Front-end hay Back-end? Sự khác biệt là gì?

Những kỹ năng cần có của Frontend Developer

Nhắc đến Frontend là nhắc đến 3 ngôn ngữ quen thuộc HTML, CSS và JavaScript. Nếu như HTML và CSS giúp chúng ta xây dựng bố cục, các thành phần cơ bản của Website cùng màu sắc, hiệu ứng, font chữ,… thì JavaScript sẽ giúp chúng ta xử lý được các tương tác của người dùng cũng như xử lý dữ liệu được server-side trả lại.

Những kỹ năng cần có của Frontend Developer
Công việc của front end

Ngoài kiến thức về HTML/CSS và JavaScript thì lập trình viên Frontend cũng cần phải có những kỹ năng khác để có thể làm việc được trong team và dự án:

  • Kỹ năng quản lý source code: Git, Code Editor và các plugins kèm theo giúp các bạn làm việc một cách tốt hơn trong team
  • Kỹ năng làm việc teamwork, sử dụng các tools quản lý task như Jira, Redmine, Trello,… hoặc giao tiếp trong team theo các quy trình Agile, Scrum, …
  • Kỹ năng testing và debugging: kỹ năng kiểm thử và gỡ lỗi cũng không thể thiếu với mọi lập trình viên. Với front-end Dev thì có một số tool riêng dành cho việc Debug như Chrome DevTools
  • CSS chuyên sâu: để có thể làm việc nhanh hơn với CSS, chúng ta cùng cần những kỹ năng liên quan đến bộ tiền xử lý CSS như SASS, SCSS. Các framework Foundation, Bootstrap hay Semantic UI sẽ giúp bạn làm việc với CSS sâu và nhất quán hơn trong toàn dự án
  • JavaScript nâng cao: các xử lý JS trong một dự án Website sẽ càng ngày càng phức tạp và để quản lý được nó, chúng ta cần đến các thư viện, framework hay các mẫu lập trình có sẵn. Để sử dụng được các thư viện nổi tiếng như React, AngularJS hay áp dụng các mô hình như MVC, MVVM, bạn cũng cần trang bị các kỹ năng tương ứng cùng kiến thức liên quan đến xử lý API tương tác với Backend.

Xem ngay các tin đăng tuyển dụng Front-end lương cao trên TopDev

Lập trình viên Frontend cần học những gì?

Cũng như các lập trình viên khác thì kiến thức lập trình là điều mà Dev Frontend cần trang bị và nắm vững. Học về cách sử dụng Git, sử dụng Jira, Slack, Trello, … là điều mà gần như mọi lập trình viên đều phải tự mình làm ngay từ lúc bước chân vào nghề chứ không thể chờ đến lúc bắt đầu đi làm.

Để trở thành lập trình viên Frontend, tương ứng với các kỹ năng kể trên, chúng ta có một danh sách các ngôn ngữ, thư viện hay kiến thức lập trình mà một Frontend Developer cần học như dưới đây:

Lập trình viên Frontend cần học những gì?

Đầu tiên bạn vẫn cần học và nắm vững được HTML, CSS và JavaScript; đây là điều kiện tiên quyết để có thể trở thành một lập trình viên Frontend. Ngoài 3 ngôn ngữ cơ bản trên, ở bước này các bạn cũng có thể tìm hiểu và học thêm và jQuery; một trong những thư viện nổi tiếng được viết bằng JavaScript mà đa số các thiết kế có sẵn trước bao gồm các HTML/CSS, JavaScript sử dụng. 

Bước tiếp theo chúng ta có thể tiến tới việc học và sử dụng các thư viện, framework dành cho Frontend; có khá nhiều lựa chọn cho bạn:

Lập trình viên Frontend cần học những gì?

React, VueJS, AngularJS,… là những thư viện, framework JavaScript nổi tiếng mà nhiều khách hàng lựa chọn sử dụng. Vì thế nếu bạn lựa chọn học thì sẽ có nhiều cơ hội việc làm hơn. 

Sau khi đã lựa chọn được thư viện và framework sử dụng cho việc phát triển Web; bước tiếp theo hãy nâng cao khả năng lập trình của mình bằng việc học thêm các kỹ năng về CSS như bộ tiền xử lý CSS; về kiến thức responsive hay về kỹ năng thiết kế trên các thiết bị di động. Bên cạnh đó, khi đã tham gia vào các dự án; bạn cũng cần học thêm về các kiến thức liên quan đến ngành, miền (Domain Knowledge).

Mỗi chuyên ngành, lĩnh vực thì sẽ có những yêu cầu đòi hỏi nhất định ảnh hưởng đến website, đến thiết kế của bạn. Ví dụ như trong lĩnh vực giải trí, tin tức; một website đòi hỏi rất nhiều banner quảng cáo, hình ảnh động, thiết kế bắt mắt, … Ngược lại thì với các trang thông tin quản trị nội dung, cần sự đơn giản nhưng đầy đủ tính năng, dễ dàng thao tác với một vài click thì điều quan trọng là UI/UX bạn xây dựng cũng sẽ quyết định nhiều đến sự thành công của dự án.

Kết bài

Qua bài viết này chúng ta cùng nhau đã trả lời được cho câu hỏi lập trình viên Frontend cần học những gì để có thể đáp ứng được yêu cầu của các nhà tuyển dụng và làm việc trong các môi trường phát triển phần mềm. Bất kỳ lĩnh vực ngành nghề nào trong lập trình cũng cần có sự tìm hiểu, học hỏi, nắm bắt được xu hướng công nghệ để đáp ứng được nhu cầu của thị trường. Hy vọng bài viết này hữu ích dành cho các bạn và hẹn gặp lại trong các bài tiếp theo của mình.

Tác giả: Phạm Minh Khoa

Xem thêm:

Tham khảo ngay việc làm IT mọi cấp độ trên TopDev!

Tầm quan trọng của Loose Coupling trong hệ thống Backend

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

Những dòng chữ bên dưới là một trong những kiến thức cực kì quan trọng để build một hệ thống backend. Bạn nếu muốn đi con đường backend hoặc fullstack developer thì hãy đọc một cách cẩn thận. Có thể đọc đi đọc lại nhiều lần, vì bài viết về Loose Coupling này mình thật sự rất tâm huyết. Trong bài viết này sẽ nhiều khái niệm như Dependency injection, DIP, IoC hi vọng các bạn sẽ thật sự hiểu được tụi này.

Bản thân là một software engineer, mình đã làm ở trong ngành cũng được một thời gian dài. Mình đã từng trãi rất nhiều hệ thống lớn có nhỏ có, và trong số đó đa phần đều bị vướng một lỗi rất lớn (Lỗi gì thì mình nói sau). Nhưng với lỗi đó, mỗi khi bạn muốn sửa một đoạn code nào đó thì sẽ ảnh hưởng để rất nhiều nơi khác. (Điều này bạn nào có kinh nghiệm rồi làm việc rồi chắc chắn sẽ từng gặp). Mình hay gọi nó với cái từ là impact list, kiểu mình fix một cái bug A nào đó, thì sau khi fix xong, 1 đống bug B, C, D, E, F xuất hiện.

Nói một cách ví von, cái nhà (hệ thống) mình xây lên, chỉ cần ai đó rung nhẹ cái là sập nguyên căn. Đó là một vấn đề rất lớn của những lập trình viên chưa có kinh nghiệm.

Tìm việc làm Backend Intern HCM trên TopDev ngay!

TÌM HIỂU MỘT CHÚT NHÉ.

Loose Coupling là một khái niệm dễ hiểu, nhưng khó đạt được. Và khái niệm này cũng khá rộng lớn. Ở trong phạm vi bài viết này, mình chỉ đề cập tới Loose Coupling OOP  (lập trình hướng đối tượng). Và cụ thể hơn là Loose Coupling trong việc quản lý dependency. Chứ khái niệm này khá rộng, ví dụ như việc quản lý state, flow,… . Ngoài ra khái niệm này còn xuất hiện trong cả khi thiết kế hệ thống lớn, database distributed,… khi mà các node… phụ thuộc lẫn nhau. Hoặc các module lớn phụ thuộc lẫn nhau.

Ok, quay lại vấn đề của chúng ta là Loose Coupling trong OOP.

Đi qua khái niệm một chút.

  Low Coupling và High Cohesion là gì?

  Top 6 nguyên lý thiết kế microservices cho lập trình viên có kinh nghiệm

TIGHT COUPLING VÀ LOOSE COUPLING LÀ GÌ?

Trong lập trình hướng đối tượng Tight Coupling và Loose Coupling là hai thuật ngữ liên quan đến mức độ mà một lớp (class hay module) phụ thuộc vào lớp khác.

  • Tight Coupling (phụ thuộc chặt chẽ): Khi một lớp phụ thuộc chặt chẽ vào lớp khác, nghĩa là bất kỳ thay đổi nào trong lớp này cũng có thể ảnh hưởng đến lớp kia. Điều này làm giảm khả năng maintenance, tái sử dụng (reusable) và mở rộng (extendable) của mã nguồn (source code).
  • Loose Coupling (phụ thuộc lỏng lẻo): Khi một lớp phụ thuộc lỏng lẻo vào lớp khác, nghĩa là nó chỉ phụ thuộc vào một phần nhỏ của lớp kia, thường là thông qua interface hoặc lớp trừu tượng (abstraction). Điều này giúp mã nguồn dễ dàng mở rộng (extendable), tái sử dụng (reusability) và bảo dưỡng (maintenance) hơn.

Xem ví dụ bên dưới:

class UserService {
    private MySQLUserRepository $userRepository;

    public function __construct() {
        // Dòng ở dưới là tạo ra một hard dependency
        // Dẫn tới tight coupling
        $this->userRepository = new MySQLUserRepository();
    }

    public function getById(int $id): string {
        // Application logic here

        return $this->userRepository->getById($id);
    }
}

class MySQLUserRepository {
    public function getById(int $id): string {
        // Code to interact with DB
    }
}

Bạn hãy nhìn từ khoá new!

Như ví dụ này thì UserService phụ thuộc chặt vào MySQLUserRepository với new keywork.

Đây là tight coupling. Vì khi chúng ta thay đổi class MySQLUserRepository (ví dụ đổi tên, thay đổi param constructor) thì sẽ dẫn tới class UserService bị đổi theo. Giả sử có hàng trăm class sử dụng MySQLUserRepository thì chúng ta phải sửa hàng trăm class đó trong khi mục đích là chỉ sửa đúng 1 class.

Và trong giới lập trình, class MySQLUserRepository được gọi là một dependency của UserService.

Và khi chúng ta khởi tạo trực tiếp class (với từ khoá new) thì đây được gọi là hard dependency.

Tham khảo việc làm Back-End lương hấp dẫn trên TopDev!

VẤN ĐỀ?

Thử tưởng tượng hệ thống của bạn có hàng ngàn class và những class này chằng chịch hard dependency thì chuyện gì xảy ra? Hệ thống của bạn sẽ cực kì khó maintain, mở rộng và tái sử dụng, điều dễ thấy nhất đối với hệ thống bị tight coupling là khi refactor, hoặc fix cái gì đó rất nhỏ, nhưng impact list của nó thì rất lớn, và người ta rất ngại refactor, đôi khi phải đập đi xây lại hoàn toàn. Ngoài ra viết unit test với những trường hợp như vậy là cực hình. Và hard dependency gây ra Tight Coupling – cũng chính là cái lỗi mình đề cập ở đầu bài viết.

Bây giờ chúng ta sẽ đi theo flow bên dưới từng bước từng bước một. Để từ Tight Coupling là ví dụ trên, chúng ta sẽ tiến đến Loose Coupling.

Loose Coupling quan trọng như thế nào trong hệ thống backend

FLOW TRÊN BAO GỒM 6 BƯỚC:

  • Step 1: Chúng ta có 1 đoạn code Tight Coupling (ví dụ nên lấy 1 đoạn thôi, nhiều quá khó đọc lém)
  • Step 2: Implement IoC sử dụng Factory Pattern
  • Step 3: Apply DIP (chữ D trong SOLID)
  • Step 4: Implement DI – Dependancy Injection
  • Step 5: Sử dụng IoC Container
  • Step 6: Chúng ta đạt được Loose Coupling (Vui tại đây)

Step 1 đã giới thiệu xong, bây giờ đến step 2 nhé.

À, 6 step ở trên chắc các bạn đã hiểu được step 1 và step 6 rồi, còn 4 step còn lại, chúng ta sẽ cùng nhau đi qua từng bước một. Các bạn đừng lo, nó thật sự dễ hiểu lắm nếu bạn thật sự tập trung.

IMPLEMENT IOC USING FACTORY PATTERN

TRƯỚC TIÊN CÙNG TÌM HIỂU IOC LÀ GÌ?

Inversion of Control (IoC) là một design principle (mặc dù, một số người gọi nó là design pattern), nhớ nha, là design principle. Như tên gọi, nó được sử dụng để đảo ngược sự điều khiển (control) trong thiết kế hướng đối tượng để đạt được sự kết hợp lỏng lẻo (loose coupling). Ở đây, điều khiển bao gồm điều khiển flow của việc tạo ra một đối tượng (object creation) hoặc tạo đối tượng phụ thuộc (dependency creation) và việc quản lý, cung cấp đối tượng được tạo ra cho ứng dụng trong quá trình ứng dụng running.

Nguyên lý IoC giúp thiết kế các class trở nên lỏng lẻo hơn (loose coupling), giúp chúng có thể unit test, maintain và mở rộng dễ dàng hơn.

IoC hoàn toàn về việc đảo ngược điều khiển. Ái chà, cái “sự giải thích” ở trên khá là khoai và khó hiểu nhỉ?

Để mình giải thích điều này theo ngôn ngữ thông thường. Giả sử bạn lái xe đến nơi làm việc, điều này có nghĩa là bạn điều khiển chiếc xe. Nguyên lý IoC đề xuất đảo ngược điều khiển, có nghĩa là thay vì tự lái xe, bạn thuê một chiếc taxi, nơi một người khác sẽ lái xe. Do đó, điều này được gọi là đảo ngược điều khiển – từ bạn sang tài xế taxi. Bạn không phải tự lái xe và bạn có thể để tài xế lái xe để bạn có thể tập trung vào công việc chính của mình. Cái đích cuối cùng là bạn muốn đến nơi làm việc thôi, việc còn lại không cần quan tâm nữa.

Tới đây có thể bạn có hình dung ra phần nào rồi. Tới đoạn dưới bạn đọc code thì sẽ hiểu 100%.

TIẾP TỤC THÔI!

À xem cái hình trước.

Loose Coupling quan trọng như thế nào trong hệ thống backend

Ở hình trên thì chúng ta có khá nhiều design pattern để có thể implement IoC. Trong phần này, chúng ta sẽ sử dụng Factory pattern để implement IoC. Đằng sau chúng ta sẽ dùng pattern Dependency injection rất là bá :)))

Ok lets go!

Loose Coupling quan trọng như thế nào trong hệ thống backend

Chúng ta sẽ thử sử dụng Factory Pattern để “Invert control” hay gọi là đảo ngược sự điều khiển.

class UserService {
    // (Ở đây còn Tight coupling)
    private MySQLUserRepository $userRepository;

    public function __construct() {
        // Đảo ngược chổ này nè
        // (Ở đây cũng còn một chút Tight coupling)
        $this->userRepository = UserRepositoryFactory::getUserRepository();
    }

    public function getById(int $id): string {
        // Application logic here

        return $this->userRepository->getById($id);
    }
}

public class UserRepositoryFactory
{
    public static function getUserRepository(): MySQLUserRepository
    {
        return new MySQLUserRepository();
    }
}

Ở ví dụ ban đầu, UserService đang điều khiển (control) MySQLUserRepository các việc như tạo, quản lý object bằng từ khoá new đó nhớ không? Nhưng khi chúng ta apply Factory thì việc điều khiển class MySQLUserRepository đã được đẩy về Factory. Nên UserService không còn điều khiển MySQLUserRepository nữa. Đây là concept của IoC. Đảo ngược sự điều khiển. Tới đây hiểu rồi chứ? Không hiểu thì quay lại nha. Quay đi quay lại 10 lần không hiểu thì mình chịu, để lại comment dưới mình sẽ giải thích thắc mắc.

Tuy nhiên, với việc apply IoC sử dụng Factory pattern, đoạn code của chúng ta vẫn chưa hoàn toàn đạt được loose coupling. Bởi vì nhìn dòng số 3, và số 8 ở đoạn code trên, UserService vẫn còn … dính tới MySQLUserRepository và UserRepositoryFactory.

Bây giờ chúng ta sẽ đi tới step tiếp theo?

Loose Coupling quan trọng như thế nào trong hệ thống backend

APPLY DEPENDENCY INVERSION PRINCIPLE (DIP)

DIP LÀ GÌ?

Là nguyên lý D trong SOLID – Dependency Inversion Principle. Mình có viết 1 bài về chữ D này ở đây. Nguyên lý này nói rằng:

  • High-level modules should not depend on low-level modules. Both should depend on the abstraction.
  • Abstractions should not depend on details. Details should depend on abstractions.

Nghe có vẻ hơi lú thật, nhưng bạn sẽ hiểu ngay thôi. Mình hứa!

Quay lại đoạn code ban đầu, thì một cách rất rất dễ hiểu:

  • High-level modules chính là UserService
  • Low-level modules chính là MySQLUserRepository

Ở ví dụ trên:

  • High-level modules và Low-level modules đang phụ thuộc cứng vào nhau (mặc dù đã dùng Factory implement IoC)
  • Và cũng chẳng có cái gì trừu tượng (abstractions) ở đây cả.

Bây giờ chúng ta sẽ làm sao đó, tìm cách implement DIP.

class UserService {
    // Bây giờ dùng interface ở đây
    private UserRepositoryInterface $userRepository;

    public function __construct() {
        $this->userRepository = UserRepositoryFactory::getUserRepository();
    }

    public function getById(int $id): string {
        // Application logic here

        return $this->userRepository->getById($id);
    }
}

public class UserRepositoryFactory
{
    public static function getUserRepository(): UserRepositoryInterface
    {
        return new MySQLUserRepository();
    }
}

// MySQLUserRepository implement UserRepositoryInterface

Chúng ta đã tạo ra UserRepositoryInterface và bây giờ:

  • High-level modules và Low-level modules hiện tại chỉ đang phụ thuộc vào 1 interface (UserRepositoryInterface).
  • Và MySQLUserRepository phụ thuộc vào interface chứ interface không phụ thuộc vào MySQLUserRepository.

Ghê, đổi có xíu mà thoã mãn luôn cả 2 cái câu trên của DIP, thiệt là quá đỉnh :)))

ĐÃ ĐẠT ĐƯỢC LOOSE COUPLING?

Nhưng chúng ta vẫn còn cấn UserRepositoryFactory::getUserRepository(). Thử tưởng tượng khi chúng ta cần inject động vài depedency vào MySQLUserRepository thì chúng ta phải change UserServicenhư sau:

$this->userRepository 
= UserRepositoryFactory::getUserRepository($dependencyA, $dependencyB);

Hoặc đơn giản là muốn sửa đổi thằng UserRepositoryFactory thì chúng ta vẫn đôi khi phải modify thằng UserService.

Chúng ta vẫn chưa hoàn toàn đạt được LOOSE COUPLING!!

Hummmm, bây giờ phải làm sao nhỉ? Quay lại cái hình nào, chúng ta vẫn còn step 4.

Loose Coupling quan trọng như thế nào trong hệ thống backend

Mình sắp tới đích rồi các bạn. Bây giờ chúng ta sẽ thử implement Dependency Injection.

IMPLEMENT DEPENDENCY INJECTION ĐỂ HOÀN TOÀN ĐẠT ĐƯỢC LOOSE COUPLING

DEPENDENCY INJECTION – DI LÀ GÌ?

DI – Dependency Injection nghĩ đơn giản là inject (tiêm, chích, …) một dependency vào một class. Và có 3 loại inject:

  • Constructor injection (cách này hay xài)
  • Method injection (cái này cũng hay xài)
  • Property injection (cái này ít xài hơn)

Ví dụ:

// UserService.php
// Cái này gọi là inject (tiêm) $repo vào UserService
public function __construct(Repo $repo)

Quay lại ví dụ trên.

Thay vì dùng Factory pattern ở Step 2 (tới đây thì bạn hãy quên đi step 2 là được), bây giờ chúng ta thử dùng … Dependency Injection. Và bạn cần nhớ là DI là một design pattern giúp mềnh hiện thức hoá IoC.

class UserService {
    private UserRepositoryInterface $userRepository;

    // Chổ này là Dependency injection nè
    public function __construct(UserRepositoryInterface $userRepository) {
        $this->userRepository = $userRepository;
    }

    public function getById(int $id): string {
        // Application logic here

        return $this->userRepository->getById($id);
    }
}

Đừng quên là chúng ta inject vào nhưng vẫn kết hợp DIP cùng với Dependency injection ở step 3 (nghĩa là vẫn dùng interface nhé)

Ok done! Giờ chúng ta kiểm tra lại code.

Khi muốn đổi MySQLUserRepository: Ví dụ thay đổi class name, thay đổi constructor params, hay đổi luôn thành MongoUserRepository, hay làm ABC XYZ nào đó, thì class UserService vẫn không thay đổi.

Và khi muốn viết unit test cho UserService, quá đơn giản, UserRepositoryInterface mock mốt phát một là xong! (Ở đây bạn nào chưa biết viết unit test và chưa biết mock là gì thì search google 1 chút nhé)

VẬY LÀ NGON CHƯA?

Với việc Dùng DI, kết hợp với DIP, chúng ta đã hoàn toàn đạt được Loose Coupling. Đây chính là trạng thái LOOUSE COUPLING mà chúng ta cố gắng đạt được từ ban đầu.

Loose Coupling quan trọng như thế nào trong hệ thống backend

Ấy, sẽ có bạn nhắc là ủa, sao từ step 4 nhảy cóc qua step 6 luôn gồi? À đợi mình chút nhé.

Từ đầu đến giờ, chúng ta luôn thao tác với class UserService. Mà chưa 1 lần thực sự xài nó. Bây giờ xài nha. Giả sử chúng ta xài ở UserController nha.

// Giả sử ở đây là UserController
$userService = new UserService(new MySQLUserRepository());

Ở controller, khi chúng ta muốn xài UserService, vì UserService nó cần một đối tượng nào đó phải implement cái interface UserRepositoryInterface để có thể inject vào đúng không. Ở đây chúng ta khởi tạo MySQLUserRepository để inject vào thôi.

Nếu đoạn đó ở controller thì chúng ta cứ tạm gọi là “ổn” đi cho tới khi chúng ta làm thực tế :)))

public function __construct(
        PluginService $plugin_service,
        FileRepositoryInterface $file_repository,
        MemberListService $member_list_service,
        TargetService $target_service,
        ConfigRepositoryInterface $config_repository,
        paramRepositoryInterface $param_repository
    ) {
        $this->pluginService = $plugin_service;
        $this->fileRepository = $file_repository;
        $this->memberListService = $member_list_service;
        $this->targetService = $target_service;
        $this->configRepository = $config_repository;
        $this->paramRepository = $param_repository;
    }

Thực tế thì 1 class nó phụ thuộc vào 5, 7 class hoặc nhiều hơn là chuyện bình thường. Và mỗi class dependency nó lại phụ thuộc vài class nữa

Và đây là controller trong thực tế case trên :))).

$use_case = new ViewPlugin(
            new PluginService(
                new MySQLPluginRepository(), 
                new MySQLUserRepository()),
            new InMemoryFileRepository(),
            new MemberListService(),
            new TargetService(
                new TargetRepository(),
                new MemberListService(new MySQLUserRepository())
            ),
            new ConfigRepository(),
            new ParamRepository()
        );

$use_case->execute($plugin_id);

Nhìn hoảng thật!!!!

Làm sao để giải quyết vấn đề trên? IoC Container sẽ giúp chúng ta giải quyết vấn đề nan giải này.

Loose Coupling quan trọng như thế nào trong hệ thống backend

SỬ DỤNG IOC CONTAINER

IOC CONTAINER LÀ GÌ?

IoC thì hiểu rồi đó, thế nó thêm chữ container vào làm gì nhỉ? Xe container chăng?

Chúng ta hiểu đơn giản, nó là cái hộp (box hay container) thật.

IoC Container (hay còn được gọi là DI Container) là một framework để thực hiện việc tiêm phụ thuộc tự động (automatic dependency injection). Nó quản lý việc tạo đối tượng (object creation) và thời gian sống của đối tượng, cũng như tiêm các phụ thuộc vào lớp khi cần.

Nghĩa là sao?

  • IoC —> Đảo ngược sự điều khiển
  • Dependency injection —> Implement thằng IoC để đảo ngược sự điều khiển, nhưng ông developer phải làm bằng tay (dùng new ở controller ở trên đó)
  • Và IoC Container —> nó vừa đảo ngược sự điều khiển và nó làm luôn nhiệm vụ tạo ra đối tượng và tự inject vào luôn. Chúng ta sẽ không thấy chữ “new” nữa

Nói dài hơn là thế này: IoC container tạo một đối tượng của lớp được chỉ định và cũng tiêm tất cả các đối tượng phụ thuộc thông qua một constructor, một thuộc tính hoặc một phương thức tại thời gian chạy và hủy nó vào thời điểm thích hợp. Điều này được thực hiện để chúng ta không phải tạo và quản lý các đối tượng một cách thủ công.

Cho nên khi chúng ta apply IoC Container, chúng ta hoàn toàn chuyển quyền điều khiển “control“ về framework. Container sẽ quản lý dependency và tiêm nó vào lúc chúng ta cần.

Thử apply 1 vài cái container xem nào :)))

MỘT VÀI VÍ DỤ

Ví dụ khi apply PHP-DI Container:

// binding / mapping, ...
[
    'PluginRepositoryInterface' => MySQLPluginRepository::class,
    'UserRepositoryInterface'   => MySQLUserRepository::class,
    'FileRepositoryInterface'   => InMemoryFileRepository::class,
    ...
];

$container = new DI\Container();
$use_case = $container->get('ViewPlugin'); // Đúng 1 dòng này

Cái ViewPlugin ở trên nó phụ thuộc cả chục dependency nhớ không các bạn? Bây giờ với việc apply PHP-DI container, chúng ta chỉ cần config chỉ định cho container biết là interface nào sẽ được map với class nào trong quá trình running. Còn việc new new new chục cái dependency và tự động inject vào khi cần đã thuộc về container, chúng ta không cần làm gì nữa. Chỉ cần đúng 1 dòng: $use_case = $container->get('ViewPlugin');

Còn đây là ví dụ khi dùng Spring IoC Container:

@Service
public class ViewPlugin {

    private PluginService pluginService;
    private FileRepositoryInterface fileRepository;

    ...
    @Autowired
    public ViewPlugin(
        PluginService pluginService, 
        @Qualifier("InMemoryFileRepository") FileRepositoryInterface fileRepository
    ) {
        this.pluginService = pluginService;
        this.fileRepository = fileRepository;
    }

    public void execute(String pluginId) {
        // ...
    }
}

Tương tự trong Spring IoC Container, chúng ta cần chỉ định class nào sẽ được map với interface bằng Anotation @Qualifier, và dùng @Autowired để thông báo cho container biết rằng chổ này tôi cần tiêm 1 số dependency vào.

Ok tới đây cũng gần kết rồi, bài viết thì cũng dài, bạn nào đọc được dòng này và “wow” lên thì xin chúc mừng bạn đã thấu hiểu được 1 trong những concept quá là đỉnh khi làm việc với OOP và cụ thể hơn là thiết kế backend.

TÚM CÁI VÁY LẠI MỘT XÍU CHO DỄ NHỚ VỀ LOOSE COUPLING

LOOSE COUPLING GIÚP HỆ THỐNG CỦA CHÚNG TA XỊN HƠN!!!!

  • IoC: Đảo ngược sự điều khiển, thường là đùn đẩy trách nhiệm điều khiển cho framework làm luôn
  • DI: Tiêm đối tượng vào class/module
  • DIP: Xem xét xử dụng abstraction (interface)
  • IoC Container: Một cái hộp – tạo, quản lý, và tự động inject dependency khi cần

Và một điều cũng quan trọng, loose coupling là trạng thái lỏng lẽo thôi, chứ không phải là hoàn toàn không phụ thuộc nữa. Đó chính là đặc tính của lập trình hướng đổi tượng vì interface thường ít bị thay đổi hơn….

Và không phải lúc nào chúng ta cũng phải sử dụng interface đâu nhé. Việc này là phải cân nhắc, ví dụ interface thường được dùng ở tầng repository và tầng service. Và một số nơi khác khi chúng ta muốn switch qua lại giữa các implementation (giống như lúc thì xài cái này, lúc xài cái kia nhưng cả 2 cái đều có hành vi là giống nhau, chỉ khác nhau phần logic ruột – method body).

KẾT LUẬN

Để quản lý tốt dependency khi thiết kế phần mềm (đạt được loose coupling), chúng ta có thể dùng:

  • DIP (hiểu đơn giản là dùng interface hoặc abstract khi cần thiết)
  • Dependency injection (DI là 1 design pattern của IoC) để inject dependency vào class.
  • Khi đã sử dụng 2 ông trên chúng ta đã đạt được loose coupling. Và để quản lý việc khởi tạo, tự động inject dependency, chúng ta sử dụng thêm IoC Container là mọi thứ … ỔN

VÀ ĐÂY LÀ KIẾN TRÚC CỦA HẦU HẾT BACKEND FRAMEWORK HIỆN TẠI.

Cám ơn các bạn đã đọc bài viết.

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

Lập trình Web nên học ngôn ngữ nào là phù hợp?

Với xu hướng phát triển hiện nay, lập trình Web trở thành một lựa chọn hấp dẫn dành cho các bạn trẻ theo đuổi ngành lập trình. Để có thể tạo ra được các Website hoàn thiện theo yêu cầu của người dùng, lập trình viên cần học một hoặc nhiều ngôn ngữ lập trình khác nhau. Bài viết hôm nay chúng ta cùng nhau đi trả lời cho câu hỏi Lập trình Web nên lựa chọn học ngôn ngữ lập trình nào nhé.

Cấu trúc Website

Trước tiên chúng ta cùng tìm hiểu về cấu trúc cơ bản của một Website phổ biến hiện nay. Đa số website thường gồm 2 phần khá tách biệt: Frontend, Backend.

Cấu trúc Website

Frontend là phần giao diện hiển thị và tương tác với người dùng; được xây dựng bằng bộ 3 huyền thoại HTML, CSS và JavaScript. Backend là phần bao gồm ứng dụng chạy trên máy chủ và tương tác với cơ sở dữ liệu; được xây dựng với đa dạng công nghệ cùng ngôn ngữ lập trình như Java, PHP, Python, Ruby, … Để trở thành một lập trình viên Web, bạn có thể lựa chọn tham gia xây dựng Frontend hoặc Backend hay tham gia cả 2 phần trên và trở thành một Fullstack Developer. Chúng ta cùng đi sâu vào từng phần để xem ngôn ngữ lập trình cần học nhé.

  9 Câu Hỏi Phỏng Vấn Frontend Developer Có Thể Bạn Chưa Biết

  Tiêu chuẩn Coding Backend hiệu quả là gì

Frontend

Nhắc đến Frontend là nhắc đến HTML, CSSJavaScript. HTML – Hypertext Markup Language và CSS – Cascading Style Sheets là 2 ngôn ngữ cơ bản nhất để xây dựng nên giao diện của một Website. 

Frontend

HTML và CSS không phải là ngôn ngữ lập trình, trong khi HTML là ngôn ngữ đánh dấu siêu văn bản, sử dụng các thẻ để xác định các loại nội dung khác nhau; còn CSS là một ngôn ngữ định dạng sử dụng để mô tả cách trình bày như màu sắc, cách bố trí hay phông chữ,… HTML và CSS khi kết hợp với nhau sẽ tạo ra nội dung cần hiển thị lên cho người dùng; và để bắt được những tương tác, phản hồi từ người dùng thì chúng ta cần một ngôn ngữ lập trình, đấy chính là JavaScript. Như vậy để làm được Frontend Web, trước tiên chúng ta cần học 3 ngôn ngữ HTML, CSS và JavaScript.

Sau khi nắm vững được 3 trụ cột này thì bạn có thể lựa chọn một trong những các thư viện, framework dành cho việc lập trình Frontend, có thể kể ra dưới đây:

Hầu hết các thư viện hay framework dành cho Frontend đều đã bao gồm các thành phần CSS, HTML và JavaScript, ngoài ra nó giúp hỗ trợ bạn thiết kế các UI/UX một cách nhất quán, đảm bảo responsive trên nhiều thiết bị màn hình khác nhau và tối ưu hóa khả năng làm việc teamwork.

Tham khảo nhiều vị trí JavaScript Developer hấp dẫn trên TopDev

Backend

Nếu như với Frontend, JavaScript được xem là ngôn ngữ chủ đạo; thì Backend lại cho phép bạn có nhiều lựa chọn về mặt ngôn ngữ và công nghệ. Bản chất của Backend là tạo ra ứng dụng chạy trên máy chủ (server), mỗi server sẽ được cài đặt những hệ điều hành khác nhau; từ đó có nhiều công nghệ, framework cùng ngôn ngữ khác nhau được sử dụng.

Backend

Có rất nhiều ngôn ngữ có thể viết được ứng dụng Backend, phổ biến là Java, JavaScript, Python, PHP, C#, Ruby, … đi kèm với đó là đa dạng các thư viện, framework phong phú. Ví dụ như với JavaScript, chúng ta có thể lựa chọn NodeJS, Express hay Next là những framework phổ biến. PHP thì có Laravel, CodeIgniter, CakePHP hay Zend,…

Khi lựa chọn một ngôn ngữ để học làm Backend, trước tiên hãy cân nhắc đến mức độ phổ biến của ngôn ngữ đó trong những công ty, tổ chức mà bạn định hướng sẽ làm việc. Ví dụ những công ty startup mới phát triển sẽ thường sử dụng ngôn ngữ JavaScript, Java,… cùng các framework opensource miễn phí, triển khai trên các hosting sử dụng hệ điều hành mã nguồn mở để tiết kiệm chi phí.

Ngược lại đối với các công ty, khách hàng có đòi hỏi cao về bảo mật hay sử dụng các hệ thống chạy Window Server thì bạn nên lựa chọn học C#, sử dụng dotNet cho việc phát triển website. Ngoài ra các yếu tố về cộng đồng cũng sẽ ảnh hưởng đến lựa chọn học ngôn ngữ của bạn, ví dụ như ở Việt Nam, cộng đồng phát triển web bằng PHP rất lớn mạnh, vì thế đấy cũng là lý do mà nhiều bạn lựa chọn sử dụng.

Fullstack

Nếu bạn muốn “cân” cả dự án, làm bất cứ task nào trong một hệ thống website thì lựa chọn trở thành Fullstack Developer là dành cho bạn. Điều đó có nghĩa là bạn phải chọn học 1 ngôn ngữ có thể làm được Frontend và thêm 1 ngôn ngữ có thể làm được Backend. Lựa chọn tiện lợi nhất cho bạn là sử dụng JavaScript, bạn có thể làm được cả 2 phía; mặc dù vậy vẫn có nhiều sự khác nhau trong logic xử lý cũng như tư duy lập trình giữa 2 phần này.

Fullstack

Ngoài ra còn 1 yếu tố bạn nên tham khảo là việc thông thường sẽ có các cặp đôi framework, thư viện Frontend và Backend đi kèm với nhau. Chẳng hạn như PHP được ưa chuộng kết hợp với Vue.js hay Spring Boot (một Java framework viết ứng dụng Web Backend) đi với React. Đây là lựa chọn của một số khách hàng, công ty cho việc phát triển hệ thống Website; vì thế nếu bạn có dự định apply vào tổ chức đó là trở thành Fullstack Developer thì cũng cần tìm hiểu trước về mặt công nghệ và ngôn ngữ họ sẽ sử dụng để có lựa chọn hợp lý.

Kết bài

Như vậy qua bài viết này chúng ta đã cùng nhau trả lời được cho câu hỏi Lập trình Web nên học ngôn ngữ nào. Có nhiều lựa chọn dành cho bạn, điều quan trọng là hãy nắm được kỹ năng lập trình và học hỏi được hết những kiến thức cần thiết của ngôn ngữ bạn lựa chọn. Hy vọng bài viết hữu ích dành cho bạn, 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 lương cao, đãi ngộ hấp dẫn trên TopDev!

7 chính sách thu hút nhân tài IT đột phá cho doanh nghiệp

Tuyển dụng nhân tài trong lĩnh vực công nghệ thông tin (IT) là một trong những vấn đề khó khăn mà nhiều doanh nghiệp đang phải đối mặt. Sự phát triển nhanh chóng của công nghệ đã tạo ra nhu cầu ngày càng tăng về nhân lực chất lượng cao trong lĩnh vực này. Tuy nhiên, việc tìm kiếm và tuyển dụng nhân tài IT phù hợp vẫn còn gặp nhiều khó khăn do sự khan hiếm của nguồn nhân lực chất lượng.

Do đó, việc triển khai các chính sách thu hút nhân tài công nghệ ngay lúc này là vô cùng cần thiết. Vậy các doanh nghiệp cần đưa ra những chính sách gì? Làm thế nào để tạo được sự chú ý cho các nhân tài IT? Tất cả sẽ có trong bài viết dưới đây!

Vì sao tuyển dụng nhân tài IT ngày càng khó?

Có một số lý do khiến việc tuyển dụng nhân tài IT ngày càng khó khăn. Lý do đầu tiên là nhu cầu về nhân tài IT đang tăng lên nhanh chóng, trong khi nguồn cung lại không đủ để đáp ứng nhu cầu. Theo báo cáo thị trường IT Việt Nam 2022 của TopDev, từ năm 2022 – 2024, Việt Nam sẽ vẫn thiếu hụt 150.000 – 195.000 lập trình viên / kỹ sư hàng năm. Điều này là do sự phát triển nhanh chóng của công nghệ, khiến các doanh nghiệp cần nhiều nhân tài IT hơn để phát triển và duy trì các hệ thống và ứng dụng của họ.

tuyển dụng IT

Một lý do khác khiến việc tuyển dụng nhân tài IT ngày càng khó khăn là yêu cầu về trình độ của các vị trí IT ngày càng cao. Cũng theo báo cáo của TopDev, hiện nay chỉ có 35% trong tổng số 57.000 sinh viên chuyên ngành Công nghệ thông tin đáp ứng được yêu cầu của doanh nghiệp. Các doanh nghiệp đang tìm kiếm những nhân viên có trình độ chuyên môn cao, có kinh nghiệm và có thể làm việc độc lập cũng như theo nhóm. Điều này khiến việc tìm kiếm những nhân tài IT phù hợp trở nên khó khăn hơn, đặc biệt là đối với các doanh nghiệp nhỏ.

Ngoài ra, các nhân viên IT hiện nay cũng có xu hướng nhảy việc nhiều hơn, khiến việc giữ chân họ cũng trở nên khó khăn hơn. Điều này là do các nhân viên IT có nhiều cơ hội việc làm với mức lương cao hơn, điều kiện làm việc tốt hơn và cơ hội thăng tiến hơn.

7 chính sách thu hút nhân tài IT cho doanh nghiệp

Chính sách thu hút và giữ chân nhân tài IT cho doanh nghiệp là một yếu tố quan trọng để nâng cao hiệu suất và cạnh tranh của các doanh nghiệp trong ngành công nghệ thông tin. Dưới đây là một số chính sách thường được các doanh nghiệp áp dụng nhất để thu hút nhân tài:

Mở rộng phạm vi tuyển IT

Việc mở rộng phạm vi tuyển dụng ra nhiều nơi như tuyển dụng IT tại HCM và các khu vực khác. Điều này giúp định hình các khu vực tiềm năng. Đồng thời, đó cũng được xem là một chính sách thu hút nhân tài thông minh trong thời điểm đầy cạnh tranh như hiện nay.

tuyển dụng IT
Mở rộng phạm vi là cách thức hiệu quả

Từ việc mở rộng, nhà tuyển dụng ngành IT có thể khoanh vùng, tìm kiếm, chọn lọc và khai thác nguồn lực ứng viên một cách tốt hơn.

Thế nhưng, các doanh nghiệp cần xây dựng một quy chuẩn chung về cách thức hoạt động nhân sự. Từ thiết kế JD, và phát triển thương hiệu nhà tuyển dụng nhằm thu hút ứng viên tốt hơn. Có như thế thì dù là ứng viên mới hay đến các freelancer IT đều có thể nắm bắt được thông tin tuyển dụng hiệu quả.

Mức đãi ngộ cần được cân nhắc

Các công ty/doanh nghiệp sẵn sàng chi những mức lương ổn định, đáp ứng nhu cầu của ứng viên nếu họ thật sự phù hợp với tiêu chuẩn của doanh nghiệp. Đồng thời, việc đính kèm các quyền lợi về đãi ngộ, môi trường làm việc, lộ trình phát triển – thăng tiến trong sự nghiệp,… là các yếu tố quan trọng.

Tuy vậy, nên đảm bảo việc cân nhắc. Nhà tuyển dụng dựa vào kinh nghiệm, kỹ năng và tiềm năng phát triển của ứng viên. Các vị trí như tuyển dụng Data Scientist, Senior Developer,… đều là những vị trí nhận được sự quan tâm lớn từ doanh nghiệp.

Bên cạnh khía cạnh lương thưởng, mỗi doanh nghiệp cần đảm bảo cung cấp các công cụ công nghệ hỗ trợ họ trong việc thực hiện các nhiệm vụ. Tất cả những yếu tố đó sẽ góp phần tạo ra sự thú hút lớn đối với ứng viên IT.

Đưa ra những thách thức tuyển dụng

tuyen dung it da nang
Thách thức được xem là yếu tố tạo ra sự thu hút lớn đối với ứng viên

Thách thức trong tuyển dụng là một chính sách thu hút nhân tài các doanh nghiệp thường bỏ qua. Các ứng viên IT tài năng họ rất thích sự thách thức. Vì vậy, nhà tuyển dụng mảng IT và doanh nghiệp cần nắm bắt điều này để tạo ra sự thú vị trong quá trình tuyển chọn nhân lực. Ứng viên đều mong muốn thể hiện năng lực của mình. Do vậy, việc đưa ra các thách thức để giúp họ trải nghiệm bản thân, thử sức với nhiều điều mới sẽ tạo ra sự kết nối với họ tốt hơn. Kỹ năng viết CV IT Developer cũng là một trong những thử thách thú vị đối với ứng viên.

  Cách đăng tin tuyển dụng trên Facebook với 5 tuyệt chiêu tối ưu

  Cách tìm ứng viên trên LinkedIn không phải HR nào cũng biết

Chính cơ sở đó mà các doanh nghiệp cần lồng ghép khéo các thử thách trong tuyển dụng.

Không đơn thuần chỉ là phỏng vấn, các bài test. Hãy thật sự quan tâm đến khía cạnh tạo ra trải nghiệm cho ứng viên. Điều này cũng có ý nghĩa quan trọng vì họ được tiếp xúc với các kiến thức chuyên môn, những công việc thực tế mình sẽ phải đối mặt nếu trúng tuyển.

Tuyển người đúng nơi – Tìm người đúng chỗ

Hầu hết những nhân tài IT đều đang ở thế bị động. Đó cũng chính là lý do việc thu hút ứng viên trở nên khó khăn hơn. Nhà tuyển dụng cần có những chiến lược cụ thể hơn nhằm tăng khả năng tiềm kiếm ứng viên. Phải tối ưu hóa quá trình tương tác giữa ứng viên để chiêu mô những ứng viên tài năng nhất cho tổ chức.

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

Hãy tuyển các ứng viên IT đúng nơi và đúng thời điểm. Sau đây là list dành cho lập trình viên hay lui tới. 

+ Các website công nghệ cộng đồng

+ Diễn đàn công nghệ

+ Các mạng xã hội về việc làm

+ Sự kiện công nghệ cộng đồng tại địa phương

Sức mạnh từ Event IT (Sư kiện công nghệ)

Event IT là một chính sách thu hút nhân tài doanh nghiệp không thể bỏ qua. Sự kiện công nghệ luôn tạo ra sức hút lớn đối với những ứng viên IT. Mỗi doanh nghiệp có thể kết hợp sự kiện để phát triển thương hiệu nhà tuyển dụng IT. Đồng thời, tạo cơ hội cho các ứng viên trải nghiệm thực tế thông qua sự kiện.

Ngoài việc có cơ hội tiếp xúc, kết nối với những nhân tài công nghệ, đây còn là dịp để bạn có thể giới thiệu và quảng bá con người cũng như văn hóa của công ty mình. 

Sự kiện Vietnam Mobile Day 2023 do TopDev tổ chức
Sự kiện Vietnam Mobile Day 2023 do TopDev tổ chức

Xây dựng thương hiệu nhà tuyển dụng

Thương hiệu nhà tuyển dụng là hình ảnh mà doanh nghiệp thể hiện ra bên ngoài, thể hiện giá trị, văn hóa và môi trường làm việc của doanh nghiệp. Một thương hiệu nhà tuyển dụng IT tích cực sẽ giúp doanh nghiệp thu hút được nhiều ứng viên tiềm năng.

Doanh nghiệp có thể xây dựng thương hiệu nhà tuyển dụng IT tích cực bằng cách:

  • Đăng tải thông tin về doanh nghiệp, văn hóa và môi trường làm việc trên các trang web tuyển dụng, mạng xã hội và các phương tiện truyền thông khác.
  • Tham gia các hội nghị, hội thảo về công nghệ và nhân sự.
  • Tổ chức các chương trình đào tạo và phát triển nhân tài IT.
  • Hỗ trợ nhân viên IT tham gia các hội nghị, hội thảo và các sự kiện về công nghệ.

Chủ động thu hút những ứng viên không có nhu cầu tìm việc

Một trong những cách thu hút nhân tài IT hiệu quả là chủ động tiếp cận và thu hút những ứng viên không có nhu cầu tìm việc. Thay vì chỉ nhắm vào những người đang tìm kiếm việc làm, công ty có thể tiếp cận những ứng viên đang làm việc trong các công ty đối thủ, những cựu nhân viên đã nghỉ việc, hoặc những người có kỹ năng đặc biệt mà công ty đang tìm kiếm. Điều này giúp công ty tăng cơ hội tìm được nhân tài phù hợp và có lợi thế cạnh tranh.

Công ty có thể tìm cách gặp gỡ và giao tiếp với những ứng viên không có nhu cầu tìm việc thông qua các sự kiện networking, hội thảo chuyên đề, hoặc các trang mạng xã hội chuyên về lĩnh vực công ty hoạt động. Điều này giúp xây dựng một mối quan hệ gắn kết và tăng khả năng thu hút họ khi có nhu cầu tìm việc trong tương lai.

Tổng kết

Trong bối cảnh nguồn cung và cầu nhân sự IT chất lượng mất cân bằng, cuộc đua thu hút nhân tài CNTT ngày càng ác liệt, yêu cầu các nhà quản lý phải áp dụng chiến thuật mới để giành được lợi thế cạnh tranh. Hy vọng rằng những chính sách thu hút nhân tài trên sẽ giúp các doanh nghiệp nhanh chóng tìm kiếm được đội ngũ nhân lực IT đủ mạnh mẽ và đóng góp cho sự phát triển của doanh nghiệp.


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

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

Xem thêm việc làm Developers hàng đầu tại TopDev

Corepack là gì và tác dụng của nó trong Node.js

Bài viết được sự cho phép của tác giả Tống Xuân Hoài

Vấn đề

npm là trình quản lý gói được tích hợp vào bộ cài Node.js đã từ rất lâu. Hầu hết chúng ta đều sử dụng npm để tải về các gói có trên npm registry, hoặc mỗi khi cần cài đặt lại toàn bộ các gói phụ thuộc sử dụng trong dự án. npm có những cơ chế bảo mật cao như quyền truy cập vào các gói riêng tư (private), cơ chế xác thực và xác minh hai lớp…

Tiện lợi là thế nhưng npm cũng có một số hạn chế như tốc độ cài đặt gói chậm, tạo ra node_modules có dung lượng tương đương với hố đen vũ trụ… kèm theo một bộ cấu hình phức tạp. Chính vì thế nhiều trình quản lý gói khác ra đời nhằm khắc phục những điểm yếu đó, đơn cử như Yarn hoặc pnpm.

Trong khi yarn nổi tiếng với tốc độ cài đặt gói thì pnpm lại có cơ chế làm giảm dung lượng của node_modules thông qua việc chia sẻ thư mục. Giờ đây chúng ta không nhất thiết phải sử dụng npm theo mặc định nữa, mà có thể lựa chọn các trình quản lý khác theo sở thích hoặc nhu cầu của dự án.

Một tin vui nữa là kể từ Node.js 14, chúng ta không cần phải cài đặt yarn hoặc pnpm một cách thủ công nữa mà nó đã được tích hợp sẵn vào trong Node.js với cờ thử nghiệm (Stability: 1) với tên gọi Corepack. Có thể sẽ mất thêm một thời gian nữa thì Corepack mới được gán cờ ổn định, nhưng ngay bây giờ hãy cùng tôi tìm hiểu xem Corepack là gì và sử dụng nó như thế nào nhé.

  Bàn về câu lệnh npm run build - tại sao cần phải build?

  6 câu lệnh NPM hữu ích – Web dev mà bỏ qua sẽ vô cùng tiếc

Corepack là gì?

Corepack hiện đang là một công cụ thử nghiệm giúp quản lý các trình quản lý gói. Nó đóng vai trò như là một proxy. Khi được gọi, nó sẽ xác định xem trình quản lý gói nào được định cấu hình cho dự án hiện tại, cài đặt nếu chưa có và cuối cùng chạy nó. Tất cả những gì người dùng thấy là kết quả như đang tương tác với trình quản lý gói trực tiếp.

Cốt lõi của Corepack là:

  • Không cần thiết phải cài đặt thủ công trình quản lý gói từ những công cụ cài đặt bên ngoài nữa.
  • Đảm bảo rằng mọi người trong nhóm sẽ sử dụng chính xác phiên bản trình quản lý gói thông qua thiết lập trong “package.json”.

Tham khảo việc làm NodeJS tại Hồ Chí Minh lương cao, hấp dẫn!

Cách sử dụng

Do đang là thử nghiệm, Corepack cần được kích hoạt thông qua lệnh corepack enable, chỉ cần nhập vào terminal:

$ corepack enable

Ngay lập tức Corepack sẽ được kích hoạt, bạn có thể kiểm tra version của yarn hay pnpm ngay lúc này:

$ yarn --version
1.22.19

$ pnpm --version
8.5.1

Hiện tại, Corepack chỉ hỗ trợ hai trình quản lý gói là yarn và pnpm. Nếu không muốn sử dụng nữa, chỉ cần chạy lệnh corepack disable.

$ corepack disable

Để xác định trình quản lý gói được sử dụng trong dự án, bạn có thể thiết lập nó thông qua thuộc tính “packageManager” có trong package.json. Mở package.json ra và kiểm tra xem có thuộc tính packageManager chưa, nếu chưa thì hãy thêm vào:

{
   ...
   "packageManager": "yarn",
   ...
}

Hành động này đồng nghĩa với việc bạn cấu hình yarn làm trình quản lý gói mặc định, nếu cố tình sử dụng pnpm trong dự án để cài đặt hoặc làm bất cứ điều gì đi nữa thì một thông báo lỗi sẽ bật ra màn hình yêu cầu phải sử dụng yarn.

Điều này ngoại lệ với npm, nghĩa là bạn vẫn có thể sử dụng lệnh npm trong khi “packageManager” đang được thiết lập là yarn hoặc pnpm.

Tổng kết

npm là trình quản lý gói được tích hợp sẵn trong Node.js. Mặc dù là công cụ mạnh mẽ nhưng npm trong tránh khỏi những thiết sót. Lý do đó khiến Corepack ra đời mang theo hai trình quản lý gói là yarn và pnpm. Giờ đây không cần phải cài đặt thủ công trình quản lý gói yêu thích nữa mà có thể sử dụng nó ngay trong Node.js.

Bài viết gốc được đăng tải tại 2coffee.dev

Xem thêm:

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

Cách tìm ứng viên trên LinkedIn không phải HR nào cũng biết

Cách tìm ứng viên trên LinkedIn như thế nào hiệu quả nhất? LinkedIn là một nền tảng thông minh với nhiều tính năng nổi bật. Ngày càng nhiều xu hướng và thông tin tuyển dụng được cập nhật; truyền tải trên LinkedIn đã tạo ra sự tương tác lớn giữa ứng viên và nhà tuyển dụng. Cùng TopDev tìm hiểu về những bí kíp giúp khai thác và tuyển dụng trên LinkedIn hiệu quả nhất nhé. 

Bên cạnh việc đặt ra những target cụ thể; đối tượng hướng đến rõ ràng, nhà tuyển dụng cần có những kinh nghiệm trong việc tận dụng nguồn tài nguyên LinkedIn; nhằm gia tăng hiệu suất cho công tác tuyển dụng ứng viên cho các vị trí phù hợp. 

Vì sao HR nên tuyển dụng nhân sự trên LinkedIn?

Cách tìm ứng viên trên LinkedIn

LinkedIn đã trở thành một trong những mạng xã hội chuyên nghiệp hàng đầu thế giới, kết nối hàng triệu nhà quản lý, chuyên gia và nhân viên từ khắp nơi trên thế giới. Việc sử dụng LinkedIn trong quá trình tuyển dụng mang lại nhiều lợi ích cho các chuyên viên nhân sự (HR).

Dưới đây là một số lý do vì sao HR nên sử dụng LinkedIn để tuyển dụng:

  • Quy mô mạng lưới chuyên nghiệp: LinkedIn là mạng xã hội với mạng lưới kết nối rộng lớn và chuyên nghiệp, giúp HR mở rộng mối quan hệ với ứng viên tiềm năng, nhà quản lý và chuyên gia trong lĩnh vực. Điều này giúp tạo ra một nguồn cung ứng ứng viên chất lượng và đa dạng.
  • Tiếp cận nguồn ứng viên chất lượng: LinkedIn cho phép HR tiếp cận một đối tượng ứng viên đa dạng và chất lượng, bao gồm cả những người đang làm việc tại các công ty, freelancer và người tìm kiếm việc làm mới.
  • Cung cấp thông tin chi tiết về ứng viên: Hồ sơ LinkedIn của ứng viên thường cung cấp thông tin chi tiết về họ, bao gồm học vấn, kinh nghiệm làm việc, kỹ năng, dự án đã tham gia và các hoạt động xã hội. Điều này giúp HR có cái nhìn toàn diện về ứng viên trước khi quyết định tiến tới giai đoạn phỏng vấn.
  • Quảng cáo việc làm: LinkedIn cung cấp nền tảng quảng cáo việc làm, cho phép HR đưa thông tin về các vị trí tuyển dụng trực tiếp đến những ứng viên có kỹ năng phù hợp.

Cách tìm ứng viên trên LinkedIn hiệu quả cho HR

1. Checklist các ứng viên tiềm năng về công ty mà họ đang làm hoặc đã làm

Có rất nhiều cách mà bạn có thể khai thác như hỏi Hiring Manager; hay xem lại profile/portfolio của những bạn đã đảm nhận vị trí tương tự. Ngoài ra, bạn có thể lên các trang job tìm việc làm (nền tảng job board) để tra cứu về các kỹ năng tương ứng với skill mình đang ứng tuyển.

tìm việc trên linkedin
Tìm việc trên Linkedin

Việc xem xét như vậy có thể giúp bạn khai thác thêm về sở thích, tính cách, mối quan hệ và tầm ảnh hưởng hay những đánh giá về chuyên môn về ứng viên đó. Và biết đâu bạn sẽ biết được những mong muốn của họ cho từng vị trí tương ứng; lý do nào họ rời bỏ doanh nghiệp hiện tại và chấp nhận bắt đầu lại,… Điều này rất quan trọng đấy! Vì giúp nhà tuyển dụng có cái nhìn chính xác hơn về các ứng viên.

  Những Thông Tin Cơ Bản Giúp Tuyển Dụng Hiệu Quả Trên LinkedIn

2. Quan tâm đến tên công ty của ứng viên

Ví dụ, bạn đang muốn tuyển dụng IT. Cụ thể, đó là vị trí lập trình về iOS Developer có kinh nghiệm triển khai, thực hiện các sản phẩm hướng đến số lượng người dùng lớn (khoảng 1 triệu users), bạn có thể tiến hành các bước như sau:

Tìm hiểu xem đâu là sản phẩm mobile app mà có nhiều người dùng? Việc này không quá khó nếu bạn hay dùng app mobile; và chịu suy nghĩ một chút. Bạn nên liệt kê ra hết các app bạn biết. Đồng thời đi hỏi thêm những bạn làm về lập trình trong công ty.

  Cách đăng tin tuyển dụng trên Facebook với 5 tuyệt chiêu tối ưu

Đồng thời, từ việc tìm tên app, bạn có thể tìm hiểu thêm về tên công ty. Đây là một điểm thuận lợi giúp tối ưu hóa thông tin ứng viên. Vì có rất nhiều trường hợp trên profile ứng viên không để tên app mà chỉ để tên công ty sở hữu app đó.

3. Liên kết từ khóa và kết nối ứng viên

tìm việc trên linkedin
Tìm việc trên linkedin

Khi đã tìm hiểu về tên công ty, tên những sản phẩm (tức là source); mà ở đó có thể có những ứng viên mình cần tìm thì việc tiếp theo cần làm là search theo các từ khóa và bắt đầu tiến hành kết nối. Có thể thực hiện theo trình tự sau:

1. Viết đoạn mô tả ngắn để giới thiệu về doanh nghiệp và mục đích kết nối ứng viên, đó là bước đầu gây được thiện cảm.

2. Chú trọng đến thời điểm kết nối ứng viên. Cụ thể thời điểm “vàng” tạo ra hiệu quả kết nối với các bạn làm IT là từ 10PM trở đi.

3. Tạo sự thu hút bằng visual hình ảnh. Đánh vào các Recruiter là nữ thì việc lựa chọn những avatar trẻ trung, dễ thương là điều cần thiết.

4. Đăng tin tuyển dụng trong các group trên LinkedIn

Cách tìm ứng viên trên LinkedIn

Đăng tin tuyển dụng lên các nhóm trên LinkedIn là một cách hiệu quả để tìm kiếm và tiếp cận các ứng viên có kỹ năng phù hợp trong cộng đồng chuyên ngành. Dưới đây là một số cách tìm ứng viên trên LinkedIn thành công:

  1. Xác định những nhóm liên quan: Tìm các nhóm LinkedIn liên quan đến lĩnh vực công việc, ngành nghề, hoặc vị trí tuyển dụng mà bạn đang quan tâm. Hãy chọn những nhóm có số lượng thành viên lớn và hoạt động tích cực để tăng khả năng đạt đến nhiều người.
  2. Tham gia và tương tác: Trước khi đăng tin tuyển dụng, hãy tham gia vào những cuộc thảo luận trong nhóm. Chia sẻ kiến thức, bình luận và tương tác với các thành viên khác để xây dựng tên tuổi và uy tín trong cộng đồng.
  3. Tạo nội dung hấp dẫn: Trước khi đăng tin, hãy chắc chắn bạn đã chuẩn bị nội dung tuyển dụng thú vị và hấp dẫn. Điều này bao gồm mô tả vị trí công việc, yêu cầu, quyền lợi và các thông tin khác mà ứng viên quan tâm.
  4. Sử dụng hình ảnh và định dạng hấp dẫn: Để tin tuyển dụng nổi bật, hãy sử dụng hình ảnh và định dạng văn bản hấp dẫn. Một hình ảnh ấn tượng và một định dạng dễ đọc sẽ thu hút sự chú ý.
  5. Chọn thời điểm đăng: Nghiên cứu và tìm hiểu thời điểm mà những thành viên tích cực nhất trong nhóm thường hoạt động trên LinkedIn.
  6. Hỗ trợ và tương tác: Khi có ứng viên quan tâm hoặc đặt câu hỏi về tin tuyển dụng của bạn, hãy hồi đáp nhanh chóng và chuyên nghiệp. Điều này thể hiện tính tận tâm và quan tâm của bạn đối với ứng viên.

5. Cách tìm ứng viên trên LinkedIn bằng hình thức trả phí

Cách thức này thường được áp dụng bởi các doanh nghiệp có quy mô lớn hoặc ngân sách tuyển dụng cao. Sự khác biệt giữa tài khoản trả phí và tài khoản miễn phí trên LinkedIn nằm ở chức năng InMail. Trong trường hợp sử dụng tài khoản miễn phí, bạn sẽ phải dựa vào các mối quan hệ chung nếu muốn tiếp cận ứng viên nằm ngoài mạng lưới kết nối của mình.

Tuy nhiên, khi bạn sử dụng tài khoản trả phí trên LinkedIn, bạn có khả năng tương tác trực tiếp với họ qua chức năng InMail. LinkedIn cung cấp hai loại tài khoản trả phí: Tài khoản Premium và Tài khoản Recruiter.

Phải làm gì khi gặp phải vấn đề Limited (bị giới hạn tìm kiếm) trên LinkedIn?

Cách tìm ứng viên trên LinkedIn

Khi tuyển dụng trên LinkedIn không tránh khỏi những vấn đề phát sinh ngoài ý muốn. Giới hạn tìm kiếm là một vấn đề nhiều HR thường gặp nhất. Vấn đề này do việc kết nối/search quá nhiều sẽ bị LinkedIn giới hạn phạm vi tìm kiếm. Đừng quá lo lắng, hãy giải quyết bằng những cách thức như sau:

Giải pháp 1 – Cách thức không tốn phí

  9 kênh tuyển dụng IT hiệu quả bạn nên sử dụng

Bạn có thể linh động và tạo nhiều hơn 1 profile trên LinkedIn. Tất nhiên, bạn cần dành thời gian hoạt động (nuôi dưỡng tài khoản). Khi gặp phải trường hợp bị giới hạn, bạn có thể chuyển sang các tài khoản khác. Đồng thời, copy thông tin truy cập ứng viên để tiếp tục xem contact.

Tạo thêm profile “fake” cũng được xem là một thủ thuật hoàn hảo vì có nhiều bạn chấp nhận lời mời LinkedIn bằng cách xem “Title”/Công việc của bạn.

Chẳng hạn, những bạn làm Digital Marketing bắt gặp một bạn có title là Digital Marketing Manager gửi contact cho mình thì khả năng bạn accept sẽ cao hơn khi thấy người gửi là HR/Recruiter. Mọi việc đều mang tính chất tương đối và vì thế, bạn cần cân nhắc thêm tình trạng này. 

Giải pháp  2 – Dùng Profile Premium

Một cách tìm ứng viên trên LinkedIn khác bạn có thể tham khảo là dùng Profile Premium Bạn sẽ được sử dụng Profile Premium free 1 tháng đầu nếu chấp nhận các điều khoản và thao tác cực kỳ đơn giản chỉ cần bạn có thẻ tín dụng. Trong tuần đầu tiên, khi còn được dùng miễn phí, bạn hãy tận dụng để mở rộng số lượng network đến mức tối đa.

Đặc biệt, sau thời gian dài tốn phí, LinkedIn sẽ cho bạn dùng free tài tài khoản premium 1 lần vì thế bạn nên kích hoạt lại. Chính sách này là có thể thay đổi tùy vào thời điểm.

  Vì sao lương khủng, đãi ngộ tốt vẫn khó tuyển IT?

Giải pháp 3 – Tận dụng sự hỗ trợ khai thác từ bên ngoài 

Ở thời điểm hiện tại, nhiều nhân sự IT đang không có đủ thời gian cũng như nguồn lực để tập trung phát triển trên LinkedIn được; cũng như sử dụng nhiều nguồn lưc hơn cho các kênh tuyển khác tích hợp nhanh hơn như Facebook, Email,… Đặc biệt là với các vị trí yêu cầu mức kinh nghiệm cao không thể đơn thuần chỉ lấy CV từ Facebook được nữa. Vì thế nhân sự IT cũng nên tìm kiếm một đơn vị tuyển dụng thứ 3 để hỗ trợ; lên một chiến lược “săn người trên LinkedIn” hiệu quả chặt chẽ hơn tuỳ theo đặc thù doanh nghiệp.

Để có thể hỗ trợ toàn diện và mang về nguồn CV chất lượng nhất cho nhà tuyển dụng IT, TopDev cho ra mắt hệ tuyển dụng tích hợp vừa tìm kiếm vừa sàng lọc ứng viên đa kênh. Doanh nghiệp sẽ không chỉ nhận được 1 – mà là 2 nguồn CV chất lượng cao được sàng lọc trước cho doanh nghiệp; đảm bảo đầu vào cho cả các vị trí Senior yêu cầu kinh nghiệm cao cả nguồn từ LinkedIn. Từ đó giúp nhà tuyển dụng nhanh chóng đạt chỉ tiêu tuyển dụng của mình và tìm được “người đồng hành” phù hợp.

  Top 8 các chuyên trang hàng đầu giúp nhà tuyển dụng IT hoàn thành KPI thần tốc

4. Thúc đẩy tính tương tác trên LinkedIn

  [Update] 5 xu hướng tuyển dụng IT 2024 không thể bỏ qua

Cách tìm ứng viên trên LinkedIn thành công hãy chịu khó tương tác hàng ngày trên vì bản chất đây là một mạng xã hội, bạn càng xuất hiện với những bài đăng chất lượng, đầu tư về mặt hình ảnh và nội dung thì chắc chắn post của bạn sẽ được react.

tìm việc trên linkedin
tìm việc trên linkedin

Không chỉ đơn thuần là một người chia sẻ, bạn hãy chủ động tương tác và bình luận; bày tỏ quan điểm một cách logic, khoa học về những thông tin, kiến thức của mình. Những comment có thể sẽ là sợi dây kết nối mạnh nhất. Có thể nó sẽ tạo ra sự đồng cảm, cũng có làm bùng nổ những tranh luận. Tuy vậy, mọi thứ đều hướng đến mục đích chung là tạo ra sự tương tác. Những công tác như lý giải sẽ có hiệu lực nếu tính tương tác và khả năng kết nối tốt. Khi tương tác tốt, bạn sẽ khoanh vùng được đâu là những ứng viên thật sự tiềm năng.

Nếu đã thành công trong việc kết nối ứng viên, đừng ngại ngần mà hãy chủ động trò chuyện. Một vài lời nhắn đầu tiên rất quan trọng, vì nó sẽ giúp việc gửi contact các vị trí ứng tuyển cho ứng viên một cách dễ dàng hơn.

Lời kết

Với độ kiểm soát và bảo mật chặt chẽ, LinkedIn thật sự là một nền tảng tốt dành cho công tác tuyển dụng trên. Nếu người dùng đảm bảo tuân thủ tốt những nguyên tắc; không vi phạm các tiêu chuẩn cộng đồng thì bạn có thể an tâm khi LinkedIn hoàn toàn hiệu quả trong việc đáp ứng nhu cầu tìm kiếm nguồn ứng viên trẻ; tiềm năng và phù hợp với từng vị trí trong doanh nghiệp. Hy vọng bài viết trên đã giúp bạn biết cách tìm ứng viên trên LinkedIn hiệu quả.


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

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

Xem thêm Tìm việc làm ngành it trên TopDev

Thuật toán tìm kiếm nội suy trong JavaScript

Trong lập trình, tìm kiếm phần tử trong mảng là một bài toán cơ bản với nhiều thuật toán có thể được sử dụng để giải quyết. Tìm kiếm nội suy (Interpolation Search) là một thuật toán được ưu chuộng sử dụng vì tốc độ tìm kiếm rất nhanh và chính xác. Trong bài viết này chúng ta cùng nhau tìm hiểu về thuật toán này và cách triển khai nó trong ngôn ngữ JavaScript nhé.

Tìm kiếm nhị phân

Interpolation Search là một giải thuật tìm kiếm nhanh, một biến thể cải tiến của tìm kiếm nhị phân (Binary Search). 2 giải thuật tìm kiếm này đều dựa trên nguyên tắc chia để trị (Divide and Conquer). Để giải thuật thực hiện được thì mảng đầu vào cần phải được sắp xếp sẵn từ trước.

Để hiểu về tìm kiếm nội suy, trước tiên chúng ta tìm hiểu Binary Search nhé.

Tìm kiếm nhị phân sẽ tìm kiếm một phần tử cụ thể bằng cách so sánh phần tử cần tìm với phần tử ở vị trí giữa (theo chỉ số) của mảng đầu vào:

  • Nếu bằng nhau => trả về kết quả tìm kiếm
  • Nếu phần tử cần tìm lớn hơn => thực hiện lặp lại bước trên với mảng con ở bên phải phần tử ở giữa
  • Nếu phần tử cần tìm nhỏ hơn => thực hiện lặp lại bước trên với mảng con ở bên trái phần tử ở giữa

Tìm kiếm nhị phân

Ở ví dụ trên, chúng ta tìm kiếm giá trị 2 trong mảng số từ 1 đến 10. Sẽ có 4 vòng lặp được thực hiện để tìm ra được giá trị cần tìm.

  5 cách chia một mảng lớn thành nhiều mảng nhỏ trong Javascript

Tìm kiếm nội suy

Ở trong ví dụ của tìm kiếm nhị phân chúng ta thấy rằng giải thuật không quan tâm đến giá trị đầu vào và luôn luôn chia đều mảng thành 2 phần bằng nhau. Thực tế nếu chúng ta đánh giá mảng số đầu vào cùng giá trị tìm kiếm thì có thể nhận thấy giá trị 2 sẽ có nhiều khả năng nằm ở vị trí đầu của mảng số vì nó gần hơn với giá trị bé nhất của mảng là 1 hơn là giá trị lớn nhất của mảng là 10. Nó cũng giống như việc khi chúng ta tra cứu từ điển, nếu cần tra cứu từ “Interpolation” thì chúng ta sẽ ưu tiên mở phần đầu của quyển từ điển hơn (do chữ cái I nằm gần đầu trong bảng chữ cái, cũng là thứ tự sắp xếp của quyển từ điển); ngược lại khi tra cứu từ “Search” thì ưu tiên sẽ là mở đến những trang gần cuối hơn.

Từ ý tưởng này, tìm kiếm nội suy cải tiến tìm kiếm nhị phân bằng cách tính toán trước vị trí dò trong mảng dựa trên giá trị cần tìm theo công thức:

Tìm kiếm nội suy

Trong đó:

  • arr: mảng giá trị cần tìm kiếm
  • low: chỉ mục thấp nhất của mảng
  • high: chỉ mục cao nhất của mảng
  • target: giá trị cần tìm kiếm
  • mid: chỉ số tính toán được để thực hiện so sánh

Chúng ta cùng đi vào ví dụ cụ thể nhé:

Cho mảng số đã được sắp xếp như dưới đây, chúng ta cần tìm kiếm giá trị 18 trong mảng.

Tìm kiếm nội suy

Tìm kiếm nội suy sẽ thực hiện các vòng lặp, với mỗi vòng lặp chúng ta có 2 bước như sau:

Bước 1: Tính toán chỉ số mảng cần so sánh theo công thức

Bước 2: So sánh giá trị cần tìm và phần tử trong mảng theo chỉ số tính toán

  • Nếu bằng nhau => trả kết quả đầu ra
  • Nếu phần tử của mảng có giá trị lớn hơn giá trị cần tìm => thực hiện lặp với mảng con bên trái 
  • Nếu phần tử của mảng có giá trị nhỏ hơn giá trị cần tìm => thực hiện lặp với mảng con bên phải

Về cơ bản thì điểm khác nhau duy nhất giữa tìm kiếm nội suy và tìm kiếm nhị phân chính là bước 1.

Với bài toán trên, giải thuật tìm kiếm nội suy sẽ cần chạy qua 2 vòng lặp như dưới đây:

Tìm kiếm nội suy

Vòng lặp đầu tiên, theo công thức thì mid sẽ cho giá trị được làm tròn là 

mid = 0 + (18 – 10) * (14 – 0) / (47 – 10) = 3

và phần tử trong mảng đưa ra để so sánh là giá trị 16. Do 16 < 18 (giá trị cần tìm) => mảng mới sử dụng sẽ bắt đầu từ 18 (vị trí phần tử thứ 4)

Tìm kiếm nội suy

Vòng lặp thứ 2,

mid = 4 + (18 – 18) * (14 – 4) / (47 – 18) = 0

Kết quả trả về đúng giá trị cần tìm ở vị trí thứ 4 của mảng.

Tham khảo việc làm JavaScript tại Hồ Chí Minh trên TopDev

Triển khai thuật toán trong JavaScript

Tìm kiếm nội suy có cách triển khai trong JavaScript khá đơn giản và dễ hiểu, bạn có thể tham khảo đoạn code dưới đây:

function interpolationSearch(sortedArray, seekElement) {
  let leftIndex = 0;
  let rightIndex = sortedArray.length - 1;
  while (leftIndex <= rightIndex) {
    const rangeDelta = sortedArray[rightIndex] - sortedArray[leftIndex];
    const indexDelta = rightIndex - leftIndex;
    const valueDelta = seekElement - sortedArray[leftIndex];
    if (valueDelta < 0) {
      return -1;
    }
    if (!rangeDelta) {
      return sortedArray[leftIndex] === seekElement ? leftIndex : -1;
    }
    // Tính toán giá trị chỉ số của mảng cần so sánh
    const middleIndex =
      leftIndex + Math.floor((valueDelta * indexDelta) / rangeDelta);
    // trả kết quả nếu tìm được giá trị cần tìm
    if (sortedArray[middleIndex] === seekElement) {
      return middleIndex;
    }
    if (sortedArray[middleIndex] < seekElement) {
      // sử dụng mảng bên phải
      leftIndex = middleIndex + 1;
    } else {
      // sử dụng mảng bên trái
      rightIndex = middleIndex - 1;
    }
  }
  return -1;
}

  Bạn biết gì về thuật toán Radix Sort trong JavaScript?

Độ phức tạp của thuật toán

Tìm kiếm nội suy có độ phức tạp là O(log(log(n))) so với tìm kiếm nhị phân với độ phức tạp là O(log(n)) thì việc cải tiến này khá đáng giá. Giải thuật cũng sẽ hiệu quả hơn với những bài toán mà các phần tử trong mảng được phân bố đều.

Kết bài

Như vậy là chúng ta đã cùng nhau tìm hiểu thuật toán tìm kiếm nội suy Interpolation Search và cách triển khai thuật toán này trong ngôn ngữ lập trình JavaScript. Đây là một thuật toán hay và cũng dễ triển khai trong nhiều ngôn ngữ lập trình khác nhau. Hy vọng bài viết hữu ích dành cho bạn 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

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

Hàng loạt việc làm IT hấp dẫn trên TopDev đang chờ bạn ứng tuyển..

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

UI UX là gì? – UX UI Design là một ngành khá hot và có tiềm năng rất lớn trong thời đại công nghệ số ngày nay. Vậy bạn có từng tự hỏi rằng công việc của một UX/UI designer là như thế nào? Một  UX UI Designer thì phải có những tính cách hay tố chất như thế nào? Người làm UX UI Design sẽ phối hợp với những chức năng khác như thế nào? Bài viết này sẽ giải đáp những câu hỏi đó.

topdev

UX UI là gì?

UX (User Experience) và UI (User Interface) là hai khái niệm quan trọng trong lĩnh vực thiết kế và phát triển ứng dụng, trang web và các sản phẩm số.

UX là gì?

UX (User Experience – Trải nghiệm người dùng): Đây là khái niệm liên quan đến cách mà người dùng tương tác với sản phẩm của bạn và cảm nhận về trải nghiệm đó. Mục tiêu chính của UX design là đảm bảo người dùng có trải nghiệm dễ sử dụng, hiệu quả và thỏa mãn khi sử dụng sản phẩm của bạn. Điều này bao gồm việc xem xét về cách mà sản phẩm được tổ chức, cách thức tương tác của người dùng với sản phẩm, và cảm xúc mà họ có sau khi sử dụng sản phẩm đó.

UI là gì?

(User Interface – Giao diện người dùng): UI là phần của sản phẩm mà người dùng tương tác trực tiếp. Điều này bao gồm các yếu tố như nút bấm, hình ảnh, biểu đồ, màu sắc, kiểu chữ, và mọi thứ mà người dùng có thể nhìn thấy và chạm vào khi sử dụng sản phẩm. Mục tiêu của UI là tạo ra một giao diện thẩm mỹ, dễ nhìn, dễ sử dụng và tương thích với mục đích sử dụng của sản phẩm.

Tóm lại, UX tập trung vào trải nghiệm toàn diện của người dùng khi tương tác với sản phẩm, trong khi UI tập trung vào việc tạo ra giao diện thị giác hấp dẫn và dễ sử dụng. Cả hai khái niệm này đều quan trọng trong việc thiết kế và phát triển sản phẩm để đảm bảo rằng sản phẩm không chỉ hấp dẫn mắt mà còn mang lại trải nghiệm tích cực cho người dùng.

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

Phương châm làm việc của UX/UI Designer

Người làm UX/UI có trách nhiệm với cả hai bên: người dùng và công ty phát triển sản phẩm.

Đối với người dùng: UX/UI Designer phải hiểu những suy nghĩ và giả định của mình luôn là góc nhìn chủ quan và không nhất thiết phản ánh đúng cách nhìn của người dùng sản phẩm. Những thiết kế của người UX/UI Designer luôn được hướng dẫn bởi người dùng, với từng feature và yếu tố giao diện được đặt vào đều với mục tiêu rõ ràng và liên quan đến nhu cầu của người dùng. Khi có một insight hay giả thuyết nào đó, người UX/UI Designer sẽ muốn thử nghiệm để kiểm chứng giả thuyết của mình chứ không lập tức chấp nhận nó.

Tuy nhiên, từ nền tảng tâm lý học, người UX/UI Designer cũng phải hiểu được người dùng không thật sự hiểu chính bản thân họ, và vì thế mà sẽ không bao giờ ngay lập tức chấp nhận những ý kiến của người dùng như là một chân lý tối cao.tuyển dụng itNhìn chung, không có một công thức nào để nói rằng lúc nào bạn có thể tin tưởng người dùng và thật sự họ muốn cái quái gì, điều này phụ thuộc nhiều vào kinh nghiệm cũng như sự sâu sắc của chính UX/UI Designer.

Đối với công ty phát triển sản phẩm: nói rằng đặt người dùng lên hàng đầu, nhưng mục tiêu của UX/UI Designer vẫn là giúp công ty đạt mục tiêu kinh doanh. Dung hòa được nhu cầu của người dùng và mục tiêu của chính sản phẩm không phải là vấn đề đơn giản. 

Về lâu dài những gì là tốt nhất cho khách hàng cũng là tốt nhất cho doanh nghiệp. “Khách hàng vui thì đời vui” mà! Tuy nhiên, trong ngắn hạn, đôi lúc bạn sẽ phải đánh đổi giữa việc làm hài lòng người dùng và hiệu quả kinh doanh. Đây cũng là một trong những quyết định khó khăn ngay cả với những Designer dày dạn kinh nghiệm.

Hai trách nhiệm này của người UX/UI Designer không bao giờ được tách rời.

  Hiểu tất tần tật về UX Design với UX360: User Experience in a nutshell.

Công việc của UX/UI Designer là gì?

Công việc của UI

Mục tiêu của thiết kế UI tập trung vào việc thể hiện những yếu tố thẩm mỹ đang thịnh hành và được ưa chuộng bởi người dùng. Những người làm UI cần nắm vững thị hiếu của đối tượng người dùng mà doanh nghiệp hướng đến, để lựa chọn nút bấm, biểu tượng, bố trí, phông chữ, màu sắc và hình ảnh phù hợp. Họ phải cân nhắc xem đối tượng người dùng có ưa thích thiết kế bo tròn hay góc vuông, tông màu ấm khi kết hợp với loại hình chữ viết nào sẽ phù hợp và hấp dẫn hơn,…

Hơn nữa, việc thiết kế UI còn phải truyền tải được hình ảnh và sức mạnh của thương hiệu thông qua giao diện sản phẩm. Điều này đảm bảo tính nhất quán, thống nhất và thẩm mỹ chung trong giao diện.

công việc của UI

Công việc của một UI Designer có thể trải qua các bước như:

  • Phân tích khách hàng.
  • Nghiên cứu thiết kế.
  • Xây dựng sản phẩm mẫu.
  • Xem xét sự tương tác
  • Xem xét sự thích ứng với tất cả các kích cỡ của màn hình thiết bị.
  • Thực hiện với nhà phát triển.

Công việc của UX Designer

Công việc của một người thiết kế trải nghiệm người dùng (UX) đòi hỏi quá trình quan sát và phân tích tỉ mỉ để lựa chọn những giải pháp tối ưu cho trải nghiệm của người dùng. Trong quá trình này, các bước chính bao gồm:

  • Quan sát và phân tích: UX designer tiến hành quan sát cẩn thận về cách người dùng tương tác với sản phẩm. Thông qua việc quan sát, họ có thể phát hiện các vấn đề tiềm ẩn và cơ hội cải thiện.
  • Lựa chọn giải pháp phù hợp: Dựa trên quan sát và phân tích, UX designer phải đưa ra những quyết định thông minh để cải thiện trải nghiệm người dùng. Điều này có thể bao gồm thay đổi vị trí nút bấm, cải thiện luồng tương tác, hay tối ưu hóa trải nghiệm tổng thể.
  • Tối ưu hóa user flow: UX designer phải xác định và đánh giá liệu người dùng có thể thực hiện tốt tất cả các bước trong quá trình trải nghiệm sản phẩm (user flow) hay không. Họ cân nhắc việc giảm thiểu số bước, làm cho quá trình dễ dàng hơn và đáp ứng nhu cầu người dùng.
  • Tạo ra thiết kế tương tác: Dựa trên phân tích và tối ưu hóa, UX designer tạo ra các giao diện tương tác mô phỏng trước khi triển khai. Điều này giúp họ thử nghiệm và cải thiện trước khi sản phẩm thật sự được phát triển.
  • Liên kết với UI: Một phần quan trọng của công việc UX là làm việc cùng UI designer để đảm bảo rằng giao diện thể hiện đúng các yếu tố trải nghiệm được thiết kế và tối ưu hóa.

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

Người như thế nào thì thích hợp để trở thành UX/UI Designer?

UX UI là gì

Những người làm UX UI Design thường nên có những tố chất sau:

  • Sự đồng cảm: họ dễ dàng hiểu hay đoán được người khác đang hiểu gì và tại sao.
  • Sự khiêm tốn: dù có là chuyên gia hay không, họ luôn lắng nghe và học hỏi từ mọi người xung quanh, đặc biệt là người dùng của mình.
  • Sự quan sát và tò mò về mọi thứ xung quanh: họ cảm thấy thích thú khi được nghe những câu chuyện của người khác hay được tham gia vào những hoạt động mới mà trước đây mình chưa biết đến.
  • Không phán xét: họ không áp đặt các giá trị đạo đức hay lối suy nghĩ của mình vào người khác và cho rằng mình luôn đúng.
  • Chú ý đến chi tiết: họ thường thấy được những chi tiết nhỏ nhoi ảnh hưởng đến mọi người như thế nào, và hiểu được những thay đổi nhỏ cũng có thể tạo nên ảnh hưởng lớn.

Những kỹ năng mềm cơ bản của UX UI là gì?

UX UI là gì

  • Kỹ năng giao tiếp: UX/UI Designer phải giao tiếp với nhiều bộ phận khác nhau với các chuyên môn khác nhau, truyền đạt được thông tin một cách hiệu quả, cho dù đó là từ khách hàng đến bộ phận kỹ thuật hay marketing và kinh doanh.
  • Hiểu biết về tâm lý học: hầu hết tất cả UX/UI Designer, vào nhiều lúc trong sự nghiệp của mình, đều tìm hiểu và đào sâu vào các yếu tố và lý thuyết tâm lý.
  • Kỹ năng thuyết phục: người UX/UI Designer phải thuyết phục được không chỉ bản thân mà còn những người làm chung đội ngũ, những người làm kỹ thuật và product manager đi theo triết lý design và áp dụng những kết quả của mình.
  • Kỹ năng thấu hiểu vấn đề: họ có thể nhìn qua được những biểu hiện bề mặt của vấn đề và xác định được đúng vấn đề cốt lõi cần phải giải quyết.
  • Kỹ năng thiết kế và prototype: bạn cần có khả năng tạo ra một sản phẩm mẫu trong thời gian ngắn để có thể nhanh chóng thử nghiệm và cải thiện sản phẩm đó. Bên cạnh đó, trong hầu hết các trường hợp, bạn phải tự mình hoàn thành một sản phẩm hoàn thiện. Vì vậy, trang bị chuyên môn về thiết kế đồ họa, giao diện, sản phẩm là cần thiết.
  • Hiểu biết căn bản về kỹ thuật: một chút hiểu biết về kỹ thuật rất có ích. Nếu bạn có background kỹ thuật cũng rất tốt. Đây cũng là một lợi thế khi bạn hiểu những khả năng và giới hạn của công nghệ để xây dựng những giải pháp tốt.
  • Kỹ năng phân tích dữ liệu kết hợp tư duy sáng tạo: phân tích dữ liệu là cần thiết khi bạn phải làm việc trong những dự án lớn hoặc đã ổn định. Tư duy sáng tạo, ngược lại, là một cái vui của nghề. Bạn có thể cập nhật xu hướng, vui với những tương tác nhỏ, tạo nên những điều thú vị riêng cho sản phẩm.

Có thể bạn muốn xem thêm:

Xem thêm việc làm IT với mức lương cao nhất tại TopDev!

Mẹo viết code Kotlin cho Android developer không nên bỏ qua

Bài viết được sự cho phép của tác giả Sơn Dương

Kotlin hiện đã trở thành ngôn ngữ chính để lập trình ứng dụng Android, bên cạnh Java đã có phần già nua. Khi mới chuyển sang sử dụng Kotlin, chắc chắn bạn sẽ có đôi chút bỡ ngỡ. Nhưng mình đảm bảo, càng về sau, bạn càng cảm thấy khoái “anh chàng” Kotlin này.

Bài viết này, mình sẽ chia sẻ một số kinh nghiệm, kotlin tips trick để bạn viết code nhàn hơn, gọn gàng và nhanh hơn.

Cài đặt Kotlin

Hiện nay, bản Android Studio mới nhất đã tích hợp sẵn Kotlin, nên bạn không cần phải cài đặt thêm gì cả.

Mình chỉ lưu ý một vài điểm ch dự án của bạn.

Một là, để tạo mới một kotlin class, bạn chọn:

  • File > New > Kotlin file/class
  • Hoặc File > New > Kotlin activity

Phần đuôi mở rộng của các tệp kotlin là .kt

Hai là, Android Studio có một plugin hỗ trợ viết mã Kotlin rất tốt, bạn nên sử dụng nó cho dự án của mình. Mở build.gradle (module level), thêm dòng sau:

apply plugin: 'kotlin-android-extensions'

Nếu bạn tạo dự án Kotlin từ đầu bằng Android Studio thì chắc chắn trong build.gradle (application level) sẽ có đoạn code kiểu như sau:

buildscript {
   ext.kotlin_version = '1.0.2'
   repositories {
       jcenter()
   }
   dependencies {
       classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

       // NOTE: Do not place your application dependencies here; they belong
       // in the individual module build.gradle files
   }
}

Ok, việc thiết lập để dự án sử dụng được Kotlin chỉ có vậy thôi.

  Cách viết hàm khởi tạo Class trong Kotlin vừa gọn, vừa dễ đọc

  Mình đã học kotlin như thế nào?: Phần 1: từ 1 dev IOS nhảy sang dev android

Kotlin tips hay không nên bỏ qua

Dưới đây là một số thủ thuật/tính năng của Kotlin mà cá nhân mình thấy nó khá hay ho, đặc biệt là so với cách viết của Java.

1. Tính năng Static Layout Import

Trước đây, khi viết ứng dụng Android, không ai là không biết tới từ khóa: findViewById() để tạo một reference từ code Java tới View trong layout XML. Nhiều khi, với layout có nhiều View cần phải reference, bạn nhìn code khai báo findViewById() rất rất là nhiều.

Cũng có một số giải pháp khắc phục điều này, như sử dụng thư viện Butterknife, giúp tiết kiện thao tác khai báo đó. Đến Kotlin, nó còn cải tiến thêm một bước nữa, bằng cách cho phép import tất cả reference tới View chỉ bằng một lần import.

Chúng ta cùng ví dụ minh họa dưới đây:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="co.ikust.kotlintest.MainActivity">

    <TextView
        android:id="@+id/helloWorldTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</RelativeLayout>

Còn đây là đoạn mã trong Activity:

import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

       helloWorldTextView.text = "Hello World!"
    }
}
Kotlin cũng giống như Javascript, không cần thiết phải có dấu chấm phẩy ( ; ) cuối mỗi dòng lệnh.

Như bạn thấy, chúng ta không cần phải khai báo findViewById() gì hết, truy xuất thằng vào view thông qua ID của nó.

helloWorldTextView.text = "Hello World!"

Góc chú ý:

  • Trong hàm setContentView(R.layout.activity_main) phải trỏ tới đúng layout nhé. Tránh hiện tượng “râu ông này cắm cằm bà kia“. Nếu bạn trỏ nhầm layout, tất nhiên là bạn gọi reference từ ID của View sẽ bị NULL, ứng dụng sẽ bị crash.
  • Riêng với Fragment, bạn nên khai báo setContentView() trong hàm onCreateView(), sử dụng các reference để thiết lập UI trong onViewCreated().

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

2. Viết POJO class trong Kotlin

So với tính năng static layout import, việc viết POJO (Plain Old Java Object) class bằng Kotlin còn ngắn gọn hơn nữa (so với Java).

Viết POJO class để làm gì? POJO class thực chất là các data class, mục đích để bạn định nghĩa dữ liệu kiểu Object, dùng để lưu dữ liệu vào DB, parse JSON…

Ví dụ, chúng ta có một JAVA class như sau:

public class User {
   private String firstName;

   private String lastName;

   public String getFirstName() {
       return firstName;
   }

   public void setFirstName(String firstName) {
       this.firstName = firstName;
   }

   public String getLastName() {
       return lastName;
   }

   public void setLastName(String lastName) {
       this.lastName = lastName;
   }
}

Với Kotlin, mã nguồn sẽ ngắn gọn hơn rất nhiều.

  • Đầu tiên là bạn không cần phải viết từ khóa public, vì mặc định mọi thứ trong kotlin là public rồi.
  • Không cần phải viết hàm get/set. Trong Kotlin, bạn truy xuất trực tiếp vào properties.

Do đó, với đoạn code Java trên, khi chuyển thành Kotlin thì chỉ còn như sau:

class User {
var firstName: String? = null

var lastName: String? = null
}

Ngắn gọn mà vẫn dễ hiểu phải không!?

Còn rất nhiều điều hay ho khi bạn viết và khai báo POJO class, mời bạn đọc thêm chi tiết tại bài viết này: Khởi tạo Class trong Kotlin đơn giản và hiệu quả

3. Lambda Expressions

Lambda expressions là một tính năng được giới thiệu trong bản JAVA 8, được rất nhiều người ưu thích. Tuy nhiên, trên Android thì cũng mới chỉ hỗ trợ java 7, không biết bây giờ thì thế này. Điều đó đã khiến các lập trình viên đi tìm giải pháp thay thế, có thể kể tới Retrolambda

Nhưng nếu bạn sử dụng Kotlin thì lại đơn giản, bạn được hỗ trợ sẵn rồi, không cần cài gì thêm cả.

Về phần này, mình đã có một bài viết riêng để giải thích và hướng dẫn làm rất chi tiết, đừng bỏ qua nhé: Tìm hiểu Higher-Order Functions và Lambda trong Kotlin

4. Null-safety

Một trong những thứ khiến bạn ám ảnh và đau đầu nhất trong Java, đó chính là lỗi NullPointerException. Khi chuyển sang Kotlin, với tính năng Null-safety, cơn đau đầu đó sẽ chấm dứt.

Với Kotlin, chỉ duy nhất những lỗi sau mới gây ra NullPointerException:

  • Bạn cố tình throw ra NullPointerException
  • Sử dụng toán tử !! (sẽ đề cập ở phần dưới bài viết)
  • Nếu thuộc tính lateinit được truy xuất trong hàm khởi tạo trước khi nó được tạo. Lúc này bạn sẽ gặp lỗi anUninitializedPropertyAccessException

Theo mặc định, tất cả các biến, thuộc tính của Object đều là non-null (không thể giữ giá trị null)  – Trừ khi chúng được khai báo là nullable.

Như đề cập ở trên, để khai báo một biến có thể null, bạn chỉ cần thêm dấu hỏi chấm vào sau kiểu dữ liệu. Ví dụ:

val number: Int? = null

Khi đã khai báo như trên mà bạn lại cố tình gọi hàm để tạo NullPointerException như này:

val number: Int? = null
number.toString()

Đoạn code sẽ không được complie vì không vượt qua được null check của chương trình. Nhưng nếu bạn thêm điều kiện check null thì lại OK

val number: Int? = null

if(number != null) {
    number.toString();
}

Hoặc viết gọn hơn:

val number: Int? = null
number?.toString()

Toán tử !!

Đôi khi, bạn muốn chương trình có thể bắn ra NullPointerException như JAVA để khi test gặp lỗi mà biết mà sửa. Bạn có thể sử dụng toán tử !!

Đoạn code này sẽ bắn ra NullPointerException:

val number: Int? = null
number!!.toString()

Thuộc tính lateinit

Có một trường hợp khi sử dụng thuộc tính lateinit mà có thể gây lỗi tương tự NullPointerException.

Chúng ta cùng xem xét ví dụ sau:

class InitTest {
lateinit var s: String;

init {
val len = this.s.length
}

}

Đoạn code khi compile sẽ không vấn đề gì cả. Nhưng khi chạy chương trình, ngay khi instance của đối tượng TestClass được, bạn sẽ gặp lỗi UninitializedPropertyAccessException.

Nguyên nhân như mình đã đề cập ở trên, do bạn truy xuất vào thuộc tính s trước khi nó được khởi tạo.

5. Hàm with()

Hàm with() rất hữu ích khi bạn cần truy xuất vào nhiều thuộc tính của cùng một đối tượng. Nó giúp bạn đỡ phải gõ nhiều tên đối tượng để gọi thuộc tính.

with(helloWorldTextView) {
    text = "Hello World!"
    visibility = View.VISIBLE
}

6. Chuyển một Object sang Map

Có một use case phổ biến đó là lưu trữ giá trị của các thuộc tính vào một mảng Map. Điều này bạn thường thấy với các ứng dụng làm việc với RESTful API khi cần parse JSON.

Sau đây là một ví dụ:

class User(val map: Map<String, Any?>) {
    val name: String by map
    val age: Int by map
}

Khi sử dụng như sau:

val user = User(mapOf(
    "name" to "John Doe",
    "age" to 25
))

7. Collections và Functional Operations

Với sự hỗ trợ của lambdas, các thao tác với Collection trong Kotlin được nâng lên tầm cao mới.

Đầu tiên, Kotlin có sự phân biệt giữa mutable collection và immutable  collection.

Ví dụ: Có hai phiên bản của Iterable interface

  • Iterable
  • MutableIterable

Tương tự, cũng có hai phiên bản của List, Set và Map interfaces.

Ví dụ: toán tử any sẽ trả về giá trị true nếu có ít nhất một phần tử thỏa mãn điều kiện.

val list = listOf(1, 2, 3, 4, 5, 6)
assertTrue(list.any { it % 2 == 0 })

Và còn rất nhiều tính năng khác nữa, các bạn có thể tham khảo thêm trong trang tài lệu chính thức của Kotlin.

Tạm kết

Trên đây chỉ là một số Kotlin tips, những tính năng hay ho mà Kotlin cung cấp. Nếu bạn càng làm việc nhiều với Kotlin, chắc chắn bạn sẽ ngày càng thêm yêu ngôn ngữ này.

Mình hi vọng bài viết này sẽ giúp ích cho các bạn trong dự án sắp tới.

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

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

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

Ngành công nghệ thông tin là gì? Ra trường làm việc gì?

Trong thời đại số ngày nay, công nghệ thông tin không chỉ là một phần của cuộc sống hàng ngày mà còn là trọng tâm của sự phát triển xã hội và kinh tế. Vì vậy, nhiều bạn trẻ đã chọn theo học ngành Công nghệ thông tin với mong ước sẽ có một công việc tốt sau khi ra trường.

Vậy bạn đã thật sự biết Ngành công nghệ thông tin là gì? Học ngành công nghệ thông tin ra làm gì? Đâu là những ngành sẽ hot trong tương lai? Tất cả sẽ được giải đáp trong bài viết này!

Ngành công nghệ thông tin là gì?

Ngành công nghệ thông tin hay IT (Information Technology) là lĩnh vực nghiên cứu, phát triển và ứng dụng các hệ thống, phần mềm và mạng máy tính nhằm lưu trữ, xử lý và trao đổi thông tin. Đây là một ngành học liên quan đến việc sử dụng máy tính và phần mềm để quản lý thông tin. Ngành IT bao gồm nhiều nhóm ngành công nghệ thông tin nhỏ như lập trình, quản trị mạng, an ninh mạng, phát triển web, khoa học dữ liệu, trí tuệ nhân tạo và nhiều lĩnh vực khác.

công nghệ thông tin là ngành gì
Công nghệ thông tin là ngành gì?

Ngành công nghệ thông tin học những gì?

Ngành Công nghệ Thông tin là một lĩnh vực rộng lớn và đa dạng, cung cấp cho sinh viên nhiều kiến thức và kỹ năng quan trọng để làm việc trong thế giới kỹ thuật số hiện đại. Khi theo học CNTT, sinh viên sẽ học về các kiến thức cơ bản như lập trình, cơ sở dữ liệu, mạng máy tính, an toàn thông tin và phát triển phần mềm. Ngoài ra, họ cũng có cơ hội tiếp cận các xu hướng mới nhất trong công nghệ như trí tuệ nhân tạo, học máy, blockchain và Internet of Things (IoT). Đào tạo trong ngành này tập trung vào việc phát triển kỹ năng lập trình, giải quyết vấn đề và phân tích dữ liệu để áp dụng vào các lĩnh vực như quản lý hệ thống thông tin, phát triển ứng dụng di động, thiết kế trang web và nhiều ứng dụng công nghệ khác.

Tham khảo Chương trình đào tạo ngành Công nghệ thông tin của trường ĐH Công nghệ thông tin – Đại học Quốc gia TPHCM.

Top 10 trường đào tạo công nghệ thông tin tốt nhất hiện nay

Ngoài các kiến thức chuyên ngành, kỹ năng mềm là một phần không thể thiếu trong con đường trở thành lập trình viên của bạn:

  • Ngoại ngữ: IT là lĩnh vực thay đổi không ngừng, ngoại ngữ sẽ là phương tiện giúp bạn tiếp cận những đổi mới nhanh nhất thông qua tài liệu nước ngoài. Ngoài ra, việc có ngoại ngữ cũng giúp bạn dễ dàng có được cơ hội việc làm ở các tập đoàn đa quốc gia với mức lương hấp dẫn.
  • Giải quyết vấn đề: Phát triển kỹ năng tư duy logic và giải quyết vấn đề là yếu tố không thể thiếu khi bạn theo học ngành CNTT, bởi vì bạn luôn phải đối mặt với những bài toán khó nhằng đòi hỏi sự nhạy bén và logic tốt.
  • Làm việc nhóm: Bởi một dự án công nghệ rất phức tạp đòi hỏi sự làm việc nhóm trơn tru giữa các phòng ban, vì vậy các kỹ sư CNTT tương lai cần rèn luyện năng giao tiếp và làm việc hiệu quả trong nhóm.
  • Quản lý thời gian: Kỹ năng quản lý thời gian và tổ chức công việc giúp kết quả công việc được tốt hơn và giúp bạn kiểm soát được khối lượng công việc, tránh miss các task quan trọng.

>>> Xem thêm: Có nên học ngành IT không?

Học CNTT ra trường làm gì?

Ngành công nghệ thông tin mở ra một thế giới rộng lớn với nhiều lựa chọn hấp dẫn, đa dạng và đầy tiềm năng. Vậy công nghệ thông tin là làm gì? Dưới đây là một số hướng đi phổ biến cho những người học ngành này:

Quản trị mạng và bảo mật thông tin

cntt ra làm gì
Học CNTT ra làm gì?

Với tầm quan trọng của dữ liệu an ninh mạng, nhu cầu về quản trị mạng và bảo mật thông tin ngày càng tăng cao. Công việc này liên quan đến việc duy trì, quản lý hệ thống mạng, đảm bảo an toàn thông tin và phòng chống các rủi ro liên quan đến bảo mật.

Quản trị hệ thống

Chuyên môn quản lý hệ thống giúp đảm bảo hoạt động ổn định của các hệ thống máy tính và phần mềm trong tổ chức. Công việc này bao gồm việc cài đặt, theo dõi, và tối ưu hóa hệ thống để đảm bảo hiệu suất cho hệ thống và hoạt động an toàn.

Việc làm IT Fresher dành cho bạn

Kiểm duyệt chất lượng phần mềm (Tester)

Người làm công việc này sẽ kiểm tra, đảm bảo rằng phần mềm đáp ứng các tiêu chuẩn chất lượng và hoạt động một cách mượt mà. Họ thường tham gia vào quy trình thử nghiệm phần mềm, tìm kiếm lỗi và đảm bảo tính tương thích của phần mềm.

Chuyên gia quản lý dữ liệu (Database Admin)

Với sự gia tăng của dữ liệu, các chuyên gia quản lý dữ liệu có vai trò quan trọng trong việc tổ chức và phân tích dữ liệu. Công việc này đòi hỏi kiến thức về cơ sở dữ liệu, khoa học dữ liệu và các kỹ thuật phân tích.

Lập trình viên (Developer)

công nghệ thông tin lam gi
Công nghệ thông tin làm gì? Lập trình viên

Lập trình viên là người tạo ra các ứng dụng và phần mềm. Họ sẽ đảm nhận công việc viết mã, phát triển các tính năng và giải quyết các vấn đề kỹ thuật. Sự sáng tạo và khả năng giải quyết vấn đề là yếu tố quan trọng khi làm công việc này.

Xem thêm: Lộ trình học Công nghệ thông tin cho người mới bắt đầu

Thiết kế game (Game Design)

Đối với những người đam mê trò chơi, công việc thiết kế game đem lại cơ hội để tạo ra những trải nghiệm giải trí độc đáo. Thường yêu cầu kỹ năng lập trình, thiết kế đồ họa và tư duy sáng tạo.

Kỹ sư AI

Cùng với sự phát triển của Trí tuệ nhân tạo (AI), các kỹ sư AI đang là người đóng góp quan trọng trong việc phát triển các ứng dụng thông minh, từ chatbot cho đến các hệ thống học máy phức tạp.

Thiết kế và phát triển website (Web Developer)

Với mức độ số hóa của thế giới ngày càng cao, có nhu cầu lớn về các trang web chất lượng. Thiết kế viên và nhà phát triển web tạo ra các trang web hấp dẫn, tương tác và thân thiện với người dùng.

>> Xem thêm: Điểm chuẩn ngành CNTT 2023

Dựa vào đam mê và kỹ năng của bạn, bạn có thể chọn lựa một trong những hướng đi này để phát triển sự nghiệp trong ngành công nghệ thông tin.

Ngành công nghệ thông tin là một ngành học vô cùng tiềm năng cho tương lai của bạn. Từ việc làm phát triển phần mềm đến trở thành chuyên gia bảo mật mạng, ngành này không ngừng đổi mới và phát triển. Bằng việc học tập và rèn luyện, bạn có thể trở thành một người dẫn đầu trong cuộc cách mạng công nghệ và góp phần thay đổi thế giới. Hy vọng rằng bài viết này đã giúp bạn trả lời được câu hỏi “Học ngành công nghệ thông tin ra làm gì?”. Tiếp tục theo dõi TopDev để cập nhật các bài viết mới về lập trình và công nghệ nhé!

Tham khảo thị trường việc làm IT hấp dẫn tại TopDev

Làm thế nào để triển khai tính năng rate/limit cho bình luận?

Bài viết được sự cho phép của tác giả Tống Xuân Hoài

Vấn đề

Captcha là một cách thức được sinh ra nhằm mục đích ngăn chặn hành vi spam trên các ứng dụng, đặc biệt là đối với ứng dụng web. Nếu không có captcha, kẻ tấn công có thể dễ dàng tạo ra những đoạn mã tự động gửi truy vấn với tần suất liên tục đến chức năng nào đó nhằm phá hoại hệ thống.

Tuy vậy, captcha không phải không có nhược điểm. Có lẽ hạn chế lớn nhất của nó là gây “lú” cho người dùng. Nhiều đoạn mã được sinh ra để xác minh bạn là con người, nhưng đôi khi bạn phải tự hỏi liệu mình có là người không khi không thể dịch được những kí tự méo mó hoặc mờ tịt kia.

Chức năng bình luận trên 2coffee không sử dụng captcha để tạo ra khó khăn cho người dùng giống như trên. Thay vào đó tôi đã áp dụng một kỹ thuật gọi là “rate/limit” để hạn chế hành vi spam. Nói nôm na, nó ngăn chặn một hành vi liên tục, giới hạn số lần thực hiện trong một khoảng thời gian nhất định. Ví dụ như chỉ cho phép người dùng bình luận tối đa 3 lần trong 1 phút, hay cần phải chờ ít nhất 10 giây để cho lượt gửi bình luận tiếp theo.

Bài viết ngày hôm nay tôi xin phép được tường thuật lại quá trình triển khai tính năng rate/limit của mình. Tôi nghĩ rằng điều đó sẽ giúp ích cho bạn đọc, hoặc hy vọng được nhận lại ý kiến của bạn đọc để có thêm cách triển khai tốt hơn.

  Tích hợp Google ReCaptcha vào form trong React

Thuật toán

Ý tưởng ban đầu rất đơn giản, vì không quá khắt khe nên tôi quyết định cho phép người dùng được gửi bình luận sau mỗi 10 giây kể từ lần gửi thành công trước đó. Sau khi gửi bình luận thành công ở một bài viết thì cần chờ tối thiểu 10 giây để gửi bình luận ở bất kỳ bài nào.

Lúc này cần triển khai được thuật toán có đầu vào là id người dùng, đầu ra là true/false. True nếu chưa vượt quá limit và false nếu đã bình luận quá nhiều. Dựa vào đó để cho phép họ gửi được hay không.

true hãy bắn ra một lỗi không được phép bình luận. Ngược lại nếu là null thì cho phép thêm bình luận rồi sau đó thêm một key comment_limit:1 với thời gian hết hạn là thời gian bạn thiết lập. Giả sử là 10 giây:

SET comment_limit:1 true EX 10

Khi đó, cứ sau 10 giây thì comment_limit:1 sẽ tự động bị xóa và trả lại logic được phép bình luận cho người dùng.

Xem thêm tuyển Web Developer hấp dẫn trên TopDev

Tổng kết

Có nhiều cách để triển khai thuật toán rate/limit cho phần bình luận. Tôi đang áp dụng cách sử dụng tính năng key tự động xóa kết hợp với việc quy ước tên của key để tạo ra logic kiểm tra tính khả dụng của hoạt động bình luận. Còn bạn có cách nào khác hãy để lại bình luận cho mọi người biết nhé!

Bài viết gốc được đăng tải tại 2coffee.dev

Xem thêm:

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

 

Machine Learning với Nodejs kết hợp TensorFlow.js

Bài viết được sự cho phép của tác giả Sơn Dương

TensorFlow.js là một phiên bản của thư viện machine learning TensorFlow nổi tiếng, giúp mang deep learning tới thế giới Javascript. Giờ đây, bạn có thể define, train, và chạy Machine Learning với Nodejs.

Pre-trained models nghĩa là giờ các bạn có thể dễ dàng thực hiện các tác vụ phức tạp như nhận dạng khuôn mặt, sáng tạo nhạc, phát hiện tư thế 96 hay 69… chỉ với vài dòng Javascript đơn giản.

TensorFlow.js ban đầu được phát triển như là một thư viện front-end dành cho trình duyệt. Sau đó, nó được cập nhật để hỗ trợ Node.Js. Điều này, cho phép bạn sử dụng TensorFlow.js cho các ứng dụng phía back-end mà không phải cần đến Python.

Nghe có vẻ hấp dẫn nhỉ? Chúng ta sẽ cùng nhau tìm hiểu Machine Learning với Nodejs sử dụng TensorFlow.js nhé!

Vẫn như mọi khi, để việc học đi đôi với thực hành. Chúng ta sẽ cùng nhau xây dựng một ứng dụng Machine Learning như sau:

Đầu bài: Sử dụng TensorFlow.js để thực hiện nhận dạng hình ảnh (visual recognition) trên hình ảnh bằng JavaScript, tất nhiên là với môi trường Node.js.

Nhưng, trước khi chúng ta đi vào viết code, mình cùng nhau tìm hiểu tổng quan về thư viện TensorFlow đã nhé!

Lưu ý: Bài viết về Machine Learning nên sẽ có nhiều thuật ngữ chuyên ngành như: Model, training, visual recognition, pre-trained models… Các bạn chịu khó tìm hiểu thêm nhé!
  Bạn biết gì về thuật toán Radix Sort trong JavaScript?
  5 điều gây rò rỉ bộ nhớ (memory leak) trong Node.js và cách khắc phục

#TensorFlow là gì?

TensorFlow
Thư viện TensorFlow chuyên về Machine Learning

TensorFlow là một thư viện mã nguồn mở (open-source) cho các ứng dụng machine learning. TensorFlow cũng có thể được sử dụng để implement các neural networks hay các thuật toán deep learning.

Được phát hành tháng 11, 2015, ban đầu TensoFlow là một thư viện Python. Nó được sử dụng khả năng tính toán của CPU và GPU để training và đánh giá các machine learing models. Và tất nhiên, thời điểm đó, nó được thiết để chạy trên các máy chủ có hiệu suất cực cao và đắt tiền.

Gần đây, TensorFlow đã thay đổi rất nhiều, khi nó có thể chạy trên các thiết bị có hiệu suất thấp hơn Mobile hay trình duyệt web.

1. TensorFlow Lite

Tensorflow Lite, là một phiên bản lightweight dành riêng cho các thiết bị di động như mobile hay các thiết bị nhúng.

Đi kèm với nó là một loạt các pre-trained deep learning models (các models được training sẵn từ trước, bạn chỉ việc sử dụng) cho các nhiệm vụ nhận dạng (vision recognition), người ta gọi là MobileNet.

MobileNet được thiết kế để hoạt động tốt và hiệu quả trên các thiết bị hạn chế về tài nguyên. Thế mới gọi là Lite, đúng không

Tham khảo tuyển dụng nodejs lương cao trên TopDevTopDev

2. TensorFlow.js

Theo sau Tensorflow Lite, TensorFlow.js mới được công bố vào tháng 3, 2018. Phiên bản này được phát triển để chạy trên trình duyệt, dựa trên một dự án trước đó là deeplearn.js.

Thông qua thư viện này, các nhà phát triển có thể sử dụng API Javascript để training, load, và chạy models.

TensorFlow.js gần đây có thể chạy trên Nodejs nhờ sử dụng module: tfjs-node

3. Import Models có sẵn vào TensorFlow.js

Như mình đã nói ở trên, đi kèm với TensorFlow.js, có rất nhiều models có sẵn, và bạn hoàn toàn có thể import vào dự án của mình.

Các models này cần phải convert sang định dạng phù hợp trước khi có thể chạy được.

Có một số models được training sẵn, thực hiện các tác vụ như:

  • Image classification
  • Pose detection
  • K-nearest neighbours

#Machine learning với Node.js kết hợp TensorFlow.js

Sau khi đã tìm hiểu tổng quan về thư viện TensorFlow rồi, chúng ta sẽ bắt tay vào việc tự xây dựng một ứng dụng machine learning với Nodejs đơn giản nhé.

1. Cài đặt thư viện TensorFlow

Bạn có thể cài đặt Tensorflow thông qua NPM.

npm install @tensorflow/tfjs @tensorflow/tfjs-node
// hoặc...
npm install @tensorflow/tfjs @tensorflow/tfjs-node-gpu

Trong đó tfjs-node-gpu là module nodejs có hỗ trợ GPU. Cả hai thư viện trên đều sử dụng native dependencie.

2. Loading thư viện TensorFlow

TensorFlow’s JavaScript API được exposed từ core library. Vì vậy , các module hỗ trợ Nodejs sẽ bị lộ các API không cần thiết.

const tf = require('@tensorflow/tfjs')
// Load the binding (CPU computation)
require('@tensorflow/tfjs-node')
// Or load the binding (GPU computation)
require('@tensorflow/tfjs-node-gpu')

3. Loading TensorFlow Models

TensorFlow.js cung cấp một NPM library (tfjs-models) để dễ dàng tải các model được training sẵn.

MobileNet model là model được dùng để phân loại hình ảnh, là một deep neural network trained được xác định dựa trên 1000 class khác nhau.

import * as mobilenet from '@tensorflow-models/mobilenet';

// Load the model.
const model = await mobilenet.load();

Nhưng đến đây thôi, bạn vẫn chưa  chạy được đâu, vì sẽ gặp lỗi:

Error: browserHTTPRequest is not supported outside the web browser.

Như mình đã nói ở trên, mobilenet không hoạt động trên NodeJs.

Bởi vì, thư viện mobilenet là một warraper của tf.Model class. Nên khi hàm load() được gọi, nó sẽ tự động tải các models từ một từ bên ngoài ( external source) thay vì các models đã import trong dự án.

Trong các module Nodejs chưa hỗ trợ việc import các model từ các request HTTP, mà chỉ hỗ trợ import thủ công mà thôi.

Sau khi đã hiểu rõ vấn đề, chúng ta sẽ khắc phục thôi.

const path = "mobilenet/model.json"
const mn = new mobilenet.MobileNet(1, 1);
mn.path = `file://${path}`
await mn.load()

4. MobileNet Models

Các models của TensorFlow.js bao gồm 2 tệp:

  • Configuration được lưu trữ dưới dạng JSON file.
  • Trọng số (weights) được lưu dưới dạng binary file.

Trong đó, Model weights thường được chia nhỏ thành nhiều files để trình duyệt có thể cache tốt hơn.

Nhìn vào log lúc tải tự động các mobileNet, bạn sẽ thấy được tải về từ địa chỉ sau:

https://storage.googleapis.com/tfjs-models/tfjs/mobilenet_v${version}_${alpha}_${size}/

Nhìn vào URL này bạn sẽ thấy rằng, khi tải các mobileNet, chúng sẽ tải chính xác version của model.

Khi bạn xem mã nguồn thì chỉ có MobileNet v1 được tải về bằng thư viện tenorflow-model / Mobilenet.

Tải Models thủ công

Bạn cần xác định version nào muốn tải về, kích thước kích hình ảnh (hay nói các khác chính cấu hình của model).

Ví dụ, với trường hợp của mình thì URL sẽ như sau:

https://storage.googleapis.com/tfjs-models/tfjs/mobilenet_v1_1.0_224/model.json

Khi file cấu hình JSON được tải xuống, bạn có thể sử dụng công cụ jq để parse các weight file names.

$ cat model.json | jq -r ".weightsManifest[].paths[0]"
group1-shard1of1
group2-shard1of1
group3-shard1of1
...

Tiếp theo, mình sử dụng công cụ sed để thêm các prefix vào URL để tải các weight files.

$ cat model.json | jq -r ".weightsManifest[].paths[0]" | sed 's/^/https:\/\/storage.googleapis.com\/tfjs-models\/tfjs\/mobilenet_v1_1.0_224\//'
https://storage.googleapis.com/tfjs-models/tfjs/mobilenet_v1_1.0_224/group1-shard1of1
https://storage.googleapis.com/tfjs-models/tfjs/mobilenet_v1_1.0_224/group2-shard1of1
https://storage.googleapis.com/tfjs-models/tfjs/mobilenet_v1_1.0_224/group3-shard1of1
.

Cuối cùng là sử dụng lệnh  parallel và curl, mình có thể download tất cả các files cần thiết về máy tính.

cat model.json | jq -r ".weightsManifest[].paths[0]" | sed 's/^/https:\/\/storage.googleapis.com\/tfjs-models\/tfjs\/mobilenet_v1_1.0_224\//' | parallel curl -O

5. Classifying Images

Đoạn code minh họa bên dưới được cung cấp bới TensorFlow.js, dùng để thể hiện các phân loại các kết quả trả về cho một hình ảnh.

const img = document.getElementById('img');

// Classify the image.
const predictions = await model.classify(img);
Lưu ý: Đoạn code này sẽ không hoạt động trên Nodejs vì thiếu các DOM.

Phương thức classify cho phép truyền vào các phần tử DOM (canvas, video, image), và tự động truy xuất, chuyển đổi cá bytes hình ảnh từ các thành phần này thành một lớp  tf.Tensor3D, được sử dụng làm đầu vào training cho model.

OK, để khắc phục lỗi không chạy trên Nodejs, chúng ta thay vì cố gắng fake các DOM trong Nodejs, mình sẽ tự xây dựng các tf.Tensor3D thủ công.

Generating Tensor3D từ một Image

Khi mình tham khảo source code, mình thấy hàm để biến DOM thành tf.Tensor3D class,  do vậy chúng ta cũng có thể học cách làm đó.

const values = new Int32Array(image.height * image.width * numChannels);
// fill pixels with pixel channel bytes from image
const outShape = [image.height, image.width, numChannels];
const input = tf.tensor3d(values, outShape, 'int32');

Trong đó:

  • pixels là mảng 2 chiều chứa danh sách các giá trị kênh cho mỗi pixel.
  • numChannels là số lượng các giá trị kênh trên mỗi pixel.

Tạo Input Values cho ảnh JPEG

jpeg-js library là một thư viện thuần javascript để mã hóa và giải mã JPEG cho Nodejs. Mình sẽ sử dụng thư viện này trích xuất giá trị RGB cho mỗi pixel.

const pixels = jpeg.decode(buffer, true);

Kết quả trả về là một Uint8Array, với bốn giá trị RGBA cho mỗi pixel. MobileNet Model chỉ sử dụng 3 giá trị RGB thôi, bỏ qua Alpha chanel.

Đoạn mã này giúp t chuyển đổi mảng 4 kênh (chanel) thành bản 3 kênh cho phù hợp với yêu cầu của MobileNet.

const numChannels = 3;
const numPixels = image.width * image.height;
const values = new Int32Array(numPixels * numChannels);

for (let i = 0; i < numPixels; i++) {
  for (let channel = 0; channel < numChannels; ++channel) {
    values[i * numChannels + channel] = pixels[i * 4 + channel];
  }
}

Những yêu cầu đầu vào của MobileNet model

Như mình đã download ở trên thì mình download MobileNet model để phân loại ảnh với kích thước width x height 224 pixel. Các Input tensors phải chứa giá trị trong dải từ -1 tới 1, và kiểu float, cho mỗi giá trị của kênh.

Giá trị đầu vào cho mỗi hình ảnh có kích thước khác nhau sẽ phải đặt lại kích thước khi phân loại. Ngoài ra, các giá trị pixel trong bộ giải mã JPEG nằm trong phạm vi 0 – 255, thay vì từ -1 đến 1. Các giá trị này cũng cần phải convert trước khi  classification.

TensorFlow.js có sẵn những hàm để bạn thực hiện convert dễ dàng, đừng quá lo lắng nhé. Đặc biệt hơn, tfjs-models/mobilenet library còn làm tự động những tác vụ convert đó nữa. Quá ngon!

Obtaining Predictions

MobileNet models đã được trained để có thể nhận biết được các thực thể từ 1000 classes trong bộ dữ liệu của ImageNet.

Output của model này sẽ xác suất chính xác mà mỗi thực thể đó có trong hình ảnh.

Bạn có thể tham khảo các thực thể mà MobileNet đã được trained để nhận biết tại đây.

MobileNet có cung cấp một hàm để bạn có thể  lấy một lớp X ( là một thực thể nào đó như: con gấu trúc, con gà, cột đèn…) có xác suất chính xác cao nhất mà xuất hiện trong hình ảnh.

const predictions = await mn_model.classify(input, 10);

Trong đó:

  • predictions là một mảng các lớp X và giá trị xác suất tương ứng.

Kiểu như sau:

{
 className: 'panda',
 probability: 0.9993536472320557
}

Chạy thử  với một ảnh bất kỳ

Ok, giờ chúng ta sẽ thử với một bức ảnh bất kỳ xem kết quả như thế nào nhé.

Machine Learning với Nodejs

Ví dụ, mình sẽ thử với ảnh con gấu trúc ở trên xem sao. Bạn chạy lênh bên dưới:

node script.js mobilenet/model.json panda.jpg

Kết quả trả về sẽ hiện trong console log như sau:

classification results: [ {
    className: 'giant panda, panda, panda bear, coon bear',
    probability: 0.9993536472320557
} ]

Như vậy, xác suất hình trên chụp con gấu trúc là 99,9999%. Chắc chắn là con gấu trúc rồi

#Tổng kết

Nói về lĩnh vực AI, machine learning thì nó vô vàn lắm. Đây là đang xu hướng công nghệ cực kỳ hot. Bài viết này mình chỉ hướng dẫn các bạn những hiểu biết cơ bản về TensorFlow. Cách sử dụng TensorFlow với NodeJs mà thôi.

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

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

Hàng loạt việc làm IT hấp dẫn trên TopDev đang chờ bạn ứng tuyển

Cách đăng tin tuyển dụng trên Facebook với 5 tuyệt chiêu tối ưu

Nhận thấy được tiềm năng bùng nổ mạnh mẽ của các hệ sinh thái trên Facebook, các nhà tuyển dụng đã đang lên kế hoạch tối ưu các hình thức tiếp cận; nhằm tìm kiếm, khai thác và chọn lọc các nguồn ứng viên tài năng nhất. Đó là lý do họ dành một sự quan tâm đúng mực đối với việc làm thế nào để tuyển dụng hiệu quả trên facebook.

Bài viết sau đây, TopDev sẽ chia sẻ với các bạn các cách đăng tin tuyển dụng trên facebook hiệu quả, những tiêu đề tuyển dụng hấp dẫn,… Tất cả sẽ có trong bài viết sau đây.

Mục đích đăng tin tuyển dụng trên Facebook

1. Xây dựng thương hiệu tuyển dụng

Xây dựng thương hiệu tuyển dụng

Việc đăng tin tuyển dụng trên Facebook là một cách tuyệt vời để xây dựng thương hiệu tuyển dụng của công ty. Là một cách hiệu quả để thu hút, kết nối và tạo ấn tượng tích cực đối với ứng viên tiềm năng, đồng thời nâng cao danh tiếng của công ty trên thị trường lao động.

2. Xây dựng cộng đồng vững mạnh

Một trong những cách cực kì hiệu quả để gia tăng độ nhận biết tuyển dụng trên Facebook là tạo ra một cộng đồng nơi các ứng viên có cơ hội tìm hiểu về nghề nghiệp cũng như văn hóa công ty bạn.

Cách dễ nhất là thiết lập Facebook page chuyên về cơ hội nghề nghiệp và văn hóa doanh nghiệp. Tới đây nếu bạn thắc mắc rằng tại sao không đăng lên những web riêng của công ty như tên-công-ty.career.com để mọi người tiện theo dõi? TopDev cho rằng những thông tin đăng tải trên đó thì khá cứng nhắc, đôi khi không được cập nhật thường xuyên nữa. Vả lại ứng viên không phải họ lúc nào cũng chủ động lên thăm dò website của bạn mỗi ngày, vì thế TopDev tin là tốt hơn bạn cần đăng lên mạng xã hội như Facebook – nơi họ truy cập với mật độ cao.

Để làm được điều đó thì trước hết bạn cần xây dựng kế hoạch để duy trì trang và đảm bảo dành lượng thời gian nhất định để quản lí trang mỗi ngày. Ứng viên sẽ rời đi nhanh chóng nếu Facebook page bị trì hoãn dài.

Tuy nhiên trước khi dành mọi công sức để xây dựng và duy trì Facebook page, bạn cần thiết lập một chiến lược tuyển dụng IT trên Facebook trước. Đây là một số gợi ý:

  • Làm thế nào để bạn thể hiện văn hóa công ty một cách độc đáo?
  • Loại nội dung nào bạn sẽ chia sẻ?
  • Làm sao để thu hút người dùng Facebook và ứng viên tiềm năng?
  • Bạn làm cách nào để thể hiện vị trí ứng tuyển và bạn có dùng một hệ thống ứng tuyển không?

Bên cạnh đó bạn cần theo dõi sát sao các ý tưởng, chủ đề để đăng tải các bài đăng khi tuyển dụng IT trên Facebook để duy trì sự nhất quán trong suốt thời gian hoạt động của page nhé!

Bạn không chỉ tuyển dụng IT trên Facebook? Tham khảo 7 bước cấp thiết của chiến lược tuyển dụng IT trên social media hiệu quả để có một cái nhìn tổng quan hơn nhé !

3. Xây dựng nội dung thật sống động

Xây dựng nội dung thật sống động

Một trong những cách đăng tin tuyển dụng trên Facebook tiếp theo là xây dựng nội dung thật sống động. Để đảm bảo page của bạn được xuất hiện thường xuyên trên newsfeed, bạn cần duy trì liên tục lượng nội dung mang tính hấp dẫn. Lượng engagement càng nhiều thì khả năng các bài đăng được hiển thị trên network của bạn càng cao. TopDev sẽ gợi ý cho bạn vài kiểu nội dung mà bạn có thể triển khai mỗi ngày nhưng không hề nhàm chán:

  • Thông tin chi tiết về công ty: Đăng tải hình ảnh, video clip của nơi làm việc cũng như các sự kiện gần đây, những cập nhật thú vị về công ty ví dụ như chuyển nơi làm việc,buổi ra mắt sản phẩm mới, sinh nhật của sếp, hay thậm chí là một bữa xế nho nhỏ hằng tuần. Bất cứ thứ gì để thu hút ứng viên và để họ có thể mường tượng ra làm việc ở công ty bạn sẽ như thế nào.
  • Nội dung liên quan tới nghề nghiệp bạn đang tuyển dụng: Hãy cập nhật và chia sẻ những thông tin thú vị về nghề nghiệp mà bạn đang tuyển dụng. Điều này giúp ứng viên tiềm năng đánh giá page của bạn là hay ho, thúc đẩy sự tò mò đối với công ty bạn, và có khi họ sẽ trở thành nhân viên của bạn đấy!
  • Các đặc điểm của nhân viên: Bạn có thể đăng hình ảnh, những lời chia sẻ từ chính nhân viên của bạn, hay về môi trường làm việc hằng ngày. Từ đó nêu bật lên những tiềm năng phát triển của công ty bạn và những giá trị ứng viên nhận được khi trở thành 1 thành viên!

4. Đẩy mạnh sự tương tác

Bên cạnh việc xây dựng nội dung hấp dẫn, việc xây dựng mối quan hệ tốt đẹp với ứng viên tiềm năng cũng là một cách đăng tin tuyển dụng trên Facebook hiệu quả, góp phần không nhỏ trong việc đẩy mạnh sự tương tác.

Nếu bạn cho rằng thúc đẩy engagement qua Facebook chủ yếu là nhờ vào việc tạo ra nội dung thu hút, trendy thì bạn nhầm to rồi đấy. Bởi khi ấy ứng viên chỉ thấy content của bạn hấp dẫn, không phải chính doanh nghiệp của bạn – điều cốt lõi để xây dựng thương hiệu tuyển dụng. Nói cách khác, bạn cần ít nhất 1 quản trị viên thường xuyên trả lời tin nhắn, comment và tham gia cùng ứng viên.

Đẩy mạnh sự tương tác

Chẳng hạn như Marriott đã dẫn đầu cuộc chơi khi họ thực hiện “Career Chats”. Khi đó 4 đến 5 nhân viên của Marriott sẽ trả lời câu hỏi của ứng viên tiềm năng ngay tức thì và thậm chí cho họ những lời khuyên hữu dụng khi ứng tuyển nữa. Đây là điều mà khó có doanh nghiệp nào duy trì được. TopDev tin rằng nếu bạn bắt đầu chăm chút hơn cho page qua cách này, nguồn ứng viên dồi dào trong tương lai gần không là mơ đâu !!

5. Dùng Facebook để lôi kéo ứng viên bị động

Ứng viên bị động là gì? Là những ứng viên không chủ động tìm việc nhưng vẫn hứng thú với những vị trí mới hấp dẫn. Bạn có thể cân nhắc sử dụng Facebook Graph Search để tìm ra ứng viên dựa vào vị trí địa lí, nghề nghiệp hoặc cả trường đại học. TopDev sẽ gợi ý giúp bạn một số ví dụ sau:

  • UX/UI Designer sống ở Thành phố Hồ Chí Minh
  • Java Developer làm việc ở A (A có thể là đối thủ cạnh tranh của bạn)

Một khi bạn tìm thấy được các ứng viên thú vị, bạn có thể nhắn tin họ qua Facebook và dần tiếp cận họ qua LinkedIn. Tuy nhiên, TopDev tin rằng bạn nên khám phá ra những mutual connections bạn có, và nhờ họ gửi lời giới thiệu tới các ứng viên. Ứng viên sẽ cảm thấy tin cậy hơn khi nhận được lời giới thiệu từ những người họ quen biết đấy.

Cách đăng tin tuyển dụng trên Facebook hiệu quả

Chọn đúng nhóm đăng tin

Tại sao chọn đúng nhóm đăng tin lại là một cách đăng tin tuyển dụng hiệu quả trên Facebook? Đơn giản, vì các hội nhóm trên Facebook thật sự là một sản phẩm tiềm năng. Ngày càng nhiều các group đăng tin tuyển dụng nhận được sự quan tâm lớn. Nhiều cộng đồng được xây dựng và phát triển về nội dung nhằm tổng hợp, chia sẻ các kiến thức bổ ích về nhiều lĩnh vực khác nhau.

  Vì sao lương khủng, đãi ngộ tốt vẫn khó tuyển IT?

  [Update] 5 xu hướng tuyển dụng IT 2024 không thể bỏ qua

Chọn đúng nhóm đăng tin

Facebook thật sự là kênh giúp nhà tuyển dụng nhiều trong việc tạo cầu nối tiếp cận các ứng viên. Thế nhưng, với sự gia tăng chóng mặt về số lượng group khiến chúng ta hoài nghi về tính hiệu quả của việc tuyển dụng thông qua mạng xã hội. Vì thực tế cho thấy, các group chất lượng, đảm bảo tính chuyên nghiệp và format đăng tin chính thống, xác thực về độ chuyên môn thì có nhưng vẫn cần nhà tuyển chọn sàng lọc. 

Tập trung triển khai tuyển dụng đúng group Facebook 

Việc đúng insight luôn quan trọng cho dù bạn làm bất kỳ một công việc nào. Chính việc đúng định hướng, bạn sẽ tạo ra được một kế hoạch tiếp cận tuyển dụng qua mạng xã hội hiệu quả.

Bạn không thể đăng tin tuyển dụng về các vị trí IT, Freelancer IT trong một group về Nhân sự HR hay Content Marketing được. Nó thật sự không hiệu quả, khiến bạn tốn thời gian và cả những công sức. Do vậy, điều bạn cần lưu tâm trước khi đăng tin tuyển dụng là: Tìm hiểu xem những hội nhóm đó họ đăng tin với những tiêu đề tuyển dụng về chuyên môn, lĩnh vực ngành nghề nào?

Ngoài ra, bạn có thể chú ý nhiều hơn đến cách thức họ đăng tuyển các vị trí theo thứ tự nào, thời gian ra sao.

Nội dung đặc hay loãng, thông tin nhiều hay ít; tiêu đề tuyển dụng có ấn tượng, thu hút hay không. Không những thế, bạn có thể thử đặt mình là ứng viên thì liệu có bị nội dung đăng của họ lôi cuốn hay không? Nếu có thì đâu là yếu tố tạo điểm ấn ở bạn? Nếu không, bạn hãy cố tìm ra những chỗ chưa hoàn hảo, làm hạn chế hoặc ảnh hưởng lớn đến chất lượng của việc truyền tải thông điệp tuyển dụng đến ứng viên.

Hãy nhớ phải lựa chọn cho đúng, tránh những group không đúng lĩnh vực. Chọn sai groups sẽ làm bạn lạc hướng so với định hướng ban đầu.

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

Hình ảnh – Visual có giá trị tạo dấu ấn thẩm mỹ cho việc tuyển dụng hiệu quả trên Facebook

Hình ảnh là một yếu tố quan trọng giúp cho bài đăng tuyển dụng qua mạng xã hội của bạn thêm cuốn hút. Một bài đăng không hình ảnh sẽ làm giảm tính tiếp cận, khiến mẫu tin trở nên nhàm chán với hàng loạt các con chữ xếp nối dài với nhau. Bạn có thể nhận thấy qua một cuộc khảo sát nhỏ, cùng một nội dung những bài có ảnh sẽ thu hút lượt tương tác, sự quan tâm tự bạn đọc nhiều hơn. 

Do vậy, có thể nhận thấy, chiến lược về nội dung cần được tối ưu khi buộc phải có sự kết hợp với mặt hình thức – visual. Không thể phủ nhận, hình ảnh có ý nghĩa lớn đối với chất lượng truyền tải thông tin tuyển dụng. Cụ thể, bài đăng tuyển dụng trên Facebook của bạn sẽ đạt hiệu quả cao hơn do nhận được sự quan tâm, chia sẻ từ người xem. Đó là một tín hiệu tích cực.

Chính vì lẽ đó, các nhà tuyển dụng cần tập trung và đẩy mạnh phát triển mặt visual bên cạnh tối ưu hoá nội dung tuyển dụng. Hình ảnh không những đẹp, mà nó còn phải đa dạng. Một số hình thức visual bạn có thể tham khảo là ảnh có kèm chữ ngắn, hình ảnh mô tả minh họa, hình ảnh dạng hình ảnh thông tin – infographic,… Hoặc bạn có thể sáng tại hơn khi sử dụng các phông chữ đẹp, tạo sự bắt mắt cho người đọc tin.

Hiệu quả bất ngờ từ icon

Bạn đã từng nghe về việc sử dụng emoji, các icon trên bài social Facebook của mình chưa? Nhiều nhận định cho rằng việc sử dụng các icon trong các bài đăng tuyển dụng dường như là không được nghiêm túc.

Tuy nhiên, thực tế cho thấy các icon có ý nghĩa rất hữu ích nếu được áp dụng một cách đúng chỗ, hợp nội dung. Các icon với nhiều hình tượng mang các biểu trưng ý nghĩa khác nhau. Nó làm một hệ thống tổ hợp vô cùng đa dạng. Nếu được sử dụng hợp lý ứng với thông điệp sẽ tao ra những ảnh hưởng tích cực; thậm chí là dấu ấn mạnh mẽ cho các ứng viên tiềm năng. 

Hiệu quả bất ngờ từ icon

Thực tế khi xem xét các bài đăng tuyển dụng hiệu quả trên facebook, hơn 80% bài viết đều có các icon. Tùy theo đặc tính, giọng điệu, văn phong của bài tuyển dụng, thì các icon sẽ được lựa chọn sao cho mang lại một hiệu quả cao nhất cho việc tuyển dụng qua mang xã hội.

Và đặc biệt, bạn nên lưu ý rằng không nên lạm dụng các icon. Điểu này sẽ tạo ra một điểm trừ lớn, gây tác dụng ngược lại cho việc tuyển dụng. Quá nhiều icon sẽ cho ứng viên cảm giác bài tin tuyển dụng trở nên loạn thông tin, khó nắm bắt. Từ đó, bài tuyển dụng sẽ trở nên vô nghĩa.

Tuyển dụng sáng tạo

Cách đăng tin tuyển dụng trên Facebook hiệu quả sẽ không giới hạn cho sự sáng tạo. Sự sáng tạo sẽ giúp bạn tìm ra những cách thức đăng bài tuyển dụng phù hợp hơn. Đó có thể là sự sáng tạo tùy hứng. Nhưng vẫn phải đảm bảo nằm trong các giới hạn cho phép. Tính hấp dẫn ứng viên luôn là thước đo quan trọng.

Tuyển dụng sáng tạo đòi hòi sự kết hợp tuyệt vời giữa hình thức và nội dung. Sáng tạo không cần đi quá xa, nó, chỉ cần bám sát mục tiêu làm thế nào để tăng tính hiệu quả tuyển dụng thì bạn sẽ có cách thức sáng tạo phù hợp. Sáng tạo rất da dạng.

Đó có thể là một hình ảnh kèm nội dung đính kèm, các hình ảnh với phông chữ sinh động, màu sắc hài hóa, tăng tính liên kết, dạng video có nhạc, GIF và những hiệu ứng linh động khác nhau,… Khi nhiều doanh nghiệp áp dụng hình thức này, nó trở nên không còn đơn lẻ mà sự cạnh tranh bắt đầu tăng lên. Và làm cách nào để tăng tính nhận diện thương hiệu tuyển dụng, nó là bài toàn lớn về mareting sáng tạo.

Chất lượng vẫn hơn số lượng

Nếu chiến lược đủ dài hạn và bản thân các cá nhân/tổ chức đủ tầm nhìn thì việc cân nhắc đường đi nước bước trong chu trình tuyển dụng là rất quan trọng. Có thể đối với một doanh nghiệp hoàn toàn mới, họ chưa có sự nhận diện với ứng viên, thì giai đoạn đầu thật sự quan trọng.

Dù chắc chắn rằng chất lượng quan trọng hơn. Nhưng, để tăng tính nhận diện, chúng ta nên đầu tư nội dung vào giai đoạn đầu. Và tất nhiên, nó phải có chỉnh thể, có tổ chức, không mơ hồ. Khi mọi thứ đã ổn, ứng viên đã biết rõ về định hướng của tổ chức bạn là gì, thì lúc đó việc tiếp cận cần được đẩy lên một mức nâng cao hơn. 

Chất lượng vẫn hơn số lượng

Bạn cần giảm thiểu các bài đăng nội dung chung chung. Hãy tập trung khai thác nhiều nội dung khác nhau. Tin tuyển dụng không quá dài nhưng không được rỗng. Khi đọc xong tin tuyển dụng, tiêu đề tuyển dụng, ít nhất ứng viên phải nắm bắt được những gì doanh nghiệp yêu cầu, đâu là các kỹ năng cần phải có. 

Hãy đảm bảo các bài đăng tuyển dụng qua mạng xã hội của bạn phải có logic, trình tự rõ ràng và có sự liên kết chung với nhau. Không nên đăng bài với tần suất dày đặc. Ứng viên họ sẽ nghĩ đó là spam, hoặc các nguồn tin về tuyển dụng kém tin cậy. Quan trọng là nên phân ra các khung giờ cụ thể và phải có kế hoạch đăng bài hợp lý. Có thế, bạn mới thật sự đạt được cái gọi là tuyển dụng hiệu quả trên Facebook.

Những mẫu đăng tin và tiêu đề tuyển dụng hiệu quả trên Facebook

Các mẫu tin tuyển dụng nổi bật

Mẫu 1 – Tuyển dụng Chuyên viên phân tích dữ liệu

Ngân hàng TMCP Đầu tư và Phát triển Việt Nam (BIDV) tuyển 3 vị trí  Chuyên viên phân tích dữ liệu

Mô tả công việc:

Phối hợp với đồng nghiệp thực hiện một hoặc một số nhóm công việc sau:

  • Thu thập và làm sạch dữ liệu: 
    • Tìm hiểu nắm bắt hệ thống thông tin quản lý MIS tại BIDV và các hệ thống cấp dữ liệu gốc như corebanking, các chương trình ngoài corebanking.
    • Nghiên cứu đề xuất thu thập dữ liệu, dữ liệu lớn từ các nguồn dữ liệu khác ngoài dữ liệu sẵn có kể cả dữ liệu bên ngoài BIDV để phục vụ cho phân tích dữ liệu.
    • Xử lý và làm sạch dữ liệu từ các nguồn cung cấp dữ liệu. 
    • Thu thập các thông tin qua các kênh mạng xã hội (Bao gồm thông tin tài chính và phi tài chính).
  • Tham gia xây dựng và quản lý hệ thống báo cáo cho Trung tâm ngân hàng số
    • Tham gia các dự án, nhóm làm việc liên quan đến phân tích dữ liệu ứng dụng vào các giải pháp, sáng kiến ngân hàng số.
    • Khai thác các hệ thống dữ liệu sẵn có để phục vụ nhu cầu báo cáo, phân tích, ra quyết định quản lý của Trung tâm Ngân hàng số.
    • Thực hiện các báo cáo đột xuất.
    • Nghiên cứu, đề xuất và tự động hóa công tác báo cáo.
  • Xây dựng và phát triển các mô hình dữ liệu 
    • Đề xuất xây dựng, lựa chọn, ứng dụng các mô hình phân tích dữ liệu cho các hoạt động nghiệp vụ. Các mô hình phân tích dữ liệu tập trung vào lĩnh vực phân nhóm khách hàng để xác định khách hàng mục tiêu cho các chiến dịch marketing, chiến dịch bán chéo sản phẩm, chào bán sản phẩm dịch vụ ngân hàng cho khách hàng có nhu cầu. Các sản phẩm dịch vụ chính cần chào bán hoặc quảng bá: tài khoản thanh toán, cho vay, huy động vốn, dịch vụ ngân hàng điện tử, bảo hiểm, thẻ.
    • Sử dụng các mô hình thống kê vào việc phân tích dữ liệu. Từ đó đưa ra các đề xuất nhằm cải thiện chất lượng và làm giàu dữ liệu.
    • Kiểm định, đánh giá và cải tiến mức độ hiệu quả, ổn định của các mô hình (Thực hiện các A/B testing, kiểm định, đánh giá).
    • Đề xuất các sáng kiến cho Trung tâm Ngân hàng số dựa trên các nội dung phát hiện được trong quá trình phân tích dữ liệu.
    • Nghiên cứu đề xuất cách thức khai thác, phát triển các mô hình phân tích phù hợp với các loại hình dữ liệu phi cấu trúc, dữ liệu hình ảnh, dữ liệu âm thanh. 
    • Nghiên cứu các phương pháp áp dụng dữ liệu lớn vào chấm điểm tín dụng. 
Yêu cầu công việc:
Tiêu chuẩn chung:
  • Là công dân Việt Nam, có hộ khẩu thường trú tại Việt Nam. Tuổi đời không quá 35 tuổi.
  • Có sức khoẻ để đảm nhiệm công tác.
  • Có phẩm chất đạo đức tốt, không có tiền án, tiền sự; không trong thời gian bị truy cứu trách nhiệm hình sự, chấp hành án phạt tù, án treo, cải tạo không giam giữ, quản chế, đang chịu biện pháp giáo dục tại địa phương, đang chữa bệnh, cai nghiện…
Tiêu chuẩn cụ thể:
  • Trình độ chuyên môn
    • Tốt nghiệp Đại học trở lên tại các trường Đại học trong nước hoặc Đại học tại nước ngoài.
    • Chuyên ngành: Công nghệ thông tin, toán tin hoặc chuyên ngành phù hợp khác…
  • Ngoại ngữ:
    • Cung cấp chứng chỉ tiếng Anh bất kỳ thuộc nhóm chứng chỉ sau (TOEIC, IELTS, TOEFL, chứng chỉ A1, A2, B1, B2, C1, C2 của các đơn vị được phép cấp chứng chỉ). Trường hợp ứng viên thiếu chứng chỉ tiếng Anh, ứng viên sẽ bắt buộc phải bổ sung trong vòng 1 năm kể từ ngày được tuyển dụng.
  • Kiến thức, kỹ năng, kinh nghiệm: 
    • Có ít nhất 03 năm kinh nghiệm về CNTT liên quan đến phân tích dữ liệu, dữ liệu lớn, các bài toán phân tích khách hàng. Có kinh nghiệm làm việc với Big Data, Data Mining, Machine Learning, AI là một lợi thế.
    • Nắm bắt, hiểu và sử dụng các kiến thức về toán học và thống kê, các mô hình thống kê (ARIMA, ARCH,….), các mô hình Machine Learning (Logistic, Decision Trees, Ensemble Models, Radom Forests, …),  các giao tiếp lập trình phân tích dữ liệu (Data APIs) trong quá trình khai thác và phân tích dữ liệu. 
    • Có kinh nghiệm và hiểu biết sâu về kiến trúc kho dữ liệu, dữ liệu lớn và các công nghệ quản lý thông tin của IBM như PureData System for Analytic, IBM Cognos, IBM Datastage hoặc tương đương khác; nắm được các công nghệ về Hadoop, MapReduce, Apache Spark, các ngôn ngữ lập trình SQL, NoSQL, Python, R, IBM SPSS, KNIME hoặc tương đương phục vụ phát triển, phân tích dữ liệu.
    • Có kiến thức về ngân hàng (đặc biệt trong hành vi khách hàng và các nghiệp vụ liên quan ngân hàng như tiền gửi, tiền vay, thanh toán, ngân hàng điện tử, thẻ), hiểu dữ liệu Ngân hàng  và có kinh nghiệm xây dựng các công cụ thu thập thông tin  từ các mạng xã hội là một lợi thế 
Mức lượng, chế độ đãi ngộ:
  • Mức lương được thỏa thuận theo năng lực
  • Review lương theo kế hoạch chung của công ty
  • Được hưởng đầy đủ các chế độ phúc lợi của công ty theo quy định
  • Được tham gia các chế độ BHXH, BHYT theo quy định của nhà nước khi ký hợp đồng lao động
  • Làm việc trong môi trường trẻ trung, năng động và có nhiều cơ hội được thăng tiến, phát triển bản thân

Mẫu 2: Tuyển dụng Chuyên viên Cao cấp phát triển ứng dụng Back-end Developer

Ngân hàng TMCP Việt Nam Thịnh Vượng (VPBank) tuyển dụng Chuyên Viên Cao Cấp Phát Triển Ứng Dụng – Back-end Developer

Mô tả công việc:
  • Chịu trách nhiệm đảm bảo việc thành công trong hoạt động, công việc cụ thể với các chức năng; trách nhiệm mà cấp Quản lý trực tiếp giao phó/ kỳ vọng.
  • Hướng dẫn đồng nghiệp trong đơn vị và ngoài đơn vị về cách thức sử dụng phương pháp Agile để thực thi công việc.
  • Định kỳ báo cáo và cập nhật tình hình các công việc được giao
  • Nghiên cứu, đánh giá công nghệ mới. Đóng góp ý tưởng, giải pháp không chỉ về mặt công nghệ mà còn khuyến khích về mặt sản phẩm.
Yêu cầu công việc:
  • Trình độ Học vấn: Tốt nghiệp Đại học trở lên hoặc có bằng cấp tương đương của các đơn vị đào tạo công nghệ thông tin có tiếng.
  • Kiến thức/ Chuyên môn có liên quan:
    • Thành thạo, hiểu biết sâu rộng Java Core
    • Có kinh nghiệm sử dụng các framework Spring Boot, Struts, Hibernate
    • Sử dụng thành thạo một trong các hệ quản trị cơ sở dữ liệu MySQL, Oracle, SQL server
    • Hiểu biết về webservice SOAP/ Restful, chuẩn message JSON, OOP, XML, Design partern, web server…
    • Có kiến thức cơ bản về hệ thống, Network, OS (Window, Linux…)
    • Sử dụng thành thạo các IDE phát triển
    • Sử dụng thành thạo các tool quản lý source code, quản lý công việc
    • Hiểu biết về cache (redis, memcache,…), MessageQueue (Rabbit, ActiveMQ…) là một lợi thế
    • Tiếng Anh: đọc hiểu tài liệu tiếng Anh chuyên ngành tốt, giao tiếp tốt là một lợi thế
    • Kiến thức triển khai dự án với các phương pháp khác nhau như Agile, water-fall, Kanban
  • Các kỹ năng chính:
    • Làm việc độc lập/ theo nhóm. Có kỹ năng giao tiếp làm việc trong nhóm, các bộ phận liên quan
    • Lập kế hoạch, thực thi, quản lý công việc được giao
    • Có khả năng tổng hợp phân tích đánh giá vấn đề/ yêu cầu
    • Chịu được áp lực công việc
    • Tính chủ động và thái độ tiếp nhận công việc qua tinh thần “can-do”!
  • Các kinh nghiệm liên quan:
    • Xây dựng được một ứng dụng app back-end hoàn chỉnh; module hóa các nhóm tính năng mang tính trìu tượng cao
    • Kinh nghiệm làm về các ứng dụng/ hệ thống tài chính ngân hàng
Quy chế về lượng – chế độ đãi ngộ:
  • Thỏa thuận theo năng lực
  • Lương thưởng được Review theo kế hoạch chung của công ty
  • Được hưởng đầy đủ các chế độ phúc lợi của công ty theo quy định
  • Được tham gia các chế độ BHXH, BHYT; môi trường làm việc năng động, phát triển và thăng tiến.

Một số tiêu đề tuyển dụng hiệu quả trên facebook bạn cần biết

  1. Tổng hợp các vị trí việc làm Nhân sự hot nhất hiện này
  2. Tuyển dụng Nhân sự – Việc tốt & Lương cao
  3. Cơ hội phát triển nghề nghiệp cho các vị trí Nhân sự hấp dẫn
  4. Tuyển dụng Nhân sự đi làm ngay
  5. Nhiều vị trí nhân sự tuyển dụng – Lương thưởng tốt
  6. Tuyển dụng – Tìm việc lương cao cực kỳ hấp dẫn
  7. Cơ hội cho sinh viên mới ra trường – Nhiều vị trí Nhân sự chất lượng
  8. Nhân viên Nhân sự  – Cơ hội trải nghiệm từ các Tập đoàn đa quốc gia
  9. Tuyển dụng các vị trí Nhân sự đa ngành
  10.  Tìm việc, tuyển dụng Nhân sự lương cao uy tín nhất
  11. Tuyển dụng hàng trăm vị trí Nhân sự với mức lương cực kỷ hấp dẫn
  12.  Các việc làm nhân sự mới nổi – Thu nhập ổn định
  13. Tổng hợp việc làm Nhân sự nổi bật nhất

Tiêu đề có yếu tố sáng tạo trong câu từ

  1. Chiêu mô anh tài Nhân sự 
  2. Tuyển đồng đội Cộng tác viên, Intern, Part-Time, Full-time, Freelancer 
  3. Job nhân sự mới – Apply liền tay, chớp ngay cơ hội
  4. Hot Job tuyển dụng các vị trí Nhân sự  – Apply ngay kẻo lỡ
  5. Truy tìm đồng đội nhân sự mới, lương thưởng hấp dẫn
  6. Cơ hội lớn để bước vào ngành Nhân sự 
  7. O tròn như quả trứng gà; Ô thì đội mũ; Ơ thì Job ngon – Tìm đông đội nhân sự, trải nghiệm tại các tập đoàn tiềm năng
  8. Gió đưa cành trúc la đà – Ai chưa có việc thì vào Apply
  9. Nếu là tín đồ của ngành Nhân sự  – Đừng bỏ qua Job này!
  10. Ứng tuyển Job HR ngon  – Pass phỏng vấn – Đi làm ngay!
  11. Tuyển gấp các đồng đội Nhân sự  – Lương up to hấp dẫp
  12. Truy tìm ứng viên Nhân sự tiềm năng cho các dự án
  13. Top những vị trí nhân sự hot nhất
  14. Đi đầu mà vội mà vàng  – Dừng chân đứng lại một hàng Job ngon
  15. Thách thức mới với vị trí Nhân sự – Bạn có dám thử không

Tổng hợp các group tuyển dụng hiệu quả trên Facebook

  1. Lập Trình C,C++,C#,Java,Python,PHP… | Thành viên: 423.456

2. Kteam – Lập Trình C/C++, C#, SQL, Unity3D, Java, Android, PHP, ASP.NET | Thành viên: 207.020

3. Cộng Đồng IT Việt Nam | Thành viên: 64.901

4. Lập trình và cuộc sống | Thành viên: 37.355

5. Tech Talk| Thành viên: 76.874

6. Cộng đồng Java – IT jobs Việt Nam | Thành viên: 19.239

7. Tuyển dụng IT | Thành viên: 18.156

8. DevOps VietNam | Thành viên: 54.851

9. VietNam IOS Developers | Thành viên: 17.378

10. IT Jobs – Tuyển Dụng IT – SusuDev | Thành viên: 60.387

11. TESTING VN (Dành riêng cho Tester, QA, QC và BA) | Thành viên:  46.170


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

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

Xem thêm việc làm ngành IT hàng đầu tại TopDev

ShopBack: Tips tiết kiệm khi mua sắm thiết bị công nghệ

Việc mua sắm các thiết bị công nghệ thường sẽ chiếm nhiều nhất trong các phần ngân sách của bạn. Tuy nhiên, để tiết kiệm được chi phí mua sắm và tận hưởng những ưu đãi hấp dẫn, bạn có thể sử dụng ShopBack – một nền tảng mua sắm trực tuyến phổ biến. Trong bài viết này, chúng ta sẽ khám phá những lợi ích của việc sử dụng ShopBack khi mua sắm thiết bị công nghệ, cùng với các tips hữu ích để tiết kiệm chi phí.

1. Lợi ích khi sử dụng ShopBack để mua sắm

Lợi ích khi sử dụng ShopBack để mua sắm

ShopBack mang lại nhiều lợi ích cho người dùng khi mua sắm thiết bị công nghệ. Đầu tiên, bạn sẽ luôn nhận được hoàn tiền thật đến 30% khi mua sắm thông qua ShopBack.Khi bạn mua sắm thiết bị công nghệ từ các đối tác của ShopBack như Samsung, Dyson,LocknLock, Anker,.. , bạn sẽ nhận được hoàn tiền lên đến 30% trong tài khoản ShopBack. Và sau khi bạn có đủ 50.000đ trong Số Dư Khả Dụng, bạn có thể rút hoàn tiền này về tài khoản ngân hàng của mình và sử dụng để tiếp tục mua sắm. Điều này giúp bạn tiết kiệm được một khoản tiền đáng kể trong quá trình mua sắm.

Ngoài ra, ShopBack còn tổ chức các thử thách và chương trình khuyến mãi đặc biệt. Thử thách giúp bạn nhận thêm tiền thưởng khihoàn thành các nhiệm vụ nhất định, từ việc check-in tại app cho đến mua hàng dựa trên từng điều kiện trong thử thách. Tham gia các thử thách này không chỉ giúp bạn tiết kiệm tiền, mà còn mang lại niềm vui và thách thức trong quá trình mua sắm.

2. Các thương hiệu điện tử/công nghệ phổ biến và cách mua sắm thông qua ShopBack để nhận hoàn tiền

Các thương hiệu điện tử/công nghệ phổ biến và cách mua sắm thông qua ShopBack để nhận hoàn tiền

ShopBack kết nối người dùng với các thương hiệu điện tử và công nghệ phổ biến. Dưới đây là một số thương hiệu nổi tiếng mà bạn có thể mua sắm thông qua ShopBack:

2.1 Thương hiệu điện tử

Samsung: ShopBack là nơi bạn có thể mua sắm các sản phẩm của Samsung như điện thoại di động, máy tính bảng, TV, và nhiều thiết bị công nghệ khác với mức hoàn tiền lên đến 4%, và vào những dịp ưu đãi lớn, ShopBack có thể tăng hoàn tiền lên đến 10%.

Dyson, Anker, Nguyễn Kim, Coway… cũng là các đối tác mà khi mua sắm bạn có thể nhận hoàn tiền từ ShopBack. Ngoài ra, ShopBack còn liên kết với rất nhiều các thương hiệu điện tử chính hãng tại Shopee, Lazada, Tiki,…Khám phá thương hiệu điện tử tại đây: https://app.shopback.com/CongNghe

2.2 Cách mua sắm thông qua ShopBack

Để mua sắm thiết bị công nghệ thông qua ShopBack, bạn chỉ cần đăng nhập vào tài khoản của mình trên ShopBack, tìm kiếm cửa hàng hoặc thương hiệu mong muốn, và nhấp vào liên kết để được điều hướng sang cửa hàng và mua sắm như bình thường. Tiền hoàn sẽ được ghi nhận trong vòng 48H sau khi bạn thanh toán thành công. Và từ 45-90 ngày tùy vào từng đối tác, tiền hoàn sẽ chuyển sang trạng thái Đã Xác Nhận và bạn có thể rút tiền về tài khoản ngân hàng của mình.

3. Du lịch cũng được hoàn tiền với ShopBack

Du lịch cũng được hoàn tiền với ShopBack

Không chỉ giới hạn trong lĩnh vực mua sắm, ShopBack đã mở rộng ra mảng du lịch với các thương hiệu nổi tiếng hàng đầu như Traveloka, Agoda, Klook, KKday, Booking.com,… Bạn có thể tận hưởng ưu đãi và hoàn tiền đến 12% khi đặt phòng khách sạn hoặc đặt tour du lịch thông qua các đối tác của ShopBack trong ngành du lịch, khám phá tại https://app.shopback.com/VuTruViVu. Việc sử dụng ShopBack không chỉ giúp bạn tiết kiệm chi phí mua sắm mà còn mang đến cho bạn những trải nghiệm du lịch thú vị với mức giá ưu đãi.

Hãy khám phá ShopBack và tải app https://app.shopback.com/vnm/partner/topdev ngay hôm nay để tận hưởng những ưu đãi hấp dẫn và tiết kiệm hơn với hoàn tiền khi mua sắm, cũng như trải nghiệm các dịch vụ du lịch thú vị với giá cả phải chăng và đa dạng lựa chọn bạn nhé.

Tham khảo thêm nhiều việc làm IT hấp dẫn tại TopDev!

debounce, throttle và once – ba hàm thêm cách giải quyết logic người dùng!

Bài viết được sự cho phép của tác giả Tống Xuân Hoài

Vấn đề

Tìm ra cách giải quyết vấn đề là một trong những kỹ năng hết sức quan trọng đối với lập trình viên. Thông thường, khi chúng ta làm càng nhiều thì kinh nghiệm càng lên cao. Lúc này đối mặt với những bài toán tương tự mà có thể nhanh chóng tìm ra hướng giải quyết.

Có nhiều cách để học hỏi kinh nghiệm, một trong số đó là chịu khó tìm kiếm và đọc nhiều bài viết, tài liệu trên mạng. Nhiều khi kiến thức ta thu nạp được chưa cần thiết ngay lúc này, nhưng đến một lúc nào đó nó có thể phát huy tác dụng. Hoặc ít ra, đọc để trong đầu ta tự thốt lên: “À hóa ra với trường hợp này thì chúng ta nên xử lý thế này…”.

deboncethrottle và once là ba hàm tiện ích mà qua đó có thể ứng dụng trong rất nhiều trường hợp. Đặc biệt là logic về UI/UX, trải nghiệm người dùng… Bài viết ngày hôm nay, tôi xin phép được trình bày về công dụng cũng như cách sử dụng chúng.

Debounce

Debounce là một kỹ thuật ngăn chặn một chuỗi sự kiện tương tự nhau diễn ra liên tiếp. Thay vào đó, sự kiện tiếp theo chỉ được gọi sau một khoảng thời gian hành động chấm dứt.

Một ví dụ thông dụng nhất mà chúng ta thường gặp đó là tính năng gõ từ khóa vào ô tìm kiếm. Khi nhập kí tự, kết quả tìm kiếm hoặc cụm từ gợi ý hiện ra. Đằng sau quá trình này là một cách xử lý nào đó, ví dụ như gọi API để lấy dữ liệu trước khi người dùng bấm vào nút tìm kiếm hoặc nhấn Enter. Nếu bắt sự kiện keypress thì cứ mỗi lần nhấn phím sẽ gọi một lần API. Như thế quả là lãng phí tài nguyên máy chủ bời vì tốc độ của người gõ là rất nhanh, chưa kể từ khóa họ nhập vào còn chưa đầy đủ. Để xử lý tối ưu trong trường hợp này là chờ một khoảng thời gian người dùng không nhấn nhím nữa thì hãy kích hoạt cuộc gọi API.

  Chuyện gì xảy ra khi ta Throw Exceptions?

  Laravel view xây dựng logic trong giao diện

Đây là lúc debounce phát huy tác dụng. Một hàm debounce có thể trông giống như dưới đây:

function debounce(func, delay) {
  let timeout;
  return function() {
    const context = this;
    const args = arguments;
    clearTimeout(timeout);
    timeout = setTimeout(() => func.apply(context, args), delay);
  };
}

Sau đó, sử dụng hàm trong sự kiện keypress. Ở đây mình lấy ví dụ trong vue:

<input @keypress="debounce(triggerCallAPI, 500)" />

Khi đó cứ mỗi 500ms mà người dùng không nhập gì nữa thì triggerCallAPI sẽ được gọi.

Một trường hợp phổ biến khác là sự kiện resize của trình duyệt. Trong quá trình thay đổi kích thước cửa sổ, có nhiều hàm cần chạy để xử lý logic. Nếu cứ gọi hàm liên tục khi resize chắc chắn hiệu năng sẽ bị ảnh hưởng. Lúc đó, chúng ta có thể sử dụng debounce để giải quyết vấn đề này.

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

Throttle

Throttle phần nào giống như Debounce. Nghĩa là nó cũng ngăn chặn sự kiện diễn ra liên tiếp, nhưng theo một cách khác so với Debounce.

Nếu Debounce chỉ kích hoạt sự kiện sau một khoảng thời gian mà sự kiện không xảy ra nữa thì Throttle lại chỉ kích hoạt sự kiện sau một khoảng thời gian mà bất kể sự kiện đó có diễn ra hay không. Hay nói ngắn gọn lại là Throttle chỉ cho phép chạy một sự kiện trong mỗi x giây. Sau x giây, lần chạy tiếp theo mới được thực thi nếu nó còn được kích hoạt (trigger).

Một hàm throttle có thể trông giống như dưới đây:

function throttle(func, delay) {
  let wait = false;

  return (...args) => {
    if (wait) {
        return;
    }

    func(...args);
    wait = true;
    setTimeout(() => {
      wait = false;
    }, delay);
  }
}

Bất cứ khi nào cần giới hạn thời gian giữa các lần kích hoạt sự kiện bạn có thể áp dụng Throttle. Ví dụ, ngăn chặn người dùng bấm quá nhanh vào một nút “Submit”.

<input type="submit" @submit="throttle(triggerCallAPI, 500)" />

Nghĩa là triggerCallAPI chỉ được gọi sau mỗi 500ms bất kể người dùng có bấm vào nút bao nhiêu lần đi chăng nữa.

Once

Once chỉ cho phép sự kiện được gọi một lần duy nhất. Once hữu ích trong trường hợp bạn chỉ cho phép người dùng thực hiện một hành động trong phiên truy cập.

Một hàm once có thể giống giống như sau:

function once(func) {
  let ran = false;
  let result;
  return function() {
    if (ran) return result;
    result = func.apply(this, arguments);
    ran = true;
    return result;
  };
}

Ví dụ sử dụng trong trường hợp nút “Đánh dấu tất cả là đã đọc” của khung thông báo. Người dùng chỉ cần thực hiện bấm vào nút đó một lần trong mỗi phiên.

<button @click="once(triggerCallAPI)">Đánh dấu tất cả là đã đọc</button>

triggerCallAPI chỉ được gọi một lần duy nhất khi người dùng bấm vào button. Các lần tiếp theo, triggerCallAPI sẽ không được kích hoạt.

Tổng kết

Trên đây là 3 hàm debouncethrottle và once với mô tả kèm theo cách sử dụng. Chúng rất thông dụng trong xử lý logic về giao diện người dùng, đến nỗi nhiều thư viện tiện ích đều có mặt của 3 hàm này như là lodash. Việc biết đến cũng như biết cách sử dụng có thể giúp bạn giảm được thời gian giải quyết vấn đề trong những trường hợp tương tự trong bài viết.

Bài viết gốc được đăng tải tại 2coffee.dev

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

Vì sao lương khủng, đãi ngộ tốt vẫn khó tuyển IT?

Với sự phát triển nhanh chóng của công nghệ thông tin và sự ảnh hưởng mạnh mẽ của cuộc cách mạng công nghiệp 4.0, nhu cầu về nhân lực IT ngày càng tăng cao. Mỗi năm có hàng nghìn kỹ sư CNTT tham gia vào thị trường lao động đầy tiềm năng này. Nhưng nghịch lý thay, các công ty vẫn không tìm được nhân sự IT phù hợp. Vậy vì sao tuyển IT khó đến vậy? Những giải pháp nào để giải quyết vấn đề trên? Tất cả sẽ có trong bài viết này!

Thực trạng hiện nay của thị trường nhân lực IT

nhu cầu nhân lực it 2022

Từ trước đến nay, nhu cầu nhân lực ngành CNTT chưa bao giờ “giảm nhiệt”. Theo báo cáo thi trường IT Việt Nam 2022 của TopDev, với tốc độ tăng trưởng như hiện nay thì đến năm 2024 thị trường cần 800.000 lập trình viên. Việt Nam sẽ vẫn thiếu hụt 150.000 – 195.000 lập trình viên / kỹ sư hàng năm.

Vấn đề này đã tạo nên sức ép to lớn cho các nhà tuyển dụng trong quá trình tìm kiếm nhân tài cho doanh nghiệp. Bên cạnh đó, hàng năm vẫn có hơn 50.000 sinh viên tốt nghiệp chuyên ngành CNTT và cả những bộ phận nhân sự trái ngành tham gia vào thị trường IT. Thế nhưng, để tìm được một ứng viên đáp ứng đủ yêu cầu cả về “lượng” lẫn về “chất” thì không mấy dễ dàng. Nguyên nhân của vấn đề này nằm ở cả ứng viên và doanh nghiệp tuyển dụng.

Ở phần tiếp theo chúng ta sẽ tìm hiểu rõ hơn về nguyên nhân của việc vì sao tuyển IT khó và những giải pháp cho vấn đề nan giải này.

Vì sao tuyển IT khó? Nguyên nhân từ đâu?

Nguyên nhân từ ứng viên

1. Thiếu hụt ứng viên chất lượng

Một trong những lý do chính khiến việc tìm kiếm nhân sự IT trở nên khó là sự thiếu hụt nhân sự chất lượng. Các doanh nghiệp thường tìm kiếm những ứng viên có kiến thức chuyên môn sâu, kỹ năng công nghệ cao và kinh nghiệm thực tế. Tuy nhiên, không phải lúc nào cũng dễ dàng tìm được những ứng viên như vậy, đặc biệt là ở một số khu vực với nguồn nhân lực IT hạn chế.

2. Tỷ lệ nhảy việc cao

tỉ lệ nhảy việc

Nhân sự công nghệ thông tin thông thường có xu hướng tìm kiếm cơ hội mới để tiến xa hơn trong sự nghiệp của họ. Ngay cả khi đang làm việc tại doanh nghiệp nhất định, họ cũng có thể nhận được offer hấp dẫn từ một công ty khác. Điều này làm cho các doanh nghiệp phải đối mặt với việc tìm kiếm và đào tạo nhân sự mới, gây khó khăn trong việc duy trì sự ổn định và sự phát triển của doanh nghiệp.

3. Sự đa dạng trong công việc IT

Lĩnh vực công nghệ thông tin rất đa dạng và phong phú, bao gồm nhiều vị trí và vai trò khác nhau như phân tích hệ thống, phát triển phần mềm, quản trị mạng. Điều này làm cho tuyển dụng trong ngành IT trở nên phức tạp hơn, vì các doanh nghiệp phải tìm kiếm và lựa chọn ứng viên phù hợp với từng vai trò cụ thể.

4. Khả năng ngoại ngữ hạn chế

Ngoại ngữ được coi là một điểm yếu lớn đối với các nhân sự IT. Sự chênh lệch về mức lương và cơ hội giữa những người có ngoại ngữ và những người không có ngoại ngữ là rất lớn. Việc các ứng viên không có ngoại ngữ sẽ khó đáp ứng được hết các yêu cầu công việc, nhất là khi làm việc với các đối tác nước ngoài.

  Bí quyết deal lương giúp bạn “lật bài ngửa” với nhà tuyển dụng

Nguyên nhân từ doanh nghiệp

1. Cạnh tranh từ các doanh nghiệp khác

Cạnh tranh từ các doanh nghiệp khác

Với một ngành đang phát triển mạnh mẽ như CNTT, các doanh nghiệp đang phải cạnh tranh với nhau để thu hút và giữ chân nhân sự IT giỏi. Các công ty công nghệ lớn và nổi tiếng thường thu hút nhân tài hàng đầu với các chương trình tuyển dụng hấp dẫn. Điều này làm cho việc tuyển dụng của các công ty nhỏ và mới thành lập trở nên khó khăn hơn.

2. Phương pháp tuyển dụng chưa phù hợp

Quá trình tuyển dụng cồng kềnh, yêu cầu nhiều thủ tục phức tạp và quá trình xử lý chậm có thể khiến những ứng viên tiềm năng mất lòng kiên nhẫn và chuyển sang tìm việc ở những nơi có quy trình tuyển dụng linh hoạt hơn. Việc cải thiện phương pháp tuyển dụng có thể giúp gia tăng hiệu suất tuyển dụng và thu hút ứng viên xuất sắc hơn.

  Phương pháp lập Kế hoạch tuyển dụng

3. Chưa mạnh về thương hiệu tuyển dụng

Một yếu tố quan trọng cần được xem xét là thương hiệu tuyển dụng của doanh nghiệp. Nếu một doanh nghiệp không nổi tiếng hoặc không có danh tiếng tốt trong lĩnh vực công nghệ thông tin, việc thu hút nhân sự chất lượng sẽ trở nên khó khăn hơn. Để giải quyết vấn đề này, các doanh nghiệp cần đầu tư vào quảng cáo, xây dựng thương hiệu tốt và phát triển mối quan hệ tốt với cộng đồng IT để thu hút nhân sự có tiềm năng.

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

4 giải pháp “vàng” giúp tuyển dụng IT hiệu quả

Để giải quyết câu hỏi vì sao tuyển IT khó các doanh nghiệp cần áp dụng đồng thời nhiều phương pháp để tìm được ứng viên phù hợp, Vậy phương pháp đó là gì?

1. Tập trung xây dựng thương hiệu tuyển dụng

Xây dựng thương hiệu tuyển dụng mạnh mẽ đóng vai trò quan trọng trong việc thu hút nhân tài IT. Một cách để xây dựng thương hiệu tuyển dụng hiệu quả là thông qua việc phát triển một trang web tuyển dụng chuyên nghiệp và hấp dẫn.

xây dựng thương hiệu tuyển dụng

Ngoài ra, việc sử dụng các kênh truyền thông xã hội như FacebookLinkedIn cũng là một phương tiện hiệu quả trong xây dựng thương hiệu tuyển dụng. Các doanh nghiệp có thể tận dụng các tính năng của các mạng xã hội này như việc đăng tin tuyển dụng, chia sẻ thông tin về công việc và nêu bật những thành tựu của doanh nghiệp để thu hút nhân tài.

2. Tạo dựng văn hóa chia sẻ trong cộng đồng IT

Ngành IT với đặc thù thay đổi khá nhanh, cứ 3 đến 6 tháng lại có một công nghệ mới ra đời, đòi hỏi developer cũng phải luôn phải học hỏi cập nhật công nghệ mới và quan tâm đến lộ trình phát triển công nghệ của mình. Các câu hỏi của họ thường xuyên là “Công ty này có stack phù hợp với mình hay không?”, “Đội ngũ tech có cởi mở với các công nghệ mới không?”, “Mình sẽ phát triển được gì sau khi làm với họ một thời gian?”…

Vậy giải pháp nào cho các ứng viên tốt, tiềm năng và không chủ động tìm việc ngoài kia?

Cử người làm diễn giả ở các meetup, viết blog chia sẻ kiến thức đều đặn, tổ chức hackathon/cuộc thi/giải thưởng, tham gia tech event, tham gia phỏng vấn của các trang tin công nghệ…là những hoạt động rất tốt giải đáp các câu hỏi này của ứng viên tiềm năng.

Hãy luôn làm đều đặn, ít nhất mỗi tháng có 1 hoạt động dù lớn hay nhỏ, để khi họ phát sinh nhu cầu chuyển việc, công ty của bạn là một trong những lựa chọn đầu tiên, thậm chí chưa cần đến các tin đăng tuyển dụng!

VIETNAM WEB SUMMIT 2022
Sự kiện Vietnam Web Summit diễn ra hằng năm do TopDev tổ chức

3. Tập trung vào các ngách trọng điểm

Mỗi doanh nghiệp đều có đặc thù riêng, có doanh nghiệp làm outsourcing, làm saas, làm về AI, bigdata, blockchain…Hãy tập trung vào các ngách khó tuyển nhất trong kiến trúc công nghệ của doanh nghiệp. Ví dụ: Nếu doanh nghiệp bạn làm Saas về thương mại điện tử với giao diện web bằng PHP nhưng có ứng dụng AI/Machine Learning/Bigdata để tăng trải nghiệm, tối ưu tỷ lệ chuyển đổi…Hãy tập trung làm EB về ngách AI/ML này. Khi bạn làm tốt, tự khắc các ứng viên về web cũng sẽ biết đến bạn.

Nếu có điều kiện, bạn nên làm việc với dịch vụ EB chuyên nghiệp (Như TopDev hiện đang làm với nhiều công ty IT hàng đầu VN), ngoài việc phân phối nội dung blog, phỏng vấn đến rộng rãi cộng đồng developer qua email marketing, mạng xã hội, trang tin công nghệ…họ còn giúp bạn tìm những diễn giả chất lượng đến từ bên ngoài doanh nghiệp và đảm bảo sự kiện của bạn được đông đảo developer tham dự.

4. Áp dụng công nghệ vào quá trình tuyển dụng

Sử dụng các công cụ và hệ thống công nghệ như phần mềm quản lý ứng viên, trang web tuyển dụng, và trí tuệ nhân tạo (AI) để tiết kiệm thời gian và tăng tính chính xác trong quá trình tìm kiếm và đánh giá ứng viên. Công nghệ có thể giúp tự động hóa nhiều giai đoạn trong quá trình tuyển dụng.

Kết luận

Hy vọng qua bài viết trên bạn đã tìm được câu trả lời cho câu hỏi “Vì sao tuyển IT khó?” cũng như tìm được giải pháp để giải quyết vấn đề nan giải này cho doanh nghiệp của mình. Với các giải pháp thích hợp, doanh nghiệp có thể thu hút những chuyên gia IT tài năng và xây dựng đội ngũ mạnh mẽ để đối mặt với những thách thức và cơ hội trong tương lai. Theo dõi TopDev để cập nhật thêm nhiều kiến thức mới về lập trình, thị trường IT và các công nghệ mới nhất bạn nhé!

Xem thêm:

Xem thêm Top việc làm Developer trên TopDev

Tích hợp Google ReCaptcha vào form trong React

Bài viết được sự cho phép của tác giả Sơn Dương

Khi ứng dụng cần thông tin từ người dùng, ví dụ như điền mẫu đơn đăng ký khóa học, đăng ký đặt mua hàng, viết bình luận… Phổ biến nhất là sử dụng form. Form là tập hợp component input như: input fields, checkbox… để người dùng cung cấp thông tin.

Tuy nhiên, vấn đề bị spam sẽ nảy sinh nếu không có biện pháp ngăn chặn. Ứng dụng sẽ bị spam hàng loạt thông tin rác bởi các bot.

Tất nhiên, cái gì cũng có cách khắc phục hết. Giải pháp hiệu quả nhất là tích hợp công cụ Google reCaptcha vào form.

Trong bài viết này, mình sẽ hướng dẫn cách tích hợp Google reCaptcha đơn giản nhất cho các ứng dụng được viết bằng React.

Google reCaptcha là gì

Google ReCaptcha là phần mềm do Google phát hành, mục đích là hạn chế việc spam thông tin khi đăng ký form. Đồng thời, Google ReCaptcha cũng giúp tăng cường bảo mật website, hạn chế bị spam thông tin tự động vào hệ thống.

Hiện tại, Google ReCaptcha được phát hành tới phiên bản thứ 3. Trong đó:

  • Google reCaptcha v1: sử dụng các ký tự bị bóp méo nhất có thể, chỉ có người tinh mắt mới đọc được, hạn chế tối đa các con robot có thể đọc được.
  • Google reCaptcha v2: Sử dụng hình ảnh như vạch kẻ đường, biển bảo, đèn giao thông, nhận diện đồ vật…
  • Google reCaptcha v3: là phiên bản mới nhất, phiên bản này được quảng bá là rất thông minh, người dùng nhiều khi không cần phải đọc ký tự méo mó, không cần chọn hình ảnh như yêu cầu… Nó sẽ tự động nhận biết bạn là người hay robot. Chỉ cần tick vào checkbox là được.

  Lại nói về cách làm thế nào để gọi được API các dịch vụ của Google

  Google Cloud hướng tới hỗ trợ tất cả dữ liệu phi cấu trúc

Xem video giới thiệu về Google reCaptcha v3 từ Google ngay bên dưới.

Tại sao website nên sử dụng Captcha?

Ngày này, người dùng đã quá quen thuộc với Captcha. Hầu hết các hệ thống lớn đều sử dụng Captcha như một công cụ để ngăn chặn spam, tấn công phá hoại…

Ví dụ với Google Search, khi bạn tìm kiếm với nhiều từ khóa lạ, từ khóa lặp lại… Google sẽ nghi ngờ bạn là robot và yêu cầu nhập Captcha. Bạn đã bao giờ gặp phải trường hợp này chưa?

Google reCaptcha

Dưới đây là những lý do nên sử dụng Captcha cho hệ thống website của bạn:

  • Chống Spam: Đây là hình thức tấn công đơn giản nhất nhưng cũng gây khó chịu nhất. Ngay như website VNTALKING nhỏ xinh, mỗi ngày cũng nhận hàng trăm comment kiểu spam của mấy bạn tây balo. Với Google ReCaptcha, mình đã chặn được hết.
  • Bảo vệ dữ liệu: Captcha giúp ngăn ngừa các truy cập tự động từ máy tính hay robot để bảo vệ những thông tin quan trọng trong website.
  • Đảm bảo tương tác thực: Khi bạn muốn nhận thông tin từ khách hàng, từ người dùng thì những thông tin đó phải được thực hiện từ người thật, chứ không phải là mấy con robot. Chỉ có con người mới mang lại yêu thương cho nhau mà thôi.

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

Cách tích hợp Google ReCaptcha

Cũng giống như các ứng dụng khác, trước khi có thể tích hợp Google ReCaptcha vào ứng dụng/website, bạn cần phải đăng ký với Google để lấy API Key.

Sau đây là hướng dẫn chi tiết các lấy API Key.

Đăng ký lấy Google reCaptcha API key

Hiện tại, bạn có thể đăng ký Google reCAPTCHA v2 và v3 đều được, tùy vào sở thích mà bạn chọn lấy phiên bản phù hợp với mình.

Bước 1: Bạn truy cập vào đường dẫn đăng ký Google reCAPTCHA sau: https://www.google.com/recaptcha

Google reCaptcha
Đăng ký lấy API Key Google Captcha

Nếu bạn chưa đăng nhập tài khoản Gmail thì đăng nhập đi nhé.

Bước 2: Điền thông tin đăng ký reCAPTCHA theo mẫu như bên dưới.

Với mỗi phiên bản Captcha sẽ cần điền thông tin khác nhau, cụ thể như sau:

Bạn sẽ có 3 tùy chọn như sau nếu đăng ký Google reCAPTCHA v2:

  • “I’m not a robot” Checkbox: Tùy chọn này sẽ hiện ra một check box để người dùng click chuột vào “Tôi không phải robot”, phần còn lại cứ để Google lo. Đôi khi, Google không thể xác định được tự động người dùng là bot hay người thì nó sẽ hiển thị ảnh để người dùng xác nhận lại.
  • Invisible reCAPTCHA badge: Người dùng không cần click vào check box vì quá trình xác thực sẽ được Google làm tự động và ẩn ở background.
  • reCAPTCHA Android: Lựa chọn này dành cho bạn nếu muốn tích hợp captcha cho ứng dụng Android.
Google reCaptcha
Đăng ký Google Captcha v2

Trong bài viết này, mình chọn như trong hình trên. Sau đó nhớ tick vào ô: “Accept the reCAPTCHA Terms of Service“.

Cuối cùng thì nhấn “Submit” để lấy API Key.

Nhận API Key Google Captcha

Bạn lưu API Key lại để sử dụng ở bưới tiếGoogle reCaptchap theo.

Tích hợp Captcha trong React

Có nhiều cách để tích hợp Captcha trong React. Để thực hiện đơn giản nhất, chúng ta sử dụng thư viện “react-recaptcha-google”.

Hãy lưu ý: Trong bài viết này, mình hướng dẫn các bạn tích hợp Google Captcha v2. Nếu muốn sử dụng Google Captcha v3, bạn có thể sử dụng thư viện react-google-recaptcha-v3, cách thực hiện tương tự nhé.

Cài đặt

Sử dụng npm:

npm install react-recaptcha-google --save

Sử dụng yarn:

yarn add react-recaptcha-google

Khởi tạo ReCaptcha – loadReCaptcha()

Hàm loadReCaptcha() phải được gọi trong main component của ứng dụng. Chúng được khuyến khích gọi trong componentDidMount() của App.js

Ví dụ:

import { loadReCaptcha } from 'react-recaptcha-google'

...

componentDidMount() {
 loadReCaptcha();
}

Sau khi khởi tạo xong, bạn có thể gọi ReCaptcha ở bất kỳ component. Ưu điểm của các khởi tạo này là bạn có thể kiểm soát được khi nào cần tải ReCaptcha và khi nào muốn ngăn chặn việc gọi nó không cần thiết.

Tích hợp <ReCaptcha/> vào một component cụ thể

import React, { Component } from 'react';
import { ReCaptcha } from 'react-recaptcha-google'

class ExampleComponent extends Component {
  constructor(props, context) {
    super(props, context);
    this.onLoadRecaptcha = this.onLoadRecaptcha.bind(this);
    this.verifyCallback = this.verifyCallback.bind(this);
  }

  componentDidMount() {
    if (this.captchaDemo) {
       console.log("started, just a second...")
       this.captchaDemo.reset();
    }
  }

  onLoadRecaptcha() {
      if (this.captchaDemo) {
          this.captchaDemo.reset();
      }
  }

  verifyCallback(recaptchaToken) {
     // Here you will get the final recaptchaToken!!! 
     console.log(recaptchaToken, "<= your recaptcha token")
  }

  render() {
    return (
      <div>
        {/* You can replace captchaDemo with any ref word */}
        <ReCaptcha
            ref={(el) => {this.captchaDemo = el;}}
            size="normal"
            data-theme="dark"
            render="explicit"
            sitekey="<ĐIỀN SITE KEY VÀO ĐÂY>"
            onloadCallback={this.onLoadRecaptcha}
            verifyCallback={this.verifyCallback}
        />
        <code>
          1. Add <strong>your site key</strong> in the ReCaptcha component. <br/>
          2. Check <strong>console</strong> to see the token.
        </code>
      </div>
    );
  };
};

export default ExampleComponent;

Trong đoạn code có một số điểm mình muốn giải thích thêm:

  • data-theme: Bạn có thể tùy chọn theme của reCaptcha là “dark” or “light”.
  • sitekey: Là API Key mà bạn đã nhận được lúc đăng ký với Google.
Hãy lưu ý: Mỗi API Key tương ứng duy nhất với một domain mà bạn đăng ký trước đó. Nếu domain website thay đổi thì cần đăng ký lại.

Ok, vậy là xong rồi đấy.

Như vậy mình đã hướng dẫn xong cách tạo google reCAPTCHA để xác thực người dùng.

Mình hi vọng, bài viết này có ích cho dự án của bạn. Hẹn gặp lại ở bài viết tiếp theo nhé.

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

Xem thêm:

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