Home Blog Page 114

Chia sẻ kinh nghiệm khi chuẩn bị ra trường, xin việc và phỏng vấn (Phần 2)

Chia sẻ kinh nghiệm khi chuẩn bị ra trường, xin việc và phỏng vấn

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

Mình xin viết tiếp bài post hôm trước về những lần đi phỏng vấn của mình, nó có thể cho bạn 1 chút kinh nghiệm khi chưa đi phỏng vấn lần nào. Còn khi bạn đã phóng vẫn vài lần và kinh nghiệm đầy mình rồi thì có thể đọc chơi xem “lần đầu” của mọi người có cảm giác giống nhau hết hay không. Mình có phỏng vấn 3 lần thì mình xin kể lại và cuối cùng là phần rút ra kinh nghiệm nhé.

  'Toát mồ hôi' phỏng vấn tuyển dụng vào Apple

Những lần phỏng vấn:

Lần 1 – phỏng vấn làm nhân viên chính thức (lúc này mình vừa học xong năm 3):

Không cần nói các bạn cũng biết thì lần đầu lúc nào cũng là lần khó khăn nhất. Một là vì lúc này bạn chưa có kinh nghiệm làm việc ở đâu cả nên rất dể chết trong những câu kiến thức. Lí do khác là vì bạn chưa bao giờ phải moi móc kiến thức mình ra để nói chuyện trực tiếp với người khác lâu đến vậy, trừ khi bạn có đi dạy thêm cho những bạn cùng lứa. Vì vậy, nên lần này sẽ là lần dễ đánh gục bạn nhất. Nhưng không sao cả, Thomas Edison vẫn vĩ đại khi ông có khoảng 10.000 thất bại nên 1 lần của bạn cũng không là cái đinh gì cả. Mình cũng thất bại trong lần này nhé.

Ở lần phóng vấn này mình cũng không chuẩn bị gì nhiều cả vì cũng không có gì chuẩn bị. Nhưng trước hôm phỏng vấn mình có hơi căng thẳng và không ngủ được do mình chỉ nộp CV thử thôi nhưng không ngờ họ lại gọi mình, vì mình mới học xong năm ba và công việc này lại cần người ra trường hoắc 1, 2 năm kinh nghiệm. Do lần đầu nên mình bị stress dữ lắm, trước phỏng vấn mấy ngày cứ lo lắng suốt thôi. Khi vào phòng phỏng vấn, mình mô tả lại xíu là phòng khoảng 10m2, có 2 thánh đang ngồi sẵn đặt CV của bạn trước mặt. lần lượt 2 người đứng dậy bắt tay mình lúc này run không nói được gì luôn, cứng hết cả người. Ngồi xuống lấy lại tí bình tĩnh. Thì câu hỏi đầu tiên của những cuộc phỏng vấn sẽ là giới thiệu bản thân bạn.

Do run quá mình không nói được gì nhiều, hình như họ cũng không đánh giá cao phần này lắm. Rồi họ hỏi vài ba câu đại loại làm quen như hỏi về phần học tập của mình, cấp 3 học trường này hả, chuyên gì… Cuối cùng thì họ sẽ vào vấn đề chính là kiến thức. Ban đầu họ sẽ nhìn CV bạn mà hỏi những thứ bạn ghi chép trong đó. Họ hỏi rất kĩ càng đến khi nào bạn không biết nữa thì thôi. Phần này thì mình ok vì chuẩn bị khá tốt. Nếu bạn có trả lời sai gì họ có thể góp ý cho bạn ngay tại đó để biết mình sai luôn nhé. Tiếp đến sẽ là phần kiến thức họ cần cho công việc, ví dụ như bạn xin vào làm team ứng dụng nghe nhạc. Thì lúc này họ sẽ hỏi những thứ như tạo service để chạy nhạc làm sao, lấy nhạc như thế nào…. Còn 1 phân nữa không thể thiếu là họ sẽ hỏi bạn về OOP và data structure. Những phần này chú ý là bạn nên tìm hiểu kĩ nhá, mình ỷ y không hỏi nên phần này mình hơi ú ớ xíu. Xong xuôi tất cả thì họ sẽ trao đổi những thứ liên quan đến công ty họ, xem bạn có thật sự quan tâm không, bạn đã tìm hiểu gì về họ chưa. Xong thì về và đợi họ gọi báo kết quả, và kết quả của mình là không được gọi…

Lần 2 – phỏng vấn thực tập (vừa sau pv lần 1 vài tuần):

Sau đó ít tuần thì họ có gọi và bảo mình phỏng vấn thực tập. Mình cũng ok và đi thử vận may xem sao. Do cách lần pv trước ko xa nên kiến thức mình không lo lắm, còn về tâm lý thì lần này mình có vẻ đỡ stress hơn vì dù sao mình cũng đã có ít kinh nghiệm với lại tính chất quan trọng lần này cũng không lớn lắm nên cứ vậy mà đi phỏng vấn thôi. Nhưng đời không như là mơ bước vào chổ phỏng vấn thì thấy cả 6 7 người đứng đấy đợi phỏng vấn, quen cũng có mà là cũng có. Mà mình lại là người vào đầu tiên nữa chứ.

Lúc này bao nhiêu tự tin của mình bay hết rồi. Tay chân thì cứng đơ đứng đó, đợi “bị” kêu vào để pv. Lại giống hệt như lần đầu phỏng vấn là phòng nhỏ, 2 người ngồi sẵn đấy (lúc sau có thêm 1 người nữa, sau này vào làm mới biết là sếp to). Mình thì lại tim đập nhanh, miệng thì khô, đầu óc thì ngưng hoạt động, y hệt như lần trước vậy. Nhưng ít ra lần này mình rút kinh nghiệm được 1 tí, chủ động bắt tay, rồi ngồi xuống, rót 1 miếng nước uống lấy lại bình tĩnh và bắt đầu pv. Thì về cách phỏng vấn chẳng khác gì lắm so với lần 1, có điều lần này mấy sếp hỏi hơi kĩ hơn.

Đặc biệt là lúc sếp to xuống hỏi toàn những cái khó bên phần OOP với data structure, phần này thì mình hơi yếu và không kịp ôn nên khi pv xong tự nói luôn là thôi rồi, lần này tạch là cái chắc. Nhưng vì định luật bắt cầu nên lần trước nghĩ đậu thì lại rớt suy ra lần này nghĩ rớt thì lại đậu. Khoảng tuần sau mình được gọi đi pv lần 2. Và cũng biết luôn nguyên nhân mình không pass nhân viên chính thức. Lí do là mình không thể làm fulltime được, nên họ sẽ cho mình vào thực tập để tích lũy kinh nghiệm. Thì lần pv sau này cũng không có gì để kể, như cuộc nói chuyện hỏi thăm làm quen giữa cty và mình, sau đó deal lương và kí hợp đồng thôi.

Lần 3 – phỏng vấn xin học bổng (sau lần 2 khoảng 5 tháng):

Lần phỏng vấn này thì mình đã khá tự tin bà bình tĩnh để bắt đầu rồi. Và do lần này là pv xin học bổng nên cũng không liên quan tới kiến thức lắm (mình đã test kiến thức với họ trước đó rồi). Thường thì họ sẽ hỏi về định hướng tương lai của mình trước, cả gần lẫn xa luôn. Bạn cứ nói thoải mái, không có chuyện gì cả. Nhưng tốt nhất là nên có dự định gì liên quan tới cty họ thì tốt nhất nhé. Sau đó thì họ hỏi xem bạn biết gì về công ty hay chưa, biết thì kể họ nghe. Để xem bạn có quan tâm họ không ấy mà. Về phần pv này mình thấy hơi chán với lại không liên quan gì đến kiến thức cả nên mình pass qua luôn nhé.

Kinh nghiệm bản thân rút ra được:

Sau 3 lần pv thì mình có tích lũy được 1 số kinh nghiệm về việc chuẩn bị trước và trong lúc phỏng vấn để chia sẽ cho các bạn như sau:

Trước khi phỏng vấn:

Theo mình thấy thường thì khoảng thời gian này bạn sẽ có khoảng 1 tuần để chuẩn bị. Vậy các bạn nên chuẩn bị những gì? Kiến thức là thứ chắc chắn sẽ là quan trọng nhất. Bạn nên xem lại tất cả những thứ bạn đã ghi trong CV về công việc đó. Càng kĩ càng tốt. Và đặc biệt xem luôn phần OOP, data structure,… Vì những cái đó hình như là việc nào cũng vần đến cả. Và cuối cùng nên tìm hiểu thêm 1 ít thông tin của công ty bạn sắp vào pv nữa nhé. Ok lúc này nếu kiến thức bạn đã vững rồi thì giờ đến tinh thần. Thứ ảnh hưởng không kém đến chất lượng của màn trình diễn của bạn sắp tới. Chắc luôn là nếu lần đầu thì cả tuần trước khi pv bạn sẽ có 1 số hôm cảm thấy hơi căng thẳng, không làm được gì, lo tới lo lui,… Khi các bạn cảm thấy cảm giác đó thì mình khuyên là đừng cố nhồi nhét thêm kiến thức gì vào lúc đó cả, thư giản đi nhé, có thể xem 1 bộ phim, đá 1 trận banh, hoặc nghe vài list nhạc, những việc đó chỉ mất từ 1->2 tiếng thôi. Không nhiều nhưng đủ cứu cả ngày làm việc của bạn hôm đó đấy. Cứ thư giản đến lúc bạn cảm thấy ok rồi thì hay work tiếp. Nếu bạn đang căng thẳng mà work tiếp sẽ rất dễ gây ra stress và ảnh hưởng rất lâu đến suy nghĩ và đầu óc của bạn. Và nếu kéo dài đến trước lúc bạn phỏng vấn thì sẽ rất khó cho bạn. Trước lúc phỏng vấn thì chỉ có 2 việc đó thôi là kiến thức và tinh thần, bạn chuẩn bị được tốt 2 việc thì quá ok

Khi đến công ti phỏng vấn:

Việc đầu tiên mình lưu ý là khi đến công ty phỏng vấn không nên uống quá nhiều nước nha, và đặc biệt là không được uống nước có chất kích thích như redbull chẳng hạn. Nó sẽ làm đầu óc bạn căng ra đấy. Nên ăn 1 ít trái cây trước khi đi thì tốt hơn.

Còn vấn đề khác là trang phục, nên nhớ phỏng vấn việc gì thì chọn trang phục cho nó hợp với công việc đó xíu nha. Phỏng vấn làm software developer mà mặc sơ mi, đóng thùng, mang cà vạt thì nó hơi không hợp mắt tí nào. Còn 1 lưu ý là nếu bạn phỏng vấn làm mobile thì nếu đang xài cục gạch thì đừng đem ra trước mặt người phỏng vấn nhé. Vì mình nghĩ đơn giản là thợ chụp ảnh không thể được người khác thuê khi trong tay chỉ có máy ảnh dỏm được, thì với dân làm mobile mình cũng nghĩ thế.

Cuối cùng đến lúc vào phòng pv thì trước khi vào nên uống 1 ngụm nước để cổ họng không bị khô nhé. Để gây ấn tượng tốt với nhà tuyển dụng thì bạn nên chủ động tươi cười, đưa tay ra bắt tay vói họ và lúc nào cũng giữ trạng thái tươi cười nhé. Một điều cực kì quan trọng mình muốn nói là các bạn đừng nghĩ họ giỏi hơn mình, cứ nghĩ là mình đang nói chuyện với bạn như trong lớp vậy thôi, bạn nó hỏi bài chổ nào thì mình chỉ cho nó hết khả năng. Nếu bạn kiểm soát cuộc pv như là 1 cuộc nói chuyện bình thường giữa những developer với nhau thì bạn đã thành công trong việc giữ bình tĩnh rồi đấy. Cuối cùng là với những câu hỏi bạn không biết thì đừng trả lời bừa nhé, tuyệt đối không được trả lời bừa, mà hãy nói là: “vấn đề này em vẫn chưa được tìm hiểu, nhưng nếu có thời gian em sẽ tìm hiểu nó sau ạ”.

Nói vậy sẽ tạo thiện cảm cho người tuyển dụng hơn.

Chúc các bạn thành công nhé.

Bài viết gốc được đăng tải tại tinntt.github.io

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

Xem thêm Các vị trí tuyển dụng it hấp dẫn trên TopDev

A taste of Atomic CSS

A taste of Atomic CSS

Bài viết được sự cho phép của tác giả Huy Trần

Thực lòng mà nói, khi cả thế giới thậm chí đã ngưng nói về OOCSS, BEM hay các CSS methodologies khác, thì mình vẫn còn stick với kiểu viết CSS truyền thống, đó là cách viết “trải lòng”, theo đúng nghĩa đen của nó:

// css
.container .mot-cai-gi-do {
    color: #f00;
    background: #000;
    border: none;
    border-radius: 3px;
}

.container .mot-cai-gi-do .con-cua-mot-cai-gi-do {
    color: #f00;
}

// hay scss
.container {
    .mot-cai-gi-do {
        color: #f00;
        background: #000;
        border: none;
        border-radius: 3px;
        .con-cua-mot-cai-gi-do {
            color: #f00;
        }
    }
}

Cho đến một ngày, khi mình quyết định là mình đã chịu hết nổi khi phải nghe @kcjpop và @bần_harris @bần_harris là thanh niên không chịu cho xin địa chỉ Github để link vô đây, đây là thanh niên làm cho mình mỗi sáng thức dậy lại cảm thấy khủng hoảng vì trình độ lớp trẻ ngày một cao siêu…nói mãi về những tachyons hay tailwind, cụ thể hơn là Atomic CSS, những thứ từ vựng mình không biết và không hiểu mẹ gì. Mình quyết định lại một lần nữa, nhảy lên con tàu của những kẻ hipster.

  11 công cụ hữu ích để kiểm tra và tối ưu hóa các file CSS
  5 điều phiền toái nhất của CSS

Atomic CSS hiểu nôm na là một cách viết CSS mà chúng ta… không cần viết một dòng CSS nào cả. Thay vì viết code CSS, chúng ta sẽ sử dụng các class có sẵn mà một Atomic CSS Framework cung cấp. Trong các framework này, mỗi class có nhiệm vụ định nghĩa một thuộc tính duy nhất (vậy nên mới gọi là atomic).

atomic /əˈtämik/adjective, relating to an atom or atoms / of or forming a single irreducible unit or component in a larger system. tiếng Việt: nguyên tử

Ưu điểm lớn nhất của Atomic CSS có lẽ là giúp tránh được các vấn đề với CSS specificity (mức độ ưu tiên của các thuộc tính), gây ra do cách viết kế thừa class.

Tức là, thay vì muốn có một cái nút phẳng bo góc tròn, thay vì:

<button class="btn-cai-nut">Touch me</button>
.btn-cai-nut {
    border: none;
    border-radius: 3px;
    background: $red;
    color: #FFF;
    padding: 2px 5px;
    
    &:hover {
        background: $dark-red;
    }
}

Thì ta chỉ cần:

<button class="bg-red hover:bg-red-dark border-none rounded-sm text-white px-5 py-2">Touch me</button>

Nhìn qua thì có vẻ hơi rối và hoang đường, thứ nhất, ai lại đi viết một đống class dài lê thê thế kia? thứ hai, ấn tượng của mình là: Ba cái bọn bốc phét! Không viết CSS thì chắc chỉ làm được vài ba cái style đơn giản, còn mấy cái cần customize nhiều thì thách cha nó làm cũng không được!

Đây cũng là quan điểm của khá nhiều người, mình biết được vì sau đó vài ngày thì trên Hacker News cũng xuất hiện một thread thảo luận về một bài viết về Atomic CSS của Julia Evans.

Tuy nhiên, sau vài hôm thử nghiệm, mình làm được vài cái demo nho nhỏ với Tailwind CSS, cũng cảm thấy thoải mái hơn khi sử dụng. Đầu tiên là prototype một cái giao diện blog minimal:

Live demo: https://codepen.io/huytd/pen/mzzoRe

A taste of Atomic CSS

Xét về khả năng customize và sự tự do khi thiết kế giao diện, Tailwind tỏ ra là không thua bất cứ ai, thậm chí nó còn hỗ trợ responsive và các thuộc tính CSS như hover nữa.

Sẵn tiện đã hype, thì hype cho tới, mình cũng quất luôn một cái demo khác và lần này ôm thêm cả React Hooks. Là prototype một cái mail client UI.

Live demo: https://codepen.io/huytd/pen/pxGqOK

Đến demo thứ hai này thì mình buộc phải xuống tay viết một vài dòng custom CSS để làm hiệu ứng background nằm chéo màn hình, mấy cái trò này hiển nhiên Atomic CSS chưa thể hỗ trợ được.

