thảo luận Chia sẻ chuyện hài hồi đại học

hoctrokha

Member
Làm web lâu rồi hôm nay tự nhiên phải đụng đến Semaphore, tự dưng nhớ lại chuyện hồi đại học nên muốn kể cho anh em nghe chơi.
Hồi đó làm đồ án năm 4, mình muốn làm 1 hệ thống có khả năng truyền thông báo từ một hệ thống xuống app di động của nhiều nền tảng khác nhau (Android, IOS, Windows UWP).
Có nghĩa là trong mô hình sẽ có 1 hệ thống backend của 1 tổ chức nào đó, mình gọi hệ thống đó là Already Exist System (AES), hệ thống của mình là Raw notification service (RNS).

Tổ chức đó sẽ tích hợp RNS vào hệ thống của họ. RNS chịu trách nhiệm quản lý danh sách device và gửi thông báo xuống cho app của người dùng. Ở phía client app mình cũng có viết 1 client SDK, nó chạy ngầm bên dưới giúp nhận thông báo + gọi lên server để get detail notification, sau đó lưu dữ liệu xuống thiết bị bằng sqlite.
AES chỉ việc gọi qua RNS và bảo: "Gửi thông báo có id là XYZ cho user ABC j đó", RNS sẽ take care các thứ còn lại.

Ý tưởng khá hay, nhưng chuyện là hồi đó mình ko hiểu về HTTP, mình tưởng HTTP chỉ dùng đc trên web, vậy thì làm sao để AES, RNS và Client App liên lạc với nhau được?
Thế là mình đọc nguyên 1 cuốn Network programming của richard blum gần 500 trang thì phải, tiếng anh thì ko biết, vừa đọc vừa dịch khổ vcl. :extreme_sexy_girl:
Mình tự tạo nên 1 binary protocol của mình rồi xử lý đa luồng trên API bằng lock, semaphore, multex ... , thành thử mình cũng hiểu luôn cả multi threading (Tất nhiên là sau bao đêm đớn đau thức trắng debug multi threading + network), và cũng hiểu async/await != thread (thứ mà hiện tại mình phỏng vấn ai cũng tạch, chưa 1 ai nói đc cho mình hiểu async/await khác gì thread).
Thậm chí mình còn đang tìm hiểu cách làm sao để mã hoá hai đầu thủ công giống như SSL nữa. (may mà chưa kịp làm)

Mình cắm mặt làm nguyên nửa năm thì ra đc 1 demo chạy được. AES được demo bằng cả Java lẫn C# (mục đích để chứng minh là RNS có thể tích hợp với bất kỳ một ngôn ngữ nào), app client thì mình chỉ có thể viết bằng C# được thôi nên chỉ có thể demo trên windows 8.1 + windows phone.

Khoảng 2 tháng trước ngày demo trên trường, mình đi thực tập ở 1 công ty ở công viên phần mềm quang trung dưới SG (mình học trên bình dương), vào một dự án banking, mình mới được biết một thứ tên là WCF (Windows communication foundation), lúc đó giống như mind blowing.
Mình tự hỏi: trời ơi, sao trước giờ mình không biết có thứ này tồn tại, WHYYYYY?

Thế là về nhà thay thế tất cả xương máu tâm huyết bằng WCF trong một nốt nhạc, Cay ........... WHYYYYYYYY.
Cái cảm giác vừa được giải thoát mà vừa tiếc nuối, cay đắng cho những đêm cày quốc.
Đến giờ thật lòng mình vẫn thấy WCF là đỉnh cao mọi ng ạ, nó tiện vcl.

Một thời gian sau thì mình biết là HTTP dùng đc cho cả mobile + backend, và lúc đó cũng khám phá ra 1 thứ tên là Web API - thứ cho phép build ra các HTTP API.

Hiện giờ thì làm đủ thứ công nghệ trên trời dưới biển, dự án to nhỏ, cloud này cloud nọ, nhưng nghĩ lại cái dự án tốt nghiệp đó vẫn là thứ mình tự hào và cũng buồn cười nhất.

Hôm nay đụng vào semaphore, tự hỏi nếu commit code này lên thì có ai muốn approve k nhỉ?

:LOL:
 
Nghe bác nhắc đến semaphore làm e nhớ lại dekker, lamport các kiểu, ngày trước đang code bth tự dưng được học mutil thread, executor, thread pool cái như thấy chân trời mới. Bh em vẫn code java web nhưng chưa có cơ hội dùng lại mấy cái kia =((. Tiện đây em co file PDF quyển ở post https://voz.vn/t/java-sach-concurrent-and-distributed-computing-in-java.773101/

Gửi từ Thợ code, lương vài đồng đông dương bằng vozFApp
 
Last edited:
CTO bên công ty tui nói:
"The problem with junior devs is that they don't know that they don't know,
And thus they do what they don't know they are not capable of"
Dịch nôm na là
"Vấn đề của junior devs là họ không biết là họ không biết
Vậy nên họ làm những thứ mà họ không biết họ không có khả năng"

Tự làm mấy cái low level concurrency như semaphore, locking thì làm mấy bài nhỏ nhỏ thôi.
Làm bài lớn thì trừ khi anh là thiên tài, không làm được đâu. Sẽ lỗi tòe loe ra nhé.
 
CTO bên công ty tui nói:
"The problem with junior devs is that they don't know that they don't know,
And thus they do what they don't know they are not capable of"
Dịch nôm na là
"Vấn đề của junior devs là họ không biết là họ không biết
Vậy nên họ làm những thứ mà họ không biết họ không có khả năng"

Tự làm mấy cái low level concurrency như semaphore, locking thì làm mấy bài nhỏ nhỏ thôi.
Làm bài lớn thì trừ khi anh là thiên tài, không làm được đâu. Sẽ lỗi tòe loe ra nhé.
Mình k làm thì làm sao trở thành người mình muốn trở thành?
Làm sai thì làm lại thôi.
 
+10 cho bác thớt. Code from scratch thì kiến thức mình học được sẽ nhớ lâu hơn và chắc hơn là chỉ đọc xong để không làm gì. Dù cho sau này mình hầu như sẽ không có cơ hội làm cái gì như vậy, nhưng những cái mình từng code from scratch sẽ giúp mình tham khảo giải các bài toán tương tự dễ hơn. Hơi tiếc là em đi làm cũng mấy năm rồi thì mới biết rằng mình nên code from scratch nhiều chút :D

async/await != thread

Cái này có phải bác đang nói về tính năng của ngôn ngữ có từ khóa async await, so với việc tạo thread mới không nhỉ?
 
CTO bên công ty tui nói:
"The problem with junior devs is that they don't know that they don't know,
And thus they do what they don't know they are not capable of"
Dịch nôm na là
"Vấn đề của junior devs là họ không biết là họ không biết
Vậy nên họ làm những thứ mà họ không biết họ không có khả năng"

Tự làm mấy cái low level concurrency như semaphore, locking thì làm mấy bài nhỏ nhỏ thôi.
Làm bài lớn thì trừ khi anh là thiên tài, không làm được đâu. Sẽ lỗi tòe loe ra nhé.
Không thích tư tưởng của bác lắm. Dự án to hay nhỏ cũng thế. Kể cả nó có lỗi tòe loe thì nó vẫn là kiến thức mình học được tại sao cách này không hoạt động so với cách kia, và tất cả các thứ liên quan. Thấy bác so sánh thế hơi giống tại sao không nên start up dù 99% start up sẽ không sống lâu. Em thấy nó khá win-win: trường hợp mình thành công thì khỏi nói; trường hợp mình thất bại thì kinh nghiệm nó vẫn sáng cho CV của mình nhiều :D
 
+10 cho bác thớt. Code from scratch thì kiến thức mình học được sẽ nhớ lâu hơn và chắc hơn là chỉ đọc xong để không làm gì. Dù cho sau này mình hầu như sẽ không có cơ hội làm cái gì như vậy, nhưng những cái mình từng code from scratch sẽ giúp mình tham khảo giải các bài toán tương tự dễ hơn. Hơi tiếc là em đi làm cũng mấy năm rồi thì mới biết rằng mình nên code from scratch nhiều chút :D



Cái này có phải bác đang nói về tính năng của ngôn ngữ có từ khóa async await, so với việc tạo thread mới không nhỉ?
Uhm, mình phỏng vấn JS lúc nào cug hỏi, java script có 1 thread thì nó gọi lên nhiều api 1 lúc nó xử lý kiểu j?
Nó tạo thread mới ah?
Ứng viên thường trả lời: nó do event loop xử lý ạ.
Mình hỏi: thì trong event loop nó cug phải tạo thread chứ, ko tạo thread sao nó biết khi nào request thành công?
Ứng viên: đúng rồi ạ, nó tạo thread.
Mình: (Cười), thôi câu tiếp nhé
 
Không thích tư tưởng của bác lắm. Dự án to hay nhỏ cũng thế. Kể cả nó có lỗi tòe loe thì nó vẫn là kiến thức mình học được tại sao cách này không hoạt động so với cách kia, và tất cả các thứ liên quan. Thấy bác so sánh thế hơi giống tại sao không nên start up dù 99% start up sẽ không sống lâu. Em thấy nó khá win-win: trường hợp mình thành công thì khỏi nói; trường hợp mình thất bại thì kinh nghiệm nó vẫn sáng cho CV của mình nhiều :D
Lợi cho bác được thực hành nhưng lỗi thì chết công ty.
Thế nên thích thì làm pet project open source mà làm từ scratch với low level. Đừng có commit mấy cái sở thích có lợi cho mình lên repo công ty để khổ người khác phải review và công ty phải chịu rủi ro đó
 
async/await , thread cái này là 2 concept khác nhau thì compare kiểu gì được bác
Chuẩn, đọc xong khúc này cũng thấy hài hài, lủng lủng sao đó. Cũng k biết đi hỏi ứng viên như nào.

Uhm, mình phỏng vấn JS lúc nào cug hỏi, java script có 1 thread thì nó gọi lên nhiều api 1 lúc nó xử lý kiểu j?
Nó tạo thread mới ah?
Ứng viên thường trả lời: nó do event loop xử lý ạ.
Mình hỏi: thì trong event loop nó cug phải tạo thread chứ, ko tạo thread sao nó biết khi nào request thành công?
Ứng viên: đúng rồi ạ, nó tạo thread.
Mình: (Cười), thôi câu tiếp nhé
Với mình thì câu hỏi này không hay. “Xử lý kiểu gì” thì xử lý như bình thường event loop vẫn xử lý thôi. Tại bạn cứ mồi vào là “nó tạo thread mới à” với trong event loop nó cũng tạo thread mới làm ngta confuse, vào pv đã run rồi cứ ép vào adhoc thế thì cuống là bth.
Muốn kiểm tra xem ứng viên hiểu về async và parallel hay không thì có nhiều cách hỏi hay hơn.
 
Làm web lâu rồi hôm nay tự nhiên phải đụng đến Semaphore, tự dưng nhớ lại chuyện hồi đại học nên muốn kể cho anh em nghe chơi.
Hồi đó làm đồ án năm 4, mình muốn làm 1 hệ thống có khả năng truyền thông báo từ một hệ thống xuống app di động của nhiều nền tảng khác nhau (Android, IOS, Windows UWP).
Có nghĩa là trong mô hình sẽ có 1 hệ thống backend của 1 tổ chức nào đó, mình gọi hệ thống đó là Already Exist System (AES), hệ thống của mình là Raw notification service (RNS).

Tổ chức đó sẽ tích hợp RNS vào hệ thống của họ. RNS chịu trách nhiệm quản lý danh sách device và gửi thông báo xuống cho app của người dùng. Ở phía client app mình cũng có viết 1 client SDK, nó chạy ngầm bên dưới giúp nhận thông báo + gọi lên server để get detail notification, sau đó lưu dữ liệu xuống thiết bị bằng sqlite.
AES chỉ việc gọi qua RNS và bảo: "Gửi thông báo có id là XYZ cho user ABC j đó", RNS sẽ take care các thứ còn lại.

Ý tưởng khá hay, nhưng chuyện là hồi đó mình ko hiểu về HTTP, mình tưởng HTTP chỉ dùng đc trên web, vậy thì làm sao để AES, RNS và Client App liên lạc với nhau được?
Thế là mình đọc nguyên 1 cuốn Network programming của richard blum gần 500 trang thì phải, tiếng anh thì ko biết, vừa đọc vừa dịch khổ vcl. :extreme_sexy_girl:
Mình tự tạo nên 1 binary protocol của mình rồi xử lý đa luồng trên API bằng lock, semaphore, multex ... , thành thử mình cũng hiểu luôn cả multi threading (Tất nhiên là sau bao đêm đớn đau thức trắng debug multi threading + network), và cũng hiểu async/await != thread (thứ mà hiện tại mình phỏng vấn ai cũng tạch, chưa 1 ai nói đc cho mình hiểu async/await khác gì thread).
Thậm chí mình còn đang tìm hiểu cách làm sao để mã hoá hai đầu thủ công giống như SSL nữa. (may mà chưa kịp làm)

Mình cắm mặt làm nguyên nửa năm thì ra đc 1 demo chạy được. AES được demo bằng cả Java lẫn C# (mục đích để chứng minh là RNS có thể tích hợp với bất kỳ một ngôn ngữ nào), app client thì mình chỉ có thể viết bằng C# được thôi nên chỉ có thể demo trên windows 8.1 + windows phone.

Khoảng 2 tháng trước ngày demo trên trường, mình đi thực tập ở 1 công ty ở công viên phần mềm quang trung dưới SG (mình học trên bình dương), vào một dự án banking, mình mới được biết một thứ tên là WCF (Windows communication foundation), lúc đó giống như mind blowing.
Mình tự hỏi: trời ơi, sao trước giờ mình không biết có thứ này tồn tại, WHYYYYY?

Thế là về nhà thay thế tất cả xương máu tâm huyết bằng WCF trong một nốt nhạc, Cay ........... WHYYYYYYYY.
Cái cảm giác vừa được giải thoát mà vừa tiếc nuối, cay đắng cho những đêm cày quốc.
Đến giờ thật lòng mình vẫn thấy WCF là đỉnh cao mọi ng ạ, nó tiện vcl.

Một thời gian sau thì mình biết là HTTP dùng đc cho cả mobile + backend, và lúc đó cũng khám phá ra 1 thứ tên là Web API - thứ cho phép build ra các HTTP API.

Hiện giờ thì làm đủ thứ công nghệ trên trời dưới biển, dự án to nhỏ, cloud này cloud nọ, nhưng nghĩ lại cái dự án tốt nghiệp đó vẫn là thứ mình tự hào và cũng buồn cười nhất.

Hôm nay đụng vào semaphore, tự hỏi nếu commit code này lên thì có ai muốn approve k nhỉ?

:LOL:
Bác học trường nào dưới BD vậy ạ
 
Chuẩn, đọc xong khúc này cũng thấy hài hài, lủng lủng sao đó. Cũng k biết đi hỏi ứng viên như nào.


Với mình thì câu hỏi này không hay. “Xử lý kiểu gì” thì xử lý như bình thường event loop vẫn xử lý thôi. Tại bạn cứ mồi vào là “nó tạo thread mới à” với trong event loop nó cũng tạo thread mới làm ngta confuse, vào pv đã run rồi cứ ép vào adhoc thế thì cuống là bth.
Muốn kiểm tra xem ứng viên hiểu về async và parallel hay không thì có nhiều cách hỏi hay hơn.
Cơ bản dev nếu hiểu worker thread vs io thread thì sẽ k bao h bị cuống.
Thường k biết io thread là gì thì ms trả lời như z.
 
async/await , thread cái này là 2 concept khác nhau thì compare kiểu gì được bác
Bởi vì nó khác nên ms phải hỏi cách single thread xử lý gọi lên nhiều api kiểu j.
Nếu hiểu đc cái này thì tự khắc hiểu async/await.
 
Back
Top