À, hàng tỉ phép so sánh thì nó không nhiều lắm đâu bạn. Nó còn nhiều thao tác ở trong đấy nữa.
VD: Load hết dữ liệu từ db vào RAM, INSERT dữ liệu từ RAM vào DB, parse, regex, ...
Nếu chỉ có như demo của bạn thì đúng là chưa đến 1 giây. Của mình là ~400ms.
Ở đây mình đang cố gắng hướng đến cách chọn giải pháp.
Anyway, cảm ơn cái code F# bá đạo nhé. Lần đầu được thấy code F#.
@kopitop Thanks bạn !
Mình đồng ý với cách nhìn của bạn. Có thể cách nhìn này là một high level của bài viết này chăng ?
Dù sao thì học bất kì ngôn ngữ nào, level nào đều phụ thuộc vào nhiều yếu tố: mục đích, công việc, sở thích, bị ép buộc ... kể cả khả năng của mỗi người. Vì thế sẽ là không có quy chuẩn cho việc học lập trình, bản thân mỗi người phải tự lựa chọn cách phù hợp nhất thôi.
Nếu dữ liệu nhỏ thì tại sao không load hết vào ram rồi viết vào DB sau nhỉ.
Mình viết thử một chương trình để test, chạy debug thử bằng f#
open System
open System.Diagnostics
open System.Collections.Generic
let rnd = Random()
let genUrl () =
string(rnd.Next 10_000_000) + ".com"
[<EntryPoint>]
let main argv =
let db = [| for _ in 1..1_000_000 -> genUrl() |]
let newFile = HashSet<string>( [| for _ in 1..10_000_000 -> genUrl() |] )
let sw = Stopwatch.StartNew()
printfn "Start"
db
|> Array.filter newFile.Contains
|> Array.length
|> printfn "results has %d records"
sw.Stop()
printfn "run all in %d" sw.ElapsedMilliseconds
Console.ReadLine() |> ignore
0
Kq chạy thử
Gen data
Gen data in 9096
Start
results has 631767 records
run all in 772
Như vậy thời gian chạy "hàng tỉ các phép so sánh" kia chỉ mất có hơn ~800ms
Vì string url gen chỉ có số và đuôi .com nên dù có ~11 triệu url, chương trình cũng chỉ dùng ~500-600MB ram.
Url thật thì chắc vẫn chạy hoàn toàn trên ram không vấn đề gì nhỉ
C# là high-level
C++ gần với low-level
và cuối cùng là học đến low-level
chứ không chỉ đơn thuần là hoc nhiều ngôn ngữ. bởi mình được biết ở VN thường dạy từ low-level đến high-level (C -> C++/Java -> PHP/ Ruby/C# ...), thì ở đây mình đưa ra 1 phương pháp khác.
và 1 năm là đủ để bạn tương đối thành thạo về 1 ngôn ngữ nếu đầu tư kỹ lưỡng cả về thời gian và công sức.
mình ko có ý phản đối bạn, chỉ là đưa ra ý kiến về 1 view nhìn khác thôi )
Đầu tiên như tựa đề, bài viết đang cố tình nghiêng về việc học lập trình nên có thể nó không còn đúng cho các lĩnh vực khác, chuyên ngành khác.
Có lẽ bạn đang hiểu nhầm ở đây . Cách đây gần 5 năm, mình nghe các thầy đã nói là nhiều trường chuyển sang dạy python rồi. Nhưng cái cốt lõi ở đây đó là ngôn ngữ được chọn không quan trọng và đa số các trường thường không dạy bạn duy nhất một ngôn ngữ từ A->Z. Họ vẫn chỉ dạy bạn về basic như các thành phần trong ngôn ngữ lập trình, rồi nâng cao lên là cấu trúc dữ liệu, giải thuật, trình biên dich...và cả hệ điều hành. Họ dạy bạn C# đầu tiên, ok , bạn vẫn phải học những thứ cơ bản rồi mới dần nâng cao hơn. Việc học theo thứ tự C# -> C++ -> Assembly không phản ánh ý nghĩa của 2 hướng Top-Down hay Bottom-Up, nó chỉ là quá trình học nhiều ngôn ngữ chứ không phải là cách tiếp cận để học một ngôn ngữ.
Bài viết mong muốn một developer nên kết hợp cả 2 hướng tiếp cận để họ vừa vững lý thuyết, vừa mạnh thực hành.
mình từng đọc 1 comment khá là tâm đắc về vấn đề này trên Quora, quote lại đây )
In physics you also learn about gravity first, then about newton laws, then about atoms and molecules, then about quantum mechanics. Of course, if you understand quantum mechanics, then the entire physics makes more sense, but that does not mean you should learn quantum mechanics first. maybe you won’t be a physicist, maybe you will use the physics to become good pilot at some airlines.
You learn s = v . t later v = a . t and s = a . t / 2
If you learn derivates and integrals you will understand the equasion much better, but do you have to learn integrals first, if you only need to know how long it will take to get home by foot?
Mình cũng được biết là nhiều trường đại học trên thế giới hiện nay đang giảng dạy theo hướng Top-Down ngược với Việt Nam là Bottom-Up
Năm đầu học C#, năm 2 C++ và năm cuối là C và Assembly.
Bài khá hay nhưng sao không được chi tiết vậy bạn, có thể chia sẻ source demo lên luôn không. Chứ chia sẻ mà còn phải inbox thì oải lắm ), thank for share
Spec không được dựa trên giả định cá nhân mà phải có base đó là dựa vào việc thống nhất í hiểu hoặc là compare theo 1 chuẩn chung , những chức năng tương tự:
brainstorming thống nhất í hiểu với cả team
TH không thống nhất được phải confirm với khách í hiểu chung nhất (đại đa số) của team
Mình sử dụng những chuẩn chung , những app/function có tính năng tương tự để phán đoán.
Chị ví dụ như sau:
Ta có 1 bài toán chat message giữa ứng viên và nhà tuyển dụng tuy nhiên nó ko hề nói đến việc :
Có copy/paste được mesage hay không
Khi có URL đính kèm thì có hyperlink không --> Để có thể mở ra URL page tương ứng
Khi có gửi số điện thoại kèm theo có hyperlink không --> Để có thể gọi
==> Việc này mình ko cần confirm với khách vì ko có lý gì app mình lại đi ngược lại với chuẩn chung của những app chat/message đang có
"Khi không có các yêu cầu rõ ràng , tất cả mọi người được tự do giả định các yêu cầu theo cách riêng của mình và điều này dẫn đến giả định ở mức độ cá nhân. Khi bạn thấy rằng giả định cá nhân là không hài lòng, bạn đánh dấu nó như là một lỗi."
Vậy với các yêu cầu không rõ ràng thì phải giải quyết thế nào chị?
THẢO LUẬN
cảm ơn tác giả!
cảm ơn tác giả
Yii giờ lên Yii 2, hiệu năng rất tốt, code nhanh hơn.
Hay quá a ei )
Chào bạn, mình có để source code và hướng dẫn tại đây https://github.com/ngodacdu/SSSheetLayout Cám ơn bạn đã góp ý.
Good job man!
À, hàng tỉ phép so sánh thì nó không nhiều lắm đâu bạn. Nó còn nhiều thao tác ở trong đấy nữa. VD: Load hết dữ liệu từ db vào RAM, INSERT dữ liệu từ RAM vào DB, parse, regex, ... Nếu chỉ có như demo của bạn thì đúng là chưa đến 1 giây. Của mình là ~400ms. Ở đây mình đang cố gắng hướng đến cách chọn giải pháp. Anyway, cảm ơn cái code
F#
bá đạo nhé. Lần đầu được thấy codeF#
.@kopitop Thanks bạn ! Mình đồng ý với cách nhìn của bạn. Có thể cách nhìn này là một high level của bài viết này chăng ? Dù sao thì học bất kì ngôn ngữ nào, level nào đều phụ thuộc vào nhiều yếu tố: mục đích, công việc, sở thích, bị ép buộc ... kể cả khả năng của mỗi người. Vì thế sẽ là không có quy chuẩn cho việc học lập trình, bản thân mỗi người phải tự lựa chọn cách phù hợp nhất thôi.
Nếu dữ liệu nhỏ thì tại sao không load hết vào ram rồi viết vào DB sau nhỉ. Mình viết thử một chương trình để test, chạy debug thử bằng f#
Kq chạy thử
Như vậy thời gian chạy "hàng tỉ các phép so sánh" kia chỉ mất có hơn ~800ms Vì string url gen chỉ có số và đuôi .com nên dù có ~11 triệu url, chương trình cũng chỉ dùng ~500-600MB ram. Url thật thì chắc vẫn chạy hoàn toàn trên ram không vấn đề gì nhỉ
top-down theo ví dụ của mình có nghĩa là:
C# là high-level C++ gần với low-level và cuối cùng là học đến low-level
chứ không chỉ đơn thuần là hoc nhiều ngôn ngữ. bởi mình được biết ở VN thường dạy từ low-level đến high-level (C -> C++/Java -> PHP/ Ruby/C# ...), thì ở đây mình đưa ra 1 phương pháp khác. và 1 năm là đủ để bạn tương đối thành thạo về 1 ngôn ngữ nếu đầu tư kỹ lưỡng cả về thời gian và công sức. mình ko có ý phản đối bạn, chỉ là đưa ra ý kiến về 1 view nhìn khác thôi )
ok chị, em đã hiểu roài ạ
Thanks @kopitop !
python
rồi. Nhưng cái cốt lõi ở đây đó là ngôn ngữ được chọn không quan trọng và đa số các trường thường không dạy bạn duy nhất một ngôn ngữ từ A->Z. Họ vẫn chỉ dạy bạn về basic như các thành phần trong ngôn ngữ lập trình, rồi nâng cao lên là cấu trúc dữ liệu, giải thuật, trình biên dich...và cả hệ điều hành. Họ dạy bạn C# đầu tiên, ok , bạn vẫn phải học những thứ cơ bản rồi mới dần nâng cao hơn. Việc học theo thứ tự C# -> C++ -> Assembly không phản ánh ý nghĩa của 2 hướng Top-Down hay Bottom-Up, nó chỉ là quá trình học nhiều ngôn ngữ chứ không phải là cách tiếp cận để học một ngôn ngữ. Bài viết mong muốn một developer nên kết hợp cả 2 hướng tiếp cận để họ vừa vững lý thuyết, vừa mạnh thực hành.tks
mình từng đọc 1 comment khá là tâm đắc về vấn đề này trên Quora, quote lại đây )
In physics you also learn about gravity first, then about newton laws, then about atoms and molecules, then about quantum mechanics. Of course, if you understand quantum mechanics, then the entire physics makes more sense, but that does not mean you should learn quantum mechanics first. maybe you won’t be a physicist, maybe you will use the physics to become good pilot at some airlines.
You learn s = v . t later v = a . t and s = a . t / 2
If you learn derivates and integrals you will understand the equasion much better, but do you have to learn integrals first, if you only need to know how long it will take to get home by foot?
Mình cũng được biết là nhiều trường đại học trên thế giới hiện nay đang giảng dạy theo hướng Top-Down ngược với Việt Nam là Bottom-Up Năm đầu học C#, năm 2 C++ và năm cuối là C và Assembly.
Bài khá hay nhưng sao không được chi tiết vậy bạn, có thể chia sẻ source demo lên luôn không. Chứ chia sẻ mà còn phải inbox thì oải lắm ), thank for share
Yep cảm ơn em.
Spec không được dựa trên giả định cá nhân mà phải có base đó là dựa vào việc thống nhất í hiểu hoặc là compare theo 1 chuẩn chung , những chức năng tương tự:
Bài viết hay, rõ ràng, dễ đọc, dễ hiểu, dễ áp dụng. Nhưng cái bucớ thực hiện test dự án ý nó cụt ngủn quá. Ra kq rầu thì phải phân tích nó xem nó hoạt động ntn, có ổn hay ko chớ?
bài viết thật tuyệt vời. Cảm ơn bạn
"Khi không có các yêu cầu rõ ràng , tất cả mọi người được tự do giả định các yêu cầu theo cách riêng của mình và điều này dẫn đến giả định ở mức độ cá nhân. Khi bạn thấy rằng giả định cá nhân là không hài lòng, bạn đánh dấu nó như là một lỗi." Vậy với các yêu cầu không rõ ràng thì phải giải quyết thế nào chị?