Không rõ vì lý do cá nhân gì, mà CSS chỉ áp dụng cái luật margin collapse này cho giá trị top và bottom, nếu giá trị margin là left hoặc right, thì nó lại bình thường
Bài viết được sự cho phép của tác giả Nguyễn Chí Thức
Lập trình Scratch từ lâu đã là ngôn ngữ lập trình phổ biến cho học sinh, sinh viên và các em nhỏ. Với Scratch, việc lập trình từ ban đầu được gán cho cái mác khó nhằn, khó hiểu, đơn điệu và tẻ nhạt bỗng trở thành ngôn ngữ lập trình được các em nhỏ không cần cha mẹ nói cũng vào học.
Vậy điều gì làm nên sức hút của Scratch. Giải đáp Scratch là gì? Tạo scproject với scratch như thế nào? trong bài viết này.
Scratch là gì?
Ngôn ngữ lập trình Scratch là gì?
Scratch là một ngôn ngữ lập trình trực quan và môi trường phát triển tích hợp được thiết kế đặc biệt cho trẻ em và người mới bắt đầu. Được phát triển bởi Lifelong Kindergarten Group tại MIT Media Lab, Scratch cho phép người dùng tạo ra các câu chuyện tương tác, trò chơi, và hoạt hình thông qua việc kéo và thả các khối mã màu sắc. Mục tiêu chính của Scratch là giúp người học tiếp cận dễ dàng với lập trình và phát triển các kỹ năng tư duy sáng tạo, giải quyết vấn đề và làm việc nhóm.
Mục đích của phần mềm Scratch
Trẻ em cũng có thể học lập trình là một ý tưởng rất có ý nghĩa thực tiễn, tuy nhiên để sáng tạo ra một phương pháp lập trình phù hợp với trình độ và tâm lý lứa tuổi trẻ em thì lại vô cùng khó khăn. Không phải nhà khoa học máy tính nào cũng có thể làm được. Những khái niệm khoa học kỹ thuật khó hiểu, những quy tắc luật lệ chằng chịt, những suy nghĩ liên miên mệt mỏi trong những ngôn ngữ lập trình kiểu dòng lệnh phổ biến như Pascal, C, C++, Java, PHP, …chính là rào cản đối với sự tiếp cận lập trình cho trẻ em.
Tuy nhiên, đối với Scratch thì khác! Ngôn ngữ lập trình Scratch phát triển theo hướng tương tác trực quan, đồ họa sống động, sản phẩm liền tay mà vẫn đảm bảo tính khoa học, tính liên thông tri thức sau này.
Mục đích của phần mềm Scratch
Khi sử dụng Scratch, thay vì phải viết những dòng lệnh logic dễ gặp lỗi thì ở đây bạn chỉ cần nắm và kéo các khối lệnh đầy màu sắc có sẵn để lắp ghép thành một kịch bản điều khiển các đối tượng trên sân khấu biểu diễn.
Đối với những người mới bắt đầu học các ngôn ngữ lập trình như Pascal, C, PHP,…sẽ rất khó hiểu với việc sử dụng Biến, Hàm, Thủ tục, Danh sách và các Điều kiện, Vòng lặp,…nhưng khi sử dụng Scratch thì những khái niệm đó trở nên trực quan, dễ hiểu và dễ vận dụng trong các tình huống cụ thể.
Với đặc điểm dễ học, dễ sử dụng và hiệu quả như vậy, Scratch được xem như là một ngôn ngữ nền tảng trước khi học các ngôn ngữ khác. Và vì thế, đến nay đã có hàng triệu dự án được chia sẻ trên trang chủ của nhà thiết kế. Rất nhiều trường học trên khắp thế giới, từ trường Tiểu học đến Đại học đã sử dụng Scratch như một môn học chính thức.
Đặc điểm của ngôn ngữ lập trình Scratch
Scratch là một ngôn ngữ lập trình trực quan được thiết kế để giúp trẻ em và người mới bắt đầu học lập trình một cách dễ dàng và thú vị. Dưới đây là những đặc điểm chính của ngôn ngữ lập trình Scratch:
Giao diện trực quan và thân thiện
Scratch sử dụng giao diện kéo và thả, giúp người dùng dễ dàng thao tác mà không cần phải viết mã phức tạp. Các khối lệnh được tổ chức theo màu sắc và hình dạng khác nhau, giúp người dùng nhận biết chức năng của từng khối và sắp xếp chúng một cách dễ dàng. Điều này làm cho quá trình lập trình trở nên trực quan và thân thiện với người dùng, đặc biệt là trẻ em.
Khối lệnh màu sắc
Các khối lệnh trong Scratch được phân loại theo màu sắc dựa trên chức năng của chúng. Ví dụ, các khối điều khiển (control) có màu vàng, các khối chuyển động (motion) có màu xanh lam, và các khối âm thanh (sound) có màu tím. Sự phân loại này giúp người dùng dễ dàng tìm kiếm và sử dụng các khối lệnh phù hợp cho dự án của mình.
Tính năng kéo và thả
Scratch cho phép người dùng tạo ra các chương trình bằng cách kéo và thả các khối lệnh vào khu vực làm việc. Điều này giúp loại bỏ sự phức tạp của việc viết mã bằng văn bản và giúp người dùng tập trung vào việc xây dựng logic và ý tưởng cho chương trình. Tính năng kéo và thả làm cho quá trình lập trình trở nên thú vị và ít căng thẳng hơn.
Component-Based Architecture
Scratch sử dụng kiến trúc dựa trên component, nơi mà mỗi thành phần (sprite) có thể được lập trình độc lập. Mỗi sprite có thể có các kịch bản (scripts), trang phục (costumes) và âm thanh riêng, giúp người dùng dễ dàng quản lý và phát triển các thành phần của dự án một cách linh hoạt. Điều này giúp tạo ra các dự án phức tạp một cách dễ dàng và hiệu quả.
Khả năng tương tác
Scratch cho phép người dùng tạo ra các chương trình tương tác thông qua việc sử dụng các sự kiện (events) và cảm biến (sensors). Người dùng có thể lập trình các sprite để phản hồi lại các sự kiện như nhấn chuột, nhấn phím hoặc chạm vào màn hình. Khả năng tương tác này giúp tạo ra các trò chơi và hoạt hình hấp dẫn và sinh động.
Hỗ trợ đa nền tảng
Scratch có thể chạy trên nhiều nền tảng khác nhau bao gồm máy tính để bàn, laptop và máy tính bảng thông qua trình duyệt web hoặc ứng dụng Scratch dành cho thiết bị di động. Điều này giúp người dùng dễ dàng tiếp cận và sử dụng Scratch ở bất kỳ đâu và bất kỳ lúc nào, tạo điều kiện thuận lợi cho việc học và sáng tạo.
Tính năng tích hợp với phần cứng
Scratch có thể tích hợp với nhiều loại phần cứng như robot, bộ điều khiển và các thiết bị IoT. Điều này mở rộng khả năng sáng tạo của người dùng, cho phép họ xây dựng các dự án phức tạp và thực tế hơn, đồng thời áp dụng kiến thức lập trình vào các lĩnh vực khác nhau. Khả năng tích hợp này giúp Scratch trở thành một công cụ mạnh mẽ cho các dự án STEM (khoa học, công nghệ, kỹ thuật và toán học).
Theo chính tác giả Scratch, ông giáo sư Mitchel Resnick đã chia sẻ như sau:
“Khi học lập trình Scratch, trẻ em học được những nguyên lý cơ bản của việc thiết kế, học được cách thử nghiệm ý tưởng mới, học được cách phân chia ý tưởng phức tạp thành những phần việc đơn giản, học được cách hợp tác với người khác để thực hiện dự án, học được cách tìm và sửa lỗi khi kết quả không được như ý, tập được tính kiên trì khi đối mặt với khó khăn. Ngày nay, đó không chỉ là những kỹ năng cần thiết cho việc lập trình, mà còn cần thiết cho nhiều hoạt động khác.”
Từng bước với lập trình Scratch
Cài đặt và đăng kí sử dụng Scratch
Để bắt đầu với lập trình scratch, truy cập trang chủ và ấn vào start creating. Các bạn cũng có thể signup (tạo tài khoản để lưu trữ các project của cá nhân mình).
Truy cập trang chủ và ấn vào Start Creating
Scratch sẽ chuyển hướng ta tới trang bắt đầu để lập trình với Scratch.
Giao diện sau khi đã khởi tạo project tại Scratch
Trước khi bắt đầu, các bạn nên xem qua video hướng dẫn một số thao tác cơ bản và thành phần của scratch.
Video hướng dẫn cụ thể và rõ ràngLập trình scratch chú trọng tới các đối tượng và lập trình animations cho các đối tượng. Đối tượng ban đầu và mặc định là chú mèo scratch. Để thêm các đối tượng khác. Ấn vào góc bên dưới bên phải màn hình.
Góc dưới bên phải cho phép thêm nhiều hơn các đối tượng.
Sau khi đã có các đối tượng, bước tiếp theo là các thao tác, âm thanh được tuỳ chọn để lập trình. Việc lựa chọn đúng các thao tác giúp đối tượng trở nên sinh động hơn.
Scratch hiện tại hỗ trợ code (trực quan không code), costumes (tuỳ chỉnh cao hơn) và Sounds (phần âm thanh cho các đối tượng)
Các đối tượng trong Scratch
Về mặt code, hiện tại scratch hỗ trợ danh sách sau:
Motion (di chuyển 10 bước, xoay ngang dọc, di chuyển tới vị trí có toạ độ x và y)
Looks (xin chào, thay đổi kích thước, ẩn (hide), hiện (show), …
Sounds (âm thanh bắt đầu tới lúc kết thúc, thay đổi volume tăng hoặc giảm, …)
Events (khi ấn vào thì sao?, khi nhận được tin nhắn, …)
Control (kiểm soát, các câu lệnh cơ bản của lập trình, nếu a thì b, nếu như thế này thì thế kia, …)
Sensing (các sự kiện của chuột, các sự kiện chờ cho câu hỏi, câu trả lời, …)
Operators (các phép cộng trừ, so sánh, tính toán độ dài, …)
Variables (các biến tuỳ chỉnh, thiết lập dữ liệu, thay đổi các biến, …)
Các đối tượng được hỗ trợ trong khối Variables
Tuỳ biến, tuỳ chỉnh cao hơn với lập trình Scratch
Sau khi đã hiểu rõ và thực hành một số thành phần code được hỗ trợ bởi Scratch. Nếu các animations và lập trình cần tới tuỳ chỉnh các đối tượng. Việc tuỳ chỉnh đối tượng cho phép làm ra các đoạn code sinh động hơn, phù hợp hơn với yêu cầu.
Mục consumes dành cho các đối tượng tuỳ chỉnh. Cho phép chỉnh sửa màu sắc, hình dạng, kích thước các đối tượng.
Thay đổi màu sắc quần của đối tượng sang màu tím.
Một thành phần khác giúp cho các video animations được lập trình trở nên tuyệt vời hơn là âm thanh. Âm thanh cũng có thể tuỳ chỉnh ở mục Sounds.
Nếu hình ảnh trong bộ sưu tập có sẵn của Scratch không phù hợp hoặc chưa đáp ứng được nhu cầu của bạn. Các bạn có thể tự tải lên các hình ảnh riêng của mình bằng nút nhấn phía bên dưới phải màn hình.
Tải lên các hình ảnh cá nhân hoặc tự xây dựng là hoàn toàn khả thi với scratch
Khả năng lập trình máy tính là một phần quan trọng trong học vấn của xã hội ngày nay. Khi mọi người học cách lập trình bằng Scratch, bản thân họ sẽ học được những chiến thuật quan trọng để giải quyết vấn đề, thiết kế các chương trình và truyền đạt những ý tưởng.
Chính vì vậy, không chỉ riêng tập lớp trẻ em, học sinh là nên tiếp thu với lập trình scratch. Người già, các đối tượng khác trong xã hội nếu có điều kiện cũng có thể thử sức, sáng tạo với lập trình scratch. Có thể bạn quan tâm:
Bài viết được sự cho phép của BQT Kinh nghiệm lập trình
Bài trước mình đã giới thiệu tổng quan về nghề IT BA hiện nay ở nước ta. Bài này mình sẽ giới thiệu chi tiết BA là làm những công việc gì?
BA là viết tắt của từ Business Analyst. Về cơ bản BA là người làm việc với khách hàng để lấy yêu cầu, sau đó chuyển thông tin và thảo luận đưa ra giải pháp với team nội bộ (development, tester,…) và quản lý các loại tài liệu.
Theo BABOK define:
“A business analyst works as a liaison among stakeholders in order to elicit, analyze, communicate, and validate requirements for changes to business processes, policies, and information systems.”
Tuyển business analyst các ngành hấp dẫn nhất
Vai trò của BA trong dự án:
Là người kết nối giữa các stakeholder, giữa stakeholder và nhóm phát triển.
Là người hiểu về cấu trúc, chính sách, cách vận hành của tổ chức.
Đề xuất các giải pháp giúp tổ chức đạt được các mục tiêu.
BA role
Các công việc của một BA
Tài liệu Architecture: Tài liệu mô tả luồng thao tác người dùng, luồng hoạt động của hệ thống, cấu trúc cơ bản của hệ thống, các thành phần trong hệ thống, tương tác giữa các thành phần trong hệ thống.
Tài liệu SRS or basic design: Tài liệu mô tả chi tiết các chức năng, giao diện của từng chức năng
Tài liệu test point: Các testcase cơ bản, đặc thù liên quan đến giao diện từ phía người dùng.
Thiết kế mô tả database: Database hệ thống, mô tả chức năng của các bảng các trường đặc biệt.
Các bước tiếp cận với yêu cầu mới từ khách hàng
Requirement là gì? Yêu cầu được định nghĩa là: Một điều kiện hoặc khả năng cần thiết của một bên liên quan để giải quyết một vấn đề hoặc đạt được một mục tiêu. Một điều kiện hoặc khả năng mà hệ thống phải đáp ứng hoặc sở hữu để đáp ứng hợp đồng, tiêu chuẩn, đặc điểm kỹ thuật hoặc tài liệu chính thức khác. Một bản trình bày bằng văn bản của một điều kiện hoặc khả năng như trên.
Các bước để tiếp cận một yêu cầu:
Phân tích tổng quan (Enterprise Analysis)
Sau khi nhận được yêu cầu từ khách hàng thì BA sẽ bắt đầu tìm hiểu, nghiên cứu tính khả thi, đánh giá rủi ro, các tình huống có thể xảy ra. Đôi khi yêu cầu đưa ra ở trạng thái sơ sài, khái quát và là nghiệp vụ mới với BA, nếu gặp phải tình huống này thì tìm hiểu thông tin từ internet hoặc tìm người có hiểu biết để tham khảo thông tin.
Khơi gợi, khám phá (Elicitation)
Sau khi kết thúc bước trên thì BA sẽ có hiểu biết cơ bản về yêu cầu của khách hàng, bước thứ 2 này sẽ trao đổi lại với khách hàng để làm rõ yêu cầu.
Cách khơi gợi yêu cầu từ khách hàng
Phỏng vấn các stakeholder liên quan đến dự án. Tập trung các câu hỏi what, why, when, how (Interviews)
Khảo sát yêu cầu (Survey)
Tổ chức các cuộc họp (Meeting)
Quan sát (Observation)
Tạo các bản mẫu (Prototyping)
Phân tích yêu cầu và làm tài liệu (Requirements Analysis & Documentation)
Mô hình hóa yêu cầu bằng các biểu đồ (Workflow, Use Case, Activity diagram, Sequence diagram…)
Tài liệu mô tả database (ERD)
Documentation: Có 2 loại tài liệu thường được sử dụng: SRS (System Requirements Specifications), BD (Basic design).
Đánh giá và xác thực giải pháp (Solution Assessment & Validation)
Bài viết được sự cho phép của tác giả Nguyễn Hữu Đồng
Như chúng ta đều biết, đặc điểm của Docker container là chúng chạy độc lập, và không ảnh hưởng đến nhau, thế nhưng vì một lí do nào đó, chúng ta lại muốn chia sẻ data giữa các container ví dụ, bạn có một 2,3 web server nginx và mong muốn khi chúng share chung các file config, hay html tĩnh. May mắn docker cung cấp volume để thực hiện việc đó.
Docker volume là một volume được tạo ra cho phép các container mount volume vào trong các container hay dễ hiểu hơn là đocker sử dụng Volume đó thay thế cho 1 folder của container.
Để tiến hành chia sẻ file html tĩnh cho các 2 web server nginx, đầu tiên mình tạo một volume và đặt tên nó là nginx-static-html-share-volume
Như các bạn thấy thì volume chúng ta nằm ở “/var/lib/docker/volumes/nginx-static-html-share-volume/_data”
Trước khi chui vào đây thì mình sẽ tạo ra hai web server nginx share folder “/usr/share/html” cho cả hai bằng cách mount volume đó vào 2 container.
docker run -d --name nginx1 --mount source=nginx-static-html-share-volume,destination=/usr/share/nginx/html -p 2222:80 nginx
docker run -d --name nginx2 --mount source=nginx-static-html-share-volume,destination=/usr/share/nginx/html -p 2223:80 nginx
Khi bạn chạy docker run một container, có chỉ định — mount, đầu tiên docker sẽ xem volume đã tồn tại hay chưa, nếu chưa thì docker sẽ tạo volume đó. Sau đó docker sẽ tiến hành copy tất cả các file trong destination vào volume và sau khi copy xong docker container sẽ sử dụng volume đó thay cho destination. Mọi thao tác của container với destination thực chất là thao tác với docker volume.
Hai Web server của mình đã chạy, để tiến hành kiểm tra mình gửi 2 get request tới 2 server và thực sự chúng đã chạy và share chung forder “/usr/share/html”.
curl localhost:2222
Và giờ mình sẽ chui vào docker VM để xem các volume của chúng ta có gì. Để login vào docker VM mình dùng lệnh.
Nói sơ qua một chút về screen, screen cũng tương tự như việc bạn ssh đến một server, nhưng điểm khác với ssh là ví dụ như vì một lí do nào đó mà bị mất kết nối ( ví dụ mạng mất ) thì phiên làm việc (session) của ssh đó sẽ mất, nhưng với screen thì chúng ta có thể kiểm tra các session và resume lại các session đó để làm việc tiếp.
Sau Khi dùng lệnh trên thì mình đã ở trong docker VM, mình sẽ chui vào “/var/lib/docker/volumes/nginx-static-html-share-volume/_data”
để xem có gì không.
docker vm
Đây rồi, thư mục /usr/share/nginx/html
đã được share chung giữa 2 nginx container. Có hai file index.html, 50x.html, mình sẽ tiến hành edit index.html xem nó có tác động gì đến hai nginx server không.
echo "Nginx web Server" > index.html
Nổi dung file đã thay đổi mình sẽ tiến hành gửi hai get request tới 2 server và kì vọng nội dung trả về của hai server trả về sẽ giống nhau.
curl localhost:2222
curl localhost:2223
Và đúng như kì vọng, 2 Docker container đã share chung được data bằng cách mount volume “nginx-static-html-share-volume” vào “usr/share/nginx/html” của 2 container.
Và nếu sau này bạn không có nhu cầu sử dụng volume nữa thì hay remove
nó nhưng trước khi remove nó bạn phải stop và remove docker container.
Và sau khi remove mình lại chui vào docker VM để coi nó đã xoá hay chưa. Lúc nãy mình có tắt ngang “screen” và để coi còn nhưng screen session nào và để resume lại vào session đó mình dùng các lệnh sau.
screen -ls // lệnh này sẽ list ra những session đang tồn tại
screen -r <screen-session-id> // resume một session.
Vậy là volume của mình đã bị xoá.
Tổng kết : Ở bài viết trên mình giới thiêụ với các bạn một số điều cơ bản về docker volume và share data giữa các container bằng docker volume. Mình sẽ tìm hiểu thêm và sẽ chia sẻ với các bạn trong những bài viết sau. Cảm ơn các bạn đã đọc bài viết. Bye bye các bạn. ^_^
Khi App gọi đến API URL: https://abc.com/foo/bar và lúc này ta gọi /foo/bar là Endpoint.
Endpoint là một phần quan trọng trong quá trình phát triển API
Định nghĩa Hàm (Tạo Action Plan)
Công việc đầu tiên của bạn là nghĩ về những thứ mà API của bạn sẽ cung cấp. Đó có thể là 1 danh sách các hàm CRUD (Create, Read, Update, Delete) thao tác với resourece của bạn. Để giải thích rõ hơn thì đây chính là 1 danh sách các “Action” cần phải làm với mỗi resource: Ví dụ:
Bạn có một Resouce là Người dùng và bạn cần 1 danh sách hàm như sau: Users:
Create
Read
Update
Delete
List
Công việc này gần giống với TDD tức là bạn hình dung ra các hàm cần viết và viết các đoạn mã giả giả sử rằng hàm này và class này đã tồn tại rồi đó, sau đó bạn mới định nghĩa chúng.
Nếu API của bạn có chức năng tìm kiếm theo tên hay mã số người dùng thì công việc đó ta liệt vào List nhé: Users:
Create
Read
Update
Delete
List(Name,ID)
Thêm các Params vào có thể tốt và dễ hình dung tuy nhiên không nên thêm quá nhiều và dư như thêm tất cả các thuộc tính vào Create(name,id,age,…) là không nên.
Lý thuyết Restful
Chuyển một Action Plan thành một Danh sách Endpoint thì cần những hiểu biết căn bản về RestFul API và các “Best Practice” trong việc đặt tên. Tất nhiên thì mỗi công ty, mỗi nhóm có chuẩn đặt tên khác nhau và cũng chả thể so sánh được cái nào là tốt nhất. Tuy nhiên mình sẽ nói về cái phổ biến mà mình nghĩ là OKie nhất cho các bạn.
RestFul thì gồm nhiều tuy nhiên có 4 cái căn bản sau: GET – POST- PUT -DELETE
1. GET
GET /resources – Tìm một danh sách records từ resource có thể có phân trang thì tốt nhất hoặc lấy toàn bộ records
GET /resources/X – Chỉ cần lấy Record X, ví dụ /users/thanhtriphap -> Lấy Info mình ra nè
GET /resources/X,Y,Z – Người dùng muốn tìm kiếm trên nhiều điều kiện hay 1 điều kiện mà nhiều giá trị
GET /places/X/users – Lấy tất cả người dùng đang sinh sống trong vùng X
GET /users/X/places – Lấy tất cả các nơi mà người dùng này đang hay đã ở
GET /users/X/places/Y – Tìm kiếm user theo điều kiện X và Places theo điều kiện Y
[Danger Zone] Auto Increment
Trong quá trình học trong trường các bạn thường xài ID dạng Auto-Increment. Tuy nhiên trong thực tế nếu API của ta để như vậy thì người ta có thể biết được số lượng Resource mà ta đang có điều này rất có ích với đối thủ đó chứ.
Biện pháp là ta sử dụng UUID – Các bạn có thể tìm UUID cho PHP, Ruby hay Python và các Package hỗ trợ Gen UUID trên GOOGLE.
2. DELETE
DELETE /users/X – Xóa một người dùng
DELETE /users/X,Y,Z – Xóa một vài dòng dữ liệu
DELETE /users – Xóa tất cả các dòng dữ liệu (Không nên)
DELETE /users/X/image – Xóa image của người dùng X
DELETE /users/X/images – Xóa một loạt các hình ảnh của người dùng X
Về mặt lý thuyết POST dùng tạo 1 dòng dữ liệu mới còn PUT thì dùng cập nhật một dòng dữ liệu đã có. Khác nhau là vậy tuy nhiên trên nguyên tắc thiết kế thì 2 hành động này như nhau mà thôi có nghĩa là những gì POST làm được thì PUT làm được và ngược lại.
Tuy nhiên, tất nhiên phải có sự khác nhau căn bản để dùng chứ. Chúng ta xem khái niệm về idempotent :Có nghĩa là khi mình gọi đến resource dùng PUT n lần thì behavior vẫn là như nhau, dữ liệu thay đổi của lần thứ n vẫn giống như lần gọi đầu tiên
Nghe có vẻ hơi khó hiểu đúng không, thôi ví dụ cho dễ nhé:
Giả sử mỗi sản phẩm chúng ta có 1 hình ảnh đại diện thôi (Chỉ 1 thôi nhé) và mỗi lần ta thay đổi nó tức là thay hình đại diện cho sản phẩm thì dữ liệu vẫn như cũ (Như cũ ở đây có nghĩa là không làm phát sinh thêm dòng nào mới nhé): PUT /products/ao-so-mi-tay-dai-MB2331/image
Cũng ví dụ trên tuy nhiên sản phẩm lại có nhiều hình ảnh thì mỗi lần ta thêm thì có 1 dòng dữ liệu mới nên ta xài POST vì dữ liệu thay đỗi mà: POST /products/quan-tay/images
4. Danh từ số nhiều, số ít hay Cả hai
Một vài Developer thì dùng danh từ số ít một số lại xài số nhiều.
Ví dụ:
GET /user/1 – Trả về user có ID là 1
GET /user – Thắc mắc user nào sẽ được trả về hay về hết
Do đó mình thường xài số nhiều cho các Endpoints:
GET /users/1 – Trả về user có ID là 1
GET /users?limit=5 – Trả về 5 user cho một lượt
5. Danh từ hay động từ
Trước đây khi POST cái gì đó một vài Dev thường dùng động từ:
POST /SendMeAMessage
POST /users/5/send-message
Tuy nhiên hình như hơi có vấn đế, chúng ta chỉ cần 1 động từ duy nhất trong đây là POST PUT hay GET … và URL là danh từ chứ không phải động từ. Một vài ví dụ sau:
POST /users/5/message – Gửi một Message tới User 5
Một cách tuyệt vời hơn chúng ta có thể:
POST /users/thanhtriphap/message
PUT /users/thanhtriphap/message/wsis0n
Xây dựng EndPoints
Sau khi hoàn thành công việc định hình GET, PUT, POST … cho mỗi Action trong Action Plan việc tiếp theo chính là Đặt mỗi Resource trong 1 controller trong đó có các hàm trong Action Plan:
UsersController
CategoriesController
PlacesController
Và hoàn thành việc định tuyến Routing.
Ví dụ trên Laravel Framewok
Kết luận
Làm bất cứ điều gì nếu chúng ta định hình rõ những công việc sẽ phải làm giúp chúng ta dễ dàng hơn rất nhiều trong công việc sau này. Việc tạo ra các Endpoints là cách để Back End và Develper Mobile hay Front End làm việc với nhau và nâng cao hiệu quả công việc.
Bài viết được sự cho phép của tác giả Nguyễn Hữu Đồng
Hi các bạn, sau một tuần không chạm vào laptop thì hôm nay mình quay lại và gửi đến các bạn bài hướng dẫn cài Postgres trên Docker. Trong khi viết những dòng chữ này thì mình đã không còn là developer nữa rồi, nhưng niềm đam mê và sở thích thì vẫn còn đó, và biết đâu sau này mình lại có cơ hội quay trở lại với nghề.
Trước tiên, lý do mà mình cài Postgres trên Docker là vì nó khá đơn giản, dễ cài dễ dùng, muốn xóa đi thì cx dễ remove cái container đi là xong.
Để chạy được postgres thì bạn phải pull image của Postpres về và sử run một container trên image đó.
-d : chạy container ở chế độ deamon, tức là chạy background
-p : map port 2345 vào port 5432 trong container-e POSTGRES_PASSWORD=ai_khoc_noi_dau_nay
: lệnh này set biết môi trường để postgres set password cho tài khoản postgres, nếu không set thì mặc định sẽ là không có.postgres: cái này là tên image.
Ok, giờ mình sẽ chui vào cái container để tạo database cũng như tạo user cho nó, các bạn có thể làm ngoài docker container nhưng nó sẽ yêu cầu bạn nhập pass khi đăng nhập, còn nếu chạy vào docker container luôn thì họ sẽ không yêu cầu nhập pass, điêu này nói rõ ở trong docs nằm ở đây.
Để chui vô bash của container mình dùng lệnh
$ docker exec -it my-postgres bash
Sau đó dùng psql để kết nối với psql user là postgres, và ko cần nhập mật khẩu vì container cho phép điều đó. Tiếp theo tạo database “gaugau”, rồi user có username là “cay_to” và password là “thit cho xao lan” rồi gán tất cả quyền trên database cho user.
$ create database gaugau;
$ create user cay_to with encrypted password 'thi_cho_xao_lan';
$ grant all privileges on database gaugau to cay_to;
Mình dùng lệnh “\l” để list ra tất cả database hiện tại, xem hình thì thấy okie rồi.
Sau đó mình out ra container và dùng psql của máy mình xem có kết nối được không.
Vì mình thao tác ngoài container nên nó yêu cầu nhập pass, nhập “thit_cho_xao_lan” thì mình đã connect thành công.
Mình xin được phép dừng bài viết tại đây, trở lại với vai trò “ chạy chợ “ là dân chợ búa nhưng mình sẽ vẫn tiếp tục hỏi hỏi và hi vọng được chia sẻ nhiều kiến thức hơn với các bạn trong tương lai, bye bye các bạn mình đi dọn hàng tiếp đây, mẹ chửi quá trời. Hihi
Để cài đặt nhiều version php cho nhiều project website, dùng yum-config-manager để cài đặt multiple versions of PHP. Và lưu ý bài viết này dành cho những người có kiến thức cơ bản về Nginx và PHP.
Bài viết được sự cho phép của tác giả Nguyễn Chí Thức
Ngành CNTT (IT- Informatic Technology) trong khoảng chục năm trở lại đây luôn là một trong những ngành “hot” nhất trong thị trường lao động Việt Nam và thế giới. Trong bối cảnh cuộc cách mạng công nghiệp lần thứ 4 đang bắt đầu bùng nổ, ngành IT càng trở nên nóng hơn bao giờ hết.
Bài viết nhằm chia sẻ một số nhận định cá nhân về nghề nghiệp trong CNTT, cũng như dự đoán xu hướng các ngành nghề trong tương lai không xa và các kỹ năng, kiến thức cần thiết cho một vị trí tốt trong một số ngành “hot”. Nội dung bài viết chủ yếu chia sẻ nhận định chủ quan, trải nghiệm cá nhân của mình sau hơn mười năm làm trong ngành công nghệ thông tin. Trong quá trình làm việc, mình đã tham gia và làm đối tác của khá nhiều công ty lớn nhỏ trong và ngoài nước, chứng kiến nhiều sự thay đổi trong công nghệ, thị trường nhân sự, việc làm, cũng như cách thức tổ chức, vận hành, văn hoá doanh nghiệp của nhiều công ty, tổ chức trong ngành.
Điều đầu tiên cần nhấn mạnh là CNTT là một ngành rất rộng, công việc rất đa dạng và phù hợp với nhiều đối tượng khác nhau. Có những việc lặp lại, ổn định, có thể học rất nhanh và không cần đào tạo bài bản (cài đặt máy móc, sửa chữa máy tính cơ bản, lắp đặt phòng máy, mạng, tư vấn sản phẩm, hỗ trợ kỹ thuật sản phẩm, hotline chăm sóc khách hàng…), và có những công việc cần đào tạo bài bản và/hoặc dài hạn hơn, và yêu cầu nhiều chất xám hơn nhiều hơn như lập trình viên, kiến trúc sư hệ thống, chuyên viên phân tích nghiệp vụ, kiểm thử viên, quản trị mạng, phân tích, xử lý dữ liệu… Bài viết này tập trung nói về nhóm ngành thứ hai.
Thách thức trong ngành CNTT
Là ngành “hot” trong thị trường lao động, ngành CNTT thu hút số lượng lớn các sinh viên tham gia học, nhiều trường đại học vốn không liên quan đến IT cũng đã mở ra các khoa mới, liên quan đến IT trong lĩnh vực chuyên ngàng chính của trường, hoặc thậm chí cả các khoa chuyên biệt về CNTT vốn chưa bao giờ là thế mạnh của trường như mạng máy tính hay công nghệ phần mềm… Điều này có thể là đúng, để đáp ứng nhu cầu thị trường và đảm bảo duy trì số lượng / thu hút sinh viên. Tuy nhiên, cũng phải nói là chất lượng đầu ra sinh viên CNTT trong nước nhìn chung đang ở mức độ dưới trung bình, phần đông là chưa đáp ứng được nhu cầu công công việc. Sinh viên ra trường rất đông, không tìm được việc làm hoặc làm trái ngành rất nhiều, nhưng các công ty CNTT đều luôn thiếu nhân sự. Cá nhân mình đã từng phỏng vấn đầu vào không dưới 200 bạn sinh viên ra trường và những người đã đi làm (sau khi đã lọc kỹ hồ sơ), thì tỷ lệ trúng tuyển là tương đối thấp. Và trong số trúng tuyển thì phần đông vẫn là từ các trường Bách Khoa, Công Nghệ, Bưu Chính Viễn Thông, FPT và các trường nước ngoài. Rất nhiều bạn trong số đó đã có thành tích học tập các cấp rất tốt, học chuyên ban từ phổ thông, hay là top ở các trường phổ thông, đại học, rất nhiều bạn đạt giải cao trong các kỳ thi học sinh, sinh viên giỏi và nghiên cứu khoa học các cấp.
Có thể thấy ngành CNTT là ngành có yêu cầu khá cao về cả thái độ, kiến thức, kỹ năng. Điều này bởi nhiều lý do:
Bản thân ngành CNTT là mới (so với rất nhiều ngành khác), lại rất rộng, yêu cầu nhiều kiến thức nền tảng nhưng lại được trang bị khá muộn trong các trường phổ thông.
Công nghệ phát triển chóng mặt, thay đổi liên tục, khiến người làm CNTT nếu không liên tục nghiên cứu, học hỏi, thích ứng thay đổi thì sẽ sớm bị đào thải nhanh chóng.
Mức độ cạnh tranh cao và không phân biệt tuổi tác. Do sự thay đổi hàng ngày của công nghệ, yếu tố kinh nghiệm trong CNTT thường mờ nhạt hơn rất nhiều so với các ngành khác. Một sinh viên giỏi mới ra trường làm 1–2 năm với công nghệ hiện đại có thể dễ dàng vượt qua cả về năng suất lẫn chất lượng công việc so với một người với hàng chục năm kinh nghiệm nếu không chịu cập nhật công nghệ thường xuyên. Phải nói thêm, việc “cập nhật công nghệ” ở đây là để làm việc, tức là học nghề để áp dụng vào công việc, chứ không phải đơn thuần là cập nhật tin tức về công nghệ qua báo chí, truyền hình một cách giải trí.
Nghề nào phù hợp?
Do tính cạnh tranh cao và không phân biệt tuổi tác như đề cập phía trên, ở Việt Nam, mình thường thấy hầu hết mọi người làm “kỹ thuật” trong ngàng CNTT thông thường chỉ làm khoảng chục năm hoặc ít hơn, sau đó chuyển hướng qua “quản lý” hay “kinh doanh“, một là vì không theo kịp thế hệ trẻ đi sau, cảm thấy mệt mỏi, hao mòn, hai là nếu không “thăng chức” sẽ bị coi là kém cỏi vì mãi chỉ làm kỹ thuật. Nhưng theo mình, dù làm kỹ thuật, quản lý, kinh doanh… đều là các “nghề” khác nhau, yêu cầu các kỹ năng khác nhau và phù hợp với từng cá nhân khác nhau. Tiếp xúc với các công ty nước ngoài sẽ thấy điều này rất rõ, làm lập trình viên, hay làm quản lý dự án đều là các nghề, và người ta sẽ làm mãi nghề đó nếu thấy còn phù hợp với bản thân, cả về sở thích, năng lực lẫn thu nhập. Làm quản lý không có nghĩa là thu nhập tốt hơn, hay có địa vị cao hơn, nó chỉ là công việc với tính chất khác. Đồng nghiệp và là quản lý trực tiếp làm việc hàng ngày với mình là một anh người Ý, nhiều năm làm việc ở khắp các nước trên thế giới: Hà Lan, Mỹ, Canada, Singapore, gần 50 tuổi, và vẫn đang làm kỹ thuật thuần tuý. Mình cũng có hỏi về vấn đề này, anh ý trả lời: “Anh không giỏi làm quản lý, giám sát các thành viên trong nhóm, anh chỉ thích nghiên cứu và làm kỹ thuật, được cập nhật công nghệ hàng ngày. Và trí nhớ và suy nghĩ của tôi vẫn hoạt động tốt, chừng nào vẫn còn nhớ tốt thì vẫn sẽ làm kỹ thuật”, và anh này là một đội trưởng kỹ thuật rất tốt, đạo tạo, huấn luyện và truyển cảm hứng học hỏi cho đội. Hay hồi qua Mỹ công tác nửa năm, mình có làm việc cùng những đồng nghiệp hơn 60 tuổi, vẫn hàng ngày thiết kế mạch, lập trình vi điều khiển, và rất uyên bác về mọi công nghệ, xu hướng hiện đại.
Mình muốn nhấn mạnh ở đây là chọn nghề không nên quá theo đuổi xu hướng, mà quan trọng hơn là: trong những xu hướng đó, lựa chọn công việc phù hợp với mình. Vậy những ai phù hợp với CNTT? Theo mình, những người phù hợp với CNTT là những người:
Thích công nghệ. Dấu hiệu: thích đồ mua, đọc đánh giá, ngắm nghía các đồ công nghệ, thích chơi game, hay tìm tòi, thử nghiệm các tính năng phần mềm, trang web…
Tư duy logic tốt và thích logic chặt chẽ. Dấu hiệu: thích học toán, thích lập trình (thích hơn học toán), thích các trò chơi logic, các bài test IQ…
Thích thử thách. Dấu hiệu: tự vào các trang mạng giải toán, giải bài các bài lập trình, thích chế độ thi đấu trực tuyến, chơi các trò chơi trí tuệ….
Cầu toàn. Dấu hiệu: Luôn không ưng ý với những gì đang có, luôn muốn nâng cấp, sửa đổi từ những thứ nhỏ nhất.
Một số việc làm có nhu cầu cao trong ngành công nghệ
Công việc cụ thể của các vị trí này nằm ngoài phạm vi của bài viết này, mình sẽ viết cụ thể hơn ở một bài khác, mọi người có thể tham khảo link cuối bài để biết thêm thông tin.
Trong số đó một số nghề mới trở nên phổ biến gần đây, cùng với sự bùng nổ của cuộc cách mạng công nghiệp lần thứ 4, và chắc chắn sẽ vẫn là các nghề hot trong một thời gian tới như Data Scientist, AI/ML Engineer, Business Intelligence Analyst…
Một số việc khác có thể sẽ thành “hot trend” trong tương lại không xa có thể kể đến như: kỹ sư vạn vật kết nối (IoT Engineer); kỹ sư nhà thông minh (Smart Home Engineer); kỹ sư xe tự lái, xe bay, robot; kỹ sư công nghệ xử lý rác thải, nước thải; kỹ sư thực tế ảo…
Thế hệ trẻ cần chuẩn bị gì để bước vào ngành CNTT trong tương lai
Làm quen, sử dụng các phần mềm máy tính (không phải game) càng nhiều càng tốt: Paint, Word, Powerpoint, Excel, Windows, Photoshop, Illustrator, Algodoo… (từ Tiểu học)
Tiếp xúc, học càng nhiều càng tốt các khoá học STEM (online hoặc offline): lập trình, thuật toán robotics, sáng tạo công nghệ… (từ Tiểu học)
Học chắc chắn các môn toán, và tiếp xúc, học nhiều về các môn toán đặc biệt cần thiết cho ngành khoa học máy tính. Ở Tiểu học và THCS: các môn toán trong trường phổ thông, logic, đồ thị (graph), tập hợp, toán tổ hợp, xác suất… Ở các cấp cao hơn: toán rời rạc, xác suất, thống kê, đại số tuyến tính, giải thích hàm nhiều biến…
Tiếp xúc với lập trình thuật toán, lập trình ứng dụng càng nhiều càng tốt.
Tham gia làm sản phẩm công nghệ thông tin (phần mềm, website, sản phẩm công nghệ…) trong các cuộc thi sáng tạo, tin học trẻ…, và tự làm các sản phẩm công nghệ, phần mềm phục vụ chính nhu cầu của mình và những người xung quanh.
Tham gia, tương tác trên các cộng đồng công nghệ, lập trình trực tuyến
Nội dung, lộ trình, tài liệu học lập trình cụ thể cho các bạn nhỏ từ cấp 2 trở lên mình đã post trước đó. Nội dung và tài liệu cho các bạn nhỏ hơn (tiểu học, tiền tiểu học) mình sẽ chia sẻ ở một bài post khác.
Bài viết được sự cho phép của BQT Kinh nghiệm lập trình
Xác định mục tiêu công việc
Bạn phải xác định được mục tiêu công việc của bạn. Nó là mục tiêu SMART, chứ không giống như mục tiêu công việc các bạn hay đề ra trong cv: cống hiến & tìm công việc ổn định & gắn bó & thăng chức… Mấy dòng này viết vào cho vui thôi.
Có 2 con đường chủ yếu để bắt đầu:
Một là, bạn nhắm vào công ty nhỏ trước, để phát triển kỹ năng bề rộng trước, khiến bạn trở nên đazi năng. Sau đó, bạn tiến vào công ty lớn để trau dồi chuyên môn sâu hơn và tiếp cận hệ thống, quy trình bài bản, chuyên nghiệp. Lúc này, các kỹ năng “thập cẩm”, linh hoạt, nhạy bén, mà bạn tích lũy ở công ty nhỏ, nơi bạn thường phải ôm đồm, kiêm nhiệm nhiều việc sẽ giúp đỡ bạn rất nhiều ở công việc mới.
Có thể việc trúng tuyển vào công ty nhỏ sẽ dễ hơn công ty lớn, vì:
Công ty nhỏ không quá nổi tiếng, không phải ai cũng có thể tiếp cận thông tin tuyển dụng, việc cạnh tranh không quá gay gắt.
Quy trình tuyển chọn đơn giản, trực quan hơn.
Bạn dễ tương tác với sếp hơn.
Yêu cầu với ứng viên không quá cao siêu…
Hai là, bạn tiếp cận các công ty lớn, tập đoàn trước. Việc có thể trúng tuyển hoặc vào các vòng phỏng vấn sau trong quy trình phỏng vấn cũng là một thành công đối với bạn. Bạn sẽ được tiếp cận với quy trình tuyển chọn bài bản, bạn sẽ phải cạnh tranh với nhiều người, trong quá trình phỏng vấn bạn cũng đã tích lũy thêm nhiều kiến thức, kỹ năng rồi, đó là một ưu điểm để bạn nên apply job tới cùng (Vd: Management Trainee).
Lộ trình nghề nghiệp cần lựa chọn thật tỉnh táo
Đánh giá
Ở các công ty lớn, bạn sẽ được đào tạo bài bản hơn, công việc sẽ chuyên biệt hơn, mang lại cho bạn sự chuyên nghiệp, năng lực được đào sâu, tập trung vào một mảng.Nếu có thể thăng tiến lên cấp quản lý ở đây luôn thì rất tốt. Nhưng có lẽ cơ hội không đủ nhiều cho tất cả.
Do đó, bạn có thể cân nhắc tình huống nhảy sang công ty nhỏ làm quản lý. Dựa vào năng lực chuyên môn của bạn, dựa vào brand name của công ty… đó sẽ là điểm cộng cho bạn ở các vị trí trong công ty nhỏ.
Sau khi trải nghiệm cả hai môi trường công ty lớn và nhỏ, thì bạn cũng sẽ có kha khá tích lũy rồi, lúc ấy, bạn hoàn toàn có thể xác định cho mình con đường hoặc đích đến tiếp theo.
Bonus: Mức lương khởi điểm ở công ty lớn thường sẽ cao hơn, chức vụ ở công ty nhỏ thì lại cao hơn.
Nhu cầu xin nghỉ việc là nhu cầu tất yếu phải xảy ra khi một cá nhân cảm thấy không còn điểm chung đối với doanh nghiệp. Đây là lúc bạn cần quan tâm đến việc làm thế nào để có một lá đơn xin nghỉ việc phù hợp. Đồng thời, có rất nhiều hình thức xin nghỉ việc. Viết mail xin nghỉ việc là một trong số đó. Cùng đọc bài viết sau đây để nắm bắt những thông tin bổ ích về vấn đề này nhé.
Thế nào là viết mail xin nghỉ việc?
Đơn giản, mail xin nghỉ việc nó cũng giống như một lá đơn xin nghỉ việc thông thường. Nó có hiệu lực trong một khoảng thời gian nhất định; có ý nghĩa thông báo cho tổ chức/doanh nghiệp về việc dừng hoạt động công tác của một cá nhân nào đó.
mail xin nghỉ việc
Đây được xem là một hình thức viết đơn xin nghỉ việc gián tiếp. Dù nói như vậy, nhưng bạn vẫn phải trực tiếp đến tổ chức để hoàn tất các giấy tờ nếu có các phát sinh về pháp lý. Thực tế, viết mail xin nghỉ việc hoàn toàn giống với cách tổ chức viết đơn xin nghỉ việc bình thường. Điểm khác duy nhất chính là cách thức viết được truyền tải trên một phương tiện chuyển giao gián tiếp qua hòm thư mail; thay vì văn bản giấy như hình thức thông thường.
Khi đưa ra một quyết định nghỉ việc thường sẽ không dễ dàng. Nó đòi hỏi sự cân nhắc kỹ lưỡng đến từ nhiều phía. Và khi đã thật sự có quyết định, bạn nên có một mail xin nghỉ việc hợp lý, đúng chuẩn.
Điều này sẽ giúp bạn để lại ấn tượng đẹp trong lòng các đồng nghiệp; doanh nghiệp của mình. Đồng thời cũng thể hiện mình là người có ý thức làm việc. Dưới đây sẽ là những tips giúp bạn viết mail xin nghỉ việc sao cho thật hiệu quả.
1. Đảm bảo một lý do xin nghỉ việc thật thuyết phục
Lý do xin nghỉ việc thật sự rất quan trọng không chỉ với đơn xin nghỉ việc thông thường; mà còn đối với mail xin nghỉ việc. Mail xin nghỉ việc của bạn có được chấp thuận hay không; tất cả đều phụ thuộc lớn vào lý do xin nghỉ việc. Hãy thật tỉnh táo để cho đưa ra các lý do hợp tình nhất; tránh những lý do bất khả thi. Điều này sẽ tạo sự thuận lợi giúp mail xin nghỉ việc của bạn dễ được phê duyệt hơn.
Tìm ra một lý do xin nghỉ việc không khó khi bạn thật sự rời đi với các mong muốn chính đáng. Nếu thiếu chuyên nghiệp trong cách làm việc thì có lẽ, bạn đã bị loại khỏi cuộc chơi nghề nghiệp từ lâu rồi.
Một lý do xin nghỉ việc thuyết phục còn giúp bạn nhận được sự đồng cảm từ cấp trên; công ty và các cộng sự. Từ đó, bạn cũng cảm thấy thật thoải mái khi rời đi; chuyển sang một môi trường khác phù hợp hơn.
2. Lưu ý về việc chi tiết thời gian nghỉ việc
Bạn cần phải rõ ràng trong từng nội dung được đề cập trong mail xin nghỉ việc. Cụ thể, đó chính là thời gian nghỉ việc. Việc chia sẻ cụ thể thời gian nghỉ việc giúp nhà quản lý nắm bắt chính xác được quãng thời gian bạn nghỉ. Đồng thời, họ cũng có những cơ sở về thời gian để tìm kiếm; chọn lọc các nhân sự mới cho vị trí mà bạn rời đi.
Theo quy định của Bộ luật Lao động năm 2019, từ năm 2021, người lao động nghỉ việc phải báo trước ít nhất 45 ngày với hợp đồng không xác định thời hạn.
Nếu còn thời hạn hợp đồng từ 12 – 36 tháng phải báo trước ít nhất 30 ngày; hợp đồng dưới 12 tháng chỉ cần báo trước ít nhất 03 ngày; trừ một số trường hợp được đơn phương chấm dứt hợp không cần báo trước.
Trong trường hợp, bạn là người chịu trách nhiệm quản lý các đầu công việc chính, là Team Lead,.. thì bạn cần nhiều thời gian hơn để bàn giao công việc. Bên cạnh đó, nếu công việc của bạn tương đối phức tạp cần nhiều thời gian để bàn giao công việc. Thậm chí, bạn có thể cân nhắc kỹ hơn về việc kéo dài thêm thời gian làm việc ra đôi chút để bàn giao; làm việc với nhân sự mới để họ có cái nhìn đủ tốt với vị trí họ sắp đảm nhận.
3. Tận tình chia sẻ về những thứ còn đang thực hiện
Nếu là một nhân viên có tâm và có tầm, bạn hoàn toàn có thể chia sẻ về những dự án còn dang dở về tiến độ thực hiện trong mail xin nghỉ việc của mình.
Cụ thể, khi đã trình bày lý do xin nghỉ việc, hãy khéo léo nhắc đến chúng. Nói chi tiết về những vấn đề đang còn tồn đọng; tính hiệu quả và gợi ý về những cách thức – giải pháp tiếp theo nào có tính khả thi để thực hiện. Dù là những thông tin phân tích từ một người sắp trở thành cựu nhân viên, nhưng những gì bạn truyền tải qua mail xin nghỉ việc chắc chắn sẽ để lại ấn tượng đẹp trong lòng những bạn bè, đồng nghiệp,…
Việc chia sẻ này cho thấy bạn là người có trách nhiệm với công việc cao; luôn quan tâm đến sự phát triển chung của tổ chức dù không còn hoạt động nữa. Một thái độ chuyên nghiệp qua cách viết mail xin nghỉ việc cũng là điều quan trọng bạn nên lưu tâm, thực hiện.
4. Một điều cực quan trọng – Hãy nói lời cảm ơn
Thời gian gắn bó với tổ chức của bạn dù ngắn hay dài thì khi ra đi, bạn cũng nên nói lời cảm ơn. Chí ít bạn đã có sự trưởng thành hơn nhờ những cọ xát thực tế; có cho mình những trải nghiệm mới. Lời cảm ơn thể hiện bạn là người biết lý lẽ; chuyên nghiệp trong cách hành xử, cách sống và là một nhân viên có phẩm chất tốt.
mail xin nghỉ việc
Đứng bao giờ quên nói lời cảm ơn hoặc quên thể hiện thái độ trân trọng, biết ơn đối với doanh nghiệp của mình.
5. Không bao giờ đưa ra những lời phê phán
Đây được xem là điều tối kỵ bạn không nên thể hiện trong mail xin nghỉ việc.
Đặc biệt, trong phần lý do xin nghỉ việc, đừng bao giờ chia sẻ rằng công ty có môi trường không tốt, có đãi ngộ không phù hợp,…
Dù bạn biết thực tế là vậy, nhưng nếu là người chuyên nghiệp không ai lại quá thẳng thắn như thế. Hãy bình tĩnh để đưa ra một lý do xin nghỉ việc qua mail phù hợp nhất. Hãy thể hiện tính chuyên nghiệp, sự hòa đồng thân thiện. Vì đó là những dấu ấn về thái độ cuối cùng đối với tổ chức, doanh nghiệp của bạn.
Cấu trúc viết một mail xin nghỉ việc cực chuẩn
Hãy đảm bảo rằng mail xin nghỉ việc của bạn phải có những phần nội dung sau:
1. Phần thông tin mở đầu
Đây là phần thông tin quan trọng bao gồm tên người nhận hoặc nơi nhận đơn xin nghỉ việc của bạn. Như phân tích trước đó, bạn nên ghi rõ về thời gian sẽ rời khỏi công ty. Lưu ý là viết mail xin nghỉ việc cần đúng trọng tâm, không lan man, mơ hồ.
Ví dụ:
Kính gửi [Tên chức danh cấp trên/tổ chức],
Tôi/Em là…., tôi/em viết mail xin thống báo chính thức về việc tôi/em sẽ nghỉ việc tại công ty với vị trí [chức danh hiện tại]. Ngày làm việc cuối cùng của tôi/em là [ngày chính thức bạn rời công ty].
2. Phần lời chia sẻ cảm ơn
Đơn giản, không hoa mỹ – cầu kỳ. Bạn chỉ cần có những chia sẻ chân thành nhất đối với công ty. Thể hiện sự tri ân là điều bạn nên làm. Hãy biết ơn vì các cơ hội học tập, làm việc và truyền tải thông điệp đó thông qua mail xin nghỉ việc của bạn.
Ví dụ:
Em xin cảm ơn quý công ty vì đã cho em cơ hội làm việc trong khoảng thời gian dài qua. Tại đây, em làm việc rất vui và học được nhiều thứ từ các anh chị dày dặn kinh nghiệm. [Kể tên một trải nghiệm công việc thú vị mà bạn đã thử sức]. Em cảm ơn vì sự tín nhiệm của công ty đã dành cho em thông qua các dự án dài hạn. Thật sự em rất trân trọng vì cơ hội này.
Đây là phần khá trọng tâm. Vi thông qua phần này, nó sẽ phản ánh tính trách nhiệm của bạn đối với công việc của tổ chức. Hãy chủ động thống kê; và tập hợp các nguồn dự liệu để bàn giao công việc cho nhân sự mới một cách tốt nhất.
Đồng thời, thể hiện sự sẵn lòng giúp đỡ nhân sự mới khi họ cần thông tin về các nhiệm vụ trước đây. Tất nhiên là chỉ duy trì trong một giới hạn thời gian cho phép.
Ví dụ:
Trong thời gian…. tới, tôi/em sẽ sớm sắp xếp lại các nhiệm vụ, hoàn thành tốt các công việc còn dàng dở cũng như bàn giao cho nhân sự mới. Tôi/em mong quý công ty sẽ thông tin đến tôi/em biết nếu tôi/em có thể giúp gì được cho công ty vào khoảng thời gian còn lại này.\
Gửi lời chúc tốt đẹp nhất đến với công ty, tôi/em xin cảm ơn.
Trân trọng,
[Ký tên ghi tên của bạn]
Mẫu đơn xin nghỉ việc qua email dành cho bạn
Tiêu đề mail: THƯ XIN NGHỈ VIỆC_[TÊN CỦA BẠN]_ [VỊ TRÍ/CHỨC DANH]
Kính gửi: Anh/chị [tên người nhận]
Em xin gửi email này để thông báo chính thức về vấn đề thôi việc/dừng công việc tại công ty với vị trí [tên vị trí/chức danh] vì [lý do nghỉ việc]. Ngày làm việc cuối cùng của em sẽ là [ngày chính thức nghỉ]. Em rất lấy làm làm tiếc vì sẽ không còn làm việc tại [tên công ty] trong thời gian sắp tới.
Thực sự đây là quyết định rất khó khăn đối với em. Hiện tại sau khoảng thời gian dài làm việc, em nhận thấy mình đã có được những trải nghiệm thú vị, các kỹ năng chuyên sâu hơn từ công việc và môi trường nơi đây. [Liệt kê một số điều mà bạn tâm đắc]. Em cảm thấy cảm thấy may mắn khi được làm việc cùng những đồng nghiệp thân thiện, đồng thời cũng rất biết ơn sự hỗ trợ và tạo điều kiện của cấp trên và đồng nghiệm để em có thể hoàn thành tốt công việc này.
Trong thời gian tới, cụ thể là…., em sẽ cố gắng hoán tất sớm các công việc còn dang dở. Đồng thời em sẽ tập hợp các hồ sơ, phân loại để bàn giao; hướng dẫn lại cho nhân sự mới đảm nhận vị trí của mình. Ngoài ra, anh/ chị vui lòng báo cho em biết nếu em có thể giúp gì cho công ty trong thời gian chuyển giao công việc.
Em hi vọng quyết định này sẽ nhận được sự chấp thuận từ chị và cấp trên. Và một lần nữa em xin cảm ơn vì sự tín nhiệm của cấp trên và tố chức. Chúc mọi người có thật nhiều sức khỏe và công ty sẽ ngày càng phát triển.
Trân trọng,
Ký tên
[Tên của bạn]
Lời kết
Với những chia sẻ trên, TopDev hi vọng bạn sẽ có những thông tin bổ ích về cách viết mail xin nghỉ việc thế nào là hiệu quả. Chúc cho bạn sẽ có một email thật chuyên nghiệp và để lại những dấu ấn đẹp trong tổ chức của bạn.
Có thể bạn đang nghĩ, âm nhạc thì liên quan gì đến lập trình? Là một Professional Developer, tôi lại ý thức rất rõ về sự kết nối giữa việc học lập trình với âm nhạc trong việc luyện kỹ năng coding của mình. Cả hai đều đòi hỏi rất nhiều sự tập trung, kỷ luật và kiên trì để trở nên tuyệt vời hơn trong chuyên môn của mình. Dưới đây tôi sẽ chia sẻ với các bạn những đặc điểm mà âm nhạc và lập trình đều giống nhau trong quá trình luyện tập.
Coding với âm nhạc thì liên kết với nhau như thế nào?
Âm nhạc gắn kết với coding như thế nào?
Hãy cố gắng hết mình
Dù là với khi luyện tập cùng âm nhạc hay hay khi luyện kỹ năng coding, bạn đều cần phải nỗ lực hết mình nếu muốn đạt được kết quả tốt nhất. Hầu hết mọi người trong cuộc sống đều không có 24 giờ rảnh rỗi liên tục để làm bất cứ điều gì chúng ta muốn. Sẽ luôn có một cái gì đó xuất hiện và chúng ta phải giải quyết nó.
Thực tế phũ phàng là chúng ta phải giữ kỷ luật hoàn thành công việc để có thể trở thành những lập trình viên giỏi hơn. Vì vậy, khi bạn chuẩn bị kiếm cớ khác để trì hoãn, hãy nhớ hoàn thành nó bằng mọi cách!
Bất cứ khi nào tôi cố gắng học một phần mới, tôi sẽ thất vọng vì nó không tốt hơn chút nào. Dù tôi có luyện bao nhiêu lần đi chăng nữa thì vẫn là một mớ hỗn độn. Nhưng tôi đã sớm nhận ra rằng chỉ xuất hiện và luyện tập là không đủ. Bạn phải thực hành thông minh.
Vì vậy, tôi đã học cách chia mọi thứ thành nhiều phần nhỏ, làm chậm máy đếm nhịp và làm việc trên đoạn văn đó cho đến khi nó đúng. Một khi tôi thay đổi thói quen luyện tập của mình, tôi bắt đầu trở thành một nhạc sĩ giỏi hơn nhiều.
Trong việc học coding, việc học vội vã qua một khóa học sẽ không khiến bạn trở thành một lập trình viên giỏi hơn. Trong một số trường hợp, bạn có thể hình thành một số thói quen xấu mà sau này khó bỏ. Tốt hơn là bạn nên giải quyết từng vấn đề một và giải quyết nó một cách từ từ hơn là vội vàng vượt qua tất cả chúng. Nếu bạn thực hành một cách thông minh, thì các khái niệm sẽ bắt đầu có ý nghĩa hơn.
Nhất quán là chìa khóa của thành công
Tôi là một đứa trẻ bắt đầu chơi piano từ năm 7 tuổi và thực sự đam mê nó trong vài năm đầu. Nhưng một khi tôi bắt đầu làm việc với những bài khó hơn, tôi lại mất dần động lực tập luyện. Tôi đã không luyện tập thường xuyên và kết quả là tôi không khá hơn chút nào. Các bài học của tôi kết thúc là một sự lãng phí hoàn toàn bởi vì chúng tôi chỉ học qua những thứ giống nhau tuần này qua tuần khác.
Với tất cả những lời quảng cáo về việc học cách coding tại nhà, rất nhiều người bắt đầu tham gia với sự hào hứng ban đầu. Họ sẽ trải qua các hướng dẫn và xây dựng các dự án nhỏ từ lớp học. Nhưng khi nhiều tháng trôi qua, mọi người bắt đầu mất động lực. Họ bắt đầu viết code ít thường xuyên hơn và cuối cùng mất hứng thú và bỏ cuộc.
Khi học cách viết code, bạn phải đưa ra một lịch trình nhất quán, nếu không bạn sẽ không bao giờ trở thành một lập trình viên thực thụ. Bạn sẽ luôn gặp khó khăn trong việc đấu tranh với các nguyên tắc cơ bản và không bao giờ có thể xây dựng các dự án phức tạp hơn. Bạn không cần phải dành 12 giờ mỗi ngày để thành công. Xây dựng một lịch trình phù hợp với bạn. Nếu bạn chỉ có 2 giờ mỗi ngày để dành cho việc học, thì hãy gắn bó với điều đó. Nhưng lặp lại chu kỳ làm 8 giờ một ngày và sau đó nghỉ hai tuần sẽ chỉ dẫn đến sự thiếu tiến bộ.
Nhất quán là chìa khóa để thành công dù là với bất cứ lĩnh vực nào.
Hãy nỗ lực để trở thành môn chuyên gia trong lĩnh vực của mình
Hãy học những gì bạn chưa biết
Trong năm cuối đại học của tôi, người chỉ huy dàn nhạc gió của chúng tôi đã nói rằng “Hãy can đảm để làm những gì mà bạn không biết.” Hầu hết chúng tôi muốn học nhạc bằng cách mà chúng tôi đã quen thuộc là nghe hay trong phòng tập. Đó có lẽ là một cách để chúng ta cảm thấy dễ chịu và đánh đổi cái tôi của mình một chút.
Nếu bạn không thử thách bản thân và khắc phục những điểm yếu của mình thì bạn sẽ không bao giờ phát triển như một nhạc sĩ.
Có quá nhiều thứ để học khi bạn mới bắt đầu với tư cách là một lập trình viên. Chỉ tập trung vào những thứ bạn thích thú thực sự rất hấp dẫn. Điều hợp lý là bạn muốn cảm thấy hài lòng về bản thân và thể hiện những gì bạn biết. Nhưng điều đó không cho bạn lý do để bỏ qua những gì bạn đang yếu kém. Nếu bạn biết mình kém về thuật toán, đừng bỏ qua chúng. Dành thêm thời gian để nghiên cứu và luyện tập thật nhiều để chúng trở nên dễ giải quyết hơn. Hoặc có thể bạn đang gặp khó khăn với đệ quy. Nó sẽ không biến mất chỉ vì bạn không thích nó.
Dù khó khăn trong lúc này nhưng bạn phải có kỷ luật ngồi xuống và rút ra những điều cần học.
Dường như có một sự kết nối rất rõ ràng giữa việc học lập trình với học âm nhạc. Hãy biết cách tận dụng những gì tốt nhất để luyện tập mỗi ngày và trở nên thông thái hơn với chuyên môn của mình.
Khi sử dụng automation để thực hiện tự động một việc nào đó, mà ở đó có sự xuất hiện của một số những thông tin nhạy cảm mà ta không muốn nó bị lộ thiên cho bàn dân thiên hạ thấy, vậy thì chúng ta phải làm như thế nào? Thông tin nhạy cảm ở đây có thể là thông tin password chẳng hạn :)) Tuy nhiên, nếu như bạn chỉ là thực hiện công việc test thông thường và không quan tâm lắm, hoặc không có các dữ liệu nhạy cảm thì có thể bỏ qua bài này nhé :))) Nhưng mình nghĩ là đã đọc đến đây rồi thì đọc nốt đi, biết đâu sau này lại cần dùng thì sao? :v
Bởi vì Selenium thông thường thì sẽ không có khả năng che dấu mật khẩu và thậm chí kể cả IDE của Elipse cũng vậy. Cho nên người ta mới nghĩ ra một cách để có thể giúp kiểm soát việc hiển thị của các dữ liệu nhạy cảm bên ngoài môi trường kiểm thử (hoặc môi trường thực tế nào đó), đó là tạo một lớp để có thể thực hiện mã hóa (hoặc giải mã) dữ liệu khi thực thi.
Có hai cách để bạn có thể thực hiện mã hóa, ở đây mình ví dụ là mã hóa mật khẩu nhé.
Cách 1
Cách thứ nhất sử dụng thư viện java.util.Base64, bạn thực hiện mã hóa bằng cách sử dụng hàm mã hóa mặc định của BASE64 với cú pháp như sau:
static String password= "yourPassword";
public static String getDecodedpassword() {
return new String(Base64.getDecoder().decode(decodepassword.getBytes()));
}
Cách này khá là đơn giản, nhưng đối với những password dài quá 12 ký tự và có những ký tự đặc biệt khi mã hóa sẽ bị quá độ dài có thể xử lý hiển thị được của BASE64, không hợp lệ đối với lý tự đặc biệt và theo mình thì đây cũng chính là điểm yếu của cách này. Chắc là không khuyến khích sử dụng cách này rồi.
Cách 2
Cách thứ 2 là sử dụng thư viện sun.misc.BASE64Encoder với thư viện này thì ta có thể thoải mái với bất kỳ loại password nào (bất kỳ password này là do mình nghĩ ra và nhập vào =)) ) Tương tự cách 1 chỉ khác import thư viện và hàm sử dụng một chút thôi.
static String decodepassword = "yourPassword@874";
public static String getDecodedpassword() {
return new String(new BASE64Encoder().encodeBuffer(decodepassword.getBytes()));
}
Với cách thứ 2, ta không phải nghĩ về vấn đề độ dài của password hay các ký tự đặc biệt xuất hiện trong password nhập vào. Bên cạnh đó, ta cũng có thể tự tùy biến một hàm mã hóa, và hàm giải mã của nó kết hợp với 1 key (chìa khóa) để giải mã. Key này có thể là một chuỗi ký tự bất kỳ, bằng một vài kỹ năng cơ bản ta kết hợp chuỗi key này vào trong chuỗi password ban đầu rồi sau đó mới thực hiện mã hóa. Tất nhiên để giải mã ngược lại thì ta cũng cần phải có key chính xác đã được sử dụng ở phần mã hóa. Tùy nhu cầu mà bạn có thể lựa chọn cách phù hợp nhé :)) Chỉ có điều cách nào ngon thì sẽ phải ngồi code í, :))) – Không code thì chịu khó Google chắc là sẽ ra, à chắc chắn sẽ ra :v
Đấy, tóm lại là muốn bảo mật hơn thì tất nhiên phải dành thời gian :))) Các bạn có thể tham khảo link này để xem thêm việc biến tấu mật khẩu kết hợp với key để mã hóa, rồi sau đó thực hiện giải mã với key đã có nhé.
Mình nghĩ là đưa ra gợi ý đến đây cũng khá là chi tiết và đầy đủ thông tin rồi nhỉ. Các bạn đã sử dụng những cách nào rồi, hay có còn những cách nào khác không? Nếu có vui lòng chia sẻ cho mình và các bạn đọc khác cùng biết nữa nha. Hoặc có ý kiến đóng góp, trao đổi gì thì cũng đừng ngần ngại để lại bình luận phía dưới nhé!
Trên bàn phím máy tính, đặc biệt là các bàn phím dạng Full Size hay là bàn phím của Laptop thường được trang bị một cụm phím Media riêng. Nó thường được tích hợp luôn vào một trong các phím từ F1 đến F12 trên các mẫu bàn phím phổ thông.
Khi sử dụng máy tính thì hầu hết mọi người đều có nhu cầu giải trí bằng cách nghe nhạc, chơi game hoặc là xem phim, lúc đó những phím media này sẽ phát huy tác dụng tuyệt vời của nó.
Tuy nhiên, trong một vài trường hợp, khi bạn sử dụng các trình duyệt web mà đơn cử như là Google Chrome thì mặc định, Chrome sẽ chiếm quyết sử dụng các phím Media và chúng không thể sử dụng được chúng cho những phần mềm khác.
Chính vì sự bất tiện này mà trong bài vài viết ngày hôm nay, mình sẽ chia sẻ với các bạn cách để ngăn Google Chrome chiếm trọn quyền sử dụng các phím Media trên bàn phím nha !
#1. Phím Media trên bàn phím là gì?
Cụm phím media trên bàn phím gaming Corsair Vengeance K70
Phím Media, hay còn gọi là phím đa phương tiện bao gồm các phím như Pause, Play, Next, Previous, Mute và phím Tăng giảm âm lượng.
Những phím này thường được nằm tách riêng ra một góc đối với những bàn phím Gaming dạng Full size như chiếc Corsair Vengeance K70 bên trên, hoặc là tích hợp thẳng vào các phím F1 - F12 trên các bàn phím phổ thông.
Còn về chức năng thì quá rõ rồi, cái tên đã nói lên tất cả, nó giúp bạn có thể Dừng, Đổi nhanh bài hát đang nghe mà không cần phải mở phần mềm lên rồi dùng chuột để lựa chọn nữa và có thể dùng với mọi phần mềm trên tất cả các hệ điều hành.
Còn việc Google Chrome chiếm quyền sử dụng phím Media trên bàn phím là sao? Nếu bạn là người có thói quen vừa nghe nhạc bằng Spotify, SoundCloud hay là iTunes,… vừa xem phim hay xem video trên Youtube thì sẽ hiểu.
Lúc này các phím Pause, Play, Next… sẽ chỉ có tác dụng với bộ phim, video bạn đang xem trên Google Chrome mà thôi, còn các ứng dụng/ chương trình khác trên máy tính thì không sử dụng được.
Và lúc này, nếu bạn muốn chuyển nhạc thì bạn sẽ phải vào trực tiếp ứng dụng nghe nhạc đó để chuyển bài hát, tạm dừng bài hát… điều này khá là bất tiện.
Mà coi phim hay xem video trên Youtube thì ta thường ưu tiên dùng chuột chứ ai rảnh mà ngồi bấm mấy phím này phải không nào.
=> Đấy, chính vì lý do đó mà mình mới chia sẻ thủ thuật này với các bạn.
#2. Ngăn Google Chrome chiếm quyền sử dụng toàn bộ các phím Media trên bàn phím
Cách khắc phục thì vô cùng đơn giản, đầu tiên bạn hãy truy cập vào địa chỉ chrome://flags hoặc chrome:flag để mở trang quản lý những tính năng đang được thử nghiệm trên Google Chrome, cái này chắc nhiều bạn không lạ gì nữa rồi.
Google Chrome sử dụng được những phím media trên bàn phím là nhờ một flag có tên Hardware Media Key Handling, để khắc phục thì rất dễ thôi, bạn chỉ việc vô hiệu hóa flag này là được.
Thực hiện:
+ Bước 1: Trước hết bạn hãy dán từ khóa Hardware Media Key Handling để tìm kiếm và bạn sẽ chỉ thấy kết quả duy nhất như hình bên dưới.
Hoặc bạn có thể truy cập nhanh theo địa chỉ này:
chrome://flags/#hardware-media-key-handling
+ Bước 2: Mặc định thì flag này đang ở trạng thái Default tương đương với Enabled, bây giờ bạn hãy click vào Default và chọn lại thành Disabled để vô hiệu hóa flag này.
+ Bước 3: Cuối cùng, cũng giống như khi chỉnh sửa Registry của Windows 10, bạn vẫn sẽ phải khởi động lại trình duyệt web bằng cách bấm vào nút Relaunch xuất hiện sau khi bạn thay đổi thiết lập, để những thay đổi này có hiệu lực.
Nhớ là lưu lại các trang web, nội dung quan trọng mà bạn đang làm việc trên trình duyệt web trước khi khởi động lại để tránh bị mất dữ liệu đáng tiếc nhé !
#3. Lời kết
Như vậy là mình đã vừa chia sẻ cho các bạn cách để khắc phục, ngăn Google Chrome chiếm trọn quyền sử dụng các phím Media trên bàn phím rồi đấy.
Đây là những phím rất hữu ích và bạn sẽ thường dùng đến nếu là một người hay nghe nhạc, xem phim… Hy vọng là bài viết này sẽ có thể giúp ích được cho các bạn. Đừng quên chia sẻ nếu thấy nó hay nhé.
“Kiểm thử tự động không phải là kiểm thử, nó chỉ là kiểm tra” Một ai đó đã nói như thế. Với mình, sau khoảng hơn 10 năm làm kiểm thử – cả thủ công và tự động, câu nói này không hề sai chút nào.
Hãy cùng thử nhìn qua các lợi ích mà nó mang lại:
Hỗ trợ kiểm thử qui hồi – Regression Test → Giảm thiểu thời gian và chi phí.
Hỗ trợ kiểm thử độ chịu tải của hệ thống → Làm cho việc kiểm thử mở rộng và đầy đủ.
Kịch bản chạy nhiều lần với nhiều bộ dữ liệu, điều kiện và môi trường khác nhau. → Tăng độ bao phủ của việc kiểm thử.
Kịch bản kiểm thử tốn quá nhiều thời gian và dễ bị lỗi của người kỹ sư → Tăng cường độ chính xác của việc kiểm thử.
Trong mọi tình huống, Automation Test chỉ tác dụng hỗ trợ cho kỹ sư kiểm thử tiến hành kiểm thử theo những kịch bản có sẵn, do kỹ sư kiểm thử đưa ra. (Ở đây, mình không bàn đến kiểm thử bằng AI nhé, chuyên ngành này vẫn đang được phát triển trong phòng thí nghiệm và – theo mình biết thì – chưa thực sự ứng dụng thực tế).
Đối với kiểm thử thủ công, kỹ sư kiểm thử cần một số kỹ năng đặc biệt như: biết cân bằng, có mức độ tò mò cao, biết cách tìm/xác định lỗi/bug, có cái nhìn tổng thể, khả năng quan sát, sắp xếp mức độ ưu tiên, suy nghĩ độc lập, sáng tạo, vân vân và mây mây.
Ngược lại, đối với Automation Test chỉ yêu cầu một thứ: khả năng lập trình. Mà, trong một số trường hợp, khả năng lập trình cũng không cần thiết – nếu dự án của bạn dùng một công cụ không cần lập trình – codeless tool.
Về công việc
Công việc của kỹ sư kiểm thử thủ công sẽ bao gồm: đọc tài liệu mô tả các yêu cầu chức năng, lên kế hoạch kiểm thử, viết kịch bản kiểm thử, tiến hành kiểm thử (ghi nhận kết quả) và ghi nhận/báo cáo lỗi/bug (nếu có), làm báo cáo kiểm thử sau khi hoàn thành.
Công việc của kỹ sư kiểm thử tự động chỉ là: chuyển các kịch bản kiểm thử do kỹ sư kiểm thử thủ công đưa ra thành các đoạn mã kiểm thử tương ứng, đồng thời đảm bảo tính chính xác và ổn định của đoạn mã kiểm thử đó.
Với những yêu cầu kỹ năng và công việc hằng ngày như thế, so ra, việc kiểm thử tự động thực sự không khó như kiểm thử thủ công.
Bạn có cảm thấy như vậy không? Kiểm thử tự động thực ra không khó chút nào, kiểm thử thủ công mới thực sự là thử thách.
Trước khi tham khảo thông tin bài viết này, bạn cần biết về Integration test là gì? Và Nock là một giải pháp tốt trong việc mocking các request đến các APIs khi làm với NodeJS để trả ra expected bạn mong muốn.
Khi chạy Integration test chúng ta khó có thể Injection vào function để mock như Unit test được. Vì thế việc gọi các APIs và trả ra dữ liệu mong muốn với phương thức Injection vào function thì khá khó khăn.
Việc mock vào HTTP request để các APIs trả ra dữ liệu thì khả quan hơn!
Ví dụ: Itegration có function gọi tới API của Amazon mà mock nó trả ra dữ liệu mình muốn.
Có rất nhiều package tương tự Nock như Pact, Chai, Sinon nhưng việc sử dụng thì mình thấy Nock hoạt động dễ dàng và cách dùng rất dễ hiểu!
Làm CV online không phải là điều đơn giản vì nó đòi hỏi ứng viên nắm được những bước căn bản. Hiểu thế nào là CV? Tìm những nguồn nào để làm cv online tốt nhất? CV có những điểm gì khác so với Cover Letter? Cùng TopDev tìm hiểu bài viết sau đây để biết cách lựa chọn và làm cv online hiệu quả. Đồng thời, cung cấp cho bạn những phân tích sâu về CV, Cover Letter.
Khi làm CV – Đâu là những điều đáng lưu ý
Hiểu rõ về CV và cách phân biệt CV vơi Cover Leter?
Trước khi làm cv online, bạn cần hiểu CV là gì? CV là loại văn bản ngắn được cấu tứ theo một chuẩn format nhất định. Nó được trình bày trên một trang A4. Tính ngắn gọn, dễ hiểu và nhấn mạnh trọng tâm nội dung là điều người viết cần đặc biệt lưu ý khi viết CV.
Tùy theo từng loại CV IT gắn với các vị trí ứng tuyển cụ thể, các thông tin về cá nhận, học vấn – trình độ năng lực, kinh nghiệm, mục tiêu phát triển nghề nghiệp,.. của một ứng viên sẽ linh hoạt được thay đổi, bổ sung và tinh gọn sao cho phù hợp nhất với nhu cầu từng ứng viên, cũng như đòi hỏi từ phía nhà tuyển dụng.
Vậy thế nào là Cover Letter cho Dev?
Phân biệt Cover Letter là bước tiếp theo để bạn không bị nhầm lẫn định hướng khi làm cv online Cover Letter (hay còn gọi là Thư xin việc), là một loại văn bản được xây dựng dưới hình thức một trang. Cover Letter cho Dev được đánh dấu chuyên biệt cho lĩnh vực IT. Cụ thể là từng vị trí cụ thể hơn như Senior Developer, Freelancer IT,… Tùy thuộc vào từng vị trí mà cách truyền tải các thông tin về cá nhân, năng lực, trình độ, mục tiêu phát triển sẽ khác nhau. Đó là các thông tin ban đầu giúp ứng viên tạo ấn tượng quan trọng đến nhà tuyển dụng.
Chất lượng của một Cover Letter cho Developer
Làm cv online cần nắm bắt tốt các đặc tính về CV lẫn Cover Letter. Và chất lượng của một Cover Letter sẽ quyết định thành công kết quả ứng tuyển, chiếm từ 30 đến 50%. Điều đó đồng nghĩa, việc bạn đầu tư cho bản thân một Cover Letter hoàn hảo, chuyên nghiệp là điều đúng đắn.
Hãy cố gắng hoàn thiện Cover Letter của mình thật chỉn chu để đủ sức gây ấn tượng với nhà tuyển dụng. Đặc biệt, do tính cạnh tranh của thị trường tuyển dụng ngày một gia tăng, bạn không nên ỷ lại, quá tự tin. Cũng đừng xem thường các đối thủ vì trong tích tắt bạn có thể bị vượt qua. Đừng để bản thân mình “out” khỏi hành trình nghề nghiệp với sự thờ ơ đối với chính Cover Letter của mình.
Cover Letter có thể phản ánh cả hai mặt. CV cũng tương tự, đó cũng là một điểm bạn cần lưu ý khi làm cv online Một là bạn hoàn toàn là ứng viên phù hợp với vị trí. Hai là bạn không thuộc về vị trí đó, Chính đây cũng là bải học để bạn tự nhìn nhận về Cover Letter, những gì bản thân chia sẻ lẫn định hướng tương lai của mình. Việc xem xét, điều chỉnh sẽ giúp bạn hoạn thiện và phát triển bản thân mình nhiều hơn.
Bám sát trọng tâm cấu trúc format và cách thức tổ chức nội dung
Ứng viên IT cần lưu ý về việc lựa chọn các định dạng phù hợp cho CV IT và Cover Letter cho Dev. Tùy thuộc vào từng vị trí Freelancer IT, tuyển dụng Data Analyst, Senior Developer. Các bạn cần hiểu rõ một CV và Cover Letter:
+ Gồm những nội dung cơ bản nào
+ Đâu là phần quan trọng cần triển trai chi tiết
Từ đó, bạn biết kiểm soát và chọn lọc nội dung phù hợp. Điều này giúp hồ sơ xin việc dễ dàng ghi điểm với nhà tuyển dụng hơn.
Bạn có thể linh động chuyển đổi các các phần nội dung cho hợp lý. Để tạo điểm nhấn trong CV của mình mình, hãy cân nhắc sắp xếp hợp lý. Quan trọng hơn nữa, đừng để cập đến các nội dung không liên quan đến vị trí bạn ứng tuyển.
Tính ngắn gọn – dễ hiểu của mẫu làm CV online
Cả CV và Cover Letter cần phải đảm bảo tính ngắn gọn, dễ hiểu. Lưu ý không nên viết quá dàn trải, thậm chí lan man. Văn phong dài dòng khiến thông điệp của ứng viên trở nên lủng củng, mất đi các giá trị. Vì thế, hãy sử dụng câu từ dễ hiểu, cách viết đơn giản để hồ sơ xin việc của bạn đạt hiệu quả hơn.
Đồng thời, viết CV giúp bạn định hình và có những trải nghiệm tốt hơn. Trường hợp bạn ứng tuyển các vị trí khác như freelancer it hay Senior Developer đều sẽ đạt hiệu quả ứng tuyển cao hơn.
Nhà tuyển dụng cần nắm bắt nhanh những mô tả về ứng viên. Đó cũng chính là cơ sở họ xem xét tính quyết định đến việc chi tiết hóa nội dung tài liệu của bạn. Do vậy, hãy thật sự chăm chút cho bộ hồ sơ ứng tuyển của mình.
Kỹ năng – Phần nội dung quan trọng đối với việc làm CV online
Chỉ cần 3-5s, nhà tuyển dụng có thể dễ dàng phân loại chất lượng CV IT của bạn. Nó ngắn hơn các loại văn bản dài như sơ yếu lý lịch cho IT,…Điều đó đồng nghĩa cơ hội để bạn tạo ấn tượng là hết sức cạnh tranh.
Nếu không biết tạo điểm nhấn, đặc biệt đối với các vị trí cao hơn nhưSenior Developer, CV của bạn sẽ bị quên lãng.
Phần kỹ năng là phần rất quan trọng. Nó chiếm phần trăm lớn sự kỳ vọng mà mọi nhà tuyển dụng tìm kiếm ở ứng viên. Do vậy, việc trình bày, chọn lọc các kỹ năng cũng cần phải thông minh và có chiến lược. Đừng để CV IT của bạn trở nên không có giá trị. Và tất nhiên, bạn sẽ bị out khỏi vòng phỏng vấn đấy!
Các lưu ý khi trình bày mục kỹ năng – Skills trong CV của bạn
Có thể bạn có rất nhiều kỹ năng. Thế nhưng, điều này không có nghĩa bạn có thể phô trương hết chúng vào trong làm CV online của mình. Với trường hợp làCV cho sinh viên IT mới ra trường, có thể bạn còn thiếu sót.
Tuy nhiên, khi apply các vị trí khác thìCV Junior Developer,Senior Developer,Mobile App Developer thìCV IT của bạn cần phải tập trung vào các kỹ năng chuyên sâu hơn. Vì vậy, hãy lưu tâm những tips sau đây:
Chi tiết hóa và thể hiện các kỹ năng tương ứng với vị trí công việc
Mục đích quan trọng của phần kỹ năng là thuyết phục nhà tuyển dụng bạn phù hợp với vị trí ứng tuyển.
Vì vậy, chỉ những kỹ năng quan trọng đến vị trí ứng tuyển thì mới nên hiện diện trong list kỹ năng CV. Ví dụ như đối với làm CV Developer,Senior Developer, bạn nên lựa chọn các kỹ năng chuyên sâu về công nghệ như các ngôn ngữ lập trình, viết code, và các kiến thức có liên quan.
Đồng thời, viết CV giúp bạn định hình và có những trải nghiệm tốt hơn. Trường hợp bạn ứng tuyển các vị trí khác nhưfreelancer it haySenior Developer đều sẽ đạt hiệu quả ứng tuyển cao hơn.
Có tính toán trong việc phân chia kỹ năng
Việc linh hoạt trong việc phân chia các kỹ năng có ý nghĩa rất quan trọng.
Hãy chia các kỹ năng của bạn thành từng các mục nhỏ ứng với các đặc trưng chuyên môn khác nhau.Senior Developer, bạn có thể liệt kê và phân chia các kỹ năng về ngôn ngữ lập trình; các nhóm kỹ năng về phần mềm. Chính việc phânloại giúp bạn hiểu rõ hơn về vị trí. Đồng thời, nhà tuyển dụng sẽ đánh giá cao hơn về năng lực phân tích của bạn.
Chọn lọc và nhấn mạnh kỹ năng quan trọng
Đây là cách ứng viên nhấn mạnh các kỹ năng quan trọng bằng cách lặp lại các kỹ năng. Tất nhiên, việc “rải” từ khóa về kỹ năng cần ứng viên phải khéo léo và tinh tế. Bạn có thể phân theo từng mục và giới hạn xuất hiện để đảm bảo các kỹ năng không bị trùng lặp quá nhiều lần.
Cụ thể bạn có thể liệt kê kỹ năng trong phần đầu – phần giới thiệu và phần kinh nghiệm làm việc. Từ khóa về kỹ năng rất quan trọng để nhà tuyển dụng kết luận đâu là điểm mạnh của bạn. Tuy vậy, tần suất hoàn hảo nhất của một kỹ năng chỉ nên từ 2-3 lần.
Ứng viên không nên quá lạm dụng. Đặc biệt, kỹ năng được lặp lại phải thật sự phản ánh chính xác năng lực của bạn.
Độ dài khi làm CV online cho Dev – Liệu có quan trọng hay không?
CV có độ dài lý tưởng sẽ thể hiện mức độ phụ ứng giữa những trải nghiệm chuyên
CV cho Dev dài 1 trang
Đối vớiCV cho sinh viên IT mới ra trường (CV IT student) thì CV một trang là sự lựa chọn hoàn hảo và an toàn nhất. Đơn giản vì họ chưa có nhiều kinh nghiệm. Họ còn “non” trong một môi trường IT khá cạnh trạnh. Đây cũng là thời điểm tốt để họ bắt đầu những trải nghiệm, tích lũy để nâng cấp cho CV của mình.
Liệu rằng làm CV online 2 trang sẽ khiến nhà tuyển dụng lắc đầu?
Nếu xét trong một phạm vi lý tưởng,mẫu CV IT tiếng việtsẽ có độ dài tiêu chuẩn 2 trang CV. Một khảo sát thực tế cho thấy đó là sự yêu thích của 91% nhà tuyển dụng. Đặc biệt, nhiều công ty ở Anh đã từ chối CV ít hơn 2 trang của các ứng viên với lý do CV họ chưa nhiều ấn tượng. Nguyên nhân được cho là chưa biết cách chọn lọc, hiểu rõ về các kỹ năng thế mạnh của bản thân.
Hãy thật sự quan tâm đếnmẫu CV IT tiếng việt của bạn. Vì nhiều trường hợp đòi hỏi bạn viếtCV IT tiếng Anh (CV English IT); hay khi bạn apply các vị trí đa dạng như App Mobile Developer,Senior Developer thìCV IT Developer cũng cần được đảm độ về độ dài song song với việc kết hợp lựa chọn các kỹ năng phù hợp.
CV Dev có thể 3 trang hoặc dài hơn
Nói một cách thực tế, không một nhà tuyển dụng thích các ứng viên có CV quá dài. Tuy nhiên, nên nhìn nhận sâu hơn vì phạm vi sử dụng CV 3 trang vẫn được biết đến.
Đồng thời, viết CV giúp bạn định hình và có những trải nghiệm tốt hơn. Trường hợp bạn ứng tuyển các vị trí khác nhưfreelancer it haySenior Developer đều sẽ đạt hiệu quả ứng tuyển cao hơn.
CV 3 trang sẽ phù hợp với các nhà quản lý, giám đốc cấp cao, các học giả, nhà khao học khi muốn truyền tải các nội dung; thông điệp đính kèm với các ấn phẩm tài liệu, nghiên cứu của mình.
Giải pháp giúp tối ưu số lượng chữ trên CV cho Dev
Sau đây là một số tips có thể giúp bạn cải thiệnmẫu CV IT tiếng việt của mình trở nên ngắn gọn hơn.
Ưu tiên các kỹ năng – kinh nghiệm có liên quan đến vị trí ứng tuyển
Đây là mẹo nhưng cũng chính là một kỹ năng quan trọng khi viết CV. Thông minh trong việc chọn lọc thông tin về các kinh nghiệm. Ứng viên chỉ nên liệt kê các kỹ năng – trải nghiệm có liên quan đến vị trí ứng tuyển. Điều này giúp CV đạt chuẩn hơn, chuyên nghiệp hơn. Vì vừa đảm bảo tính khoa học, vừa truyền tải đúng các thông điệp.
Yếu tố dễ đọc – nắm bắt nhanh nội dung CV
Đừng quá dài dòng, thê lê nhiều con chữ! Điều đó chỉ khiến CV trở nên không điểm nhấn. Bạn nên rút gọn câu từ, sử dụng những từ ngữ đơn giản. Hoặc tương tư nhưCV Template IT,sơ yếu lý lịch cho dân IT,cover letter cho dev thìmẫu CV IT tiếng việt của bạn nên lượt bỏ đi những phần không thật sự quan trọng, cần thiết.
Quan tâm đến mặt hình thức cấu trúc CV
Kích thước cỡ chữ, font chữ trongmẫu CV IT tiếng Việt cũng là một yếu tố quan trọng. Đừng để font chữ quả to hoặc quá nhỏ. Cần lưu ý đến khoảng cách lề trang sao cho nhất quán. Điều này có ý nghĩa quan trọng vì chi phối trực tiếp đến định dạng bố cục thông tin được trình bày trênmẫu CV IT tiếng việt.
Tips giúp tối ưu việc làm CV Developer hiệu quả nhất
– Điểm lại những yếu tố cốt lõi tạo nên giá trị chính của CV: mục tiêu nghề nghiệp, kỹ năng, trình độ và kinh nghiệm chuyên môn của bạn.
– Phải nhớ: Tính ngắn gọn, súc tích, mạch lạc – dễ hiểu trongmẫu CV IT tiếng việtrất quan trọng. Vì đó tạo nên sức hút cho nhà tuyển dụng từ những ánh nhìn đầu tiên.
– Đừng để CV xin việc dài quá 2 trang .
– Kiểm soát thông tin, không nén quá nhiều thông tin trong CV của bạn.
Nhà tuyển dụng cần nắm bắt nhanh những mô tả về ứng viên. Đó cũng chính là cơ sở họ xem xét tính quyết định đến việc chi tiết hóa nội dung tài liệu của bạn. Do vậy, hãy thật sự chăm chút cho bộ hồ sơ ứng tuyển của mình.
Cách viết mẫu CV free cho Dev với một số vị trí cụ thể
CV IT Administrator cực chuẩn
Thông tin liên hệ
Hãy cung cấp các thông tin về:
Số điện thoại
Email
Kênh liên hệ cá nhân (nếu có)
Mục tiêu nghề nghiệp
Mục tiêu này, bạn nên đưa ra các mục tiêu rõ ràng, tránh mơ hồ.
Ví dụ: Tôi nộp đơn vì mục đích: Có cơ hội trải nghiệm và phát triển nghề nghiệp tốt hơn. Tôi muốn làm việc tại … với vị trí IT Administrator và định hướng sắp tới, tôi hy vọng mình sẽ gặp gỡ các đối tác tiềm năng. Đồng thời, mục tiêu lâu dài tôi mong muốn trở thành một Administrator Manager.
Nếu có thể, bạn hãy khéo kéo đưa vào một số thế mạnh: Một vài điểm nổi trội về bản thân
+ Kinh nghiệm làm việc (đề cập đến số năm kinh nghiệm)
+ Chứng chỉ chuyên ngành/kỹ năng mềm (nên có thông tin xác nhận)
+ Các kỹ năng liên qua trực tiếp đến vị trí IT Administrator, các nền tảng kiến thức quan trọng từ các chương trình nghiên cứu
Trình độ học vấn
Liệt kê trường đại học hoặc các khoa học gần đây của bạn. Lưu ý, hãy đề cập đến các khóa học liên quan vị trí ứng tuyển. Điều này sẽ giúp CV IT của bạn thu hút hơn. Dù là CV IT tiếng anh hay tiếng việt, bạn cũng đang tạo ra lợi thế cho mình. Các khóa học liên quan về:
Quản trị mạng
Quản lý bảo mật
Thiết kế web
Hỗ trợ ứng dụng và hệ thống email
Kinh nghiệm làm việc
Trình bày những kinh nghiệm làm việc tại các công ty trước đó (ghi cụ thể thời gian). Vị trí/chức vụ đảm nhận và các task – nhiệm vụ) cụ thể bạn thực hiện.
Một số vị trí liên quan nền tảng: System Engineer, IT Excutive, IT Helpdesk,…
Bạn ghi rõ nhiệm vụ nhưng cần đảm bảo không quá dài dòng. Thông qua từng trải nghiệm công việc, nhà tuyển dụng sẽ hiểu rõ hơn về sự định hướng sự nghiệp sắp tới của bạn. Freelancer IT cũng đánh giá kinh nghiệm quan trọng cuộc đua nghề nghiệp của bạn.
Kỹ năng
Liệt kê các kỹ năng bạn có và đánh dấu mức độ thể hiện ở từng kỹ năng. Đây là một số kỹ năng cần có trong CV IT Administrator. Tuy nhiên, bạn vẫn phải đảm đảm độ chân thật với năng lực thực tế.
Giao tiếp
Kỹ năng tư duy hệ thống/quản lý
Teamwork
Tin học văn phòng
Ngoại ngữ
Kỹ năng hỗ trợ dịch vụ
Chứng chỉ, hoạt động, giải thưởng và các sở thích
Đây là phần nội dung bạn sẽ tự linh độngvề chúng có xuất hiện trong CV IT Administrator của mình hay không? Nếu có các chứng chỉ hoặc các thành tích cá nhân, bạn có thể bổ sung vào CV. Bạn nên cân nhắc và lựa chọn các thông tin có liên quan trước khi đưa chúng vào “tấm vé” tuyển dụng của mình.
IT Programmer – Mẫu CV free cho Dev đẹp nhất
Tên của bạn (và các thông tin cá nhân)
Ví dụ: Raina Angela Barbie
raina.anbie@gmail.com | 111-xxx-xxx| Texas, NY
Mục tiêu nghề nghiệp
Đây là mục khá quan trọng đối vớiCV ngành ITcủa bạn. Nhà tuyển dụng sẽ đánh giá mức độ hoạch định mục tiêu phát triển của bạn.
Ví dụ: Học hỏi và nâng cao trình độ chuyên môn về lập trình JavaScript, C++. Mong muốn trở thành chuyên gia nghiên cứu các giải pháp phát triển; hỗ trợ và đào tạo các lập trình viên trẻ tuổi.
Kỹ năng
Một số kỹ năng bạn mà IT Programmer CV của bạn có thể cân nhắc lựa chọn là:
Tư duy định hướng, làm việc nhóm
Đa nhiệm, sáng tạo
Phân tích và giải quyết vấn đề
Kỹ năng giao tiếp nâng cao (đồng nghiệp, đối tác,…)
Khả năng thích ứng và chịu áp lực
Kỹ năng chuyên sâu
Vị trí này đòi hỏi bạn cần có nhiều kinh nghiệm hơn. Vì thế, quá trình tạo CV IT tiếng anh hoặc tiếng việt cũng chính là cơ hội bạn đánh giá lại các kỹ năng của mình.
Dưới đây là các kỹ năng chuyên sâu mà cần có cho vị trí IT Programmer:
– Hệ thống máy tính: Mac OS X, DOS, Window,…
– Các ngôn ngữ lập trình: React JS, C++, HTML, Python, SharePoint,…
– Cơ sở dữ liệu: MS Access, Oracle 9.x, FileMaker Pro, FoxPro, MySQL
Trình độ học vấn
Do là vị trí đòi hỏi nhiều kinh nghiệm, ngoài việc trình bày nơi học tập (tốt nghiệp Cử nhân…., điểm GPA (nếu muốn đề cập), bạn có thể chia ra các phần như:
Các khóa học có liên quan
+ Phát triển phần mềm (Software Development)
+ Coding cơ bản và nâng cao (Coding Basics, Advanced)
+ Quản lý dự án (IT Project Management)
+ An ninh Mạng (Cyber Security)
+ Quản lý bảo trì thiết bị (CMMS)
+ Xử lý sự cố (Troubleshooting)
Và các khóa học khác…
Dự án cộng đồng
Bạn nên trình bày các dự án có gắn liền với việc sử dụng chuyên một hay nhiều cơ sở dữ liệu hoặc các chuyên môn có liên quan.
Ví dụ sử dụng FileMaker Pro để thiết kế các đơn nộp trực tuyến,…
Giải thưởng danh dự
Nói về các giải thưởng bạn/Team bạn đạt được nếu có.
Kinh nghiệm
Phần này tùy thuộc vào “tuổi nghề” mà bạn sở hữu. Hãy thông minh trong việc trình bày các kinh nghiệm có trong CV IT của mình. Nếu bạn là một freelancer IT, đừng ngần ngại chia sẻ trải nghiệm của mình vào việc làm CV online IT nhé! đơn xin nghỉ việc, kỹ năng giao tiếp
Gợi ý cho bạn là có thể chia sẻ các trải nghiệm theo từng giai đoạn:
– Thực tập sinh – Programmer Intern
– Giai đoạn trình độ được nâng cao và phát triển (có thể chạm đến mức độ là IT Specialist – Chuyên viên)
– Giai đoạn hợp tác và đại diện cho các khách hàng/đối tác lớn (nếu có)
Mỗi giai đoạn, bạn có thể trình bày:
+ Những nhiệm vụ bạn đã thực hiện một cách cụ thể
+ Các thay đổi tích cực qua số liệu
+ Những bài học đúc kết
Chứng chỉ
Liệt kệ ngắn gọn các chứng chỉ khoa học chuyên ngành cùa bạn nếu có.
Ví dụ: C++ Certified Associate Programmer, Java SE 8 Programmer,…
Tham khảo các mẫu CV free cho Dev hấp dẫn nhất
M1 – CV đa nhiệm
M2 – CV đa nhiệm
M3 – CV đa nhiệm
Mẫu CV cổ điển
Mẫu CV cổ điển
M1 – CV Pro
M2 – CV Pro
M3 – CV Pro
Tuyển Dụng Nhân Tài IT Cùng TopDev Đăng ký nhận ưu đãi & tư vấn về các giải pháp Tuyển dụng IT & Xây dựng Thương hiệu tuyển dụng ngay!
Hotline: 028.6273.3496 – Email: contact@topdev.vn
Dịch vụ: https://topdev.vn/page/products
Bài viết được sự cho phép của tác giả Nguyễn Văn Minh
Pattern thứ hai mà mình muốn giới thiệu chính là Abstract Factory. Nó có thể được hình dung như một nhà máy lớn, bên trong có các nhà máy nhỏ hơn sản xuất ra những loạt sản phẩm liên quan đến nhau.
Hãy lấy một hãng sản xuất ô tô làm ví dụ, chẳng hạn Hyundai. Họ có nhà máy, hoặc xưởng, chế tạo bánh xe: bánh của Azera, bánh của Sonata, bánh của Veloster, v.v… Đến lượt cửa xe, cũng có nhà máy chế tạo cửa Azera, cửa Sonata, cửa Veloster. Thân xe, động cơ, đèn, và các thành phần khác có những nhà máy chế tạo chúng.
Vậy phải tổ chức việc sản xuất ấy như thế nào? Cùng theo dõi tiếp nhé!
Nếu mới làm quen với Design Pattern, có thể bạn sẽ muốn đọc bài tổng quan của mình tại đây hoặc bài về Singleton tại đây.
ABSTRACT FACTORY
Giống như ở bài trước về Singleton, bài này gồm 5 phần:
Ý tưởng chính
Vấn đề cần giải quyết
Cấu trúc
Code ví dụ
Lưu ý
Vài lời bình luận
Ý tưởng chính
Khai báo một interface với các phương thức tạo các đối tượng abstract.
Một hệ thống phân cấp với các “dòng xe” và các “bộ phận xe”.
Tránh sử dụng từ khoá new.
Vấn đề cần giải quyết
Khi bạn muốn phần mềm của mình có thể được triển khai trên nhiều nền tảng khác nhau, bạn phải tìm cách xử lý việc khởi tạo các đối tượng trên các nền tảng đó. “Nền tảng” ở đây có thể hiểu là hệ điều hành, cơ sở dữ liệu,… Trong ví dụ ở phần mở đầu, Azera, Sonata và Veloster chính là các nền tảng.
Tuy nhiên, nếu bạn xử lý chuyện này bằng những câu if ... else thì chẳng mấy chốc code của bạn sẽ thành một mớ bòng bong vì phần mềm sẽ dần nở to. Và đó là lý do mà Abstract Factory ra đời.
Cấu trúc
Ta cần có năm thành phần, đó là:
Abstract Platform: interface hoặc abstract class với các phương thức tạo ra các “sản phẩm”
Concrete Platforms: Khai báo cụ thể các “nền tảng” (PlatformOne, PlatformTwo trong hình)
Abstract Products: interface hoặc abstract class định nghĩa các loại “sản phẩm” (AbstractProductOne, AbstractProductTwo trong hình)
Concrete Products: Khai báo cụ thể các “sản phẩm” (ProductOnePlatformOne, ProductOnePlatformTwo, ProductTwoPlatformOne, ProductTwoPlatformTwo trong hình)
Client: Đối tượng sử dụng Abstract Platform và Abstract Product
Với ví dụ về việc sản xuất xe, biểu đồ có thể trở thành như sau.
Bạn cũng cần kiểm tra các tiêu chí dưới đây.
Hãy xem xét liệu việc độc lập với các “nền tảng” và việc khởi tạo các đối tượng có phải là vấn đề của hệ thống hiện tại hay không.
Làm rõ đâu là “nền tảng”, đâu là “sản phẩm”, và mối quan hệ giữa chúng.
Định nghĩa một factory (interface) với đầy đủ các phương thức khởi tạo từng sản phẩm.
Định nghĩa các lớp dẫn xuất của interface trên, đảm bảo đã “bao gói” các phương thức khởi tạo (ứng với việc gọi new).
Client không được dùng new mà phải dùng các phương thức mà bạn đã khai báo ở interface.
Code ví dụ
Dưới đây là code ví dụ về việc khởi tạo các loại CPU, MMU, viết bằng ngôn ngữ Java.
Các “sản phẩm” (CPU, MMU)
// class CPU
abstract class CPU {}
// class EmberCPU
class EmberCPU extends CPU {}
// class EnginolaCPU
class EnginolaCPU extends CPU {}
// class MMU
abstract class MMU {}
// class EmberMMU
class EmberMMU extends MMU {}
// class EnginolaMMU
class EnginolaMMU extends MMU {}
enumArchitecture {
ENGINOLA, EMBER
}
abstractclassAbstractFactory {
privatestaticfinal EmberToolkit EMBER_TOOLKIT = new EmberToolkit();
privatestaticfinal EnginolaToolkit ENGINOLA_TOOLKIT = new EnginolaToolkit();
// Returns a concrete factory object that is an instance of the
// concrete factory class appropriate for the given architecture.
static AbstractFactory getFactory(Architecture architecture) {
AbstractFactory factory = null;
switch (architecture) {
case ENGINOLA:
factory = ENGINOLA_TOOLKIT;
break;
case EMBER:
factory = EMBER_TOOLKIT;
break;
}
return factory;
}
publicabstract CPU createCPU();
publicabstract MMU createMMU();
}
Client
publicclassClient { publicstaticvoid main(String[] args) { AbstractFactory factory = AbstractFactory.getFactory(Architecture.EMBER); CPU cpu = factory.createCPU(); } }
Lưu ý
Creational patterns có thể kết hợp với nhau hoặc thay thế cho nhau. Và để quyết định dùng pattern nào hoặc kết hợp như thế nào, bạn phải xem xét trường hợp của mình.
Abstract Factory thường được kết hợp với Factory Method, đôi khi là cả Protoype nữa.
Abstract Factory có thể thay thế cho Facade để che giấu những lớp được đặc tả riêng cho từng “nền tảng”.
Phân biệt Abstract Factory và Builder. Trong khi Abstract Factory chú trọng việc khởi tạo những nhóm đối tượng có liên quan đến nhau (chiều ngang); thì Builder chú trọng vào việc tạo ra một đối tượng qua nhiều bước nối tiếp nhau, giống như một dây chuyền vậy (chiều dọc). Trường hợp của Abstract Factory, đối tượng được trả về ngay; còn trong trường hợp của Builder, đối tượng là kết quả của cả quá trình.
Thông thường, việc thiết kế hệ thống sẽ đi từ Factory Method (dễ hiểu, dễ tuỳ biến) thành Abstract Factory, Prototype, hoặc Builder (mềm dẻo hơn, phức tạp hơn) nếu như người thiết kế cảm thấy tính mềm dẻo là cần thiết.
Vài lời bình luận
Như đã nói ở trên, các creational pattern có thể thay thế cho nhau hoặc kết hợp với nhau tuỳ hoàn cảnh, và việc thiết kế có thể đi từ Factory Method đến Abstract Factory. Tức là bạn phải xem xét thật kỹ càng bài toán của mình để biết cần lựa chọn giải pháp nào, thay vì vội vàng lựa chọn.
Các pattern được đưa ra rõ ràng là đem lại cái lợi lớn cho các lập trình viên nhưng bạn không nên lệ thuộc vào chúng. Theo tôi, đừng bao giờ nên giả định rằng: “Chắc tương lai hệ thống sẽ phải thế này, thế kia” hay “Có lẽ sau này hệ thống cần phải mềm dẻo hơn, flexible hơn nên phải chọn Abstract Factory”. Code ít hơn bao giờ cũng tốt hơn.
Bài viết này chia sẻ một số cách sử dụng Xpath và CSS selector để tìm một phần tử nào đó trong Selenium. Bài này khá là hữu ích đối với mình, và mình cũng hi vọng sẽ giúp ích một phần nào đó cho các bạn.
Bên cạnh bài viết này các bạn cũng có thể tham khảo bài biết về các cách xác định locator của một phần tử web ở bài viết này nhé.
ID của một phần tử được định nghĩa viết theo cú pháp Xpath là “[@id=’idName’]” nhưng theo cú pháp CSS thì nó là “#idName”/
Ví dụ phần tử div có id là ‘panel’ sẽ được diễn tả như sau:
Xpath: //div[@id=’panel’]
Theo CSS selector: css = div#panel
2. Theo Class:
Class của một phần tử được định nghĩa theo cú pháp Xpath là “[@class=’className’]” nhưng theo cú pháp CSS nó được định nghĩa là “.className”.
Ví dụ một phần tử div với class là ‘panelClass’ sẽ được diễn tả như sau:
Theo Xpath locator: //div[@class=’panelClass’]
Theo CSS selector: css=div.panelClass
Đối với những phần tử có nhiều class thì cần tách riêng những class đó bằng cách sử dụng dấu cách (“ “) trong Xpath, và sử dụng dấu chấm (“.”) trong CSS. Các bạn xem ví dụ phía dưới này nhé:
Theo Xpath locator: //div[@class=’panelClass1 panelClass2′]
Theo CSS selector: css=div.panelClass1.panelClass2
3. Một số thuộc tính khác
Để lựa chọn một phần tử theo một số thuộc tính bất kì nào đó của nó, (ví dụ: một phần tử div có thuộc tính name, hay thuộc tính type của một phần tử input) ta có như sau:
Với Xpath locator: //div[@name=’continue’] và //input[@type=’button’]
Với CSS selector: css=div[name=’continue’] và css=input[type=’button’]
4. Phần tử con liền kề (direct child)
Một phần tử con liền kề của một phần tử được biểu thị bằng hai dấu gạch chéo xuôi “//” trong Xpath và dấu ngoặc lớn hơn (“>“) trong Css selector. Xem ví dụ dưới đây về phần tử “ul” có phần tử con liền kề là “li”
Với Xpath locator: //ul/li
Với CSS selector: css=ul > li
5. Child / subchild
Phần tử con hoặc phần tử “cháu” (phần tử con của phần tử con) được biểu thị bằng hai dấu gạch phải “//” trong Xpath, và dấu cách (“ “) trong CSS Selector. Dưới dây là ví dụ về một child/subchild “li” của phần tử cha “ul”
Với Xpath locator: //ul//li
Với CSS selector: css=ul li
Các bạn lưu ý tránh nhầm lẫn giữa cách biểu diễn “ul li” và “ul > li” nhé!
6. nth Child:
Để tìm phần tử con thứ nth, theo cú pháp Xpath ta sẽ sử dụng “[n]”, theo CSS chúng ta sẽ biểu thị theo cú pháp “:nth-of-type(n)”. Các bạn tham khảo ví dụ phía dưới nhé:
Ta có phần tử có id =’drinks’ chứa 1 danh sách các loại đồ uống:
Coffee
Tea
Milk
Soup
Soft Drinks
Để lấy ra đồ uống số 5 trong danh sách trên:
Theo Xpath: //ul[@id=’drinks’]/li[5]
Theo CSS: css=ul#drinks li:nth-of-type(5), cũng có thể sử dụng cú pháp khác là li:nth-child(5).
7. Cha của 1 phần tử – Parent of an element
Cha của một phần tử có thể được biểu diễn thông qua ký tự “/..” trong Xpath và “:parent” trong CSS. Ví dụ dưới dây nếu bạn muốn tìm cha của danh sách các mục của class ‘blue’ thì:
first
second
third
fourth
fifth
Theo Xpath: //li[@class=’blue’]/..
Theo CSS: css=li.blue:parent
8. Tìm anh em cùng cha(Next Sibling)
Next Sibling chính là những phần tử anh em cùng cấp với nhau thuộc cùng một phần tử cha nào đó. Tìm phần tử next sibling tức là lấy ra 1 phần tử tiếp theo sau một phần tử cụ thể nào đó khác, điều kiện là nằm trong cùng 1 cha.
Ví dụ bạn muốn chọn ra anh em của phần tử “li” ở vị trí thứ 2 trong danh sách có class “blue”:
Trong Xpath: //li[@class=’blue’]/../li[2]
Trong CSS selector: css=li.blue + li
Tương tự nếu ban jmuoons lấy phần tử thứ 3 trong danh sách ta có các biểu diễn theo cú pháp lần lượt như sau:
In Xpath locator: //li[@class=’blue’]/../li[3]
In CSS selector: css=li.blue + li + li
9. Tìm phần tử theo Text tương ứng với Text trong phần tử đó (Innertext)
Ta sẽ sử dụng một phương thức Javascript là methodcontains() để kiểm tra đoạn văn bản “text” bên trong một phần tử web. Ví dụ với một link có text là “Sign in”
Theo Xpath locator: //a[contains(text(), ‘Sign in’)] hoặc a//[contains(string(), ‘Sign in’)]
Theo CSS selector: css=a:contains(‘Sign in’)
10. Tìm phần tử dựa theo Sub-string tương ứng có trong phần tử đó (Match by Sub-string)
Đây là một cách khá là thú vị nhé! Với cách này ta sẽ kết hợp các chuỗi dựa vào một phần của chuỗi đó. Ví dụ như dựa vào tiền tố (Prefix), hậu tố (suffix) hoặc một dạng mẫu (sub-string) nào đó.
(*) Tìm theo sub-string (bộ mẫu) – Substring (partern)
Ví dụ về 1 phần tử ‘div’ với một ‘id’ và chứa đoạn text là “partern”
Với Xpath locator chúng ta sẽ cần sử dụng hàm contains() để kết hợp 1 sub-string:
//div[contains(@id,’pattern’)]
Với CSS selector ta sẽ sử dụng “*=” để kết hợp 1 sub-string:
css=div[id*=’pattern’]
(*) Tìm theo tiền tố – prefix
Với ví dụ 1 phần tử ‘div’ với một ‘id’ và đoạn text bắt đầu với đoạn text “prefixString”:
Theo Xpath locator ta cần sử dụng từ khóa “starts-with” để tìm prefix tương ứng:
//div[starts-with(@id,”prefixString”)]
Theo CSS selector ta sẽ sử dụng “^=”:
Css=div[id^=’prefixSring’]
(*) Tìm theo hậu tố
Tương tự với ví dụ bên trên, tìm phần tử div có id và đoạn text kết thúc là “suffixString”:
Theo Xpath locator, chúng ta sẽ sử dụng “ends-with” để tìm hậu tố tương ứng. Lưu ý một chút là method “ends-with()” là một chuẩn chỉ được sử dụng trong Xpath2.0, nó sẽ không chạy với Xpath1.0 (phân biệt hai phiên bản này các bạn tìm GG để rõ hơn nhé).
//div[ends-with(@id,”suffixString”)]
Theo CSS selector, ta sẽ cần sử dụng “$=”:
css=div[id$=’suffixString’]
Ta có thể tóm tắt thành một bảng tổng hợp thu gọn như này nha:
Mô hình xoắn ốc (Spiral model) có thể được xem là sự kết hợp giữa mô hình thác nước (Waterfall model) và mô hình mẫu (Prototype model) và đồng thời thêm phân tích rủi ro (Risk assessment).
Vâng, và trong phần tiếp theo này mình sẽ chia sẻ với các bạn những back-end framework được dựa trên các ngôn ngữ lập trình khác và cũng đang rất “hot” hiện nay.
#5. Laravel
Laravel là một back-end framework ra mắt vào năm 2011, nó được viết dựa trên ngôn ngữ lập trình PHP.
Về cấu trúc Laravel được thiết kế theo mô hình MVC (Model – View – Controller). Laravel cũng là một open source với mục đích giúp cho việc viết code đơn giản, dễ dàng và bảo mật hơn.
Cho bạn nào chưa biết về kiến trúc MVC thì mình chia sẻ luôn vì nhiều framework được xây dựng dựa trên kiến trúc này.
M là Model: Cấu trúc dữ liệu theo cách tin cậy và chuẩn bị dữ liệu theo lệnh của controller (Các lớp thực thể được viết bằng các ngôn ngữ lập trình như PHP, Java, Python…)
V là View: Hiển thị dữ liệu cho người dùng theo cách dễ hiểu dựa trên hành động của người dùng (HTML, CSS, JavaScript…)
C là Controller: Nhận lệnh từ người dùng, gửi lệnh đến cho Model để cập nhập dữ liệu, truyền lệnh đến View để cập nhập giao diện hiển thị.
Laravel sẽ phù hợp với dự án nào?
Chúng ta có thể sử dụng Laravel cho tất cả các dự án từ nhỏ tới lớn. Nhưng thường là các dựa án liên quan đến các trang thương mại điện tử.
Laravel được đánh giá là một trong những framework được cộng động lập trình viên PHP yêu thích nhất. Các bạn có thể tìm hiểu thêm về Laravel tại đây: https://laravel.com/
#6. Spring Framework
Các bạn lập trình viên Java chắc không còn xa lạ gì với những cái tên như SpringMVC, Spring Boot…
Có thể nói Spring là một hệ sinh thái chứ không đơn thuần là một framework nữa, vì Spring cung cấp một bộ công cụ để bạn có thể giải quyết vấn đề mà không phải dùng thêm các công cụ khác.
Spring được xây dựng và phát triển dựa trên 2 nguyên tắc chính đó là: Dependency Injection và Aspect Oriented Programming.
Như mình đã nói Spring rất lớn, nó được chia thành nhiều modul khác nhau. Chúng ta có thể sử dụng một trong số các modul đó tùy thuộc vào dự án.
Một số dự án nổi bật của Spring có thể kể đến như:
Spring MVC được thiết kế dành cho việc xây dựng các ứng dụng nền tảng web.
Spring Security: Cung cấp các cơ chế xác thực (authentication) và phân quyền (authorization) cho ứng dụng của bạn.
Spring Boot là một framework giúp chúng ta phát triển cũng như chạy ứng dụng một cách nhanh chóng.
Spring Batch giúp chúng ta dễ dàng tạo các lịch trình (scheduling) và tiến trình (processing) cho các công việc xử lý theo mẻ (batch job).
Spring Social kết nối ứng dụng của bạn với các API bên thứ ba của Facebook, Twitter, Linkedin … (ví dụ đăng nhập bằng facebook, Google+ …).
Chúng ta đã đề cập đến các thư viện, framework liên quan đến JavaScript, Java, PHP và sẽ thật thiếu sót nếu không đề cập đến framework của Python.
Django được viết hoàn toàn dựa trên Python, có đầy đủ các thư viện hỗ trợ việc lập trình trình web.
Django được thiết kế theo mô hình MVC và được phát triển bởi Django Software Foundation đồng thời cũng là một open-source framework.
Đây chính là những tiêu chí mà Django hướng đến. Nếu bạn đã có kiến thức về Python và muốn đi theo hướng lập trình viên web thì Django là một lựa chọn hoàn hảo.
Tiếp theo, chúng ta sẽ cùng điểm qua một gương mặt được xây dựng và phát triển bởi Microsoft đó chính là ASP.net
ASP.NET trong đó: ASP là Active Server Pages và .NET là Network Enabled Technologies.
Các ứng dụng ASP.Net cũng có thể được viết bằng nhiều ngôn ngữ .Net như C#, VB.Net và J#
Và đây chính là kiến trúc của công nghệ .NET nói chung và ASP.NET nói riêng.
Hiện nay, ngôn ngữ lập trình C# do Microsoft phát triển cũng đang rất được giới lập trình viên yêu thích. Nếu bạn có kiến thức về C# thì có thể tìm hiểu về các công nghệ .NET để phát triển các ứng dụng web.
Quay lại với framework Ruby on Rails của chúng ta là một web framework mã nguồn mở, được thiết kế để phát triển các ứng dụng Ruby và cho phép chúng chạy như một trang web thực sự. Rails là cách gọi tắt của Ruby on Rails.
Cuối cùng mình muốn đề cập đến một framework nữa liên quan đến PHP, nhưng có lẽ nhiều bạn mới học có thể chưa biết đến.
Cũng vì PHP vẫn là một trong những ngôn ngữ khá là phổ biến hiện này. Trên các trang tuyển dụng hoặc các page tuyển dụng bạn sẽ không khó để tìm các vị trí liên quan đến PHP.
Cake PHP cũng được thiết kế theo mô hình MVC giống như đối thử Laravel của nó, có thể kể đến một vài điểm nổi bật của CakePHP như sau:
Kiến trúc MVC tiểu chuẩn giúp việc phát triển ứng dụng web dễ dàng
Tích hợp các thao tác thêm, sửa, xóa, cập nhật (CRUD) tương tác với cơ sở dữ liệu
Vậy là qua hai phần của bài viết thì mình đã cùng các bạn điểm mặt 10 web framework tốt nhất hiện nay (từ front-end cho đến back-end) rồi nhé.
Việc sử dụng framework để phát triển các ứng dụng trong thực tế là một yêu cầu gần như bắt buộc vì tính an toàn, tái sử dụng cũng như tốc độ phát triển và triển khai dự án.
Nếu bạn quan tâm đến mảng lập trình thì có thể chuẩn bị cơ bản thật vững ở một ngôn ngữ nào đó rồi học lên sử dụng các framework để hiểu được và biến đổi chúng linh hoạt.
Chúc các bạn học tốt và hẹn gặp lại các bạn trong các bài viết tiếp theo !