Posts

Showing posts from February, 2022

Active record (Eloquent) trong Laravel và Data Mapper (Doctrine) trong Symfony

 Khi tao tác với DB trong Laravel và Symfony, có thể bạn sẽ làm việc với Eloquent hoặc Doctrine. Vậy sự khác nhau là gì Active Record Doctrine class User extends Eloquent { } Như vậy active record là một object được kế thừa từ Eloquent use Doctrine \ ORM \ Mapping AS ORM ; /** * @ORM\Entity * @ORM\Table(name="users") */ class User { /** * @ORM\Id * @ORM\GeneratedValue * @ORM\Column(type="integer") */ private $id ; /** * @ORM\Column(type="string") */ private $name ; } Trong doctrine, data mapper thực chất là 1 PHP Opject đơn thuần    $user = User :: find ( 123 ) ; $user -> name = 'Philip Brown' ; $user -> save ( ) ; Khi thao tác với DB, các dùng active record khác trực quan và đơn giản vì bản thân class User được kế thừa từ Eloquen, nên bạn có thể thao tác trực tiếp với DB thông qua Class User Câu lệnh save ở trê...

CI/CD diagram, infra

Image
 Trong quá trình phỏng vấn, có thể các bạn sẽ gặp một số câu hỏi liên quan đến devops ví dụ như - Bạn deploy code trên hệ thống như thế nào? - Bạn có thể nói qua về infrastructure của dự án được không? ... Sau đây là diagram, các bạn có thể tham khảo  1 - Cluster config repo Đây là 1 repo nơi bạn chứa cấu hình tất cả thông tin liên quan đến infra, ví dụ DB server, db name, users,... Một thao tác đơn giản nhất là khi bạn muốn tạo 1 db mới, bạn chỉ cần vào Cluster config repo này ( ví dụ file  mysql-prod.yaml) thêm các cấu hình DB cần thiết, sau đó push file này lên. Việc còn lại sẽ có 1 software là Puppet làm 2 - Puppet Là 1 phần mềm dùng để provisioning cho infra của các bạn. Có thể hiểu nôm na phần mềm này sẽ set up cho bạn 1 infra dựa trên những cấu hình có được từ Cluster config 3 - Actor Người dùng Ví dụ khi người dùng truy cập trang abc.com, thì request này sẽ được route đến Load Balancer (Cân Bằng Tải) 4 - Load Balancer Cân bằng tải, tiếp nhận các request từ người d...

Preflight request

 Khái niệm này liên quan đến  CORS RESTFUL API OPTION METHOD Preflight request A CORS preflight request is a  CORS  request that checks to see if the CORS protocol is understood and a server is aware using specific methods and headers. It is an  OPTIONS  request, using three HTTP request headers:  Access-Control-Request-Method ,  Access-Control-Request-Headers , and the  Origin  header. A preflight request is automatically issued by a browser and in normal cases, front-end developers don't need to craft such requests themselves. It appears when request is qualified as  "to be preflighted"  and omitted for  simple requests . For example, a client might be asking a server if it would allow a  DELETE  request, before sending a  DELETE  request, by using a preflight request: OPTIONS /resource/foo Access-Control-Request-Method: DELETE Access-Control-Request-Headers: origin, x-requested-with Origin: https://f...

Trait trong PHP

 Trong PHP KHÔNG hỗ trợ multiple inheritance, vì vậy việc viết như sau là không khả thi class A extends class B, extends class C --> không được Tuy nhiên sẽ có nhiều trường hợp, từ class A, bạn muốn dùng các method của class B và class C. Vậy phải làm thế nào? Đó là lý do Trait ra đời. https://stackoverflow.com/questions/356128/can-i-extend-a-class-using-more-than-1-class-in-php  Có đề cập đến định nghĩa khá ngắn gọn và dễ hiểu về trait You could use traits, which, hopefully, will be available from PHP 5.4. Traits is a mechanism for code reuse in single inheritance languages such as PHP. A Trait is intended to reduce some limitations of single inheritance by enabling a developer to reuse sets of methods freely in several independent classes living in different class hierarchies. The semantics of the combination of Traits and classes is defined in a way, which reduces complexity and avoids the typical problems associated with multiple inheritance and Mixins. They are recogni...

