Top 5 câu hỏi phỏng vấn C++ hay và khó

Kỹ Năng Mềm
Top 5 câu hỏi phỏng vấn C++ hay và khó
Quay lại với chuỗi bài câu hỏi phỏng vấn, bài viết này liệt kê 5 câu hỏi phỏng vấn C++ . Bài viết này liệt kê 5 câu câu hỏi đi từ dễ tới khó. Do C++ cũng giống như các ngôn ngữ lập trình đối tượng khác, nên một số câu hỏi về OOP và nguyên lý chung của ngôn ngữ sẽ không đề cập trong bài viết này để tiết kiệm thời gian cho anh em nha. Những cái đó kiểu gì trước khi phỏng vấn anh em cũng phải xem lại, mà xem là xem chung chứ không phải chỉ xem cho C++ ha. Ok, bắt đầu thôi. Gét gô 1. Con trỏ trong C++ là gì? Câu hỏi đầu tiên phỏng vấn C++ không thể nào mà bỏ qua được con trỏ (pointer). Anh em dân tình ai code C++ hoặc giảng dạy về C++ lúc nói với đồng nghiệp hoặc học sinh là anh code C++. Đầu tiên là ngưỡng mộ, sau đó là câu hỏi “Ủa ông còn nhớ con trỏ trong C++ hả?”. Hết hồn chim én liền Vậy con trỏ trong C++ là gì?. Tại sao mọi người thường nhớ về C++ là nhớ tới con trỏ? Pointer is a variable that stores the memory address as its value . Con trỏ là biến chỉ tới giá địa chỉ bộ nhớ có giá trị của biến. string category = "Phỏng vấn c++"; // Biến category có kiểu dữ liệu là string cout << category; // Xuất ra giá trị của biến category (Phỏng vấn c++) cout << &category; // Xuất ra địa chỉ bộ nhớ của biến category (0x6dfed4) Vậy con trỏ trong C++ sử dụng làm gì? They enable programs to simulate call-by-reference as well as to create and manipulate dynamic...

Quay lại với chuỗi bài câu hỏi phỏng vấn, bài viết này liệt kê 5 câu hỏi phỏng vấn C++. Bài viết này liệt kê 5 câu câu hỏi đi từ dễ tới khó.

Do C++ cũng giống như các ngôn ngữ lập trình đối tượng khác, nên một số câu hỏi về OOP và nguyên lý chung của ngôn ngữ sẽ không đề cập trong bài viết này để tiết kiệm thời gian cho anh em nha. Những cái đó kiểu gì trước khi phỏng vấn anh em cũng phải xem lại, mà xem là xem chung chứ không phải chỉ xem cho C++ ha.

Ok, bắt đầu thôi. Gét gô

1. Con trỏ trong C++ là gì?

Câu hỏi đầu tiên phỏng vấn C++ không thể nào mà bỏ qua được con trỏ (pointer). Anh em dân tình ai code C++ hoặc giảng dạy về C++ lúc nói với đồng nghiệp hoặc học sinh là anh code C++. Đầu tiên là ngưỡng mộ, sau đó là câu hỏi “Ủa ông còn nhớ con trỏ trong C++ hả?”.

phỏng vấn c++phỏng vấn c++Hết hồn chim én liền

Vậy con trỏ trong C++ là gì?. Tại sao mọi người thường nhớ về C++ là nhớ tới con trỏ?

Pointer is a variable that stores the memory address as its value. Con trỏ là biến chỉ tới giá địa chỉ bộ nhớ có giá trị của biến.

string category = "Phỏng vấn c++"; // Biến category có kiểu dữ liệu là string 

cout << category;  // Xuất ra giá trị của biến category (Phỏng vấn c++)
cout << &category; // Xuất ra địa chỉ bộ nhớ của biến category (0x6dfed4)

Vậy con trỏ trong C++ sử dụng làm gì?

They enable programs to simulate call-by-reference as well as to create and manipulate dynamic data structures. Iterating over elements in arrays or other data structures is one of the main use of pointers. Con trỏ cho phép chương trình gọi theo kiểu tham chiếu, cũng như các thao tác tạo, thao tác tới cấu trúc dữ liệu động. Lặp lại các phần tử trong mảng hoặc các cấu trúc dữ liệu khác. Đây là một trong các cách sử dụng chính của con trỏ.

