ทำไมต้องเรียน Java และทำอย่างไรให้มีประสิทธิภาพ รายงานยานเดกซ์

Java แตกต่างจากภาษายอดนิยมอื่นๆ อย่างไร เหตุใด Java จึงควรเป็นภาษาแรกในการเรียนรู้ มาสร้างแผนที่จะช่วยให้คุณเรียนรู้ Java ตั้งแต่เริ่มต้นและโดยการประยุกต์ใช้ทักษะการเขียนโปรแกรมในภาษาอื่น ๆ มาดูความแตกต่างระหว่างการสร้างโค้ดที่ใช้งานจริงใน Java และการพัฒนาในภาษาอื่นๆ กัน Mikhail Zatepyakin อ่านรายงานนี้ในการประชุมสำหรับผู้เข้าร่วมในอนาคต ฝึกงาน Yandex และนักพัฒนามือใหม่คนอื่นๆ - การพบปะกับ Java Junior


— สวัสดีทุกคน ฉันชื่อมิชา ฉันเป็นนักพัฒนาจาก Yandex.Market และวันนี้ฉันจะบอกคุณว่าทำไมต้องเรียนรู้ Java และทำอย่างไรให้มีประสิทธิภาพ คุณอาจถามคำถามที่สมเหตุสมผล: ทำไมฉันถึงเล่าเรื่องนี้และไม่ใช่นักพัฒนาที่แข็งแกร่งและมีประสบการณ์หลายปี? ความจริงก็คือฉันเองได้ศึกษา Java เมื่อเร็ว ๆ นี้เมื่อประมาณหนึ่งปีครึ่งที่แล้วดังนั้นฉันจึงยังจำได้ว่ามันเป็นอย่างไรและมีข้อผิดพลาดอะไรบ้าง

ปีที่แล้วฉันได้ฝึกงานที่ Yandex.Market ฉันพัฒนาแบ็กเอนด์สำหรับ Beru สำหรับ Market เอง คุณอาจใช้มัน ตอนนี้ฉันยังคงทำงานที่นั่นต่อไปในทีมอื่น เราสร้างแพลตฟอร์มการวิเคราะห์สำหรับ Yandex.Market สำหรับพันธมิตรทางธุรกิจ

ทำไมต้องเรียน Java และทำอย่างไรให้มีประสิทธิภาพ รายงานยานเดกซ์

มาเริ่มกันเลย. ทำไมต้องเรียน Java จากมุมมองเชิงปฏิบัติ? ความจริงก็คือ Java เป็นภาษาโปรแกรมที่มีชื่อเสียงมาก มีชุมชนขนาดใหญ่มาก

ตัวอย่างเช่น มีดัชนี TIOBE ซึ่งเป็นดัชนียอดนิยมสำหรับความนิยมของภาษาโปรแกรม และ Java อยู่ในอันดับหนึ่ง นอกจากนี้ ที่ไซต์งาน คุณอาจสังเกตเห็นว่าตำแหน่งงานว่างส่วนใหญ่เป็นเรื่องเกี่ยวกับ Java นั่นคือโดยการพัฒนาใน Java คุณจะสามารถหางานได้เสมอ

เนื่องจากชุมชนมีขนาดใหญ่มาก หากคุณมีคำถามใดๆ คุณจะพบคำตอบได้ใน Stack Overflow หรือไซต์อื่นๆ นอกจากนี้ เมื่อพัฒนาใน Java คุณกำลังเขียนโค้ดบน JVM จริง ๆ ดังนั้นคุณจึงสามารถสลับไปใช้ Kotlin, Scala และภาษาอื่น ๆ ที่ใช้ JVM ได้อย่างง่ายดาย

ทำไมต้องเรียน Java และทำอย่างไรให้มีประสิทธิภาพ รายงานยานเดกซ์

Java มีอะไรดีจากมุมมองเชิงอุดมคติ? มีภาษาโปรแกรมที่แตกต่างกัน พวกเขาแก้ปัญหาที่แตกต่างกัน คุณก็รู้ ตัวอย่างเช่น Python เหมาะสำหรับการเขียนสคริปต์บรรทัดเดียวเพื่อแก้ไขปัญหาด่วน

ในด้านบวก คุณสามารถควบคุมโค้ดปฏิบัติการได้อย่างเต็มที่ ตัวอย่างเช่น เรามีรถยนต์ รถยนต์ไร้คนขับ Yandex รหัสของพวกมันเขียนด้วยเครื่องหมายบวก ทำไม Java มีสิ่งนี้ - Garbage Collector มันล้าง RAM ของวัตถุที่ไม่จำเป็น สิ่งนี้เริ่มต้นเองตามธรรมชาติและหยุดโลก นั่นคือ มันหยุดส่วนที่เหลือของโปรแกรมและไปนับวัตถุ ล้างหน่วยความจำของวัตถุ หากสิ่งนี้ใช้งานได้ในโดรน ก็ไม่เจ๋งเลย โดรนของคุณจะขับตรงไป ในตอนนี้จะล้างความทรงจำและไม่มองถนนเลย ดังนั้นโดรนจึงถูกเขียนลงบนข้อดี

