Home Blog Page 44

Bạn đã biết cách lưu trữ Refresh Token và Access Token an toàn trong trình duyệt chưa?

Bạn đã biết cách lưu trữ Refresh Token và Access Token an toàn trong trình duyệt chưa?

Bài viết được sự cho phép của tác giả Tống Xuân Hoài

Vấn đề

Lưu ý: Phạm vi bài viết này nói trong khuôn khổ Oauth2 được mô tả tại rfc6749.

Xin chào mọi người, chuyện là mấy ngày hôm nay tôi có đọc một vài tranh luận của mọi người trên mạng về vấn đề sử dụng access token (AT) và refresh token (RT) sao cho hợp lý. Có người thì bảo chỉ cần triển khai AT thôi là đủ, có người thì bảo cần thêm cả RT nữa mới bảo mật. Ngoài ra cũng có những câu hỏi vậy nếu có cả AT và RT thì tôi nên lưu ở đâu trong trình duyệt để đảm bảo độ an toàn tuyệt đối?

Vậy ngày hôm nay, tôi cùng các bạn hãy mổ xẻ lần lượt từng vấn đề để xem thực hư nó là như thế nào nhé!

Access Token và Refresh Token là gì?

Đầu tiên cho những ai chưa biết, AT là một đoạn string (thường là jwt) được dùng để đại diện cho người dùng thao tác vào hệ thống. Ví dụ như khi bạn đăng nhập vào hệ thống sẽ trả về cho bạn một AT, bạn lưu lại mã AT đó cho mỗi lần gọi API sau đó.

Nếu như các trang web được xây dựng theo phong cách server render thì ngoài cách triển khai AT và RT chúng ta còn có thể định phiên người dùng bằng session – cookie. Nhưng xu thế ngày nay đang hướng đến những trang web client render như React, Angular, Vue… thì việc triển khai AT và RT rất là phổ biến.

Còn RT là đoạn mã được dùng để yêu cầu cấp một mã AT mới. Chúng ta hãy làm rõ vấn đề tại sao lại cần phải dùng RT?

  Session, Cookie, Storage đơn giản mà dễ hiểu

  Lấy access token sử dụng refresh token với Keycloak

Vấn đề ủy quyền là như thế nào?

Đầu tiên hãy làm rõ việc ủy quyền là gì? Thông thường việc xây dựng một website thì tính năng đăng ký/đăng nhập khá phổ biến. Đăng nhập thì bạn sẽ phải nhập một tài khoản + mật khẩu để xác nhận danh tính. Hệ thống xác nhận thông tin bạn nhập là chính xác thì sẽ trả về cho bạn một đoạn mã AT để đại diện cho bạn với một số quyền hạn nhất định trong hệ thống đó.

Hay trong Oauth, vấn đề ủy quyền thì nằm ở chỗ khi bạn bấm vào nút đăng ký/đăng nhập bằng tài khoản Google, Facebook… Hệ thống sẽ chuyển bạn qua một màn hình mà ở đó bạn sẽ phải đồng ý với việc cho phép cho hệ thống kia lấy một số thông tin như email, tên, ngày tháng năm sinh… của bạn. Khi đó thì Google hay Facebook cũng trả về một mã AT mà dựa vào đó, hệ thống kia có thể lấy được những thông tin của bạn phục vụ cho mục đính xác nhận danh tính.

Tóm lại, ủy quyền là việc xác nhận danh tính để lấy được một đoạn mã AT mà dựa vào mã AT đó có thể thay mặt người dùng để sử dụng được hệ thống.

Do đó, đôi khi việc có mã AT gần như là có luôn tài khoản của bạn trong một hệ thống nào đó. Việc bị lộ mã AT là rất nguy hiểm bởi vì kẻ tấn công có thể mạo danh bạn thao tác với hệ thống mà bạn hoàn toàn không hay biết. Chính vì lý do đó mã AT cần được lưu trữ một cách nghiêm ngặt nhất có thể, hoặc nếu không thì hãy giảm thời gian hiệu lực của mã AT lại, ví dụ như mã AT chỉ có hiệu lực trong thời gian 5 phút, hết 5 phút sẽ yêu cầu người dùng đăng nhập lại!? Nếu bạn chọn cách đó thì quả là một trải nghiệm tội tệ cho người dùng :D.

Xem thêm các việc làm ASP.NET Core trên TopDev

Mối quan hệ của Access Token và JWT

Một điều cần lưu ý là mã AT thường là mã JWT (json web token). Nó là một tiêu chuẩn để truyền thông tin an toàn giữa các bên với dữ liệu là một đối tượng JSON. Thông tin này có tính tin cậy cao bởi vì nó đã được kí bằng mã bí mật bằng các sử dụng các thuật toán như HMAC, RSA hoặc ECDSA.

JWT

Một đối tượng JWT gồm có 3 phần là header, payload và signature. Trong đó header giữ các thông tin cơ bản về chuỗi JWT như thuật toán dùng để kí, hạn sử dụng… Payload là dữ liệu cần truyền tải là đối tượng JSON đã được base64 encode. Cuối cùng là signature là phần mã hóa của cả hai header và payload kết hợp với mã bí mật cùng thuật toán mã hóa đã được chỉ định ở header.

Để tìm hiểu kĩ hơn về JWT, các bạn có thể đọc thêm ở Introduction to JSON Web Tokens .

Vì những thông tin cần thiết để truyền tải được nằm trong payload thế nên dựa vào payload hệ thống có thể xác định được danh tính của người dùng thông qua nó.

Ví dụ payload của tôi có nội dung như sau:

{
  "id" : 1,
  "username": "hoaitx"
}

Thì khi lên hệ thống sẽ đọc được id của tôi và xác định được tôi là ai.

Có một lưu ý cực kì quan trọng đó là thông tin trong payload chỉ được mã hóa bằng base64, điều đó có nghĩa từ mã JWT tôi có thể trích xuất được những thông tin có trong payload vì thế bạn cần thận trọng trong việc đưa thông tin vào payload trước khi kí chúng. Chắc chắn rằng những thông tin nhạy cảm như password, hay các thông tin cá nhân không cần thiết thì không nên đưa vào.

Khi mã JWT được gửi lên máy chủ có thể dễ dàng xác định được phần chữ kí trong đó có hợp lệ không. Bởi bất kì một thông tin nào trong payload được sửa đổi để gửi lên sẽ kéo theo chữ kí sẽ bị thay đổi theo. Chưa kể đến kẻ tấn công sẽ không bao giờ biết được mã bí mật dùng để kí lại nội dung bị thay đổi đó.

Có nên dùng Refresh Token không?

Tôi sẽ không khuyến khích mọi người nên triển khai RT hay như thế nào. Vì tôi biết có nhiều hệ thống không cần triển khai đến RT mà vẫn hoạt động tốt. Thay vào đó tôi sẽ đưa ra một vài điểm cần chú ý khi sử dụng AT và RT.

Có một vài lý do để AT chỉ nên tồn tại trong thời gian ngắn như:

  • Access Token là một đoạn mã ủy quyền đã được kí bởi máy chủ ủy quyền, máy chủ tài nguyên chỉ cần nhận access token và xác nhận thế nên thời gian càng ngắn thì nguy cơ access token khi bị lộ càng ít rủi ro.
  • Nếu thời gian hợp lệ của AT quá dài, khi bị lộ AT thì rủi ro cao hơn vì t kẻ gian có nhiều thời gian hơn để khai thác, đồng thời có thể bạn ko biết rằng AT đã bị lộ.
  • Hãy tưởng tượng nếu bạn cho phép người dùng tạo quá nhiều mã AT, lúc đó nếu muốn vô hiệu hóa những mã AT còn lại thì bạn phải đánh dấu nó trong cơ sở dữ liệu. Hay nói cách khác là bạn cần phải lưu lại những mã AT đã được tạo ra.

Có một vài lý do để RT được sử dụng như:

  • Rút ngắn thời gian tồn tại của AT, khi AT bị hết hạn thì sử dụng RT để lấy mã AT mới.
  • Bạn cần phân biệt được máy chủ ủy quyền và máy chủ tài nguyên. Máy chủ ủy quyền có nhiệm vụ cung cấp mã RT và kí mã AT để đại diện cho người dùng. Máy chủ tài nguyên nhận mã đã kí từ máy chủ ủy quyền để có quyền như người dùng đang thao tác với dữ liệu của họ trên hệ thống như thông tin tài khoản, dữ liệu… Máy chủ ủy quyền và máy chủ tài nguyên có thể là một. RT thường được lưu trữ ở máy chủ ủy quyền phục vụ cho mục đích cấp mã AT mới. Còn mã AT được dùng ở máy chủ tài nguyên, dùng để định danh một người dùng.
  • Bạn không cần phải lưu lại nhiều AT, nếu muốn chấm dứt phiên chỉ đơn giản là vô hiệu hóa mã RT trên máy chủ ủy quyền.

Sau khi hiểu được những lý do trên thì việc sinh ra RT giúp giải quyết được một vài hạn chế khi chỉ sử dụng mỗi AT. Nhưng như vậy nếu mã AT hoặc RT bị lộ thì rủi ro sẽ rất cao sao? Và các lưu trữ chúng như thế nào thì mình xin viết tiếp ở phần sau.

Bài viết gốc được đăng tải tại 2coffee.dev

Có thể bạn quan tâm:

Xem thêm Việc làm IT hấp dẫn trên TopDev

Nhập môn lập trình – 9 cảnh giới mà bạn có thể đạt tới

Nhập môn lập trình – 9 cảnh giới mà bạn có thể đạt tới

Bài viết được sự cho phép bởi tác giả Nguyễn Trung Thành

Bài viết này là những chia sẻ từ đáy lòng của một kỹ sư/giảng viên với nhiều năm kinh nghiệm trong nghề lập trình. Khi bạn bắt đầu nhập môn lập trình, thì bài viết này sẽ định hướng cho bạn biết con đường tích lũy kinh nghiệm lập trình nhiều chông gai nhưng cũng rất thú vị phía trước.

Bài viết chia là 2 phần chính:

  • Phần 1: Những kinh nghiệm bản thân tác giả đã trải qua. Từ lúc học lập trình cho người chưa biết gì, đến khi trở thành lập trình viên chuyên nghiệp.
  • Phần 2: Tác giả sẽ tổng kết lại 9 level, hay nói theo ngôn ngữ kiếm hiệp thì là 9 cảnh giới từ thấp đến cao mà một lập trình viên có thể đạt được.

Chúng ta cùng nhau khám phá nhé!

Phần 1: Nhập môn lập trình

Thường thì người giỏi thật sự thì có lẽ họ ít chia sẻ kinh nghiệm tối cao. Người ta gọi là bí kíp gia truyền. Mà chỉ người được chỉ định mới có thể truyền thụ. Mà khi chia sẻ thì họ lại thường chia sẻ những kinh nghiệm phổ biến.

Bản thân mình cũng vậy, nhưng trong bài viết này mình chia sẻ những quan niệm hơi khác người một chút.

#1. Nền tảng ngành CNTT của Việt Nam

Để học tốt ngành CNTT, bạn phải có đủ 5 yếu cốt cốt lõi sau:

  1. Tư duy
  2. Kỹ năng IT
  3. Kiến thức chuyên môn (lập trình, Toán học, Vật lý…).
  4. Đam mê
  5. Ngoại ngữ

5 yếu tố trên gộp lại thành 1 thứ gọi là “cốt cách”, “tư chất”.

Điều này giải thích một chuyện mà bạn thường hay thấy: có vài bạn học lập trình suốt 2 năm liền mà trình độ không bằng được vài bạn học lập trình trong… vài tháng.

Đơn giản là sự khác nhau ở “tư chất” và sự cần cù kiên trì mỗi người.

Để giải thích 5 yếu tố trên vừa dễ mà vừa khó. Dễ là vì bạn nào đọc cũng hiểu cả. Khó là vì để cho bạn hiểu đúng được ý nghĩa sâu xa thì không phải đơn giản.

Nhập môn lập trình

Bạn có thể hiểu đơn giản như sau:

Giả sử 4 yếu tố đầu tiên bạn rất giỏi, nhưng bạn không giỏi yếu tố cuối cùng (tiếng Anh). Vì vậy mà bạn không thể leo lên mức cảnh giới thượng thừa mà mãi mãi bị giới hạn ở 1 mức nào đó.

Bạn chỉ đạt cảnh giới cao khi nội lực đầy đủ. Lấy hình trên minh họa chẳng hạn, với “minimum” là ngôn ngữ tiếng Anh.

Lưu ý: 5 yếu tố trên đây chỉ là “tư chất”, muốn phát huy được “tư chất” để đạt được thành công thì bạn phải rèn luyện, kiên trì và cần có nhiều yếu tố khác (thậm chí là cả may mắn). Nếu rèn luyện tốt tư chất thì bạn có thể học giỏi bất cứ lĩnh vực nào trong ngành CNTT chứ không phải riêng về lập trình. Đó là kinh nghiệm đầu tiên mình muốn chia sẻ với bạn muốn nhập môn lập trình.

  Học lập trình cần học các kiến thức cơ bản nào?

  Những cái “khó” khi mới học lập trình

#2. Coder là gì? Coder khác với Software Engineer chỗ nào?

Coder hiểu đơn giản là những người viết các đoạn mã để xây dựng các phần mềm. Đây là cách gọi dân dã kiểu tá điền. Tức là Coder là người viết code, và chỉ biết mỗi code thôi.

Với ý nghĩa ban đầu là coder là người chỉ thực hiện viết code. Nhưng với yêu cầu nhân lực ngày nay, thì coder gần giống với ý nghĩa Software Engineer.

Tức là người Coder không chỉ biết viết code theo chỉ thị, mà họ cần phải biết về thiết kế hệ thống, biết viết test case, biết làm việc nhóm, trao đổi với khách hàng… rất nhiều kĩ năng kèm theo.

#3. Copy code đúng cách

Nhập môn lập trình

Thường thì đa số các bài viết chia sẻ kinh nghiệm lập trình họ đều nói rằng không được phép copy code của người khác, copy code là ngu, là gà, copy code là vô đạo đức, v.v.

Dĩ nhiên mình đồng ý hoàn toàn, vì “copy code” đối với đa số người là “lấy code của người khác mang về làm bài làm của mình”.

Còn với mình, thì quan niệm “copy code” đúng với ý nghĩa thuần túy của nó: “copy một đoạn code từ tài liệu, sau đó dán vào bài của mình, chạy thử”.

Vậy thì điều đó có gì khác nhau ? Rất khác. Khi mình tìm kiếm tài liệu, chạy thử code, để tiếp thu nhanh nhất thì mình phải copy code thấy được kết quả ngay, dễ dàng hình dung ra vấn đề.

Điều này rõ ràng tốt hơn việc “gõ code từ từ (không copy) để hiểu từng câu lệnh, gõ quá trời quá đất, chạy thử, ôi mẹ ơi 69 lỗi, thiếu thư viện tè le. Biết vậy khỏi gõ code chi cho mệt người tốn sức”.

Khi mình “copy code” thuần túy, mình sẽ thấy ngay kết quả, điều đó tạo động lực và cảm hứng. Từ đó bắt đầu chạy debug từ từ, dần dần hình dung ra vấn đề và hiểu được, sử dụng được. Đó là 1 trong những bí kíp tối thượng của mình khi học lập trình.

#4. Biết nhìn xa trông rộng

Nhập môn lập trình

Nghe có vẻ khá là hoa mỹ nhưng thực tế là vậy.

Khi làm một đồ án (bài tập siêu lớn), các bạn của mình thường hay nhào vào code ngay, code được chức năng nào hay chức năng đó để kiếm điểm. Còn mình thì không.

Mình dành đến gần 50% thời gian làm đồ án cho sự chuẩn bị, chuẩn bị về mọi thứ. Mình học những công nghệ liên quan đồ án, tìm hiểu kĩ các hàm, code thử vài tính năng nho nhỏ để hiểu. Sau đó mình bắt đầu lên ý tưởng, thiết kế hệ thống class (lập trình hướng đối tượng).

Mình phải thiết kế làm sao mà phải mở rộng được tối đa các chức năng. Ví dụ đồ án yêu cầu chức năng vẽ hình cơ bản, nhưng mình thiết kế làm sao mà có thể dễ dàng mở rộng ra thành “vẽ hình phức tạp, vẽ hình mà chèn thêm được chữ”.

Việc làm IT Fresher dành cho bạn

#5. Code đúng là một chuyện – Code để có thể tái sử dụng lại là chuyện khác

Giai đoạn nhập môn lập trình rất mệt, phải liên tục điều chỉnh cho hoàn thiện, nhưng bù lại khi cái lõi đã xong, thì giờ đến lúc mình sướng, bạn mình khổ. Bạn mình khổ vì nhào vào code liền, giờ code như 1 đống rác đọc chả hiểu gì (xin lỗi, dùng từ hơi xúc phạm).

Vì code miễn sao ra đúng chức năng là ok nên “làm được trước đã rồi tính tiếp”. Vì vậy bạn mình thường sẽ bị bế tắc về sau. Còn mình thì giai đoạn sau rất thoải mái, mở rộng tính năng tối đa, giựt điểm về ngon lành.

Mấu chốt quan trọng ở đây là phải biết nhìn xa trông rộng. Nền tảng đó là cấu trúc dữ liệu và giải thuật, phương pháp lập trình hướng đối tượng, tư duy hướng đối tượng. Dùng các mẫu thiết kế Hướng đối tượng làm cho code của mình hay hơn, chuyên nghiệp hơn.

Phần 2: 9 cảnh giới từ thấp đến cao trong giới lập trình

Nhằm đơn giản hóa vấn đề, mọi code minh họa trong bài sử dụng ngôn ngữ C/C++.

Cảnh giới 1: Nhập môn lập trình (beginner)

Mới bước vào ngành CNTT và lập trình thì ai ai cũng phải “nhập môn”, làm quen. Vì vậy mà nhiều khi code rất là trẻ trâu. Code đọc khó hiểu, tệ hơn là thụt dòng loạn xạ không có quy tắc.

Nhập môn lập trình

Cảnh giới 2: Biết sử dụng hàm, thư viện chuẩn có sẵn

Có một điều trớ trêu thay là dù bạn học các ngành về khoa học kĩ thuật hay là về khoa học xã hội, thì vẫn len lỏi đâu đây một yếu tố gọi là “học thuộc lòng”.

Tất nhiên, với các ngành khoa học xã hội thì điều đó dễ dàng nhận ra, môn Văn chẳng hạn, học bài phát điên luôn. Còn với khoa học kĩ thuật thì sao ? Liệu có học bài không ?

Với quan điểm của mình, một trong những bước đệm để bạn giỏi lên là phải học thuộc càng nhiều hàm, càng nhiều thư viện càng tốt, giống như học từ vựng tiếng Anh ấy.

Điều này đôi khi nghe có vẻ phi lý, vì sao ta lại học thuộc lòng ?

Đơn giản vì ta đang muốn giải quyết nhanh một vấn đề, sao ta lại tốn công sức viết thủ công các hàm trong khi thư viện đã có sẵn, gọi 1 phát là xong ?

Ta sẽ tiết kiệm được thời gian, công sức để tập trung vào vấn đề chính nhiều hơn. Nhiều khi mình lo viết hàm phụ mà hàm phụ bị lỗi, gây rối, mất tập trung, xuống tinh thần.

Ghi chú: Chỉ khi bạn vững thuật toán cơ bản thì mới xài hàm để tiết kiệm thời gian.

Lấy ví dụ minh họa: Kiểm tra xem một số nguyên dương có phải số đối xứng hay không?

Ví dụ như số 121 là số đối xứng, số 123 thì không phải, số 9009 là số đối xứng, v.v

Nhập môn lập trình
Làm bình thường chưa biết gì cả

Nhập môn lập trình
Khi biết sử dụng hàm, bài toán giải quyết “ngọt” hơn

Cảnh giới 3: Tinh thông hàm, thư viện, nguyên lý

“Tinh thông” hoàn toàn khác với chuyện “biết biết một chút”.

Khi bạn hiểu rõ được cú pháp các hàm xử lý, bạn sẽ dễ dàng ứng dụng nó để xử lý bài toán tốt nhất. Lấy lại ví dụ “xác định số đối xứng”.

Khi bạn chưa hiểu rõ hàm strcmp, strrev, strcpy thì bạn chỉ hiểu đơn giản là nó giúp mình làm cái này, cái kia. Nhưng khi bạn hiểu rõ được cú pháp của hàm đó, nguyên lý xử lý của hàm đó, thì bạn có thể áp dụng để làm cho code mượt mà hay hơn như hình ở trên.

Cảnh giới 4: Cấu trúc dữ liệu và thuật toán

Đây là một lợi thế của những bạn từng học “đội tuyển Tin học” đi thi Học sinh giỏi cấp tỉnh, thành phố/quốc gia/Olympic.

Bạn sẽ ứng dụng những cấu trúc dữ liệu & thuật toán để giải quyết một vấn đề ở mức độ tối ưu (tối ưu về tốc độ là chính). Nó cũng sẽ tích lũy một phần kiến thức vào kinh nghiệm lập trình.

Có những thứ ở cuộc sống rất là trừu tượng, khi mang nó vào biểu diễn trong lập trình thì phải nói là 1 thảm họa khủng khiếp. Vì bình thường ta chỉ khai báo các biến, sử dụng các hàm có sẵn để xài, vậy thôi.

Ví dụ: hệ thống bản đồ. Làm sao mà các lập trình viên có thể mô phỏng lại bản đồ trên máy tính, và có thể giúp ta tìm đường đi ngắn nhất giữa 2 địa điểm nào đó?

Google Maps là 1 ví dụ rất điển hình. Nếu ta chỉ khai báo biến, sử dụng các hàm có sẵn như nhập số, tách chuỗi, ghép chuỗi, v.v thì liệu có thể làm được điều này?

Cấu trúc dữ liệu giúp ta giải quyết vấn đề triệt để

Nhờ những cấu trúc, dữ liệu cơ bản như số nguyên, số thực, mảng, v.v người ta kết nối chúng, tập hợp lại (trong struct, class) rồi áp dụng một quy tắc hoạt động đặc biệt.

Vậy là có thể hình thành nên 1 cấu trúc dữ liệu. Từ đó giúp ta giải quyết vấn đề cực kì hay và ngọt, mà lại hiệu quả nữa.

Đi kèm với cấu trúc dữ liệu, đó là thuật toán. Cấu trúc dữ liệu quyết định thuật toán. Thuật toán giúp bạn tư duy tốt hơn. Bạn cần phải luyện tập nhiều với thuật toán.

Nhập môn lập trình
Cấu trúc dữ liệu thường hay gặp: Stack

Vì vậy nên, để đạt đến một cảnh giới cao hơn, nhìn mọi vật, mọi sự việc khác người bình thường, thì nhất định bạn phải tinh thông cấu trúc dữ liệu và thuật toán

Cảnh giới 5: Phương pháp lập trình Hướng đối tượng

Cảnh giới được nâng lên tối thượng hay không cũng là nhờ phương pháp lập trình Hướng đối tượng.

Nhập môn lập trình
Tư duy cũ: lập trình hướng thủ tục/hàm (hàm là trung tâm của việc lập trình)

Nhập môn lập trình
Minh họa tư duy lập trình với hàm: hàm TinhTong

Nhập môn lập trình
Tư duy Hướng đối tượng: đối tượng là trung tâm của việc lập trình, hàm chỉ là phụ

Nhập môn lập trình
Minh họa tư duy Hướng đối tượng

Khi có tư duy lập trình hướng đối tượng, bạn sẽ nhìn mọi vật, sự việc lên 1 tầm cao mới. Khác xa với con mắt của người bình thường.

Phương pháp lập trình Hướng đối tượng (PP LT HĐT) giúp bạn tiết kiệm thời gian, công sức. Bạn có thể tái sử dụng code, mở rộng phần mềm một cách nhanh chóng. Nếu áp dụng tốt phương pháp lập trình này và cấu trúc dữ liệu/thuật toán thì bạn có thể nói là rất vững cơ bản rồi đó.

Cảnh giới 6: Engine, framework, thư viện, đa nền tảng

Khi học, bạn học từ dưới đáy lên cao thì mới có thể đạt được cảnh giới. Khi bạn học ở trên rồi bạn đào sâu xuống dưới thì thường rất khó và gần như không thể.

5 cảnh giới trước là bạn đang ở đáy, và đến cảnh giới này là bạn bắt đầu học lên mức “ứng dụng thực tế”.

Bạn sử dụng các engine, framework, thư viện có sẵn để làm nên 1 chương trình hoàn thiện, có giao diện đàng hoàng, tung ra ngoài thị trường. Bạn có thể va chạm nhiều với MVC, MVP, XML, database, Windows Form, WPF, Kotlin cho Android, v.v

Tưởng tượng như 5 cảnh giới trước là bạn luyện nội công vững vàng. Thì ở cảnh giới này bạn học ngoại công để thể hiện ra ngoài.

Khi có nội công vững, ngoại công tốt thì thiên hạ nhìn vào biết bạn là cao thủ, thiên hạ khiếp sợ.

Nhập môn lập trình
Chương trình vẽ MyPaint – niềm tự hào của mình giúp mình đạt điểm cao.

Dù giỏi bất kì Framework nào thì hiểu bản chất mới là quan trọng

Còn với những bạn chưa có nội công tốt mà đã lo vội thể hiện thì thật là thảm họa, vì vậy việc trau dồi để có kinh nghiệm lập trình thật tốt là cần thiết.

Ví dụ như có những bạn lo làm game Flappy Bird, bạn dễ dàng làm được game này nhưng chỉ là phần đồ họa bên ngoài.

Chỉ khi bạn học Vật lý, hiểu được công thức rơi tự do (của con chim) thì bạn mới mô phỏng được chính xác chim đang bay. Đó là nội công đó bạn. Hay hơn nữa là bạn lập trình trí tuệ nhân tạo cho con chim tự bay, né các ống cống, đây mới gọi là giỏi.

Tưởng tượng: một người chưa có nội lực, nhưng mà được học chút võ công bên ngoài (ngoại công), khi múa võ sẽ làm cho nhiều kẻ sĩ sợ hãi, nhưng mà khi gặp cao thủ chưởng 1 phát là bẹp dí luôn. Còn nếu một người có nội lực mà chưa có ngoại công, lỡ bị cao thủ chưởng thì có thể “ráng chịu đựng đi gặp thầy thuốc chữa trị”.

Có nội lực mà còn thêm ngoại công pro thì thôi khỏi nói rồi.

Học chuyên sâu cũng là một cách

Một số bạn học sâu thì lại có quan niệm khác. Các bạn học sâu thì đào xuống phía dưới chớ không lên trên. Bạn sử dụng các thư viện xử lý thread, xử lý va chạm Vật lý chẳng hạn. Đó cũng là một điều tốt.

Xa hơn nữa là bạn tính toán chuyện đa nền tảng. Làm sao bạn viết code 1 lần mà biên dịch được trên nhiều nền tảng Windows, Android, iOSLinux,… (với ngôn ngữ C/C++ chẳng hạn) ???

Cơ bản nhất là sử dụng macro. Sau đây mình sẽ minh họa khi bạn đạt cảnh giới macro. Mình sẽ lấy lại ví dụ về việc “nhập vào một số nguyên dương, kiểm tra xem đó là số đối xứng hay không”.

