ASP.NET Core: Quiz restful-web-api-content-negotiation-odata-ajax-jwt-wcf-grpc-microservice


Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên

(nhấn nút 'Result' để biết kết quả)

Q1: How to register the OData Endpoint?

app.CreateEndpoints(endpoints => {
  endpoints.EnableDependencyInjection(); endpoints.Select().Count().Filter().OrderBy().MaxTop(100).SkipToken().Expand(); endpoints.MapControllers();
});

app.CreateEndpoints(endpoints => {
  endpoints.CreateDependencyInjection(); endpoints.Select().Count().Filter().OrderBy().MaxTop(100).SkipToken().Expand(); endpoints.CreateControllers();
});

app.UseEndpoints(endpoints => {
  endpoints.EnableDependencyInjection(); endpoints.Select().Count().Filter().OrderBy().MaxTop(100).SkipToken().Expand(); endpoints.MapControllers();
});

app.UseEndpoints(endpoints => {
  endpoints.CreateDependencyInjection(); endpoints.Select().Count().Filter().OrderBy().MaxTop(100).SkipToken().Expand(); endpoints.EnableControllers();
});

Q2: Choose the option that is not one of characteristics of a REST based network.
Stateful
Cache
Client-Server
Uniform interface

Q3: Choose correct information about ASP.NET Core HTTP verbs
PUT - This verb is used to update the existing resource. DELETE - This verb is used to delete the existing resource. GET - This verb is used to retrieve the data or information. It does not have any other effect except getting data. POST - This verb is used to generate or create the resource.
PUT - This verb is used to retrieve the data or information. It does not have any other effect except getting data. DELETE - This verb is used to delete the existing resource. GET - This verb is used to update the existing resource. POST - This verb is used to generate or create the resource.
PUT - This verb is used to generate or create the resource. DELETE - This verb is used to delete the existing resource. GET - This verb is used to retrieve the data or information. It does not have any other effect except getting data. POST - This verb is used to update the existing resource.
PUT - This verb is used to delete the existing resource. DELETE - This verb is used to update the existing resource. GET - This verb is used to retrieve the data or information. It does not have any other effect except getting data. POST - This verb is used to generate or create the resource.

Q4: ASP.NET Core supports creating web APIs using controllers or using minimal APIs. Controllers in a Web API are classes that derive from which of the following class?
Controller
ControllerBase
ControllerAttribute
ControllerText

Q5: What are Data Transfer Objects (DTOs)?
Data Transfer Objects (DTOs) are classes that define a Model with sometimes predefined validation in place for HTTP responses and requests.
The DTOs can be known as ViewModels in MVC where you only want to expose relevant data to the View.
None of the above
All of the above

