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,…
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 !
Bắt đầu một dự án mới, một kế hoạch mới với các Software Developers luôn là việc thú vị và hấp dẫn. Tuy nhiên khi overload cũng là lúc chúng ta cảm thấy mệt mỏi và không thể hoàn thành công việc một cách tốt nhất. Chính vì thế, biết thêm một số mẹo hay ho khi làm việc giúp công việc mỗi ngày của các Software Developers trơn tru hơn.
Nắm bắt những cách làm việc hợp lí để nâng cao hiệu quả công việc
Những mẹo hay ho cho các Software Developers
Tìm cho mình một cố vấn phù hợp cho bản thân
Một trong những mẹo cho Software Developer hay ho nhất. Đây được xem là điều tốt nhất bạn có thể làm để trở thành một dev giỏi nhất là tìm cho mình một người cố vấn xuất sắc và phù hợp với bản thân. Một người cố vấn giỏi sẽ đưa ra lời khuyên hữu ích về mọi thứ, từ kiến trúc đến thiết kế, và thậm chí cả cách cải thiện con đường sự nghiệp của bạn.
Một người không ở cùng công ty hoặc làm cùng vị trí có thể sẽ là người cố vấn tốt nhất cho bạn. Bạn có thể nói chuyện với họ và nhận lời khuyên của họ qua điện thoại, qua email hoặc chat. Một người cố vấn không nhất thiết phải làm việc tại công ty của bạn cũng như không phải là một dev sành sõi mà đơn giản chỉ là họ có thể giúp bạn đưa ra những ý kiến sáng suốt hơn.
Tìm một người hiểu về Software Developing và đã thành công trong sự nghiệp của họ mà bạn tôn trọng để nhờ sự giúp đỡ khi cần thiết là việc làm hữu ích.
Trở thành một lập trình viên giỏi có nghĩa là bạn có thể giao tiếp hiệu quả với users và các dev khác. Trên thực tế, phần lớn những lập trình viên giỏi đều là những người có thể chia sẻ ý tưởng một cách hiệu quả và tốt nhất. Nếu bạn có thể trình bày ý tưởng của mình một cách rõ ràng và ngắn gọn, người khác sẽ muốn lắng nghe những gì bạn nói hơn. Vậy nên đây là mẹo cho Software Developer trở nên chuyên nghiệp hơn.
Nhưng giao tiếp không chỉ là nói chuyện. Đó cũng là việc lắng nghe những gì người khác nói. Các nghiên cứu chỉ ra rằng những người biết lắng nghe tốt sẽ thành công hơn trong sự nghiệp của họ so với những người nói tốt.
Vì vậy, bạn đừng bao giờ đánh giá thấp sức mạnh của một người biết lắng nghe, đặc biệt là khi làm việc với khách hàng hoặc các dev khác trong nhóm của bạn. Học cách lắng nghe có thể là vô giá, đặc biệt nếu bạn đang có kế hoạch làm việc với người khác.
Khi tôi bắt đầu làm việc với tư cách là một Software Developers, tôi nhớ rằng các đồng nghiệp của tôi luôn có thể chỉ cho tôi đúng hướng khi giải quyết vấn đề hoặc triển khai các tính năng. Đó là khi tôi bắt đầu sử dụng mọi thứ trên Google, tìm hiểu các công cụ và kỹ thuật mới.
Việc biết cách sử dụng Google hiệu quả không khiến bạn trở thành một lập trình viên mà nó sẽ giúp bạn có hiệu suất cao hơn với công việc mình đang làm. Hãy dành thời gian để tìm hiểu về tất cả các loại công cụ khác nhau để nếu một vấn đề xuất hiện đòi hỏi điều gì đó nằm ngoài phạm vi kinh nghiệm của bạn, bạn có thể nhanh chóng xác định xem nó có đáng để dành thời gian tìm hiểu hay không.
Ngay sau khi bạn đọc xong bài viết này, hãy bắt đầu coding đi nhé! Nghe có vẻ hiển nhiên, nhưng bạn phải bắt đầu viết code mỗi ngày. Đây có thể được xem là giải pháp hiệu quả nhất để bạn có thể làm việc tốt hơn và nâng cao kỹ năng của mình. Coding không chỉ là mẹo cho Software Developer mà là việc bắt buộc để nâng cao tay nghề và chuyên môn của bạn.
Coding mỗi ngày giúp các kỹ năng của bạn luôn nhạy bén, giúp bạn học ngôn ngữ và công nghệ mới, đồng thời cho phép bạn làm việc trên những thứ mà bạn quan tâm. Nếu nó không làm bạn hứng thú, hãy chuyển đổi nó bằng cách thay đổi ngôn ngữ hoặc dự án ít nhất một lần một tháng. Điều này sẽ giúp mọi thứ trở nên thú vị hơn và đảm bảo rằng bạn không bị mắc kẹt trong một cuộc chạy đua trong nhiều tháng liên tục.
Điều này có thể nói dễ hơn làm, bởi vì việc tìm kiếm thời gian để thực hiện việc này có thể khá khó khăn trừ khi bạn là người cực kỳ kỷ luật hoặc có nhiều thời gian rảnh rỗi trong tuần. Dù thế nào đi nữa, nếu bạn muốn trở thành một Software Developers tài ba, thực hành sẽ giúp ích rất nhiều vì nó là mẹo cho Software Developer. Cách tốt nhất để làm điều này là có một số mục tiêu cho mỗi tuần tập trung vào việc cải thiện kỹ năng của tôi trong một số thứ mà tôi hiện đang gặp khó khăn. Có hai lợi ích chính cho việc này:
Bạn thấy mình đang tích cực làm việc để trở nên giỏi hơn những gì bạn làm, thay vì chỉ chăm chăm thực hiện những thay đổi nhỏ ở chỗ này và chỗ khác.
Nó cung cấp cho bạn một số mục tiêu và chỉ tiêu cụ thể dễ đo lường. Điều này giúp bạn xem tiến trình của mình và nhanh chóng cho bạn biết loại kỹ năng, công cụ hay công nghệ nào còn thiếu trong hộp công cụ của bạn. Rồi sau này, khi họ trở nên có liên quan trong một dự án trong thế giới thực, họ sẽ không còn xa lạ như mọi thứ xung quanh nữa!
Không ai đạt được thành công ngay trong lần thử đầu tiên, vì vậy đừng cảm thấy tồi tệ khi bạn đang bị rối tung lên. Những người khác vẫn đang học hỏi! Điều cần thiết là học hỏi từ những sai lầm của bạn để bạn có thể tránh tái phạm trong tương lai và để bạn cũng có thể giúp những người khác học hỏi từ chúng.
Trên thực tế, nếu bạn mắc lỗi và sau đó sửa nó trước khi mọi người nhận ra, bạn đã học được gì? Nếu ai đó chỉ ra rằng có vấn đề với code bạn đã viết hoặc cho bạn biết cách cải thiện một lựa chọn thiết kế cụ thể, hãy cảm ơn họ vì đã phát hiện ra nó. Họ đang giúp đỡ bạn bằng cách chỉ ra điều gì đó cần cải thiện hoặc làm rõ.
Ngay cả khi họ sai về những gì cần sửa chữa, hãy đặt câu hỏi và thảo luận vấn đề với họ để làm rõ lý do tại sao họ nghĩ đó là một vấn đề. Hãy nhớ rằng chỉ vì ai đó không đồng ý với giải pháp của bạn không có nghĩa là nó sai – nó chỉ có nghĩa là họ có nhu cầu hoặc mong đợi khác với bạn.
Bài học kinh nghiệm chính ở đây là: cởi mở và sẵn sàng học hỏi!
Kết luận
Nắm bắt những mẹo và những kỹ năng này sẽ giúp bạn làm việc hiệu quả hơn với vai trò là một Software Developer. Hãy luôn khiêm tốn và sẵn sàng học hỏi để có thể trở thành một lập trình viên giỏi nhất trong lĩnh vực của mình.
Bài viết được sự cho phép của tác giả Kien Dang Chung
Trong phần trước Làm việc với cơ sở dữ liệu trong Laravel bạn đã bắt đầu làm quen với việc thực hiện các câu truy vấn SQL dạng thô (raw SQL query), một khó khăn trong việc sử dụng các câu truy vấn này là việc truyền giá trị vào câu truy vấn. Các ứng dụng thực tế thường có các câu truy vấn rất phức tạp, nếu sử dụng raw SQL query sẽ rất khó khăn. Để giải quyết vấn đề này, Laravel đưa ra Laravel Query Builder giúp bạn có thể xây dựng bất kỳ câu truy vấn nào dù nó phức tạp đến đâu. Laravel Query Builder sử dụng PDO (PHP Data Object, hệ thống API có sẵn của PHP để kết nối đến các CSDL thông dụng), bản thân API PDO đã bảo vệ bạn trước các tấn công SQL Injection, do đó khi xử dụng Query Builder bạn không cần lo lắng xử lý dữ liệu trước khi chèn vào database.
Truy xuất dữ liệu từ database
Lấy toàn bộ các bản ghi từ một bảng
$users=DB::table('users')->get();
Sử dụng phương thức table() để trả về một instance query builder của một bảng, khi đó muốn lấy tất cả các bản ghi sử dụng phương thức get(). Phương thức get() trả về Illuminate\Support\Collection với mỗi bản ghi là một đối tượng StdClass trong PHP.
Điều kiện trong một câu truy vấn có thể rất phức tạp khi kết hợp các mệnh đề where khác như: orWhere, whereBetween, whereNotBetween, whereIn, whereNotIn, whereNull, whereNotNull, whereDate, whereMonth, whereDay, whereYear, whereColumn, whereExist. Các ví dụ cho từng kiểu mệnh đề where như sau:
// Ví dụ về orWhere
$users=DB::table('users')->where('vote','>',50)->orWhere('comment','>',50)->get();
// Ví dụ về whereBetween
$users=DB::table('users')->whereBetween('age',[18,35])->get();
// Ví dụ về whereIn
$users=DB::table('users')->whereIn('id',[1,2,3])->get();
// Ví dụ về whereNull
$users=DB::table('users')->whereNull('vote')->get();
// Ví dụ về whereDate
$users=DB::table('users')->whereDate('join_date','2017-03-27')->get();
//Ví dụ về whereDay
$users=DB::table('users')->whereDay('join_date','27')->get();
// Ví dụ về whereMonth
$users=DB::table('users')->whereMonth('join_date','03')->get();
//Ví dụ về whereYear
$users=DB::table('users')->whereYear('join_date','2017')->get();
//Ví dụ về whereColumn
$users=DB::table('account')->whereColumn([['working_balance','=','last_balance'],['updated_at','>','created_at']])->get();
// Ví dụ về whereExist
DB::table('users')->whereExists(function($query){$query->select(DB::raw(1))->from('orders')->whereRaw('orders.user_id = users.id');})->get();
// Ví dụ nhóm các điều kiện trong mệnh đề điều kiện
DB::table('users')->where('name','=','FirebirD')->orWhere(function($query){$query->where('vote','>',50)->where('role','<>','superadmin');})->get();
Thao tác với kết quả trả về
Sắp xếp kết quả trả về của truy vấn bằng phương thức orderBy()
// Insert một bản ghi
DB::table('users')->insert(['name'=>'Nguyễn Văn A','email'=>'anv@gmail.com','votes'=>0]);
// Insert nhiều bản ghi
DB::table('users')->insert([['name'=>'Nguyễn Văn A','email'=>'anv@gmail.com','votes'=>0],['name'=>'Nguyễn Văn B','email'=>'bnv@gmail.com','votes'=>0],['name'=>'Nguyễn Văn C','email'=>'cnv@gmail.com','votes'=>0],['name'=>'Nguyễn Văn D','email'=>'dnv@gmail.com','votes'=>0],]);
Có những trường hợp khi insert vào CSDL bạn cần lấy lại ID bản ghi để làm tham số cho các thao tác tiếp theo, sử dụng insertGetId
$user_id=DB::table('users')->insertGetId(['name'=>'Nguyễn Văn A','email'=>'anv@gmail.com','votes'=>0]);echo'User vừa đăng ký có id là'.$user_id;
Xây dựng một số trang phục vụ các việc sau nhập thông tin sản phẩm, quản lý danh sách sản phẩm: xóa sản phẩm, sửa sản phẩm… Chúng ta cùng bắt đầu thực hiện nào!
Bước 1: Tạo bảng products trong database laravel-test đã tạo trong bài Làm việc với cơ sở dữ liệu trong Laravel.
Bước 2: Tạo một controller tên là ProductController, sử dụng Restful Resource Controller.
c:\xampp\htdocs\laravel-test>php artisan make:controller ProductController --res
ource
Controller created successfully.
Bước 4: Xử lý từng hành động trên sản phẩm Bảng route tương ứng cho từng hành động như sau:
Verb
URI
Action
Route Name
GET
/product
index
product.index
GET
/product/create
create
product.create
POST
/product
store
product.store
GET
/product/{product_id}
show
product.show
GET
/product/{product_id}/edit
edit
product.edit
PUT/PATCH
/product/{product_id}
update
product.update
DELETE
/product/{product_id}
destroy
product.destroy
Tạo mới sản phẩm:
Tạo view create.blade.php trong resources/views/fontend/product
@extends('layouts.default')
@section('title','Tạo sản phẩm')
@section('content')
@if(isset($success))<div class="alert alert-success"role="alert">{{$success}}</div>
@endif
@if(isset($fail))<div class="alert alert-danger"role="alert">{{$fail}}</div>
@endif{!!Form::open(array('url'=>'/product','class'=>'form-horizontal'))!!}<div class="form-group">{!!Form::label('name','Tên sản phẩm',array('class'=>'col-sm-3 control-label'))!!}<div class="col-sm-9">{!!Form::text('name','',array('class'=>'form-control'))!!}</div></div><div class="form-group">{!!Form::label('price','Giá sản phẩm',array('class'=>'col-sm-3 control-label'))!!}<div class="col-sm-3">{!!Form::text('price','',array('class'=>'form-control'))!!}</div></div><div class="form-group">{!!Form::label('content','Nội dung sản phẩm',array('class'=>'col-sm-3 control-label'))!!}<div class="col-sm-9">{!!Form::textarea('content','',array('class'=>'form-control','rows'=>3))!!}</div></div><div class="form-group">{!!Form::label('image_path','Ảnh sản phẩm',array('class'=>'col-sm-3 control-label'))!!}<div class="col-sm-9">{!!Form::text('content','',array('class'=>'form-control'))!!}</div></div><div class="form-group">{!!Form::label('active','Active',array('class'=>'col-sm-3 control-label'))!!}<div class="col-sm-3">{!!Form::checkbox('active','',true)!!}</div></div><div class="form-group"><div class="col-sm-offset-2 col-sm-10">{!!Form::submit('Tạo sản phẩm',array('class'=>'btn btn-success'))!!}</div></div>{!!Form::close()!!}
@endsection
Thêm nội dung phương thức create trong ProductController
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/publicfunctioncreate(){returnview('fontend.product.create');}
Tiếp đến chúng ta xử lý insert sản phẩm vào CSDL, nó sẽ nằm trong phương thức store của ProductController (xem bảng các route của product)
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/publicfunctionstore(Request $request){$validator=Validator::make($request->all(),['name'=>'required|max:255','price'=>'required|number','content'=>'required','image_path'=>'required']);if($validator->fails()){returnredirect('product/create')->withErrors($validator)->withInput();}else{ // Lưu thông tin vào database, phần này sẽ giới thiệu ở bài về database
$active=$request->has('active')?1:0;$product_id=DB::table('product')->insertGetId('name'=>$request->input('name'),'price'=>$request->input('price'),'content'=>$request->input('content'),'image_path'=>$request->input('image_path'),'active'=>$active);returnredirect('product/create')->with('message','Sản phẩm được tạo thành công với ID: '.$product_id);}}
Để nhập sản phẩm ta vào đường dẫn http://laravel.dev/product/create
Danh sách sản phẩm:
Danh sách sản phẩm sẽ được xử lý trong phương thức index của ProductController, chúng ta thêm nội dung cho phương thức này như sau:
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/publicfunctionindex(){$products=DB::table('products')->get();returnview('fontend.product.list')->with($products);}
Tiếp đến chúng ta tạo một view để hiển thị danh sách sản phẩm tên là list.blade.php nằm trong thư mục resources/views/fontend/product
Kết quả khi chạy http://laravel.dev/product ta có danh sách các sản phẩm
Chỉnh sửa sản phẩm
Chúng ta sử dụng phương thức edit() trong ProductController để chỉnh sửa sản phẩm, nội dung phương thức này như sau:
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/publicfunctionedit($id){$product=DB::table('products')->find($id);returnview('fontend.product.edit')->with(compact('product'));}
Tạo một view để chỉnh sửa sản phẩm resources/views/fontend/product/edit.blade.php với nội dung như sau:
@extends('layouts.default')
@section('title','Chỉnh sửa sản phẩm')
@section('content')
@if(isset($success))<div class="alert alert-success"role="alert">{{$success}}</div>
@endif
@if(count($errors)>0)<div class="alert alert-danger"><ul>
@foreach($errors->all()as$error)<li>{{$error}}</li>
@endforeach</ul></div>
@endif{!!Form::open(array('url'=>'/product/'.$product->id,'class'=>'form-horizontal','method'=>'put'))!!}<div class="form-group">{!!Form::label('name','Tên sản phẩm',array('class'=>'col-sm-3 control-label'))!!}<div class="col-sm-9">{!!Form::text('name',$product->name,array('class'=>'form-control'))!!}</div></div><div class="form-group">{!!Form::label('price','Giá sản phẩm',array('class'=>'col-sm-3 control-label'))!!}<div class="col-sm-3">{!!Form::text('price',$product->price,array('class'=>'form-control'))!!}</div></div><div class="form-group">{!!Form::label('content','Nội dung sản phẩm',array('class'=>'col-sm-3 control-label'))!!}<div class="col-sm-9">{!!Form::textarea('content',$product->content,array('class'=>'form-control','rows'=>3))!!}</div></div><div class="form-group">{!!Form::label('image_path','Ảnh sản phẩm',array('class'=>'col-sm-3 control-label'))!!}<div class="col-sm-9">{!!Form::text('image_path',$product->image_path,array('class'=>'form-control'))!!}</div></div><div class="form-group">{!!Form::label('active','Active',array('class'=>'col-sm-3 control-label'))!!}<div class="col-sm-3">{!!Form::checkbox('active',$product->active,true)!!}</div></div><div class="form-group"><div class="col-sm-offset-2 col-sm-10">{!!Form::submit('Chỉnh sửa sản phẩm',array('class'=>'btn btn-success'))!!}</div></div>{!!Form::close()!!}
@endsection
Phương thức update() của ProductController đảm nhận phần cập nhật nội dung sản phẩm, thêm code vào phương thức này như sau:
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/publicfunctionupdate(Request $request,$id){$active=$request->has('active')?1:0;$updated=DB::table('products')->where('id','=',$id)->update(['name'=>$request->input('name'),'price'=>$request->input('price'),'content'=>$request->input('content'),'image_path'=>$request->input('image_path'),'active'=>$active,'updated_at'=> \Carbon\Carbon::now()]);returnRedirect::back()->with('message','Cập nhật sản phẩm thành công')->withInput();}
OK, giờ chúng ta click vào Edit sản phẩm bất kỳ trong danh sách sản phẩm nó sẽ xuất hiện cửa sổ chỉnh sửa sản phẩm
Thay đổi thông tin và click Chỉnh sửa sản phẩm, sau đó vào lại trang danh sách sản phẩm http://laravel.dev/product chúng ta sẽ thấy nội dung đã thay đổi. Xóa một sản phẩm Thông thường các sản phẩm khi đã nhập vào hệ thống chúng ta sẽ không xóa đi mà chỉ cần không active nó lên là ok, do vậy phần này mình bỏ qua nhé, với lại cũng hơi lười tí.
Laravel Query Builder giúp chúng ta xây dựng ứng dụng thật nhanh chóng cho dù các câu truy vấn có phức tạp đến đâu chúng ta cũng xử lý rất dễ dàng. Trong ví dụ phần ảnh sản phẩm tôi tạm thời để theo kiểu copy bằng tay đường dẫn ảnh sản phẩm. Trong thời gian tới, khi nào rảnh tôi sẽ hướng dẫn bạn tích hợp CKEditor và CKFinder vào hệ thống giúp đưa vào nội dung phong phú vào và quản lý lựa chọn tài nguyên như ảnh, file dễ dàng hơn.
Vì đây là mã nguồn mở nên người phát triển có thể custom về bộ core CI/CD theo ý muốn. Và Concourse được xây dựng trên cơ chế đơn giản về resources, tasks và jobs. Việc sử dụng Concourse là một cách tiếp cận về CI/CD tuyệt vời.
Bạn có thể hiểu pipeline như một Makefile phân tán, cấp cao hơn, chạy liên tục.
Mỗi mục trong resource là một phụ thuộc và mỗi mục trong các job mô tả một plan để chạy khi công việc được kích hoạt (bằng tay hoặc bằng một step có được).
Việc làm có thể phụ thuộc vào các nguồn lực đã passed các công việc trước đó. Chuỗi kết quả của công việc và tài nguyên là một biểu đồ phụ thuộc liên tục thúc đẩy dự án của bạn tiến lên, từ source code đến production.
HIển thị hoạt động
Cấu hình pipeline của bạn sau đó được hiển thị trong giao diện người dùng web, chỉ cần một cú nhấp chuột để nhận được từ hộp màu đỏ (thất bại) để xem tại sao nó thất bại.
Hiển thị hoạt động cũng cung cấp một vòng phản hồi “gut check” – nếu nó có vẻ sai, có lẽ nó đã sai.
Tất cả quản trị được thực hiện bằng cách sử dụng Fly CLI. Lệnh fly set-pipeline đẩy cấu hình lên tới Concourse. Khi nó trông ổn, bạn có thể kiểm tra file để kiểm soát nguồn. Điều này giúp dễ dàng khôi phục nếu máy chủ Concourse của bạn bị down.
Reproducible, Debuggable Builds
$ fly -t ci intercept -j booklit/unit -s unit
root@2c15ff11:/tmp/build/0df9eea0# ps
PID TTY TIME CMD
171 pts/1 00:00:00 bash
1876 pts/1 00:00:00 ps
root@2c15ff11:/tmp/build/0df9eea0# ls
depspath gopath
root@2c15ff11:/tmp/build/0df9eea0# █
Tất cả mọi thứ chạy trong container, đảm bảo một môi trường sạch sẽ trên mỗi lần chạy. Mỗi task chỉ định image riêng của nó, cho nó toàn quyền kiểm soát các dependencies, thay vì quản lý chúng trên các workers.
fly intercept sẽ đưa bạn vào một trong các build của các containers, có thể hữu ích cho việc debugging.
The fly execute command executes a task as a one-off build, with your local changes. This will run your code in exactly the same way it would run in your pipeline, without you having to repeatedly push broken commits until it works. Achieve the fabled green build #1!
When a job fails, you can also use fly execute with -jflag to run with the same inputs as the failed job. You can then replace an input with your local changes with -i to test if your fix is valid.
Lệnh fly execute thực thi một task như một bản dựng một lần, với các thay đổi cục bộ của bạn. Điều này sẽ chạy code của bạn theo cách chính xác giống như cách nó sẽ chạy trong pipeline của bạn, mà bạn không phải liên tục đẩy các commit bị hỏng cho đến khi nó hoạt động. Đạt được huyền thoại build màu xanh #1!
Khi một job thất bại, bạn cũng có thể sử dụng fly execute với cờ-j để chạy với cùng các inputs như failed job. Bạn có thể thay thế một input bằng các thay đổi local của bạn bằng -i để kiểm tra xem bản sửa lỗi của bạn có hợp lệ không.
Concourse không có một hệ thống plugin phức tạp. Thay vào đó, nó có một sự trừu tượng mạnh mẽ duy nhất.
Phần resources của một pipeline liệt kê các Resources , là các vị trí bên ngoài trừu tượng nơi pipeline của bạn sẽ theo dõi các thay đổi, tìm nạp từng chút từ và đẩy từng chút đến.
Ví dụ, một resource với kiểu git tham chiếu đến git repository, resource này sẽ được clone trong một get step và push đến trong put step. Đằng sau hậu trường, Concourse sẽ liên tục run git fetch để tìm kiếm các commit mới mà các jobs có thể muốn trigger.
Về cốt lõi, Concourse không biết gì về Git. Nó đi kèm với một loại resource git ra khỏi hộp, nhưng bạn có thể dễ dàng đưa chính bạn vào pipeline của bạn. Các loại resource được triển khai dưới dạng image chứa các scripts – sử dụng docker-image, chúng có thể được tìm nạp từ Docker registry.