Khi sử dụng với React thì coi bộ Atomic CSS khá tiện, giúp cho việc prototype nhanh chóng mà không cần phải switch qua lại để vừa viết code JS và viết CSS, cũng không cần phải viết CSS style trong JS nữa.


Nhìn chung thì đây cũng là một phương pháp viết CSS rất đáng quan tâm, tuy nhiên để đưa ra thêm nhận xét thì mình còn phải sử dụng nó nhiều nữa. Còn từ giờ cho đến lúc đó, bài này đành phải kết cụt lủn như thế này vậy 

Đọc thêm:

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

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

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

Tôi biết đến với máy tính và lập trình như thế nào?

Tôi biết đến với máy tính và lập trình như thế nào?

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

Chào mọi người, sau bao nhiêu năm đi làm tôi đã đúc kết được một số kinh nghiệm quý báu, cũng xin chia sẻ lại với mọi người, chủ yếu là giành cho những bạn sinh viên và những bạn mới ra trường. Tôi sẽ chia sẻ về cách mình đến mới máy tính, đến với lập trình và những kinh nghiệm khi đi làm, những dự án thực tế, bài học rút ra để các bạn không gặp phải, những kỹ thuật, hack, cheat để làm dự án nhanh hơn.

  10 nguyên tắc lập trình nền tảng mà lập trình viên nào cũng cần biết
  100 Tips cho Lập trình viên siêu giỏi

Series bài viết này tôi sẽ không hướng dẫn về thủ thuật máy tính hay thủ thuật lập trình. Mà muốn tâm sự về nghề nghiệp, về con đường mình đã chọn, chia sẻ những kinh nghiêm khi đi học và đi làm để những bạn mới tiếp cận về lập trình sẽ không mắc lại những sai lầm của tôi.
Tôi là một lập trình viên, không phải nhà văn hay một người viết lách, cách hành văn của tôi sẽ không hay nhưng tôi sẽ cải thiện dần để ngày một hay hơn. Và câu chuyện của tôi là…

Biết đến máy tính từ năm học lớp 6, ngày đó thực sự tôi chưa biết máy tính là gì, tôi không nhớ chính xác cái năm đó là năm bao nhiêu, tôi chỉ nhớ đó là một kỳ nghỉ hè và cũng không hiểu lý do gì đã thôi thúc tôi đăng ký học một khóa học máy tính.

Trường THPT của tôi là một ngôi trường ở quê, một nơi chưa cập nhật công nghệ thông tin như các thành phố lớn khác, lúc đó có mở một khóa tin học và tôi đã đăng ký tham gia học.
Lần đầu tiên tôi biết tới máy tính lúc đó chỉ biết nó là một loại máy móc nào đó giống như những loại máy khác, không biết nó làm gì và ứng dụng như thế nào vào cuộc sống mà chỉ biết học để thỏa mãn trí tò mò.

Tôi được học về phần mềm soạn thảo văn bản MS Word 2003, cách đánh máy, cách chia bố cục văn bản, vẽ hình, chèn hình, định dạng văn bản. Mỗi người được giáo viên phát cho một đĩa mềm với dung lượng là 1.44Mb để lưu những bài học thực hành mà mình đã làm được.

Trong lớp học chỉ có một mình tôi là lớp 6, tôi học chung với những anh chị lớp 8, 9. Sau một vài ngày học thì chúng tôi phát hiện trong máy tính có một game tên là TienSu. Mà chúng tôi hay gọi là tiền sử, game nói về một người tiền sử cầm một cái cây giống như gậy đánh bóng chày, đi qua những nơi nào có khủng long thì cầm cái chày đó mà giã.

Thế là một kỳ nghỉ hè lại trôi qua và tôi chuẩn bị vào lớp 7, tôi đã lãng quên đi những kiến thức của Word mà đã học được, trong tâm trí tôi không còn đọng lại những thông tin gì cả.

Từ sau năm lớp 8 trở đi, những quán net mọc lên như nấm, người người chơi game, nhà nhà chơi game và tôi cũng không ngoại lệ, thời điểm đó tôi biết tới game half life. Ngoài half life thì tôi không chơi một game nào khác, tôi được một cái hay là chơi game thì không bị nghiền, một phần vì lý do là không có tiền nhiều để chơi liên tục, một phần là do đại lão gia nhà tôi rất nghiêm khắc, biết được tôi đi chơi game mà không học là mông nở hoa liền.

Đã bao nhiêu mùa lúa trổ bông mà tôi cũng chưa được sờ…À nhầm tôi đã sắp lên lớp 11, mốc này rất quan trọng trong cuộc đời của tôi là bước ngoặt mà tôi đã đến với con đường lập trình. Năm đó tôi đi học thêm môn hóa của cô H. Thì tình cờ người yêu của cô về trường của tôi dạy (À quên nói là trường cấp 2 của tôi được nâng cấp lên thành trường cấp 2 -3). Người yêu của cô cũng tên là H. Thầy H vừa dạy tin học vừa dạy toán, có thể dạy cả lý, nói chung là giỏi vô cùng. Nếu như thầy mà không về thì tôi giờ cũng không ngồi đây mà kể chuyện cho các bạn đọc, có lẽ hiện tại tôi đang đi ăn xin ở một nơi nào đó.

Trước khi nhập học thì tôi vẫn đi học thêm hóa và được làm quen với thầy, biết được thầy dạy môn tin học. Lúc đó tôi cũng không biết rằng tin học 11 thì mình sẽ học cái gì, thì mình liền hỏi thầy. Thầy nói rằng tụi mình sẽ học lập trình Pacal. Mình nghe thấy lâp trình thì thấy rất hứng thú, liền về nhà xin bố mẹ mua máy tính.

Nhà tôi cũng không phải khá giả gì, về cũng xin được bố mẹ 6tr đi mua máy tính, thêm cái bàn để máy tính nữa là 6tr6. Ôi mẹ ơi, máy tính gì mắc vãi, lúc đó mua được cái máy Pentium 4, ram 512Mb, USB 1Gb. Tôi sẽ không kể lại những chuyện vọc máy ra sao, cho nhớt vào máy thế nào mà tôi sẽ kể về lần đầu tiên tiếp cận về Pascal.

Sau khi mua máy về thì được thầy cho chép phần mềm Turbo pascal, đem về nhà mở máy tính và mở sách giáo khoa ra và gõ, mặc dù không hiểu gì và cũng không chạy được nhưng tôi vẫn gõ và gõ. Lúc này tôi biết là sẽ theo con đường lập trình này rồi.

Trong lớp thì có 2 đứa học Pascal tốt nhất vì nhà 2 đứa đều có máy tính, năm lớp 11 thì tôi đã quyết định chọn ngành công nghệ thông tin và thằng bạn tôi cũng vậy. Tuy nhiên sang năm lớp 12, khi đăng ký ngành để đi thi thì có mỗi tôi nộp vào ngành công nghệ thông tin còn thằng bạn thì lại nộp quản trị kinh doanh, đến giờ cũng không biết lý do vì sao nó lại chọn ngành đó, có thể do lúc đó ngành này quá hot chăng.

Và cái gì đến cũng sẽ đến tôi đậu vào ngành công nghệ thông tin của một trường không quá hot và với số điểm không được cao. Thằng bạn cũng đậu quản trị kinh doanh.

Đến đây thì đã hết phần 1, mời các bạn đón đọc phần 2 nhé, phần 2 sẽ kể về những ngày tháng sinh viên học công nghệ thông tin của tôi.

Các bạn nhớ like fanpage để theo dõi những bài viết mới nhất nhé.

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

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

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

Làm thế nào để cải thiện kỹ năng debug?

kỹ năng debug
Làm thế nào để cải thiện kỹ năng debug?

Tác giả: Ogundiran Ayobami

Dù bạn đã đạt đến trình Senior hay chỉ là một Junior mới bước chân vào con đường lập trình thì việc gặp bugs khi coding là điều thường xuyên và gần như không thể tránh khỏi. Sự khác biệt là một lập trình viên giỏi sẽ biết cách cải thiện kỹ năng debug của mình, giúp việc đối mặt với bugs trở nên “bớt đáng sợ” hơn.

kỹ năng debug
Debug là một trong những kỹ năng quan trọng của lập trình viên

Làm thế nào để đối phó với bugs?

Có ba cách chính hiện đang được nhiều người biết đến:

  • Prebugging: giảm thiểu các lỗi trước khi chúng được tạo ra.
  • Debugging: xác định, khắc phục và loại bỏ lỗi khi tìm thấy chúng.
  • Post-debugging: có lỗi không mong muốn hoặc không xác định.
  Cách viết một bug report tốt
  Debug là gì?

Chúng ta hãy xem xét từng vấn đề để hiểu rõ hơn về chúng.

1. Prebugging là gì?

Nếu chúng ta hay gặp lỗi ở một chương trình thông qua việc lập trình, điều đó có nghĩa là chúng ta cần tự hướng dẫn mình để giảm số lượng lỗi mà chúng ta gặp phải. Tôi gọi quá trình hướng dẫn bản thân này là “Prebugging”. Đây là một kỹ năng debug khá cơ bản.

Tôi đã tìm kiếm rất nhiều và có thể thấy một khái niệm khái quát nhất về Prebugging, đây là quá trình xác định và loại bỏ các lỗi khỏi phần cứng hoặc phần mềm của máy tính.

1.1. Lỗi cú pháp

Mỗi ngôn ngữ lập trình đều có các quy tắc riêng và các dev có trách nhiệm tuân theo các quy tắc đó. Ngôn ngữ lập trình nghiêm ngặt về các quy tắc và sẽ đưa ra lỗi bất cứ khi nào các quy tắc đó bị vi phạm.

Ví dụ, hãy tưởng tượng rằng bạn bỏ qua dấu ngoặc đơn của một hàm hoặc phương thức như sau: function {}

Bug sẽ lập tức xuất hiện.

Việc làm quen với thông báo lỗi của một lỗi cú pháp và cách khắc phục nó sẽ giúp bạn có lợi hơn trong khi gỡ lỗi. Cá nhân tôi nhận thấy rằng hầu hết các lỗi liên quan đến cú pháp luôn đề cập đến một số từ khóa giúp bạn tìm ra phần code nào đang có bug.

let school = { 
name: "Harvard", 
location: "Heaven On Earth", admit: function() { return "weeew! You are admitted" } 
} 
console.log(school.names); // undefined

Lỗi “Không xác định” được trả về cho chúng ta biết liệu đối tượng hoặc thuộc tính đang truy cập có khả dụng hay không. Chúng tôi có thể tìm ra vấn đề ở đâu nếu chúng tôi chú ý đến thông báo lỗi.

1.2. Lỗi logic

Các lỗi logic rất khó xử lý vì chúng luôn có vẻ như không có lỗi – nhưng bạn vẫn không nhận được kết quả như mong đợi.

Ví dụ: một cách đơn giản để xác nhận loại lỗi này là kiểm tra mã bên dưới trong bảng điều khiển của trình duyệt

‌prompt("enter number") + 3;

Bạn có thể mong đợi một số như một đầu ra, nhưng nó sẽ trả về một chuỗi. Tóm lại, bạn sẽ không nhận được kết quả như mong đợi. Do đó việc lên kế hoạch trước khi code và hiểu những điều cơ bản về ngôn ngữ lập trình đang sử dụng có thể giúp bạn đối phó với các lỗi logic – miễn là bạn hiểu các yêu cầu chương trình đưa ra cho bạn.

Xem thêm các việc làm tuyển dụng Tester chưa có kinh nghiệp hấp dẫn tại TopDev

1.3. Lỗi biên dịch

Chương trình của bạn có thể không biên dịch vì bạn có thể đã vi phạm một số quy tắc mà trình biên dịch mong muốn bạn tuân theo.

Ví dụ: viết một chuỗi mà không có dấu ngoặc kép thông thường, như trong const name = Ayobami, sẽ dẫn đến lỗi biên dịch vì một chuỗi phải được trích dẫn. Vì vậy, code sẽ không biên dịch.

‌‌Điều này tương tự như lỗi cú pháp, và càng viết nhiều code, bạn càng xử lý tốt hơn các lỗi biên dịch. Bạn có thể làm việc hiệu quả hơn và giảm những lỗi này bằng cách biên dịch hoặc kiểm tra code của mình thường xuyên.

Xem thêm Debug và khắc phục lỗi hiển thị ký tự Unicode của ứng dụng Web

1.4. Lỗi resources

Đôi khi, chương trình của bạn có thể vượt quá giới hạn bộ nhớ hoặc sử dụng hết tài nguyên có sẵn. Điều đó có thể khiến ứng dụng của bạn ngừng hoạt động hoặc hoạt động sai. Đoạn code dưới đây là một ví dụ trong thế giới thực về đoạn mã dẫn đến lỗi resources.

function factorial(num) {
  var result = 1;
  for(var i = num; i > 0; i--){
    result = num * factorial(num-1);
  }
  return result;
}

factorial(5);
factorial(10);
factorial(20);
factorial(0);

Hàm factorial() bị treo hoặc làm chậm trình duyệt vì không gian ngăn xếp, tức là bộ nhớ mà trình duyệt phân bổ cho chuỗi lệnh gọi hàm, đã được sử dụng hết. Trong trường hợp này, lỗi là lỗi resources vì nó xảy ra do sử dụng hết bộ nhớ được cấp phát.

1.5. Lỗi giao diện‌‌

Đôi khi chúng tôi thiết kế các API chương trình để sử dụng theo những cách nhất định nhưng người dùng sử dụng các chương trình theo cách khác nhau và gây ra lỗi. Những lỗi như vậy được gọi là lỗi giao diện.

‌‌Ví dụ, giả sử rằng phương thức go(string) mong đợi một chuỗi nhưng thay vào đó chúng ta gọi nó bằng một số. Điều đó sẽ dẫn đến lỗi nếu người tạo ra chương trình không mong đợi và quản lý cách chương trình sẽ phản hồi trong trường hợp như vậy.

  Bài học cho các Developer sau lỗi bug video từ Facebook

‌‌Hầu hết mọi thứ trong phần mềm đều tuân theo các tiêu chuẩn. Nếu các tiêu chuẩn đã xác định của bạn không được tuân thủ, bạn cần cung cấp cho người dùng của mình thông báo lỗi hoặc hướng dẫn để giúp họ tìm ra họ đang sử dụng ứng dụng sai. Việc ghi lại các API của bạn có thể giúp ích rất nhiều trong trường hợp này.

2. Debugging là gì?

2.1. Cách tìm lỗi

Tìm lỗi bắt đầu bằng việc hiểu các thông báo lỗi mà bạn thấy. Không cần phải nói rằng một thông báo lỗi là một con trỏ dẫn đến một lỗi. Nếu bạn hiểu thông báo lỗi, bạn có thể theo dõi chính xác vị trí của lỗi.

2.2. Tìm nguyên nhân của việc xảy ra lỗi?

‌‌Sau khi tìm thấy một lỗi, bạn cần phải tìm ra lý do tại sao code lại hoạt động theo cách mà nó thực hiện. Làm điều này giúp bạn xây dựng một hệ thống hiệu quả. ‌‌Thay vì nhiều devs chỉ search Google và sử dụng câu trả lời họ nhận được trực tiếp từ StackOverflow.

‌Điều đó tốt trong một số trường hợp nhất định, nhưng tốt hơn là bạn nên hiểu nguyên nhân của lỗi và giải pháp cho vấn đề là gì. Hiểu nguyên nhân gây ra lỗi là một bước quan trọng trên con đường sửa chữa hoặc loại bỏ lỗi.

Xem thêm các việc làm tuyển dụng Tester HCM hấp dẫn tại TopDev

2.3. Cách khắc phục hoặc loại bỏ lỗi

‌‌Sau khi tìm và hiểu được nguyên nhân gây ra lỗi, chúng ta phải sửa lỗi đó. Một khi bạn hiểu lỗi là gì, bạn sẽ đơn giản tìm ra giải pháp mà không cần căng thẳng. ‌‌Tuy nhiên, có những lúc sự hiểu biết của chúng ta không mang lại giải pháp nào cho dù chúng ta có cố gắng đến đâu. ‌‌Thay vì mất thời gian, bạn có thể thông báo lỗi trên Google hoặc bất cứ điều gì bạn cảm thấy phù hợp.

‌‌Bạn cũng có thể hỏi một người khác vì những người khác có xu hướng nhìn mọi thứ theo cách khác. Họ trung lập và sự trung lập đó thực sự giúp sửa một số lỗi.

kỹ năng debug
Có nhiều cách khác nhau để khắc phục lỗi

‌‌3. Post-debugging là gì?

“Post-debugging” là dự đoán các lỗi không mong muốn trong các chương trình bạn đã viết. Nó đề cập đến tất cả các cơ chế bạn có thể sử dụng để đảm bảo rằng các lỗi không xác định được dễ dàng theo dõi hoặc quản lý trước khi chúng gây hại cho hệ thống hoặc công ty.