Nhập môn lập trình
Sử dụng macro trong tiền xử lý (preprocessor) và tùy biến code

Nhập môn lập trình
Nâng cấp thêm 1 chút

Ở cảnh giới này thì đồng thời bạn đã biết sử dụng các thư viện bên ngoài, biết cách link thư viện với project, biết tạo DLL, LIB và sử dụng chúng.

Thường bạn sẽ chìm đắm rất lâu trong cảnh giới này vì ham mê thể hiện và học quá nhiều thứ, và tất nhiên nó sẽ giúp ích cho việc tích lũy kinh nghiệm lập trình =))

Cảnh giới 7. Phong cách lập trình

Lên đến cảnh giới này, bạn bắt đầu chăm chú cho code mình được đẹp hơn, ưu việt hơn, dễ đọc hơn.

Thử tưởng tượng: bạn viết 1 đống code cả ngàn dòng rất là cao siêu. Nhưng sau 1 năm bạn đọc lại code mình bạn còn hiểu không ?

Khoảng trắng giữa các thành phần là quan trọng. Bạn cần tách ra rõ ra phần nào ra phần đó.

Ví dụ bạn khai báo biến, sau đó nhập dữ liệu, sau đó xử lý, và xuất ra kết quả. Vậy thì: nên có thêm khoảng trắng giữa 4 thành phần trên.

Code là một nghệ thuật – Coder là một nghệ sĩ

Cách 1:
if (x == 0)
    In_ra_dòng_chữ("Hello");

Cách 2:
if (0 == x)
    In_ra_dòng_chữ("Hello");

Câu hỏi: liệu có sự khác biệt nào giữa 2 đoạn code trên không ?

Xét về mặt vật lý thì câu trả lời là KHÔNG, đều giống như nhau hoàn toàn. Xét về mặt tư duy: có 1 sự khác biệt rất lớn về đẳng cấp. Vì sao vậy ?

Giả sử ta quên đi 1 dấu ‘=’ trong biểu thức ở lệnh if.

Với cách 1 ta có thể nhầm lẫn if (x = 0) (thiếu đi 1 dấu ‘=’). Và code vẫn hợp lệ với C/C++, vì đó là việc “gán x = 0” nằm bên trong lệnh if, nhưng nó mang 1 ý nghĩa khác hoàn toàn và dẫn đến code sai.

Với cách 2 thì if (0 = x) là câu lệnh vô lý, làm sao mà hằng số gán giá trị được ? IDE sẽ gạch đỏ và báo lỗi ngay cho ta biết ===> “Code tự định nghĩa, tự né tránh lỗi vô lý”.

Một vấn đề nữa đó là vấn đề đặt tên cho class/truct, tên hàm, tên biến, v.v (mặc định ta bàn tới tên biến cho dễ hiểu).

Bạn sẽ phải mất nhiều thời gian để đặt tên biến sao cho hay và đúng quy tắc, dễ nhớ. Chỉ có những cao thủ họ mới hiểu được chuyện này.

Khi bạn học code cơ bản thì bạn chỉ quan tâm “tạo ra biến để xài” chứ ít quan tâm “tên biến như thế nào”.

Đơn giản thôi, code vài dòng thì nhìn biến a, biến c, biến x biến y dễ dàng hiểu được. Còn code 10000 dòng thì nhìn vào x, y, z xem có hiểu nó là gì không ? Đó chính là kinh nghiệm học lập trình dễ dàng hơn đó ^_^

Cảnh giới 8. Hacking/cracking

Cảnh giới này dành cho những bạn nào thích học sâu về hệ thống bên dưới, có thể sâu đến mức nghiên cứu về hợp ngữ (asm).

Bạn sẽ học với Windows API, shell (Windows). Với Linux bạn có thể tìm hiểu về system calls, kernel, shell, v.v Mình không xài Linux nhiều nên chỉ chém vậy thôi.

Nhập môn lập trình
Minh họa công cụ “SuperPointer” giúp bạn hack game đơn giản

2 hình trên là minh họa việc sử dụng Windows API để hack 1 game nho nhỏ. Bạn sẽ được demo thử công cụ “SuperPointer” của mình khi học khóa học “Kỹ thuật lập trình & PP lập trình Hướng đối tượng cơ bản” của mình (PR xíu, hihi).

Ở cảnh giới này, bạn sẽ đi rất sâu về bên dưới, hiểu rõ đươc cơ chế hoạt động của hệ điều hành, ví dụ bạn tiêm DLL, ghi đè dữ liệu lên không gian bộ nhớ của tiến trình để hack, viết ra [virus] keylog, trojan, backdoor.

Hoặc bạn có thể nghiên cứu về cơ chế hook, message để từ đó mô phỏng lại quá trình test phần mềm tự động (test automation) v.v..

Cảnh giới 9. Vô chiêu thắng hữu chiêu

Đến cảnh giới này thì có thể nói bạn đã bước chân đến mức master rồi.

Ở cảnh giới này thì mình đoán là nhìn code cũng chạy được code trong đầu, khỏi cần chạy trên IDE luôn haha. Bạn có thể tự viết thư viện riêng cho mình mà thậm chí còn hay hơn những thư viện bên ngoài.

Nói vậy thôi, chớ mình nghĩ rằng khi đạt đến mức độ này thì thường bạn sẽ đi nghiên cứu khoa học và công nghệ, về Big Data, Data Mining, Machine Learning, hay là Virtual Reality, v.v

Và dĩ nhiên còn nhiều cảnh giới cao hơn, tầm mắt của mình chỉ đạt tới mức này thôi.

Ghi chú: Trong nhà trường, bạn học theo hướng dẫn thầy cô thì cùng lắm bạn chỉ học được một chút ở mỗi cảnh giới chứ bạn chưa thật sự tinh thông. Chỉ có sự tự học mới đưa bạn được tới đỉnh cao thôi

Một điều quan trọng nữa là:

– Nếu bạn chỉ biết ở mỗi cảnh giới một chút chút. Thì tương đương bạn vẫn là con số 0. Biết 10 ngôn ngữ lập trình nhưng ở mỗi ngôn ngữ chỉ viết được chương trình Hello World).

– Nếu bạn tinh thông đầy đủ mỗi cảnh giới, thì bạn vẫn có thể đạt đỉnh cao (chỉ biết 1, 2 ngôn ngữ lập trình nhưng tạo ra được sản phẩm hay).

===> Nếu đã xác định mình đã đam mê, hãy học tới nơi tới chốn, học cho kĩ cho sâu, phóng 1 mũi tên tựa như lao đến được đích cuối cùng.

Vậy là mình đã chia sẻ kinh nghiệm từ khi nhập môn lập trình mà mình đã trải nghiệm  lúc học lập trình cho người chưa biết gì. Hy vọng sẽ giúp ích được cho các bạn!

Bài viết gốc được đăng tải tại vntalking.com

Xem thêm:

Đừng bỏ qua việc làm IT tất cả level có trên TopDev nhé!

Làm thế nào để tránh Race Condition in Rails

Làm thế nào để tránh Race Condition in Rails

Bài viết được sự cho phép của tác giả Tùng Nguyễn

Tôi nghĩ chắc các bạn developer ai cũng đã nghe qua từ Race condition rồi. Trong bài này tôi sẽ đề cập đên 2 vấn đề chính: Race Condition là gì!? và Làm sao phòng tránh nó?

Race condition rất khó để debug đặc biệt là khi mà chính tôi cũng không biết nó có phải Race Condition hay không!

Race Condition là gì?

Khi 2 hoặc nhiều user vì 1 lý do nào đó cùng lúc read và update cùng 1 record ở cùng 1 thời điểm, nó sẽ dẫn đến 1 vài problem không mong muốn. Tôi lấy ví dụ 1 customer click vào button Pay ở trang checkout của website e-commerce. Một điều hoàn toàn có thể xảy ra là customer có thể charge cùng 1 order 2 lần vì 2 request charge có thể đến gần như cùng 1 lúc. Những trường hợp giống như vậy gọi là Race Condition.

Các cách phòng tránh Race Condition

Locking

Khi hệ thống của tôi cho phép multiple users access và edit cùng 1 record, tôi cần phải tìm cách tránh trường hợp khi 1 user overrides changes của 1 user khác mà thậm chí không check xem đó có phải record mình muốn update không.

Tôi lấy ví dụ, tôi có 1 cái web e-commerce, trong đó nhiều admin đều có quyền manage kho sản phẩm. Race Condition xảy ra khi nhiều Admin cùng update thông tin cùng 1 sản phẩm:

  1. Admin 1 thêm sản phẩm mới tên “Bench Fitness Equipment for Home”
  2. Admin 2 vào thấy có sản phẩm mới tạo có tên chưa đầy đủ và không đáp ứng về mặt thương mại. Nên quyết định đổi tên lại thành “RELIFE REBUILD YOUR LIFE Sit Up Bench Adjustable Workout Foldable Bench Fitness Equipment for Home Gym Ab Exercises New Version”
  3. Cùng lúc đó, Admin 1 thấy rằng tên mình đặt chưa hay cho lắm nên vào đổi lại thành “Adjustable Workout Foldable Bench Fitness Equipment for Home Gym”
  4. Admin 1 save tên sản phẩm sau khi Admin update vài milliseconds, đồng thời vô tình override tên sản phẩm đầy đủ nhất mà Admin 2 mới đổi.

Locking là 1 trong nhiều cách để ngăn chặn kich bản như vậy có thể xảy ra.

  Làm thế nào để xây dựng social network bằng Ruby on Rails

  Mẫu bảng mô tả công việc lập trình Ruby on Rails

Optimistic locking

Để triển khai optimistic locking in Rails, tôi add lock_version column vào table mà tôi muốn lock. Rails sẽ tự động check cột này trước khi update record. Cứ mỗi lần record được update thì cột lock_version sẽ tự tăng lên, và cơ chế locking sẽ chắc chắn rằng nếu có record được update 2 lần thì record được save sau cùng sẽ raise StaleObjectError.

product1 = Product.find(1)
product2 = Product.find(1)

product1.name =  "RELIFE REBUILD YOUR LIFE Sit Up Bench Adjustable Workout Foldable Bench Fitness Equipment for Home Gym Ab Exercises New Version"
product1.save

product2.name = "Adjustable Workout Foldable Bench Fitness Equipment for Home Gym"
product2.save # Raises an ActiveRecord::StaleObjectError

Pessimistic locking

Pessimistic locking sẽ lock cái record đó cho đến khi tất cả transaction trên record đó kết thúc. Một khi record được lock, user khác sẽ không thể nào thay đổi record đó cho đến khi lock được release. Pessimistic locking sử dụng cho row-locking bằng SELECT…FOR UPDATE và 1 vài loại lock khác nữa.

Để sử dụng Pessimistic locking trong Rails, thay vì sử dụng ActiveRecord::Base#find thì tôi đổi thành ActiveRecord::QueryMethods#lock:

product = Product.lock.find(1) #lock the record

product.name = "RELIFE REBUILD YOUR LIFE Sit Up Bench Adjustable Workout Foldable Bench Fitness Equipment for Home Gym Ab Exercises New Version"

product.save! #release the lock

Mặt khác tôi cũng có hể sử dụng ActiveRecord::Base#lock! để lock record bàng IDs của nó:

product = Product.find(1)
  order = Order.find(order_id)
  ActiveRecord::Base.transaction do
    product.lock! 
    product.name  = "RELIFE REBUILD YOUR LIFE Sit Up Bench Adjustable Workout Foldable Bench Fitness Equipment for Home Gym Ab Exercises New Version"
    product.save!
    order.paid!
  end

Hoặc tôi có thể start transaction và lock record cùng lúc bằng with_lock:

product = Product.find(1)
product.with_lock do #lock the record
product.name = "RELIFE REBUILD YOUR LIFE Sit Up Bench Adjustable Workout Foldable Bench Fitness Equipment for Home Gym Ab Exercises New Version"

product.save!
end

Tham khảo các vị trí tuyển Ruby on Rails lương cao cho bạn

Sử dụng unique Index thay vì unique validation

Rails’ ActiveRecord validation không phải database-level validation, nó là application-level validation, và nó hoạt đông tuyệt vời nếu không có Race Condition.

Bây giờ lấy ví dụ thực tế trong cuộc sống. Tôi có feature sign-up, tôi yêu cầu user chỉ được sử dụng 1 số điện thoại để đăng ký và không được trùng nhau, vì thế tôi viết logic validate như sau:

class User < ApplicationRecord
  validates :phone_number, uniqueness: true
end

Giờ giả sử user click sign-up button 2 hay nhiều lần cách nhau chỉ vài millisecond, sẽ dẫn đến kịch bản như sau:

  1. Request 1 – Kiểm tra xem người dùng có tồn tại với số điện thoại đó hay không và tiếp tục, vì không tìm thấy người dùng nào.
  2. Request 2 – Kiểm tra xem người dùng có tồn tại với số điện thoại đó hay không và tiếp tục, vì không tìm thấy người dùng nào.
  3. Request 1 – Tạo user mới và insert vào database.
  4. Request 2 – Tạo user mới và insert vào database.

Request 2 vượt qua unique validate vì tại thời điểm kiểm tra xem có người dùng tồn tại hay không, Request 1 vẫn chưa lưu số điện thoại vào database. Do đó, cả hai Request cuối cùng đều có thể insert new user vào database.

Để phòng tránh trường hợp Race Condition như vậy tôi só thể thêm unique index constraint, sẽ thực hiện validate ở database-level:

class AddUniqueIndexToUsers < ActiveRecord::Migration
  def change
    # Have the database raise an exception anytime any process tries to
    # submit a record that has a code duplicated for any particular account
    add_index :users, :phone_number, unique: true
  end
end

Lời kết

Race condition, nếu không ngăn chặn sẽ ảnh hưởng tới sự toàn vẹn dữ liệu và đôi khi sẽ dẫn đến các vấn đề về security. Hy vọng các bạn có thêm chút kiến thức cơ bản trong công cuộc đi code của mình và tránh được những đêm dài chỉ để ngồi debug.

Happy Hacking

Bài viết gốc được đăng tải tại omatsuri.blog, biết thêm về tác giả tại LinkedIn

Xem thêm Việc làm Developer hấp dẫn trên TopDev

Lạm Bàn Về Tham Chiếu/Tham Trị Trong Java

Lạm Bàn Về Tham Chiếu/Tham Trị Trong Java

Bài viết được sự cho phép của tác giả Nhựt Danh

Bài viết hôm nay chúng ta sẽ cùng tìm hiểu và làm rõ ra thế nào là truyền tham số kiểu Tham chiếu, hay Tham trị, vào phương thức trong Java. Có thực sự như lời đồn rằng Java chỉ hỗ trợ việc truyền tham số kiểu Tham trị hay không?

Thực ra cũng bởi có nhiều bạn liên hệ mong muốn mình làm rõ vấn đề này của Java, nên nhân đây mình viết ra luôn. Vâng, mình cũng nhận thấy rằng kiến thức này khá là quan trọng, nó không những nói rõ hơn về việc truyền tham số kiểu Tham chiếu và Tham trị là gì, mà nó còn giúp chúng ta mở rộng hơn trong việc nhìn nhận một biến được tổ chức và quản lý trong Java như thế nào. Và mình cũng muốn nói thêm một ý rằng, cái chủ đề về Tham chiếu/Tham trị này là một chủ đề thắc mắc của không riêng bạn đâu, nó như trở thành một cuộc tranh luận sôi nổi trên các diễn đàn, một lát sau vào bài viết bạn sẽ thấy tại sao nó lại gây nên sự tranh luận này, nếu bạn chưa tin lắm, hãy thử Google với từ khóa “Is Java pass-by-reference or pass-by-value” sẽ thấy.

Bắt Đầu Từ Việc Khai Báo Biến

Vâng đúng rồi, bạn nhớ đúng, biến đã được nói đến ở Bài 4. Ở đây chúng ta sẽ không nói lại biến là gì và khai báo ra sao. Mà sẽ phân tích sâu hơn về việc quản lý biến trong Java, lát nữa vấn đề về Tham chiếu và Tham trị sẽ được sáng tỏ hơn nhờ việc phân tích này.

Giả xử chúng ta khai báo một biến x như sau trong Java.

int x = 10;

Khi dòng code trên được thực thi, dĩ nhiên Giá trị 10 sẽ được chứa trong bộ nhớ. Tuy nhiên, có một giá trị khác cũng được hệ thống tạo ra, đó chính là Địa chỉ chỉ đến nơi chứa giá trị 10 này. Bạn cứ tưởng tượng bạn đi nhà sách, bạn cần phải để túi sách bên ngoài trước khi vào nhà sách đó, bạn sẽ đi đến các tủ chứa dành cho khách, cất túi xách vào một ngăn tủ, đóng cửa tủ lại. Bạn thấy rằng cửa tủ có ghi một con số, và khi bạn khóa cửa lại, trên chìa khóa cũng có một số tương ứng. Vậy thì túi xách của bạn tương tự như giá trị 10 mà bộ nhớ (hay cái tủ) dùng để chứa, còn con số trên chìa khóa tủ chính là địa chỉ của cái tủ, tương tự địa chỉ dẫn đến giá trị 10 của bộ nhớ. Địa chỉ trên chìa khóa giúp bạn không bị nhầm lẫn giữa tủ đồ của bạn và của người khác, và địa chỉ của hệ thống cũng giúp biến x tìm đến nơi chứa giá trị của nó trong bộ nhớ.

Việc khai báo và kịch bản lưu trữ trên đây được mình mô tả bằng sơ đồ trực quan, dễ hiểu như sau.

Sơ đồ diễn tả việc khai báo giá trị cho biến Sơ đồ diễn tả việc khai báo giá trị cho biến

Sơ đồ cho thấy khi dòng code khai báo trên được thực thi, giá trị 10 chứa trong bộ nhớ màu cam, và địa chỉ đến giá trị này (khung màu xanh dương) được tạo ra và lưu trữ như thế nào.

  Hướng dẫn tạo Gradle Project Java bằng dòng lệnh CMD

  Tổng Hợp Các Phương Thức Của Thread

Đến Truyền Biến Vào Trong Phương Thức

Thế Nào Là Truyền Kiểu Tham Trị

Bây giờ mới bắt đầu nội dung chính của bài hôm nay. Trước hết chúng ta hãy nhìn vào code sau.

public static void main(String[] args) {
    int x = 10;

    System.out.println("Before call process: " + x);
    process(x);
    System.out.println("After call process: " + x);
}

public static void process(int x) {
    x = 7;
}

Ở phương thức main(), chúng ta cũng bắt đầu với việc khai báo x = 10. Sau đó chúng ta truyền biến x này dưới dạng tham số vào cho phương thức process(). Thế nhưng vào bên trong process(), tham số lúc này cũng có tên là x (hay thực ra đặt cái tên khác cũng được, mình cố tình đặt chung để dễ thấy sự liên quan với nhau hơn), và chúng ta còn gán lại giá trị mới cho x nữa, là 7. Vậy sau khi process() kết thúc, câu lệnh in x ra console “After call process: “ sẽ in ra số 10 hay số 7 vậy các bạn?

Là số… 10. Hi vọng các bạn đều thuộc team nói đúng.

Before call process: 10
After call process: 10

Trên đây là ví dụ rõ ràng nhất cho khái niệm truyền kiểu Tham trị vào phương thức. Vậy truyền theo kiểu Tham trị là gì. Đó là việc truyền tham số trong trường hợp trên đây, nó chỉ là sự sao chép giá trị khi tham số được truyền vào trong một phương thức. x trước khi truyền vào trong phương thức process() mang giá trị 10. Còn x bên trong process() không phải x ở ngoài, nó chỉ là một biến khác được sao chép ra, cũng mang tên x, cũng mang giá trị 10, nhưng không còn là x ở ngoài nữa. Do đó dù bên trong process() chúng ta có thay đổi x như thế nào thì cũng không ảnh hưởng với x bên ngoài.

Có thể vẽ lại sơ đồ trực quan như sau.

Sơ đồ diễn tả việc truyền tham số kiểu tham trịSơ đồ diễn tả việc truyền tham số kiểu tham trị

Sơ đồ cho thấy x ở trên cùng là x trước khi đưa vào trong process() mang giá trị 10, khi đưa vào trong process()x này sẽ là một x khác hoàn toàn, khác nơi chứa giá trị 10 và hiển nhiên sẽ khác luôn địa chỉ (địa chỉ của chúng khác nhau được minh họa bằng hai màu khác nhau). Việc thay đổi từ giá trị 10 sang 7 bên trong process() chỉ làm thay đổi x bên trong đó mà thôi, hoàn toàn không ảnh hưởng gì với x bên ngoài cả.

Xem thêm vị trí tuyển dụng Java lương cao hấp dẫn tại TopDev

Thế Nào Là Truyền Kiểu Tham Chiếu

Trước khi đi vào giải nghĩa, mình xin nhắc lại rằng, Java chỉ hỗ trợ chuyền tham số kiểu Tham trị mà thôi.

Nói là không hỗ trợ vì chẳng có một cách nào để kêu Java giúp chúng ta truyền kiểu Tham chiếu cả. Tuy nhiên một số ngôn ngữ khác lại “công khai” hỗ trợ điều này, như mình biết đó là C++. Mình cũng còn nhớ một ít C++ nên sẽ minh họa việc truyền theo Tham chiếu như thế nào theo code như sau (bạn nào biết code C++ mà nhận thấy mình viết sai thì giúp mình sửa nhé, lâu quá không dùng đến mình cũng quên nhiều).

#include <iostream>

int main() {
    int x = 10;

    cout << "Before call process: " << x << endl;
    process(someValue);
    cout << "After call process: " << x << endl;

    return 0;
}

void process(int& x) {
    x = 7;
}

Bạn thấy code C++ cũng dễ hiểu đúng không nào. Cũng có phương thức main(), cũng in ra console trước và sau khi gọi phương thức process(). Nhưng khi khai báo tham số truyền vào cho process(), C++ cho phép khai báo kiểu int& hoặc int. Với khai báo tham số là kiểu int thì kết quả sẽ truyền tham số kiểu Tham trị như code Java trên kia, còn khai báo int& thì tham số sẽ truyền theo kiểu Tham chiếu. Và bạn biết không, với code C++ này thì sau khi thực thi, kết quả in ra ở dòng cuối cùng sẽ cho thấy x bị thay đổi sang giá trị 7.

Before call process: 10
After call process: 7

Vậy bạn đã phần nào phân biệt giữa truyền tham số kiểu Tham trị và Tham chiếu chưa. Truyền tham số theo kiểu Tham chiếu như ví dụ ngay trên đây, đó là việc truyền tham số dựa trên việc truyền địa chỉ của biến (không sao chép giá trị như code Java trên kia). x trước khi truyền vào trong phương thức process() mang giá trị 10, khi truyền vào trong process() chính là x bên ngoài, do đó khi chúng ta thay đổi giá trị x bên trong process()x bên ngoài cũng thay đổi theo.

Chúng ta mô hình hóa một chút nào.

Sơ đồ diễn tả việc truyền tham số kiểu tham chiếuSơ đồ diễn tả việc truyền tham số kiểu tham chiếu

Sơ đồ cho thấy x ở trên cùng mang giá trị 10, khi đưa vào trong process(), địa chỉ của x sẽ truyền vào, và như vậy chúng cùng chỉ đến chung một bộ nhớ. Do đó, việc thay đổi x từ giá trị 10 sang 7 bên trong process() cũng làm cho x bên ngoài thay đổi từ 10 sang 7 theo.

Chốt lại là bạn đã phân biệt giữa truyền tham số dạng Tham trị và truyền tham số dạng Tham chiếu chưa nào. Ơ nhưng bài viết chưa kết thúc? Phần tranh cãi trên mạng chính là phần sau này đây, mời bạn xem tiếp.

Vậy Nếu Tham Số Là Một Đối Tượng Thì Sao

Vâng, trên đây là các ví dụ liên quan đến truyền tham số là một giá trị nguyên thủy vào trong phương thức. Bạn thấy rõ rằng Java là một ngôn ngữ chỉ cho phép truyền tham số kiểu Tham trị. Tức là giá trị bên trong phương thức truyền vào chỉ là một bản sao của giá trị bên ngoài, việc thay đổi giá trị này bên trong phương thức Java không gây ảnh hưởng hay thay đổi giá trị của biến bên ngoài phương thức.

OK. Vậy mời bạn xem ví dụ sau. Trước hết chúng ta cần khai báo một lớp cái đã, mình giả sử có lớp MyCat, lớp bạn mèo này có một thuộc tính name để dễ phân biệt.

public class MyCat {
    private String name;
    