#include <bits/stdc++.h>
using namespace std;
void geeks()
{
    int var = 20;
  
    // declare pointer variable
    int* ptr;
  
    // note that data type of ptr and var must be same
    ptr = &var;
  
    // assign the address of a variable to a pointer
    cout << "Value at ptr = " << ptr << "n";
    cout << "Value at var = " << var << "n";
    cout << "Value at *ptr = " << *ptr << "n";
}
// Driver program
int main() 
{ 
  geeks(); 
  return 0;
}

Như ví dụ trên đây sẽ cho ra output

Value at ptr = 0x7ffe454c08cc // Địa chỉ của biến ptr 
Value at var = 20 // Giá trị của biến var
Value at *ptr = 20 // Giá trị của biến ptr

Anh em lưu ý là & sẽ trả về địa chỉ của biến đó. Còn * sẽ trả về giá trị của biến đó được lưu ở địa chỉ cố định (located at the address).

Một số câu hỏi anh em có thể ôn luyện thêm:

  • Copy constructor trong C++ là gì?
  • Tính module (modularity) trong C++
  • Sự khác biệt giữa method override và method overloading trong C++

2. Sự khác biệt giữa virtual function và pure virtual function

Câu hỏi phỏng vấn C++ thứ hai liên quan tới VF (virtual function) và PVF (pure virtual function). Vẫn là các câu hỏi liên quan tới khái niệm, nhưng nếu có thể anh em nên show ra ví dụ. Như vậy vừa dễ nhớ vừa thuyết phục hơn cho người phỏng vấn.

2.1 Virtual function

Virtual function is a member function that is declared within the base class and can be redefined by the derived class. Virtual function là một hàm thành viên được khai báo trong lớp cơ sở (base class) và có thể được định nghĩa lại ở lớp dẫn xuất (devired class)

Vừa là nhắc lại vừa để cho dễ hiểu hơn anh em có thể xem lại ví dụ này

#include <iostream>  
using namespace std;  
class base  
{  
    public:  
    void show()  
    {  
        std::cout << "Base class" << std::endl;  
    }  
};  
class derived1 : public base  
{  
    public:  
    void show()  
    {  
        std::cout << "Derived class 1" << std::endl;  
    }  
};  
class derived2 : public base  
{  
    public:  
    void show()  
    {  
        std::cout << "Derived class 2" << std::endl;  
    }  
};  
int main()  
{  
    base *b;  
    derived1 d1;  
    derived2 d2;  
    b=&d1;  
    b->show();  
    b=&d2;  
    b->show();  
    return 0;  
}

derived 1 và derived 2 đều kế thừa base class, kế thừa method show(). Hai class đó cũng được khai báo 2 biến d1 và d2. Mặc dù là b chứa địa chỉ của cả b1 và b2 nhưng khi b gọi show() nó sẽ luôn gọi method show của lớp base class. Không gọi show của derived 1 và derived 2

Giải pháp lúc này ta viết function show với keywords virtual.

virtual void show()  
{  
    std::cout << "Base class" << std::endl;  
}

Nhiều vị trí tuyển dụng C++ đãi ngộ tốt trên Station D

2.2 Pure Virtual Function

Pure thì có thêm chữ pure thôi mà. Đúng như ý nghĩa của tên gọi (Pure – Nguyên bản). Nguyên bản anh em hiểu kiểu như vị mộc không có thêm phụ gia gì hết.

A pure virtual function is a “do nothing” function. Here “do nothing” means that it just provides the template, and derived class implements the function. Pure virtual function là “do nothing” function. Ở đây do nothing có nghĩa là nó chỉ cung cấp mẫu, còn cần làm gì thì derived class phải tự làm.

Có hai cách để khai báo các hàm này

// Thứ nhất là return 0, thứ hai là không return gì cả
virtual void display() = 0;  
virtual void display() {}

Anh em có thể tham khảo thêm ví dụ này để hiểu về pure function

#include <iostream>  
using namespace std;  
// Abstract class  
class Shape  
{  
    public:  
    virtual float calculateArea() = 0; // pure virtual function.  
};  
class Square : public Shape  
{  
    float a;  
    public:  
    Square(float l)  
    {  
        a = l;  
    }  
    float calculateArea()  
    {  
        return a*a;  
    }  
};  
class Circle : public Shape  
{  
    float r;  
    public:  
      