Xem thêm các việc làm tại Gear Inc tuyển dụng hấp dẫn với TopDev

Bạn nên có một hệ thống theo dõi lỗi trong quá trình sản xuất để bạn có thể dễ dàng phát hiện ra các lỗi khi chúng xuất hiện sau khi đưa ứng dụng của bạn vào phiên bản sản xuất. Có rất nhiều công cụ theo dõi lỗi trên mạng. Nhưng đây là một số web mà bạn có thể kiểm tra:

  • www.sentry.io
  • www.honeybadger.io
  • www.pypi.org
  • www.airbrake.io
  • www.logrocket.com

Có rất nhiều công cụ theo dõi lỗi trên mạng, bạn sẽ phải nghiên cứu để tìm ra thứ tốt nhất cho mình.

Kết luận

Kỹ năng debug là một kỹ năng quan trọng mà tất cả các nhà phát triển phần mềm phải trau dồi. Nó là cốt lõi của việc viết code, và nếu bạn làm tốt, nó có thể giúp bạn trở thành một lập trình viên giỏi hơn. Tìm hiểu thêm nhiều cách debug chắc chắn là một trong những giải pháp quan trọng nhất dành cho bạn.

Bài viết được phỏng dịch theo nguồn tại freecodecamp.org

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

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

Quản lý nhiều Storyboard trong lập trình IOS

Quản lý nhiều Storyboard trong lập trình IOS

Bài viết được sự cho phép của tác giả Trần Hữu Cương

I.Giới thiệu

Khi App chúng ta lập trình phức tạp lên  dẫn đến số lượng view tăng lên, nếu chỉ đặt trong một Storyboard thì các view sẽ rất là khó nhìn.

Sẽ khá phiền phức do khó bao quát hết các màn hình.

Việc điều hướng (navigation) giữa nhiều màn hình cũng sẽ trở nên phức tạp và “rối mắt” hơn.

Vì vậy bài hôm nay mình sẽ hướng dẫn các bạn tổ chức nhiều Storyboard khác nhau.

Mỗi một storyboard sẽ chỉ cần quản lý một nhóm các màn hình nhất định.

  3 sai lầm các iOS Developers thường mắc phải
  5 bài học quí giá về việc phát triển ứng dụng iOS

II.Cách tạo và quản lý nhiều Storyboard

+ Có 2 cách để tạo và quản lý nhiều storyboard :

  • Tách Storyboard
  • Tự tạo liên kết

1.Tách Storyboard

Đây là  phương pháp giúp bạn tạo nhiều storyboard bằng cách tách bớt các màn hình từ một storyboard đã có thành storyboard mới.

Giờ các bạn tạo 2 màn hình như các bài trước mình đã hướng dẫn.

Quản lý nhiều Storyboard trong lập trình IOS

Bây giờ màn 2 vẫn thuộc Storyboard cũ,giờ chúng ta muốn tạo storyboard mới quản lý màn 2 chúng ta hãy click vào màn 2 bên storyboard và chọn Vào menu Editor ➜ Refactor to Storyboard

Quản lý nhiều Storyboard trong lập trình IOS

Và đây là kết quả sau khi chúng ta tách thành công

Quản lý nhiều Storyboard trong lập trình IOS

2.Tự tạo liên kết

Đối với cách này, chúng ta sẽ tự tạo một Storyboard mới ngay từ đầu, sau đó liên kết với Storyboard đã có. Chúng ta sẽ sử dụng luôn ví dự ở cách 1

1.Kéo thả đối tượng Storyboard Reference vào Interface Builder. Storyboard Reference là đối tượng giúp bạn tạo liên kết với một Storyboard nào đó. Bạn sẽ liên kết Button “go to screen 2” với Storyboard Reference

2.Các bạn hãy tạo 1 view controller mới

Quản lý nhiều Storyboard trong lập trình IOS

Đặt luôn id cho màn hình 2 để bên Storyboard references ánh xạ.

3.Các bạn hãy vào storyboard đầu tiên và click vào storyboard refernces

Để đặt class view controllers quản trị và references ID.

Quản lý nhiều Storyboard trong lập trình IOS

Giờ các bạn hãy build và xem kết quả .

Hy vọng bài hôm nay sẽ giúp các bạn hiểu rõ các sử dụng nhiều storyboard.

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

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

Xem thêm Việc làm IOS hấp dẫn trên TopDev tại đây

module.exports và exports trong NodeJS khác nhau như thế nào?

module.exports và exports trong NodeJS khác nhau như thế nào?

Bài viết được sự cho phép của tác giả Trần Khôi Nguyên Hoàng

Chú ý

exports và module.exports chứ không phải là export nhé các bạn. Nhiều bạn hay viết thiếu chữ “s” lắm ấy. Trong Javascript thì có cái từ khóa export nhưng trong NodeJS thì chưa đâu.

  10 Công ty hàng đầu thế giới sử dụng Node.js
  Ghi chú file package.json của node module

Cơ chế Wrapping của NodeJS là gì?

Trước khi một đoạn code trong module được thực thi thì NodeJS sẽ wrap code lại như sau:

(function(exports, require, module, __filename, __dirname) { 
    // Module code actually lives in here 
}); 
JavaScript

module.exports và exports khác nhau như thế nào?

Trước hết thì module.exports và exports trỏ tới cùng một Object, là một Object rỗng.

Tuy nhiên, chỉ có một thằng module.exports là cái thật sự được export khi mình require nó thôi. Còn thằng exports thì không phải. Nó chỉ là một reference tới thằng module.exports thôi.

Ví dụ như sau:

module.exports.name = "Nguyen";
exports.name = "Nguyen";

console.log(module.exports);
console.log(exports);
console.log(module.exports === exports);
JavaScript

Kết quả sẽ là

{ name: 'Nguyen' }
{ name: 'Nguyen' }
true
JavaScript

Ở đây có thể thấy hai thằng này chỉ thay đổi cái properties của cái Object ban đầu (là Object rỗng ban đầu). Nên ở đây, hai thằng này vẫn là cùng một Object.

Tuy nhiên, nếu như sửa lại

module.exports = {
  name: "Nguyen"
};
exports = {
  name: "Nguyen"
};

console.log(module.exports === exports);
JavaScript

Hai thằng này là hai cái Object khác nhau, vì mình là assign lại giá trị cho thằng exports (Mình dùng dấu =).Kết quả sẽ là

false
JavaScript

Mình chứng minh thêm như sau:

Trong file export.js minhf viết

exports = {
  name: "Nguyen"
};
JavaScript

Sau đó, trong file index.js mình viết

const object = require("./export");

console.log(object);
JavaScript

Thì kết quả là {}

Vì chỉ là thằng module.exports mới là thằng thật sự được export (Và mặc định nó là một Object rỗng). Còn thằng exports thì không.

Vậy thì khi nào sử dụng thằng exports?

Dùng thằng exports chỉ khi nào mình muốn add thêm một cái properties vào cái Object mặc định của nó. Ví dụ như thay vì viết

module.exports.x = 1;
module.exports.y = 2;
module.exports.z = 3;
JavaScript

Thì có thể viết thành như sau cho nó ngắn và tiện hơn.

exports.x = 1;
exports.y = 2;
exports.z = 3;
JavaScript

Kết luận

Luôn sử dụng module.exports khi muốn export một cái gì đó. Đừng lăn tăn sử dụng exports là gì cho rối rắm hết cả lên.

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

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

Top 3 Vuejs Library không thể không biết

Top 3 Vuejs Library không thể không biết

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

Muốn trở thành Vuejs Master tất nhiên không thể suốt ngày dựa dẫm vào các “Top 3 Vuejs Library”, “Top 5 Vuejs Library”. Một Senior Vuejs Engineer luôn có những component riêng được viết từng dòng code. Lượng sao trên github tất nhiên chẳng bao giờ tồi.

Tuy nhiên, nói đi cũng phải nói lại. Biết Library chưa chắc đã là không tốt. Một số dự án khi đã bị dí “tới đít”, sử dụng Library là điều không thể tránh khỏi. Do viết byhand một component bao giờ cũng tốn thời gian. Tuy nhiên, dùng là một chuyện, biết để dùng lại là chuyện khác.

  Cách sử dụng các plugins jQuery trong VueJS
  Instant AJAX Search với Laravel và Vuejs

Bài viết dưới đây Kieblog giới thiệu Top 3 Vuejs Library thường hay sử dụng nhất. Dùng khá là ok nên mới giới thiệu nha!

Bắt đầu ngay thôi nào!

1. User Ratings

Đứng thứ nhất trong Top 3 Vuejs Library là User Ratings.

Hầu hết web hay application hiện nay thường sử dụng rating rất nhiều. Rating cho user, rating cho dịch vụ, rating cho communication, bla bla. Viết một component Rating thực chất không khó.

Component Rating cần cho phép lựa chọn số lượng sao report. Tuy nhiên cần chú ý tới responsive trên mobile sao cho người dùng dễ dàng lựa chọn. Tránh spam, ngoài ra còn phải chú ý tới customize khi người dùng muốn thay đổi màu sắc, độ dài, …

Thực ra thì các Vue Framework hiện tại đã làm khá tốt và đều đã hỗ trợ Rating component. Đơn cử như Vuetify.


Về custom thì một số Vue Framework đã làm khá tốt. Custom đầy đủ.

Tuy nhiên, về khả năng custom nhanh chóng vượt ngoài design form của các framework tất nhiên không thể không kể tới vue-rate-it. Một

The options make it easy to v-model user selection ratings to wherever you want to use them, and you can set the rating to be changeable or read-only with a single prop.

Với vue-rate-it, các lưa chọn trở nên dễ dàng khi người dùng sử dụng v-model ở bất cứ đâu. Two way binding là đây chứ đâu.Việc tùy chọn rating readonly khi người dùng đã rate cũng chỉ cần thông qua môt prop duy nhất.

Sử dụng cũng khá đơn giản với Global Registration

import Raters from 'vue-star-rating';
Vue.component('star-rating', Raters.StarRating);
Vue.component('heart-rating', Raters.HeartRating);
Vue.component('fa-rating', Raters.FaRating);
Vue.component('image-rating', Raters.ImageRating);
<template>
<div>
<heart-rating v-model="rating"></heart-rating>
<div>Currently Selected: {{rating}}</div>
<div><a href="#" @click.prevent="rating = 0">Reset Rating</a></div> 
</div>
</template>

<script type="text/javascript"> 
import {HeartRating} from 'vue-rate-it';

export default{
components: {
HeartRating
},
data(){
return {
rating: 3
}
}
}
</script>

2. Date Picker

Đứng thứ hai trong Top 3 Vuejs Library là Date Picker.

Date cũng là component thường xuyên sử dụng khi phát triển Web/App với Vuejs. Date chọn ngày giao hàng, date search sản phẩm theo ngày, date chọn ngày publish, … Vô vàn thứ liên quan tới Date

Ứng cử viên Library mình muốn nhắc tới là vue2-datepicker. Component này có một số điểm mạnh:

Top 3 Vuejs Library không thể không biết
  • Dễ dàng custom UI
  • Hỗ trợ i18n cho nhiều loại ngôn ngữ
  • Hỗ trợ nhiều loại date format cho từng quốc gia/ khu vực.
  • Lựa chọn được Date Rangle, …

Sử dụng vue2-datepicker vô cùng đơn giản.

import DatePicker from 'vue2-datepicker';
// styles
import 'vue2-datepicker/index.css';

3. Toasts (Notification Bar)

Đứng thứ hai trong Top 3 Vuejs Library là vue-toastification.

Notification tất nhiên có nhiều loại, nhiều kiểu. Viết được Component Notification không khó. Tuy nhiên cần lưu ý, trigger và các vấn đề khác về thời gian hiển thị. Event back của Notification Component cũng là một vấn đề cần lưu tâm.

Top 3 Vuejs Library không thể không biết

4. Tham khảo

Ngoài Top 3 Vuejs Library được Kieblog liệt kê ở phía trên, còn nhiều Library hấp dẫn khác không nên bỏ qua. Tất cả được liệt kê dưới đây:

Thank for reading – Have nice Lunar New Year – Happy Coding!

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

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

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

Dự án chạy trên Ipad

Dự án chạy trên Ipad

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

Phát triển ứng dụng mobile hay ipad thời bấy giờ rất đang là thịnh. Người người dùng smart phone nhà nhà dùng ipad. Tụi Nhật họ còn đi trước nước mình khá lâu nên việc phát triển ứng dụng để chạy trên Ipad là bình thường, không có gì để bàn cãi.

  "Dân làm Product khác hoàn toàn 180 độ với dân làm outsourcing"
  10 bước để bắt đầu áp dụng kiểm thử tự động vào dự án

Từ sau khi vào công ty thì tôi đã trải qua hai dự án maintenance, maintenance là gì thì tôi đã giải thích ở phần 5 . Lần đầu tiên tôi được làm một cái dự án mà tạo mới từ đầu, không phải đọc source code của người khác viết nữa. Dự án lần này khách hàng yêu cầu công ty chúng tôi phát triển ứng dụng chạy trên hệ điều hành iOS (Ipad), về công nghệ sử dụng thì khách hàng họ muốn viết bằng jquery mobile, html và css. Lý do sử dụng cái này là vì họ đã có sẵn một hệ thống để build source code ra ứng dụng để chạy trên iOS.

Về javascript, jquery thì tôi khá là gà mờ, chứ đừng nói gì tới jquery mobile. Từ khi đi học đến khi đi làm cũng chỉ đụng sơ sơ, làm vài cái cơ bản, chứ chưa làm chuyên sâu, kinh nghiệm về mảng này chưa có nhiều. Dự án lần này vẫn là anh leader cũ quản lý, hiện tại tôi đang thuộc team này nên các dự án mà anh nhận về thì tôi đều phải chịu sự quản lý anh ấy. Như thường lệ buổi đầu tiên vẫn là kick off dự án, dự án chúng tôi không tính anh leader thì có bốn người, có một anh vào trước tôi sáu tháng và hai đứa đã thử việc xong vừa mới được nhận vào, một đứa nam và một đứa nữ. Anh leader phổ biến về dự án, những thông tin về khách hàng, về công nghệ sử dụng, về các thông tin liên quan khác của dự án. Lần này thì dự án sẽ có thêm một giai đoạn làm mockup màn hình. Có nghĩa là chúng tôi sẽ làm giao diện, chưa có xử lý nghiệp vụ bên trong, sau khi làm xong tất cả màn hình thì sẽ gửi lại cho bên phía Nhật họ xác nhận lại, cần chỉnh sửa gì thì sẽ chỉnh lại theo ý của họ. Sau khi xác nhận xong thì chúng tôi sẽ tiến hành coding nghiệp vụ của màn hình đó. Thiết kế chi tiết thì cũng đã được họ cung cấp sẵn cho chúng tôi, tài liệu thì hoàn toàn bằng tiếng nhật, cũng như những dự án khác thì sẽ có phiên dịch dịch lại sang tiếng việt.

Như đã nói thì bên Nhật họ sẽ cung cấp thiết kế chi tiết màn hình cho chúng tôi, trong thiết kế này họ sẽ mô tả toàn bộ các nghiệp vụ xử lý của các control bên trong màn hình. Nếu các bạn đã học quy trình phát triển phần mềm thì chắc các bạn cũng đã biết một quy trình thì bắt đầu từ việc lấy yêu cầu, thiết kế, code, test. Tuy nhiên tại sao những dự án tôi làm thì toàn bắt đầu từ giai đoạn code, test. Còn việc lấy yêu cầu, thiết kế tại sao lại không có. Vì những dự án đó chúng tôi nhận từ các công ty bên Nhật mà các công ty đó cũng là công ty phần mềm, họ sẽ lấy yêu cầu từ khách hàng (end user) của họ, rồi thiết kế. Sau đó sẽ đưa cho các nước như Việt Nam, Trung Quốc để gia công, do số tiền các nước này so với bên Nhật thì sẽ rẻ hơn. Chúng tôi gọi như vậy là oursource.

Trở lại với dự án thì việc đầu tiên chúng tôi sẽ lên layout cho toàn bộ màn hình, số lượng màn hình cũng gần chục cái. Mỗi người sẽ đảm nhận khoảng hai cái màn hình, trước giờ tôi chỉ code backend, còn frontend ngu lắm, trước kia làm thì toàn những màn hình đơn giản hoặc có những màn hình tương tự thì sẽ copy lại để chỉnh sửa. Lần này thì chúng tôi phải làm giao diện từ đầu nên để hoàn thành một màn hình thì tôi tốn khá nhiều thời gian. Trong team thì có một đứa con gái rất giỏi về khoản làm html, css, làm rất lẹ. Tôi đã từng hỏi nó vì sao lại chọn công nghệ thông tin thì nó trả lời là trước kia có thằng nào nói con gái học công nghệ thông tin ngu lắm, thế là nó theo học để chứng tỏ cho thằng kia biết :)).

