Mình sẽ ví dụ đơn giản một cách dễ hiểu với 2 chương trình mẫu Rust (compiler) và Python (interpreter)
###Python
def main():
x = 5 # Interpreter infers the type of x as int
y = "Hello" # Interpreter infers the type of y as str
# No explicit type annotation in Python
result = add_numbers(x, y) # Interpreter raises a runtime TypeError here
print("Result:", result)
def add_numbers(a, b):
return a + b
main()
Lỗi trả về:
ERROR!
Traceback (most recent call last):
File "<string>", line 14, in <module>
File "<string>", line 7, in main
File "<string>", line 12, in add_numbers
TypeError: unsupported operand type(s) for +: 'int' and 'str'
###Rust
fn main() {
let x = 5; // Compiler infers the type of x as i32
let y = "Hello"; // Compiler infers the type of y as &str
// Type annotation
let z: bool = true;
let result = add_numbers(x, y); // Compiler detects a type mismatch here
println!("Result: {}", result);
}
fn add_numbers(a: i32, b: i32) -> i32 {
a + b
}
Lỗi trả về:
rustc /tmp/Pq6XxfKx1e/main.rs
error[E0308]: mismatched types
--> /tmp/Pq6XxfKx1e/main.rs:8:33
|
8 | let result = add_numbers(x, y); // Compiler detects a type mismatch ...
| ----------- ^ expected `i32`, found `&str`
| |
| arguments to this function are incorrect
|
note: function defined here
--> /tmp/Pq6XxfKx1e/main.rs:13:4
|
13 | fn add_numbers(a: i32, b: i32) -> i32 {
| ^^^^^^^^^^^ ------
error: aborting due to previous error
For more information about this error, try `rustc --explain E0308`.
Sau khi quan sát 2 lỗi trả về bạn sẽ thấy Python báo lỗi dòng 13 và Rust dòng 12. Nghĩa là:
Python suy diễn kiểu động báo lỗi trong quá trình thực thi hàm add_numbers. Interpreter sẽ raise TypeError trên runtime khi execute.
Rust suy diễn kiểu tĩnh báo lỗi trong quá trình gọi hàm add_numbers. Compiler suy diễn kiểu cho return của hàm add_numbers nên sẽ trả lỗi trong quá trình compile gọi hàm add_numbers.
Sao em đọc cứ có mùi ChatGPT và nội dung không đi vào trọng tâm thế ạ, bác có thể thêm ví dụ trong thực tế sử dụng Proxy Pattern gồm những cái gì không để dễ hiểu hơn ạ?
Nhưng mà nếu user mạng lag hoặc rớt mạng, thì hoá đơn phía hệ thống sẽ không được confirm, do request là của user. Nên phải cần ipnUrl do Vnpay request. Mà e tìm ko nổi cái phần set ipnUrl ở đâu cả.
@pdhau e đọc doc của họ rồi bác, không có key vnp_IpnURL bác à (ko biết ngày trước có ko). Ko hiểu sao trên web hướng dẫn của vnpay, họ vẫn giữ cả 2 cái ipnUrl với returnUrl, mà code demo của 2 cái này lại giống nhau 90%.
Cái url nó sẽ chứa dữ liệu trả về gồm 2 phần: data hoá đơn và secureHash (dưới dạng query parameter). Trong đó cái secureHash là data hoá đơn được hash bởi secret_key của mình. Server của mình sẽ phải kiểm tra 2 cái đó có ăn khớp với nhau ko -> nên nếu user chỉnh sửa data hoá đơn trong url mà không sửa cái secureHash trong đó (họ ko có secret_key) thì kết quả sẽ trả về sai.
Mong mọi người cùng bàn luận.
Cho mình hỏi thông dịch và biên dịch thì các cơ chế xử lý luồng hoặc suy diễn kiểu dữ liệu mà bạn sẽ phải lường trước các vấn đề có thể xảy ra sau này. Mình chưa hiểu lắm bạn có thể ví dụ được ko
THẢO LUẬN
bài viết hay, có tâm. Cảm ơn Duy Đà Nẵng
ngu
Có hướng dẫn làm với các mẫu phiếu trắc nghiệm như phiếu tô THPTQG không ạ??
Đây là phân quyền ở Backend nhé. Còn muốn phân quyền ở vue router thì phải viết xử lý riêng.
Cảm ơn bạn, bài viết khá chi tiết và tâm huyết cũng như mang tính thực tế cao 😍
"Không gửi thông tin lên server như Cookie nên bảo mật tốt hơn." Vậy có nghĩa là bạn trust client hơn server hay sao? Sai hoàn toàn nhé!
Bài viết cũng khá hay. Cho cái nhìn tổng quan cho newbie như mình
Mình sẽ ví dụ đơn giản một cách dễ hiểu với 2 chương trình mẫu Rust (compiler) và Python (interpreter)
###Python
Lỗi trả về:
###Rust
Lỗi trả về:
Sau khi quan sát 2 lỗi trả về bạn sẽ thấy Python báo lỗi dòng 13 và Rust dòng 12. Nghĩa là:
chào a, bài viết của a rất hay và chi tiết ạ. a cho e hỏi e đang sử dụng laravel + vue router, không biết nó có phân quyền như thế này ko ạ
Sao em đọc cứ có mùi ChatGPT và nội dung không đi vào trọng tâm thế ạ, bác có thể thêm ví dụ trong thực tế sử dụng Proxy Pattern gồm những cái gì không để dễ hiểu hơn ạ?
bạn deploy được chưa, hướng dẫn mình với
Nhưng mà nếu user mạng lag hoặc rớt mạng, thì hoá đơn phía hệ thống sẽ không được confirm, do request là của user. Nên phải cần ipnUrl do Vnpay request. Mà e tìm ko nổi cái phần set ipnUrl ở đâu cả.
@pdhau e đọc doc của họ rồi bác, không có key vnp_IpnURL bác à (ko biết ngày trước có ko). Ko hiểu sao trên web hướng dẫn của vnpay, họ vẫn giữ cả 2 cái ipnUrl với returnUrl, mà code demo của 2 cái này lại giống nhau 90%. Cái url nó sẽ chứa dữ liệu trả về gồm 2 phần: data hoá đơn và secureHash (dưới dạng query parameter). Trong đó cái secureHash là data hoá đơn được hash bởi secret_key của mình. Server của mình sẽ phải kiểm tra 2 cái đó có ăn khớp với nhau ko -> nên nếu user chỉnh sửa data hoá đơn trong url mà không sửa cái secureHash trong đó (họ ko có secret_key) thì kết quả sẽ trả về sai. Mong mọi người cùng bàn luận.
Thanks anh!. Một câu hỏi khá phổ biến dạo gần đây ở các Bigtech VN, đọc bài này xong pv hỏi luôn chém nó đã
PhucRiot
Cho mình hỏi thông dịch và biên dịch thì các cơ chế xử lý luồng hoặc suy diễn kiểu dữ liệu mà bạn sẽ phải lường trước các vấn đề có thể xảy ra sau này. Mình chưa hiểu lắm bạn có thể ví dụ được ko
@maitrungduc1410 Các lỗi trên mình đã fix được rồi, đến đoạn tạo account để đăng nhập thì hiện lỗi như này
Không biết là source code có bị thiếu phần nào k nhỉ?
thank bạn nhé!
@maitrungduc1410 Mình vừa chạy lại từ đầu, đến đoạn install composer, thì hiện kết quả như trong ảnh
Nhờ Đức check xem như này có lỗi gì không?
@maitrungduc1410 hello Đức, Mình đã chạy composer install rồi nhé. Sau đó mình chạy 2 command này : docker compose exec app php artisan key:generate ---> OK
docker compose exec app php artisan migrate --seed ---> Lỗi như trong hình.