    Circle(float x)  
    {  
        r = x;  
    }  
    float calculateArea()  
    {  
        return 3.14*r*r ;  
    }  
};  
class Rectangle : public Shape  
{  
    float l;  
    float b;  
    public:  
    Rectangle(float x, float y)  
    {  
       l=x;  
       b=y;  
    }  
    float calculateArea()  
    {  
        return l*b;  
    }  
};  
int main()  
{  
      
    Shape *shape;  
    Square s(3.4);  
    Rectangle r(5,6);  
    Circle c(7.8);  
    shape =&s;  
    int a1 =shape->calculateArea();  
    shape = &r;  
    int a2 = shape->calculateArea();  
    shape = &c;  
    int a3 = shape->calculateArea();  
    std::cout << "Area of the square is " <<a1<< std::endl;  
    std::cout << "Area of the rectangle is " <<a2<< std::endl;  
    std::cout << "Area of the circle is " <<a3<< std::endl;  
    return 0;  
}

Một số câu hỏi xem thêm:

  • Run time polymorphism và polymorphism khác nhau như thế nào?
  • Copy constructor trong C++ là gì?

3. Câu hỏi từ code ví dụ

Câu hỏi thứ 3 phỏng vấn C++ là câu hỏi về code. Code đây không có nghĩa là ngồi code, mà cho đoạn code và hỏi anh em về giá trị output. Tất nhiên để có kết quả đúng thì một số khái niệm anh em cần nắm rõ.

Giá trị i và j sẽ bằng bao nhiêu sau khi thực hiện đoạn code này?. Tại sao?

int i = 5;
int j = i++;

Đáp án cho câu hỏi này là i thì bằng 6, nhưng j lại chỉ bằng 5. Anh em nào lau chau trả lời cả i và j đều bằng 6 là sai.

Để giải thích cho kết quả, anh em cần xem lại kiến thức về ++ increment và — decrement trong C++. Các toán tử này khi đứng trước một biến.

Những câu như thế này nói là hỏi mẹo cũng không đúng. Vì nó là kiến thức cơ bản trong ngôn ngữ lập trình. Có gì anh em nhớ xem lại. Nếu ++ đứng trước thì giá trị đó sẽ ngay lập tức được tăng và gán vào cho j. Còn như ví dụ trên kia, khi ++ nằm phía sau biến, giá trị ban đầu của i sẽ đem gán vào cho j trước. Sau khi có gọi j thì giá trị của j mới tăng theo i, chuyển thành 6.

Một số câu hỏi có thể xem thêm:

  • Sự khác biệt giữa struct và class trong C++
  • Các kiểu data type trong C++

4. Phân bổ và giải phóng bộ nhớ trong C++ như thế nào?

Sau khi đã lướt qua OOP, con trỏ, code ví dụ các kiểu thì câu hỏi thứ 4 phỏng vấn C++ liên quan tới bộ nhớ. Phần này thường hay được hỏi để đánh giá Senior. Người phải review code kĩ, code sao tránh tràn bộ nhớ.

Ngoài ra, C++ thường xuyên được sử dụng trong mạch, trong lập trình với dữ liệu, ram giới hạn.

Câu trả lời cho phần này cũng đơn giản. Để cấp phát bộ nhớ thì như các ngôn ngữ khác, chúng ta sử dụng từ khoá new. Còn từ khoá delete sử dụng để xoá bộ nhớ được cấp phát trước đó.

int value=new int;  		//allocates memory for storing 1 integer
delete value;          		// deallocates memory taken by value

int *arr=new int[10];    	//allocates memory for storing 10 int
delete []arr;              	// deallocates memory occupied by arr.

5. Sự khác biệt giữa C và C++

Câu hỏi thứ 5, cũng là câu hỏi phỏng vấn C++ cuối cùng trong bài viết này liên quan tới sự khác nhau giữa ngôn ngữ C và C++.

Tất nhiên một số anh em có thể thành thạo nhiều hơn một ngôn ngữ lập trình (Java, Golang, Python, Nodejs). Nên so sánh sự khác nhau giữa các ngôn ngữ luôn là một câu hỏi phỏng vấn hay. Ngoài hiểu biết ngôn ngữ khác, anh em còn có thể chức tỏ mức độ hiểu biết của mình về C++0.

