คำถามและคำตอบในการสัมภาษณ์การเข้ารหัสที่สำคัญ 8 อันดับแรก 2022 [สำหรับนักศึกษาใหม่และผู้มีประสบการณ์]
เผยแพร่แล้ว: 2021-08-25รากฐานที่ดีของโครงสร้างข้อมูล เช่น อาร์เรย์ ต้นไม้ไบนารี ตารางแฮช และรายการที่เชื่อมโยงเป็นสิ่งสำคัญ คุณต้องตระหนักถึงอัลกอริธึมที่จำเป็น วิธีการ และมีความรู้ในภาษาการเขียนโปรแกรม เช่น Java โดยเฉพาะหากคุณกำลังสมัครงานเขียนโปรแกรม คุณสามารถเรียนรู้คำตอบสำหรับคำถามสัมภาษณ์การเขียนโค้ดที่สำคัญได้อย่างแน่นอน แต่ขอแนะนำให้ฝึกฝนวิธีแก้ปัญหาด้วยตัวเองอย่างละเอียด
8 คำถามสัมภาษณ์การเข้ารหัสที่ดีที่สุดและคำตอบ
ให้เราดูคำถามเกี่ยวกับการเข้ารหัสที่สำคัญที่สุดบางคำถามซึ่งถูกถามในการสัมภาษณ์ซึ่งจัดโดยบริษัทขนาดใหญ่ เช่น Microsoft, IBM, Google เป็นต้น
1. คุณจะค้นหาอักขระที่ไม่ซ้ำตัวแรกในคำได้อย่างไร?
เพื่อที่จะตอบคำถามนี้ คุณต้องเข้าใจก่อนว่าต้องทำอะไรเพื่อส่งเสริมฟังก์ชันนี้ ต้องเขียนฟังก์ชันที่ยอมรับสตริงและส่งคืนอักขระที่ไม่ซ้ำตัวแรก
ตัวอย่างเช่น ในคำว่า 'passage', 'p' เป็นอักขระตัวแรกที่ไม่ซ้ำ หรือในคำว่า 'turtle' 'u' เป็นอักขระที่ไม่ซ้ำตัวแรก แล้วเราจะแก้ปัญหานี้อย่างไร? เราสามารถสร้างตารางสำหรับเก็บการซ้ำของตัวอักษรทั้งหมดแล้วเลือกรายการแรกที่ไม่ซ้ำ
ในการเขียนโค้ดที่จะส่งกลับตัวอักษรตัวแรกที่ไม่ซ้ำ เราสามารถใช้ LinkedHashMap เพื่อเก็บจำนวนอักขระ HashMap นี้เป็นไปตามลำดับของการแทรกและอักขระจะถูกเริ่มต้นในตำแหน่งเดียวกับในสตริง ต้องทำซ้ำสตริงที่สแกนโดยใช้ LinkedHashMap เพื่อเลือกรายการที่ต้องการด้วยค่า 1
อีกวิธีในการแก้ไขปัญหานี้คือการใช้ firstNonRepeatingChar(String word) ซึ่งช่วยให้ระบุอักขระที่ไม่ซ้ำซึ่งปรากฏเป็นลำดับแรกในการผ่านครั้งเดียว วิธีนี้ใช้สองที่เก็บข้อมูลเพื่อแทนที่การโต้ตอบ เมธอดนี้จัดเก็บอักขระที่ไม่ซ้ำและอักขระซ้ำแยกกัน และเมื่อการวนซ้ำสิ้นสุดลง อักขระที่ต้องการจะเป็นองค์ประกอบแรกในรายการ
2. คุณจะลบรายการที่ซ้ำกันออกจากอาร์เรย์ได้อย่างไร?
อันดับแรก คุณต้องใช้ LinkedHashSet (Set Interface) เพื่อรักษาลำดับการแทรกเดิมขององค์ประกอบลงในชุด คุณต้องใช้ฟังก์ชันวนซ้ำหรือเรียกซ้ำเพื่อแก้ปัญหาคำถามสัมภาษณ์การเข้ารหัสประเภทนี้
ปัจจัยหลักที่เราต้องจำไว้เมื่อต้องจัดการกับอาร์เรย์ไม่ใช่องค์ประกอบที่ซ้ำกัน ปัญหาหลักที่นี่คือการลบรายการที่ซ้ำกันแทน อาร์เรย์เป็นโครงสร้างข้อมูลแบบคงที่ที่มีความยาวคงที่ ดังนั้นจึงไม่สามารถเปลี่ยนแปลงได้ ดังนั้น ในการลบองค์ประกอบออกจากอาร์เรย์ คุณต้องสร้างอาร์เรย์ใหม่และทำซ้ำเนื้อหาลงในอาร์เรย์ใหม่เหล่านี้
ขั้นแรก คุณต้องแปลงอาร์เรย์เป็น Arraylists แล้วสร้าง LinkedHashSets จาก ArrayLists เหล่านี้ หากอาร์เรย์อินพุตมีจำนวนที่ซ้ำกันมากกว่า อาจส่งผลให้มีอาร์เรย์ชั่วคราวหลายชุด ซึ่งจะเป็นการเพิ่มค่าใช้จ่ายในการนำเข้าเนื้อหา ข้อจำกัดนี้บังคับให้เราแก้ไขปัญหานี้ในลักษณะที่ต้องใช้หน่วยความจำและกำลังประมวลผลน้อยลง
เราต้องลบรายการที่ซ้ำกันแต่ไม่คัดลอกลงในอาร์เรย์ผลลัพธ์ จึงไม่ลบรายการที่ซ้ำกันทั้งหมด แต่เพียงแค่แทนที่ด้วย 0 เป็นค่าเริ่มต้น
3. เราจะตรวจสอบได้อย่างไรว่าจำนวนนั้นเป็นจำนวนเฉพาะ?
นี่เป็นหนึ่งในคำถามสัมภาษณ์การเข้ารหัสที่พบบ่อยที่สุดที่เกี่ยวข้องกับการค้นหาว่าตัวเลขที่ระบุเป็นจำนวนเฉพาะหรือไม่ โปรแกรมประเภทนี้เป็นพื้นฐานของการคิดแบบอัลกอริธึม เนื่องจากเราต้องคิดหาคำตอบโดยยึดตามข้อเท็จจริงที่ว่าจำนวนเฉพาะเป็นจำนวนธรรมชาติทั้งหมดที่ไม่สามารถหารด้วยจำนวนบวกอื่นนอกจาก 1 ได้
เราต้องเขียนโค้ดเพื่อสร้างลูปที่ตรวจสอบแต่ละหมายเลขตั้งแต่ 1 ถึงหมายเลขเป้าหมายเพื่อดูว่าตัวเลขเป้าหมายหารด้วยจำนวนบวกอื่นที่ไม่ใช่ตัวมันเองหรือ 1 ลงตัวหรือไม่
ฟังก์ชันนี้จะนำเราไปสู่การแก้ปัญหา เมื่อตรวจสอบตัวเลขที่มีขนาดใหญ่เป็นพิเศษ เราก็สามารถตรวจสอบได้ว่ารากที่สองของ N เป็นตัวเลขเป้าหมายหรือไม่ ไม่จำเป็นต้องตรวจสอบจนถึง N ในกรณีของรากที่สองที่มีสิทธิ์
ถ้าจำนวนนั้นหารด้วย 2 ไม่ได้ก็ไม่จำเป็นต้องตรวจสอบว่าตัวเลขนั้นหารด้วยเลขคู่อื่นลงตัวหรือไม่ ซึ่งจะทำให้เวลาที่ใช้ในการหาคำตอบลดลง นี่เป็นเวอร์ชันที่ปรับให้เหมาะสมของโซลูชัน ซึ่งการวิเคราะห์ตัวเลขก่อนเขียนโซลูชันจะสะดวกง่ายดาย
4. คุณจะตรวจสอบได้อย่างไรว่าสตริงมีตัวเลขเท่านั้น?
หากคุณต้องการเขียนนิพจน์ทั่วไปเพื่อตรวจสอบว่าสตริงเป็นเพียงตัวเลขหรือมีอักขระที่ไม่ใช่ตัวเลข คุณต้องคุ้นเคยกับการใช้ชุดอักขระในนิพจน์ทั่วไปของ Java ก่อน ภาษาการเขียนโปรแกรม เช่น Java รองรับนิพจน์ทั่วไปด้วยความช่วยเหลือของคลาส java.util.regex.Matcher และ java.util.regex.Pattern Java.util.regex เป็นแพ็คเกจเฉพาะเพื่อการนี้
ในการตรวจสอบการมีอยู่ของตัวเลขเท่านั้นโดยใช้นิพจน์ทั่วไป เราสามารถใช้โค้ดเพื่อวิเคราะห์ว่าสตริงมีจำนวนเต็มดิบหรือไม่ เราจะตรวจสอบว่าสตริงมีเฉพาะตัวเลขภายใน 0 – 9 หรือไม่ แม้ว่าสตริงจะมีตัวเลขแต่ยังมีอักขระอื่นๆ ด้วย สตริงนั้นไม่ใช่สตริงตัวเลขธรรมดา นิพจน์ทั่วไปตรวจสอบเฉพาะตัวเลขจำนวนเต็มและไม่พิจารณาอักขระจุด (.) ดังนั้น การทำตัวเลขทศนิยมและทศนิยมไม่ผ่านการทดสอบ
5. คุณจะย้อนกลับคำในประโยคเป้าหมายได้อย่างไรโดยไม่ต้องใช้วิธีการของห้องสมุด?
นี่เป็นหนึ่งในคำถามสัมภาษณ์เกี่ยวกับการเข้ารหัสที่พบบ่อยมาก อันดับแรก เราต้องเข้าใจข้อกำหนดและวิธีเติมช่องว่างในข้อกำหนดนี้ เมื่อต้องเผชิญกับคำถามเช่นนี้ เราต้องตั้งสมาธิในการถามคำถามที่ถูกต้องก่อน สตริงเป็นเพียงประโยคของอักขระที่ตัดสินใจแล้วว่าอาจมีคำเดียวหรือหลายคำ
ประโยคอาจว่างเปล่า ตัวอย่างเช่น หากเราได้รับประโยค 'การเขียนโปรแกรมคือความสนุก' เราต้องย้อนกลับเป็น 'ความสนุกคือการเขียนโปรแกรม' อย่างมีประสิทธิภาพ เราต้องใช้นิพจน์ทั่วไปใน Java เพื่อแบ่งสตริงที่กำหนดออกเป็นช่องว่าง ตามด้วยการใช้เมธอด reverse() จากคลาสยูทิลิตี้ Collections
เมื่อคุณสามารถแบ่งสตริงโดยใช้ regex'\\s' แล้ว อาร์เรย์ของคำจะถูกส่งกลับเป็นผล นอกจากนี้ยังดูแลคำที่แยกจากกันโดยใช้ช่องว่างหลายช่อง ทันทีที่อาร์เรย์ถูกส่งกลับ คุณสามารถเลือกสร้าง ArrayLists จากอาร์เรย์เหล่านี้ ตามด้วยการใช้เมธอด Collections.reverse() สิ่งนี้จะย้อนกลับ ArrayLists และทุกคำจะเริ่มต้นใหม่ในลำดับที่กลับกัน
ตอนนี้ สิ่งที่เหลืออยู่คือการใช้ StringBuilder เพื่อเชื่อมหลายสตริงผ่านการวนซ้ำ ArrayList หนึ่งต้องตรวจสอบให้แน่ใจว่าขนาดที่ระบุเป็นการปรับขนาด StringBuilder เป็นกระบวนการที่มีค่าใช้จ่ายสูงในแง่ของพลังการประมวลผลและหน่วยความจำ การปรับขนาดจบลงด้วยการสร้างอาร์เรย์ใหม่จากการคัดลอกเนื้อหาจากอาร์เรย์ที่เก่ากว่า
6. คุณจะแทนที่หรือลบอักขระออกจากสตริงได้อย่างไร?
สมมติว่าเรามีสตริง 'Woocommerce' และเราต้องการแทนที่ตัวอักษร 'r' ด้วย 'n' มีหลายวิธีในการบรรลุเป้าหมายนี้ คลาสสตริงใน Java มีหลายวิธีในการแทนที่อักขระภายในสตริงโดยใช้ CharSequence และสตริงย่อย
คุณสามารถเรียกวิธีการแทนที่ภายในสตริงที่จะแทนที่อักขระเป้าหมายและส่งคืนอักขระที่ต้องการได้อย่างง่ายดาย สตริงจะไม่เปลี่ยนรูปในภาษาการเขียนโปรแกรมเช่น Java
ดังนั้น ทุกครั้งที่ดำเนินการเหล่านี้ เช่น การลบหรือเปลี่ยนสตริง ออบเจ็กต์สตริงใหม่จะถูกสร้างขึ้นตามค่าเริ่มต้น มีวิธีโอเวอร์โหลด 4 วิธีในการแทนที่สตริงโดยใช้ Java:
- แทนที่ (ถ่าน oldChar, ถ่าน newChar)
- แทนที่ทั้งหมด (สตริง regex, การแทนที่สตริง)
- แทนที่ (เป้าหมาย CharSequence, การแทนที่ CharSequence)
- แทนที่ก่อน (สตริง regex, การแทนที่สตริง)
CharSequence เป็นหนึ่งใน super interfaces สำหรับ strings, StringBuilder และ StringBuffer ทำให้เราสามารถส่งผ่านอ็อบเจ็กต์ใด ๆ จากสิ่งเหล่านี้เป็นอาร์กิวเมนต์สำหรับวิธีการแทนที่นี้ ReplaceAll() ลงเอยด้วยการแทนที่ทุก ๆ การแข่งขันด้วยสตริงการแทนที่ในขณะที่ replaceFirst() จะแทนที่การแข่งขันครั้งแรกเท่านั้น
ทั้งหมดนี้เป็นวิธีการที่มีประสิทธิภาพที่ยอมรับการแสดงออกปกติ คลาส Java.lang.String อนุญาตให้ใช้วิธีการโอเวอร์โหลดเหล่านี้ทั้งหมด ซึ่งสามารถแทนที่อักขระเดี่ยวหรือสตริงย่อยใน Java ได้อย่างง่ายดาย
ขอแนะนำอย่างยิ่งให้ใช้ replaceAll() เนื่องจากจะแทนที่อักขระที่ตรงกันทุกรายการ การปฏิบัติตามแนวทางนี้ช่วยให้เราสามารถคาดหวังรูปแบบการแสดงออกปกติ ซึ่งจะทำให้ได้รับพลังมากขึ้น เมธอดนี้ยังสามารถแทนที่ทุกคอมม่าด้วยไพพ์สำหรับแปลงไฟล์ที่คั่นด้วยจุลภาคเป็นสตริงที่คั่นด้วยไพล์
อย่างไรก็ตาม หากต้องการแทนที่อักขระเพียงตัวเดียว เราสามารถใช้เมธอด replace() ที่พิจารณาอักขระตัวเก่าและตัวใหม่
อ่าน: คำถามและคำตอบสัมภาษณ์ Java
7. คุณจะผนวกข้อความลงในไฟล์ในภาษาการเขียนโปรแกรมเช่น Java ได้อย่างไร?
การต่อท้ายแตกต่างกันมากเมื่อเทียบกับการสร้างไฟล์ใหม่และการเขียนข้อมูลลงในไฟล์ใหม่ ในกรณีของการต่อท้าย ไฟล์มีอยู่แล้วและเราจำเป็นต้องเพิ่มข้อความที่ส่วนท้ายของไฟล์ ซึ่งคล้ายกับล็อกไฟล์เนื่องจากมีการอัปเดตระบบอย่างต่อเนื่อง
ไฟล์บันทึกเป็นตัวอย่างที่สมบูรณ์แบบของการต่อท้ายข้อความ เนื่องจากแอปพลิเคชันจะคอยเติมรายละเอียดบันทึกลงในไฟล์เหล่านี้ซ้ำๆ เฟรมเวิร์กการบันทึกไม่จำเป็นสำหรับปัญหานี้ แต่คุณต้องรู้วิธีผนวกข้อความลงในไฟล์ที่มีอยู่ เพื่อแก้ปัญหานี้ คุณต้องตระหนักถึงคลาสของความสะดวกในการเขียนไฟล์อักขระ
คลาสมีคอนสตรัคเตอร์ที่ถือว่ายอมรับได้ของไบต์บัฟเฟอร์เริ่มต้นและการเข้ารหัสอักขระ หากคุณต้องการระบุค่าด้วยตัวเอง คุณสามารถสร้าง OutputStreamWriter โดยใช้ FileOutputStream ความพร้อมใช้งานของไฟล์ขึ้นอยู่กับแพลตฟอร์มพื้นฐาน ซึ่งกำหนดว่าไฟล์นั้นอาจจะถูกสร้างขึ้นหรือไม่
มีบางแพลตฟอร์มที่อนุญาตให้เริ่มต้นไฟล์สำหรับการเขียนฟังก์ชันโดยใช้ FileWrite ไฟล์เดียวหรืออ็อบเจ็กต์การเขียนไฟล์หลายไฟล์ อย่างไรก็ตาม ตัวสร้างจากคลาสนี้จะล้มเหลวเมื่อไฟล์ที่เกี่ยวข้องได้รับการเตรียมใช้งานแล้ว FileWriter ใช้สำหรับเขียนสตรีมอักขระและ FileOutputStream สามารถเขียนสตรีมไบต์ดิบได้
เรียนรู้ หลักสูตรการพัฒนาซอฟต์แวร์ ออนไลน์จากมหาวิทยาลัยชั้นนำของโลก รับโปรแกรม Executive PG โปรแกรมประกาศนียบัตรขั้นสูง หรือโปรแกรมปริญญาโท เพื่อติดตามอาชีพของคุณอย่างรวดเร็ว
8. คุณจะหาจำนวนที่มากที่สุดหรือน้อยที่สุดในอาร์เรย์ของจำนวนเต็มได้อย่างไร?
สำหรับวิธีแก้ปัญหานี้ เราต้องเขียนโค้ดฟังก์ชันหรือวิธีการที่สามารถค้นหาจำนวนที่มากที่สุดหรือน้อยที่สุดจากอาร์เรย์ที่เป็นจำนวนเต็มเต็มจำนวน ก่อนอื่นเราต้องสร้างไฟล์ต้นฉบับใน Java โดยใช้ชื่อ MaximumMinimumArrayDemo.java และคัดลอกโค้ดที่เขียนไว้ที่นี่เพื่อรวบรวมและดำเนินการ
เราสามารถใช้ตัวแปรสองตัวที่เราเรียกว่า 'ใหญ่ที่สุด' และ 'เล็กที่สุด' เพื่อเก็บค่าสูงสุดและต่ำสุดตามลำดับจากอาร์เรย์ จำนวนที่น้อยที่สุดสามารถเริ่มต้นได้โดยใช้ integer.MIN_VALUE และจำนวนที่มากที่สุดสามารถเริ่มต้นได้โดยใช้ integer.MAX_VALUE
ด้วยการวนซ้ำทุกรอบที่คุณได้เริ่มต้น คุณสามารถเปรียบเทียบตัวเลขปัจจุบันกับ 'ใหญ่ที่สุด' และ 'เล็กที่สุด' และอัปเดตตามนั้น อาร์เรย์จะไม่แทนที่เมธอด toString ใน Java ดังนั้น คุณสามารถใช้ Arrays.toString() เพื่อพิมพ์เนื้อหาของอาร์เรย์เป้าหมายได้
คุณสามารถใช้เมธอดแบบคงที่นี้เพื่อเรียกใช้ฟังก์ชันหลักได้โดยตรง จากนั้นคุณต้องส่งอาร์เรย์สุ่มผ่านวิธีนี้เพื่อตรวจสอบว่าค่าสูงสุดและต่ำสุดถูกส่งกลับอย่างถูกต้องหรือไม่ คุณยังสามารถเลือกที่จะทำให้การทดสอบนี้เป็นแบบอัตโนมัติผ่านการทดสอบหน่วยใน IDE ของคุณ
ชำระเงิน: ทักษะคอมพิวเตอร์ 4 อันดับแรกที่จะใส่ในประวัติย่อของคุณ
บทสรุป
หลักสูตรที่เน้นการเขียนโปรแกรมไม่เพียงแต่เหมาะสำหรับการแก้ปัญหา แต่ยังเพิ่มโอกาสในการได้รับเลือกเมื่อสมัครงานอีกด้วย หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการเขียนโปรแกรม Java และปัญหาการเขียนโค้ดขั้นสูง คุณสามารถลงทะเบียนเรียนในหลักสูตรที่ครอบคลุม เช่น upGrad 's Master of Science in Computer Science หรือ Full Stack Development Course