คุณต้องการทักษะระดับมืออาชีพอะไรบ้างในการเป็นโปรแกรมเมอร์ Java หรือวิศวกรที่มีคุณสมบัติเหมาะสมและคุณควรเตรียมอะไรก่อนการสัมภาษณ์ ในระหว่างการสัมภาษณ์ผู้สัมภาษณ์ต้องการทราบว่าคุณมีทักษะระดับมืออาชีพอะไร ต่อไปนี้เป็นสิ่งที่วิศวกรซอฟต์แวร์ Java ที่ผ่านการรับรองต้องการ
1. ทักษะระดับมืออาชีพ
1. มีความเชี่ยวชาญในการเขียนโปรแกรมเชิงวัตถุโดยใช้ภาษา Java มีนิสัยการเขียนโปรแกรมที่ดีและคุ้นเคยกับ Java API ที่ใช้กันทั่วไปรวมถึงเฟรมเวิร์กคอลเลกชันมัลติเธรด (การเขียนโปรแกรมพร้อมกัน), I/O (NIO), ซ็อกเก็ต, JDBC, XML
2. คุ้นเคยกับการพัฒนาเว็บ Java ตาม JSP และ Servlets มีความเข้าใจในเชิงลึกเกี่ยวกับหลักการทำงานและวงจรชีวิตของ Servlets และ JSP มีความเชี่ยวชาญในการใช้ JSTL และ EL เพื่อเขียนหน้าแบบไดนามิกแบบสคริปต์และมีประสบการณ์ในการพัฒนาโครงการ Java Web
3. มีความเข้าใจอย่างลึกซึ้งเกี่ยวกับภาชนะ IOC ของฤดูใบไม้ผลิและหลักการ AOP มีความเชี่ยวชาญในการใช้กรอบฤดูใบไม้ผลิเพื่อจัดการส่วนประกอบเว็บที่หลากหลายและการพึ่งพาของพวกเขามีความเชี่ยวชาญในการใช้ฤดูใบไม้ผลิสำหรับการทำธุรกรรมบันทึกความปลอดภัย ฯลฯ มีประสบการณ์ในการใช้ SpringMVC เป็นเทคโนโลยีชั้นนำเสนอ
4. มีความเชี่ยวชาญในการใช้เฟรมเวิร์ก ORM เช่นไฮเบอร์เนตและ mybatis คุ้นเคยกับ APIs หลักของไฮเบอร์เนตและ mybatis และมีความเข้าใจในเชิงลึกเกี่ยวกับการทำแผนที่ความสัมพันธ์ของ Hibernate การทำแผนที่การสืบทอดการทำแผนที่ส่วนประกอบ
5. มีความเชี่ยวชาญในการใช้ HTML, CSS และ JavaScript สำหรับการพัฒนาส่วนหน้าเว็บที่คุ้นเคยกับ jQuery และ bootstrap มีความเข้าใจในเชิงลึกเกี่ยวกับการประยุกต์ใช้เทคโนโลยี AJAX ในโครงการเว็บและมีประสบการณ์ในการพัฒนาโครงการโดยใช้กรอบ MVC Front-End (AngularJs)
6. ทำความคุ้นเคยกับผลิตภัณฑ์ฐานข้อมูลเชิงสัมพันธ์ที่ใช้กันทั่วไป (MySQL, Oracle) และมีความเชี่ยวชาญในการเขียนโปรแกรมฐานข้อมูลโดยใช้ SQL และ PL/SQL
7. ทำความคุ้นเคยกับหลักการออกแบบเชิงวัตถุมีความเข้าใจในเชิงลึกเกี่ยวกับรูปแบบการออกแบบ GOF และรูปแบบสถาปัตยกรรมแอพพลิเคชั่นขององค์กรและประสบการณ์ที่เกี่ยวข้องในการพัฒนาจริงมีความเชี่ยวชาญในการวิเคราะห์และออกแบบเชิงวัตถุโดยใช้ UML และมีประสบการณ์ในการพัฒนา TDD
8. คุ้นเคยกับการใช้เว็บเซิร์ฟเวอร์และเซิร์ฟเวอร์แอปพลิเคชันเช่น Apache, Nginx, Tomcat, Wildfly, Weblogic และคุ้นเคยกับการกำหนดค่าการรวมเซิร์ฟเวอร์หลายการรวมกลุ่มและการปรับสมดุลโหลด
9. มีความเชี่ยวชาญในการใช้เครื่องมือต้นแบบของผลิตภัณฑ์ที่มีความเชี่ยวชาญในการใช้เครื่องมือการสร้างแบบจำลองการออกแบบ PowerDesigner และสถาปนิกระดับองค์กรมีความเชี่ยวชาญในการใช้สภาพแวดล้อมการพัฒนา Java Eclipse และ Intellij ซึ่งมีความเชี่ยวชาญในการใช้สภาพแวดล้อมการพัฒนาส่วนหน้าเว็บ หมายเหตุ: คุณต้องคุ้นเคยกับทุกรายการที่ระบุไว้ข้างต้น คุณสามารถทำการเตรียมเป้าหมายที่สอดคล้องกันตามข้อกำหนดเฉพาะของการสรรหาองค์กร อย่างไรก็ตาม 6 รายการแรกควรเป็นข้อกำหนดขั้นต่ำและเป็นทักษะระดับมืออาชีพที่วิศวกรซอฟต์แวร์ Java ต้องมี
2. ประสบการณ์โครงการ
การแนะนำโครงการ
ระบบนี้เป็นระบบสำหรับ Z ที่ได้รับมอบหมายจาก X และใช้สำหรับ Z ระบบประกอบด้วย A, B, C, D และโมดูลอื่น ๆ ระบบใช้เฟรมเวิร์กโอเพ่นซอร์สระดับองค์กร Java และเทคโนโลยี Front-end F. ชั้นนำเสนอใช้สถาปัตยกรรม G ใช้ H เป็นมุมมอง I เป็นตัวควบคุมและดำเนินการตามคำขอสไตล์ REST; เลเยอร์ตรรกะทางธุรกิจใช้โหมด J และใช้การทำธุรกรรมบันทึกและฟังก์ชั่นความปลอดภัยผ่าน K และใช้บริการแคชผ่าน L; เลเยอร์การคงอยู่ใช้ M เพื่อห่อหุ้มการดำเนินการ CRUD และเลเยอร์พื้นฐานใช้ N เพื่อใช้การเข้าถึงข้อมูล โครงการทั้งหมดใช้รูปแบบการพัฒนา P
ภาพประกอบ:
E มักจะหมายถึงฤดูใบไม้ผลิ (ตัวเลือกแบบครบวงจรสำหรับการพัฒนาระดับองค์กร Java);
F มักจะเป็นไลบรารี jQuery, ปลั๊กอินหรือเฟรมเวิร์กบูตสแตรป แน่นอนถ้าคุณต้องการสร้างแอปพลิเคชันหน้าเดียว (SPA) ทางออกที่ดีที่สุดคือเฟรมเวิร์ก MVC Front-end (เช่น AngularJs) และ JavaScript Template Engine (เช่น HandleBars); เห็นได้ชัดว่า G คือ MVC (Model-View-Control) และกรอบการใช้งานที่น่าจะเป็นไปได้มากที่สุดคือ Spring MVC นอกจากนี้ยังมีการใช้งาน struts 2, JSF และ MyFaces โดย Apache สำหรับ JSF
H คือ JSP JSP คือ V ใน MVC นอกจากนี้คุณยังสามารถใช้เครื่องยนต์เทมเพลต (เช่น Freemarker และ Velocity) เพื่อสร้างมุมมองหรือเอกสารหรือรายงานต่าง ๆ (เช่น Excel และ PDF ฯลฯ )
ฉันเป็นเซิร์ฟเล็ตหรือคอนโทรลเลอร์ที่กำหนดเอง พวกเขาเป็น C ใน MVC แน่นอนสปริง MVC ให้บริการ Dispatcherservlet เป็นตัวควบคุมส่วนหน้า
J มักจะเป็นสคริปต์การทำธุรกรรม
K ควรเป็นเทคโนโลยี AOP (การเขียนโปรแกรมแบบแยกส่วน)
L ปัจจุบันใช้กันอย่างแพร่หลายโดย Memcached และ Redis;
มีตัวเลือกมากมายสำหรับ M. ที่เป็นไปได้มากที่สุดคือไฮเบอร์เนตและ mybatis เทคโนโลยีทั้งสองยังสามารถใช้ในเวลาเดียวกัน แต่มักจะเพิ่มลบและแก้ไขการเพิ่มการลบและการปรับเปลี่ยนจะถูกส่งมอบให้กับไฮเบอร์เนตสำหรับการประมวลผลในขณะที่การสืบค้นที่ซับซ้อนเสร็จสมบูรณ์โดย mybatis นอกจากนี้ Toplink และ Jooq ยังเป็นโซลูชั่นการคงอยู่ของเลเยอร์ที่ยอดเยี่ยม
การเข้าถึงข้อมูลที่ด้านล่างของ N นั้นใช้ในการใช้ฐานข้อมูลเชิงสัมพันธ์ซึ่งสามารถเป็น MySQL, Oracle, SQLServer, DB2 ฯลฯ ด้วยการถือกำเนิดของยุคข้อมูลขนาดใหญ่ NOSQL (เช่น MongoDB, Membase, BigTable ฯลฯ ) และโซลูชั่นการเข้าถึงข้อมูลขนาดใหญ่อื่น ๆ
P คือรูปแบบการพัฒนาโครงการซึ่งอาจเป็นแบบจำลองน้ำตก, แบบจำลองต้นแบบอย่างรวดเร็ว, แบบจำลองที่เพิ่มขึ้น, แบบจำลองเกลียว, แบบจำลองน้ำพุ, แบบจำลอง RAD ฯลฯ ฯลฯ
กระบวนการพัฒนาโครงการ:
1. การวิเคราะห์ความเป็นไปได้: รายงานการวิเคราะห์ความเป็นไปได้แผนพัฒนาโครงการ
2. การวิเคราะห์ความต้องการ: ข้อกำหนดข้อกำหนด
Ooad (ใช้ไดอะแกรมเคส, แผนภาพเวลา, ไดอะแกรมกิจกรรม)
ต้นแบบอินเตอร์เฟส: ช่วยให้เข้าใจข้อกำหนดและอนุมานสคริปต์ธุรกรรมเมื่อออกแบบเลเยอร์ธุรกิจ
3. การออกแบบ: คู่มือการออกแบบสรุปและคู่มือการออกแบบโดยละเอียดเพื่อแยกเอนทิตีธุรกิจ (วัตถุโดเมน): ไดอะแกรมคลาส, แผนภาพ ER (ขั้นตอนการออกแบบแนวคิด)
สถาปัตยกรรมลำดับชั้น: กำหนดโซลูชันการใช้งานทางเทคนิคของแต่ละเลเยอร์ (โดยเฉพาะกับเฟรมเวิร์กที่ใช้เซิร์ฟเวอร์ฐานข้อมูลเซิร์ฟเวอร์แอปพลิเคชัน ฯลฯ )
การออกแบบเลเยอร์ธุรกิจ: โหมดสคริปต์ธุรกรรม (ธุรกรรม: การทำธุรกรรมเป็นธุรกรรมเมื่อผู้ใช้ส่งคำขอ; สคริปต์: วิธีการหรือฟังก์ชั่นสคริปต์ธุรกรรม: ห่อหุ้มคำขอลงในวิธีการหรือฟังก์ชั่น; โหมดสคริปต์ธุรกรรม: การทำธุรกรรมเริ่มต้นด้วยการเปิดสคริปต์และสิ้นสุดด้วยการปิดสคริปต์)
มีวัตถุสามประเภทที่เกี่ยวข้องในเลเยอร์ธุรกิจ: คลาสสคริปต์ธุรกรรม (ห่อหุ้มกระบวนการทางธุรกิจ), วัตถุการเข้าถึงข้อมูล (DAO, ห่อหุ้มการดำเนินงานถาวร) และวัตถุส่งข้อมูล (DTO, ห่อหุ้มด้วยเลือด ความสัมพันธ์ระหว่างทั้งสามคือวัตถุการเข้าถึงข้อมูลสคริปต์สคริปต์ (การรวม) ทั้งคู่พึ่งพาวิศวกรรมไปข้างหน้า (ไดอะแกรมคลาส UML สร้างรหัส Java) และวิศวกรรมย้อนกลับ (รหัส Java สร้าง Diagrams คลาส UML) การออกแบบฐานข้อมูลทางกายภาพ (ไดอะแกรม ER แปลงเป็นไดอะแกรมความสัมพันธ์ระหว่างตารางการก่อสร้างห้องสมุดและการสร้างตารางและใช้เครื่องมือเพื่อแทรกข้อมูลทดสอบ))
4. การเข้ารหัส
5. ทดสอบ: รายงานการทดสอบ, รายงานข้อบกพร่องการทดสอบหน่วย: ตรวจสอบและตรวจสอบหน่วยทดสอบขั้นต่ำในซอฟต์แวร์ ใน Java วิธีการในชั้นเรียนสามารถทดสอบและนำไปใช้งานได้โดยใช้เครื่องมือ Junit
การทดสอบการรวม: การทดสอบการรวมเรียกอีกอย่างว่าการทดสอบแอสเซมบลีหรือการทดสอบร่วม จากการทดสอบหน่วยโมดูลทั้งหมดจะถูกรวมเข้ากับระบบย่อยสำหรับการทดสอบตามข้อกำหนดการออกแบบ
การทดสอบระบบ: การรวมซอฟต์แวร์ที่ได้รับการยืนยันฮาร์ดแวร์อุปกรณ์ต่อพ่วงเครือข่ายและองค์ประกอบอื่น ๆ เข้าด้วยกันเพื่อดำเนินการทดสอบการประกอบและการยืนยันของระบบข้อมูลต่างๆ การทดสอบระบบเป็นการทดสอบที่ดำเนินการสำหรับระบบผลิตภัณฑ์ทั้งหมด วัตถุประสงค์คือเพื่อตรวจสอบว่าระบบเป็นไปตามคำจำกัดความของข้อกำหนดข้อกำหนดของข้อกำหนดหรือไม่ค้นหาสิ่งที่ไม่สอดคล้องกับหรือขัดแย้งกับข้อกำหนดข้อกำหนดและเสนอวิธีแก้ปัญหาที่สมบูรณ์ยิ่งขึ้น การทดสอบการยอมรับ: กิจกรรมการทดสอบซอฟต์แวร์ที่ดำเนินการก่อนที่ผลิตภัณฑ์จะถูกปล่อยออกมาหลังจากที่ผลิตภัณฑ์ซอฟต์แวร์เสร็จสิ้นการทดสอบหน่วยการทดสอบการรวมและการทดสอบระบบ มันเป็นขั้นตอนสุดท้ายของการทดสอบทางเทคนิคหรือที่เรียกว่าการทดสอบการจัดส่ง วัตถุประสงค์ของการทดสอบการยอมรับคือเพื่อให้แน่ใจว่าซอฟต์แวร์พร้อมและสามารถใช้งานได้โดยผู้ใช้ปลายทางเพื่อทำหน้าที่และงานที่กำหนดไว้ของซอฟต์แวร์
6. การจัดส่งและการบำรุงรักษา: คู่มือผู้ใช้คู่มือการใช้งาน
iii. การบริหารโครงการ
1. การควบคุมเวอร์ชัน: CVS/SVN/GIT
2. การก่อสร้างอัตโนมัติ: Ant/Maven/Ivy/Gradle
3. การรวมอย่างต่อเนื่อง: ฮัดสัน/เจนกินส์
iv. สถาปัตยกรรมระบบ
1. เซิร์ฟเวอร์โหลดบาลานซ์: F5, A10
2. แอปพลิเคชันเซิร์ฟเวอร์:
HTTP Server: Apache, Nginx (HTTP, Reverse Proxy, Mail Proxy Server)
Servlet Container: Tomcat, Resin
คอนเทนเนอร์ EJB: WildFly (JBOSS Application Server), Glassfish, WebLogic, WebSphere
3. ฐานข้อมูลเซิร์ฟเวอร์: MySQL, Eclipse, Oracle
5. แอปพลิเคชันเครื่องมือของบุคคลที่สาม (ปลั๊กอิน)
1. เครื่องมือแผนภูมิ: ปลั๊กอินแผนภูมิที่ใช้ jQuery (เช่น JQChart, Flot, ชาร์ต ฯลฯ ), Chart.js, Highcharts ฯลฯ
2. เครื่องมือการรายงาน: การรายงาน Pentaho, iReport, DynamicReports ฯลฯ
3. การประมวลผลเอกสาร: POI, ITEXT ฯลฯ
4. เวิร์กโฟลว์เอ็นจิ้น: JBPM, OpenWFE, Snaker, Swamp, ฯลฯ
5. การจัดตารางงาน: ควอตซ์, งาน, oodjob, ฯลฯ
6. บริการแคช: ehcache, memcached, swarmcache ฯลฯ
7. คิวข้อความ: Open-MQ, Zeromq ฯลฯ
8. กรอบความปลอดภัย: Shiro, Picketbox ฯลฯ
9. เครื่องมือค้นหา: Indextank, Lucene, Elasticsearch ฯลฯ
10. Ajax Framework: jQuery, extjs, dwr ฯลฯ
11. ปลั๊กอิน UI: Easyui, Miniui ฯลฯ
12. กล่องข้อความที่อุดมไปด้วย: ueditor, ckeditor ฯลฯ
6. ถามคำถามในการสัมภาษณ์
1. บริษัท ใดที่โครงการพัฒนาขึ้นเพื่อ? การลงทุนในโครงการเท่าไหร่?
2. มีกี่คนที่เข้าร่วมในการพัฒนาโครงการ? สัดส่วนของผู้ทดสอบนักพัฒนาและผู้จัดการโครงการในทีมทั้งหมดคืออะไร?
3. โครงการได้รับการพัฒนามานานแค่ไหนแล้ว? โครงการทั้งหมดมีรหัสเท่าไหร่? มีรหัสเท่าไหร่?
4. โครงการรูปแบบการพัฒนาหรือกระบวนการพัฒนาประเภทใดที่โครงการนำมาใช้? สถาปัตยกรรมของโครงการคืออะไร? การเลือกทางเทคนิคของโครงการคืออะไร?
5. คุณรับผิดชอบในโครงการอะไรบ้าง? คุณมีการประชุมหรือทำงานล่วงเวลาบ่อยหรือไม่? กำไรหรือบทเรียนที่เรียนรู้คืออะไรหลังจากโครงการเสร็จสิ้น?
6. ส่วนที่ยากที่สุดของโครงการคืออะไร? วิธีแก้ไขความขัดแย้งต่าง ๆ ที่พบในระหว่างการพัฒนาทีม?
7. คุณสามารถถามคำถามของผู้สัมภาษณ์ในระหว่างการสัมภาษณ์
1. ฉันสังเกตเห็นว่าคุณใช้เทคโนโลยี X คุณแก้ปัญหา y ได้อย่างไร?
2. ทำไมผลิตภัณฑ์ของคุณถึงใช้เทคโนโลยี X แทนเทคโนโลยี y? เท่าที่ฉันรู้ถึงแม้ว่าเทคโนโลยี X มีประโยชน์เช่น A, B, C ฯลฯ แต่ก็มีปัญหากับ D และ E ในขณะที่เทคโนโลยี Y สามารถแก้ปัญหา D และ E ได้
3. ฉันไม่คุ้นเคยกับเทคโนโลยี X ที่คุณพูดถึงมาก แต่ฉันรู้สึกว่ามันเป็นทางออกที่ดี คุณช่วยบอกฉันเพิ่มเติมเกี่ยวกับวิธีการทำงานได้หรือไม่?
4. ทีมของคุณวางแผนโครงการอย่างไร? จะมีการประชุมปกติกี่ครั้งในหนึ่งสัปดาห์? จำนวนรหัสโดยประมาณต่อสัปดาห์คืออะไร?
5. วิธีแก้ปัญหาที่ฉันนึกถึงปัญหา X คือ Y ปัจจุบันคุณจะแก้ปัญหานี้ได้อย่างไร?
8. กฎ SAR
กฎ SAR หมายถึงการอธิบายสถานการณ์ของปัญหาก่อนจากนั้นอธิบายการกระทำที่คุณทำและในที่สุดก็ระบุผลลัพธ์
9. หลักการสัมภาษณ์
1. เสียงปานกลาง, คำพูดที่ชัดเจน, ยิ้ม, ภาพส่วนตัวและความสุภาพ
2. ใช้ความคิดริเริ่มที่จะพูดคุยกับผู้สัมภาษณ์เกี่ยวกับหัวข้อที่เขาสนใจเพื่อให้ผู้สัมภาษณ์พอใจ
3. ใช้ความคิดริเริ่มและพูดคุยกับผู้สัมภาษณ์อย่างกล้าหาญเกี่ยวกับเนื้อหาที่คุ้นเคยและมีประสบการณ์: โครงการประเด็นทางเทคนิค ฯลฯ เพื่อเล่นกับจุดแข็งของคุณและหลีกเลี่ยงจุดอ่อน
4. คุณต้องแสดงว่าคุณต้องการรับตำแหน่งนี้และคุณยินดีที่จะเรียนรู้เทคนิคที่คุณไม่เข้าใจ
5. ทำข้อกำหนดการรักษาที่เหมาะสมตามระดับจริงของคุณ
10. การประเมินตนเอง
1. ความสามารถในการเรียนรู้ (ผู้คนในอุตสาหกรรมไอทีจำเป็นต้องเข้าใจเทคโนโลยีเครื่องมือและวิธีการใหม่ ๆ อย่างต่อเนื่อง)
2. การรับรู้ของทีม (เมื่อเทียบกับความกล้าหาญส่วนตัวอุตสาหกรรมไอทีสนับสนุนการทำงานเป็นทีมมากขึ้น)
3. ความต้านทานแรงดัน (ความเข้มของการทำงานของ บริษัท ไอทีหลายแห่งค่อนข้างสูง)
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น