diff --git a/README.md b/README.md index ebe3495..beabdf4 100644 --- a/README.md +++ b/README.md @@ -4,48 +4,170 @@ ![](./interviews.jpg) -## Cơ bản - -- [**Cấu trúc dữ liệu**](./basics/data-structures): 40 câu hỏi phỏng vấn cấu trúc dữ liệu. -- [**Thuật toán**](./basics/algorithms): 30 câu hỏi phỏng vấn thuật toán. -- [**Hướng đối tượng**](./basics/oops): 40 câu hỏi phỏng vấn OOP. -- [**Design Patterns**](./basics/design-patterns): 28 câu hỏi phỏng vấn design pattern. - -## Nâng cao - -- [**Hệ điều hành**](./advanced/os): 40 câu hỏi phỏng vấn hệ điều hành. -- [**Mạng máy tính**](./advanced/network): 35 câu hỏi phỏng vấn mạng máy tính. -- [**An ninh mạng**](./advanced/cyber): 42 câu hỏi phỏng vấn an ninh mạng. -- [**Phương pháp Agile**](./advanced/agile): 34 câu hỏi phỏng vấn về Agile. - -## Cơ sở dữ liệu - -- [**SQL**](./database/sql): 40 câu hỏi phỏng vấn SQL. -- [**MySQL**](./database/mysql): 31 câu hỏi phỏng vấn MySQL. -- [**PostgreSQL**](./database/postgresql): 26 câu hỏi phỏng vấn PostgreSQL. -- [**MongoDB**](./database/mongodb): 24 câu hỏi phỏng vấn MongoDB. - -## Frontend - -- [**HTML**](./frontend/html): 63 câu hỏi phỏng vấn HTML. -- [**CSS**](./frontend/CSS): 54 câu hỏi phỏng vấn CSS. -- [**JavaScript**](./frontend/javascript): 30 câu hỏi phỏng vấn JavaScript. -- [**ES6**](./frontend/es6): 39 câu hỏi phỏng vấn ES6. -- [**TypeScript**](./frontend/typescript): 50 câu hỏi phỏng vấn TypeScript. -- [**React**](./frontend/react): 41 câu hỏi phỏng vấn ReactJS. - -## Backend - -- [**Web Services**](./backend/webservices): 48 câu hỏi phỏng vấn Web Service -- [**Node.js**](./backend/nodejs) -- [**Python**](./backend/python) - -## Devops - -- [DevOps cơ bản](./devops/devops) -- [Docker](./devops/docker) -- [Kubernetes](./devops/kubernetes) - +### Cơ bản + +- Kiến thức: + - [**Cấu trúc dữ liệu**](./basics/data-structures): 40 câu hỏi phỏng vấn cấu trúc dữ liệu. + - [**Thuật toán**](./basics/algorithms): 30 câu hỏi phỏng vấn thuật toán. + - [**Hướng đối tượng**](./basics/oops): 40 câu hỏi phỏng vấn OOP. + - [**Design Patterns**](./basics/design-patterns): 28 câu hỏi phỏng vấn design pattern. +- Ngôn ngữ lập trình: + - [**C++**](./basics/cpp): 28 Câu hỏi phỏng vấn C++. + +### Nâng cao +- Kiến thức: + - [**Hệ điều hành**](./advanced/os): 40 câu hỏi phỏng vấn hệ điều hành. + - [**Mạng máy tính**](./advanced/network): 35 câu hỏi phỏng vấn mạng máy tính. + - [**An ninh mạng**](./advanced/cyber): 42 câu hỏi phỏng vấn an ninh mạng. +- Ngôn ngữ lập trình: + - [**C#**](./advanced/c#): 30 câu hỏi phỏng vấn C#.(Pending) + +### Cơ sở dữ liệu +- Kiến thức: + - [**MySQL**](./database/mysql): 31 câu hỏi phỏng vấn MySQL. + - [**PostgreSQL**](./database/postgresql): 26 câu hỏi phỏng vấn PostgreSQL. + - [**MongoDB**](./database/mongodb): 24 câu hỏi phỏng vấn MongoDB. +- Ngôn ngữ lập trình: + - [**SQL**](./database/sql): 40 câu hỏi phỏng vấn SQL. + +### Frontend + +- Kiến thức: + - [**Web API**](./frontend/web-api): 41 câu hỏi phỏng vấn ReactJS. + - [**React**](./frontend/react): 41 câu hỏi phỏng vấn ReactJS. + - [**HTML**](./frontend/html): 63 câu hỏi phỏng vấn HTML. + - [**CSS**](./frontend/CSS): 54 câu hỏi phỏng vấn CSS. +- Ngôn ngữ lập trình: + - [**JavaScript**](./frontend/javascript): 30 câu hỏi phỏng vấn JavaScript. + - [**ES6**](./frontend/es6): 39 câu hỏi phỏng vấn ES6. + - [**TypeScript**](./frontend/typescript): 50 câu hỏi phỏng vấn TypeScript. + +### Backend + +- Kiến thức: + - [**Web Services**](./backend/web-services): + - [**Node.js**](./backend/nodejs): + - [**Django**](./backend/django): + - [**Microservice**](./backend/microservice) +- Ngôn ngữ: + - [**PHP**](./backend/php): 33 câu hỏi phỏng vấn về PHP. + +### Devops + +- Kiến thức + - [DevOps cơ bản](./devops/devops) + - [**Docker**](./devops/docker) + - [**Kubernetes**](./devops/kubernetes) +- Ngôn ngữ lập trình: + - [**Golang**](./devops/golang): 30 câu hỏi phỏng vấn Golang +### Data Analyst + +- Kiến thức: + - [**Phân tích dữ liệu cơ bản**](./data-analyst) + - [**Numpy**](./data-analyst/numpy) + - [**Pandas**](./data-analyst/pandas) + - [**Power BI**](./data-analyst/power-bi) + +- Ngôn ngữ lập trình: + - [**Python**](./data-analyst/python) + +### Mobile +- Kiến thức + - [**Android**](./mobile/android): 39 câu hỏi phỏng vấn về Android. + - [**iOS**](./mobile/ios): 36 câu hỏi phỏng vấn về iOS. + - [**React Native**](./mobile/react-native/): 30 câu hỏi phỏng vấn về React Native. +- Ngôn ngữ lập trình: + - [**Java**](./mobile/java): 54 câu hỏi phỏng vấn về Java. + +## Guide + +- **Term 1:** Kiến thức cơ bản về lập trình. + +| Content | Priority | Decs | +|---------|----------|------| +| Algorithms | Required | 30 câu hỏi phỏng vấn thuật toán | +| Data Structure | Required | 40 câu hỏi phỏng vấn cấu trúc dữ liệu | +| Design Pattern | Required | 28 câu hỏi phỏng vấn design pattern | +| OOPs | Required | 40 câu hỏi phỏng vấn hướng đối tượng | +| C++ | Optional | + +- **Term 2:** Kiến thức về mạng máy tính, hệ điều hành và bảo mật. + + | Content | Priority | Decs | + |---------|----------|------| + | Network | Required | 35 câu hỏi phỏng vấn mạng máy tính | + | OS | Required | 40 câu hỏi phỏng vấn hệ điều hành | + | Cyber | Required | 42 câu hỏi phỏng vấn an ninh mạng | + +- **Term 3:** Kiến thức về lập trình web frontend + + | Content | Priority | Decs | + |---------|----------|------| + | HTML, CSS | Required | 117 câu hỏi phỏng vấn HTML, CSS | + | JavaScript, ES6 | Required | 70 câu hỏi phỏng vấn JS | + | TypeScript | Optional | 50 câu hỏi phỏng vấn TS | + | React | Optional | 40 câu hỏi phỏng vấn React| + +- **Term 4:** Kiến thức về cơ sở dữ liệu + + | Content | Priority | Decs | + |---------|----------|------| + | SQL | Required | 117 câu hỏi phỏng vấn HTML, CSS | + | MySQL | Required | 120 câu hỏi phỏng vấn JS/TS | + | PostgreSQL | Optional | 40 câu hỏi phỏng vấn React| + | MongoDB | Optional | 40 câu hỏi phỏng vấn Node.js | + +- **Term 5:** Kiến thức về lập trình web backend + + | Content | Priority | Decs | + |---------|----------|------| + | Web Service | Required | + | Web Api | Required | + | Django | Optional | + | Node.js | Optional | 40 câu hỏi phỏng vấn Node.js | + +- **Term 6:** Kiến thức về lập trình mobile + + | Content | Priority | + |---------|----------| + | Java | Required | + | Android | Optional | + | iOS | Optional | + | React Native | Optional | + +- **Term 7:** Kiến thức về DevOps + + | Content | Priority | + |---------|----------| + | DevOps | Optional | + | Docker | Required | + | Kubernetes | Optional | + | Microservice | Optional | + +- **Term 8:** Kiến thức về khoa học dữ liệu + + | Content | Priority | + |---------|----------| + | Python | Required | + | Data Science | Optional | + | Numpy | Optional | + | Pyspark | Optional | + +- **Term 9:** Kiến thức về máy học và trí thông minh nhân tạo + + | Content | Priority | + |---------|----------| + | Machine Learning | Optional | + | Deep Learning | Optional | + | Artificial Intelligence | Optional | + +- **Kỹ năng bổ sung:** + + | Content | Priority | + |---------|----------| + | Testing | Optional | + | AWS | Optional | + | Git | Optional | # Tham khảo diff --git a/microservices/c#/README.md b/advanced/c#/README.md similarity index 100% rename from microservices/c#/README.md rename to advanced/c#/README.md diff --git a/microservices/c#/assets/Common_Language_Runtime_(CLR).png b/advanced/c#/assets/Common_Language_Runtime_(CLR).png similarity index 100% rename from microservices/c#/assets/Common_Language_Runtime_(CLR).png rename to advanced/c#/assets/Common_Language_Runtime_(CLR).png diff --git a/microservices/c#/assets/Multiple-inheritance_in_C_.png b/advanced/c#/assets/Multiple-inheritance_in_C_.png similarity index 100% rename from microservices/c#/assets/Multiple-inheritance_in_C_.png rename to advanced/c#/assets/Multiple-inheritance_in_C_.png diff --git a/microservices/c#/assets/arrays_in_C_.png b/advanced/c#/assets/arrays_in_C_.png similarity index 100% rename from microservices/c#/assets/arrays_in_C_.png rename to advanced/c#/assets/arrays_in_C_.png diff --git a/microservices/c#/assets/csharp.jpg b/advanced/c#/assets/csharp.jpg similarity index 100% rename from microservices/c#/assets/csharp.jpg rename to advanced/c#/assets/csharp.jpg diff --git a/microservices/c#/coding/hotel-room.cs b/advanced/c#/coding/hotel-room.cs similarity index 100% rename from microservices/c#/coding/hotel-room.cs rename to advanced/c#/coding/hotel-room.cs diff --git a/microservices/c#/coding/longest-words.cs b/advanced/c#/coding/longest-words.cs similarity index 100% rename from microservices/c#/coding/longest-words.cs rename to advanced/c#/coding/longest-words.cs diff --git a/microservices/c#/coding/shortest-fizz-buzz.cs b/advanced/c#/coding/shortest-fizz-buzz.cs similarity index 100% rename from microservices/c#/coding/shortest-fizz-buzz.cs rename to advanced/c#/coding/shortest-fizz-buzz.cs diff --git a/microservices/c#/coding/sum-of-array-plus-one.cs b/advanced/c#/coding/sum-of-array-plus-one.cs similarity index 100% rename from microservices/c#/coding/sum-of-array-plus-one.cs rename to advanced/c#/coding/sum-of-array-plus-one.cs diff --git a/backend/django/assets/lifecycle.png.opdownload b/backend/django/assets/lifecycle.png.opdownload deleted file mode 100644 index 393b22c..0000000 Binary files a/backend/django/assets/lifecycle.png.opdownload and /dev/null differ diff --git a/microservices/microservices/assets/Bounded_Context.jpg b/backend/microservice/assets/Bounded_Context.jpg similarity index 100% rename from microservices/microservices/assets/Bounded_Context.jpg rename to backend/microservice/assets/Bounded_Context.jpg diff --git a/microservices/microservices/assets/Cohesion_and_Coupling.jpg b/backend/microservice/assets/Cohesion_and_Coupling.jpg similarity index 100% rename from microservices/microservices/assets/Cohesion_and_Coupling.jpg rename to backend/microservice/assets/Cohesion_and_Coupling.jpg diff --git a/microservices/microservices/assets/Domain_driven_design.jpg b/backend/microservice/assets/Domain_driven_design.jpg similarity index 100% rename from microservices/microservices/assets/Domain_driven_design.jpg rename to backend/microservice/assets/Domain_driven_design.jpg diff --git a/microservices/microservices/assets/Explain_Container_in_Microservices.jpg b/backend/microservice/assets/Explain_Container_in_Microservices.jpg similarity index 100% rename from microservices/microservices/assets/Explain_Container_in_Microservices.jpg rename to backend/microservice/assets/Explain_Container_in_Microservices.jpg diff --git a/microservices/microservices/assets/Microservice_Architecture.jpg b/backend/microservice/assets/Microservice_Architecture.jpg similarity index 100% rename from microservices/microservices/assets/Microservice_Architecture.jpg rename to backend/microservice/assets/Microservice_Architecture.jpg diff --git a/microservices/microservices/assets/Microservices_Interview.jpg b/backend/microservice/assets/Microservices_Interview.jpg similarity index 100% rename from microservices/microservices/assets/Microservices_Interview.jpg rename to backend/microservice/assets/Microservices_Interview.jpg diff --git "a/microservices/microservices/assets/Mike_Cohn\342\200\231s_Test_Pyramid.jpg" "b/backend/microservice/assets/Mike_Cohn\342\200\231s_Test_Pyramid.jpg" similarity index 100% rename from "microservices/microservices/assets/Mike_Cohn\342\200\231s_Test_Pyramid.jpg" rename to "backend/microservice/assets/Mike_Cohn\342\200\231s_Test_Pyramid.jpg" diff --git a/microservices/microservices/assets/Spring_Boot.jpg b/backend/microservice/assets/Spring_Boot.jpg similarity index 100% rename from microservices/microservices/assets/Spring_Boot.jpg rename to backend/microservice/assets/Spring_Boot.jpg diff --git a/microservices/microservices/assets/Spring_Cloud.jpg b/backend/microservice/assets/Spring_Cloud.jpg similarity index 100% rename from microservices/microservices/assets/Spring_Cloud.jpg rename to backend/microservice/assets/Spring_Cloud.jpg diff --git a/microservices/microservices/assets/difference_between_Monolithic__SOA_and_Microservices_Architecture.jpg b/backend/microservice/assets/difference_between_Monolithic__SOA_and_Microservices_Architecture.jpg similarity index 100% rename from microservices/microservices/assets/difference_between_Monolithic__SOA_and_Microservices_Architecture.jpg rename to backend/microservice/assets/difference_between_Monolithic__SOA_and_Microservices_Architecture.jpg diff --git a/microservices/microservices/assets/explain-type-of-tests-mostly-used-in-microservices.jpg b/backend/microservice/assets/explain-type-of-tests-mostly-used-in-microservices.jpg similarity index 100% rename from microservices/microservices/assets/explain-type-of-tests-mostly-used-in-microservices.jpg rename to backend/microservice/assets/explain-type-of-tests-mostly-used-in-microservices.jpg diff --git a/microservices/microservices/assets/features_of_Microservices.jpg b/backend/microservice/assets/features_of_Microservices.jpg similarity index 100% rename from microservices/microservices/assets/features_of_Microservices.jpg rename to backend/microservice/assets/features_of_Microservices.jpg diff --git a/backend/python/CODING.md b/backend/python/CODING.md deleted file mode 100644 index 424ae4b..0000000 --- a/backend/python/CODING.md +++ /dev/null @@ -1,13 +0,0 @@ -# Câu hỏi Coding - -## Challenge 1 - -- 1.1 - [Kiểm tra ký tự trùng lặp](./coding/challenge1/isUnique.js) -- 1.2 - [Kiểm tra hoán vị](./coding/challenge1/checkPermute.js) -- 1.3 - [Chuyển chuỗi về dạng URL](./coding/challenge1/urlify.js) -- 1.4 - [Chuỗi đối xứng](./coding/challenge1/palinPermute.js) -- 1.5 - [One Away](./coding/challenge1/oneaway.js) -- 1.6 - [So sánh chuỗi](./coding/challenge1/strComp.js) -- 1.7 - [Xoay ma trận](./coding/challenge1/rotateMatrix.js) -- 1.8 - [Ma trận không](./coding/challenge1/zeroMatrix.js) -- 1.9 - [Xoay chuỗi](./coding/challenge1/stringRotation.js) diff --git a/backend/python/README.md b/backend/python/README.md deleted file mode 100644 index 2804cc4..0000000 --- a/backend/python/README.md +++ /dev/null @@ -1,106 +0,0 @@ -# Câu hỏi phỏng vấn Python - -![](./assets/python.png) - -## Python là gì? - -Python được phát triển bởi Guido van Rossum và công bố vào ngày 20 tháng 2, 1991. Nó là một tròng những ngôn ngữ lập trình được yêu thích và phổ biến nhất thế giới. Về bản chất nó là ngôn ngữ thông dịch do đó nó cung cấp sự linh hoạt trong việc kết hợp ngữ nghĩa động. Nó cũng là một ngôn ngữ mã nguồn mở và miễn phí với cú pháp rất đơn giản và rõ ràng. Điều này giúp mọi người dễ dàng học python. Python cũng hỗ trợ lập trình hướng đối tượng và được sử dụng rộng rãi trong giới lập trình. - -Do tính chất đơn giản và khả năng đạt được nhiều chức năng trong ít dòng code hơn, nên mức độ phổ biến của python đang tăng lên rất nhiều. Python cũng được sử dụng trong Máy học, Trí tuệ nhân tạo, Phát triển Web, Web Scraping và nhiều lĩnh vực khác do khả năng hỗ trợ tính toán mạnh mẽ bằng cách sử dụng các thư viện mạnh mẽ. Vì thế, nhu cầu tuyển các nhà phát triển python là rất lớn trên toàn thế giới. Các công ty sẵn sàng cung cấp các đặc quyền và lợi ích tuyệt vời cho những dev này. - -## Lợi ích của sử dụng Python - -- Python là ngôn ngữ lập trình đa năng có cú pháp đơn giản, dễ học, nhấn mạnh tính dễ đọc nhờ đó giảm chi phí bảo trì chương trình. Hơn nữa, ngôn ngữ này có khả năng viết script, hoàn toàn là mã nguồn mở và có số lượng thư viện hỗ trợ dồi dào. - -- Cấu trúc dữ liệu cấp cao kết hợp với tính năng kiểu động và liên kết động, thu hút một cộng đồng lớn các lập trình viên sử dụng nó để triển khai và phát triển ứng dụng nhanh chóng. - -## Câu hỏi phỏng vấn cho Fresher - -### 1. Thế nào là ngôn ngữ kiểu động? - -Trước khi hiểu về ngôn ngữ kiểu động ta nên biết về kiểu là gì. Trong ngôn ngữ lập trình, kiểu đề cập đến việc kiểm tra kiểu dữ liệu. Nếu một ngôn ngữ kiểu mạnh, thì `"1" + 2` sẽ báo lỗi vì không thể tự động ép kiểu. Nhưng nếu là ngôn ngữ kiểu yếu thì sẽ cho về kết quả là `12`. - -Kiểm tra kiểu có hai loại: -- **Static**: kiểm tra kiểu dữ liệu trước khi thực thi. -- **Dynamic**: kiểm tra kiểu dữ liệu khi đang thực thi. - -Python là ngôn ngữ thông dịch, thực thi câu lệnh theo từng dòng do đó việc kiểm tra kiểu xảy ra khi đang thực thi. Python là ngôn ngữ kiểu động. - -![](./assets/dynamically_typed_language.jpg) - -### 2. Ngôn ngữ thông dịch là gì? - -Ngôn ngữ thông dịch là ngôn ngữ thực thi từng dòng lệnh, ví dụ như Python, JavaScript, R, PHP và Ruby. Chương trình viết bằng ngôn ngữ thông dịch có thể chạy trực tiếp từ code, không cần bước biên dịch. - -### 3. PEP 8 là gì và tại sao nó lại quan trọng? - -PEP là viết tắt của **Python Enhancement Proposal**. Một PEP là một tài liệu thiết kế chính thống cung cấp thông tin từ cộng đồng Python hoặc mô tả tính năng mới của Python. PEP 8 đặc biệt quan trọng vì nó ghi lại các hướng dẫn về phong cách code Python. Rõ ràng việc đóng góp cho cộng đồng nguồn mở Python đòi hỏi bạn phải tuân theo các nguyên tắc về phong cách này một cách nghiêm ngặt. - -## 4. Scope trong Python - -Phạm vi (scope) đề cập đến vùng code mà từ đó đối tượng trong Python có thể truy cập được. Do đó, người ta không thể truy cập bất kỳ đối tượng cụ thể nào từ bất kỳ nơi nào trong code, việc truy cập phải được cho phép theo phạm vi của đối tượng. - -Các kiểu phạm vi trong Python: - -- Một **local scope** đề cập đến đối tượng cục bộ khả dụng trong hàm hiện tại. - -- Một **global scope** đề cập đến đối tượng khả dụng trong suốt quá trình thực thi code kể từ khi chúng ra đời. - -- Một **module-level scope** đề cập đến đối tượng toàn cụ của module hiện tại có thể truy cập trong chương trình. - -- Một **outermost scope** đề cập đến các tên built-in có thể gọi trong chương trình. - -### 5. List và Tuple là gì? Sự khác biệt giữa chúng? - -List và Tuple là hai kiểu dữ liệu tuần tự cho lưu trữ tập hợp đối tượng trong Python. List được biểu diễn bằng cặp ngoặc vuông `['sara', 6, 0.19]` trong khi tuple được biểu diễn bằng dấu ngoặc đơn `('ansh', 5, 0.97)`. - -Bên cạnh sự khác biệt về cú pháp, điểm khác biệt chính của cả hai là tuple chỉ lưu đối tượng *bất biến*. Có nghĩa là list có thể chỉnh sửa, thêm hay xoá trong khi tuple chỉ lưu hằng và không chỉnh sửa gì được. - -```python -my_tuple = ('sara', 6, 5, 0.97) -my_list = ['sara', 6, 5, 0.97] -print(my_tuple[0]) # output => 'sara' -print(my_list[0]) # output => 'sara' -my_tuple[0] = 'ansh' # modifying tuple => throws an error -my_list[0] = 'ansh' # modifying list => list modified -print(my_tuple[0]) # output => 'sara' -print(my_list[0]) # output => 'ansh' -``` - -### 6. Kiểu dữ liệu trong Python? - -Mặc dù Python không yêu cầu kiểu dữ liệu khi khai báo biến nhưng lỗi vẫn xảy là nếu ta dùng kiểu dữ liệu khác với tương thích của nó. Python cung cấp hàm `type()` và `isinstance()` để kiểm tra kiểu của các các biến. Trong Python có các kiểu dữ liệu sau: - -- **None**: từ khoá `None` biểu diễn giá trị null trong Python. Có thể thực hiện so sánh bằng với đối tượng kiểu None. - -| Tên | Mô tả | -|------------|-------------| -| NoneType | Biểu diễn giá trị Null | - -- **Kiểu số**: có 3 kiểu số trong Python là **int**, **float** và **complex**. Bên cạnh đó boolean cũng là kiểu con của int. - -| Tên | Mô tả | -|-----|-------| -| int | lưu trữ kiểu số nguyên dạng thập phân, nhị phân, bát phân | -| float | lưu trữ giá trị thập phân, phân số, số chấm động | -| complex | lưu trữ kiểu số phức (A + Bj) với A là phần thực, B là phần ảo | -| bool | lưu giá trị nhị nguyên (True hoặc False) | - -- **Kiểu chuỗi**: có 3 kiểu chuỗi cơ bản trong Python - list, tuple - -### 7. Pass trong Python? - -Từ khoá `pass` biểu diễn toán tử null trong Python. Nó được dùng nhằm mục đích lắp đầy các khối code trống có thể thực thi trong thời gian chạy nhưng hiện tại vẫn chưa viết. Nếu không có lệnh pass, ta có thể gặp lỗi khi thực thi code. - -```python -def myEmptyFunc(): - # do nothing - pass -myEmptyFunc() # nothing happens -## Without the pass keyword -# File "", line 3 -# IndentationError: expected an indented block -``` - -### 8. Module và package trong Python? - diff --git a/backend/python/coding/challenge1/is_unique.py b/backend/python/coding/challenge1/is_unique.py deleted file mode 100644 index 12a0f23..0000000 --- a/backend/python/coding/challenge1/is_unique.py +++ /dev/null @@ -1,112 +0,0 @@ -import time -import unittest -from collections import defaultdict - - -def is_unique_chars_algorithmic(string): - # Assuming character set is ASCII (128 characters) - if len(string) > 128: - return False - - # this is a pythonic and faster way to initialize an array with a fixed value. - # careful though it won't work for a doubly nested array - char_set = [False] * 128 - for char in string: - val = ord(char) - if char_set[val]: - # Char already found in string - return False - char_set[val] = True - - return True - - -def is_unique_chars_pythonic(string): - return len(set(string)) == len(string) - - -def is_unique_bit_vector(string): - """Uses bitwise operation instead of extra data structures.""" - # Assuming character set is ASCII (128 characters) - if len(string) > 128: - return False - - checker = 0 - for c in string: - val = ord(c) - if (checker & (1 << val)) > 0: - return False - checker |= 1 << val - return True - - -def is_unique_chars_using_dictionary(string: str) -> bool: - character_counts = {} - for char in string: - if char in character_counts: - return False - character_counts[char] = 1 - return True - - -def is_unique_chars_using_set(string: str) -> bool: - characters_seen = set() - for char in string: - if char in characters_seen: - return False - characters_seen.add(char) - return True - - -# O(NlogN) -def is_unique_chars_sorting(string: str) -> bool: - sorted_string = sorted(string) - last_character = None - for char in sorted_string: - if char == last_character: - return False - last_character = char - return True - - -class Test(unittest.TestCase): - test_cases = [ - ("abcd", True), - ("s4fad", True), - ("", True), - ("23ds2", False), - ("hb 627jh=j ()", False), - ("".join([chr(val) for val in range(128)]), True), # unique 128 chars - ("".join([chr(val // 2) for val in range(129)]), False), # non-unique 129 chars - ] - test_functions = [ - is_unique_chars_pythonic, - is_unique_chars_algorithmic, - is_unique_bit_vector, - is_unique_chars_using_dictionary, - is_unique_chars_using_set, - is_unique_chars_sorting, - ] - - def test_is_unique_chars(self): - num_runs = 1000 - function_runtimes = defaultdict(float) - - for _ in range(num_runs): - for text, expected in self.test_cases: - for is_unique_chars in self.test_functions: - start = time.perf_counter() - assert ( - is_unique_chars(text) == expected - ), f"{is_unique_chars.__name__} failed for value: {text}" - function_runtimes[is_unique_chars.__name__] += ( - time.perf_counter() - start - ) * 1000 - - print(f"\n{num_runs} runs") - for function_name, runtime in function_runtimes.items(): - print(f"{function_name}: {runtime:.1f}ms") - - -if __name__ == "__main__": - unittest.main() \ No newline at end of file diff --git a/backend/webservices/README.md b/backend/web-services/README.md similarity index 100% rename from backend/webservices/README.md rename to backend/web-services/README.md diff --git a/backend/webservices/assets/JAXB.png b/backend/web-services/assets/JAXB.png similarity index 100% rename from backend/webservices/assets/JAXB.png rename to backend/web-services/assets/JAXB.png diff --git a/backend/webservices/assets/Java_Web_Service.png b/backend/web-services/assets/Java_Web_Service.png similarity index 100% rename from backend/webservices/assets/Java_Web_Service.png rename to backend/web-services/assets/Java_Web_Service.png diff --git a/backend/webservices/assets/Restful_Web_Service.png b/backend/web-services/assets/Restful_Web_Service.png similarity index 100% rename from backend/webservices/assets/Restful_Web_Service.png rename to backend/web-services/assets/Restful_Web_Service.png diff --git a/backend/webservices/assets/SOAP_Elements.png b/backend/web-services/assets/SOAP_Elements.png similarity index 100% rename from backend/webservices/assets/SOAP_Elements.png rename to backend/web-services/assets/SOAP_Elements.png diff --git a/backend/webservices/assets/UDDI.png b/backend/web-services/assets/UDDI.png similarity index 100% rename from backend/webservices/assets/UDDI.png rename to backend/web-services/assets/UDDI.png diff --git a/backend/webservices/assets/Web_Service.png b/backend/web-services/assets/Web_Service.png similarity index 100% rename from backend/webservices/assets/Web_Service.png rename to backend/web-services/assets/Web_Service.png diff --git a/backend/webservices/assets/Web_Service_Protocol_Stack.png b/backend/web-services/assets/Web_Service_Protocol_Stack.png similarity index 100% rename from backend/webservices/assets/Web_Service_Protocol_Stack.png rename to backend/web-services/assets/Web_Service_Protocol_Stack.png diff --git a/backend/webservices/assets/Web_Service_roles__operation____artifacts.png b/backend/web-services/assets/Web_Service_roles__operation____artifacts.png similarity index 100% rename from backend/webservices/assets/Web_Service_roles__operation____artifacts.png rename to backend/web-services/assets/Web_Service_roles__operation____artifacts.png diff --git a/backend/webservices/assets/Web_Service_type.png b/backend/web-services/assets/Web_Service_type.png similarity index 100% rename from backend/webservices/assets/Web_Service_type.png rename to backend/web-services/assets/Web_Service_type.png diff --git a/backend/webservices/assets/soap_advantages.png b/backend/web-services/assets/soap_advantages.png similarity index 100% rename from backend/webservices/assets/soap_advantages.png rename to backend/web-services/assets/soap_advantages.png diff --git a/backend/webservices/assets/wsdl.png b/backend/web-services/assets/wsdl.png similarity index 100% rename from backend/webservices/assets/wsdl.png rename to backend/web-services/assets/wsdl.png diff --git a/backend/webservices/assets/xml-rpc.png b/backend/web-services/assets/xml-rpc.png similarity index 100% rename from backend/webservices/assets/xml-rpc.png rename to backend/web-services/assets/xml-rpc.png diff --git a/data-analyst/pyspark/assets/Accumulator_variables.png b/data-analyst/pyspark/assets/Accumulator_variables.png deleted file mode 100644 index 5f1d461..0000000 Binary files a/data-analyst/pyspark/assets/Accumulator_variables.png and /dev/null differ diff --git a/data-analyst/pyspark/assets/PySpark_Architecture.png b/data-analyst/pyspark/assets/PySpark_Architecture.png deleted file mode 100644 index e04688f..0000000 Binary files a/data-analyst/pyspark/assets/PySpark_Architecture.png and /dev/null differ diff --git a/data-analyst/pyspark/assets/PySpark_DAGScheduler.png b/data-analyst/pyspark/assets/PySpark_DAGScheduler.png deleted file mode 100644 index 0d50579..0000000 Binary files a/data-analyst/pyspark/assets/PySpark_DAGScheduler.png and /dev/null differ diff --git a/data-analyst/pyspark/assets/PySpark_DataFrames.png b/data-analyst/pyspark/assets/PySpark_DataFrames.png deleted file mode 100644 index 7dcf101..0000000 Binary files a/data-analyst/pyspark/assets/PySpark_DataFrames.png and /dev/null differ diff --git a/data-analyst/pyspark/assets/PySpark_SparkContext.png b/data-analyst/pyspark/assets/PySpark_SparkContext.png deleted file mode 100644 index cf8d493..0000000 Binary files a/data-analyst/pyspark/assets/PySpark_SparkContext.png and /dev/null differ diff --git a/data-analyst/pyspark/assets/Pyspark_Streaming.png b/data-analyst/pyspark/assets/Pyspark_Streaming.png deleted file mode 100644 index b0d8ba5..0000000 Binary files a/data-analyst/pyspark/assets/Pyspark_Streaming.png and /dev/null differ diff --git a/data-analyst/pyspark/assets/RDD.png b/data-analyst/pyspark/assets/RDD.png deleted file mode 100644 index 708b03c..0000000 Binary files a/data-analyst/pyspark/assets/RDD.png and /dev/null differ diff --git a/data-analyst/pyspark/assets/SparkSession_in_Pyspark.png b/data-analyst/pyspark/assets/SparkSession_in_Pyspark.png deleted file mode 100644 index 3c4cba5..0000000 Binary files a/data-analyst/pyspark/assets/SparkSession_in_Pyspark.png and /dev/null differ diff --git a/data-analyst/pyspark/assets/characteristics_of_PySpark.png b/data-analyst/pyspark/assets/characteristics_of_PySpark.png deleted file mode 100644 index 1db5d54..0000000 Binary files a/data-analyst/pyspark/assets/characteristics_of_PySpark.png and /dev/null differ diff --git a/data-analyst/pyspark/assets/cluster_manager_types.png b/data-analyst/pyspark/assets/cluster_manager_types.png deleted file mode 100644 index e04688f..0000000 Binary files a/data-analyst/pyspark/assets/cluster_manager_types.png and /dev/null differ diff --git a/data-analyst/pyspark/assets/creating_RDD_in_PySpark.png b/data-analyst/pyspark/assets/creating_RDD_in_PySpark.png deleted file mode 100644 index 44832a3..0000000 Binary files a/data-analyst/pyspark/assets/creating_RDD_in_PySpark.png and /dev/null differ diff --git a/data-analyst/pyspark/assets/pyspark.png b/data-analyst/pyspark/assets/pyspark.png deleted file mode 100644 index d1819aa..0000000 Binary files a/data-analyst/pyspark/assets/pyspark.png and /dev/null differ diff --git a/data-science/python/README.md b/data-analyst/python/README.md similarity index 100% rename from data-science/python/README.md rename to data-analyst/python/README.md diff --git a/backend/python/assets/Hierarchical_Inheritance.jpg b/data-analyst/python/assets/Hierarchical_Inheritance.jpg similarity index 100% rename from backend/python/assets/Hierarchical_Inheritance.jpg rename to data-analyst/python/assets/Hierarchical_Inheritance.jpg diff --git a/backend/python/assets/Memory_Management_in_Python.jpg b/data-analyst/python/assets/Memory_Management_in_Python.jpg similarity index 100% rename from backend/python/assets/Memory_Management_in_Python.jpg rename to data-analyst/python/assets/Memory_Management_in_Python.jpg diff --git a/backend/python/assets/Multi-level_Inheritance.jpg b/data-analyst/python/assets/Multi-level_Inheritance.jpg similarity index 100% rename from backend/python/assets/Multi-level_Inheritance.jpg rename to data-analyst/python/assets/Multi-level_Inheritance.jpg diff --git a/backend/python/assets/Multiple_Inheritance.jpg b/data-analyst/python/assets/Multiple_Inheritance.jpg similarity index 100% rename from backend/python/assets/Multiple_Inheritance.jpg rename to data-analyst/python/assets/Multiple_Inheritance.jpg diff --git a/backend/python/assets/Pickle_Module.jpg b/data-analyst/python/assets/Pickle_Module.jpg similarity index 100% rename from backend/python/assets/Pickle_Module.jpg rename to data-analyst/python/assets/Pickle_Module.jpg diff --git a/backend/python/assets/Python_namespaces.jpg b/data-analyst/python/assets/Python_namespaces.jpg similarity index 100% rename from backend/python/assets/Python_namespaces.jpg rename to data-analyst/python/assets/Python_namespaces.jpg diff --git a/backend/python/assets/Single_Inheritance.jpg b/data-analyst/python/assets/Single_Inheritance.jpg similarity index 100% rename from backend/python/assets/Single_Inheritance.jpg rename to data-analyst/python/assets/Single_Inheritance.jpg diff --git a/backend/python/assets/delete_rowcolumn_from_dataframe.jpg b/data-analyst/python/assets/delete_rowcolumn_from_dataframe.jpg similarity index 100% rename from backend/python/assets/delete_rowcolumn_from_dataframe.jpg rename to data-analyst/python/assets/delete_rowcolumn_from_dataframe.jpg diff --git a/backend/python/assets/differences_between_pickling_and_unpickling.jpg b/data-analyst/python/assets/differences_between_pickling_and_unpickling.jpg similarity index 100% rename from backend/python/assets/differences_between_pickling_and_unpickling.jpg rename to data-analyst/python/assets/differences_between_pickling_and_unpickling.jpg diff --git a/backend/python/assets/dynamically_typed_language.jpg b/data-analyst/python/assets/dynamically_typed_language.jpg similarity index 100% rename from backend/python/assets/dynamically_typed_language.jpg rename to data-analyst/python/assets/dynamically_typed_language.jpg diff --git a/backend/python/assets/get_the_items_that_are_not_common_to_both_the_given_series_A_and_B.jpg b/data-analyst/python/assets/get_the_items_that_are_not_common_to_both_the_given_series_A_and_B.jpg similarity index 100% rename from backend/python/assets/get_the_items_that_are_not_common_to_both_the_given_series_A_and_B.jpg rename to data-analyst/python/assets/get_the_items_that_are_not_common_to_both_the_given_series_A_and_B.jpg diff --git a/backend/python/assets/python.png b/data-analyst/python/assets/python.png similarity index 100% rename from backend/python/assets/python.png rename to data-analyst/python/assets/python.png diff --git a/backend/python/assets/uses_of_numpy.jpg b/data-analyst/python/assets/uses_of_numpy.jpg similarity index 100% rename from backend/python/assets/uses_of_numpy.jpg rename to data-analyst/python/assets/uses_of_numpy.jpg diff --git a/data-science/python/coding/anagram-detection.py b/data-analyst/python/coding/anagram-detection.py similarity index 100% rename from data-science/python/coding/anagram-detection.py rename to data-analyst/python/coding/anagram-detection.py diff --git a/data-science/python/coding/array-pair-sum.py b/data-analyst/python/coding/array-pair-sum.py similarity index 100% rename from data-science/python/coding/array-pair-sum.py rename to data-analyst/python/coding/array-pair-sum.py diff --git a/data-science/python/coding/balanced-brackets.py b/data-analyst/python/coding/balanced-brackets.py similarity index 100% rename from data-science/python/coding/balanced-brackets.py rename to data-analyst/python/coding/balanced-brackets.py diff --git a/data-science/python/coding/bubble-sort.py b/data-analyst/python/coding/bubble-sort.py similarity index 100% rename from data-science/python/coding/bubble-sort.py rename to data-analyst/python/coding/bubble-sort.py diff --git a/data-science/python/coding/closetsum.py b/data-analyst/python/coding/closetsum.py similarity index 100% rename from data-science/python/coding/closetsum.py rename to data-analyst/python/coding/closetsum.py diff --git a/data-science/python/coding/convert-array.py b/data-analyst/python/coding/convert-array.py similarity index 100% rename from data-science/python/coding/convert-array.py rename to data-analyst/python/coding/convert-array.py diff --git a/data-science/python/coding/csv-parsing.py b/data-analyst/python/coding/csv-parsing.py similarity index 100% rename from data-science/python/coding/csv-parsing.py rename to data-analyst/python/coding/csv-parsing.py diff --git a/data-science/python/coding/even-occuring-element.py b/data-analyst/python/coding/even-occuring-element.py similarity index 100% rename from data-science/python/coding/even-occuring-element.py rename to data-analyst/python/coding/even-occuring-element.py diff --git a/data-science/python/coding/factorial.py b/data-analyst/python/coding/factorial.py similarity index 100% rename from data-science/python/coding/factorial.py rename to data-analyst/python/coding/factorial.py diff --git a/data-science/python/coding/fibonacci.py b/data-analyst/python/coding/fibonacci.py similarity index 100% rename from data-science/python/coding/fibonacci.py rename to data-analyst/python/coding/fibonacci.py diff --git a/data-science/python/coding/find-missing-element.py b/data-analyst/python/coding/find-missing-element.py similarity index 100% rename from data-science/python/coding/find-missing-element.py rename to data-analyst/python/coding/find-missing-element.py diff --git a/data-science/python/coding/first-non-repeated-character.py b/data-analyst/python/coding/first-non-repeated-character.py similarity index 100% rename from data-science/python/coding/first-non-repeated-character.py rename to data-analyst/python/coding/first-non-repeated-character.py diff --git a/data-science/python/coding/flatten-array.py b/data-analyst/python/coding/flatten-array.py similarity index 100% rename from data-science/python/coding/flatten-array.py rename to data-analyst/python/coding/flatten-array.py diff --git a/data-science/python/coding/largest-continuous-sum.py b/data-analyst/python/coding/largest-continuous-sum.py similarity index 100% rename from data-science/python/coding/largest-continuous-sum.py rename to data-analyst/python/coding/largest-continuous-sum.py diff --git a/data-science/python/coding/multiples-of-3-and-5.py b/data-analyst/python/coding/multiples-of-3-and-5.py similarity index 100% rename from data-science/python/coding/multiples-of-3-and-5.py rename to data-analyst/python/coding/multiples-of-3-and-5.py diff --git a/data-science/python/coding/once.py b/data-analyst/python/coding/once.py similarity index 100% rename from data-science/python/coding/once.py rename to data-analyst/python/coding/once.py diff --git a/data-science/python/coding/prime-number.py b/data-analyst/python/coding/prime-number.py similarity index 100% rename from data-science/python/coding/prime-number.py rename to data-analyst/python/coding/prime-number.py diff --git a/data-science/python/coding/quick-sort.py b/data-analyst/python/coding/quick-sort.py similarity index 100% rename from data-science/python/coding/quick-sort.py rename to data-analyst/python/coding/quick-sort.py diff --git a/data-science/python/coding/shortest-fizz-buzz.py b/data-analyst/python/coding/shortest-fizz-buzz.py similarity index 100% rename from data-science/python/coding/shortest-fizz-buzz.py rename to data-analyst/python/coding/shortest-fizz-buzz.py diff --git a/data-science/python/coding/string-permutations.py b/data-analyst/python/coding/string-permutations.py similarity index 100% rename from data-science/python/coding/string-permutations.py rename to data-analyst/python/coding/string-permutations.py diff --git a/data-science/python/coding/sum-of-array-plus-one.py b/data-analyst/python/coding/sum-of-array-plus-one.py similarity index 100% rename from data-science/python/coding/sum-of-array-plus-one.py rename to data-analyst/python/coding/sum-of-array-plus-one.py diff --git a/data-science/python/coding/tree-level-order-print.py b/data-analyst/python/coding/tree-level-order-print.py similarity index 100% rename from data-science/python/coding/tree-level-order-print.py rename to data-analyst/python/coding/tree-level-order-print.py diff --git a/data-science/python/assets/Hierarchical_Inheritance.jpg b/data-science/python/assets/Hierarchical_Inheritance.jpg deleted file mode 100644 index 6dc4824..0000000 Binary files a/data-science/python/assets/Hierarchical_Inheritance.jpg and /dev/null differ diff --git a/data-science/python/assets/Memory_Management_in_Python.jpg b/data-science/python/assets/Memory_Management_in_Python.jpg deleted file mode 100644 index 133c28b..0000000 Binary files a/data-science/python/assets/Memory_Management_in_Python.jpg and /dev/null differ diff --git a/data-science/python/assets/Multi-level_Inheritance.jpg b/data-science/python/assets/Multi-level_Inheritance.jpg deleted file mode 100644 index b266eda..0000000 Binary files a/data-science/python/assets/Multi-level_Inheritance.jpg and /dev/null differ diff --git a/data-science/python/assets/Multiple_Inheritance.jpg b/data-science/python/assets/Multiple_Inheritance.jpg deleted file mode 100644 index 535e548..0000000 Binary files a/data-science/python/assets/Multiple_Inheritance.jpg and /dev/null differ diff --git a/data-science/python/assets/Pickle_Module.jpg b/data-science/python/assets/Pickle_Module.jpg deleted file mode 100644 index a8a6ee5..0000000 Binary files a/data-science/python/assets/Pickle_Module.jpg and /dev/null differ diff --git a/data-science/python/assets/Python_namespaces.jpg b/data-science/python/assets/Python_namespaces.jpg deleted file mode 100644 index 02d82db..0000000 Binary files a/data-science/python/assets/Python_namespaces.jpg and /dev/null differ diff --git a/data-science/python/assets/Single_Inheritance.jpg b/data-science/python/assets/Single_Inheritance.jpg deleted file mode 100644 index d627ebe..0000000 Binary files a/data-science/python/assets/Single_Inheritance.jpg and /dev/null differ diff --git a/data-science/python/assets/delete_rowcolumn_from_dataframe.jpg b/data-science/python/assets/delete_rowcolumn_from_dataframe.jpg deleted file mode 100644 index 8145115..0000000 Binary files a/data-science/python/assets/delete_rowcolumn_from_dataframe.jpg and /dev/null differ diff --git a/data-science/python/assets/differences_between_pickling_and_unpickling.jpg b/data-science/python/assets/differences_between_pickling_and_unpickling.jpg deleted file mode 100644 index b126c95..0000000 Binary files a/data-science/python/assets/differences_between_pickling_and_unpickling.jpg and /dev/null differ diff --git a/data-science/python/assets/dynamically_typed_language.jpg b/data-science/python/assets/dynamically_typed_language.jpg deleted file mode 100644 index 5f005af..0000000 Binary files a/data-science/python/assets/dynamically_typed_language.jpg and /dev/null differ diff --git a/data-science/python/assets/get_the_items_that_are_not_common_to_both_the_given_series_A_and_B.jpg b/data-science/python/assets/get_the_items_that_are_not_common_to_both_the_given_series_A_and_B.jpg deleted file mode 100644 index f0a9dd8..0000000 Binary files a/data-science/python/assets/get_the_items_that_are_not_common_to_both_the_given_series_A_and_B.jpg and /dev/null differ diff --git a/data-science/python/assets/python.png b/data-science/python/assets/python.png deleted file mode 100644 index 36cf4f8..0000000 Binary files a/data-science/python/assets/python.png and /dev/null differ diff --git a/data-science/python/assets/uses_of_numpy.jpg b/data-science/python/assets/uses_of_numpy.jpg deleted file mode 100644 index 7a6794f..0000000 Binary files a/data-science/python/assets/uses_of_numpy.jpg and /dev/null differ diff --git a/database/mysql/assets/Artboard_28.png b/database/mysql/assets/Artboard_28.png deleted file mode 100644 index 1065d27..0000000 Binary files a/database/mysql/assets/Artboard_28.png and /dev/null differ diff --git a/devops/golang/README.md b/devops/golang/README.md index 9128750..af4de30 100644 --- a/devops/golang/README.md +++ b/devops/golang/README.md @@ -402,4 +402,109 @@ channel_name <- element ```go channel_name <- element +``` + +## Câu hỏi phỏng vấn Golang cho Experienced + +### 17. Giải thích đoạn code bên dưới? + +```go +type DemoStruct struct { + Val int +} +//A. +func demo_func() DemoStruct { + return DemoStruct{Val: 1} +} +//B. +func demo_func() *DemoStruct { + return &DemoStruct{} +} +//C. +func demo_func(s *DemoStruct) { + s.Val = 1 +} +``` + +A - Vì hàm có kiểu trả về là struct, nên hàm sẽ trả về bản sao của struct với giá trị là 1. +B - Vì hàm trả về `*DemoStruct`, là một tham chiếu đến struct, nó trả về con trỏ đến giá trị struct được tạo trong hàm. +C - Vì hàm mong đợi đối tượng struct hiện có là một tham số trong hàm, và ta đặt giá trị cho thuộc tính của nó, khi kết thúc quá trình thực hiện, giá trị của biến `Val` của đối tượng struct được đặt thành 1. + +### 18. Định dạng chuỗi mà không in nó? + +Ta có thể dùng hàm Sprintf như sau: + +```go +return fmt.Sprintf ("Size: %d MB.", 50) +``` + +Hàm định dạng `fmt.Sprintf` mà không in nó ra. + +### 19. Type Assertion trong Go là gì? + +Type assertion nhận giá trị interface và truy xuất giá trị của kiểu dữ liệu được chỉ định rõ ràng. Cú pháp: + +```go +t := i.(T) +``` + +Ở đây, câu lệnh khẳng định rằng giá trị interface `i` có kiểu cụ thể là `T` và gán giá trị của kiểu `T` cho biến `t`. Trong trường hợp không có kiểu cụ thể `T`, thì câu lệnh sẽ dẫn đến panic. + +Để kiểm tra, nếu một interface có kiểu cụ thể, chúng ta có thể thực hiện bằng cách sử dụng hai giá trị được trả về bởi xác nhận kiểu. Một giá trị là giá trị cơ bản và giá trị kia là giá trị bool cho biết xác nhận đã hoàn thành hay chưa. Cú pháp sẽ là: + +```go +t, isSuccess := i.(T) +``` + +Ở đây, nếu giá trị interface `i` có `T`, thì giá trị cơ bản sẽ được gán cho `t` và giá trị `isSuccess` trở thành true. Ngược lại, câu lệnh `isSuccess` sẽ false và giá trị của t sẽ có giá trị 0 tương ứng với kiểu T. Điều này đảm bảo không có panic nếu khẳng định không thành công. + +### 20. Kiểm tra kiểu của biến khi đang chạy? + +Trong Go, chúng ta có thể sử dụng một kiểu switch đặc biệt để kiểm tra kiểu biến khi đang chạy. Câu lệnh switch này được gọi là **type switch**. + +Hãy xem xét đoạn code sau, nơi chúng ta đang kiểm tra kiểu của biến v và thực hiện một số thao tác. + +```go +switch v := param.(type) { +default: + fmt.Printf("Unexpected type %T", v) +case uint64: + fmt.Println("Integer type") +case string: + fmt.Println("String type") +} +``` + +Trong đoạn code trên, chúng ta đang kiểm tra kiểu của biến v, nếu kiểu của biến là uint64, thì đoạn code sẽ in ""Integer type". Nếu kiểu của biến là một chuỗi, cpde sẽ in ra "String type". Nếu kiểu không khớp, default sẽ được thực thi và nó chạy các câu lệnh trong khối default. + +### 21. Có nên sử dụng biến toàn cục trong các chương trình triển khai goroutines? + +Việc sử dụng các biến toàn cục trong goroutines không được khuyến khích vì nó có thể được nhiều goroutines truy cập và sửa đổi đồng thời. Điều này có thể dẫn đến kết quả ngoài dự tính. + +### 22. Cách sử dụng một empty struct? + +Empty struct được dùng khi ta muốn tiết kiệm bộ nhớ. Điều này là do chúng không sử dụng bất kỳ bộ nhớ nào cho các giá trị. Cú pháp là: + +```go +a := struct{}{} +``` + +Kích thước của empty struct là 0 khi sử dụng `println(unsafe.Sizeof(a))`. + +Lợi ích của empty struct là cho các nhà phát triển thấy rằng chúng không có bất kỳ giá trị nào. Mục đích là thông tin thuần tuý. Một số ví dụ trong đó empty struct rất hữu ích như sau: + +- **Khi triển khai tập dữ liệu:** ta có thể dùng empty struct để triển khai một tập dữ liệu. + +```go +map_obj := make(map[string]struct{}) +for _, value := range []string{"interviewbit", "golang", "questions"} { + map_obj[value] = struct{}{} +} +fmt.Println(map_obj) +``` + +Kết quả: + +``` +map[interviewbit:{} golang:{} questions:{}] ``` \ No newline at end of file diff --git a/frontend/typescript/README.md b/frontend/typescript/README.md index 0e06426..41c3b94 100644 --- a/frontend/typescript/README.md +++ b/frontend/typescript/README.md @@ -543,3 +543,26 @@ window.onmousedown = function (e) { ### 27. noImplicitAny là gì? +### 28. Interface là gì? + +Interface trong typescript cho phép bạn định nghĩ thuộc tính là gì và phương thức là gì mà đối tượng cần để được thực thi (implement). Nếu đối tượng tuân thủ đúng khuôn mẫu interface thì đối tượng đã implement interface ấy sẽ được thi hành đúng. Nếu interface không được thi hành đúng đắn thì typescript sẽ phát sinh lỗi ngay lập tức. + +```ts +interface Employee { + name: string; + salary: number; +} + +function process(employee: Employee) { + console.log(`${employee.name}'s salary = ${employee.salary}`); +} + +let john: Employee = { + name: "John Doe", + salary: 150000 +} + +process(john); // "John Doe's salary = 150000" +``` + +### \ No newline at end of file diff --git a/ib_logo.svg b/ib_logo.svg deleted file mode 100644 index 483c684..0000000 --- a/ib_logo.svg +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/microservices/kafka/assets/Kafka.jpg b/microservices/kafka/assets/Kafka.jpg deleted file mode 100644 index bd188db..0000000 Binary files a/microservices/kafka/assets/Kafka.jpg and /dev/null differ diff --git a/microservices/kafka/assets/Kafka_Features.jpg b/microservices/kafka/assets/Kafka_Features.jpg deleted file mode 100644 index 8532709..0000000 Binary files a/microservices/kafka/assets/Kafka_Features.jpg and /dev/null differ diff --git a/microservices/kafka/assets/Kafka_MirrorMaker.jpg b/microservices/kafka/assets/Kafka_MirrorMaker.jpg deleted file mode 100644 index 8ec0e04..0000000 Binary files a/microservices/kafka/assets/Kafka_MirrorMaker.jpg and /dev/null differ diff --git a/microservices/kafka/assets/Kafka_Performance_Tuning.jpg b/microservices/kafka/assets/Kafka_Performance_Tuning.jpg deleted file mode 100644 index 8756d89..0000000 Binary files a/microservices/kafka/assets/Kafka_Performance_Tuning.jpg and /dev/null differ diff --git a/microservices/kafka/assets/Kafka_Security.jpg b/microservices/kafka/assets/Kafka_Security.jpg deleted file mode 100644 index 627687f..0000000 Binary files a/microservices/kafka/assets/Kafka_Security.jpg and /dev/null differ diff --git a/microservices/kafka/assets/Kafka_partition_key.jpg b/microservices/kafka/assets/Kafka_partition_key.jpg deleted file mode 100644 index a145eba..0000000 Binary files a/microservices/kafka/assets/Kafka_partition_key.jpg and /dev/null differ diff --git a/microservices/kafka/assets/Kafka_schema_registry.jpg b/microservices/kafka/assets/Kafka_schema_registry.jpg deleted file mode 100644 index d0fc207..0000000 Binary files a/microservices/kafka/assets/Kafka_schema_registry.jpg and /dev/null differ diff --git a/microservices/kafka/assets/Kafka_streams_vs_Spark_Streaming.jpg b/microservices/kafka/assets/Kafka_streams_vs_Spark_Streaming.jpg deleted file mode 100644 index daff08d..0000000 Binary files a/microservices/kafka/assets/Kafka_streams_vs_Spark_Streaming.jpg and /dev/null differ diff --git a/microservices/kafka/assets/Kafka_use_cases.jpg b/microservices/kafka/assets/Kafka_use_cases.jpg deleted file mode 100644 index b4a0dc8..0000000 Binary files a/microservices/kafka/assets/Kafka_use_cases.jpg and /dev/null differ diff --git a/microservices/kafka/assets/Leader_Skew-1.jpg b/microservices/kafka/assets/Leader_Skew-1.jpg deleted file mode 100644 index 0099c66..0000000 Binary files a/microservices/kafka/assets/Leader_Skew-1.jpg and /dev/null differ diff --git a/microservices/kafka/assets/Leader_Skew-2.jpg b/microservices/kafka/assets/Leader_Skew-2.jpg deleted file mode 100644 index 2446237..0000000 Binary files a/microservices/kafka/assets/Leader_Skew-2.jpg and /dev/null differ diff --git a/microservices/kafka/assets/Leader_Skew-3.jpg b/microservices/kafka/assets/Leader_Skew-3.jpg deleted file mode 100644 index 5a81d1e..0000000 Binary files a/microservices/kafka/assets/Leader_Skew-3.jpg and /dev/null differ diff --git a/microservices/kafka/assets/Leader_Skew-4.jpg b/microservices/kafka/assets/Leader_Skew-4.jpg deleted file mode 100644 index aba48b4..0000000 Binary files a/microservices/kafka/assets/Leader_Skew-4.jpg and /dev/null differ diff --git a/microservices/kafka/assets/Leader_and_Follower_in_Kafka.jpg b/microservices/kafka/assets/Leader_and_Follower_in_Kafka.jpg deleted file mode 100644 index 465e82b..0000000 Binary files a/microservices/kafka/assets/Leader_and_Follower_in_Kafka.jpg and /dev/null differ diff --git a/microservices/kafka/assets/Message_Queueing.jpg b/microservices/kafka/assets/Message_Queueing.jpg deleted file mode 100644 index 5c6bdce..0000000 Binary files a/microservices/kafka/assets/Message_Queueing.jpg and /dev/null differ diff --git a/microservices/kafka/assets/Multi-tenancy.jpg b/microservices/kafka/assets/Multi-tenancy.jpg deleted file mode 100644 index 11d5030..0000000 Binary files a/microservices/kafka/assets/Multi-tenancy.jpg and /dev/null differ diff --git a/microservices/kafka/assets/Publisher_-_Subscriber_Model.jpg b/microservices/kafka/assets/Publisher_-_Subscriber_Model.jpg deleted file mode 100644 index d736115..0000000 Binary files a/microservices/kafka/assets/Publisher_-_Subscriber_Model.jpg and /dev/null differ diff --git a/microservices/kafka/assets/Rabbitmq_and_Kafka.jpg b/microservices/kafka/assets/Rabbitmq_and_Kafka.jpg deleted file mode 100644 index 3fa6011..0000000 Binary files a/microservices/kafka/assets/Rabbitmq_and_Kafka.jpg and /dev/null differ diff --git a/microservices/kafka/assets/Topic_Replication_important_in_Kafka.jpg b/microservices/kafka/assets/Topic_Replication_important_in_Kafka.jpg deleted file mode 100644 index f28e255..0000000 Binary files a/microservices/kafka/assets/Topic_Replication_important_in_Kafka.jpg and /dev/null differ diff --git a/microservices/kafka/assets/consumer_group_in_Kafka.jpg b/microservices/kafka/assets/consumer_group_in_Kafka.jpg deleted file mode 100644 index 41f30fd..0000000 Binary files a/microservices/kafka/assets/consumer_group_in_Kafka.jpg and /dev/null differ diff --git a/microservices/kafka/assets/core_API_architecture.jpg b/microservices/kafka/assets/core_API_architecture.jpg deleted file mode 100644 index 039eb8f..0000000 Binary files a/microservices/kafka/assets/core_API_architecture.jpg and /dev/null differ diff --git a/microservices/kafka/assets/jms-vs-kafka.jpg b/microservices/kafka/assets/jms-vs-kafka.jpg deleted file mode 100644 index 5cd88d9..0000000 Binary files a/microservices/kafka/assets/jms-vs-kafka.jpg and /dev/null differ diff --git a/microservices/kafka/assets/kafka-vs-flume.jpg b/microservices/kafka/assets/kafka-vs-flume.jpg deleted file mode 100644 index 21c12d6..0000000 Binary files a/microservices/kafka/assets/kafka-vs-flume.jpg and /dev/null differ diff --git a/microservices/kafka/assets/kafka_architecture.jpg b/microservices/kafka/assets/kafka_architecture.jpg deleted file mode 100644 index e4326a8..0000000 Binary files a/microservices/kafka/assets/kafka_architecture.jpg and /dev/null differ diff --git a/microservices/kafka/assets/log_compaction_in_Kafka.jpg b/microservices/kafka/assets/log_compaction_in_Kafka.jpg deleted file mode 100644 index d21da13..0000000 Binary files a/microservices/kafka/assets/log_compaction_in_Kafka.jpg and /dev/null differ diff --git a/microservices/kafka/assets/message_compression_in_Kafka.jpg b/microservices/kafka/assets/message_compression_in_Kafka.jpg deleted file mode 100644 index e57e7e0..0000000 Binary files a/microservices/kafka/assets/message_compression_in_Kafka.jpg and /dev/null differ diff --git a/microservices/kafka/assets/quotas_in_Kafka.jpg b/microservices/kafka/assets/quotas_in_Kafka.jpg deleted file mode 100644 index 902f8d0..0000000 Binary files a/microservices/kafka/assets/quotas_in_Kafka.jpg and /dev/null differ diff --git a/microservices/kafka/assets/redis-vs-kafka.jpg b/microservices/kafka/assets/redis-vs-kafka.jpg deleted file mode 100644 index 3818dba..0000000 Binary files a/microservices/kafka/assets/redis-vs-kafka.jpg and /dev/null differ diff --git a/microservices/kafka/assets/role_of_zookeeper_in_kafka.jpg b/microservices/kafka/assets/role_of_zookeeper_in_kafka.jpg deleted file mode 100644 index 2db8c37..0000000 Binary files a/microservices/kafka/assets/role_of_zookeeper_in_kafka.jpg and /dev/null differ diff --git a/microservices/kafka/assets/types_of_Znodes.jpg b/microservices/kafka/assets/types_of_Znodes.jpg deleted file mode 100644 index 3c23d4a..0000000 Binary files a/microservices/kafka/assets/types_of_Znodes.jpg and /dev/null differ diff --git a/mobile/ios/assets/ios.jpg b/mobile/ios/assets/ios.jpg new file mode 100644 index 0000000..0043692 Binary files /dev/null and b/mobile/ios/assets/ios.jpg differ diff --git a/mobile/react native/README.md b/mobile/react-native/README.md similarity index 100% rename from mobile/react native/README.md rename to mobile/react-native/README.md diff --git a/mobile/react native/assets/IOS_Platform.png b/mobile/react-native/assets/IOS_Platform.png similarity index 100% rename from mobile/react native/assets/IOS_Platform.png rename to mobile/react-native/assets/IOS_Platform.png diff --git a/mobile/react native/assets/Image-11.png b/mobile/react-native/assets/Image-11.png similarity index 100% rename from mobile/react native/assets/Image-11.png rename to mobile/react-native/assets/Image-11.png diff --git a/mobile/react native/assets/Image-12.png b/mobile/react-native/assets/Image-12.png similarity index 100% rename from mobile/react native/assets/Image-12.png rename to mobile/react-native/assets/Image-12.png diff --git a/mobile/react native/assets/Image-2.png b/mobile/react-native/assets/Image-2.png similarity index 100% rename from mobile/react native/assets/Image-2.png rename to mobile/react-native/assets/Image-2.png diff --git a/mobile/react native/assets/Props_Drilling.png b/mobile/react-native/assets/Props_Drilling.png similarity index 100% rename from mobile/react native/assets/Props_Drilling.png rename to mobile/react-native/assets/Props_Drilling.png diff --git a/mobile/react native/assets/SSL_Pinning.png b/mobile/react-native/assets/SSL_Pinning.png similarity index 100% rename from mobile/react native/assets/SSL_Pinning.png rename to mobile/react-native/assets/SSL_Pinning.png diff --git a/mobile/react native/assets/android_platform.png b/mobile/react-native/assets/android_platform.png similarity index 100% rename from mobile/react native/assets/android_platform.png rename to mobile/react-native/assets/android_platform.png diff --git a/mobile/react native/assets/bridge_in_react_native.png b/mobile/react-native/assets/bridge_in_react_native.png similarity index 100% rename from mobile/react native/assets/bridge_in_react_native.png rename to mobile/react-native/assets/bridge_in_react_native.png diff --git a/mobile/react native/assets/developer-menu.png b/mobile/react-native/assets/developer-menu.png similarity index 100% rename from mobile/react native/assets/developer-menu.png rename to mobile/react-native/assets/developer-menu.png diff --git a/mobile/react native/assets/react-native-redux.png b/mobile/react-native/assets/react-native-redux.png similarity index 100% rename from mobile/react native/assets/react-native-redux.png rename to mobile/react-native/assets/react-native-redux.png diff --git a/mobile/react-native/assets/react-native.jpg b/mobile/react-native/assets/react-native.jpg new file mode 100644 index 0000000..c1904ac Binary files /dev/null and b/mobile/react-native/assets/react-native.jpg differ diff --git a/mobile/react native/assets/reactjs_vs_react_native.png b/mobile/react-native/assets/reactjs_vs_react_native.png similarity index 100% rename from mobile/react native/assets/reactjs_vs_react_native.png rename to mobile/react-native/assets/reactjs_vs_react_native.png diff --git a/advanced/agile/README.md b/skill/agile/README.md similarity index 100% rename from advanced/agile/README.md rename to skill/agile/README.md diff --git a/advanced/agile/assets/Agile_Approach.jpg b/skill/agile/assets/Agile_Approach.jpg similarity index 100% rename from advanced/agile/assets/Agile_Approach.jpg rename to skill/agile/assets/Agile_Approach.jpg diff --git a/advanced/agile/assets/Agile_Development_Methodology.jpg b/skill/agile/assets/Agile_Development_Methodology.jpg similarity index 100% rename from advanced/agile/assets/Agile_Development_Methodology.jpg rename to skill/agile/assets/Agile_Development_Methodology.jpg diff --git a/advanced/agile/assets/Agile_Questions-03.jpg b/skill/agile/assets/Agile_Questions-03.jpg similarity index 100% rename from advanced/agile/assets/Agile_Questions-03.jpg rename to skill/agile/assets/Agile_Questions-03.jpg diff --git a/advanced/agile/assets/Agile_testing_Strategy.jpg b/skill/agile/assets/Agile_testing_Strategy.jpg similarity index 100% rename from advanced/agile/assets/Agile_testing_Strategy.jpg rename to skill/agile/assets/Agile_testing_Strategy.jpg diff --git a/advanced/agile/assets/Agile_velocity.jpg b/skill/agile/assets/Agile_velocity.jpg similarity index 100% rename from advanced/agile/assets/Agile_velocity.jpg rename to skill/agile/assets/Agile_velocity.jpg diff --git a/advanced/agile/assets/Refactoring_in_Agile.jpg b/skill/agile/assets/Refactoring_in_Agile.jpg similarity index 100% rename from advanced/agile/assets/Refactoring_in_Agile.jpg rename to skill/agile/assets/Refactoring_in_Agile.jpg diff --git a/advanced/agile/assets/SOS.jpg b/skill/agile/assets/SOS.jpg similarity index 100% rename from advanced/agile/assets/SOS.jpg rename to skill/agile/assets/SOS.jpg diff --git a/advanced/agile/assets/Scrum_Artifacts.jpg b/skill/agile/assets/Scrum_Artifacts.jpg similarity index 100% rename from advanced/agile/assets/Scrum_Artifacts.jpg rename to skill/agile/assets/Scrum_Artifacts.jpg diff --git a/advanced/agile/assets/Scrum_Master.jpg b/skill/agile/assets/Scrum_Master.jpg similarity index 100% rename from advanced/agile/assets/Scrum_Master.jpg rename to skill/agile/assets/Scrum_Master.jpg diff --git a/advanced/agile/assets/Scrum_roles.jpg b/skill/agile/assets/Scrum_roles.jpg similarity index 100% rename from advanced/agile/assets/Scrum_roles.jpg rename to skill/agile/assets/Scrum_roles.jpg diff --git a/advanced/agile/assets/Traditional_Approach.jpg b/skill/agile/assets/Traditional_Approach.jpg similarity index 100% rename from advanced/agile/assets/Traditional_Approach.jpg rename to skill/agile/assets/Traditional_Approach.jpg diff --git a/advanced/agile/assets/pair_programming.jpg b/skill/agile/assets/pair_programming.jpg similarity index 100% rename from advanced/agile/assets/pair_programming.jpg rename to skill/agile/assets/pair_programming.jpg diff --git a/advanced/agile/assets/sprint_retrospective_meeting.jpg b/skill/agile/assets/sprint_retrospective_meeting.jpg similarity index 100% rename from advanced/agile/assets/sprint_retrospective_meeting.jpg rename to skill/agile/assets/sprint_retrospective_meeting.jpg diff --git a/advanced/agile/assets/sprint_review_meeting.jpg b/skill/agile/assets/sprint_review_meeting.jpg similarity index 100% rename from advanced/agile/assets/sprint_review_meeting.jpg rename to skill/agile/assets/sprint_review_meeting.jpg diff --git a/advanced/agile/assets/sprint_vs_product_backlog.jpg b/skill/agile/assets/sprint_vs_product_backlog.jpg similarity index 100% rename from advanced/agile/assets/sprint_vs_product_backlog.jpg rename to skill/agile/assets/sprint_vs_product_backlog.jpg diff --git a/advanced/agile/assets/timeboxing_in_scrum.jpg b/skill/agile/assets/timeboxing_in_scrum.jpg similarity index 100% rename from advanced/agile/assets/timeboxing_in_scrum.jpg rename to skill/agile/assets/timeboxing_in_scrum.jpg diff --git a/backend/aws/assets/AWS_Cloudwatch.jpg b/skill/aws/assets/AWS_Cloudwatch.jpg similarity index 100% rename from backend/aws/assets/AWS_Cloudwatch.jpg rename to skill/aws/assets/AWS_Cloudwatch.jpg diff --git a/backend/aws/assets/AWS_Snowball.jpg b/skill/aws/assets/AWS_Snowball.jpg similarity index 100% rename from backend/aws/assets/AWS_Snowball.jpg rename to skill/aws/assets/AWS_Snowball.jpg diff --git a/backend/aws/assets/Amazon_Route.jpg b/skill/aws/assets/Amazon_Route.jpg similarity index 100% rename from backend/aws/assets/Amazon_Route.jpg rename to skill/aws/assets/Amazon_Route.jpg diff --git a/skill/git/assets/git-commands.png b/skill/git/assets/git-commands.png new file mode 100644 index 0000000..e7cc6bc Binary files /dev/null and b/skill/git/assets/git-commands.png differ diff --git a/skill/git/assets/git_index.png b/skill/git/assets/git_index.png new file mode 100644 index 0000000..41b821f Binary files /dev/null and b/skill/git/assets/git_index.png differ diff --git a/skill/git/assets/git_merge_conflict.png b/skill/git/assets/git_merge_conflict.png new file mode 100644 index 0000000..8515bdd Binary files /dev/null and b/skill/git/assets/git_merge_conflict.png differ diff --git a/skill/git/assets/git_repos.png b/skill/git/assets/git_repos.png new file mode 100644 index 0000000..3c091c9 Binary files /dev/null and b/skill/git/assets/git_repos.png differ