ทำไมต้องเรียน Java และทำอย่างไรให้มีประสิทธิภาพ รายงานยานเดกซ์

Java แก้ปัญหาอะไรได้บ้าง? โดยพื้นฐานแล้วเป็นภาษาสำหรับการพัฒนาโปรแกรมขนาดใหญ่ที่เขียนขึ้นเป็นเวลาหลายปีโดยคนหลายสิบหรือหลายร้อยคน โดยเฉพาะอย่างยิ่งแบ็กเอนด์จำนวนมากใน Yandex.Market เขียนด้วยภาษา Java เรามีทีมงานกระจายอยู่ในหลายเมือง แต่ละเมืองมีสิบคน และโค้ดนั้นง่ายต่อการบำรุงรักษา รองรับมาเป็นเวลาสิบปีหรือมากกว่านั้น และในขณะเดียวกันก็มีคนใหม่ๆ เข้ามาเข้าใจโค้ดนี้ด้วย

ภาษาควรมีลักษณะใดเพื่อให้โค้ดในนั้นรองรับได้ง่ายและสามารถพัฒนาในทีมขนาดใหญ่ได้อย่างง่ายดาย ประการแรก ควรเป็นโค้ดที่อ่านง่าย และควรง่ายต่อการใช้งานโซลูชันทางสถาปัตยกรรมที่ซับซ้อน นั่นคือการเขียนนามธรรมระดับสูงควรเป็นเรื่องง่าย ฯลฯ ทั้งหมดนี้เป็นสิ่งที่ Java มอบให้เรา นี่คือภาษาเชิงวัตถุ เป็นเรื่องง่ายมากที่จะนำนามธรรมระดับสูงและสถาปัตยกรรมที่ซับซ้อนไปใช้

นอกจากนี้ยังมีเฟรมเวิร์กและไลบรารีมากมายสำหรับ Java เนื่องจากภาษานี้มีอายุมากกว่า 15 ปี ในช่วงเวลานี้ ทุกอย่างที่สามารถเขียนได้ก็ถูกเขียนไว้ ดังนั้นจึงมีห้องสมุดมากมายสำหรับทุกสิ่งที่คุณต้องการ

ทำไมต้องเรียน Java และทำอย่างไรให้มีประสิทธิภาพ รายงานยานเดกซ์

ในความคิดของฉัน ผู้เล่น JA มือใหม่ควรมีทักษะพื้นฐานอะไรบ้าง? ประการแรก นี่คือความรู้เกี่ยวกับภาษาหลัก Java ถัดไปคือเฟรมเวิร์กการพึ่งพาการฉีดบางประเภท วิทยากรคนต่อไป คิริลล์ จะพูดถึงเรื่องนี้ให้ละเอียดยิ่งขึ้น ฉันจะไม่ลงลึกเกินไป ถัดมาเป็นสถาปัตยกรรมและรูปแบบการออกแบบ เราจำเป็นต้องสามารถเขียนโค้ดที่มีสถาปัตยกรรมสวยงามได้เพื่อที่จะเขียนแอปพลิเคชันขนาดใหญ่ได้ และนี่คือ SQL หรือ ORM สำหรับงานทำงานกับฐานข้อมูล และสิ่งนี้มีผลกับแบ็กเอนด์มากกว่า

ทำไมต้องเรียน Java และทำอย่างไรให้มีประสิทธิภาพ รายงานยานเดกซ์

ไป! จาวาคอร์ ฉันจะไม่ค้นพบอเมริกาที่นี่จริงๆ คุณต้องรู้ภาษาด้วย สิ่งที่คุณควรใส่ใจ ประการแรก Java ได้เปิดตัวเวอร์ชันมากมายในช่วงไม่กี่ปีที่ผ่านมานั่นคือในปี 2014-2015 รุ่นที่เจ็ดเปิดตัวจากนั้นรุ่นที่แปดเก้าสิบสิบเวอร์ชันใหม่มากมายและมีการนำเสนอสิ่งเจ๋ง ๆ ใหม่ ๆ มากมายในพวกเขา ตัวอย่างเช่น Java Stream API , lambda ฯลฯ สิ่งที่ยอดเยี่ยม สดใหม่ ที่ยอดเยี่ยมที่ใช้ในโค้ดการผลิต สิ่งที่พวกเขาถามในการสัมภาษณ์ และสิ่งที่คุณต้องรู้ ดังนั้นคุณไม่ควรนำหนังสือจากชั้นวางในไลบรารี Java-4 ไปเรียนรู้ นี่คือแผนของเรา: เราเรียนรู้ Java-8 หรือสูงกว่า