Q6: What is a Model in ASP.NET Core Web API?
A model is a class with .cs (for C#) as an extension having both properties and methods.
Models are used only to set the data.
All of the above
None of the above

Q7: What is OData (Open Data Protocol)?
OData defines a method only for putting data with REST APIs.
OData defines a method only for creating REST APIs.
OData defines a method only for deleting data with REST APIs.
OData defines a set of best practices for building and consuming REST APIs.

Q8: Which one is not correct about OData protocol?
The OData protocol is the same with other REST-based web service approaches.
The OData protocol is an application-level protocol for interacting with data via RESTful interfaces.
The OData protocol improves semantic interoperability between systems and allows an ecosystem to emerge.
None of the above

Q9: What is a media type?
A media type, also called a MIME type, identifies the format of a piece of data.
All of the others.
In HTTP, media types describe the format of the
A media type consists of two strings, a type and a subtype.

Q10: What is JSON?
None of the others.
JSON (JavaScript Object Notation): It is used for representing structured information such as documents, data, configuration, etc.
JSON (JavaScript Object Notation): It is especially designed to store and transport data.
JSON (JavaScript Object Notation): It is a lightweight format designed to store and transport data.
All of the others.
JSON (JavaScript Object Notation): It is similar to HTML but is more flexible than HTML because it allows users to create their own custom tags.

Q11: What is AutoMapper?
All of the others.
Object-object mapping works by transforming an input collection of one type into an output object of a different type.
AutoMapper is an object-object mapper. Object-object mapping works by transforming an input object of one type into an output object of a different type.
AutoMapper is an object-object mapper of EntityFramework Core with ASP.NET Core Web API.

Q12: Choose the incorrect information about ControllerBase class in ASP.NET Core Web AP
The context associated with the current session for a controller.
None of the others.
The context associated with the current request for a controller.
All othe the others.
A base class for an MVC controller without model support.

Q13: Which file is the application configuration file in ASP.NET Core Web Application or Web API used to store the configuration settings (database connections strings, any application scope global variables)?
Program.cs
Startup.cs
appsettings.json
appsettings.Development.json

Q14: Which information is true about ASP.NET Core Web API Architecture?
All of the others
Ability to host both in IIS (or development server) and in any nonweb server process (called self-hosted).
Can customize many elements of ASP.NET Core Web API by supplying custom implementation.
The ASP.NET Web API framework has been designed using the task-based asynchronous programming model from the top to the bottom.

Q15: Choose the correct information about Async programming with ASP.NET Web API.
Using async programming, we can enhance the responsiveness of our application.
None of the
All of the others.
Async programming is a parallel programming technique that allows the working process to run separately from the main application thread.
Using async programming, we can avoid performance bottlenecks.

Q16: Which is not an attribute that can be used to configure the behavior of web API controllers and action methods?
[Binding]
[Produces]
[HttpGet]
[Route]

Q17: What is REST API?
A REST API (RESTful API) is an application programming interface that conforms to the constraints of REST architectural style and does not allow for interaction with RESTful web services.
A REST API (RESTful API) is an application programming that conforms to the constraints of REST architectural style and does not allow for interaction with RESTful web services.
A REST API (RESTful API) is an application programming interface that conforms to the constraints of REST architectural style and allows for interaction with RESTful web services.
A REST API (RESTful API) is an application programming that allows for interaction with RESTful web services without constraints.

Q18: What is Open Web Interface for .NET (OWIN)?
None of the others.
All of the others.
ASP.NET Core applications and middleware can interoperate with OWIN-based applications, servers, and middleware.OWIN allows web apps to be decoupled from web servers.
OWIN defines a standard way for middleware to be used in a pipeline to handle requests and associated responses.

Q19: When the client sends a request message (HTTP request message), it can include an Accept header. The Accept header tells the server which media type(s) the client wants from the server. Choose the correct information about the following Accept header Accept: text/html,application/xhtml+xml,application/xml
HTTP response contains a PNG image.
This header of HTTP Message tells the server that the client wants the text type with HTML, XHTML, or XML.
None of the others
This header of HTTP Message tells the server that the client wants either HTML, XHTML, or XML.
All of the others

Q20: Choose the correct information for validation the properties on the model
In ASP.NET Core Web API, developer can use attributes from the System.DataManagementModel.DataAnnotations namespace to set validation rules for properties on the model.
In ASP.NET Core Web API, developer can use attributes from the System.ComponentModel.DataAnnotations namespace to set validation rules for properties on the model.
None of the others.
All of the others.

Q21: What media type formatters in ASP.NET Core Web API?
XmlMediaTypeFormatter class handles HTML form URL-encoded data.
The Web API cannot understand request data format in serializing request/response data and send data in a format that the client expects.
Media type formatters are classes that are responsible for serialization data.
All of the others.
JsonMediaTypeFormatter class handles both XML format and JSON format

Q22: Choose the correct information about EnableQueryAttribute class ([EnableQuery] attribute)
This class defines an attribute that can be applied to an action to enable querying using the OData query syntax.
This class defines both attribute and method that can be applied to an action to enable querying using the OData query syntax.
None of the others.
This class defines a method that can be applied to an action to enable querying using the OData query syntax.

Q23: Which query function that the Web API is not support standard OData string?
contains $filter=contains(name,'(sample)')
containsIgnoreCase $filter=containsignorecase(name,'(Sample)')
endswith $filter=endswith(name,'Inc.')
startswith $filter=startswith(name,'a')

Q24: A binding source attribute defines the location at which an action parameter's value is found. Which one is not a binding source attribute?
[FromQuery]
[FromHeader]
[FromServices]
[FromRouting]

Q25: What is content negotiation?
Content negotiation is a mechanism that can be used to serve different representations of the same resource at a given URI, providing ability to their clients to decide the best suited representations.
Content negotiation is an application that can be used to serve different representations of the same resource at a given URI, providing ability to their clients to decide the best suited representations.
None of the others
Content negotiation is a collection of API that can be used to serve different representations of the same resource at a given URI, providing ability to their clients to decide the best suited representations.

Q26: Choose the incorrect information about ASP.NET Core Web API.
None of the others.
ASP.NET Core Web API is an application can interact with a resource by knowing the resource only.
All of the others.
ASP.NET Core Web API, from the beginning, was designed to be a service-based framework for building REpresentational State Transfer (RESTful) services.
Calls to a Web API service are based on the core HTTP verbs (Get, Put,Post, Delete) through a uniform resource identifier (URI).
It is based on the MVC framework minus the V (view), with optimizations for creating headless services.

Q27: Which of the following open-source libraries is used by WEB API for JSON serialization?

Json.NET library is generally used by Web API for JSON serialization.
System.Text.Json library is generally used by Web API for JSON serialization.
System.Data.Json.NET library is generally used by Web API for JSON serialization.
Microsoft.Extensions.Json.NET library is generally used by Web API for JSON serialization.
None of the others.
All of the others.

Q28: Web API does not automatically return an error to the client when validation fails. It is up to the controller action to check the model state and respond appropriately. Which property is using in this case?
ModelState.IsVerify
ModelState.IsCorrect
ModelState.IsValid

Q29: Choose the correct information in asynchronous programming with ASP.NET Web API about the return type.
void, which we can use for an event handler. e. None of the others.
All of the others.
Task, for an async method that does not return a value
Task<TResult>, for an async method that returns a value.

Q30: Choose the correct information about pagging OData.
To enable paging, just mention the page count at the
[Queryable]
[EnableQuery(PageSize =5)]
public IActionResult GetData() => Ok(objService.GetObjects());
To enable paging, just mention the page count at the
[AllowQueryable]
[AllowEnableQuery(PageSize =5)]
public IActionResult GetData() => Ok(objService.GetObjects());
To enable paging, just mention the page count at the
[AllowQueryable]
[EnableQuery(PageIndex =5)]
public IActionResult GetData() => Ok(objService.GetObjects());

Q31: Choose the incorrect information about .NET Standard
The .NET Standard is a formal specification of .NET APIs that are intended to be available on .NET Core, .NET6. The motivation behind the .NET Standard is establishing greater uniformity in the .NET ecosystem.
All of the others.
The .NET Standard is a formal specification of .NET APIs that are intended to be available on all .NET implementations (.NET Core, .NET Framework, etc.) The motivation behind the .NET Standard is establishing greater uniformity in the .NET ecosystem.
None of the others.

Q32: Steps to implement JWT Authentication in Asp.net Core

1. Create Asp.net Core Web API project
2. Understanding JWT Authentication Workflow.
3. Install NuGet Package (JwtBearer)
4. Asp.net Core JWT appsetting.json configuration
5. Create UserController - Authenticate action method.
6. Asp.net Core Startup.cs - configure services add JwtBearer
7. Create Models User, Tokens
8. Create JWTManagerRepository to Authenticate users and generate JSON Web Token.

1. Create Asp.net Core Web API project
2. Install NuGet Package (JwtBearer)
3. Understanding JWT Authentication Workflow.
4. Asp.net Core JWT appsetting.json configuration
5. Asp.net Core Startup.cs - configure services add JwtBearer
6. Create Models User, Tokens
7. Create JWTManagerRepository to Authenticate users and generate JSON Web Token.
8. Create UserController - Authenticate action method.

1. Understanding JWT Authentication Workflow.
2. Create Asp.net Core Web API project
3. Asp.net Core JWT appsetting.json configuration
4. Asp.net Core Startup.cs - configure services add JwtBearer
5. Create Models User, Tokens
6. Install NuGet Package (JwtBearer)
7. Create JWTManagerRepository to Authenticate users and generate JSON Web Token.
8. Create UserController - Authenticate action method.

1. Understanding JWT Authentication Workflow.
2. Create Asp.net Core Web API project
3. Install NuGet Package (JwtBearer)
4. Asp.net Core JWT appsetting.json configuration
5. Asp.net Core Startup.cs - configure services add JwtBearer
6. Create Models User, Tokens
7. Create JWTManagerRepository to Authenticate users and generate JSON Web Token.
8. Create UserController - Authenticate action method.

Q33: Choose the correct information about Protocol buffers.
None of the others.
All of the others.
Parsing Protocol Buffers (binary format) is less CPU intensive because it's closer to how a machine represents data.
Protocol buffers, also known as Protobuf, is a protocol that Google developed internally to enable serialization and deserialization of structured data between different services.

Q34: Which utility can be used to create WSDL from WCF service?
Wef.exe
Svcutil.exe
ILDASM.exe
Svc.exe

Q35: What is complex model binder?
In the case the response is complex, pass data in response body as an entity with the desired content-type, then such kind of response is mapped by complex model binder.
If the request is simple, input parameter are of type int. string, Boolean, GUID, decimal, etc. and is available in the URL, then such kind of request is mapped to complex model binder.
In the case the request is complex, pass data in request body as an entity with the desired content-type, then such kind of request is mapped by complex model binder.
None of the others.

Q36: A binding source attribute defines the location at which an action parameter's value is found. Choose the incorrect information about binding source attribute.
[FromQuery] - Gets values from the query string.
[FromBody] - Gets values from the response body.
[FromRoute] - Gets values from route data.
[FromHeader] - Gets values from HTTP headers.
[FromForm] - Gets values from posted form fields.

Q37: Which one is not a benefit of gRPC?
Supports client, server, but does not allow bi-directional streaming calls.
Modern, high-performance, lightweight RPC framework.
Tooling available for many languages to generate strongly-typed servers and clients.
Contract-first API development, using Protocol Buffers by default, allowing for language agnostic implementations.

Q38: Choose the correct information about scaling RESTful web services.
RESTful web services depend on the IP address and port number of the system to get a response.
RESTful web services support only support vertical scaling in communication.
None of the others.
RESTful web services support both vertical and horizontal scaling.

Q39: Choose the correct information about the JSON Web Token
With JSON Web Token, the data sent between two parties using JWT is digitally signed and can be easily confirmed and trusted.
All of the others.
JSON Web Token is an open, industry-standard technique for securely conveying claims between two parties.
None of the others.
Using JSON Web Token we can implement Authentication and Authorization in any Web Application with any backend stack such as ASP.NETCore, Java, Nodejs, Python, etc...

Q40: What are static files in ASP.NET Core API Project?
Html files
CSS files
JavaScript files
All of the others
Images
None of the others

Q41: Choose the correct information to configure autoscaling for an Azure solution.
Azure App Service has built-in autoscaling only at the role level.
The connection is slow in autoscaling option with Azure App Sercive.
All of the others.
Azure App Service has built-in autoscaling. Autoscale settings apply to all of the apps within an App Service.
None of the others.

Q42: Which of the following is a security issue with web services?
None of the others.
Authentication
All of the others.
Network Security
Confidentiality
Cyber Security

Q43: What is the purpose of interface IGrpcServerBuilder?
Options used to configure service instances.
Metadata for a gRPC method endpoint.
A builder abstraction for configuring gRPC servers.
Provides access to the gRPC server call context for the current HTTP request.

Q44: Choose the correct information about WCF proxy.
Unity.exe utility is used to create a WCF proxy.
Wef.exe utility is used to create a WCF proxy.
It is possible to write WCF proxy manually.
It is not possible to write WCF proxy manually.

Q45: The GrpcChannel class represents a gRPC channel. Channels are an abstraction of long-lived connections to remote servers. Client objects can reuse the same channel. Choose the correct information for create the channel port 5001 with GrpcChannel class.

var channel = GrpcChannel.MakeAddress("https://localhost:5001");

var channel = GrpcChannel.Dispose("https://localnost:5001");

var channel = GrpcChannel.CreateAddress("https://localhost:5001"):

var channel = GrpcChannel.ForAddress("https://localhost:5001");

Q46: Which tool is using to register WCF service to Windows?
Using installapp tool to register service to Windows
Using utilservice tool to register service to Windows
Using installservice tool to register service to Windows
Using installutil tool to register service to Windows

Q47: You need to implement which interface for global exception handling in WCF?
IExceptionHandler
IArgumentHandler
IErrorHandler
IWCFException

Q48: Choose the incorrect information about validation built-in attributes. The attributes can get from the System.ComponentModel.DataAnnotations namespace.
[EmailAddress]: Validates that the property has an email format.
[Compare]: Validates that two properties in a model match.
[Required]: Validates that the field is not null.
[RegularExpression]: Validates that the property value matches a specified range.

Q49: Which contract in WCF maps data contracts to SOAP envelopes?
OperationContract
DataContract
MessageContract
ServiceContract

Q50: Hosting WCF Service with Base Address in which file?
All of the others
XML
Text file with structure
JSON

Q51: Choose the correct information about the startup process in ASP.NET Core.
ASP.NET Core is both client-side and server-side web application framework designed for web-development to produce dynamic pages. It uses the CLR, which allows programmers to write code using any supported .NET language and use all the other packages.
ASP.NET Core is a server-side web application framework designed for web-development to produce dynamic pages. It uses the CLR and .NET Standard Library, which allows programmers to write code using any supported .NET language and use all the familiar packages.
All of the others
ASP.NET Core is both client-side and server-side web application framework designed for web-development to produce dynamic pages. It uses the CLR and .NET Standard Library, which allows programmers to write code using any supported .NET language and use all the familiar packages.
None of the others

Q52: Chooses the correct information about IdentityDbContext.
IdentityDbContext, represents the DbContext for Identity. It has definitions for all the tables required to enable ASP .NET Core Identity.
IdentityDbContext, includes a user in Identity database
All of the others
IdentityDbContext, includes a role in Identity database

Q53: jQuery is a JavaScript library for calling ASP.NET Core Web API. Which jQuery method is used to perform an asynchronous HTTP request?
jQuery.ajaxSync()
jQuery.ajax()
jQuery.ajaxSetup()
jQuery.ajaxAsync()

Q54: In the case the request is simple, input parameter are of type int, string, boolean, GUID, decimal, etc. and is available in the URL, then such kind of request is mapped to what model binding?
complex model binder
combination model binding
extraction model binder
primitive model binding

Q55: Choose the correct information about using CORS.

public void ConfigureServices(|ServiceCollection services)
{
  services.AddCorsProvider(o => o.AddPolicy("AllowOrigins", builder =>
  {
    builder.WithOrigins("http://localhost:5500")
    .AllowAnyMethod()
    .AllowAnyHeader();
  }));
  // ...
}
public void Configure(lApplicationBuilder app, IWebHostEnvironment env)
{
  // ...
  app.UseRouting();
  app.UseCorsProvider("AllowOrigins");
  app.UseAuthorization();
  // ...
}

public void Configure (IServiceCollection services)
{
  services.AddCorsProvider(o => o.AddPolicy("AllowOrigins", builder =>
  {
    builder.WithOrigins("http://localhost:5500")
    .AllowAnyMethod()
    .AllowAnyHeader();
  }));
  // ...
}
public void ConfigureServices (IApplicationBuilder app, |WebHostEnvironment env)
{
  // ...
  app.UseRouting();
  app.UseCorsProvider("AllowOrigins");
  app.UseAuthorization();
  // ...
}

public void ConfigureServices(|ServiceCollection services)
{
  services.AddCors(o => o.AddPolicy("AllowOrigins", builder =>
  {
    builder.WithOrigins("http://localhost:5500")
    .AllowAnyMethod()
    .AllowAnyHeader();
  }));
  // ...
}
public void Configure(IApplicationBuilder app, |WebHostEnvironment env)
{
  // ...
  app.UseRouting();
  app.UseCors("AllowOrigins");
  app.UseAuthorization();
  // ...
}

public void Configure (IServiceCollection services)
{
  services.AddCors(o => o.AddPolicy("AllowOrigins", builder =>
  {
    builder.WithOrigins("http://localhost:5500")
    .AllowAnyMethod()
    .AllowAnyHeader();
  }));
  // ...
}
public void ConfigureServices (IApplicationBuilder app, |WebHostEnvironment env)
{
  // ...
  app.UseRouting();
  app.UseCors("AllowOrigins");
  app.UseAuthorization();
  // ...
}

Q56: Which of the following client credential type can be used with WCF security?
Certificate
IssuedToken
Username
All of the others

Q57: Protocol Buffers is used to define the Messages (data, Request and Response) and Service (Service name and RPC endpoints). Choose the correct syntax.

syntax = "proto3";
message Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply);
}
service HelloRequest {
  string name = 1;
}
service HelloReply {
  string message = 1;
}
None of the others.