Trong thời gian code giao diện cho màn hình thì khách hàng yêu cầu nâng version của jquery mobile, trước đó thì họ đã chỉ định sử dụng một version khác. Các màn hình làm thì đã gần xong hết, việc nâng version lên đã ảnh hưởng đến màn hình tôi đảm nhận, mà màn hình này thì đã làm xong rồi. Sau khi đưa version jquery mobile mới vào thì nó làm bể hết layout. Vì tôi đang sử dụng các class của jquery mobile để làm giao diện cho màn hình, lúc này tôi lại tốn thêm mớ thời gian nữa để sửa lại.

Sau khi làm xong các màn hình thì chúng tôi gửi source code cho bên khách hàng để họ xem, dĩ nhiên là code sẽ được build ra ứng dụng để chạy trên ipad, việc di chuyển giữa các màn hình, hiệu ứng di chuyển này nọ phải trơn tru hết, giao hàng cho khách mà có bug hay chạy không được thì rất là phiền toái.

Trong thời gian phía khách hàng họ xem màn hình mockup thì chúng tôi cũng tiến hành coding cho màn hình, ai đảm nhận code giao diện màn hình nào thì cũng code xử lý nghiệp vụ cho màn hình đó luôn. Ứng dụng này quản lý thông tin của những công trình, khi ứng dụng được chạy trên ipad thì những công trình sẽ được chụp hình lại và gửi về server. Lần này tôi được làm với API, từ trước giờ tôi chưa làm về cái này bao giờ. Về API là gì thì tôi xin giải thích thêm cho những bạn chưa biết, ở đây tôi không định nghĩa về nó mà chỉ nói về cách làm việc cho các bạn dễ hiểu. API thực chất là một web service, nơi mà nhận yêu cầu từ phía client và trả về thông tin mà client muốn lấy thông qua json (đối với restful web service). Ví dụ thực tế với dự án của tôi, khi ứng dụng của tôi chạy, tôi muốn lấy thông tin từ server để hiển thị ra Ipad, thì tôi sẽ xử dụng ajax để gửi một yêu cầu (request) đến một địa chỉ của server, tại server sẽ xử lý yêu cầu và trả về một chuỗi json cho ứng dụng của tôi để hiển thị ra màn hình, cơ chế của nó là như vậy.

Trở lại với màn hình của tôi, một màn hình khi hiển thị thông tin được lấy từ server về thì không phải là có mỗi một yêu cầu (request) mà là sẽ có nhiều yêu cầu(request) lên phía server để lấy dữ liệu về. Màn hình của tôi khi hiển thị ra thì sẽ hiển thị những thông tin trong dropdownlist, thông tin trong table… Việc gửi yêu cầu liên tục như vậy bằng ajax theo cơ chế bất đồng bộ như vậy thì khi một yêu cầu gửi lên server thành công thì lúc này thì mới thực hiện yêu cầu tiếp theo và cứ liên tục lặp lại cho đến khi tất cả các yêu cầu được thực hiện thành công. Sau khi coding xong thì vẫn là anh leader review lại source code, xem có gì phải chỉnh sửa hay không, code thừa, code thiếu, code không logic, code không đẹp. Nói chung khi nào được review thì vẫn phải sửa thôi, lần này tôi mắc một lỗi khá là nghiêm trọng đó là thiết kế có vấn đề mà không phát hiện ra, tới khi anh leader review thì gọi lại hỏi thì mới lòi ra nhiều vấn đề hơn tôi tưởng. Lúc này thì anh leader kêu tôi viết câu hỏi để đi hỏi khách hàng. Đây cũng là lần đầu tôi tự viết, sau khi viết xong thì anh leader cũng sẽ review lại, cảm thấy ổn thì sẽ đưa phiên dịch để dịch và gửi khách hàng. Tuy nhiên, đây là lần đầu tôi viết câu hỏi, như các bạn đã biết phần trước tôi đã nói anh leader quản lý tôi khó, tôi viết câu hỏi về câu cú không đúng ý anh ta, bắt tôi sửa lại cho đúng ý, ok tôi sửa lại, sau đó tôi lại đưa review, lại chưa đúng ý, tiếp tục bắt tôi sửa, sửa đến khi nào đúng ý thì thôi. Tôi sửa đâu bốn, năm lần gì đó. Việc viết câu hỏi đúng là một thảm họa và tốn thời gian kinh khủng, có những lúc không biết ghi như thế nào. Sau khi gửi cho khách hàng thì tùy theo thời gian thì khách hàng sẽ hồi đáp câu hỏi của bạn, có những câu hỏi khách hàng họ trả lời liền, có câu họ ngâm ba bốn ngày mới trả lời, lúc này thì deadline vẫn trôi và màn hình chưa được hoàn thành. May mắn thay là câu hỏi của tôi cũng được trả lời sớm và màn hình cũng được hoàn thành.

Khi toàn bộ coding xong hết thì đến giai đoạn viết testcase, và vẫn cách làm của anh leader như phần 5 tôi đã nói thì tôi vẫn tiếp tục trải qua những ngày tháng OT xuyên màn đêm không có hồi kết. Việc testing ở dự án này có khác một chút với những dự án khác là chúng tôi sẽ test trên Ipad, mà công ty chỉ cho được có một máy Ipad để test mà thôi. Sau khi test xong thì chụp ảnh màn hình kết quả lại sau đó copy vào máy tính và đưa vào file excel để làm bằng chứng. Tuy nhiên ở công ty này rất là bựa, tất cả các cổng USB của máy bàn đều được khóa hết, không thể cắm Ipad vào để chép hình sau khi test vào máy. Muốn mở phải xin phép IT, mà IT chỉ cho mở được có một máy, vì vậy test ở dự án này rất chi là cực khổ.

Và dự án thì cuối cùng cũng đã xong, như những bài trước thì sau khi kể về dự án thì tôi sẽ rút ra những bài học cho các bạn như sau.

1. Không phải thiết kế nào cũng đúng hoàn toàn, việc đọc và lý giải thiết kế rất là quan trọng để dự án của bạn hoàn thiện, tránh sau này khách hàng phải sửa tới sửa lui.
2. Khi bạn đặt câu hỏi thì bạn hãy đặt mình vào người đang được nhận câu hỏi. Chữ viết câu cú, hình ảnh phải đầy đủ, phải làm sao để khách hàng họ hiểu rõ nhất về nội dung mà bạn muốn hỏi. Đôi khi trong đầu bạn hiểu là bạn hỏi gì, tuy nhiên khách hàng họ lại không hiểu bạn muốn nói gì. Về việc tôi bị cho sửa đi sửa lại như vậy đó là việc hỏi không rõ ràng, tránh tình trạng trao đổi qua lại mà không bên nào hiểu nhau.

Các bạn nhớ like fanpage để theo dõi những bài viết mới nhất nhé.

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

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

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

Định vị bản thân thời suy thoái

Định vị bản thân thời kỳ suy thoái

Bài viết được sự cho phép của BQT Kinh nghiệm lập trình

Suy thoái kinh tế (là sự tụt giảm hoạt động kinh tế trên cả nước, kéo dài nhiều tháng – NBER Mỹ), thì bạn biết rồi đấy. Để lại nhiều hệ lụy, hậu quả, ảnh hưởng xấu tới hầu hết mọi người.

  "Những sản phẩm bạn làm được ra mới là thước đo chính xác cho năng lực của bạn"
  10 Bí quyết tuyển dụng giúp bạn tăng tỉ lệ nhận offer tức thì!

Chúng ta nên làm gì trong lúc này?

1. Xem xét lại nguồn lực, năng lực của bản thân.
Nghe thì cũng không thuyết phục lắm, nhưng bạn có thể kiếm mấy bài test mà làm (MBTI, DISC, bài test chuyên ngành của bạn, test IQ, EQ, AQ…) để nhìn nhận lại 1 số khía cạnh năng lực.

Kể cả hiện tại CV vẫn yên ổn, chưa cần đi tìm việc thì cứ thử tìm CV mới, apply, rải CV, kết nối job, xem có bên nào “ngắm” bạn không, và mức lương bạn kỳ vọng có được đáp ứng không? Đi Pv nếu có thời gian để xem tình hình công ty khác như thế nào? Thị trường lao động hiện tại ra sao?
Bạn sẽ thấy nhiều cái hay đấy, đừng để nước đến chân mới nhảy! Hãy để những người khác khách quan đánh giá về bạn.

2. Xem xét lại mục tiêu, career path, hướng đi nghề nghiệp của mình.
Có mục tiêu rõ ràng cụ thể chưa? Cần điều chỉnh gì không?
Hiện tại có đang đi đúng hướng không?
Điều chỉnh tốc độ của bạn như thế nào?

Định vị bản thân thời suy thoái

3. Nâng cao năng lực bản thân, rèn luyện kỹ năng mới, học kiến thức mới…
Cái này thì khỏi phải bàn, nhiều người nói rồi, chính tôi cũng viết nhan nhản ở page này và public ở Linkedin, FB của tôi rồi.

4. Tìm hiểu kiến thức về thị trường lao động, luật lao động, các luật, chính sách liên quan.
Rất có ích để bảo vệ quyền lợi của ta trong những thời kỳ rủi ro, bấp bênh nhé.
Nhiều ngành sẽ trụ vững sau suy thoái, nhiều ngành sẽ bùng nổ và nhiều ngành bão hòa, lụi dần.
Đi kèm đó là nhiều người sẽ được săn đón, nhiều người vẫn dậm chân tại chỗ, nhiều người khác dần bị đào thải…

5. Luôn luôn cập nhật tình hình Kinh tế, chính trị, xã hội trong nước và Quốc tế.
Bắt được thông tin sớm là người khôn ngoan. Và bạn sẽ được lợi, nhiều là khác.
Không hề ít ví dụ, về những người, nhóm người có thể kiếm được những khoản tiền kếch sù sau mỗi cuộc khủng hoảng. (Đến nỗi mà ta phải phát sợ với những con số của họ nữa cơ – Tự tìm đọc thêm nhé)

6. Bonus: Bạn nên tìm hiểu về các học thuyết của Lão Tử, Trang Tử, Triết học khắc kỷ, Bạn sẽ thấy sáng ra nhiều điều vô cùng. Mình đảm bảo điều này.
(Các Học thuyết khác mình chưa tiếp cận nên mình không thể đưa ra được. Nếu bạn biết hãy chia sẻ thêm)

Vân D.

kinhnghiemlaptrinh.com

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

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

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

Refresh trang web với Selenium webdriver

Refresh trang web với Selenium webdriver

Bài viết được sự cho phép của tác giả Tô Thị Vân Anh

Để refresh một trang web bạn thường hay dùng cách nào? Các cách nào cũng đều đơn giản lắm nè, nhấn vào cái biểu tượng xoay tròn ở trên thanh địa chỉ nhé, không thì chọn vào link trên thanh địa chỉ rồi nhấn enter, hay là nhấn nút F5 liên tùng tục :v

  Selenium là gì? Giới thiệu chi tiết về Selenium Automation Testing
  Làm việc với table trong Selenium Webdriver

À đấy là khi chúng ta làm bằng tay, còn với Selenium webdriver thì nó sẽ làm như thế nào? Có thể dùng được những cách trên kia không? Tất nhiên, tương tự thôi, bạn không cần phải code gì đặc biệt đâu, chỉ cần gọi những hàm có sẵn mà Selenium đã cho mình rồi thôi 😀 Mấy cái này bạn gõ tìm kiếm nhẹ nhàng trên Google cũng ra cả lố.

Refresh trang web với Selenium webdriver

Hôm nay mình sẽ tổng hợp lại mấy cách mà bạn có thể sử dụng để refresh lại một trang web với Selenium webdriver nhé.

1. Sử dụng method navigate.refresh()

driver.get("https://accounts.google.com/SignUp"); 

driver.navigate().refresh();

2. Sử dụng method navigate.to()

driver.get("https://accounts.google.com/SignUp"); 

driver.navigate().to(driver.getCurrentUrl());

3. Sử dụng method get()

driver.get("https://accounts.google.com/SignUp"); 

driver.get(driver.getCurrentUrl());

4. Sử dụng method sendkeys.Keys

driver.get("https://accounts.google.com/SignUp");

//ta có thể sử dụng textbox bất kỳ nào trên trang web, ở đây của mình là first name.
driver.findElement(By.id("firstName")).sendKeys(Keys.F5);

5. Sử dụng method sendKeys() với tham số là ASCII code của phím F5.

driver.get("https://accounts.google.com/SignUp");

driver.findElement(By.id("firstName")).sendKeys("\uE035");

6. Sử dụng class Action

Actions actions = new Actions(driver);

actions.keyDown(Keys.CONTROL).sendKeys(Keys.F5).perform();

Các bạn thoải mái áp dụng và để lại ý kiến đóng góp cho mình ở phần bình luận phía dưới nhé.

Không liên quan, nhưng mà hình như các bài cứ ngày càng bị ngắn đi thì phải. 😀 Không phải là do lười đâu, mà do vì cái giọng văn của mình nó không được cuốn hút như người ta, mặc dù tập tành viết lách cũng được đến gần 3 quý rồi, thế nhưng mà hình như chưa cải thiện được mấy. Chẳng hi vọng nữa, vì có hi vọng mà không làm gì thì cũng không có gì cải thiện được cả. Mà sẽ là bắt tay vào làm luôn, mình tin là viết đến bài thứ 100 thì chất lượng nó sẽ khác. Kaka.

Không nhân dịp gì cả, chỉ là do bài này ít nội dung quá nên lan man tí cho dài dài. Với cả đôi khi thì chúng ta sẽ gặp phải những bế tắc, mình bây giờ là đang trong cái mớ bế tắc đó đây. Loay hoay mãi chưa thoát ra được. Thôi nghe nhạc nhé.

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 Developer hấp dẫn trên TopDev

Windows Terminal sẽ được cập nhật UI cho phần cài đặt

Windows Terminal sẽ được cập nhật UI cho phần cài đặt

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

Tuy luôn là hệ điều hành máy tính phổ biết nhất trên thế giới nhưng có một sự thật rằng, Windows 10 không được các lập trình viên sử dụng nhiều như các đối thủ macOS và Linux.

Nguyên nhân vô cùng đơn giản, Windows từ xưa tới nay chỉ có Command Prompt (CMD) và Windows PowerShell chứ không hỗ trợ bashshell – một trong những công cụ quan trọng của các lập trình viên – giống các hệ điều hành sử dụng nhân Linux như macOs, Ubuntu, Elementary OS,…

  10 điều bạn có thể làm với Linux mà bạn không thể làm với Windows
  40 phím tắt dành cho người dùng Windows

Bạn nào có học về lập trình, server thì sẽ hiểu vấn đề này nghiêm trọng ra sao, cái này mình sẽ giải thích chi tiết hơn ở một bài viết khác cho các bạn.

Windows Terminal sẽ được cập nhật UI cho phần cài đặt

Và để bắt kịp xu thế, Microsoft đã tung ra Windows Subsystem for Linux (WSL) và ứng dụng Windows Terminal để giúp tương tác dễ dàng hơn với WSL.

Windows Terminal nhận được khá nhiều đánh giá tích cực đến từ giới lập trình nói riêng và đa số người dùng nói chung. Và mới đây thì Microsoft đã hé lộ những hình ảnh đầu tiên về giao diện đồ họa (UI) cho phần cài đặt của ứng dụng này.

#1. Windows Terminal sắp có giao diện đồ họa cho phần cài đặt

Windows Terminal là một phần mềm được tạo ra bởi Microsoft, cho phép người dùng làm việc với WSL, PowerShell và Command Prompt ngay trong một cửa sổ phần mềm.

Bên cạnh đó, nó cũng nâng cao trải nghiệm sử dụng với tính năng mở nhiều tab, shell, phím tắt và một giao diện người dùng được thiết kế theo phong cách fluent design vô cùng đẹp mắt và cuốn hút.

Có được điều này là nhờ Windows Terminal sử dụng công nghệ Hardware Accelerated GPU, DirectWrite/ DirectX để render các ký tự trên màn hình nên nó thực sự đẹp hơn Command Prompt hay PowerShell rất nhiều.

Windows Terminal sẽ được cập nhật UI cho phần cài đặt

Khác với những ứng dụng khác của Microsoft, Windows Terminal là một ứng dụng mã nguồn mở và được đăng trên GitHub.

Link tại đây: https://github.com/microsoft/terminal

Nghĩa là mọi người đều có có được mã nguồn của ứng dụng, đề xuất thay đổi sửa chữa các chức năng, đóng góp ý kiến cho đội ngũ phát triển phần mềm của Microsoft để ứng dụng này tốt hơn.