Sự khác biệt giữa C và C++ có bao gồm một số ý sau đây:

  • C++ hỗ trợ tham chiếu (pass by reference), trong khi C không hỗ trợ
  • Một số tính năng như functions, function overloading, inheritance, templates, và virtual functions chỉ có ở C++
  • Trong C thì exception được xử lý theo kiểu if else
  • Cái quan trọng C là ngôn ngữ lập trình thủ tục procedural programming. Trong khi C++ hỗ trợ cả lập trình thủ tục và hướng đối tượng (object-oriented programming)

Trên đây chỉ là một số khác biệt cốt lõi, những khác biệt nho nhỏ khác anh em có thể tham khảo tại đây.

6. Kiến thức thêm chuẩn bị phỏng vấn C++

Trường hợp có bỏ sót nội dung nào anh em cứ comment, tui sẽ viết tiếp phần 2. Cứ mỗi phần là 5 câu nha anh em

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

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

Xem ngay những tin đăng tuyển dụng IT mới nhất trên Station D

Bài viết liên quan

Thị trường EdTech Vietnam- Nhiều tiềm năng nhưng còn bị bỏ ngỏ tại Việt Nam

Thị trường EdTech Vietnam- Nhiều tiềm năng nhưng còn bị bỏ ngỏ tại Việt Nam

Lĩnh vực EdTech (ứng dụng công nghệ vào các sản phẩm giáo dục) trên toàn cầu hiện nay đã tương đối phong phú với nhiều tên tuổi lớn phân phối đều trên các hạng mục như Broad Online Learning Platforms (nền tảng cung cấp khóa học online đại chúng – tiêu biểu như Coursera, Udemy, KhanAcademy,…) Learning Management Systems (hệ thống quản lý lớp học – tiêu biểu như Schoology, Edmodo, ClassDojo,…) Next-Gen Study Tools (công cụ hỗ trợ học tập – tiểu biểu như Kahoot!, Lumosity, Curriculet,…) Tech Learning (đào tạo công nghệ – tiêu biểu như Udacity, Codecademy, PluralSight,…), Enterprise Learning (đào tạo trong doanh nghiệp – tiêu biểu như Edcast, ExecOnline, Grovo,..),… Hiện nay thị trường EdTech tại Việt Nam đã đón nhận khoảng đầu tư khoảng 55 triệu đô cho lĩnh vực này nhiều đơn vị nước ngoài đang quan tâm mạnh đến thị trường này ngày càng nhiều hơn. Là một trong những xu hướng phát triển tốt, và có doanh nghiệp đã hoạt động khá lâu trong ngành nêu tại infographic như Topica, nhưng EdTech vẫn chỉ đang trong giai đoạn sơ khai tại Việt Nam. Tại Việt Nam, hệ sinh thái EdTech trong nước vẫn còn rất non trẻ và thiếu vắng nhiều tên tuổi trong các hạng mục như Enterprise Learning (mới chỉ có MANA), School Administration (hệ thống quản lý trường học) hay Search (tìm kiếm, so sánh trường và khóa học),… Với chỉ dưới 5% số dân công sở có sử dụng một trong các dịch vụ giáo dục online, EdTech cho thấy vẫn còn một thị trường rộng lớn đang chờ được khai phá. *** Vừa qua Station D đã công bố Báo cáo Vietnam IT Landscape 2019 đem đến cái nhìn toàn cảnh về các ứng dụng công...

By stationd
Bộ cài đặt Laravel Installer đã hỗ trợ tích hợp Jetstream

Bộ cài đặt Laravel Installer đã hỗ trợ tích hợp Jetstream