    public MyCat(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Trường Hợp 1

Ở trường hợp thử nghiệm này, chúng ta xem hai anh chàng main() và process() khi này sử dụng MyCat như thế nào.

public static void main(String[] args) {
    MyCat myCat = new MyCat("Kitty");

    System.out.println("Before call process: " + myCat.getName());
    process(myCat);
    System.out.println("After call process: " + myCat.getName());
}

public static void process(MyCat myCat) {
    myCat.setName("Doraemon");
}

Bạn có đoán được hai dòng in ra màn hình sẽ in tên của chú mèo nhà ta như thế nào không. Có phải cùng là “Kitty” không. Bạn có lý khi nghĩ là cùng in ra “Kitty”, vì như đã nói, Java chỉ hỗ trợ truyền tham số kiểu Tham trịmyCat bên trong process() không phải myCat bên ngoài. Vâng, mời bạn xem kết quả.

Before call process: Kitty
After call process: Doraemon

Ơ sao kỳ vậy. myCat đã thay đổi name bên trong process() được ư. Vậy sao gọi là Tham trị? Vâng, thắc mắc trên các diễn đàn hỏi đáp là đây. Khái niệm Tham trị của Java bị lung lay ư? Thực chất thì đến giờ phút này, mình vẫn khẳng định rằng Java vẫn chỉ hỗ trợ kiểu tham số là Tham trị thôi nhé.

Trường Hợp 2

Chúng ta cùng sửa lại code trên một chút để thử nghiệm một trường hợp khác xem sao.

public static void main(String[] args) {
        MyCat myCat = new MyCat("Kitty");

        System.out.println("Before call process: " + myCat.getName());
        process(myCat);
        System.out.println("After call process: " + myCat.getName());
    }

    public static void process(MyCat myCat) {
        myCat = new MyCat("Doraemon");
    }

Kết quả in ra console ngay đây.

Before call process: Kitty
After call process: Kitty

Uhm trường hợp này hơi rõ ràng rồi đấy. Với code ở trường hợp 2 trên đây đủ thấy rằng, myCat bên ngoài được khởi tạo với cái tên “Kitty”, sau khi truyền vào process(), dù cho có được khởi tạo lại với cái tên “Doraemon” nhưng thực chất chúng không phải là một, nên myCat bên trong không làm ảnh hưởng đến myCat bên ngoài. Vậy trường hợp này có thể khẳng định, đây đúng là truyền tham số kiểu Tham trị.

Dù vậy thì trường hợp 1 là gì, tại sao truyền tham số kiểu Tham trị mà có thể làm thay đổi giá trị của đối tượng truyền vào được.

Giải Thích Các Trường Hợp

Trước khi đi vào giải thích từng trường hợp. Chúng ta hãy quay lại việc khai báo biến kiểu đối tượng. Hãy nhìn lại dòng khai báo sau.

MyCat myCat = new MyCat(“Kitty”);

Nếu dùng sơ đồ trên để miêu tả. Thì chúng ta sẽ có một nơi trong bộ nhớ lưu trữ Giá trị của biến myCat đúng không nào. Và một Địa chỉ chỉ đến Giá trị này của biến. Ồ nhưng trong MyCat có chứa thuộc tính name, vậy lại phải có một Địa chỉ chỉ đến Giá trị của name nữa. Lòng vòng như vậy cho chúng ta thấy thực ra việc cấp phát và lưu trữ một đối tượng nó sẽ hơi khác với biến nguyên thủy một chút. Bạn xem.

Sơ đồ diễn tả việc khai báo đối tượng myCatSơ đồ diễn tả việc khai báo đối tượng myCat

Ô màu xanh dương chính là Địa chỉ của biến myCat, chỉ đến Giá trị của nó là ô màu đỏ. Ô màu đỏ sẽ lại chứa các Địa chỉ chỉ đến các thuộc tính của MyCat, trong trường hợp này chỉ có mỗi thuộc tính name.

Như vậy với trường hợp 1 trên đây. myCat được truyền vào trong process(), thực chất đúng là truyền kiểu Tham trị. Có nghĩa là giá trị của biến myCat được sao chép qua. Nhưng trớ trêu thay, giá trị của một đối tượng lúc bây giờ chính là địa chỉ đến các thành phần của đối tượng đó. Do đó việc sao chép địa chỉ lúc này cũng như sao chép chìa khóa mà thôi, nó vẫn dùng để mở cùng một tủ. Bạn xem minh họa cho trường hợp 1 như sau.

Sơ đồ diễn tả việc truyền tham số kiểu tham trị cho đối tượng myCatSơ đồ diễn tả việc truyền tham số kiểu tham trị cho đối tượng myCat

Cũng giống như sơ đồ truyền biến nguyên thủy trên kia. Giá trị của myCat khi này lại là cục màu đỏ, mà như chúng ta đã biết, việc sao chép cục màu đỏ cũng chính là sao chép lại địa chỉ tham chiếu đến thuộc tính name. Tuy myCat bên ngoài và bên trong khác nhau về địa chỉ, nhưng lại cùng giá trị chính là địa chỉ đến name. Chính vì vậy mà việc thay đổi name đối với myCat trong trường hợp 1 lại làm thay đổi cả name của myCat trước khi truyền vào process(). Nhưng như bạn thấy, Java khi này vẫn tuân thủ là truyền tham số kiểu Tham trị đấy nhé.

Trường hợp 2. Khi myCat truyền vào trong process(), việc sao chép giá trị (chính là địa chỉa của name) vào trong phương thức vẫn diễn ra. Nhưng vào đây, myCat được khởi tạo lại thành một đối tượng mới thông qua toán tử new, thế là giá trị mới cũng thay đổi theo (màu đỏ thay bằng màu tím), nên việc đặt tên cho myCat bên trong process() như thế nào trong trường hợp 2 này cũng không ảnh hưởng đến bên ngoài nhé.

Sơ đồ diễn tả việc truyền tham số kiểu tham trị cho đối tượng myCatSơ đồ diễn tả việc truyền tham số kiểu tham trị cho đối tượng myCat

Kết Luận

Trên đây là tất cả thông tin liên quan đến việc phân biệt cho khái niệm truyền tham số kiểu Tham chiếu hay Tham trị, và khẳng định rằng Java chỉ hỗ trợ việc truyền tham chiếu kiểu Tham trị mà thôi, mặc dù với việc truyền dữ liệu kiểu đối tượng có phần gây tranh cãi với nhiều người. Qua bài viết này bạn đã hiểu rõ về Java hơn rồi đúng không.

Bài viết gốc được đăng tải tại yellowcodebooks.com

Có thể bạn quan tâm:

Tìm việc làm IT mọi cấp độ tại TopDev

Deep Clone Objects trong Javascript – Giới thiệu một biện pháp cực mạnh

Deep Clone Objects trong Javascript – Giới thiệu một biện pháp cực mạnh

Bài viết được sự cho phép của tác giả Sơn Dương

Làm việc với Javascript nhiều rồi nhưng bạn đã bao giờ gặp trường hợp mà khi cần clone một object chưa? Có bao giờ bạn chỉnh sửa một object thì cả hai object đều bị thay đổi? Ví dụ một bài toán cụ thể là bạn tạo một object lưu cấu hình mặc định. Sau này, tùy từng chức năng mà cần sao chép cấu hình mặc định và chỉnh sửa nó. Lúc sau quay lại, object cấu hình mặc định cũng bị chỉnh sửa theo. Kì lạ!?

Đặt vấn đề khi copy một object trong Javascript

Để bạn dễ hình dung, mình ví dụ bằng đoạn code khi bạn thực hiện copy một object:

const defaultConfig = {
  debug: true,
  name: "Cấu hình mặc định",
  connectType: "Wifi",
}

const customConfig = defaultConfig;
customConfig["debug"] = false;
customConfig["name"] = "Cấu hình cho KH";

console.log(defaultConfig);

Kết quả:

deep-clone-object-javascript

Như vậy, mặc dù bạn không hề chỉnh sửa defaultConfig nhưng nó cũng bị biến đổi theo sau khi cập nhật customConfig.

Nguyên nhân của vấn đề trên nó liên quan tới kiểu dữ liệu tham chiếu và tham trị. Với Object nó là kiểu dữ liệu tham chiếu. Thức là các biến chỉ lưu trữ địa chỉ vùng nhớ của object mà thôi. Nên khi gán biến đó cho một biến khác thì bản chất là tạo ra hai biến cùng trỏ tới một vùng nhớ.

Do đó, deep clone một object là phương pháp tạo một vùng nhớ mới độc lập với vùng nhớ ban đầu.

  JavaScript Arrays và Objects thật ra không khác gì sách và báo

  7 khái niệm Javascript cơ bản không thể bỏ qua

Deep Clone Objects

Ok, sau khi hiểu vấn đề và bản chất rồi, chúng ta cùng nhau thử một số cách để deep clone một object trong javascript.

1. Sử dụng toán tử Spread

Spread là toán tử thực hiện “làm phẳng” một object. Do đó, sau khi “làm phẳng” bạn cần tạo mới một object thông qua cú pháp {}

const defaultConfig = {
  debug: true,
  name: "Cấu hình mặc định",
  connectType: "Wifi",
}

const customConfig = {...defaultConfig};
customConfig["debug"] = false;
customConfig["name"] = "Cấu hình cho KH";

console.log(defaultConfig);
// {debug: true, name: "Cấu hình mặc định", connectType: "Wifi"}

Nhược điểm của phương pháp này là chỉ có tác dụng với object không lồng nhau. Chứ Object mà nhiều level lồng nhau thì cũng “hết phép”.
Ví dụ:

const defaultConfig = {
  debug: true,
  name: "Cấu hình mặc định",
  connectType: "Wifi",
  data: {
    position: 1
  }
}

const customConfig = {...defaultConfig};
customConfig["debug"] = false;
customConfig["name"] = "Cấu hình cho KH";
customConfig["data"]["position"] = 2

console.log(defaultConfig);
// {debug: true, name: "Cấu hình mặc định", connectType: "Wifi", data: { postion: 2}}

Như vậy là không được rồi. Phải dùng biện pháp mạnh hơn (tham khảo phương pháp số 2 mà mình giới thiệu phía cuối bài viết nhé)

Việc làm JavaScript Hồ Chí Minh dành cho bạn!

2. Sử dụng Object.assign

Giải pháp này cũng tương tự với dùng toán tự Spread.

const defaultConfig = {
  debug: true,
  name: "Cấu hình mặc định",
  connectType: "Wifi",
}

const customConfig = Object.assign({}, defaultConfig);
console.log(defaultConfig);
// {debug: true, name: "Cấu hình mặc định", connectType: "Wifi"}

Điểm khác biệt duy nhất so với sử dụng toán tử Spread là hàm Object.assign() là khả năng hỗ trợ nhiều trình duyệt hơn.

Xem việc làm javascript đãi ngộ tốt trên TopDev

3. Biện pháp rất mạnh là sử dụng JSON

Nếu như hai giải pháp trên không đáp ứng được yêu cầu deep clone của bạn thì đây là liều thuốc cực mạnh, sẽ giải quyết được vấn đề của bạn.

Đó chính là sử dụng hàm JSON.parse() kết hợp với JSON.stringify().

const defaultConfig = {
  debug: true,
  name: "Cấu hình mặc định",
  connectType: "Wifi",
}

const customConfig = JSON.parse(JSON.stringify(defaultConfig));

Giải pháp này thoạt nhìn thì hơi buồn cười nhưng nó thực sự có võ đấy.

4. Tự viết hàm clone object

Nếu trường hợp bạn muốn tự làm chủ công nghệ deep clone Object, chúng ta có thể tự viết hàm create object. Bằng cách đệ quy để duyệt qua từng thuộc tính của object gốc và tạo ra object mới.

function cloneObject(obj) {
  var clone = {};
  for(var i in obj) {
      if(obj[i] != null && typeof(obj[i])=="object")
          clone[i] = cloneObject(obj[i]);
      else
          clone[i] = obj[i];
   }
   return clone;
}

// Cách sử dụng
const defaultConfig = {
  debug: true,
  name: "Cấu hình mặc định",
  connectType: "Wifi",
  data: {
    position: 1
  }
}

const customConfig = cloneObject(defaultConfig)
customConfig["debug"] = false;
customConfig["data"]["position"] = 2;
console.log(defaultConfig);
// {debug: true, name: "Cấu hình mặc định", connectType: "Wifi", data: {position: 1}}

Tạm kết

Trên đây là một số cách để bạn có thể deep Clone Objects trong Javascript. Mình hi vọng sẽ có ích cho dự án của bạn.

Bài viết gốc được đăng tải tại vntalking.com

Tìm việc làm IT mới nhất trên TopDev

Nghề lập trình viên có những ưu nhược điểm gì?

Nghề lập trình viên có những ưu nhược điểm gì?

Những năm gần đây, nghề lập trình viên đã trở thành một trong những nghề rất được săn đón. Với sự phát triển không ngừng của ngành công nghiệp này, lập trình viên trở thành một sự lựa chọn hấp dẫn cho nhiều người. Tuy nhiên, như bất kỳ nghề nào khác, lập trình viên cũng có những ưu điểm và nhược điểm riêng. Trong bài viết này, chúng ta sẽ cùng đi tìm câu trả lời cho câu hỏi nghề lập trình viên có những ưu nhược điểm gì?

Lập trình viên là gì?

Nghề lập trình viên có những ưu nhược điểm gì?

Lập trình viên là người sử dụng các ngôn ngữ lập trình để tạo ra các chương trình, ứng dụng, phần mềm cho các thiết bị điện tử như máy tính, điện thoại, máy tính bảng, v.v. Lập trình viên có thể làm việc cho các công ty công nghệ, doanh nghiệp, tổ chức hoặc làm freelancer.

Lập trình viên có thể chia thành nhiều loại khác nhau tùy theo ngôn ngữ lập trình, mục đích và phạm vi của chương trình mà họ tạo ra. Ví dụ:

  • Lập trình viên web: là người thiết kế và xây dựng các trang web, bao gồm cả giao diện và chức năng của web.
  • Lập trình viên ứng dụng: là người phát triển các ứng dụng cho các hệ điều hành khác nhau, như Windows, Android, iOS, v.v.
  • Lập trình viên phần mềm: là người tạo ra các phần mềm cho các mục đích khác nhau, như giáo dục, giải trí, kinh doanh, v.v.
  • Lập trình viên game: là người thiết kế và phát triển các trò chơi điện tử cho các nền tảng khác nhau, như PC, console, mobile, v.v.

  Những cái “khó” khi mới học lập trình

  Những thiệt thòi của một lập trình viên

Nghề lập trình viên có những ưu nhược điểm gì?

Ưu điểm

Thu nhập hấp dẫn

Nhu cầu về kỹ thuật viên và lập trình viên đang tăng lên, đặc biệt là trong bối cảnh của cuộc Cách mạng Công nghiệp 4.0. Do đó, nguồn cung cầu lao động của lập trình viên đang tăng lên, làm tăng giá trị của nghề nghiệp này.

Thêm nữa, lập trình viên có thể kiếm được một số tiền khá lớn nhờ vào kinh nghiệm và kỹ năng của mình. Nếu bạn có kỹ năng về các ngôn ngữ lập trình phổ biến như Java, Python, C++, hoặc Ruby on Rails, bạn có thể tìm được một số công việc lương cao. Bên cạnh đó, các lập trình viên có thể cải thiện thu nhập của mình bằng cách chuyển sang các lĩnh vực như quản lý dự án, giám sát, hoặc đào tạo lập trình viên mới.

Cơ hội nghề nghiệp rộng mở

Hiện nay, các công ty CNTT đang phát triển rất nhanh chóng và đa dạng với nhiều lĩnh vực, từ phát triển ứng dụng di động, trò chơi, trí tuệ nhân tạo, đến an ninh mạng, khoa học dữ liệu và điện toán đám mây. Điều này tạo ra cơ hội cho lập trình viên để phát triển và chuyển đổi sang các lĩnh vực khác nhau nếu họ muốn thay đổi công việc hoặc mở rộng kiến thức của mình.

Bên cạnh đó, lập trình viên có thể làm việc trong các lĩnh vực khác nhau như y tế, giáo dục, tài chính, thương mại điện tử và các ngành công nghiệp khác. Điều này mở ra nhiều cơ hội nghề nghiệp cho các lập trình viên và giúp họ khai thác tiềm năng của mình trong các lĩnh vực khác nhau.

Việc làm IT Fresher dành cho bạn

Môi trường làm việc linh hoạt

Lập trình viên thường làm việc trong ngành công nghệ thông tin, nơi mà các công ty thường có nhu cầu cao về sự sáng tạo và sự sẵn sàng đáp ứng với các thay đổi nhanh chóng trong thị trường. Vì vậy, môi trường làm việc của lập trình viên thường được thiết kế để tạo ra một sự linh hoạt và đa dạng trong các dự án và nhiệm vụ.

Một điểm đáng chú ý là các công ty công nghệ thường cho phép lập trình viên làm việc từ xa hoặc có thời gian làm việc linh hoạt. Điều này đặc biệt hữu ích đối với những lập trình viên có nhu cầu về thời gian và không muốn bị giới hạn bởi giờ làm việc cố định.

Công việc mang tính toàn cầu

Với sự phát triển của công nghệ thông tin, các công ty phần mềm và công nghệ thông tin đã trở nên phổ biến trên toàn thế giới. Những công ty này thường tìm kiếm các lập trình viên có kỹ năng và khả năng làm việc tốt trong môi trường toàn cầu.

Điều này có nghĩa là lập trình viên có thể làm việc cho các công ty và tổ chức trên toàn thế giới. Điều này mang lại cho lập trình viên nhiều cơ hội hơn để tìm kiếm các dự án và việc làm mới, tăng cơ hội cho sự phát triển nghề nghiệp và thu nhập.

Nhược điểm

Công nghệ thay đổi liên tục – Đòi hỏi sự nhạy bén

Nghề lập trình viên có những ưu nhược điểm gì?

Các công nghệ mới được phát triển và giới thiệu liên tục, điều này đòi hỏi lập trình viên phải cập nhật và học tập những công nghệ mới để giữ được sự cạnh tranh và đáp ứng yêu cầu của thị trường.

Với tốc độ phát triển nhanh chóng của công nghệ, việc học tập và cập nhật liên tục là một yêu cầu bắt buộc đối với lập trình viên. Tuy nhiên, nếu không đủ tư duy linh hoạt và không đủ nỗ lực học tập, lập trình viên có thể rơi vào tình trạng lạc hậu và khó tìm được việc làm trong thị trường lao động.

Lương cao đi đôi với áp lực

Lập trình viên thường phải đối mặt với các dự án có thời hạn ngắn, yêu cầu chính xác và tính chất phức tạp. Việc hoàn thành các dự án trong thời gian ngắn và đáp ứng yêu cầu của khách hàng có thể tạo ra áp lực rất lớn cho lập trình viên.

Thêm vào đó, lập trình viên thường phải làm việc với các bug, lỗi phát sinh trong quá trình phát triển sản phẩm. Việc tìm kiếm và sửa lỗi có thể mất rất nhiều thời gian và công sức, đồng thời làm tăng áp lực và đòi hỏi kỹ năng giải quyết vấn đề của lập trình viên.

Trong doanh nghiệp hoạt động nhiều dự án, lập trình viên có thể đối mặt với áp lực để đáp ứng các yêu cầu của nhiều dự án cùng lúc. Việc phải quản lý và phân chia thời gian giữa các dự án có thể làm giảm hiệu quả công việc, cũng như ảnh hưởng đến sự cân bằng giữa công việc và cuộc sống cá nhân.

Tiềm ẩn rủi ro về sức khỏe

Lập trình viên thường phải làm việc nhiều giờ liên tục trên máy tính, đồng thời thường phải ngồi ở vị trí cố định trong nhiều giờ mỗi ngày. Điều này có thể dẫn đến các vấn đề về sức khỏe như đau lưng, đau cổ, đau vai và bệnh lý về mắt như căng thẳng mắt, mỏi mắt, và khô mắt.

Thêm vào đó, việc làm việc nhiều giờ liên tục và áp lực công việc cũng có thể dẫn đến căng thẳng và stress, gây ra các vấn đề về sức khỏe tâm lý như lo âu, trầm cảm và rối loạn giấc ngủ.

  Cách tự học lập trình tốt nhất

Nhu cầu thị trường đối với nghề lập trình viên

Bạn có bao giờ tự hỏi nghề lập trình viên có phải là một nghề hot trong thời đại công nghệ số không? Câu trả lời là có. Theo báo cáo của World Economic Forum, nghề lập trình viên là một trong những nghề có tốc độ tăng trưởng cao nhất trong thập kỷ này. Nhu cầu thị trường đối với những người có kỹ năng lập trình đang ngày càng tăng, không chỉ ở các lĩnh vực liên quan đến công nghệ thông tin, mà còn ở nhiều ngành nghề khác nhau.

Nghề lập trình viên có những ưu nhược điểm gì?

Theo báo cáo của Topdev 2022, tổng số vị trí tuyển dụng thuộc ngành lập trình năm 2022 là 175.370 và sẽ tăng lên 229.345 trong năm 2023 (tăng 30,8%). Ngành lập trình có nhiều lĩnh vực khác nhau, như phát triển phần mềm, phát triển web, phát triển ứng dụng di động, phát triển trò chơi,… Mỗi lĩnh vực đều có những yêu cầu và kỹ năng riêng biệt, nhưng chung quy lại đều cần có khả năng sử dụng các ngôn ngữ lập trình, thiết kế giải pháp và triển khai các tính năng cho sản phẩm.

Tóm lại, nhu cầu thị trường đối với nghề lập trình viên đang tăng cao và có xu hướng tiếp tục tăng trong tương lai, đặc biệt là trong các lĩnh vực công nghệ mới và phát triển phần mềm.

Kết luận

Nghề lập trình viên không chỉ mang lại thu nhập cao và cơ hội nghề nghiệp linh hoạt, mà còn được đánh giá là một trong những nghề có nhu cầu tuyển dụng cao trên thị trường hiện nay. Tuy nhiên, như mọi nghề nghiệp khác, nghề lập trình viên cũng có những nhược điểm cần được cân nhắc trước khi lựa chọn. Hy vọng rằng qua bài viết này đã giúp bạn tìm được câu trả lời cho câu hỏi nghề lập trình viên có những ưu nhược điểm gì? Cùng đón chờ những bài viết mới trên TopDev bạn nhé!

Có thể bạn quan tâm:

Xem thêm việc làm IT hấp dẫn trên TopDev

Xử lý và làm việc với Cookies trong Selenium Webdriver

Xử lý và làm việc với Cookies trong Selenium Webdriver

Cookies – thành phần vừa nghe đến thì chợt có cảm giác quen thuộc nào đó vừa lướt qua, đảm bảo là ai cũng đã từng ít nhất nghe qua một lần. Thế nên, hôm nay mình sẽ nói về ‘chiếc bánh’ này, và một vài xử lý nó trong các kịch bản automation với Selenium thông qua một số method như add, get và delete cookies.

Kết quả hình ảnh cho cookies web

Cookies là gì?

Cookies là các tập tin được lưu trữ trên máy tính của bạn, nó bao gồm các thông tin của các trang web mà bạn truy cập. Cookies đươc sử dụng để duy trì thông tin trạng thái khi bạn truy cập vào các trang khác nhau trên một website, giúp bạn ghi nhớ các thông tin như đăng ký, đăng nhập, hoặc những thông tin mà bạn đã cung cấp khi truy cập trang web đó.

Cookies lưu trữ thông tin theo các cặp giá trị ‘key-value’. Những thông tin này sẽ được gửi tới trang web, các page tương ứng của trang web đó vào lần tiếp theo bạn truy cập.

  Session, Cookie, Storage đơn giản mà dễ hiểu

  Selenium Webdriver – Xử lý thao tác Drag-Drop

Tại sao cần xử lý Cookies trong automation?

Trong quá trình thực hiện automation, bạn có thể cân nhắc xử lý cookies nếu bạn có một số vấn đề như dưới đây nhé:

1. Trong kịch bản kiểm thử của chúng ta có các yêu cầu đặc biệt nào đó liên quan đến cookies mà cần phải automate, và yêu cầu cần phải validate các giá trị đầu vào của các file cookie.

2. Vì cookie lưu các thông tin đăng nhập của người dùng khi ta đăng nhập vào một website nào đó, do vậy ta có thể tạo và load các file cookies trong quá trình automation. Từ đó có thể bỏ qua một số kịch bản, hoặc một số bước đã được xử lý bởi cookies, giúp ta giảm thiểu thời gian trong việc execute các test case.

Ví dụ đơn giản như này cho dễ hình dung, như chức năng đăng nhập của Google, ta chỉ cần đăng nhập 1 lần, sau đó khi vào các ứng dụng khác của google thì vì cookie đã lưu thông tin của ta rồi, nên ta không cần phải thực hiện đăng nhập tiếp thể có thể truy cập các ứng dụng khác ấy nữa.

Thực ra những lý do trên cũng mang tính chủ quan đối với hai trường hợp điển hình có thể gặp thôi, bạn cũng có thể gặp trong một số trường hợp kiểm thử nào đó khác, những vấn đề mà bạn xác định cần phải xử lý các file cookies thì bạn cứ thế dùng thôi.

Một số method thường dùng với Cookies:

1. Get Cookies

Có hai cách giúp bạn thực hiện get Cookies như sau:

  • getCookieNamed(String cookieName) – Lấy ra một Cookies cụ thể theo name của cookies.
  • getCookies() – Lấy ra tất cả Cookies trong domain hiện tại.
//To fetch a Cookie by name
System.out.println(driver.manage().getCookieNamed(cookieName).getValue());

//To return all the cookies of the current domain
Set<Cookie> cookiesForCurrentURL = driver.manage().getCookies();
for (Cookie cookie : cookiesForCurrentURL) {
    System.out.println(" Cookie Name - " + cookie.getName() 
			+ " Cookie Value - "  + cookie.getValue()));
}

Tham khảo việc làm Java hấp dẫn trên TopDev

2. Add Cookies

  • addCookie(Cookie cookie) – Được sử dụng để add một Cookies cụ thể nào đó vào trong các cookies.
Cookie cookie = new Cookie("cookieName", "cookieValue");
driver.manage().addCookie(cookie);

3. Delete cookies

Với trường hợp xóa cookies, ta có ba cách như dưới đây:

  • deleteCookieNamed(String cookieName) – Xóa một cookie cụ thể nào đó dựa theo name của cookie.
  • deleteCookie(Cookie cookie) – Xóa một cookie ra khỏi cookie jar của trình duyệt, method này sẽ bỏ qua domain của cookie đó.
  • deleteAllCookies() – Method này dùng để xóa tất cả cookies trong domain hiện tại.
//Delete a particular Cookie by name
driver.manage().deleteCookieNamed(cookieName);

//Delete a particular Cookie
driver.manage().deleteCookie(cookie);

//Delete all the Cookies
driver.manage().deleteAllCookies();

Đối với từng yêu cầu trong các trường hợp kịch bản kiểm thử cụ thể bạn có thể sử dụng các method tương ứng. Ngoài ra, các bạn có thể tham khảo các link dưới đây để tìm hiểu chi tiết và cụ thể hơn các ví dụ trong đó nhé, bao gồm cả code tham khảo đó.

Bài viết này nội dung hơn ngắn chút, nhưng mà cũng vi vọng là nó sẽ giúp ích trong việc nắm vững được khung kiến thức cơ bản liên quan đến cookie này. Vì thực tế thì mình mới dùng đến các trường hợp delele cookie thôi ah.

À dưới đây là code super basic của mình để run thử, các bạn có thể tham khảo thêm cũng được ạ:

import java.io.IOException;
import java.util.Set;
import org.openqa.selenium.Cookie;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;

public class Cookies {
       public static void main(String[] args) throws IOException {

            System.setProperty("webdriver.gecko.driver", "E:\\Program\\Firefox\\geckodriver.exe");
            FirefoxOptions options = new FirefoxOptions();
            options.setBinary("C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe");
            FirefoxDriver driver = new FirefoxDriver(options);
            driver.get("http://flipkart.com/");
            // we should pass name and value for cookie as parameters
            // In this example we are passing, name=mycookie and value=123456789123          
            Cookie name = new Cookie("mycookie", "123456789123");
            //Add cookie
            driver.manage().addCookie(name);
            // After adding the cookie we will check that by displaying all the cookies.
            Set<Cookie> cookiesList = driver.manage().getCookies();
            for (Cookie getcookies : cookiesList) {
                 System.out.println(getcookies);
             }                             
             /*
              //To delete cookie with cookieName = "__utmb"
              driver.manage().deleteCookieNamed("__utmb");
              //To delete all cookies
               driver.manage().deleteAllCookies();
                */                          
             }
}

Bài viết gốc được đăng tải tại vananhtooo.wordpress.com

Có thể bạn quan tâm:

Xem thêm Việc làm IT hấp dẫn trên TopDev

Debug trong Android Studio – Đây là kỹ năng cần phải giỏi

debug-trong-android-studio-day-la-ky-nang-can-phai-gioi

Bài viết được sự cho phép của tác giả Sơn Dương

Sau khi bạn đã hoàn thành việc cài đặt máy ảo Android và biết cách kết nối điện thoại tới PC. Hãy khoan nghĩ tới việc bắt tay vào lập trình luôn. Cũng như các ngôn ngữ lập trình khác, hay bất kể ai lập trình cũng đều phải biết cách debug. Debug ứng dụng là một kỹ năng rất quan trọng cho mọi lập trình viên. Đó là lý do mình trình bày về cách debug trong android studio trước khi bắt tay vào học code ứng dụng.

Nội dung bài viết gồm có:

  • Hướng dẫn sử dụng Android Studio Debugger
  • Tìm hiểu Breakpoit là gì và cách sử dụng nó để debug trong Android Studio
  • Và một số thủ thuật “đắt giá” khi debug trong Android Studio

Chúng ta bắt đầu nhé

#1. Cách sử dụng công cụ Android Studio Debugger

Công cụ Android Studio Debugger cho phép ta theo dõi ứng dụng theo thời gian thực. Ngoài ra nó còn cung cấp thêm thông tin về thiết bị đã kết nối hoặc máy ảo mà bạn đang sử dụng.

Để minh họa quá  trình sử dụng công cụ này để debug chương trình. Mình sẽ minh họa bằng đoạn code sau:

public class RestaurantsActivity extends AppCompatActivity {
    @Bind(R.id.locationTextView) TextView mLocationTextView;
    @Bind(R.id.listView) ListView mListView;

    private String[] restaurants = new String[] {"Sweet Hereafter", "Cricket", "Hawthorne Fish House", "Viking Soul Food",
            "Red Square", "Horse Brass", "Dick's Kitchen", "Taco Bell", "Me Kha Noodle Bar",
            "La Bonita Taqueria", "Smokehouse Tavern", "Pembiche", "Kay's Bar", "Gnarly Grey", "Slappy Cakes", "Mi Mero Mole" };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_restaurants);
        ButterKnife.bind(this);

        ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, restaurants);
        mListView.setAdapter(adapter);

        mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                String restaurant = ((TextView)view).getText().toString();
                Toast.makeText(RestaurantsActivity.this, restaurant, Toast.LENGTH_LONG).show();
            }
        });

        Intent intent = getIntent();
        String location = intent.getStringExtra("location");

        mLocationTextView.setText("Here are all the restaurants near: " + location);
    }
}

  Tổng Hợp Các Tip Khi Sử Dụng Android Studio

  Android Studio: Phần mềm hỗ trợ lập trình ứng dụng Android

#2. Breakpoint là gì? Cách đặt Breakpoint khi debug trong Android Studio

Khi ứng dụng chạy, với tốc độ của máy tính thì các dòng code sẽ được thực thi rất nhanh, cứ vèo vèo như gió vậy. Vậy làm sao để tạm dừng chương trình tại một dòng code nào đó để kiểm tra xem các tham số đầu vào đã chuẩn chưa? Kết quả trả về thế nào? Đó là lúc chúng ta cần đến Breakpoint. Breakpoint là một thuật ngữ lập trình có nghĩa là vị trí ở dòng code nào mà ta muốn chương trình khi sẽ dừng tại đó.

Chúng ta có thể chèn thêm một breakpoint (hoặc nhiều breakpoint tùy ý muốn) ở vị trí nào mà chúng ta muốn chương trình khi chạy đến đấy thì dừng lại. Có nhiều cách để thêm breakpoint.

Đây là một cách:

Click vào vị trí mà bạn muốn thêm breakpoint. Sau đó chọn Run > Toggle Line Breakpoint

Debug trong Android Studio

Một vòng tròn màu đỏ sẽ xuất hiện trực tiếp ngay bên trái của dòng code này. Vùng vòng tròn màu đỏ này nằm trong người ta gọi là gutter:

debug trong android studio

Để xóa điểm breakpoint, chúng ta có thể chọn dòng tương tự, sau đó chọn Run > Toggle Line Breakpoint một lần nữa để tắt nó đi. Hoặc đơn giản là click đúp vào vòng tròn đỏ.

Cách sử dụng Breakpoints

Sau đó, chúng ta có thể chạy debug bằng cách chọn icon “Debug” ở trên thanh công cụ. Việc này sẽ chạy ứng dụng ở chế độ debug lên thiết bị hay máy ảo

đặt breakpoint trong android studio

Một khi ứng dụng chạy, bạn mở đến màn hình ứng dụng mà dòng code được đặt breakpoint trước đó có thể được gọi. Nếu dòng code đó được thực hiện, ứng dụng sẽ dừng lại và màn hình console debuger sẽ xuất hiện.

Khi ứng dụng dừng lại tại breakpoint, để có thể kiểm tra giá trị của các biến thì chúng ta có một cách. Cách đơn giản là di chuột qua các biến để thấy các giá trị hiện tại của nó:

Debug ứng dụng trong Android Studio

Nếu chúng ta click vào biểu tượng “+” ở bên trái của cửa sổ màu vàng xuất hiện khi chúng ta di chuột qua một biến, chúng ta có thể xem thêm chi tiết hơn:

Debug ứng dụng trong Android Studio

Tìm việc làm Android lương cao trên TopDev!

Cách điều hướng các dòng code khi debug

Khi debug thì không chỉ đơn giản là kiểm tra giá trị tại dòng code mà bạn đặt breakpoint. Bạn còn phải kiểm tra xem luồng code có chạy đúng ý của mình không? Đây là lúc chúng ta cần đến kỹ năng sử dụng điều hướng.

Bạn nhìn thấy cửa sổ Debugger phía dưới chứ? Cửa sổ này sẽ hiện khi ứng dụng dừng tại breakpoint. Trình gỡ lỗi debugger chứa nhiều nút để tương tác với code. Dưới đây là 10 nút mà bạn sẽ thường sử dụng nhất:

Debug ứng dụng trong Android Studio

Chúng ta sẽ lần lượt tìm hiểu tác dụng của từng nút nhé

­­1. Nút hiển thị Breakpoint đang active
Bạn có thể đặt rất nhiều breakpoint trong ứng dụng. Và đôi lúc mải đọc code mà quên không biết mình đang debug dòng nào. Nút này có tác dụng đặt con trỏ trở lại vào vị trí mà bạn đang debug lỗi. (ví dụ: nếu bạn chèn một breakpoint vào một nơi nào đó, nhìn xung quanh một số file khác, bạn có thể nhấn vào nút này để trở lại breakpoint ban đầu của bạn).

2. Step Over
Nút này sẽ giúp debug nhảy xuống dòng code tiếp theo

3. Step Into
Nút này sẽ nhảy vào bên trong hàm

4. Force Step Into
Nút này sẽ cho phép nhảy thẳng đến dòng đầu tiên bên trong của hàm được gọi

5. Thoát ra ngoài
Cái này thì dễ hiểu rùi, đơn giản là nhảy ra khỏi hàm đang debug.

6. Tiếp tục chương trình(Resume Program)
Nút này sẽ tiếp tục chạy ứng dụng một cách bình thường. Tạm thời bỏ qua debug

7. Tạm dừng chương trình(Pause Program)
Nút này sẽ được greyed-out trước tiên bởi vì chương trình đã sẳn sàng tạm dừng. Nếu bạn chọn tiếp tục chương trình, bạn sẽ tạm dừng nó lại với tùy chọn này.

8. Dừng ứng dụng (Stop App)
Nút này sẽ làm ứng dụng đang chạy trên thiết bị hoặc máy ảo dừng lại hoàn toàn. Hiểu nôm na là tắt ứng dụng và không debug nữa.

9. Xem các Breakpoints
Nút này sẽ mở một cửa sổ hiển thị các tất cả breakpoint đã được chèn. Ngoài ra, nó cho phép bạn tinh chỉnh cài đặt cho từng breakpoint riêng biệt.

Ví dụ bạn chọn Remove once hit để tự động xóa breakpoint này đi khi bạn dừng chương trình.
Hay Log message to console tức là sẽ “bắn” một message trong logcat khi mà breakpoint này được active.

Nhiều lắm, các bạn tự khám phá các option khác nhé

Debug ứng dụng trong Android Studio

10. Mute Breakpoint
Tùy chọn này giúp bạn có thể bật – tắt tạm thời tất cả các breakpoint.

Tóm lại, Android Studio Debugger là một công cụ hết sức hữu hiệu. Bạn hãy thử trải nghiệm với việc sử dụng debugger trong các project mà bạn đang thực hành, debug ngay cả khi không gặp lỗi. Bằng cách này, bạn sẽ hiểu rất rõ về luồng code của dự án mà mình đang phát triển.

#3. Một số thủ thuật Debug nâng cao

Attach Debugger  – Công dụng không ngờ

Có lẽ thời gian mình phải debug ứng dụng chắc có ngót nghét 5 năm. Thời gian đầu, mình cũng được các bạn trên mạng hướng dẫn debug là dùng nút hình con bọ xanh, và chỉ biết vậy thôi. Đến một ngày đẹp trời, mình quyết định thử click vào nút nhỏ trên thanh điều hướng, có tên là Attach Debugger.

Thật tuyệt vời! Công cụ này cho phép debug ứng dụng đang chạy hiện tại – mà không phải cài đặt lại. Điều này tiết kiệm được rất nhiều thời gian khi mà thời gian build gradle ngày càng chậm. Có thể nhiều bạn đã biết đến nút này, nhưng mình tin là ít người sử dụng.

Attach Debugger

Đặt Breakpoint có điều kiện

Khi bạn debug một vòng lặp và vì lý do nào đó bạn muốn kiểm tra vòng lặp thứ 6 chẳng hạn. Có lẽ phần lớn các bạn sẽ đặt một điểm breakpoint vào trong vòng lặp ấy và sau đó bạn tự nhấn phím F8 đúng 5 lần để đi đến nơi mà bạn muốn.

Với các breakpoint có điều kiện, bạn chỉ cần đưa điều kiện vào breakpoint và Android Studio chỉ dừng khi điều kiện là đúng. Để làm được như vậy, bạn làm như sau:

  1. Click chuột phải vào breakpoint và điền vào điều kiện.
  2. Tiến hành Debug lỗi như bạn thường làm và thật kinh ngạc. Android Studio chỉ dừng lại chỉ khi điều kiện được đáp ứng.

Ví dụ như hình vẽ

debug-ung-dung-trong-android-studio

Click chuột phải vào breakpoint và đặt điều kiện cho breakpoint

debug-ung-dung-trong-android-studio-11

và đây là kết quả

Exception Breakpoints – Tự động tìm dòng code bị exception

Chức năng này cực kì hữu ích khi bạn không biết ứng dụng đang bị lỗi ở đâu, và chưa có ý tưởng gì về việc phải đặt breakpoint chỗ nào. Thay vì thử đặt các breakpoint khắp nơi để dò xét. Bạn có thể yêu cầu IDE tạm dừng bất kể khi nào mà một exception có thể hiện  ra.

Đây là cách thực hiện: Run > View Breakpoints hoặc cmd + shift + F8 để hiển thị cửa sổ Breakpoint

  1. Nhấn + sau đó chọn Java Exception Breakpoint.

debug-ung-dung-trong-android-studio-13

Chọn/tìm kiếm một exception mà bạn nghi ngờ.

debug-ung-dung-trong-android-studio-14

debug-ung-dung-trong-android-studio-15

Chỉ định bất kì tùy chọn nào nếu bạn muốn và đảm bảo rằng các điểm breakpoint này trong trang thái được cho phép.

debug-ung-dung-trong-android-studio-17

debug-ung-dung-trong-android-studio-18

debug-ung-dung-trong-android-studio-19

Như vậy là mình đã chia sẻ toàn bộ những kiến thức cơ bản và có đôi chút nâng cao để hướng dẫn debug trong Android Studio cho bạn. Về cơ bản là chúng ta đã được trang bị đầy đủ công cụ để có thể chiến được Android rồi. Tiếp tục trong khoá học tự học lập trình Android, bài viết sau chúng ta sẽ tìm hiểu về Activity, thành phần quan trọng nhất của ứng dụng android. Các bạn đón đọc nhé!

Bài viết gốc được đăng tải tại vntalking.com

Xem thêm:

Xem thêm Việc làm IT lương cao hấp dẫn trên TopDev

Kỹ năng quan trọng cần có của một automation tester

Kỹ năng quan trọng cần có của một automation tester

Từ hồi mới bắt đầu đi làm, vị trí của mình là manual tester, ngày đấy cũng chỉ biết chút chút khái niệm về manual test với automation test. Nhưng cũng chẳng hiểu rõ nó như thế nào, chỉ ngộ nhận là automation test thì nó dùng tool thế thôi.

Hai trong những automation tools mà mình biết lúc đó là HP Quick test pro, và Selenium. Mà với cả hai tool ấy thì cũng chỉ biết đến mỗi nhóm tính năng record – play back thôi xong rồi cứ nghĩ là nó có đến vậy.

Thế rồi, sau gần hai năm làm manual, trăn trở nhiều về công việc hiện tại, và nghĩ rằng nếu 10 năm sau mà cũng làm như thế này thì sẽ ra sao? Nếu không thì sẽ dẫn đến đâu, mình sẽ làm gì? Đúng lúc ấy thì tình cờ nhờ có một anh chàng đẹp zai, anh ấy đã gửi cho mình một link có thông tin về một lớp học Selenium basic để tham khảo và cân nhắc việc tham gia thử xem sao. Từ ngày đấy đến giờ ấy thế mà cũng đã hơn một năm rồi.

Từ một manual tester chính thống, mình nghĩ đến việc sẽ làm quen thử với automation test, và đã bắt đầu với lớp học basic ấy.

automation tester

Sau khi được giới thiệu và học một vài buổi làm quen ban đầu với automation, mình nghĩ rằng, các kỹ năng của một automation tester cần có chắc chắn phải bao gồm những yếu tố dưới đây:

  • Phải cao siêu về các Web element như XPATH và CSS
  • Phải biết và làm đươc JUNIT cho các script giống code unit test mà đội dev thường làm đó
  • Về các hệ quản trị cơ sở dữ liệu các câu lệnh truy vấn
  • Biết lập trình, các kỹ năng về lập trình
  • Sử dụng được một vài ngôn ngữ lập trình nào đó
  • Nắm được một vài automation framework
  • Hiểu biết về Page – object – model

automation tester

Nhưng trong cả tá những thứ đó, thì kỹ năng nào là quan trọng nhất?!

Bây giờ cũng không hẳn là đã có nhiều kinh nghiêm làm về automation nhưng mình vẫn nghĩ là bản thân vẫn cần phải có các kiến thức, kỹ năng trên, không cần quá cao siêu nhưng ít nhất phải nắm được những thứ cơ bản của từng cái, hiểu được bản chất của nó.

Và Theo mình, cái quan trong hơn cả chính là kỹ năng lập trình. Còn những cái khác sẽ là những điều kiện đủ để bổ trợ cho mình trong quá trình làm việc mà thôi.

  Các thành phần cơ bản trong một automation project

Tại sao kỹ năng lập trình lại là điều quan trọng nhất?

  • Automation test là viết các script để run các scenario tương tác với ứng dụng. Ngoài việc để cho nó có thể chạy được, bạn còn phải làm để có thể bảo trì nâng cấp một cách dễ dàng nhất, thích ứng với sự thay đổi của những lần release, sao cho code của bạn phải sửa ít nhất.
  • Có kỹ năng lập trình tốt bạn có thể giải quyết vấn đề liên quan đến technical một cách tối ưu hơn, hiệu năng code tối ưu hơn.
  • Project automation của bạn cũng cần phải có tổ chức một cách khoa học, áp dụng các kỹ thuật giống như việc đội dev đã xây dựng lên sản phẩm đó. Ngoại trừ mục đích của hai người khác nhau: một bên xây dựng sản phẩm, một bên là kiểm tra sản phẩm hoạt động đúng yêu cầu hay chưa mà thôi.
  • Có kỹ năng lập trình tốt giúp bạn tiếp cận và ứng dụng các automation framework tốt hơn, hiệu quả hơn.
  • Với kỹ năng lập trình tốt bạn có thể tiếp thu các công nghệ mới một cách nhanh chóng, có thể xác định và đưa vào áp dụng một cách dễ dàng cho project mà không phải gặp quá nhiều khó khăn.
  • Có kỹ năng lập trình và tư duy lập trình tốt bạn sẽ không bị ảnh hưởng và quá phụ thuộc vào một ngôn ngữ lập trình nào đó. Tuy nhiên, thì mình cũng nên lựa chọn một ngôn ngữ lập trình và đầu tư thời gian để phát triển sâu hơn, chứ đừng tham mà học nhiều nhưng lại chẳng chuyên sâu về cái gì cả. Ngôn ngữ lập trình có thể thay đổi, nhưng tư duy nền tảng của nó thì cũng gần như tương đương nhau, nên cũng không cần quá lo lắng.

Kỹ năng lập trình chính là yếu tố cốt lõi để bạn có thể xây dựng và giải quyết các bài toán trong atuomation project một cách hiệu quả.

JavaSelenium là cặp đôi được sử dụng rất phổ biến hiện nay, rất nhiều các tài liệu, diễn đàn hay các cuốn sách hướng dẫn đang sử dụng.

Để luyện tập và phát triển kỹ năng lập trình, hãy bắt đầu từ những script đơn giản trong và nâng cao dần độ khó, lặp lại nhiều nhiều và nhiều lần. Hoặc thực hành với một project nho nhỏ, bạn sẽ gặp được nhiều vấn đề hơn, đòi hỏi bạn phải giải quyết chúng, làm nhiều rồi đến khi bạn sẽ tích lũy được nhiều kinh nghiệm giải quyết các vấn đề.

Xem thêm nhiều việc làm Tester lương cao trên TopDev

automation tester

Sẽ có những lúc bạn sẽ gặp phải những vấn đề rất rối rem, bạn chẳng biết làm thế nào, lúc đó phải thật kiên trì và bình tĩnh, đào bới google và tìm đến sự giúp đỡ của một anh code nào đó, kiểu gì cũng phải xong. Đến lúc làm được rồi, mặc dù chỉ nhỏ thôi nhưng chắc chắn bạn sẽ biết được một cảm giác vô cùng phiêu!!!

  Automation testing: Một số công cụ hữu ích cho tester

Vì bản thân mình, cũng đã từng trải qua cảm giác như vậy cũng khá nhiều lần rồi. Cho đến lúc xong, nhiều lần mình còn tự trách dễ như thế mà làm ko ra được, hay tại sao lúc đấy mình lại làm như vậy được nhỉ?

Từ những lần ấy, bản thân bạn sẽ cảm thấy như được tiếp thêm động lực để cố gắng hơn nữa, làm nhiều hơn nữa. Không chỉ để test mà còn để tạo ra những thứ giúp bạn giảm các công việc tay chân của mình đi nữa cơ.

Hi vọng rằng đây cũng sẽ là động lực để bản thân mình khi gặp khó khăn có thể mạnh mẽ vượt qua. Hay có bạn nào mà muốn từ manual nhảy qua có thể xác định được tư tưởng để rồi phấn đấu.

automation tester

Bài viết dựa theo quan điểm cá nhân và ngẫu hứng, nếu có gì góp ý các bạn có thể để lại comment cho mình ở phía dưới nhé!

Bài viết gốc được đăng tải tại vananhtooo.wordpress.com

Có thể bạn quan tâm:

Đừng bỏ lỡ Việc làm Developer hấp dẫn trên TopDev

7 khái niệm Javascript cơ bản không thể bỏ qua

7 khái niệm Javascript cơ bản không thể bỏ qua

Bài viết được sự cho phép của tác giả Sơn Dương

Những khái niệm Javascript cơ bản cần phải biết

1. Promises

Nhắc đến Javascript là nhắc đến khái niệm lập trình bất đồng bộ. Vậy phải làm sao để ứng dụng chạy đúng luồng mà bạn mong muốn? Khái niệm Callback ra đời.

Tuy nhiên, khi bạn sử dụng callback một cách vô tội vạ sẽ dẫn đến callback hell. Đây là một bad smell cực kì tệ, làm bộ source code trở nên khó đọc, khó bảo trì và dễ phát sinh bug.

Để giải quyết vấn đề callback hell, người ta lại nghĩ ra Promises.

Promise là một cơ chế đặc biệt trong JavaScript giúp bạn thực hiện các tác vụ bất đồng bộ mà không bị callback hell hay pyramid of doom.

Promises là trung tâm của thế giới lập trình bất đồng bộ Javascript. Hiểu được cách thức hoạt động và sử dụng nó một cách chính xác là điều cần thiết để xây dựng các ứng dụng javascript cơ bản hiện đại.

Mình sẽ lấy một ví dụ về Callback hell:

api.getUser('pikalong', function(err, user) {
  if (err) throw err
  api.getPostsOfUser(user, function(err, posts) {
    if (err) throw err
    api.getCommentsOfPosts(posts, function(err, comments) {
      // vân vân và mây mây...
    })
  })
})

Và sử dụng Promise để xử callback hell như sau:

api.getUser('pikalong')
  .then(user => api.getPostsOfUser(user))
  .then(posts => api.getCommentsOfPosts(posts))
  .catch(err => { throw err })

Bạn thấy code đẹp trai hơn chưa!

Xem việc làm javascript đãi ngộ tốt trên TopDev

2. Async/Await

Mặc dù viết code sử dụng promises giúp mã nguồn trở nên trong sáng hơn rất nhiều. Tuy nhiên, nếu không cẩn thận thì vẫn có thể lại bị promises hell. “Tránh vỏ dưa lại gặp vỏ dừa”.

Ngoài ra, nếu bạn đã quen với ngôn ngữ lập trình tuần tự như PHP, Java… thì việc tiếp cận với Javascript sẽ trở thành cực hình.

Vì vậy, Async/Await ra đời. Từ khóa Async/Await giúp mã nguồn Javascript chạy tuần tự từ trên xuống dưới. Nhờ đó, bạn có thể viết mã không đồng bộ theo cách đồng bộ.

Đây là một ví dụ về Async/Await:

async function() {
  try {
    const user = await api.getUser('pikalong')
    const posts = await api.getPostsOfUser(user)
    const comments = await api.getCommentsOfPosts(posts)

    console.log(comments)
  } catch (err) {
    console.log(err)
  }
}

Cần lưu ý là kết quả trả về của async function luôn là một Promise.

Hiện tại thì cả Promise và Async/Await đều được hỗ trợ bởi tất cả các trình duyệt hiện đại (trừ IE11). Còn phía server (Nodejs), cả Promise và Async/Await đều được hỗ trợ bởi Nodejs phiên bản mới nhất.

  Xử lý bất đồng bộ với Promise.all trong JavaScript

  Tất tần tật về ASYNC/AWAIT trong JavaScript

3. Fetch

Để tạo một request từ client lên server lấy dữ liệu. Bạn có nhiều cách, sử dụng Ajax chẳng hạn. Ngoài ra, bạn cũng có thể sử dụng fetch().

Một ứng dụng hiện đại, có lẽ không thể thiếu phần kết nối tới server. Do đó, fetch() được sử dụng rất nhiều.

Fetch API là một API đơn giản cho việc gửi và nhận requesst bằng js. Fetch() giống với XMLHttpRequest, nhưng điểm hiện đại hơn là fetch() trả về một Promise.

Vì vậy, bạn có thể sử dụng fetch() kết hợp với Async/Await hay Promise để code được “sạch sẽ” hơn.

Để dễ hình dung, mình lấy một ví dụ đơn giản như sau:

async function getRedditJSON () {
  const response = await fetch('https://www.reddit.com/.json')

  return response.json()
}

getRedditJSON().then((data) => {
  console.log(data)
})

Việc làm JavaScript Hồ Chí Minh dành cho bạn!

4. Classes & Objects

Nếu trước kia, nhắc đến Javascript mà lại muốn viết hướng đối tượng thì thật buồn cười. Nhưng giờ thì đã khác. Rất nhiều framework javascript ra đời dựa trên component như ReactJs, VueJs… Đặc biệt, sự có mặt của TypeScript đã mang các khái niệm Interface, static type checking lên Javascript.

Với TypeScript, giờ bạn có thể viết code clean hơn, ứng dụng triết lý SOLID vào mã nguồn. Nếu bạn tò mò về cách ứng dụng triết lý SOLID trên Javscript thì đọc thêm bài viết này: SOLID trong Node.js

Chính vì điều này mà bạn cần phải hiểu và nắm vững các khái niệm về Classes/Objects giống như các ngôn ngữ Java.

import React from 'react';

export interface SampleComponentProps {
  firstword: string,
  secondword: string
}

export interface SampleComponentState {
  phrase: string
}

class SampleComponent extends 
React.Component<SampleComponentProps, SampleComponentState> {
  readonly state: SampleComponentState = {
    phrase: ''
  }

  constructor(props: SampleComponentProps) {
    super(props)
    this.state = {
      phrase: `${props.firstword} ${props.secondword}`
    }
  }

  render () {
    const { phrase } = this.state
    return (
      <div>
        <p>{phrase}</p>
      </div>
    )
  }
}

export default SampleComponent;

Qua ví dụ trên, bạn biết được về Component, Classes, Objects, Contructors, và TypeScript interface.

5. Import/export

Như mình đã nói ở trên, ngày nay càng nhiều Javascript Framework ra đời và phổ biến dựa trên component. Điển hình là ReactJS của facebook, VueJS…

Và để sử dụng component trong dự án, bạn sẽ phải sử dụng Import/Export rất nhiều. Mặc dù, hai khái niệm này rất dễ. Nhưng cũng đừng chủ quan mà học lướt qua. Nếu bạn sử dụng đúng cách Impor/Export có thể cải thiện đáng kể hiệu xuất và kích thước ứng dụng.

6. Hiểu đúng từ khóa “This”

Khi bạn học lập trình ứng dụng web, bạn sẽ hiểu tầm quan trọng của lập trình bất đồng bộ.

Trong thế giới bất đồng bộ, context của mã thực thi bị thay đổi liên tục. Là developer, bạn sẽ dễ dàng hiểu hơn mã nguồn bất đồng bộ khi hiểu rõ cách thức từ khóa “this” hoạt động thế nào.

Bạn đã hiểu rõ về cách thức hoạt động của từ khóa “This” chưa? Nếu chưa thì mình khuyên bạn nên đọc những bài viết sau:

 7. Events & Event Listeners

Đặc thù của ứng dụng web đó là luôn lắng nghe và phản hồi những tương tác của người dùng. Có rất nhiều cách để xử lý vấn đề này, trong đó kiểu thiết kế hướng sự kiện ra đời để xử lý event data và responsive action.

Ví dụ, mô hình MVC với 2-way databinding đã tồn tại trong thời gian dài. Với kiểu thiết kế này, Model sẽ được update cùng với View thông qua controller. Khi Model thay đổi thì toàn bộ View cũng sẽ thay đổi theo và ngược lại.

Với cách thiết kế này thì thực sự giúp bạn dễ dàng viết code thiết kế giao diện. Tuy nhiên, nhược điểm là khó debug khi giao diện phức tạp.

Triết lý hướng sự kiện ra đời để giải quyết điều đó. Với triết lý này, các thành phần trong View sẽ chỉ cập nhật khi xuất hiện action, và chỉ cập nhật bản thân nó mà không cập nhật toàn View.

Sẽ thật khập khiễng, khi bạn học về Javascript mà lại không biết về Event, Event Listeners. Khi tìm hiểu về Javascript cơ bản bạn sẽ thấy nhan nhản về Event. Kiểu như thế này:

var myEl = document.getElementById('myelement');

myEl.addEventListener('click', function() {
    alert('Hello world');
}, false);

myEl.addEventListener('click', function() {
    alert('Hello world again!!!');
}, false);

#Tạm kết

Trên đây là những khái niệm Javascript cơ bản cực kì quan trọng. Vì vậy, mình khuyên chân thành bạn nên bỏ nhiều thời gian hơn chút để hiểu kỹ những khái niệm này.

Javascript là ngôn ngữ khó học nhưng đã biết thì cực thích.

Tương lai của javascript đang rất rộng mở, nên mình hi vọng các bạn sẽ thích ngôn ngữ này.

Bài viết gốc được đăng tải tại vntalking.com

