Công nghệ
Duyệt các bài viết được gắn thẻ Công nghệ
1899 bài viết

Freelancer Developer – được gì và mất gì?
Bài viết được sự cho phép của tác giả Kiên Nguyễn Gần đây có một số bạn có hỏi mình một số câu hỏi về Freelancer Developer đại loại như sau: Làm Freelancer Developer thì có giàu không anh? . So ez Em work from home làm Freelancer luôn được không? Có khó không anh, tiếng anh của em hơi yếu thì sao? Chính vì vậy, một chút ít kinh nghiệm làm việc Freelancer. Mình chia sẻ một vài suy nghĩ về Freelancer Developer. Anh em có gì thắc mắc cứ comment nha. Đừng ném đá nha! Freelancer IT là gì? Những điều thú vị về Freelancer lập trình Freelancer IT liệu có tồn tại sự tự do trong nghề? 1. Cần gì ở một Freelancer ngành IT? Đầu tiên, rõ ràng mà nói thì không phải ai cũng trở thành freelancer được. Trước khi muốn trở thành một freelancer, bạn cần có một số điều kiện sau: Có trình độ chuyên môn , kinh nghiệm làm việc các dự án thực tế. Có khả năng giao tiếp với khách hàng (Tiếng Anh hoặc một ngôn ngữ khác). Freelancer đòi hỏi sự tổng hợp của nhiều kĩ năng . Rõ ràng mà nói, yêu cầu đầu tiên và cũng là tiên quyết của một Freelancer. Trước khi bắt đầu làm việc, cần có một quá trình làm việc để tăng kinh nghiệm của bản thân. Hầu hết các trang freelancer đều có một quá trình kiểm tra trình độ khá gắt. Nếu không thể thực hiện các bài test, họ sẽ yêu cầu rất nhiều thông tin khác để xác thực kĩ năng của bạn. Một số hình thức phổ biến là Review từ khách hàng , đánh giá từ sếp của bạn. Các bài test chuyên môn về ngôn...

Những mã xấu mà Java 8 có thể khử
Bài viết được sự cho phép của Nguyễn Bình Sơn Tới hiện tại, Java 8 đã được sử dụng trên hầu hết các ứng dụng chạy trên JVM, nhưng điều đó không có nghĩa là những gì tối tân của phiên bản này đã được khai thác triệt để. Dưới đây là một số cách viết mã già cỗi nên được cập nhật. 10 câu hỏi JavaScript để tăng cường kỹ năng của bạn Giới thiệu về Reactive Programing trong javascript 1. Inner class vô danh Bất cứ khi nào bạn gặp một inner class vô danh, bạn nên cân nhắc sử dụng biểu thức lambda . Lấy ví dụ: list.sort(new Comparator() public int compare (String o1, String o2) { return o1.length() - o2.length(); } }); …chuyển thành như sau ngắn gọn hơn nhiều: [java]list.sort((o1,o2) -> o1.length() - o2.length()); Dù vậy, mã ở đây vẫn không quá dễ đọc, chúng ta sẽ tiếp tục xem xét về Comparator. 2. Comparators Comparator trong Java 8 không chỉ tối tân ở sự tương thích với các biểu thức lambda . Nó có những phương thức kết hợp với các tham chiếu phương thức, giúp cho mã trong sáng hơn rất nhiều: [java]list.sort((o1,o2) -> o1.length() - o2.length()); Một ví dụ khác, bạn thậm chí có thể lấy các kết quả theo thứ tự ngược lại, tất cả chỉ bằng cách sử dụng thêm một phương thức hỗ trợ khác: [java]list.sort((o1,o2) -> o1.length() - o2.length()); 3. Các class không trạng thái Thường thì bạn sẽ hay gặp các lớp không có gì khác ngoài các phương thức tĩnh (chúng thường được đặt tên được tận cùng là “Util” hay “Helper”), chúng có nhiệm vụ gom nhóm các phương thức lại trong một không gian tên duy nhất. Không ai cần phải tạo đối tượng...

4 ngộ nhận về công việc kiểm thử phần mềm – Trở thành Tester hay Developer?
Bài viết được sự cho phép của vntesters.com Vũ Phạm – Delivery Director tại KMS Technology Vietnam Nếu đặt câu hỏi này cho sinh viên sắp và mới tốt nghiệp ra trường cách đây 5-10 năm có lẽ sẽ nhận không ít những ánh mắt ngạc nhiên. Không ngạc nhiên sao được khi kiểm thử phần mềm là chủ đề được đề cập thoáng qua theo kiểu “cưỡi ngựa xem hoa” trong môn “Công nghệ phần mềm”. Điều này phần nào phản ánh đúng thực trạng là công việc kiểm thử phần mềm tại thời điểm đó chưa nhiều và chưa có những đòi hỏi chuyên sâu và thử thách thật sự. Đó là lý do tại sao kiểm thử phần mềm là chọn lựa đứng sau công việc lập trình, phân tích yêu cầu v.v Cùng với sự phát triển của ngành CNTT và nhu cầu nhân lực, kiểm thử phần mềm dần đã trở thành môn học chính thức trong một số trường ĐH. Tuy nhiên với thời lượng 4 tín chỉ cũng chỉ đủ để cung cấp cho sinh viên những khái niệm cơ bản nhất về kiểm thử phần mềm. Những thông tin cụ thể hơn về xu hướng phát triển, công nghệ, quy trình làm việc, cơ hội nghề nghiệp và những thử thách cũng như những vấn đề khác liên quan tới công việc của một kiểm thử viên (còn gọi là QC, QA hoặc Tester tùy theo công ty) thì vẫn chưa được chia sẽ nhiều trong quá trình học. Tìm hiểu công việc tester Kiểm thử phần mềm (KTPM) và đặc biệt là thị trường dịch vụ KTPM trong khoảng 5 năm qua đã có những chuyển biến rất tích cực tại Việt Nam. Thành phố Hồ Chí Minh hiện tại là...

Chúng ta cần VPN, tại sao lại vậy?
Bài viết được sự cho phép của tác giả Kiên Nguyễn Trong xã hội hiện đại ngày nay, việc đảm bảo an toàn cho từng kết nối tới thế giới đang ngày được quan tâm. Thông tin đăng nhập Facebook, các giao dịch internet banking, các email quan trọng, … đều được người dùng yêu cầu tính bảo mật cao . Có nhiều phương pháp được sử dụng để đảm bảo yêu cầu này. Ngoài các phương pháp như sử dụng SSL, truy cập mạng wifi an toàn thì VPN cũng là một phương pháp thường được sử dụng để đảm bảo an toàn thông tin. Vậy VPN là gì? . Mời các bác cùng tìm hiểu với em qua bài viết dưới đây. 10 lý do cho thấy tại sao bạn nên theo học ngôn ngữ lập trình Java 10 năm đã qua, tại sao vẫn chưa có một ứng dụng nổi bật nào dành cho Blockchain? 1. VPN là gì? Không TROLL 🤣 – Đầu tiên, VPN là viết tắt của Virtual Private Network (mạng riêng ảo). Đối với những người không rành công nghệ, hãy hình dung khi chúng ta kết nối internet, bản thân chúng ta đang kết nối vào một đường ống rộng lớn . Vì quy mô đường ống rất lớn, nên ta không thể đảm bảo các thông tin cá nhân của chúng ta có bị hacker giòm ngó hay không?. Để cải thiện độ an toàn khi giao tiếp với thế giới internet, mạng riêng ảo ( VPN ) ra đời. Với VPN, người sử dụng có thể tránh được sự dòm ngó của hackers, các tổ chức hoặc chính phủ Mạng riêng ảo ở đây có thể hình như một đường ống ( tunnel ), mọi giao tiếp của chúng ta...

Phân biệt Thực tế ảo (VR) vs Thực tế tăng cường (AR)
Một trong những sự nhầm lẫn lớn nhất trong thế giới thực tế tăng cường (AR) là sự khác biệt giữa Thực tế tăng cường và Thực tế ảo. Cả 2 đều nhận được rất nhiều sự chú ý từ truyền thông và hứa hẹn sẽ có sự tăng trưởng đáng kinh ngạc. Vậy sự khác biệt giữa thực tế ảo và thực tế tăng cường là gì? Thực tế ảo là gì? Thực tế ảo (VR) là một mô phỏng máy tính nhân tạo hoặc tái tạo một môi trường sống thật hay tình huống. Nó làm người sử dụng đắm chìm vào cảnh vật xung quanh bằng cách làm cho họ cảm thấy như họ đang trải qua những thực tế mô phỏng trực tiếp, chủ yếu bằng cách kích thích thị giác và thính giác của họ. VR được sử dụng bằng cách đội 1 headset giống như Oculus của Facebook và sử dụng theo 2 cách nổi bật sau: Tạo ra và tăng cường thực tế ảo để chơi game, giải trí và chơi ( Như video và computer game, phim 3D và màn hình hiển thị gắn trên đầu( Head mounted display)) Tăng cường đào tạo cho các tình huống thực tế bằng cách tạo ra các tình huống giả lập thực tế nơi con người có thể luyện tập trước ( Như việc giả lập các chuyến bay cho phi công) VR được tạo ra thông qua ngôn ngữ lập trình VRML (Virtual Reality Modeling Language). Ngôn ngữ này có thể tạo ra hàng loạt hình ảnh và chỉ định các dạng tương tác khả dụng cho các hình ảnh đó Thực tế tăng cường là gì? Tăng cường thực tế (AR) là một công nghệ cải tiến các lớp máy tính tạo ra...

Sự phát triển của các ngôn ngữ lập trình
Bài viết được sự cho phép của tác giả Edward Thien Hoang Ngôn ngữ lập trình bản thân chúng không phải là 1 thành phần trong kiến trúc nhưng sẽ là thiếu sót nếu chúng ta không đề cập đến chúng trong loạt bài viết này. Cùng điểm sơ qua lịch sử phát triển của các ngôn ngữ lập trình cùng các mô hình lập trình (programming paradigm) qua thời gian và các vấn đề mà chúng giải quyết. 10 lý do cho thấy tại sao bạn nên theo học ngôn ngữ lập trình Java 10 ngôn ngữ phát triển nhanh nhất theo GitHub thống kê năm 2025 1950S – NON-STRUCTURED PROGRAMMING (LẬP TRÌNH PHI CẤU TRÚC) Assembly ~1951 Vào thời điểm sơ khai của lĩnh vực phát triển phần mềm, Assembly là ngôn ngữ hot nhất thời điểm bấy giờ. Nó sử dụng các lời gọi hàm bậc thấp như add, sub, goto và thao tác trực tiếp trên thanh nhớ. Mất khá nhiều thời gian chỉ để build 1 ứng dụng đơn giản. Để thực hiện một lệnh IF, ta cần đến vài dòng code, và sẽ là vài chục dòng code cho vòng loop… Lúc này, khả năng tái sử dụng và cấu trúc các thành phần hầu như là rất khó vì độ phức tạp của ngôn ngữ, các dòng lệnh chủ yếu được thực thi một cách tuần tự, nếu muốn sử dụng logic này ở chỗ khác thì chỉ có cách copy-paste. 1960S – STRUCTURED PROGRAMMING (LẬP TRÌNH CẤU TRÚC) Algol ~1958 Lập trình cấu trúc là bước tiến hóa tiếp theo sau đó. Nó mang đến khả năng cấu trúc các dòng lệnh theo block, cung cấp các giao diện (key word) để sử dụng các lệnh if, else, loop, case, … và...

50 keywords mà mọi JAVA developer nên biết
Java hiện là ngôn ngữ lập trình phổ biến hàng đầu tại Việt Nam và rất nhiều sinh viên CNTT muốn theo đuổi ngôn ngữ này để phát triển sự nghiệp của mình. Có không ít khó khăn bạn cần phải vượt qua để làm chủ ngôn ngữ đầy rắc rối ấy và việc đầu tiên là hiểu những keywords – những từ khóa trong lập trình java . Việc này sẽ làm tiền đề giúp bạn trong việc tự học, tự trải nghiệm thách thức từ java. Xem thêm cơ hội việc làm java developer tốt nhất thị trường 5 điều lập trình viên Java Developer chắc chắn sẽ thích ở Kotlin 10 lý do cho thấy tại sao bạn nên theo học ngôn ngữ lập trình Java Abstract : Khai báo lớp, phương thức và interface trừu tượng không có thể hiện (instance) cụ thể Assert : Kiểm tra điều kiện đúng hay sai (hay dùng trong Unit Test) Boolean : Khai báo biến kiểu logic với hai giá trị: True or False Break : Lệnh switch-case hoặc dùng để thoát khỏi vòng lặp Byte : Các giá trị nguyên chiếm 8 bit (1byte) Case : Trường hợp được chọn theo Switch (chỉ dùng khi được đi kèm Switch) Catch : Dùng để bắt ngoại lệ, dùng kèm với try để xử lý những ngoại lệ nảy sinh trong chương trình Char : Là kiểu ký tự Unicode, mỗi ký tự có 16 bit (2 byte) Class : Dùng để định nghĩa class Const : Không thể dùng trong java bởi nó chưa được sử dụng Continue : Được dùng để dừng chu trình (interation) lặp hiện tại và bắt đầu chu trình kế tiếp Tham khảo các job đang được global cybersoft tuyển dụng Default : Mặc...

Realtime API trong 5 phút với FeathersJS
Tác giả: Thành Nguyễn Lời mở đầu Sau một thời gian sử dụng Firebase và gặp phải một số hạn chế nhất định (xin phép không được đề cập) thì mình quyết định ra đi tìm đường cứu dự án. Nhu cầu tại thời điểm đó của mình trước hết là phải đáp ứng được realtime data , dễ tiếp cận cho dev, khả năng custom cao để dễ phát triển thêm tính năng và đặc biệt nếu có hỗ trợ TypeScript thì đó sẽ là một điểm cộng. Sau một thời gian tìm hiểu thì mình quyết định ra khơi với con tàu FeathersJS . FeathersJS có gì hot? FeathersJS là một framework xây dựng theo hướng service-oriented . Các đặc trưng riêng của FeathersJS các bạn có thể đọc thêm tại đây . Dưới đây là một số cảm nhận của mình sau vài tuần vọc về nó: Document tốt, giải thích kỹ và có liên kết rất rõ ràng Open source nên việc custom lại framework là hoàn toàn có thể (nếu bạn đủ khả năng và thời gian) Hỗ trợ thư viện cho cả frontend và backend để giúp việc kết nối dễ dàng hơn (bạn vẫn có thể kết nối bằng tay nếu muốn, có document cho việc này ngay tại trang chủ) Hướng tiếp cận vấn đề theo service khá thú vị, vừa giúp dev tập trung giải quyết về business logic vừa hỗ trợ quá trình scale về sau (tách thành microservice chẳng hạn) CÓ TYPESCRIPT Có Command-Line Interface (CLI) để generate code (lười gõ như mình RẤT THÍCH điểm này) Có nhiều plugins hay và hữu ích. Xem thêm tại đây Mình tuy là dân frontend nhưng khi làm và phát triển ứng dụng với FeathersJS thấy khá thoải mái, không phải...

Convert giá trị String qua Number trong Javascript
Bài viết được sự cho phép của tác giả Lưu Bình An Javascript rất lạ kỳ, convert giá trị String qua number cũng lắm nẻo dăm ba đường,nào NaN, nào radix. Bài này chúng ta cùng tìm hiểu parseFloat(), Number(), Number.isNaN(), isNaN() Một cách ngắn gọn, chúng ta nên dùng Number(x) để convert giá trị sang dạng number, hoặc parseFloat(x) nếu muốn chuẩn mực Để kiểm tra kết quả có convert được hay không, luôn dùng Number.isNaN() , không nên dùng phương thức global isNaN() . typeof parseFloat('42'); // 'number' Number.isNaN(Number('42')); // false typeof parseFloat('fail'); // 'number' Number.isNaN(Number('fail')); // true Sử dụng Number(x) sẽ có vài trường hợp đặc biệt, nó có thể là đúng cũng có thể là sai, tùy theo cách hiểu của chúng ta. Number(''); // 0 Rất nhiều dev sử dụng +x để convert giá trị x sang number. Theo như khai báo của javascript, +x sẽ tương tự như Number(x) +'42 fail'; // NaN +({ valueOf: () => '42' }); // 42 +({ toString: () => '42' }); // 42 +(null); // 0 +(' '); // 0 Cái sai của Number(x) Number(x) và parseFloat(x) xử trí các tình huống đặc biệt rất khác nhau, parseFloat() có vẻ dễ giải hơn khi chấp nhận một số kiểu String Number('42 fail'); // NaN parseFloat('42 fail') // 42 parseInt('42 fail') // 42 Number(' 10') // 10 parseFloat(' 10') // 10 parseInt(' 10') // 10 Đừng thấy vậy mà kết luận rằng Number(x) chuẩn mực và an toàn hơn. Thực ra, Number(x) hay lấn cấn khi string chứa khoảng trắng, null , và một số tính huống khác. Nó convert khá nhiều trường hợp sang 0. Number(null) // 0 Number('') // 0 Number(' ') // 0 Number(false) // 0 Number({ toString: () => '' }); // 0 Number({ valueOf:...

Đo thời gian render bằng Chrome
Bài viết được sự cho phép của tác giả Lưu Bình An Để thực hành bài này, bạn có thể sử dụng source code có sẵn này Trên tab Performance của DevTools chúng ta có 8 câu điều kiện khi render trong React Câu hỏi phỏng vấn mẹo về React: Component hay element được render trong browser? https://github.com/nolanlawson/measure-style-and-layout Đây là giá trị CPU đã tiêu tốn để render component, theo đơn vị là mili giây. Nó sẽ được thực hiện 4 bước Thực thi javascript Apply các format bằng CSS Tính layout, trình duyệt tiếp tục tính toán để “đặt” các element trên màn hình ở chỗ nào Render được thực hiện trên một thread riêng Đa phần mọi người sẽ bỏ qua các bước 2, 3, 4 khi đo, chỉ tính toán thời gian thực thi javascript Bước render rất khó có thể đo được chính xác, nó được thực hiện trên threat riêng và dùng GPU Phần style và layout thì có thể đo chính xác hơn vì nó block lại main thread Đo gì? Chúng ta sẽ đánh dấu từ khi javascript bắt đầu chạy, đến hết phần render Sử dụng requestAnimationFrame là chính, nó được gọi trước quá trình style và layout, nhưng thực tế trước Edge v18 và một số bản Safari thì không đúng, nên cũng có thể có chút sai xót requestAnimationFrame ( ( ) => { setTimeout ( ( ) => { performance . mark ( 'end' ) } ) } ) Phần code trong setTimeOut được gọi ngay sau bước paint Một số vấn đề setTimeOut đôi khi có sai lệch tầm 4ms trên một số trình duyệt Nếu có một setTimeOut callback khác trong code, có thể không còn đúng Sau này khi các trình duyệt đã hỗ trợ cách...

Phân biệt các level Developer? Thực tập, Fresher, Junior… có gì khác biệt?
Bài viết được sự cho phép của BQT Kinh nghiệm lập trình Trong ngành công nghệ, các thuật ngữ về lập trình viên được phân theo hệ thống cấp bậc rõ ràng. Tùy vào từng cấp có sự đánh giá nhất định về trình độ và kinh nghiệm riêng. Và mỗi cấp cũng có mức độ trách nghiệm riêng. Vậy làm thế nào để có thể phân biệt các level Developer? Thực tập, Fresher , Junior… liệu có giống nhau? Hãy cùng tham khảo bài viết sau đây để giải đáp mọi thắc mắc. Những nấc thang của sự nghiệp lập trình viên Fresher/Junior Developer Đây là nấc thang đầu tiên của những bạn sinh viên ngành IT khi mới ra trường. Fresher/Junior Developer không có bề dày kinh nghiệm lâu năm, người ở vị trí này chủ yếu tích lũy tầm 6 tháng – 1 năm kinh nghiệm làm việc chuyên nghiệp thực tế. Cũng vì thế, các công ty khi tuyển dụng bậc thang đầu tiên của sự nghiệp lập trình viên đều tổ chức các khóa training ngắn hạn. Fresher/Junior Developer đòi hỏi phải có thể viết được các script đơn giản, hiểu được toàn bộ vòng đời của một ứng dụng và phải có hiểu biết sơ bộ về cơ sở dữ liệu cũng như các dịch vụ ứng dụng. Đây là level đầu tiên cũng là bước khởi đầu để bước trên con đường trở thành một lập trình viên chuyên nghiệp. Vì vậy, khi còn là một Fresher/Junior Developer cần cố gắng tích lũy kiến thức, kinh nghiệm để có được nền tảng vững chắc cho các bước tiến sau. Cách tốt nhất đơn giản nhất để có thể phân biệt các cấp Developer Senior Developer Senior Developer là cấp thứ 2 sau khi...

Giới thiệu Abstract Factory Pattern
Bài viết được sự cho phép của tác giả Nguyễn Văn Minh Pattern thứ hai mà mình muốn giới thiệu chính là Abstract Factory. Nó có thể được hình dung như một nhà máy lớn, bên trong có các nhà máy nhỏ hơn sản xuất ra những loạt sản phẩm liên quan đến nhau. Hãy lấy một hãng sản xuất ô tô làm ví dụ, chẳng hạn Hyundai. Họ có nhà máy, hoặc xưởng, chế tạo bánh xe: bánh của Azera, bánh của Sonata, bánh của Veloster, v.v… Đến lượt cửa xe, cũng có nhà máy chế tạo cửa Azera, cửa Sonata, cửa Veloster. Thân xe, động cơ, đèn, và các thành phần khác có những nhà máy chế tạo chúng. Design pattern là gì? Tại sao nên sử dụng Design pattern? Hướng dẫn sử dụng Factory trong Design Pattern Vậy phải tổ chức việc sản xuất ấy như thế nào? Cùng theo dõi tiếp nhé! Nếu mới làm quen với Design Pattern, có thể bạn sẽ muốn đọc bài tổng quan của mình tại đây hoặc bài về Singleton tại đây . ABSTRACT FACTORY Giống như ở bài trước về Singleton, bài này gồm 5 phần: Ý tưởng chính Vấn đề cần giải quyết Cấu trúc Code ví dụ Lưu ý Vài lời bình luận Ý tưởng chính Khai báo một interface với các phương thức tạo các đối tượng abstract. Một hệ thống phân cấp với các “dòng xe” và các “bộ phận xe”. Tránh sử dụng từ khoá new . Vấn đề cần giải quyết Khi bạn muốn phần mềm của mình có thể được triển khai trên nhiều nền tảng khác nhau, bạn phải tìm cách xử lý việc khởi tạo các đối tượng trên các nền tảng đó. “Nền tảng” ở đây có thể hiểu...