Bài viết được sự cho phép của tác giả Chung Nguyễn Hôm nay, nhóm Laravel đã phát hành một phiên bản chính mới của “ laravel/installer ” bao gồm hỗ trợ khởi động nhanh các dự án Jetstream. Với phiên bản mới này khi bạn chạy laravel new project-name , bạn sẽ nhận được các tùy chọn Jetstream. Ví dụ: API Authentication trong Laravel-Vue SPA sử dụng Jwt-auth Cách sử dụng Laravel với Socket.IO laravel new foo --jet --dev Sau đó, nó sẽ hỏi bạn thích stack Jetstream nào hơn: Which Jetstream stack do you prefer? [0] Livewire [1] inertia > livewire Will your application use teams? (yes/no) [no]: ... Nếu bạn đã cài bộ Laravel Installer, để nâng cấp lên phiên bản mới bạn chạy lệnh: composer global update Một số trường hợp cập nhật bị thất bại, bạn hãy thử, gỡ đi và cài đặt lại nha composer global remove laravel/installer composer global require laravel/installer Bài viết gốc được đăng tải tại chungnguyen.xyz Có thể bạn quan tâm: Cài đặt Laravel Làm thế nào để chạy Sql Server Installation Center sau khi đã cài đặt xong Sql Server? Quản lý các Laravel route gọn hơn và dễ dàng hơn Xem thêm Tuyển dụng lập trình Laravel hấp dẫn trên Station D

By stationd
Principle thiết kế của các sản phẩm nổi tiếng

Principle thiết kế của các sản phẩm nổi tiếng

Tác giả: Lưu Bình An Phù hợp cho các bạn thiết kế nào ko muốn làm code dạo, design dạo nữa, bạn muốn cái gì đó cao hơn ở tầng khái niệm Nếu lập trình chúng ta có các nguyên tắc chung khi viết code như KISS , DRY , thì trong thiết kế cũng có những nguyên tắc chính khi làm việc. Những nguyên tắc này sẽ là kim chỉ nam, nếu có tranh cãi giữa các member trong team, thì cứ đè nguyên tắc này ra mà giải quyết (nghe hơi có mùi cứng nhắc, mình thì thích tùy cơ ứng biến hơn) Tìm các vị trí tuyển dụng designer lương cao cho bạn Nguyên tắc thiết kế của GOV.UK Đây là danh sách của trang GOV.UK Bắt đầu với thứ user cần Làm ít hơn Thiết kế với dữ liệu Làm mọi thứ thật dễ dàng Lặp. Rồi lặp lại lần nữa Dành cho tất cả mọi người Hiểu ngữ cảnh hiện tại Làm dịch vụ digital, không phải làm website Nhất quán, nhưng không hòa tan (phải có chất riêng với thằng khác) Cởi mở, mọi thứ tốt hơn Bao trừu tượng luôn các bạn, trang Gov.uk này cũng có câu tổng quát rất hay Thiết kế tốt là thiết kế có thể sử dụng. Phục vụ cho nhiều đối tượng sử dụng, dễ đọc nhất nhất có thể. Nếu phải từ bỏ đẹp tinh tế – thì cứ bỏ luôn . Chúng ta tạo sản phẩm cho nhu cầu sử dụng, không phải cho người hâm mộ . Chúng ta thiết kế để cả nước sử dụng, không phải những người đã từng sử dụng web. Những người cần dịch vụ của chúng ta nhất là những người đang cảm thấy khó sử dụng dịch...

By stationd
Applicant Tracking System là gì? ATS hoạt động ra sao

Applicant Tracking System là gì? ATS hoạt động ra sao

Công nghệ phát triển hướng đến giải quyết và cải tiến cho mỗi quy trình, hoạt động của doanh nghiệp cũng như đời sống. Đối với lĩnh vực tuyển dụng, sự xuất hiện của phần mềm ATS (Applicant Tracking System) mang đến nhiều thay đổi đáng kể, cả đối với nhà tuyển dụng và ứng viên. Vậy phần mềm ATS là gì? Chúng được sử dụng ra sao? Những thắc mắc về phần mềm ATS trong tuyển dụng sẽ được Station D giải đáp tại bài viết dưới đây. Hệ thống sàng lọc ứng viên ATS (Applicant Tracking System) Applicant Tracking System là gì? Applicant Tracking System (ATS) hay còn gọi là Hệ thống quản lý hồ sơ ứng viên là phần mềm quản lý quy trình tuyển dụng từ đầu đến cuối một cách tự động hóa. ATS được thiết kế để giúp nhà tuyển dụng tiết kiệm thời gian và chi phí trong việc thu thập, sắp xếp và sàng lọc hồ sơ các ứng viên. Các tính năng nổi bật của Applicant Tracking System Các tính năng nổi bật của Applicant Tracking System Applicant Tracking System (ATS) là một công cụ quan trọng giúp các công ty quản lý quy trình tuyển dụng hiệu quả hơn. Cùng chúng tôi điểm qua các tính năng nổi bật của ATS: Sàng lọc và quản lý hồ sơ ứng viên Khả năng tìm kiếm và sàng lọc ứng viên là một trong các tính năng nổi bật nhất của ATS. Với việc sử dụng từ khóa và tiêu chí cụ thể, hệ thống có thể nhanh chóng tìm kiếm và sàng lọc các hồ sơ phù hợp, tự động loại bỏ những ứng viên không đạt yêu cầu. Điều này giúp nhà tuyển dụng tập trung vào những ứng viên...

