Mình đọc trên documentation của Lodash thì _.extend là alias của _.assignIn; _.assign và _.assignInchỉ khác nhau một chút ở việc lựa chọn property của source object. _.assignIn giống như việc dùng for...in với object vậy
À, 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.
THẢO LUẬN
That's great!
(like)
Mình đọc trên documentation của Lodash thì
_.extend
là alias của_.assignIn
;_.assign
và_.assignIn
chỉ khác nhau một chút ở việc lựa chọn property của source object._.assignIn
giống như việc dùngfor...in
với object vậy(y)
bài viết hay, cảm ơn bạn nha
Thú vị
The refactor at PMS
Anh dang test viblo :3
Senior SonNT co khac
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.