เราใส่ใจอย่างใกล้ชิดกับนวัตกรรมต่างๆ เช่น Stream API, var ฯลฯ โดยจะมีการถามระหว่างการสัมภาษณ์และมีการใช้อย่างต่อเนื่องในการผลิต นั่นคือ Stream API นั้นเจ๋งกว่าลูปโดยทั่วไปซึ่งเป็นสิ่งที่ดีมาก อย่าลืมใส่ใจ

และมีสิ่งต่างๆ มากมาย เช่น ตัววนซ้ำ ข้อยกเว้น และอื่นๆ สิ่งที่ดูเหมือนไม่สำคัญสำหรับคุณตราบใดที่คุณเขียนโค้ดเล็กๆ น้อยๆ ด้วยตัวเอง คุณไม่จำเป็นต้องมีข้อยกเว้นเหล่านี้ แล้วใครล่ะที่ต้องการมันล่ะ? แต่จะถูกถามในการสัมภาษณ์อย่างแน่นอนซึ่งจะเป็นประโยชน์กับคุณอย่างแน่นอนในการผลิต โดยทั่วไป คุณควรใส่ใจกับข้อยกเว้น ตัววนซ้ำ และสิ่งอื่นๆ

ทำไมต้องเรียน Java และทำอย่างไรให้มีประสิทธิภาพ รายงานยานเดกซ์

โครงสร้างข้อมูล คุณไม่สามารถไปได้โดยไม่มีโครงสร้าง แต่จะดีมากหากคุณไม่เพียงแค่รู้ว่ามีชุด พจนานุกรม และแผ่นงาน และยังมีการนำโครงสร้างต่างๆ ไปใช้อีกด้วย ตัวอย่างเช่น พจนานุกรมเดียวกันใน Java มีการใช้งานหลายอย่าง รวมถึง HashMap และ TreeMap พวกมันมีเส้นกำกับต่างกัน แต่มีโครงสร้างภายในต่างกัน คุณจำเป็นต้องรู้ว่ามันแตกต่างกันอย่างไรและเมื่อใดจึงควรใช้อันไหน

มันจะดีมากถ้าคุณรู้ว่าโครงสร้างข้อมูลเหล่านี้ทำงานภายในอย่างไร นั่นคือมันไม่ง่ายเลยที่จะรู้ว่าซีมโทติกส์ของพวกเขา - การเดิมพันได้ผลแค่ไหน, ระยะเวลาในการส่งบอล แต่โครงสร้างทำงานภายในอย่างไร - ตัวอย่างเช่น bucket ใน HashMap คืออะไร

นอกจากนี้ยังควรให้ความสนใจกับต้นไม้และกราฟด้วย สิ่งเหล่านี้เป็นสิ่งที่ไม่ธรรมดานักใน Production Code แต่เป็นที่นิยมในการสัมภาษณ์ ดังนั้น คุณจะต้องสามารถสำรวจต้นไม้ กราฟทั้งความกว้างและความลึกได้ ทั้งหมดนี้ล้วนเป็นอัลกอริธึมง่ายๆ

ทันทีที่คุณเริ่มเขียนโค้ดขนาดใหญ่ ซับซ้อน โดยใช้ไลบรารี โค้ดหลายคลาส คุณจะรู้ว่ามันยากสำหรับคุณหากไม่มีการสร้างระบบและแก้ไขการขึ้นต่อกัน เหล่านี้คือ Maven และ Gradle เป็นหลัก ช่วยให้คุณสามารถนำเข้าไลบรารีเข้าสู่โครงการของคุณได้ในบรรทัดเดียว นั่นคือคุณเขียน xml หนึ่งบรรทัดและนำเข้าไลบรารีเข้าสู่โปรเจ็กต์ ระบบที่ยอดเยี่ยม มีความใกล้เคียงกันโดยประมาณ ใช้อันใดอันหนึ่ง - Maven หรือ Gradle

ถัดไป - ระบบควบคุมเวอร์ชันบางประเภท ฉันแนะนำ Git เพราะมันเป็นที่นิยมและมีบทช่วยสอนมากมาย เกือบทุกคนใช้ Git มันเจ๋งมาก คุณจะขาดมันไม่ได้

และสภาพแวดล้อมการพัฒนาบางประเภท ฉันแนะนำ IntelliJ Idea มันช่วยเร่งกระบวนการพัฒนาได้อย่างมาก ช่วยคุณได้มาก เขียนโค้ดสำเร็จรูปทั้งหมดให้คุณ โดยทั่วไปแล้ว มันเจ๋งมาก