By stationd
Hiểu về trình duyệt – How browsers work

Hiểu về trình duyệt – How browsers work

Bài viết được sự cho phép của vntesters.com Khi nhìn từ bên ngoài, trình duyệt web giống như một ứng dụng hiển thị những thông tin và tài nguyên từ server lên màn hình người sử dụng, nhưng để làm được công việc hiển thị đó đòi hỏi trình duyệt phải xử lý rất nhiều thông tin và nhiều tầng phía bên dưới. Việc chúng ta (Developers, Testers) tìm hiểu càng sâu tầng bên dưới để nắm được nguyên tắc hoạt động và xử lý của trình duyệt sẽ rất hữu ích trong công việc viết code, sử dụng các tài nguyên cũng như kiểm thử ứng dụng của mình. Cách để npm packages chạy trong browser Câu hỏi phỏng vấn mẹo về React: Component hay element được render trong browser? Khi hiểu được cách thức hoạt động của trình duyệt chúng ta có thể trả lời được rất nhiều câu hỏi như: Tại sao cùng một trang web lại hiển thị khác nhau trên hai trình duyệt? Tại sao chức năng này đang chạy tốt trên trình duyệt Firefox nhưng qua trình duyệt khác lại bị lỗi? Làm sao để trang web hiển thị nội dung nhanh và tối ưu hơn một chút?… Hy vọng sau bài này sẽ giúp các bạn có một cái nhìn rõ hơn cũng như giúp ích được trong công việc hiện tại. 1. Cấu trúc của một trình duyệt Trước tiên chúng ta đi qua cấu trúc, thành phần chung và cơ bản nhất của một trình duyệt web hiện đại, nó sẽ gồm các thành phần (tầng) như sau: Thành phần nằm phía trên là những thành phần gần với tương tác của người dùng, càng phía dưới thì càng sâu và nặng về xử lý dữ liệu hơn tương tác. Nhiệm...

By stationd
Tối ưu tỉ lệ chuyển đổi với Google Optimize và Google Analytics

Tối ưu tỉ lệ chuyển đổi với Google Optimize và Google Analytics

Tối ưu tỷ lệ chuyển đổi là một trong những yếu tố quan trọng mà một Growth Marketer không thể bỏ qua. Google Analytics là công cụ hữu hiệu và phổ biến nhất giúp chúng ta theo dõi, đo lường và tối ưu tỷ lệ chuyển đổi. Số liệu từ Google Analytics giúp chúng ta nhìn ra điểm cần thay đổi để tăng tỷ lệ chuyển đổi. Theo dõi chuyển đổi là quá trình thiết yếu nhưng cũng rất “khó nhằn”. Ngày nay, mọi người đang sử dụng điện thoại di động nhiều hơn và thường xuyên hơn khi mua hàng trực tuyến. Việc tối ưu hóa website phiên bản di động rất quan trọng. Traffic đến từ mobile khá lớn và làm ảnh hưởng nhiều tới tỷ lệ chuyển đổi. Để xem website của bạn có hoạt động tốt trên mobile hay không như thế nào? Làm gì khi tỷ lệ chuyển đổi giảm? Website phiên bản di động của bạn có nội dung hấp dẫn không? Không có những nút điều hướng hành động? Trang bị lỗi …, những điều này có thể ảnh hưởng tới tỉ lệ chuyển đổi Google Analytics, hiểu được điều này, bạn sẽ có cơ sở để khắc phục và hoàn thiện website của mình. Hãy cùng đến với chủ đề “DÙNG GOOGLE ANALYTICS TỐI ƯU TỈ LỆ CHUYỂN ĐỔI TRÊN MOBILE” với sự chia sẻ của diễn giả Nguyễn Minh Đức, CEO IM GROUP tại Vietnam Mobile Day 2018 nhé

By stationd