Go

Docker & Containerization

Dockerfile, multi-stage builds, การปรับแต่ง image, docker-compose, การจัดการ container

20 คำถามสัมภาษณ์·
Senior
1

เหตุผลหลักในการใช้ multi-stage build สำหรับแอปพลิเคชัน Go คืออะไร?

คำตอบ

Multi-stage build แยกสภาพแวดล้อมการคอมไพล์ออกจาก image สุดท้าย โดย stage ของ build จะมี Go SDK ครบชุด (หลายร้อย MB) ขณะที่ image สุดท้ายมีเพียง binary ที่คอมไพล์แล้วเท่านั้น ซึ่งช่วยลดขนาด image ลงอย่างมาก (จากประมาณ 800MB เหลือไม่กี่ MB) และลดพื้นผิวการโจมตีด้วยการกำจัด build tools ที่ไม่จำเป็นในการใช้งานจริง

2

ควรใช้ base image ใดสำหรับแอปพลิเคชัน Go ในการใช้งานจริงเพื่อลดขนาดและพื้นผิวการโจมตี?

คำตอบ

image scratch เป็น image ว่างเปล่าที่ไม่มีระบบปฏิบัติการ Go คอมไพล์เป็น binary แบบ static ที่ไม่ต้องใช้ libc หรือ dependency ของระบบอื่น ๆ จึงสามารถใช้ scratch ได้ ซึ่งสร้าง image ที่เล็กที่สุดเท่าที่จะเป็นไปได้ (ไม่กี่ MB) และให้ความปลอดภัยสูงสุดเพราะไม่มีเครื่องมือหรือ shell ที่สามารถถูกใช้โจมตีได้ Distroless และ alpine เป็นทางเลือกที่ใช้ได้แต่เหมาะสมน้อยกว่า

3

ต้องใช้ flag การคอมไพล์ Go ใดบ้างเพื่อสร้าง binary ที่เข้ากันได้กับ image scratch?

คำตอบ

CGO_ENABLED=0 ปิดการใช้งาน cgo บังคับให้ Go ใช้การ implement แบบ pure Go สำหรับ package เช่น net และ os/user หากไม่มีสิ่งนี้ binary จะมี dependency แบบ dynamic ไปยัง libc ส่วน GOOS และ GOARCH ระบุแพลตฟอร์มเป้าหมาย flag เหล่านี้รวมกันจะสร้าง binary แบบ static อย่างสมบูรณ์โดยไม่มี dependency ภายนอก ซึ่งเหมาะอย่างยิ่งสำหรับ scratch

4

จะปรับแต่งการแคช layer ของ Docker เมื่อ build แอปพลิเคชัน Go ได้อย่างไร?

5

ข้อดีของการใช้ image Google Distroless สำหรับ Go เมื่อเทียบกับ scratch คืออะไร?

+17 คำถามสัมภาษณ์

หัวข้อสัมภาษณ์ Go อื่นๆ

พื้นฐาน Go

Junior
25 คำถาม

โครงสร้างข้อมูล Go

Junior
20 คำถาม

อินเทอร์เฟซใน Go

Junior
18 คำถาม

การจัดการข้อผิดพลาด

Junior
20 คำถาม

พื้นฐาน Goroutine

Junior
20 คำถาม

Channels

Junior
22 คำถาม

Go Modules

Mid-Level
18 คำถาม

เซิร์ฟเวอร์ HTTP

Mid-Level
24 คำถาม

ไคลเอนต์ HTTP

Mid-Level
18 คำถาม

การเข้ารหัส JSON

Mid-Level
20 คำถาม

Database/SQL

Mid-Level
22 คำถาม

แพ็กเกจ context

Mid-Level
20 คำถาม

Testing

Mid-Level
22 คำถาม

รูปแบบ Concurrency

Mid-Level
24 คำถาม

ไพรมิทีฟการซิงโครไนซ์

Mid-Level
22 คำถาม

เฟรมเวิร์กเว็บ Go

Mid-Level
20 คำถาม

การออกแบบ REST API

Mid-Level
20 คำถาม

gRPC

Mid-Level
22 คำถาม

Reflection

Senior
20 คำถาม

การจัดการหน่วยความจำ

Senior
24 คำถาม

การเพิ่มประสิทธิภาพการทำงาน

Senior
22 คำถาม

Generics

Senior
20 คำถาม

Go Design Patterns

Senior
24 คำถาม

Microservices

Senior
24 คำถาม

ความปลอดภัยและการยืนยันตัวตน

Senior
24 คำถาม

Kubernetes Basics

Senior
22 คำถาม

Go ขั้นสูง

Senior
20 คำถาม

การพัฒนา CLI

Senior
20 คำถาม

เชี่ยวชาญ Go สำหรับการสัมภาษณ์ครั้งถัดไป

เข้าถึงคำถามทั้งหมด flashcards แบบทดสอบเทคนิค แบบฝึกหัด code review และตัวจำลองสัมภาษณ์

เริ่มใช้ฟรี