Mình cũng đã có hướng dẫn cài đặt Windows Terminal chi tiết ở trên blog rồi, các có thể xem lại bài viết đó tại đây nha !

Windows Terminal sẽ được cập nhật UI cho phần cài đặt

Quay trở lại với vấn đề chính, ngày 22/1/2021 vừa qua, Kayla Cinnamon – Giám đốc chương trình (Program Manager) của Microsoft đã hé lộ những hình ảnh đầu tiên về giao diện người dùng cho phần cài đặt của ứng dụng Terminal mới trên trang Twitter cá nhân của mình.

Nếu như bạn đã từng hoặc đang dùng Windows Terminal thì sẽ đều biết, mọi cài đặt của ứng dụng này đều được lưu trữ và chỉnh sửa thông qua một tập tin có tên settings.json.

Bạn có thể mở nó lên bằng tổ hợp phím Ctrl + , ở cửa sổ Windows Terminal hoặc click vào dấu mũi tên chọn Settings.

File này chứa tất cả những cài đặt về giao diện, profile shell, thiết lập các phím tắt và nhiều thứ khác nữa, và để sửa được thì bạn cần có chút kiến thức về lập trình còn không buộc phải lên Google hoặc diễn dàn hỗ trợ để tìm kiếm mà thôi.

Thực tế là nó cũng không quá phức tạp và đều có hướng dẫn ở ngay trong file settings.json rồi !

Windows Terminal sẽ được cập nhật UI cho phần cài đặt

Còn ở trên phiên bản mới nhất của Terminal, khi bạn mở Windows Settings thì phần cài đặt sẽ xuất hiện như một tab thông thường của Windows Terminal thay vì mở file settings.json như trước đây.

Thiết kế giao diện thì hoàn toàn tương tự của Windows Settings và những ứng dụng khác của Windows 10, mục đích là để tạo cảm giác quen thuộc cho người dùng.

Nói chung thì Microsoft vẫn đang nỗ lực mang lại cho người dùng một trải nghiệm sử dụng liền mạch và đồng bộ hóa về mặt giao diện.

Vẫn thiết kế với phong cách Fluent Design : thanh điều hướng được làm trong suốt, các góc cạnh của cửa sổ nay đã được bo tròn hơn thay vì vuông vức như trước kia.

Và mình để ý thấy tất cả những ứng dụng mới của Microsoft đều như vậy, tất nhiên mình không thích điều này lắm.

Windows Terminal sẽ được cập nhật UI cho phần cài đặt

Với phần cài đặt mới này, bạn sẽ có thể nhanh chóng truy cập và thay đổi tất cả các thiết lập như giao diện, profile mặc định, màu sắc, định dạng văn bản theo ý muốn với một thanh điều hướng ở bên trái cửa sổ cài đặt.

Phần thiết lập các profile Terminal, PowerShell, WSL hay Azure sẽ được tác ra riêng và nhờ giao diện đồ họa thì việc chỉnh sửa nay trở nên vô cùng dễ dàng và nhanh chóng.

Windows Terminal sẽ được cập nhật UI cho phần cài đặt

Được cập nhật giao diện đồ họa không có nghĩa là file settings.json ban đầu sẽ biến mất, tuy bạn không cần phải chỉnh sửa trực tiếp trong file này nữa nhưng nó vẫn chịu trách nhiệm lưu tất cả các thiết lập mà bạn đã thay đổi bằng giao diện đồ họa.

Nhưng có vẻ phần cài đặt với giao diện này phù hợp với người mới làm quen với Windows Terminal hơn, vì nó rất trực quan và dễ sử dụng.

Còn nếu bạn là một người đã có kinh nghiệm thì có lẽ cũng không cần thiết với bạn lắm, nhưng nếu cảm thấy việc thiết lập bằng file settings.json tiện hơn thì bạn cứ áp dụng thôi, tội gì.

Cách mở file settings.json rất đơn giản, nếu để ý bạn sẽ thấy ở dưới cùng thanh điều hướng bên trái có dòng Open JSON file => bạn bấm vào đó để mở file settings.json và chỉnh sửa như bình thường.

Ngoài ra, bạn có thể chỉnh sửa trực tiếp file mà không cần mở Windows Terminal bằng cách truy cập vào thư mục bên dưới nha.

%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\ 

Windows Terminal sẽ được cập nhật UI cho phần cài đặt

Tất nhiên, mọi thứ mình chia sẻ ở trên đây đều chỉ mới có trên phiên bản Windows Terminal thử nghiệm nội bộ chứ không phải bản thử nghiệm có trên Microsoft Store.

Vậy nên có lẽ chúng ta phải chờ một khoảng thời gian khá lâu nữa mới có thể trải nghiệm được. Dù sao mình cũng rất mong đến ngày đó 😛

#2. Lời kết

Như vậy là mình và các bạn đã cùng dạo một vòng về giao diện UI mới trong phần cài đặt Windows Terminal rồi.

Nó sẽ rất hữu ích và phù hợp với những anh em mới tiếp cận ứng dụng này, còn người dùng lâu năm thì mình không chắ có hữu ích hơn cho họ hay không, nhưng dù sao, giao diện người dùng mới này vẫn rất tuyệt phải không các bạn.

Bạn thấy như thế nào về diện mạo mới của Windows Terminal? Đừng quên để lại bình luận bên dưới để chia sẻ và thảo luận với mọi người nhé.

CTV: Nguyễn Thanh Tùng – Bài viết gốc được đăng tải tại blogchiasekienthuc.com

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

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

Tại sao PHP lại chậm? Vậy có những cách nào để tối ưu PHP?

Tại sao PHP lại chậm? Vậy có những cách nào để tối ưu PHP?

Bài viết được sự cho phép của tác giả Lê Chí Dũng

Một thời gian làm việc trên PHP mình nhận thấy rằng về phương diện sử dụng là rất tốt và dễ dàng sử dụng viết sau cũng chạy kiểu dữ liệu tự do nhưng về perfomance thì thật sự chưa tốt. Chính vì thế sau một thời gian sử dụng sẽ thấy perfomance giảm rõ rệt, tuy nhiên ta cũng có một số cách để cải thiện vấn đề này.

Tại sao PHP lại chậm?

Để trả lời vấn đề này ta sẽ quay lại cơ chế hoạt động cơ bản của ngôn ngữ server này. PHP là ứng dụng execute từ PHP script sang ngôn ngữ máy (Assembly -> mã nhị phân) để xử lý mà trước khi đến execute thì phải qua bộ core của PHP để parse PHP script và compiler nửa chính vì qua nhiều bước để đến execute nên nếu quá nhiều xử lý thì sẽ rất chậm với lại web hiện nay thì lượng truy cập tăng rất nhanh nên chậm là điều khó tránh khỏi.

Tại sao PHP lại chậm? Vậy có những cách nào để tối ưu PHP?

Vậy có những cách nào để tối ưu PHP?

1. Dùng kết hợp Cache OpCode (APC Cache) và Cache data (Memcached, Redis,…)

Cache Opcode điển hình là APC Cache, Opcache. Nó là cache file được tạo ra và lưu trên ổ đĩa, sau khi compile xong hiểu nôm na là thay thế 2 bước (Parse + Compile) thay vì phải qua 3 bước nặng nề để chuyển PHP thành ngôn ngữ máy để chạy thì mình chỉ tốn 2 bước nhẹ nhàn lấy cache ra chuyển thành ngôn ngữ máy để chạy. Nên tốc độ sẽ nhanh hơn đến 50%.

Tại sao PHP lại chậm? Vậy có những cách nào để tối ưu PHP?

Cache data điển hình là Memche, memched, redis,… Nó là cache data được lưu trên Ram (bộ nhớ tạm) sau khi truy vấn đến Database. Nếu ai dùng PHP với database thì sẽ hiểu.

Tìm việc làm PHP đãi ngộ tốt trên TopDev

2. Dùng HHVM

HHVM được viết tắt từ “HipHop Virtual Machine” là một nền tảng xử lý PHP (tương tự như PHP-FPM) được phát triển bởi Facebook. HHVM giúp tăng tốc PHP nhờ sử dụng máy xử lý ảo dựa trên trình biên dịch just-in-time (JIT).

Cơ chế hoạt động của HHVM khác nhiều so với PHP-FPM.

Theo cơ chế của PHP-FPM (VM):

Parsing toàn bộ PHP script khủng lồ -> Compile toàn bộ PHP script đã parse -> Execute toàn bộ PHP script đã compile

=> Vì phải xử lý lượng lớn script nên tốc độ khá ì chờ xử lý lớn.

Theo cơ chết JIT trong HHVM:

Parsing từng PHP script nhỏ -> Compile từng PHP script đã parse -> Execute từng PHP script đã compile.

=> Vì xử lý lượng script nhỏ nên tốc độ nhanh.

Tuy nhiên ở PHP7 thì PHP7-FPM đã có nhiều cải tiến theo cơ chế HHVM nên tốc độ khá nhanh.

  10 Frameworks tốt nhất hiện nay cho PHP
  11 cách tăng tốc nhanh cho WordPress bằng file wp-conig.php

3. Dùng framework Yaf Framework hoặc Phalcon PHP Framework

Yaf Framework hoặc Phalcon là PHP Framework được viết bằng ngôn ngữ lập trình C, sau đó được biên dịch thành một PHP extension(thành phần mở rộng cho PHP).

Tại sao PHP lại chậm? Vậy có những cách nào để tối ưu PHP?

Tổng kết

Từ các cách tối ưu trên bạn có thể phối hợp tất cả lại với nhau để tối ưu từ một hệ thống nền PHP tồi tàn chậm chạp trở nên nhanh như tia chóp.

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

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

Xem ngay những tin đăng tuyển dụng IT mới nhất trên TopDev

Tổng hợp một số cách mở 1 link trong tab mới với Selenium Webdriver

Tổng hợp một số cách mở 1 link trong tab mới với Selenium Webdriver

Bài viết được sự cho phép của tác giả Tô Thị Vân Anh

Trong bài viết này chúng ta sẽ cùng nhau xem lại một vài cách để thực hiện mở 1 link trong tab mới, trong tiếng anh là “Open a link in new tab”, quá quen thuộc khi mà chúng ta nhấn chuột phải ở trang web đang làm việc để mở đường dẫn trong một tab khác. Và vì thế nên là mình sẽ đi vào giải quyết vấn đề luôn mà không nói lan man nữa. 😀

  JavaScript Executor trong Selenium Webdriver
  Selenium là gì? Một số kinh nghiệm làm việc với Selenium

1.  Sử dụng javascript với cú pháp như sau:

((JavascriptExecutor) driver).executeScript
                   ("window.open('http://accounts.google.com/','_blank');");

Muốn mở đến đường dẫn nào thì bạn chỉ cần thay đường link trên bằng 1 đường dẫn tương ứng khác là được. Nhưng mà cái này sẽ gặp vấn đề khi chạy với trình duyệt IE – IE nó sẽ hiện một dòng hỏi bạn là có muốn mở tab khác hay không, nên là sẽ không tiện nếu như mà dùng cách này với IE. :3

2. Sử dụng cách dưới này 😀

Cú pháp như sau:

String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,Keys.RETURN);
driver.findElement(By.linkText("urlLink")).sendKeys(selectLinkOpeninNewTab);

Hoặc tách bước ở dòng thứ 2 ra như này thì sẽ sáng sủa hơn:

WebElement urlLink = driver.findElement(By.linkText("Overview"));
String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,Keys.RETURN);  
urlLink.sendKeys(selectLinkOpeninNewTab);

Với cách này thì chạy ok với trình duyệt Firefox, Chrome nhưng không focus vào tab mới mở ra – còn trên trình duyệt IE thì bật ra cửa sổ mới – cũng “don’t know why!” 😀

Để nó focus sang cửa sổ mới thì các bạn thêm đoạn code phía dưới này vào, và chúng ta có được đoạn code đầy đủ như này nhé:

//Linktext của đường dẫn mới
WebElement urlLink = driver.findElement(By.linkText("Overview")); 

//Mở đường dẫn mới ở một tab mới
String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL, Keys.RETURN); 
urlLink.sendKeys(selectLinkOpeninNewTab);

//Focus sang tab mới
ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles()); 
driver.switchTo().window(tabs.get(1));

3. Sử dụng robot class:

Như chúng ta đều đã nghe nói đến Robot class trong Selenium rồi, đơn giản dễ hiểu thì robot được sử dụng để giả lập các sự kiện liên quan đến thao tác trên bàn phím, hay các thao tác click của chuột, nên là với trường hợp này ở đây, ta có thể tưởng tượng như đang làm bằng tay và giả lập cho code của chúng ta cũng sẽ làm như vậy nhờ Robot. Đầu tiên nhấn Control + t để mở tab mới, sau khi tab mới được mở ra thì ta sẽ chuyển focus chuột vào tab mới này và mở link mới ở tab đó thôi.

Các bạn có thể tham khảo đoạn code phía dưới để hình dung rõ hơn nhé! Ban đầu dùng đoạn code dưới này để chạy thì nó chỉ chạy được đến bước là mở tab mới có focus vào tab mới này, nhưng không thể nào mở được cái link mới, không thể hiểu tại sao dù đã google tìm rất nhiều thì code cũng chỉ có vậy – vấn đề đối với cả FF và Chrome. :3

Chạy đi chạy lại nhiều lần, bỗng dưng vẫn đoạn code đó thì Chrome lại được, và mình nhanh chóng thử lại với FF thì lại không được, vẫn chết đoạn get(index), quay lại với Chrome thì lại không chạy được nữa, lúc này mới nhớ ra nhét thử sleep() vào, thì lại ngon lành cho cả hai! 😀 – Không thể tin được =))

//Ra lệnh cho rô-bốt mở tab mới      
Robot r = new Robot();                           
r.keyPress(KeyEvent.VK_CONTROL);  
r.keyPress(KeyEvent.VK_T);  
r.keyRelease(KeyEvent.VK_CONTROL);  
r.keyRelease(KeyEvent.VK_T);  
   
//Đoạn này để nhảy sang tab mới 
ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles()); 
driver.switchTo().window(tabs.get(1)); 

//Sleep thần thánh
Thread.sleep(2000);

//Mở link mới trên tab mới
driver.get("https://jmeter.apache.org/usermanual/index.html");

4.    Sử dụng class Action

Mình đã test trên IE11, FF58,59 và Chrome 66 , với FF, Chrome thì không chạy được, mà đối với IE thì nó lại mở ra một cửa sổ mới, không hiểu tại sao. :3

Dưới đây là đoạn code các bạn có thể tham khảo và góp ý cho mình:

WebElement link = driver.findElement(By.linkText("Installing Apache JMeter in Windows XP"));
Actions act = new Actions(driver);
act.contextClick(link).sendKeys(Keys.ARROW_DOWN).
                       sendKeys(Keys.ARROW_DOWN).
                       sendKeys(Keys.ENTER).build().perform();

5. Bonus thêm 1 cách khác – cách này thì chạy ngon…

Đầu tiên sử dụng Javaexecutor để mở 1 tab trống mới,

((JavascriptExecutor)driver).
executeScript(“window.open(‘about:blank’, ‘-blank’)”);

Sau đó, thực hiện nhảy sang tab mới với cú pháp:

 ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
 driver.switchTo().window(tabs.get(1));

Và cuối cùng là dán cái link mới vào cái tab này là được:

driver.get("https://jmeter.apache.org/usermanual/index.html");

Và trên đây là những cách mà mình đã đào bới được trên google, phát hiện ra là những cái này khá là phụ thuộc vào trình duyệt mà chúng ta sử dụng vì thế các bạn có thể linh động với trình duyệt để lựa chọn các cách cho phù hợp nhé!

Bài viết tham khảo và tổng hợp từ tè le các nguồn thu thập được trên internet điển hình là từ stackoverflow và nhiều trang khác nữa 😀

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 Developer hấp dẫn trên TopDev

Chuẩn bị gì khi phỏng vấn vị trí kỹ sư kiểm thử phần mềm?

Chuẩn bị gì khi phỏng vấn vị trí kỹ sư kiểm thử phần mềm?

Bài viết được sự cho phép của vntesters.com

Phỏng vấn là việc không thể tránh khỏi, do đó hãy chuẩn bị cho thật tốt các bạn nhé. Vậy thực sự là cần chuẩn bị những gì? Dưới đây là kinh nghiệm của riêng mình, các bạn góp ý thêm nhé.

  10 tuyệt kĩ từ trang web nhanh nhất thế giới (phần 1)
  3 workhack để duy trì năng lượng tích cực tại công sở cho kĩ sư phần mềm

Chuẩn bị cho cuộc phỏng vấn!!

Điều hiển nhiên là bạn cần phải có kiến thức về kiểm thử phần mềm, bên cạnh đó bạn cũng cần cập nhật các công cụ hỗ trợ kiểm thử và xu hướng mới nhất trong ngành công nghiệp kiểm thử phần mềm.

