1. Какие знаете шаблоны проектирования? Расскажите о двух шаблонах, которые использовали в работе - Говоря о шаблонах проектирования, которые вы можете привести в качестве примеров на собеседовании, на ум приходят:
Builder — часто используемый шаблон, альтернатива классическому созданию объектов;
паттерн Стратегия, который по своей сути представляет полиморфизм. То есть, у нас есть один интерфейс, но поведение программы будет меняться в зависимости от того, какую конкретно реализацию этого интерфейса передали в функционал (сейчас стратегия фактически везде используется в java-приложениях).
Если этого вам мало, обратите внимание на Spring (если вы с ним уже знакомы), ведь он представляет собой целую платформу фреймворков, которые в свою очередь пронизаны паттернами вдоль и поперек.

2. Какие есть типы данных в Java? - В Java есть примитивные типы данных:
byte — целые числа в пределах -128 до 127, весит 1 байт;
short — целые числа в пределах -32768 до 32767, весит 2 байта;
int — целые числа -2147483648 до 2147483647, весит 4 байта;
long — целые числа в пределах 9223372036854775808 до 9223372036854775807, весит 8 байтов;
float — числа с плавающей запятой в пределах -3.4E+38 до 3.4E+38, весит 4 байта;
double — числа с плавающей запятой в пределах -1.7E+308 до 1.7E+308, весит 8 байтов;
char — одиночные символы в UTF-16, весит 2 байта;
boolean значения true/false, весит 1 байт.

3. Чем отличается объект от примитивных типов данных? - Первое отличие: количество занимаемой памяти: примитивы занимают очень мало, ведь они содержат лишь собственное значение, в то время как объекты могут содержать очень и очень много различных значений: как примитивов, так и ссылок на другие объекты.
 
Второе отличие: Java —это объектно-ориентированный язык, поэтому в ней все работает через взаимодействие между объектами, и примитивы тут не сильно вписываются (собственно, поэтому Java — это не 100% объектно-ориентированный язык).
 
Третье, вытекающее со второго: так как Java ориентирована на взаимодействие между объектами, у этих объектов есть много различных механизмов для управления. Например, конструкторы, методы, исключения (которые работают в первую очередь с объектами), и т.д.
 
Собственно, чтобы примитивы могли как-то ввязаться (работать) в этой объектно ориентированной среде и были придуманы обертки (wrappers) для примитивных типов (Integer, Character, Double, Boolean...)

4. В чем разница передачи параметров по ссылке и по значению? - Примитивные поля хранят свое значение: например, если мы задали int i = 9; поле i хранит значение 9. Когда у нас есть ссылка на объект, это значит, что мы имеем поле со ссылкой на объект, или другими словами — со значением адреса объекта в памяти. В случае с примитивом будет копироваться значение примитива. Соответственно, в методе будет вестись работа с копией, при изменении которой оригинал не затронется.
 