syntax = "proto3";
service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
  string name = 1;
}
message HelloReply {
  string message = 1;
}

syntax = "proto3";
service Greeter {
  rpc SayHello (HelloRequest) replies(HelloReply);
}
message HelloRequest {
  string name = 1;
}
message HelloReply {
  string message = 1;
}

syntax = "proto3";
message Greeter {
  rpc SayHello (HelloRequest) replies (HelloReply);
}
service HelloRequest {
  string name = 1;
}
service HelloReply {
  string message = 1;
}

Q58: The jQuery syntax is tailor-made for selecting HTML elements and performing some action on the element(s). The basic syntax is: $(selector).action()

A $ sign to "query (or find)" HTML elements
A (selector) to be performed on the element(s)
A jQuery action() to define/access jQuery

A $ sign to define/access jQuery
A (selector) to "query (or find)" HTML elements
A jQuery action() to be performed on the element(s)

A $ sign to define/access jQuery
A (selector) to be performed on the element(s)
A jQuery action() to "query (or find)" HTML elements

A $ sign to to be performed on the element(s)
A (selector) to "query (or find)" HTML elements
A jQuery action() define/access jQuery

Q59: JavaScript is a powerful programming language for calling ASP.NET Core Web API. Which object is used to call call the Web API from JavaScript object?
XMLHttpResponse (XHR) object
XMLHttpResponseObject (XHR) object
XMLHttpRequest (XHR) object
XMLHttpRequestObject (XHR)