Hãy nhớ rằng, đây là một lĩnh vực dễ thay đổi, do đó, những điều mà bạn đã học trong chương trình đào tạo có thể đã trở nên lỗi thời vào thời điểm phỏng vấn.

Kiểm tra kỹ lưỡng trước khi xuất hiện trong các cuộc phỏng vấn và tạo ra một sơ yếu lý lịch/CV tốt, sẽ giúp bạn gây ấn tượng tốt cho nhà tuyển dụng.

Chuẩn bị trước câu trả lời cho những câu hỏi mà bạn rất có thể sẽ phải đối mặt.

Những câu hỏi này không thể đảm bảo sự thành công của bạn trong phỏng vấn, nhưng chắc chắn có thể cung cấp cho bạn một cái nhìn tổng quát về một cuộc phỏng vấn có thể sẽ như thế nào.

Thử nghiệm trên sản phẩm (On Product Testing)

  • Các trường hợp kiểm thử (test cases) để kiểm thử sản phẩm (project testing)?
  • Đâu là những lợi thế khi kiểm thử sản phẩm của công ty so với kiểm thử như là dịch vụ cho công ty khác?
  • Sự khác biệt giữa kiểm thử dựa trên sản phẩm (product based testing) và kiểm thử dựa trên dự án (project based testing)?
  • Kế hoạch kiểm thử (test plan) là gì? Hãy đưa ví dụ kế hoạch kiểm thử cho màn hình đăng nhập?
  • Hãy phân biệt kiểm thử 1 sản phẩm và kiểm thử ứng dụng web (web-based application) bất kỳ?
  • Sự khác biệt giữa web based testing và client server testing?
  • Giải thích ý nghĩa của mô hình thác nước trong việc phát triển một sản phẩm phần mềm.

Về đảm bảo chất lượng (On Quality Assurance)

  • Làm thế nào để đảm bảo chất lượng của sản phẩm phần mềm?
  • Bạn sẽ làm gì nếu bạn không có đủ thời gian để kiểm thử?
  • Các hoạt động bình thường của các chuyên gia bảo đảm chất lượng là gì?
  • Sự khác biệt giữa high level design và low level design?
  • Sự khác biệt giữa QC & QA?
  • Các thành phần chính của nguy cơ (risk) là gì?
  • Khi nào bạn nói dự án kiểm thử của bạn hoàn thành? Nêu tên các yếu tố.
  • Các thủ tục (procedures) để kiểm tra nút tìm kiểm của một ứng dụng web thủ công (manually) và sử dụng công cụ kiểm thử tự động (automation test tool)
  • Hãy giải thích: Release Acceptance Testing, Forced Error Testing, Data Integrity Testing, System Integration Testing.
  • Kiểm tra khả năng tương thích (compatibility testing) trên IE & FF khác nhau như thế nào?

Kịch bản thử nghiệm (On Testing Scenarios)

  • Làm thế nào để bạn biết rằng tất cả các kịch bản thử nghiệm được bao phủ (covered)?
  • Hãy giải thích: kịch bản thử nghiêm (Testing Scenario), kiểm thử dựa trên kịch bản (Scenario based testing). Đưa ví dụ.
  • Sự khác biệt giữa kịch bản và trường hợp kiểm thử (scenario vs test case)?
  • Sự khác biệt giữa smoke testing và sanity testing?
  • Giải thích end to end scenario

Kiểm thử tự động (On Automated Testing)

  • Bạn biết những công cụ kiểm thử tự động nào?
  • Mô tả vài vấn đề/khó khăn mà bạn đã gặp phải khi làm việc với công cụ kiểm thử tự động
  • Thủ tục để bạn lập kế hoạch kiểm thử tự động là gì?
  • Ý kiến của bạn về quan điểm “kiểm thử tự động nâng cao hiệu quả kiểm thử phần mềm”
  • Hãy nêu và giải thích những thuộc tính chính của kiểm thử tự động.
  • Bạn có nghĩ rằng kiểm thử tự động có thể thay thế kiểm thử thủ công?
  • Làm thế nào để 1 công cụ kiểm thử tự động được lựa chọn?
  • Làm thế nào để bạn đánh giá các công cụ kiểm thử tự động?
  • Theo bạn lợi ích chính của kiểm thử tự động là gì?
  • Mô tả những vấn đề chung của kiểm thử tự động
  • Những hoạt động kiểm thử nào bạn cần tự động hoá?
  • Những kỹ năng cần thiết cho kiểm thử tự động là gì

Theo dõi Lỗi (On Bug Tracking)

  • Có lỗi nào có mức độ nghiêm trọng cao nhưng ưu tiên thấp không (và ngược lại, mức độ nghiêm trọng thấp nhưng độ ưu tiên lại cao)?
  • Giải thích vòng đời của lỗi (bug life cycle)
  • Các loại lỗi mà ta thường gặp trong bất kỳ 1 dự án phần mềm là gì?
  • Bạn có ý gì khi nói “Tái tạo một lỗi” (reproduce a bug)? Bạn sẽ làm gì, nếu lỗi này không tái tạo được?
  • Bạn viết tiêu đề lỗi và mô tả lỗi như thế nào?
Các bạn có thể đọc phần trả lời tham khảo ở đây.
Hãy nhớ rằng, kiểm thử phần mềm là một lĩnh vực rộng lớn và thực sự là không thiếu những câu hỏi có thể được hỏi để phỏng vấn ứng viên. Vậy nên hãy nâng cao kiến thức của mình, chuẩn bị cẩn thận, thể hiện chính mình và bạn sẽ toả sáng. Chúc các bạn thành công!
Bài viết gốc được đăng tải tại vntesters.com
Có thể bạn quan tâm:
Xem thêm Việc làm Developer hấp dẫn trên TopDev

5 lý do sinh viên IT nên học Tiếng Anh ngay lập tức

5 lý do sinh viên IT nên học Tiếng Anh ngay lập tức

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

Trong những năm trở lại đây, công nghệ thông tin đang dần trở thành một trong số ngành học “hot” nhất, được nhiều bạn học sinh quan tâm và theo học nhất… Cũng đúng thôi, thời đại của công nghệ mà lại.

ly-do-sinh-vien-it-nen-hoc-tieng-anh (1)

Qua những số liệu thống kê thì chúng ta có thể thấy, một trong những nguyên nhân hàng đầu khiến các bạn trẻ đổ xô vào học công nghệ thông tin đó chính là: Cơ hội việc làm nhiều và lương ngành này tương đối cao so với mặt bằng chung.

Nhưng tất nhiên, bất cứ ngành học nào cũng có những ưu và nhược điểm riêng. Ngành IT này cũng vậy. Nếu bạn không trang bị cho mình những kỹ năng khác nữa thì bạn cũng sẽ khó tiến xa hơn được.

  "Ngành IT này học rất dễ, tài liệu ko bao giờ thiếu. Quan trọng là phải có đam mê và chịu cày"
  Mẫu CV IT tiếng Anh hấp dẫn nhà tuyển dụng

Vâng, và một trong số đó chính là khả năng ngoại ngữ của bạn. Ở trong bài viết này mình sẽ chia sẻ với các bạn 5 lý do cực kỳ thuyết phục để bạn học ngoại ngữ (tiếng Anh) ngay lập tức, và ngay bây giờ…

#1. Để đọc hiểu tài liệu

Ở mức cơ bản nhất, các bạn nên trang bị cho mình khả năng đọc hiểu tài liệu tiếng Anh.

ly-do-sinh-vien-it-nen-hoc-tieng-anh (2)

Các bạn không cần phải Ielts 7, 8 chấm, vì để đọc hiểu tài liệu chuyên ngành thì phần đa các bạn sẽ gặp các từ ngữ chuyên ngành mà thôi.

Thậm chí là các bạn sẽ không có thời gian để đọc hết một tài liệu từ a-z, từng chữ một đâu, hãy học cách đọc nhanh và đọc ý chính của file tài liệu đó.

Vậy tại sao lại là tài liệu tiếng Anh mà không phải là một ngôn ngữ khác? Vâng, câu trả lời đơn giản vì hầu hết các kiến thức công nghệ nếu có tài liệu thì đều được viết bằng tiếng Anh để mọi người trên thế giới có thể dễ dàng tiếp cận. Ngôn ngữ chung mà !

Việc đọc hiểu được tài liệu tiếng Anh sẽ giúp bạn tiếp thu kiến thức một cách chính thống thay vì đọc qua các bản dịch tiếng Việt, có thể tồn tại nhiều sai sót.

Hơn nữa tài liệu tiếng Việt cũng rất ít so với tài liệu tiếng Anh. Vì dân số Việt Nam có 100 triệu người thôi, còn dân số sử dụng Tiếng Anh thì cả tỷ người. Vì vậy muốn thực sự phát triển thì ngôn ngữ Tiếng Anh là bắt buộc phải có..

#2. Cơ hội để làm việc với các doanh nghiệp nước ngoài

ly-do-sinh-vien-it-nen-hoc-tieng-anh (3)

Khi bạn đã có thể đọc hiểu tài liệu tiếng Anh rồi, nếu bạn có thêm khả năng giao tiếp nữa (tất nhiên là cũng không cần quá xuất sắc) thì cơ hội làm việc với các doanh nghiệp nước ngoài của bạn là khá cao.

Với nền kinh tế thị trường như hiện nay, việc hội nhập và hợp tác với doanh nghiệp nước ngoài ngày càng nhiều. Đơn cử như việc nếu bạn không biết tiếng Anh thì bạn chỉ có thể làm việc trong nước. Bạn không có lựa chọn nào khác.

Còn nếu bạn biết tiếng Anh và doanh nghiệp bạn làm việc là doanh nghiệp nước ngoài thì mình đảm bảo cơ hội đi onsite của bạn là rất lớn.

Chính vì vậy, trong quá trình tuyển dụng các doanh nghiệp nước ngoài hoặc liên doanh với nước ngoài họ thường ưu tiên các ứng viên có khả năng ngoại ngữ hơn.

#3. Cơ hội đi du học và giành học bổng nước ngoài

ly-do-sinh-vien-it-nen-hoc-tieng-anh (4)

Du học và học bổng nước ngoài có lẽ là mơ ước của nhiều bạn sinh viên nói chung và các bạn sinh viên học công nghệ thông tin nói riêng.

Đơn giản vì du học giúp chúng ta có thêm những trải nghiệm mới, được học tập và phát triển ở những nền giáo dục tiên tiến hơn, chất lượng hơn.

Nhưng để được đi du học, đặc biệt là với các bạn sinh viên công nghệ thông tin thì yêu cầu về ngoại ngữ lại càng phải cao hơn nữa.

Các bạn không những phải giỏi về chuyên ngành (vốn dĩ đã rất khó) mà khả năng ngoại ngữ cũng phải tương đối tốt mới đủ điều kiện để đi du học hoặc nhận học bổng.

Không đơn thuần là kỹ năng đọc tài liệu và khả năng giao tiếp, mà bạn sẽ phải có thêm cả kỹ năng viết tốt thì mới có thể theo học được các chương trình nước ngoài.

Đặc biệt nhiều bạn sinh viên còn tham gia viết papers – là các bài báo khoa học thì yêu cầu về ngoại ngữ và chuyên ngành lại càng phải chuyên sâu hơn nữa.

#4. Cơ hội được tiếp cận với các công nghệ mới

ly-do-sinh-vien-it-nen-hoc-tieng-anh (5)

Công nghệ mới luôn là một trong những điều mà các bạn học công nghệ rất quan tâm.

Khi một công nghệ ra đời thì đồng nghĩa với việc nó sẽ giải quyết một bài toán nào đó mà các công nghệ trước đó chưa giải quyết được hoặc giải quyết chưa tốt.

Vậy bài toán cần giải ở đây: ai là người hiểu và áp dụng công nghệ đó nhanh hơn thì sẽ có nhiều cơ hội hơn.

Và tất nhiên rồi, công nghệ nào cũng có tài liệu – sách hướng dẫn và nó đều bằng tiếng Anh, không chệch đi đâu được.

Khi đó, nếu bạn biết tiếng Anh bạn sẽ tiếp cận công nghệ đó nhanh hơn, làm chủ công nghệ và chiếm ưu thế trên thị trường. Điều này vô cùng quan trọng nhé các bạn !

#5. Cơ hội nhận lương ngàn $

ly-do-sinh-vien-it-nen-hoc-tieng-anh (6)

Và cuối cùng là câu chuyện về tiền lương, cũng là một trong những nguyên nhân chính mà nhiều bạn trẻ chọn học ngành IT này.

Vì thực tế, lương cao là một trong những động lực lớn nhất giúp chúng ta phấn đấu. Nhưng lương cao đồng nghĩa với việc bạn phải đem lại nhiều giá trị hơn cho doanh nghiệp.

Nếu bạn để ý, trong các bài tuyển dụng của doanh nghiệp thì họ thường ưu tiên các ứng viên có ngoại ngữ và sẵn sàng đưa ra một mức lương nhỉnh hơn so với các ứng viên không có ngoại ngữ.

Vì họ hiểu rằng, khi bạn có ngoại ngữ thì khả năng cao là bạn sẽ đem lại nhiều giá trị cho công ty của họ.

#6. Kết luận

Okay, trên đây là 5 lý do khiến sinh viên IT nên học tiếng Anh ngay lập tức. Không chỉ sinh viên IT không đâu, trong thời buổi công nghệ này, nếu bạn không biết tiếng Anh thì sẽ là một thiệt thòi rất lớn so với người khác đấy.

Có thể còn nhiều lý do khác nữa, nhưng chung quy lại thì việc trang bị ngoại ngữ cho bản thân là một chiến lược mà các bạn sinh viên nên chuẩn bị cho mình. Chắc chắn là sẽ khó khăn, nhưng nó sẽ được đền đáp một cách xứng đáng cho bạn sau này !

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

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

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

Spring Boot là gì? Demo dự án Spring Boot trong 5 phút

Giới thiệu về Spring Boot. Spring Boot là gì?

Bài viết được sự cho phép của tác giả Lê Chí Dũng

Spring là một framework quen thuộc với các lập trình viên, nhưng Spring vẫn tồn tại nhiều nhược điểm khi hoạt động đơn lẻ. Spring boot ra đời để cải thiện những hạn chế này của Spring. Cùng TopDev tìm hiểu Spring boot là gì? Các tính năng nổi bật và demo cách tạo một dự án Spring Boot chỉ trong 5 phút.

Spring Boot là gì?

Spring Boot được xây dựng dựa trên nền của Spring Framework, phát triển bởi ngôn ngữ Java. Nó là một phiên bản có tính tự động hoá cao hơn và đơn giản hơn của Spring. Spring Boot khiến cho việc tạo và khởi chạy ứng dụng chỉ diễn ra trong vòng vài phút.

Lịch sử phát triển của Spring Boot

Spring Boot được phát triển bởi Pivotal Software, với phiên bản đầu tiên (Spring Boot 1.0) được phát hành vào tháng 4 năm 2014. Mục tiêu ban đầu của Spring Boot là giải quyết những hạn chế và phức tạp trong việc cấu hình Spring Framework truyền thống. Spring Framework, mặc dù rất mạnh mẽ và linh hoạt, nhưng yêu cầu nhiều cấu hình thủ công và có thể trở nên cồng kềnh khi xây dựng các ứng dụng phức tạp.

Trước khi Spring Boot ra đời, việc cấu hình một ứng dụng Spring thường đòi hỏi nhiều file XML hoặc các class Java cấu hình, gây khó khăn cho việc bảo trì và phát triển. Spring Boot được giới thiệu như một cách tiếp cận đơn giản và hiệu quả hơn, với các cấu hình tự động và các công cụ hỗ trợ như Spring Initializr, giúp nhà phát triển bắt đầu dự án mới nhanh chóng chỉ với một vài cú nhấp chuột.

Từ khi ra mắt, Spring Boot đã nhanh chóng trở thành một trong những framework phổ biến nhất trong cộng đồng Java, được sử dụng rộng rãi trong nhiều loại ứng dụng khác nhau, từ các ứng dụng web đơn giản đến các hệ thống microservices phức tạp. Sự phát triển và cải tiến liên tục của Spring Boot đã giúp nó trở thành một phần không thể thiếu trong hệ sinh thái Spring, giúp các nhà phát triển xây dựng các ứng dụng hiện đại một cách dễ dàng và nhanh chóng hơn.

Sự khác biệt giữa Spring và Spring Boot

Nếu bạn đã từng phát triển ứng dụng Java, chắc hẳn bạn đã trải qua sự phức tạp và tốn công sức khi thực hiện các tác vụ với cơ sở dữ liệu. Đó thực sự là một quá trình không mấy dễ dàng! Tuy nhiên, sự ra đời của Spring Boot đã giúp đơn giản hóa các tác vụ phức tạp liên quan đến cơ sở dữ liệu.

