ความท้าทายในการเขียนโค้ดที่อัปเดตโต้ตอบและทดสอบอย่างต่อเนื่องมากกว่า 120 รายการ พร้อมแฟลชการ์ด Anki
ความท้าทายมุ่งเน้นไปที่ อัลกอริธึม และ โครงสร้างข้อมูล ที่พบใน การสัมภาษณ์การเขียนโค้ด
ความท้าทายแต่ละอย่างมีวิธีแก้ไขปัญหาอ้างอิงหนึ่งรายการหรือมากกว่านั้น ได้แก่:
ความท้าทายจะให้คำแนะนำที่เพิ่มขึ้นตามความต้องการในไม่ช้าเพื่อช่วยให้คุณได้รับโซลูชันที่ดีที่สุด
สมุดบันทึกยังมีรายละเอียด:
รวมถึง การใช้งานอ้างอิงที่ทดสอบแล้ว ของโครงสร้างข้อมูลและอัลกอริธึมต่างๆ
สำรับแฟลชการ์ด Anki ที่ให้มาจะใช้การเว้นระยะห่างเพื่อช่วยให้คุณคงแนวคิดหลักไว้
เหมาะสำหรับการใช้งานในขณะเดินทาง
กำลังมองหาแหล่งข้อมูลที่จะช่วยคุณเตรียมความพร้อมสำหรับการสัมภาษณ์ การออกแบบระบบ และ การออกแบบเชิงวัตถุ ใช่หรือไม่
ลองดู repo ในเครือ The System Design Primer ซึ่งมีสำรับ Anki เพิ่มเติม:
แต่ละความท้าทายจะมีสมุดบันทึกสองเล่ม สมุดบันทึกท้าทาย พร้อมการทดสอบหน่วยเพื่อให้คุณแก้ไข และ สมุดบันทึกวิธีแก้ปัญหา สำหรับการอ้างอิง
รูปแบบ : หมวดหมู่ความท้าทาย - จำนวนความท้าทาย
จำนวนความท้าทายทั้งหมด: 120
การทดสอบหน่วย การใช้งานฟังก์ชั่นเต็มรูปแบบของโครงสร้างข้อมูลต่อไปนี้:
การทดสอบหน่วย การใช้งานฟังก์ชันเต็มรูปแบบของอัลกอริธึมต่อไปนี้:
เครดิตรูปภาพ
ท้าทาย | สมุดบันทึกแบบคงที่ |
---|---|
ตรวจสอบว่าสตริงมีอักขระเฉพาะหรือไม่ | ความท้าทาย │ แนวทางแก้ไข |
ตรวจสอบว่าสตริงเป็นการเรียงสับเปลี่ยนของสตริงอื่นหรือไม่ | ความท้าทาย │ แนวทางแก้ไข |
ตรวจสอบว่าสตริงมีการหมุนของสตริงอื่นหรือไม่ | ความท้าทาย │ แนวทางแก้ไข |
บีบอัดสตริง | ความท้าทาย │ แนวทางแก้ไข |
อักขระย้อนกลับในสตริง | ความท้าทาย │ แนวทางแก้ไข |
เมื่อกำหนดสองสตริง ให้ค้นหาอักขระที่แตกต่างกันเพียงตัวเดียว | ความท้าทาย │ แนวทางแก้ไข |
ค้นหาดัชนีสองตัวที่รวมกันเป็นค่าเฉพาะ | ความท้าทาย │ แนวทางแก้ไข |
ใช้ตารางแฮช | ความท้าทาย │ แนวทางแก้ไข |
ใช้เสียงซ่าซ่า | ความท้าทาย │ แนวทางแก้ไข |
ค้นหาอักขระตัวแรกที่ไม่ซ้ำในสตริง | มีส่วนร่วม │ มีส่วนร่วม |
ลบอักขระที่ระบุในสตริง | มีส่วนร่วม │ มีส่วนร่วม |
ย้อนกลับคำในสตริง | มีส่วนร่วม │ มีส่วนร่วม |
แปลงสตริงให้เป็นจำนวนเต็ม | มีส่วนร่วม │ มีส่วนร่วม |
แปลงจำนวนเต็มให้เป็นสตริง | มีส่วนร่วม │ มีส่วนร่วม |
เพิ่มความท้าทาย | มีส่วนร่วม │ มีส่วนร่วม |
ท้าทาย | สมุดบันทึกแบบคงที่ |
---|---|
ลบรายการที่ซ้ำกันออกจากรายการที่เชื่อมโยง | ความท้าทาย │ แนวทางแก้ไข |
ค้นหาองค์ประกอบที่ k ถึงองค์ประกอบสุดท้ายของรายการที่เชื่อมโยง | ความท้าทาย │ แนวทางแก้ไข |
ลบโหนดที่อยู่ตรงกลางของรายการที่เชื่อมโยง | ความท้าทาย │ แนวทางแก้ไข |
แบ่งพาร์ติชันรายการเชื่อมโยงตามค่าที่กำหนด | ความท้าทาย │ แนวทางแก้ไข |
เพิ่มตัวเลขสองตัวที่มีหลักเก็บไว้ในรายการที่เชื่อมโยง | ความท้าทาย │ แนวทางแก้ไข |
ค้นหาจุดเริ่มต้นของการวนซ้ำรายการลิงก์ | ความท้าทาย │ แนวทางแก้ไข |
ตรวจสอบว่ารายการที่เชื่อมโยงเป็นพาลินโดรมหรือไม่ | ความท้าทาย │ แนวทางแก้ไข |
ใช้รายการที่เชื่อมโยง | ความท้าทาย │ แนวทางแก้ไข |
ตรวจสอบว่ารายการเป็นแบบวนหรือแบบวนซ้ำ | มีส่วนร่วม │ มีส่วนร่วม |
เพิ่มความท้าทาย | มีส่วนร่วม │ มีส่วนร่วม |
ท้าทาย | สมุดบันทึกแบบคงที่ |
---|---|
ใช้งาน n สแต็กโดยใช้อาร์เรย์เดียว | ความท้าทาย │ แนวทางแก้ไข |
ใช้สแต็กที่ติดตามองค์ประกอบขั้นต่ำ | ความท้าทาย │ แนวทางแก้ไข |
ใช้ชุดของคลาสสแต็กที่ล้อมรายการสแต็กที่มีขอบเขตความจุ | ความท้าทาย │ แนวทางแก้ไข |
ใช้งานคิวโดยใช้สองสแต็ก | ความท้าทาย │ แนวทางแก้ไข |
จัดเรียงสแต็กโดยใช้สแต็กอื่นเป็นบัฟเฟอร์ | ความท้าทาย │ แนวทางแก้ไข |
ใช้งานสแต็ก | ความท้าทาย │ แนวทางแก้ไข |
ดำเนินการคิว | ความท้าทาย │ แนวทางแก้ไข |
ใช้ลำดับความสำคัญที่สนับสนุนโดยอาร์เรย์ | ความท้าทาย │ แนวทางแก้ไข |
เพิ่มความท้าทาย | มีส่วนร่วม │ มีส่วนร่วม |
ท้าทาย | สมุดบันทึกแบบคงที่ |
---|---|
ใช้การค้นหาเชิงลึกก่อน (ก่อน, ใน-, หลังการสั่งซื้อ) บนแผนผัง | ความท้าทาย │ แนวทางแก้ไข |
ใช้การค้นหาแบบกว้างก่อนบนต้นไม้ | ความท้าทาย │ แนวทางแก้ไข |
กำหนดความสูงของต้นไม้ | ความท้าทาย │ แนวทางแก้ไข |
สร้างแผนผังการค้นหาแบบไบนารีที่มีความสูงน้อยที่สุดจากอาร์เรย์ที่เรียงลำดับ | ความท้าทาย │ แนวทางแก้ไข |
สร้างรายการเชื่อมโยงสำหรับแต่ละระดับของแผนผังไบนารี | ความท้าทาย │ แนวทางแก้ไข |
ตรวจสอบว่าไบนารีทรีมีความสมดุลหรือไม่ | ความท้าทาย │ แนวทางแก้ไข |
ตรวจสอบว่าต้นไม้เป็นแผนผังการค้นหาแบบไบนารีที่ถูกต้องหรือไม่ | ความท้าทาย │ แนวทางแก้ไข |
ค้นหาผู้สืบทอดตามลำดับของโหนดที่กำหนดในแผนผังการค้นหาแบบไบนารี | ความท้าทาย │ แนวทางแก้ไข |
ค้นหาโหนดที่ใหญ่เป็นอันดับสองในแผนผังการค้นหาแบบไบนารี | ความท้าทาย │ แนวทางแก้ไข |
ค้นหาบรรพบุรุษร่วมที่ต่ำที่สุด | ความท้าทาย │ แนวทางแก้ไข |
พลิกกลับต้นไม้ไบนารี | ความท้าทาย │ แนวทางแก้ไข |
ใช้แผนผังการค้นหาแบบไบนารี | ความท้าทาย │ แนวทางแก้ไข |
ใช้ฮีปขั้นต่ำ | ความท้าทาย │ แนวทางแก้ไข |
ดำเนินการทดลอง | ความท้าทาย │ แนวทางแก้ไข |
ใช้การค้นหาเชิงลึกก่อนบนกราฟ | ความท้าทาย │ แนวทางแก้ไข |
ใช้การค้นหาแบบกว้างก่อนบนกราฟ | ความท้าทาย │ แนวทางแก้ไข |
ตรวจสอบว่ามีเส้นทางระหว่างสองโหนดในกราฟหรือไม่ | ความท้าทาย │ แนวทางแก้ไข |
ใช้งานกราฟ | ความท้าทาย │ แนวทางแก้ไข |
ค้นหาลำดับการสร้างโดยแสดงรายการโปรเจ็กต์และการขึ้นต่อกัน | ความท้าทาย │ แนวทางแก้ไข |
ค้นหาเส้นทางที่สั้นที่สุดในกราฟถ่วงน้ำหนัก | ความท้าทาย │ แนวทางแก้ไข |
ค้นหาเส้นทางที่สั้นที่สุดในกราฟแบบไม่ถ่วงน้ำหนัก | ความท้าทาย │ แนวทางแก้ไข |
เพิ่มความท้าทาย | มีส่วนร่วม │ มีส่วนร่วม |
ท้าทาย | สมุดบันทึกแบบคงที่ |
---|---|
ใช้การเรียงลำดับการเลือก | ความท้าทาย │ แนวทางแก้ไข |
ใช้การเรียงลำดับการแทรก | ความท้าทาย │ แนวทางแก้ไข |
ดำเนินการเรียงลำดับอย่างรวดเร็ว | ความท้าทาย │ แนวทางแก้ไข |
ใช้การเรียงลำดับแบบผสาน | ความท้าทาย │ แนวทางแก้ไข |
ใช้การเรียงลำดับ Radix | ความท้าทาย │ แนวทางแก้ไข |
จัดเรียงอาร์เรย์ของสตริงเพื่อให้แอนนาแกรมทั้งหมดอยู่ติดกัน | ความท้าทาย │ แนวทางแก้ไข |
ค้นหารายการในอาร์เรย์ที่เรียงลำดับและหมุน | ความท้าทาย │ แนวทางแก้ไข |
ค้นหาเมทริกซ์ที่เรียงลำดับสำหรับรายการ | ความท้าทาย │ แนวทางแก้ไข |
ค้นหา int ที่ไม่ได้อยู่ในอินพุตของจำนวนเต็ม n | ความท้าทาย │ แนวทางแก้ไข |
เมื่อกำหนดอาร์เรย์ที่เรียงลำดับ A, B ให้รวม B เข้ากับ A ตามลำดับ | ความท้าทาย │ แนวทางแก้ไข |
ใช้การเรียงลำดับการเลือกที่เสถียร | มีส่วนร่วม │ มีส่วนร่วม |
ทำให้การเรียงลำดับไม่เสถียรมั่นคง | มีส่วนร่วม │ มีส่วนร่วม |
ใช้ Quicksort เวอร์ชันแทนที่ที่มีประสิทธิภาพ | มีส่วนร่วม │ มีส่วนร่วม |
เมื่อกำหนดอาร์เรย์ที่เรียงลำดับไว้สองชุด ให้รวมอาร์เรย์หนึ่งเข้าด้วยกันตามลำดับที่เรียงลำดับ | มีส่วนร่วม │ มีส่วนร่วม |
ค้นหาองค์ประกอบในอาร์เรย์จำนวนเต็มที่หมุนและเรียงลำดับ | มีส่วนร่วม │ มีส่วนร่วม |
เพิ่มความท้าทาย | มีส่วนร่วม │ มีส่วนร่วม |
ท้าทาย | สมุดบันทึกแบบคงที่ |
---|---|
ใช้งานฟีโบนัชชีแบบวนซ้ำ ไดนามิก และวนซ้ำ | ความท้าทาย │ แนวทางแก้ไข |
เพิ่มสิ่งของที่วางไว้ในกระเป๋าเป้สะพายหลังให้มากที่สุด | ความท้าทาย │ แนวทางแก้ไข |
เพิ่มสิ่งของที่ไม่มีขอบเขตวางไว้ในกระเป๋าเป้สะพายหลังให้มากที่สุด | ความท้าทาย │ แนวทางแก้ไข |
ค้นหาลำดับย่อยร่วมที่ยาวที่สุด | ความท้าทาย │ แนวทางแก้ไข |
ค้นหาลำดับการเพิ่มขึ้นที่ยาวที่สุด | ความท้าทาย │ แนวทางแก้ไข |
ลดค่าใช้จ่ายในการคูณเมทริกซ์ให้เหลือน้อยที่สุด | ความท้าทาย │ แนวทางแก้ไข |
เพิ่มราคาหุ้นให้สูงสุดโดยพิจารณาจากธุรกรรม k รายการ | ความท้าทาย │ แนวทางแก้ไข |
ค้นหาจำนวนวิธีขั้นต่ำในการแสดง n เซนต์จากอาร์เรย์ของเหรียญ | ความท้าทาย │ แนวทางแก้ไข |
ค้นหาจำนวนวิธีที่ไม่ซ้ำกันในการแสดง n เซนต์จากเหรียญจำนวนหนึ่ง | ความท้าทาย │ แนวทางแก้ไข |
พิมพ์วงเล็บ n คู่ที่ถูกต้องทั้งหมด | ความท้าทาย │ แนวทางแก้ไข |
นำทางเขาวงกต | ความท้าทาย │ แนวทางแก้ไข |
พิมพ์ชุดย่อยทั้งหมดของชุด | ความท้าทาย │ แนวทางแก้ไข |
พิมพ์การเรียงสับเปลี่ยนทั้งหมดของสตริง | ความท้าทาย │ แนวทางแก้ไข |
ค้นหาดัชนีเวทย์มนตร์ในอาร์เรย์ | ความท้าทาย │ แนวทางแก้ไข |
ค้นหาจำนวนวิธีในการวิ่งขึ้น n ก้าว | ความท้าทาย │ แนวทางแก้ไข |
ติดตั้งหอคอยแห่งฮานอยด้วยหอคอย 3 หลังและดิสก์ N | ความท้าทาย │ แนวทางแก้ไข |
ใช้แฟคทอเรียลแบบเรียกซ้ำ ไดนามิก และวนซ้ำ | มีส่วนร่วม │ มีส่วนร่วม |
ทำการค้นหาแบบไบนารี่ในอาร์เรย์ที่เรียงลำดับของจำนวนเต็ม | มีส่วนร่วม │ มีส่วนร่วม |
พิมพ์การรวมสตริงทั้งหมด | มีส่วนร่วม │ มีส่วนร่วม |
ใช้ฟังก์ชันการเติมสี | มีส่วนร่วม │ มีส่วนร่วม |
ค้นหาการเรียงสับเปลี่ยนทั้งหมดเพื่อแสดง n เซนต์ โดยให้เหรียญ 1, 5, 10, 25 เซ็นต์ | มีส่วนร่วม │ มีส่วนร่วม |
เพิ่มความท้าทาย | มีส่วนร่วม │ มีส่วนร่วม |
ท้าทาย | สมุดบันทึกแบบคงที่ |
---|---|
สร้างรายการจำนวนเฉพาะ | ความท้าทาย │ แนวทางแก้ไข |
ค้นหารากดิจิทัล | ความท้าทาย │ แนวทางแก้ไข |
สร้างคลาสที่รองรับการแทรก, สูงสุด, ต่ำสุด, ค่าเฉลี่ย, โหมดใน O(1) | ความท้าทาย │ แนวทางแก้ไข |
ตรวจสอบว่าตัวเลขเป็นกำลังของสองหรือไม่ | ความท้าทาย │ แนวทางแก้ไข |
เพิ่มตัวเลขสองตัวโดยไม่มีเครื่องหมาย + หรือ - | ความท้าทาย │ แนวทางแก้ไข |
ลบตัวเลขสองตัวโดยไม่มีเครื่องหมาย + หรือ - | ความท้าทาย │ แนวทางแก้ไข |
ตรวจสอบว่าตัวเลขเป็นจำนวนเฉพาะหรือไม่ | มีส่วนร่วม │ มีส่วนร่วม |
ตรวจสอบว่าเส้นตรงสองเส้นบนระนาบคาร์ทีเซียนตัดกันหรือไม่ | มีส่วนร่วม │ มีส่วนร่วม |
การใช้เพียงบวก ดำเนินการ คูณ ลบ และหาร สำหรับ ints | มีส่วนร่วม │ มีส่วนร่วม |
ค้นหาจำนวนที่ k โดยมีตัวประกอบเฉพาะเพียงตัวเดียวคือ 3, 5 และ 7 | มีส่วนร่วม │ มีส่วนร่วม |
เพิ่มความท้าทาย | มีส่วนร่วม │ มีส่วนร่วม |
ท้าทาย | สมุดบันทึกแบบคงที่ |
---|---|
ใช้การดำเนินการจัดการบิตทั่วไป | ความท้าทาย │ แนวทางแก้ไข |
กำหนดจำนวนบิตที่จะพลิกเพื่อแปลง a เป็น b | ความท้าทาย │ แนวทางแก้ไข |
วาดเส้นบนหน้าจอ | ความท้าทาย │ แนวทางแก้ไข |
พลิกเล็กน้อยเพื่อเพิ่มลำดับที่ยาวที่สุดของ 1 วินาที | ความท้าทาย │ แนวทางแก้ไข |
รับตัวเลขที่มากที่สุดและน้อยที่สุดถัดไป | ความท้าทาย │ แนวทางแก้ไข |
รวมเลขฐานสองสองตัวเข้าด้วยกัน | ความท้าทาย │ แนวทางแก้ไข |
สลับบิตคี่และคู่เป็นจำนวนเต็ม | ความท้าทาย │ แนวทางแก้ไข |
พิมพ์การแสดงเลขฐานสองของตัวเลขระหว่าง 0 ถึง 1 | ความท้าทาย │ แนวทางแก้ไข |
กำหนดจำนวน 1 ในการแสดงเลขฐานสองของจำนวนเต็มที่กำหนด | มีส่วนร่วม │ มีส่วนร่วม |
เพิ่มความท้าทาย | มีส่วนร่วม │ มีส่วนร่วม |
ท้าทาย | สมุดบันทึกแบบคงที่ |
---|---|
ค้นหาสตริงย่อยที่ยาวที่สุดโดยมีอักขระต่างกันไม่เกิน k ตัว | ความท้าทาย │ แนวทางแก้ไข |
ค้นหาผลคูณสูงสุดของตัวเลขสามตัว | ความท้าทาย │ แนวทางแก้ไข |
เพิ่มกำไรให้หุ้นสูงสุดจากการซื้อ 1 ครั้งและการขาย 1 ครั้ง | ความท้าทาย │ แนวทางแก้ไข |
ย้ายเลขศูนย์ทั้งหมดในรายการไปที่จุดสิ้นสุด | ความท้าทาย │ แนวทางแก้ไข |
ค้นหาผลิตภัณฑ์ของ int อื่นๆ | ความท้าทาย │ แนวทางแก้ไข |
จากรายการเข้าและออก ให้ค้นหาช่วงเวลาที่คึกคักที่สุด | ความท้าทาย │ แนวทางแก้ไข |
กำหนดขอบเขตของเกาะ | ความท้าทาย │ แนวทางแก้ไข |
จัดรูปแบบคีย์ใบอนุญาต | ความท้าทาย │ แนวทางแก้ไข |
ค้นหาเส้นทางไฟล์สัมบูรณ์ที่ยาวที่สุด | ความท้าทาย │ แนวทางแก้ไข |
รวมช่วงสิ่งอันดับ | ความท้าทาย │ แนวทางแก้ไข |
กำหนดคุกกี้ | ความท้าทาย │ แนวทางแก้ไข |
พิจารณาว่าคุณสามารถชนะใน Nim ได้หรือไม่ | ความท้าทาย │ แนวทางแก้ไข |
ตรวจสอบว่าสามารถใช้นิตยสารเพื่อสร้างบันทึกเรียกค่าไถ่ได้หรือไม่ | ความท้าทาย │ แนวทางแก้ไข |
ค้นหาจำนวนครั้งที่ประโยคสามารถแสดงบนหน้าจอได้ | ความท้าทาย │ แนวทางแก้ไข |
ต้นไม้ยูโทเปีย | ความท้าทาย │ แนวทางแก้ไข |
กำลัง xor สูงสุด | ความท้าทาย │ แนวทางแก้ไข |
เพิ่มความท้าทาย | มีส่วนร่วม │ มีส่วนร่วม |
interactive-coding-challenges # Repo
├─ arrays_strings # Category of challenges
│ ├─ rotation # Challenge folder
│ │ ├─ rotation_challenge.ipynb # Challenge notebook
│ │ ├─ rotation_solution.ipynb # Solution notebook
│ │ ├─ test_rotation.py # Unit test*
│ ├─ compress
│ │ ├─ compress_challenge.ipynb
│ │ ├─ compress_solution.ipynb
│ │ ├─ test_compress.py
│ ├─ ...
├─ linked_lists
│ ├─ palindrome
│ │ └─ ...
│ ├─ ...
├─ ...
*สมุดบันทึก (.ipynb) อ่าน/เขียนไฟล์การทดสอบหน่วยที่เกี่ยวข้อง (.py)
README นี้มีลิงก์ไปยัง Binder ซึ่งโฮสต์ สมุดบันทึกไดนามิก ของเนื้อหาของ repo แบบออนไลน์โดยไม่จำเป็นต้องติดตั้ง
วิ่ง:
pip install jupyter
สำหรับคำแนะนำโดยละเอียด สคริปต์ และเครื่องมือในการตั้งค่าสภาพแวดล้อมการพัฒนาของคุณอย่างเหมาะสมยิ่งขึ้น โปรดดูที่ repo การตั้งค่า dev
สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการติดตั้งโน้ตบุ๊ก ให้ทำตามคำแนะนำที่นี่
ข้อมูลเพิ่มเติมเกี่ยวกับ IPython/Jupyter Notebooks สามารถพบได้ที่นี่
ความท้าทายมีให้ในรูปแบบของ IPython/Jupyter Notebooks และได้รับ การทดสอบกับ Python 2.7 และ Python 3.x
หากคุณต้องการติดตั้ง IPython/Jupyter Notebook โปรดดูส่วนการติดตั้งโน้ตบุ๊ก
จัดทำสมุดบันทึกแห่งความท้าทาย:
$ git clone https://github.com/donnemartin/interactive-coding-challenges.git
$ cd interactive-coding-challenges
$ jupyter notebook
นี่จะเป็นการเปิดเว็บเบราว์เซอร์ของคุณพร้อมรายการหมวดหมู่ความท้าทาย:
หากต้องการ ดีบัก โซลูชันของคุณด้วย pdb โปรดดูตั๋วต่อไปนี้
หมายเหตุ: ถ้าโซลูชันของคุณแตกต่างจากที่ระบุไว้ในสมุดบันทึกโซลูชัน ให้พิจารณาส่งคำขอดึงข้อมูลเพื่อให้ผู้อื่นได้รับประโยชน์จากงานของคุณ อ่านหลักเกณฑ์การสนับสนุนเพื่อดูรายละเอียด
ความท้าทาย แนวทางแก้ไข และการทดสอบหน่วยถูกนำเสนอในรูปแบบของ IPython/Jupyter Notebook
ยินดีบริจาค!
อ่านหลักเกณฑ์การมีส่วนร่วมเพื่อดูรายละเอียดวิธีการ:
อย่าลังเลที่จะติดต่อฉันเพื่อหารือเกี่ยวกับปัญหา คำถาม หรือความคิดเห็น
ข้อมูลการติดต่อของฉันสามารถพบได้บนหน้า GitHub ของฉัน
ฉันกำลังมอบโค้ดและทรัพยากรในพื้นที่เก็บข้อมูลนี้ให้กับคุณภายใต้ใบอนุญาตโอเพ่นซอร์ส เนื่องจากนี่คือพื้นที่เก็บข้อมูลส่วนตัวของฉัน ใบอนุญาตที่คุณได้รับสำหรับโค้ดและทรัพยากรของฉันจึงมาจากฉัน ไม่ใช่นายจ้างของฉัน (Facebook)
Copyright 2015 Donne Martin
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.