Close

May 17, 2017

Các câu hỏi phỏng vấn vị trí lập trình viên .NET

CHuẩn bị phỏng vấn
OOP
Abstraction (Tính trừu tượng)
Encapsulation (Tính bao đóng)
Inheritance (Tính kế thừa)
Polymophirsm (Tính đa hình)
HTML, CSS, XML
jQuery
Design patterns là các mẫu thiết kế có sẵn, dung để giải quyết một vấn đề. Áp dụng mẫu thiết kế này sẽ làm code dễ bảo trì, mở rộng hơn. Dễ dàng tái sử dụng code
Singeton, thuộc loại Creational Design Pattern.
Thức Đề: Design Pattern này được dùng khi ta muốn đảm bảo chỉ có duy nhất một object được sinh ra trong toàn hệ thống.
Singleton Pattern
Đảm bảo 1 lớp chỉ có 1 thể hiện
Use:
◦Với các biến cần truy cập toàn cục
Objective
◦Tăng hiệu suất, không phải khởi tạo đối tượng nhiều lần
Factory method là một cách thức dùng để tạo đối tượng mà không cần chỉ ra một cách chính xác đối tượng được tạo ra thuộc về lớp nào.
Use:
◦Khi muốn tạo một đối tượng và loại bớt những đoạn code bị trùng lặp
◦Tạo tính linh động cho đoạn việc tạo đối tượng
◦Tách biệt việc tạo đối tượng với logic chính của chương trình
Proxy Pattern
Cung cấp 1 đối tượng thay thế để truy cập đến 1 đối tượng khác, thông thường 2 đối tượng này có interface giống nhau
Use
◦Khi muốn ẩn đối tượng gốc
◦Khi muốn thêm vào các validation trước khi gọi hàm thật
SOLID
Single responsibility principle
Một class chỉ nên giữ 1 trách nhiệm duy nhất
(Chỉ có thể sửa đổi class với 1 lý do duy nhất)
Open/closed principle
Có thể thoải mái mở rộng 1 class, nhưng không được sửa đổi bên trong class đó
(open for extension but closed for modification).
Liskov substitution principle
Trong một chương trình, các object của class con có thể thay thế class cha mà không làm thay đổi tính đúng đắn của chương trình
Interface segregation principle
Thay vì dùng 1 interface lớn, ta nên tách thành nhiều interface nhỏ, với nhiều mục đích cụ thể
Dependency inversion principle
1. Các module cấp cao không nên phụ thuộc vào các modules cấp thấp.
Cả 2 nên phụ thuộc vào abstraction.
2. Interface (abstraction) không nên phụ thuộc vào chi tiết, mà ngược lại.
( Các class giao tiếp với nhau thông qua interface,
không phải thông qua implementation.)
Dependency Inversion: Đây là một nguyên lý để thiết kế và viết code.
Inversion of Control: Đây là một design pattern được tạo ra để code có thể tuân thủ nguyên lý Dependency Inversion. Có nhiều cách hiện thực pattern này: ServiceLocator, Event, Delegate, … Dependency Injection là một trong các cách đó.
Dependency Injection: Đây là một cách để hiện thực Inversion of Control Pattern (Có thể coi nó là một design pattern riêng cũng được). Các module phụ thuộc (dependency) sẽ được inject vào module cấp cao.
 hiểu Dependency Injection một cách đơn giản như sau:
Các module không giao tiếp trực tiếp với nhau, mà thông qua interface. Module cấp thấp sẽ implement interface, module cấp cao sẽ gọi module cấp thấp. Ví dụ: Để giao tiếp với database, ta có interface IDatabase, các module cấp thấp là XMLDatabase, SQLDatabase. Module cấp cao là CustomerBusiness sẽ sử dụng interface IDatabase.
Việc khởi tạo các module cấp thấp sẽ do DI Container thực hiện. Ví dụ: Trong module CustomerBusiness, ta sẽ không khởi tạo IDatabase db = new XMLDatabase(), việc này sẽ do DI Container thực hiện. Module CustomerBusiness sẽ không biết gì về module XMLDatabase hay SQLDatabase.
Việc Module nào gắn với interface nào sẽ được config trong code hoặc trong file XML.
DI được dùng để làm giảm sự phụ thuộc giữa các module, dễ dàng hơn trong việc thay đổi module, bảo trì code và testing.
.NET Core
Entity Framework
Microsoft ADO.NET Entity Framework là một Object / Relational Mapping (ORM) framework cho phép các nhà phát triển dể dàng làm việc với dữ liệu quan hệ như là các đối tượng domain-specific, loại bỏ đi sự khó khăn trong việc truy cập dữ liệu trước đây. Bằng cách sử dụng Entity Framework, truy vấn LINQ, thì việc lấy và thao tác dữ liệu như các đối tượng trở nên mạnh mẽ hơn. Entity Framework ORM cung cấp các dịch vụ như change tracking, idenity resolution, lazay loading, và truy vấn dữ liệu tập trung vào business logic của ứng dụng.
http://hocasp.net/entity-framework-la-gi/
UnitTest
UT có 3 trạng thái cơ bản:

• Fail (trạng thái lỗi)

• Ignore (tạm ngừng thực hiện)

• Pass (trạng thái làm việc)

Toàn bộ UT được vận hành trong một hệ thống tách biệt. Có rất nhiều PM hỗ trợ thực thi UT với giao diện trực quan. Thông thường, trạng thái của UT được biểu hiện bằng các màu khác nhau: màu xanh (pass), màu vàng (ignore) và màu đỏ (fail).

UT chỉ thực sự đem lại hiệu quả khi:

• Được vận hành lặp lại nhiều lần

• Tự động hoàn toàn

• Độc lập với các UT khác
Caching
– Redis là một chương trình hỗ trợ lưu trữ dữ liệu dạng key/value.
– Hỗ trợ các kiểu dữ liệu: Strings, Lists, Sets, Sortedsets(zsets), Hashes.
– Redis hỗ trợ thêm mới, cập nhật và loại bỏ dữ liệu nhanh chóng
– Redis có những đặc điểm giống như Memcached như:
+ Lưu trữ dạng key /value.
+ Tất cả data được lưu trên Memory(RAM)
+ Key có thể hết hạn(expire) hoặc không
+ Nhanh(Fast), nhẹ nhàng(light-weight)
– Redis có thêm nhiều đặc điểm, chức năng khác mang lại lợi ích khi sử dụng và triển khai
+ Persistence
+ Hỗ trợ nhiều Databases
+ Truy vấn theo Key
+ Hỗ trợ counters dữ liệu kiểu integer
+ Cấu trúc dữ liệu cấp cao
+ Thao tác dữ liệu chuyên biệt
+ Tự động phân trang danh sách
+ Nhân rộng master-slave
SQL
CQRS
Elasticsearch
AngularJS
AngularJS là một MVC framework. Nó cung cấp two-way data binding giữa model và view. Cách binding dữ liệu như thế này cho phép tự động update ở cả hai phía bất kể khi nào dữ liệu bị thay đổi. Vì thế hỗ trợ các bạn xây dựng các thành phần view có thể tái sử dụng ở nhiều chỗ. Ngoài ra nó cũng cung cấp cho các bạn một services framework để hỗ trợ tối đa giao tiếp giữa backend và frontend.
Angular đưa ra cho bạn một tập hợp các feature để xây dựng Web application, chẳng hạn như:
HTML template với dynamic expression sử dụng {{ }}.
Các built-in directive như là ng-model, ng-repeat, ng-class hỗ trợ trong HTML.
Các controller hỗ trợ việc tập trung logic code và truyền dữ liệu cho view.
Các service cho việc chia sẻ business logic.
Two-way binding, như là một cách đơn giản nhất đễ giữ cho controller và view luôn sync với nhau.
Cung cấp các module hỗ trợ việc giao tiếp giữa client và server.
Hỗ trợ routing ở client side.
Có thể custom directive để tùy biến HTML syntax.
Sử dụng dependency injection để hạn chế việc bùng nổ các object.
Các filter để hỗ trợ format dữ liệu trên view.
React
React cung cấp một phương thức dễ dàng để xây dựng giao diện thông qua việc phát triển các component và kết hợp chúng lại với nhau. Nó cũng cung cấp một phương thức trừa tượng hoá DOM để tối ưu việc rendering cũng như cho phép có thể render thông qua Node.js. Một điểm nữa đó là nó implement one-way reactive data flow, giúp cho chúng ta có một cái nhìn dễ dàng hơn.
React đưa ra cho bạn:
JSX syntax dành cho template với Javascript expresion sử dụng { }.
Các component, gần tương tự với các Angular element directive.
Templates
Cấu trúc của một Angular view có thể nói là vô cùng phức tạp và có nhiều responsibility trên một view. Trong file HTML template thường sẽ chứa một tập các directive và expression trộn lẫn với mục đích dùng để kết nối view và controller. Data flow thì sẽ được trao đổi qua các context khác nhau bằng $scope.
Trong React đó lại là một câu chuyện khác, nó được gọi là all the way down, có nghĩa là data flow sẽ chỉ có một hướng từ trên xuống. JSX là syntax dùng để mô tả các component, cách viết có cấu trúc tương tự XML được đặt bên trong Javascript. Khi chạy thì nó sẽ được biên dịch thành các nested function call. Ví dụ.
React Native
Xamarin
Python
ML
Robotics

One Comment on “Các câu hỏi phỏng vấn vị trí lập trình viên .NET

A WordPress Commenter
May 17, 2017 at 8:48 am

Hi, this is a comment.
To get started with moderating, editing, and deleting comments, please visit the Comments screen in the dashboard.
Commenter avatars come from Gravatar.

Reply

Leave a Reply

Your email address will not be published. Required fields are marked *