Sự khác biệt giữa Spring và Spring Boot

Spring là một tập hợp các framework con, bao gồm nhiều module khác nhau như Spring MVC, Spring JDBC, Spring AOP, Spring ORM và Spring Test. Tính năng cốt lõi của Spring Framework chính là Dependency Injection (DI), cho phép các đối tượng được tiêm (injected) vào nhau một cách linh hoạt mà không cần phải tạo mới hoặc quản lý chúng trực tiếp. Điều này làm cho ứng dụng trở nên dễ dàng quản lý và mở rộng hơn.

Mặc dù Spring đã giúp cho việc phát triển các ứng dụng Java trở nên dễ dàng hơn, nhưng vẫn còn đó sự phức tạp và độ rộng lớn mà framework này mang lại. Việc học Spring Framework từ đầu có thể là một hành trình dài và đầy thách thức đối với nhiều lập trình viên. Đó cũng chính là lúc Spring Boot tỏa sáng với những cải tiến vượt trội.

Spring Boot ra đời với mục tiêu đơn giản hóa việc phát triển các ứng dụng Java bằng cách giảm thiểu cấu hình thủ công và cung cấp các thiết lập mặc định hợp lý. Thay vì phải cấu hình một cách phức tạp và chi tiết như trong Spring, Spring Boot giúp lập trình viên khởi tạo và chạy ứng dụng một cách nhanh chóng chỉ với một vài dòng mã. Spring Boot còn tích hợp sẵn các công cụ như máy chủ nhúng (embedded server), hỗ trợ cấu hình bằng YAML, và tự động hóa nhiều tác vụ mà trước đây cần phải làm thủ công.

Những tính năng nổi bật của Spring Boot

Dưới đây là những tính năng nổi bật của Spring Boot giúp nó trở thành một lựa chọn hàng đầu cho các nhà phát triển.

Web Development

Spring Boot rất phù hợp cho phát triển các ứng dụng web nhờ module Spring chuyên dụng cho web. Framework này hỗ trợ tạo ra các máy chủ HTTP độc lập (self-contained HTTP server) bằng cách tích hợp các máy chủ nhúng như Tomcat, Jetty hoặc Undertow. Với module spring-boot-starter-web, bạn có thể nhanh chóng bắt đầu và vận hành ứng dụng của mình.

SpringApplication

SpringApplication là một lớp cung cấp cách tiện lợi để khởi động ứng dụng Spring từ phương thức main của Java. Bạn có thể bắt đầu ứng dụng của mình chỉ bằng cách gọi phương thức tĩnh run():

public static void main(String[] args){  
    SpringApplication.run(ClassName.class, args);  
}

Điều này giúp việc khởi chạy và quản lý vòng đời ứng dụng trở nên đơn giản và trực quan hơn.

Application Events and Listeners

Spring Boot sử dụng các sự kiện để xử lý nhiều tác vụ khác nhau, cho phép bạn tạo các tệp factory để thêm các listener vào ứng dụng. Bạn có thể tham chiếu các listener này bằng cách sử dụng khóa ApplicationListener. Điều này giúp bạn dễ dàng quản lý và theo dõi các sự kiện xảy ra trong ứng dụng.

Admin Support

Spring Boot cung cấp các tính năng hỗ trợ quản trị cho ứng dụng, cho phép bạn truy cập và quản lý ứng dụng từ xa. Tính năng này có thể được kích hoạt đơn giản bằng cách sử dụng thuộc tính spring.application.admin.enabled.

Externalized Configuration

Spring Boot cho phép bạn “externalize” cấu hình của ứng dụng để có thể dễ dàng làm việc với các môi trường khác nhau. Ứng dụng sử dụng các tệp YAML để externalize cấu hình, giúp bạn dễ dàng quản lý và thay đổi cấu hình mà không cần chỉnh sửa mã nguồn.

Properties Files

Spring Boot cung cấp một tập hợp phong phú các thuộc tính ứng dụng có thể được cấu hình thông qua các tệp properties của dự án. Ví dụ, bạn có thể cấu hình cổng máy chủ bằng cách đặt server-port = 8082. Điều này giúp tổ chức các thuộc tính của ứng dụng một cách dễ dàng và có hệ thống.

YAML Support

YAML cung cấp một cách tiện lợi để xác định cấu hình theo cấu trúc phân cấp. Nó là một tập hợp con của JSON và được Spring Boot hỗ trợ tự động thông qua lớp SpringApplication. YAML là một sự thay thế hiệu quả cho các tệp properties truyền thống, đặc biệt khi cần cấu hình phức tạp.

Type-safe Configuration

Spring Boot cung cấp cấu hình kiểu an toàn, giúp quản lý và xác thực cấu hình của ứng dụng một cách chính xác. Điều này đảm bảo rằng các cấu hình của ứng dụng luôn an toàn và không gây ra lỗi tại runtime. Bạn cũng có thể sử dụng các annotation được cung cấp bởi thư viện này để tăng cường khả năng cấu hình.

Logging

Spring Boot sử dụng Common logging cho tất cả các hoạt động ghi log nội bộ. Các phụ thuộc về logging được quản lý mặc định và không nên thay đổi trừ khi cần thiết phải tùy chỉnh. Điều này giúp quá trình ghi log của ứng dụng trở nên ổn định và dễ dàng quản lý.

Spring Security

Các ứng dụng Spring Boot, vốn là các ứng dụng web dựa trên Spring, mặc định được bảo mật với xác thực cơ bản (basic authentication) trên tất cả các endpoint HTTP. Spring Boot cung cấp một tập hợp phong phú các endpoint để phát triển các ứng dụng bảo mật, giúp bảo vệ dữ liệu và quyền truy cập vào hệ thống.

Giờ đây với Spring Boot, chúng ta có thể tạo dự án Spring một cách nhanh chóng và cấu hình cũng đơn giản dùng Sublime Text để phát triển luôn khỏi cần cài đặt eclipse hay netbean.

Tóm tắt số tính năng nổi bật của Spring Boot:

  • Tạo các ứng dụng Spring độc lập
  • Nhúng trực tiếp Tomcat, Jetty hoặc Undertow (không cần phải deploy ra file WAR)
  • Các starter dependency giúp việc cấu hình Maven đơn giản hơn
  • Tự động cấu hình Spring khi cần thiết
  • Không sinh code cấu hình và không yêu cầu phải cấu hình bằng XML …
  Cách sử dụng properties trong tập tin cấu hình của Spring

Demo một project Spring Boot trong 5 phút

Workflow của Spring Boot

Workflow của Spring Boot

Workflow của Spring Boot hoạt động như sau:

  1. Client tạo một HTTP request.
  2. Class Controller nhận HTTP request.
  3. Controller hiểu loại request và xử lý nó.
  4. Nếu cần, nó gọi class Service.
  5. Class Service sẽ xử lý logic nghiệp vụ, với dữ liệu từ database
  6. Nếu mọi thứ hoạt động tốt, ta sẽ trả về một trang JSP.

Khởi tạo một dự án Spring boot

Để phát triển một ứng dụng web cơ bản HelloWorld sử dụng Spring framework bạn sẽ cần ít nhất 5 công đoạn sau;

  • Tạo một project sử dụng Maven với các dependency cần thiết của Spring MVC và Servlet API.
  • Một tập tin web.xml để khai báo DispatcherServlet của Spring MVC.
  • Một tập tin cấu hình của Spring MVC.
  • Một class Controller trả về một trang “Hello World” khi có request đến.
  • Cuối cùng là phải có một web server dùng để triển khai ứng dụng lên chạy.

Trong các công đoạn này, chỉ có công đoạn tạo một class Controller thì có thể khác cho các ứng dụng khác nhau vì mỗi ứng dụng có một yêu cầu khác nhau. Còn các công đoạn khác thì như nhau.

Đầu tiên, các bạn hãy cài đặt Spring Boot CLI trước. Bạn nào chưa biết cách cài đặt thì có thể tham khảo trên page spring boot.

Kế tiếp, mình sẽ dùng Spring Boot CLI để tạo một ứng dụng web cơ bản bằng câu lệnh sau:

-d=web: sử dụng Spring Boot Web Dependencychi tiết về Dependency

Kế tiếp, mình sẽ tạo ứng dụng web tên là helloWorld như sau:

Khởi tạo dự án bằng Spring boot

Kế tiếp, ta sẽ được cấu trúc của một Maven project như sau:

Khởi tạo dự án bằng Spring boot

Kế tiếp, dùng command line di chuyển đến thư mục và chạy ứng dụng với câu lệnh sau:

mvn spring-boot:run

trong lần đầu chạy có thể hơi lâu khoảng 1-2 phút.

Khởi tạo dự án bằng Spring boot

Kế tiếp, Spring Boot tự động làm hết mọi thứ để chạy ứng dụng web trên Tomcat với port mặc định là 8080.

Khởi tạo dự án bằng Spring boot

Kế tiếp, dùng trình duyệt và truy cập đến http://localhost:8080 sẽ thấy kết quả sẽ như sau:

Khởi tạo dự án bằng Spring boot

Chúng ta sẽ thấy lỗi 404 Not Found là vì trong project mà chúng ta vừa tạo không có một Controller nào xử lý cho request đến.

Bây giờ, nếu các bạn tạo một class HelloWorldController trong folder \src\main\java\app\controller\home:

Kế tiếp, run lại câu lệnh mất khoảng 15 giây:

mvn spring-boot:run

Sau khi reload lại browser sẽ thấy:
Khởi tạo dự án bằng Spring boot

Tổng kết lại khi sử dụng Spring Boot chúng ta không mất qua nhiều công đoạn và thời gian để tạo một web project đẻ chạy. Mọi thứ đã được Spring Boot tự động làm hết như sử dụng các framework PHP như Symfony, Laravel,… cái mà chúng ta quan tâm chỉ là develop Controller. Một quan điểm khác của mình là thấy Java web sau khi build chạy rất nhanh hơn tốc độ PHP sau khi dùng APC Cache :P. Tuy nhiên, đó làm cảm nhận của mình còn việc nhanh hơn hay không thì mình sẽ làm 1 vài so sánh performance để kiểm nghiệm lại 😀

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

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

Xem thêm tuyển lập trình Spring Boot hấp dẫn trên TopDev

Hibernate là gì? Sao phải dùng nó thay JDBC?

Hibernate là khỉ gì? sao phải dùng nó thay JDBC

Bài viết được sự cho phép của tác giả Lê Chí Dũng

Nếu đã biết về JDBC thì JDBC là công cụ kết nối DB rất thô sơ được dùng từ rất lâu và có nhiều vấn đề. Hibernate ra đời nhằm giải quyết vấn đề tồn tại và tối ưu hơn.

  Ethereum là gì? Tìm hiểu cơ bản về Blockchain (P1)
  Fresher là gì? Các kỹ năng và công việc của Fresher

Hibernate là khỉ gì?

Hibernate là một thư viện ORM (Object Relational Mapping) mã nguồn mở giúp lập trình viên viết ứng dụng Java có thể map các objects (pojo) với hệ quản trị cơ sở dữ liệu quan hệ,
và hỗ trợ thực hiện các khái niệm lập trình hướng đối tượng với cớ dữ liệu quan hệ.
Hibernate Workflow

Persistence object
Chính là các POJO object map với các table tương ứng của cơ sở dữ liệu quan hệ. Nó như là những “thùng xe” chứa dữ liệu từ ứng dụng để ghi xuống database, hay chứa dữ liệu tải lên ứng dụng từ database.
Session Factory
Là một interface giúp tạo ra session kết nối đến database bằng cách đọc các cấu hình trong Hibernate configuration. Mỗi một database phải có một session factory.

Tỉ dụ nếu ta sử dụng MySQL, và Oracle cho ứng dụng Java của mình thì ta cần có một session factory cho MySQL, và một session factory cho Oracle.

Hibernate Session
Mỗi một đối tượng session được Session factory tạo ra sẽ tạo một kết nối đến database.
Transation
Là transaction đảm bảo tính toàn vẹn của phiên làm việc với cớ sở dữ liệu. Tức là nếu có một lỗi xảy ra trong transaction thì tất cả các tác vụ thực hiện sẽ thất bại.
Query
Hibernate cung cấp các câu chuy vấn HQL (Hibernate Query Language) tới database và map kết quả trả về với đối tượng tương ứng của ứng dụng Java.

Nếu bạn muốn làm việc với Hibernate thử hãy xem Tutorial hướng dẫn sử dụng Hibernate cho người mới bắt đầu tại lcdung.top

Sau phải dùng Hibernate thay JDBC

1. Object Mapping

Với JDBC ta phải map các trường trong bảng với các thuộc tính của Java object một cách “thủ công”. Với Hibernate sẽ hỗ trợ ta map một cách “tự động” thông qua các file cấu hình map XML hay sử dụng các anotation.
JDBC sẽ map Java object với table như sau.

//rs là ResultSet trả về từ câu query get dữ liệu bảng user.
List users=new ArrayList();
while(rs.next()) {
     User user = new User();
     user.setUserId(rs.getString("userNo"));
     user.setName(rs.getString("firstName"));
     user.setEmail(rs.getString(“lastName”));
     users.add(user);
 }

Cũng với table user đó sử dụng các anotaion để Hibernate có thể map một cách “tự động” như sau.

@Entity
@Table(name = "user")
public class UserModel {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private BigInteger userNo;
    @NotEmpty
    @Column(name = "lastName")
    private String email;
    public BigInteger getUserNo() {
        return this.userNo;
    }
    public void setUserNo(BigInteger userNo) {
        this.userNo = userNo;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}

2. HQL

Hibernate cung cấp các câu lệnh truy vấn tương tự SQL, HQL của Hibernate hỗ trợ đầy đủ các truy vấn đa hình như, HQL “hiểu” các khái niệm như kế thừa (inheritance), đa hình (polymorphysm), và liên kết (association)

3. Database Independent

Code sử dụng Hibernate là độc lập với hệ quản trị cơ sở dữ liệu, nghĩa là ta không cần thay đổi câu lệnh HQL khi ta chuyển từ hệ quản trị CSDL MySQL sang Oracle, hay các hệ quản trị CSDL khác… Do đó rất dễ để ta thay đổi CSDL quan hệ, đơn giản bằng cách thay đổi thông tin cấu hình hệ quản trị CSDL trong file cấu hình.

//used MySQL
com.mysql.jdbc.Driver
// used Oracle
oracle.jdbc.driver.OracleDriver

Ví dụ khi ta muốn lấy 10 bản ghi dữ liệu của một table từ 2 CSDL khác nhau

Với JDBC ta có câu truy vấn như sau.

#MySQL
SELECT column_name FROM table_name ORDER BY column_name ASC LIMIT 10; 
#SQL Server 
SELECT TOP 10 column_name FROM table_name ORDER BY column_name ASC;

Với Hibernate câu truy vấn không thay đổi với cả 2 CSDL.

Session.CreateQuery("SELECT E.id FROM Employee E ORDER BY E.id ASC").SetMaxResults(10).List();

4. Minimize Code Changes

Khi ta thay đổi (thêm) cột vào bảng,
Với JDBC ta phải thay đổi những gì:

  • Thêm thuộc tính vào POJO class.
  • Thay đổi method chứa câu truy vấn “select”, “insert”, “update” để bổ sung cột mới.
    Có thể có rất nhiều method, nhiều class chứa các câu truy vấn như trên.
    Với Hibernate ta chỉ cần:
  • Thêm thuộc tính vào POJO class.
  • Cập nhật Hibernate XML mapping file để thêm map column – property.
    Ta chỉ thay đổi duy nhất 2 file trên.

5. Lazy Loading

Với những ứng dụng Java làm việc với cơ sở dữ liệu lớn hàng trăm triệu bản ghi, việc có sử dụng Lazy loading trong truy xuất dữ liệu từ database mang lại lợi ích rất lớn. Nó giống như việc ta có thể bẻ từng chiếc đũa của bó đũa to thay vì bẻ cả bó đũa.
Ví dụ những file tài liệu do người dùng upload được lưu ở bảng document. Bảng user có quan hệ một-nhiều với bảng document. Trong trường hợp này class User là class cha, class Document là class con. Bảng document nhanh chóng đầy lên theo thời gian. Mỗi khi ta lấy thông tin user và docment tương ứng từ database giả sử dữ liệu document là rất lớn, để ứng dụng không bị chậm vì phải mất nhiều bộ nhớ để chứa toàn bộ document của toàn bộ user, ta áp dụng Lazy loading cho từng user như sau.

// Declaring fetch type for one to many association in your POJO
@OneToMany(mappedBy = "user", fetch = FetchType.LAZY)
private Set documents = new HashSet();
// To fetch user with document use initialize() method as follows
User user = (User)session.get(User.class, new Integer(100));
//This code will fetch all products for user 100 from database 'NOW'
documents = user.getDocuments();

6. Loại bỏ Try-Catch Blocks

Sử dụng JDBC nếu lỗi xảy khi tao tác với database thì sẽ có exception SQLexception bắn ra. Bởi vậy ta phải sử dụng try-catch block để xử lý ngoại lệ.
Hibernate xử lý việc này giúp bạn bằng cách nó override toàn bộ JDBC exception thành Uncheck xeption, và ta không cần viết try-catch trong code của mình nữa.

7. Quản lý commit/rollback Transaction

Transaction là nhóm các hoạt động (với database) của một tác vụ. Nếu một hoạt động không thành công thì toàn bộ tác vụ không thành công.
Với JDBC lập trình viên phải chủ động thực hiện commit khi toàn bộ hoạt động của tác vụ thành công, hay phải rollback khi có một hoạt động không thành công để kết thúc tác vụ.
Với Hibernate thì ta không cần quan tâm đến commit hay rollback, Hibernate đã quản lý nó giúp ta rồi.

8. Hibernate Caching


Hibernate cung cấp một cơ chế bộ nhớ đệm, giúp giảm số lần truy cập vào database của ứng dụng càng nhiều càng tốt. Điều này sẽ có tác dụng tăng performance đáng kể cho ứng dụng của bạn. Hibernate lưu trữ các đối tượng trong session khi transation được kích hoạt. Khi một query được thực hiện liên tục, giá trị được lưu trữ trong session được sử dụng lại. Khi một transaction mới bắt đầu, dữ liệu được lấy lại từ database và được lưu trữ session. Hibernate cung cấp hai cấp độ Cach, mình sẽ có bài chi tiết hơn về Cach trong Hibernate.

Nếu bạn muốn làm việc với Hibernate thử hãy xem Tutorial hướng dẫn sử dụng Hibernate cho người mới bắt đầu tại lcdung.top

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

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

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

Xác định đối tượng giao diện UI trong ứng dụng Android

Xác định đối tượng giao diện UI trong ứng dụng Android

Bài viết được sự cho phép của vntesters.com

Vì Appium được phát triển từ Selenium nên Appium cũng hỗ trợ các cách xác định đối tượng UI tương tự như Selenium, bao gồm: ID, Xpath, Class, Name…. Một điểm đặc điểm khác biệt là, trong lập trình ứng dụng Android, chúng ta không sử dụng CSS để định dạng các đối tượng UI nên Appium không hỗ trợ phương thức xác định đối tượng UI thông qua CSSSelector.

  18 designer hàng đầu dự đoán về xu hướng UI/ UX trong năm 2022
  7 thủ thuật bỏ túi cực hay cho các nhà tuyển dụng IT

Sử dụng UIAutomatorViewer

Đối với ứng dụng Android, chúng ta sử dụng công cụ UIAutomatorViewer để có thể đọc được mã nguồn giao diện UI của ứng dụng. Tương tự, chúng ta cũng có một công cụ tương ứng như vậy đối với ứng dụng iOS. Công cụ UIAutomatorViewer có thể được tìm thấy trong thư mục tools sau khi cài đặt Android SDK.

  1. Kết nối thiết bị thực/ảo với máy tính PC
  2. Khởi động ứng dụng trên thiết bị và đi đến màn hình cần thiết
  3. Khởi động công cụ UIAutomatorViewer trên PC
  4. Nhấn nút Device Screenshot để hiển thị thông tin của đối tượng UI

Dưới đây là ví dụ dùng UIAutomatorViewer với thiết bị thật, ứng dụng ví dụ các bạn có thể tải từ Google Play:

Sử dụng Appium Inspector

Trong ứng dụng Appium Server, hệ thống Appium hỗ trợ một công cụ riêng dùng để xác định các đối tượng UI. Công cụ này chỉ có thể sử dụng sau khi khởi động Appium Server và thiết lập các cấu hình để kết nối với thiết bị. Điểm đặc biệt của công cụ này là chúng ta có thể tương tác (chạm và truyển ký tự) với thiết bị đồng thời có thể ghi lại các hành động tương tác và phát sinh các mã kiểm thử.

  1. Kết nối thiết bị thực/ảo với máy tính PC
  2. Khởi động ứng dụng Appium Server
  3. Khởi động một phiên hoạt động với các thông tin cấu hình tương ứng của thiết bị và ứng dụng (package và activity)
  4. Khởi động chức năng ghi nhận hành động (nếu cần)
  5. Lựa chọn các đối tượng UI trên phần thông tin và tương tác (nếu cần)

Dưới đây là ví dụ dùng Appium Inspector với thiết bị ảo, ứng dụng ví dụ các bạn có thể tải từ đây:

Vài phương thức xác định đối tượng UI với Appium

  • ID: Trong ứng dụng Android, chúng ta có resource-id và appium sử dụng giá trị này trong quá trình xác định đối tượng UI – ID.
  • XPath: Cấu trúc của các đối tượng UI trong ứng dụng được sắp xếp với định dạng XML, vậy nên chúng ta có thể sử dụng XPath cùng với các cú pháp và hàm xử lý của XPath để xác định đối tượng UI một cách chính xác và đơn nhất/unique.
  • Classname: Khác với Selenium, class là một thuộc tính của thẻ HTML, với Appium, giá trị Class chính là tên của thẻ XML.
  • Name/Text: Tương ứng với giá trị ký tự được hiển thị trên giao diện của ứng dụng.

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

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

Xem thêm tuyển android lương cao hấp dẫn trên TopDev

Selenium webdriver: sự khác nhau giữa get() và navigate().to()

Selenium webdriver: sự khác nhau giữa get() và navigate().to()

Bài viết được sự cho phép của tác giả Tô Thị Vân Anh

Để đáp ứng đủ số lượng bài viết – mục tiêu đã đặt ra từ hồi đầu năm, mà nay thì đã là tuần thứ 20 – tức là nửa cuối của tháng 5 rồi, nên mình phải gấp rút chuẩn bị từ bây giờ ( -.- thật là biết nhìn xa trông rộng quá đi :v ), và vì vậy thì mình không thể lười thêm nữa. Hễ có ý tưởng là mình sẽ gõ ngay và luôn, như bài này chẳng hạn. Tất cả chỉ là sự tình cờ và mình chưa hề có ý định là sẽ nói về cái này!

  Selenium là gì? Giới thiệu chi tiết về Selenium Automation Testing
  Mã hóa mật khẩu trong Selenium Webdriver

Không lan man nữa, bài viết hôm nay sẽ cùng các bạn làm sáng tỏ sự khác nhau giữa hai method get() và navigate() trong Selenium nhé.

google-chrome-logo

get(“URL”)

Một method vô cùng, vô cùng quen thuộc với tất cả chúng ta là get(“url”), ở đây bạn sẽ đưa vào đường dẫn của trang web, ứng dụng web mà bạn muốn mở nó lên thông qua selenium, ví dụ:

driver.get(“http://www.google.com&#8221😉

Tức là khi bạn đưa câu lệnh trên vào thì sau khi trình duyệt được bật lên, nó sẽ đi đến ngay trang web đấy. Ok chỗ này rồi nhé. Với method GET này thì nó sẽ tải về toàn bộ trang web, page source hay text của trang web đó. Method này nó sẽ chờ cho đến khi toàn bộ dữ liệu của trang web được lấy xuống trước khi quay trở lại thực hiện các bước tiếp theo trong script của chúng ta. Tuy nhiên sẽ gặp phải rắc rối khi mà trang web sử dụng nhiều AJAX thì Webdriver khó có thể xác định được là việc load đấy đã được hoàn thành hay chưa, và giải pháp cho vấn đề này chính là sử dụng Wait. 😀

navigate().to(“URL”)

Và như bạn đã thấy là để thực hiện điều hướng đến một trang web ta sử dụng câu lệnh get (driver.get(“http://www.example.com“)), và nó cũng đơn giản chỉ là một cách viết khác của câu lệnh này mà thôi:

driver.navigate().to(“http://example.com&#8221😉

Nhấn mạnh với các bạn rằng hai method get() và navigate().to() thực hiện một việc giống y như nhau. Khác nhau là một cái được viết nhanh gọn hơn cái kia mà thôi. Nhớ đoạn này để còn đi phỏng vấn nhỡ đâu được hỏi!

Navigate interface cũng có mở rộng hỗ trợ chúng ta có thể điều hướng từ trang web hiện tại quay lại trang web trước đó, hoặc sau đó với method và cú pháp như sau:

driver.navigate().forward();

driver.navigate().back();

Tặng thêm các bạn hình này, dịch được thì tốt nhé, tóm lại là ý nghĩa của thằng get() và navigate().to() là như nhau :v

DnQyD

Các bạn cũng có thể tham khảo trên hướng dẫn của Selenium theo đường dẫn này https://docs.seleniumhq.org/docs/03_webdriver.jsp nhé!

Đây là đoạn mà mình tìm được:

Capture

Lười dịch thì chỉ cần chú ý câu này “navigate().to() and “get()” do exactly the same thing“. thế là được nhé. Tại sao người ta dùng get() nhiều hơn, và tại sao dường như nó phổ biến hơn? Thì tại vì gõ từ get nhanh hơn =))

Chúc các bạn đầu tuần vui vẻ nhé! Mùa hè đã chính thức bắt đầu, đừng vì nóng quá mà bỏ bê học hành nhé! hehe

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 Developer hấp dẫn trên TopDev

3 thứ quyết định đến sự thành bại của bạn

3 thứ quyết định đến sự thành bại của bạn

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

Cuộc sống luôn tồn tại vô số những thứ tác động đến chúng ta, mọi quyết định và chọn lựa của bạn ngày hôm nay đều ảnh hưởng đến kết quả của con người bạn ngày mai.

Có 3 thứ ảnh hưởng đến bản thân chúng ta nhiều nhất đó chính là: Bạn bè (nhóm bạn), thầy hiền trí (người thầy dẫn đường) và tủ sách tinh hoa.

  10 câu nói cực hay về lập trình
  10 kênh Youtube học lập trình không thể bỏ qua dành cho Junior Web Developer / Designer

#1. Nhóm bạn tốt

Ngạn ngữ Anh có câu: “Hãy cho tôi biết bạn của anh là ai, tôi sẽ chỉ cho anh biết, anh là người như thế nào”

3 thứ quyết định đến sự thành bại của bạn (1)

Từ trước đến nay, người thành công luôn muốn kết giao với những người xứng tầm với mình hoặc nổi trội hơn mình.

Vì họ biết một điều rằng, mây tầng nào chơi với mây tầng đó. Ở cạnh một người tích cực, xuất chúng thì bạn có thể tầm thường được sao?

Mình đã lắng nghe và nói chuyện với một số người. Họ là những người rất trẻ, khao khát được thay đổi và trở lên khác biệt hơn.

Mình luôn chia sẻ với họ về câu chuyện của bản thân mình, từ một cô sinh viên nhút nhát trở thành một cô gái tự tin giao tiếp ra sao từ khi tham gia vào một hội nhóm những con người năng động, tích cực và giỏi giang.

Chỉ có một từ khóa để tìm bạn tốt. Đó chính là “chủ động”, bạn không thể ngồi yên mà đợi một ai đó đến giúp bạn trở lên tốt hơn được.

Điều đó là không thể. Vậy nên, nếu bạn muốn mình thay đổi thực sự nhanh, hãy nhờ đến ngoại lực, là những người bạn tốt. Hãy cùng nhau rèn luyện và thay đổi.

Một ví dụ dễ thấy đó chính là trong quân đội, đầu vào của mọi người có thể khác biệt rất nhiều, nhưng sau một thời gian, họ đều có thể chạy bộ hàng chục km, bơi lội và luyện võ. Chính môi trường và bạn bè đã thúc đẩy họ rèn luyện không ngừng.

Một số ideas cho bạn: một số hội nhóm trên facebook, diễn đàn, câu lạc bộ, lớp học kĩ năng. Bạn có thể nhắn tin cho một vài người và bày tỏ mong muốn bạn muốn tham gia một hội nhóm nào đó. Tỉ lệ bạn tìm được nơi phù hợp sẽ rất cao.

Đọc thêm bài viết liên quan:

#2. Thầy hiền trí

Tôi có một quan điểm, mà cho đến bây giờ tôi vẫn giữ nó. Đó chính là “nếu đã đi học, phải học những người giỏi nhất”.

3 thứ quyết định đến sự thành bại của bạn (2)

Tư duy sai lệch khi bạn mới thay đổi sẽ rất “nguy hiểm” vì lúc này chúng ta như tờ giấy trắng vậy, những nét bút đầu tiên sẽ là nền tảng cho mai sau. Vì thế, để giảm thiểu rủi do thì bạn nên tìm những người đứng đầu trong một lĩnh vực để học hỏi.

Vậy tìm thầy hiền trí ở đâu? Bạn cần phải nghe ngóng và học hỏi những người đi trước trong lĩnh vực mà bạn muốn học.

Hãy hỏi, thu thập ý kiến và kết hợp với những thông tin trên Internet, xem thử cách họ truyền đạt ra sao, có phù hợp với bạn hay không. Vì mỗi thầy sẽ có một phong cách truyền tải riêng.

Hiện nay, có rất nhiều khóa học được tổ chức, online hay offline, miễn phí hay trả phí đều có cả. Bạn có thể tham khảo và đăng kí học nhé.

Hoặc nếu bạn là sinh viên, chưa có tài chính để có thể tham gia những khóa học offline, bạn có thể tìm những người thầy bạn muốn học trên Unica hoặc Edumall, học phí sẽ đỡ mắc hơn.

Mình đã đăng kí rất nhiều khóa học trên hai nền tảng đó, cộng với theo dõi kênh Youtube của người thầy mình ngưỡng mộ. Tư duy từ đó mà thay đổi nhiều, con người cũng khôn ngoan hơn trước.

#3. Tủ sách tinh hoa

Bạn có biết cách để gặp được các vĩ nhân không?

3 thứ quyết định đến sự thành bại của bạn (3)

Mình nói bạn nghe, hoàn toàn có cách đấy. Mà nó còn rất đơn giản nữa là đằng khác. Bạn hoàn toàn có thể tâm sự, nhìn được cả cuộc đời, hay là nói chuyện với các vĩ nhân qua các trang sách.

Bạn thừa biết rồi đấy, cơ hội để chúng ta gặp trực tiếp họ gần như bằng 0. Vậy nên chúng ta chỉ có thể gặp họ gián tiếp qua các trang sách, và đó cũng chính là cách tốt nhất để chúng ta hiểu hơn về con người họ, học được những bài học đắt giá từ họ.

Nhưng có một hiện tượng rất đáng buồn, theo thống kê của Cục Xuất bản Việt Nam thì trung bình một người Việt chỉ đọc 1 cuốn sách/năm. Trong khi đó những quốc gia phát triển, trung bình họ đều đọc ít nhất 10 cuốn sách/năm..

Nguyên nhân là do người Việt ta không có thói quen đọc sách từ nhỏ. Đọc là một nét văn hóa, và nó cũng là một việc cần được rèn giũa thì mới thành thói quen.

Vậy làm thế nào để bắt đầu thói quen đọc sách “nhàm chán” này?

1/ Bạn có thể đọc những cuốn sách đơn giản, theo phong cách của bạn, ngắn gọn và dễ hiểu để bắt đầu trước. Điều đó sẽ giúp bạn có cảm giác yêu sách hơn.

Mình bắt đầu thích đọc sách sau khi đọc cuốn “Trên đường băng” (Tony buổi sáng). Cuốn này văn phong khá vui vẻ và dễ hiểu. Sau đó mình mới chuyển sang một số cuốn về lĩnh vực mình quan tâm.

2/ Hãy bắt đầu với từng bước nhỏ, lúc đầu ngại đọc thì bạn hãy đặc mục tiêu là đọc vài trang sách trước (mỗi ngày 1 trang sách chẳng hạn), rồi nâng lên dần.

Một tip nhỏ mình dành cho bạn đó là khi chọn sách ở giai đoạn khai mở, cuốn nào bạn thấy thích thú nhất thì hãy cố gắng đọc một cách trọn vẹn. Nếu cuốn nào không phù hợp thì dừng lại, đừng quá ép bản thân phải đọc hết.

3/ Chơi với người đọc sách: Họ sẽ cùng chia sẻ với bạn và truyền cho bạn nhiều động lực trong quá trình đọc, và khi đọc được điều gì đó hay ho và mới lạ, bạn cũng có thể chia sẻ lại với họ, điều đó sẽ rất thú vị và thích thú, khiến bạn yêu việc đọc hơn.

Mình hi vọng sau khi đọc xong bài viết này, bạn sẽ chủ động đi tìm ngay cho mình những người đồng hành! Hãy luôn tìm kiếm và giữ cho mình khao khát được phát triển bạn nhé!

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

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

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