Dẫn đầu với các dịch vụ viễn thông dành cho doanh nghiệp, South Telecom được biết đến với các sản phẩm chất lượng, sử dụng công nghệ tiên tiến, có mặt tại nhiều quốc gia trên thế giới. Đây đồng thời cũng là một hướng đi tiềm năng cho các nhân tài công nghệ tìm kiếm cơ hội phát triển sự nghiệp.
South Telecom – Đồng hành tạo nên các giải pháp thành công cho doanh nghiệp
Công ty cổ phần phần mềm viễn thông Miền Nam – South Telecom là đơn vị chuyên cung cấp các giải pháp – dịch vụ liên lạc (Communication) và cộng tác (Collaboration) được biết đến với các sản phẩm chất lượng, sử dụng công nghệ tiên tiến, có mặt tại nhiều quốc gia phát triển trên thế giới.
Các dịch vụ Tổng đài – Worldfone của South Telecom được áp dụng tại nhiều Doanh nghiệp với các bộ phận hoạt động: Chăm sóc khách hàng, Telesales, Marketing,… trải khắp các lĩnh vực: Tài chính, Kinh Doanh – Bán lẻ, Giáo Dục, Y tế, Ngân hàng, Vận chuyển và Logistic.
Với nỗ lực không ngừng, sau hơn 15 năm, South Telecom đã mang đến cho các doanh nghiệp những giải pháp và dịch vụ tiện ích và đáng tin cậy. Trong đó, công nghệ VoIP và dịch vụ SMS Brandname đã giúp công ty tạo dựng tiếng vang, thu hút sự hợp tác từ các đối tác tên tuổi: Yamaha, Revolabs, OneKing… Từ đó khẳng định được vị thế trên thị trường viễn thông, đồng thời mang lại những tiện ích tối đa cho khách hàng.
Đền đáp xứng đáng cho những nỗ lực trong suốt nhiều năm cống hiến, “gia đình” South Telecom đã từng bước xây dựng thương hiệu với các sản phẩm chất lượng, uy tín, được minh chứng bởi các giải thưởng giá trị:
Vinh danh là “Nhà cung cấp dịch vụ Cloud hàng đầu Việt Nam” năm 2019.
Danh hiệu “Doanh nghiệp Công nghệ thông tin Viễn thông hàng đầu Việt Nam” 2 năm liên tiếp 2018, 2019.
Không dừng lại ở đó, South Telecom luôn sẵn sàng cho những dự án mới, đón đầu xu hướng góp phần làm nên thành công của nhiều khách hàng doanh nghiệp. Để hoàn thiện được mục tiêu đó, công ty không ngừng tìm kiếm những thành viên mới vào đội ngũ tài năng. Khởi động 2021, South Telecom đặc biệt có loạt cơ hội tốt gửi đến những “người anh em Techies” có cùng chí hướng, cùng đam mê:
Cùng South Telecom đón đầu xu hướng mới, ghi dấu ấn tại thị trường Viễn thông
Sự xuất hiện của các sản phẩm dịch vụ Tổng đài ảo, SMS Brandname, Call Center,… đến từ South Telecom đang dần thay thế các phương pháp truyền thống, giải quyết hiệu quả “bài toán” về dịch vụ quảng cáo, tư vấn, chăm sóc khách hàng tại mỗi doanh nghiệp.
Tổng đài ảo là dịch vụ thoại trên nền tảng IP hiện đại, cho phép doanh nghiệp nhận cuộc gọi của khách hàng mọi lúc mọi nơi, thông qua các phần mềm softphone hỗ trợ, mang lại nhiều tiện ích cho người dùng.
SMS Brandname là phương thức quảng bá thương hiệu gần gũi, tiết kiệm nhân lực, tiếp cận đối tượng nhanh chóng với chi phí hợp lý, đáp ứng nhu cầu truyền tải thông tin đến các thuê bao.
Call Center là một dạng tổng đài chăm sóc khách hàng thực hiện việc xử lý, điều phối, giám sát và quản lý các giao dịch qua điện thoại của doanh nghiệp, đang trở thành một xu hướng phát triển mạnh mẽ ở nhiều quốc gia trong đó có Việt Nam.
Những sản phẩm và dịch vụ đầy chất lượng từ South Telecom là tổ hợp toàn bộ sức mạnh của mỗi thành viên đến từ đội ngũ tài năng, sáng tạo nơi đây. Không chỉ vang danh với những thế mạnh trên thị trường viễn thông, South Telecom còn được biết đến với môi trường làm việc thoải mái, mang đến nhiều cơ hội cho các tài năng phát triển sự nghiệp.
“Making great things in passion” – Mỗi nhân viên làm việc tại South Telecom là một “mảnh ghép” đặc biệt, được chăm sóc và quan tâm chu đáo với những chính sách đãi ngộ xứng tầm:
Thu nhập hấp dẫn với nhiều khoản thưởng xứng đáng với năng lực và đóng góp;
“Ting ting” về ví lên đến 14 tháng lương mỗi năm;
Làm vui, chơi khỏe với vô số hoạt động tập thể thú vị cùng đội ngũ: Team building, Event, Company trip,…
Cùng nhiều đặc quyền, phúc lợi phong phú đang chờ bạn gia nhập.
Và nếu bạn đã sẵn sàng bứt phá giới hạn của bản thân, phát triển sự nghiệp? Còn chờ chi không bắt ngay “slot” tại South Telecom từ hôm nay?
Topdev xin gửi đến các bạn độc giả một số thông tin về mô hình Agile. Nếu các bạn đã biết Agile là gì? trong các nội dung lần trước. Thì hôm nay mình sẽ nói sâu hơn về tổng quan TDD-BDD & KTPM. Hãy cùng đi sâu hơn trong nội dung bài viết dưới đây.
Chính xác với nghĩa đen của nó: “Test-Driven Development” có thể được tạm hiểu là mô hình phát triển với trọng tâm hướng về việc kiểm thử. TDD được xây dựng theo hai tiêu chí: Test-First (Kiểm thử trước) và Refactoring (Điều chỉnh mã nguồn) [1]. Trong đó, khi một yêu cầu phần mềm (requirement) được đặt ra:
Người developer soạn thảo kịch bản kiểm thử (test case) cho yêu cầu đó trước tiên và chạy thử kịch bản đó lần đầu tiên. Hiển nhiên, việc chạy thử sẽ đưa ra 1 kết quả thất bại vì hiện tại chức năng đó chưa được xây dựng (và thông qua kết quả đó, ta cũng kiểm tra được là kịch bản kiểm thử đó được viết đúng).
Theo đó, dựa vào mong muốn (expectation) của kịch bản kia, người developer sẽ xây dựng một lượng mã nguồn (source code) vừa đủ để lần chạy thứ 2 của kịch bản đó thành công.
Nếu trong lần chạy thứ 2 vẫn đưa ra 1 kết quả thất bại, điều đó có nghĩa là thiết kế chưa ổn và người developer lại chỉnh sửa mã nguồn và chạy lại kịch bản đến khi thành công.
Khi kịch bản kiểm thử được chạy thành công, người developer tiến hành chuẩn hóa đoạn mã nguồn (base-line code) và tiếp tục hồi quy với kịch bản kiểm thử tiếp theo. Việc chuẩn hóa bao gồm thêm các comment, loại bỏ các dư thừa, tối ưu các biến…
Quy trình phát triển TDD vẽ bởi Colin Kloes, đề cập vấn đề khó khăn trong việc hiểu rõ yêu cầu chức năng trước khi viết kịch bản kiểm thử
2. Điểm khác biệt của TDD với một mô hình truyền thống là gì?
Thông qua quy trình TDD trình bày ở trên, ta có thể dễ dàng nhận ra là thứ tự các bước xây dựng 1 tính năng phần mềm gần như đã được đảo ngược so với 1 quy trình truyền thống. Vậy điều này giúp ích gì và có gì hay hơn?
Trước hết, hãy nhìn lại 1 mô hình thác đổ (Waterfall Model) thông thường: việc phân tích các yêu cầu (requirements) thường được tiến hành bởi Business Analyst (BA) 1 cách chuyên hóa và khi đến giai đoạn xây dựng (implementing phase) thì đa phần các developer tiếp xúc với các yêu cầu phần mềm dưới dạng các bản thiết kế. Họ chỉ quan tâm đến đầu vào, đầu ra (Input, Output) của tính năng mình xây dựng mà thiếu đi cái nhìn thực tiễn từ góc nhìn người dùng (end-users). Một hệ quả tất yếu là lỗi phần mềm đến từ việc sản phẩm ko tiện dụng với người dùng.
Cùng với Agile, việc ứng dụng TDD góp phần làm gần khoảng cách giữa đội ngũ thiết kế phần mềm và sản phẩm thực tiễn, tối ưu quy trình [2]. Cụ thể như sau:
Thông qua kịch bản kiểm thử, developer có cái nhìn trực quan về sản phẩm ngay trước khi xây dựng mã nguồn. Sản phẩm họ tạo ra chính xác và gần gũi người dùng hơn.
Phần mã nguồn được thêm vào chỉ vừa đủ để chạy thành công kịch bản kiểm thử, hạn chế dư thừa và qua đó hạn chế khả năng xảy ra lỗi trên những phần dư thừa.
Bảo đảm mã nguồn luôn phản ánh đúng và vừa đủ yêu cầu phầm mềm, hạn chế được công sức tối ưu mã nguồn về sau.
3. TDD và Agile
Trong quá trình hình thành, TDD có liên quan mật thiết đến khái niệm “Test-First Programming” trong mô hình eXtreme Programming “XP” thuần túy Agile – thịnh hành từ năm 1999 [3]. Tuy nhiên, bằng việc ứng dụng đa dạng và linh hoạt, TDD cũng có những đặc điểm và tùy biến của riêng nó (mình sẽ trình bày rõ hơn bên dưới).
TDD trong Agile framework phác họa bởi Mohammad Sami
TDD đáp ứng “Tuyên ngôn về Agile” khi bản thân quy trình TDD thúc đẩy tính thực tiễn của sản phẩm, tương tác với người dùng. Để phát huy tối đa những lợi ích mà TDD mang lại, độ lớn của 1 đơn vị tính năng phần mềm (unit of function) cần đủ nhỏ để kịch bản kiểm thử dễ dàng được xây dựng và đọc hiểu, công sức debug kịch bản kiểm thử khi chạy thất bại cũng giảm thiểu hơn.
Thực tế cho thấy một số sự kết hợp giữa TDD và mô hình Agile khác như Scrum có thể hỗ trợ và tối ưu lợi ích của nhau. Ví dụ, việc chia nhỏ Backlog thành các User Story của Scrum khiến việc xây dựng kịch bản kiểm thử hướng TDD trở nên dễ dàng và thuận tiện. Thêm vào đó, cả Scrum và TDD tương đồng trong việc loại bỏ sự chuyên hóa về vai trò của bộ đôi Developer – Tester. Vì lý do đó, đôi lúc có thể bạn sẽ thấy vừa TDD vừa Scrum được áp dụng trong cùng 1 dự án.
4. Behavior-Driven Development – BDD
Như vậy, trong mô hình TDD nhiệm vụ kiểm thử do developer đảm nhiệm và vai trò chuyên hóa của người tester gần như không còn nữa. Chắc hẳn các bạn sẽ tự hỏi: “Vậy một Acceptance Tester như chúng ta có vai trò gì trong mô hình?”, “Tại sao tôi phải hiểu về TDD khi người ta ko cần tôi trong quy trình đó?”
Quả thực, trong mô hình TDD người Acceptance Tester thực sự đã chết. Tuy nhiên, việc cộng gộp vai trò phát sinh vấn đề quá tải cho người developer [2]. Để làm tốt công việc, xuyên suốt chu trình người developer phải chú ý thêm những vấn đề thuần túy của kiểm thử (test) như: “Cái gì cần test và cái gì không?” “Viết bao nhiêu kịch bản là đủ?” “Làm sao để hiểu là test đó thất bại?” “Bắt đầu test từ đâu?” …
Để giải quyết vần đề phát sinh mà vẫn tận dụng triệt để lợi ích mà TDD mang lại, Dan North phát triển một mô hình mới với tên gọi: Behavior-Driven Development – BDD (hoặc ta có thể hiểu là Acceptance Test-Driven Development – ATDD) [5]. Trong đó, một vai trò mới trong việc thiết kế kiểm thử (Test Design) được đặt ra:
Thay vì chờ đợi sản phẩm hoàn thành và kiểm thử, người tester/analyst tham gia vào quá trình xây dựng mã nguồn với vai trò phân tích và xây dựng hệ thống kịch bản kiểm thử dưới góc độ ngôn ngữ tự nhiên dễ hiểu từ các yêu cầu (requirement).
Đồng thời, họ giúp đỡ developer trong việc giải thích và đưa ra các phương án xây dựng mã nguồn mang tính thực tiễn với người dùng ngay trước khi bắt tay xây dựng.
Người developer liên hệ mật thiết với người tester và xây dựng mã nguồn với những phương án mà tester cung cấp theo mô hình TDD.
Kịch bản kiểm thử được phân chia làm 2 lớp: Lớp chấp nhận (feature/acceptance test) và Lớp đơn vị (unit test) [1].
Theo đó, kịch bản kiểm thử lớp đơn vị mang thuần tính thiết kế và phục vụ cho việc kiểm thử lớp đơn vị (Unit test) còn kịch bản kiểm thử lớp chấp nhận có thể được tái sử dụng cho quá trình kiểm thử hồi quy về sau (Regression Test)
Mô hình BDD – TDD trong Agile mô phỏng bởi Paul Littlebury
Từ mô hình trên ta dễ dàng nhìn nhận được sự ưu việt BDD mang lại đặc biệt là trong các dự án phần mềm lớn và phức tạp, khi cả hai khía cạnh phân hóa vai trò và chất lượng phải đi đôi. Ngoài ra, việc chạy kịch bản kiểm thử và xử lý sớm các vấn đề thiết kế ngay trong khâu xây dựng giúp giảm thiểu tối đa chi phí và công sức sữa chữa lỗi.
Trong khi khái niệm BDD mang tính lý thuyết, việc ứng dụng của nó lại đặt nặng sự thực nghiệm. Để phát huy lợi ích về thời gian trong việc xây dựng kịch bản kiểm thử, ngôn ngữ và cách truyền tải là 1 thử thách khi phải đáp ứng khả năng đọc hiểu từ cả 2 khía cạnh: tự nhiên và thiết kế. Bằng sự vay mượn từ ngôn ngữ viết User Story, ngôn ngữ Gherkin được phát triển để phục vụ nhu cầu đó với cấu trúc đơn giản, hướng đối tượng và tương đồng cho mọi kịch bản: Given – When – Then (mình sẽ trình bày rõ hơn về ngôn ngữ này ở các loạt bài khác) [4].
Ví dụ:
Given: Là một sinh viên
When: Tôi đăng ký một khóa học thành công
Then: Tôi phải thấy tên khóa học hiện ra trong danh sách môn học của tôi
5. Agile testing từ góc nhìn một Acceptance Tester
Có thể nhìn nhận rằng cùng với những lợi ích mà tuyên ngôn Agile mang lại, việc nở rộ và chiếm lĩnh của các mô hình hướng Agile như TDD-BDD đang dần dần thay đổi vai trò chuyên hóa của một Acceptance Tester truyền thống trong việc kiểm thử. Công việc kiểm thử dựa trên nguyên tắc đợi sản phẩm phần mềm hoàn tất (một phần hoặc toàn phần) và chạy kiểm thử trên sản phẩm như một người dùng (end-user) trở nên không cần thiết nữa. Thay vào đó, vai trò của người tester có xu hướng chuyển dần sang việc bảo trì chất lượng phần mềm (maintain quality) và hỗ trợ developer trong việc tối ưu sự tiện dụng của sản phẩm ngay từ khâu xây dựng. Trong tương lai, các tester cần có khả năng xây dựng và chạy các bộ kiểm thử mang tính bảo trì chất lượng. Đặc biệt là kiểm thử hồi quy tự động (regression test using automation) và các bộ kiểm thử trọng tải (performance test) – phần việc duy nhất developer không đảm nhiệm.
Tương tự, trong Agile – một bộ phận gia công phần mềm theo hướng truyền thống cũng sẽ dần lụi tàn nếu bản thân dịch vụ gia công không đáp ứng được nhu cầu liên lạc gần gũi giữa tester và developer. Điều này là không dễ khi đa số các dự án gia công luôn có khoảng cách về múi giờ, địa lý và văn hóa giữa offshore tester và đội ngũ developer. Thêm vào đó, trình độ tester cũng là một mối quan tâm lớn khi ở trong BDD tester cần có khả năng đọc mã nguồn để có thể đưa ra các giải pháp cải tiến thiết kế cho developer.
6. Kết luận
Trên đây là những chia sẻ và nhận định chủ quan của Thông về TDD-BDD nói riêng và Agile nói chung, những ảnh hưởng của nó dưới góc nhìn một người Acceptance Tester. Hiện tại trên mạng có rất nhiều tài liệu về hai mô hình này với mức độ chi tiết và ứng dụng khác nhau từ nhiều góc độ: thiết kế hệ thống, quản lý và xây dựng quy trình … đủ để phục vụ mục đích nghiên cứu nếu các bạn có nhu cầu. Những nội dung trên là những kiến thức cơ bản nhất do mình lượm lặt và hệ thống hóa trong những năm tháng làm việc với hi vọng có thể giúp các bạn có cách tiếp cận nhanh và dễ hiểu nhất. Mình rất mong có được những phản hồi và đóng góp của các bạn nhằm làm giàu và sữa chữa những kiến thức mình còn khiếm khuyết.
Macbook bị treo là tình trạng không mấy khi người dùng gặp phải, tuy nhiên người dùng đôi khi người sử dụng Macbook vẫn gặp tình trạng này. Vậy cách xử lý như thế nào khi Macbook của bạn bị treo ? Bài viết này mình sẽ chia sẻ cùng các bạn !
Một ứng dụng bị treo hay toàn bộ hệ điều hành của Macbook
Hệ điều hành MacOS khá hiện đại, rất thông minh trong việc quản lý bộ nhớ sử dụng cho các ứng dụng, nên việc cả hệ điều hành bị treo là hiếm khi gặp. Thông thường chỉ có một ứng dụng nào đó bị treo, có thể là do ứng dụng bị mắc kẹt trong một vòng lặp và chiếm quá nhiều bộ nhớ, trên màn hình bạn sẽ nhận được một cảnh báo nói rằng ứng dụng bị đóng đột ngột. Tuy nhiên nếu khóa mà không có bất kì cảnh báo nào thì có thể do hệ đều hành. Nếu máy không thể shutdown, không nhận chuột bạn chỉ cần giữ nút nguồn khoảng 10s và kiểm tra pin của chuột là xong.
Một ứng dụng của Macbook bị treo phải làm thế nào
Thoát và khởi động lại ứng dụng là cách tốt nhất để macOS xử lý sự cố ứng dụng bị treo.
Bước 1: Click vào cửa sổ ứng dụng khác trên màn hình desktop để chuyển sang một ứng dụng.
Bước 2: Nhấn Control + click biểu tượng ứng dụng trên dock.
Bước 3: Nhấn và giữ Option (tùy chọn Quit trong menu sẽ thay đổi thành Force Quit).
Bước 4: Chọn Force Quit. Ứng dụng sẽ đóng lại ngay lập tức. Nếu dock không hồi đáp, bạn nhấn tổ hợp phím Command + Option + Esc để mở cửa sổ Force Quit Applications. Tại đây bạn chọn một ứng dụng từ danh sách rồi click chọn Force Quit.
Khac phuc macbook bi treo
Toàn bộ hệ điều hành MacOS của Macbook bị treo
Nếu bạn không thể buộc đóng một ứng dụng, có nghĩa là khả năng Macbook của bạn đã bị treo cả hệ điều hành. Bạn thực hiện các bước sau:
Bước 1: Góc trên cùng bên trái cửa sổ, Mở menu Apple, nhấn Restart rồi chọn tiếp Restart. Nếu không thể thực hiện được bạn nhấn tổ hợp phím Command + Control + Eject để khởi động lại macOS
Bước 2: Nếu vẫn không được, bạn nhấn nút nguồn cho đến khi Mac tắt hoàn toàn. Sau đó mở lại máy Sau khi mở Macbook lên, hãy tìm file bị lỗi, thử khôi phục lại bằng cách lấy bản sao lưu thay file lỗi hoặc chuyển các nội dung sang một file mới, sau đó xóa file lỗi đi.
Khac phuc macbook bi treo
Khuyến cáo: nếu bạn gặp tình trạng này một vài lần, bạn cần phải tìm hiểu nguyên nhân. Có thể Macbook bị treo là do virus, hoặc những nguyên nhân do dung lượng ổ đĩa đã đầy, hoặc đã gỡ một cài đặt nào đó mà chưa cập nhật bản mới nhất trên Mac App Store. Nếu tình trạng Macbook bị treo thường xuyên, tốt nhất bạn cài lại hệ điều hành mới.
Tổng kết
Mình vừa hướng dẫn các bạn khắc phục 2 trường hợp Macbook bị treo, và tìm hiểu một số nguyên nhân gây ra hiện tượng này. Chúc các bạn sẽ có hướng xử lý tốt nhất !
Bài viết được sự cho phép của tác giả Trần Thị Thu Hà
Trở thành một blogger, đặc biệt là trong giới công nghệ, đòi hỏi không chỉ tài năng và kiến thức mà còn cần một chút tư duy kinh doanh và sự may mắn nữa. Các blogger công nghệ dưới đây thực sự thành công nhờ hội tụ đầy đủ những yếu tố ấy, tạo được dấu ấn cho riêng mình và có mức thu nhập khiến chúng ta ngưỡng mộ.
Ewdison Then là người đồng sáng lập kiêm biên tập chính của website tin tức công nghệ và điện tử tiêu dùng này. Luôn cập nhật các thông tin mới nhất về các sản phẩm công nghệ và các ứng dụng kèm theo những nhận xét xác đáng và lời khuyên hữu ích đã giúp SlashGear của Then trở thành một trong những blog thành công nhất trên nền tảng WordPress. Sự thành công của SlashGear đem về cho Ewdison Then khoảng 60.000 đến 80.000 USD/tháng.
Collis Ta’eed – “TutsPlus”
TutsPlus là nơi cung cấp những video hướng dẫn, các bài học và rất nhiều phương tiện học tập về phần mềm ứng dụng và vô số các công cụ thiết kế. Người theo dõi trang này có thể học mọi thứ từ việc đơn giản như download một bức ảnh đến phức tạp như thiết kế một ứng dụng phần mềm. Nhờ có TutsPlus, Collis Ta’eed kiếm được 55.000 – 120.000 USD/tháng.
Vitaly Friedman – “SmashingMagazine”
Anh là người sáng lập SmashingMagazine, một blog chuyên dành cho các nhà thiết kế website, cập nhật những tin tức mới nhất về giới thiết kế web cũng như các hướng dẫn, gợi ý và các bài học chất lượng cao. SmashingMagazine đem lại cho Friedman 150.000 – 190.000 USD mỗi tháng.
Pete Cashmore chính là người sáng lập website nổi tiếng, từng nhận được giải thưởng website độc lập lớn nhất thế giới này. Mashable hiện nay là nguồn thông tin ảnh hưởng nhất và là website được đọc nhiều nhất trong lĩnh vực kỹ thuật số, truyền thông xã hội và công nghệ. Pete Cashmore bắt tay xây dựng Mashable khi chỉ mới 19 tuổi và giờ anh là blogger trẻ nhất, có thu nhập cao nhất trên thế giới với 560.000 – 600.000/tháng.Pete Cashmore – “Mashable”
Sau khi nghỉ việc thì kỹ năng của tôi tăng lên khá nhiều, đó là những kỹ năng nào thì tôi đã nói phần 9 . Mọi người chưa biết có thể quay lại đọc nhé. Tuy nhiên khi nhìn lại bản thân thì kiến thức tôi có được chỉ là bề nổi mà thôi, sau khi nghỉ việc tôi tự đánh giá bản thân xem mình đang ở mức nào của một lập trình viên, junior hay senior. Junior thì tôi chắc chắn là hơn mức đó, còn senior thì tôi chưa đạt tới, hiện tại tôi đang dở dở ương ương.
Trước đây có một người từng hỏi tôi là “Bạn dành 12 ngày phép để làm gì?”. Tôi trả lời là “Tôi dành 12 ngày phép để nghỉ ngơi”. Người đó trả lời tôi một câu làm tôi mãi nhớ đến tận bây giờ đó là “Còn tôi, tôi dành 12 ngày phép để nâng cao kỹ năng của bản thân”. Khi ngẫm lại câu nói đó tôi đã cảm thấy kỹ năng của bản thân chưa là gì cả. Vậy là tôi đã lập kế hoạch để nâng cao trình độ cho bản thân bằng nhiều cách khác nhau.
Cách thứ nhất đó là tôi tự xây dựng project của riêng mình, tự nghĩ là một project để thực hiện nó bằng công nghệ của mình. Trước đây khi đi làm ở công ty thì thường sẽ có người chuyên dựng sẵn cấu trúc project rồi tôi chỉ dựa vào đó mà code theo thôi, còn việc cấu hình này nọ thì tôi không đụng tới và lúc đó cũng không có thời gian mà quan tâm cấu trúc được dựng thế nào, cấu hình ra sao. Tôi trước giờ làm java thì tôi sẽ đi nghiên cứu sâu về spring framework, hibernate.
Cách thứ hai đó là đi chia sẻ kiến thức của mình cho người khác. Tôi thường hay lượn trên các group lập trình xem có ai cần giúp đỡ gì không, đi comment dạo giải đáp các kiến thức, vấn đề hay fix bug qua Teamviewer cho mọi người, những gì mà tôi không biết thì tôi sẽ tìm hiểu và chỉ lại cho họ, nhờ vậy mà tôi đã biết được khá nhiều kiến thức cho mình.
Cách thứ ba là đi dạy kiến thức cho người khác, trên group cũng có một số bạn thuê gia sư để dạy kèm cho họ, tôi cũng nhận và dạy kèm với giá cả phải chăng, điều này vừa giúp bạn kiếm thêm thu nhập vừa ôn lại kiến thức cũ của mình, đa số tôi đều chỉ dạy những kinh nghiệm khi đi làm, kỹ năng giải quyết vấn đề, giải đáp những thắc mắc về nghề cũng như khó khăn mà gặp phải.
Cách thứ tư là làm freelancer, việc làm freelancer giúp bạn kiếm thêm thu nhập cũng như nâng cao được khả năng code. Vì phải đi làm ở công ty nên tôi không thể nhận những dự án lớn được, tôi thường nhận code những chức năng nhỏ nhỏ, hoặc phần mềm hay ứng dụng nào ít chức năng. Tôi nhận code luôn cả bài tập, project của những bạn sinh viên, tôi code java (swing, JavaFx, spring, hibernate), JavaScript, c# tôi đều có thể làm. Có những chức năng mà tôi nhắm chưa làm được thì sẽ search trước, nếu chắc chắn làm được thì tôi sẽ nhận. Việc này kéo dài một thời gian và tôi cảm thấy kiến thức của mình cũng tăng lên đáng kể.
Hiện tại công việc của tôi cũng khá là ổn và đang làm ở một công ty, công ty mà cấp trên luôn biết quan tâm tới nhân viên và không có khoảng cách giữa sếp và nhân viên, làm việc rất là thoải mái trong giờ giấc cũng như đãi ngộ. Phần 10 này cũng là phần cuối cùng của của series tâm sự lập trình về những dự án làm ở công ty, vì dự án tôi đang làm tới thời điểm hiện tai thì đã không còn sóng gió nhiều như những dự án mà tôi làm ở công ty cũ. Về kinh nghiệm khi đi làm thì tôi đã nói hết ở các phần trước rồi. Tuy nhiên tôi sẽ ra những series về những kỹ thuật, kỹ xảo khi đi làm để mọi người có thể áp dụng trong công việc giúp hiệu suất của mình tăng lên cao. Còn mục tâm sự lập trình này thì nếu sau này có những dự án nào hay ho thì tôi sẽ viết tiếp, hay chia sẻ về cuộc sống của lập trình viên chẳng hạn.
Bài viết đến đây là hết. Hãy like page để cập nhật những bài viết mới nhất và cũng chia sẻ cho bạn bè của bạn cùng đọc nhé. Cám ơn mọi người đã quan tâm theo dõi.
Mẫu quyết định thôi việc là bản trình bày nguyện vọng của một cá nhân đến với tổ chức dựa trên mong muốn chính thức về việc quyết định nghỉ việc của mình. Đây được xem là một loại giấy tờ quan trọng và có tính pháp lý trong công tác quản lý nhân sự của mỗi tổ chức/doanh nghiệp. Và đây cũng là một mẫu đơn HR cần biết.
Vậy một mẫu quyết định thôi việc sẽ cần đảm bảo những lưu ý về thể thức trình bày; các quy chuẩn nội dung cơ bản? Cùng TopDev điểm qua những lưu ý cần nắm qua bài viết sau.
Những trường hợp áp dụng quyết định nghỉ việc
Theo quy định tại Điều 36 Bộ luật Lao động 2012, có 10 trường hợp sau đây mà doanh nghiệp cho người lao động thôi việc được pháp luật ghi nhận và bảo vệ.
mẫu quyết định thôi việc
Cụ thể như sau:
1. Hết hạn hợp đồng lao động, trừ người lao động là cán bộ công đoàn không chuyên trách đang trong nhiệm kỳ;
2. Đã hoàn thành công việc theo hợp đồng lao động;
3. Hai bên thoả thuận chấm dứt hợp đồng lao động;
4. Đủ điều kiện hưởng lương hưu;
5. Người lao động bị tù giam, tử hình hoặc bị cấm làm công việc ghi trong hợp đồng lao động theo bản án, quyết định của Toà án;
6. Những vấn đề nảy sinh: người lao động chết, bị Toà án tuyên bố mất năng lực hành vi dân sự, mất tích hoặc đã chết;
7. Người sử dụng lao động là cá nhân chết, bị Toà án tuyên bố mất năng lực hành vi dân sự, mất tích hoặc đã chết; người sử dụng lao động không phải là cá nhân chấm dứt hoạt động;
8. Bị xử lý kỷ luật sa thải;
9. Người lao động đơn phương chấm dứt hợp đồng;
10. Người sử dụng lao động đơn phương chấm dứt hợp đồng; cho người lao động thôi việc do thay đổi cơ cấu, công nghệ hoặc vì lý do kinh tế; sáp nhập, hợp nhất, chia tách doanh nghiệp
Mẫu quyết định thôi việc chuẩn cho mọi đối tượng
Trên thực tế, có rất nhiều mẫu quyết định thôi việc mà bạn có thể tham khảo.
– Căn cứ vào quyết định [SỐ], ngày [NGÀY] về việc thành lập [TÊN CQ];
– Căn cứ văn bản về việc quy định phân công, phân cấp về quản lý cán bộ;
– Xét các tiêu chí sau:
+ Đơn xin nghỉ việc ông (bà) [TÊN] cán bộ nhân viên của [TÊN CQ];
+ Quá trình tham gia công tác từ ngày [NGÀY]
+ Đề nghị của ông (bà) Trưởng phòng Tổ chức cán bộ.
QUYẾT ĐỊNH
Điều 1. Nay thuận giải quyết cho Ông (bà) [TÊN] cán bộ nhân viên thuộc [TÊN CQ] được thôi việc kể từ ngày [NGÀY];
Điều 2. Ông (bà) [TÊN] được hưởng trợ cấp thôi việc là [SỐ THÁNG] tháng lương và các khoản phụ cấp, trợ cấp (nếu có) theo chế độ hiện hành;
Điều 3. Các Ông (bà) Trưởng phòng Hành chính, Trưởng phòng Tổ chức cán bộ, Trưởng phòng Kế toán- tài vụ, Trưởng [PHÒNG, BAN] và Ông (bà) [TÊN] có trách nhiệm thi hành quyết định này.
THỦ TRƯỞNG
Nơi nhận:
– Như điều 3
– Lưu Văn phòng
Những hệ quả khi tổ chức/doanh nghiệp cho nhân viên thôi việc trái luật
Khi cho người lao động thôi việc, doanh nghiệp phải tuyệt đối tuân thủ các quy định của pháp luật nếu không sẽ phải chịu những hệ lụy lớn.
Điều 42 Bộ luật Lao động 2012 nêu rõ nghĩa vụ của doanh nghiệp khi đơn phương chấm dứt hợp đồng trái luật, như việc phải tiếp tục thực hiện hợp đồng hay đền bù các tổn hại về vật chất và tinh thần cho người lao động.
Với nghĩa vụ tiếp tục thực hiện hợp đồng lao động:
– Doanh nghiệp phải cho phép người lao động trở lại làm công việc theo hợp đồng lao động đã giao kết, tức là khôi phục lại quan hệ lao động.
– Có nghĩa vụ đền bù vật chất và tinh thần
– Điều đầu tiên, doanh nghiệp cần đảm bảo việc hoàn tất tiền lương; các khoản phí về phúc lợi khác cho nhân viên như: bảo hiểm xã hội, bảo hiểm y tế trong những ngày người lao động không được làm việc. Đồng thời, có trách nhiệm đền bù tổn thất về tinh thần với mức thấp nhất là 02 tháng lương theo hợp đồng lao động.
– Trường hợp người lao động không muốn tiếp tục làm việc thì doanh nghiệp phải trả thêm trợ cấp thôi việc.
– Trong trường hợp không còn công việc theo hợp đồng mà người lao động vẫn muốn làm việc thì doanh nghiệp cần sửa đổi, bổ sung hợp đồng lao động.
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ạn nhận được review của cấp trên rằng app của bạn đang bị lỗi. Bạn mở lại app và làm theo các bước đã được chỉ ra trong review của sếp nhưng ứng dụng vẫn hoạt động sai. Vậy phải làm thế nào?
Testing là công việc quan trọng để hoàn thành một dự án. Đây là giai đoạn kiểm thử và phát hiện ra những vấn đề của sản phẩm và cải thiện nó. TDD là một phương thức làm việc định hướng tiếp cận là để giải quyết mọi vấn đề mà các tester đang gặp phải. TDD giúp bạn tiết kiệm được rất nhiều thời gian trong quá trình cải tiến sản phẩm.
Bạn học JavaScript cơ bản để bắt đầu làm quen những ngôn ngữ lập trình nâng cao hơn và lập trình tốt hơn, thì với những software developer, việc quan tâm đến TDD cũng cần thiết. Công thức làm việc chính của TDD là hãy nghĩ về thiết kế của bạn trước khi viết code cho chức năng. Nó sẽ giúp bạn giải quyết công việc đơn giản hơn rất nhiều.
Đây là lợi ích mà bạn nhận được từ TDD khi sử dụng. Nếu sau khi check code không xuất hiện lỗi thì bạn đã hoàn thành công việc và có thể chuyển sang task khác. Ngoài ra, vì bạn đang trong quá trình hoàn thành bài test nên bất cứ nhiệm vụ hay thứ gì khác xuất hiện trong quá trình này đều sẽ được đưa vào danh sách chờ. Bạn có thể viết chúng vào sổ ghi chú để chờ cho lúc sau thực hiện.
2. Thực hiện bài kiểm tra hồi quy – regression test
Nghĩa là nếu có lỗi xảy ra khiến hệ thống bạn đã build hay đang chỉnh sửa gặp vấn đề, bạn sẽ nhận được thông báo ngay từ bộ thử nghiệm chứ không phải từ người dùng app của mình.
3. Khám phá thêm về các trường hợp góc
Khi làm việc bằng cách test sản phẩm, bạn có thể nhìn ra và xem các đầu vào mà một class hay một array có thể có. Bạn có thể làm quen với khái niệm class, array khi học JavaScript cơ bản. Lúc này bạn sẽ đặt ra các câu hỏi rằng hỏi ứng dụng sẽ hoạt động như thế nào dưới các giá trị nhất định. Do đó, việc trước tiên bạn cần làm là build cho xong app và sau đó hãy tiến hành test từng trường hợp cụ thể để loại bỏ được tất cả những sai sót có thể có trong quá trình làm việc.
Khi bạn cố gắng thực hiện các bài test, bạn sẽ hiểu rõ hơn về cách mọi thứ được kết nối với nhau và cách chúng làm việc như thế nào. Đặc biệt, đây sẽ là tính năng cực kỳ phù hợp nếu bạn chưa từng làm việc hoặc mới bắt đầu dự án, nó sẽ giúp bạn hiểu rõ hơn về cách hoạt động của code. Như để bắt đầu công việc lập trình tốt nhất, bạn nên nắm rõ về các khái niệm, cách làm việc tiêu chuẩn và học JavaScript cơ bản là một giải pháp tốt.
TDD không thể thay thế phương pháp kiểm thử truyền thống, thay vào đó nó định nghĩa một cách thức để đảm bảo việc thực hiện các unit test một cách hiệu quả. Và đây cũng được đánh giá là công cụ được các dev làm việc phần mềm sử dụng nhiều nhất. Làm việc hiệu quả sẽ mở ra cơ hội để lập trình viên có thể tìm được những công việc tốt trong các môi trường chuyên nhiệp như công ty Gear Inc.
Một nền tảng kiểm thử trên một ngôn ngữ lập trình được thiết lập để cho ngôn ngữ lập trình biết phương thức nào là phương thức kiểm thử (testing method), lớp nào là lớp kiểm thử (testing class), kết quả như thế nào là đúng (Passed), như thế nào là sai (Failed)….
Từ khoá chính trong PyUnit
testcase: Từ khoá này được dùng để mô tả cho Python biết lớp đang tương tác là một lớp kiểm thử. Ex: class A(unittest.TestCase):
setup: Từ khoá này được dùng bên trong một lớp kiểm thử. Nó dùng để tạo một phương thức, và phương thức này sẽ được chạy trước khi thực thi mã trong phương thức kiểm thử (Pre-condtion). Ex: def setUp(self):
teardown: Từ khoá này được dùng bên trong một lớp kiềm thử. Nó dùng để tạo một phương thức, và phương thức này sẽ được chạy sau khi thực thi mã trong phương thức kiểm thử (Post-condition). Ex: def tearDown(self):
Chúng ta không có từ khoá để xác định phương thức nào là phương thức kiểm thử. Để làm điều này, chúng ta phải đặt tên cho phương thức với tiền tố “test_”. Ex: def test_demo(self):
Thực thi kịch bản kiểm thử
Để thực thi kịch bản kiểm thử với Python, chúng ta có 2 cách như sau.
Sau khi mình đọc được đâu đó bản dịch cũng từ nguồn trên thì cảm thấy có gì đó không ổn, phát hiện ra là bài viết tiếng Anh được bê nội dung vào “Gu-gồ” dịch sau đó thì đưa lên làm bài viết. Google dịch giờ thì cũng đã sát nghĩa và đỡ lôm côm rồi, nhưng mà nhiều chỗ cần giải thích, có những đoạn dùng từ hơi đặc thù nên nếu không diễn giải, sử dụng từ phù hợp hơn thì nó vẫn rất là “buồn cười” nhưng nghe vẻ bạn dịch bài viết kia đã không để ý hoặc bạn không quan tâm nên Google dịch thế nào bạn lấy về dùng y như thế khiến mình nghĩ là mình sẽ dịch thử xem sao.
Đúng là dịch rồi thì mới thấy là hơi mông lung =)) các bạn đọc rồi góp ý cho mình với nhé. Có những đoạn thì mình đoán ý người viết rồi viết ra theo cách hiểu của mình. Đây là bài học và kinh nghiệm khi kiểm thử chức năng tìm kiếm cho các ứng dụng web có tính năng này. Mình cũng hi vọng bài viết có ý nghĩa cho tất cả các bạn mới tìm hiểu và làm về kiểm thử.
——–
Hiện nay hầu hết các ứng dụng đều cung cấp chức năng tìm kiếm cho phép người dùng có thể tương tác, tìm kiếm nội dung trên trang web đó. Số lượng các kịch bản kiểm thử cho trường tìm kiếm này có thể nói là vô kể, vì thế việc xác định các yếu tố phù hợp và đảm bảo tính hiệu quả khi thực hiện kiểm thử là một việc rất cần thiết. Bài viết này đưa ra một số gợi ý lớn cần lưu ý cho bạn khi kiểm thử chức năng tìm kiếm.
1. Chuẩn bị tài liệu trước khi kiểm thử
1.1. Tạo một tài liệu để lưu trữ tất cả các dữ liệu đầu vào sẽ được dùng để nhập vào ô tìm kiếm
1.2. Xác định các lớp tương đương và các giá trị biên.
1.3. Xác định rõ các khả năng mà chức năng này có thể đáp ứng khi tìm kiếm, như tìm kiếm tài liệu, tìm kiếm từ trong một tài liệu nào đó, hay là tìm kiếm hình ảnh…
1.4. Các kết quả tìm kiếm có hiển thị kích thước của các hình ảnh, tài liệu hay không?
1.5. Có thể sử dụng các tính năng tìm kiếm nâng cao như tìm kiếm theo phân loại như loại tài liệu hoặc loại hình ảnh hay không?
1.6. Lưu ý một số cặp dữ liệu đầu vào thông thường như:
Giả lập các trường hợp để xác định, phát hiện các lỗi liên quan đến bảo mật như XSS, SQL, JavaScript, HTML injections
Khi vào các trang thương mại điện tử hoặc trang web của các cửa hàng online, có thể thấy rằng tìm kiếm là một trong những tính năng chính quan trọng luôn được hiển thị phía trên đầu của ứng dụng, những vị trí rất dễ nhìn thấy. Đây là một trong những tính năng rất hữu ích đối với người dùng. Chúng ta sẽ cùng thử đưa ra những trường hợp có thể được dùng để kiểm tra khi thực hiện kiểm thử cho chức năng tìm kiếm này nhé!
2. Thiết kế chức năng
2.1. Kiểm tra việc hiển thị của khối tìm kiếm này trên trang web như: có thể dễ dàng nhìn thấy mà không cần phải cuộn trang lên xuống, trên các loại màn hình, máy tính xách tay với độ phân giải khác nhau, kể cả với những màn hình có độ phân giải thấp.
2.2. Khối tìm kiếm này về mặt thiết kế có tương tự với các trường tìm kiếm thông dụng trên các công cụ tìm kiếm khác như Google, Yahoo, Bing hay không?
2.3. Tùy theo mô tả yêu cầu của hệ thống, ta cũng cần kiểm tra xem khối tìm kiếm có xuất hiện ở tất cả các trang của ứng dụng không hay chỉ hiển thị ở một số màn hình thôi?
2.4. Tiếp theo là kiếm tra hiển thị bố cục của khối tìm kiếm này. Một khối tìm kiếm sẽ thường bao gồm:
Trường dữ liệu cho phép nhập vào các dữ liệu tìm kiếm
Dữ liệu được nhập vào ô tìm kiếm
Nút “Tìm kiếm”
Khối lựa chọn dữ liệu tìm kiếm
Thông tin về câu truy vấn tìm kiếm
2.5. Bên cạnh đó cũng cần kiểm tra xem số lượng từ tối đa có thể nhập vào trường tìm kiếm là bao nhiêu từ? Có ràng buộc hay giới hạn gì hay không?
3. Hoạt động của chức năng
3.1. Kiểm tra trường tìm kiếm có cho phép lựa chọn tìm kiếm theo các nhóm tiêu chí cụ thể hay không? Ví dụ như theo loại sản phẩm, theo bài biết, hay theo đánh giá…
3.2. Có hiển thị thông báo về những hạng mục được tìm thấy, số lượng mặt hàng là bao nhiêu không?
3.3. Thông thường ở ô tìm kiếm mặc định sẽ hiển thị sẵn một gợi ý nho nhỏ như là “Tìm kiếm”, “Tìm sản phẩm” … như ở Lazada thì có hiển thị là “Tìm kiếm trong Lazada”, vậy thì mình sẽ kiểm tra cái gì ở đây, bạn cần kiểm tra khi gõ từ khóa tìm kiếm vào thì những từ mặc định kia sẽ tự động mất đi mà không chèn vào cùng với từ vừa được nhập vào, và khi xóa từ khóa vừa gõ thì ô tìm kiếm lại hiển thị dòng thông tin mặc định tương ứng.
3.4. Khi tìm kiếm ta có thể thay đổi các từ khóa tìm kiếm khác nhau được không?
3.5. Chức năng có đưa ra các gợi ý tùy thuộc vào khu vực tìm kiếm hay không? Ví dụ như khi bạn gõ một từ khóa tìm kiếm nào đó, nó có thể gợi ý cho bạn biết rằng mặt hàng, hay thông tin tìm kiếm này nằm trong một vài nhóm, hoặc danh mục cụ thể nào đó, bạn có thể tùy chọn tìm kiếm mặt hàng này trong một số nhóm gợi ý vừa hiển thị ra. Ví dụ như khi bạn tìm “Kính bơi” nó sẽ hiển thị gợi ý cho bạn để bạn có thể tìm mặt hàng này trong danh mục nhóm đồ “Thể thao” hoặc danh mục nhóm đồ “Bơi lội”.
3.6. Trường hợp gõ nhầm tên sản phẩm hoặc từ khóa tìm kiếm, có gợi ý được sản phẩm đúng, liên quan nhất hay không? Ví dụ như khi muốn tìm kiếm “Kính bơi” nhưng bạn lại gõ nhầm thành “KInh bơi” hay “Kín bơi” thì nó có tìm được hoặc gợi ý thành Kính bơi hay không?
3.7. Kiểm tra việc hỗ trợ tự động hoàn thiện từ khóa khi nhập một số từ trong từ khóa dựa vào bộ từ điển được định nghĩa và các kết quả tìm kiếm liên quan đã được tìm thấy trước đó – tính năng này giống như bạn tìm kiếm trên Google ấy, khi bạn gõ một từ bất kỳ, nó sẽ gợi ý cho bạn những từ tiếp theo có thể xuất hiện trong cụm mà bạn muốn tìm kiếm.
3.8. Kiểm tra việc sắp xếp các gợi ý hỗ trợ tìm kiếm theo tần xuất được tìm kiếm của từ khóa và mức độ cạnh tranh của mặt hàng. Ví dụ như khi tìm kiếm hàng trên Tiki, thì nó sẽ gợi ý cho bạn những mặt hàng với từ khóa liên quan được tìm kiếm nhiều nhất, hay bán chạy nhất… kiểu thế.
3.9. Kiểm tra xem việc đưa ra dự đoán về số lượng kết quả tương ứng có thể tìm ra khi nhập từ khóa tìm kiếm. Ví dụ như mình tìm 1 sản phẩm là Kính, nó sẽ đếm nhanh và hiển thị kiểu như có 200 kết quả liên quan chẳng hạn.
3.10. Kiểm tra xem việc tìm kiếm có cung cấp thông tin về giá cả của mặt hàng được tìm thấy hay không?
3.11. Việc tìm kiếm mặt hàng có cung cấp và hiển thị thông tin mặt hàng đi kèm một hình ảnh nhỏ nhỏ tương ứng với mặt hàng đó hay không?
3.12. Có đưa ra thông tin về những mặt hàng không được bán/ không còn bán trên hệ thống hay không?
4. Giao diện hiển thị kết quả
4.1. Kiểm tra để đảm bảo rằng các kết quả tìm kiếm cần được hiển thị rõ ràng và không bị lẫn lộn bởi các loại quảng cáo khác có trên trang.
4.2. Kết quả tìm kiếm này được hiển thị trong một khối có cấu trúc và thường bao gồm các thông tin sau:
Hiển thị thông tin được tìm kiếm: như bạn đã tìm kiếm cái gì, ở mục nào… Ví dụ như: Tìm “Kính bơi” trong Dụng cụ thể thao ….
Danh sách các kết quả tìm kiếm được sẽ hiển thị như thế nào?, được sắp xếp theo trình tự ra sao? Ví dụ như hiển thị dạng lưới (grid), dạng bảng, hay danh sách, được sắp xếp theo độ phổ biến, theo giá hay theo số lượng người mua, theo đánh giá của mặt hàng…
Việc hiển thị tên nhóm chủng loại của hàng hóa có được cung cấp hay không?
Có hiển thị thông tin gợi ý, khuyến nghị cho người dùng không? Ví dụ như “Có 5000 người cũng tìm kiếm sản phẩm này”, “Có 3000 người khác cũng mua kèm sản phẩm này”…
Việc hiển thị các thông tin thêm để người dùng có thể hiểu hơn về mô tả của các mặt hàng có được cung cấp hay không?
5. Chức năng hiển thị kết quả
5.1. Đối với trường hợp từ khóa tìm kiếm nhập vào bị lỗi chính tả hay lỗi chủ quan do người dùng nhập vào có được điều chỉnh khi tìm kiếm và hiển thị kết quả truy vấn chính xác hay không?
5.2. Kết quả tìm kiếm có bao gồm số lượng kết quả tìm kiếm được hay không? Ví dụ, khi bạn với từ khóa “Mũ bơi” ở phần hiển thị danh sách kết quả tìm kiếm nó sẽ hiển thị kiểu như tìm được 2000 kết quả chẳng hạn.
5.3. Kết quả tìm kiếm có cung cấp số lượng các sản phẩm tìm thấy được phân nhóm theo một số tiêu chí không? Các tiêu chí đó có thể là Nhóm sản phẩm, Thương hiệu… etc
5.4. Mỗi kết quả tìm thấy có bao gồm thông tin ngắn về sản phẩm, giá, hình ảnh và một nút mua hoặc thêm vào giỏ hàng hay không?
5.5. Trong kết quả tìm kiếm, những mặt hàng được gắn thẻ đặc biệt như Ưu đãi, khuyến mãi, hay Hàng mới thì những thông tin này cũng sẽ được hiển thị đi kèm với các thông tin mô tả ngắn về mặt hàng được hiển thị theo mục kế trên.
5.6. Kết quả tìm kiếm có bao gồm các tùy chọn nâng cao như có thể mở sản phẩm cụ thể nào đó để xem chi tiết, hoặc mở xem thông tin trong một tab khác hay không?
5.7. Có thêm tùy chọn tìm kiếm nâng cao hay không? Ở đây kiểm tra việc có thể bổ sung thêm một số các tiêu chí tìm kiếm khác cho danh sách kết quả này.
5.8. Đường dẫn địa chỉ tìm kiếm có thể được thay đổi mỗi khi tiêu chí lọc mới được thực hiện hay không?
5.9. Các trang kết quả tìm kiếm và bộ lọc có được đóng bởi các công cụ tìm kiếm hay không? (Đoạn này chưa hiểu lắm)
5.10. Ở danh sách hiển thị kết quả tìm kiếm này có hiển thị thông tin về lịch sử tìm kiếm trước đó hay không? Ví dụ ở phía cuối danh sách kết quả nó hiển thị thông tin là vừa trước đó bạn đã tìm cái gì?
6. Các trường hợp tìm kiếm không hợp lệ
6.1. Trong trường hợp không có kết quả tìm kiếm phù hợp với tiêu chí tìm kiếm thì có phản hồi như thế nào? Có thể hiển thị một dòng thông tin cho người dùng biết như “Không tìm thấy sản phẩm nào”.
6.2. Có cung cấp những gợi ý tìm kiếm khác liên quan đến từ khóa tìm kiếm không?
6.3. Có cung cấp các tùy chọn tìm kiếm khác không? Ví dụ như thay vì tìm theo tên mặt hàng có thể có tùy chọn để có thể tìm kiếm theo thương hiệu, cửa hàng, bài viết…
6.4. Hoặc có đưa ra các gợi ý tìm khác dựa vào mục đích tìm kiếm hoặc các tìm kiếm khác trước đây đã được thực hiện hay không?
7. Tổng hợp kết quả tìm kiếm và các thông tin chi tiết khác
7.1. Không bỏ qua các kết quả đã hiển thị trên danh sách kết quả tìm kiếm được, nghĩa là chúng ta vẫn cần phải kiểm tra kết quả này, vì có thể kết quả đó chẳng liên quan gì đến từ khóa mà ta đang tìm kiếm cả.
7.2. Kiểm tra số lượng kết quả tìm kiếm hiển thị trên mỗi trang
7.3. Kết quả tìm kiếm được có hiển thị đúng theo một số tiêu chí cụ thể nào đó hay không? Ví dụ mức độ phổ biến, được xem nhiều nhất, hoặc theo thứ tự bảng chữ cái….
7.4. Trong trường hợp không có kết quả tìm kiếm nào được tìm thấy thì nội dung tin nhắn tương ứng hiển thị có đúng hay không?
7.5. Thời gian dành cho mỗi phiên truy vấn là bao nhiêu? Có mất nhiều thời gian không?
7.6. Việc tìm kiếm có phân biệt trường hợp người dùng đăng nhập hay khách không?
Các bạn có thể tham khảo bài viết gốc nếu như không thích bản tam sao này của mình, hi vọng các cao thủ dịch thuật có lạc vào đây và phát hiện ra điểm gì chưa đúng, hay chưa sát nghĩa thì để lại cho mình đóng góp nhé, những đóng góp của các bạn chính là niềm vui vô cùng to lớn đối và động lực mạnh mẽ để mình có thể tiếp tục phát huy hơn nữa =)) Trân trọng cảm ơn!!!
Trước tiên để biết PCF (Pivotal Cloud Foundry) là gì? Tôi sẽ giới thiệu sơ lượt về kiến thức phân loại Cloud Service. Như hình bên dưới thì ta thấy có 3 loại Cloud Service hiện nay:
IaaS: Người developer tạo ra app thì phải dựng OS, Môi trường run time,… và cuối cùng deploy app để test các kiểu.
PaaS: Người developer tạo ra app thì phải bấm nút deploy app để test các kiểu.
SaaS: Người developer tạo ra app bấm nút là có bản report mọi thứ đã khai xong.
PCF là gì?
PCF – Pivotal Cloud Foundry (https://pivotal.io/about) là điện toán đám mây được phát triển bởi Pivotal. PCF cung cấp một Platform as a Service (PaaS) giúp giảm tải quá trình phát triển và triển khai các ứng dụng. Nên developer không phải quan tâm nhiều đến server mà chỉ việc develop thôi, còn triển khai từ development -> Staging -> Production vô cùng nhanh. Và đã có nhiều công ty sử dụng PCF để phát triển công nghệ, thông qua Pivotal CF để xây dựng một nền tảng điện toán đám mây dựa trên mã nguồn mở.
PCF được triển khai với mục đích:
Quá trình phát triển và triển khai ứng dụng được nhanh chóng.
Khả năng mở rộng và khả năng hữu dụng của ứng dụng luôn luôn được cao nhất.
Giúp quy trình DevOps được thuận lợi và dễ dàng
Giảm thiểu sai sót do con người gây ra.
Tiết kiệm chi phí sử dụng.
PCF vận hành như thế nào?
Trước khi biết vận hành ra sao thì ta cần biết về tổ chức trong PCF. Để dễ dàng quản lý thì PCF chia thành các phần sau và người dùng hoàn toàn có thể quản lý nó thông qua Cloud Foundry Command Line Interface (cf CLI)
Sơ đồ tổ chức trong PCF
Orgs: khi tạo organizations bạn có thể quản lý quota về dung lượng… Nó chứa các spaces.
Spaces: spaces chứa các apps.
Apps: applications bạn có toàn quyền scale, bind apps vào services, manage environment variables, routes, view logs và xem thông tin, start và stop apps và xóa apps.
Services: có thể bind services vào apps, unbind services từ apps, chọn và sửa service plans, đổi tên và xóa service instances.
Users: Bạn có thể thêm user vào org, roles, và xóa users.
Quy trình vận hành PCF
Theo sơ đồ thì user chỉ cần gửi command từ nơi chứa app để push app cùng cấu hình lên PCF.
Kế tiếp, PCF sẽ tiến hành deploy, binding services cần thiết và scale app từ cấu hình push lên.
Khi deploy PCF sẽ hoạt động như thế nào?
Infrastructure thì bạn có thể dùng các cloud như Google Cloud Platform, Azure, Amazon, VMware,… nói chung là server đảm bảo vận hành tốt là có thể để triển khai hệ thống PCF.
PCF Platform sẽ quản lý scalling theo nhu cầu khi deploy app và các database, cache, store đều đươc xem là services chũng sẽ binding vào app trong lúc deploy.
Run time: Quá trình vận hành đầu tiên khi push code vào PCF.
Routing: Khi nhận lệnh push routing sẽ điều phối các domain trỏ vào đúng container.
Service discovery: là bước tiếp theo tiến hành binding các service vào app.
Container: Sẽ upload source code vào 1 container mới.
Configuration: Sẽ scalling container cho phù hợp thông qua manifest.xml config và buid pack config.
Application framework: Deploy framework phù với source và đã có build pack hỗ trợ. Và thực hiện chu trình destroy container cũ và start container mới.
Logging & Metrics: Trong lúc deloy thì hệ thống log sẽ listen PCF xử lý và ghi log và số liệu.
Messaging: Sau các tiến trình thì PCF sẽ thông báo.
Services: các service mà PCF cung cấp như database, cache,….
Chia sẻ về PCF Architechture
PCF Architechture on Azure
PCF Achitechture on AWS
Lời kết
PCF được xây dựng trên mô hình PaaS. Hiện nay, đang được các công ty lớn áp dụng nhằm tối ưu thời gian phát triền và triển khai ứng dụng lên các platform. Bạn có thể tìm hiểu tại đây https://docs.pivotal.io
Bài viết được sự cho phép của BBT Tạp chí Lập trình
Cuối cùng Java 9 và bộ công cụ phát triển cho nó (Java Development Kit -JDK 9) cũng đã chính thức ra mắt người dùng và các nhà phát triển Java trên toàn thế giới.
Java 9 tuy có một số tính năng mới quan trọng tuy còn gây tranh cãi, nhưng đây là phiên bản cuối cùng trong chuỗi phát hành của Java 9.
Vậy bạn sẽ chuẩn bị những gì để tham gia vào cộng đồng phát triển Java trong những năm sắp tới?
Oracle đã đăng tải phiên bản này cùng các tài liệu cho phép các nhà phát triển tải về tại địa chỉ: http://jdk.java.net/9
Những tính năng mới quan trọng
Xuất hiện sau Java SE 8 tới gần ba năm, Java SE 9 có một vài thay đổi chủ chốt trong kiến trúc, cũng như hàng loạt cải tiến.
Thay đổi cách chơi bằng tính mô-đun
Khả năng mô-đun hóa – tính năng mới và gây tranh cãi, được dựa trên dự án Jigsaw, chắc chắn sẽ gây ra nhiều sự chú ý bởi của cả hai phe tiến bộ và bảo thủ.
Tính mô-đun – lấy chữ mô-đun trong “Java Platform Module System” – phân chia JDK thành một tập các mô-đun dành cho thực thi, biên dịch hoặc buid time. Đây được xem như một thay đổi xuyên suốt cho phép hiểu các phụ thuộc thông qua các mô-đun.
Tính mô-đun của Java 9 hỗ trợ các nhà phát triển dễ dàng tập hợp và bảo trì các ứng dụng phức tạp. Ngoài ra, nó cũng khiến Java trở nên tốt hơn trong việc thu nhỏ quy mô xuống các thiết bị nhỏ gọn trong khi vẫn cải thiện được bảo mật và hiệu suất.
Khía cạnh mô-đun của Java 9 thể hiện ở nhiều mặt, trong đó có cách đóng gói chương trình, sự mô-đun hóa bản thân JDK, và tổ chức mã nguồn thành các mô-đun. Hệ thống build được nâng cấp để biên dịch các mô-đun và duy trì ranh giới giữa các mô-đun trong lúc build. Các ảnh (chạy trong máy ảo Java) của JDK và JRE được tái cấu trúc để xử lý các mô-đun. Ngoài ra các thư viện JavaFX UI và các CSS API cũng được thay đổi để phù hợp với lối lập trình mới.
Tính mô-đun đi kèm với một loạt các cấu hình được hỗ trợ; dẫn tới sự cải thiện về khả năng mở rộng, bảo mật và hiệu suất của các ứng dụng. Mô-đun cũng giúp việc triển khai chương trình Java trên các thiết bị nhỏ trở nên dễ dàng hơn, đây là động lực chính trong nỗ lực đưa tính mô-đun vào Java.
Với tính mô-đun, các nhà phát triển sẽ có khả năng xây dựng và bảo trì các thư viện cũng như chương trình lớn cho cả Java SE cũng như Java EE. Tuy vậy, trong quá trình xây dựng Java 9, Oracle, IBM, Red Hat và một vài tổ chức đã có những bất đồng quan điểm lớn đối với sự thay đổi cơ bản trong nền tảng. Hệ thống mô-đun thật ra đã bị từ chối hồi Tháng 5, và chỉ được chấp thuận vào cuộc bỏ phiếu lần hai vào Tháng 6, sau khi dự án Java 9 đã được khởi động.
Ngay cả như thế, những tranh cãi vẫn tiếp diễn. Một số chuyên gia đã nói không với tính mô-đun, bất kể sự thực rằng Java 9 đã được phát hành.
Để giúp việc chuyển đổi mã nguồn cũ sang dạng mô-đun được dễ hơn, Java 9 cho phép truy cập trái phép những reflection trên class path, để JRE có thể tìm tới các lớp và tập tin tài nguyên. Mặc dù vậy, trình biên dịch sẽ đưa ra cảnh báo về những reflection này, và chúng sẽ không được hỗ trợ ở những phiên bản Java tiếp theo.
Trình biên dịch được cải tiến cho mã nguồn của Java 9
Dẫn đầu trong số những tính năng mới trong trình biên dịch của Java 9 là khả năng biên dịch trước (ahead-of-time compilation – AoT). Tính năng này vẫn đang trong giai đoạn thử nghiệm – nó cho phép các lớp của Java được biên dịch sang mã máy trước khi được gọi khởi chạy trong máy ảo. AoT compilation giúp cải thiện thời gian khởi động của tất cả các ứng dụng từ nhỏ đến lớn, trong khi ít hạn chế đến hiệu suất cao điểm.
Những trình biên dịch JIT (Just-in-time) hoạt động nhanh hơn, nhưng trong thực tế những chương trình Java hiện tại thường lớn tới mức mà phải mất một thời gian khá lâu để được biên dịch toàn bộ, hệ quả là trình biên dịch thường để lại một vài phương thức không được biên dịch, và dẫn tới giảm hiệu năng. AoT compilation được áp dụng là để giải quyết vấn đề này.
Thế nhưng Dmitry Leskov, giám đốc marketing của Excelsior – đối tác công nghệ Java, lo lắng rằng AoT chưa đủ trưởng thành và mong muốn Oracle đợi tới phiên bản Java tiếp theo cho tính năng này.
Oracle cũng triển khai giai đoạn hai của tính năng “biên dịch thông minh”, liên quan tới việc cải thiện tính ổn định và di động vào công cụ javac vì vậy nó có thể được sử dụng mặc định cho JVM (Java Virtual Machine). Công cụ này cũng được tổng quát hóa để có thể được dùng cho các dự án lớn vượt ra ngoài phạm vi của JDK. Ngoài ra, nó còn có thể biên dịch các chương trình được viết dưới Java 9 thành dạng có thể chạy trên những phiên bản Java cũ hơn.
Một tính năng mới khác cũng được đem vào triển khai thử nghiệm là JVMCI – Giao diện Biên dịch mức-Java cho JVM. Giao diện này cho phép một trình biên dịch được viết bằng Java có thể được dùng như một trình biên dịch động cho JVM. API của JVMCI cung cấp cơ chế để truy cập các cấu trúc của VM, cài đặt mã đã biên dịch và kết nối vào hệ thống biên dịch JVM. Nhờ đó các nhà phát triển có thể viết ra và sử dụng những trình biên dịch chất lượng cao và dễ dàng hơn trong việc bảo trì hay cải tiến các trình biên dịch hiện tại được viết bằng ngôn ngữ C hay C++. Hiện đã có một số nỗ lực được bỏ ra cho mục đích đó, như dự án Graal hay Metropolis.
Ngoài ra, trình biên dịch mới cũng cho phép các nhà phát triển điều khiển trình biên dịch theo ngữ cảnh ở từng phương thức, ngay tại thời điểm chạy, mà không ảnh hưởng tới hiệu năng. Công cụ cũng cho phép xử lý các lỗi trình biên dịch JVM.
Java cuối cùng cũng có REPL
Công cụ REPL đã quá quen thuộc với các nhà phát triển Ruby, Python, NodeJS… nhưng chưa bao giờ xuất hiện cho ngôn ngữ Java. Việc thiếu vắng REPL là một trong số những lý do các trường học từ chối sử dụng Java để giảng dạy. Nhà sáng lập của Scala – Martin Odersky đã từng đặt ra những câu hỏi tính hữu ích của một REPL, và ông đã phát biểu “Java thì hướng câu lệnh, trong khi đó các REPL thì hướng biểu thức”.
Nhờ những nỗ lực sau một dự án dài hơi, REPL cũng đã xuất hiện ở Java 9 dưới tên thương mại jShell. Ngoài khả năng tương tác với các câu lệnh khai báo và các biểu thức, giúp cho các nhà phát triển có thể nhận được phản hồi của một chương trình trước khi biên dịch chỉ bằng cách nhập vào một số dòng mã, jShell còn có thể hỗ trợ hoàn thiện câu lệnh/biểu thức và tự thêm những dấu chấm phẩy cần thiết. Nó cũng có một API để các IDE cũng như các công cụ khác có thể khai thác.
Những cải tiến trên Streams API
Các stream trong Java cho phép dữ liệu được khai thác song song một cách hiệu quả. Trong Java 9, Streams API được bổ sung những phương thức để lấy và cắt bỏ các phần tử từ Stream theo điều kiện, duyệt qua các phần tử của Stream, và tạo một stream từ một giá trị nullable.
Hỗ trợ JavaScript thông qua dự án Nashorn
Dự án Nashorn được theo đuổi để cung cấp một máy chạy Javascript cho Java, đã được cải tiến ở JDK 9. Nhiều nỗ lực đã được bỏ ra để Nashorn có hiệu năng cao nhưng vẫn đủ nhỏ. Nashorn cho phép nhà phát triển nhúng mã Javascript vào chương trình Java. Một Javascript REPL cũng đã đóng gói vào JDK.
Các phần được đóng gói còn có một API để giao tiếp với chương trình cây cú pháp ECMAScript của Nashorn, cho phép các công cụ cũng như IDE có thể phân tích mã Javascript mà không bị phụ thuộc vào chương trình thực thi của Nashorn.
HTTP/2 client API
HTTP/2 client API bản beta đã được bổ sung vào JDK 9, triểm khai những nâng cấp cho giao thức HTTP. Ở API này, WebSocket cũng đã được hỗ trợ.
API HTTP/2 client có thể thay thế cho API HttpURLConnection vốn có thể gặp sự cố, có nhiều giao thức không còn được hoạt động, quá trừu tượng, và khó sử dụng.
Cải thiện công cụ Javadoc
Trong JDK 9, công cụ tạo tài liệu Javadoc đã được cải tiến để tạo ra mã HTML5 cũng như hỗ trợ bảng mã Unicode 8.0, với nhiều ký tự và mã mới được bổ sung.
API bảo mật DTLS
Cho mục đích bảo mật, Java 9 bổ sung API cho giao thức DTLS (Datagram Transport Layer Security). Giao thức này được thiết kế để ngăn chặn nghe trộm, giả mạo và ngụy tạo thông điệp trong giao tiếp giữa máy khách và máy chủ. API cho giao thức này cung cấp những giao diện để dùng cho cả máy khách lẫn máy chủ.
Những gì được loại bỏ?
Java 9 ngưng sử dụng cũng như loại bỏ một số tính năng không còn phù hợp. Dẫn đầu trong số đó là API Applet, bị ngừng sử dụng, kéo theo đó là công cụ appletviewer. Hầu hết các nhà sản xuất trình duyệt hiện tại đều có ý thức loại bỏ sự hỗ trợ cho Java plugin. Thị trường đã chuyển sang sử dụng HTML và Java Web Start (để khởi chạy ứng dụng từ một trình duyệt).
Java 9 cũng ngưng sử dụng bộ dọn rác Concurrent Mark Sweep (CMS). Mục đích là để đẩy nhanh sự phát triển của các công cụ dọn rác trong máy ảo HotSpot. Một trong số đó là bộ dọn rác G1.
Đồng thời, các tổ hợp bộ dọn rác bị ngưng sử dụng ở Java 8 cũng được loại bỏ ở Java 9. Đa số là các tổ hợp hiếm khi sử dụng cũng như làm tăng độ phức tạp của việc dọn rác.
Java 9 cũng lược bớt những cảnh báo trên những lệnh import những thư viện bị ngưng sử dụng, để giúp các dự án lớn bớt đi các dòng cảnh báo khi chạy linter.
Ngoài ra, khả năng chọn JRE tại thời điểm thực thi cũng được loại bỏ. Tính năng này hiếm khi được sử dụng trong khi đó lại làm phức tạp việc khởi chạy chương trình, hơn nữa, nó cũng chưa bao giờ được cung cấp tài liệu đầy đủ kể từ khi xuất hiện lần đầu tiên trong JDK 5.
Oracle cũng đã loại bỏ hprof và jhat (những công cụ theo dõi và phân tích Heap) khỏi bộ công cụ JVM Tool Interface. Chúng đã lỗi thời cũng như đã được thay thế bởi những công cụ cao cấp hơn.
Java 9 là phiên bản cuối cùng trong chuỗi phát hành của nó
Kể từ sau Java 9, một chuỗi phát hành mới của Java sẽ được bắt đầu. Java sẽ được phát hành phiên bản mới sau mỗi sáu tháng, vào tháng 3 và tháng 9. Các đánh số phiên bản sẽ tương tự như cách mà Canonical sử dụng với Ubuntu – là sự kết hợp giữa 2 số cuối của năm phát hành và tháng phát hành phiên bản. Ví dụ, phiên bản đầu tiên của chuỗi phát hành này sẽ là Java 18.3, và phiên bản tiếp theo sẽ là Java 18.6.
Nhịp phát hành này cũng nói lên rằng Java 9 không được thiết kế để hỗ trợ dài hạn. Phiên bản LTS tiếp theo đã được ấn định sẽ là Java 18.9. Các nhà phát triển có thể bỏ qua Java 9 và các mô hình “chưa trưởng thành” của nó và chờ tới phiên bản mới.
Cách trả lời ưu điểm và nhược điểm là phần quan trọng đối trong mọi cuộc phỏng vấn. Nhà tuyển dụng sẽ đặt ra các thách thức tuyển dụng khó nhằn. Và việc yêu câu bạn phải chai sẻ các ưu nhược điểm khi phỏng vấn là điều tất nhiên phải có. Liệu bạn đã có những cách trả lời ưu nhược điểm phù hợp, ứng biến linh hoạt hay chưa?
Khía cạnh về giới thiệu bản thân khi phỏng vấn rất quan trọng. Nó chi phối nhiều yếu tố và rất có thể là ảnh hưởng không lớn đến kết quả phỏng vấn cuối cùng của bạn. Và bạn biết không, trong quá trình phỏng vấn thì cách trả lời ưu nhược điểm lại cực kỳ quan trọng. Những đánh giá chung nhất sẽ được nhà tuyển dụng xem xét về khả năng đồng hành của bạn tại doanh nghiệp/tổ chức đó. Cùng TopDev tìm hiểu bài viết sau đây để có nắm bắt được cách trả lời ưu nhược điểm hiệu quả nhất khi phỏng vấn nhé!
Ưu điểm là gì?
Thuật ngữ ưu điểm hay điểm mạnh khá gần gũi nhưng trước tiên, cùng xem nó có ý nghĩa thế nào. Ưu điểm (Advantage) hay điểm mạnh (Strengths) là những đặc tính tốt nổi trội, những thế mạnh của bạn về tố chất, các kỹ năng, kinh nghiệm hoặc trình độ chuyên môn nổi trội của bạn tương ứng trong giới hạn khả năng được vận dụng vào cuộc sống, quá trình thực hiện công việc của bạn.
Mỗi người chúng ta đều có những điểm mạnh khác nhau, khó trộn lẫn. Và tùy vào tình huống thực tế, những ưu điểm đó sẽ được phát huy, cân bằng một cách tốt nhất. Những ưu điểm cơ bản mà bạn có thể biết bao gồm:
– Năng lực chuyên môn giỏi
– Tính trung thực cao
– Có trách nhiệm – ý thức cao trong công việc; nhiệt huyết và niềm đam mê công việc
– Trình độ ngoại ngữ tốt (Đạt tiêu chuẩn giao tiếp quốc tế – Tiếng Anh, Tiếng Nhật, Tiếng Trung,…
– Khả năng học hỏi, ứng biến linh hoạt với môi trường, nhạy bén với cái mới
– Sức sáng tạo
– Tinh thần kỷ luật cao, có đạo đức nghề nghiệp
– Sự kiên nhẫn
– Hòa đồng – thân thiện với mọi người xung quanh
– Mức độ quyết tâm hoàn thành công việc
– Kỹ năng mềm
– Làm việc có nguyên tắc, đúng giờ, chuyên nghiệp
– Sự năng động
– Kỹ năng lên kế hoạch và giải quyết vấn đề tốt
– Thành thạo kỹ năng tin học
– Sở hữu những năng khiếu về nghệ thuật (ca hát, làm MC. diễn xuất,…)
Vậy thế nào là điểm yếu? Cùng TopDev tiếp tục theo dõi trong bài viết
Nhược điểm là gì?
Nhược điểm, khuyết điểm hay điểm yếu (Weaknesses) là những điểm hạn chế, những điểm mà bản thân bạn, còn thiếu sót hay cảm thấy không tự tin về chúng. Cũng có thể hiểu một phần nó không phải trường chính mà bạn ứng dụng vào công việc lẫn cuộc sống.
Nhược điểm, khuyết điểm hay điểm yếu là gì?
Điểm yếu thường bao gồm:
– Kỹ năng hay năng lực chuyên môn nghề nghiệp chưa tốt
– Chưa có sự định hướng hay mục tiêu rõ rãng trong công việc
– Trình độ ngoại ngữ chưa đảm bảo tiêu chuẩn cơ bản (Đọc, viết, giao tiếp, nghe)
– Kỹ năng tin học văn phòng chưa tốt
– Kỹ năng giao tiếp chưa hoàn thiện, còn sợ và e dè – không tự tin trước đám đông
– Những thói quen tích cực ảnh hưởng đến các tính trách nhiệm, ý thức tự giác, tình thần làm việc,…
Trình bày ưu nhược điểm trong CV – Đâu là những điều cần lưu ý?
Đề làm nổi bật được nội dung điểm mạnh điểm yếu của bản thân trong CV, bạn cần chú ý những vấn đề sau:
Tập trung trình bày các ưu điểm gắn với công việc, không nên lan man. Đừng kể lể quá nhiều sẽ làm nhà tuyển dụng cảm thấy bạn không đáng tin. Trình bày ưu điểm với những từ ngữ đơn giản, tránh việc “bày vẽ” quá nhiều thứ sẽ khó tạo được những thiện cảm cho nhà tuyển dụng.
Nói như vậy, không cò nghĩa là bạn chị tập trung vào việc trình bày điểm mạnh. Bạn hạy khôn khèo và cân bằng việc đưa các điểm yếu của mình vào CV. Tuy nhiên, hãy gắn nó với những cách thức giúp bạn vượt qua hoặc khắc phục tốt nhất những nhược điểm ấy. Đó là một cách thức thật sự thông minh dành cho bạn.
Một điều quan trọng nữa mà bạn cần lưu tâm chính là phải thật sự trung thực với những gì mình chia sẻ với nhà tuyển dụng. Không nên nói quá nhiều về điểm mạnh. Vì nếu thế, dường như bạn chỉ đang khoe khoang hoặc đang “thùng rỗng kêu to”. Nhà tuyển dụng họ là những người có cái nhìn tổng quan lẫn chi tiết nhất. Vì thế, việc kiểm chứng tính xác thực về những gì bạn trình bày là một điều hoàn toàn dễ dàng dối với họ.
Những câu hỏi thách thức trong buổi phỏng vấn của bạn
Thách thức tuyển dụng luôn là điều mà mọi ứng viên cần phải trải qua. Và để có thể đồng hành cùng các doanh nghiệp/tổ chức, bạn cần vượt qua những thách thức ấy trong chính buổi phỏng vấn của mình. Và cụ thể là việc cách bạn trả lời câu hỏi: “Anh chị hãy nói về điểm mạnh và điểm yếu của mình”.
Nhiều thách thức được đặt ra trong chính quá trình giới thiệu bản thân khi phỏng vấn. Việc của ứng viên là cần bình tĩnh để xử lý các thách thức. Bạn không nên hoang mang để rồi cảm thấy bị bế tắc trong chính những thách thức ấy. Hãy có cách ứng xử thông mình, hiệu quả phỏng vấn hầu như đạt mức tuyệt đối. Tuy nhiên, nhiều câu trả lời dường như chỉ tập trung vào việc đào sâu các vấn đề nhạy cảm liên quan đến công việc. Cụ thể, nhiều ứng viên sẽ đề cập đến mức lương và các chế độ thuộc về mặt quyền lợi của nhân viên. Từ đây, các ý kiến khác nhau được bàn luận. Hãy cẩn trọng để không phải mắc phảicấm kỵ khi đi phỏng vấn nhé!
Trên thực tế, bạn nên nhận ra một mấu chốt quan trọng rằng, có những “điểm yếu” nhưng ẩn đàng sau là một ưu điểm. Việc bạn hiểu rõ sẽ tạo ra cách tiếp cận phù hợp nhất dành cho bạn trong định hướng trả lời của mình. Hãy cố gắng hiểu nó một cách rộng ra, suy nghĩ đơn giản và đừng đi xa quá giới hạn cho phép.
Ví dụ, việc bạn cố gắng chạy dự án, đảm bảo kpi và đạt được hiệu suất tốt nhất. Điều đó, khiến cho sức khỏe của bạn bị ảnh hưởng đôi chút. Vậy điểm yếu của bạn sẽ là quá nhiệt tình trong công việc chăng? Đây thật sự là một cách đáp trả khá khôn ngoan dành cho nhà tuyển dụng của bạn.
Vậy có nên trả lời thành thật những mặt hạn chế về bản thân?
Mặt hạn chế thì tất nhiên ai trong chúng ta cũng đều có cả. Vì không ai hoàn hảo về mọi khía cạnh. Việc bạn thành thật với những khuyết điểm của mình là một điều tốt. Có thể đó lại là một sự tích cực. Tuy vậy. hãy chắc chắn rằng bạn không nói những yếu tố liên quan đến kỹ năng mà bạn phải dùng trong vị trí bạn đang ứng tuyển. Do vậy, hãy thành thật nhưng cũng thật cẩn trọng. Hãy ưu tiên trình bày mọi thứ theo hướng tích cực dù cho nó là những điểm yếu của cá nhân bạn nhé!
Không nên trả lời các kiểu như: Tôi là…
+ hoàn toàn không có bất kỳ điểm yếu nào cả
+ tham công tiếc việc lắm
+ người cầu toàn/ người không có điểm yếu nào cả
+ rất hoàn hảo
Điểm mạnh của bạn là gì?
Bạn hãy tự tin nếu ra các điểm mạnh mà bản thân mình có. Đó có thể là những cảm nhận thực tế của bạn sau quá trình dài trải nghiệm việc rèn luyện.
Tự tin khác với tự cao. Vì vậy, đừng chia sẻ về những điểm mạnh mà bản thân bạn còn hạn chế nhé! Các điểm mạnh đó có thể tập trung về: kiến thức, kinh nghiệm, kỹ năng, năng lực, giao tiếp,…
Đồng thời nêu ra một số dẫn chứng cụ thể về điểm mạnh của bạn thay vì chỉ trình bày bằng những lời nói. Đôi khi các số liệu thực cũng là một trong những minh chứng quan trọng cho thấy tính hiệu quả mà điểm mạnh của bạn đã giúp bạn tạo ra chúng.
Đây là một câu hỏi không thể không có trong buổi phỏng vấn. Trước hết là nhà tuyển dụng muốn biết bạn suy nghĩ và đánh giá về bản thân mình như thế nào? Cách tiếp cận và xử lý tình huống thử thách tuyển dụng ra làm sao? Do vậy, bạn hãy bình tĩnh và trả lời một cách chuyên nghiệp để tạo được ấn tượng tốt nhé.
Bạn muốn mình là ai và như thế nào trong 5 năm tới?
Nhiều ứng viên đã trình bày các kế hoạch không một tí liên quan gì đến công việc như: mua nhà, đi du lịch, kinh doanh,…
Hoặc thậm chí, ứng viên bộc lộ nhiều sự cường điệu trong cách dẫn dắt câu chuyện. Chẳng hạn như việc chia sẻ rằng họ sẽ là một người có đam mêvới công việc nhiều nhất; làm việc chăm chỉ nhất. Tồi tệ hơn là có nhiều ứng viên chỉ cười trừ vì không biết phải trả lời như thế nào. Vậy đâu làlỗi khi đi phỏng vấn,gây ấn tượng lúc phỏng vấn?
Bạn phải thật sự cẩn trọng trong cách trả lời của mình. Nếu không, bạn sẽ thất bại về vấn đề tri nhận các yêu cầu phản hồi thông điệp. Dù bạn cố tình hay vô tình (thiếu sự trải nghiệm), bạn cũng không nên khiến mình thiếu chuyên nghiệp.
Em mong muốn mức lương bao nhiêu? Theo em tự đánh giá, với năng lực hiện tại thì mức lương cụ thể nào phù hợp với em?
Nhiều ứng viên đã đánh giá về mức lương. Họ chê mức lương hoặc đề nghị một mức lương cao hơn. Tất nhiên, câu chuyện về quyền lợi thì bất cứ ứng viên nào cũng đều quan tâm. Nhưng họ cần biết, nếu là một ứng viên thông minh và nhạy bén, ít ai lại “cò kèo” lương với nhà tuyển dụng. Vậy đâu làlỗi khi đi phỏng vấn,gây ấn tượng lúc phỏng vấn?
cách trả lời ưu nhược điểm
Một cách phản hồicấm kỵ khi đi phỏng vấn nữa đó là ứng viên than vãn hoặc đòi hỏi quá nhiều về “giấc mơ doanh nghiệp”. Ví dụ họ muốn có một môi trường làm việc tốt, một người sếp biết quan tâm, các kế hoạch cho sự thăng tiến,… Đây mới thật sự là những gì họ quan tâm.
Đừng lặp lại những thông tin trong CV
Chắc chắn nhà tuyển dụng sẽ không hề mong muốn nghe lại những chia sẻ của bạn suy quanh chiếc CV. Đơn giản vì họ đã nghe xem xét và nắm bắt những thông tin chung quanh bạn rồi. Bạn có thể đề cập đến thời gian bắt đầu sự nghiệp; một số công việc đã trải nghiệm và vai trò gần đây nhất của bạn. Nhưng việc lặp lại các khía cạnh sâu như những gì họ thấy trong CV là một điều hoàn toàn không nên.
Cách trả lời ưu nhược điểm của bản thân bằng tiếng anh
Phỏng vấn tiếng anh hiện nay không còn là một cách thức quá xa lạ. Tuy nhiên, bạn sẽ giải quyết thế nào khi phải trả lời câu hỏi: “Điểm mạnh và điểm yếu của em là gì” bằng tiếng anh. Đừng lo lắng vì và hãy thật bình tĩnh nào. Sẽ có hai nhiệm vụ quan trọng mà bạn cần nắm trong trường hợp này. Thứ nhất chính là tư duy thật nhanh về các điểm yếu của mình trước. Sau đó suy nghĩ cách trả lời thật ngắn gọn chúng bằng tiếng anh.
Bản thân bạn có thể trả lời câu phỏng vấn với ý khái quát chung, chưa cần quá chi tiết vì đó cũng không phải điều mà nhà tuyển dụng muốn khai thác.
Hãy nhớ, sự bình tĩnh trong việc đưa ra sự trình bày trước các câu hỏi tiếng anh là điều quan trọng nhất. Bạn chỉ cần kiểm soát tốt cảm xúc, trình bày rõ ràng, rạch mạch, bạn sẽ thành công. Đừng để bản thân hoảng sợ và mất đi cơ hội. Cố gắng lên nào! Họ không quá chú trọng đến việc đúng ngữ pháp, từ ngữ chuyên môn của bạn. Cái họ quan tâm vẫn là khả năng thích ứng và giải quyết vấn đề thách thức của bạn từ câu hỏi tiếng anh. Vì vậy, hãy cứ trả lời bằng khả năng của chính bạn.
Lời kết
Cách trả lời ưu nhược điểm sẽ còn phụ thuộc rất nhiều vào khả năng của bạn. Hi vọng với những chia sẻ, TopDev đã giúp bạn đọc có thêm nhiều thông tin bổ ích về cách trả lời ưu nhược điểm khi phỏng vấn. Đồng thời, bạn cần quan tâm hơn đến việc rèn luyện các kỹ năng; tính chân thật trong lời chia sẻ; cũng như trình bày thông tin về cá nhân trong CV của mình. Mong rằng, các bạn sẽ chinh phục được những thách thức tuyển dụng; và có một hành trình nghề nghiệp đầy thú vị.
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 BQT Kinh nghiệm lập trình
Việc chọn ngành học cũng như chọn việc làm, liên quan tới những kỳ vọng tài chính và sự phát triển năng lực lâu dài, do vậy, sự lựa chọn này cần được cân nhắc nghiêm túc.
– Không biết mình thích gì, có năng khiếu về gì, không hiểu bản thân mình.
– Chọn trường/ ngành theo mong muốn áp đặt của bố mẹ, theo truyền thống gia đình, do có ô dù sẵn, không cần lo nơi chốn sau này
– Chọn theo đám đông, theo trend, theo bạn bè, theo người yêu…
– Chọn nơi an toàn, dễ học, nhiều công việc liên quan
– Chọn nghề “HOT” mà không xem xét năng lực của mình
– Chọn theo may rủi, tin nghe bói toán, theo phong trào
– Không có sự tham khảo nghiên cứu thị trường lao động
– Không tinh toán tới điều kiện, nguồn lực của bản thân, gia đình
– Không có tinh thần, trách nhiệm với quyết định của mình
…
LÀM THẾ NÀO ĐỂ CHỌN ĐÚNG?
– Xác định sở thích, đam mê, năng khiếu, mục tiêu của mình
– Xác định năng lực bản thân và các nguồn lực
– Xác định lộ trình cho mình (đi học hay đi làm trước rồi đi học sau, học ở mức độ nào, trong bao lâu…)
– Xác định con đường, cách thực hiện: đi học, đi làm, làm chủ, làm thuê…
– Nghiên cứu các trường, công việc mình lựa chọn: lĩnh vực, nơi chốn, chi phí, lợi ích, chi phí cơ hội…
– Nghe lời khuyên từ người đúng đắn, người có chuyên môn, có kinh nghiệm, cập nhật thông tin thị trường, hiểu về năng lực và nguồn lực của bạn.
…
Bonus:
Từ kinh nghiệm của tôi thì tôi thấy lớp 12, đa số đều chẳng biết thi trường quái gì đâu, tôi thì tôi ở miền núi, hồi đó no phone, no internet. Nhưng bây giờ, các bạn học sinh ở thành phố điện thoại Ip8 4G cả ngày thì vẫn bị rơi vào tình trạng mơ hồ như bình thường. Các bạn sinh viên sắp ra trường cũng không ít bạn như vậy. Người đi làm 5-7 năm vẫn phải hỏi “Chuyển việc gì, có nên đổi nghề không”. Điều này là quá phổ biến.
Các bạn lớn thì tự chịu trách nhiệm, còn các bạn học sinh, sinh viên thì các bạn có quyền hỏi, tham khảo người có kinh nghiệm. Các bạn cần thiết phải làm như vậy.
Và các phụ huynh, giáo viên cũng phải thể hiện được đúng vai trò của mình trong trường hợp này. Hãy tương tác và đồng hành cùng các bạn nhỏ trong giai đoạn chuyển đổi của các bạn ấy.
Ngày nay thì các trang web là một phần không thể thiếu của Internet, đến nỗi nhiều người còn lầm tưởng Website chính là Internet. Cũng dễ hiểu thôi bởi vì website hầu như là công cụ để giao tiếp với người dùng Internet hiệu quả nhất.
Trong bài viết hôm nay, mình sẽ hướng dẫn các bạn cách deploy static website lên Firebase Hosting. Cùng bắt đầu thôi!
Youtube Video
Tạo project Firebase và thiết lập Firebase CLI
Đầu tiên thì các bạn cần truy cập vào console.firebase.google.com, tạo một project mới, bạn có thể xem lại bài viết này của mình để biết cách tạo project firebase. Tiếp theo, chúng ta cần tạo project Firebase trên máy mình.
Để tạo được project firebase trên máy, cần sử dụng Firebase CLI, các bạn mở command line, gõ lệnh “npm install -g firebase-tools”, lưu ý là máy bạn cần phải có nodejs trước nha. Nếu bị fail, các bạn mở lại command line với quyền admin và chạy lên câu lệnh trên.
Sau khi cài đặt xong, các bạn kiểm tra bằng cách chạy lệnh “firebase –version”, nếu trả ra kết quả là phiên bản Firebase CLI thì bạn đã cài đặt thành công. Lưu ý là lúc các bạn đọc blog này có thể Firebase đã có phiên bản mới nên các bạn không cần bận tâm nếu version khác mình nha.
Sau khi đã cài đặt Firebase CLI rồi, chúng ta cần phải đăng nhập vào tài khoản Google đã tạo project trước đó. Các bạn chạy tiếp lệnh “firebase login”, nó sẽ hỏi bạn có muốn Firebase thu thập thông tin sử dụng, lỗi hay không, bạn có thể chọn có để cho phép (y) hoặc không (n), nhấn enter để tiếp tục.
Sau đó, một cửa sổ trình duyệt sẽ mở ra, bạn hãy đăng nhập tài khoản mà bạn đã tạo project firebase vào hoặc chọn tài khoản đó nếu đã đăng nhập.
Tiếp tục, bạn cần phải cấp quyền cho Firebase CLI truy cập Google Cloud, Firebase Data của bạn, bấm Allow để chấp nhận cho phép truy cập.
Khi nhìn thấy màn hình Successful nghĩa là bạn đã đăng nhập Firebase CLI thành công, bạn có thể tắt cửa sổ trình duyệt đi.
Tạo project Firebase Hosting
Giờ thì chúng ta đã xong các bước thiết lập Firebase CLI, việc tiếp theo cần làm là tạo một project Firebase Hosting trên máy, sau đó liên kết nói với project Firebase đã tạo lúc đầu.
Đầu tiên bạn cần tạo một thư mục chứa project của bạn, sau đó mở nó với command line. Tiếp theo, bạn chạy lệnh “firebase init hosting”, nó sẽ hỏi bạn xác nhận tạo project firebase, bạn nhấn “y” và enter để tiếp tục.
Vì mình đã tạo project Firebase lúc đầu rồi, giờ bạn sẽ chọn “Use an existing project”, dùng các phím lên, xuống để di chuyển và enter để chọn mục đó. Nó sẽ liệt kê các project mà bạn đang có, bạn chọn cái mà bạn tạo lúc đầu và enter để tiếp tục.
Tiếp đến nó sẽ hỏi bạn tên thư mục mặc định cho public, bạn cứ để nó mặc định là public (không cần gõ gì hết và nhấn enter), tiếp theo nó hỏi bạn có muốn chuyển hướng toàn bộ URL vào index.html hay không, bạn chọn No (gõ “n” và enter), tiếp đến là setup automatic build với Github, mình sẽ chọn no luôn vì ở đây mình chỉ demo cho các bạn xem thôi. Như vậy là đã xong phần setup rồi.
Hãy cùng nhìn qua một chút cấu trúc project nhé. Ở đây bạn cần chú ý file firebase.json và thư mục public thôi. Thư mục public là nơi chứa toàn bộ source của website, hiện tại nó có sẵn 1 file index.html và 1 file 404.html. File firebase.json là chứa các settings cho project hiện tại.
Bây giờ bạn có thể chạy thử hosting bằng cách chạy lệnh “firebase serve –only hosting”, một hosting được mở ở port 5000, bạn truy cập http://localhost:5000 để xem kết quả.
Và đây cũng chính là nội dung của file index.html. Bây giờ mình sẽ thử thêm 1 file about.html, sau đó truy cập localhost:5000/about.html. Kết quả sẽ được như hình bên dưới.
Bạn có thể vào firebase.json, bên dưới mục hosting, thêm vào “cleanUrls”: true để không cần phải ghi rõ đuôi mở rộng của file. Sau khi sửa vì bạn vào command line lúc nảy, nhấn ctrl + C để dừng, sau đó chạy lại “firebase serve –only hosting” để mở lại hosting. Bây giờ khi truy cập localhost;5000/about, chúng ta vẫn có thể thấy được nội dung như ảnh trên.
Giờ việc còn lại chỉ là deploy lên Firebase Hosting. Đơn giản, bạn chỉ cần sử dụng lệnh firebase deploy, sau đó mọi thứ hãy để Firebase lo. Sau khi deploy thì bạn sẽ nhận được url đến mà website, thường nó sẽ có dạng <projectid>.web.app và <projectid>.firebaseapp.com. Như của mình là khiemledemoapp.web.app và khiemledempapp.firebaseapp.com.
Lưu ý là có thể bạn sẽ phải đổi plan sang Pay as you go để có thể deploy được. Tuy nhiên đừng lo lắng, nó sẽ chỉ trừ tiền mỗi khi website vượt mức free mà thôi. Một lưu ý khác là Google chỉ chấp nhận thẻ credit thôi.
Ai lại muốn dùng static website
Không như bạn nghĩ đâu, ngày nay, hầu hết các website đều dùng client side rendering, điều này nghĩa là các site đó đều có nội dung tĩnh cả, việc lấy dữ liệu về và render ra sẽ là nhiệm vụ của javascript (hoặc các library, tùy bạn).
Do đó, các bạn hoàn toàn có thể build 1 cái API, sau đó dùng Firebase Hosting để lưu trữ website, trong web thì dùng ajax, XMLHTTPRequest để fetch data và render ra. Đây chính là cách mà mình dùng với project Single File của mình mới deploy.
Có thể bạn nghĩ là có host để làm API thì sao không dùng host đó để lưu website luôn. Well, cái hay của Firebase Hosting là nó thuộc hệ sinh thái của Firebase và Google Cloud, bạn có thể dùng Cloud Functions để trigger http request và response data về, dùng firestore để lưu data… và bạn không cần biết setup server làm gì cả.
Firebase Hosting sẽ hỗ trợ bạn có SSL miễn phí, add custom domain miễn phí, có global CDN, chỉ trả phí mỗi khi web của bạn được thật sự sử dụng.
Lời kết
Vậy là qua bài viết này, mình đã hướng dẫn mọi người cách thiết lập project Firebase Hosting, deploy nó. Nếu bạn thấy static website quá chán, đừng lo, sắp tới mình sẽ có bài viết hướng dẫn các bạn dùng Cloud Functions để build dynamic website cùng với Firebase Hosting.
Nếu bạn thấy bài viết này hay đừng quên chia sẻ nó cho mọi người, đừng quên để lại bình luận nếu bạn có bất kỳ thắc mắt nào. Cảm ơn mọi người đã đọc bài viết!
Lựa chọn ngôn ngữ để phát AI: Python, C++, R, Lisp, Prolog, Java, Julia, Haskell
Lựa chọn ngôn ngữ để phát triển Robotics: Python, C/C++, Java, C#/.NET, MATLAB, LISP, BASIC/Pascal, Assembly Language
Lựa chọn ngôn ngữ để phát triển Machine Learning: Python, C++, Javascript, Java, C#, Julia, Shell, R, TypeScript, Scala
Lựa chọn ngôn ngữ để phát triển game: C++, C#, Java, Python, Objective-C
Lựa chọn ngôn ngữ để phát triển Web: HTML, CSS, Javascript, PHP, ASP.NET, Python, Java, Ruby, SQL, XML
Lựa chọn ngôn ngữ để phát triển phần mềm, ứng dụng: C, C++, C#, Java, Ruby, VB.SCRIPT, Python, SQL
Tùy theo mong muốn sự nghiệp mà mình chúc các bạn lựa chọn được ngôn ngữ lập trình phù hợp cho mình. Chứ nhiều ngôn ngữ lắm. Không thể ôm hết được đâu. Hãy chọn đúng và làm thật tốt một ngôn ngữ là đủ để cho bạn thành công rồi.
Bài viết được sự cho phép của tác giả Võ Xuân Phong
Trong bài viết này, mình sẽ trình bày cho anh em về Graceful Shutdown với ngôn ngữ lập trình Golang. Chúng ta sẽ đi tìm hiểu về Graceful Shutdown là gì? Tại sao chúng ta lại cần áp dụng nó và nó có mang lại lợi ích gì hay không?
Hãy tưởng tượng rằng, chúng ta đang có một web service đang tiếp nhận yêu cầu (request) của các client để truy xuất dữ liệu từ database, vì dữ liệu truy xuất lớn nên phản hồi (response) phải mất một thời gian mới truy xuất xong. Trong khi đó anh em lại muốn tắt web service đó đi để bảo trì hệ thống hoặc triển khai (deploy) mới, bằng các thao tác kill ứng dụng web service đang chạy, có thể là câu lệnh stop của docker, câu lệnh kill process bằng PID hay Ctrl + C chúng ta vẫn thường hay dùng .v.v. Ngay lập tức những yêu cầu mà service xử lý chưa xong bị buộc ngưng giữa chừng.
Ngoài ra những kết nối khác như kết nối với database không được kiểm soát và đóng lại đúng cách gây hao tốn tài nguyên của server. Những điều nói trên làm chúng ta phải dừng lại và suy nghĩ về nó phải không?
Điều chúng ta muốn là khi service bị buộc dừng thì nó sẽ:
Không đón nhận những yêu cầu (request) mới.
Xử lý và và phản hồi những yêu cầu (request) cũ.
Cuối cùng là đóng các kết nối, sau đó mới dừng service hoàn toàn.
Áp dụng Graceful Shutdown trong Golang.
Để thiết lập Graceful Shutdown cho ứng dụng web service của chúng ta, anh em cần thực hiện các bước sau:
Cho ứng dụng của chúng ta chạy background trong 1 Goroutine.
Thiết lập một channel để lắng nghe tín hiệu dừng từ hệ điều hành, ở đây chúng ta lưu ý 2 tín hiệu (signal) là SIGINT (The interrupt signal là loại tín hiệu khi user nhấn Ctrl + C để kết thúc chương trình) và SIGTERM (The termination signal là loại tín hiệu khi một ứng dụng muốn dừng tiến trình của một ứng dụng khác, như từ câu lệnh stop của Docker hoặc câu lệnh delete pods của Kubernetes)
Thiết lập một khoản thời gian (Timeout), để dừng hoàn toàn ứng dụng và đóng tất cả kết nối.
Folder structure.
Chúng ta sẽ có folder structure như sau, tùy vào cách xây dựng structure của project anh em như thế nào anh em có thể refactor theo ý mình muốn.
response.go
File này chứa các hàm tiện ích hỗ trợ cho việc phản hồi cho người dùng kết quả dạng JSON.
Khi yêu cầu được gửi đến api /test-graceful-Shutdown thì hàm testGracefulShutDown bên trong xử lý nhiều công việc, sau 10 giây mới trả kết quả về cho client.
package main
import("context""log""os""os/signal""syscall""time""graceful-shutdown/internal/app")funcmain(){
timeWait :=15* time.Second
application := app.New()
signChan :=make(chan os.Signal,1)//1. Cho ứng dụng của chúng ta chạy background trong 1 Goroutinegofunc(){if err := application.Start(); err !=nil{
log.Printf("%v", err.Error())}}()//2. Thiết lập một channel để lắng nghe tín hiệu dừng từ hệ điều hành, // ở đây chúng ta lưu ý 2 tín hiệu (signal) là SIGINT và SIGTERM
signal.Notify(signChan, os.Interrupt, syscall.SIGTERM)<-signChan
log.Println("Shutting down")//3. Thiết lập một khoản thời gian (Timeout) để dừng hoàn toàn ứng dụng và đóng tất cả kết nối.
ctx, cancel := context.WithTimeout(context.Background(), timeWait)deferfunc(){
log.Println("Close another connection")cancel()}()
log.Println("Stop http server")if err := application.Stop(ctx); err == context.DeadlineExceeded {
log.Print("Halted active connections")}close(signChan)
log.Printf("Completed")}
Kết quả.
Chúng ta thực hiện việc run service và gửi một request http với method GET tới api test-graceful-Shutdown, sau đó ấn Ctrl + C để dừng service, và kết quả thu được là chương trình sẽ xử lý xong yêu cầu của người dùng sau đó mới đóng các kết nối và dừng hẳn.
Chạy service.
Gửi request http trước khi dừng chương trình, api xử lý mất tầm 10 giây nhưng sau khi thực hiện dừng chương trình thì client vẫn nhận được kết quả phản hồi mong muốn.
Mình đã trình bày qua cách thiết lập Graceful Shutdown cho service của chúng ta, chúc anh em happy coding nhé, mong nhận được phản hồi tích cực từ anh em.
3 sai lầm khi làm việc các lập trình viên nên tránh
Dịch từ bài viết của tác giả: Szymon Adamiak
Giới thiệu
Bạn phải trải qua một hành trình gian nan để có được công việc mình muốn, bạn phải rèn luyện rất nhiều để trở thành một dev nhiều kinh nghiệm. Nhưng điều khó khăn hơn nữa là làm sao để duy trì được đam mê của mình với nghề? Để bản thân cảm thấy vui vẻ mỗi khi design được UI UX ấn tượng, phù hợp cho một dự án, được nhiều user đánh giá cao. Muốn thế lập trình viên cần cố gắng trau dồi nhiều kiến thức và kỹ năng hơn cũng như nên tránh những thói quen xấu ảnh hưởng đến quá trình làm việc của mình, để giữ được nhiệt huyết và hiệu quả làm việc.
3 thói quen xấu nên tránh, kể cả với kỹ thuật UI UX
Làm việc quá chăm chỉ
Mỗi ngày bạn có 8 giờ làm việc tại công ty, quá trình đi lại mất thêm vài giờ, nếu đang chạy deadline cho các dự án sắp tới, thời gian làm việc trong ngày của bạn còn nhiều hơn cả như thế. Tuy nhiên nếu bạn dành quá nhiều thì giờ một ngày cho công việc trong quãng thời gian dài lại không thật sự tốt, nó ảnh hưởng đến nhiều vấn đề trong cuộc sống của bạn.
Làm việc quá tải khiến công việc không đạt được hiệu quả tốt như mong muốn
Bạn có thể khó ngủ hơn do quá nhiều áp lực, tâm trạng khó chịu và mất tập trung do công việc nhiều. Thậm chí sức khỏe sẽ suy giảm nếu bạn tiếp tục làm việc không khoa học. Kết quả cuối cùng là công việc bạn hoàn thành cũng không đạt được hiệu quả như mong muốn. Nhất là với những dev làm các công việc liên quan đến UI UX, bạn phải luôn giữ cho mình sự tỉnh táo, sáng suốt trong cả quá trình làm việc cho đến lúc trình bày dự án, thuyết phục khách hàng của mình.
Do đó, bạn cần đặt ra giới hạn thời gian làm việc mỗi tuần của mình, sao cho bạn cảm thấy hợp lí nhất. Hãy học cách nói không với công việc mới nếu bạn đang làm việc quá sức. Có thể vì bạn quá hào hức với mọi việc mà sếp giao khiến sếp hiểu nhầm hoặc không biết rằng lịch trình của bạn đã dày đặc rồi. Trong trường hợp này hãy biết cách từ chối một cách khéo léo và lịch sự. Hoặc có thể sếp vẫn cố tình muốn giao cho bạn nhiều task hơn dù biết bạn đã quá bận rộn và bạn không thể giải quyết tình huống đó thì nghỉ việc cũng là một lựa chọn! Đừng khiến bản thân trở nên mệt mỏi quá mức cần thiết.
Ngoài ra, hãy cố gắng dành thêm thời gian cho các hoạt động ngoài trời, rèn luyện thể chất hay đọc sách để nâng cao kinh nghiệm cho bản thân trong công việc lập trình như đọc thêm về ngôn ngữ lập trình khác, tìm hiểu thêm về lợi ích của UI UX,… cũng là giải pháp không tồi đâu.
Bạn ngồi vào bàn làm việc, chuẩn bị viết những dòng code đã suy nghĩ được thì chợt nhớ ra sáng nay bạn chưa uống cà phê. Bạn ra pantry và pha cà phê thưởng thức cho tỉnh táo làm việc. Sau đó, bạn chuẩn bị sửa lỗi mà mình vừa phát hiện trong code thì nhận được tin nhắn của sếp gọi vào phòng họp. 30 phút trôi qua, bàn quay trở lại bàn làm việc và cảm thấy hơi khó chịu, phải lướt mạng xã hội một chút để thư giãn. Một lúc sau, bạn bắt đầu làm việc thì nhận được tin nhắn của đồng nghiệp yêu cầu trợ giúp, vậy là bạn lại quay sang hướng dẫn họ. Cứ như thế, mỗi ngày sẽ có hàng tá việc khác nhau kéo bạn ra khỏi sự tập trung với công việc chính của mình. Để duy trì hiệu quả công việc và tránh lãng phí thời gian, bạn nên học cách bảo vệ quỹ thời gian và tránh bị xao nhãng bởi những tác động bên ngoài.
a. Hãy khiến người khác tôn trọng thời giờ của bạn
Hãy cho đồng nghiệp của bạn biết rằng khi nào thì bạn có thể giúp đỡ họ và khi nào thì bạn cần thời gian để làm việc của mình. Nói với họ rằng bạn sẽ không nhận cuộc gọi, kiểm tra email hay sử dụng tính năng trò chuyện trong thời gian tập trung làm việc. Đừng quên đeo tai nghe – ngay cả khi bạn không nghe bất cứ thứ gì – chỉ để nhắc nhở người khác rằng bạn đang tập trung cho công việc của mình.
Bạn có thể sẽ cảm nhận được sự khó chịu của đối phương trong lúc đầu nhưng qua thời gian, họ sẽ quen với điều đó và hiệu suất công việc của bạn cũng sẽ tăng lên đáng kể nếu áp dụng hiệu quả cách làm này. Tuy nhiên bạn cũng nên dành một ít thời gian để giúp đỡ hoặc teamwork cùng đồng nghiệp để đạt KPI tốt hơn. Chẳng hạn như với các UI UX designer, họ cần thời gian tập trung nhiều hơn để có thể tìm được giải pháp tối ưu cho giao diện cũng như phát hiện ra các lỗi sai, dù là chi tiết nhỏ nhất. Hoặc với các dev đang là Junior/Senior Tester chẳng hạn, bạn thật sự cần tập trung tối đa để đảm bảo có thể xử lý tất cả các vấn đề có thể xuất hiện.
Bạn phải là người làm chủ những hành động của mình. Đừng để mạng xã hội, mail rác hay bất cứ thứ gì khác khiến bạn xao nhãng. Một trong những cách hay ho mà tôi hay áp dụng để không phí thời gian làm việc là log out khỏi các tài khoản mạng xã hội, để điện thoại ở chế độ im lặng, làm việc trong không gian yên tĩnh hoặc nghe nhạc. Không nhất thiết phải là bài hát yêu thích mà đó có thể là bất kì thể loại nhạc nào có thể giúp bạn tập trung.
Hiện tại có một kỹ thuật làm việc được nhiều người áp dụng khá bổ ích với dân IT, kể cả trong lĩnh vực UI UX, đó là kỹ thuật Pomodoro. Với quy tắc này, bạn nên chia các khoảng thời gian làm việc của mình từ 25 – 90 phút, sau đó là một thời gian ngắn để nghỉ ngơi, sẽ giúp bạn làm việc hiệu quả hơn rất nhiều. Hoặc bạn có thể sử dụng chế độ Zen của trình soạn thảo khi làm việc. Việc chuyển sang chế độ làm việc toàn màn hình và ẩn các giao diện không cần thiết sẽ giúp bạn tập trung hơn khi coding.
Các dev nên cố gắng hạn chế việc mắc phải những sai lầm này để công việc “dễ thở” hơn
Xây dựng tư duy phát triển cho bản thân, nhất là UI UX designer
Bạn cảm thấy dù bản thân đã cố gắng làm việc rất nhiều nhưng vẫn không thể đạt được thành tựu như những người khác, không thể nâng cao được năng lực của bản thân. Bạn không thể bắt kịp với sự thay đổi liên tục của công nghệ, xung quanh bạn đều là những dev giỏi và dù cố gắng đến đâu vẫn không thể đạt được những gì bạn muốn. Theo Carol Dweck – nhà tâm lý học người Mỹ, bạn đã bị ảnh hưởng bởi tư duy cố định.
Tư duy cố định là suy nghĩ cho rằng những phẩm chất, khả năng của con người là không thể thay đổi, dù có cố gắng hơn nữa thì cũng không đạt được điều tốt hơn. Còn nếu bạn giỏi hơn, chuyên môn cao hơn thì đó lại là do may mắn. Với những công việc đòi hỏi nhiều sáng tạo và tư duy sâu như UI UX, đây được xem là tư duy nguy hiểm, ảnh hưởng đến sự phát triển của bạn trong công việc hàng ngày.
Tư duy cố định có thể sẽ là sai lầm chí mạng với các lập trình viên, vì IT là lĩnh vực đòi hỏi rất cao tình thần học hỏi và thích nghi với cái mới. Nếu bạn luôn nghĩ rằng mình không đủ giỏi, không đủ tốt, bạn chắc chắn sẽ bị tụt lại phía sau. Hãy chuyển tư duy cố định sang tư duy phát triển – với niềm tin rằng bạn có thể thay đổi và phát triển bằng những nỗ lực không ngừng của mình, chỉ có như vậy mới khiến bạn trở nên tốt hơn.
Kết luận
Học hỏi và không ngừng trau dồi sẽ giúp các dev có tay nghề chuyên môn cao hơn, tìm kiếm được những công việc trong những môi trường chuyên nghiệp như tại Gear Inc… Cũng như biết cách tránh những sai lầm không đáng có sẽ giúp bạn đạt được hiệu suất làm việc tốt hơn rất nhiều.
Vậy nhưng nếu thử hỏi một lập trình viên sử dụng ngôn ngữ lập trình bất kỳ hãy viết một đoạn code sắp xếp những cái tên sau theo thứ tự của tiếng Việt:
Vậy sorted hoàn toàn không sai, nó sắp xếp các chữ cái theo thứ tự các xuất hiện trong bảng mã Unicode (codepoint). Chữ “ư” nằm ở vị trí 432, đứng trước chữ “ậ” với vị trí 7853.
sorted đã đúng, nhưng đây không phải cách sắp xếp chúng ta mong muốn.
Vậy điều gì ảnh hưởng đến thứ tự khi sắp xếp của các chữ cái? Rõ ràng nếu theo chuẩn của người Mỹ, người ta sẽ sắp xếp như trên, nhưng trong bảng chữ cái tiếng Việt, thứ tự lại khác. Những thứ liên quan đến ngôn ngữ địa phương như vậy được biểu diễn lên máy tính bằng khái niệm “locale”.
Locale là gì /ləʊˈkɑːl/
English: a place where something happens or is set, or that has particular events associated with it
Vietnamese: mội nơi mà điều gì đó xảy ra hoặc có những sự kiện gắn liền với nó.
Một chương trình hỗ trợ locale là chương trình tôn trọng sự lựa chọn dựa trên nền tảng văn hoá của người dùng, như bảng chữ cái, cách sắp xếp và cách viết số (người Việt Nam thường dùng dấu , trong số thực: 1,5. Người châu Mỹ lại dùng dấu .: 1.5) (Dịch theo tài liệu của Postgresql)
Một locale là một bộ luật ngôn ngữ và văn hoá. (theo manpage của Ubuntu)
Locale không chỉ là khái niệm của riêng ngôn ngữ lập trình nào mà đòi hỏi là hỗ trợ của toàn hệ thống. Các hệ điều hành (OS) đều hỗ trợ đặt các và sử dụng locale khác nhau.
Cách biểu diễn một locale
Một locale thường được biểu diễn ở dạng “ngônngữ_quốcgia”:
en_US (U.S. English)
fr_CA (French Canadian)
vi_VN (Vietnamese Vietnam)
Trên hầu hết các hệt thống UNIX (Ubuntu, OSX …), có thể liệt kê các locale đang hỗ trợ trên máy bằng lệnh locale -a:
$ locale -a | head -n3
C
C.UTF-8
en_AG
$ locale -a | tail -n3
POSIX
vi_VN
vi_VN.utf8
Các locale có thể được cài thêm, ví dụ trên Ubuntu 16.04, locale Việt Nam không được cài sẵn, phải cài thêm package language-pack-vi để có locale vi_VN:
apt-get install -y language-pack-vi
Nếu có nhiều hơn một bộ ký tự cho một locale, có thể chỉ rõ ra nó ở dạng: “ngônngữ_quốcgia.bộkýtự”: Ví dụ:
Khi không có locale nào được set, locale mặc định là C hay POSIX.
Locale categories
Đôi khi, người ta lại muốn dùng bảng chữ cái của Việt Nam, nhưng đơn vị tiền tệ của Mỹ, thời gian theo format của Anh, những nhu cầu lẫn lộn này được đáp ứng bởi locale sẽ chia nhỏ thành “locale subcategories” và mỗi category sẽ điều chỉnh một khía cạnh của luật locale:
LC_COLLATE: thứ tự sắp xếp string /kəˈleɪt/, ảnh hưởng đến các function strcoll, strxfrm
LC_CTYPE: phân nhóm chữ cái (đâu là một chữ cái, chữ cái dùng 1byte hay nhiều bytes? chữ viết hoa tương ứng của mỗi chữ là chữ nào?)
LC_MESSAGES: ngôn ngữ của message
LC_MONETARY: format (định dạng) của tiền
LC_NUMERIC: format của số
LC_TIME: format của ngày tháng
LC_TELEPHONE: format số điện thoại
… còn nhiều
LANG: default cho các LC_*
LC_ALL: tất cả các category nói trên.
Thứ tự xử lý locale
Các locale category thường được set làm biến môi trường.
Nếu LANG không null thì giá trị của LANG được sử dụng làm default cho tất cả các giá trị không được set / null khác.
Nếu LC_ALL được set, không null, thì giá trị của LC_ALL sẽ được sử dụng, thay cho tất cả các giá trị khác.
Nếu biến nào được set không null thì biến đó được sử dụng. Vậy mức ưu tiên là: LC_ALL > LC_* > LANG
Chú ý: bài viết thực hiện trên Ubuntu, trên Windows 10 dùng vi thay vì vi_VN
In[1]:importlocaleIn[3]:locale.getlocale(category=locale.LC_CTYPE)# LC_TYPE là category mặc địnhOut[3]:('en_US','UTF-8')In[4]:locale.getlocale()Out[4]:('en_US','UTF-8')In[5]:locale.setlocale(locale.LC_ALL,'vi_VN')---------------------------------------------------------------------------ErrorTraceback(mostrecentcalllast)<ipython-input-5-7ee8baa2ff04>in<module>()---->1locale.setlocale(locale.LC_ALL,'vi_VN')/Users/hvn/python3/lib/python3.5/locale.pyinsetlocale(category,locale)593# convert to string594locale=normalize(_build_localename(locale))-->595return_setlocale(category,locale)596597defresetlocale(category=LC_ALL):Error:unsupportedlocalesetting# Do máy không có locale vi_VN# set locale cho tất cả category sử dụng giá trị mặc định (thường lấy trong biến môi trường LANG)In[6]:locale.setlocale(locale.LC_ALL,'')Out[6]:'en_US.UTF-8'# Trả về database của các convention hiện tạiIn[7]:locale.localeconv()Out[7]:{'currency_symbol':'$','decimal_point':'.','frac_digits':2,'grouping':[3,3,0],'int_curr_symbol':'USD ','int_frac_digits':2,'mon_decimal_point':'.','mon_grouping':[3,3,0],'mon_thousands_sep':',','n_cs_precedes':1,'n_sep_by_space':0,'n_sign_posn':1,'negative_sign':'-','p_cs_precedes':1,'p_sep_by_space':0,'p_sign_posn':1,'positive_sign':'','thousands_sep':','}# Đổi locale sang C, ở locale này không có đơn vị tiền tệ.In[15]:locale.setlocale(locale.LC_ALL,'C');locale.localeconv()['currency_symbol']Out[15]:''# Khi đổi lại về locale default (thường lấy từ LANG), ở đây là en_US.UTF8, ký hiệu đơn vị tiền tệ là $.In[16]:locale.setlocale(locale.LC_ALL,'');locale.localeconv()['currency_symbol']Out[16]:'$'
Trên một máy có locale vi_VN, có thể thay đổi và xem đơn vị tiền tệ:
Chú ý việc set này chỉ có tác dụng tại phiên làm việc hiện thời. Để thay đổi locale của toàn hệ thống (Ubuntu), phải thay đổi trong /etc/default/locale
Đã nữa năm 2019 trôi qua vậy mà tôi vẫn chưa làm được bất cứ thứ gì cho những mục tiêu đã đề ra. Thời gian qua nhanh thật, thật đáng tiếc cho những cơ hội bỏ lỡ và cực kì thất vọng về bản thân khi đã không thể cố gắng và quyết tâm với những gì đã đặt ra.
Và vô tình tôi đọc được một bài viết từ blog của bạn Huydx được viết cách đây một năm, cảm thấy bài viết hay nên tôi xin chia sẽ lại bài viết như sau. (Bài viết gốc: xem ở đây)
Bạn hay được dạy từ sách vở, hay các blog về phát triển bản thân, rằng việc quyết định mục tiêu là rất quan trọng, rằng mục tiêu là thứ sẽ quyết định rằng bạn có thành công hay không. Bạn học theo và đặt ra rất nhiều mục tiêu trong cuộc sống: bạn muốn trở thành giám đốc công nghệ, bạn muốn được lương vài ngàn mĩ kim, bạn muốn vân vân và vân vân rất nhiều thứ. Một công ty, hay một dự án cũng cần có mục tiêu để có thể tồn tại lâu dài, cũng như để thành công.
Tôi cũng có thói quen đặt mục tiêu cho hàng năm, hàng tuần, hay thậm chí là hàng ngày. Tuy nhiên cho đến gần đây tôi nhận thấy đó không thực sự là cách làm tốt nhất.
Mục tiêu biến bạn trở nên không hạnh phúc khi bạn không đạt được nó. Bạn sẽ cảm thấy “mình chưa đủ tốt” khi đạt được cái đã đặt ra, cũng như ngay cả khi bạn đã đạt được nó rồi, thì hạnh phúc của bạn cũng không kéo dài quá lâu. Gần đây tôi có đọc một bài blog khá thú vị nói về vấn đề này Why are smart people so miserable
Vậy kết luận là chả cần mục tiêu gì cả, sống tới thôi?
Tất nhiên là không phải vậy, thay vì tập trung vào mục tiêu, thì chúng ta hãy tập trung vào quá trình (hay là thói quen) hàng ngày, để hướng đến mục tiêu đó.
Nếu mục tiêu của bạn là trở thành cầu thủ giỏi, hãy tập trung vào việc tập đá bóng hàng ngày 10 giờ.
Nếu mục tiêu của bạn là một lập trình viên giỏi, hãy tập trung vào việc hàng ngày phải code đủ XX giờ, hàng tuần phải đọc sách về một lĩnh vực hẹp mình đang thay đổi…
Thực ra khoảng cách giữa mục tiêu và quá trình (thói quen) là không nhiều, có khác chăng chính là 2 điểm chính: tính liên tục là khả năng đạt được. Khả năng đạt được của một thói quen (hàng ngày lập trình XX giờ) sẽ cao hơn nhiều mục tiêu là trở thành một Jeff Dean thứ hai, hay là mức lương vài trăm ngàn mĩ kim. Việc đó cũng khiến cuộc sống của bạn trở nên hạnh phúc hơn, với những hạnh phúc nhỏ nhoi hàng ngày.
Có một điểm tôi muốn nhấn mạnh là, tôi không nói là mục tiêu không quan trọng. Mục tiêu là một thứ dài hạn hơn, và thiếu nó thì bạn sẽ không biết phải đặt ra quá trình, cũng như những thói quen mà bạn nên có là gì. Chỉ có là đừng coi mục tiêu đó là một thứ giống như thắng thua, rằng không đạt được thì bạn là một kẻ thất bại hay bất tài, hãy coi nó như là định hướng cho những gì bạn sẽ làm hàng ngày, vậy thôi.
Khác với các công ty startup, ở các công ty lớn hơn, thì đa phần vì policy của công ty nên máy tính do công ty cấp đều cài sẵn các phần mềm theo dõi hoặc kiểm soát internet traffic, và đủ thứ hầm bà lằng các kiểu, cho nên best practice mà nhiều người recommend là sử dụng 2 máy tính riêng biệt, một máy chỉ để làm việc và một máy chỉ để làm những việc cá nhân (như duyệt web, xem phim heo, ngân hàng, chơi game, code side project các kiểu).
Thế là mình làm một quả mini PC chạy Windows, vừa đủ xài. Quay trở lại Windows sau bao nhiêu năm “xa xứ”, mình rất ấn tượng vì cái độ chất của nó, mặc dù nó đi kèm với đủ thứ hầm bà lằng mà mình phải tắt bớt, nhưng nhìn chung là đầy đủ đồ chơi, thứ gì cũng có, setup môi trường dev trong WSL, code bằng vim hoặc VS Code đều được,…
Vì sao là Windows mà không phải là Linux? Vì mình lười config =)) Ngày trước tốn bao nhiêu công sức để setup xong bán bà nó cái máy. Nhưng tính ra xài Windows rất tiện vì vẫn có thể xài WSL để có môi trường Linux, lại có thể thoải mái cài game hay các phần mềm khác chỉ có trên Win.
Nhưng xài 2 máy thì việc chuyển đổi qua lại giữa 2 máy khá là phiền phức, bạn nào thử rồi chắc sẽ hiểu. Nên giải pháp là KVM.
KVM, viết tắt của Keyboard, Video and Mouse Switch, là các phần mềm hoặc thiết bị giúp chia sẻ chuột và bàn phím cho 2 hoặc nhiều máy tính khác nhau. Có 2 loại KVM là Hardware KVM và Software KVM.
Hardware KVM tất nhiên sẽ connect trực tiếp các thiết bị vào mỗi máy tính, và việc switch qua lại giữa các máy tính thường sẽ được thực hiện thông qua một hành động vật lý ví dụ như bấm nút, hoặc giật dây, hoặc hiện đại hơn thì có thể là voice command, ưu điểm của hardware KVM là các thiết bị được kết nối trực tiếp với máy tính nên đảm bảo về độ trễ (input delay), không lỗi vặt, không giới hạn về hệ điều hành. Nhưng nhược điểm cũng nằm ở chính việc phải switch bằng một tác động vật lý, không linh hoạt như các giải pháp dùng phần mềm.
Software KVM thì ngược lại, thường được implement bằng cách kết nối 2 hoặc nhiều máy tính với nhau thông qua giao thức TCP hoặc UDP, trong đó 1 máy tính làm server, sẽ kết nối trực tiếp tới các thiết bị input, các máy tính khác sẽ là client, để switch qua lại giữa các máy với nhau thì thường sẽ dùng chuột move đến các cạnh màn hình hoặc bấm phím tắt để di chuyển, nên việc switch diễn ra linh hoạt và thoải mái hơn (tưởng tượng có 3 màn hình cho 3 máy tính, chỉ cần move qua lại giữa các màn hình là chuột và phím sẽ tự động đc switch qua). Cơ chế hoạt động thì đọc tới đây hẳn là ai cũng hiểu, nó bắt tín hiệu input từ máy server và gửi về cho client nào đang được active. Cho nên sẽ gặp vấn đề về độ trễ nếu đường truyền không đảm bảo, mặc dù đa số các case sử dụng đều là trong cùng 1 mạng LAN, độ trễ sẽ ko đáng kể, còn lag thì có, tuy nhiên vấn đề lớn nhất nằm ở chuyện security policy của mấy cái hệ điều hành, nhất là mấy cái OS đỏng đảnh như macOS.
Software KVM mà reliable nhất thì có thể kể đến Flow của Logitech, rất dễ sử dụng và cấu hình, hoạt động ổn định, latency gần như ko nhận thấy được, ít lag, nhưng tiếc là chỉ hoạt động với đồ của Logitech. Chuột thì dễ vì chuột Logitech cũng xịn, nhiều người dùng, còn anh em IT đa phần xài bàn phím 50k mua ngoài chợ trời hoặc mech, nên sẽ ko work với Flow.
Các sản phẩm thay thế thì có hàng trả phí như ShareMouse (49 USD cho bản standard, nhưng nếu anh em xài 2 màn hình thì phải mua bản Pro giá 139 USD), Synergy (giá 29 USD cho bản basic đủ xài), xài cũng ổn.
Open source thì có Barrier, là một bản fork từ Synergy khi nó chuyển sang close source. Đang gặp vấn đề về notarize app trên macOS nhưng có thể giải quyết được. Latency khá thấp, ít lag.
Nói về cách setup, nếu chọn máy macOS làm server và Windows làm client thì phần lớn sẽ gặp lỗi về keyboard (như là gõ trên máy win thì máy mac vẫn nhận được phím,…), cho nên cách tốt nhất là chọn máy win làm server còn máy mac là client.
Nếu có thể, thì bạn nên kết nối hai máy tính với nhau thông qua một cáp ethernet, như vậy độ trễ sẽ rất thấp và hầu như không bị lag (với máy mac thì [không cần xài cáp bấm chéo](, chỉ cần xài cáp ethernet tiêu chuẩn vẫn có thể kết nối được với nhau) vẫn có thể kết nối được với nhau).
Setup hiện tại của mình như sau:
Kết nối:
Máy PC kết nối với máy Macbook do công ty cấp, thông qua một sợi cáp ethernet (mình dùng dock station nên có cổng ethernet, với những bạn không có cả cổng ethernet lẫn dock thì có thể mua một cái Thunderbolt hoặc USB Ethernet Adapter).
Lúc này sẽ có 2 IP khác nhau cho máy PC, một IP là của đường kết nối trực tiếp từ PC đến Mac, và một IP khác là IP trong mạng nội bộ của hệ thống Wifi trong nhà.
Thiết bị:
Chuột và bàn phím cắm trực tiếp vào PC
Software KVM:
Mình dùng Barrier
Máy PC làm server
Máy Macbook làm client, trên Barrier client, cấu hình để nó connect tới máy PC thông qua IP address của Ethernet connection chứ không phải IP trong mạng Wifi.
Vấn đề tương thích:
Khi sử dụng setup này, trên máy Mac, phím Cmd sẽ được map thành phím Windows của bản phím, các phần mềm KVM khác có khả năng cấu hình lại, tuy nhiên Barrier thì không, nên giải pháp là cài một phần mềm map lại bàn phím trên Windows, ví dụ mình xài SharpKeys để map luôn phím Windows thành L-Alt, và L-Alt thành Windows.
Nói về trải nghiệm, thì cảm giác di chuyển qua lại giữa hai máy tính hoàn toàn không có, cứ như là vẫn đang ngồi trên 1 máy tính vậy, rất tự nhiên, ngoại trừ việc phải xài phím Cmd trên mac và Ctrl trên Windows.
Khi nào có thời gian mình sẽ thử setup tương tự trên Linux, nhưng hiện tại thì mình cảm thấy khá hài lòng với WSL trên Windows nên ngày đó chắc còn xa lắm, anh em nào có nhu cầu, thử setup rồi chia sẻ nào 😀