Xem thêm:

Tìm việc làm IT mới nhất trên TopDev

[Update] Điểm tên TOP 5 công nghệ mới đang HOT trong năm 2024

Điểm tên TOP 5 công nghệ mới đang HOT trong năm 2023

Công nghệ mới liên tục ra mắt đòi hỏi người kĩ sư phần mềm (Software Engineer) cần chú ý cập nhật các nội dung mới để tránh bị lạc hậu.

Cập nhật kiến thức mới về các tech trend cũng giúp kỹ sư phần mềm và các vị trí khác có cái nhìn rộng hơn về tương lai. Bổ sung kiến thức phù hợp cũng là điều cần thiết khi có các trend công nghệ mới, hoặc cập nhật cho các công nghệ cốt lõi.

Bài viết này trình bày 5 công nghệ mới cần chú ý năm 2023.

1. Trí tuệ nhân tạo (AI) và Machine Learning

Machine Learningtrí tuệ nhân tạo thường bị nhầm lẫn với nhau. Nhưng học máy là một thành phần con của Trí tuệ nhân tạo (AI). Mặc dù AI cách đây vài năm có thể xem là khoa học viễn tưởng với nhiều người, nhưng riêng trong năm 2022 và đầu năm 2023 đã đánh dấu những phát triển vượt bậc của AI (trí tuệ nhân tạo).

Việc phát triển nhanh và bền vững của AI đánh dấu bằng việc AI không chỉ đem vào ứng dụng trong HiTech, mà nó đã dần lấn sân qua cả FinTech.

tech trend

AI đang được các doanh nghiệp đầu tư phát triển khi họ nhận thấy tiềm năng to lớn của AI, khi AI đem vào sử dụng tại doanh nghiệp, nó hỗ trợ đưa ra các dự đoán. Lập kế hoạch hoặc phân tích lượng dữ liệu khổng lồ mà doanh nghiệp đang có.

Riêng đối với lĩnh vực phát triển phần mềm, các task ở cấp thấp (low-level) sẽ dần dần được thay thế bởi AI. Lập trình viên cũng như các nhà phát triển phần mềm có thể dành nhiều thời gian hơn để tập trung vào các công việc đem lại lợi ích lớn hơn cho toàn dự án.

  [Update] 5 xu hướng dẫn dắt “làn sóng” công nghệ trong năm 2024

  IoV (Internet of vehicle) là gì? Kiến trúc IoV

2. Low code và no code

Với Low code và no code, năm 2022 đánh dấu sự phát triển mạnh mẽ của Low code. Các platform cho phép người dùng kéo thả để tạo ra các tính năng. Các component có độ phức tạp cao được xây dựng sẵn.

Cùng với sự phát triển đa dạng và nhanh chóng của low code, giờ đây bạn không cần phải hiểu quá sâu về kĩ thuật, cũng không cần phải để ý chi tiết. Chỉ cần hiểu và nắm chắc business mà bạn muốn xây dựng là gì? Low code và no code platform sẽ xử lý phần công việc còn lại.

tech trend

Ngoài ra, thời gian phát triển dự án phần mềm càng ngày càng ngắn còn thúc đẩy một bộ phận không nhỏ các kỹ sư phần mềm tìm tới low-code. Nhanh chóng dựng nên phần thô hoặc tính năng đơn giản cho ứng dụng hoặc dự án.

Năm 2022 tuy là năm phát triển của Low code nhưng cũng là năm mà low code bộc lộ nhiều các điểm yếu, nhưng chúng cũng đang được cải thiện nhanh chóng. Việc low code và no code phát triển mở ra một kỷ nguyên mới, nơi mà người bình thường cũng có thể dễ dàng tiếp cận công nghệ.

3. DevSecOps

Công nghệ mới thứ 3 được điểm danh là DevSecOps. Nếu bạn chịu khó để ý tin tức hoặc theo dõi tin tức thường xuyên. Hẳn là bạn biết mức độ thiệt hại nếu các cuộc tấn công mạng nhắm tới doanh nghiệp và chính phủ.

Bảo mật, an toàn là yếu tố đầu tiên cần quan tâm ngay khi phát triển dự án phần mềm. DevSecOps là phương pháp phát triển phần mềm mới đem bảo mật vào mọi giai đoạn của phát triển phần mềm.

Ngoài ra, việc phát triển nhanh và mạnh của khoa học dữ liệu cũng đòi hỏi việc đảm bảo an toàn cho lượng dữ liệu lớn đã thu thập được. DevSecOps sẽ trực tiếp can dự vào quá trình phát triển phần mềm. Bắt buộc đem toàn bộ tính năng an toàn vào trong từng giai đoạn phát triển.

Tham khảo việc làm JavaScript HOT trên TopDev

4. Cloud-Native Software Architecture

Kiến trúc phần mềm dựa trên cloud cũng như các dịch vụ ở trên cloud đã quá quen thuộc với nhiều người. Không những khách hàng cá nhân, các khách hàng doanh nghiệp cũng thực hiện chuyển đổi và di chuyển phần lớn hạ tầng lên cloud.

Kiến trúc phần mềm dựa trên Cloud là bước đi cần thiết khi thực hiện số hoá cho doanh nghiệp. Amazon, Google và Microsoft đã và đang cung cấp các giải pháp cloud, giá thành thì càng ngày càng trở nên hợp lý.

tech trend

Việc sử dụng tài nguyên cũng trở nên hợp lý hơn bao giờ hết. Thay vì phải cung cấp dư thừa như trước đây, với các dịch vụ từ Cloud, doanh nghiệp chỉ phải trả tiền cho những gì họ sử dụng. Không nhiều hơn mà cũng chẳng ít hơn.

Chính vì vậy, năm 2024 vẫn được dự đoán là một năm phát triển vượt bậc của Cloud Software Architecture.

5. Microservices

Năm 2023 và cuối năm 2022 vẫn là khoảng thời gian mà microservices phát triển cực nhanh. Giờ đây, microservices đã là khái niệm phổ biến thường xuyên được nhắc tới khi xây dựng kiến trúc cho dự án phần mềm.

Với ưu điểm là tính năng riêng việc, xử lý công việc riêng biệt, khả năng scale up của microservices giờ đây được tận dụng triệt để. Số lượng user truy cập + tương tác ngày càng nhiều, việc mở rộng và scale up giờ đây đã là vấn đề nghiêm túc cần các doanh nghiệp xem xét khi phát triển dự án phần mềm.

tech trend

Năm 2023 là năm dự đoán microservices sẽ tiếp tục phát triển, len lỏi sâu hơn vào các ưng dụng hoặc hệ thống phần mềm.

6. Tham khảo thêm về công nghệ mới năm 2023

Cảm ơn anh em đã đọc bài – Thank you for your attension – Happy coding!

Tác giả: Kiên Nguyễn

Xem thêm:

Xem thêm tuyển dụng CNTT hấp dẫn trên TopDev

‘Chiếc ghế khách hàng’ trên hành trình chuyển đổi của Techcombank

Mục tiêu quan trọng nhất mà Techcombank hướng đến trong những năm tới không phải là các chỉ số tài chính, mà là việc phục vụ được nhiều nhất và mở rộng số lượng khách hàng thân thiết sử dụng Techcombank là ngân hàng giao dịch chính. “Muốn thành công dài hạn và phát triển bền vững, điều Techcombank luôn chú trọng là lấy khách hàng làm trọng tâm.”

Gần 3 thập kỷ có mặt trên thị trường, từ một ngân hàng với vốn điều lệ chỉ 20 tỷ đồng vào năm 1993, đến nay, Techcombank đã là một trong những ngân hàng tư nhân lớn nhất và hoạt động hiệu quả nhất hệ thống ngân hàng Việt Nam. Nhà băng này đặt mục tiêu tới năm 2025 vốn hóa thị trường sẽ đạt 20 tỷ USD, lợi nhuận 2 tỷ USD, nhưng quan trọng hơn là tạo dựng được nhiều giá trị và trở thành động lực tích cực thay đổi đời sống tài chính của doanh nghiệp, cũng như người dân Việt Nam.

Với CEO của Techcombank, những doanh nghiệp tên tuổi trên thế giới như Apple, Amazon hay Spotify chỉ thành công khi lấy khách hàng làm trọng tâm. Họ luôn nỗ lực mang lại trải nghiệm đơn giản nhất, và tiện lợi nhất đến cho khách hàng thông qua ứng dụng công nghệ mới. “Ví dụ, mỗi cuộc họp quan trọng của ban lãnh đạo ở Amazon đều có một chiếc ghế đặt ở giữa được gắn tên “Khách hàng” để nhắc nhở về “trọng tâm” thảo luận. Bất kể người trình bày, thay thuyết trình có nhìn hướng nào thì “chiếc ghế khách hàng” vẫn trong luồng mắt trung tâm của họ”, vị CEO người Đức chia sẻ.

Điều này được thực hiện tương tự tại Techcombank. Theo CEO Jens Lottner, mỗi khi ngân hàng cho ra mắt một ứng dụng, hoặc sản phẩm mới, đội dự án được yêu cầu phải mời trực tiếp khách hàng đến sử dụng thử nghiệm, và cho ý kiến. Đội ngũ thiết kế phải ngồi cùng với khách hàng nhiều lần, để xem họ có hài lòng với tính năng mới không, việc sử dụng có dễ dàng hay không. Từ đó, họ phải đưa ra những điều chỉnh thiết kế phù hợp, thậm chí cấu trúc lại cả hành trình khách hàng. “Chiếc ghế khách hàng” ở Techcombank không còn là một chỗ ngồi trống, mà có gương mặt, cá tính và tiếng nói quyền lực trong mọi quyết định của chúng tôi”, vị CEO Techcombank nói.

Chúng tôi muốn “chiếc ghế khách hàng” luôn phải nằm trong mọi suy nghĩ của mỗi cán bộ nhân viên, hay nói cách khác phải “ám ảnh” họ và hiện diện trong mọi việc họ làm. Cùng với đó, mọi bộ phận trên toàn hàng đều được yêu cầu phải áp dụng đo lường chỉ số mức độ hài lòng và sự sẵn sàng giới thiệu dịch vụ của khách hàng (NPS), và đưa vào hoạt động văn hóa tổ chức của toàn ngân hàng.

Một trong những nhiệm vụ quan trọng mà Techcombank đang thực hiện đó là xây dựng giao diện trên nền tảng số thông minh, để mang đến trải nghiệm tiện lợi và đơn giản nhất có thể đối với các khách hàng. Mô tả một cách đơn giản nhất, Techcombank mong muốn mang đến các tính năng và ứng dụng ngân hàng đơn giản, tiện ích và thú vị như “tải một bài hát trên Spotify”.

“Spotify có thể đưa ra lời gợi ý về bài hát theo đúng gu âm nhạc của người dùng chỉ trong vòng vài tích tắc. Hay Amazon cũng có thể gợi ý về các sản phẩm, nhà cung cấp cho người dùng dựa trên thói quen mua hàng, hoặc thói quen tìm kiếm của khách hàng. Câu hỏi đặt ra ở đây là làm thế nào để Techcombank có thể làm những điều tương tự, và chúng tôi cần làm gì khi khách hàng thay đổi hành vi tiêu dùng và kỳ vọng về sản phẩm, dịch vụ?“, ông lý giải.

Ví dụ điển hình là các tính năng trên ứng dụng ngân hàng điện tử Techcombank Mobile, mới ra mắt đầu năm 2022, được xây dựng dựa trên ý kiến đóng góp từ 4.000 khách hàng của Techcombank. Hiện tại cứ 2 tuần/lần, Techcombank liên tục cập nhật thêm những tính năng mới trên ứng dụng Techcombank Mobile dành cho khách hàng cá nhân. Tổ dự án cũng được yêu cầu kiểm thử liên tục với sản phẩm để giảm thiểu cao nhất rủi ro gian lận, hay mạo danh. Song ông Jens cho rằng điều đó chưa đủ.

“Chúng tôi phải xác định xem những năng lực, hay tính năng nào có thể cho ra mắt trên nền tảng ứng dụng mới để cải thiện giao diện và giúp khách hàng giao dịch thuận tiện. Tiếp đó, chúng tôi cần lắng nghe từ phía khách hàng thông qua các kênh tương tác, xem họ đánh giá ra sao, có nhu cầu như thế nào khi sử dụng ứng dụng. Từ đó, ngân hàng sẽ tiếp tục có những thay đổi phù hợp nhằm đảm bảo trải nghiệm khách hàng xuyên suốt nhất có thể” – ông Jens Lottner nói.

Theo CEO Jens Lottner, mục tiêu xuyên suốt của Techcombank là nâng tầm giá trị và mang lại ý nghĩa nhiều hơn cho đời sống tài chính của người dân và doanh nghiệp Việt Nam. Để hiện thực mục tiêu ấy, ngân hàng hướng tới mở rộng thị phần khách hàng và tiếp cận nhiều khách hàng nhiều hơn. Trên hành trình đó, công nghệ và dữ liệu số hóa sẽ đóng vai trò quan trọng. “Rõ ràng khi số lượng và dữ liệu khách hàng tăng lên, thì mức độ hoạt động hay lưu lượng hoạt động trên các ứng dụng số hóa của chúng tôi cũng phải tăng tốc phù hợp” – ông nói.

Vị CEO này chia sẻ, với số lượng khách hàng hiện hơn 10 triệu người, và tăng trưởng khoảng hơn một triệu người mỗi năm, áp lực về chuyển đổi cách thức vận hành cũng tỷ lệ thuận, nhằm đảm bảo trải nghiệm khách hàng trên nền tảng số, cũng như tại các chi nhánh. Muốn làm được điều đó, đòi hỏi ngân hàng phải đẩy mạnh hơn nữa năng lực phân tích dữ liệu và am hiểu khách hàng tốt hơn. Đó là mục tiêu của Techcombank trong nhiều năm tới chứ không phải chỉ là trong hành trình 5 năm hiện tại.

CASA của Techcombank đã vượt mức 50% vào cuối năm 2021, là ngân hàng dẫn đầu thị trường, cũng là hiện tượng đầu tiên và duy nhất tại Việt Nam cho đến thời điểm này có CASA chiếm hơn một nửa tổng huy động tiền gửi. Cuối tháng 9/2022, CASA tại Techcombank giảm nhẹ cuống 46.5%, song vẫn giữ vững vị thế đứng đầu.

“Chúng tôi am hiểu khách hàng và nhận diện được nguyên nhân khiến cho CASA giảm nhẹ do nhu cầu đầu tư cũng như dòng tiền của các nhóm khách hàng thay đổi, bên cạnh tác động của room tín dụng hạn chế khiến khách hàng phải rút tiền. Từ đây, ngân hàng đã có các giải pháp để thúc đẩy chỉ số này tăng trở lại, như đầu tư nhiều hơn về nền tảng công nghệ để hỗ trợ khách hàng quản lý gia sản tốt hơn, qua đó thu hút thêm nguồn CASA. Tỷ lệ tiền gửi không kỳ hạn trong tổng nguồn vốn huy động có thể giảm ở thời điểm này, nhưng khi thị trường ổn định hơn thì tình hình sẽ khả quan hơn và Techcombank tự tin giữ vị trí số 1 về CASA trên thị trường” – ông Jens nói.

Theo CEO Techcombank, đạt được CASA cao đồng nghĩa với việc Techcombank sẽ trở thành một trong những ngân hàng giao dịch chính của khách hàng ở hầu khắp các vùng miền tại Việt Nam. Thêm vào đó, CASA cao còn giúp ngân hàng có nguồn vốn rẻ dồi dào, giúp thuận tiện hơn cho đầu tư. Song quan trọng hơn tất cả, Techcombank muốn hướng đến mục tiêu trở thành ngân hàng đóng góp nhiều giá trị nhất cho đời sống tài chính của các doanh nghiệp, cũng như người dân Việt Nam.

Techcombank sẽ tiếp tục đầu tư mạnh mẽ hơn cho nền tảng công nghệ và dữ liệu, bởi khi hướng tới các chỉ số tài chính như trên, ngân hàng sẽ phải chuyển đổi mô hình kinh doanh nhanh hơn để có thể áp dụng mô hình hoạt động mới, dựa trên am hiểu và dự đoán tốt nhất và đúng nhất nhu cầu khách hàng.

Tổng Giám đốc Techcombank cho biết, ngân hàng hiện đã thực hiện 20% trong tổng số 500 triệu USD kế hoạch đầu tư cho giai đoạn 5 năm 2021 – 2025. Sắp tới, ngân hàng sẽ tiếp tục đầu tư mạnh hơn, trong đó chú trọng tới phát triển cơ sở dữ liệu và trải nghiệm khách hàng. “Chúng tôi vẫn muốn tốc độ chuyển đổi số tại Techombank phải nhanh hơn để có thể cung cấp tốt nhất các sản phẩm, dịch vụ phù hợp với nhu cầu của khách hàng”, ông nói.

Techcombank đang là ngân hàng hàng đầu Việt Nam, chỉ đứng sau Vietcombank về quy mô lợi nhuận. Ngân hàng đặt mục tiêu lợi nhuận cho năm 2022 ở mức 27 nghìn tỷ đồng, tức khoảng 1,2 tỷ USD. Trước thời điểm hiện tại, Techcombank đã có gần một thập kỷ tăng trưởng liên tục, và ngân hàng đang hướng tới con số tỷ USD, tương đương 47 nghìn tỷ đồng vào năm 2025.

Tuy nhiên, ông Jens Lottner cho biết ngân hàng rất tự tin với các mục tiêu trên. Thậm chí ông nói vui: “Hội đồng quản trị của Techcombank chỉ cho phép chúng tôi rút ngắn thời gian về đích, hoặc tăng thêm các chỉ số tài chính chứ không có chiều ngược lại“. Techcombank lạc quan vốn hóa 20 tỷ USD sẽ đạt được, và vị CEO tin rằng ngân hàng sẽ hoàn thành mục tiêu ấy sớm hơn 1 năm so với thời hạn, tức là vào năm 2024.

Không chủ quan trước những biến động của thị trường tài chính hiện nay, song theo CEO của Techcombank, mọi chỉ số phát triển vẫn đang rất “ổn”.

Thứ nhất, là góc nhìn của nhà đầu tư về môi trường Việt Nam. Hiện nay, Việt Nam là điểm sáng trong bức tranh kinh tế thế giới. Chẳng hạn, nhiều nước có tỷ lệ lạm phát 2 chữ số nhưng ở Việt Nam được kiểm soát ở mức chỉ 3%, trong lúc GDP tăng trưởng ấn tượng ở 7%. Nguồn vốn FDI đến Việt Nam cũng ngày càng nhiều hơn. Các công ty định hạng tín nhiệm quốc tế uy tín đều nâng mức xếp hạng tín nhiệm quốc gia của Việt Nam. “Mặc dù có những thách thức, nhưng xét một cách tương đối, chúng tôi chắc chắn tình hình của Việt Nam tích cực hơn nhiều các quốc gia trong khu vực và trên thế giới” – ông Jens Lottner nhấn mạnh.

Khi nền kinh tế Việt Nam ổn định, theo CEO của Techcombank, ngành tài chính ngân hàng tất yếu cũng ổn định. Vài năm qua ngành tài chính ngân hàng có lợi nhuận khá tốt và phát triển lành mạnh nhờ chính sách điều hành ổn định, nên dù năm nay có thể giảm đôi chút, nhưng so với khu vực thì vẫn rất tốt.

KẾT QUẢ NỔI BẬT 9 THÁNG ĐẦU 2022

• Lợi nhuận trước thuế đạt 20,8 nghìn tỷ đồng, hiện đứng đầu khối ngân hàng tư nhân. Tổng thu nhập hoạt động tăng 16,9% so với cùng kỳ, đạt 31,5 nghìn tỷ đồng

• Tỷ lệ tiền gửi không kỳ hạn (CASA) và tỷ suất lợi nhuận trên tổng tài sản (ROA) cao, tiếp tục ở vị thế đầu ngành, đạt 46,5% và 3,6%

• Tỷ lệ an toàn vốn (CAR) theo Basel II đạt 15,7%, tăng 68% so với cùng kỳ

• Quý 3/2022, Techcombank thu hút thêm hơn 300.000 khách hàng mới, nâng tổng số khách hàng lên 10,4 triệu

• Tổ chức xếp hạng tín nhiệm quốc tế Moody’s đánh giá Techcombank là ngân hàng có mức độ uy tín cao nhất trong số các Ngân hàng tại Việt Nam, với các điểm mạnh nổi bật về vốn và khả năng sinh lời.

• Techcombank được tạp chí tài chính danh tiếng Global Finance trao giải “Ngân hàng số tốt nhất cho khách hàng” tại Việt Nam. Đến nay, Techcombank là ngân hàng đầu tiên và duy nhất tại Việt Nam được Global Finance vinh danh giải thưởng uy tín này.

• Techcombank dành nguồn lực lớn cho các hoạt động CSR. Khoảng 11,8 nghìn tỷ dư nợ đã được Ngân hàng tái cơ cấu cho khách hàng kể từ khi đại dịch covid bắt đầu, đồng thời, hỗ trợ khách hàng thông qua giảm lãi suất là 540 tỷ đồng trong năm 2021. Ngân hàng cũng dành đến 400 tỷ đồng cho các hoạt động phòng chống covid năm 2021, bao gồm ủng hộ quỹ vắc-xin, đóng góp xây dựng bệnh viện điều trị COVID-19 và trang thiết bị y tế, cũng như hỗ trợ trực tiếp tới các bệnh nhân và gia đình của họ.

 

Thuộc dự án Inside GemTechnology do TopDev hợp tác cùng Techcombank triển khai, chuỗi nội dung thuần “Tech” độc quyền được chia sẻ bởi đội ngũ chuyên gia Công nghệ & Dữ liệu tại Techcombank sẽ được cập nhật liên tục tại chuyên mục Tech Blog | Techcombank Careers x TopDev. Cùng theo dõi & gặp gỡ các chuyên gia bạn nhé!

 

Các cơ hội việc làm tại Techcombank

Techcombank: Đích đến của ngân hàng số là thấu hiểu cảm xúc người dùng

Ở thời đại thói quen thanh toán đang dịch chuyển dần sang xu hướng không dùng tiền mặt, hãy thử hình dung 1 ngày chi tiêu của một người trẻ để thấy chỉ cần một chiếc điện thoại thông minh sử dụng các app thanh toán thì mọi giao dịch mua bán chỉ mất vài giây.

Từ việc gọi một chiếc xe công nghệ để đi làm, đặt đồ ăn, thức uống, mua sắm các sản phẩm tiêu dùng như: sách, đồ tiêu dùng, quần áo, mỹ phẩm; mua vé máy bay, đi xem phim, đi ăn nhà hàng hay mua sắm ở cửa hàng tiện lợi, đến gửi tiết kiệm, đầu tư, vay mua trả góp,… người dùng đều có thể thực hiện qua app ngân hàng, ví điện tử…

Với thế hệ mà smartphone trở thành vật bất ly thân, đặc biệt đối với những người trẻ, ưa chuộng trải nghiệm công nghệ, xu hướng tài chính không tiền mặt đang ngày càng phát triển mạnh mẽ. Theo số liệu thống kê từ Ngân hàng Nhà nước tính đến tháng 4/2022, giao dịch thanh toán không dùng tiền mặt tăng 69,7% về số lượng, 27,5% về giá trị; giao dịch qua internet cũng tăng tương ứng 48,39% và 32,76%; qua điện thoại di động tăng tương ứng 97,65% và 86,68%; qua mã QR tăng tương ứng 56,52% và 111,62% so cùng kỳ năm 2021.

Cùng với sự dịch chuyển của người dùng, nhiều phương thức thanh toán số đã ra đời và được đón nhận như: thẻ chip, QR Code, ứng dụng mobile banking… Trong cuộc đua thanh toán số, các ngân hàng thậm chí đã tích hợp nhiều phương thức thanh toán trên 1 app để thỏa mãn mọi nhu cầu thanh toán tiêu dùng của khách hàng.

Ứng dụng Techcombank Mobile của Ngân hàng kỹ thương Việt Nam (Techcombank) là một ví dụ điển hình cho khả năng gói gọn mọi nhu cầu tài chính trên một app điện thoại. Với Techcombank Mobile, người dùng có thể rút tiền từ ATM không cần thẻ, thanh toán, quét và chuyển khoản qua mã QR cá nhân chỉ trong vòng 30 giây, thanh toán các hóa đơn dễ dàng với tính năng tự động (autobill)… Tất tần tật tiền vào, tiền ra đều có thể xử lý qua app với vài thao tác vừa nhanh, vừa tiện, lại vừa dễ dàng quản lý chi tiêu.

Không chỉ thanh toán, Techcombank Mobile còn là một công cụ giúp người dùng quản lý tài chính cá nhân hiệu quả. Hệ thống có biểu đồ thu chi hiển thị dòng tiền vào ra giúp người dùng thống kê tình hình chi tiêu trong tháng và gợi ý tiết kiệm với số tiền phù hợp đồng thời hỗ trợ lên kế hoạch tích lũy phù hợp với tình hình tài chính. App còn gợi ý và giúp người dùng làm quen với các sản phẩm đầu tư như: Tiết kiệm, trái phiếu, chứng chỉ quỹ,… và chủ động theo dõi hiệu quả đầu tư. Đây là vòng tròn giải pháp khép kín nhằm giúp người dùng quản lý hiệu quả dòng tiền và nâng cao sức khỏe tài chính.

Cá nhân hóa đến mức tối đa là cách Techcombank gia tăng điểm chạm cảm xúc với người dùng. Nếu đã từng ấn tượng với câu hỏi của mạng xã hội Facebook: Hôm nay, bạn cảm thấy thế nào? Thì ắt hẳn khi mở app Techcombank Mobile, người dùng sẽ chạm ngay vào sự ấm áp với câu chào được cá nhân hóa: “Chào (buổi) + tên đăng ký của bạn”.

Với người Việt, lời chào cao hơn mâm cỗ nên “cú chạm” cảm xúc đầu tiên của app khiến người dùng cảm thấy như gặp lại một người thân quen. Chưa dừng lại ở đó, giao diện của app Techcombank Mobile còn cho phép người dùng có thể thay đổi hình nền.

Điều đặc biệt, Techcombank đã mang đến những thiết kế đậm chất riêng khi 100% màn hình nền được chính đội ngũ thiết kế của ngân hàng lên ý tưởng và vẽ, lấy cảm hứng từ những nét văn hóa truyền thống, những lễ hội đặc trưng, những công trình, danh lam nổi tiếng của Việt Nam. Các giao diện này còn được cập nhật theo mùa giúp người dùng có thể thường xuyên thay đổi hình nền theo tâm trạng, sở thích.

Ngoài ra, khách hàng cũng được tùy thích lựa chọn từ 2-6 số cuối của tài khoản trong dãy số có độ dài 10, 12, 14 số. Đây là một tính năng khiến người dùng cảm thấy dễ chịu vì được lựa chọn những con số dễ nhớ, gần gũi với bản thân như số ngày sinh, ngày kỷ niệm, những con số may mắn của bản thân.

