Giới thiệu

Đây là đề thi mở, dành cho giảng viên đăng ký dạy các môn lập trình căn bản Java, Golang, Node.js, Python tại Techmaster.

Ứng viên sẽ code giải quyết vấn đề yêu cầu, sau đó xây dựng thành các bài lab hướng dẫn thực hành từng bước cho sinh viên, cuối cùng làm PowerPoint slide để làm đạo cụ trình chiếu để sinh viên hiểu nhanh hơn, nhớ lâu hơn.

Sau khi hoàn thành hãy lưu code của từng bài hand on lab trong một git hub repo theo cấu trúc, rồi gửi link github repo vào Zalo 0902209011 (Cường Techmaster)

lab01 <-- nên có những file ReadMe.md để hướng dẫn cách chạy ứng dụng
lab02
lab03
lab04
...
lab08
slide.pptx <-- slide trình bày cho sinh viên

Đề bài

Trong bất kỳ hệ điều hành nào, ngôn ngữ lập trình nào, việc đọc file tệp và thư mục (gọi tắt là File I/IO) là kỹ năng hết sức căn bản. Nếu bạn gõ câu hỏi nào Chat-GPT kiểu như thế này
“Hãy tóm tắt và cho ví dụ cách để đọc ghi file trong X”. Thay X bằng Java, JavaScript, Python, Golang, C, C++. Chat-GPT sẽ trả về rất chi tiết giải thích, ví dụ mẫu, tôi tin chạy được đến 99.99%.

Như vậy bài giảng file I/O của chúng ta hôm nay không thể hơn được Chat-GPT rồi. :(

Nhưng chúng ta vẫn phải làm giáo trình gồm các hand on lab + slide để sau khi sinh viên thực hành nghiêm túc họ sẽ xử lý được rất nhiều vấn đề trong file I/O. Vậy hãy thử lập trình các bài hand on lab đánh số 1, 2, 3, 4, 5, 6…từ siêu dễ đến thú vị như sau nhé:

  1. Đọc nội dung từ một file *.txt chứa nhiều dòng, rồi in ra console.

  2. Cải tiến: đọc nội dung từ một file *.txt chứa nhiều dòng. Nếu trong mỗi dòng có những từ nhạy cảm như sex, fuck, drug, kill thì hay thay thế nguyên âm bằng ký tự *, ví dụ s*x, f*ck, dr*g, k*ll. Sau đó in ra console.

  3. Ghi một chuỗi có sẵn vào một file *.txt

  4. Đặt một số câu hỏi: Bạn tên là gì? Bạn sinh ngày nào? Bạn làm nghề gì ? Nhận câu trả lời sau đó ghi cả câu hỏi và trả lời vào file person.txt tách thành từng dòng cho dễ nhìn. Kiểu như sau:

    Tên bạn là gì?
    Lê Huy Hoàng
    
    Bạn sinh ngày nào?
    24/05/1998
    
    Bạn làm nghề gì?
    Youtuber
    
  5. Hãy tạo ứng dụng command line, nhập vào tên file và một số nguyên dương X > 10 , hãy tạo ra một file gồm những dòng dài 256 ký tự ngẫu nhiên A-Za-z0-9 làm sao để kích thước của file là X megabytes (mega tính bằng 1024 * 1024 = 1.048.576 bytes). Điều gì xảy ra khi X cực kỳ lớn, bạn sẽ tạo file kích thước khủng. Hãy quan sát đến tới hạn nào thì ứng dụng báo lỗi, hãy giải thích nguyên nhân và cách khắc phục.

  6. Viết ứng dụng command line, nhập vào tên file, và số nguyên dương Y. Đọc file file ở dòng Y rồi in ra. Chú ý ngoại lệ khi Y > tổng số dòng của file và khi file có kích thước cực kỳ lớn.

  7. Viết ứng dụng command file tên search, nhập vào đường dẫn thư mục và một từ khóa. Thư mục này chứa một số file *.txt, hãy tìm từ khóa trong tất cả file và in ra màn hình kết quả gồm
    tên file, dòng thứ mấy, nội dung dòng chứa từ khóa
    Ví dụ tìm từ khóa money trong thư mục ~/Documents

    $ seach ~/Documents money
    abc.txt
       12: She saved a lot of money by shopping during the sales
       14: Investing money wisely can lead to financial security in the future
    def.txt
       1: He borrowed some money from his friend to buy a new laptop
    mnp.txt
       3: They donated money to the charity to help those in need
    pqr.txt
       5: Managing your money effectively is crucial for a stable financial life.
    
  8. Trong linux có một ứng dụng tree hiển thị cấu trúc cây thư mục trực quan trong màn hình console, hãy viết ứng dụng command line có chức năng giống với ứng dụng tree với một tham số là đường dẫn thư mục cần quét và hiển thị

    $ tree .
    .
    ├── gunfire
    │   ├── abc.txt
    │   └── def.text
    ├── hyperloop
    ├── neuralchip
    ├── tesla
    │   └── readme.md
    └── twitter
    

Gợi ý cho bạn

  1. Nếu bạn tự mình lập trình, bạn có thể mất khá nhiều thời gian. Bạn hãy chủ động viết prompt để ChatGPT hỗ trợ bạn viết code hoặc sinh các tập dữ liệu mẫu.
  2. Chỉ nên làm PowerPoint slide khi bạn đã hoàn thành 90% các bài hand on lab bởi khi đó bạn có rất nhiều kinh nghiệm thú vị để chia sẻ trong slide. Đừng viết quá dài dòng vì bài lab đủ hay thì slide càng cô đọng càng tốt.
  3. Hãy viết ReadMe.md trong mỗi bài hand on lab để sinh viên dễ thực hành hơn.