Q60: WCF Architecture includes:
Contracts and Descriptions - Operations - Messaging - Hosting and Activation
Message Options and Descriptions - Service Runtime - Operations- Hosting and Activation
Contracts and Message Options - Service Runtime - Data - Hosting and Activation
Contracts and Descriptions - Service Runtime - Messaging - Hosting and Activation

Q61: What is the primary goal of negotiation?
To win at all costs
To reach a mutually beneficial agreement
To avoid conflict
To make demands

Q62: Which of the following is a common negotiation tactic?
Silent treatment
Anchoring
Aggressive criticism
Ignoring the other party

Q63: What does BATNA stand for in negotiation?
Best Alternative to a Negotiated Agreement
Best Allowance for Trade Negotiation Average
Basic Agreement Terms for Negotiation Assessment
Best Agreement Tactic for Negotiated Accomplishment

Q64: Which of the following is NOT a phase of negotiation?
Preparation
Bargaining
Reflection
Agreement

Q65: In positional bargaining, negotiators:
Focus on interests rather than positions
Maintain a fixed position throughout the negotiation
Collaborate to find creative solutions
Rely solely on logic and facts

Q66: What role does effective communication play in negotiation?
It confuses the other party
It is unnecessary
It fosters understanding and trust
It delays the process

Q67: Which of the following techniques can help resolve conflicts during negotiation?
Personal attacks
Active listenings
Escalation tactics
Manipulation

Q68: The term "win-win" in negotiation refers to:
One party gaining everything while the other gains nothing
Compromise where neither party is satisfied
A tie outcome
Both parties achieving their goals

Q69: A "ZOPA" refers to:
Zone of Proximal Agreement
Zone of Possible Agreement
Zero Options for Party Agreement
Zone of Opinions for Policy Analysis

Q70: What is the best way to handle a tough negotiator?
Respond with aggression
Avoid negotiation altogether
Stay calm and use strategic questioning
Give in to their demands

(Ghi chú: Phần câu hỏi Qi có màu Green thể hiện đáp án đúng)

(Ghi chú: Phần câu hỏi Qi có màu Green thể hiện đáp án đúng)
» Tiếp: Model-View-ViewModel (MVVM)
« Trước: Razor Pages với Entity Framework Core trong ASP.NET Core - Sort, Filter, Paging - Hướng dẫn 3/8
Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên
Copied !!!