Interview Notes

  • Home
  • Blog
    • Ntech Developers
    • Fanpage
    • Group
    • Github
  • Interview Notes
  • Social
    • Facebook
    • Twitter
    • Linkedin
  • About
  • Contact me

Khi nào dùng store khi nào dùng function?

Phân biệt 2 loại Index?
Phân biêt truncate table và delete table?

Phân biệt net framework và net core?
So sánh ControllerBase và Controller?
So sánh ICollection và IList?
Nêu lifecycle của Net Core, phân biệt AddSingleton, AddScoped và AddTransient?
So sánh Cookie và Session?

Khi nào dùng Local Storage, khi nào dùng Session Storage
Bạn biết gì về Identity Server 4 không? Phân biệt các loại Grant type trong IS4?
Mô tả hoạt động của CQRS?

Khi nào dùng Refresh token, khi nào dùng Revoke token?
Nêu cơ chế hoạt động của Saga Pattern?
Dùng masstransit cho những trường hợp nào?
So sánh RabbitMQ và Kafka?

So sánh http1 và http2?
So sánh grpc và http protocol?


 - Giới thiệu về bản thân

- Nói sơ lược về công nghệ của dự án gần nhất?

- So sánh Net Framwork và Net Core?
- Net core 3.1 có gì khác biệt với Net 5 và 6 không?
- So sánh 3 mô hình MVC, MVVM, MVP?

- So sánh IList và IEnumrable?
- So sánh String và StringBuilder?

- Sự khác biệt giữa http1 và http2?
- So sánh Rest và gRPC? Khi nào sử dụng gRPC và nó có những ưu điểm gì?
- So sánh giữa Controller và BaseController?
- Em đã từng dùng gì cho Authentication và Authorization?
- Có mấy loại Authen trong Identity Server 4? Em có biết Revoke trong IS4 không? Nó hoạt động như thế nào?

- Em có biết DI không? Có mấy loại DI trong dotnet và so sánh chúng
- Em biết gì về middleware không? Đã bao giờ custom middleware chưa?

- So sánh Single và First trong Entity Framwork, So sánh Single và SingleOrDefault?
- So sánh Entity Framwork và Dapper
- Có hay làm việc với store procedure không? Có khi khác biệt giữa việc dùng và không dùng không?
- Em có biết gì về Index không? Có mấy loại Index và so sánh chúng?
- Sự khác biệt giữa linq và raw sql?

- Em có hay dùng logging không? Nếu member thưởng quên log thì em có cách nào vẫn có log để tracing không?
- Em sử dụng gì để viết Unit Test? Sự khác biệt giữa moq, fake và stub?
- Trong microservice, có những cách nào để các services giao tiếp được với nhau?
- Em đã dùng message queue chưa? Nó được sử dụng trong trường hợp nào?
- Em đã từng xử lý bài toàn nhiều request cùng một lúc chưa? Có cách nào để đảm bảo tính toàn vẹn của các transaction không?
- Deadlock xảy ra trong những trường hợp như thế nào?

- Em đã từng dùng design pattern chưa? Nói một chi tiết thử vài design pattern mà em hay dùng?
- Em biết gi về solid không? chữ L trong đó là gì, nói cụ thể?

- Em từng dùng những công cụ gì cho CI/CD? Em biết Jenkin chứ? Em đã từng build pipeline CI/CD chưa?
- Làm thế nào để monitoring các services trong Microservices?

...










 1. Bài test: 30 phút

Gồm 4 phần:
OOP
Data structure
Database
Design pattern