Không chỉ chăm chút cho những thiết kế cá nhân hóa trên Techcombank Mobile, ở dòng thẻ thanh toán quốc tế Techcombank Visa Platinum cũng được Techcombank “biến hóa” lên đến 10 mẫu để giúp người dùng có thể thoải mái thể hiện phong cách, cá tính theo sở thích. Khách hàng có thể tùy chọn mẫu thẻ phù hợp sở thích ngay trên app. Bên cạnh việc đầu tư lớn cho thiết kế giao diện thẻ mà còn tạo ra nhiều giá trị ưu đãi để gia tăng những trải nghiệm cho người dùng khi sở hữu thẻ thanh toán quốc tế của ngân hàng.

Với dòng thẻ đa phong cách này, Techcombank kèm theo hàng loạt ưu đãi: hoàn toàn miễn phí mở thẻ và giao tận nhà. Người dùng thoải mái giao dịch với phí 0 đồng hoàn 1% không giới hạn cho khách hàng chi tiêu trên 5 triệu/tháng; với khách hàng là thành viên Aspire sẽ được hoàn 1,5% khi chi tiêu từ 15 triệu đồng và 2% cho mức chi 35 triệu đồng trở lên.

Tạo sự khác biệt ở những chi tiết nhỏ, Techcombank cho thấy khả năng thấu hiểu sở thích, thói quen người dùng và nỗ lực để tạo những điểm chạm cảm xúc tinh tế.

 

Chuyển đổi số là trong lĩnh vực ngân hàng đang diễn ra một cách mạnh mẽ. Đây là cuộc đua gay cấn của các nhà băng để thu hút sự chú ý của khách hàng. Với vai trò tiên phong dẫn dắt chuyển đổi số của ngành, Techcombank luôn đi đầu trong việc tạo ra những trải nghiệm thú vị, tiện lợi cho người dùng. Tuy nhiên, Techcombank đã chọn một hướng đi riêng trong hành trình chuyển đổi số: đó là câu chuyện thấu hiểu người dùng dựa trên dữ liệu và khoa học hành vi từ đó tạo ra  hệ sinh thái sản phẩm của ngân hàng được xây dựng trên tiêu chí lấy “khách hàng là trung tâm”.

Để tạo ra một thao tác đơn giản, tiện lợi cho người dùng trên không gian số là sự đầu tư, tính toán phức tạp của một đội ngũ, là một quá trình vừa xây giải pháp, vừa lấy ý kiến khách hàng để chỉnh sửa nhằm đem đến những trải nghiệm tốt nhất. Chẳng hạn, chỉ trong khoảng 3 giây, thông qua hệ thống định danh điện tử (eKYC), thẻ tín dụng của khách hàng có thể được phê duyệt, phát hành.

Đằng sau những cái nhất đó là một sự đầu tư “khủng” về con người, công nghệ. Techcombank đã dành 500 triệu USD cho chuyển đổi số hóa đến 2025. Chỉ tính riêng năm 2021, Techcombank đã tuyển 3.000 nhân viên, 700 người trong số đó làm về công nghệ, dữ liệu, phát triển bảo mật vận hành…

Nói về khả năng bảo mật của ngân hàng, ông Pranav Seth chia sẻ: “Điều thú vị trong lĩnh vực này, chúng ta đang làm việc với tiền của khách hàng. Chúng tôi quan tâm đến cách mà khách hàng cảm thấy dù họ đang gửi tiền cho ai, người đó đã nhận được tiền và hoàn thành. Những điều nhỏ nhặt đó rất quan trọng. Để đảm bảo mọi thứ đơn giản, anh phải củng cố nó bằng công nghệ phức tạp. Chúng tôi sử dụng một trong những tiêu chuẩn bảo mật tốt nhất thế giới của FIDO Security Alliance, sử dụng tất cả những tiêu chuẩn để tạo ra một môi trường hoàn toàn không mật khẩu, những thuật toán khác nhau để bảo vệ ứng dụng trên điện thoại của bạn.”

“Chúng tôi trân trọng cách mà họ cảm thấy” là câu trả lời của ông Pranav Seth, người đang dẫn dắt hành trình chuyển đổi số của Techcombank về nguyên tắc cốt lõi để ngân hàng không ngừng cải tiến những sản phẩm số để tạo nên những trải nghiệm tuyệt vời cho người dùng.

Gói gọn sản phẩm trên 1 app và trân trọng cảm xúc, trải nghiệm của người dùng, Techcombank đã khiến cho trải nghiệm ngân hàng số của khách hàng trở nên thú vị hơn. Bởi người dùng cảm nhận được chất riêng biệt, cá nhân, được nâng niu cảm xúc trong một thế giới tưởng chừng chỉ được đo lường bằng những tính từ lý tính: an toàn, tiện lợi, dễ dàng. Techcombank đã chọn một con đường khó khăn hơn nhưng thú vị hơn khi “thổi” vào đó những tính từ thiên về cảm xúc: hài lòng, thích thú, thú vị, tự hào…

Đó là cảm giác hài lòng khi chạm vào một ứng dụng chạy mượt, nhanh chóng; là cảm giác thú vị khi được tùy biến ứng dụng theo sở thích cá nhân, sở hữu dãy số mang đậm dấu ấn riêng; cảm giác tự hào khi hành trình tích lũy của mình đã tạo ra kết quả… Đây là những điểm chạm không thể đo đếm bằng những con số nhưng nó có sức mạnh vô hình rất lớn để một thương hiệu ngày càng in đậm vào tâm trí người dùng.

Một nhà cung cấp dịch vụ sẽ không bao giờ biết được khi nào họ sẽ chạm được đến cảm xúc, lòng tin của khách hàng. Những giải pháp mang đến sự an toàn, tiện lợi, dễ dàng là chuyện đương nhiên có thể ngân hàng số nào cũng có, chỉ riêng những trải nghiệm cảm xúc đặc biệt như niềm vui, sự tự hào, hài lòng… được đính kèm trong mỗi trải nghiệm số thì chỉ những người thật sự thấu hiểu, trân trọng cảm xúc và sẵn lòng dốc sức thì mới có thể tạo ra được.

Thuộc dự án Inside GemTechnology do TopDev hợp tác cùng Techcombank triển khai, chuỗi nội dung thuần “Tech” độc quyền được chia sẻ bởi đội ngũ chuyên gia Công nghệ & Dữ liệu tại Techcombank sẽ được cập nhật liên tục tại chuyên mục Tech Blog | Techcombank Careers x TopDev. Cùng theo dõi & gặp gỡ các chuyên gia bạn nhé!

 

Các cơ hội việc làm tại Techcombank

Security Engineer

Quận Cầu Giấy, Hà Nội - Quận 1, Hồ Chí Minh

Ngân Hàng

“Con người là nhân tố quyết định để chuyển đổi số thành công”

Đó là khẳng định của ông Nguyễn Anh Tuấn – Giám đốc Khối Công nghệ (CIO), Ngân hàng Techcombank tại Tọa đàm AWS Summit ASEAN 2022 diễn ra tại Singapore vào ngày 17-18/5 vừa qua…

Con người là nhân tố quyết định để chuyển đổi số thành công.
Con người là nhân tố quyết định để chuyển đổi số thành công.

Theo ông Anh Tuấn, Techcombank đầu tư đến 500 triệu USD cho công nghệ giai đoạn 2021- 2025, trong đó tập trung vào việc dịch chuyển và hiện đại hóa các ứng dụng hiện có trên nền tảng điện toán đám mây.

CLOUD FIRST VÀ NHÂN TÀI

Điện toán đám mây đang dần hình thành nên “cuộc đua” mới trong việc ứng dụng công nghệ trên toàn hệ thống ngân hàng thời gian gần đây. Theo “Chiến lược phát triển công nghệ thông tin ngành Ngân hàng Việt Nam đến năm 2025, định hướng đến 2030”, mục tiêu đến năm 2025 có 60% ngân hàng Việt Nam sử dụng dịch vụ điện toán đám mây, và tăng lên 100% vào năm 2030.

Mặc dù đã được nhiều ngân hàng xác định tầm quan trọng từ sớm, nhưng chỉ một vài nhà băng thật sự mạnh tay đầu tư vào công nghệ, trong đó tiên phong với chiến lược “Cloud First” là Techcombank. Tháng 9/2021, ngân hàng này công bố lựa chọn Amazon Web Services (AWS) làm đối tác cung cấp dịch vụ điện toán đám mây, nhằm nâng cao chất lượng hạ tầng công nghệ và trải nghiệm khách hàng.

Theo đó, Techcombank sẽ nâng cấp hệ thống công nghệ bằng cách tận dụng dịch vụ đám mây hàng đầu của AWS, xây dựng nền tảng dữ liệu tích hợp cho phép ngân hàng đưa ra các quyết định theo thời gian thực, tối ưu hóa hạ tầng nhằm tăng tốc sáng tạo sản phẩm và dịch vụ mới, từ đó nâng cao chất lượng dịch vụ và trải nghiệm trực tuyến cho khách hàng.

Chia sẻ tại Tọa đàm AWS Summit ASEAN tháng 5/2022 vừa qua, ông Nguyễn Anh Tuấn – CIO Techcombank cho biết: nghiên cứu mới nhất của các công ty tư vấn tài chính đáng tin cậy chỉ ra rằng khách hàng của các ngân hàng Việt Nam ngày càng hiểu biết hơn về kỹ thuật số, với hơn 70% thích mua các sản phẩm hoặc dịch vụ ngân hàng thông qua các kênh số.

“Chỉ công nghệ đám mây mới có thể đáp ứng tốt nhất nhu cầu của khách hàng, mang đến trải nghiệm dịch vụ xuyên suốt và liền mạch. Hơn nữa, điện toán đám mây có thể hỗ trợ chúng tôi phân tích hành vi, thấu hiểu để cải thiện hiệu quả dịch vụ và các sản phẩm được cung cấp tới khách hàng”, ông Tuấn nói.

&Ocirc;ng Nguyễn Anh Tuấn, CIO của Techcombank chia sẻ tại Tọa đ&agrave;m AWS Summit ASEAN 2022.
Ông Nguyễn Anh Tuấn, CIO của Techcombank chia sẻ tại Tọa đàm AWS Summit ASEAN 2022.

Hướng đi mới luôn có thách thức. Thách thức đầu tiên mà CIO Techcombank nhận diện là thiếu nhân sự có chuyên môn và năng lực về điện toán đám mây. “Trong thời gian đầu triển khai dự án, rất ít thành viên có kiến thức và kinh nghiệm về điện toán đám mây phù hợp”, ông Anh Tuấn chia sẻ.

Lúc đó, Techcombank đã phải vận dụng đồng thời nhiều giải pháp như tuyển dụng nhân tài trên toàn cầu với các kỹ năng đám mây cần thiết, thúc đẩy đào tạo và tái đào tạo lực lượng nhân sự trong ngân hàng để nâng cao năng lực, tối ưu hóa mạng lưới chuyên gia để quản trị rủi ro…

Nhờ những giải pháp quyết liệt, từ cuối năm 2021 Techcombank đã triển khai thành công Chương trình AWS Skills Guild cho 700 cán bộ nhân viên. Đây là chương trình hỗ trợ kỹ năng toàn diện được thiết kế để phát triển năng lực điện toán đám mây và dự kiến sẽ mở rộng đào tạo cho 2.000 nhân viên vào cuối năm 2022.

THỬ THÁCH LỚN NHẤT CHÍNH LÀ DÁM THAY ĐỔI

Anh Nguyễn Hà Thiên Ân, Giám đốc Phát triển phần mềm, quản lý sáng kiến chiến lược về cloud của Techcombank, chia sẻ: “Thử thách lớn nhất chính là sự thay đổi. Tại Việt Nam, Techcombank là ngân hàng tiên phong triển khai, nên mọi việc đều quá mới mẻ với đội ngũ cán bộ nhân viên. Tư duy, hệ thống, quy định, quy trình, thiết kế, cách làm việc… đều phải thay đổi và cập nhật liên tục”.

“Từ những gì được đào tạo, kinh nghiệm và mô hình làm việc hiện có, chúng tôi áp dụng kết hợp vào công việc – học đi đôi với hành. Từ kiến thức nền tảng ban đầu, chúng tôi vận dụng hợp lý để phù hợp vào thực tế ngân hàng. Thử thách thật sự đến ở giai đoạn này: đâu là năng lực có sẵn, đâu là năng lực cần phải có khi lên cloud; sự khác biệt là gì, ảnh hưởng đến tổ chức như thế nào và lộ trình thay đổi ra sao,…  Techcombank đã tạo ra môi trường làm việc mở để tất cả chúng tôi cùng nhau dám làm, dám thử nghiệm, dám thay đổi và hoàn thiện dần năng lực”, anh Thiên Ân nói thêm.

Kondor – hệ thống quản lý giao dịch của khối Giao dịch Toàn cầu (GTS – Techcombank) – được xem là một trong những ứng dụng phức tạp nhất từng được ngân hàng dịch chuyển lên cloud do bản chất hệ thống phức tạp, mô hình triển khai không được thiết kế theo hướng cloud native, kho dữ liệu lớn… Tuy nhiên, tháng 3/2022, Finastra – một trong những công ty hàng đầu thế giới về công nghệ được nhiều nhà băng tin cậy chọn làm đối tác chiến lược, ghi nhận Techcombank là ngân hàng đầu tiên của Việt Nam dịch chuyển thành công Kondor lên Cloud.

Về hệ thống này, anh Nguyễn Mạnh Tâm – Quản lý Cao cấp Phát triển Phần mềm, Khối Công nghệ Techcombank, phụ trách dự án, cho biết: Kondor là ứng dụng phức tạp và chưa từng có đơn vị nào triển khai lên môi trường điện toán đám mây. Kết quả này thể hiện sự quyết tâm, năng lực và nỗ lực của CBNV trong tiếp cận nền tảng công nghệ mới. Thành công này đồng thời khẳng định Techcombank hoàn toàn có đủ năng lực để triển khai các hệ thống phức tạp khác lên cloud.

Những lần xuyên đêm kiểm thử, họp xuyên biên giới để tìm giải pháp khắc phục… với Tâm và đồng nghiệp luôn là thời điểm đáng nhớ. “Đây là thành quả của sự nỗ lực, cùng nhau gắn kết, và chúng tôi càng thấm thía hơn giá trị về con người mà Techcombank đã luôn định hướng cho mọi hoạt động”, anh Tâm nói.

Hành trình dịch chuyển lên cloud của Techcombank vẫn đang tiếp tục, với con người là nhân tố trung tâm quyết định sự thành công. Bất kỳ sự thay đổi chiến lược nào cũng đều khó khăn, và việc tạo động lực là yếu tố cơ bản để CBNV gắn bó và cùng nhau thực hiện.

“Tại Techcombank, cloud chưa bao giờ là dự án độc lập, mà trở thành một phần không thể thiếu trong mọi hoạt động hàng ngày của cả ngân hàng. Hành trình này trước hết là vì khách hàng, bởi các ứng dụng trên cloud sẽ cho phép chúng tôi phát triển sản phẩm và dịch vụ nhanh hơn, có đầy đủ thông tin hơn để phát triển các dịch vụ cá nhân hóa theo trải nghiệm người dùng”, CIO của Techcombank khẳng định.

Thuộc dự án Inside GemTechnology do TopDev hợp tác cùng Techcombank triển khai, chuỗi nội dung thuần “Tech” độc quyền được chia sẻ bởi đội ngũ chuyên gia Công nghệ & Dữ liệu tại Techcombank sẽ được cập nhật liên tục tại chuyên mục Tech Blog | Techcombank Careers x TopDev. Cùng theo dõi & gặp gỡ các chuyên gia bạn nhé!

 

Các cơ hội việc làm tại Techcombank

Hơn cả một phương pháp, DevSecOps chính là “triết lý bảo mật” tại Techcombank

Là một thành viên mới tại Techcombank, anh Bùi Nguyễn Tuấn Minh hiện đang là Giám đốc DevSecOps, đây cũng là công việc đầu tiên của anh sau những năm tháng làm việc tại Singapore. Anh cũng là một trong những người góp phần mang lại những góc nhìn mới trong các phương pháp phát triển phần mềm của Techcombank.

Được biết, Techcombank là một trong những đơn vị tiên phong ứng dụng phương pháp DevSecOps trong việc phát triển sản phẩm. Đây cũng được xem là một trong những định hướng giúp các ngân hàng số hóa và phát triển mạnh mẽ trong tương lai. Sau đây là những chia sẻ của anh Bùi Nguyễn Tuấn Minh về công việc DevSecOps tại Techcombank.

Anh có thể chia sẻ một chút về môi trường làm việc tại Techcombank?

Khi chuyển công tác từ Singapore về Việt Nam, mình nhận thấy môi trường và cách thức làm việc không khác mấy, mọi thứ thậm chí còn phát triển nhanh hơn, không khí làm việc dân chủ, có định hướng rõ ràng. Techcombank luôn tạo điều kiện tốt nhất để nhân viên thực thi những công nghệ mới mà nhận định tốt cho tổ chức. Ban lãnh đạo cũng là những nhân sự cấp cao từ các nước phát triển như Mỹ, UK,… nên rất có tầm nhìn và tâm thế cởi mở, tạo môi trường làm việc lành mạnh nên anh không thấy có gặp khó khăn gì. Ngược lại, anh còn thấy có nhiều thuận lợi để phát triển hơn trong công việc khi làm việc trong môi trường Techcombank. 

Trong ngành tài chính ngân hàng đặc thù có sự kiểm soát kỹ lưỡng từ các cơ quan, và ngân hàng nhà nước. Điều này vừa mang lại khó khăn cũng vừa mang lại thuận lợi cho việc ứng dụng DevSecOps trong phát triển phần mềm.

Cái tên DevSecOps thật ra là để đề cao cái chủ trương phát triển sản phẩm của ngân hàng, đặc biệt là các tổ chức tài chính trong việc bảo mật thông tin, đây là một tiêu chí cực kỳ quan trọng trong tư duy phát triển sản phẩm. Có thể nói DevSecOps chính là định hướng của các cấp lãnh đạo cao nhất Techcombank, luôn đặt vấn đề bảo mật thông tin của khách hàng lên hàng đầu, từ đó đảm bảo sự an toàn cho tài sản của khách hàng một cách tuyệt đối. Có lẽ là đây là một trong những yếu tố cạnh tranh giữa các ngân hàng trong bối cảnh vài năm gần đây.

Anh có thể chia sẻ về cách mà DevSecOps phản ánh lên mọi ngóc ngách như thế nào?

Mô hình Techcombank đang vận hành giai đoạn chuyển đổi số (Digital transformation), ở giai đoạn này này sẽ có ít nhiều sự khác biệt so với những gì mà chúng ta từng biết về các mô hình DevSecOps bên ngoài.

Mô hình chia thành 03 nhóm:

  • Core Team (Platform Team): Xây dựng nền thô Platform, Standard Framework, tất cả những thứ liên quan đến DevSecOps, không chỉ là mỗi CI/CD. 
  • DevSecOps Support: Vận hành/ áp dụng các Framework vào dự án, giúp dự án xây dựng mô hình CI/CD và áp dụng vào trong mỗi Line Project hay mỗi Line Development.
  • Vận hành nền tảng infrastructure từ platform (UX) đến application: Team này là team Non-production. Làm nhiệm vụ dựng IaC code cho môi trường non-production và sau đó vận hành và chạy môi trường đó một cách tự động.

Hơn thế nữa, tính bảo mật (Security) và đặc biệt là bảo mật thông tin (Information Security) là kim chỉ nam cực kỳ quan trọng. Một số hoạt động được thực hiện bởi DevSecOps trong Techcombank:

  • Tự động hóa việc liên tục tích hợp và triển khai phần mềm (CI/CD), từ đó đảm bảo các phiên bản phần mềm trong suốt quá trình phát triển được kiểm tra và đối chiếu liên tục giúp đảm bảo tính ổn định và đáng tin cậy cũng như các tính năng được cập nhật và xử lý đầy đủ, giảm thiểu thời gian triển khai và đảm bảo tính linh hoạt trong quá trình phát triển phần mềm.
  • Tự động hóa quy trình kiểm tra bảo mật để đảm bảo tính năng an toàn của ứng dụng từ những bước đầu phát triển và xuyên suốt trong quá trình phát triển phần mềm nhằm bảo vệ tốt thông tin và tài sản của khách hàng, giúp tăng cường niềm tin và độ tin cậy đối với ngân hàng.
  • Tự động hóa việc kiểm soát chất lượng phần mềm, đảm bảo rằng chỉ những ứng dụng an toàn và đảm bảo tuân thủ các tiêu chuẩn chất lượng do Techcombank đề ra mới được triển khai và đưa vào hoạt động.
  • Tự động hóa việc kiểm thử liên tục: Truyền tải kiến thức về DevSecOps cho đội ngũ phát triển và vận hành để họ có thể tự cập nhật và đưa ra các giải pháp tự động hóa và bảo mật trong chính những công việc hàng ngày.
  • Tự động hóa tất cả các tác vụ IT Operation

Theo anh, đâu là những thử thách khi triển khai DevSecOps?

Khi triển khai mô hình DevSecOps, điều khó khăn nhất chính là việc bạn sẽ tốn nhiều công sức hơn trong quá trình ra quyết định phát triển sản phẩm, quy trình sẽ ngặt nghèo và cần nhiều thời gian để thông qua hơn. Những mô hình như thế này chưa có khuôn khổ (framework) chuẩn nên phải liên tục đào tạo nghiệp vụ và kiến thức của nhân viên, đó cũng là một thử thách. Tuy nhiên, cũng có những thuận lợi nhất định, DevSecOps sẽ đảm bảo hoạt động IT của ngân hàng chắc chắn hơn, chặt chẽ hơn với người dùng, đảm bảo xác suất thấp về rủi ro có thể ảnh hưởng tới khách hàng. Tức là nếu bạn bám sát quy trình, thì có thể chỉ cần làm 1 lần là đã chuẩn hóa toàn bộ. 

Vậy đâu là cơ hội mà Techcombank đang thấy được khi ứng dụng DevSecOps?

Việc phát triển DevSecOps tại Techcombank luôn tập trung vào 03 yếu tố: Fast – Secure – Performance. Như chúng ta thường biết, ba yếu tố này ít khi nào tăng cùng lúc, một “ông” tiến thì đồng thời “ông” kia lùi. Tuy nhiên, DevSecOps là cách có thể khiến 03 yếu tố này cùng tiến lên song hành cho sự phát triển và yêu cầu khắt khe của Techcombank.

Techcombank hiện đang là đơn vị tiên phong trong việc triển khai DevSecOps trong các định chế tài chính cùng quy mô ở khu vực châu Á Thái Bình Dương. Với những khó khăn thử thách sẽ còn nhiều phía trước, nhưng anh nghĩ khi mọi thứ đạt được đúng mục tiêu đề ra thì thành quả sẽ rất xứng đáng.If you can make it here, you can make it anywhere. Cũng chính vì độ khó của nó, anh tin rằng khi các bạn Engineer nếu làm tốt sản phẩm ở Techcombank rồi thì chắc chắn làm ở đâu cũng vẫn sẽ làm được. 

Ban lãnh đạo Techcombank có chủ trương DevSecOps luôn là mũi nhọn, là cơ hội, là điểm cạnh tranh của Techcombank trong việc đưa ra sản phẩm số nhanh, chất lượng tốt và đảm bảo bảo mật. Đó cũng là cách Techcombank vượt qua giai đoạn chuyển đổi số, không tiếc chi phí cho sự phát triển các mũi nhọn then chốt của ngân hàng

Hành trang tôi luyện một DevSecOps Engineer: biến thử thách thành kim cương, những điều gì chờ đợi một Engineer khi làm việc tại Techcombank?

Môi trường làm việc thì sẽ làm mọi người bất ngờ, vì yêu cầu tính chuyên môn cao, chuyên nghiệp nhưng rất tạo điều kiện, cởi mở và bình đẳng. Có những trường hợp các bạn nhân viên 2K chưa có bằng tốt nghiệp vẫn trao đổi ý kiến với cấp trên, tôn trọng ý kiến và ý tưởng của nhân viên, rất dân chủ, làm điều gì cũng được giải thích lý do làm việc đó. Nhân viên làm ở đây không phải chỉ vì lương cuối tháng mà nhân viên DevSecOps đang làm cuộc cách mạng, có đóng góp trong quá trình making a change của Techcombank.

Mặc dù quy định về thời gian làm việc tại Techcombank khá quy cũ, nhưng Techcombank lại không có sử dụng thời gian làm thước đo năng lực của các bạn mà quan trọng là khả năng đảm bảo tiến độ và chất lượng công việc. Ban lãnh đạo luôn khuyến khích các bạn tìm thấy đam mê trong công việc tại môi trường Techcombank. Vị thế của Techcombank hiện nay là nhờ tính kỷ luật của một tập thể. 

Xin cảm ơn anh về những trao đổi rất bổ ích cho cộng đồng IT nói riêng, cũng như những ai đang quan tâm đến lĩnh vực banking nói chung.

Hiện tại, tôi đang làm việc cho team DevSecOps Platform tại Techcombank. Để giới thiệu qua về chức năng nhiệm vụ của bộ phận, thì DevSecOps Platform là một nền tảng tích hợp bảo mật vào mọi khía cạnh của quá trình phát triển phần mềm. Điều này bao gồm mọi thứ từ việc phát triển code, kiểm thử, triển khai, giám sát và bảo trì liên tục. Nền tảng được thiết kế để đảm bảo rằng bảo mật không phải là điều được tính đến sau cùng, mà là một phần không thể thiếu của quá trình phát triển từ đầu đến cuối.

Để đạt được điều này, DevSecOps platform sử dụng một loạt các công cụ, quy trình và công nghệ để tự động hóa và tối ưu hóa quá trình phát triển, đồng thời cũng đảm bảo bảo mật. Điều này được thể hiện qua những CI/CD pipeline bằng những công cụ giúp kiểm thử, phân tích mã nguồn, lưu trữ, tích hợp và triển khai tự động, liên tục.

Công việc chính của tôi hằng ngày:

  • Phát triển và duy trì DevSecOps Platform trên nền tảng điện toán đám mây Amazon Web Services. 
  • Các công cụ và hệ thống được chúng tôi triển khai cho DevSecOps gồm có: Gitlab, Jenkins, Nexus, SonarQube, Vault, EKS… Để giúp cho hệ thống triển khai nhanh chóng và đảm bảo tính co dãn, phục hồi, chúng tôi phát triển các building block cho hệ thống bằng Terraform, Terragrunt và TFE.
  • Tạo các module quản lý cấu hình với Puppet, Ansible và liên tục nghiên cứu các công nghệ mới để nâng cao tính năng và bảo mật của nền tảng.

Bên cạnh việc phát triển, chúng tôi cũng thực hiện đưa ra những tiêu chuẩn chung trong quy trình phát triển phần mềm, ví dụ như là xây dựng tiêu chuẩn Gitflow, xây dựng các thư viện dùng chung cho các pipeline CI/CD cũng như tự động hóa các công việc hàng ngày của các team khác bằng việc sử dụng code.

 


Thuộc dự án "InsideGem Technology" do Techcombank x TopDev triển khai, chuỗi nội dung thuần Tech "độc quyền" được chia sẻ bởi đội ngũ Tech Leader đến từ Silicon Valley tại Techcombank sẽ được cập nhật liên tục tại chuyên mục Tech Blog Techcombank x TopDev. Cùng theo dõi & gặp gỡ các chuyên gia bạn nhé!

 

