Bài viết được sự cho phép của tác giả Tống Xuân Hoài
Vấn đề
Tôi năm nay đã 26 tuổi, maintain cũng dăm ba dự án rồi mà đôi lúc tôi cũng hay gặp những trường hợp mà một số bạn trong team hay làm thế này:
functionconvertBirthdayToAges (person) {
const year = newDate().getFullYear(); // 2021return person.map(p => p.age = year - p.year);
}
...
const persons = [{name: 'Nguyễn Văn A', year: 2000}];
convertBirthdayToAges(persons);
console.log(persons); // [{name: 'Nguyễn Văn A', year: 2000, age: 21}]
Thoạt nhìn cách viết hàm như trên có vẻ bình thường nhưng bạn hãy để ý sau khi persons đi qua hàm convertBirthdayToAges thì nó đã bị gắn thêm một attribute age.
Hay một ví dụ khác kiểu như là:
let year = 2020;
functionafterManyYear(num) {
return year + num;
}
afterManyYear(5) // 2025;
....
year = 2025;
afterManyYear(5) // 2030;
Ở ví dụ trên, ban đầu khi gọi hàm afterManyYear(5) kết quả là 2025 nhưng sau đó, do year bị thay đổi thành 2025 thì afterManyYear(5) lúc này lại trả về 2030.
Điều này có vẻ cũng bình thường nhưng hãy tưởng tượng trong giai đoạn bảo trì khi bạn không biết year bị thay đổi ở đâu thì quả là tai hại. Bạn cũng có thể nói thế thì sao không khai báo const với year: const year = 2020;? Thì tôi nghĩ khi đã khai báo với let thì trong đầu họ đã nghĩ sẽ sẵn sàng thay đổi year bất kì lúc nào rồi.
Nếu bạn là người thường xuyên làm những điều trên & thấy sự bất tiện của nó thì cũng là lúc các bạn nên biết về khái niệm Pure Function.
Side-effects là những “hiệu ứng” đi kèm trong hàm như:
Thay đổi giá trị của đầu vào.
console.log
HTTP calls (fetch/AJAX).
Thay đổi một file (fs).
Query DOM.
…
Nhìn chung thì ngoài những điều liệt kê ở trên thì side-effects còn bao gồm cả những công việc có trong hàm mà không liên quan đến kết quả tính toán cuối cùng.
Ở ví dụ 1 phần mở đầu ta đã thấy convertBirthdayToAges đã làm biến đổi giá trị của đầu vào là persons. Nếu chẳng may persons bị xoá mất một attribute nào đó thì chẳng phải là một điều rắc rối hay sao!
Để giải quyết vấn đề trên, thay vì chỉnh sửa trực tiếp persons, chúng ta hãy trả về một đối tượng mới:
functionconvertBirthdayToAges (person) {
const year = newDate().getFullYear();
return [...person.map(p => p.age = year - p.year)];
}
const persons = [{name: 'Nguyễn Văn A', year: 2000}];
const newPersons = convertBirthdayToAges(persons);
console.log(persons); // [{name: 'Nguyễn Văn A', year: 2000}];
Ví dụ trên tôi đã sử dụng toán tử spread syntax (…) để tạo ra một đối tượng mảng mới. Lưu ý rằng nó chỉ có thể sao chép “nông” (shallow copy) một đối tượng, để có thể sao chép “sâu” (deep copy) tôi khuyến nghị nên dùng package clone có sẵn trên npm.
Một ứng dụng không thể nào là không có side-effect
Đúng vậy, ứng dụng của bạn không thể nào hoạt động mà không bao gồm các “hiệu ứng” như đã liệt kê ở bên trên trừ chúng quá mức đơn giản. Chúng không thể hoạt động nếu như không đọc – ghi vào database hay select một phần tử trong DOM. Nhưng quan trọng là nên giảm thiểu tối đa hoặc cấu trúc những đoạn mã side-effects một cách độc lập nhất có thể.
Ví dụ như một hàm cập nhật dữ liệu:
// Ví dụ này giả sử Person là một sequelize model// Hàm update này mới là hàm trực tiếp có side-effectfunctionupdate(payload) {
returnPerson.update(payload);
}
functionupdatePerson(body) {
const name = body.name.trim();
const year = +body.year;
returnupdate({ name, year });
}
Tổng kết
Pure function không phải là khái niệm mới nhưng những lợi ích mà pure function mang lại trong quá trình phát triển & bảo trì sản phẩm là cực kì tốt dựa trên kinh nghiệm làm việc của tôi.
Qua những ví dụ trên tôi mong rằng các bạn sẽ nhận ra được những lợi ích khi áp dụng pure function vào các dự án trong hiện tại & tương lai. Chỉ cần thay đổi cách diễn đạt một chút sẽ mang lại nhiều lợi ích trong việc bảo trì code sau này.
System Admin hay quản trị viên hệ thống là những người chịu trách nhiệm thiết lập và bảo trì hệ thống máy tính, đặc biệt là máy chủ trong mạng của công ty; đảm bảo hệ thống hoạt động, vận hành một cách trơn tru và an toàn. Với vai trò quan trọng đó thì các nhà tuyển dụng luôn ưu tiên những ứng viên có kinh nghiệm và kiến thức tốt, với đòi hỏi cao khi phỏng vấn. Bài viết hôm nay chúng ta cùng tìm hiểu về những câu hỏi phỏng vấn vị trí System Admin thường gặp để có thể chuẩn bị tốt nhất nhằm chinh phục được nhà tuyển dụng nhé.
Công việc và trách nhiệm của một System Admin
System Admin có vai trò quan trọng trong một tổ chức/công ty không hề thua kém bất kỳ vị trí nào khác. Nói vui thì nếu System Admin đang làm việc thì lúc đó tất cả các bộ phận khác phải dừng lại để chờ hoạt động của hệ thống được khắc phục. Cụ thể thì trách nhiệm và công việc của quản trị viên hệ thống gồm:
Bảo đảm an ninh mạng và internet
Bảo đảm hệ thống vận hành trơn tru, hiệu quả
Hỗ trợ kỹ thuật trong quá trình vận hành
Khắc phục, sửa chữa lỗi hệ thống
Nghiên cứu và đề xuất phương án phát triển các hệ thống mạng
Top 4 câu hỏi thường gặp khi phỏng vấn vị trí System Administrator và câu trả lời chi tiết
VPS là gì? Nên chọn Hosting hay VPS cho công ty/ doanh nghiệp sử dụng
VPS Virtual Private Server là máy chủ riêng ảo được phân tách và chia sẻ tài nguyên từ server vật lý, nhờ công nghệ ảo hóa, VPS hoạt động giống máy chủ độc lập nhưng với lượng tài nguyên nhỏ hơn máy chủ chính. So với hosting (Shared Hosting) thì VPS có tính năng độc lập giống như một máy chủ riêng biệt, không phải chia sẻ tài nguyên cho nhiều tài khoản khác; nhờ đó tốc độ xử lý, hiệu năng, bảo mật của VPS cao hơn so với hosting.
Để lựa chọn cho công ty/doanh nghiệp sử dụng thì sẽ phụ thuộc vào nhu cầu, mục đích cũng như kiến thức của đội quản trị hệ thống; cụ thể thì VPS sẽ phù hợp cho:
Các hệ thống website có lượng truy cập lớn, cần sự ổn định, bảo mật và tối ưu tốt.
Đòi hỏi đội quản trị server có kiến thức và kỹ thuật quản lý
Ngược lại, lựa chọn hosting trong trường hợp bạn muốn nhanh chóng vận hành website, khả năng tài chính hạn chế và nhu cầu website có lượng truy cập thấp.
High Availability (HA) hiểu một cách đơn giản là quy trình/giải pháp/công nghệ có chức năng đảm bảo cho cơ sở dữ liệu và ứng dụng có thể truy cập 24/7 trong mọi điều kiện. Để làm được điều này thì HA cần tối thiểu 2 server chạy song song, hoạt động liên tục để nếu một trong các server gặp sự cố thì các server còn lại sẽ thay thế để đảm bảo cho hệ thống có thể hoạt động bình thường, luôn trong trạng thái sẵn sàng phục vụ, đồng thời giảm thiểu tình trạng gián đoạn của hệ thống.
Lợi ích khi sử dụng HA là việc dữ liệu trong server được lưu ở các vị trí khác nhau, tất cả đều được bảo mật đảm bảo an toàn. Các bản sao VPS được lưu trữ tại nhiều cụm khác nhau, nếu 1 VPS xảy ra sự cố thì dữ liệu sẽ không bị ảnh hưởng.
Trong Linux, toàn bộ log file của server được lưu trong thư mục var/log, để kiểm tra các file log chúng ta sử dụng lệnh di chuyển đến thư mục trên; sử dụng ls -l để liệt kê danh sách files trong thư mục. Để xem file log, chúng ta sử dụng lệnh tail hoặc lệnh less.
Các loại file log chính gồm:
auth.log: log về xác thực
boot.log: log về hoạt động khởi động hệ thống
cron: log các lịch hoạt động tự động
dmesg: log bộ đệm
message: log thông tin chung hệ thống
httpd: thư mục chứa log của Apache
maillog: log hoạt động mail
secure: log bảo mật
wtmp: log đăng nhập
yum: log của Yum
VPN là gì? Ưu và nhược điểm khi triển khai VPN cho công ty
VPN là viết tắt của Virtual Private Network hay mạng riêng ảo là một công nghệ cho phép tạo ra một kết nối mạng riêng ảo giữa thiết bị của người dùng và mạng Internet, đóng vai trò như một lớp bảo vệ thông tin cá nhân và duy trì sự riêng tự trên mạng. Về cơ bản, VPN chuyển tiếp tất cả lưu lượng (network traffic) của bạn tới hệ thống – nơi có thể truy cập từ xa các tài nguyên mạng cục bộ và vượt qua khỏi việc kiểm duyệt Internet.
Ưu điểm của VPN là khả năng bảo mật, lưu lượng cá nhân của người dùng được mã hóa và truyền an toàn qua Internet giúp bạn tránh được các mối đe dọa. Đối với một tổ chức, doanh nghiệp thì việc thiết lập VPN có đầy đủ chức năng và cấu hình mạnh đòi hỏi chi phí ngân sách không nhỏ, đây cũng là nhược điểm của VPN.
Nêu một số sai lầm mà System Admin thường gặp phải
Một số lỗi mà System Admin thiếu kinh nghiệm hoặc không cẩn thận để xảy ra trong quá trình làm việc thực tế có thể gây ra hậu quả rất lớn đối với công ty/ doanh nghiệp như sau:
Chia sẻ tài khoản quản trị với các thành viên trong team System, sau đó có người quản trị nghỉ việc, mật khẩu không được đổi kịp thời
Quên gia hạn SSL khiến các hệ thống không đảm bảo an toàn, người dùng cũng mất tin tưởng khi truy cập vào website của công ty
Không theo dõi log files thường xuyên khiến không phát hiện ra sớm lỗi hệ thống có thể xảy ra và ngăn ngừa trước.
Thực thi lệnh với quyền root hoặc trao quyền root cho người dùng khác ngoài team System, điều này tạo ra lỗ hổng lớn khi một người dùng có nguy cơ can thiệp sâu vào hệ thống máy chủ.
Không chấm dứt các tài khoản ngừng hoạt động khi có nhân viên trong công ty/ doanh nghiệp nghỉ việc. Điều này không chỉ khiến nguy cơ mất an toàn thông tin mà còn làm lãng phí tài nguyên của công ty.
Một số chứng chỉ System Admin phổ biến
Một số chứng chỉ dành cho System Admin dưới đây giúp bạn ghi điểm với nhà tuyển dụng:
Red Hat Certified System Administrator/ Red Hat Certified Engineer
CompTIA Server+/ CompTIA Security+
ServiceNow Certified System Administrator
Linux Professional Institute LPIC-1 Linux Administrator
Cisco Certified Network Associate
Microsoft Certified: Azure Administrator Associate
VMware Certified Professional – Data Center Virtualization
Kết bài
Trên đây là danh sách những câu hỏi phỏng vấn thường gặp dành cho vị trí System Admin. Quản trị hệ thống là công việc đòi hỏi kinh nghiệm và kiến thức về hệ thống mạng, máy chủ, phần cứng; vì thế các bạn hãy bổ sung thêm và học hỏi trong quá trình làm việc nữa nhé. Hy vọng bài viết hữu ích dành cho bạn và hẹn gặp lại trong các bài viết tiếp theo của mình.
Bài viết được sự cho phép của tác giả Tống Xuân Hoài
Vấn đề
Lần gần đây nhất tôi đi phỏng vấn tìm việc là khoảng 4-5 tháng trước. Như bao người khác, đi nhiều nơi, mỗi nơi là một trải nghiệm thú vị và nhận thấy một điều là không ai hỏi giống ai. Tôi chuẩn bị cho mình một tâm lý thoải mái và đặt ra những tiêu chí về môi trường làm việc mới, không quá quan trọng lý thuyết mà sẽ trả lời dựa trên kinh nghiệm làm việc thực tế của mình.
Một ngày nọ, có một anh CTO hỏi tôi một câu “Em tự nhận thấy mình đang ở level nào?”. Tôi không chần chừ mà trả lời luôn: “Thực ra em chưa để ý nhiều đến level của mình, mục tiêu trước mắt là không ngừng học hỏi…”. – “Em chưa xác định được level của mình thì cũng cần phải xem xét lại nhé!”
Dễ nhận thấy là người phỏng vấn đang muốn tôi lựa chọn giữa 3 mức Junior, Mid-Level và Senior. Với một người có hơn 5 năm kinh nghiệm, có thể tôi sẽ lựa chọn mình ở mức Senior, bởi vì đây là một điều có thể chấp nhận được khi thị trường tuyển dụng trong nước thường hay cho rằng người có từ 5 năm kinh nghiệm trở lên có thể coi là Senior. Nhưng tôi nghĩ, hiện tại mình vẫn chưa đạt được cấp độ này, có thể mình chỉ đang ở mức Mid-Level. Nhưng vì quan niệm và thị trường đang có mâu thuẫn về sự phân biệt các cấp độ, hay nói cách khác 3 cấp độ này còn phụ thuộc vào suy nghĩ của mỗi người, cho nên tôi phân vân và không đưa ra được câu trả lời chính xác cho mình.
Lời của anh CTO nói là đúng, việc không xác định được Level của mình thì quả là nguy cấp, nhưng do không nói ra suy nghĩ cho nên bị hiểu nhầm là không xác định được mình ở đâu. Vì thế, bài viết ngày hôm nay chúng ta hãy thử bàn luận về 3 cấp độ Junior, Mid-Level và Senior để xem thực chất phải làm thế nào thì mới có thể coi là một Senior “xịn” nhé!
Hãy thử tìm kiếm Google với từ khóa “Junior, Mid-Level và Senior developer” sẽ có rất nhiều kết quả được tìm thấy, chứng tỏ đây là một chủ đề được rất nhiều người quan tâm. Đa phần chúng ta vào đọc để xem mình đang ở đâu và cần phải làm thêm gì thì mới có thể đạt được cấp độ tiếp theo.
Trong số đó, nhiều bài liệt kê ra số năm kinh nghiệm để đánh giá được một người đang ở cấp độ nào. Ví dụ, mới ra trường sẽ là Junior, 3-5 năm sẽ là Mid-Level, từ 5 năm trở đi thì thành Senior…!? Quả thật mà nói trước kia tôi cũng từng tin sái cổ vào những con số này. Cho rằng càng làm lâu thì “bậc” của mình cũng sẽ tự tăng.
Hoặc cũng có bài viết chỉ ra rằng số năm không hoàn toàn quyết định level của một người, mà dựa vào khả năng giải quyết vấn đề của người đó. “Họ biết cách tổ chức mã, quan tâm đến khả năng bảo trì sau này, cách đặt câu hỏi và cách giải quyết…” Nghe thì hợp lý, nhưng có lẽ vẫn chưa đủ. Đối với tôi, một lập trình viên không chỉ biết mỗi code. Do đó để đạt được cấp cao nhất trong lập trình thì phải vượt qua cả việc code và làm được nhiều điều hơn nữa.
Tình cờ tôi tìm thấy một bài viết nói rất chi tiết về những thứ có thể đạt được ở cả 3 cấp độ. Hơn nữa nó còn rất đầy đủ và chi tiết cũng như đưa ra lời khuyên làm sao để tăng được level. Bạn đọc có thể xem tại Levels of Seniority.
Để tóm tắt, bài viết tập trung nhất vào cấp độ Junior, nêu ra khái niệm, biểu hiện và những điều cần làm để tiến bộ hơn. Một vài ý nổi bật như là:
Câu thần chú chính của họ là “làm cho nó hoạt động” mà không chú ý nhiều đến giải pháp. Đối với họ, một phần mềm hoạt động được và một phần mềm tốt là tương đương nhau.
Họ không biết về khía cạnh kinh doanh của công ty, tức là không quan tâm hoặc không biết mình làm việc này cho công ty để làm gì.
Đổ lỗi cho người khác (Somebody else’s problem) khi cho rằng ai đó phải chịu trách nhiệm cho vấn đề của bạn.
Họ không tham gia thảo luận nhóm.
…
Sau đó, tác giải đưa ra những lời khuyên cho Junior như sau:
Đọc nhiều mã, không chỉ mã trong các dự án mà bạn đang làm việc, mà cả mã nguồn của các thư viện, Framework, mã nguồn mở…
Tự làm các dự án cá nhân.
Ngừng đổ lỗi.
Đừng để bản thân bị giới hạn bởi chức danh mà bạn có. Làm nhiều việc và chủ động hơn.
Tránh nói “nó hoạt động trên máy của tôi”, ý chỉ hãy đi tìm hiểu nguyên nhân tại sao ứng dụng không hoạt động ở đâu đó, vì chắc chắn người khác đang gặp phải vấn đề chứ không phải là bạn. Câu nói trên chẳng khác nào phủ nhận trách nhiệm vậy.
Tiếp xúc với các nhà phát triển cấp cao hơn, xem họ làm việc, nếu có thể thì tìm một người hướng dẫn mình. Không ai thích một người biết tất cả mọi thứ, nhưng hãy kiềm chế cái tôi của mình và khiêm tốn để tiếp thu những bài học từ những người có kinh nghiệm.
…
Một Mid-level bao gồm tất cả những yếu tố của Junior, kèm theo đó là khả năng tự giải quyết vấn đề. Họ có nhiều hiểu biết hơn Junior tuy nhiên còn lúng túng trong việc áp dụng chúng. Tác giải nhấn mạnh rằng Mid-level là rất phổ biến và đôi khi họ bị nhầm với “Senior”. Tuy nhiên, họ cần được cố vấn thêm để trở thành một Sernior “chính hiệu”.
Senior là cấp độ tiếp theo sau Mid-Level developer. Họ là những người có thể tự mình hoàn thành công việc mà không cần bất kỳ sự giám sát nào và không tạo ra bất kỳ vấn đề nào trong quá trình thực hiện. Một số điều mà một Senior làm được như:
Họ thực dụng trong công việc, không bị ảnh hưởng bởi một công cụ tốt nhất.
Họ có một bức tranh toàn cảnh về lĩnh vực này, biết đâu là công cụ tốt nhất cho công việc trong hầu hết các trường hợp.
Họ biết họ đang ở trong một đội. Họ coi đó là một phần trách nhiệm của họ trong việc hướng dẫn người khác.
Họ có hiểu biết sâu sắc về lĩnh vực đang làm.
Họ nghĩ nhiều hơn là chỉ viết mã.
Họ biết cách đưa ra phản hồi mà không làm tổn thương bất cứ ai…
…
Hay nói tóm lại, ngoài việc viết mã, một Senior có thể hướng dẫn, làm cố vấn cho người khác, hiểu biết sâu sắc về doanh nghiệp, lĩnh vực kinh doanh và cả yếu tố con người.
Tổng kết
Junior, Mid-Level và Senior là ba cấp độ của một lập trình viên, cấp độ Junior là thấp nhất cho đến Senior là người có hiểu biết sâu rộng. Việc xác định được mình đang ở cấp độ nào cũng như cần làm gì để đạt được Level tiếp theo là một điều hết sức quan trọng trong con đường sự nghiệp của mỗi người.
Kể từ thời điểm Node.js được công bố chính thức, nó đã chứng minh được giá trị của mình. Cũng vì có nhiều người quan tâm nên luôn có những cuộc tranh luận về Node.js. Có người khen, có người chê. Nhưng bạn có công nhận với mình là càng nhiều người ghét thì càng nhiều người sử dụng không? Càng nhiều người đâm đầu vào học Nodejs ^_^
Có một điều rằng, Node.js đang ngày càng phổ biến, được sử dụng ở nhiều ứng dụng lớn, hoặc rất lớn.
Tuy nhiên, để ứng dụng Node.js tốt theo đúng nghĩa thì nó phụ thuộc vào tài năng của người viết ra nó. Chứ một mình Node.js dù có tốt đến đâu thì cũng không thể “gánh team” được. Yếu tố con người luôn là yếu tố tiên quyết tới chất lượng sản phẩm.
Để sản phẩm có chất lượng kém thì dưới đây là 7 sai lầm khi học nodejs mà bạn nên mắc phải!
Sai lầm thường gặp khi học Nodejs
#Tạo vòng lặp dữ liệu lớn làm treo ứng dụng
Javascript trong Node.js (cũng giống như trong trình duyệt) là ngôn ngữ đơn luồng. Hay nói cách khác, ở cùng một thời điểm, chỉ có một luồng được thực thi, một task được thực hiện. Thay vào đó, để tăng hiệu suất ứng dụng, Node.js sẽ xử lý theo kiểu bất đồng bộ.
Ví dụ, truy xuất vào cơ sở dữ liệu từ ứng dụng Node.js để lấy dữ liệu. Trong lúc chờ cơ sở dữ liệu trả về kết quả thì Node.js có thể tranh thủ làm các task khác.
// Trying to fetch an user object from the database. Node.js is free to run other parts of the code from the moment this function is invoked..db.User.get(userId,function(err, user){ // .. until the moment the user object has been retrieved here})
Tuy nhiên, không phải mã nào cũng bất đồng bộ, bản thân Javascript là ngôn ngữ đồng bộ, nên cũng giống như các ngôn ngữ khác.
Nếu một đoạn code mà cần thời gian dài để thực hiện có thể làm treo ứng dụng. Đặc biệt là các vòng lặp. Bạn có thể xem đoạn code bên dưới đây:
function sortUsersByAge(users){ users.sort(function(a, b){ return a.age< b.age?-1:1 })}
Đây là hàm dùng để sắp xếp một mảng các users. Đây là hàm thuần túy đồng bộ, tức là phải làm xong hàm này thì mới thực hiện các hàm khác. Nếu mảng users có số lượng ít thì không sao. Nhưng nếu mảng users mà có rất nhiều phần tử thì sao?
Đấy là chưa kể ứng dụng Node.js còn phải phục vụ hàng ngàn khách truy cập nữa?
Đây chính là vấn đề, có thể làm sập server như chơi.
Để khắc phục vấn đề này thì có nhiều giải pháp, tùy vào hoàn cảnh ứng dụng. Ví dụ, nếu mảng users được lấy từ cơ sở dữ liệu (CSDL) thì tốt nhất nên để CSDL tự sắp xếp trước khi trả về cho ứng dụng Node.js.
Về nguyên tắc là không nên để ứng dụng Node.js (ứng dụng trực tiếp xử lý request từ người dùng) phải thực hiện một tác vụ quá lâu.
Callback có lẽ là khái niệm mà chắc hẳn ai học Nodejs đều phải biết. Tuy nhiên, cách sử dụng như nào cho đúng thì mỗi người một cách. Trong Node.js, callback là cách để cách thành phần bất đồng bộ tương tác với nhau.
Một vấn đề phổ biến của Node.js mà các bạn developer ít kinh nghiệm hay mắc phải đó chính là gọi Callback nhiều lần.
Thông thường, một API bất đồng bộ sẽ có một tham số cuối cùng là một hàm, được sử dụng task được thực hiện bởi API hoàn thành.
module.exports.verifyPassword=function(user, password, done){ if(typeof password !== ‘string’){ done(new Error(‘password should be a string’)) return } computeHash(password, user.passwordHashOpts,function(err, hash){ if(err){ done(err) return } done(null, hash === user.passwordHash) })}
Bạn nhìn đoạn code trên có thấy điều gì lạ không?
Tại sao lại phải sử dụng từ khóa return dưới mỗi callback vậy? Lý do họ làm như vậy vì khi gọi callback không làm kết thúc hàm, chương trình vẫn tiếp tục thực hiện các lệnh bên dưới. Đó là điều không đúng logic.
Tuy nhiên, nhìn việc return không có giá trị trả về cứ thế nào ấy. Mặc dù, trong các hàm kiểu bất đồng bộ thì việc return giá trị không có nhiều ý nghĩa lắm, ngoại trừ việc dùng return để kết thúc hàm.
Thay vào đó, chúng ta có thể return chính hàm callback, nhìn code sẽ đẹp hơn nhiều.
Sử dụng Callback lồng nhau tới mức mất kiểm soát, người ta gọi là “callback hell”. Đây là một bad smell cực tệ với các ứng dụng Node.js, làm cho việc bảo trì mã nguồn trở nên vô vàn khó khăn. Mình cũng đã có hẳn một bài viết riêng về Callback hell và cách xử lý. Các bạn có thể tham khảo: 6 cách “trị” callback hell trong javascript
Ví dụ một callback lồng nhau:
function handleLogin(..., done){ db.User.get(...,function(..., user){ if(!user){ return done(null, ‘failed to log in’) } utils.verifyPassword(...,function(..., okay){ if(okay){ return done(null, ‘failed to log in’) } session.login(...,function(){ done(null, ‘logged in’) }) }) })}
Có nhiều cách để xử lý callback lồng nhau, trong bài viết ở trên, mình có giới thiệu 6 cách để xử lý callback lồng nhau.
Nhân tiện bài viết này, mình giới thiệu thêm một cách nữa. Đó là sử dụng tiện ích Async.js:
Kỹ thuật bất đồng bộ với Callback tuy không phải là kỹ thuật chỉ có trên Javascript hay Node.js. Nhưng dường như sự phổ biến đã biến nó trở thành “tiêu chuẩn”. Giống như việc nói tới lập trình hướng đối tượng là người ta nghĩ ngay tới java vậy.
Với nhiều developer quen với các ngôn ngữ chạy đồng bộ như PHP, Java… Thì có xu hướng viết code đồng bộ trong Node.js. Và họ sử dụng Callback như một công cụ để viết code đồng bộ.
Tuy nhiên, Callback trong Javascript có thể không hoạt động như ý muốn của bạn.
Tham khảo đoạn code bên dưới:
function testTimeout(){ console.log(“Begin”) setTimeout(function(){ console.log(“Done!”) }, duration *1000) console.log(“Waiting..”)
}
Như đoạn code trên thì màn hình sẽ in log theo thứ tự như sau, có vẻ không đúng thứ tự phải không?
'Begin''Waiting..''Done!'
Bất kể điều gì bạn muốn thực hiện sau callback đều phải được gọi bên trong hàm đó.
#Nhầm lẫn giữa “exports” và “module.exports”
Node.js coi mỗi một file javascript là một module nhỏ, độc lập với các file khác. Người ta gọi là tính đóng gói. Để một hàm trong file javascript có thể được sử dụng bởi file thì bạn cần phải export nó ra.
Giả sử trong package của bạn có 2 file javascript: one.js và two.js
Để two.js có thể gọi một hàm verifyPassword(...) trong one.js thì nó phải được export.
Tuy nhiên, làm thế nào để export trực tiếp hàm verifyPassword() mà không phải định nghĩa nó như một thuộc tính của one.js? Câu trả lời là sử dụng module.export
Nhìn có vẻ đơn giản vậy thôi nhưng sự khác nhau giữa exports và module.exports đang trở thành chủ đề bàn tán của rất nhiều Node.js developer.
#Throwing Errors bên trong Callbacks
Javascript cũng có Exception như bao ngôn ngữ khác như Java, C++. Bạn hoàn toàn có thể “Throw” hoặc try-catch một Exception.
Ví dụ như đoạn code dưới đây, try-catch sẽ bắt được Exception.
function slugifyUsername(username){ if(typeof username === ‘string’){ thrownew TypeError(‘expected a string username, got '+(typeof username)) } // ...}try{ var usernameSlug = slugifyUsername(username)}catch(e){ console.log(‘Oh no!’)}
Tuy nhiên, try-catch lại hoạt động không như mong đợi trong trường hợp của hàm bất đồng bộ.
Ví dụ, bạn muốn đoạn code an toàn, không bị crash khi có Exception, nên bạn thêm try-catch cho cả một đoạn code lớn. Mà trong đó có nhiều hàm bất đồng bộ. Thì try-catch sẽ không hoạt động đúng.
Như trong trường hợp này, khi callback b.User.get(...) có lỗi mà bạn lại throw lỗi thì các Exception của các hàm tiếp theo sẽ không thể catch được nữa.
#Sử dụng Console.log một cách bừa bãi
Trong Node.js, Console.log cho phép bạn in tất cả mọi thứ ra màn hình console. Không giống như Java, bạn chỉ có thể truyền vào một String. Với Console.log, bạn có thể truyền vào một Object, nó sẽ in ra dưới dạng một Object theo đúng nghĩa đen.
Chính vì Console.log tiện lợi như vậy nên nhiều bạn developer sử dụng console.log ở khắp mọi nơi. Tuy nhiên, bạn nên tránh việc đặt console.log ở tất cả mọi nơi để debug. Sau này không cần thì comment nó lại.
Thay vào đó, bạn nên sử dụng một thư viện hỗ trợ đặt log. Tùy thuộc vào hình thức bạn release sản phẩm như: release chính thức, hay debug… mà bật/tắt việc in các log một cách tự động thay vì phải đi xóa console.log thủ công.
Với sự bùng nổ của cuộc cách mạng công nghiệp 4.0 ngày nay, các nhu cầu liên quan tới lĩnh vực Công nghệ cũng ngày càng tăng lên chóng mặt. Trường đại học là nơi đào tạo ra các lập trình viên tương lai, bạn có đang phân vân khi lựa chọn các trường Đại học đào tạo ngành IT – Công nghệ thông tin tốt và phù hợp với mình?
Trong bài viết này TopDev sẽ giới thiệu đến các bạn học sinh, sinh viên các trường Đại học công nghệ thông tin với chất lượng đào tạo tốt và uy tín ở TPHCM, Hà Nội và một số tỉnh thành khác để bạn có thêm nhiều lựa chọn khi quyết định theo đuổi con đường trở thành lập trình viên của mình.
Bài viết chỉ mang tính chất tham khảo và liệt kê, thứ tự trong bài không mang tính chất xếp hạng các trường nhé. Còn bây giờ chúng ta bắt đầu thôi!
Top 10 trường đào tạo ngành công nghệ thông tin tốt nhất hiện nay
Cùng TopDev tìm câu trả lời cho câu hỏi: Công nghệ thông tin học trường nào ngay bây giờ.
Đại học Bách Khoa Hà Nội
Một trong các trường đại học công nghệ thông tin top đầu Việt Nam – Đại học Bách Khoa Hà Nội
Được đánh giá là 1 trong top trường đào tạo công nghệ thông tin Hà Nội và là đại học kỹ thuật đa ngành trọng điểm của Việt Nam, là thành viên của Hiệp hội các trường đại học kỹ thuật hàng đầu của Châu Á – Thái Bình Dương AOTULE (Asian-Oceania Top University League on Engineering) cũng đủ khẳng định chất lượng giảng dạy của Đại học Bách Khoa Hà Nội.
Khoa Công nghệ Thông tin (tiền thân của Viện Công nghệ Thông tin và Truyền thông ngày nay) – Đại học Bách khoa Hà Nội được thành lập vào tháng 3 năm 1995, trên cơ sở sáp nhập 03 đơn vị thuộc Trường: Khoa Tin học, Phòng thí nghiệm chuyên đề xử lý tin (Khoa điện tử – viễn thông), và Trung tâm máy tính và tin học ứng dụng. Tại thời điểm thành lập, là một trong bảy khoa công nghệ thông tin trọng điểm được thành lập tại Việt Nam.
Trường đã đầu tư cơ sở vật chất tiện nghi, hiện đại phục vụ cho công tác dạy học và nghiên cứu khoa học
Bởi độ hot cũng như chất lượng giảng dạy tốt, ĐH Bách Khoa Hà Nội lấy điểm chuẩn khá cao: 28.29 điểm ngành Khoa học máy tính và 29.42 điểm ngành Khoa học máy tính (năm 2023), có thể thấy tỉ lệ cạnh tranh hết sức khắc nghiệt.
Ở cả hai bảng xếp hạng danh giá THE và QS, lĩnh vực Khoa học Máy tính, Đại học Bách khoa Hà Nội đều đứng thứ nhất Việt Nam và top 1000 đại học tốt nhất thế giới, sánh vai với một số trường đại học uy tín ở các nước phát triển tiên tiến, như: The University of Georgia (Mỹ), Technische Universität Braunschweig (Đức), Université de Bordeaux (Pháp), Université Laval (Canada), La Trobe University (Úc)…
Mức học phí cập nhật mới nhất năm 2024 của ĐH Bách khoa Hà Nội là từ 24 – 30 triệu đồng/năm cho chương trình chuẩn và tăng không quá 10% mỗi năm.
Trường Đại học Công nghệ Thông tin – Đại học Quốc gia TP.HCM
Một trong các trường đào tạo công nghệ thông tin tại Tp. Hồ Chí Minh, không thể không nhắc đến trường ĐH Công nghệ thông tin – Đại Học Quốc Gia TPHCM. Thành lập từ năm 2006, Trường Đại học Công nghệ thông tin đã sớm khẳng định vị thế của mình trong công tác giảng dạy và đào tạo về IT. Với cơ sở vật chất thuộc hàng khủng và cập nhật theo xu hướng mới cùng với việc đào tạo kết hợp nghiên cứu, Nhà trường hướng đến việc phát huy năng lực của từng sinh viên.
“Toàn diện, sáng tạo, phụng sự” – Đây cũng là giá trị cốt lõi trong vận hành và phát triển của nhà trường, giúp xác lập vị trí là trường Đại học hàng đầu trong lĩnh vực CNTT tại Việt Nam. Khẳng định là nơi đào tạo sinh viên phát triển toàn diện cả về kiến thức, kỹ năng chuyên môn lẫn thái độ sống tích cực phục vụ cộng đồng, năng động – bản lĩnh – tự tin hội nhập quốc tế.
Đại học Công nghệ thông tin còn liên kết với các tập đoàn hàng đầu như IBM, Microsoft, SunJava… nên rất chú trọng việc dạy tiếng Anh với những chương trình học theo chuẩn quốc tế. Sau khi tốt nghiệp, sinh viên sẽ nhận được chứng chỉ quốc tế, giúp việc ứng tuyển vào các tập đoàn, công ty nước ngoài được dễ dàng hơn.
Nếu bạn muốn theo chuyên ngành Kỹ thuật phần mềm, An toàn thông tin, Thương mại điện tử và nhất là Khoa học máy tính thì nhất định không thể bỏ qua Đại học Công nghệ Thông tin của Đại Học Quốc gia TP. HCM.
Tổng thể khuôn viên rộng rãi của Đại học Công nghệ Thông tinKhông gian tự học tại Thư viện của UIT
Năm 2024, Nhà trường tuyển sinh các ngành với bốn hình thức: Tuyển thẳng và ưu tiên xét tuyển (25% chỉ tiêu); xét tuyển dựa trên điểm thi (thi đánh giá năng lực, thi tốt nghiệp THPT, 60% chỉ tiêu); xét tuyển chứng chỉ quốc tế uy tín (15% chỉ tiêu); xét tuyển theo tiêu chí riêng (chương trình liên kết với Đại học Birmingham City, Anh).
Về điểm chuẩn thì trường ở mức khá cao, từ 2021 – 2022 – 2023, ngành Công nghệ thông tin lấy lần lượt là 27.3 – 27.9, 26.9 ngành An toàn thông tin là 27 – 26.95, 26.3 và ngành Kỹ thuật phần mềm với 27.7 – 25.55 – 26.9. Nhưng bù lại cách cửa cơ hội việc làm cho các bạn sau khi ra trường sẽ rất rộng mở.
Hiện trường Đại học CNTT chưa công bố học phí chính thức năm 2024, bạn có thể tham khảo học phí của trường vào năm 2023 là khoảng từ 30 triệu đến 150 triệu và tăng không quá 10%, học phí sẽ phụ thuộc vào chương trình đào tạo mà bạn chọn (đại trà, hệ tiên tiến,…)
Thông tin liên hệ:
Địa chỉ: Khu phố 6, P.Linh Trung, Tp.Thủ Đức, Tp.Hồ Chí Minh
Ngành công nghệ thông tin học trường nào? Trường Đại học Sư phạm Kỹ thuật TP.HCM
Trường Đại học Sư phạm Kỹ thuật TP.HCM (HCMUTE) là một trong những trường đại học hàng đầu tại Việt Nam về đào tạo ngành Công nghệ Thông tin. Được thành lập năm 1962, HCMUTE không chỉ nổi tiếng với các ngành sư phạm kỹ thuật mà còn là địa chỉ tin cậy cho các bạn trẻ yêu thích và muốn theo đuổi ngành Công nghệ Thông tin. Với những ưu điểm nổi bật như:
Chương trình đào tạo chất lượng: HCMUTE cung cấp chương trình đào tạo hiện đại, liên kết chặt chẽ với các doanh nghiệp hàng đầu trong và ngoài nước, giúp sinh viên có cơ hội tiếp cận với công nghệ mới nhất và được thực hành thực tế.
Đội ngũ giảng viên: Trường sở hữu đội ngũ giảng viên có trình độ cao, nhiều kinh nghiệm và nhiệt huyết trong giảng dạy và nghiên cứu.
Cơ sở vật chất hiện đại: HCMUTE đầu tư mạnh mẽ vào cơ sở vật chất với các phòng thí nghiệm, thực hành hiện đại, đáp ứng tốt nhu cầu học tập và nghiên cứu của sinh viên.
Hợp tác quốc tế: Trường có nhiều chương trình hợp tác quốc tế, trao đổi sinh viên với các trường đại học uy tín trên thế giới.
Bên trong các dãy phòng học trường SPKT TPHCM
Học phí trường Đại học Sư phạm kỹ thuật TP.HCM được chia thành 3 hệ đào tạo như sau:
Hệ đại trà: 17.500.000-19.500.000/năm
Hệ chất lượng cao (tiếng Việt): 28.000.000-30.000.000/năm
Hệ chất lượng cao (tiếng Anh): 32.000.000/năm
Đối với hệ đại trà, học phí sẽ tăng mỗi năm 10%, với hai hệ chất lượng cao còn lại, thì học phí sẽ cố định qua mỗi năm.
Điểm chuẩn nhóm ngành Công nghệ thông tin năm 2023 của trường ĐH Sư phạm Kỹ thuật TPHCM là 25.98 – 26.64 tùy thuộc vào chương trình đào tạo.
Thông tin liên hệ:
Trụ sở chính: 1 Võ Văn Ngân, Phường Linh Chiểu, TP. Thủ Đức, TP.HCM.
Trường Đại học Bách khoa – Đại học Quốc gia TP.HCM
Công nghệ thông tin trường nào? Trường Đại học Bách khoa – Đại học Quốc gia TP.HCM
Để tiếp tục trả lời câu hỏi được nhiều bậc phụ huynh và học sinh quan tâm: Học công nghệ thông tin, trường nào tốt? Cùng TopDev giải mã ẩn số tiếp theo…
Là 1 trong những trường đại học trọng điểm, Đại học Bách Khoa TP.HCM luôn nằm trong top những đại học kỹ thuật và công nghệ hàng đầu tại miền Nam Việt Nam. Ngoài tuổi đời và danh tiếng của mình, trường còn là nơi đào tạo ra rất nhiều tài năng cho đất nước với hàng loạt giải thưởng lớn nhỏ trong và ngoài nước.
Nếu bạn muốn có cơ hội lớn khi học tập và làm việc trong môi trường quốc tế, đại học Bách khoa TP.HCM sẽ giúp bạn khi trường liên kết với nhiều đại học giảng dạy trong lĩnh vực công nghệ thông tin trên thế giới.
Cơ sở vật chất siêu hiện đại của HCMUTNhà Thi đấu thể dục thể thao Bách khoa với diện tích 3.000 m2
Vì chất lượng giảng dạy và học thuộc hàng đầu tại Việt Nam, nên điểm chuẩn cũng thuộc top cao nhất khu vực miền Nam. Năm 2023 ngành Khoa học Máy tính là 28; ngành Kỹ thuật máy tính 27,35.
Nếu bạn cảm thấy mình thực sự đam mê với ngành công nghệ thông tin thì hãy chọn đại học Bách khoa làm bến đỗ của mình. Tuy nhiên, chương trình đào tạo của trường khá nặng, nhưng không sao, ‘có công mài sắt có ngày nên kim’ mà. Sau khi tốt nghiệp bạn sẽ dễ dàng tìm được công việc phù hợp theo mong muốn của mình vì tấm bằng của đại học Bách khoa TP.HCM thực sự rất có trọng lượng.
Học phí dự kiến năm 2024 của trường Đại học Bách khoa TP HCM là 40 – 80 triệu đồng một năm.
Thông tin liên hệ:
Địa chỉ:
Cơ sở 1: 268 Lý Thường Kiệt, Quận 10, TP.HCM
Cở sở 2: Khu đô thị Đại học Quốc Gia TP. HCM, Thành phố Thủ Đức, TP.HCM
Trường Đại học Khoa học tự nhiên – Đại học Quốc gia TP.HCM
Được tách ra từ Đại học Tổng hợp TP. HCM từ năm 1996, Đại học Khoa tự nhiên TP.HCM (HCMUS) là đơn vị hàng đầu trong việc nghiên cứu và phát triển lĩnh vực Công nghệ thông tin.
Với Khoa Công nghệ thông tin và các ngành liên quan như Khoa toán tin, các sinh viên của trường sẽ luôn được trang bị vốn kiến thức vững chắc cũng như được rèn luyện khả năng tư duy phân tích dựa trên chương trình bài bản và chuyên sâu. Trải qua hơn 25 năm hoạt động, Khoa đã phát triển vững chắc và được Chính phủ bảo trợ để trở thành một trong những khoa CNTT đầu ngành trong hệ thống giáo dục đại học của Việt Nam.
Cũng giống như các trường CNTT hàng đầu, trường cũng được tài trợ khá nhiều bởi các doanh nghiệp và tập đoàn lớn bên cạnh các chuyên gia quốc tế đến để trực tiếp đánh giá nên chất lượng các chương trình học luôn thuộc hạng tiên tiến nhất trong khu vực.
Ngoài ra khi học tại Đại học Khoa học tự nhiên, bạn sẽ luôn tìm thấy những sân chơi bổ ích để nâng cao năng lực và bản lĩnh của mình qua các cuộc thi về CNTT trong và ngoài nước.
Nếu bạn muốn theo học các chuyên ngành hot nhất của Công nghệ thông tin như trí tuệ nhân tạo AI, nghiên cứu chế tạo robot, lập trình điều khiển tự động hóa thì chắc chắn Đại học Khoa học tự nhiên sẽ là nơi rất tuyệt cho bạn.
Hiện nay, trường còn thành lập các phòng nghiên cứu chuyên về mảng Trí tuệ nhân tạo với AILab hay câu lạc bộ Robotics cực tiên tiến đảm bảo bạn sẽ có khoản thời gian đầy thú vị khi tham gia bên cạnh những giờ học tập.
Điểm chuẩn tham khảo 2023: 26 – 28.05 điểm tùy thuộc vào chuyên ngành và chương trình đào tạo
Học phí tham khảo: 20 – 50 triệu đồng/năm
Thông tin liên hệ:
Địa chỉ:
Cơ sở 1: 227 Nguyễn Văn Cừ, Phường 4, Quận 5, TP.HCM
Cơ sở 2: Linh Xuân, Phường Linh Trung, Quận Thủ Đức, TP.HCM
Điện thoại: (028) 62884499
Website: https://www.hcmus.edu.vn/
Học viện Công nghệ Bưu chính Viễn thông
IT học trường nào? Học viện Công nghệ Bưu chính Viễn thông
Học viện Bưu chính viễn thông được thành lập từ năm 1997, là một trong các trường có ngành công nghệ thông tin đáng cân nhắc và lựa chọn, hiện trường có 3 cơ sở tại Hà Nội, TP. HCM và Thái Nguyên.
Với đội ngũ giảng viên nhiều năm kinh nghiệm thực tế tại học viện, bạn sẽ được đào tạo một cách bài bản. Tuyệt vời hơn, hệ thống mạng lưới viễn thông và công nghệ thông tin phủ sóng cả nước của VNPT là môi trường hoàn hảo cho các hoạt động đào tạo và khoa học công nghệ gắn liền với thực tiễn với các giáo viên giảng dạy và sẽ truyền đạt cho các bạn những bài học thực tế.
Samsung Lab được đánh giá là một trong những phòng Lab xịn nhất Học viện.
Danh tiếng của Học viện Bưu chính viễn thông cũng được nhiều người biết đến khi các tân cử nhân luôn được đánh giá cao và bạn sẽ có nhiều cơ hội xin việc khi ra trường. Do đó điểm chuẩn của trường cũng khá cao. Năm 2022, khu vực phía Bắc của trường lấy điểm chuẩn ngành Công nghệ thông tin là 27.25, An toàn thông tin là 26.70. Ở khu vực phía Nam năm 2022, ngành Công nghệ thông tin lấy 25.85 điểm, An toàn thông tin lấy 25.05 điểm.
Nếu bạn có thành tích học tập khá và có đam mê với các ngành nghề liên quan với Công nghệ thông tin, đây sẽ là nơi để bạn yên tâm phát triển cho tương lai vững chắc của mình.
Thông tin liên hệ:
Địa chỉ:
Trụ sở chính: 122 Hoàng Quốc Việt, Q.Cầu Giấy, Hà Nội.
Học viện cơ sở tại TP.HCM: 11 Nguyễn Đình Chiểu, P. Đa Kao, Q.1 TP Hồ Chí Minh
Cơ sở đào tạo tại TP.HCM: Đường Man Thiện, P. Hiệp Phú, Q.9 TP Hồ Chí Minh
Cơ sở đào tạo tại Hà Nội: Km10, Đường Nguyễn Trãi, Q.Hà Đông, Hà Nội
Điện thoại: 024 3756 2186
Website: https://portal.ptit.edu.vn/
Đại Học FPT
ĐH FPT TP HCM là một trong những công trình có kiến trúc xanh bậc nhất Sài Thành
Nhận giải thưởng trường Đại học đào tạo Công nghệ Thông tin xuất sắc tại Châu Á năm 2018 do ASOCIO Award trao tặng, đại học FPT đã nhanh chóng trở thành 1 trong những nơi hàng đầu về giảng dạy ngành Công nghệ Thông tin khi chỉ mới được thành lập hơn 10 năm.
Ngoài việc được các giảng viên giàu kinh nghiệm & chuyên gia từ các doanh nghiệp trong lĩnh vực trực tiếp giảng dạy, các bạn sinh viên còn có nhiều cơ hội được đi xuất ngoại để tham gia các thực tập nước ngoài (On-The-Job Training hay OJT) rất hữu ích. Các bạn còn được đào tạo kỹ về ngoại ngữ từ rất sớm để có thể làm việc ở những công ty nước ngoài.
Thêm nữa, toàn bộ sinh viên sẽ được thực tập ngay tại doanh nghiệp để cọ xát. Tốt nghiệp xong, bạn còn có thể làm việc luôn tại các công ty của tập đoàn FPT như FPT Software chẳng hạn.
Đặc biệt, bên cạnh các hình thức xét tuyển truyền thống, FPT còn đưa ra hình thức xét kết quả xếp hạng học sinh THTP dựa vào xếp hạng SchoolRank (công cụ xếp hạng năng lực học tập của học sinh THPT toàn quốc do Đại học FPT xây dựng và phát triển). Theo đó, điểm chuẩn của Đại học FPT là TOP40 Schoolrank theo học bạ (40% học sinh THPT có năng lực học tập tốt nhất cả nước) và TOP40 Schoolrank theo điểm thi THPT (40% học sinh có kết quả thi Đại học tốt nhất cả nước).
Địa chỉ:
Cơ sở Hà Nội:Khu Giáo dục và Đào tạo – Khu Công nghệ cao Hòa Lạc – Km29 Đại lộ Thăng Long, H. Thạch Thất, TP. Hà Nội
Cơ sở TP. HCM: Lô E2a-7, Đường D1 Khu Công nghệ cao, P. Long Thạnh Mỹ, TP. Thủ Đức, TP. Hồ Chí Minh
Cơ sở Đà Nẵng: Khu đô thị công nghệ FPT Đà Nẵng, P. Hoà Hải, Q. Ngũ Hành Sơn, TP. Đà Nẵng
Cơ sở CẦN THƠ: Số 600 Đường Nguyễn Văn Cừ (nối dài), P. An Bình, Q. Ninh Kiều, TP. Cần Thơ
Cơ sở QUY NHƠN: Khu đô thị mới An Phú Thịnh, Phường Nhơn Bình & Phường Đống Đa, TP. Quy Nhơn, Bình Định
Website: https://daihoc.fpt.edu.vn/
Học viện Kỹ thuật Quân sự (Đại học Kỹ thuật Lê Quý Đôn)
Giống như Đại học Bách Khoa Hà Nội, đại học Kỹ thuật quân sự cũng đào tạo với hệ 4 và 5 năm, được đánh giá cao trong top đầu cả nước, đảm bảo khi tốt nghiệp sẽ có việc làm và mức lương cao.
Đại học Kỹ thuật Lê Quý Đôn là viện đại học kỹ thuật tổng hợp, đa ngành, đa lĩnh vực trực thuộc Bộ Quốc phòng Việt Nam. Sứ mạng của nhà trường là đào tạo nguồn nhân lực chất lượng cao, nghiên cứu phát triển, sản xuất chế thử, chuyển giao công nghệ tiên tiến và hội nhập quốc tế, góp phần đắc lực vào sự nghiệp xây dựng và bảo vệ Tổ quốc, phát triển ngành khoa học công nghệ quân sự Việt Nam.
Phòng huấn luyện thực hành bộ môn An toàn thông tin.
Đội ngũ giảng viên của trường cũng rất hùng hậu với nhiều phó giáo sư và tiến sĩ, chương trình giảng dạy các chuyên ngành Công nghệ thông tin được trường sử dụng cũng theo chuẩn kiểm định quốc tế, các bạn có thể yên tâm học tập những kiến thức thiết thực để yên tâm đi làm khi ra trường.
Trong Cuộc đua số 2017 do FPT tổ chức cho sinh viên các trường Công nghệ thông tin toàn quốc, Học viện còn giành chức vô địch khẳng định chất lượng giảng dạy rất tốt, ngang ngửa với trường Đại học Bách Khoa về việc đào tạo.
Thông tin liên hệ:
Địa chỉ : 236 Hoàng Quốc Việt, Bắc Từ Liêm, Hà Nội
Điện thoại: 069.515200
Website: https://mta.edu.vn/
Đại học Công Nghệ (UET) – Đại Học Quốc Gia Hà Nội
Đại học Công nghệ dù chỉ mới được thành lập vào năm 2004 nhưng sớm đã trở thành 1 trong những trường đại học công nghệ thông tin Hà Nội hàng đầu tại Việt Nam về công tác đào tạo , nghiên cứu về công nghệ, kỹ thuật hàng đầu cả nước và từng bước tiếp cận chuẩn mực quốc tế.
Các bạn học tập tại Đại học Công nghệ có thể khá là yên tâm cho tương lai sự nghiệp của mình. Trường đang hợp tác với nhiều trường, viện nghiên cứu lớn trên thế giới giúp các chương trình đào tạo cũng như hỗ trợ phát triển đội ngũ giảng dạy chất lượng cao: Đại học Bang Arizona, Mỹ với dự án BUIL-IT; Đại học Công nghệ Sydney, Úc với Trung tâm Hợp tác nghiên cứu giữa VNU-UTS, chương trình học bổng toàn phần cho nghiên cứu sinh đạt trình độ quốc tế; Chương trình đào tạo IT định hướng thị trường Nhật Bản; Viện nghiên cứu Viettel với chương trình Cử nhân Hàng không Vũ trụ…
Đại học Công nghệ cũng là nơi có nhiều học bổng khuyến khích học tập bởi trường là đối tác tin cậy của những tập đoàn lớn như Samsung, Toshiba,… đó là nguồn động lực không nhỏ để thúc đẩy các bạn sinh viên nỗ lực hết mình, cũng là phấn đấu cho tương lai phía trước.
Ngoài ra việc hợp tác với các doanh nghiệp như Samsung, Viettel, FPT, Toshiba, VNPT cũng giúp các phòng thực hành đặt tiêu chuẩn, phòng nghiên cứu hợp tác về IoT, thiết kế vi mạch, hệ thống nhúng…
Điểm trúng tuyển ngành Công nghệ thông tin những năm gần đây ngày càng tăng. Năm 2022 và 2023, điểm chuẩn ngành Công nghệ thông tin lần lượt là 29.15 và 27.85 nên đây chắc chắn cũng là 1 thách thức không nhỏ cho các bạn học sinh có mong muốn được theo học tại trường.
Trường Đại học Quản lý và Công nghệ TP.HCM (UMT) được Chính phủ cho phép thành lập vào tháng 3/2021 và đặt mục tiêu trở thành một hình mẫu đại học kiểu mới, chuẩn quốc tế, và biểu tượng của giáo dục đại học mang thông điệp “Hạnh phúc và Thành công”. Trong tầm nhìn đó, UMT tập trung đặt sinh viên lên hàng đầu và vượt ra khỏi giới hạn của giảng đường hay những thành công chỉ đo bằng điểm số. Trường đáp ứng hầu hết các mong muốn chọn trường đại học của thế hệ trẻ bằng môi trường giáo dục cởi mở, kết nối toàn cầu, thực tế năng động, trải nghiệm thú vị, tôn trọng sự khác biệt, cơ sở vật chất hiện đại và tương lai tươi sáng.
UMT có sáu ngành đào tạo chủ lực, trong đó Công nghệ thông tin là một ngành rất quan trọng. Khoa Công nghệ thông tin được dẫn dắt bởi PGS. TS. Trần Đan Thư – một nhà giáo ưu tú có nhiều kinh nghiệm trong lĩnh vực công nghệ từ khi còn trên giảng đường đại học. Với sự dẫn dắt của PGS. TS. Trần Đan Thư, Khoa Công nghệ thông tin tại UMT trở thành gương mặt sáng giá trong top các trường đào tạo ngành công nghệ thông tin tốt nhất hiện nay.
Hội trường UMT với sức chứa gần 500 người, được đầu tư âm thanh ánh sáng, sân khấu chuyên nghiệp.
Chương trình Công nghệ thông tin của UMT được tối ưu hóa cho từng sinh viên trong quá trình học, đảm bảo đào tạo chuẩn xác, thành công và chất lượng tốt nhất. Khoa CNTT đáp ứng yêu cầu về nghiên cứu phát triển cũng như ứng dụng công nghệ thông tin trong thực tiễn. Sinh viên được trang bị kiến thức và kỹ năng cần thiết để làm việc trong môi trường công nghệ thông tin đa dạng và thúc đẩy sự phát triển bền vững của ngành này.
Năm nay, UTM tuyển sinh với 4 hình thức là: Xét học bạ THPT; Xét tuyển thẳng theo quy định của trường; Xét kết quả thi đánh giá năng lực của ĐHQGHCM năm 2023; Xét tuyển thẳng theo quy chế tuyển sinh của Bộ Giáo dục và Đào tạo.
Thông tin liên hệ:
Địa chỉ: Đường 60CL, Khu đô thị Cát Lái, Phường Cát Lái, TP. Thủ Đức, TP.HCM
Điện thoại: +84 28 3636 9119
Website: https://www.umt.edu.vn/
Lời Kết
Trên đây là một số thông tin về các trường đại học có ngành công nghệ thông tin và có được đánh giá tốt nhất hiện nay. Tuy nhiên, vẫn còn rất nhiều các đơn vị đào tạo IT khác đang ngày càng đổi mới công nghệ và chất lượng giảng dạy, mang đến nhiều sự lựa chọn cho các bạn học sinh mong muốn theo lĩnh vực này.
Ngoài các trường đại học, các bạn cũng có thể theo học tập ở các trường cao đẳng hay trung tâm dạy nghề, tùy vào năng lực và khả năng của mình. Có rất nhiều con đường để thành công trên sự nghiệp, chỉ cần siêng năng, chăm chỉ và luôn cập nhật những cái mới trong thời đại công nghệ, chắc chắn sớm hay muộn các bạn cũng sẽ đạt được thành tựu cho riêng mình.
Hy vọng qua bài viết trên sẽ giúp các bạn tham khảo về các trường đại học đào tạo CNTT tốt và phù hợp với bản thân. Chúc các bạn lập trình viên tương lai có 1 kết quả thi thật tốt và sớm đạt được nhiều thành tựu nhé!
Bạn cũng có thể tham khảo các vị trí tuyển dụng IT Parttime, Việc làm IT Intern cho các sinh viên đang muốn học hỏi nâng cao trình độ thực chiến ngành Dev tại đây. Hoặc vào web TopDev, tìm các vị trí cho sinh viên đều có hết nhé!
Bài viết được sự cho phép của tác giả Tống Xuân Hoài
Vấn đề
Node.js nổi tiếng với vai trò là môi trường chạy mã Javascript trên máy chủ. Nhắc đến Node không thể không nhắc đến V8 Engine cho khả năng xử lý JS mạnh mẽ, cộng với sức mạnh của C++ vốn là ngôn ngữ tạo nên nó. Node.js được cung cấp miễn phí, dễ dàng cài đặt và triển khai. Cộng đồng dùng Node rất đông cũng góp phần tạo nên sự nổi tiếng và tin tưởng.
Tuy nhiên gần đây một cái tên khác nổi lên như một hiện tượng “đe doạ” đến Node.js chính là Bun.sh. Vậy thì Bun.sh là gì và tại sao lại khiến Node.js phải dè chừng thì mời các bạn hãy đọc tiếp bài viết dưới đây.
Bun.sh là gì?
Trước tiên phải nói rằng Bun.sh cũng chính là môi trường chạy mã Javascript tương tự như Node.js. Mục tiêu của Bun là chạy được hầu hết mã JavaScript “bên ngoài trình duyệt”, mang lại những cải tiến về hiệu suất và độ phức tạp cho cơ sở hạ tầng tương lai, cũng như năng suất của các nhà phát triển thông qua một công cụ tốt hơn, đơn giản hơn.
Bun.sh không sử dụng V8 làm Javascript Engine như Node mà nó dùng JavascriptCore vốn là Engine của trình duyệt Safari. Ngoài ra Bun được viết bằng Ziglang mà họ giới thiệu là một ngôn ngữ bậc thấp (low-level) với quản lý bộ nhớ thủ công. Điều này giúp cho chi phí sử dụng tài nguyên của Bun thấp và hiệu năng cũng tăng thêm đáng kể.
Bun.sh triển khai lại hầu hết các thứ như trình biên dịch JSX/TypeScript, npm client, bundler, SQLite client, HTTP client, WebSocket client… Và tất cả đều là cây nhà lá vườn do họ tự tay phát triển.
Ngoài ra Bun cũng triển khai thuật toán phân giải modules của Node bao gồm cả node_modules nên bạn có thể cài đặt và sử dụng các gói có trên npm giống như Node. ESM và CommonJS đều được hỗ trợ tuy nhiên Bun sử dụng ESM làm mặc định.
Bun triển khai đến 90% các API của Node (N-API) nên hầu như các module hoặc native module viết cho Node đều sẽ hoạt động với nó.
Bun trở nên đáng gờm bởi tốc độ. Ngoài việc tận dụng được hầu hết các tính năng giống như của Node nên Bun giúp bạn gần như có thể chạy được hầu hết ứng dụng viết bằng Node, nhưng Bun còn cho tốc độ tốt hơn cả.
Theo lời nhà phát triển Bun, sử dụng lệnh bun run thay cho npm run sẽ tiết kiệm được 160ms cho mỗi lần chạy. bun install cũng nhanh hơn 20x lần so với yarm là do Bun sử dụng “the fastest system calls” mà họ tự triển khai.
Ngoài ra là một vài hình ảnh Benchmarks so sánh tốc độ HTTP request Bun với hai môi trường chạy mã JS thông dụng là Node và Deno thì nó cũng cho con số ấn tượng.
Điều hạn chế của Bun đó là một công cụ mới đang còn trong giai đoạn phát triển, chưa có bản phát hành ổn định nên việc sử dụng Bun trong môi trường Production là hoàn toàn có thể xảy ra rủi ro. Tuy nhiên với những lợi ích mà Bun mang lại thì nó rất đáng giá để trải nghiệm. Hãy thử dùng Bun biết đâu bạn sẽ lưu được thêm một công cụ đáng giá cho mình thì sao?
Kết luận
Tuy là một công cụ mới tuy nhiên Bun.sh đã và đang gây sự chú ý trong cộng đồng phát triển Node.js. Hy vọng rằng vào một ngày không xa Bun sẽ phát hành phiên bản ổn định, đồng thời giữ vững tốc độ này thậm chí là hơn nữa để cộng đồng ngày càng lớn mạnh hơn.
Với những bạn đang chập chững bước vào nghề lập trình, việc lựa chọn học Front-End hay Back-End là một quyết định khó khăn. Bởi mỗi lựa chọn khác nhau sẽ dẫn đến những thứ cần học khác nhau. Vì vậy, bạn phải hiểu rõ hai lĩnh vực này để xem thử đâu là thứ mình phù hợp nhất rồi mới đưa ra quyết định chính xác. Bài viết này sẽ tổng hợp những thông tin bạn cần về Front-End và Back-End, giúp làm sáng tỏ những thắc mắc của bạn.
Front-end là gì? Back-end là gì?
Front-end là gì?
Front-end là một lĩnh vực trong phát triển web tập trung vào giao diện người dùng. Nhiệm vụ chính của front-end là tạo ra các trang web hấp dẫn, đảm bảo trải nghiệm tốt cho người dùng. Lập trình Front-end sẽ sử dụng các ngôn ngữ như HTML, CSS và JavaScript để xây dựng và tối ưu hóa các thành phần như layout, hình ảnh, màu sắc và hiệu ứng. Front-end đóng vai trò quan trọng trong việc đem lại giao diện thân thiện và hấp dẫn cho người dùng.
Trong lập trình Front-end, có nhiều framework phổ biến được sử dụng để tăng cường hiệu suất và hiệu quả trong quá trình phát triển. Đây là một số framework thường được sử dụng: ReactJS, Angular, VueJS, jQuery, EmberJS,… Bên cạnh đó, bạn cần phải biết một số kỹ năng về thiết kế đồ họa, UI/UX, cách thiết kế giao diện responsive,…
Back-end là gì?
Back-end là một phần quan trọng trong phát triển web, chịu trách nhiệm xử lý 3 nhóm công việc chính là tương tác với cơ sở dữ liệu, xử lý dữ liệu và giải quyết các vấn đề liên quan đến sever. Bên cạnh đó, back-end đảm bảo việc tương tác xử lý dữ liệu và tạo ra API để giao tiếp với front-end. Nó đóng vai trò quan trọng trong việc xây dựng ứng dụng web chất lượng và bảo mật. Một lập trình viên Back-end có thể sẽ làm việc với các ngôn ngữ như PHP, Python, Ruby, Node.js và cơ sở dữ liệu như MySQL, MongoDB.
Ngoài ra, để thực hiện tốt công việc backend, bạn cần có kiến thức về các framework như Django, ASP.NET MVC, Spring,… Kiến thức về một số CMS như WordPress, Umbraco, Joomla,…
Lập trình Front-end hay Back-end sẽ phù hợp với bạn?
Bạn phù hợp với lập trình Backend hơn hay Frontend, đây là một câu hỏi rất khó để trả lời. Mỗi lĩnh vực này đều có những đặc điểm riêng và cung cấp những cơ hội phát triển đáng giá. Dưới đây là một số khía cạnh cần được xem xét giúp bạn đưa r quyết định chính xác hơn.
Xem xét mục tiêu và định hướng của bản thân
Để xác định rõ liệu nên học lập trình Frontend hay Backend, hãy cân nhắc theo đam mê và sở thích của bạn, và nhận biết thế mạnh của bản thân để chọn lĩnh vực phù hợp.
Nếu bạn là một lập trình viên mới tốt nghiệp, Frontend là lựa chọn hợp lý để bắt đầu. Lĩnh vực này đơn giản hơn, dễ bắt đầu và có thể làm việc hiệu quả mà không gặp quá nhiều khó khăn. Bạn có thể bắt đầu từ HTML và CSS để xây dựng một trang web tĩnh đơn giản, sau đó học thêm JavaScript hoặc các framework như jQuery để làm cho trang web tương tác hơn.
Sau khi bạn đã có nền tảng kiến thức cơ bản về Frontend, bạn có thể học các ngôn ngữ lập trình Backend hoặc học Fullstack như PHP, .NET hoặc Java. Điều này sẽ giúp bạn xây dựng và quản lý hệ thống phức tạp, xử lý dữ liệu và cung cấp các chức năng mạnh mẽ cho ứng dụng web của bạn.
Cân nhắc về thu nhập của Front-end và Back-end
Theo báo cáo thị trường IT Việt Nam của TopDev 2022, mức thu nhập của lập trình viên back-end khá chênh lệch so với front-end. Cụ thể lập trình viên front-end 3 năm kinh nghiệm có mức lương khoảng 954 USD/tháng, trong khi đó lập trình viên back-end có mức lương đến 1.338 USD/tháng.
Sự chênh lệch về mức lương này là do tính chất công việc của back-end có độ phức tạp hơn hẳn so với front-end. Vậy nên, bạn có thể cân nhắc lựa chọn học Back-end hoặc Full-stack để nhận được mức thu nhập cao sau này.
Front-end và Back-end, cái nào dễ tìm việc hơn?
Nhìn tổng thể, Back-end có thể sẽ có lợi thế hơn trên thị trường bởi yếu tố phức tạp trong công việc, nhiều doanh nghiệp sẵn sàng bỏ ra mức lương cao để chiêu mộ nhân tài. Thêm nữa, lập trình viên back-end yêu cầu phải biết đa dạng các ngôn ngữ lập trình cộng thêm các framework như React, Regular nên cơ hội việc làm sẽ rộng mở hơn.
Tuy nhiên, trong một số trường hợp, việc tìm việc Frontend có thể dễ dàng hơn. Frontend đóng vai trò quan trọng trong trải nghiệm người dùng, do đó, có nhiều công ty và dự án đang tìm kiếm các chuyên gia Frontend để cải thiện giao diện và khả năng tương tác với người dùng cuối.
Điều quan trọng là trang bị cho mình kỹ năng và kiến thức chuyên môn vững vàng trong lĩnh vực mà bạn lựa chọn. Có một portflio hay dự án thực tế sẽ tăng khả năng tìm việc thành công. Ngoài ra, theo dõi xu hướng công nghệ mới và làm việc với các công nghệ phổ biến cũng là yếu tố quan trọng để tăng cơ hội tìm việc trong lĩnh vực Frontend hoặc Backend.
Tóm lại
Việc lựa chọn nên học front-end hay back-end không chỉ dựa trên tiêu chí dễ tìm việc mà còn phụ thuộc vào mục tiêu và đam mê cá nhân. Cả hai lĩnh vực đều có cơ hội việc làm tốt như nhau. Quan trọng nhất là chọn lĩnh vực phù hợp với sở thích và mục tiêu phát triển của bạn sau này. Hãy duy trì đam mê, sẵn sàng học hỏi và luôn nỗ lực để phát triển kỹ năng và thành công trong ngành công nghệ thông tin.
Lập trình viên làm việc trên hệ sinh thái của Apple chắc hẳn không còn xa lạ gì với Xcode, một IDE với đầy đủ các SDK độc quyền dành cho việc xây dựng, phát triển ứng dụng dành cho iPhone, Macbook, iMac, Apple Watch,… Mới đây thì phiên bản mới Xcode 15 được Apple cho ra mắt version beta 2 với nhiều cải tiến nâng cấp đáng giá; bài viết hôm nay chúng ta cùng nhau tìm hiểu về IDE này cũng như một số tips giúp anh em Dev sử dụng Xcode một cách hiệu quả nhất nhé.
Xcode là gì?
Xcode là một IDE (Integrated Development Environment) hay môi trường phát triển tích hợp của Apple được sử dụng để phát triển phần mềm cho macOS, iOS, iPadOS, watchOS và tvOS. Xcode được Apple phát hành vào năm 2003, trải qua hơn 20 năm phát triển, phiên bản mới nhất hiện nay là 15.0 beta 2 được Apple giới thiệu vào 21/6/2023 (phiên bản ổn định chính thức là 14.3.1 phát hành ngày 1/6/2023).
Xcode là một ứng dụng chứa các chương trình cơ bản cho phép người dùng dễ dàng tùy chỉnh để phù hợp với các công việc của mình như trình soạn thảo, trình biên dịch, tài liệu lập trình, công cu tạo máy ảo,… hỗ trợ cho việc phát triển các ứng dụng được thực hiện mạnh mẽ và hiệu quả nhất. Apple cung cấp Xcode hoàn toàn miễn phí thông qua AppStore hoặc bạn cũng có thể tải xuống các phiên bản cũ hơn thông qua website https://xcodereleases.com/
Xcode hỗ trợ nhiều ngôn ngữ lập trình khác nhau như C, C++, Objective-C, Objective-C++, Java, AppleScript, Python, Ruby, ResEdit (Rez) và Swift với nhiều mô hình lập trình khác nhau như Cocoa, Cacbon hay Java. Xcode có thể xây dựng các files nhị phân chứa mã cho nhiều kiến trúc với định dạng Mach-O gọi là universal binary files; nó giúp ứng dụng dễ dàng chuyển đổi từ PowerPC (kiến trúc máy tính Apple) 32-bit sang 64-bit, từ PowerPC sang Intel x86 (kiến trúc máy tính dòng vi xử lý Intel), từ Intel 32-bit sang 64-bit hay từ Intel x86 sang Apple SoC (kiến trúc trên các chip M1, M2 mới nhất của Apple).
Điều này giúp các nhà phát triển phân phối 1 ứng dụng duy nhất cho người dùng và cho phép hệ điều hành tự động chọn kiến trúc phù hợp khi chạy.
Xcode sử dụng bộ công cụ phát triển phần mềm (SDK) iOS, SDK tvOS, SDK watchOS để biên dịch và gỡ lỗi (debug) ứng dụng cho các nền tảng hệ điều hành tương ứng. Nói cách khác, Xcode là công cụ đầy đủ và duy nhất cho việc phát triển ứng dụng cho toàn bộ hệ sinh thái của Apple.
Xcode cũng cung cấp các công cụ tích hợp hỗ trợ để quản lý source code sử dụng Git, có thể kết nối lưu trữ trên các hệ thống phổ biến như GitHub, Bitbucket hay GitLab; lập trình viên có thể sử dụng command-line (dòng lệnh) hoặc thao tác trực tiếp trên UI với các chức năng Xcode cung cấp sẵn cho việc pull, push code một cách nhanh chóng.
Breakpoints là một công cụ hỗ trợ được tích hợp trong Xcode để giúp chúng ta ngưng việc xử lý của chương trình tại một thời điểm. Việc tạm thời dừng xử lý giúp chúng ta có thể đánh giá, kiểm tra, đảm bảo code của chương trình chạy đúng, đồng thời hỗ trợ điều tra dấu vết của bug khi có lỗi xảy ra ngoài ý muốn; chúng ta gọi việc này là Debug.
Bất kỳ đầu dòng nào của Xcode (khi đang mở file) đều có thể đặt breakpoint bằng cách click vào số dòng phía bên trái của khu vực code.
Snippet
Snippet là một tiện ích trong Xcode chứa danh sách các đoạn code có sẵn được Apple đưa vào hoặc do chính lập trình viên chúng ta thiết lập trong project để có thể kéo thả vào và sử dụng. Điều này giúp bạn vừa tiết kiệm được thời gian viết code, lại có thể chuẩn hóa được source code trong dự án một cách dễ dàng hơn.
Kết bài
Như vậy chúng ta đã cùng nhau tìm hiểu về Xcode, những cập nhật mới trên phiên bản Xcode 15 sắp ra mắt cũng như một số gợi ý giúp bạn sử dụng, khai thác IDE này một cách hiệu quả nhất. Còn rất nhiều tính năng và công cụ hữu ích khác được tích hợp trong Xcode mà bạn nên tìm hiểu và khám phá trong quá trình lập trình và làm việc trong dự án. Hy vọng bài viết hữu ích dành cho bạn và hẹn gặp lại các bạn trong các bài viết tiếp theo của mình.
Bài viết được sự cho phép của tác giả Tống Xuân Hoài
Vấn đề
Chúng ta chắc hẳn ai cũng mong muốn kĩ năng code của mình ngày một tốt hơn. Bằng cách học nhiều hơn, làm nhiều hơn để tích luỹ thêm nhiều kinh nghiệm trong xử lý vấn đề. Sau này khi đối mặt với một vấn đề cũ thì có thể giải quyết nó một cách dễ dàng, đơn giản vì khi đó chúng ta đã có kinh nghiệm xử lý chúng.
Nhiều người thường dựa vào số năm kinh nghiệm để đánh giá một người code giỏi hay không. Điều này cũng khá hợp lý trong trường hợp chúng ta có quá ít thời gian để tiếp xúc và đánh giá họ, hay cũng có khả năng là không đủ năng lực để đánh giá. Thực tế vẫn có những người ít tuổi hơn nhưng vẫn có khả năng xử lý vấn đề rất giỏi. Số năm kinh nghiệm lúc này cũng chỉ mang tính tham khảo vì không chắc chắn rằng cứ code lâu hơn sẽ giỏi hơn người code ít hơn.
Như Malcolm Gladwell đã viết trong cuốn sách “Những kẻ xuất chúng” của ông về “10.000 giờ là con số kỳ diệu của sự vĩ đại” tức là bạn sẽ trở nên thực sự giỏi một vấn đề nào đó khi làm việc với nó ít nhất 10.000 giờ. Đến nay con số 10.000 giờ vẫn còn đang gây nhiều tranh cãi, liệu cứ phải trải qua một mốc thời gian đã định thì bạn sẽ giỏi lên hay là còn cách nào khác để vượt qua nỗi ám ảnh của con số này không?
Tư duy lập trình là gì?
Đơn giản đó là cách giải quyết vấn đề bạn gặp phải một cách hiệu quả. Nhưng thế nào là hiệu quả? Điều đó phụ thuộc vào vốn kiến thức và kinh nghiệm của mỗi người.
Nếu cho bạn lựa chọn giữa 3 thứ dao, kéo và liềm để mở một gói Snack bạn sẽ chọn cái nào? Chắc chắn bạn sẽ chọn kéo vì bạn biết kéo là cách đơn giản nhất để mở gói. Nhưng liệu một đứa trẻ sẽ biết lựa chọn thứ tốt nhất trong số chúng? Về cơ bản deo, kéo hay liềm đều có thể mở được gói snack nhưng bạn đã quá rõ về chúng nên bạn biết cách để sử dụng chúng sao cho hiệu quả.
Quay về thế giới của lập trình viên, việc bạn biết cách áp dụng một công cụ, phương pháp… để giải quyết một vấn đề sao cho phù hợp và chính xác nhất đó chính là tư duy lập trình của bạn.
Có một sai lầm phổ biến của những người mới học code là chăm chút vào học (thuộc) mã mà không rèn luyện khả năng tư duy. Có rất nhiều ngôn ngữ mà mỗi ngôn ngữ có rất nhiều cú pháp khiến bạn không thể nhớ hết được. Nhưng khả năng tư duy lại tồn tại xuyên suốt trong các ngôn ngữ.
Để đạt được điều đó đòi hỏi bạn phải bỏ ra một cơ số giờ để tìm hiểu và thực hành hết tất cả kiến thức. Điều đó sẽ mang đến cho bạn tư duy lập trình. Con số 10.000 giờ kia chỉ mang tính tham khảo khi bạn biết mình nên tập trung vào đâu để đến đích nhanh nhất.
Những người có tư duy lập trình tốt thường sẽ có suy nghĩ về cách giải quyết một vấn đề khá giống nhau. Ai cũng từng là thực tập sinh và khi nghe những người có kinh nghiệm hơn nói chuyện với nhau về cách giải quyết một vấn đề nào đó, trông họ có vẻ trao đổi rất trơn tru nhưng mình lại chẳng hiểu gì cả, đơn giản vì bạn chưa đạt đến trình độ của họ để có tư duy lập trình đó.
Lời khuyên: Cứ làm và làm cho đến khi bạn tìm ra được cách tốt nhất để giải quyết. Không bao giờ hài lòng với cách cách giải quyết vấn đề của bạn vì mỗi cách luôn luôn tồn tại những ưu nhược điểm khác nhau.
Để đạt được điều đó, chung quy có 4 bước để mô phỏng quá trình này đó là:
Hiểu
Đầu tiên bạn cần phải hiểu được chính xác yêu cầu là gì. Hầu hết các vấn đề khó là vì bạn chưa hiểu chúng. Vậy làm sao để bạn hiểu được? Hãy thử giải thích chúng, điều đó cũng góp phần hình thành nên phương pháp “vịt cao su” nổi tiếng. Mấu chốt của phương pháp là bạn giải thích vấn đề đó với vịt cao su, nếu hiệu quả bạn sẽ phát hiện ra những lỗ hổng trong kiến thức của bạn.
Vịt cao su là một phương pháp nổi tiếng trong ngành lập trình trên thế giới. Về cơ bản việc bạn giải thích cho vịt cao su cũng chính là cách để kiểm tra xem bạn có thực sự hiểu vấn đề, vì chỉ khi hiểu bạn mới có thể giải thích lại được. Hơn thế trong quá trình giải thích bạn sẽ nhận ra được nhiều vấn đề mới phát sinh để từ đó tìm ra cách giải quyết chúng.
Có một câu nói nổi tiếng trong trường hợp này là “Nếu bạn không thể giải thích điều gì đó bằng những thuật ngữ đơn giản, bạn thực sự không hiểu nó”. Khi nhận một yêu cầu hãy dành thời gian để “hiểu” chúng trước khi bắt tay vào làm. Đó cũng chính là nội dung của bước 2 dưới đây.
Lập kế hoạch
Đừng vội bắt tay vào code ngay lập tức mà hãy dành thời gian vạch ra cho mình một kế hoạch giải quyết vấn đề. Bạn có thể hiểu vấn đề nhưng nếu ghi ra từng bước giải quyết sẽ giúp bạn nhìn nhận vấn đề một cách rõ ràng hơn, có thể phát hiện ra được những trường hợp không ngờ tới.
Hãy lặp lại câu hỏi “Với đầu vào X, các bước cần thiết để trả về đầu ra Y là gì?” trong khi lên kế hoạch. Xác định được từng đầu vào với từng đầu ra đồng nghĩa với việc bạn biết mình đang cần gì để từ đó biết cách giải quyết chúng bằng cách nào.
Chia nhỏ vấn đề
Hãy chia nhỏ vấn đề càng bé càng tốt. Một vấn đề lớn nhìn qua có vẻ rất phức tạp nhưng khi chia nhỏ ra nó lại trở về những vấn đề đơn giản đến mức có khi bạn đã quá quen thuộc với chúng. Nếu chưa từng gặp một trong những vấn đề đó là một cơ hội cho bạn tìm hiểu.
Cuối cùng khi giải quyết được hết vấn đề nhỏ tự khắc vấn đề ban đầu sẽ được giải quyết. Hãy nhớ phương pháp chia để trị luôn hữu hiệu ở mọi mặt trong cuộc sống.
Bế tắc
Những vấn đề nhỏ ở trên có lúc bạn không hoàn toàn làm chủ được chúng. Đừng lo lắng, bất kì ai cũng từng gặp điều này. Sự khác biệt giữa người giải quyết vấn đề giỏi và người bình thường là tò mò về sự xuất hiện của lỗi hơn là khó chịu về chúng. Về cơ bản việc cần làm trong giai đoạn này là thực hành khả năng gỡ lỗi của bạn từ đó rút ra được kinh nghiệm khi đối mặt với những lỗi tương tự. Hiểu được bản chất của lỗi cũng là hiểu được cách tránh khỏi lỗi đó.
Giải quyết được bế tắc chưa phải là tất cả. Hãy áp dụng phương pháp “đánh giá quy lui” – Tức là lùi về bước trước đó xem có còn cách nào giúp bạn giải quyết được vấn đề nhanh hơn không? Kể cả khi bạn đã giải quyết được vấn đề thì hãy dành thời gian nhìn lại để đánh giá xem liệu chúng có thực sự hiệu quả? Có thể làm lại được gì để giúp giải quyết tốt hơn không.
Kết luận
Tư duy lập trình là thứ luôn tồn tại trong chúng ta. Bạn hoàn toàn có thể làm chủ được tư duy của mình bằng cách rèn luyện mỗi ngày. Hiểu được tầm quan trọng của tư duy lập trình giúp bạn tập trung hơn vào con đường phát triển bản thân và sự nghiệp sau này.
Bài viết được sự cho phép của tác giả Tống Xuân Hoài
Vấn đề
Phát triển dự án là một quá trình dài không phải code một lần mà dùng mãi mãi được. Trong một dự án thời gian phát triển có khi chỉ chiếm một phần nhỏ so với thời gian kiểm thử và bảo trì (maintain) dự án.
Với một thời gian dài như vậy, dự án có nhiều khả năng phải luân chuyển nhân sự thường xuyên. Điều đó làm cho trong dự án có thể có rất nhiều người tham gia viết mã và mỗi người thì lại có một phong cách (style) viết mã riêng. Chúng ta không nên cấm tiệt điều đó, nhưng với những quy định về cú pháp như ngắt dòng, dấu móc, dấu chấm phẩy… thì hoàn toàn có thể tạo ra một quy định chung và yêu cầu mọi người tuân thủ.
ESLint là gì
ESLint là một công cụ phân tích tĩnh mã của bạn để nhanh chóng tìm ra sự cố. Nó được tích hợp vào hầu hết các trình soạn thảo văn bản và bạn có thể chạy ESLint như một phần của quy trình tích hợp liên tục (CI/CD) của mình.
Để làm được điều này ESLint có một tập hợp các quy tắc mà bạn sẽ cấu hình để phát hiện và ngăn chặn các đoạn mã vi phạm những quy tắc (rules). Hơn nữa ESLint còn có thể sửa chữa (fix) hay định dạng (format) lại chúng theo cấu hình tích hợp.
ESLint cung cấp extension cho các trình soạn mã khác nhau, bạn chỉ cần cài đặt extension của ESLint thì nó sẽ tự động thông báo lỗi realtime. Để xem danh sách các trình soạn mã hỗ trợ các bạn bấm vào ESLint Integrations.
Bạn có thể cài đặt ESLint thông qua npm ở dạng global.
$ npm i -g eslint
Sau đó chạy init để khởi tạo cấu hình ESLint cho project. Lưu ý là chạy init ở trong thư mục chứa project muốn sử dụng ESLint.
$ eslint --init
Khi chạy --init, ESLint sẽ hỏi bạn một số câu hỏi để tạo cấu hình phù hợp, bạn chỉ cần trả lời theo đúng những gì mà dự án đang sử dụng. Sau đó một file .eslintrc.js sẽ được tạo ra có chứa các cấu hình mà ESLint sẽ sử dụng cho dự án của bạn. (Lưu ý nếu bạn chọn cấu hình dưới dạng file json hoặc yaml thì ESLint sẽ tạo file cấu hình tương ứng).
Một cấu hình mặc định lúc --init ra sẽ trông như thế này:
ESLint sẽ tự động tìm tệp cấu hình .eslintrc trong dự án và Lint theo cấu hình đó. Bạn cũng có thể chỉ định tệp cấu hình cho ESLint thông qua dòng lệnh.
Giả sử tất cả mã của bạn nằm trong thư mục /src và bạn muốn chạy Lint toàn bộ dự án:
$ eslint src
Nhưng tôi chỉ cần chạy Lint với các tệp .js thôi và hãy bỏ qua các file trong thư mục src/dist:
ESLint đưa ra rất nhiều rule và việc lựa chọn áp dụng rule nào rule nào là cả một quá trình tốn thời gian lẫn công sức thế nên đã có khá nhiều những bộ quy tắc được ra đời.
Nổi tiếng nhất là 2 bộ quy tắc của Airbnb và Google.
Để sử dụng chúng rất đơn giản bạn chỉ cần chạy npm install dưới cấu hình package develop (–save-dev), sau đó khai báo tên của cấu hình muốn sử dụng trong file cấu hình ESLint.
Airbnb và Google có mô tả rõ cách sử dụng & các quy tắc mà họ áp dụng tại Airbnb Style hoặc Google Style.
Còn không bạn cũng có thể sử dụng bộ quy tắc do chính ESLint khuyến nghị bằng cách đặt "extends": "eslint:recommended".
Kết hợp với Githook
Đặt ra các quy tắc để tạo một style xuyên suốt trong dự án, vì thế bạn cần ngăn chặn những hành vi “push” code do vô tình hay cố ý hoặc quên chạy Lint. Bằng cách kết hợp với Githook bạn có thể ngăn chặn được những commit như thế.
Tổng kết
ESLint là một công cụ phân tích và sửa đổi mã Javascript hiệu quả, ESLint giúp cho code style của dự án bạn luôn được xuyên suốt. Việc áp dụng ESLint vào dự án hết sức đơn giản, ngoài ra còn có extension tích hợp cho nhiều trình Code Editor hay IDE để bạn có thể dễ dàng làm việc nữa.
Để học Machine Learning, chúng ta có rất nhiều cách, trong đó có một cách mà nhiều người đã áp dụng. Đó là tham khảo các thư viện Machine Learning mã nguồn mở, chạy thử và ứng dụng vào một bài toán thực tế.
Nói đến AI, Machine Learning, hầu hết mọi người đều được khuyên nên học Python. Nhưng vấn đề là mình lại chỉ thích mỗi Javascript. Thế là thử tìm trên Google, mình mới phát hiện ra mọi người dùng Javascript cho Machine learning cũng rất nhiều, không kém Python là mấy.
Trong thời gian gần đây, hệ sinh thái web đã có những tiến bộ rất lớn. Mặc dù, Javascript và NodeJS vẫn bị coi là có hiệu năng kém hơn so với Python và Java. Đặc biệt là các tác vụ nặng như Machine Learning. Tuy nhiên, Javascript lại có lợi thế là dễ học, dễ tiếp cận . Tất cả những gì bạn cần để chạy một dự án Javascript Machine Learning là một trình duyệt.
Hầu hết các thư viện Javascript dành cho Machine Learning đều khá mới và vẫn đang giai đoạn phát triển. Nhưng chúng rất đáng thử nghiệm và ứng dụng vào các bài toán thực tế của bạn.
Bài viết này, mình sẽ giới thiệu một số thư viện machine learning bằng Javascript, cũng như một số ứng dụng minh họa thú vị để bạn có thể tham khảo và giúp ích cho việc học Machine Learning trực quan hơn.
1. Brain
Brain là một thư viện JS cho phép bạn dễ dàng tạo mạng Nơron và sao đó trainning chúng để tạo ứng dụng AI/ML. Vì quá trình trainning chiếm rất nhiều tài nguyên máy tính, nên ưu tiên chạy thư viện trong NodeJS thay vì như một ứng dụng client chạy trên trình duyệt. Mặc dù, phiên bản trình duyệt (tải qua CDN) cũng có thể làm được.
Có một bản demo nhỏ trên trang web chính thức của nhà phát hành mà bạn có thể tham khảo.
Deep playgroud là một mô hình trực quan mạng Nơron được viết bằng TypeScript trên nền thư viện d3.js
Deep playgroud có giao diện UI đẹp mắt, cho phép bạn kiểm soát dữ liệu đầu vào, số lượng nơron, thuật toán sử dụng và nhiều số liệu khác để bạn “nhào nặn” cho ra kết quả cuối cùng như ý.
Ngoài ra, bạn còn rất nhiều code mẫu được nhà phát hành cung cấp để bạn có thể tham khảo và nhanh chóng biết cách sử dụng thư viện này.
Điểm cuối cùng là tài liệu chính thức của nhà phát hành cũng rất đầy đủ, nên bạn hoàn toàn có thể yên tâm mà nghiên cứu.
Nghe tới tên Flappy khiến bạn liên tưởng ngay tới game “Flappy bird” đình đám một thời đúng không!? Bạn liên tưởng đúng rồi đấy. Bạn từng chơi dòng game này chưa? Điểm tối đa mà bạn đạt được là bao nhiêu? Bạn nghĩ sao nếu bạn có khả năng phản xạ như máy tính, chơi đạt tới hàng ngàn điểm trong game này?
FlappyLearning là một dự án machine learning bằng Javascript chỉ có 800 dòng code để tạo một thư viện machine learning và ứng dụng nó trong bản demo thứ vụ giúp học cách chơi FlappyLearning như một nghệ sĩ điêu luyện.
Kỹ thuật AI được sử dụng trong thư viện này được gọi là Neuroevolution, và ứng dụng các thuật toán lấy cảm hứng từ các hệ thống thần kinh được tìm thấy trong tự nhiên, có khả năng tự học hỏi từ những thất bại hay thành công sau mỗi lần chơi.
Bản demo của thư viện này rất dễ chạy, chỉ cần mở index.html bằng trình duyệt và trải nghiệm.
4. Synaptic
Đây có lẽ là dự án được maintain tích cực nhất trong danh sách thư viện Machine learning này. Synaptic là một thư viện dành cho NodeJS và trình duyệt có kiến trúc agnostic, cho phép các nhà phát triển có thể xây dựng bất kỳ loại mạng nơron nào họ muốn.
Synaptic có một kiến trúc nơron được xây dựng sẵn, giúp bạn nhanh chóng có thể kiểm tra và so sánh các thuật toán machine learning khác nhau.
Về phần tài liệu hướng dẫn, Synaptic cũng khá đầy đủ , có nhiều guide khá chi tiết giúp bạn nhanh chóng hiểu được ý tưởng của Synaptic.
ThingTranslator là một giải pháp web cho phép điện thoại có thể nhận ra các đối tượng trong đời thực và đặt tên cho chúng bằng những ngôn ngữ khác nhau.
Ứng dụng được xây dựng hoàn toàn t rên công nghệ web và sử dụng hai API Machine learning của Goole:
Cloud Vision để nhận dạng hình ảnh
API translater để dịch kết quả ra các ngôn ngữ khác nhau
6. DeepForge
Phải nói, DeepForge tạo ra một môi trường phát triển deep learning rất thân thiện với developer. Nó cho phép bạn thiết kế mạng nơron bằng giao diện đồ họa, hỗ trợ các mô hình traning trên các máy tính từ xa (remote machines) và được tích sẵn các trình quản lý phiên bản như git, svn.
Dự án được xây dựng chạy trên trình duyệt và trong môi trường NodeJS + MongoDB, nên quá trình cài đặt rất quen thuộc với hầu hết các bạn web developer.
Tạm kết
Mặc dù hệ sinh thái dành cho machine learning bằng Javascript vẫn còn khá mới mẻ và còn cần thêm thời gian để cộng đồng phát triển thêm. Lời khuyên của mình là nên sử dụng những tài nguyên miễn phí ở trên như một bước đầu để đi vào thế giới machine learning đầy “mê hoặc”.
Bài viết được sự cho phép của tác giả Tống Xuân Hoài
Vấn đề
Hãy thử hỏi một lập trình viên Node.js rằng điều gì bạn thích ở nền tảng bạn chọn, thì khả năng cao sẽ nhận được một câu trả lời mà trong đó có ý rằng “Node.js nhanh”. Và nếu hỏi tiếp tại sao nó nhanh thì có người sẽ nói do ngôn ngữ Javascript nhanh, do cơ chế bất đồng bộ, single thread, hay là do V8 Engine…
Tất cả lý do trên có khả năng đúng trong một khía cạnh nào đó. Các cơ chế của Node.js dù thế nào đi nữa mục đích cuối cùng vẫn là tăng sức mạnh xử lý cho nó. Nhưng đó chỉ là trên lý thuyết của Node.js, thực tế không phải chỉ có Node.js mới triển khai những thứ như trên mà nhiều ngôn ngữ hay nền tảng khác đều đã triển khai, thậm chí còn triển khai một cách tốt hơn nữa.
Vậy thực hư nói Node.js “nhanh” là “nhanh” như thế nào? Bài viết này tôi xin trình bày quan điểm của tôi khi nói về vấn về “Node.js nhanh”.
Nhưng trước tiên, hãy dành thời gian xem qua các cơ chế mà mọi người hay nhắc đến để từ đó kết luận rằng nó nhanh nhé.
Single thread
Node.js sử dụng mô hình Single thread thông qua Event Loop để xử lý bất đồng bộ. Nhờ đó mà Node.js có thể xử lý nhiều yêu cầu cùng một lúc một cách dễ dàng.
Cho dễ hình dung, với những ngôn ngữ không theo mô hình Single thread như PHP. Mỗi một kết nối đến nó sẽ tạo ra một thread để xử lý. Rõ ràng máy chủ phải bỏ ra một phần chi phí (cost) tài nguyên như CPU, bộ nhớ cho mỗi thread được tạo. Hãy nghĩ xem điều gì xảy ra khi có nhiều yêu cầu được gửi đến?
Mô hình này mang lại một vài thế mạnh cho Node.js như giảm số luồng (thead) ít nhất có thể để giảm mức tiêu thụ tài nguyên của hệ thống nhưng vẫn đáp ứng được yêu cầu xử lý một lượng lớn yêu cầu đồng thời.
Một ứng dụng web hiếm khi nào mà không cần dùng đến cơ sở dữ liệu. Chúng ta đều biết hành vi kết nối, truy vấn cơ sở dữ liệu là mất nhiều thời gian hơn so với những câu lệnh thông thường. Giả sử một endpoint trong API cần gọi một lệnh truy vấn và truy vấn tiêu tốn 2s để đưa ra kết quả, với mô hình Single thread của Node thì chẳng phải yêu cầu thứ hai phải đợi tối thiểu 2s rồi mới được xử lý tiếp hay sao? Tương tự cho yêu cầu thứ 3, thứ 4… sẽ gây nên một cấp số nhân về độ trễ???
Đừng lo lắng vì thế mạnh của Node.js là xử lý I/O không đồng bộ. Một số lượng nhất định các yêu cầu sẽ gần như được xử lý cùng lúc. Chỉ có điều Node.js sẽ lần lượt phản hồi kết quả cho từng yêu cầu, và việc này thường diễn ra rất nhanh chóng. Đối với PHP vì các thread là độc lập nên chúng có thể thoải mái trả về kết quả cùng một lúc.
V8 Engine
Nhắc đến Node, không thể bỏ qua V8 Engine. Công cụ này là trình thông dịch diễn dãi mã JS thành mã máy và chạy nó. Tốc độ của V8 là cực kì ấn tượng trong tất cả các Javascript Engine.
Vậy rốt cục nói Node.js nhanh là như thế nào?
Bạn có thể nghe thấy ai đó khuyên rằng Node.js thực sự phù hợp trong một số trường hợp như triển khai hệ thống API, làm ứng dụng realtime như chat, hay là những công việc thiên về I/O. Chứ rất ít bài viết khen Node.js nhanh ở khía cạnh tốc độ xử lý của nó.
Hiệu năng luôn luôn là vấn đề của mọi ngôn ngữ hay nền tảng trong các bài toán xử lý lượng yêu cầu đồng thời lớn. Bởi vì mỗi ngôn ngữ được tạo ra để tập trung giải quyết một vấn đề nào đó. Chính vì thế đánh giá rằng Node.js nhanh là không thực sự chính xác, mà chúng ta nên đánh giá rằng Node.js thực sự phù hợp trong trường hợp nào? Tại sao?
Nói như vậy không có nghĩa là Node.js không “nhanh”. Nhưng cái nhanh của Node.js tôi nghĩ rằng nó nằm ở tốc độ triển khai và phát hành.
Node cung cấp môi trường chạy mã JS mà JS thì lại cực kì phổ biến trên bản đồ ngôn ngữ lập trình của thế giới. Vì thế cộng đồng sử dụng Node rất lớn và bạn có thể nhanh chóng tìm được một người cộng sự phát triển dự án cùng mình. Cũng chính vì sự phát triển đó mà vô số thư viện được triển khai cho Node thông qua npm. Bạn sẽ không cần phải vất vả phát minh lại bánh xe, cộng đồng sẽ giúp bạn làm điều đó.
Tóm lại, theo tôi thứ quyết định đến một ngôn ngữ hay nền tảng mạnh mẽ chính là thái độ của nhà phát triển cùng với độ phủ sóng của ngôn ngữ hay nền tảng đó trong cộng đồng.
So sánh hiệu năng của Node.js với ngôn ngữ hay nền tảng khác
Nếu chưa tin rằng Node.js không “nhanh”, Techempower đã dành thời gian của họ để tiến hành đo sức mạnh của nhiều ngôn ngữ hay nền tảng với nhau. Để đảm bảo khách quan, họ sẽ chạy nhiều bài test và mỗi bài test thực hiện trên nhiều ngôn ngữ hay nền tảng, trong cùng một môi trường hoàn toàn giống nhau. Cẩn thận hơn, hàng năm họ còn cập nhật phiên bản mới nhất của ngôn ngữ hay nền tảng và tiến hành đo lại.
Trong kết quả đo mới nhất là vào tháng 7/2022 với bài test máy chủ phản hồi plaintext (một dạng kiểu “hello world”). Node.js với một Framework nổi tiếng là fastify đứng ở vị trí 156 với lượng yêu cầu xử lý được là 575,967 req/s thấp hơn rất nhiều so với các Framework khác dựa trên ngôn ngữ như C#, Java hay là Golang. Cụ thể con số có thể đạt đến hơn 7 triệu req/s đối với aspcore của C#.
Một bài test về tốc độ truy vấn trong cơ sở dữ liệu thì fastify-mysql có thể xử lý được 9,383 req/s vẫn thấp hơn rất nhiều so với con số hơn 20k của C#.
Ngoài ra còn nhiều bài test khác về hiệu năng. Bạn đọc có thể nghiên cứu thêm cùng với cách thức đo điểm chuẩn của Techempower tại Project Information Framework Tests Overview.
Tổng kết
Tóm lại qua bài viết này tôi chỉ muốn làm rõ khái niệm “nhanh” của Node.js là như thế nào. Đồng thời nhấn mạnh rằng mỗi ngôn ngữ hay nền tảng được sinh ra đều có lý do của nó, việc so sánh nhanh hay chậm chưa chắc đã phản ánh đúng hết thế mạnh của ngôn ngữ hay nền tảng. Thay vào đó, chúng ta nên nắm bắt được điểm mạnh, yếu của chúng để áp dụng giải quyết bài vào từng bài toán sao cho phù hợp.
Hiện nay, Vuex vẫn là thư viện phổ biến nhất, được sử dụng trong hầu hết các dự án. Tuy nhiên, khi Pinia ra đời và được team phát triển Vue khuyến khích sử dụng đã thay đổi cuộc chơi.
Pinia thừa hưởng toàn bộ ưu điểm của Vuex và bổ sung nhiều tính năng hấp dẫn, nhưng vẫn giữ được tính gọn nhẹ và dễ sử dụng. Pinia thực sự là một ứng cử viên sáng giá để thay thế vuex.
Chúng ta cùng nhau tìm hiểu cách sử dụng Pinia này nhé!
Pinia là gì?
Pinia là thư viện quản lý state trong Vue (State Management), phục vụ cho việc lưu trữ và chia sẻ state giữa các component với nhau.
Về cơ bản thì Pinia tương tự với Vuex. Vì Pinia ra đời sau Vuex, nên Pinia thừa hưởng những thế mạnh của Vuex. Tất nhiên, Pinia tương thích hoàn toàn với cả hai phiên bản Vue 2.x và Vue 3.
Cấu trúc và cú pháp của Pinia cũng rất quen thuộc, cũng có action, store, getter… Nhưng các cài đặt và cấu hình store cho Pinia lại đơn giản đến bất ngờ.
Với xu hướng được sử dụng ngày càng nhiều, Pinia có lẽ sẽ sớm thay thế Vuex trong tương lai gần thôi.
Trước hết, chúng ta tạo mới một dự án Vue để thực hành đã nhé.
Vẫn câu lệnh quen thuộc:
vue create hello-pinia
(Dạo này đứt cáp quang biển nên việc tải thư viện, cài đặt dependencies lâu quá!)
Sau khi tạo xong dự án, bạn chạy thử dự án:
npm run serve
Vào trình duyệt để kiểm tra kết quả: http://localhost:8080
Trong bài viết này, mình sẽ sử dụng phiên bản Vue 3 cho nó hiện đại
Cài đặt và cấu hình Store với Pinia
Cài đặt Pinia cũng tương tự như các thư viện khác thôi. Chúng ta sẽ cài đặt qua npm bằng câu lệnh:
npm install pinia
Sau khi cài xong, quay trở lại main.js để thêm pinia vào Vue.
import{ createApp } from 'vue'import App from './App.vue'import{ createPinia } from "pinia";createApp(App).use(createPinia()).mount('#app')
Bước tiếp theo là cấu hình store với Pinia.
Pinia có cách tiếp cận hơi khác một chút so với Vuex. Đó là Pinia xử lý state global theo hướng module. Tức là nó sẽ tạo nhiều store nhỏ lẻ tương ứng với một key duy nhất. Sau đó, Pinia sẽ kết hợp chúng lại thành một store duy nhất cho toàn ứng dụng.
Một store có 4 thuộc tính:
ID: là khóa duy nhất như đã đề cập ở trên để xác định store
state: là một hàm trả về trạng thái dữ liệu ban đầu của state
getters: là nơi định nghĩa các giá trị cần lấy từ store
actions: là nơi định nghĩa các hành động cập nhật state. Nó là sự kết hợp của action + mutation so với Vuex.
Quay trở lại với dự án mà chúng ta đã tạo trước đó. Với dự án này, chúng ta sẽ xây dựng một ứng dụng quản lý công việc siêu đơn giản.
Có 2 tính năng chính:
Tạo mới công việc.
Hiển thị danh sách công việc.
Xóa một công việc
Giao diện ứng dụng khi hoàn thành sẽ như sau:
Đầu tiên, chúng ta sẽ cài đặt store với 2 actions cơ bản là: addTodo, removeTodo.
// stores/todo.tsimport{ defineStore } from "pinia";exportconst useTodoStore = defineStore({ id:"todoState", state:()=>({ todos:[], }), getters:{ totalTodos:(state)=> state.todos.length, }, actions:{ addTodo(title, description){ const todo ={ id: Math.floor(Math.random()*10000), // random ID title, description, }; this.todos=[todo,...this.todos]; }, async removeTodo(id){ // remove todos this.todos=this.todos.filter((todo)=> todo.id!== id); }, },});
Về phần giao diện, mình chia nhỏ giao diện thành 2 components chính: Phần nhập công việc mới và phần danh sách các công việc.
Trong phần này, các bạn chú ý tới hàm setup(). Đây là nơi mình khai báo tham chiếu tới store: const storeTodo = useTodoStore() nhờ đó mà mình có thể gọi tới actions và truy xuất giá trị của global state.
<!-- components/TodoForm.vue--><template><form @submit="onSubmit"><h2>VNTALKING - Quản lý công việc</h2><!-- title --><div class="field"><label class="label">Tiêu đề</label><input type="text"class="input" name="title" v-model="title"/></div><!-- description --><div class="field"><label class="label">Miêu tả</label><textarea class="input" name="description" v-model="description"></textarea></div><!-- submit --><div class="field"><button type="submit">Tạo mới công việc</button></div></form></template><script>import{ defineComponent } from "vue";import{ useTodoStore } from "../stores/todo";exportdefault defineComponent({ name:"TodoForm", data(){return{ title:"", description:"",};}, setup(){const storeTodo = useTodoStore();return{ storeTodo };}, methods:{ onSubmit(e){ e.preventDefault();if(!this.title){return;} // save data into storethis.storeTodo.addTodo(this.title,this.description); // clear datathis.title="";this.description="";},},});</script>
Như bạn cũng thấy, với cách viết của Pinia, mình không cần phải sử dụng mapActions(...) hay mapGetters(...) mà VS Code vẫn tự động gợi ý lệnh. Đây là điều mà mình cảm thấy hứng thú nhất với Pinia so với Vuex!
Các bạn có thể tải mã nguồn đầy đủ về tham khảo:
Tạm kết
Sau khi trải nghiệm quản lý state với Pinia xong, cám giác của bạn thế nào? Có thấy Pinia xứng đáng để thay thế Vuex ở thời điểm hiện tại này không?
Có lẽ không phải ngẫu nhiên mà team phát triển Vue lại khuyến khích sử dụng Pinia. Chắc chắn họ cũng nhận ra những ưu điểm và cũng có chiến lược phát triển Vue tương đồng với Pinia.
Trong một lần tình cờ vào VOZ forums, có một bạn hỏi về Interface trong Java là gì? Nó khác với Abstract Class chỗ nào? Tại sao phải dùng Interface, mặc dù nó chẳng rút gọn code đi tý nào, thậm chí còn dài hơn. Mặc dù có nhiều bạn trả lời cho chủ topic đó nhưng hầu hết là hiểu sai, hoặc chưa hiểu rõ bản chất của Interface trong Java.
Để các bạn có cái nhìn thấu đáo, hiểu rõ bản chất của Interface. Từ đó có thể ứng dụng Interface một cách chuẩn chỉ cho dự án của mình. Mình đã cho ra đời bài viết này.
Java Interface là gì? Có phải “bộ mặt” của Java?
Để hiểu một cách chính xác thì phải đọc khái niệm Interface của chính chủ Oracle:
In its most common form, an interface is a group of related methods with empty bodies.
– Oracle –
Đến Oracle cũng không thể định nghĩa Interface một cách khoa học kiểu: Interface là xyz, bla bla. Nhưng chúng ta có thể hiểu một cách nôm na và chính xác như sau: Trong thế giới thực, chúng ta có vật (đồ vật, con vật…) và các hành vi của nó. Interface được sinh là để định nghĩa các hành vi của một nhóm vật.
Mình lấy ví dụ như sau: Một con mèo (đây là con vật) thì có các hành vi như: chạy, bắt chuột, ngủ…
Ta sẽ định nghĩa một Interface Cat như sau:
interface CatBehaviors { // Cách con mèo chạy với tốc độ voidrun(int speed); // Cách con mèo bắt chuột voidcatchMouse(int mouse); // Định nghĩa cách con mèo ngủ. voidsleep();}
Sau này chúng ta định nghĩa một con mèo thì tất nhiên nó sẽ phải các hành vi của con mèo, dù nó là mèo tam thể hay mèo vàng…
class Cat implements CatBehaviors { privateString màu_lông; //Cách con mèo chạy với tốc độ voidrun(int speed){ ... } //Cách con mèo bắt chuột voidcatchMouse(int mouse){ ... } // Định nghĩa cách con mèo ngủ. voidsleep(){ ... }}
Về học thuật thì Interface chính là khái niệm để hiện thực hóa triết lý đa hình trong lập trình hướng đối tượng. Cụ thể hơn thì mình sẽ giải thích ở phần sau của bài viết.
Interface Java cũng là một Abstract Class bao gồm các method được định nghĩa (nhưng nội dung của method thì không được viết cụ thể, người ta gọi là abstract method). Một Class sau này sẽ implements một Interface, đến lúc đó class mới viết cụ thể nội dung của các method được định nghĩa trong interface.
Trong Interface, ngoài abstract method, bạn hoàn toàn có thể thêm constants, static methods, nested interfaces (interface trong một interface) và default methods.
Điểm giống – khác nhau giữa Interface và Abstract class:
Một interface về cơ bản hoàn toàn giống với abstract class. Một interface cũng có các abstract method và các method được thiết kế để implement ở các class khác. Việc implement này hoàn toàn giống với việc extend và override method trong Abstract class.
Về điểm khác nhau, thì mình thấy có 2 điểm chính:
Về cách viết code: các method trong interface phải là empty method, tức là method không có nội dung, chỉ có tên hàm, tham số và kiểu dữ liệu trả về. Trong khi với abstract class thì bạn hoàn toàn có thể thêm abstract method hoặc method bình thường (là method có nội dung, logic bên trong body).
Về mục đích sử dụng:
Interface là một chức năng mà bạn có thể thêm và bất kì class nào. Từ chức năng ở đây không đồng nghĩa với method (hay còn gọi là hàm).
Abstract class là một class cha cho tất cả các class có cùng bản chất. Bản chất ở đây được hiểu là kiểu, loại, nhiệm vụ của class.
Tại sao chúng ta cần Interface
Lý do chính là Java không hỗ trợ đa kế thừa. Do đó, bạn không thể kế thừa cùng một lúc nhiều class. Các class con không thể kế thừa các thuộc tính của nhiều class cha, vì nó dẫn đến bài toán Kim Cương (các bạn search Google để biết cái này nhé).
Để giải quyết vấn đề này, người ta mới cho ra đời Interface. Để hiểu rõ hơn, chúng ta sẽ cùng nhau xem ví dụ dưới đây.
Bạn muốn thiết kế một Sở thú, gồm rất nhiều các con vật. Về cơ bản thì các con vật đều có các đặc điểm chung như: Có tên, có tiếng kêu, có chân (2 chân, 4 chân, hoặc 0 có chân nào…). Từ những đặc điểm chung đó bạn tạo một abstract class là: abstract class Animal
Tuy nhiên lại có một số loài lại biết bay, một số loài thì biết bơi. Và cái “dở” là loài biết bay lại không biết bơi. Do vậy, ta không thể để đặc điểm biết bay hay biết bơi trong class Animal được.
Đó là lý do chúng ta cần tạo 2 Interface khác nhau là Can_Fly và Can_Swim rồi xem class nào có thể implements từng cái thích hợp.
Bạn đọc đến chắc cũng đã hiểu phần nào về Interface trong Java rồi đúng không? Khi nào thì cần phải sử dụng Interface, và nó khác với Class thường chỗ nào.
Giờ mình sẽ tổng kết lại những đặc điểm chính mà bạn cần phải nhớ về Interface:
Các method được khai báo trong Interface phải là method rỗng.
Không thể tạo đối tượng từ Interface.
Một Class có thể implement một hoặc nhiều Interface.
Mình viết một đoạn code mình họa cho đỡ nhàm chán nhé.
import java.util.Scanner;class Edureka implements extInterface{ publicvoidmethod1(){ System.out.println("implementation of method1"); Scanner scanner = newScanner(System.in); System.out.println("Enter number to find square root in Java : "); double square = scanner.nextDouble(); double squareRoot = Math.sqrt(square); System.out.printf("Square root of number: %f is : %f %n" , square, squareRoot); } publicvoidmethod2(){ System.out.println("implementation of method2"); }publicstaticvoidmain(String arg[]){ extInterface obj = newEdureka(); obj.method1(); }}
Chạy đoạn code sẽ thu được kết quả:
implementation of method1Enter number to find square root in Java :16Square root of number: 16.0 is : 4.0
Tổng kết
Như vậy là mình đã hoàn thành bài viết về Interface trong Java. Đọc đến đây, bạn đã “vỡ” ra được nhiều điều không? Nếu không thì… buồn ghê.
Các bạn nên nhớ, Interface chỉ là một công cụ, nó không phải là triết lý lập trình. Do vậy, khi ai đó nói tới lập trình hướng đối tượng, tới đa hình mà nói: Tính đa hình là interface. Thì không hẳn là đúng nhé. Nhớ này: Interface chỉ là một công cụ để thực hiện tính đa hình.
Bài viết được sự cho phép của tác giả Tống Xuân Hoài
Vấn đề
Lập trình thời nay có phần không giống như xưa nữa, chúng ta có nhiều lựa chọn hơn về công nghệ cũng như công cụ hỗ trợ lập trình. Một phần là do cộng đồng ngày càng phát triển tạo ra nhiều công cụ hỗ trợ giải quyết vấn đề rất mạnh mẽ, qua đó giúp giảm thời gian phát triển xuống, đồng thời tối ưu hóa công việc mang tính lặp đi lặp lại. Bây giờ mỗi khi gặp vấn đề, việc đầu tiên tôi hay làm là tìm kiếm trên Google xem liệu có công cụ nào có thể giải quyết được cho mình hay không. Hoặc cũng có lúc biết cách giải quyết rồi, nhưng vẫn tìm kiếm xem liệu có cách nào làm tốt hơn hay không.
Vài năm trở lại đây, JavaScript đang trên đà phát triển rất mạnh mẽ, trong khi nó vốn được tạo ra để chạy trong trình duyệt. Thậm chí còn xâm lấn sang nhiều nền tảng khác nhau như máy chủ, thiết bị di động, công cụ dòng lệnh (command line)… Nhiều người quan tâm đến JavaScript hơn đồng nghĩa với việc nhiều công cụ bắt nguồn từ nó ra đời, mà thường thấy phổ biến nhất là số lượng thư viện (lib) lẫn Framework được tạo ra hàng ngày. Có người nói vui rằng chưa kịp nghiên cứu xong cái này, cái khác đã mọc ra :D.
Chính vì có quá nhiều lựa chọn như vậy mà đôi khiến chúng ta phải chạy theo chúng. Học hết cái này cái nọ nhưng lại quên mất việc học bản chất của ngôn ngữ. Phải nói rằng nhiều Framework giấu đi sự phức tạp của mã rất tốt, nó khiến chúng ta chỉ tập trung vào việc viết theo cấu trúc, chứ ở tầng bên dưới, việc biên dịch và thực thi mã ít khi được quan tâm. Chỉ khi nào gặp vấn đề mà muốn can thiệp vào tầng bên dưới thì mới đi hỏi những câu hết sức cơ bản.
Có thể nói Framework như là một “interface” của ngôn ngữ lập trình, ngôn ngữ lại là “interface” của hệ thống máy tính… Nói như thế để cho chúng ta hình dung ra được Framework đang che dấu đi sự phức tạp của ngôn ngữ lập trình, vì thế mà chúng ta cảm thấy làm việc với Framework rất tối ưu hóa nhưng về bản chất lại không thể hiểu được nếu như không chịu tìm hiểu.
Gần đây, anh CTO chỗ tôi đang làm có bày tỏ vấn đề anh ấy phỏng vấn rất nhiều người mà đa số họ đều có nền tảng từ Framework chứ hỏi chuyên sâu vào tầng dưới thì hầu như không trả lời được. Qua đó có thể phản ảnh được phần nào xu thế bây giờ: học nhanh, làm nhanh và ngại tìm hiểu.
Nói đến đây không phải tôi có ý chê trách Framework hay người sử dụng nó, bản thân tôi cũng đang sử dụng rất nhiều Framework để tối ưu hóa trong công việc, tuy nhiên cách tiếp cận mới là điều chúng ta cần phải bàn đến.
Bài viết ngày hôm nay là để phân tích xem lợi ích và tác hại của việc sử dụng Framework là gì, đồng thời đưa ra một hướng tiếp cận mà tôi thấy cân bằng được giữa việc khai thác sức mạnh và kiến thức nền tảng.
Việc sử dụng Framework có thể mang lại cả lợi ích và tác hại cho dự án phát cũng như cho chính người phát triển phần mềm.
Một số lợi ích có thể kể đến như:
Tăng tốc độ phát triển: Framework cung cấp các tính năng và thành phần đã được xây dựng sẵn, giúp giảm thiểu công sức và thời gian cần để triển khai một ứng dụng từ đầu. Điều này có thể làm tăng tốc độ phát triển và giảm bớt công việc lặp đi lặp lại. Hơn nữa kiến trúc của Framework đã được tối ưu bởi rất nhiều người, cả về khả năng bảo mật và độ tin cậy.
Tiết kiệm thời gian và nguồn lực: Thay vì phải xây dựng từ đầu các tính năng cơ bản như kết nối cơ sở dữ liệu, CRUD, xử lý lỗi, v.v., bạn có thể kích hoạt chúng thông qua vài dòng lệnh hoặc code đơn giản. Điều đó giúp tiết kiệm thời gian phát triển.
Cộng đồng hỗ trợ: Các Framework phổ biến thường có cộng đồng lớn và nhiều tài liệu phục vụ cho mục đích nghiên cứu, học tập. Thế nên bạn có thể nhận được nhiều lợi ích từ sự hỗ trợ của cộng đồng, bao gồm việc chia sẻ kiến thức, gỡ rối lỗi, và phát triển các thành phần mở rộng.
Tuy nhiên, Framework cũng không phải không có mặt trái:
Phụ thuộc vào bên thứ ba: Tất nhiên rồi, sử dụng Framework đồng nghĩa với việc bạn phải phụ thuộc vào nó. Điều này tạo ra một môi trường rủi ro, vì nếu các Framework hoặc thư viện không được duy trì nữa, có thể gây khó khăn trong việc bảo trì và nâng cấp ứng dụng.
Phụ thuộc vào tính năng có sẵn: Như tôi đã trình bày ở trên, một số lập trình viên có thể trở nên quá phụ thuộc vào tính năng có sẵn của Framework mà không tìm hiểu sâu về cách hoạt động bên trong. Khi gặp vấn đề, gây khó khăn trong việc tìm hiểu và khắc phục.
Tăng độ phức tạp: Sử dụng Framework bạn phải theo cấu trúc của nó, điều này có thể làm tăng thời gian và công sức cần thiết để phát triển và duy trì ứng dụng. Ví dụ như cần thay đổi hoặc can thiệp sâu vào tầng dưới có thể khó hơn thông thường, lúc này bạn cần bỏ ra nhiều thời gian hơn để tìm hiểu và khắc phục vấn đề.
Xem thêm việc làm Node.js developer hấp dẫn nhất tại TopDev
Vậy thì nên tiếp cận Framework như thế nào?
Trước tiên, hãy dành thời gian để học kiến thức cơ bản của ngôn ngữ lập trình trước khi tìm hiểu sang Framework. Đọc tài liệu để hiểu được “concept” của ngôn ngữ, điểm mạnh yếu, tính năng nổi bật mà nó có thể làm được. Bởi suy cho cùng, Framework cũng chỉ hỗ trợ trong phạm vi mà ngôn ngữ có thể làm được, nếu biết được hết tính năng mà ngôn ngữ cung cấp, bạn có thể nắm được vấn đề và đôi khi hiểu được tầng dưới của một tính năng nào đó.
Tìm hiểu về nền tảng mà bạn đang phát triển. Ví dụ nếu như theo lập trình website, web application thì hãy tìm hiểu về thứ chạy được nó như là trình duyệt: tại sao trình duyệt lại có thể chạy được trang web hay tại sao trang web của bạn chỉ chạy tốt trên một số trình duyệt chứ không phải là tất cả?… Tương tự, nếu viết mã phía server hãy tìm hiểu lý do tại sao server có thể chạy được mã của bạn viết… chuyên sâu hơn nữa là kiến trúc máy tính và hệ điều hành…
Cuối cùng, tìm cách tối ưu hóa thời gian phát triển bằng cách tìm hiểu các Framework được đông đảo người sử dụng. Dành thời gian đọc tài liệu để xem nó làm được gì và thử nghĩ xem tính năng đó đang dựa vào chức năng nào của ngôn ngữ. Như vậy, sau này có phát sinh vấn đề, bạn có thể tìm được nguyên nhân và tìm cách khắc phục.
Lấy ví dụ về một thư viện nổi tiếng như là axios, nó được “base” trên API XMLHttpRequest của trình duyệt, và chỉ có thể khai thác được tối đa những gì mà XMLHttpRequest cung cấp.
Tổng kết
Framework là một trong những công cụ hỗ trợ lập trình rất tốt, nó có thể rút ngắn thời gian phát triển một cách đáng kể, hơn nữa còn được tối ưu và kiểm nghiệm bởi rất nhiều người sử dụng. Tuy nhiên, nếu quá lạm dụng mà không tìm hiểu sâu vào mọi thứ ở bên dưới, chúng ta có thể gặp nhiều khó khăn trong bảo trì sau này. Vì thế hãy dành thời gian tìm hiểu những thứ nền tảng để trang bị cho mình một lượng kiến thức nhất định trước khi học cách sử dụng Framework.
“Innovate your Tech Career” – “Cải tiến sự nghiệp IT của bạn” là thông điệp mà KICC HCMC cùng TopDev mang đến cho các tài năng Công nghệ trong sự trở lại vào năm 2023. Theo đó là những hoạt động phối hợp với mục đích kết nối các việc làm ngành CNTT tại các doanh nghiệp IT Hàn Quốc với đối tượng Lập Trình Viên Việt Nam.
Sự hợp tác giữa Hàn Quốc và Việt Nam trong lĩnh vực Công nghệ thông tin
Việt Nam là một trong những quốc gia có tốc độ phát triển công nghệ thông tin mạnh tại khu vực Đông Nam Á, trong khi đó Hàn Quốc là một trong những cường quốc công nghệ thông tin hàng đầu thế giới. Hợp tác trong lĩnh vực này giúp nhân sự IT Việt Nam tiếp cận với những công nghệ mới nhất và cải thiện năng lực của mình, đồng thời mang đến cơ hội đầu tư và mở rộng kinh doanh tại thị trường Việt Nam cho phía Hàn Quốc.
Cho đến hiện tại, Việt Nam vẫn là đối tác kinh tế lớn nhất của Hàn Quốc trong khu vực ASEAN. 3 tháng đầu năm 2023, Hàn Quốc đã đầu tư vào Việt Nam khoảng 474,47 triệu USD với 81 dự án cấp mới. Trong đó, vốn đăng ký cấp mới đạt khoảng 75,81 triệu USD, giá trị góp vốn, mua cổ phần đạt khoảng 57,28 triệu USD.
Việc đầu tư vào lĩnh vực CNTT Việt Nam vẫn đang có xu hướng phát triển tích cực và sẽ tiếp tục tăng trưởng trong tương lai.
KICC HCMC x TOPDEV mang sứ mệnh kết nối nhân tài Công nghệ Việt Nam với Doanh nghiệp ICT Hàn Quốc
Tiếp nối thành công của dự án hợp tác năm 2022, KICC HCMC cùng TopDev tiếp tục mang đến chương trình hợp tác năm 2023 với chủ đề “Innovate your Tech Career” – “Cải tiến sự nghiệp IT của bạn”.
Trong khuôn khổ hợp tác, KICC HCMC cùng TopDev hứa hẹn mang đến những giá trị cho tổ chức/ doanh nghiệp:
Hỗ trợ, hợp tác và thúc đẩy tuyển dụng việc làm công nghệ thông tin cho các công ty IT Hàn Quốc;
Quảng bá hình ảnh, sản phẩm/ dịch vụ và thương hiệu tuyển dụng của các công ty IT Hàn Quốc đến với Cộng đồng Lập trình viên Việt Nam;
Hỗ trợ khách hàng tiềm năng của nhau cùng tiếp cận thị trường địa phương, tìm kiếm đối tác, khách hàng tiềm năng và mở rộng kinh doanh tại Việt Nam.
Đồng thời mang đến cho Lập trình viên Việt Nam cơ hội chuyển mình, bứt phá sự nghiệp tại các công ty IT Hàn Quốc:
Trực tiếp tham gia các dự án công nghệ sử dụng nền tảng hiện đại, tiên tiến từ nước ngoài;
Được tạo điều kiện để phát triển bằng các công tác giáo dục và bồi dưỡng nâng cao năng lực chuyên môn và kỹ năng thường xuyên;
Môi trường làm việc quốc tế, chuyên nghiệp tại các doanh nghiệp hàng đầu của Hàn Quốc;
Mức lương xứng đáng, phù hợp với kinh nghiệm và vị trí;
Tiếp cận nền tảng công nghệ hiện đại, sản phẩm lớn và nhiều dự án mang đầy tính sáng tạo, thử thách;
Cơ hội nâng cao trình độ qua các chuyến công tác onsite tại Hàn Quốc, training sử dụng các công nghệ….
Về KICC HCMC và NIPA:
Được thành lập vào ngày 23 tháng 5 năm 2019, Trung tâm Hợp tác Công nghệ Thông tin Hàn Quốc (KICC Hồ Chí Minh) là văn phòng thứ 6 trên toàn cầu và thứ 2 tại Việt Nam. KICC là văn phòng quốc tế trực thuộc Bộ Khoa học – Công nghệ thông tin Truyền thông Hàn Quốc (MSIT) và Cơ quan Xúc tiến Công nghệ Thông tin – Truyền thông (NIPA) với mục đích giúp đỡ việc kinh doanh quốc tế của những công ty về Công nghệ Thông tin (CNTT) của Hàn Quốc. KICC có 06 văn phòng ở Thung lũng Silicon (Mỹ), Tokyo (Nhật), Bắc Kinh (Trung Quốc), Singapore, Hà Nội (Việt Nam) và Hồ Chí Minh (Việt Nam).
NIPA là tổ chức phi lợi nhuận từ Chính phủ Hàn Quốc và là thành viên của Bộ Khoa học – Công nghệ Thông tin Hàn Quốc, chịu trách nhiệm trong việc hỗ trợ các công ty và các chuyên gia CNTT. NIPA hiện dẫn đầu trong kiến thức về cơ sở hạ tầng kinh tế xã hội và phát triển kinh tế quốc gia bằng việc xúc tiến khả năng cạnh tranh của toàn ngành công nghiệp thông qua sự tiến bộ kỹ thuật CNTT và công nghiệp.
Địa chỉ: Unit 1505, mPlaza Saigon, 39 Lê Duẩn, Phường Bến Nghé, Quận 1, Thành phố Hồ Chí Minh.
Về TopDev – nền tảng tuyển dụng IT
Với hơn 300.000 profile lập trình viên đồng thời sở hữu Cộng đồng Lập trình viên lớn nhất Việt Nam, TopDev hiện là một trong những nền tảng tuyển dụng chuyên về IT hàng đầu tại Việt Nam. Ngoài ra, TopDev là một trong những đơn vị tiên phong ở lĩnh vực IT tại Việt Nam, giúp xây dựng và phát triển thương hiệu tuyển dụng – Employer Brand cho hàng trăm công ty công nghệ trong và ngoài nước. Đây còn là đơn vị chuyên khảo sát, phân tích và phát hành các báo cáo quý, năm về thị trường và nhân lực IT tại Việt Nam (Báo cáo thị trường IT tại đây).
Mã độc Locky ransomware đã xuất hiện vào năm 2016. Tính ra mã độc này đã có tuổi đời bảy năm. Giống như hầu hết các chủng raansomware khác ra đời cùng thời điểm đó. Mã độc Locky, xuất hiện dưới dạng tệp đính kèm email. Mã độc này được gắn dưới dạng dạng hóa đơn, yêu cầu thanh toán.
Bài viết này sẽ giải thích tường tận cách hoạt động của Locky. Đưa ra một số cách phòng tránh khi gặp phải loại mã độc này.
Tuy đã được phát hiện và có phương án phòng tránh, tuy nhiên vẫn rất nhiều trường hợp bị dính phải loại mã độc này. Anh em nên chủ động đọc để hiểu tường tận và có cách phòng tránh hiệu quả nha.
1. Locky là gì?
Bắt đầu với khái niệm mã độc locky, luôn là khái niệm khi bắt đầu.
Locky Ransomware is malware that encrypts important files on your computer, rendering them inaccessible and unusable. The attackers demand a ransom payment and promise to give users a Locky ransomware decryption key that only they possess, in return for the payment. This forces victims to pay the ransom.
Mã độc locky là mã độc mã hoá những file quan trọng trên máy tính, khiến chúng không thể truy cập và không thể sử dụng được. Kẻ tấn công yêu cầu thanh toán tiền chuộc và hứa hẹn cung cấp cho người dùng khoá giải mã để lấy lại dữ liệu. Bắt buộc nạn nhân phải trả tiền chuộc
Mã độc locky không khác gì hành vi tống tiền bằng cách mã hoá dữ liệu của nạn nhân. Bản thân người bị hại sẽ hoảng hốt do bị mất quyền truy cập những dữ liệu quan trọng, đôi khi là dữ liệu nhạy cảm. Sau khi đã hiểu locky là gì, giờ là lúc ta tìm hiểu xem locky hoạt động như thế nào?
2. Locky hoạt động như thế nào?
Mã độc nào muốn hoạt động hoặc tấn công người dùng đều phải có phương án để lây nhiễm. Đối với locky thì vật trung gian lây truyền là email.
Email ở đây có thể là email cá nhân, email công ty hoặc bất cứ email nào khác. Mã độc Locky thường lây lan qua các tệp đính kèm trong email, được ngụy trang dưới dạng các tài liệu vô hại, chẳng hạn như hóa đơn hoặc sơ yếu lý lịch.
Khi anh em mở lên và nhấp vào tệp đính kèm, ransomware sẽ được cài đặt trên máy tính và bắt đầu mã hóa các tệp. Việc mã hoá này được thực hiện âm thầm và không để cho nạn nhân có cơ hội phát hiện ra.
Ngoài ra, Locky còn có thể được ngụỵ trang và dấu vào macro của excel, khi người dùng mở lên chỉ thấy 1 file excel thông thường. Bấm vào enable cho phép macro chạy phát là dính chưởng ngay lập tức. Sau khi đã mã hoá file, các định dạng file thường dùng như exe, word, pdf tự động biến thành .locky, .zepto, .odin, .aesir, .thor, .zzzzz, .osiris. Lúc này locky đã mã hoá xong tất cả dữ liệu của anh em trong máy.
Một số loại locky cải tiến không những mã hoá tệp mà còn để lại backdoor (sau khi đã phân tích lỗ hổng của máy tính nạn nhân). Phục vụ cho các lần tấn công tiếp theo. Chính vì vậy, không nên chuyển tiền chuộc lại dữ liệu khi máy tính của anh em bị tấn công bởi locky.
Thế giới ghi nhận nhiều cuộc tấn công bằng mã độc Locky. Tuy nhiên để có báo cáo cụ thể cho anh em biết số lượng và mức độ thiệt hại thì đó là các cuộc tấn công vào dịch vụ chăm sóc sức khoẻ tại mỹ.
Thông thường những kẻ sử dụng locky để tấn công thường chọn các dịch vụ mà người dùng có xác suất mở tệp cao hơn. Dẫn tới số lượng nạn nhân nhiều hơn. Đã ghi nhận một bệnh viện ở Los Angeles phải trả một khoản tiền chuộc lên tới 17.000 đô do bị tấn công bởi mã độ Locky.
Ngoài ra ở các nước phát triển khác như Nhật Bản, Hàn Quốc và Thái Lan cũng đã ghi nhận các cuộc tấn công bằng mã độc Locky vào ngành viễn thông, vận tải và sản xuất. Mặc dù ít thông tin về mức độ thiệt hại. Nhưng con số cho thấy rất nhiều trường hợp đã lựa chọn trả tiền chuộc cho bên tấn công.
Chính vì lấy được tiền và dữ liệu rất nhạy cảm, nên các cuộc tấn công bằng Locky không có xu hướng giảm mà càng ngày càng tăng lên nhiều.
Sau khi đã hiểu rõ mã độc locky cũng như cách thức hoạt động của nó. Giờ là lúc đọc thật kĩ các cách thức phòng tránh loại mã độc này.
Tuy có một số đặc điểm riêng nhưng các phương pháp được sử dụng để bảo vệ chống lại Locky ransomware cũng giống như đối với bất kỳ loại ransomware nào khác. Cũng có phương án chung và phương án riêng.
4.1 Nhận thức về bảo mật
Đầu tiên là nhận thức về bảo mật. Đào tạo nâng cao nhận thức bảo mật là một bước quan trọng trong việc bảo vệ chống lại phần mềm tống tiền Locky và các loại tấn công mạng khác. Locky ransomware thường được gửi qua email lừa đảo hoặc tệp đính kèm độc hại, có thể lừa anh em tải xuống và cài đặt phần mềm độc hại.
Tuy nhiên, nếu anh em tỉnh táo và được đào tạo để có kiến thức mở tệp an toàn khi gửi qua email. Sẽ không có cơ hội cho Locky lây nhiễm.
Cụ thể, bằng cách cung cấp đào tạo nâng cao nhận thức bảo mật cho nhân viên, doanh nghiệp có thể hướng dẫn họ cách nhận biết và tránh các kiểu tấn công này. Đào tạo có thể bao gồm các chủ đề như cách xác định email lừa đảo, cách xác minh tính xác thực của người gửi email và tệp đính kèm cũng như cách báo cáo hoạt động đáng ngờ cho nhân viên bảo mật CNTT.
4.2 Đảm bảo không có lỗ hổng phần mềm
Nghe thì tưởng như là chả có liên quan gì. Tuy nhiên đây lại là một bước quan trọng nha anh em . Trong việc bảo vệ chống lại mã độc tống tiền Locky và các loại tấn công mạng khác. Locky ransomware thường khai thác các lỗ hổng trong phần mềm để có quyền truy cập vào hệ thống và lây nhiễm phần mềm độc hại vào.
Mà phần mềm xài ở công ty hay máy cá nhân của anh em thì đều có bản cập nhật. Họ phát hành các bản cập nhật và bản vá để khắc phục các lỗ hổng này và cải thiện tính bảo mật cho sản phẩm/ Anh em nên cập nhật tường xuyên cài đặt các bản cập nhật và bản vá này, vừa bảo vệ cá nhân, vừa bảo vệ doanh nghiệp có thể đảm bảo rằng phần mềm của họ được bảo vệ trước các mối đe dọa mới nhất.
4.3 Giám sát lưu lượng mạng
Lại một giải pháp nghe chừng chả có liên quan gì nhưng nếu tập lệnh Locky đang gửi thông tin giữa thiết bị của nạn nhân và máy chủ C&C.
Lúc đó anh em có thể sử dụng giải pháp ngăn chặn xâm nhập để giúp bạn phát hiện, chặn và báo cáo về lưu lượng truy cập mạng vào và ra đáng ngờ. Đây cũng là một cách chặn và hạn chế tác động của Locky tới toàn hệ thống mạng. Nhất là hệ thống mạng doanh nghiệp
4.4 Kiểm soát quyền của người dùng
Ở trong mạng doanh nghiệp, việc phân quyền nên được thực hiện tốt. Ví dụ: tập lệnh có thể cố tạo tài khoản đặc quyền mới hoặc truy cập tài khoản. Nhưng các quyền này đã bị hạn chế bởi admin của hệ thống.
Việc kiểm soát và theo dõi trong phạm vi người dùng có thể giúp ích rất nhiều trong việc hạn chế cuộc tấn công. Ví dụ để xác định các cuộc tấn công Locky, anh em có thể có thể tạo tập lệnh sẽ kích hoạt cảnh báo khi x số lượng tệp và phần mở rộng tệp được đổi tên trong một khung thời gian nhất định.
Nếu quá nhiều thì anh em phản hồi bằng cách vô hiệu hóa tài khoản người dùng, thu hồi quyền, thay đổi cài đặt tường lửa, tắt xuống các máy chủ bị ảnh hưởng và/hoặc bất kỳ thứ gì khác có thể giúp ngăn chặn cuộc tấn công lan rộng. Cái này hạn chế thiệt hại nếu có.
Ngày nay, ngôn ngữ lập trình đóng vai trò quan trọng và cần thiết trong nhiều khía cạnh. Từ việc xây dựng ứng dụng di động, phát triển trang web, đến việc quản lý dữ liệu, ngôn ngữ lập trình đang góp phần tạo nên sự tiến bộ và sự phát triển của xã hội hiện đại. Tuy nhiên, ngôn ngữ lập trình có đặc điểm phức tạp và đôi khi khá khó hiểu với những ai mới bắt đầu tìm hiểu. Bài viết này sẽ giúp bạn biết được có mấy loại ngôn ngữ lập trình và các ngôn ngữ lập trình phổ biến nhất hiện nay là gì?
Khái niệm ngôn ngữ lập trình
Ngôn ngữ lập trình là một hệ thống các quy tắc và cú pháp được sử dụng để giao tiếp và tương tác với máy tính. Nó cho phép lập trình viên viết các thuật toán và hướng dẫn máy tính thực hiện các nhiệm vụ cụ thể. Giống như việc chúng ta sử dụng ngôn ngữ để trò chuyện và hiểu nhau, ngôn ngữ lập trình cho phép chúng ta trình bày ý tưởng của chương trình thông qua các từ và cú pháp đặc biệt. Nó là công cụ cốt lõi để phát triển ứng dụng, xây dựng hệ thống và thực hiện các tác vụ trên máy tính.
Có mấy loại ngôn ngữ lập trình?
Ngôn ngữ lập trình có thể được phân loại thành ba loại chính: ngôn ngữ máy, ngôn ngữ lập trình bậc cao và hợp ngữ.
Ngôn ngữ máy
Đây là loại ngôn ngữ được hiểu và thực thi trực tiếp bởi máy tính. Ngôn ngữ máy sử dụng mã nhị phân để biểu diễn các lệnh. Nó là ngôn ngữ gốc của máy tính và cung cấp sự kiểm soát tối đa, nhưng cú pháp của nó khá khó hiểu và phức tạp.
Ngôn ngữ lập trình bậc cao
Đây là loại ngôn ngữ dễ đọc và dễ hiểu hơn cho con người. Ngôn ngữ lập trình bậc cao sử dụng cú pháp và từ vựng gần gũi với ngôn ngữ tự nhiên để biểu diễn logic và thuật toán. Ví dụ, C++, Java và Python là các ngôn ngữ lập trình bậc cao phổ biến. Ngôn ngữ lập trình bậc cao cung cấp tính các thư viện hỗ trợ giúp lập trình viên xây dựng ứng dụng một cách dễ dàng và nhanh chóng.
Ngôn ngữ lập trình bậc cao còn được chia thành các loại sau:
Ngôn ngữ lập trình tuyến tính:Đây là loại ngôn ngữ tập trung vào việc xử lý các tác vụ một cách tuần tự, từ trên xuống dưới. Các lệnh được thực thi theo thứ tự được viết trong chương trình.
Ngôn ngữ lập trình hướng cấu trúc: Đây là loại ngôn ngữ tập trung vào việc tổ chức chương trình thành các khối, các câu lệnh điều khiển và các hàm. Các lệnh được nhóm lại thành các khối logic, như lệnh rẽ nhánh (if-else), vòng lặp (for, while), và hàm. Các ngôn ngữ lập trình hướng cấu trúc phổ biến bao gồm C và Pascal.
Ngôn ngữ lập trình hướng đối tượng:Đây là loại ngôn ngữ tập trung vào việc mô hình hóa thế giới thực bằng cách tạo ra các đối tượng có thuộc tính và phương thức. Đối tượng là một thực thể có thể tồn tại, có trạng thái và thực hiện các hành động. Các ngôn ngữ lập trình hướng đối tượng phổ biến bao gồm Java, C++, và Python.
Đây là loại ngôn ngữ trung gian giữa ngôn ngữ máy và ngôn ngữ lập trình bậc cao. Ngôn ngữ hợp ngữ sử dụng các ký hiệu và từ khóa gần với ngôn ngữ máy để định nghĩa các lệnh và dữ liệu. Nó cho phép lập trình viên tận dụng sức mạnh của máy tính mà vẫn giữ được tính linh hoạt và đơn giản hơn so với ngôn ngữ máy.
5 ngôn ngữ lập trình phổ biến và đáng học nhất hiện nay
Dưới đây là 5 ngôn ngữ lập trình phổ biến và đáng học nhất hiện nay:
JavaScript
JavaScript đứng đầu danh sách ngôn ngữ lập trình thích hợp cho người mới bắt đầu. Lý do chính khiến JavaScript trở thành ngôn ngữ lập trình phổ biến nhất là sự thân thiện với hầu hết các trình duyệt web và cú pháp linh hoạt.
Người học JavaScript cũng có cơ hội nghề nghiệp rộng mở và tiềm năng, vì ngôn ngữ này được sử dụng rộng rãi trong phát triển web và Mobile App. Việc học JavaScript không chỉ giúp hiểu rõ cơ bản về lập trình mà còn mở ra cánh cửa cho việc khám phá các công nghệ web tiên tiến như React, Angular và Vue.js.
Java
Java là một trong những ngôn ngữ lập trình phổ biến nhất và được coi là tiêu chuẩn của các lập trình viên. Đặc biệt, Java là một ngôn ngữ lập trình đa nền tảng, cho phép code Java có thể chạy trên nhiều hệ điều hành khác nhau như Linux, Windows, Mac OS mà không cần chỉnh sửa.
Ngôn ngữ Java được sử dụng rộng rãi trong phát triển ứng dụng web, di động, Big Data và dịch vụ tài chính. Với cú pháp dễ học, cộng đồng hỗ trợ mạnh mẽ và khả năng tương thích đa nền tảng, Java là một ngôn ngữ lập trình hấp dẫn cho những ai muốn phát triển sự nghiệp trong lĩnh vực lập trình.
PHP là một ngôn ngữ lập trình có ưu điểm nổi bật là mã nguồn mở, cho phép sử dụng các thư viện tiện ích lập trình web miễn phí. Điều này tạo ra một môi trường phong phú và đa dạng cho các nhà phát triển.
PHP cũng là một ngôn ngữ dễ học, đặc biệt phù hợp cho người mới bắt đầu trong lĩnh vực phát triển web. Với cú pháp đơn giản và sự hỗ trợ của cộng đồng lớn, người dùng có thể nhanh chóng tiếp cận và xây dựng các ứng dụng web cơ bản.
Python
Python là một ngôn ngữ lập trình bậc cao có cú pháp đơn giản, rõ ràng và trực quan. Với mô-đun và thư viện phong phú, Python cung cấp các công cụ mạnh mẽ để xây dựng những hệ thống phức tạp. Đối với những ai muốn trở thành Back-end developer hoặc muốn học một ngôn ngữ lập trình mạnh mẽ và đa năng, Python là sự lựa chọn hoàn hảo.
C/C++
Ngôn ngữ C là một ngôn ngữ lập trình quan trọng, được sử dụng để viết các phần mềm và ứng dụng cốt lõi. Đây là một ngôn ngữ lập trình cơ bản mà hầu hết các lập trình viên phải học. Ngôn ngữ C được coi là nguồn gốc của nhiều ngôn ngữ lập trình cao cấp khác.
C++ là một ngôn ngữ lập trình hướng đối tượng được phát triển dựa trên C. Nó kế thừa các tính năng của ngôn ngữ C và bổ sung thêm khái niệm về đối tượng và lớp. C++ được sử dụng rộng rãi trong việc phát triển phần mềm, ví dụ như các ứng dụng Microsoft Windows, trình duyệt Google Chrome và cả các trò chơi như Fighter.
Tóm lại
Trong bài viết này, chúng ta đã biết được có mấy loại ngôn ngữ lập trình cũng như ngôn ngữ nào phổ biến và nên học nhất hiện nay. Mỗi loại ngôn ngữ lập trình có đặc điểm riêng, từ cú pháp, cấu trúc dữ liệu đến câu lệnh. Tuy nhiên, tất cả đều hướng tới mục tiêu chung là viết mã để tương tác với máy tính và thực hiện các tác vụ cụ thể.
Việc hiểu và nắm vững các loại ngôn ngữ lập trình sẽ giúp chúng ta lựa chọn phù hợp cho các dự án lập trình của mình và phát triển một cách hiệu quả. Hãy tiếp tục khám phá và mở rộng kiến thức về ngôn ngữ lập trình để trở thành một lập trình viên đa năng và thành công trong lĩnh vực này.
Ngày 7/4 vừa qua, Meta đã cho ra mắt một công cụ AI mới có tên là Segment Anything Model (SAM) với khả năng giúp máy tính xác định từng chi tiết cụ thể trong một bức ảnh thuộc về đối tượng nào. Khả năng của SAM kèm theo việc có thể thực thi theo thời gian thực giúp nó trở thành một trong những cải tiến đáng quan tâm nhất hiện nay trong cộng đồng AI. Bài viết hôm nay chúng ta cùng tìm hiểu về Segment Anything Model và những ứng dụng thực tiễn của nó nhé.
Image Segmentation
Thị giác máy tính (Computer Vision) là 1 lĩnh vực của Trí tuệ nhân tạo (AI – Artificial Intelligence) với bài toán đặt ra là sao chép được khả năng thị giác con người bởi sự nhận diện và hiểu biết một hình ảnh mang tính điện tử. Nó bao gồm các phương pháp thu nhận, xử lý ảnh kỹ thuật số, phân tích và nhận dạng các hình ảnh để cho ra các thông tin dạng số.
Image Segmentation – Phân vùng ảnh là một bài toán nằm trong Thị giác máy tính với nhiệm vụ là phân chia một hình ảnh thành nhiều vùng ảnh khác nhau, đồng thời cũng phát hiện ra vùng ảnh chứa vật thể và gán nhãn phù hợp cho chúng. Xác định pixel hình ảnh nào thuộc về một đối tượng là nhiệm vụ cốt lõi trong thị giác máy tính và được sử dụng trong nhiều ứng dụng, từ phân tích hình ảnh khoa học đến chỉnh sửa ảnh.
Segment Anything Model
Segment Anything Model (SAM) là một mô hình AI nằm trong dự án Segment Anything của Meta với vai trò là một Foundation Model (Mô hình nền tảng) có thể segment (phân vùng) vật thể trong ảnh sử dụng prompt (thao tác gợi ý).
Cụ thể thì với một ảnh đầu vào, người dùng có thể click chọn một vài điểm bất kỳ của vật thể trong bức ảnh thì mô hình AI sẽ có thể trả về một mask sát với vật thể; hoặc cách khác; người dùng sẽ một bounding box (vùng biên) quanh vật thể hay thậm chí là sử dụng đoạn văn bản mô tả vật thể cần phân vùng trong ảnh thì cũng cho ra kết quả tương tự. Việc xử lý này có thể thực hiện với Input (đầu vào) bao gồm cả ảnh và video mà vẫn có thể cho ra kết quả với thời gian thực thi theo thời gian thực. Bạn có thể trải nghiệm các demo ngay trên website của Segment Anything Model ở link dưới đây: https://segment-anything.com/
Image Encoder: chuyển đổi ảnh về dạng embeddings bằng cách sử dụng bộ dữ liệu mặt nạ Segment Anything 1-Billion (SA-1B) – một trong những bộ dữ liệu phân đoạn lớn nhất từng được tạo ra. Bộ dữ liệu được đào tạo trên 11 triệu hình ảnh và xác định được hơn 1 tỷ mặt nạ.
Prompt Encoder: sử dụng encode points, bounding boxes dưới dạng positional encodings và encode texts thông qua convolutions(tích chập) và rồi cộng từng phần tử trên với embedding của ảnh.
Mask Decoder: dựa vào embedding của ảnh, embedding của prompt và một output token để trả về mask tương ứng.
Để huấn luyện SAM cũng như tạo ra được bộ dữ liệu SA-1B trong quá trình gán nhãn dữ liệu, một Data Engine được tạo ra với 3 giai đoạn:
Assisted-manual (Thủ công): tương tự như các model truyền thống khác, SAM sẽ được huấn luyện trên tập dữ liệu công khai với nhóm các chuyên gia đã gán nhãn từ trước
Semi-automatic (Bán tự động): lúc này SAM có thể tự động tạo ra mask cho một tập con các đối tượng bằng cách nhắc (gợi ý) cho nó các vị trí đối tượng có khả năng xảy ra
Fully automatic (Tự động hoàn toàn): ở giai đoạn này thì một mạng lưới các điểm kích thước 32×32 dùng làm prompt cho SAM, từ đó mang lại trung bình 100 masks chất lượng cao cho mỗi hình ảnh.
So sánh SAM và các mô hình khác
So với các mô hình tương tự trước đó, SAM được xem là một bước tiến lớn đối với AI vì nó được xây dựng trên nền tảng đã được thiết lập bởi các mô hình trước đó. SAM có thể nhận những gợi ý đầu vào (prompt) từ các hệ thống khác, chẳng hạn như trong tương lai với công nghệ AR/VR (thực tế tăng cường/ thực tế ảo), prompt sẽ là được truyền vào với cử chỉ ánh mắt của người dùng.
Một lý do khác giúp những kết quả thu được từ SAM mang tính đột phá là nhờ các kỹ thuật áp dụng trong mô hình SAM cho thấy sự tốt hơn so với các giải thuật áp dụng trong mô hình khác. Dưới đây là so sánh SAM với mô hình ViTDet.
Tiềm năng của SAM
Hiện tại bạn có thể trải nghiệm SAM trong trình duyệt của Meta với hình ảnh của riêng bạn. Theo các nhà nghiên cứu từ Meta thì SAM cũng có thể nhận lệnh phân tích văn bản, mặc dù vậy thì tính năng này chưa được hãng phát hành. Tiềm năng của SAM AI rõ ràng là rất lớn, nó có thể trở thành một công cụ hữu ích trong các ngành công nghiệp công nghệ cao và trong các lĩnh vực nghiên cứu. SAM cũng có thể góp mặt trong nhiều ứng dụng chỉnh sửa ảnh hay phân tích hình ảnh khoa học và là một phần trong các hệ thống AI lớn hơn.
Hy vọng bài viết này đã mang lại cho các bạn cái nhìn tổng quan về mô hình mới này. Cùng chờ đợi những cập nhật tiếp theo đến từ Segment Anything Model của Meta trong thời gian gần sắp tới cũng như các ứng dụng của nó vào thực tiễn cuộc sống. Hẹn gặp lại các bạn trong các bài viết tiếp theo của mình.
IoT (Internet of thing), vạn vật kết nối internet đã không còn là khái niệm xa lạ trong thế kỷ 20, vậy phỏng vấn IoT Engineer có gì đặc biệt?
Những kiến thức nào là bắt buộc? Cần chuẩn bị gì để ứng tuyển vị trí IoT Engineer? Tất cả sẽ được trình bày trong bài viết dưới đây.
1. IoT ảnh hưởng tới cuộc sống hàng ngày của chúng ta như thế nào?
Câu hỏi đầu tiên phỏng vấn IoT Engineer liên quan tới ảnh hưởng của IoT tới cuộc sống hằng ngày. Mới nhìn thì anh em tưởng là câu hỏi dễ, nhưng kỳ thực để trả lời được đầy đủ lại tuỳ thuộc vào kinh nghiệm của từng ứng viên.
Ai cũng biết IoT đề cập tới vạn vật đều kết nối internet. Quạt giờ là quạt thông minh, đèn giờ là đèn thông minh. Vật nào cũng kết nối internet, nhưng chúng ảnh hưởng gì tới cuộc sống hằng ngày?
Đầu tiên là cuộc sống con người trở nên dễ dàng hơn với IoT. Thứ hai là mức độ giao tiếp và kết nối giữa các thiết bị trở nên rõ ràng hơn.
Năm 2020 đã ghi nhận có khoảng 20,6 tỷ thiết bị đã sử dụng IoT. Việc kết nối internet, từ mặt bản chất giúp tiết kiệm thời gian, công sức. Thay vì đi đó huyết áp, nhịp tim tại nhà cho bệnh nhân. Bác sỹ hiện này có thể ngồi ngay tại phòng khám, hướng dẫn bệnh nhân đo các thông số và nhận dữ liệu sau khi các thiết bị IoT đã gửi lên.
IoT cũng giúp tiết kiệm thời gian, công sức lao động. Dựa vào dãy cảm biết và các thiết bị, rất nhiều các công việc trước đây cần con người tham gia. Nay đã được tự động hoá phần lớn nhờ các thiết bị IoT.
Các câu hỏi có thể chuẩn bị thêm:
Bạn đánh giá cộng đồng IoT như thế nào?. Giúp đỡ được gì trong quá trình phát triển hệ thống IoT
IoT có thể tiết kiệm năng lượng như thế nào?
2. IoT hoạt động như thế nào?
Câu hỏi phỏng vấn IoT Engineer thứ hai liên quan tới IoT hoạt động như thế nào?.
Đầu tiên, IoT dựa trên nền tảng chính là giao tiếp. Giao tiếp để xử lý dữ liệu, giao tiếp để truyền đạt lệnh hoặc xử lý yêu cầu từ thiết bị IoT. Nếu chia IoT thành các phần khác nhau, ta có thể chia thành 3 phần chính:
sensors (cảm biến), phần này liên quan tới thiết bị, lấy và truyền nhận dữ liệu cho thiết bị
cloud (đám mây), phần này lưu trữ và xử lý dữ liệu nếu cần
data processing software (xử lý dữ liệu, phần này xử lý dữ liệu thu thập được từ thiết bị)
Đó là 3 thành phần chính của IoT, các thành phần này liên kết chặt chẽ với nhau. Chỉ thiếu một thành phần cũng không thể trở thành hệ thống IoT chuẩn.
Một số câu hỏi chuẩn bị thêm cho phần này:
Sự khác nhau giữa các thành phần trong IoT?
Quy mô sử dụng các thiết bị IoT trong thời hiện đại là gì? (nói về quy mô dữ liệu, thời lượng và tốc độ kết nối)
Câu hỏi thứ ba phỏng vấn IoT Engineer liên quan tới các chuẩn giao tiếp. Cụ thể ở đây là chuẩn Bluetooth. Chắc hẳn ai đã làm về IoT hẳn đã nghe về BLE. Thứ vốn không hề xa lạ với IoT Engineer.
Để trả lời cho câu hỏi này, ngay từ trong cái tên, Low Energy có nghĩa là năng lượng thấp. Vậy BLE là chuẩn giao tiếp sử dụng ít năng lượng hơn, đồng nghĩa với việc nó tiết kiệm hơn.
Về mặt phạm vi giao tiếp, cả Bluetooth thông thường và BLE đều có khả năng giao tiếp với phạm vi tương đương nhau. Bản thân BLE cũng được sinh ra với mục đích hỗ trợ IoT. Tiết kiệm năng lượng giúp truyền tải nhiều dữ liệu hơn.
Một số câu hỏi có thể chuẩn bị thêm:
Thermocouple sensor là gì?
Bạn có thể giải thích khái niệm Smart city trong IoT được không?
PWM (Pulse Width Modulation) là gì?
Việc làm AI lương thưởng hấp dẫn, mới nhất dành cho bạn!
4. Sự khác biệt giữa Arduino và Raspberry pi
Câu hỏi thứ 4 phỏng vấn IoT Engineer liên quan tới sự khác biệt giữa Arduino và Respberrry. Hai controller board (mạch kiểm soát) thường được sử dụng trong giới IoT.
Do là hai mạch phổ biến nên thường được sử dụng rất nhiều. Tuy nhiên vẫn tồn tại nhiều điểm khác biệt giữa hai loại mạch này:
Arduino
Raspberry Pi
Arduino là một bộ vi điều khiển USB mã nguồn mở, có thể lập trình được.
Là một máy tính mini dựa trên bộ vi xử lý (SBC).
Các bo mạch Arduino có một bộ vi điều khiển bao gồm CPU, RAM và ROM.
Bo mạch Arduino có phần cứng bổ sung để cấp nguồn, lập trình và kết nối IO (Đầu vào/Đầu ra).
Với Arduino, anh em có thể giao tiếp với cảm biến và điều khiển đèn LED và động cơ.
Tốt để phát triển các ứng dụng dựa trên Python.
Kiến trúc phần cứng và phần mềm đơn giản
Mạch Raspberry Pi có kiến trúc phức tạp
Có thể xây dựng bo mạch Arduino riêng bằng cách sử dụng các tệp phần cứng và phần mềm nguồn mở của Arduino.
Raspberry Pi không phải là mã nguồn mở nên anh em không thể sử dụng cho mục đích tự custom.
Chạy một tác vụ duy nhất tại một thời điểm
Thực hiện một số tác vụ cùng một lúc như chạy phần mềm, duyệt web, lập trình,
Trên đây là bảng so sánh 2 loại bo mạch, anh em cũng có thể chuẩn bị thêm các câu hỏi
Sự khác biệt giữa IoT và WSN (Wireless Sensor Network)?
Giải thích IoT GE-PREDIX
5. Sự khác biệt IoT và IIoT?
Câu hỏi phỏng vấn IoT Engineer cuối cùng liên quan tới phân biệt IoT và IIoT.
Đầu tiên, để so sánh được hai khái niệm này anh em cần hiểu rõ định nghĩa của từng đối tượng. Đầu tiên là IoT (Internet of Things): Tất cả thiết bị đều có thể kết nối internet và truyền dữ liệu tới máy chủ dữ liệu.
Thứ hai là IIoT (Industrial Internet of Things), là một phần của IoT nhưng hướng tới mảng công nghiệp. Các thiết bị kết nối ở đây rõ ràng và giới hạn lại trong phạm vi máy móc công nghiệp.
IIoT
IoT
Nó hỗ trợ các ứng dụng định hướng công nghiệp như sản xuất, nhà máy điện, dầu khí, v.v.
Nó hỗ trợ các ứng dụng hướng đến khách hàng như thiết bị đeo cho người máy và máy móc.
Trọng tâm là các mạng quy mô lớn. (large scale networks)
Trọng tâm là các mạng quy mô nhỏ. (small networks)
Cả hai phương thức liên lạc có dây và không dây đều được sử dụng.
Thông thường, các phương pháp truyền thông không dây được sử dụng
Xử lý dữ liệu lớn hoặc cực lớn
Xử lý dữ liệu mức độ từ vừa tới lớn
Đây là hình thức B2B (doanh nghiệp với doanh nghiệp) và được thiết kế để tăng hiệu quả và an toàn tại các cơ sở sản xuất.
Đây là B2C (doanh nghiệp với người tiêu dùng) và được thiết kế để làm cho cuộc sống của người tiêu dùng thuận tiện hơn.
Các câu hỏi anh em có thể chuẩn bị thêm:
IoT asset tracking là gì?
Anh em giải thích thế nào từ Thingful trong IoT?
6. Tham khảo thêm về phỏng vấn IoT Enigneer
Để chuẩn bị tốt cho buổiphỏng vấn IoT Engineer, anh em có thể tham khảo thêm một số tài liệu dưới đây