1.1
– Câu hỏi trắc nghiệm liên quan đến 4 thuộc tính 5 câu
– Câu hỏi đọc code và tìm lỗi output 2 câu
– Câu hỏi tổng hợp OOP 5 câu (chọn nhiều đáp án cùng một lúc)
– Câu hỏi chuyên OOP cho .net 3 câu (Ví dụ đơn kế thừa trong .net hay từ khóa sealed c#)

1.2
– Câu hỏi về một số thuật toán cơ bản (sort, search), các hạn chế của thuật toán đó. 3 câu
– Các cấu trúc colection, concurent colection. 2 câu
– Câu hỏi về liên kết đơn, đôi, vòng. 2 câu
– Câu hỏi tổng hợp về tối ưu các sử dụng kiểu dữ liệu 3 câu

1.3
– Câu hỏi khái niệm, diễn dải từ viết tắt, các loại database 3 câu
– Câu hỏi về mô hình hóa, ORM 2 câu
– Câu hỏi về chuẩn hóa dữ liệu NF1,2,3; Cho 1 database, hỏi nó đã chuẩn hóa chưa, mắc phải lỗi chuẩn hóa số mấy. 2 câu
– Câu hỏi về T-SQL, các câu lệnh, cho 1 database chọn câu lệnh nào có output đúng (join, like, group by, having in) 3 câu

1.4
– Câu hỏi liên quan đến khái niệm, các loại, khi nào sử dụng pattern. 5 câu
– Câu hỏi cho đoạn code có sẵn, hỏi đó là implement pattern nào. 2 câu
– Câu hỏi chọn đáp án trường hợp nào kết hợp 2 pattern. 1 câu

2. PV technical: 2 người. 1 ng team leader, 1 ng hình như là line manager
– Hỏi về quá trình làm trước đó, công nghệ sử dụng trong các dự án
– Có làm web mvc web api bao giờ chưa
– Khác nhau MVVM và MVC
– So sánh web api và wcf
– Ngoài wcf còn biết công nghệ nào tương tự không
– Nói các mối liên hệ của web MVC
– So sánh MVC trước đó và MVC core
– Authencatio, identity trong web MVC
– Có bao nhiêu cách trao đổi data giữa Controller và view
– Em biết razor k, sơ lược về hoạt động của razor
– Trong controller a có Action nhận object từ view. Em có bao nhiêu cách validate object đó
– So sánh Session, cookie, state. Em xài từng thứ đó khi nào
– Em đã từng custom validation chưa. Thử nói 1 cái đơn giản xem
– Em có custom EditorFor chưa. Khi nào cần phải custom
– So sánh HtmlString và html thường, Em đã custom error với htmlstring bao giờ chưa
– Em xài framework j để làm việc với database
– EF core khác EF trước đó ntn
– Em có xái linq để làm việc vs database hay khi
– Hoạt động của linq như thế nào. Khi nào thì nó generate ra chuỗi truy vấn, runtime hay complile time
– Có mấy cách làm việc vs EF, so sánh code first và database first, cái nào tốt hơn, khi nào xài cái nào
– Em biết bao nhiêu framework javascript so sánh
– Nếu anh có case bất đồng bộ thì em xài hàm nào trong javascript
– A muốn call Action trong controller của MVC thì xài hàm nào trong javascript.
– Em đã custom component angular bao giờ chưa.
– Cách kết hợp angular 4 và MVC như thế nào
– Angular hay React có thể thay thế javascript trong web MVC được không
– Trong web MVC application, javascript có thể tương tác với database mà không thông qua web MVC được không?

3. HR
– Hỏi mức lương hiện tại, mức lương mong muốn
– Định hướng 3-5 năm tới
– Tại sao lại muốn nhảy việc
– Giới thiệu cty, quy trình, đãi ngộ các kiểu
– Em có câu hỏi gì không?

 Git stash được sử dụng khi muốn lưu lại các thay đổi chưa commit, thường rất hữu dụng khi bạn muốn đổi sang 1 branch khác mà lại đang làm dở ở branch hiện tại.

Lệnh git stash sẽ có tác dụng với tất cả dữ liệu đang hoạt động trong working directory với điều kiện là dữ liệu đó đã được đưa vào trạng thái Staged hoặc đã từng được committed.Git stash save
- Git stash list
- Git stash apply
- Git stash pop
- Git stash show
- Git stash branch <name>
- Git stash clear
- Git stash drop

Git cherry-pick là một cách để checkout 1 commit bất kỳ tại 1 branch được chỉ định về brach hiện tại.
Hay chính là git cherry-pick sẽ mang thay đổi của 1 commit trên 1 nhánh nào đó áp dụng vào nhánh hiện tại.
Sử dụng nó khi muốn 1 pull request merge vào nhiều nhánh môi trường khác nhau.

Git Rebase sẽ giúp loại bỏ những commit không cần thiết như khi sử dụng git merge và giúp tạo ra lịch sử commit có dạng tuyến tính, xuyên suốt project từ khi bắt đầu cho đến hiện tại.
Ta có thể dễ dàng điều hướng và kiểm tra lịch sử project bằng git log.
Rebase sẽ tạo commit nằm phía trên commit mới nhất.
Ta sử dụng git rebase nếu như muốn các sự thay đổi thuộc về branch của mình luôn luôn là mới nhất.

Git Merge là cách có thể tích hợp với master hay với rất nhiều nhánh trong 1 lần.
Tuy nhiên trường hợp tích hợp bằng merge thì những commit của branch sẽ hoàn toàn không được record lại
Ta sử dụng git merge nếu muốn sắp xếp các commit theo mặc định

 Concurrency:

Doing more than one thing at a time.
Là làm nhiều hơn một việc trong cùng một thời gian.

Multithreading
A form of concurrency that uses multiple threads of execution.
Nhiều máy tính cá nhân và workstations có nhiều CPU core cho phép nhiều thread có thể thực hiện tác vụ đồng thời. Để tối ưu lợi thế của phần cứng, bạn có thể chạy song song (parallelize) code để phân tán công việc trên nhiều processor.
Multithreading liên quan tới việc sử dụng nhiều thread cùng lúc. Đó là 1 dạng của concurrency, nhưng không phải là dạng duy nhất.
Multithreading được ứng dụng ở thread pool, nơi mà các thread được phân bổ tự động để đáp ứng các request.

Parallel processing
Doing lots of work by dividing it up among multiple threads that run concurrently.
Parallel processing (hay là parallel programming) sử dụng multithreading để tối ưu hóa việc sử dụng nhiều processor.
Các CPUs ngày nay đều có nhiều core, nếu có nhiều công việc cần xử lý, Parallel processing sẽ chia nhỏ công việc ra nhiều thread, và các thread có thể chạy độc lập trên mỗi core khác nhau.
Parallel processing là 1 loại của Multithreading và multithreading là 1 loại của concurrency.

Asynchronous Programming
A form of concurrency that uses futures or callbacks to avoid unnecessary threads.
Asynchronous programming là 1 thể loại khác của concurrency vô cùng mạnh mẽ, sử dụng keywork async và await, lập trình đơn giản như synchronous (nonconcurrent).

Reactive Programming
A declarative style of programming where the application reacts to events.
Một loại khác của concurrency là reactive programming. Asynchronous programing cho phép ứng dụng start 1 operation mà sẽ hoàn thành ở 1 thời gian sau đó.
Reactive programming cũng gần giống như asynchronous programming, nhưng nó được xây dựng dựa trên các asynchronous event thay vì asynchronous operation.

 React

React là một thư viện JavaScript, được Facebook ra mắt từ năm 2013.
Đây là một thư viện tuyệt vời để xây dựng các ứng dụng web lớn, nơi dữ liệu có thể thay đổi thường xuyên.

Ưu điểm:
- Dễ học, nhờ thiết kế đơn giản, sử dụng JSX (một cú pháp giống như HTML) để tạo khuôn mẫu.
- Tốc độ ứng dụng vô cùng ấn tượng. Tất cả là nhờ kỹ thuật DOM ảo của React và tối ưu hóa rendering.
- Hỗ trợ render phía máy chủ rất tốt. Điều này làm cho React trở thành một framework mạnh mẽ cho các ứng dụng tập trung vào nội dung.
- Hỗ trợ tạo ứng dụng Progressive Web App (PWA) nhanh chóng. Đơn giản chỉ cần câu lệnh: “creat-react-app”.
- Data-binding một chiều, có nghĩa là ít side effects không mong muốn.
- Mô hình Redux: một mô hình quản lý trạng thái ứng dụng cực tốt.
- React theo trường phái lập trình hàm (Functional Programming), tạo mã dễ kiểm tra và có khả năng tái sử dụng cao.
- Ngoài ra, còn một ưu điểu cực lớn nữa, đó là nếu bạn biết về React thì bạn sẽ dễ dàng học thêm React Native.

Nhược điểm
- Chính vì sự phát triển siêu nhanh của ReactJS mà tài liệu hướng dẫn chính chủ không theo kịp. Hầu hết các bài viết hướng dẫn trên mạng bị lỗi thời. Điều này gây không ít khó khăn cho các dev nhà mình.
- React đang đi theo hướng lập trình hàm, điều này sẽ gây đôi chút khó chịu và ác cảm với các dev đã quen với lập trình hướng đối tượng (OOP).
- Việc trộn giữa templating với logic ứng dụng (JSX) có thể gây nhầm lẫn cho một số nhà phát triển lúc đầu.

Angular
Angular là một JavaScript MVVM framework, được ra mắt từ 2009.
Đây là một JS framework nổi đình đám trong giới front-end, giúp xây dựng các ứng dụng web có tính tương tác cao.

Ưu đểm:
- Hỗ trợ trợ TypeScript: Angular được tạo ra để được sử dụng cùng với TypeScript. Mà TypeScript thì bạn biết rồi đấy, nó mang ưu điểm của cả Js và các ngôn ngữ OOP.
- Data-binding: Nó tự động đồng bộ hóa dữ liệu giữa thành phần model và view.
- Tài liệu hướng dẫn chi tiết và đầy đủ. Với tài liệu hướng dẫn chi tiết từ chính nhà cung cấp sẽ giúp người mới tìm hiểu Angular nhanh chóng tiếp cận và làm chủ framework này. Nhờ đó mà giảm thời gian training, thảo luận với đồng nghiệp… khi mà trên trang chủ của họ có tất cả.
- MVVM (Model-View-ViewModel): cho phép bạn chia dự án thành nhiều phần độc lập với nhau.
- Dependency Injection: Nó cho phép bạn làm giảm sự phụ thuộc giữa các Object với nhau. Các object càng độc lập với nhau càng tốt, mục đích để sau này nâng cấp, sửa đổi… sẽ hạn chế ảnh hưởng tới các object khác.
- Cấu trúc và kiến trúc của Angular được tạo ra đặc biệt cho khả năng mở rộng dự án lớn.

Nhược điểm:
- Angular khá là đa dạng các thành phần/khái niệm như Injectables, Components, Pipes, Modules… Điều này khiến cho việc tìm hiểu trở nên khó khăn hơn một chút so với React và Vuejs
- Theo đánh giá hiệu năng thì Angular có vẻ chậm hơn React và Vuejs.

Vue
Vue.js là một framework JavaScript, được ra mắt vào năm 2013, hoàn toàn phù hợp để tạo giao diện người dùng có khả năng thích ứng cao và các ứng dụng trang đơn phức tạp.

Ưu điểm:
- Empowered HTML: điều này có nghĩa là Vue.js có nhiều đặc điểm tương tự với Angular. Chính vì thế nó có thể giúp tối ưu hóa việc xử lý các khối HTML khi sử dụng các thành phần khác nhau.
- Tài liệu hướng dẫn chi tiết: Nhờ có tài liệu chi tiết mà việc học tập trở nên nhanh chóng, tiết kiệm thời gian phát triển ứng dụng chỉ sử dụng kiến thức cơ bản về HTML và JavaScript.
- Khả năng tương thích. Việc chuyển sang sử dụng Vuejs từ các Js framework tương đối nhanh chóng.
- Khả năng tích hợp tốt.js có thể được sử dụng cho việc xây dựng cả ứng dụng (single-page applications) phức tạp hoặc chỉ một phần của ứng dụng. Điều này cho phép bạn cập nhật, nâng cấp ứng dụng mà không ảnh hưởng quá nhiều tới hệ thống hiện tại.
- Large scaling: js có thể phát triển templates có khả năng tái sử dụng cao.
- Kích thước nhỏ. Toàn bộ thư viện js chỉ có kích thước 20KB.


Nhược điểm:
Thiếu tài nguyên: Vuejs vẫn có thị phần khá nhỏ so với React hoặc Angular. Điều đó có nghĩa là việc chia sẻ kiến thức trong cộng đồng vẫn còn khá ít. Nếu bạn gặp khó khăn hoặc phát sinh bug thì chỉ có tác giả là nhiệt tình với bạn thôi.


 Code First:

Viết các class Model bằng code C# và generate Database từ class Model.

Ưu điểm:
- Rất phổ biến (vì các lập trình viên thường không thích thiết kế DB, nhưng thích thiết kế class)
- Kiểm soát hoàn toàn code model, thêm xóa sửa thuộc tính vô cùng dễ dàng
- Không phải nặng đầu suy nghĩ về DB. Đối với cách tiếp cận này, DB chỉ là cái “cục” data, lôi ra xài thôi
- Có thể version control Database

Nhược điểm
- Các thay đổi cấu trúc trực tiếp trên DB sẽ mất
- Khó kiểm soát những column sẽ tạo trên Db
- Hơi khó khi kết hợp với Db có sẵn

Database First:
Generate Model từ Database có sẵn và các class model sẽ ko được phép chỉnh sửa vì database không đổi.

Ưu điểm:
- Ít phổ biến hơn
- DB có thể được develop riêng
- Dùng được DB có sẵn
- Entity Framework sẽ tạo ra các Entity class cho bạn

Nhược điểm
- Không thể thay đổi code đã được Generate
- Khó khăn khi muốn thêm các DataAttribute và DisplayAttribute cho các class model
- Khó khăn khi muốn biểu diễn các kiểu quan hệ cha con của class
- Mỗi lần thay đổi cấu trúc DB, bạn sẽ phải update lại mapping và model để phản ánh sự thay đổi đó

 IEnumerable nằm trong namespace System.Collections

IEnumerable là một list hay contatiner giữ các item chỉ hỗ trợ filter nhưng không thể chỉnh sửa các item như thêm, xoá, sửa, đếm...
IQueryable, IList, IDictionary, ICollection kế thừa IEnumerable Interface.

- ICollection là interface cơ bản nhất trong số các interface đã liệt kê.
Đó là một interface có thể đếm được hỗ trợ Count và đó là về nó.
- IList kế thừa IEnumerable và ICollection, nhưng nó cũng hỗ trợ thêm và xóa các mục, truy xuất các mục theo chỉ mục...
Đó là giao diện được sử dụng phổ biến nhất cho "danh sách các đối tượng", điều mà tôi biết.
- IQueryable là một interface có thể liệt kê hỗ trợ LINQ.
Bạn luôn có thể tạo IQueryable từ IList và sử dụng LINQ tới Objects, nhưng bạn cũng thấy IQueryable được sử dụng để thực hiện hoãn lại các câu lệnh SQL trong LINQ to SQL và LINQ to Entities.
- IDictionary là một interface khác với ánh xạ các khóa duy nhất đến các giá trị.

IQueryable
+ IQueryable tốt nhất cho truy vấn dữ liệu out-memory như là database.
+ Khi truy vấn, IQueryable thực thi câu lệnh truy vấn và lọc dữ liệu trên Server luôn.
+ IQueryable hỗ trợ lazy loading. Vì thế nó phù hợp cho trường hợp phân trang.
+ IQueryable hỗ trợ custom query sử dụng phương thức CreateQuery và Execute.
Bài đăng cũ hơn Trang chủ

ABOUT AUTHOR

NTechDevelopers

Follow us

New technology for developers

POPULAR POSTS

  • Interview notes: Senior Dot Net (Ver 08/2022)
    Khi nào dùng store khi nào dùng function? Phân biệt 2 loại Index? Phân biêt truncate table và delete table? Phân biệt net framework và net c...
  • Interview notes: Senior Dot Net (Ver 05/2022)
     - Giới thiệu về bản thân - Nói sơ lược về công nghệ của dự án gần nhất? - So sánh Net Framwork và Net Core? - Net core 3.1 có gì khác biệt ...
  • Interview notes: Junior DotNet (Ver 10/2019)
      1. Bài test: 30 phút Gồm 4 phần: OOP Data structure Database Design pattern 1.1 – Câu hỏi trắc nghiệm liên quan đến 4 thuộc tính 5 câu – C...

Categories

  • Concurrency
  • Database
  • Design Patterns
  • DotNet
  • Entity Framework
  • Frontend
  • Interview notes
  • OOP
  • Principles
  • Subversion Control
  • Unit test

Advertisement

Website đang trong quá trình cập nhập. Hi vọng các bạn ủng hộ!

About Me

NTechDevelopers is a community of Software development joined together with certain common goals: to learn, to teach and to have fun programming. I hope that you find NTechDevelopers to be a wealth of information and a valuable resource.

Popular Posts

  • Interview notes: Senior Dot Net (Ver 08/2022)
    Khi nào dùng store khi nào dùng function? Phân biệt 2 loại Index? Phân biêt truncate table và delete table? Phân biệt net framework và net c...

Advertisement

Copyright © 2022 Interview Notes. Created by NtechDevelopers