Go

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

Stack vs heap, escape analysis, garbage collector, การทำ memory profiling, pprof, memory leaks

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

ความแตกต่างหลักระหว่างการจัดสรรบน stack และการจัดสรรบน heap ใน Go คืออะไร?

คำตอบ

stack ถูกจัดการโดยอัตโนมัติและการจัดสรรทำได้รวดเร็วมาก (เพียงแค่ขยับ stack pointer) ตัวแปรบน stack จะถูกคืนหน่วยความจำโดยอัตโนมัติเมื่อฟังก์ชัน return ส่วน heap จำเป็นต้องใช้ garbage collector ในการคืนหน่วยความจำและการจัดสรรช้ากว่าเพราะเกี่ยวข้องกับ Go runtime ตัวแปรที่ยังคงอยู่หลังจบฟังก์ชันหรือมีขนาดที่ไม่ทราบในเวลาคอมไพล์จะไปอยู่บน heap

2

escape analysis ใน Go คืออะไร?

คำตอบ

escape analysis คือการวิเคราะห์แบบสแตติกที่คอมไพเลอร์ Go ทำเพื่อตัดสินว่าตัวแปรสามารถอยู่บน stack ได้หรือต้องจัดสรรบน heap หากคอมไพเลอร์ตรวจพบว่าตัวแปรถูกอ้างอิงนอกฟังก์ชันที่สร้างมัน (ผ่านพอยน์เตอร์ที่ส่งคืน การเก็บในตัวแปร global ฯลฯ) ตัวแปรนั้นจะ 'escape' และถูกจัดสรรบน heap การวิเคราะห์นี้ช่วยปรับการจัดสรรหน่วยความจำให้เหมาะสมโดยอัตโนมัติ

3

จะดูผลลัพธ์ของ escape analysis ระหว่างการคอมไพล์ได้อย่างไร?

คำตอบ

แฟล็ก -gcflags=-m ช่วยให้ดูการตัดสินใจของ escape analysis ได้ การใช้ -m=2 หรือ -m=3 จะให้รายละเอียดมากขึ้นว่าทำไมตัวแปรถึง escape ตัวอย่างเช่น 'go build -gcflags=-m=2' จะแสดงข้อความเช่น 'moved to heap: x' เพื่อบ่งบอกว่าตัวแปรถูกย้ายไปยัง heap เครื่องมือนี้จำเป็นสำหรับการปรับการจัดสรรหน่วยความจำในโค้ดที่สำคัญให้เหมาะสม

4

ในกรณีใดที่ตัวแปร local จะ escape ไปยัง heap?

5

บทบาทหลักของ garbage collector ใน Go คืออะไร?

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

หัวข้อสัมภาษณ์ 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
22 คำถาม

Generics

Senior
20 คำถาม

Go Design Patterns

Senior
24 คำถาม

Microservices

Senior
24 คำถาม

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

Senior
24 คำถาม

Docker & Containerization

Senior
20 คำถาม

Kubernetes Basics

Senior
22 คำถาม

Go ขั้นสูง

Senior
20 คำถาม

การพัฒนา CLI

Senior
20 คำถาม

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

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

เริ่มใช้ฟรี