Các cơ hội việc làm tại Techcombank

Bài viết liên quan

Infrastructure as code (IaC)

Bài viết đến từ anh Bùi Nguyễn Huy Hoàng - Quản lý DevSecOps DevSecOp team @Techcombank I. Tại sao lại sử dụng Infrastructure as Code? Những công việc như ảo hóa, điện toán đám mây (Cloud), container, tự động hóa (CI/CD) giúp đơn giản hóa công việc vận hành hành công nghệ thông tin (IT Operations). Việc triển khai, cấu hình, cập nhật và vận hành dịch vụ sẽ tiêu tốn ít thời gian và công sức hơn. Vấn đề sẽ được phát hiện và giải quyết nhanh chóng, các hệ thống luôn được cấu hình và cập nhật một cách đồng nhất. Những kỹ sư IT sẽ tiết kiệm được thời gian trong công việc vận hành hàng ngày, để có thể nhanh chóng thay đổi, học hỏi và cải tiến bản thân đáp ứng nhu cầu thay đổi liên tục của thế giới công nghệ. Tuy nhiên, ngay cả với những công cụ và nền tảng mới nhất, các [...]

DevSecOps Philosophy (Triết lý DevSecOps)

Bài viết đến từ Ngô Doãn Thông - DevSecOps Engineer    DevSecOps team @Techcombank Giới thiệu Trong 20 năm qua, DevOps đã cùng với Agile, thay thế cho mô hình phát triển Waterfall. Microservices được coi là công nghệ tiên tiến nhất để triển khai kiến trúc dịch vụ. Thời gian phát triển sản phẩm đã được giảm đi, triển khai tự động được thực hiện hàng tuần hoặc hàng ngày và cloud thì cung cấp khả năng tính toán, cơ sở hạ tầng, lưu trữ và mạng rất mạnh mẽ. Triết lý DevOps thường được tóm tắt bằng khẩu hiệu "move fast and break things", điều này có nghĩa là triển khai mọi thứ nhanh hơn, mạnh dạn hơn và sẵn sàng, phá bỏ các cấu trúc silo, rào cản, chấp nhận rủi ro và khắc phục nhanh từ những rủi ro đó. Tuy nhiên, có một yếu tố quan trọng chưa được đề cập tới. Các tổ chức áp dụng DevOps vẫn cần đáp ứng tiêu chuẩn an [...]

Data Lake – Nền tảng lý trí cho mọi quyết định tài chính

Anh Nguyễn Quang Huy từng có kinh nghiệm nhiều năm về Khoa học dữ liệu cũng như phát triển và quản lý Hệ thống Dữ liệu lớn (Big Data) khi công tác tại các tập đoàn đa quốc gia tại tại Sing và Mỹ. Được truyền cảm hứng từ những bài toán lớn trên hành trình số hóa mà Techcombank đang giải quyết cho thị trường ngân hàng, Anh Nguyễn Quang Huy đã quyết định quay trở về Việt Nam để đồng hành với đội ngũ Techcombank trong giai đoạn chuyển đổi số mạnh mẽ nhất từ trước đến nay.

Ở thời điểm hiện tại, anh đang giữ vị trí Director, Data Engineer tại Techcombank. Công việc chính của anh là phụ trách xây dựng các hoạt động, dự án liên quan đến Data Lake (Hồ dữ liệu) tại Techcombank. Hãy cùng nghe câu chuyện về Data Lake sẽ giải quyết những bài toán lớn nào cho hàng triệu khách hàng của Techcombank.

Theo anh đâu là tầm quan trọng của dữ liệu trong sự phát triển của Techcombank trong 5 năm tiếp theo?    

Trong tương lai, việc tận dụng dữ liệu sẽ đem lại trải nghiệm hoàn toàn tích cực và mới mẻ cũng như tạo được niềm tin cho khách hàng. Tại Việt Nam, đôi khi chúng ta sẽ có một khoảng cách nhất định giữa người gửi tiền là khách hàng và người giúp giữ tiền là ngân hàng. Để cải thiện điều đó, chiến lược đầu tư lâu dài vào dữ liệu sẽ giúp tăng tính minh bạch, và cải thiện trải nghiệm khách hàng thông qua những thông tin (insights) mà ngân hàng có được khi phân tích dữ liệu khách hàng.

Cụ thể, dựa trên dữ liệu của khách hàng trong quá trình sử dụng dịch vụ, ngân hàng có thể giúp khách hàng tạo thói quen tài chính khỏe mạnh, phân tích và đưa ra các gợi ý về việc cơ cấu tài chính cá nhân, đầu tư dài hạn/ ngắn hạn hoặc kế hoạch chi tiêu như thế nào theo từng thời kỳ.. Từ đó giúp khách hàng có những quyết định hợp lý, xây dựng một kế hoạch tài chính cá nhân cho hiện tại và cả trong tương lai. Điều này đã rất phổ biến ở các nước phát triển, do vậy ở Việt Nam đây sẽ là một cơ hội lớn trong những năm sắp tới để ứng dụng dữ liệu vào việc giải quyết những vấn đề tài chính/quản lý tài sản (Wealth Management) cho nhiều phân khúc khách hàng khác nhau.

Được biết hiện tại Techcombank đang tập trung khá nhiều nguồn lực cho Data Lake, vậy Data Lake có tầm quan trọng như thế nào về Big Data của lĩnh vực Banking?

Trước hết, có thể hiểu Data Lake (Hồ Dữ liệu) là một hệ thống dữ liệu tập trung, điểm khác biệt của nó so với Data Warehouse (Kho Dữ liệu) là cho phép lưu trữ & quản lý cả dữ liệu có cấu trúc và không có cấu trúc cùng một chỗ. Đặc biệt, nó còn có thể lưu trữ dữ liệu ở định dạng gốc mà không yêu cầu xử lý đặc biệt, không giới hạn số dung lượng, bản ghi hay số file. Điều này cho phép ngân hàng có thể dễ dàng tiếp cận dữ liệu một cách đa dạng nhất nhằm phân tích, theo dõi, tạo mô hình trong thời gian thực hay ứng dụng Machine Learning hoặc AI để đưa ra các quyết định tối ưu nhất cho cả phía ngân hàng và khách hàng.

Data Lake có thể lưu trữ những dữ liệu hành vi như việc khách hàng đang lướt web như thế nào, truy cập vào đâu (User Behavior Tracking), theo dõi phản ứng của khách hàng trên trang web của ngân hàng, sau khi phân tích dữ liệu chuyên sâu, ngân hàng có thể đưa ra các thay đổi hay tuỳ chọn về kỹ thuật cũng như trải nghiệm người dùng nhằm tạo ra những sản phẩm phục vụ tốt hơn cho những nhóm khách hàng cụ thể. 

Ngoài ra, Data lake tập hợp và quản lý toàn bộ thông tin của một khách hàng trong cùng một hệ thống, nhờ đó cho phép đánh giá sức khỏe tài chính của khách hàng (Credit Scoring – chấm điểm tín dụng) một cách tự động. Dựa trên điểm tín dụng, việc phát hành thẻ tín dụng hay phê duyệt khoản vay có thể được đưa ra ngay lập tức với hạn mức chính xác và phù hợp. Khi đó, khách hàng có thể thực hiện các tác vụ tài chính từ xa một cách tin cậy và an toàn.

Ý tưởng chung của Big Data là cho phép phân tích để đưa quyết định. Ngân hàng có thể dùng lượng dữ liệu khổng lồ của mình (từ các sản phẩm khách hàng sử dụng) để nghiên cứu và tạo ra thêm những sản phẩm mới, trải nghiệm mới cho khách hàng. Về phía khách hàng, những dữ liệu này khi tập trung lại sẽ giúp khách hàng có được cái nhìn tổng quan về tài chính cá nhân, từ đó có thể tạo ra kế hoạch tài chính cá nhân phù hợp, hướng đến thói quen tài chính khỏe mạnh. Do đó, Big Data, khi được phát triển và sử dụng đúng, có thể được coi là chiếc chìa khóa giúp các ngân hàng có thể tạo ra thế mạnh cạnh tranh trong tương lai. 

Cấu trúc và hệ thống vận hành Data Lake của Techcombank có điểm gì khác biệt so với những cái hiện có trên thị trường. Cách Techcombank triển khai Data Lake như thế nào?

Về mặt kỹ thuật: hệ thống Data Lake của Techcombank được xây dựng trên AWS (một trong những dịch vụ điện toán đám mây – Cloud Service hoàn thiện và tốt nhất trên thế giới), đảm bảo tính an toàn và toàn vẹn của dữ liệu. Đảm bảo độ tin cậy cao cho các dịch vụ cũng như khả năng kiểm soát chặt chẽ.

Về mặt tính năng: hệ thống Data Lake của Techcombank được xây dựng với những tính năng đảm bảo phục vụ được các yêu cầu kinh doanh, lấy khách hàng làm trung tâm (cá nhân, doanh nghiệp, quốc tế, v.v.) trong bối cảnh và thị trường của Việt Nam. Đây chính là điểm khác biệt và cũng là ưu thế lớn của Techcombank khi so sánh với các ngân hàng khác không có nền tảng số tập trung hay các ngân hàng quốc tế không có những hệ thống được xây dựng để đáp ứng toàn diện các yêu cầu đáp ứng theo nhu cầu sử dụng hoặc pháp luật tại Việt Nam.

Thách thức: bài toán nhân lực và chi phí 

  • Chi phí: Rất khó có một lời giải tốt nhất cho bài toán xây dựng Data lake cho ngân hàng tại Việt Nam. Với từng hệ thống và sản phẩm, hệ thống tập trung dữ liệu được thiết kế như thế nào, gồm những cấu phần nào, cần đưa qua những qui trình quản lý nào, dữ liệu cần được làm sạch ra sao, v.v… Đó là những thứ rất khó có thể sao chép hay đưa từ nước ngoài về vì các sản phẩm tài chính của Việt Nam khá đặc trưng sơ với khu vực và thế giới. Những nhân tốt bất định nêu trên sẽ khiến chi phí trở thành bài toán khó chúng ta cần đối mặt.
  • Nhân lực: Tại Việt Nam, hiện tại có khá nhiều ngân hàng, công ty, và tổ chức làm về dữ liệu hay sản phẩm tài chính (FinTech), ngoài các tổ chức, doanh nghiệp Việt Nam, các tổ chức nước ngoài đơn cử như Trusting Social với sản phẩm đánh giá điểm tín dụng cá nhân, hay NAB (ngân hàng quốc gia Úc) cũng đang tận dụng nhân lực Việt Nam để xây dựng hệ thống ngân hàng số cho thị trường Úc. Hiện tại, chúng ta chưa có quá nhiều nhân lực hiểu rõ về ngành ngân hàng, việc đối mặt với sự cạnh tranh nhân lực từ tổ chức nước ngoài và sự đào thải nhân sự khi đòi hỏi cao về chuyên môn ngành FinTech, khiến cho việc khan hiếm về nhân sự trở thành bài toán khó cho thị trường Việt Nam.

Cơ hội: Giúp người Việt đưa ra những quyết định tài chính quan trọng

Thị trường tài chính ở Việt Nam khác rất nhiều so với thế giới. Ở thế giới vay mua nhà là thị trường lớn nhất trong lĩnh vực tài chính cá nhân, từ đó sẽ phái sinh các sản phẩm tài chính khác như bảo hiểm, tài khoản giám hộ, v.v.. Tuy nhiên ở Việt Nam thì chưa được như vậy, một trong những rào cản lớn nhất của ngân hàng là chưa có đủ dữ liệu để đưa ra quyết định nhanh chóng và chính xác về tín dụng của các cá nhân hay doanh nghiệp vay vốn, dẫn đến việc đánh mất nhiều cơ hội kinh doanh và cung cấp sản phẩm tối ưu cho khách hàng. Vì vậy, Techcombank sẽ tiếp tục tập trung vào chuyển đổi số, đi đầu trong việc sử dụng Data Lake để dùng dữ liệu để giải quyết những bài toán này. Đây dự đoán sẽ là con đường tất yếu mà các ngân hàng, tổ chức tài chính tại Việt Nam bắt buộc phải theo đuổi và tiếp tục ảnh hưởng dài hạn đến xu hướng chung của ngành lẫn kinh tế Việt Nam. Đơn cử, Quý 1 vừa qua, Vietcombank cũng mới vừa thành lập bộ phận chuyên về dữ liệu CDAO, hay VPBank cũng đang đầu tư rất mạnh vào hệ thống dữ liệu.

Khi tất cả ngân hàng cùng tham gia vào quá trình chuyển đổi số, chúng ta sẽ được thấy nền tài chính Việt Nam trở nên mạnh khỏe hơn nhờ tăng khả năng minh bạch, tăng tính tập trung dữ liệu. Điều đó cũng cho phép các ngân hàng liên kết với nhau dễ dàng hơn. Từ đó, thúc đẩy nền tài chính Việt Nam phát triển vượt bậc. 

Hơn thế nữa, Data Lake cho phép Techcombank, với vai trò người hỗ trợ quản lý tài sản của khách hàng, có thông tin đầy đủ về phân bổ tài sản và thói quen tài chính của mỗi khách hàng, từ đó giúp khách hàng có hiểu biết sâu sắc hơn về sức khỏe tài chính cá nhân, định hướng phân bổ, sử dụng tài chính hợp lý và dài hạn hơn. Mục tiêu cuối cùng là giúp khách hàng có thể đưa ra những quyết định tài chính chính xác hơn trong cuộc sống hằng ngày. 

Mô hình làm việc trong phòng ban liên quan đến Data Engineering sẽ như thế nào?

Trong bộ phận Data Engineering sẽ có 2 nhóm: 

  • (1) Nhóm sẽ chuyên vào nền tảng của Data Lake: thiết kế các hệ thống dùng chung cho tất cả bài toán liên quan đến dữ liệu.
  • (2) Nhóm phục vụ các khối nghiệp vụ: thiết kế các bài toán hay dự án (project) rất là cụ thể của một phòng ban nghiệp vụ nào đó liên quan đến các khối nghiệp vụ riêng biệt.

Những kỹ năng và tư duy mà các Data Engineer cần trang bị khi làm việc với “Hồ Dữ Liệu” tại Techcombank.

Data Engineer (DE) vs Software Engineer (SE): Hiện tại, nhân lực trực tiếp làm về Data còn khá hạn chế trong khi thị trường đang có nhu cầu ngày càng cao. Thông thường các bạn DE sẽ có xuất phát điểm là SE, sau một thời gian phát triển, các bạn có định hướng làm về dự liệu và cơ hội tiếp xúc với dữ liệu lớn có thể chuyển hướng công việc sang DE. Nói đơn giản, các bạn làm DE là những bạn SE chuyên tập trung vào backend (nắm vững vào quản lý hệ thống, xây dựng hệ thống) và xử lý Data (về mặt skills). Nếu các bạn muốn phát triển về mảng DE, thì nên trang bị và trau dồi thêm cho mình về thiết kế hệ thống backend, các ngôn ngữ lập trình được thiết kế cho backend, và đặc biệt những công nghệ, kỹ thuật backend liên quan đến dữ liệu (Database, ETL, etc.).

Ai là người phù hợp? Trong lĩnh vực phát triển phần mềm nói chung, những bạn thiên về trải nghiệm người dùng sẽ chọn hướng front-end, còn những bạn thiên về làm micro-service hay thuật toán sẽ chọn back-end. Đối với vị trí DE, bên cạnh các yêu cầu về kinh nghiệm back-end thì bạn cần phải yêu thích làm việc với dữ liệu, chẳng hạn có khả năng nhìn vào một bảng dữ liệu, suy nghĩ hay phân tích dữ liệu đó, đưa ra những ý tưởng về việc tổ chức hay sử dụng dữ liệu 1 cách tối ưu nhất.

Điều gì khiến anh lại lựa chọn làm trong mảng Banking và đặc biệt là lựa chọn gắn bó với Techcombank?

Một trong những lý do chính là mình muốn học hỏi và nâng cao kiến thức chuyên môn (Domain Knowledge) của mình trong lĩnh vực Fintech – một ngành mà mình rất quan tâm và yêu thích. Bênh cạnh đó, trong suốt quá trình làm việc tại Sing hay US, mình có nhiều cơ hội cộng tác và làm việc với nhiều đội ngũ công nghệ tại Việt Nam, qua đó hiểu được rõ hơn về tiềm năng phát triển của thị trường trong tương lai, đặc biệt là mảng số hóa ngân hàng.  

Techcombank có những bài toán rất lớn và thú vị về thị trường tài chính mà không phải ngân hàng nào cũng có được. Song song đó, môi trường làm việc cởi mở, mọi người đều có cơ hội tham gia trong mỗi quyết định, sự có mặt của các đối tác lớn và tin cậy như AWS, Adobe, Microsoft… cũng là một yếu tố thúc đẩy tôi gia nhập đội ngũ của nhà Techcombank. 

Mình tin rằng Techcombank sẽ luôn là một điểm đến lý tưởng cho nhân sự Công nghệ và Dữ liệu tại Việt Nam, những người muốn làm việc trong các bài toán phức tạp, có ảnh hướng lớn đến khách hàng và xã hội, muốn tìm kiếm cơ hội tiếp cận các công nghệ mới nhất trên thế giới ,  sở hữu những kinh nghiệm dẫn dắt hành trình số hóa ngân hàng. Nếu anh chị em nào đang có ý định hoặc cân nhắc về cơ hội nghề nghiệp tại Techcombank có thể để lại bình luận bên dưới hoặc liên hệ trực tiếp với Huy, Huy rất sẵn lòng chia sẻ cùng mọi người nhé.

Cảm ơn anh về những chia sẻ rất sâu sắc về lĩnh vực này, chúc anh và đội ngũ Data ngày càng phát triển mạnh mẽ và gặt hái được nhiều thành công hơn trong thời gian tới.


Thuộc dự án "InsideGem Technology" do Techcombank x TopDev triển khai, chuỗi nội dung thuần Tech "độc quyền" được chia sẻ bởi đội ngũ Tech Leader đến từ Silicon Valley tại Techcombank sẽ được cập nhật liên tục tại chuyên mục Tech Blog Techcombank x TopDev. Cùng theo dõi & gặp gỡ các chuyên gia bạn nhé!

 

Các cơ hội việc làm tại Techcombank

Bài viết liên quan

Data is all about orchestration (Tầm quan trọng của việc điều phối khi làm việc với dữ liệu)

Bài viết đến từ anh Vũ Tuấn Nghĩa - Quản lý cao cấp hoạch định dữ liệu Data Engineering team @Techcombank Data orchestration là một khối xây dựng cốt lõi của các hệ thống ETL dữ liệu, và là một công cụ đã có từ lâu đời và được áp dụng trong nhiều hệ thống khác nhau. Khi xây dựng Data Lake tại Techcombank, chúng mình có cơ hội thiết kế nhiều component/system từ đầu, từ hệ thống Data sourcing đến Datalake, đến hệ thống data ETL pipeline trên các zones của Data Lake. Để đáp ứng các nhu cầu và thách thức thực tế, ta cần có một hệ thống Data orchestration để giải quyết các bài toán: Cơ chế trigger các downstream job một cách linh hoạt mà không gây khó khăn trong quá trình vận hành Rút ngắn thời gian phát triển, xây dựng và kiểm thử Hạn chế sự phụ thuộc lẫn nhau gây ra chain failure Hôm nay chúng ta sẽ tìm hiểu về Data orchestration và cách giả [...]

Data Modeling with DynamoDB: Single table design (Xây dựng mô hình dữ liệu với DynamoDB: Thiết kế bảng đơn lẻ)

Bài viết đến từ anh Vũ Tuấn Nghĩa - Quản lý cao cấp hoạch định dữ liệu Data Engineering team @Techcombank DynamoDB là một dịch vụ cơ sở dữ liệu NoSQL cung cấp hiệu năng nhanh và nhất quán - có khả năng mở rộng và linh hoạt trong cách sử dụng. Khác với cơ sở dữ liệu quan hệ (RDMS), DynamoDB không sử dụng joins và các cấu trúc quan hệ khác để lưu trữ và truy vấn dữ liệu. Thay vào đó, bạn sẽ thiết kế table của mình theo Single design table - 1 table duy nhất phục vụ toàn bộ application hay service, việc này giúp hiệu suất đọc và ghi nhanh hơn ở scale lớn và giảm chi phí cloud. Trong bài viết này, chúng mình sẽ khám phá các lợi ích và thách thức của việc sử dụng Single design table trong DynamoDB, cũng như cách Datalake ở Techcombank sử dụng để đáp ứng và tối ưu như cầu sử dụng. Single table design Trong tài liệu trang chủ AWS có đề cập: You should maintain as few tables as [...]

Kinh nghiệm đọc tài liệu để trở thành Developer giỏi

Kinh nghiệm đọc tài liệu để trở thành Developer giỏi

Bài viết được sự cho phép của tác giả Sơn Dương

Trong thế giới công nghệ, bạn không thể tự mình nghiên cứu và tạo ra tất cả mọi thứ của riêng mình. Từ những ngày trên ghế nhà trường, bạn đã phải tự đọc giáo trình, tự tìm hiểu tất cả mọi thứ, thầy giáo chỉ là người định hướng cho bạn mà thôi. Để trở thành một developer giỏi, bạn phải luyện thành thục hai kỹ năng: Viết code và đọc tất cả mọi thứ. Trong đó đọc tài liệu là một kinh nghiệm rất quan trọng.

Khi bạn đi làm, việc tự đọc tài liệu và tự tìm hiểu công nghệ mới lại càng trở nên quan trọng hơn bao giờ hết. Nếu bạn không biết cách tự đọc, tự tìm hiểu, bạn sẽ ngày càng trở nên lạc hậu và tụt lùi so với đồng nghiệp.

Bài viết này, mình sẽ chia sẻ kinh nghiệm đọc và những nguồn tài liệu giúp cho việc đọc của bạn trở nên hiệu quả hơn.

Những nguồn tài nguyên và kinh nghiệm đọc tài liệu để thành developer giỏi

Đọc thế nào cho đúng? Đọc tài liệu như nào để vừa nhanh chóng tiếp cận cái mới, vừa đỡ mất thời gian.

#Để trở thành developer giỏi, hãy đọc tài liệu chính thức từ nhà cung cấp

Khi bạn bắt đầu tìm hiểu một ngôn ngữ lập trình mới, một công nghệ mới… thì nơi tốt nhất để bắt đầu chính là tài liệu chính thức của nó. Đừng vội vàng đọc những tutorial hướng dẫn trên các trang mạng.

Ví dụ, bạn bắt đầu học lập trình Android, thì nơi tất nhất để bắt đầu chính là trang Android Developer. Hoặc bạn muốn học về Nodejs, thì hãy bắt đầu từ đây.

Những bài viết hướng dẫn chính thức từ chính nhà cung cấp, sẽ giúp bạn có cái nhìn chính xác về công cụ, công nghệ mà bạn chuẩn bị tiếp cận. Hầu hết những tutorial mà bạn đọc trên mạng cũng dựa trên những tài liệu này mà thôi.

Kinh nghiệm đọc tài liệu để trở thành Developer giỏi

Thông thường, bạn sẽ bắt đầu từ bài viết Getting Started tutorial. Đây là bài viết giúp bạn hiểu cơ bản nhất bộ khung, môi trường phát triển để bắt đầu và tiếp tục mở rộng sau này cho việc thành developer giỏi, tài năng.

Rất nhiều bạn, trong đó có mình trước kia, rất ghét đọc tài liệu chính thức. Vì cảm thấy nó khô khan, và uyên thâm kiểu gì ấy. Mình thích đọc mấy bài tutorial của mấy bạn blogger chia sẻ kinh nghiệm hơn.

Nhưng chính điều đó làm mình bị “loạn” về kiến thức. Vì mỗi người lại có cách viết, cách tiếp cận khác nhau, do đó nhiều khi bị lỗi ở khâu nào đó mà không biết vì sao, rất mất thời gian.

Nhớ nhé, tài liệu chính chủ luôn là nguồn tài nguyên mà bạn cần phải tìm hiểu trước tiên.

  Sách hay nhất dành cho lập trình viên (2024)

#Đọc những bài viết chia sẻ kiến thức từ những developer giỏi “tiền bối”

Sau khi bạn đã hiểu cơ bản từ nguồn tài liệu chính thức, bạn có thể tham khảo thêm những bài viết chia sẻ kiến thức từ các chuyên gia, blogger…

Một trong những nguồn mà mình yêu thích là Medium. Trên Medium có rất nhiều bài viết hay và chuyên sâu về kỹ thuật nói riêng.

Ví dụ, bạn có thể tham khảo một số kênh trên Medium như: freeCodeCamp and HackerNoon.

Các bài viết trên đó rất chất lượng và lôi cuốn.

Kinh nghiệm đọc tài liệu để trở thành Developer giỏi
Nguồn tài liệu tiếp theo mà mình cũng hay lui tới là Hacker News. Đây là website được quản lý bởi Y Combinator.

Có một đặc điểm khá hay ho trên hacker News, đó là người dùng chỉ có thể post link lên quan đến kỹ thuật. Sau đó mọi người có thể vote-up hoặc vote-down, phụ thuộc vào chất lượng bài viết.

Kinh nghiệm đọc tài liệu để trở thành Developer giỏi

Hacker News rất giống với diễn đàn Reddit. Điểm khác biết duy nhất là Hacker News chỉ có đăng liên kết. Nhờ đó mà bạn dễ dàng cập nhật tin tức hay ho hơn mà không bị loãng.

Việc làm IT Fresher dành cho bạn

#Đọc sách Programming Ebook

Nguồn tài liệu mà mình cực yêu thích khi tìm hiểu một kỹ thuật mới đó chính là sách dạy lập trình.

Mình thì rất ít khi đọc sách dạy lập trình viết bằng tiếng việt. Không phải phân biệt đồ ngoại với đồ nội, mà đơn giản là mình không thích thôi.

Có hai nhà xuất bản rất nổi tiếng về sách lập trình:  Manning Publishing and O’Reilly Publishing. Họ có rất nhiều sách về lập trình với đủ ngóc ngách của kỹ thuật.

Kinh nghiệm đọc tài liệu để trở thành Developer giỏi

Với hai nhà xuất bản này, mình tin rằng bạn có thể tìm được đúng thứ bạn cần học. Từ những kiến thức căn bản HTML, C++, Java, Web Application… đến những kiến thức hot trend như AI, Cloud, Big Data

Bình thường, mình ưu tiên đọc sách giấy hơn là sách điện tử. Tuy nhiên, riêng về học lập trình, bạn nên làm quen với việc đọc Ebook. Bởi vì lĩnh vực công nghệ là lĩnh vực thay đổi từng giờ, sách giấy sẽ khó lòng cập nhật được kiến thức mới tốt như sách điện tử.

  Những cái “khó” khi mới học lập trình

#Tìm hiểu chuyên sâu từ các Papers

Khi bạn đã hiểu và làm chủ được một công cụ, ngôn ngữ lập trình hay công nghệ mới… Đây là lúc bạn có thể nâng cao kiến thức chuyên sâu của mình thông qua các Paper (bài viết nghiên cứu chuyên sâu).

Thực sự việc đọc Papers cũng khá là khó khăn, vì kiến thức của nó rất chuyên sâu. Nhưng bạn không hề có đơn độc đâu. Thử Google mà xem, nó có thể là một tài liệu cực kỳ quan trong trên con đường trở thành developer giỏi của bạn đấy!

Kinh nghiệm đọc tài liệu để trở thành Developer giỏi

Mặc dù đọc Papers khó thật đấy, nhưng không phải là không thể. Bạn có thể làm theo một số kinh nghiệm sau:

  1. Đầu tiên, đọc ngay phần tóm tắt.
  2. Nhìn qua những hình minh họa, diagrams mà paper sử dụng.
  3. Sau đó đọc phần tổng kết.
  4. Khi đi qua 3 bước ở trên thì mới quyết định có đọc toàn bộ bài Paper hay không.

Khi đọc đến chỗ nào không hiểu, bạn có thể note lại hoặc tra cứu nó giữa bài viết. Cứ kiên trì, dần dần kỹ năng đọc papers của bạn sẽ được cải thiện đáng kể. Chưa kể đến chuyện tiếng Anh chuyên ngành cũng lên một level mới.

Về nguồn papers, các bạn có thể tham khảo từ phòng lab của các trường đại học. Rất nhiều dự án tiềm năng có xuất phát điểm từ các nghiên cứu tưởng xa vời đó.

Ví dụ như Apache Spark được sinh ra từ AmpLab của trường đại học California.

Ngoài ra, bạn có thể sử dụng các công cụ tìm kiếm như Google Scholar hay arXiv. Cả hai công cụ này cho phép bạn tìm kiếm và đọc những tài liệu nghiên cứu được published.

Kinh nghiệm đọc tài liệu để trở thành Developer giỏi

Kinh nghiệm đọc tài liệu để trở thành Developer giỏi

#Để trở thành developer giỏi, hãy thử đọc code của người khác

Ngoài việc đọc sách, đọc tài liệu để trau dồi và tiếp cập công nghệ mới. Thì việc đọc code của người khác cũng là một cách học rất hay ho.

Nếu là lập trình viên, chắc hẳn bạn không còn lạ lẫm gì trang GitHub. Đây gần như là kho mã nguồn vô giá mà bất kì lập trình viên nào cũng không thể bỏ qua.

Kinh nghiệm đọc tài liệu để trở thành Developer giỏi

Khi bạn đọc code của dự án thực tế, bạn sẽ có cái nhìn rất khác so với sách vở. Đơn giản, những dòng code trong sách vở hay tutorial toàn là những bài toán mẫu, đơn giản và lý tưởng.

Việc học cách sử dụng công cụ trong một môi trường lý tưởng sẽ rất khác so với thực tế. Do đó, việc đọc code của những người đang “thực chiến” sẽ luôn có ích.

#Tạm kết

Trước khi kết thúc bài viết, mình chỉ muốn nói với bạn rằng: Đọc càng nhiều, bạn sẽ càng thấy ngu đi.

Bạn sẽ nhận ra, điều bạn biết thực sự nhỏ bé, thế giới bên ngoài mới bao la, rộng lớn.

Bạn sẽ không thể nào biết tất cả mọi thứ, hãy cứ đọc để mở rộng tầm nhìn. Hãy cứ “ngu” khi có thể.

Hi vọng, những kinh nghiệm đọc tài liệu này sẽ giúp ích cho bạn trong việc trở thành developer giỏi. Nếu có điều muốn chia sẻ thì đừng ngần ngại để lại bình luận bên dưới nhé.

Bài viết gốc được đăng tải tại vntalking.com

Xem thêm:

Đừng bỏ qua việc làm IT tất cả level có trên TopDev nhé!

10 tính năng trên Apache Spark anh em nên biết

10 tính năng trên Apache Spark anh em nên biết

Apache Spark là một công cụ đa ngôn ngữ cho phép xử lý dữ liệu, khoa học dữ liệu (data science) và học máy (machine learning) trên các node đơn (single-node machines) hoặc trên clusters.

Apache Spark

Không chỉ đơn giản như vậy, Apache Spark còn có nhiều hơn các tính năng hay ho. Vậy anh em cùng lướt qua xem 10 tính năng nổi bật trong Apache Spark là gì?

1. Fault tolerance

Tính năng đầu tiên của Apache Spark là Fault tolerance. Fault tolerance ở đây anh em có thể hiểu là khả năng chịu lỗi, khả năng xử lý lỗi. Apache Spark ngay từ khi bắt đầu đã được thiết kế để hanler lỗi từ các worker nodes.

Spark đạt được khả năng này nhờ vào sử dụng DAG và RDD (Resilient Distributed Datasets). DAG ở đây chứa tất cả các bước (step) cần thiết để hoàn thành một task. Tất cả đều được ghi lại. Chính vì vậy, khi xảy ra lỗi ở nodes worker nào đó, ta có thể tái hiện lỗi từ DAG đã lưu hiện có.

Apache Spark

2. Dynamic In Nature

Tính năng thứ hai của Apache Spark là Dynamic In Nature. Cái này anh em có thể hiểu

The applications can be written quickly in Java, Scala, Python, R. Spark offers over 80 high-level operators that make it easy to build parallel apps. And you can use it interactively from the Scala, Python and R shells. Spark powers a stack of libraries including SQL and DataFrames, MLlib for machine learning, GraphX, and Spark Streaming. You can combine these libraries seamlessly in the same application. Ứng dụng có thể viết nhanh chóng với Java, Scala, Python, R. Spark cung cấp hơn 80 toán tử cao cấp cho phép xây dựng song song các ứng dụng. Ta cũng có thể sử dụng nó để tương tác từ Scala, Python và R Shells. Spark cũng cung cấp các thư viện mạnh bao gồm SQL và DataFrames, MLlib cho học máy, GraphX và Spark Streaming. Ta có thể kết hợp lại với nhau để xây dựng nhanh chóng ứng dụng của mình.

Apache Spark

3. Lazy Evaluation

Tính năng thứ 3 của Spark là Lazy Evaluation. Với Spark thì không có bất cứ sự chuyển đổi (transformation) nào được thực hiện ngay lập tức. Tất cả đều là lazy, mỗi khi anh em thêm vào, nó sẽ đi qua DAG. Kết quả cuối cùng chỉ được đưa ra khi anh em gọi tới actions đó.

Hơn nữa, tất cả các actions liên quan tới Spark đều sẽ hiển thị lên (trực quan hoá) trước khi anh em gọi.

Apache Spark

  Tìm hiểu cơ chế Lazy Evaluation của Stream trong Java 8
  Digital Twins – xu hướng công nghệ cho ngành IoT

4. Real-Time Stream Processing

Tính năng thứ 4 của Apache Spark là Stream Processing ở chế độ Real Time. Spark Streaming đưa ra các API tích hợp ngôn ngữ của Apache Spark vào quá trình xử lý của stream. Bình thường anh em viết batch jobs theo cơ chế từ trên xuống dưới. với Apache Spark API cũng vậy, tất cả sẽ được viết như các truyền thống.

Apache Spark

5. Speed

Spark cho phép các ứng dụng chạy trên Hadoop chạy nhanh hơn 100 lần (in memory) và nhanh gấp 10 lần (trên disk). Để tăng được tốc độ này, Spark giảm thiểu hoạt động đọc ghi ở các bước trung gian (operations for intermediate). Tất cả sẽ lưu ở trên memory và chỉ thực sự ghi ra đĩa khi cần thiết.

Một số công cụ cũng giúp Spark tăng tốc độ như DAG, query optimizer và highly optimized physical.

Apache Spark

6. Reusability

Tính năng thứ 6 của Apache Spark cho phép tái sử dụng code. Spark code có thể sử dụng cho batch-processing. Các streaming cũng có thể kết nối với nhau (joining streaming data). Ở trạng thái streaming (streaming state), Spark cũng cho phép thực hiện các ad-hoc queries.

Apache Spark

Xem thêm tuyển dụng Java lương cao trên TopDev

7. Advanced Analytics

Apache Spark từ đâu đã là tiêu chuẩn để xử lý các dữ liệu lớn hoặc cực lớn. Spark cung cấp các thư viện phục vụ riêng cho Machine Learning, xử lý đồ hoạ (graph processing libraries). Tất cả các thư viện này đều hoạt động trơn tru dưới sự hỗ trợ của Spark.

Apache Spark

8. In Memory Computing

Không giống như Hadoop MapReduce, Apache Spark có khả năng xử lý các tác vụ trong bộ nhớ và không bắt buộc ghi các kết quả hoặc kết quả của các bước trung gian này vào trong bộ nhớ. Tính năng này cho phép tăng tốc độ xử lý của Apache Spark.

Kết quả của từng bước trung gian nếu cần xử lý ở bước sau cũng sẽ lưu ở trong bộ nhớ để có thể đem ra tái sử dụng.

Apache Spark

9. Supporting Multiple languages

Apache Spark tích hợp đa ngôn ngữ. Hầu hết đều có API cho các ngôn ngữ Java, Scala, Python và R. Ngoài ra, còn có các tính năng nâng cao với ngôn ngữ R để phân tích dữ liệu. Ngoài ra Spark có bộ SQL riêng là Spark SQL, tương tự với SQL. Cho phép anh em làm quen nhanh để phát triển.

Apache Spark

10. Integrated with Hadoop

Apache Spark tích hợp tốt với HDFS file system trên Hadoop. Cung cấp nhiều định dạng như Json, csv, orc, avro.

Apache Spark

11. Tham khảo thêm về Apache Spark

Cảm ơn anh em đã đọc bài – Thank you for your time – Happy coding!

Tác giả: Kiên Nguyễn

Có thể bạn quan tâm:

Tìm kiếm việc làm IT mới nhất tại TopDev!

Top 5 câu hỏi phỏng vấn IT Operation và gợi ý trả lời

Top 5 câu hỏi phỏng vấn IT Operation và gợi ý trả lời

IT Operation là thuật ngữ bao quát cho toàn bộ quy trình và dịch vụ do một bộ phận trong doanh nghiệp. IT Operation sẽ chịu trách nhiệm vận hành các hệ thống phần mềm, phần cứng của doanh nghiệp, đảm bảo chất lượng, quản lý cơ sở hạ tầng.

IT Operation cũng hỗ trợ cả doanh nghiệp hiện tại và khách hàng bên ngoài.

IT Operation Anh em không cần phải lo, ngày đầu lúc nào chả vui

Vậy phỏng vấn IT Operation có gì đặc biệt? Những câu hỏi nào thường được hỏi khi phỏng vấn vị trí này? Tất cả sẽ được liệt kê trong bài viết này.

Anh em lưu ý là bài viết chia thành 2 phần, phần 1 là những câu hỏi chung chung và phần 2 sẽ là những câu hỏi đặc thù hơn cho từng loại dự án.

Bắt đầu ngay thôi nào!

1. Bằng cách nào xác định lỗi network và cách nào để phát hiện?

Câu hỏi đầu tiên phỏng vấn IT Operation liên quan tới kiến thức và khả năng xử lý nếu phát hiện ra lỗi trong hệ thống.

Là người chịu trách nhiệm cho hoạt động của công ty, mạng (network) là một trong những lỗi thường hay xảy ra. Vậy bằng cách nào ta có thể xác định được các lỗi này? Một phương pháp thường hay được sử dụng là checksum. Cụ thể ở đây là CRC (RC – Cyclic Redundancy Check).

CRC sẽ gửi gói tin từ điểm A tới điểm B và kiểm tra tổng số byte nhận được có đầy đủ hay không? Nếu không nhận đầy đủ có thể xác định lỗi xảy ra do cách thức giao tiếp hoặc lỗi đường truyền.

IT Operation

Đây chỉ là ví dụ cho việc kiểm tra lỗi khi gửi thiếu gói tin hoặc lỗi mạng. Các trường hợp khác anh em có thể tự xem lại để bổ sung kiến thức.

Một số câu hỏi khác:

  • Tiêu chuẩn cho bảo mật mạng trong mạng nội bộ công ty là gì?
  • Làm sao để cấu hình mail nội bộ cho công ty?. Đảm bảo bảo mật và tiết kiệm chi phí

  Top 20 chứng chỉ IT được săn đón nhất trong ngành CNTT
  Top 5 câu hỏi phỏng vấn Software Architect hàng đầu

2. Nguyên nhân của màn hình xanh là gì?

Câu hỏi thứ hai phỏng vấn IT Operation liên quan tới vấn đề mà các anh em IT Operation thường hay xử lý. Màn hình xanh chết chóc.

Thông thường trong công ty rất nhiều trường hợp có thể dẫn tới màn hình xanh, lỗi này ảnh hưởng tới trực tiếp tới công việc. Nên thường được yêu cầu xử lý sớm và xử lý nhanh. Câu hỏi này chỉ là câu hỏi đại diện, những công việc thường ngày mà IT Opeartion phải đảm nhiệm có thể bao gồm, đi đường dây mạng, cài đặt phần mềm, tạo tài khoản cho các bạn nhân viên mới.

IT Operation

Thông thường lỗi màn hình xanh xảy ra do một vài nguyên nhân dưới đây:

  • Phần cứng được lắp không đúng cách
  • Có sự cố xảy ra với phần cứng
  • Phần mềm gây xung đột hoặc gây hư hại cho windows

Một số câu hỏi anh em có thể chuẩn bị thêm:

  • Bạn có kinh nghiệm xử lý phần cứng máy tính không?
  • Trường hợp công ty mất điện, phương án nào để giữ cho máy tính vẫn tiếp tục hoạt động?

3. Nếu bạn được giao cập nhật chính sách hoặc thủ tục liên quan tới sử dụng mạng của công ty. Bạn sẽ làm thế nào?

Câu hỏi số 3 phỏng vấn IT Operation liên quan tới kinh nghiệm làm việc thực tế. Thông thường các công ty sẽ có chính sách và thủ tục làm việc và sử dụng mạng công ty khác nhau.

Trường hợp có thay đổi về chính sách và thủ tục. Trách nhiệm của IT Operation là đánh giá xem cập nhật đó có ảnh hưởng tới cách thức làm việc của các phòng ban và bộ phận hay không? Ngoài ra, việc giải thích cho các nhân viên trong công ty cũng vô cùng quan trọng.

IT Operation

Để giải thích được và trình bày được cho toàn bộ nhân viên trong công ty, IT Operation cần gửi mail, giải thích, hoặc thực hiện các khảo sát trước khi thực hiện thay đổi.

Câu hỏi này thoải mái để anh em trình bày quan điểm cá nhân cũng như kinh nghiệm thực tế đã có.

Một số câu hỏi anh em cũng có thể chuẩn bị:

  • Trường hợp mạng công ty có vấn đề, làm sao đảm bảo không ảnh hưởng tới công việc hằng ngày của nhân viên?
  • Bạn quản lý thiết bị mạng và thiết bị liên quan tới công việc ở công ty như thế nào?

Tham khảo việc làm Data Operations hấp dẫn trên TopDev

4. Bạn sẽ xử lý như thế nào trong trường hợp có vấn đề về network sản phẩm bán cho khách hàng và khách hàng nổi giận?

Câu hỏi thứ 4 phỏng vấn IT Operation liên quan tới kinh nghiệm làm việc với khách hàng. Vị trí Operation không chỉ làm việc và xử lý các sự cố trong công ty. Nếu công ty bán sản phẩm ra bên ngoài, IT Operation chịu trách nhiệm giúp sản phẩm hoạt động trơn tru khi khách hàng đang sử dụng.

IT Operation

Trường hợp có vấn đề, anh em có thể xử lý bằng cách trực tiếp liên hệ với khách hàng, xác định nguyên nhân gây ra lỗi. Song song với việc xác định nguyên nhân gây ra lỗi. Phương án khắc phục đã được chuẩn bị trước đó cần được triển khai để tránh ảnh hưởng tới khách hàng.

Một số câu hỏi thêm anh em có thể chuẩn bị:

  • Bạn có lên phương án hoặc tài liệu xử lý các sự cố thường gặp trong công ty không? (liên quan tới network, phần cứng,…)

5. Bạn có kế hoạch hay cách thức để đào tạo nhân viên mới phòng IT Operation không?

Câu hỏi thứ 5 phỏng vấn IT Operation đánh giá khả năng đào tạo nhân viên mới. Trường hợp bạn ứng tuyển vị trí leader hoặc manager của IT Operation, câu hỏi này là câu hỏi nhà tuyển dụng thường hay đưa ra.

Để thực hiện công tác đào tạo tốt, đòi hỏi phòng ban IT phải có tài liệu và kế hoạch đào tạo cụ thể. Song song với tài liệu là các môi trường development hoặc môi trường test cho nhân viên mới có thể thực hành trước khi vào môi trường chính trong công ty.

IT Operation

Việc thực hiện đào tạo tốt còn giúp hạn chế rủi ro. Trường hợp các bạn nhân viên mới cấu hình sai, xoá nhầm account hoặc xử lý không đúng trên môi trường của khách.

Một số câu hỏi khác nhà tuyển dụng có thể đưa ra:

  • Trường hợp có sự cố xảy ra do nhân viên mới, bạn xử lý như thế nào?
  • Các kiến thức nào bạn nghĩ một người nhân viên mới cần có cho vị trí này?

6. Tham khảo thêm phỏng vấn IT Operation

Cảm ơn anh em đã chú ý – Thank you for your focus – Happy coding!

Tác giả: Kiên Nguyễn

Có thể bạn quan tâm:

Xem thêm Việc làm Developer hấp dẫn trên TopDev

GRPC là gì? Điều gì giúp GRPC trở nên mạnh mẽ?

GRPC là gì? Điều gì giúp GRPC trở nên mạnh mẽ?

gRPC là mã nguồn mở mới, dựa trên RPC framework, đem lại hiệu suất và hiệu quả cao trong mọi môi trường. Hỗ trợ cả hai loại là request và response thông thường và giao tiếp dài như long-running streaming.

Bài viết này sẽ giúp anh em có cài nhìn sâu hơn về gRPC, kiến trúc cũng như điểm mạnh điểm yếu của gRPC.

gRPC Chưa bắt đầu đã nhảy lẹ dữ chời. Chung thuỷ với REST bao lâu mà nhảy lẹ dữ.-

Bắt đầu ngay thôi nào!

1. gRPC là gì?

gRPC is a robust open-source RPC (Remote Procedure Call) framework used to build scalable and fast APIs. It allows the client and server applications to communicate transparently and develop connected systems. Many leading tech firms have adopted gRPC, such as Google, Netflix, Square, IBM, Cisco, & Dropbox. gRPC là một khung dựa trên RPC framework (gọi thủ tục từ xa), sử dụng để xây dựng các API có tốc độ cao, khả năng mở rộng tốt. Nó cho phép client và server trong ứng dụng có thể giao tiếp minh bạch và phát triển các hệ thống được kết nối. Rất nhiều công ty công nghệ hàng đầu đã áp dụng gRPC như Google, Netflix, Square, IBM, Cisco và Dropbox

Không phải sính ngoại nhưng nghe thôi đã thấy nên tìm hiểu về gRPC, không phải cứ tech từ công ty công nghệ lớn là mình sẽ tìm hiểu. Nhưng gRPC là thứ đang dần thay thế REST, mà REST lại quá phổ biến. Nên tìm hiểu gRPC là chắc chắn phải làm rồi.

Liệng qua liệng lại xíu phía lịch sử thì gRPC đầu tiên được phát triển bởi Google, như là một phần mở rộng thêm của RPC framework. Sử dụng để kết nối nhiều microservices với nhiều techstack khác nhau. Sau một thời gian thì được chuyển qua open source, cho cộng đồng thoải mái sử dụng.

gRPC

2. gRPC concepts

gRPC có được sự phát triển và thành công nhờ sử dụng các công nghệ mới hàng đầu, tốt hơn JSON và XML, cung cấp và gia tăng bảo mật cho API. Hầu hết các concept của gRPC đều bắt đầu từ

2.1 Protocol Buffers

Protocol Buffers hay còn gọi là Protobuf, là giao thức tuần tự hoá (serialization) của Google, cho phép định nghĩa các services tự động tạo ra các client libraries. gRPC sử dụng các giao thức này làm IDL (Interface Definition Language – Ngôn ngữ định nghĩa giao thức). Phiên bản hiện tại là proto3, bao gồm các tính năng mới và dễ dàng sử dụng.

gRPC

Cả quá trình hoạt động của protobuf cho thấy nó có lợi thế hơn nhiều so với JSON và XML. Phân tích syntax bằng protobuf yêu cầu ít hơn tài nguyên CPU (do dữ liệu được chuyển thành dạng nhị phân). Các tin nhắn được mã hoá có kích thước nhỏ hơn.

Chính vì có kích thước nhỏ, việc trao đổi hoặc gửi nhận tin nhắn trở nên nhanh chóng, ngay cả khi máy sử dụng có CPU chậm (như điện thoại hoặc các thiết bị di động khác).

2.2 Streaming

Streaming là concept khác của gRPC, nơi mà nhiều processes được thực thi chỉ trong một request duy nhất. Streaming cũng được hỗ trợ bởi TCP và HTTP/2 (cho phép gửi nhiều response hoặc nhận nhiều request).

Streaming chia thành 3 loại chính dưới đây:

  • Server-streaming RPCs: Client sẽ gửi một request duy nhất tới server và nhận lại một luồng dữ liệu. Server sẽ gửi toàn bộ nội dung trả về cho tới khi không nhận được tin nhắn nào nữa.
  • Client-streaming RPCs: Kiểu này client sẽ gửi một chuỗi luồng dữ liệu tới server, server xử lý và trả về duy nhất một response cho client.
  • Bidirectional-streaming RPCs: Streaming 2 chiều cho phép cả client và server gửi chuỗi tin nhắn tới nhau. Cả hai luồng này hoạt động độc lập, do đó chúng có thể truyền message theo bất cứ trình tự nào. Trình tự tin nhắn (messages) trong mỗi luồng được dữ nguyên.

  Modern C++ binary RPC framework gọn nhẹ, không cần code generation
  Triển khai RPC đơn giản trong java

2.3 HTTP/2

gRPC xây dựng dựa trên HTTP/2, được ra mắt vào năm 2015 để khắc phục các hạn chế của HTTP/1.1. Mặc dù tương thích như HTTP 1.1 nhưng HTTP/2 mang lại nhiều tính năng cao cấp hơn như:

  • Binary Framing Layer
  • Streaming
  • Flow Control
  • Header Compression
  • Processing

Processing trong HTTP/2 giúp gRPC có thể hỗ trợ các process chạy đồng bộ và bất đồng bộ (synchronous and asynchronous). Có thể sử dụng để thực hiện các loại tương tác và phát trực tuyến gRPC.

Streaming – Bidirectional full-duplex streaming (truyền phát hai chiều) cho phép client có thể gửi yêu cầu (request) và nhận về phản hồi (response) đồng thời.

2.4 Channels

Channels là khái niệm cốt lõi trong gRPC. Các luồng trên HTTP/2 cho phép nhiều stream trên 1 connection mở.

3. Kiến trúc gRPC

Kiến trúc gRPC được mô tả theo hình vẽ dưới đây. Sơ đồ này chia thành 2 phần (client và server), trong mô hình này mọi client service đều bao gồm một stub. Stub là file được tự động tạo ra, nó tương tự như các interface hiện tại ta dùng để giao tiếp với phía server.

Khi máy khách gửi request tới Server, nó sẽ bao gồm API được gọi và các tham số (parameter). Lúc cần parameter thì đó là lúc và Stub ở phía client hoạt động, nó tuần tự hoá (serializes) các tham số bằng Protobuf, chuyển request này tới client time library (cái này ở local machine).

gRPC

Sau đó, OS lúc này gửi tới server thông qua giao thức HTTP/2. OS của Server nhận các packets, gọi tới server stub procedure. Thủ tục stub này ở phía server sẽ giải mã (decode) các tham số nhận được, gọi các procedure tương ứng cũng bằng Protobuf.

Sau khi đã thực hiện xong, các dữ liệu mã hoá sẽ gửi lại cho Client và decode các tham số đó. Client tiếp tục xử lý và trả về cho phía enduser.

Tham khảo việc làm Front-end Developer hấp dẫn trên TopDev

4. Điểm mạnh của gRPC

Với kiến trúc và các thức mã hoá, giải mã các parameter khác biệt. Cộng với HTTP/2, rõ ràng gRPC đem tới một số ưu điểm khác biệt.

Đầu tiên là về hiệu năng

4.1 Peformance

Theo các đánh giá khác nhau, gRPC đem lại tốc độ và bảo mật API gấp 10 lần so với REST+JSON truyền thống. Do có protobuf và HTTP/2, protobuf sẽ tuần tự hoá (serializes) các tin nhắn ở phía server và client một cách nhanh chóng. Kích thước của tin nhắn lúc này cũng trở nên nhỏ gọn, HTTP/2 cũng cung cấp phương pháp nén file, header nhỏ hơn, giúp việc gửi nội dung giữa Client và Server trở nên nhanh chóng hơn.

4.2 Streaming

Với HTTP/2 và gRPC, việc streaming bây giờ có thể thực hiện nhanh chóng theo nhiều cách khác nhau:

  • Unary (no streaming) – không streaming
  • Client-to-server streaming – từ client tới server
  • Server-to-client streaming – từ server tới client
  • Bi-directional streaming – streaming 2 chiều

4.3 Interoperability

Interoperability (tương tác), cũng giống như HTTP1, gRPC hỗ trợ tích hợp với hầu hết các ngôn ngữ lập trình phổ biến hiện nay như Java, JavaScript, Ruby, Python, Go, Dart, Objective-C, C#

4.4 Security

HTTP/2 luôn đi kèm với TLS giúp đảm bảo tính bảo mật của API. gRPC cũng được khuyến khích để sử dụng với SSL/TLS để mã hoá dữ liệu, giúp việc truyền dữ liệu từ Client tới Server trở nên an toàn hơn

5. Điểm yếu của gRPC

Với vô vàn điểm mạnh không có nghĩa là gRPC không có điểm yếu, dưới đây là một số điểm yếu có thể nhìn thấy rõ khi sử dụng gRPC.

5.1 Limited Browser Support

g RPC sử dụng trên nền HTTP/2 nên không thể gọi trực tiếp các service từ g RPC từ trình duyệt web. Lúc này nếu muốn sử dụng HTTP/2 ta cần proxy và g RPC web để chuyển đổi từ HTTP/1.1 qua HTTP/2

5.2 Non-human Readable Format

Không giống như JSON hay các giao thức khác, Protobuf sẽ nén các tin nhắn từ g RPC thành các dữ liệu khó đọc với con người. Trường hợp có xảy ra lỗi, để thực hiện truy nguyên hoặc kiểm tra cũng là một điều khó khăn.

6. Tham khảo thêm về gRPC

gRPC là một công nghệ đầy hứa hẹn và đã đạt được một số bước tiến đáng kể trong lĩnh vực API. Tuy nhiên không phải nó có thể thay thế ngay lập tức REST trong một sớm một chiều.

Anh em có thể cân nhắc sử dụng gRPC khi cần kết nối các microservices ở quy mô lớn (large-scale), giao tiếp trong thời gian thực (real time communication), các hệ thống có tài nguyên và công suất thấp.

Cảm ơn anh em đã đọc bài – Thank your for your attension – Happy coding!

Tác giả: Kiên Nguyễn

Có thể bạn quan tâm:

Xem thêm Việc làm Developer hấp dẫn trên TopDev