ทำไมต้องเรียน Java และทำอย่างไรให้มีประสิทธิภาพ รายงานยานเดกซ์

ลิงค์จากสไลด์: SQLZOO, ฮาบราโพสต์

SQL. เล็กน้อยเกี่ยวกับแบ็กเอนด์ มีกรณีที่ตลกจริงๆที่นี่ สองวันก่อนการสัมภาษณ์ฝึกงานครั้งที่สอง เด็กหญิงฝ่ายทรัพยากรบุคคลโทรหาฉันและบอกว่าภายในสองวันพวกเขาจะถามฉันเกี่ยวกับ SQL และ HTTP ฉันจำเป็นต้องเรียนรู้ก่อน และฉันแทบไม่รู้อะไรเลยเกี่ยวกับ SQL หรือ HTTP และฉันก็พบไซต์เจ๋งๆ นี้- SQLZOO. ฉันเรียนรู้ SQL ใน 12 ชั่วโมง ฉันหมายถึงไวยากรณ์ SQL วิธีเขียนคำสั่ง SELECT เข้าร่วม ฯลฯ เว็บไซต์ที่เจ๋งมาก ฉันขอแนะนำเป็นอย่างยิ่ง อันที่จริง ภายใน 12 ชั่วโมง ฉันเรียนรู้ 90% ของสิ่งที่ฉันรู้ตอนนี้

และการรู้จักสถาปัตยกรรมฐานข้อมูลยังเป็นเรื่องดีอีกด้วย เหล่านี้คือคีย์ ดัชนี การทำให้เป็นมาตรฐานทุกประเภท มีโพสต์หลายเรื่องเกี่ยวกับเรื่องนี้ในHabré

ทำไมต้องเรียน Java และทำอย่างไรให้มีประสิทธิภาพ รายงานยานเดกซ์

ใน Java นอกเหนือจาก SQL แล้ว ยังมีระบบการทำแผนที่เชิงวัตถุทุกประเภท เช่น JPA มีโค้ดอยู่บ้าง ในวิธีแรกจะมีโค้ด SQL อยู่บ้าง - SELECT id name FROM info.users WHERE id IN userIds จากฐานข้อมูลผู้ใช้ จากตาราง จะได้รับ ID และชื่อของพวกเขา

ถัดไป มีตัวทำแผนที่บางตัวที่เปลี่ยนวัตถุจากฐานเป็นวัตถุ Java และมีวิธีที่สามด้านล่างที่รันโค้ดนี้จริง ทั้งหมดนี้สามารถแทนที่ได้โดยใช้ JPA ด้วยหนึ่งบรรทัดซึ่งเขียนไว้ด้านล่าง มันทำสิ่งเดียวกัน - ค้นหา All ByIdIn นั่นคือ ตามชื่อของวิธีการนั้น จะสร้างแบบสอบถาม SQL ให้กับคุณ

สิ่งที่เจ๋งมาก ตัวฉันเองเมื่อฉันไม่รู้ SQL ก็ใช้ JPA โดยทั่วไปให้ความสนใจ หากคุณขี้เกียจเกินไปที่จะเรียนรู้ SQL นั่นเป็นหายนะ และโดยทั่วไปแล้วไฟไหม้!

ทำไมต้องเรียน Java และทำอย่างไรให้มีประสิทธิภาพ รายงานยานเดกซ์

ฤดูใบไม้ผลิ. ใครเคยได้ยินเรื่องเช่น Spring Framework บ้างไหม? คุณเห็นไหมว่ามีพวกคุณกี่คน? ไม่ใช่โดยไม่มีเหตุผล Spring รวมอยู่ในข้อกำหนดของตำแหน่งว่างแบ็กเอนด์ Java ทุกๆ วินาที หากไม่มีสิ่งนี้ ก็ไม่มีที่ไหนเลยในการพัฒนาครั้งใหญ่ ฤดูใบไม้ผลิคืออะไร? ประการแรก นี่คือเฟรมเวิร์ก Dependency Injection เกี่ยวกับเรื่องนี้ด้วย จะบอก ผู้พูดคนถัดไป แต่โดยสรุป นี่คือสิ่งที่ช่วยให้คุณนำเข้าการพึ่งพาของบางคลาสไปยังคลาสอื่นได้ง่ายขึ้น นั่นคือความรู้เรื่องการพึ่งพานั้นง่ายขึ้น

Spring Boot เป็นส่วนหนึ่งของ Spring ที่ให้คุณเรียกใช้แอปพลิเคชันเซิร์ฟเวอร์ของคุณด้วยปุ่มเดียว คุณไปที่ THID กดปุ่มสองสามปุ่ม และตอนนี้คุณมีแอปพลิเคชันเซิร์ฟเวอร์ของคุณและทำงานบน localhost 8080 นั่นคือคุณยังไม่ได้เขียนโค้ดแม้แต่บรรทัดเดียว แต่มันใช้งานได้แล้ว สิ่งที่เจ๋งมาก หากคุณเขียนอะไรบางอย่างของคุณเอง ยิงเลย!

Spring เป็น framework ที่มีขนาดใหญ่มาก ไม่เพียงแต่รับแอปพลิเคชันเซิร์ฟเวอร์ของคุณและแก้ไข Dependency Injection ช่วยให้คุณทำสิ่งต่างๆ ได้มากมาย รวมถึงการสร้างเมธอด REST API นั่นคือคุณได้เขียนวิธีการบางอย่างและแนบคำอธิบายประกอบ Get mapping ไว้ด้วย และตอนนี้คุณมีวิธีการบางอย่างบน localhost ที่เขียน Hello world ให้คุณแล้ว โค้ดสองบรรทัดและใช้งานได้ สิ่งที่เย็น.

Spring ยังทำให้การทดสอบการเขียนง่ายขึ้น ไม่มีทางเลยหากไม่มีการทดสอบในการพัฒนาขนาดใหญ่ รหัสจะต้องมีการทดสอบ เพื่อจุดประสงค์นี้ Java มีไลบรารี่ JUnit 5 ที่ยอดเยี่ยม และ JUnit โดยทั่วไป แต่เวอร์ชันล่าสุดคือเวอร์ชันที่ห้า มีทุกอย่างสำหรับการทดสอบ การยืนยันทุกประเภท และอื่นๆ

และมีกรอบ Mockito ที่ยอดเยี่ยม ลองจินตนาการว่าคุณมีฟังก์ชันบางอย่างที่คุณต้องการทดสอบ ฟังก์ชั่นนี้ทำสิ่งต่างๆ มากมาย รวมถึงบางแห่งที่อยู่ตรงกลาง โดยจะล็อกอินเข้าสู่ VKontakte ด้วย ID ของคุณ และรับชื่อและนามสกุลของผู้ใช้ VKontakte จาก ID คุณอาจจะไม่รวม VKontakte ไว้ในการทดสอบนั่นเป็นเรื่องแปลก แต่คุณต้องทดสอบการทำงานก่อนจึงสร้างคลาสนี้โดยใช้ Mockito ม็อกมัน เลียนแบบ

คุณจะบอกว่าเมื่อมีการร้องขอมาที่คลาสนี้ด้วย ID เช่นนั้น มันจะส่งคืนนามสกุลบางส่วน เช่น Vasya Pupkin และมันจะได้ผล นั่นคือคุณจะทดสอบการทำงานทั้งหมดสำหรับ mok one class สิ่งที่เจ๋งมาก

ทำไมต้องเรียน Java และทำอย่างไรให้มีประสิทธิภาพ รายงานยานเดกซ์

ลิงค์จากสไลด์ครับ

รูปแบบการออกแบบ มันคืออะไร? สิ่งเหล่านี้เป็นเทมเพลตสำหรับแก้ไขปัญหาทั่วไปที่เกิดขึ้นในการพัฒนา ในการพัฒนามักเกิดปัญหาที่เหมือนกันหรือคล้ายคลึงกันซึ่งจะเป็นการดีที่จะแก้ไขด้วยดี ดังนั้น ผู้คนจึงได้เสนอแนวทางปฏิบัติที่ดีที่สุด เทมเพลตบางประการเกี่ยวกับวิธีแก้ปัญหาเหล่านี้

มีเว็บไซต์ที่มีรูปแบบที่ได้รับความนิยมมากที่สุด - refactoring.guru คุณสามารถอ่านได้ ค้นหารูปแบบที่มี อ่านทฤษฎีมากมาย ปัญหาคือว่ามันไร้ประโยชน์ในทางปฏิบัติ ในความเป็นจริง รูปแบบที่ไม่มีการฝึกฝนไม่มีประโยชน์อย่างยิ่ง

คุณจะได้ยินเกี่ยวกับรูปแบบบางอย่าง เช่น Singletone หรือ Builder ใครได้ยินคำเหล่านี้บ้าง? คนเยอะมาก. มีรูปแบบง่ายๆ ที่คุณสามารถนำไปใช้ได้ด้วยตัวเอง แต่รูปแบบส่วนใหญ่: กลยุทธ์, โรงงาน, ด้านหน้าอาคาร - ยังไม่ชัดเจนว่าจะใช้ได้ที่ไหน

และจนกว่าคุณจะเห็นในทางปฏิบัติในรหัสของบุคคลอื่นถึงสถานที่ที่ใช้รูปแบบนี้ คุณจะไม่สามารถนำไปใช้ด้วยตนเองได้ ดังนั้นการฝึกฝนจึงมีความสำคัญมากกับรูปแบบ และเพียงแค่อ่านเกี่ยวกับพวกเขาใน refactoring.guru ไม่ได้มีประโยชน์มากนัก แต่ก็คุ้มค่าที่จะทำอย่างแน่นอน

ทำไมต้องเรียน Java และทำอย่างไรให้มีประสิทธิภาพ รายงานยานเดกซ์

เหตุใดจึงต้องมีรูปแบบ? สมมติว่าคุณมีคลาส User ที่แน่นอน มีไอดีและชื่อ ผู้ใช้แต่ละคนจะต้องมีทั้งรหัสและชื่อ ซ้ายบนคือห้องเรียน

การเริ่มต้น User มีวิธีการใดบ้าง? มีสองตัวเลือก - ทั้งตัวสร้างหรือตัวตั้งค่า อะไรคือข้อเสียของทั้งสองวิธี?

ตัวสร้าง ผู้ใช้ใหม่ (7, "พันธบัตร") โอเค ตอนนี้ สมมติว่าเราไม่มีคลาส User แต่มีคลาสอื่นที่มีช่องตัวเลขเจ็ดช่อง คุณจะมีตัวสร้างที่มีตัวเลขเจ็ดตัวติดต่อกัน ยังไม่ชัดเจนว่าตัวเลขเหล่านี้คืออะไรและหมายเลขใดเป็นของทรัพย์สินใด คนออกแบบไม่เก่ง

ตัวเลือกที่สองคือตัวตั้งค่า คุณเขียนอย่างชัดเจน: setId(7), setName("Bond") คุณเข้าใจว่าคุณสมบัติใดเป็นของเขตข้อมูลใด แต่เซทเตอร์มีปัญหา ประการแรก คุณอาจลืมกำหนดบางสิ่งบางอย่าง และประการที่สอง ออบเจ็กต์ของคุณกลายเป็นว่าไม่แน่นอน สิ่งนี้ไม่ปลอดภัยสำหรับเธรดและลดความสามารถในการอ่านโค้ดลงเล็กน้อย นั่นเป็นเหตุผลว่าทำไมผู้คนถึงมีรูปแบบเจ๋งๆ - ตัวสร้าง

ทำไมต้องเรียน Java และทำอย่างไรให้มีประสิทธิภาพ รายงานยานเดกซ์

เรื่องนี้เกี่ยวกับอะไร? ลองรวมข้อดีของทั้งสองวิธี—ตัวตั้งค่าและตัวสร้าง—ไว้ในที่เดียว เราสร้างออบเจ็กต์บางอย่าง นั่นคือ Builder ซึ่งจะมีฟิลด์ Id และ Name ซึ่งจะถูกสร้างขึ้นตามตัวตั้งค่า และจะมีเมธอด Build ที่ส่งคืนผู้ใช้ใหม่พร้อมพารามิเตอร์ทั้งหมดให้กับคุณ เราได้รับวัตถุที่ไม่เปลี่ยนรูปและผู้ตั้งค่า เย็น!

มีปัญหาอะไรบ้าง? ที่นี่เรามี Builder แบบคลาสสิก ปัญหาคือเรายังลืมตรวจสอบบางช่องได้ และถ้าเราลืมไปที่ ID ในกรณีนี้ใน Builder จะถูกเตรียมใช้งานเป็นศูนย์ เนื่องจากประเภท int ไม่เป็นโมฆะ และถ้าเราตั้งชื่อเป็น “พันธบัตร” และลืมไปที่สำนักงาน ID เราจะมีผู้ใช้ใหม่ที่มีรหัส “0” และชื่อ “พันธบัตร” ไม่เจ๋ง.

เรามาลองต่อสู้กับสิ่งนี้กัน ใน Builder เราจะเปลี่ยน int เป็น int เพื่อให้เป็นโมฆะ ตอนนี้ทุกอย่างดีมาก

ทำไมต้องเรียน Java และทำอย่างไรให้มีประสิทธิภาพ รายงานยานเดกซ์

หากเราพยายามสร้างผู้ใช้ชื่อ "Bond" โดยลืมใส่ ID ของเขา เราจะได้รับข้อยกเว้นของตัวชี้ null เนื่องจาก ID ไม่สามารถเป็น null ได้ และตัวสร้างมี null โดยเฉพาะข้อยกเว้นของตัวชี้

ทำไมต้องเรียน Java และทำอย่างไรให้มีประสิทธิภาพ รายงานยานเดกซ์

แต่เรายังคงลืมใส่ชื่อได้ ดังนั้นเราจึงตั้งค่าการเล่นซ้ำวัตถุเป็นโมฆะ ตอนนี้ เมื่อเราสร้างอ็อบเจ็กต์ของเราจาก Builder มันจะตรวจสอบว่าฟิลด์นั้นไม่เป็นโมฆะ และนั่นไม่ใช่ทั้งหมด

ลองดูตัวอย่างสุดท้าย ในกรณีนี้ หากเราใส่ค่าว่างในรันไทม์ของ ID จะเป็นการดีที่รู้ทันทีว่าคุณได้ทำสิ่งนั้น และมันก็ไม่ดีเลยที่คุณกำลังทำผิดพลาดในตอนนี้

ทำไมต้องเรียน Java และทำอย่างไรให้มีประสิทธิภาพ รายงานยานเดกซ์

คุณต้องโยนข้อผิดพลาดไม่ใช่ในขณะที่สร้างผู้ใช้ แต่เมื่อคุณตั้งค่าเป็นโมฆะให้กับ ID ดังนั้นใน Builder เราจะเปลี่ยน setter Integer เป็น int และเขาจะสาบานทันทีว่าพวกเขาโยนค่าว่างออกไป

สรุปคือประเด็นคืออะไร? มีรูปแบบ Builder ที่เรียบง่าย แต่การใช้งานก็ยังมีรายละเอียดปลีกย่อยอยู่บ้าง ดังนั้นจึงเป็นเรื่องดีที่จะดูการใช้งานรูปแบบต่างๆ แต่ละรูปแบบมีการใช้งานมากมาย ทั้งหมดนี้น่าสนใจมาก

ทำไมต้องเรียน Java และทำอย่างไรให้มีประสิทธิภาพ รายงานยานเดกซ์

เราจะเขียน Builder ในโค้ดการผลิตได้อย่างไร นี่คือผู้ใช้ของเรา เราแนบการหมุนเวียน Builder จากไลบรารีลอมบอกเข้ากับมัน และตัวมันเองก็สร้าง Builder ให้เราด้วย นั่นคือเราไม่ได้เขียนโค้ดใดๆ แต่ Java คิดแล้วว่าคลาสนี้มี Builder และเราสามารถเรียกมันแบบนี้ได้

ฉันบอกไปแล้วว่า Java มีไลบรารี่สำหรับเกือบทุกอย่าง รวมถึงลอมบอก ซึ่งเป็นไลบรารีเจ๋ง ๆ ที่ช่วยให้คุณหลีกเลี่ยงการเขียนแบบสำเร็จรูปได้ ช่างก่อสร้าง GET

ทำไมต้องเรียน Java และทำอย่างไรให้มีประสิทธิภาพ รายงานยานเดกซ์

รูปแบบสามารถเป็นสถาปัตยกรรมได้ - ไม่เพียงเกี่ยวข้องกับคลาสเดียวเท่านั้น แต่ยังรวมถึงระบบโดยรวมด้วย มีหลักการที่ยอดเยี่ยมในการออกแบบระบบ: Single Responsibility Principle เขากำลังพูดถึงอะไร? ความจริงที่ว่าแต่ละคลาสจะต้องรับผิดชอบการทำงานบางอย่างของตัวเอง ในกรณีนี้ เรามีตัวควบคุมที่สื่อสารกับผู้ใช้ ออบเจ็กต์ JSON มี Facade ซึ่งแปลงวัตถุ JSON เป็นโมเดลที่แอปพลิเคชัน Java จะใช้งานได้ มีบริการที่มีตรรกะที่ซับซ้อนซึ่งใช้ได้กับโมเดลเหล่านี้ มี Data Access Object ที่วางโมเดลเหล่านี้ลงในฐานข้อมูลและดึงข้อมูลจากฐานข้อมูล และมีฐานข้อมูลนั้นเอง กล่าวอีกนัยหนึ่ง ไม่ใช่ทั้งหมดอยู่ในคลาสเดียว แต่เรากำลังสร้างคลาสที่แตกต่างกันห้าคลาส และนั่นเป็นอีกรูปแบบหนึ่ง

ทำไมต้องเรียน Java และทำอย่างไรให้มีประสิทธิภาพ รายงานยานเดกซ์

เมื่อคุณได้เรียนรู้ Java ไม่มากก็น้อยแล้ว การเขียนโปรเจ็กต์ของคุณเองที่จะมีฐานข้อมูล ทำงานร่วมกับ API อื่นๆ และเปิดเผยแอปพลิเคชันเซิร์ฟเวอร์ของคุณกับไคลเอนต์ REST API ก็ถือเป็นเรื่องดี นี่จะเป็นสิ่งที่ดีที่จะเพิ่มลงในเรซูเม่ของคุณ มันจะเป็นจุดจบที่ยอดเยี่ยมของการศึกษาของคุณ ด้วยวิธีนี้คุณสามารถไปรับงานได้

ทำไมต้องเรียน Java และทำอย่างไรให้มีประสิทธิภาพ รายงานยานเดกซ์

นี่คือตัวอย่างแอปพลิเคชันเซิร์ฟเวอร์ของฉัน ในปีที่สองของฉัน ฉันเขียนรายงานภาคเรียนกับเพื่อนๆ พวกเขากำลังเขียนแอปพลิเคชันบนมือถือเพื่อจัดกิจกรรม ที่นั่นผู้ใช้สามารถเข้าสู่ระบบผ่าน VKontakte วางจุดบนแผนที่ สร้างกิจกรรม เชิญเพื่อนเข้าร่วม บันทึกภาพกิจกรรม ฯลฯ

ฉันทำอะไรในโครงการ? เขียนแอปพลิเคชันเซิร์ฟเวอร์ใน Spring Boot โดยไม่ใช้ SQL ฉันไม่รู้จักเขา ฉันใช้ JPA มันทำอะไรได้บ้าง? เข้าสู่ระบบ VK ผ่าน OAuth-2 นำโทเค็นของผู้ใช้ไปที่ VK ตรวจสอบว่าเป็นผู้ใช้จริง รับข้อมูลเกี่ยวกับผู้ใช้ผ่าน VKontakte สามารถบันทึกข้อมูลในฐานข้อมูลผ่านทาง JPA ได้เช่นกัน บันทึกรูปภาพและไฟล์อื่น ๆ ลงในหน่วยความจำคอมพิวเตอร์อย่างชำนาญและบันทึกลิงก์ไปยังฐานข้อมูล ตอนนั้นฉันไม่รู้ว่ามีอ็อบเจ็กต์ CLOB อยู่ในฐานข้อมูล ฉันก็เลยทำแบบนี้ มี REST API สำหรับผู้ใช้ แอปพลิเคชันไคลเอนต์ และมีการทดสอบหน่วยสำหรับฟังก์ชันพื้นฐาน

[…] ตัวอย่างเล็กๆ น้อยๆ ของความสำเร็จในการเรียนรู้ Java ของฉัน ในปีแรกของฉันที่มหาวิทยาลัย ฉันได้สอนภาษา C# และได้รับความเข้าใจเกี่ยวกับการเขียนโปรแกรม OOP ว่าคลาสใด อินเทอร์เฟซ นามธรรมคืออะไร และเหตุใดจึงจำเป็น มันช่วยฉันได้มาก หากปราศจากสิ่งนี้ การเรียนรู้ Java ก็ค่อนข้างยาก ยังไม่ชัดเจนว่าทำไมจึงต้องมีคลาส

ทำไมต้องเรียน Java และทำอย่างไรให้มีประสิทธิภาพ รายงานยานเดกซ์

ในปีที่สองของฉันที่มหาวิทยาลัย พวกเขาสอน Java core อีกครั้ง แต่ฉันไม่ได้หยุดเพียงแค่นั้น ฉันไปเรียน Spring ด้วยตัวเอง และเขียนรายงานรายวิชา ซึ่งเป็นโครงการของฉัน ซึ่งฉันได้กล่าวไว้ข้างต้น และทั้งหมดนี้ ฉันได้ไปฝึกงานที่ Yandex ผ่านการสัมภาษณ์ และได้เข้าสู่ Yandex.Market ที่นั่นฉันเขียนแบ็กเอนด์สำหรับ Beru นี่คือตลาดของเรา และสำหรับ Yandex.Market เอง

หลังจากนั้นเมื่อ 6 เดือนที่แล้ว ผมก็ย้ายไปทีมอื่นในตลาดเดียวกัน เราทำการวิเคราะห์สำหรับพันธมิตรทางธุรกิจ เราอยู่ในแพลตฟอร์มการวิเคราะห์ มีพวกเราสามคนที่อยู่เบื้องหลัง ดังนั้นฉันจึงมีอิทธิพลอย่างมากต่อโปรเจ็กต์นี้ มันน่าสนใจมากจริงๆ นั่นคือเราให้ข้อมูลตลาดจริง ๆ - ยอดขายคืออะไร, ในหมวดหมู่ใด, ในรุ่นใด, สำหรับพันธมิตรทางธุรกิจ, บริษัทขนาดใหญ่ที่มีชื่อเสียง. และมีพวกเราแค่สามคน เราเขียนโค้ดนี้ และมันก็เจ๋งมาก

ขอบคุณ! ลิงค์ที่มีประโยชน์:
- "Java 8 คู่มือสำหรับผู้เริ่มต้น".
- โครงสร้างข้อมูล.
- SQLZOO.
- การทำให้ฐานข้อมูลเป็นมาตรฐาน.
- รูปแบบการออกแบบ.
- รูปแบบการออกแบบ.
- ทำความสะอาดรหัส.
- Java ที่มีประสิทธิภาพ.

ที่มา: will.com

เพิ่มความคิดเห็น