Mình nghĩ là về chỗ setTimeOut bạn nên giải thích thêm về cơ chế event loop, vì nếu lỡ như có bạn nào không biết về event loop thì sẽ có thể dẫn đến hiểu nhầm hoặc đơn giản là sử dụng nhưng không biết vì sao hàm setTimeOut lại chạy sau
@NPThao À à hiểu rồi. 🤣 khác đấy...
Khi e lưu đoạn code vào một file và chạy file đó, có một sự khác biệt trong cách Node.js xử lý Event Loop so với việc thực thi trực tiếp trên terminal.
Khi e chạy file JavaScript thông qua Node.js, quá trình xử lý sẽ diễn ra theo từng bước như sau:
Đọc và biên dịch toàn bộ nội dung của file JavaScript.
Thực thi các dòng code trong file JavaScript theo thứ tự từ trên xuống dưới.
Vì quá trình đọc và biên dịch file xảy ra trước khi bắt đầu thực thi, Node.js sẽ biết trước cách các hàm và các hàm callback được gọi trong đoạn code và sẽ xác định được thứ tự chính xác của chúng. Do đó, trong trường hợp này, thứ tự thực thi của các hàm setTimeout, setImmediate và process.nextTick sẽ được đảm bảo theo cách e định nghĩa trong đoạn code.
Tuy nhiên, khi thực thi trực tiếp trên terminal, Node.js không biết trước toàn bộ đoạn code và các hàm callback được gọi. Thay vào đó, nó thực thi lệnh trong đoạn code theo từng bước và quyết định thứ tự thực thi dựa trên các điều kiện tại thời điểm đó. Điều này dẫn đến việc thứ tự thực thi của các hàm setTimeout, setImmediate và process.nextTick không được đảm bảo trong trường hợp này.
Tóm lại, khi chạy file JavaScript thông qua Node.js, việc biên dịch trước đảm bảo Node.js có thông tin đầy đủ về các hàm và các hàm callback trong file, từ đó đảm bảo thứ tự thực thi của các hàm bất đồng bộ. Trong khi đó, khi thực thi trực tiếp trên terminal, Node.js chỉ thực thi dòng code một cách tuần tự và không biết trước toàn bộ các hàm và các hàm callback trong đoạn code, dẫn đến việc không đảm bảo thứ tự thực thi của các hàm bất đồng bộ.
chào bạn, rất vui khi nhận được câu hỏi của bạn. Đối với những site đã có dữ liệu sẵn rồi, nếu bạn không phải coder thì mình khuyên bạn nên sử dụng thêm 1 service trung gian giữa website và kho lưu trữ của bạn, điển hình là CDN. Đa phần các dịch vụ CDN cũng đã tích hợp sẵn tính năng sẵn tính năng chuyển đổi ảnh JPG/PNG sang WEBP giúp bạn luôn.
Cá nhân mình không thích cách viết của vuex, vừa dài dòng mà cũng không sạch đẹp hơn bao nhiêu. Hãy đổi sang pinia để thoát khỏi this của js. Ngoài ra, nếu dự án nhỏ mình cũng không cần dùng thư viện quản lý trạng thái, inject/provide là quá đủ
@Clarence161095 à em có test lại rồi, nếu em save code lại vào file và dùng lệnh node test.js thì thấy giống như trong bài, nhưng lúc đầu em mở terminal lên gõ node rồi paste code vào enter thì nó ra "immadiate" trước anh ạ, không biết tại sao có khác biệt này ạ
Tuy nhiên đấy là chỉ thử run thôi chức thực sự thì về bản chất nó là js nên node cũng ko ảnh hưởng. Node nó chỉ là runtime env thôi. Tuy nhiên đoạn code của bạn có phải giống như vậy không?
Đúng rồi bác, vì nó là phần thập phân sẽ khi chuyển từ nhị phân sang sẽ là dạng nhân với 2^-x, nên các số có phần thập phân lẻ ngoài các số tổng/tích/thương kia sẽ bị lặp vĩnh viễn
Mình cũng hạn chế nói sâu về cách tính toán, chủ yếu cho ae biết sự tồn tại của floating point và ưu nhược điểm của nó dẫn tới việc sai số thôi
Hoặc nếu ae thích tính toán sẽ ra bài khác!
Các số dạng 2^(x), với x là -1,-2,-3,.... hoặc số là tổng/tích/thương/hiệu của các số 2^(x) (vd: 0.25 + 0.5 = 0.75) thì sẽ biểu diễn được dưới dạng binary, còn lại tất cả sẽ không biểu diễn được (dãy bit vô tận)
=> 0.1 và 0.2 không biểu diễn được nên tính toán sẽ có khả năng sai
=> 0.1 + 0.2 = 0.3........04 (lúc này thì hãy bắt đầu đọc bài viết này)
Nên các kiến trúc và ngôn ngữ lập trình sẽ đều theo một chuẩn định dạng như IEEE-754 để lưu trữ và format, đọc sơ cho vui, chứ tính toán cái này chẳng giải quyết đc vấn đề nào cả, đừng cố deep dive làm gì. Tính toán với số thực thì nên dùng lib của ng khác viết hoặc tự tính cũng được nếu bạn siêng )
Phần này hơi phức tạp về công thức về tính toán. Đại loại sẽ cần biến đổi phần thập phân và phân nguyên về dạng nhị phân, sau đó từ phần mũ dịch dấu tính ra phần exponent 8 bit kia. Nếu nhiều người quan tâm mình sẽ làm một bài hướng dẫn chuyển đổi tính toán bằng tay
THẢO LUẬN
Làm sao để tải mô hình lên vậy bạn?
Tải mô hình lên bằng cách nào vậy ạ?
Mình nghĩ là về chỗ setTimeOut bạn nên giải thích thêm về cơ chế event loop, vì nếu lỡ như có bạn nào không biết về event loop thì sẽ có thể dẫn đến hiểu nhầm hoặc đơn giản là sử dụng nhưng không biết vì sao hàm setTimeOut lại chạy sau
Mình có thắc mắc nếu dùng graph có gây ra vấn đề bảo mật gì không ? Khi mà client có thể trọc thẳng vào db mà ko qua 1 tầng validate nào
@NPThao À à hiểu rồi. 🤣 khác đấy... Khi e lưu đoạn code vào một file và chạy file đó, có một sự khác biệt trong cách Node.js xử lý Event Loop so với việc thực thi trực tiếp trên terminal.
Khi e chạy file JavaScript thông qua Node.js, quá trình xử lý sẽ diễn ra theo từng bước như sau:
Đọc và biên dịch toàn bộ nội dung của file JavaScript.
Thực thi các dòng code trong file JavaScript theo thứ tự từ trên xuống dưới.
Vì quá trình đọc và biên dịch file xảy ra trước khi bắt đầu thực thi, Node.js sẽ biết trước cách các hàm và các hàm callback được gọi trong đoạn code và sẽ xác định được thứ tự chính xác của chúng. Do đó, trong trường hợp này, thứ tự thực thi của các hàm setTimeout, setImmediate và process.nextTick sẽ được đảm bảo theo cách e định nghĩa trong đoạn code.
Tuy nhiên, khi thực thi trực tiếp trên terminal, Node.js không biết trước toàn bộ đoạn code và các hàm callback được gọi. Thay vào đó, nó thực thi lệnh trong đoạn code theo từng bước và quyết định thứ tự thực thi dựa trên các điều kiện tại thời điểm đó. Điều này dẫn đến việc thứ tự thực thi của các hàm setTimeout, setImmediate và process.nextTick không được đảm bảo trong trường hợp này.
Tóm lại, khi chạy file JavaScript thông qua Node.js, việc biên dịch trước đảm bảo Node.js có thông tin đầy đủ về các hàm và các hàm callback trong file, từ đó đảm bảo thứ tự thực thi của các hàm bất đồng bộ. Trong khi đó, khi thực thi trực tiếp trên terminal, Node.js chỉ thực thi dòng code một cách tuần tự và không biết trước toàn bộ các hàm và các hàm callback trong đoạn code, dẫn đến việc không đảm bảo thứ tự thực thi của các hàm bất đồng bộ.
chào bạn, rất vui khi nhận được câu hỏi của bạn. Đối với những site đã có dữ liệu sẵn rồi, nếu bạn không phải coder thì mình khuyên bạn nên sử dụng thêm 1 service trung gian giữa website và kho lưu trữ của bạn, điển hình là CDN. Đa phần các dịch vụ CDN cũng đã tích hợp sẵn tính năng sẵn tính năng chuyển đổi ảnh JPG/PNG sang WEBP giúp bạn luôn.
Chào anh, cho em hỏi là khi mình áp dụng mô hình lasso regression mà cho ra R2 score âm thì có ý nghĩa là gì ạ?
Hình mất hết trơn. Upload loại hình lên server của viblo.asia đi bạn ơi
Cá nhân mình không thích cách viết của vuex, vừa dài dòng mà cũng không sạch đẹp hơn bao nhiêu. Hãy đổi sang pinia để thoát khỏi this của js. Ngoài ra, nếu dự án nhỏ mình cũng không cần dùng thư viện quản lý trạng thái, inject/provide là quá đủ
@Clarence161095 à em có test lại rồi, nếu em save code lại vào file và dùng lệnh
node test.jsthì thấy giống như trong bài, nhưng lúc đầu em mở terminal lên gõnoderồi paste code vào enter thì nó ra "immadiate" trước anh ạ, không biết tại sao có khác biệt này ạChắc ko phải vì node 18 đâu, mình mới run con tren con container node 18 thì thấy kết quả bt 😁
Tuy nhiên đấy là chỉ thử run thôi chức thực sự thì về bản chất nó là js nên node cũng ko ảnh hưởng. Node nó chỉ là runtime env thôi. Tuy nhiên đoạn code của bạn có phải giống như vậy không?
Em chạy thử đoạn code bằng node18 thì thấy là nó sẽ chạy
immediatetrướctimeoutanh ạ. Không biết là có phải do node18 có cập nhật hay không anhchị có bán phần mềm này không ạ
Bạn sử dụng thêm 2 dòng này trong file config route thử xem.
Import Router from 'vue-router'; Vue.use(Router);Thêm trong file mainVue.use(router)https://topnoibat.com/ thêm link này nữa bác nhé
Anh giải thích rất hay và dễ hiểu. Em cảm ơn anh!!
tks
Đúng rồi bác, vì nó là phần thập phân sẽ khi chuyển từ nhị phân sang sẽ là dạng nhân với 2^-x, nên các số có phần thập phân lẻ ngoài các số tổng/tích/thương kia sẽ bị lặp vĩnh viễn Mình cũng hạn chế nói sâu về cách tính toán, chủ yếu cho ae biết sự tồn tại của floating point và ưu nhược điểm của nó dẫn tới việc sai số thôi
Hoặc nếu ae thích tính toán sẽ ra bài khác!
Các số dạng 2^(x), với
x là -1,-2,-3,....hoặcsố là tổng/tích/thương/hiệu của các số 2^(x) (vd: 0.25 + 0.5 = 0.75)thì sẽ biểu diễn được dưới dạng binary, còn lại tất cả sẽ không biểu diễn được (dãy bit vô tận)=> 0.1 và 0.2 không biểu diễn được nên tính toán sẽ có khả năng sai
=> 0.1 + 0.2 = 0.3........04 (lúc này thì hãy bắt đầu đọc bài viết này)
Nên các kiến trúc và ngôn ngữ lập trình sẽ đều theo một chuẩn định dạng như IEEE-754 để lưu trữ và format, đọc sơ cho vui, chứ tính toán cái này chẳng giải quyết đc vấn đề nào cả, đừng cố deep dive làm gì. Tính toán với số thực thì nên dùng lib của ng khác viết hoặc tự tính cũng được nếu bạn siêng
)
Phần này hơi phức tạp về công thức về tính toán. Đại loại sẽ cần biến đổi phần thập phân và phân nguyên về dạng nhị phân, sau đó từ phần mũ dịch dấu tính ra phần exponent 8 bit kia. Nếu nhiều người quan tâm mình sẽ làm một bài hướng dẫn chuyển đổi tính toán bằng tay