Hackerank Beautiful arrangement - PHP

 Khi tham gia bài test code, các bạn có thể làm quen với Hackerrank, hoặc Leetcode,... Đây là các site để kiểm tra kỹ năng code liên quan đến thuật toán ( giải thuật - algorithm) Mình xin giới thiệu với các bạn, một bài test liên quan đến Mảng Đệ quy Swap Vòng lặp Các bạn có thể google với từ khóa : beautiful arrangement hackerrank.  Đầu bài như sau: - Cho số n, n là số nguyên dương >= 1 - Chọn 1 số n bất kỳ - Một mảng được gọi là 'Beautiful arrangement' nếu thỏa mãn điều kiện sau: ++ phần tử tại ví trí i chia hết cho i HOẶC ++ i chia hết cho phần tử tại ví trí i - Tìm số lần có thể sắp xếp được mảng thỏa mãn điều kiện trên Ví dụ Input: n = 2 Output: 2 Explanation: The first beautiful arrangement is [1,2]: - perm[1] = 1 is divisible by i = 1 - perm[2] = 2 is divisible by i = 2 The second beautiful arrangement is [2,1]: - perm[1] = 2 is divisible by i = 1 - i = 2 is divisible by perm[2] = 1

Các câu hỏi liên quan đến restful API

Image
  Một câu hỏi khá đơn giản trong quá trình phỏng vấn là 1- What is restful API với câu hỏi này bạn nên có 3 ý chính :  1.1 - Nó là 1 API (application program interface) 1.2 - Nó hoạt động dựa trên HTTP 1.3- Nó cung cấp các method để thao tác với dữ liệu gồm GET, POST, PUT, DELETE 2 - Khác nhau giữa PUT và Patch PUT : update if exist id, or create new Patch : Update if exist id or throw an exception 3 - Json standard in Restful API 3.1 Use nouns instead of verbs in endpoint paths 3.2 Use logical nesting on endpoints /articles /article/id/comments 3.4 -  Handle errors gracefully and return standard error codes Common error HTTP status codes include: 400 Bad Request – This means that client-side input fails validation. 401 Unauthorized – This means the user isn’t not authorized to access a resource. It usually returns when the user isn’t authenticated. 403 Forbidden – This means the user is authenticated, but it’s not allowed to access a resource. 404 Not Foun...

What are best practices to improve DB performance

Image
  Câu này thường hay gặp khi người phỏng vấn muốn biết về kiến thức cơ sở dữ liệu của bạn, kinh nghiệm thực tế khi muốn cơ sở dữ liệu hoạt động trơn tru và nhanh hơn. Sau đây là các keyword cần đề cập đến khi trả lời câu hỏi này https://www.eversql.com/5-easy-ways-to-improve-your-database-performance/ 1- Optimize Queries. Check lại query xem có refactor được không, đây là lý do thường gặp 2 - Create optimal indexes. Đánh index những trường cần 3 - Get a stronger CPU. 4 - Allocate more memory. Muốn nhanh hơn thì server phải khỏe hơn 5 - Data defragmentation. Phân mảnh dữ liệu, dịch là như vậy nhưng thực chất data defragmentation là tái sử dụng lại bộ nhớ (bộ nhớ này hiện đang trống do dữ liệu đã bị xóa) https://www.databasejournal.com/mysql/mysql-data-fragmentation-what-when-and-how/#:~:text=MySQL%20tables%2C%20including%20MyISAM%20and,read%20when%20scanning%20the%20table. 6 - Disk Types. Ổ SSD đọc ghi tốt hơn nên sẽ nhanh hơn 7 -Database version. Một số câu query khi chạy ở version...

Long pooling

 Mình sẽ giới thiệu loạt bài về các câu hỏi trong lĩnh vực lập trình web, đây là các khái niệm khá cơ bản và có thể sẽ bị hỏi khi phỏng vấn. Một số kỹ thuật có thể đã cũ, tuy nhiên vẫn được đề cập đến, ở đây là  Long pooling Đây là giải thích khá rõ ràng về nó Long polling  is essentially a more efficient form of the original polling technique. Making repeated requests to a server wastes resources, as each new incoming connection must be established, the HTTP headers must be parsed, a query for new data must be performed, and a response (usually with no new data to offer) must be generated and delivered. The connection must then be closed and any resources cleaned up. Rather than having to repeat this process multiple times for every client until new data for a given client becomes available, long polling is a technique where the server elects to hold a client’s connection open for as long as possible, delivering a response only after data becomes available or a timeout t...

Json Server trong React

Trong video này, các bạn sẽ làm quen với Json Server, một package rất hiệu quả khi các bạn muốn thao tác với backend, nhưng ko muốn tìm hiểu quá nhiều về backend. Json Server cho phép tạo ra các endpoint, dưới dạng Json, từ đó các bạn có thể thao tác tiếp từ phía client https://youtu.be/eao7ABGFUXs https://youtu.be/eao7ABGFUXs

Hiển thị một danh sách (List) trong React

 Trong video này các bạn sẽ biết được cách hiện thị một danh sách trong React dùng method map. method này cũng tương tự như foreach trong php, duyệt 1 mảng, thao tác từng phần tử trong mảng. https://www.youtube.com/watch?v=tHjxSVaj_wY

Tại sao lại là PHP

Image
 Một video rất hay và hữu ích cho các bạn muốn chọn một ngôn ngữ lập trình để bắt đầu, có rất nhiều lý do, nhưng lý do đơn giản nhất và cũng chính đáng nhất : - Dễ bắt đầu, dễ làm quen, và nhu cầu thị trường công việc PHP rất lớn :) https://www.youtube.com/watch?v=pWG7ajC_OVo&list=PL4cUxeGkcC9gksOX3Kd9KPo-O68ncT05o

React dev tool

 React dev tool.là một extension của trình duyệt, bạn có thể cài trên Chrome hoặc firefox. Video này hướng dẫn bạn sử dụng React dev tool để debug trong quá trình code React https://youtu.be/rb1GWqCJid4

Hook trong react

 Giới thiệu với các bạn 1 video rất chi tiết vfa dễ hiểu về hook, cách sử dụng hook trong react https://youtu.be/TNhaISOUy6Q

State trong React component

 Bài này là một kỹ thuật rất quan trọng, được dùng nhiều trong React. Các bạn có thể hiểu state là các biến (variable) mà giá trị của nó thay đổi. Bài này chúng ta cũng làm quen với useState hook, một method để gán giá trị, hoặc thay đổi giá trị cho biến trong một component https://youtu.be/4pO-HcG2igk

Xử lý sự kiện click - React click events

Trong bài này các bạn sẽ học được kỹ thuật xử lý sự kiện khi click. Cách truyền biến khi click  https://www.youtube.com/watch?v=0XSDAup85SA&t=9s

Add stylesheet

 Có hai cách để thêm stylesheet: 1- include file css với câu lệnh import 2- sử dụng inline css trực tiếp từ JSX với thuộc tính style=... Chi tiết hơn các bạn xem tại video bên dưới nha https://youtu.be/NbTrGcz4DW8

Multiple components

Image
 Trong bài học này chúng ta sẽ làm quen với khái niệm multiple components https://youtu.be/0sSYmRImgRY Như hình dưới là cấu trúc components tree, cây thư mục các thành phần gồm - Root component : thành phần chính, định nghĩa ở App.js - Navbar: navigation panel - BlogDetail: phần hiển thị chi tiết nội dung blog - Sidebar : gồm category và tag, phân chia bài viết theo hạng mục và đánh dấu

Sử dụng giá trị động (dynamic value) trong React

  Video này giúp bạn hiểu hơn cách hiển thị dynamic value( giá trị động) trong React thông qua ký tự curly braket ( dấu ngoặc cong {}) https://youtu.be/pnhO8UaCgxg

Bài viết bổ ích cho các bạn dev muốn khởi nghiệp

Tóm tắt 4 ý chính sau: 1- Start yesterday: làm ngay và luôn! Đừng trì hoãn 2-DO NOT try to learn new tech, do what you have : đừng cố gắng học công nghệ mới, làm những gì bạn biết và giỏi công nghệ đó để tiết kiệm thời gian 3-DO NOT over focus on engineering side, focus on product and marrketing, sale : đừng quan tâm quá mức đến yếu tố kỹ thuật, quan tâm đến sản phẩm, martketing và bán hàng 4-More developers is bad :  thêm quá nhiều lập trình viên không đồng nghĩa có thể tăng thêm productivity (năng suất)   https://youtu.be/Gxzy4vRqhBY