В случае со ссылочным типом будет копироваться значение адреса памяти, соответственно, адрес будет все тем же, как и объект, на который он указывает. 
И если мы будем менять объект по этой новой ссылке, он будет изменен и для старой (ведь они обе указывают на один и тот же объект).
1. คุณรู้รูปแบบการออกแบบอะไรบ้าง? บอกเราเกี่ยวกับเทมเพลตสองแบบที่คุณใช้ในการทำงานของคุณ - เมื่อพูดถึงรูปแบบการออกแบบที่คุณสามารถยกตัวอย่างในการสัมภาษณ์ได้ สิ่งต่อไปนี้ควรคำนึงถึง: ตัวสร้าง - เทมเพลตที่ใช้บ่อยซึ่งเป็นทางเลือกแทนการสร้างวัตถุแบบคลาสสิก รูปแบบกลยุทธ์ ซึ่งโดยเนื้อแท้แล้วแสดงถึงความหลากหลาย นั่นคือเรามีอินเทอร์เฟซเดียว แต่พฤติกรรมของโปรแกรมจะเปลี่ยนไปขึ้นอยู่กับการใช้งานเฉพาะของอินเทอร์เฟซนี้ที่ถูกถ่ายโอนไปยังฟังก์ชันการทำงาน (ตอนนี้กลยุทธ์นี้ใช้งานได้จริงทุกที่ในแอปพลิเคชัน Java) หากนี่ยังไม่เพียงพอสำหรับคุณ ให้ใส่ใจกับ Spring (หากคุณคุ้นเคยอยู่แล้ว) เพราะมันเป็นแพลตฟอร์มของเฟรมเวิร์กทั้งหมด ซึ่งเต็มไปด้วยรูปแบบขึ้น ๆ ลง ๆ 2. ประเภทข้อมูลใน Java คืออะไร? - Java มีประเภทข้อมูลดั้งเดิม: ไบต์ - จำนวนเต็มในช่วง -128 ถึง 127 มีน้ำหนัก 1 ไบต์ short — จำนวนเต็มในช่วง -32768 ถึง 32767 หนัก 2 ไบต์ int - จำนวนเต็ม -2147483648 ถึง 2147483647 มีน้ำหนัก 4 ไบต์ ยาว - จำนวนเต็มในช่วง 9223372036854775808 ถึง 9223372036854775807 มีน้ำหนัก 8 ไบต์ float — ตัวเลขทศนิยมในช่วง -3.4E+38 ถึง 3.4E+38 หนัก 4 ไบต์ double — ตัวเลขทศนิยมในช่วง -1.7E+308 ถึง 1.7E+308 มีน้ำหนัก 8 ไบต์ ถ่าน - อักขระเดี่ยวใน UTF-16 มีน้ำหนัก 2 ไบต์ ค่าบูลีน จริง/เท็จ มีน้ำหนัก 1 ไบต์ 3. ออบเจ็กต์แตกต่างจากประเภทข้อมูลดั้งเดิมอย่างไร - ข้อแตกต่างประการแรก: จำนวนหน่วยความจำที่ถูกครอบครอง: พื้นฐานใช้เวลาน้อยมากเนื่องจากมีเพียงค่าของตัวเองเท่านั้น ในขณะที่วัตถุสามารถมีค่าที่แตกต่างกันได้มากมาย: ทั้งแบบดั้งเดิมและการอ้างอิงถึงวัตถุอื่น ๆ ข้อแตกต่างที่สอง: Java เป็นภาษาเชิงวัตถุ ดังนั้นทุกอย่างในนั้นทำงานผ่านการโต้ตอบระหว่างวัตถุ และภาษาพื้นฐานไม่เข้ากันเป็นอย่างดี (อันที่จริง นี่คือสาเหตุที่ Java ไม่ใช่ภาษาเชิงวัตถุ 100%) ประการที่สาม ต่อจากวินาที: เนื่องจาก Java มุ่งเน้นไปที่การโต้ตอบระหว่างอ็อบเจ็กต์ อ็อบเจ็กต์เหล่านี้จึงมีกลไกที่แตกต่างกันมากมายในการจัดการพวกมัน ตัวอย่างเช่น ตัวสร้าง วิธีการ ข้อยกเว้น (ซึ่งทำงานบนวัตถุเป็นหลัก) เป็นต้น ที่จริงแล้ว เพื่อให้ primitive สามารถเข้าไปเกี่ยวข้อง (งาน) ในสภาพแวดล้อมเชิงวัตถุได้ wrappers จึงถูกประดิษฐ์ขึ้นสำหรับประเภทดั้งเดิม (จำนวนเต็ม อักขระ สองเท่า บูลีน...) 4. อะไรคือความแตกต่างระหว่างพารามิเตอร์ที่ส่งผ่านโดยการอ้างอิงและโดย ความหมาย? - ฟิลด์ดั้งเดิมจะเก็บค่าของมัน: ตัวอย่างเช่น ถ้าเราตั้งค่า int i = 9; ฟิลด์ i เก็บค่า 9 เมื่อเรามีการอ้างอิงถึงวัตถุ หมายความว่าเรามีฟิลด์ที่มีการอ้างอิงถึงวัตถุ หรืออีกนัยหนึ่ง คือ มีค่าของที่อยู่ของวัตถุในหน่วยความจำ ในกรณีของข้อมูลพื้นฐาน ค่าของข้อมูลพื้นฐานจะถูกคัดลอก ดังนั้นวิธีการนี้จะทำงานร่วมกับสำเนาซึ่งเปลี่ยนแปลงซึ่งจะไม่ส่งผลกระทบต่อต้นฉบับ ในกรณีของประเภทการอ้างอิง ค่าของที่อยู่หน่วยความจำจะถูกคัดลอก ตามลำดับ ที่อยู่จะเหมือนกับวัตถุที่ชี้ไป และถ้าเราเปลี่ยนออบเจ็กต์โดยใช้ลิงก์ใหม่นี้ มันก็จะเปลี่ยนไปสำหรับอันเก่า (ท้ายที่สุดแล้วทั้งคู่ก็ชี้ไปที่ออบเจ็กต์เดียวกัน)
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence