Mùa tuyển dụng đã bắt đầu rồi, cả nhà ơi! Đặc biệt trong thời điểm này, TopDev hứa hẹn mang đến chương trình ‘Thời Điểm Vàng, Thăng Hạng Sự Nghiệp‘ với những phần quà không thể chối từ. Hãy nhanh tay đăng ký tài khoản hoặc trải nghiệm ngay những tính năng vô cùng tiện ích trên TopDev như Tạo CV Online hoặc Chuẩn Hóa CV để tham gia ngay chương trình này nhé!
Hướng dẫn tự quyết toán thuế TNCN online dành cho Người lao động | Năm 2023
Bài viết gốc được đăng tải tại thuvienphapluat.vn
Các cá nhân thuộc diện tự quyết toán thuế TNCN năm 2023
Những trường hợp không được ủy quyền quyết toán thuế TNCN thì phải tự quyết toán thuế TNCN từ tiền lương, tiền công.
- Cá nhân cư trú có thu nhập từ tiền lương, tiền công trực tiếp khai quyết toán thuế TNCN với cơ quan thuế nếu có số thuế phải nộp thêm hoặc có số thuế nộp thừa đề nghị hoàn hoặc bù trừ vào kỳ khai thuế tiếp theo.
- Cá nhân có mặt tại Việt Nam tính trong năm dương lịch đầu tiên dưới 183 ngày, nhưng tính trong 12 tháng liên tục kể từ ngày đầu tiên có mặt tại Việt Nam là từ 183 ngày trở lên thì năm quyết toán đầu tiên là 12 tháng liên tục kể từ ngày đầu tiên có mặt tại Việt Nam.
- Cá nhân là người nước ngoài kết thúc hợp đồng làm việc tại Việt Nam khai quyết toán thuế với cơ quan thuế trước khi xuất cảnh. Trường hợp cá nhân chưa làm thủ tục quyết toán thuế với cơ quan thuế thì thực hiện ủy quyền cho tổ chức trả thu nhập hoặc tổ chức, cá nhân khác quyết toán thuế theo quy định về quyết toán thuế đối với cá nhân.
Trường hợp tổ chức trả thu nhập hoặc tổ chức, cá nhân khác nhận ủy quyền quyết toán thì phải chịu trách nhiệm về số thuế TNCN phải nộp thêm hoặc được hoàn trả số thuế nộp thừa của cá nhân. - Cá nhân cư trú có thu nhập từ tiền lương, tiền công đồng thời thuộc diện xét giảm thuế do thiên tai, hỏa hoạn, tai nạn, bệnh hiểm nghèo ảnh hưởng đến khả năng nộp thuế thì không ủy quyền cho tổ chức, cá nhân trả thu nhập quyết toán thuế thay mà phải trực tiếp khai quyết toán với cơ quan thuế theo quy định.
Các bước tự quyết toán thuế TNCN online năm 2023
BƯỚC 1: Đăng nhập hệ thống/Nhập thông tin
Truy cập hệ thống thuế điện tử của Tổng cục Thuế và đăng nhập TẠI ĐÂY
Người nộp thuế điền thông tin mã số thuế và mã kiểm tra rồi nhấn tiếp tục. (Trường hợp quên mã số thuế thì người nộp thuế có thể tham khảo cách tra cứu mã số thuế Tại đây)
Sau khi đăng nhập thành công, sẽ xuất hiện giao diện như hình phía trên.
Chọn “Quyết toán thuế”, sau đó chọn “kê khai trực tuyến” và điền nội dung kê khai online.
Sau đó tại mục “Chọn thông tin tờ khai”, người nộp thuế điền các thông tin bắt buộc và chọn Tờ khai 02/QTT-TNCN.
Tùy theo trường hợp của người nộp thuế mà tích chọn mục phù hợp.
Chọn Cơ quan thuế Quyết toán: nhập vào các ô tương ứng, tích chọn một trong 03 trường hợp:
- Trường hợp 1: Tích vào ô này nếu NNT có duy nhất 01 nguồn trực tiếp khai thuế trong năm do làm việc tại các tổ chức quốc tế, Đại sứ quán, Lãnh sự quán tại Việt Nam hoặc nguồn từ nước ngoài (không khấu trừ tại nguồn). Sau đó, NNT lựa chọn CQT đã khai trực tiếp trong năm tại ô “Cục thuế” trực tiếp khai thuế trong năm. Sau đó lựa chọn Cục thuế quản lý tổ chức chi trả (chọn cơ quan thuế ở phần tra cứu MST). Loại tờ khai: tờ khai chính thức/bổ sung.
- Trường hợp 2: Tích vào ô này nếu NNT trực tiếp khai thuế trong năm có từ 02 nguồn trở lên bao gồm cả trường hợp vừa có thu nhập thuộc diện khai trực tiếp trong năm, vừa có thu nhập do tổ chức trả thu nhập đã khấu trừ. Sau đó, người nộp thuế tự kê khai các nguồn thu nhập và thông tin liên quan theo bảng.
- Trường hợp 3: Tích vào ô này nếu NNT không trực tiếp khai thuế trong năm chỉ có nguồn thu nhập thuộc diện khấu trừ qua tổ chức trả thu nhập. Sau đó khai thông tin về việc thay đổi nơi làm việc.
**Trường hợp 3.1: NNT tích vào ô này nếu có thay đổi nơi làm việc. Sau đó khai thông tin vào ô 1 hoặc ô 2.
– Ô 1: Tại thời điểm quyết toán NNT đang tính giảm trừ gia cảnh cho bản thân tại tổ chức chi trả. Nếu tích vào ô này thì tiếp NNT tục nhập thông tin mã số thuế của tổ chức chi trả tính GTGC cho bản thân.
Nhập Mã số thuế của Tổ chức chi trả thu nhập, nơi đăng ký GTGC cho bản thân
– Ô 2: Tại thời điểm QT NNT không làm việc cho tổ chức chi trả hoặc không tính GTGC cho bản thân tại bất kỳ tổ chức chi trả nào. Nếu tích vào ô này NNT tiếp tục lựa chọn cơ quan thuế quản lý tại nơi cư trú (tạm trú hoặc thường trú).
**Trường hợp 3.2: NNT tích vào ô này nếu không thay đổi nơi làm việc.Sau đó khai thông tin vào ô 3 hoặc ô 4 hoặc ô 5.
– Ô 3: Tại thời điểm QT vẫn còn làm việc tại tổ chức chi trả. Nếu tích vào ô này NNT tiếp tục nhập thông tin MST của tổ chức chi trả để hệ thống hỗ trợ tự động xác định cơ quan thuế quyết toán.
– Ô 4: Tại thời điểm quyết toán đã nghỉ việc và không làm việc tại bất kỳ tổ chức chi trả nào nào; Nếu tích vào ô này thì NNT tiếp tục lựa chọn cơ quan thuế quản lý tại nơi cư trú (tạm trú hoặc thường trú).
– Ô 5: Tại thời điểm quyết toán NNT chưa tính giảm trừ gia cho bản thân ở bất kỳ tổ chức trả thu nhập nào (tổ chức khấu trừ thuế 10% tại nguồn của cá nguồn). Nếu tích vào ô này NNT tiếp tục lựa chọn cơ quan thuế quản lý tại nơi cư trú (tạm trú hoặc thường trú).
***
Nhấn Tiếp tục => Đến phần NHẬP DỮ LIỆU TỜ KHAI
Ví dụ trường hợp người nộp thuế có thu nhập tại 2 nơi (đã thay đổi nơi làm việc) và đã khấu trừ thuế tại nguồn. Khi nhập mã số thuế của đơn vị thực hiện khấu trù thuế tại thời điểm đang thực hiện quyết toán thuế thì hệ thống tự động nhận diện cơ quan quyết toán thuế. (Xem hình chụp bên dưới)
Tiếp theo, người nộp thuế chọn trường hợp quyết toán thuế.
Chọn “Năm kê khai” là năm 2023 (từ tháng 01/2023 đến tháng 12/2023).
Lưu ý: Trường hợp người nộp thuế thuộc diện xét giảm thuế do thiên tai, hỏa hoạn, tai nạn, bệnh hiểm nghèo ảnh hưởng đến khả năng nộp thuế thì người nộp thuế nộp hồ sơ xét giảm thuế đến cơ quan thuế nơi nộp hồ sơ quyết toán thuế trực tiếp.
Chọn “Tiếp tục” để chuyển đến bước khai tờ khai quyết toán.
BƯỚC 2: Nhập dữ liệu tờ khai
Người nộp thuế nhập dữ liệu tờ khai quyết toán thuế
[01] đến [06]: Hệ thống tự động nhập
Click chọn Tờ khai quyết toán thuế kèm theo hồ sơ giảm thuế do thiên tai, hoả hoạn, tai nạn, bệnh hiểm nghèo nếu người nộp thuế thuộc trường hợp này
[07] đến [08]: Chọn tỉnh, thành phố ở mục 08 trước, sau đó chọn quận huyện ở mục 07
[09]: Điền số điện thoại của NNT: (Bắt buộc điền)
[10]: Fax: Không bắt buộc
[11]: Điền địa chỉ email của NNT. (Bắt buộc điền)
[12] đến [14] Thông tin liên quan đến đại lý thuế (nếu có)
[15] đến [19] Hệ thống tự động điền thông tin
[20] Tổng thu nhập chịu thuế (TNCT) trong kỳ [20]=[21]+[23]
[21] Tổng TNCT phát sinh tại Việt Nam
Là tổng các khoản thu nhập chịu thuế từ tiền lương, tiền công và các khoản thu nhập chịu thuế khác; có tính chất tiền lương tiền công phát sinh tại Việt Nam; bao gồm cả thu nhập chịu thuế từ tiền lương; tiền công do làm việc trong khu kinh tế và thu nhập chịu thuế được miễn theo Hiệp định tránh đánh thuế hai lần (nếu có).
Thu nhập phát sinh ở đâu thì cơ quan chi trả thu nhập xuất chứng từ cho cá nhân, cá nhân lấy thông tin về thu nhập trên các chứng từ đó nhập vào tờ khai.
Ví dụ: Năm 2022, Dương Văn A làm công ty X từ tháng 1 đến tháng 4 có tổng thu nhập chịu thuế theo chứng từ là 50.000.000 đồng, làm công ty Y từ tháng 5 đến tháng 12 có tổng thu nhập chịu thuế theo chứng từ là 200.000.000 đồng. Như vậy tại chỉ tiêu [21], anh A sẽ nhập 250.000.000 đồng.
[22] Tổng TNCT phát sinh tại Việt Nam được miễn giảm theo Hiệp định (nếu có)
[23] Tổng TNCT phát sinh ngoài Việt Nam
[24] Số người phụ thuộc: Chỉ tiêu này hệ thống tự động điền theo số người phụ thuộc mà NTT đã đăng ký.
[25] Các khoản giảm trừ ([25]= [26] + [27] + [28] + [29] + [30]
[26] Giảm trừ cho bản thân cá nhân: Hệ thống tự điền sẵn là 132.000.000 đồng
[27] Giảm trừ cho những người phụ thuộc được giảm trừ: Hệ thống sẽ tính số tiền được giảm trừ theo số người phụ thuộc được đăng ký.
[28] Từ thiện, nhân đạo, khuyến học: NTT tự điền thông tin này theo chứng từ
[29] Các khoản đóng bảo hiểm được trừ: NNT tự điền thông tin này theo chứng từ
[30] Khoản đóng quỹ hưu trí tự nguyện được trừ: NNT tự điền thông tin này theo chứng từ
[31] Tổng thu nhập tính thuế ([31]=[20]-[22]-[25]): Hệ thống sẽ tự tính dựa trên thông tin mà NNT đã nhập
[32] Tổng số thuế thu nhập cá nhân (TNCN) phát sinh trong kỳ: Hệ thống sẽ tự tính dựa trên thông tin mà NNT đã nhập
***
[33] Tổng số thuế đã nộp trong kỳ: ([33]=[34]+[35]+[36]-[37]-[38])
[34] Số thuế đã khấu trừ tại tổ chức trả thu nhập
Số thuế đã khấu trừ tại tổ chức trả thu nhập là số thuế mà tổ chức chi trả thu nhập đã khấu trừ (căn cứ theo chứng từ khấu trừ thuế TNCN).
[35] Số thuế đã nộp trong năm không qua tổ chức trả thu nhập
Số thuế đã nộp trong năm không qua tổ chức trả thu nhập là số thuế TNCN mà cá nhân đã nộp vào ngân sách nhà nước theo mã số thuế của cá nhân người nộp thuế không qua tổ chức trả thu nhập.
[36] Số thuế đã nộp ở nước ngoài được trừ (nếu có)
[37] Số thuế đã khấu trừ, đã nộp ở nước ngoài trùng do quyết toán vắt năm
[38] Số thuế đã nộp trong năm không qua tổ chức trả thu nhập trùng do quyết toán vắt năm
[39] Tổng số thuế TNCN được giảm trong kỳ [39]=[40]+[41]
[40] Số thuế phải nộp trùng do quyết toán vắt năm
[41] Tổng số thuế TNCN được giảm khác
[42] Tổng số thuế còn phải nộp trong kỳ ([42]=([32]-[33]-[39])>0)
[43] Số thuế được miễn do cá nhân có số tiền thuế phải nộp sau quyết toán từ 50.000 đồng trở xuống (0<[42]<=50.000 đồng)
[44] Tổng số thuế nộp thừa trong kỳ ([44]=([32]-[33]-[39])<0)
[45] Tổng số thuế đề nghị hoàn trả [45]=[46]+[47]
[46] Số thuế hoàn trả cho người nộp thuế
[47] Số thuế bù trừ cho khoản phải nộp ngân sách nhà nước khác
[48] Tổng số thuế bù trừ cho các phát sinh của kỳ sau ([48]=[44]-[45])
Trường hợp người nộp thuế đề nghị hoàn trả vào tài khoản của người nộp thuế tại chỉ tiêu [46] thì ghi thêm các thông tin sau:
Trường hợp người nộp thuế đề nghị bù trừ cho khoản phải nộp ngân sách nhà nước khác tại chỉ tiêu [47] thì ghi thêm các thông tin sau:
Đến bước này, người nộp thuế đã có thể xác định được số thuế TNCN được hoàn hay phải nộp thêm.
Sau khi điền xong thì NNT chọn “Hoàn thành kê khai”.
BƯỚC 3: Nộp hồ sơ
Trường hợp cá nhân có tài khoản giao dịch thuế điện tử
=> Bấm Lưu bản nháp + Hoàn thành kê khai => Kết xuất xml => Gửi tờ khai => Chọn phụ lục đính kèm => Chọn chứng từ khấu trừ (Choose File) => Chọn tiếp tục => Nhập mã xác thực OTP (gửi về điện thoại) => Nộp Tờ khai thành công.
Trường hợp cá nhân chưa có tài khoản giao dịch thuế điện tử
– Bấm Lưu bản nháp + Hoàn thành kê khai
– Chọn kết xuất XML
NNT chọn kết xuất XML trước khi gửi tờ khai.
NNT lưu lại file.
Chọn Nộp tờ khai, Nhập mã kiểm tra để xác thực nộp tờ khai và chọn Tiếp tục.
In tờ khai
Tại bước sau khi chọn “Kết xuất XML“, hệ thống sẽ gửi về cho bạn file tờ khai theo định dạng XML. Sử dụng máy tính có cài itax viewer để mở file tờ khai theo định dạng XML => In => Ký tên người khai thuế.
Tải về ứng dụng itax viewer dưới đây, cài đặt như như các ứng dụng thông thường. Sau khi đã cài đặt thì bạn có thể mở file “kết xuất XML” như bình thường và chọn in 2 bản (Mở file đã kết xuất xml bằng phần mềm iTaxview mới nhất) và nộp đến Cơ quan Thuế (Bộ phận một cửa).
Cách mở file định dạng XML sau khi đã cài đăt xong: Bạn double click để mở hoặc nhấn chuột phải chọn Open.
Trường hợp muốn kiểm tra lại trạng thái Tờ khai đã gửi => Vào Tab: “Tra cứu tờ khai” => Lựa chọn loại tờ khai => Chọn ngày gửi => Tra cứu (mục đích kiểm tra Tờ khai đã được ghi nhận vào hệ thống của Cơ quan Thuế chưa).
Prototype chain là gì? Cách sử dụng Prototype chain hiệu quả
Prototype chain là một khái niệm cốt lõi trong JavaScript nhưng không dễ để nắm vững được nhất là đối với các anh em lập trình viên mới học ngôn ngữ này. Hiểu được khái niệm này sẽ giúp bạn dễ dàng triển khai được cơ chế kế thừa trong lập trình hướng đối tượng bằng JS. Bài viết hôm nay chúng ta cùng nhau đi sâu vào khái niệm quan trọng này nhé.
Prototype là gì?
Trong JavaScript, ngoại trừ undefined thì toàn bộ các kiểu còn lại đều là object. Các kiểu dữ liệu nguyên thủy (primitive) như string, số, boolean lần lượt sẽ là các object dạng String, Number, Boolean. Mảng là một object dạng Array, hàm trong JS cũng được xem là một object dạng Function. Vậy ý nghĩa của khái niệm object “dạng” này hay “dạng” kìa là gì? Và làm sao chúng ta biết được 1 object được tạo ra với dạng nào? Để giải quyết vấn đề này thì JS tạo ra khái niệm Prototype.
Nếu như với các ngôn ngữ OOP (hướng đối tượng), kiểu class-based giúp chúng ta xác định rõ một object được tạo ra thuộc vào một class nào, sẽ kế thừa những thuộc tính (properties) và phương thức (methods) nào; thì với JS, việc kế thừa sẽ thực hiện theo kiểu prototype-based. Tất cả các object trong JS đều có một Prototype và các object này kế thừa các thuộc tính cũng như phương thức từ Prototype của mình. Bản thân Prototype là một instance object, chúng ta sử dụng thuộc tính __proto__ để truy cập tới nó.
Với mỗi function trong JavaScript sẽ có một thuộc tính prototype mặc định với kiểu dữ liệu là object. Để thực hiện kế thừa các thuộc tính và phương thức của 1 function trong JS, chúng ta sử dụng thuộc tính prototype này để thêm vào; sau đó thì các đối tượng con tạo ra bởi hàm khởi tạo (constructor) sẽ đều mang các giá trị trong thuộc tính prototype này. Điều này chính là điểm mấu chốt cho khái niệm Prototype chain hay là cơ chế triển khai kế thừa trong JavaScript.
Ví dụ như hình vẽ trên, các object b và c sẽ đều có một Prototype là Foo.prototype có thể truy cập thông qua thuộc tính __proto__. Bản thân Foo là một function, nó sẽ chứa thuộc tính prototype; điều này có nghĩa rằng các object b, c được khởi tạo thông qua hàm constructor của Foo sẽ được kế thừa các phương thức như calculate hay thuộc tính x = 10 có sẵn. Đây chính là cơ chế triển khai tính kế thừa trong OOP của JavaScript.
Prototype chain là gì?
Prototype chain hay chuỗi Prototype, như cái tên của nó, đề cập đến chuỗi quá trình lặp lại trong việc tìm ra các thuộc tính, phương thức đầy đủ của một đối tượng. Như đã nói ở phần trước, một object sẽ có một prototype của riêng mình chứa thông tin về các thuộc tính và phương thức. Vì thế khi ta gọi tới một thuộc tính (hay phương thức) của đối tượng, ban đầu JS sẽ tìm trong thuộc tính riêng của đối tượng; nếu không tìm thấy nó sẽ tiếp tục tìm trong prototype của đối tượng và lặp lại quá trình này với prototype của prototype của đối tượng cho đến khi gặp Object.prototype thì dừng lại và cho ra kết quả undefined nếu không tìm thấy.
Tóm lại thì bạn cần nhớ rằng trong JS, mỗi đối tượng sẽ có một liên kết ẩn với prototype của nó – nơi mà sẽ khai báo các thuộc tính và phương thức mà đối tượng đó có, đồng thời cũng là một object chứa liên kết ẩn đến một prototype khác chứa thông tin về prototype này. Prototype chain chính là cơ chế cho phép các đối tượng truy cập vào toàn bộ các thuộc tính, phương thức được định nghĩa bên trong object và toàn bộ các chuỗi prototype gắn với nó.
Tham khảo việc làm Javascript lương hấp dẫn trên TopDev!
Cách sử dụng Prototype chain
Lý thuyết nhiều quá nên chúng ta sẽ đến với phần triển khai code để có thể dễ hiểu hơn nhé. Đầu tiên chúng ta khai báo 1 hàm Person như dưới đây với 2 thuộc tính có sẵn là name và email:
function Person(name, email) { this.name = name; this.email = email; }
Như đã nói ở phần trước thì function Person này sẽ có 1 thuộc tính là prototype; bản thân Prototype này cũng là một object, vì thế chúng ta có thể thêm thuộc tính số điện thoại vào cho nó:
Person.prototype.phone = "0987654321"; let nguyenVanA = new Person("Nguyễn Văn A", "a.nv@gmail.com"); console.log(nguyenVanA); // {name: 'Nguyễn Văn A', email: 'a.nv@gmail.com'} console.log(nguyenVanA.phone); //0987654321
Đoạn code trên tạo ra đối tượng nguyenVanA với 2 thuộc tính (name và email) có trong function Person và 1 thuộc tính (phone) lấy từ prototype của Student. Kết quả khi console.log ra nguyenVanA thì sẽ chỉ cho ra 2 thuộc tính name và email; nhưng chúng ta vẫn sẽ truy cập được thuộc tính phone ở câu console.log bên dưới bình thường.
Tương tự với việc thêm phương thức (methods) cho prototype, chúng ta có thể triển khai như dưới đây:
Person.prototype.showName = function () { console.log(this.name); }; console.log(nguyenVanA.showName()); //Nguyễn Văn A
Thuộc tính phone và phương thức showName được nằm trong chính prototype của Person.
Để triển khai việc kế thừa code trong JavaScript, chúng ta có thể làm theo cách dưới đây. Trước tiên hãy tạo ra 1 hàm Student dùng cho việc kế thừa hàm Person ở trên (ở đây hiểu khái niệm hàm sẽ tương tự với khái niệm class trong OOP).
function Student(id, score) { this.id = id; this.score = score; this.showScore = function () { console.log(this.score); }; } Student.prototype = new Person();
Student sẽ có thêm 2 thuộc tính là id và score cùng 1 phương thức là showScore. Ngoài ra prototype của Student được kế thừa từ Person nên chúng ta có thể dễ dàng sử dụng các thuộc tính name, email, phone hay phương thức showName.
let leThiB = new Student(1, 100); leThiB.name = "Lê Thị B"; leThiB.showName(); //Lê Thị B leThiB.showScore(); //100 console.log(leThiB.phone); //0987654321
Kết bài
Như vậy chúng ta đã cùng tìm hiểu về khái niệm Prototype chain trong JavaScript cùng với cách triển khai tính kế thừa trong ngôn ngữ lập trình này. Nắm chắc được cơ chế Prototype sẽ giúp bạn hiểu rõ hơn về JS cũng như OOP và cải thiện các kỹ năng lập trình của mì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.
Tác giả: Phạm Minh Khoa
Có thể bạn quan tâm:
- 5 thủ thuật hay với Javascript Promise bạn cần biết!
- Tìm hiểu về phong cách Point-Free trong JavaScript
- Cách sắp xếp các phần tử trong mảng Javascript
Xem thêm các việc làm Developer hấp dẫn tại TopDev
Bí quyết gõ code siêu tốc và hiệu quả cho lập trình viên
Gõ code nhanh là một kỹ năng thiết yếu cho mọi lập trình viên. Nó giúp bạn tiết kiệm thời gian, tăng hiệu quả công việc và giảm thiểu lỗi sai. Để gõ code nhanh, bạn cần kết hợp nhiều yếu tố: kỹ năng gõ phím, kiến thức lập trình, sử dụng công cụ hỗ trợ và thói quen luyện tập. Trong bài viết này, TopDev sẽ hướng dẫn bạn cách gõ code nhanh bằng một số “mẹo” hữu ích.
Vì sao lập trình viên cần gõ code nhanh?
Tốc độ gõ code ảnh hưởng trực tiếp đến hiệu suất làm việc của lập trình viên. Trong quá trình phát triển phần mềm, thời gian là một yếu tố quý báu, và việc gõ code nhanh giúp tiết kiệm thời gian và nâng cao năng suất làm việc.
Bên cạnh đó, tốc độ gõ code cũng ảnh hưởng đến tinh thần làm việc và sự tập trung của lập trình viên. Việc gõ code chậm có thể dẫn đến mất tập trung và gây ra sự gián đoạn trong quá trình làm việc, ảnh hưởng đến hiệu suất làm việc tổng thể. Ngược lại, khi có khả năng gõ code nhanh, lập trình viên có thể tập trung hơn vào các vấn đề kỹ thuật và tối ưu hóa mã nguồn một cách hiệu quả.
Cuối cùng, việc gõ code nhanh cũng đồng nghĩa với việc giảm thiểu sai sót trong mã nguồn. Khi làm việc nhanh chóng, lập trình viên có thể dễ dàng bắt kịp lịch trình và đảm bảo chất lượng của mã nguồn. Điều này giúp tránh được các lỗi phát sinh và tiết kiệm thời gian cho việc kiểm tra và sửa lỗi sau này.
Cách gõ code nhanh hiệu quả
Bằng cách sử dụng kỹ thuật, công cụ hỗ trợ và thói quen luyện tập, bạn có thể trở thành một lập trình viên có khả năng gõ code nhanh, chính xác và hiệu quả. Hãy cùng khám phá những phương pháp và nguyên tắc cơ bản để nắm vững kỹ năng này và nâng cao hiệu suất trong quá trình lập trình.
Nâng cao kỹ năng gõ phím
- Luyện tập gõ phím mười ngón: Đây là cách gõ code nhanh cơ bản và chính xác. Sử dụng các phần mềm luyện gõ phím như Typing Tutor, Rapid Typing, Keybr để rèn luyện.
- Học cách gõ tắt: Sử dụng các phím tắt để gõ các lệnh, cú pháp phổ biến trong ngôn ngữ lập trình bạn sử dụng. Điều này giúp tiết kiệm thời gian và tăng hiệu suất trong quá trình lập trình.
- Tập trung vào việc gõ, hạn chế nhìn bàn phím: Hạn chế nhìn xuống bàn phím giúp bạn tập trung hơn và nâng cao tốc độ gõ code.
Tuyển NodeJS lương cao hấp dẫn cho bạn
Nắm vững kiến thức lập trình
- Nắm vững cú pháp và ngữ pháp của ngôn ngữ lập trình: Hiểu rõ cú pháp và ngữ pháp giúp bạn gõ code chính xác và tránh được các lỗi phổ biến.
- Hiểu rõ chức năng của các thư viện, framework: Hiểu rõ các thư viện, framework giúp bạn sử dụng chúng một cách hiệu quả và tiết kiệm thời gian gõ code.
- Sử dụng các snippet code: Lưu trữ các đoạn mã thường dùng giúp bạn tiết kiệm thời gian và tăng độ chính xác trong quá trình lập trình.
Tận dụng các công cụ hỗ trợ
- Sử dụng IDE phù hợp: Chọn IDE có các tính năng hỗ trợ như auto-completion, syntax highlighting, linting, debugging để giúp bạn gõ code nhanh chóng và chính xác.
- Sử dụng các plugin hỗ trợ gõ code: Cài đặt các plugin để mở rộng chức năng và tăng cường khả năng gõ code trong IDE của bạn.
- Sử dụng code editor online: Code editor online là một cách gõ code nhanh mọi lúc mọi nơi mà không cần cài đặt phần mềm, tiện lợi khi di chuyển hoặc làm việc từ xa.
Tạo thói quen luyện tập
- Luyện tập gõ code thường xuyên: Thực hành gõ code hàng ngày giúp bạn tăng tốc độ gõ và cải thiện độ chính xác.
- Tham gia các cộng đồng lập trình: Tham gia các cộng đồng lập trình để học hỏi kinh nghiệm gõ code từ cộng đồng và chia sẻ kinh nghiệm của bạn.
2 công cụ hữu ích giúp cải thiện tốc độ gõ code
Typing.io là một công cụ tập trung vào việc cải thiện tốc độ và độ chính xác khi gõ code. Nó cung cấp các bài tập và văn bản chứa các đoạn mã nguồn phổ biến trong lập trình, từ JavaScript, Python, Java đến Ruby và nhiều hơn nữa. Mặc dù phiên bản miễn phí có giới hạn về số lượng bài tập và chức năng, giao diện đơn giản và thân thiện với người dùng của Typing.io là điểm cộng lớn.
SpeedCoder.net cung cấp một môi trường luyện tập đa dạng với các bài tập gõ code trong nhiều ngôn ngữ lập trình khác nhau. Tính năng này giúp lập trình viên cải thiện kỹ năng gõ code một cách linh hoạt, từ cấp độ cơ bản đến nâng cao. Giao diện đẹp mắt và dễ sử dụng, cùng với thống kê và phản hồi sau mỗi bài tập, là những điểm nổi bật của SpeedCoder.net.
Tóm lại, bài viết này đã giới thiệu đến bạn các cách gõ code nhanh hiệu quả. Việc gõ code nhanh không chỉ là kỹ năng, mà còn là một công cụ mạnh mẽ để tối ưu hóa quá trình lập trình. Bằng cách áp dụng các phương pháp, công cụ hỗ trợ và thói quen luyện tập, bạn có thể trở thành một lập trình viên có khả năng gõ code nhanh, chính xác và hiệu quả.
Xem thêm:
- Clean Code là gì? Tại sao phải CLEAN CODE trong lập trình?
- 5 tips thúc đẩy sự sáng tạo trong quá trình coding
- 8 ý tưởng thu nhập phụ cho lập trình viên
Xem thêm Việc làm IT Jobs for Developer hấp dẫn trên TopDev
Cách xử lý conflict khi git merge – Vấn nạn đau đầu của mọi Dev
Bài viết được sự cho phép bởi tác giả Sơn Dương
Git là một trong những giải pháp quản lý mã nguồn dự án hiệu quả nhất ở thời điểm hiện tại.
Đặc biệt là các dự án lớn, có nhiều thành viên tham gia, Git luôn thể hiện rõ sức mạnh. Tuy nhiên, mình tin là bạn đã từng rất bực mình, chỉ biết ngẩng mặt lên trời mà hét “Trời ơi”.
Bản thân mỗi khi bắt đầu một dự án mới, mình luôn phổ biến với các thành viên về quy tắc submit/pull code trên git, để hạn chế tối đa việc bị conflict mỗi khi merge các branch.
Tất nhiên, người tính không bằng trời tính, đôi lúc vẫn xảy ra trường hợp bị conflict code. Bạn sẽ giải quyết lỗi git conflict này như thế nào? Dưới đây là một cách mà mình muốn chia sẻ với bạn.
Git conflict là gì? Khi nào thì xảy ra conflict?
Hiểu đơn giản thì Git là hệ thống quản lý các phiên bản của một file mã nguồn. Thông thường, các developer trong dự án sẽ làm việc trên các nhánh dành riêng. Khi task hoàn thành, developer sẽ tạo merge request để merge code từ nhánh của họ vào nhánh master (nhánh chính của dự án).
Với nhóm dự án của mình, các developer luôn được yêu cầu phải pull code từ nhánh master về nhánh của mình vào đầu mỗi ngày làm việc. Nhờ đó mà hạn chế tối đa bị lỗi git conflict khi merge ngược trở lại nhánh master.
Tuy nhiên, khi nhiều developer mà cùng chỉnh sửa ở cùng một dùng code thì khả năng bị conflict khi merge là vô cùng cao.
Hình minh họa trên là ví dụ điển hình gây ra git conflict. Từ một nhánh main, một bạn developer (nick name: abid) tách ra nhánh mới, chỉnh sửa một file có dòng code “Hello, World” thành “Hello, Cat”. Trong khi bạn abid đang thực hiện thay đổi, thì nhánh main cũng bị được dòng code thành “Hello, Dog”.
Bùm! Khi bạn abid mà tạo request merge từ nhánh abid vào nhánh main, lập tức sẽ bị lỗi conflict và không thể merge được. Điều không thể bàn cãi!
Câu lệnh git merge
có chức năng chính là hợp nhất hai nhánh và tự động xử lý conflict. Tuy nhiên, có những conflict mà không thể tự xử lý được, nó sẽ đánh dấu và dừng quá trình merge.
Những conflict này bắt buộc bạn phải xử lý thủ công.
Cách giải quyết git conflict bằng VS Code
Khi bạn thực hiện câu lệnh git merge và bị conflict. Bước đầu tiên, bạn cần tìm đến file bị báo conflict. Trong bài viết này, mình sử dụng VS Code để minh họa, còn các IDE khác cũng tương tự thôi.
Với VS Code, nó sẽ highlight đoạn code bị conflict.
Ở đây có 3 lựa chọn mà bạn có thể chọn nhanh:
- Accept Current Change: Tức là đoạn code conflict đó sẽ được thay thế bằng đoạn code của bạn, code mà bạn đang chỉnh sửa.
- Accept Incoming Change: Chấp nhận thay thế bằng đoạn code lấy từ nhánh code khác về mà do developer khác sửa.
- Accept Both Change: Lựa chọn này sẽ chấp nhận đoạn code của cả hai, cả của bạn và của developer khác. Thường là nó sẽ remix hai đoạn code lại với nhau, tỷ lệ code chạy được sau đó là rất thấp
- Giải pháp thủ công: Xóa hết đoạn code trong block conflict và tự viết lại code trong đó.
Sau khi đã quyết định lựa chọn xong, bạn nhớ xóa bỏ các ký tự === , <<<<, và >>>> để tránh bị lỗi compile.
Cuối cùng là thực hiện commit lại code sau khi đã resolve conflict theo các bước sau:
- Chạy lệnh
git status
để kiểm tra lại lần nữa những thay đổi - Chạy lệnh
git add [file name]
để thêm những file thay đổi vào stage - Thực hiện commit các thay đổi lên local repo bằng lệnh :
git commit -m “nội dung message”
- Cuối cùng là push code bằng lệnh
git push
Vậy là xong rồi đấy.
Tham khảo Job FrontEnd HOT trên TopDev!
Xử lý conflict trên Github
Đối với các dự án mã nguồn mở được quản lý trên Github, bạn sẽ phải thường xuyên kiểm tra các pull request của các bạn Contributors. Tất nhiên, cũng không thể tránh việc bị conflict.
Khi bạn mở một pull request, bạn sẽ biết được request này có bị conflict hay không? Nếu bị conflict thì bị ở những file nào?
Cách xử lý conflict trên github cũng hoàn toàn tương tự như trên VS Code thôi.
Đầu tiên, bạn cần tìm tới file được báo là bị conflict và tìm tới dòng được đánh dấu bằng các ký tự <<<<< ====, >>>>
Tương tự, bạn cũng cần phải đưa ra quyết định lựa chọn code của bạn, hay code từ base branch hoặc giữ cả hai.
Sau chọn xong thì bạn cũng cần phải xóa các ký tự đánh dấu <<<<< ====, >>>>
Cuối cùng là commit lại những thay đổi
Trên đây là một số kinh nghiệm và phương pháp để resolve các git conflict.
Câu “Resolve conflict là một nghệ thuật thì người resolve là một nghệ sĩ “ quả thực không hề sai tý nào. Trong quá trình giải quyết conflict thì công đoạn đưa ra quyết định lựa chọn code nào là quan trọng nhất.
Bạn có kinh nghiệm gì hay đừng ngại chia sẻ dưới bình luận nhé.
Bài viết gốc được đăng tải tại vntalking.com
Có thể bạn quan tâm:
- Git Submodules và ứng dụng trong việc chia sẻ tài nguyên dùng chung
- Git là gì mà lại giúp bạn và cả team làm việc tốt hơn?
- Những câu hỏi phỏng vấn về GIT cần nhớ ngay
Xem thêm Việc làm Developer hấp dẫn trên TopDev
Hiểu cơ chế layer caching khi build docker image để viết Dockerfile tốt hơn
Bài viết được sự cho phép của tác giả Tống Xuân Hoài
Vấn đề
Docker gần đây đang nổi đình đám trong cộng đồng IT nên ngày càng phổ biến, được nhiều người dùng hơn. Bằng chứng là tần suất từ Docker xuất hiện trong JD của nhà tuyển dụng ngày càng nhiều. Công ty của tôi sử dụng Docker, dự án của tôi cũng dùng Docker, dự án làm cho người khác cũng dùng nó… Docker xuất hiện như một giải pháp “đóng gói” quá thuận lợi cho cuộc cách mạng tự động hóa.
Nhưng có một điều đã tồn tại song song với nó từ xưa đến này là vấn đề build docker image khá tốn thời gian. Dung lượng của một “hình ảnh” docker nhiều khi lên đến cả hàng GB. Docker bổng nhiên trở thành một “sát thủ ổ cứng”. Nhiều câu nói đùa rằng, ông bạn có đủ ổ cứng không mà dám CI/CD với Docker? Nhưng trong bài viết này, tôi không nói về vấn đề nó ngốn dung lượng như thế nào, mà tập trung vào cách làm sao để giảm được tốc độ build docker image.
Có một vài cách để tăng tốc độ build cũng như làm giảm kích thước của docker image như chỉ cài đặt các gói cần thiết, sử dụng các hình ảnh cơ bản nhẹ (alpine), sử dụng ít layer nhất có thể… Chúng đều xoay quanh vấn đề là giữ cho docker tải xuống các tệp cần thiết ít nhất và nhẹ nhất.
Ngoài ra, còn một cách để tăng tốc là tận dụng layer caching của Docker. Vậy nó là gì thì xin mời bạn đọc tiếp bài viết dưới đây.
Sử dụng thứ tự lớp hình ảnh để có lợi cho bạn
Docker image được tạo thành từ các lớp (layer) xếp chồng lên nhau. Mỗi layer đại diện cho một hướng dẫn trong Dockerfile của image. Ví dụ một file Dockerfile như sau:
FROM ubuntu:18.04
LABEL org.opencontainers.image.authors="org@example.com"
COPY . /app
RUN make /app
RUN rm -r $HOME/.cache
CMD python /app/app.py
Mỗi dòng đại diện cho một layer, chúng có kích thước khác nhau và phụ thuộc vào lượng công việc mà chúng làm. Tổng dung lượng của các layer tạo thành dung lượng của image. Chính vì thế, layer càng nhiều và càng nặng thì image càng to. Để hiểu rõ hơn, hãy sử dụng lệnh docker history <image>
để biết chi tiết về các lớp tạo thành image.
Ví dụ dưới đây là các lớp và dung lượng của một redislabs/redisearch image:
$ docker history redislabs/redisearch
Kết quả giống như sau:
Mỗi lần sử dụng lệnh docker build image
, docker sẽ phải chạy qua lần lượt từng layer. Nhưng nếu tận dụng layer caching, docker chỉ thực sự tạo lại các lớp bắt đầu từ lớp có sự thay đổi trở về sau. Điều này đồng nghĩa với việc các layer không bị thay đổi đổ về trước có thời gian thực hiện gần như ngay lập tức. Nghĩa là bạn chỉ tốn thời gian cho lần chạy đầu tiên, ở các lần chạy sau đó docker sẽ tận dụng cache để build image.
Ví dụ dưới đây là một Dockerfile của ứng dụng viết bằng Node.js.
FROM node:18-alpine
WORKDIR /app
COPY . .
RUN npm install
Các gói phụ thuộc (dependencies) là rất ít khi bị thay đổi (thêm/sửa/xóa), cho nên khả năng sử dụng lệnh npm install
là rất hiếm. Nhưng trong ví dụ trên, rõ ràng dòng lệnh COPY đã làm xáo trộn, gây ra sự thay đổi của layer nên theo lẽ thường, tất cả layer phía sau nó phải được thực hiện mà không có bộ đệm. Bạn sẽ tốn thời gian lẫn băng thông mạng để chạy lệnh npm install
sau đó. Đây quả thực là cơn “ác mộng” trong mùa đứt cáp này.
Để tận dụng được cơ chế layer caching, hãy sửa và sắp xếp lại thứ tự layer một cách hợp lý hơn như sau.
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
Có thể thấy nếu package hoặc package-lock.json thay đổi, npm ci
sẽ được thực hiện. Còn nếu không thì 2 lệnh trên có thời gian thực hiện gần như là ngay lập tức.
Tổng kết
Có một vài cách để tăng tốc độ build docker image cũng như làm giảm kích thước của docker image. Trong số đó là tận dụng cơ chế layer caching mà docker cung cấp để sắp xếp thứ tự các layer sao cho đạt được ít nhất sự thay đổi, từ đó tăng tốc độ xây dựng các hình ảnh của bạn.
Bài viết gốc được đăng tải tại 2coffee.dev
Có thể bạn quan tâm:
- Sử dụng miễn phí Docker Registry của Gitlab
- Cài đặt Apache Kafka sử dụng Docker Compose
- Nginx và Apache là gì? So sánh Nginx và Apache
Xem thêm Việc làm IT hấp dẫn trên TopDev
Làm thế nào để biến ChatGPT thành một “chuyên gia”?
Bài viết được sự cho phép của tác giả Tống Xuân Hoài
Vấn đề
Cho đến thời điểm hiện tại, ChatGPT không còn là một cái gì đó quá mới. Nhớ lại lần đầu tiên sử dụng ChatGPT, tôi đã hơi bị “sock” khi nó có thể trả lời câu hỏi như một con người bằng cách diễn đạt hết sức tự nhiên, một điều mà trước đó chưa từng thấy ở bất kỳ chatbot nào. Cộng thêm sức mạnh của truyền thông, ChatGPT lúc đó xuất hiện như một “vị thần” để sẵn sàng để “tiễn” các công cụ, hay thậm chí là ngành nghề khác đi vào dĩ vãng.
Vậy điều đó có còn đúng trong tình cảnh hiện tại? Nhớ lại bài học về cuộc cách mạng công nghiệp cuối thế kỷ XVIII, khi mà giai cấp công nhân đứng lên đấu tranh chống lại áp bức, họ đập phá hết máy móc vì cho rằng sự xuất hiện của chúng vừa bóc lột sức lao động, vừa cướp mất công việc của mình. Nhưng sự thật là máy móc không hề bị xóa bỏ, thậm chí nó còn ngày một hiện đại. Hơn ai hết, con người dần hiểu ra nếu biết cách sử dụng hoặc chế tạo ra máy móc, nó còn tạo ra nhiều công ăn việc làm hơn cho mọi người, đồng thời giúp cho năng suất lao động ngày càng tăng.
ChatGPT cũng vậy, nếu biết cách sử dụng chúng sẽ biến thành lợi thế cho chúng ta. Thay vì lướt Google hàng giờ để tìm một câu trả lời cho vấn đề thì chỉ cần hỏi ChatGPT, nó sẵn sàng cho bạn câu trả lời nhanh nhất. Thật tuyệt! Ấy thế mà thật ngạc nhiên khi một số bạn bè của tôi vẫn không sử dụng nó, không biết vì lý do gì nữa!
Tôi đã sử dụng ChatGPT từ những ngày đầu tiên, hỏi nó rất nhiều câu hỏi cũng như tiếp thu thêm được rất nhiều kiến thức. Tuy vậy, ChatGPT vẫn có những yếu điểm nhất định mà tôi sẽ kể tiếp dưới đây. Song song với đó, cách đây gần hai tuần thôi, tôi vừa khám phá ra một cách biến ChatGPT trở nên “cứng cáp” hơn trong một vài lĩnh vực, từ đó nó sẽ đưa ra câu trả lời như một chuyên gia.
Nhưng trước tiên, hãy xem cách tôi sử dụng ChatGPT hàng ngày như thế nào nhé.
Cách tôi sử dụng ChatGPT hàng ngày
ChatGPT cho chúng ta sử dụng miễn phí ở địa chỉ chat.openai.com. Với model GPT-3.5 không quá yếu cũng không quá mạnh, bởi vì đến thời điểm hiện tại họ đã giới thiệu đến GPT-4 Turbo với rất nhiều cải tiến và hỗ trợ “context” rất lớn (128K). Hiểu đơn giản, model đại diện cho phiên bản của GPT, 3.5 thì khác với 4, và thường thì phiên bản càng cao, càng có nhiều nâng cấp và cải tiến giúp cho nó mạnh mẽ hơn.
Tôi hay sử dụng ChatGPT mỗi khi có thắc mắc lớn mà không tìm được câu trả lời, bất kể lĩnh vực gì cả công việc lẫn cuộc sống. Ví dụ tôi thường nhờ nó nhắc lại các khái niệm, giải thích tại sao phải làm thế này thế nọ, có những cách nào để làm một công việc A, B, C… gi gỉ gì gi, cái gì không biết cũng có thể hỏi.
Tôi cũng thường xuyên sử dụng nó để sửa lỗi, hoặc nhờ nó chuyển đổi đoạn mã viết bằng ngôn ngữ này sang ngôn ngữ khác. Ví dụ đoạn mã viết ra bằng một cách nào đó không chạy được, tôi sẽ bê nguyên vào và hỏi tại sao đoạn mã này lại không chạy, nhiều khi nó tìm ra được nguyên nhân và chỉ cho tôi cách khắc phục. Hoặc đôi khi tôi cũng hỏi nó cách hoạt động của một đoạn mã, có gì cần cải tiến hoặc đề xuất gì hay không… Nói chung đụng đến vấn đề code, nó có vẻ hoạt bát hơn, nhưng nhiều khi nó cũng “troll” mình bằng cách trả về trong code những “function” không hề tồn tại.
Đôi khi tôi coi ChatGPT như là một người bạn để cùng nhau trao đổi một vấn đề gì đó. Tôi sẽ là người đặt nghi vấn và trò chuyện với nó như người bạn. Nhưng người bạn này rất hay “quên” và có phần hơi “ba phải”, bằng chứng là đã nhiều lần nó thay đổi quyết định như trở bàn tay, khiến tôi phải nhắc lại vừa rồi bạn đã trả lời như thế này thế nọ mà bây giờ đã trả lời khác đi… Những lúc đó nó chỉ biết xin lỗi và một lúc nữa thôi, mọi chuyện lại diễn ra y xì như cũ.
ChatGPT ở đằng sau là một mô hình ngôn ngữ lớn (LLM) cho nên năng lực về ngôn từ rất tốt, nó có thể hiểu và trò chuyện với con người một cách tự nhiên nhất có thể. Do đó, tất cả kỹ năng viết, dịch thuật có thể xem là thế mạnh của GPT. Trước đó, tôi có một bài viết Tích hợp ChatGPT vào dịch bài viết trong AdminCP để nhờ nó dịch bài viết tiếng Việt sang tiếng Anh cho mình. Tóm lại, tôi tích hợp API của ChatGPT và hệ thống và chỉ cần một nút bấm, bài viết bằng tiếng Việt được dịch sang tiếng Anh trong chớp mắt.
Và còn nhiều cách sử dụng vụn vặt khác nữa mà tôi không thể kể ra hết ở đây. Nếu bạn cũng đang dùng ChatGPT hàng ngày và có điều gì muốn chia sẻ thì hãy để lại bình luận xuống phía dưới bài viết nhé.
Hạn chế khi sử dụng ChatGPT
Đây là lúc mà không thể tha thứ cho ChatGPT, đành phải “bóc phốt” tại đây.
Điều mà tôi luôn dè chừng nhất khi dùng ChatGPT là tính xác thực của câu trả lời. Hầu như các câu trả lời từ nó đều không có nguồn trích dẫn cho nên chúng ta không thể biết được liệu điều đó là đúng hay sai, được nhiều người công nhận hay là không. Theo như OpenAI công bố, dữ liệu để đào tạo cho ChatGPT được tổng hợp từ rất nhiều nguồn, bao gồm cả tài liệu từ Internet cho nên nó sẽ trả lời dựa trên những gì nó được học. Vậy điều gì xảy ra khi cùng một vấn đề nhưng dữ liệu đào tạo lại cho ra nhiều luồng ý kiến khác nhau?
Điều đó dẫn đến trường hợp cùng một câu hỏi, ChatGPT có thể đưa ra các câu trả lời khác nhau. Cũng giống như con người, khi chúng ta tiếp nhận nhiều luồng thông tin, chúng ta càng phải đánh giá tính hợp lý và sẽ có lúc chúng ta trả lời khác nhau trong một số tình huống, tôi nghĩ ChatGPT cũng phải chịu hoàn cảnh như vậy. Do đó, nếu chưa được thuyết phục bởi câu trả lời, bạn đọc nên tham khảo thêm thông tin từ các nguồn khác, đồng thời cũng đừng quá tin vào câu trả lời của ChatGPT.
Ngoài ra ChatGPT thường trả lời câu hỏi một cách chung chung và ngắn gọn, nếu không xác định được câu hỏi, bạn sẽ không thể biết cách khai thác thêm thông tin. Khi nói chuyện với một chuyên gia, họ luôn biết cách trả lời sao cho dễ hiểu, đồng thời họ cũng có tính tương tác qua lại bằng cách hỏi lại chúng ta một số câu gợi ý, từ đó khiến cho cuộc giao tiếp hiệu quả hơn. Nhưng với ChatGPT, thường thì nó sẽ dừng lại sau khi trả lời xong thắc mắc của chúng ta.
Cũng cần phải kể đến những lần ChatGPT trả lời sai và “đoảng trí”. Trong nhiều cuộc hội thoại, tôi đã tin những lời nó nói một cách sái cổ cho đến khi nó vô tình thốt ra một điều ngược lại hoàn toàn với khẳng định ban đầu. Điều đó làm tôi hoang mang và không biết liệu có nên tiếp tục hỏi. Người ta thường nói một lần mất tin vạn lần mất tín mà. Những lúc đó, tôi nghĩ mình cần tìm kiếm thông tin trên một nguồn khác tin cậy hơn.
Do đó, ChatGPT cũng chỉ là một nguồn tham khảo và không nên tin tuyệt đối vào nó.
Việc làm AI lương thưởng hấp dẫn, mới nhất dành cho bạn!
Biến ChatGPT thành một “chuyên gia”
Khi nhắc đến chuyên gia trong một lĩnh vực nào đó, chúng ta thường liên tưởng ngay đến một người dày dạn kinh nghiệm. Với vốn kiến thức đó, họ có thể trả lời rất nhiều thắc mắc của chúng ta, và dĩ nhiên là chỉ trong lĩnh vực giỏi nhất thì họ mới phát huy được hết năng lực.
Mặc dù có nhiều điểm còn hạn chế nhưng không thể phủ nhận sự hữu ích của ChatGPT. Thay vì nhìn vào mặt chưa tốt, chúng ta có thể tìm cách làm cho ChatGPT trở nên đáng tin cậy hơn.
Nếu thường xuyên cập nhật tin tức về ChatGPT, bạn sẽ biết gần đây họ tung ra tính năng cho phép người dùng tự tạo một con bot GPT cho riêng mình. Thật ra tính năng này đã có từ khá lâu, nhưng đến tận cuối tháng 12 thì mới cập bến đến thị trường của chúng ta. Sau khi tạo bot thành công, bạn có thể chia sẻ nó đến người dùng bằng cách đưa lên “chợ”. Khi người dùng thấy bot của bạn, họ bấm vào, một cuộc hội thoại mới mở ra giống như cuộc hội thoại thông thường, chỉ có điều người trò chuyện lúc này là “BOT GPT” chứ không hẳn là GPT bình thường nữa.
Tạm gác lại, khi nghiên cứu API của ChatGPT, ở phần Text generation models | OpenAI, chúng ta sẽ thấy sự xuất hiện của 3 role chính là system
, user
và assistant
. Kết hợp 3 role này lại với nhau, chúng sẽ tạo ra một ngữ cảnh để đưa bạn và ChatGPT vào trong chính câu chuyện đó. Ví dụ đây là một ngữ cảnh mà bạn tạo ra:
[
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Who won the world series in 2020?"
},
{
"role": "assistant",
"content": "The Los Angeles Dodgers won the World Series in 2020."
},
{
"role": "user",
"content": "Where was it played?"
}
]
Một cách hiểu đơn giản, đây giống như là một kịch bản dựng lên cho ChatGPT. Đầu tiên system
bảo với ChatGPT rằng “Bạn là một trợ lý hữu ích”, sau đó user
(role này có thể hiểu là chính bạn) hỏi một câu hỏi, assistant
đưa ra câu trả lời. Sau đó user
lại tiếp tục đặt ra một câu hỏi khác, nếu thực thi nội dung này qua API, bạn sẽ thấy ChatGPT tiếp tục trả lời câu hỏi cuối cùng của user
. Hay nói cách khác, đây là một ngữ cảnh mà chúng ta tạo ra cho ChatGPT, từ đó nó hiểu được đang nói chuyện với ai, nói về chủ đề gì… mà đưa ra các câu trả lời chính xác sau đó.
system
có thể được hiểu như là “lời mô tả hệ thống” hay là “mô tả về hình mẫu ChatGPT” của bạn. Vì ChatGPT rất thông minh, học quá sâu, biết quá rộng nên nhiều khi đó lại là một yếu điểm. Bởi vì cùng một câu hỏi, nhưng chuyên gia ở lĩnh vực này có thể trả lời khác với chuyên gia ở lĩnh vực khác. Ví dụ khi hỏi “Loại gạo nào giàu chất dinh dưỡng nhất?”, giả sử lần hỏi đầu tiên, ChatGPT coi mình là “một người bình thường” thì nó trả lời đơn giản là loại gạo A. Nhưng trong lần sau, ChatGPT nhập vai là một chuyên gia nông nghiệp, nó có thể trả lời rằng gạo B mới đúng, kèm theo các lời giải thích chi tiết, khi là một chuyên gia nó sẽ có khả năng phân tích và giải thích cho người khác hiểu tại sao B mới đúng.
Đấy cũng chính là cách để bạn tạo ra một con BOT cho riêng mình, bằng cách thu hẹp ngữ cảnh xuống, thuyết phục nó trở thành một chuyên gia trong lĩnh vực bất kỳ, rồi đưa ra những mong đợi của người dùng đối với câu trả lời của chuyên gia. Ngay lập tức nó sẽ hiểu ý của bạn và cố gắng trở thành một “con người” như đã mong đợi.
Một ví dụ, đây là một ngữ cảnh mà tôi tự viết ra để mong đợi ChatGPT trở thành một chuyên gia trong chủ đề viết lách, từ đó yêu cầu nó đưa ra lời khuyên hay chỉnh sửa bài viết cho mình.
Bạn là một nhà văn, người viết sách chuyên nghiệp và thành thạo nhiều thứ tiếng, trong đó mạnh nhất là Tiếng Anh và Tiếng Việt.
Bạn luôn tuân thủ ngữ pháp tiếng Anh và tiếng Việt.
Bạn cũng là người có kinh nghiệm trong việc dịch thuật.
Bạn đọc rất nhiều sách và báo tiếng Anh và tiếng Việt, bạn có thể nhận ra những điều bất hợp lý về câu từ sử dụng như là sai chính tả, sai dấu câu và cả thiếu cách diễn đạt tự nhiên.
Bây giờ bạn cần trong vai là một chuyên gia về lĩnh vực viết, bạn cần chỉ ra tất cả lỗi sai về cách dùng từ trong bài viết, đề suất cải thiện nếu có. Hãy trình bày lại theo cấu trúc dạng danh sách: Đoạn văn gốc là... Tôi có đề xuất sửa đổi là...
Ngoài ra tôi sẽ cung cấp thêm cho bạn thông tin của người viết để bạn có cái nhìn khách quan hơn:
- Là lập trình viên.
- Sở thích đọc sách.
- Thích viết lách.
- Ngôn ngữ tự nhiên, gần gũi, không khó hiểu, dễ tiếp cận.
- Viết dựa trên kinh nghiệm thực tế.
- Thích trình bày quan điểm và lồng ghép chúng vào trong đoạn văn.
Đấy chỉ là về lĩnh vực viết, vậy còn các lĩnh vực khác thì sao? Sở dĩ tôi viết ra được “lời mô tả hệ thống” trên bởi vì tôi có kinh nghiệm về viết lách, biết cần cải thiện điều gì. Còn trong lĩnh vực khác, tôi hoàn toàn bị mịt mù và chắc chắn không thể tạo ra một hình mẫu về chuyên gia mà mình mong đợi. Vậy thì làm cách nào để tạo ra “chuyên gia” hữu ích cho mình?
Cuộc chơi thay đổi với GPT Store
chat.openai.com/gpts là kho GPT Store chính thức của chatGPT. Tại đây bạn sẽ thấy danh sách các bot được cộng đồng tạo ra. Sự khác biệt lớn nhất giữa chúng chỉ đơn thuần là “lời mô tả hệ thống”. Ai có khả năng viết chi tiết, viết sâu hơn, hay đơn giản là có năng lực chuyên môn trong lĩnh vực của mình thì khả năng cao họ sẽ tạo ra được một con bot có ngữ cảnh phù hợp nhất với chức năng của nó.
Nhưng để dùng được GPT Store, cũng như dùng bot của người dùng khác tạo ra thì chúng ta cần phải có GPT Plus trở lên với giá 20$ một tháng, một con số không hề nhỏ. Nhưng đổi lại, bạn được tiếp cận với rất nhiều “chuyên gia” của người khác.
Còn giải pháp nào cho người “nghèo” như tôi không?
Leaked Prompts of GPTs có vẻ lại là một trang ngược lại của GPT Store. Tôi không hiểu bằng cách nào đó mà nguồn này lại có được những “lời mô tả hệ thống” của một số con bot trên GPT Store. Một danh sách bot được liệt kê ở đây và nếu muốn dùng bot nào chỉ cần bấm vào nó, “lời mô tả hệ thống” lộ ra mồn một. Vậy có nghĩa là chỉ cần “copy” rồi “paste” chúng vào GPT của bạn, thì đã có ngay một “chuyên gia”!?
Ví dụ, tôi tìm thấy một con BOT Creative Writing Coach kèm lời mô tả là nâng cao kỹ năng viết. System Prompt là:
As a Creative Writing Coach GPT, my primary function is to assist users in improving their writing skills. With a wealth of experience in reading creative writing and fiction and providing practical, motivating feedback, I am equipped to offer guidance, suggestions, and constructive criticism to help users refine their prose, poetry, or any other form of creative writing. My goal is to inspire creativity, assist in overcoming writer's block, and provide insights into various writing techniques and styles. When you present your writing to me, I'll start by giving it a simple rating and highlighting its strengths before offering any suggestions for improvement.
Bằng cách thông thường, tôi thử “paste” dòng này vào thẳng cuộc hội thoại mới trên web ChatGPT để xem điều này có biến ChatGPT thành chuyên gia được không. Qua nhiều lần thử thì tôi đánh giá câu trả lời vẫn không có gì nổi bật, nó vẫn trả lời chung chung và ngắn gọn, chỉ sau vài câu chat, nó ngay lập tức đã “quên” lời nhắn ban đầu và đôi khi lại trả lời như một kẻ ngốc. Vậy là giấc mơ dùng “chùa” đã tan biến.
Quay trở lại với API, đây là nơi mà chúng ta có thể thiết lập role system
cho cuộc hội thoại. Bằng cách đưa “lời mô tả hệ thống” vào đây, rồi thử trò chuyện thì thật ngạc nhiên, nó đã trả lời khác, hay nói đúng hơn là trả lời như một chuyên gia thật. Câu trả lời ngắn gọn nhưng đi thẳng vào trọng tâm, đặc biệt khi tiếp tục hỏi thì vẫn khai thác được thêm thông tin chứ không bị “quên” hay lạc đề giống như GPT trên nền web.
Các cuộc gọi API là mất phí, GPT-4 thì đắt hơn rất nhiều so với 3.5. Thời gian phản hồi của 3.5 cũng chậm hơn nhiều so với 4, vì vậy nếu tiền không là vấn đề, 4 vẫn mang lại trải nghiệm tốt hơn.
Dùng công cụ để quản lý các cuộc hội thoại tạo bằng API
Web ChatGPT có một điểm cộng là nó lưu trữ lại nội dung các cuộc hội thoại quá khứ. Nhưng đối với API thì không, chúng ta cần phải lưu trữ lại mọi thứ một cách thủ công, bao gồm “lời mô tả hệ thống”, yêu cầu của user
và cả câu trả lời của assistant
.
Vì vậy, có thể bạn sẽ thắc mắc tôi sử dụng API như thế nào, thì câu trả lời là dùng các công cụ Open Source.
NextChat (ChatGPT Next Web) là công cụ cung cấp giao diện thân thiện cho GPT. Bạn chỉ cần chạy một lệnh để khởi động ứng dụng trên nền web, hoặc đơn giản là tải ứng dụng về, nhập GPT Key vào thế là xong. Công cụ sẽ giúp chúng ta lưu trữ lại nội dung của các cuộc hội thoại, cộng với giao diện thân thiện sử dụng được ngay lập tức.
Công cụ này cũng hỗ trợ bạn tạo ra GPT bot bằng cách nhập vào “lời mô tả hệ thống”. Hãy chọn một chuyên gia mà bạn thích ở trong danh sách Leaked Prompts of GPTs, sao chép lại dòng System Prompt và nhập vào system
.
Ngay bây giờ bạn đã có thể nói chuyện với chuyên gia của bạn bằng cách bấm vào Mask > Find More > rồi bấm vào nút Chat bên cạnh tên của chuyên gia vừa tạo.
Hãy thử hỏi chuyên gia một câu:
Cá nhân tôi đã thử sử dụng và thấy rằng bằng cách này, GPT cho lời khuyên hữu ích hơn hẳn so với khi không có ngữ cảnh. Còn bạn, bạn đã sử dụng GPT Store hoặc một công cụ bên thứ ba nào chưa? Hãy chia sẻ kinh nghiệm của mình xuống phía dưới bài viết nhé. Xin cảm ơn rất nhiều!
Bài viết gốc được đăng tải tại 2coffee.dev
Xem thêm:
- Cách ứng dụng Chat GPT hỗ trợ cho công việc hiệu quả
- Digital Twins – xu hướng công nghệ cho ngành IoT
- Đón đầu 7 xu hướng công nghệ hàng đầu trong năm 2024
Tìm kiếm việc làm IT mới nhất tại TopDev!
Bí kíp quảng cáo Job cực hiệu quả trên Social Media
Theo thống kê của Melwater, số người dùng mạng xã hội trên toàn cầu vào năm 2023 đã vượt mốc 5 tỷ người, tương đương 62.3% dân số thế giới. Tại Việt Nam cũng đã thống kê được có đến 70 triệu người dùng mạng xã hội, với tỉ lệ 71% cao nhất khu vực Đông Nam Á.
Những con số này đã cho thấy sự tác động to lớn của mạng xã hội đến với các doanh nghiệp và thương hiệu trong việc tìm kiếm khách hàng tiềm năng. Cùng với đó cũng chính là cơ hội tuyệt vời để họ “săn” nhân tài bằng cách tiếp ứng viên qua các kênh social media.
Trong bài viết này, hãy cùng TopDev khám phá những bí kíp quảng cáo Job cực hiệu quả trên social media với các bước hướng dẫn chi tiết.
Tầm quan trọng của việc tuyển dụng trên Social Media
Trong thời đại kỹ thuật số phát triển mạnh mẽ như hiện nay, việc tuyển dụng trên mạng xã hội đang trở thành một phần không thể thiếu trong chiến lược nhân sự của các tổ chức và doanh nghiệp. Sự phổ biến của mạng xã hội đã tạo ra một “sân chơi” rộng lớn cho việc tiếp cận và tương tác với ứng viên tiềm năng.
Phương pháp tuyển dụng trên social media không chỉ giúp tiết kiệm thời gian và chi phí so với các phương pháp tuyển dụng truyền thống, mà còn mang lại khả năng tiếp cận đối tượng mục tiêu một cách nhanh chóng và hiệu quả. Bằng cách sử dụng các công cụ và chiến lược phù hợp, việc tuyển dụng trên social media không chỉ giúp nâng cao chất lượng ứng viên mà còn tăng cường uy tín và thương hiệu của tổ chức trên “không gian số”.
5 bước quảng cáo Job cực hiệu quả trên Social Media
Để quảng cáo công việc một cách cực kỳ hiệu quả trên mạng xã hội, có một số bước cơ bản mà bạn có thể tuân thủ:
1. Xác định đúng các mục tiêu thực tế
Việc xác định mục tiêu là bước quan trọng đầu tiên trong việc thiết lập chiến dịch quảng cáo job trên mạng xã hội. Đầu tiên, cần xác định rõ ràng mục tiêu cụ thể mà chiến dịch muốn đạt được, có thể là tăng nhận thức về thương hiệu nhà tuyển dụng, thu hút ứng viên tiềm năng, hoặc tăng tương tác từ ứng viên.
Đồng thời, cần xác định rõ vị trí ứng tuyển cần tuyển dụng và các kỹ năng, kinh nghiệm mong muốn để tạo ra thông điệp phù hợp và thu hút đúng đối tượng. Cuối cùng, việc xác định đối tượng mục tiêu, tức là ứng viên tiềm năng, là cực kỳ quan trọng để tập trung tài nguyên và chiến lược quảng cáo vào nhóm đối tượng có khả năng phản hồi tốt nhất.
Các nhà tuyển dụng có thể xác định mục tiêu của chiến dịch quảng cáo job trên social media theo nguyên tắc SMART như sau:
- Specific (Cụ thể): Mục tiêu của chiến dịch cần phải cụ thể và rõ ràng. Ví dụ, “Tăng lượng ứng viên đăng ký cho vị trí kỹ sư phần mềm tại công ty ABC lên 30% trong vòng 3 tháng.”
- Measurable (Đo lường được): Mục tiêu cần có khả năng đo lường để theo dõi và đánh giá hiệu suất. Trong trường hợp này, việc đo lường được là số lượng ứng viên đăng ký cho vị trí công việc qua mạng xã hội.
- Achievable (Có thể đạt được): Mục tiêu cần phải thách thức nhưng vẫn phải đạt được trong khả năng của tổ chức và nguồn lực có sẵn.
- Relevant (Liên quan): Mục tiêu cần phải phản ánh đúng với mục tiêu tổng quát của tổ chức và chiến lược tuyển dụng của họ.
- Time-bound (Có thời hạn): Mục tiêu cần phải có thời gian cụ thể để hoàn thành. Trong ví dụ này, thời hạn là trong vòng 3 tháng.
2. Lựa chọn nền tảng social media phù hợp
Khi lựa chọn nền tảng social media phù hợp cho chiến dịch quảng cáo job, điều quan trọng là hiểu rõ ưu điểm và nhược điểm của mỗi nền tảng, và áp dụng phù hợp với đối tượng mục tiêu của bạn.
Ví dụ, LinkedIn được xem là lựa chọn lý tưởng cho các vị trí tuyển dụng chuyên nghiệp, nhờ vào mạng lưới chuyên ngành mạnh mẽ và tính chất chuyên sâu của nền tảng. Trong khi đó, Facebook thường phù hợp với các vị trí tuyển dụng phổ thông, nhờ vào sự đa dạng và số lượng người dùng lớn. Đối với các vị trí tuyển dụng sáng tạo, Instagram có thể là lựa chọn tốt nhờ vào tính hình ảnh và sự tương tác đặc biệt trên nền tảng này.
Quan trọng nhất là chọn các nền tảng mà đối tượng mục tiêu của bạn thường xuyên sử dụng, từ đó tối ưu hóa hiệu quả của chiến dịch quảng cáo job trên mạng xã hội.
Tổng hợp các việc làm Back-end đang tuyển trên TopDev
3. Tạo nội dung quảng cáo hấp dẫn
Để tạo nội dung quảng cáo hấp dẫn trên mạng xã hội, việc cung cấp thông tin đầy đủ và hấp dẫn về vị trí tuyển dụng là cực kỳ quan trọng. Bạn cần chắc chắn rằng nội dung quảng cáo không chỉ bao gồm tên vị trí, mô tả công việc, và yêu cầu ứng tuyển, mà còn nên làm nổi bật những ưu điểm và lợi ích của việc làm đó để thu hút sự chú ý của ứng viên tiềm năng.
Sử dụng hình ảnh và video chất lượng cao cũng là một cách hiệu quả để tăng sự hấp dẫn của nội dung quảng cáo, giúp thu hút ánh nhìn và tạo ra ấn tượng mạnh mẽ với người xem. Đồng thời, khuyến khích họ tham gia ứng tuyển thông qua một lời kêu gọi hành động rõ ràng và hấp dẫn.
4. Tiếp cận đúng đối tượng mục tiêu
Bằng cách tận dụng các công cụ nhắm mục tiêu như tuổi, giới tính, địa lý và sở thích, bạn có thể đảm bảo rằng quảng cáo của mình chỉ được hiển thị cho những người có khả năng phản hồi tích cực nhất. Hơn nữa, việc tăng cường tương tác với ứng viên tiềm năng bằng cách trả lời bình luận, tin nhắn sẽ tạo ra một môi trường tương tác tích cực, tăng cơ hội thu hút và giữ chân ứng viên.
Cuối cùng, việc sử dụng các hashtag liên quan đến vị trí tuyển dụng và ngành nghề sẽ giúp tăng khả năng hiển thị quảng cáo của bạn trước đúng đối tượng mục tiêu, thu hút sự chú ý từ những người quan tâm đến lĩnh vực công việc của bạn.
5. Theo dõi và đo lường hiệu quả
Để đảm bảo chiến dịch quảng cáo job trên các kên social hoạt động hiệu quả, việc theo dõi và đo lường các chỉ số là bước quan trọng không thể bỏ qua. Bằng cách theo dõi số lượng lượt xem, lượt nhấp chuột, lượt ứng tuyển và các chỉ số khác, bạn có thể đánh giá được hiệu quả của chiến dịch và xác định được những điểm mạnh và điểm yếu của nó.
Từ đó, bạn có thể tối ưu hóa chiến dịch quảng cáo dựa trên kết quả theo dõi, điều chỉnh các yếu tố như nội dung, đối tượng mục tiêu và phương tiện quảng cáo để tăng cường hiệu quả và đạt được mục tiêu tốt nhất có thể.
Tóm lại
Việc quảng cáo job trên social media không chỉ là một xu hướng mà còn là một yếu tố quan trọng giúp các tổ chức tìm kiếm và thu hút nhân tài. Tuy nhiên, để thành công, việc áp dụng các chiến lược và bí kíp phù hợp là không thể thiếu. Từ việc xác định mục tiêu cụ thể, lựa chọn nền tảng phù hợp, tạo nội dung hấp dẫn, đến tiếp cận đúng đối tượng mục tiêu và theo dõi hiệu quả, mỗi bước đều đóng góp vào sự thành công của chiến dịch.
Với sự linh hoạt và sự sáng tạo, việc quảng cáo job trên mạng xã hội hứa hẹn mang lại những kết quả tích cực. Đồng thời, đáp ứng nhu cầu tuyển dụng ngày càng đa dạng và khó khăn của các doanh nghiệp. Chúc bạn thành công!
Có thể bạn quan tâm:
- Tuyển dụng IT bằng Github và StackOverflow
- Bí kíp “săn” ứng viên IT tài năng hiệu quả cho HR
- 7 chính sách thu hút nhân tài IT đột phá cho doanh nghiệp
Xem thêm Top tìm việc IT lương cao HOT nhất trên TopDev
Tìm hiểu về lập trình hướng đối tượng trong PHP
Vào đầu những năm 2000, phiên bản PHP 5.0 được team phát triển ra mắt với việc giới thiệu các tính năng lập trình hướng đối tượng và duy trì cấu trúc đó cho đến những phiên bản mới nhất hiện nay. Điều này có ý nghĩa rất lớn và cho thấy sự đúng đắn của nó khi mà PHP vẫn đang là một trong những ngôn ngữ phổ biến nhất hiện tại; đồng thời các framework PHP được ưa chuộng cũng đang sử dụng hướng đối tượng để triển khai source code của nó.
Trong bài viết này chúng ta cùng nhau tìm hiểu về cách để thực hiện lập trình hướng đối tượng trong PHP để giúp bạn tự tin hơn trong khi làm việc với ngôn ngữ này nhé.
Lập trình hướng đối tượng
Trước tiên chúng ta cùng nhắc lại một chút về lập trình hướng đối tượng nhé. Object-Oriented Programming (OOP) là một kỹ thuật lập trình cho phép chúng ta tạo ra các đối tượng trong code trừu tượng hóa các đối tượng trong thực tế. Ví dụ như ở hình dưới đây ô tô, xe đạp hay tàu thủy đều là những đối tượng (object) phương tiện giao thông nên chúng ta có thể xếp nó vào chung 1 lớp (class) là Vehicle. Trong đó, xe đạp và ô tô lại có chung đặc điểm là có bánh xe, nên chúng ta xếp chúng vào 1 lớp là Wheeled Vehicle.
Việc gom nhóm thành các lớp giúp chúng ta dễ dàng mô tả đặc điểm của từng đối tượng trong nhóm thông qua việc gán cho nó các thuộc tính (properties) và các phương thức (methods); tạo ra một cấu trúc phân cấp có khả năng kế thừa, tái sử dụng source code một cách rõ ràng.
2 khái niệm cơ bản nhất trong OOP chính là class (lớp) và object (đối tượng): bạn có thể hiểu class như một khuôn mẫu còn đối tượng là một thực thể thể hiện khuôn mẫu đó.
4 nguyên lý cơ bản của OOP bao gồm:
- Tính đóng gói (Encapsulation)
- Tính kế thừa (Inheritance)
- Tính đa hình (Polymorphism)
- Tính trừu tượng (Abstraction)
Như vậy để chúng ta có thể lập trình hướng đối tượng trong một dự án sử dụng ngôn ngữ cụ thể thì trong source code luôn phải định nghĩa được ra những khái niệm ở trên, đồng thời đáp ứng đủ 4 nguyên lý cơ bản giúp triển khai OOP một cách hiệu quả. Tiếp theo chúng ta cùng đi cụ thể vào việc sử dụng PHP để triển khai OOP trong code như thế nào nhé.
OOP trong PHP
Khi mới bắt đầu học PHP, thường các hướng dẫn, ví dụ đơn giản sẽ viết code PHP theo kiểu lập trình hướng thủ tục. Tuy nhiên khi source code của chúng ta trở nên nhiều hơn một chút thì việc viết code theo hướng đối tượng là lựa chọn tốt hơn, và thực tế là các framework PHP hiện nay cũng phần lớn được viết để triển khai OOP.
1. Định nghĩa class và tạo object
Trong PHP, chúng ta dễ dàng định nghĩa một class trong cặp dấu ngoặc nhọn với các khai báo thuộc tính, hàm khởi tạo cùng các phương thức bên trong; sau đó khởi tạo một object thuộc lớp trên với từ khóa new. Việc gọi hàm thông qua object giúp truy cập đến phương thức đã định nghĩa trong class.
<?php class Vehicle { // Properties public $Vehicle; // Constructor function __construct($Vehicle) { $this->Vehicle = $Vehicle; } // Methods function getVehicleName() { return 'The Vehicle\'s name: ' . $this->Vehicle; } } // Create an object $ship = new Vehicle('Ship'); // Call method echo $ship->getVehicleName(); // The Vehicle's name: Ship
2. Tính kế thừa
Tính kế thừa thể hiện quan hệ cha con giữa các lớp, giúp các lớp con kế thừa các thuộc tính, phương thức từ lớp cha; từ đó xây dựng được một cấu trúc phân cấp rõ ràng trong chương trình, đồng thời tối ưu được việc tái sử dụng source code.
class WheeledVehicle extends Vehicle { } $bike = new WheeledVehicle('Bike'); echo $bike->getVehicleName(); // The Vehicle's name: Bike
Từ khóa extends giúp chúng ta tạo ra một class WheeledVehicle kế thừa class Vehicle; và khi đối tượng bike được tạo ra, nó đã có sẵn phương thức getVehicleName mà không cần phải khai báo lại.
Xem thêm tuyển dụng PHP lương cao trên TopDev
3. Tính đa hình
Tính đa hình thể hiện việc các lớp khác nhau có thể triển khai cùng một phương thức theo các cách khác nhau. Có nhiều cách để triển khai tính đa hình trong PHP, miễn rằng đảm bảo được việc các class có quan hệ kế thừa với cùng 1 class cha và sẽ triển khai phương thức đa hình trong từng lớp con. Từ khóa abstract được sử dụng để tạo phương thức đa hình, hoặc sử dụng từ khóa override cho việc ghi đè.
<?php abstract class Person { abstract public function greet(); } class English extends Person { public function greet() { return 'Hello!'; } } class French extends Person { public function greet() { return 'Bonjour!'; } }
Ở ví dụ trên, chúng ta tạo ra một abstract class Person trong đó khai báo phương thức greet (chào hỏi). Với 2 lớp con English (người Anh) và French (người Pháp) kế thừa từ class cha Person, việc triển khai 2 lớp này khác nhau trong từng lớp con sẽ cho chúng ta kết quả khác nhau khi cùng hành động chào hỏi (greet) là người Anh sẽ chào Hello, còn người Pháp sẽ chào Bonjour.
4. Tính đóng gói
Tính đóng gói thể hiện phạm vi truy cập đến các biến trong một lớp, giúp che giấu hoặc ngăn chặn việc chỉnh dữ liệu từ bên ngoài của một đối tượng. PHP hỗ trợ cả 3 từ khóa khai báo phạm vi truy cập biến tương tự như Java gồm public, protected và private.
<?php class Car { // data inaccessible outside the class body: private $model; public function getModel() { return $this->model; } public function setModel($modelValue) { $this->model = $modelValue; } } $car = new Car(); $car->setModel("Toyota Corolla"); // echo "Model: " + $car->model; => Fatal error: Uncaught Error: Cannot access private property echo "Model: " . $car->getModel() . "\n";
Ở ví dụ trên, chúng ta không thể truy cập trực tiếp vào thuộc tính model trong đối tượng car thuộc lớp Car; nếu cố tình truy cập đến thì sẽ nhận về lỗi Fatal error: Uncaught Error: Cannot access private property. Việc truy cập bắt buộc thông qua các phương thức get, set được định nghĩa public trong lớp. Điều này đảm bảo rằng biến car không bị can thiệp, chỉnh sửa sai trong quá trình chạy chương trình.
5. Tính trừu tượng
Tính trừu tượng trong OOP thể hiện ở việc chỉ trình bày lên những thông tin cần thiết cho người dùng, bỏ qua những thứ không cần thiết và giấu kín nó. Cụ thể chúng ta xem xét ví dụ dưới đây:
<?php class Triangle { private $a; private $b; private $c; public function __construct($aVal, $bVal, $cVal) { $this->a = $aVal; $this->b = $bVal; $this->c = $cVal; } public function calcArea() { $a = $this->a; $b = $this->b; $c = $this->c; $p = ($a + $b + $c) / 2; $area = sqrt($p * ($p - $a) * ($p - $b) * ($p - $c)); return $area; } } $triangle = new Triangle(3, 4, 5); echo "Area = " . $triangle->calcArea();
Trong đoạn code trên thì người sử dụng class Triangle chỉ quan tâm đến diện tích (Area) của tam giác, không cần bận tâm đến các biến a, b, c được khai báo hay các bước tính toán diện tích tam giác.
Kết bài
Như vậy qua bài viết này chúng ta đã cùng nhau tìm hiểu sâu hơn về cách triển khai lập trình hướng đối tượng trong PHP. Nắm vững được kiến thức này sẽ giúp bạn viết code một cách tự tin hơn, đảm bảo cấu trúc dự án và khả năng mở rộng chương trình trong tương lai. 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.
Tác giả: Phạm Minh Khoa
Có thể bạn quan tâm:
- Cách sử dụng hàm isset trong PHP
- Top 6 mẹo của PHP giúp anh em code tốt hơn
- Hướng dẫn viết code PHP chuẩn – PSR tiêu chuẩn khi lập trình PHP
Truy cập ngay việc làm IT đãi ngộ tốt trên TopDev
8 “mẹo” nhỏ cần làm để tìm việc mới hiệu quả
Bài viết được sự cho phép của tác giả Lê Tuấn Anh
Tìm việc là một quá trình tốn thời gian và năng lượng. Có nhiều việc bạn cần phải làm như: đọc tin tuyển dụng, viết hồ sơ, chuẩn bị phỏng vấn. Để tìm việc hiệu quả, bạn cần xem chuyện tìm việc giống như một dự án của bản thân – bạn là trưởng dự án. Để quản lý dự án tìm việc cho bản thân tốt, bạn cần có một danh sách rõ ràng các việc cần phải làm. Dưới đây là danh sách 8 điều cần làm để giúp bạn theo dõi quá trình tìm việc và tìm được công việc đúng với đam mê và sở trường của bản thân.
1/ Công ty đang quan tâm
Tuỳ theo lĩnh vực và ngành nghề bạn đang theo đuổi, bạn nên bắt đầu với danh sách 10-15 công ty tiềm năng trong mảng này. Danh sách 10-15 công ty này rất quan trọng vì nó giúp cho quá trình tìm việc của bạn dễ dàng tìm kiếm và quản lý thông tin hơn. Khi bạn có trong tay tên 10-15 công ty, bạn có thể bắt đầu vào website công ty xem họ đang tuyển vị trí gì, có cựu sinh viên nào của trường mình đang làm việc ở đó hay không, có sự kiện nào có sự tham gia của nhân sự công ty đó, có người bạn nào trên Facebook hay LinkedIn đang làm tại công ty đó hay không?
Thay vì nói chung chung với người khác rằng “tôi muốn tìm việc trong mảng tài chính“, bạn nên nói cụ thể hơn “tôi muốn làm việc cho công ty A (mảng tài chính)” hoặc “tôi muốn làm công việc tài chính trong một công ty công nghệ“, như vậy sẽ dễ dàng hơn để người khác kết nối và giới thiệu bạn với những mối quan hệ mà họ có trong ngành.
Ví dụ, Tuấn Anh có thể đăng một tin trên Facebook hoặc nói với bạn bè mình rằng “tôi muốn làm một vị trí nào đó trong các trường đại học, liên quan đến giảng dạy hoặc hướng nghiệp càng tốt“. Một số bạn bè trong mối quan hệ của mình đang làm việc tại trường đại học đã liên hệ với mình để giới thiệu những tin tuyển dụng mà họ biết.
Nếu bạn chưa biết mình thích công ty này, có thể tham khảo các danh sách như Top 500 doanh nghiệp lớn nhất Việt Nam (cập nhật hàng năm) hoặc danh sách các công ty top theo từng lĩnh vực.
2/ Vị trí và vai trò của vị trí đó
Từ điểm mạnh của bản thân và lịch sử làm việc trong quá khứ, bạn có thể lọc ra được một vài từ khoá liên quan đến công việc mà bạn đang quan tâm. Từ những từ khoá này, bạn gõ vào thanh tìm kiếm của các trang tuyển dụng như TopDev, Glints, Vietnamwork, LinkedIn để cho ra các gợi ý công việc. Ví dụ Tuấn Anh tìm các công việc liên quan đến các từ khoá như “tư vấn hướng nghiệp”, “giảng dạy kỹ năng”, “nhân sự”, “đào tạo”.
Khi đã tìm ra những vị trí ưng ý, bạn không chỉ nên đọc tiêu đề tên công việc mà còn nên đọc kỹ cả các gạch đầu dòng mô tả công việc đó. Hiện nay có nhiều công ty viết tiêu đề công việc một đằng, mô tả công việc một nẻo, hoặc cố tình dùng từ ngữ hoa mĩ để thu hút. Ví dụ những công việc kiểu “business development”, “consultant” nghe rất hay nhưng rất nhiều công việc trong số đó bản chất là “sale” – bán hàng chứ không phải tư vấn và phát triển chiến lược. Vì vậy, phải đọc kĩ từng gạch đầu dòng trong tin tuyển dụng.
3/ Những mối quan hệ quen biết
Bạn cần có một danh sách những người bạn biết và có khả năng giới thiệu công việc cho bạn, liên hệ với những người này một cách cá nhân qua Facebook, Zalo hoặc một cách chuyên nghiệp qua email.
Khi liên hệ, bạn nên nói về các ý bao gồm: Bạn có thể làm gì? Bạn thích kiểu công việc như thế nào hoặc đang tìm kiếm vị trí gì?, đồng thời nhờ người đó giới thiệu nếu biết có cơ hội nào. Khi nhà tuyển dụng tìm người, kênh đầu tiên thường được ưu tiên là qua các mối quan hệ. Vì vậy cách này có thể giúp bạn tiếp cận được những công việc tốt hơn là các trang tuyển dụng. Bạn cũng có thể sử dụng LinkedIn, tìm các cá nhân đang làm tại công ty bạn thích, kết nối với người ta và giới thiệu về bản thân bạn.
4/ Tham gia các chương trình Mentor / Networking / Hội thảo nghề nghiệp
Hiện nay có rất nhiều người làm nhân sự của các công ty thường xuyên đi làm Mentor cho các chương trình, làm diễn giả các hội thảo hoặc tham gia các sự kiện networking trong ngành. Bạn nên canh những chương trình này và tới để làm quen với những người này. Khi gặp những người này, bạn có thể giới thiệu nhanh về bản thân, xin thông tin liên lạc để về nhà gửi email giới thiệu kĩ hơn kèm CV của bạn.
Một số cộng đồng chuyên ngành bạn cân nhắc:
- Cộng đồng nhân sự: https://vnhr.vn/
- Cộng đồng IT: https://viblo.asia/
- Cộng đồng Blockchain: https://cryptoviet.com/
Một số chương trình Mentor:
5/ Chuẩn bị cách trả lời những câu hỏi phỏng vấn
Tuỳ theo người phỏng vấn và công ty mà các câu hỏi có thể khác nhau, tuy nhiên vẫn có những câu hỏi thông dụng như “Giới thiệu bản thân“, “Điểm mạnh của bạn là gì?” hoặc là “Mục tiêu 3-5 năm tới“. Bạn nên xem danh sách các câu hỏi phỏng vấn thông dụng và tập chuẩn bị trước cách trả lời các câu hỏi này ở nhà. Hãy tưởng tượng mình là một vận động viên thể thao, trước khi bước ra sân thi đấu thì cần rất nhiều thời gian tập luyện.
6/ Những mong muốn của bản thân ở chỗ làm
Bạn nên làm rõ những mong muốn cụ thể của bản thân từ mức lương, vị trí địa lý chỗ làm, tính cách của sếp hay cách bài trí văn phòng. Những mong muốn này giúp bạn lựa chọn công việc tốt hơn, tránh việc đi làm một thời gian thấy không đúng ý mình, cũng như có thêm chất liệu để đặt ra câu hỏi ngược lại cho nhà tuyển dụng trong buổi phỏng vấn. Ví dụ bạn có thể hỏi: “Ngoài lương, các chính sách đãi ngộ khác của công ty mình như thế nào?” hoặc hỏi người sếp quản lý trực tiếp là “Phong cách lãnh đạo của anh là gì?”.
Bạn có thể đọc thêm bài viết này để hiểu hơn về 7 yếu tố ảnh hưởng công việc, từ đó vạch ra được các mong muốn cụ thể của bản thân.
7/ Theo dõi thư ứng tuyển
Đừng chỉ gửi đơn ứng tuyển và ngồi chờ phản hồi – vì rất có thể nhiều nhà tuyển dụng sẽ không phản hồi đâu. Việc của bạn là sau khi gửi một đơn đi thì nên ghi chú lại, khoảng 1-2 tuần sau khi gửi thì nên email hoặc gọi điện hỏi thông tin nếu chưa nhận được phản hồi. Ngoài ra, khi đi phỏng vấn về bạn cũng nên gửi một thư cảm ơn và bổ sung thông tin nếu cần.
8/ Xây dựng bảng kế hoạch tìm việc
Như đã nói ở đầu bài, hãy coi việc tìm việc như một dự án cần giải quyết – mỗi ngày bạn cần có mục tiêu và các bước hành động. Ví dụ hôm nay kết bạn với XX người trên LinkedIn, ngày mai tuốt tát lại CV, ngày kia ứng tuyển XX vị trí. Mình từng có một ví dụ về lịch trình một ngày có thể phân công như thế nào để tìm việc, bạn có thể tham khảo tại đây.
Bài viết gốc được đăng tải tại anhtuanle.com
Có thể bạn quan tâm:
- Phân tích “keyword” trong JD để viết CV hiệu quả
- Chỉ cần duy nhất một bản CV hay nhiều bản cho nhiều công việc khác nhau?
- List 10 việc cần chuẩn bị trước khi “nhảy việc”
Xem thêm việc làm ngành IT hàng đầu tại TopDev
React Native hay Ionic: Đâu là lựa chọn tốt nhất để startup?
Bài viết được sự cho phép của tác giả Sơn Dương
Câu chuyện khởi nghiệp luôn bắt đầu bằng vấn đề tài chính – thứ gây đau đầu nhất. Đặc biệt các bạn công nghệ khi muốn khởi nghiệp, việc lựa chọn công nghệ để tối ưu chi phí phát triển và maintainance rất quan trọng. Bài viết này mình sẽ chia sẻ với các bạn một góc nhìn về những lựa chọn khi phát triển ứng dụng mobile, giải pháp cho lập trình mobile đa nền tảng: chọn lập trình React native hay Ionic? Những lựa chọn này sẽ ảnh hưởng trực tiếp đến nhân lực, kinh phí và thời gian của bạn trong tương lai.
#1. Dùng Hybrid hay Native? React Native hay Ionic?
Chắc hẳn khi bắt đầu dự án thì trong đầu bạn sẽ có nhiều câu hỏi đại loại như thế đúng không?
Trong bài viết này, mình sẽ cố gắng tìm câu trả lời cho từng câu hỏi, được xem xét ở cả hai mặt mạnh và yếu của Ionic và React Native và chia sẻ trải nghiệm về việc sử dụng chúng để thực hiện dự án của mình.
Hiện nay, khi mà Android và iOS là 2 nền tảng thống trị thế giới mobile. Nếu bạn muốn tiếp cận càng nhiều khách hàng càng tốt thì việc ứng dụng của bạn có mặt trên cả hai nền tảng là điều nên nghĩ tới.
Việc phát triển native app cho cả 2 OS này điều khá tốn kém. Bởi vì mã nguồn ứng dùng cho Android và iOS sẽ hoàn toàn khác nhau, nhân lực dev team cho mỗi OS cũng khác nhau, khả năng bảo trì cũng tốn kém… Vì vậy, với nguồn lực tài chính có hạn, mình nghĩ giải pháp lập trình cross platform là khả thi nhất.
Nếu đã chọn giải pháp lập trình đa nền tảng thì lựa chọn lập trình React Native hay Ionic đây?
Chúng ta sẽ cùng tìm hiểu điểm mạnh và yếu của từng loại nhé
Ionnic là gì? Tại sao tôi nên chọn Ionic mà không phải thứ khác
Ionic được xây dựng trên nền tảng Apache Cordova và Angular, được phát hành vào năm 2013. Nền tảng này cho phép phát triển các ứng dụng lai(hybrid apps) với sự trợ giúp của HTML, CSS và JavaScript với một code base duy nhất và có thể tái sử dụng.
Để xây dựng các ứng dụng hoàn hảo và đầy đủ chức năng, Ionic sở hữu một bộ UI components và functions. Tuy nhiên, bạn sẽ phải cần cả Cordova và PhoneGap để Ionic có thể hoạt động.
Nếu như bạn đã có kinh nghiệm về Angular, bạn sẽ thấy phát triển ứng dụng với Ionic cực kì dễ dàng vì Ionic 2 tương tự với Angular về cả cấu trúc và cách thiết kế. Ngoài ra, TypeScript cho Ionic cũng là một điểm cộng lớn.
Framework này có một số pre-developed components UI. Nhờ vậy, khối lượng công việc của bạn được giảm đáng kể “Bạn chỉ cần viết mã một lần và sử dụng nó ở bất kỳ đâu.”
Một trong tính năng thú vị đó là khả năng thích ứng với từng OS (theo nền tảng cụ thể). Nếu bạn đang sử dụng các tab, vị trí của chúng sẽ phụ thuộc vào OS của ứng dụng đó.
Ionic cung cấp một lượng lớn các plugin với mức giá hợp lý mà bạn không cần nhờ đến sự can thiệp của bên thứ 3. Ngoài ra, bạn luôn có thể cân nhắc các plugin Cordova nếu bạn không thể tìm thấy plugin bạn muốn. Việc tích hợp các plugin Cordova với phần mềm dựa trên khuôn khổ framework thực sự rất tốt. Vậy để có thể chọn React Native hay Ionic thì cùng khám phá về React Native nhé!
Lập trình React Native là gì? React Native có gì nổi trội?
Lập trình React Native được Facebook xây dựng và phát hành vào năm 2015, ứng dụng kiến trúc ReactJS và có thể tạo ra các ứng dụng cho nền tảng iOS, Android và Universal Windows Platform.
Nó có một tính năng tuyệt vời đó là cho phép xây dựng các ứng dụng đa nền tảng, rất khó phân biệt với các ứng dụng native. Điều này tương tự như khi bạn dịch trên Google dịch và nó sẽ cho bạn một bản dịch tự động.
Nói một cách đơn giản, quá trình này giống nhau: Bạn viết một mã trong các React component. Sau đó, mã này sẽ được hiển thị dưới dạng các thành phần giao diện người dùng native. Tất nhiên là lập trình React Native không sử dụng WebView hoặc trình duyệt để hiển thị UI, do đó các ứng dụng sẽ hoạt động nhanh hơn.
Ngôn ngữ chính của lập trình React Native là JavaScript. Đó là lý do tại sao các developer có thể tái sử dụng code trên các nền tảng khác nhau. Tuy nhiên, bạn sẽ không thể sử dụng một thanh công cụ duy nhất cho tất cả nền tảng. Vì vậy, nếu bạn quyết định chọn React Native, hãy sử dụng các components càng gần với hành vi native của nền tảng càng tốt.
Như bạn đã biết, “cross pflatform” có nghĩa là bạn có thể sử dụng một code base duy nhất cho nhiều nền tảng khác nhau. Tuy nhiên, bạn sẽ không thể viết một code duy nhất và sử dụng nó ở mọi nơi.
Mục tiêu của bạn là xây dựng ứng dụng “native” thực sự với người dùng đúng không? Nếu vậy, bạn sẽ cần phải thay đổi một số code để phù hợp với nền tảng mà ứng dụng chạy
Xem thêm các vị trí tuyển dụng React Native hấp dẫn tại TopDev
#2. Điểm lại những điểm mạnh và yếu của cả 2 để chọn React Native hay Ionic
1. Ionic
Ưu điểm:
- Cho dù đó là HTML, CSS, JS hay Angular – nó đều là nền tảng độc lập;
- Bản chất Ionic được wrapped từ Cordova và PhoneGap;
- Hoạt động trên UIWebView (nếu là iOS) hoặc WebView (nếu là Android);
- Nó cho phép tạo các UI ứng dụng di động mặc định dễ dàng và hiệu quả;
- Bạn có thể sử dụng TypeScript để phát triển.
Nhược điểm:
- Hiệu suất sẽ giảm đáng kể nếu gọi quá nhiều native code
- Nếu ứng dụng cần tương tác với phần cứng của thiết bị như Camera, Sensor… sẽ tương đối khó khăn
2. React Native
Ưu điểm:
- Có thể tái sử dụng code của dự án hiện tại mà không phải code lại từ đầu khi quyết định sử dụng lập trình React Native.
- Cộng đồng phát triển lớn, do đó bạn sẽ không phải sợ bất kỳ thách thức nào. Mọi người sẵn sàng giúp đỡ bạn khi cần
- Vì code độc lập với nền tảng (iOS hoặc Android): Nó có thể được sử dụng trên cả hai nền tảng.
- Khả năng debug trong React Native rất tốt với nhiều tool hỗ trợ
Nhược điểm:
- Các components cho Android hơi cùi, vì vậy nếu bạn trau chuốt thì cần phải bỏ efforts để chỉnh sửa lại
- Nghĩa là đối với các ứng dụng “phức tạp”, có thể yêu cầu nhiều tài nguyên hơn và ngân sách tất nhiên sẽ cao hơn.
Qua bảng so sánh trên, bạn đã có quyết định của mình chọn React Native hay Ionic chưa?
Cá nhân mình thấy React Native vẫn là một nền tảng tuyệt vời. Trước đây mình đã từng xây dựng úng dụng bằng React Native cho phép người dùng chụp ảnh các vụ tai nạn, tạo report bằng PDF hoặc .doc và gửi qua email cho công ty bảo hiểm.
Ứng dụng có thể nhập văn bản bằng bàn phím hoặc giọng nói. vì vậy người dùng có thể dễ dàng thêm mô tả cho từng ảnh. Chỉnh sửa và thay đổi từng dự án cần thiết nhiều lần để gửi lại ở định dạng Word hoặc PDF. Report được lưu trữ trên Cloud cho đến khi dự án bị xóa thủ công khỏi tài khoản của bạn.
Đó là một trong những ví dụ để chứng minh khả năng của React Native.
#3. Về các tiêu chí khác để chọn React Native hay Ionic
Một trong những điểm khác biệt chính để chọn React Native hay Ionic là Ionic dùng để phát triển hybrid apps. Các ứng dụng này sẽ được hiển thị thông qua WebView cho iOS và WebView dành cho Android.
Còn React Native, bạn phát triển các ứng dụng với giao diện người dùng chuẩn. React Native sử dụng các native rendering với Java cho Android và Objective-C cho iOS.
Performance: Hybrid apps (được xây dựng với Ionic) chắc chắn sẽ chậm hơn các ứng dụng được xây dựng với React Native.
Testing: Ionic có 1 điểm cộng vì nó có thể test trong bất kỳ trình duyệt nào. Còn với React Native, bạn sẽ cần một thiết bị hoặc trình mô phỏng(emulator)
Features: Tài liệu của lập trình Ionic rõ ràng hơn lập trình React Native nhiều. Một ưu điểm khác là khi install Ionic có rất nhiều pre-designed được thế kế sẵn, bạn chỉ việc dùng. Còn lập trình React Native thì lại có một tính năng khá thú vị đó là Hot Reload. Tính năng này cho phép debug và cập nhật ứng dụng đang chạy mà không hoàn toàn rebuilding lại.
Cộng đồng phát triển. React Native là một trong những framework phổ biến nhất trên Github. Nó không ngừng được phát triển. Nếu bạn là member của cộng đồng này, bạn có thể dễ dàng tìm thấy câu trả lời cho bất kỳ câu hỏi nào. Tất nhiên, bạn cũng có thể truy cập vào một số lượng lớn thư viện của bên thứ ba. Khi nói đến Ionic, nó không có lượng người quan tâm lớn như vậy. Tuy nhiên, tốc độc phát triển rất đều đặn.
Lời kết
Vì vậy, làm thế nào chọn đúng cho công ty startup? React Native hay Ionic? Điều này nó phụ thuộc vào từng yêu cầu cụ thể của dự án. Có thể là sự phức tạp của dự án, thời hạn giao hàng, và thậm chí cả các kỹ năng của các lập trình viên.
Thực tế là những nền tảng này có nhiều đặc điểm khác nhau với những dự án khác nhau. Tuy nhiên, mặc dù hoạt động khác nhau nhưng cả hai đều có thể giải quyết yêu cầu của bạn
Cuối cùng, hãy cho mình biết về những ý tưởng mới, sở thích và mong muốn của bạn nhé!
Bài viết gốc được đăng tải tại vntalking.com
Xem thêm:
Đừng bỏ lỡ việc làm IT mới nhất trên TopDev!
Tuyển dụng IT bằng Github và StackOverflow
“Là HR trong ngành, để tuyển dụng nhân sự IT ngoài các hội nhóm về công nghệ trên Facebook, Linked in phần lớn chỉ đem về hiệu quả cho truyền thông thì các kênh tuyển dụng có hiệu quả cao như TopDev, VietnamWorks, ITViec,… luôn được các doanh nghiệp chú trọng hợp tác. Một số trang Web lớn với sự tham gia lên đến 99% thành viên có sự quan tâm đến ngành IT, bạn đã biết đến? Bí mật sẽ được bật mí bên dưới.
Nếu anh, chị đang tìm cách chiêu mộ các nhà phát triển thì Github và StackOverflow là nơi anh, chị phải đến ít nhất một lần. Hai trang web này là nơi tốt nhất để tìm và tuyển dụng các chuyên gia công nghệ hàng đầu.”
Chúng ta sẽ hiểu về GitHub như thế nào?
là nền tảng phát triển phần mềm lớn nhất thế giới. Đây là nơi các Developer có thể lưu trữ và xem xét code của họ, quản lý dự án và xây dựng phần mềm. Nó còn là social marketing như feed, flower và network grap…Về cơ bản, đây là một trang web nơi các nhà phát triển lưu trữ code của họ và chia sẻ nó với những người khác để cơ hội hợp tác, phát triển thêm hoặc đơn giản là sử dụng.
Còn về Stack Overflow, bạn có biết?
Stack Overflow là cộng đồng trực tuyến lớn nhất, đáng tin cậy nhất để các Developer tìm hiểu và chia sẻ kiến thức của họ. Một cách dễ hiểu hơn, Stack Overflow là một trang web Hỏi & Đáp. Đây là nơi các Developer đăng các câu hỏi liên quan đến lập trình và các vấn đề mã hóa với hy vọng rằng các Developer khác sẽ có thể giúp họ.
Tại sao không phải là Facebook, Linked in mà GitHub và StackOverflow là nơi tốt nhất để tuyển dụng các ứng cử viên công nghệ? Trước tiên chúng ta sẽ lướt mắt sơ qua những con số khủng sau:
GitHub thành lập năm 2008. Hơn 31 triệu người dùng đã đăng ký trên toàn cầu đa phần là dân trong ngành IT. Hơn 100 triệu kho lưu trữ trên nền tảng. Hơn 2,1 triệu doanh nghiệp và tổ chức sử dụng GitHub. 54% Fortune 50 sử dụng GitHub Enterprise.
Stack Overflow cũng không kém cạnh khi có hơn hơn 50 triệu khách truy cập duy nhất đến với Stack Overflow mỗi tháng, cứ sau 12 giây sẽ có câu hỏi mới được đăng lên Stack Overflow. Hơn 10 triệu câu hỏi đã được các nhà phát triển đặt ra và 17 triệu câu trả lời đã được cung cấp
Không phải do lời nguyền nhưng đa số các lập trình viên của chúng ta đều nằm vùng thụ động. Họ thường không tích cực tìm kiếm một công việc, kể cả đâu có đã xuất hiện khái niệm “chuyển công tác”. Đây là lý do tại sao bạn không nhận được CV tiềm năng từ các bài đăng tuyển dụng thông thường trên website công ty, nhóm tìm việc làm trên Facebook và Linked in kể cả khi công ty anh, chị có một JD khá hấp dẫn. Vậy làm sao để tiếp cận các Dev tiềm năng? Câu trả lời đúng nhất trong thời điểm này là bạn cần đến nơi họ tập kết – nơi đó gọi là GitHub và Stack Overflow.
Stack Overflow và GitHub có một lợi thế độc đáo nhưng cực mạnh chính là nguồn ứng cử viên công nghệ tiềm năng. Họ là một nguồn thông tin tuyệt vời về các ứng cử viên có thể giúp bạn đánh giá năng lực và kỹ năng của họ. Bằng cách sử dụng GitHub và Stack Overflow, bạn sẽ có thể hiểu rõ hơn về các công nghệ mà họ làm việc và các dự án mà họ đã làm . Bạn thậm chí có thể xem code thực tế của họ! Thu thập tất cả thông tin và thông tin chi tiết này sẽ giúp bạn dễ dàng phân biệt được trình độ của họ và tìm được một lập trình viên giỏi.
Muốn tuyển dụng nhân tài thành công ngoài những xu hướng tuyển dụng năm 2024 anh,chị cần “chạm đúng chỗ ngứa” của các Developer tiềm năng. Dưới đây là công thức 3 bước kỳ diệu để tiếp cận các Dev trên GitHub và Stack Overflow
Bước 1: Khiêu khích bằng “chiến mã” trong công ty
Hãy khuyến khích các nhân viên tài năng trong công ty anh, chị bao gồm cả các cấp quản lý cao nhất sử dụng GitHub và Stack Overflow. Hướng dẫn họ xây dựng Profile của mình như một “tượng đài” mà bất cứ Developer nào cũng “thèm khát” bằng các siêu dự án mà họ đã tham gia thành công. Điều tiếp theo không kém phần quan trọng là nhân tài trong công ty anh chị phải thường xuyên chia sẻ kiến thức và chuyên môn của mình bằng cách trả lời các câu hỏi từ các Developer khác. Có thể các cấp bậc quản lý sẽ không có thời gian đi tìm từng câu hỏi, nhiệm vụ đó là của bạn và gắn tên họ là điều bạn phải làm khi gặp một câu hỏi đang được sự quan tâm của cộng đồng GitHub và Stack Overflow.
Anh, chị có nghĩ rằng đây là việc làm rất mất thời gian? Nhưng lợi ích mang lại là các Developer của công ty bạn luôn có sự chuyên nghiệp và ngưỡng mộ nhất định từ cộng đồng. Sự đóng góp cho cộng đồng công nghệ là cách tốt nhất để đưa công ty anh, chị lọt vào “ mắt xanh” của các ứng viên tiềm năng chưa lộ diện.
Sử dụng chính chiến binh của mình để làm đại sứ thương hiệu là một cách tuyệt một cách khác đây cũng là nơi để các Developer của bạn xây dựng thương hiệu cá nhân chuyên nghiệp cho riêng mình: một tình huống đôi bên cùng có lợi!
Bước 2: Trở thành một thành viên “kỳ cựu”
Stack Overflow và GitHub là cộng đồng. Thật không may, hầu hết các cộng đồng không được chào đón người lạ đặc biệt là những cá thể “khác biệt” vì đây không thích hợp để bạn “tạo nét”. Nhưng không gì là không thể, quan trọng là bạn có thật sự muốn trở thành người trong cuộc!
Tham gia một cách tích cực! Xây dựng mối quan hệ và trở thành một phần của cộng đồng. Và đừng lo lắng – bạn có thể làm điều đó ngay cả khi bạn không phải là một tín đồ công nghệ! Dành thời gian cho Stack Overflow và GitHub. Khám phá chúng và tìm hiểu cách chúng làm việc.
Ngoài ra, hãy đảm bảo luôn theo dõi tốt nhất trong các cuộc thảo luận về các công nghệ mà bạn quan tâm. Tìm hiểu thêm về các công nghệ đó. Nếu ở vị trí HR thì anh, chị cần thể hiện trách nhiệm và sự chuyên nghiệp trong nghề bằng cách tìm hiểu về công cụ và hướng dẫn lại cho các Dev trong công ty vì mục tiêu và lợi ích phát triển chung.
Bước 3: Cá nhân hóa cách tiếp cận
Sử dụng phương pháp cá nhân hóa để thu hút sự chú ý của các ứng viên tiềm năng của bạn. Nếu bạn đã làm tốt 2 bước như trên thì ngoài lòng tin của ứng viên bạn sẽ có thêm các thông tin về nhu cầu công việc, hành vi và trình độ thông qua quá trình tiếp cận và cách ứng viên thể hiện sự hiểu biết của mình trước cộng đồng.
Thể hiện sự hiểu biết và đánh giá cao của bạn đối với các ứng cử viên tiềm năng của bạn. Hãy chắc chắn tập trung vào nhu cầu và lợi ích của họ. Làm rõ cách làm việc tại công ty của bạn có thể giúp họ đạt được mục tiêu (và ước mơ!). Lưu ý rằng các ứng viên sẽ muốn nghe làm thế nào bạn có thể giúp họ phát triển sự nghiệp, tăng thu nhập hoặc cải thiện danh tiếng của họ. Đây là một trong những bí quyết mấu chốt trong sự thành bại khi tuyển dụng nhân sự IT. Từ hai nguồn GitHub và StackOverflow đa dạng ứng viên tiềm năng trong ngành, chúc anh/chị có thêm cơ sở tuyển dụng thành công nhiều nhân tài IT.
Tham khảo việc làm lập trình viên lương cao trên TopDev
Phân tích “keyword” trong JD để viết CV hiệu quả
JD không chỉ đơn thuần là một bảng mô tả công việc mà nó còn ẩn chưa rất nhiều chi tiết về văn hóa công ty, vai trò và kỳ vọng của vị trí công việc mà doanh nghiệp đang tuyển dụng. Việc hiểu các “keyword” này sẽ giúp bạn viết CV nhắm đúng insight và ghi điểm trong mắt nhà tuyển dụng. Hơn nữa, việc tận dụng các từ khóa chính có thể giúp bạn vượt qua vòng sàng lọc của hệ thống ATS.
Để hiểu rõ hơn về cách đọc vị “keyword” trong JD cũng như cách sử dụng các keyword này hiệu quả, mời bạn đọc bài viết dưới đây.
Vì sao việc tìm keyword trong JD lại quan trọng?
Việc tìm keyword trong mô tả công việc (JD) là quan trọng vì nó mang lại một loạt các lợi ích cho ứng viên trong quá trình tuyển dụng, bao gồm:
Hiểu rõ yêu cầu công việc: Bằng cách phân tích keyword trong JD, ứng viên có thể hiểu rõ hơn về yêu cầu cụ thể của công việc, bao gồm kỹ năng, kinh nghiệm và phẩm chất cá nhân mà nhà tuyển dụng đang tìm kiếm.
Tối ưu hóa CV: Sử dụng keyword từ JD giúp tối ưu hóa CV của bạn để phản ánh chính xác những yêu cầu của công việc. Điều này làm tăng khả năng CV của bạn được chọn lọc và thu hút sự chú ý của nhà tuyển dụng.
Giúp ATS “nhận diện” CV của bạn: ATS (Applicant Tracking System) là phần mềm được sử dụng để sàng lọc hồ sơ ứng tuyển. ATS thường được lập trình để tìm kiếm các từ khóa cụ thể trong CV. Nếu CV của bạn không chứa các từ khóa quan trọng, nó có thể bị loại bỏ ngay lập tức, dù bạn có đủ năng lực và kinh nghiệm cho vị trí ứng tuyển.
Tăng cơ hội phỏng vấn: Việc sử dụng keyword phù hợp từ JD trong CV giúp làm nổi bật ứng viên và làm tăng khả năng được mời phỏng vấn, vì nhà tuyển dụng thấy rằng bạn có sự phù hợp với yêu cầu công việc của họ.
Tips để tìm keyword trong JD hiệu quả
Để tìm được các keyword quan trọng trong JD một cách hiệu quả, ứng viên có thể làm theo các bước sau:
- Đọc kỹ và hiểu rõ JD: Bắt đầu bằng việc đọc kỹ JD để hiểu rõ những yêu cầu và mô tả công việc cụ thể. Điều này giúp bạn xác định những keyword quan trọng nhất.
- Xác định các từ khóa chính: Tìm các từ hoặc cụm từ xuất hiện nhiều lần trong JD, đặc biệt là những từ nào xuất hiện ở phần yêu cầu kỹ năng, trách nhiệm công việc và kinh nghiệm mong muốn.
- Chú ý đến ngôn ngữ và cụm từ chuyên ngành: Một số ngành nghề có những cụm từ và thuật ngữ chuyên môn riêng. Hãy lưu ý đến những cụm từ này trong JD và sử dụng chúng trong CV của bạn.
- Chú ý đến các động từ và tính từ mô tả công việc: Những động từ và tính từ trong JD thường là những keyword quan trọng. Hãy lưu ý đến chúng và sử dụng trong CV của bạn để làm nổi bật kỹ năng và thành tích cá nhân.
- Sử dụng công cụ phân tích và tìm thêm từ khóa: Có nhiều công cụ trực tuyến miễn phí giúp tìm keyword trong JD và các keyword mới (Google Keyword Planner, ChatGPT, Gemini,…). Sử dụng chúng để nhanh chóng tìm ra những từ khóa chính.
- Tham khảo từ các JD hoặc CV tương tự: Nếu có, tham khảo từ các JD và CV tương tự để tìm ra những keyword phổ biến và quan trọng thường sử dụng trong lĩnh vực đó.
Tham khảo việc làm Java hấp dẫn trên TopDev!
Một số keyword thường được dùng trong JD tuyển lập trình viên
1. Các keyword thường xuất hiện trong phần yêu cầu công việc
Năng động, trẻ trung, chuyên nghiệp
Sáng tạo, hỗ trợ, tự do,
Tự tin, trách nhiệm, cầu tiến,
Cẩn thận, chịu áp lực tốt, linh hoạt,
Chủ động, làm việc nhóm, làm việc hiệu quả,
Báo cáo, phân tích, cải thiện,
Lên kế hoạch, quản lý, xây dựng,
Lập trình, thu thập thông tin, phân tích dữ liệu,
…
Ví dụ:
Báo cáo kết quả phân tích và đề xuất giải pháp cho ban lãnh đạo.
Hợp tác với các bộ phận khác để triển khai chiến lược và đạt được mục tiêu chung.
Huấn luyện nhân viên mới về kỹ năng phân tích dữ liệu.
Phát triển các mô hình dự đoán để hỗ trợ việc ra quyết định của ban lãnh đạo.
Vận hành hệ thống phân tích dữ liệu và đảm bảo hoạt động ổn định.
2. Các keyword thường xuất hiện trong phần kỹ năng và chuyên môn
- Ngôn ngữ lập trình: Cụ thể như Java, Python, JavaScript, C++, C#, Ruby, PHP, Swift, Kotlin, và nhiều ngôn ngữ khác tùy thuộc vào yêu cầu của công việc.
- Framework và thư viện: Ví dụ như React.js, Angular, Vue.js, Node.js, Django, Flask, Spring, Laravel, Express.js, và các framework/ thư viện khác.
- Công nghệ và công cụ: Ví dụ như HTML, CSS, SQL, NoSQL, Docker, Kubernetes, Git, Jenkins, AWS, Azure, Google Cloud, và nhiều công nghệ và công cụ khác.
- Kỹ năng lập trình cụ thể: Bao gồm kỹ năng như lập trình hướng đối tượng, lập trình web, lập trình ứng dụng di động, lập trình backend, lập trình frontend, lập trình dữ liệu, và các kỹ năng khác.
- Kỹ năng kỹ thuật: Bao gồm quản lý cơ sở dữ liệu, thiết kế cơ sở dữ liệu, quản lý dự án phần mềm, kiểm thử phần mềm, và kỹ năng kỹ thuật khác.
- Kỹ năng mềm: Như teamwork, giao tiếp, tự học, giải quyết vấn đề, tư duy logic, sáng tạo, và khả năng làm việc dưới áp lực.
- Giáo dục và chứng chỉ: Bao gồm bằng cấp, chứng chỉ lập trình (như Java SE Programmer, AWS Certified Developer), và các khóa học liên quan.
Nên thêm keyword vào những phần nào trong CV?
Tiêu đề CV: Nên đặt từ khóa chính liên quan đến vị trí ứng tuyển vào tiêu đề CV để thu hút sự chú ý của nhà tuyển dụng. Tiêu đề CV nên ngắn gọn, súc tích và thể hiện rõ ràng mục tiêu ứng tuyển của bạn.
Kinh nghiệm làm việc: Nên đặt từ khóa vào mô tả kinh nghiệm làm việc để làm nổi bật những thành tích và kỹ năng liên quan đến vị trí ứng tuyển. Ví dụ: “Thiết kế và triển khai thuật toán hiệu quả cho xử lý và phân tích dữ liệu” hoặc “Phát triển và duy trì các API RESTful bằng Node.js và framework Express”
Kỹ năng: Thêm từ khóa vào phần yêu cầu kỹ năng giúp làm nổi bật những kỹ năng và kinh nghiệm cụ thể mà ứng viên cần có. Ví dụ: “Thành thạo về ngôn ngữ lập trình PHP” hoặc “Kinh nghiệm làm việc với hệ quản trị cơ sở dữ liệu quan hệ như MySQL”
Học vấn: Nên đặt từ khóa mô tả học vấn để làm nổi bật những thành tích và kỹ năng học tập liên quan đến vị trí ứng tuyển. Nêu rõ tên trường, chuyên ngành, bằng cấp và điểm số (nếu có).
Lưu ý khi đưa keyword vào CV
Khi đưa keyword vào CV, hãy chú ý tích hợp chúng một cách tự nhiên và phù hợp với nội dung. Sử dụng các keyword chỉ khi chúng thực sự liên quan đến kỹ năng và kinh nghiệm của bạn, và luôn cung cấp bằng chứng cụ thể để minh họa.
Đồng thời, tránh quá tải keyword và đảm bảo sử dụng một loạt các từ khóa đa dạng để tăng khả năng được tìm thấy. Cuối cùng, đọc kỹ lại và kiểm tra CV của bạn để đảm bảo rằng các keyword được sử dụng một cách chính xác và hiệu quả.
Tóm lại
Việc tìm và sử dụng keyword trong mô tả công việc (JD) để viết CV là một phần quan trọng trong quá trình tìm kiếm việc làm hiệu quả. Bằng cách tập trung vào các từ khóa quan trọng và phù hợp nhất, CV của bạn có thể thu hút sự chú ý của nhà tuyển dụng và tăng cơ hội được chọn lọc.
Tuy nhiên, việc sử dụng keyword cần được thực hiện một cách tỉ mỉ và chính xác, đảm bảo rằng chúng tích hợp một cách tự nhiên và phản ánh chính xác kỹ năng và kinh nghiệm của bạn. Cuối cùng, chúc bạn thành công có được một chiếc CV xin việc ấn tượng.
Xem thêm:
- 4 lỗi mọi người thường mắc phải khi viết CV
- Mẫu CV IT tiếng Anh hấp dẫn nhà tuyển dụng
- Top 30+ câu hỏi cho nhà tuyển dụng IT khi phỏng vấn
Xem thêm các việc làm về CNTT hấp dẫn tại TopDev
Tư duy tối ưu
Bài viết được sự cho phép của tác giả Thanh Lê
Tại sao nên đọc bài này
- Làm nhanh hơn > Hiệu quả hơn > Tăng lương > Nhiều thời gian hơn > Chill hơn
- Nghe về tư duy tối ưu
Lâu rồi không viết gì về technical, có khi mọi người quên mất mình vẫn code hàng ngày, code sml nên muốn viết một vài suy nghĩ về tư duy tối ưu.
Mình là một thằng siêu thích optimize, mọi thứ chạy trong đầu mình khi code luôn là làm sao để code nhanh hơn (deliver nhanh hơn), làm sao để code hiện tại chạy nhanh hơn (BigO gì đó bé nhất), làm sao để làm cho nó “có vẻ nhanh hơn”.
May mắn hồi xưa đi làm công ty cũ thì cũng toàn làm những việc như vậy. Hồi đó thì chỉ nghĩ về mấy thứ như vậy, cho tới khi mình gặp một người anh, có mind set optimize tới từng chi tiết trong cuộc sống. Vậy là mới ồ ra hóa ra mình trình vẫn đang còn còi lắm.
Anyway, let’s start.
Start with WHY
Tối ưu hơn nghĩa là hồi trước task A cần 2H, thì bây giờ task A chỉ cần <2H thì đã gọi là tối ưu, hoặc vẫn 2H nhưng tốn ít năng lương hơn. Cùng kết quả, chất lượng output mà chi phí ít hơn là tối ưu (thường là thời gian). VD api trả về response của bạn vẫn y vậy, nhưng sau khi qua tay bạn phù phép, response time ít hơn…
Tại sao tối ưu quan trọng? Vì thời gian quan trọng. Tới cuối thì một giờ của bạn làm được bao nhiêu value? Nên Optimize là một cách bắt buộc để có thể trở thành một người tạo ra nhiều value hơn.
Optimize pattern
Sequence to parallel/concurrency
function login(email: string, password: string) {
await validateEmail(email);
await validatePassword(password);
await login();
}
function login(email: string, password: string) {
await Promise.all([validateEmail(email), validatePassword(password)];
await login();
}
Cái này thì chắc là rất rất phổ biến rồi, thay vì bạn làm 1 xong làm 2, xong làm 3. Thì coi xem trong đống đó có cái gì làm cùng lúc được thì đẩy qua parallel.
Ở code thì mình nghĩ nó cũng khá phổ biến không phải thứ gì quá cao siêu nhưng còn cuộc sống thì sao? Vừa nghe podcast vừa chạy bộ, vừa ăn cơm vừa đọc tin về công nghệ, vừa đi lên cầu thang vừa lấy chìa khóa…
Chà mấy cái kết hợp này đúng là blow my mind luôn, vì trước h mình chỉ nghĩ tới code thôi mà lại không thèm optimize mấy cái trong cuộc sống kiểu như vậy. Mình thấy rất nhiều người tối ưu theo kiểu kết hợp công việc và giải trí. Kiểu như vừa làm việc vừa facebook, vừa tập thể thao vừa xem tiktok. Cũng là một dạng tối ưu! Có điều mọi người mặc định có năng lực tối ưu công việc và giải trí mà lại toàn bỏ qua tối ưu công việc và công việc.
Đối với mình thì tối ưu cho công việc để dành full thời gian giải trí sẽ ok hơn.
Sẽ có một ý phản biện là não người chỉ optimize cho việc tập trung và nếu phải chuyển qua chuyển lại qua nhiều task qua nhiều thì sẽ bị kém hiệu quả rõ rệt. Cái này thực tế mình cũng bị và cũng thấy nhiều. Tuy nhiên việc biến bản thân từ sequence thành parallel là khả thì vì mình thấy không ít người xung quanh của mình tập được skill này. Mình thì cũng vẫn đang tập.
Indexing – Ngăn nắp
Cái này chắc ai làm backend cũng biết, ai làm FE thì chắc chưa có cơ hội được nghe qua nhiều. Hiểu cơ bản về indexing thì giống kiểu bạn thiết kế một cuốn từ điển. Nếu bạn bỏ từ ngữ lộn xộn vào trong cuốn từ điển đó thì mỗi khi cần tìm từ gì đó chắc phải dò từng trang cho tới khi tìm được từ đó.
Còn nếu cuốn từ điển đã được index thì các từ được kí hiệu theo alphabel, có thêm cái mực ở sách để dễ tìm nữa. Sau khi được index thì bạn tìm từ gì, bạn xem coi ký tự bắt đầu nó nằm ở khoảng nào trong từ điển, tiếp tới kí tự tiếp theo, tiếp theo cho tới khi tìm được đúng từ cần tìm.


Thôi nói cách khác để tối ưu theo kiểu indexing, nghĩa là bạn sắp xếp mọi thứ một cách ngăn nắp, có quy tắc phổ biến. Việc bạn code đúng structure, đúng format cũng là một dạng tối ưu như vậy.
Cuộc sống thì sao? Cái tips này đặc biệt hiệu nghiệm với những người hay quên đồ nè. Hồi xưa mình hay quên lắm còn giờ thì gần như không bị nữa. Mình hay có cái balo đi làm, và mỗi ngăn mình đều quy hoạch cho nó đựng gì luôn. Ngăn nào đựng ví, ngăn nào để chìa khóa, ngăn nào để dây sạc. Mỗi lần sử dụng xong thì mình đều lại để đúng ngăn đó.
Nhờ có việc ngăn nắp như vậy nên mình chả bao giờ tốn thời gian đi kiếm đồ vì nếu nó ko ở đó nghĩa là nó bị mất rồi. Mỗi khi có đồ gì mới thì mình đều phải suy nghĩ chỗ riêng cho nó, và tập thói quen để nó ở đâu. Vd như kì này mính mới mua kính, cách để không làm mất kính là mỗi lần ko đeo mà không phải ở nhà mình đều treo vào cổ áo hết.
Tuyển NodeJS lương cao hấp dẫn cho bạn
Phản hồi nhanh, keep update
Cái này không phải là tối ưu lắm, mà kiểu đánh lừa não bộ hơn, mấy bạn làm frontend thì chắc biết cái technique này.


Trong bài này mình có liệt kê một số tips để mang lại cảm giác nhanh hơn: Frontend performance pattern
Một VD về optimize cho Nimbus. Trước đây nếu query token holding, tụi mình sẽ gom tất cả các chain vào một request. Cái này user phải đợi tới khi có response ở tất cả các chain thì mới xem được portfolio của họ. Sau này tụi mình quyết định tách request thành nhiều chain. Bằng cách này có chain nào trả về data trước là mình có thê update được cho users. Về tổng thời gian kiểu gì cũng chậm hơn cách cũ nhưng về UX thì users cảm thấy nhanh hơn rất nhiều
Trong cuộc sống thì sao? Khi khách hàng hay sếp hỏi/yêu cầu bạn làm một việc gì đó, hãy phàn hổi ngay lập tức, update progress cho người ta. Làm cách này sẽ giúp khách hàng/sếp của bạn nghĩ là bạn đang làm nhanh. Trong khi thực tế bạn im luôn xong làm xong thì thờ gian cũng như nhau. Nhưng mà trong đầu mỗi người gần như được lập trình rồi, tôi thấy có phản hồi sớm, tôi nghĩ nó nhanh hơn và tốt hơn.
Chuẩn bị kịch bản
Trong một đội bóng rổ, sau đó chia thành 2 nhóm. 1 nhóm luyện tập việc ném bóng vào rổ ngoài thực tế, nhóm con lại được cho về phòng chỉ cần tưởng tượng mình đang luyện tập việc ném bóng trong đầu. Sau một khoảng thời gian, 2 đội sẽ làm bài test xem hiệu quả ntn. Kết quả là 2 nhóm có bài test với số điểm bằng nhau.
Nghĩa là tưởng tượng mình đang làm một thứ gì đó cũng là một dạng luyện tập hiệu quả. Vì vậy nếu bạn tưởng tượng và tập luyện cho các kịch bản khác nhau thì tới lúc thực tế sẽ giúp ích rất nhiều. Vd trước khi gặp một người mới mình đều dành một ít thời gian gọi là background-check để xem người này ntn, cách tiếp cận và nói chuyện ntn,…
Không phải tự nhiên mà khi đi làm lúc nào bạn cũng phải Plan trước cho nhưng việc mọi người sẽ làm. Nó là một cách để tối ưu đó, việc chuẩn bị nhưng công việc sắp tới, dead line cần hoàn thiện sẽ khiến bạn tự co dãn bản thân để fit vào các kịch bản đó. Nếu bạn không plan, nghĩa là bạn có nguy cơ rất lớn chỉ làm được một vài việc và đôi khi những việc như vậy còn không có value nữa.
Còn trong việc code thì sao? Mình luôn chạy kịch bản khi một component này chết thì sẽ xử lý ntn, con DB chết thì làm sao,… Nó không khiến hệ thống của mình build stable hơn, nhưng nó giúp mình mau chóng có biện pháp để xử lý hơn. Có một cái hơi bad là mình thường không ghi lại mà toàn nghĩ trong đầu, nêu hầu hết khi có issue chỉ có mình là giải quyết hiệu quả nhất.
Tối ưu cần sự suy nghĩ, chuẩn bị, luyện tập và sáng tạo
Mình nghĩ chắc là còn cả tỉ cách để một cá nhân tối ưu, nhưng nó xuất phát từ nhu cầu của mỗi người, cũng cần customize lại theo tùy người. Do đó để tối ưu công việc, hay thậm chí là cuộc sống cần rất nhiều năng lượng cho suy nghĩ. Suy nghĩ để xem coi đang có vấn đề ở đâu, suy nghĩ xem chỗ nào đang thừa thãi,… Rồi cả chuẩn bị và tập luyện, vì việc tối ưu là bạn đang bỏ đi những cái cũ, suy nghĩ cũ, cách làm cũ, thói quen cũ,… để thay nó bằng những thứ “có thể” là tốt hơn – hoặc không.
Và cuối cùng, tối ưu cần sự sáng tạo, đối với mình, sáng tạo là đỉnh cao nhất của tối ưu. Bạn thử nghĩ xem có pattern nào mà Elon Musk nghĩ ra việc phóng tên lửa thì không cần vứt luôn cái hệ thống đẩy đi? Dẫn tới tối ưu về chi phí một cách đáng kinh ngạc.
Quy trình để optimize
Có một cái là đôi khi suy nghĩ về optimize quá sớm sẽ là là một cách siêu deoptimize. Cái này đặc biệt hay thấy ở mấy bạn hay over-engineer. Do đó Optimize cần một process để đảm bảo thứ mình nghĩ là optimize thực sự là optimize.
Thường thì mình follow theo cái này. Cái của bác e lươn thì chưa thử
- Quickly test the idea
- Make it work
- Make it fast
- Make it scalable
The bad side
Mình nghĩ là để tối ưu thì rất khó vì bạn phải hiểu nhiều thứ, hiểu cách mọi thứ đang vận hành như thế nào, hiểu bản thân, hiểu cả team hay công ty mình đang làm, có khi là hiểu đất nước mình đang sống, hiểu cả nền kinh tế đang vận hành. Vì vậy tối ưu cần sự hiểu biết, thử sai và rèn luyện rất rất nhiều. Nên đôi khi cố làm mà không được.
Thôi thì cái gì cũng có giá của nó, giá trá không đủ nên có lẽ chưa học được skill đó thôi. Không optimize cái này thì còn cái khác. Miễn là bạn ám ảnh về điều đó thì mình tin kiểu gì bạn cũng sẽ tối ưu được.
Bài viết gốc được đăng tải tại thanhle.blog
Xem thêm:
- Clean Code là gì? Tại sao phải CLEAN CODE trong lập trình?
- 10 tip tối ưu code trên JavaScript mà web developer nào cũng nên biết
- Clean Code Android: Bạn đã thật sự hiểu đúng chưa?
Xem thêm các công việc ngành IT hấp dẫn trên TopDev
Top 30+ câu hỏi cho nhà tuyển dụng IT khi phỏng vấn
Đặt câu hỏi thông minh là một kỹ năng quan trọng trong buổi phỏng vấn IT. Nó thể hiện sự quan tâm, sự tò mò và khả năng tư duy phản biện của bạn. Đó cũng là cơ hội để bạn tìm hiểu thêm về công ty, vị trí ứng tuyển và cách bạn có thể phát triển trong đó. Vậy bạn đã biết đặt câu hỏi như thế nào để trở nên “đắt giá” hơn trong mắt nhà tuyển dụng chưa? TopDev sẽ tổng hợp các câu hỏi đó trong bài viết này!
Vì sao đặt câu hỏi cho nhà tuyển dụng lại quan trọng?
Việc đặt câu hỏi cho nhà tuyển dụng là một bước không thể bỏ qua trong quá trình phỏng vấn. Đây là cơ hội để bạn tìm hiểu rõ hơn về công việc mình sắp nhận cũng như thể hiện sự quan tâm của bạn cho nhà tuyển dụng thấy. Dưới đây là những lợi ích quan trọng của việc đặt câu hỏi cho nhà tuyển dụng IT:
- Tìm hiểu về văn hóa và quy trình làm việc của công ty: Mặc dù thông tin về quy mô và sứ mệnh của công ty có thể tìm thấy trên internet, nhưng văn hóa và quy trình làm việc thực sự chỉ có thể hiểu rõ thông qua cuộc trò chuyện trực tiếp với những người đã từng làm việc tại công ty đó.
- Thể hiện sự quan tâm và tư duy phân tích: Việc đặt những câu hỏi sâu sắc và hóc búa chứng tỏ rằng ứng viên đã nghiên cứu kỹ về môi trường làm việc mà họ đang tìm kiếm. Điều này cho thấy ứng viên đang tìm kiếm một môi trường phù hợp và không ngần ngại đầu tư thời gian vào quá trình tìm hiểu.
- Thể hiện sự quan tâm đến công ty và vị trí công việc: Qua việc đặt câu hỏi, ứng viên có thể thể hiện sự quan tâm đến công ty và vị trí công việc, cũng như mong muốn tìm hiểu rõ hơn về chúng. Điều này cho thấy ứng viên là người chủ động và có mục tiêu trong việc xây dựng sự nghiệp.
- Đánh giá tính phù hợp của công việc: Việc đặt câu hỏi cũng giúp ứng viên đánh giá xem công việc có phù hợp với mình không. Thông qua các câu trả lời của nhà tuyển dụng, ứng viên có thể đánh giá xem mình có đáp ứng được yêu cầu công việc không và liệu môi trường làm việc có phù hợp với mình không.
Những điểm cần lưu ý khi đặt câu hỏi cho nhà tuyển dụng IT
Khi đặt câu hỏi cho nhà tuyển dụng IT trong quá trình phỏng vấn, có một số điểm cần chú ý để đảm bảo câu hỏi của bạn mang lại thông tin cần thiết và thú vị:
- Tập trung vào thông tin không thể tìm thấy trên internet: Hãy đặt câu hỏi về văn hóa tổ chức, quy trình làm việc, cơ hội phát triển nghề nghiệp và các yếu tố không thể dễ dàng tìm kiếm trên internet.
- Tránh câu hỏi mà nhà tuyển dụng đã trả lời trong quá trình phỏng vấn: Trước khi đặt câu hỏi, hãy đảm bảo rằng nội dung của câu hỏi không trùng lặp với thông tin đã được nhà tuyển dụng cung cấp trước đó.
- Tổ chức câu hỏi theo chủ đề: Sắp xếp câu hỏi của bạn theo từng chủ đề như văn hóa tổ chức, công việc, phát triển nghề nghiệp để dễ dàng theo dõi và chắc chắn không bỏ sót thông tin quan trọng.
- Đặt câu hỏi mở để khuyến khích trao đổi: Hãy tránh đặt câu hỏi đơn giản chỉ yêu cầu “có/không” và thay vào đó, sử dụng câu hỏi mở để khuyến khích cuộc trao đổi sâu hơn và phát triển ý kiến.
- Tôn trọng và chuyên nghiệp: Hãy đặt câu hỏi một cách lịch sự, chuyên nghiệp và tránh những câu hỏi quá cá nhân hoặc không liên quan đến công việc.
Tổng hợp các câu hỏi cho nhà tuyển dụng IT
Bạn có thể chia các câu hỏi thành 3 nhóm chính để dễ nhớ, các nhóm câu hỏi bao gồm: câu hỏi về vị trí công việc, câu hỏi về công ty, câu hỏi về tiền lương phúc lợi. Tùy vào từng trường hợp mà bạn lựa chọn câu hỏi nào cho phù hợp.
1. Các câu hỏi cho nhà tuyển dụng IT về vị trí công việc
Kỹ năng và kinh nghiệm nào là quan trọng nhất để thành công ở vị trí này?
Ứng viên nên hỏi câu này vì nó giúp họ hiểu rõ hơn về yêu cầu công việc và tập trung vào phát triển các kỹ năng quan trọng nhất để thành công. Đồng thời, câu hỏi này cũng giúp ứng viên xác định xem liệu họ phù hợp với vị trí và có đủ kỹ năng cần thiết hay không.
Quy trình làm việc cơ bản của vị trí này là như thế nào?
Câu hỏi này giúp ứng viên hiểu rõ về quy trình làm việc hàng ngày và những nhiệm vụ cụ thể mà họ sẽ phải thực hiện. Điều này giúp ứng viên đảm bảo rằng họ có thể thích nghi và làm việc hiệu quả trong môi trường làm việc mới.
Cơ hội thăng tiến của vị trí này như thế nào?
Ứng viên nên hỏi câu này để hiểu rõ về cơ hội phát triển sự nghiệp trong công ty. Điều này giúp ứng viên có cái nhìn chi tiết về những bước tiến thị cụ thể mà họ có thể thực hiện để đạt được mục tiêu sự nghiệp của mình. Câu hỏi này cũng cho thấy ứng viên có sự quan tâm và động lực trong việc phát triển bản thân và gắn bó với công ty trong dài hạn.
Team mà tôi sẽ làm việc cùng sẽ như thế nào?
Câu hỏi này giúp ứng viên đảm bảo rằng họ có thể hòa nhập vào đội ngũ một cách dễ dàng và hiệu quả. Bên cạnh đó, hiểu về đội ngũ cũng giúp ứng viên đánh giá xem liệu họ sẽ có cơ hội học hỏi và phát triển từ các đồng nghiệp, cũng như khả năng làm việc hợp tác trong môi trường làm việc đó.
Một số câu hỏi quan trọng khác:
- Mục tiêu chính của vị trí này là gì?
- Có thể mô tả một ngày làm việc điển hình cho vị trí này?
- Vị trí này có thường xuyên phải làm việc ngoài giờ không?
- Có những công cụ hoặc phần mềm nào mà tôi cần sử dụng cho vị trí này?
- Công ty mang lại những cơ hội gì để nhân viên học hỏi những điều mới?
Trải nghiệm ngay Công cụ Chuẩn hóa CV online!
2. Các câu hỏi cho nhà tuyển dụng IT về công ty
Công ty đang hướng đến mục tiêu gì trong 5 năm tới?
Ứng viên nên hỏi câu này để hiểu rõ về hướng phát triển và mục tiêu chiến lược của công ty trong tương lai. Điều này giúp ứng viên đánh giá được sự ổn định và tiềm năng phát triển của công ty, từ đó quyết định liệu họ có phù hợp với hướng đi và mục tiêu của công ty hay không.
Cơ cấu tổ chức của công ty như thế nào?
Việc hiểu cơ cấu tổ chức giúp ứng viên có cái nhìn tổng quan về cách mà công ty hoạt động và làm việc cùng nhau. Điều này có thể giúp ứng viên hiểu rõ về vai trò của mình trong tổ chức, cũng như khả năng tương tác và hợp tác với các bộ phận khác để đạt được mục tiêu công ty.
Điều gì khiến anh/chị cảm thấy tự hào nhất khi làm việc tại đây?
Ứng viên nên hỏi câu này để hiểu rõ về những điểm mạnh và giá trị của công ty từ góc nhìn của nhân viên. Câu hỏi này giúp ứng viên có cái nhìn sâu hơn về văn hóa tổ chức và cảm nhận về môi trường làm việc.
Một số câu hỏi quan trọng khác:
- Công ty có những hoạt động nào để gắn kết các thành viên trong công ty?
- Có thể chia sẻ thêm về những dự án trọng điểm của công ty trong năm nay?
- Bạn có thể chia sẻ thêm về những điểm mạnh của công ty so với những công ty khác?
Các câu hỏi cho nhà tuyển dụng IT về tiền lương và phúc lợi
Chính sách tăng lương và thưởng cho nhân viên như thế nào?
Câu hỏi này giúp ứng viên có cái nhìn tổng quan về cách thức công ty đánh giá và đề xuất việc tăng lương và thưởng, từ đó giúp ứng viên quyết định liệu công ty có cung cấp một môi trường công bằng và khuyến khích phát triển cá nhân hay không. Đồng thời, thông tin này cũng giúp ứng viên định hình kế hoạch sự nghiệp và tài chính của mình khi làm việc tại công ty.
Công ty có những chính sách phúc lợi nào?
Phúc lợi ở mỗi công ty sẽ khác nhau, câu hỏi này giúp ứng viên có cái nhìn tổng quan về các lợi ích và dịch vụ mà họ có thể nhận được khi làm việc tại công ty. Thông tin về các chính sách phúc lợi như bảo hiểm, hỗ trợ sức khỏe, chăm sóc sức khỏe tinh thần, nghỉ phép, và các chương trình phát triển cá nhân có thể giúp ứng viên đánh giá xem công ty có quan tâm và đầu tư vào nhân viên của mình không.
Một số câu hỏi quan trọng khác:
- Có những yếu tố nào ảnh hưởng đến mức lương của vị trí này?
- Có những tiêu chí nào để được thưởng?
- Công ty có hỗ trợ chi phí cho nhân viên tham gia các khóa học hay hội thảo chuyên ngành?
4. Các câu hỏi liên quan khác
- Anh/chị có thể cho em xin góp ý về CV xin việc của em không?
- Điều gì trong CV của em khiến Anh/Chị cảm thấy thích nhất?
- Bước tiếp theo trong quy trình phỏng vấn này là gì?
- Bao lâu tôi sẽ nhận được kết quả phỏng vấn?
- Nếu trúng tuyển, tôi có thể bắt đầu công việc vào thời gian nào?
Tóm lại
Trong một buổi phỏng vấn, việc ứng viên đặt câu hỏi cho nhà tuyển dụng không chỉ là cơ hội để bạn hiểu rõ hơn về vị trí công việc và công ty mà họ sẽ làm việc, mà còn là cơ hội để thể hiện sự quan tâm và mong muốn phát triển bản thân. Bằng cách đặt những câu hỏi thông minh và sâu sắc, ứng viên có thể thu thập thông tin quan trọng, đánh giá tính phù hợp của mình với vị trí, và xác định được cơ hội phát triển sự nghiệp trong công ty.
Tóm lại, bài viết này đã tổng hợp khá đầy đủ các câu hỏi cho nhà tuyển dụng IT giúp bạn tự tin và có sự chuẩn bị sẵn sàng trong buổi phỏng vấn. Hãy lưu ý chọn lọc những điều quan trọng nhất để hỏi, nắm bắt cơ hội để có được công việc mơ ước bạn nhé!
Xem thêm:
- Top 5 kỹ năng quan trọng cần trang bị trong năm 2024
- Bí quyết xây dựng “networking” để tìm việc hiệu quả?
- 5 mẹo viết CV IT giúp đánh bại hệ thống sàng lọc tự động ATS
Xem thêm Top tìm việc IT lương cao HOT nhất trên TopDev
Tất tần tật về Collection trong Java
Collection là một phần cơ bản và quan trọng nhất trong bộ thư viện tiêu chuẩn của Java mà mọi anh em lập trình viên phải nắm vững. Nó cung cấp cho chúng ta hầu như tất cả những gì cần để làm việc với dữ liệu dạng tập hợp hay đồ thị và cho phép mở rộng để phù hợp với mục đích sử dụng. Để hiểu rõ hơn về cách mà Java phân cấp các kiểu dữ liệu tập hợp, bài viết hôm nay chúng ta cùng nhau tìm hiểu sâu hơn về khái niệm này nhé.
Collection là gì?
Collection là một interface có trong java.util package, nó được sử dụng để biểu diễn một nhóm các đối tượng riêng lẻ dưới dạng một đơn vị duy nhất (single unit). Collection cũng là một root interface trong collection framework mà Java cung cấp để làm việc với dữ liệu tập hợp.
Collection interface cũng chứa một số các methods quan trọng để thao tác với dữ liệu tập hợp như add, delete, clear, size hay contains. List, Queue, Set là những sub-interfaces chính của Collection.
Chúng ta cần phân biệt giữa Collection và Collections trong Java, đây là 2 khái niệm khác nhau. Collections là một lớp tiện ích (utility class) chứa các phương thức static dùng cho việc lưu trữ và thao tác với các tập dữ liệu như tìm kiếm, phân loại, chèn, xóa, … Cả Collection và Collections đều được cung cấp từ java.util package giúp chúng ta khởi tạo và thao tác với dữ liệu dạng tập hợp một cách hiệu quả nhất.
Ví dụ
- Khởi tạo một ArrayList (1 lớp của Collection interface)
// Creating an object of List<String> List<String> arrlist = new ArrayList<String>();
- Thao tác thêm phần tử vào danh sách với phương thức có sẵn trong Collection là add
// Adding elements to arrlist arrlist.add("first"); arrlist.add("second");
- Sử dụng các phương thức tĩnh trong lớp Collections cung cấp để thao tác với danh sách
//Adding all the specified elements to the specified collection Collections.addAll(arrlist, "web", "site"); //Sorting all the elements of the specified collection according to default sorting order Collections.sort(arrlist);
Hệ thống phân cấp Collection Framework
Java Collection Framework là một bộ thư viện với rất nhiều class mạnh mẽ giúp bạn đơn giản hóa các thao tác khi làm việc với tập hợp và đồ thị. Nó xây dựng các interface định nghĩa các cách thao tác với tập hợp, các class cụ thể thực thi các interface và các giải thuật thông dụng thường xuyên được sử dụng với tập hợp. Thành phần trong framework bao gồm:
- Interface: kiểu dữ liệu trừu tượng
- Classes: các lớp triển khai interface, thể hiện các kiểu dữ liệu cụ thể
- Algorithm: các thuật toán sử dụng trong các phương thức thao tác với dữ liệu
Hệ thống phân cấp của Collection Framework được phân chia ra làm 2 phần với interface Collection mình đã giới thiệu ở phần trên và interface Map chứa các loại dữ liệu dạng cặp key/ value.
Java thiết kế framework này với ưu điểm:
- Giúp lưu trữ và quản lý các đối tượng dạng tập hợp hay đồ thị
- Tối ưu hóa hiệu suất và tiết kiệm thời gian xây dựng source code
- Tăng khả năng tái sử dụng source code
Tham khảo việc làm Java mới nhất trên TopDev
Các lớp trong Collection
Chúng ta sẽ cùng nhau đi sâu hơn vào các nhánh con triển khai Collection interface để hiệu được cách sử dụng của nó.
1. List – danh sách
List là một collection có thứ tự, có thể chứa các phần tử trùng lặp. Trong một list, chúng ta thường có quyền kiểm soát chính xác vị trí phần tử được chèn vào và có thể truy cập thông qua chỉ số. List interface trong Java chứa 3 class con triển khai gồm ArrayList, Linked List và Vector.
ArrayList là kiểu dữ liệu dạng mảng khá thân thuộc trong nhiều ngôn ngữ lập trình, nó sử dụng index để đánh chỉ số và truy cập đến từng phần tử một cách dễ dàng. Ngược lại thì LinkedList sẽ liên kết các phần tử với nhau thông qua địa chỉ bộ nhớ, giúp việc lưu trữ một danh sách mà không cần để tâm nhiều đến số lượng phần tử như ArrayList.
Tuy vậy thì đánh đổi ở đây là việc truy cập vào một phần tử trong LinkedList sẽ chậm hơn tương đối so với ArrayList. Với Vector thì nó khá giống với ArrayList nhưng được thiết kế để ở môi trường đa luồng, tại một thời điểm sẽ chỉ có một luồng được phép truy cập, thực thi thao tác trên danh sách đó.
2. Queue – hàng đợi
Queue là một collection được sử dụng để lưu trữ và quản lý các phần tử theo thứ tự FIFO (First in, Fist out), nghĩa là các phần tử mới sẽ được thêm vào cuối hàng đợi và phần tử cũ sẽ được xóa khỏi đầu hàng đợi. Java cũng cung cấp 1 interface kế thừa Queue là Deque (Double Ended Queue) với việc hỗ trợ sử dụng trong việc quản lý các phần tử bằng FIFO và LIFO (Last in, First out); điều này giúp tất cả các phần tử trong Deque có thể được chèn vào và lấy ra ở cả hai đầu.
2 class triển khai Queue có sẵn trong Java là PriorityQueue – hàng đợi ưu tiên và ArrayDeque – sử dụng tương tự như cấu trúc dữ liệu Stack.
3. Set
Set là một collection lưu trữ các phần tử không trùng lặp và không có thứ tự cụ thể. Trường hợp khi thêm một phần tử đã tồn tại trong Set rồi thì sẽ không có tác động gì xảy ra đối với Set ban đầu.
Set cũng có 1 interface kế thừa là SortedSet với việc đảm bảo các phần tử trong tập hợp được sắp xếp có thứ tự. Những class triển khai interface Set bao gồm HashSet, LinkedHashSet và TreeSet. Trong đó TreeSet là một lớp thừa hưởng các đặc điểm từ interface SortedSet và ngoài ra nó sử dụng TreeMap (một lớp triển khai interface Map) để lưu trữ các phần tử.
Kết bài
Collection đóng vai trò quan trọng trong Java, cung cấp một cách tổng quan nhất về cấu trúc dữ liệu dạng tập hợp cùng với các phương thức thao tác lên dữ liệu. Nắm vững được kiến thức về Collection sẽ giúp bạn sử dụng một cách linh hoạt và hiệu quả, tối ưu hiệu suất ứng dụng mà bạn viết. 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.
Tác giả: Phạm Minh Khoa
Có thể bạn quan tâm:
- Các thuật toán tìm ước chung lớn nhất trong Java
- Phân biệt giữa Java ME, Java SE và Java EE
- Hướng dẫn Java Design Pattern – Intercepting Filter
Đừng bỏ lỡ việc làm IT mọi cấp độ tại TopDev
Vì sao bạn nên tìm cho mình một Mentor trong sự nghiệp?
Bài viết được sự cho phép của tác giả Lê Tuấn Anh
10 năm đi làm ở nhiều công việc và công ty khác nhau, đa số các cơ hội tốt đều đến với mình do người khác giới thiệu. Những người xung quanh mình biết về khả năng viết lách và làm hướng nghiệp của mình nên đã giới thiệu mình đến các công việc liên quan.
Ví dụ 8 năm trước mình được giới thiệu làm quản lý truyền thông cho một dự án phim, nhờ đồng nghiệp cũ khi mình thực tập biết mình học ngành truyền thông. Một ví dụ khác 4 năm trước mình được giới thiệu vào làm ở một công ty bất động sản lớn nhất nhì cả nước, nhờ chị sếp trước đây học cùng mình trong một khoá học hướng nghiệp. Khi bạn tìm việc qua kênh giới thiệu, bạn sẽ bớt được rất nhiều vòng như CV, test, thậm chí cả phỏng vấn – cứ vậy mà vào làm ngay.
Mình từng tham gia hỗ trợ một chương trình tuyển dụng rất hay của hiệp hội kế kiểm ACCA mang tên ACCA Job Fast Track. Khi các bạn ứng viên học kế toán hoặc kiểm toán tham gia chương trình này, các bạn sẽ được miễn một số vòng test và hồ sơ khi nộp đơn và các công ty lớn bên kế kiểm, thậm chí là các công ty trong nhóm Big 4. Lý do là các công ty hợp tác tin rằng ứng viên đã học ACCA và được giới thiệu là một ứng viên tốt.
Những ví dụ trên mình chỉ muốn nói một điều rằng việc có mạng lưới quan hệ chuyên nghiệp là rất quan trọng. Dù bạn là người hướng nội hay hướng ngoại, nếu bạn đã xác định đi làm công sở, start-up hay khởi nghiệp thì đều cần có mạng lưới quan hệ chuyên nghiệp. Vậy cụ thể mạng lưới quan hệ chuyên nghiệp vì sao lại quan trọng (1)? Làm thế nào để mở rộng mạng lưới quan hệ (2), kể cả khi mình là người hướng nội? Khi đã có mạng lưới quan hệ rồi thì mình cần làm gì để “tận dụng” khai thác và duy trì mạng lưới này (3)? Chúng ta sẽ cùng trao đổi về 03 nội dung này bên dưới trong bài viết này nhé.
(1) Vì sao chúng ta cần có “người quen”?
Mình thấy thời bố mẹ các cụ rất năng đi lại quan hệ với những người khác. Một phần lý do là để “sau này cần nhờ đến”. Cái nhờ đến ở đây có thể bao gồm cả việc gửi gắm con cháu làm việc hoặc tìm việc hộ sau khi ra trường, “chạy chọt” để có chân làm việc ở công ty này kia.
Thế hệ trẻ hiện nay mình cổ suý một cách tiếp cận tích cực hơn. Vẫn nên có nhiều mối quan hệ, nhưng đó là những mối quan hệ chuyên nghiệp, cùng giúp nhau đôi bên có lợi chứ không phải chạy tiền để đạt được mục đích. Mình học hướng nghiệp và nhân sự có 2 mô hình như thế này:
Hai ảnh trên mô tả về cách một công ty tìm ứng viên và một ví dụ cụ thể. Thông thường chúng ta chứ nghĩ rằng nếu công ty tìm ứng viên mới thì việc đầu tiên là đăng tuyển trên mạng. Thực tế với rất nhiều công ty lớn khi tìm ứng viên, việc đầu tiên là họ dùng đến mạng lưới ứng viên nội bộ hoặc thông qua nhân viên giới thiệu. Nếu bạn có cơ hội làm một công ty lớn, bạn sẽ thấy phòng nhân sự công ty đó có chính sách giới thiệu nhân viên mới được thưởng tiền. Nhân viên cấp càng cao thưởng càng nhiều tiền. Lý do là vì một người được giới thiệu có sự uy tín cao hơn, ngoài ra việc tìm ứng viên qua kênh này cũng giúp công ty tiết kiệm phần nào ngân sách tuyển dụng.
Từ mô hình trên chúng ta hiểu rằng, nếu chúng ta có nhiều mối quan hệ với những người đang làm công ty lớn và họ biết về khả năng làm việc và điểm mạnh của chúng ta, chúng ta có cơ hội được chính các anh chị ấy giới thiệu khi công ty các anh chị ấy đăng tin tuyển dụng.
Ảnh trên là một “công thức” trong lý thuyết hướng nghiệp giúp bạn giải bài toán làm sao có việc làm tốt sau khi ra trường. Có ba yếu tố quan trọng bạn cần có: (1) năng lực làm việc là kĩ năng mềm và kiến thức học được (2) mạng lưới quan hệ bạn có và (3) thị trường lao động cần bạn. Thiếu đi bất kì một yếu tố nào trong ba yếu tố trên cũng làm giảm đi cơ hội cạnh tranh của bạn khi đi tìm việc.
(2) Làm sao mở rộng mối quan hệ kể cả khi mình hướng nội
Phải làm rõ rằng tác giả bài viết này là một người hướng nội. Bản thân mình không quá quảng giao, không phải người nói nhiều và không thích tham gia các sự kiện nơi đông người. Tuy nhiên trong 10 năm đi làm mình vẫn xây dựng được nhiều mối quan hệ tốt có ảnh hưởng đến công việc của mình. Từ kinh nghiệm cá nhân và kinh nghiệm tư vấn hướng nghiệp cho nhiều bạn, dưới đây là một số cách để bạn mở rộng mối quan hệ dù bạn là người hướng nội.
1/ Giữ tương tác với bạn học cũ, đồng nghiệp cũ
Thay vì tìm cách đi kết bạn mới, một việc mình thấy dễ hơn là giữ quan hệ với những người cũ. Người cũ ở đây có thể là bạn học cùng lớp cũ, bạn bè làm trong CLB hoặc một dự án thời sinh viên, sếp và đồng nghiệp ở công ty cũ (nếu không có chửi lộn). Mình có thể giữ những mối quan hệ này bằng cách kết bạn Facebook, hoặc chuyên nghiệp hơn là LinkedIn để cập nhật tin tức và tương tác với mọi người.
Tham khảo thêm việc làm IT Network lương cao lên đến 3000 USD
2/ Tăng kết nối trên mạng xã hội LinkedIn
Nếu bạn chưa biết xài LinkedIn, bạn có thể đọc bài viết về LinkedIn của mình để hiểu hơn nền tảng này và có cho mình một profile. LinkedIn là một nền tảng mạng xã hội chuyên nghiệp để mình mở rộng mối quan hệ. Ngoài việc kết bạn với những người mình đã biết từ trước trên LinkedIn, mình có thể dùng tính năng Search để tìm những người bạn mới. Những người bạn mới mình khuyến khích các bạn kết bạn trên LinkedIn là:
- Những người làm nhân sự tuyển dụng (nhóm này trên LinkeIn rất nhiều)
- Những người đã hoặc đang làm việc tại công ty hoặc lĩnh vực bạn đang thích và quan tâm (xem trên title phần lịch sử làm việc của họ)
- Những người học cùng trường với bạn (xem phần Education)
3/ Tìm kiếm Mentor thông qua các chương trình Mentorship
Hiện nay có một số chương trình mentorship miễn phí. Tại đó có các anh chị là người đã đi làm họ sẵn sàng dành thời gian để hướng dẫn lại các bạn trẻ còn ít kinh nghiệm. Thường những người đã chịu làm mentor thì tinh thần chia sẻ cao, rất sẵn lòng kết bạn và hỗ trợ người khác. Chúng ta nên tận dụng những mối quan hệ kiểu này.
Nếu là sinh viên, bạn lên Facebook gõ từ khoá “mentoring” và xem một số chương trình mentoring của các trường. Có ba trường mình thấy làm chương trình này hiệu quả là RMIT, UEH và BK.
Một số chương trình khác các bạn tìm theo từ khoá là SME Mentoring, Chevening Mentoring, Menteelogy, Mentori.
4/ Lấy liên hệ diễn giả thông qua các chương trình hội thảo
Là một người thường xuyên tham gia các chương trình ở các trường đại học dưới tư cách diễn giả, mình rất nhớ và vẫn giữ quan hệ lâu dài với những bạn thường xuyên phát biểu trong buổi đó hoặc về nhà kết bạn LinkedIn cùng với mình. Mình tin là nhiều anh chị diễn giả khác cũng như vậy.
Giống như nhóm mentor ở trên, một người đã chịu làm diễn giả các chương trình thì người đó cũng có tinh thần chia sẻ cao và không ngại việc kết nối với người khác. Vậy lần tới khi bạn tham gia một chương trình hội thảo, đừng ngại tìm/xin thông tin liên hệ của các diễn giả khách mời và những người bạn gặp trong buổi hôm đó, về nhà kết bạn mở rộng thêm mối quan hệ.
(3) Nên làm gì với các mối quan hệ của mình?
Duy trì liên hệ và tương tác thường xuyên. Chúng ta đang sống trong thời đại số nên việc duy trì tương tác này dễ hơn rất nhiều. Đơn giản chỉ cần thi thoảng vào trang cá nhân của người đó, tương tác với bài viết họ chia sẻ, hoặc nhắn một tin nhắn chúc mừng năm mới, sinh nhật.
Giúp được gì hãy giúp. Một mối quan hệ tốt là mối quan hệ hai chiều, hai bên cùng có lợi. Có thể profile của bạn không xịn bằng người đó, nhưng vẫn có những thứ mình có thể giúp người ta được. Ví dụ chia sẻ bài viết cho người đó, tìm ứng viên phù hợp giúp công ty các anh chị đó, làm survey khảo sát…
Nhờ các anh chị giới thiệu công việc. Khi bạn và mối quan hệ của bạn đã biết nhau ở một mức độ nhất định, bạn có thể nhờ các anh chị giới thiệu công việc cho bạn. Khi nhờ bạn nên biết rõ mình đang hướng đến công việc gì hoặc bạn có những kĩ năng nào giỏi, như vậy người ta mới biết mà giới thiệu bạn phù hợp. Đừng nói chung chung kiểu “anh chị thấy việc tốt nào giới thiệu em nhé”.
Nhờ các anh chị giới thiệu người khác. Tương tự như trên, bạn có thể nhờ các anh chị ấy giới thiệu với người quen của họ trong ngành. Ví dụ bạn đang quan tâm đến Truyền thông mà không biết ai trong ngành, bạn có thể nhắn sếp cũ xin giới thiệu một anh chị nào đó trong ngành truyền thông để bạn gặp gỡ thêm.
Nhờ các anh chị viết thư giới thiệu. Nếu người này là một người đã làm việc cùng và có ấn tượng tốt về bạn, hãy nhờ người ta viết cho bạn một đoạn giới thiệu trên LinkedIn hoặc một thư giới thiệu giúp bạn đi tìm việc.
Năm mới, chúc các bạn có nhiều các mối quan hệ mới.
Bài viết gốc được đăng tải tại anhtuanle.com
Xem thêm:
- Top 5 kỹ năng quan trọng cần trang bị trong năm 2024
- Chọn sếp tốt hay công ty tốt? – Đâu là nước đi đúng đắn?
- Giải pháp cho những ai đối mặt với căng thẳng tại nơi làm việc
Xem thêm Jobs IT for Developers hàng đầu tại TopDev
Phương thức List append() trong Python
List là một trong những kiểu dữ liệu cơ bản trong Python lưu trữ các giá trị dưới dạng mảng (collection) có thứ tự, có thể thay đổi và cho phép chứa dữ liệu trùng lặp. Thao tác với List thông qua các phương thức thêm, sửa, xóa các phần tử trong đó là những kiến thức bắt buộc mọi lập trình viên Python đều nắm vững.
Mặc dù vậy, có nhiều anh em mới làm Python còn nhầm lẫn trong việc sử dụng một số hàm có chức năng tương đối giống nhau với List, vì vậy bài viết hôm nay chúng ta cùng nhau làm rõ về phương thức append trong Python và so sánh nó với một số hàm khác tương tự nhé.
Phương thức Append
Append là phương thức dùng để thêm một phần tử vào cuối một List trong Python. Phần tử được thêm vào có thể là một số, một List, một chuỗi hoặc một Tuple.
Cú pháp hàm append trong Python:
list.append(obj)
trong đó obj là đối tượng được dùng để thêm vào cuối list
Ví dụ:
- Thêm một ký tự/ số vào cuối List
mylist = ["A", "B", "C"] mylist.append("D") print(mylist) #>> ["A", "B", "C", "D"]
- Thêm một List vào cuối List
mylist = ["A", "B", "C"] addlist = ["D", "E"] mylist.append(addlist) print(mylist) #>> ['A', 'B', 'C', ['D', 'E']]
- Thêm một Tuple vào cuối List
mylist = ["A", "B", "C"] addtuple = (1, 2) mylist.append(addtuple) print(mylist) #>> ['A', 'B', 'C', (1, 2)]
Ở các ví dụ trên chúng ta có thể thấy rằng khi thêm 1 phần tử vào cuối List thì chiều dài (length) của List luôn chỉ tăng lên 1 dù cho phần tử là một List hay Tuple. Nói cách khác, hàm append thêm cả đối tượng obj vào list chứ không phải thêm từng phần tử trong obj (trường hợp obj là List hay Tuple) vào list ban đầu.
Đây là điểm mấu chốt giúp bạn có thể phân biệt giữa append và các hàm khác cùng chức năng thêm phần tử vào List. Chúng ta cùng tìm hiểu thêm về 2 hàm khác cũng có chức năng tương tự append là insert và extend.
Phương thức Insert
Insert là phương thức chèn đối tượng obj vào trong list tại chỉ số index đầu vào.
Cú pháp
list.insert(index, obj)
trong đó index là chỉ mục nơi đối tượng obj được chèn, obj là đối tượng cần chèn vào list đã cho.
Ví dụ:
list1 = ['java', 'python', 'c++', 'php', 'sql'] list1.insert(3, 'android') print ("List sau khi duoc chen them doi tuong 'android': ", list1) #>> List sau khi duoc chen them doi tuong 'android': ['java', 'python', 'c++', 'android', 'php', 'sql']
Insert được bổ sung tham số là vị trí cần chèn nên nó giúp hàm trở nên linh hoạt hơn so với append. Tuy nhiên về mặt hiệu năng (performance), append giúp code của bạn chạy nhanh hơn so với việc sử dụng insert với chỉ số truyền vào là 0 (sẽ thực hiện chèn vào cuối List).
Tuyển dụng Python mọi cấp độ tại đây!
Phương thức Extend
Extend là phương thức cũng được dùng để thêm các nội dung vào cuối một List.
Cú pháp:
list.extend(seq)
trong đó seq là danh sách các phần tử sẽ được cộng thêm vào cuối list.
Ví dụ:
list1 = ['java', 'python', 'c++'] list2 = ['c++', 'sql'] list1.extend(list2); print ("List sau khi duoc mo rong them la : ", list1) #>> List sau khi duoc mo rong them la : ['java', 'python', 'c++', 'c++', 'sql']
Cùng có chức năng thêm nội dung vào cuối một List, tuy nhiên khác với append thì extend duyệt qua danh sách phần tử trong mảng cần thêm và nối thêm từng phần tử đó vào List. Điều này khiến kích thước của list ban đầu sẽ tăng lên đúng bằng kích thước của list nối thêm. Và thêm vào đó thì tham số seq trong hàm extend cũng sẽ chỉ nhận giá trị là một đối tượng có thể lặp lại như chuỗi, danh sách, dicts.
Để phân biệt rõ hơn giữa append và extend, ta có thể xem ví dụ dưới đây:
Kết luận
Như vậy trong trường hợp muốn chèn thêm một phần tử vào danh sách List trong Python, chúng ta có thể sử dụng 1 trong 3 phương thức là append, insert hay extend. Hãy lưu ý một số điểm dưới đây để lựa chọn sử dụng một cách hợp lý:
- Insert được sử dụng cùng chỉ số vị trí cần thêm, vì thế nó linh hoạt hơn. Trong khi đó append và extend sẽ chỉ cho phép chèn vào cuối của List
- Xét về hiệu năng thì append và extend tốt hơn insert, vì vậy hãy lưu ý nếu bài toán làm việc với một danh sách dữ liệu lớn
- Append có thể thêm một đối tượng bất kỳ loại nào vào danh sách, extend chỉ hoạt động trên các đối tượng có thể lặp và nối thêm lần lượt từng phần tử trong đó vào danh sách
Qua bài viết, hy vọng các bạn đã có thể nắm được rõ hơn cách hoạt động và sử dụng hàm append trong Python, điều này sẽ giúp bạn viết code một cách ngắn gọn và hiệu quả hơn rất nhiều trong dự án của mình. Cảm ơn các bạn đã đọc bài và hẹn gặp lại trong các bài viết tiếp theo của mình.
Tác giả: Phạm Minh Khoa
Xem thêm:
- Flask python là gì? – Những điều cần biết
- Khởi Đầu Dự Án Python Như Thế Nào Để Thuận Tiện Phát Triển Lên
- Selenium WebDriver trên Python
Hàng loạt việc làm IT lương cao trên TopDev đang chờ bạn, ứng tuyển ngay!
Intent trong Android: Vai trò và cách sử dụng
Khi các bạn cần phải kết nối các thành phần ứng dụng Android thì đều phải sử dụng Intent. Vậy Intent là gì? Vai trò và cách sử dụng như thế nào trong ứng dụng Android.
Bài viết này mình hướng dẫn các bạn tìm hiểu bản chất cũng như cách sử dụng Intent trong android để có thể gửi dữ liệu giữa các thành phần (Activity, Service…)
Trước khi vào bài viết mình chợt nghĩ đến ví dụ: Con người làm bất kể việc gì đều có mục đích cả. Từ xem TV, mua sắm, lập trình ứng dụng… đều có một số mục đích đằng sau nó.
Android hoạt động theo cách tương tự. Trước khi một ứng dụng có thể thực hiện một hành động nào đó (Thuật ngữ gọi là action), nó cần phải biết trước mục đích của các hành động đó, để có thể thực hiện các action đó đúng cách.
Hóa ra, con người và Android cũng không khác biệt chút nào, đúng không ^_^
Sau bài viết này, chúng ta sẽ biết được:
- Intent là gì và vai trò của Intent trong Android như thế nào?
- Có bao nhiêu loại intent?
- Sử dụng Intent để gửi dữ liệu giữa các Activity
- Sử dụng Parcelable và Serializable để Intent có thể truyền được dữ liệu là các đối tượng (Object)
Chúng ta bắt đầu nhé!
#1. Intent là gì? Vai trò của Intent trong Android như thế nào?
Intent là một khái niệm khá trừu tượng về công việc, chức năng có thể được thực hiện bởi ứng dụng của bạn. Intent có thể được dùng để kết nối các thành phần trong ứng dụng Android. Trong quá trình kết nối, nó cũng có thể yêu cầu thành phần đó thực hiện một tác vụ được định trước. Các thành phần cơ bản của một Intent:
- Actions: Là những thứ mà Intent cần thực thi, chẳng hạn như quay số điện thoại, mở URL hoặc chỉnh sửa dữ liệu. Một action đơn giản là một String mô tả cho tác vụ cần thực hiện. Ví dụ: ACTION_VIEW, ACTION_EDIT, ACTION_MAIN…
- Data: Đây chính là dữ liệu để intent hoạt động. Nó được biểu diễn dưới dạng Uniform Resource Identifier(Uri) – một kiểu định danh cho một tài nguyên cụ thể. Kiểu của Data yêu cầu (nếu có) tùy thuộc vào action. Ví dụ: Bạn sẽ không muốn tạo một dial number Intent mà lại lấy số điện thoại từ một hình ảnh đúng không?
Khả năng kết hợp các action và data này cho phép Android biết chính xác intent đang yêu cầu gì và những đối tượng nào có thể thực hiện nó. Đơn giản như vậy!
Intents có thể được sử dụng để:
- Mở một Activity mới và truyền dữ liệu cho Activity đó
- Mở một Fragments / Giao tiếp giữa các Fragments.
- Mở hoặc dừng một Service
- Hoặc có thể gọi một Activity bằng Broadcast Receiver
♥ Có thể bạn cần đến cách thêm Fragment vào Activity
#2. Phân loại Intent
Có hai loại Intents
Explicit Intent – Intent dạng tường minh
Intent tường mình tức là khi tạo một đối tượng Intent, chúng ta chỉ định rõ và truyền trực tiếp tên thành phần đích vào intent. Ví dụ: như đoạn code bên dưới, intent được chỉ định rõ OtherActivity sẽ là thành phần nhận và xử lý intent này.
- val intent = Intent(this, OtherActivity::class.java)
- startActivity(intent)
Implicit Intent – Intent không tường minh
Thay vì trong intent Android được chỉ định sẵn một Activity nào đó thực hiện, thì sẽ chỉ truyền vào action và gửi cho Android. Android sẽ dựa vào action đó mà lọc những thành phần nào đã đăng kí action đó gọi ra.
Vì vậy, Android có thể tự động kích hoạt thành phần từ cùng một ứng dụng hoặc một số ứng dụng khác để xử lý intent đó.
Ví dụ, chúng ta cần phải hiển thị một vị trí lên bản đồ. Thay vì chúng ta phải mã hóa và viết hẳn module bản đồ để hiển thị thì có thể gửi vị trí đó vào intent, rồi Android sẽ tự tìm xem có ứng dụng nào phù hợp ( như Google Map chẳng hạn) để hiển thị nó.
Thông thường, chúng ta dùng các intent tường minh để kích hoạt các thành phần trong ứng dụng, còn intent không tường minh để chạy các thành phần của ứng dụng bên thứ 3.
Đây là một đoạn code minh họa cho intent không tường minh( sử dụng ACTION_VIEWđể gọi ứng dụng nào có thể hiển thị được link)
class ImplicitIntentActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_implicit_intent) } fun showWebPage(view: View) { val intent = Intent(Intent.ACTION_VIEW, Uri.parse("http://www.ebookfrenzy.com")) startActivity(intent) } }
Kết quả sẽ như bên dưới
Tìm việc làm Android lương cao trên TopDev!
#3. Intent Flags
Flags giống như các tùy chọn(option) cho intent trong android. Bạn có thể sử dụng các flags này để cấu hình intent, các flags này giúp Android “hành xử” với intent đúng ý đồ của lập trình viên.
Ví dụ: Mặc định khi sử dụng intent để gọi Activity thì activity đó sẽ được đưa vào stack. Và khi người dùng nhấn nút back trên điện thoại thì Android sẽ gọi các activity được lưu trong stack lên.
Để ngăn chặn điêu này, bạn có thể dùng flag:
FLAG_ACTIVITY_SINGLE_TOP
. Nếu đặt flag này, thì intent sẽ không thể gọi activity nếu activity đó đang ở top của stack
intent.flags = Intent.FLAG_ACTIVITY_SINGLE_TOP
Tương tự , sử dụng flag: FLAT_ACTIVITY_CLEAR_TOP
sẽ xóa tất cả các activity khác trong stack và đặt activity đc gọi lên top của stack.
Có rất nhiều flag hữu ích cho ứng dụng, các bạn có thể tham khảo thêm ở đây.
#4. Truyền dữ liệu giữa các Activity bằng Intent
Để truyền dữ liệu sang cho activity mới chúng ta sử dụng các cặp key-value trong hàm putExtra, putStringArrayListExtra.
putExtra chỉ truyền được dữ liệu kiểu cơ bản: Int, Float, Char, Double, Boolean, String
Ví dụ:
val intent = Intent(this, OtherActivity::class.java) intent.putExtra("keyString", "Androidly String data")
Sau đó các giá trị trong Extras được đóng gói vào Bundle trước khi nó được gửi đi.
Truy xuất dữ liệu trong một Activity mới
val bundle: Bundle? = intent.extras val string: String? = intent.getString("keyString") val myArray: ArrayList<String>? = intent.getStringArrayList("myArray")
Intent, extras tương ứng với getIntent()
, getExtras()
nếu viết bằng Java.
Chúng ta vừa dùng toán tử nullable Bundle? để phòng trường hợp bị NullPointerExceptions khi không có dữ liệu.
Tương tự, khi lấy giá trị thông qua các Key, chúng ta dùng kiểu nullable để phòng ngừa NPE có thể xảy ra khi key không chính xác
#5. Truyền dữ liệu là đối tượng bằng intent sử dụng Parcelable và Serializable Data
Như mình đã nói ở trên thì với các truyền dữ liệu thông thường qua hàm putExtra()
, sẽ chỉ truyền được các loại dữ liệu cơ bản, không thể truyền được dữ liệu kiểu object.
Để khắc phục điều này, chúng ta implement interface Parcelable hoặc Serializable.
Điểm khác nhau giữ Parcelable và Serializable
- Parcelable Interface là một phần của Android SDK. Còn Serializable là một interface tiêu chuẩn của Java.
- Trong Parcelable bạn cần đặt tất cả dữ liệu mà bạn cần truyền vào đối tượng Parcel và override lại phương thức
writeToParcel()
. Trong serializable chỉ cần implement interface là đủ để truyền dữ liệu. - Parcelable được đánh giá là nhanh hơn Serializable.
Cách sử dụng Parcelable
Kotlin đưa ra một số annotations rất tiện để lưu chúng từ việc override phương thức writeToParcel()
để đưa dữ liệu vào Parcelable. Thay vào đó, chúng ta có thể dùng annotations @Parcelize
như bên dưới:
@Parcelize data class Student( val name: String = "Anupam", val age: Int = 24 ) : Parcelable
android { androidExtensions { experimental = true } //.. .... }
Và bên Activity nhận, để lấy dữ liệu giống như cách thông thường:
val student = Student() val intent = Intent(this, OtherActivity::class.java) intent.putExtra("studentData", student) startActivity(intent)
Cách sử dụng Serializable
Cách làm sẽ tương tự như Parcelize nên mình không giải thích thêm nhé
data class Blog(val name: String = "Androidly", val year: Int = 2018) : Serializable val blog = Blog("a", 1) val intent = Intent(this, OtherActivity::class.java) intent.putExtra("blogData", blog as Serializable) startActivity(intent)
Các bạn có thể download project mình minh họa tại đây nhé
Như vậy mình đã chia sẻ những kiến thức rất căn bản để có thể hiểu bản chất Intent trong android cũng như cách sử dụng. Các bạn nên nhớ Intent là một phần rất quan trọng, vì vậy nếu chưa hiểu phần nào thì comment bên dưới để mình và mọi người hỗ trợ nhé. Phần sau, mình sẽ chia sẻ về cách xử lý sự kiện như: click, touch…vào các view trong Android.
Bài viết gốc được đăng tải tại vntalking.com
Xem thêm:
- Tổng Hợp Các Công Cụ Lập Trình Android Mà Bạn Nên Biết (Phần 1)
- Mẹo viết code Kotlin cho Android developer không nên bỏ qua
- AsyncTask trong Android – công cụ xử lý đa luồng hữu hiệu
Tìm việc làm IT mọi cấp độ tại TopDev