- من از سوالاتی که با این سری مقالات تلاقی می کنند صرف نظر می کنم تا دوباره اطلاعات تکراری نباشند. خواندن این مطالب را توصیه می کنم، زیرا حاوی رایج ترین (محبوب ترین) سوالات مصاحبه Java Core هستند.
- سوالات در مورد DOU به زبان اوکراینی ارائه شده است، اما من همه چیز را در اینجا به زبان روسی خواهم داشت.
- پاسخها را میتوان با جزئیات بیشتری توضیح داد، اما من این کار را نمیکنم، زیرا پاسخ به هر سؤال ممکن است یک مقاله کامل را ببرد. و در هیچ مصاحبه ای از شما با این جزئیات سوال نمی کنند.
11. تمام متدهای کلاس Object را نام ببرید
کلاس Object 11 متد دارد:- Class<?> getClass() - دریافت کلاس شی فعلی.
- int hashCode() - دریافت کد هش شی فعلی.
- بولی برابر است (ابجکت شی) - مقایسه شی فعلی با شی دیگر.
- Object clone() - ایجاد و بازگرداندن یک کپی از شی فعلی.
- String toString() - دریافت یک نمایش رشته ای از یک شی.
- void notify() - بیدار کردن یک رشته در حال انتظار در مانیتور این شی (انتخاب رشته تصادفی است).
- void notifyAll() - تمام رشته های منتظر روی مانیتور این شی را بیدار می کند.
- void wait() - رشته فعلی را به حالت آماده به کار تغییر میدهد (آن را منجمد میکند) در مانیتور فعلی، فقط در یک بلوک همگامسازی شده کار میکند تا زمانی که برخی از آنها را آگاه یا NotifyAll موضوع را بیدار کند.
- انتظار خالی (مدت زمان طولانی) - همچنین رشته فعلی را در مانیتور فعلی (در مانیتور همگام فعلی) مسدود می کند، اما با یک تایمر برای خروج از این حالت (یا دوباره: تا زمانی که notify یا notifyAll بیدار شود).
- انتظار خالی (تایم وقفه طولانی، نانوهای داخلی) - روشی مشابه روشی که در بالا توضیح داده شد، اما با تایمرهای دقیق تر برای خروج از انجماد.
- void finalize() - قبل از حذف این شی، جمع کننده زباله این متد را فراخوانی می کند (در نهایت). برای پاکسازی منابع اشغال شده استفاده می شود.
12. تفاوت try-with-resources و try-catch-finally در برخورد با منابع چیست؟
به طور معمول، هنگام استفاده از try-catch-finally، بلوک نهایی برای بستن منابع استفاده می شود. جاوا 7 نوع جدیدی از اپراتور try-with-resources را معرفی کرد ، مشابهی از try-catch-در نهایت برای آزاد کردن منابع، اما فشرده تر و خواناتر. بیایید به یاد بیاوریم که در نهایت try-catch چگونه به نظر می رسد :String text = "some text......";
BufferedWriter bufferedWriter = null;
try {
bufferedWriter = new BufferedWriter(new FileWriter("someFileName"));
bufferedWriter.write(text);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
bufferedWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
حالا بیایید این کد را بازنویسی کنیم، اما با استفاده از try-with-resources :
String text = "some text......";
try(BufferedWriter bufferedWriter =new BufferedWriter(new FileWriter("someFileName"))) {
bufferedWriter.write(text);
} catch (IOException e) {
e.printStackTrace();
}
به نوعی ساده تر شده است، فکر نمی کنید؟ علاوه بر ساده سازی، چند نکته وجود دارد:
-
در try-with-resources ، منابع اعلام شده در پرانتز (که بسته خواهند شد) باید رابط AutoCloseable و تنها روش آن، close() را پیاده سازی کنند .
روش بستن در یک بلوک نهایی ضمنی اجرا میشود ، در غیر این صورت چگونه برنامه دقیقاً چگونه میتواند یک منبع مشخص را ببندد؟
اما، به احتمال زیاد، شما به ندرت پیاده سازی منابع و روش بسته شدن آنها را خواهید نوشت.
-
دنباله اجرای بلوک:
- بلاک را امتحان کن
- ضمنی در نهایت .
- یک بلوک catch که موارد استثنا را در مراحل قبلی میگیرد.
- در نهایت صریح .
به عنوان یک قاعده، استثناهایی که در لیست پایین تر ظاهر می شوند، مواردی را که بالاتر به نظر می رسند قطع می کنند.
13. عملیات بیتی چیست؟
عملیات بیتی عملیات روی رشته بیت است که شامل عملیات منطقی و شیفت بیتی می شود. عملیات منطقی:-
بیتی AND - مقادیر بیت را مقایسه می کند و در این فرآیند، هر بیتی که روی 0 تنظیم شده باشد (نادرست) بیت مربوطه را در نتیجه 0 قرار می دهد. یعنی اگر در هر دو مقدار مقایسه شده بیت 1 (درست) بود، نتیجه نیز 1 خواهد بود.
نشان داده شده به عنوان - و ، &
مثال: 10111101 و 01100111 = 00100101
-
بیتی OR عمل معکوس قبلی است. هر بیتی که روی 1 تنظیم شود، یک بیت مشابه را در نتیجه 1 قرار می دهد. و بر این اساس، اگر بیت در هر دو مقدار مقایسه شده 0 بود، بیت حاصل نیز 0 خواهد بود.
نشان داده شده با - OR , |
مثال: 10100101 | 01100011 = 11100111
-
bitwise NOT - برای یک مقدار اعمال می شود، بیت ها را برمی گرداند (معکوس می کند). یعنی آن بیت هایی که 1 بودند 0 می شوند. و آنهایی که 0 بودند 1 می شوند.
نشان داده شده به عنوان - NOT ، ~
مثال: ~10100101 = 01011010
OR انحصاری بیتی - مقادیر بیت را مقایسه می کند و اگر در هر دو مقدار بیت برابر با 1 باشد، نتیجه 0 خواهد بود و اگر در هر دو مقدار بیت 0 باشد، نتیجه 0 خواهد بود. برای اینکه نتیجه برابر با 1 باشد، فقط یکی از بیت ها باید برابر با 1 و بیت دوم برابر با 0 باشد. نشان داده شده با - XOR ، ^
مثال: 10100101 ^ 01100011 = 11000110
- 01100011 >> 4 = 00000110
- 01100011 << 3 = 00011000
14. اشیاء در جاوا چه کلاس های غیرقابل تغییر استانداردی هستند؟
Immutable شی ای است که اجازه نمی دهد پارامترهای اصلی آن تغییر کند. ممکن است متدهایی داشته باشد که اشیاء جدیدی از یک نوع معین را با پارامترهایی که می خواستید تغییر دهید، برمی گرداند. برخی از اشیاء تغییرناپذیر استاندارد:- تا کنون مشهورترین شیء تغییرناپذیر در جاوا String است.
- نمونههایی از کلاسهای wrapper که انواع استاندارد را میپیچند: Boolean، Character، Byte، Short، Integer، Long، Double، Float.
- اشیایی که معمولاً برای اعداد به خصوص LARGE استفاده می شوند - BigInteger و BigDecimal.
- یک شی که واحدی در stacktraces است (مثلاً در یک stacktrace استثنایی) StackTraceElement;
- شیء کلاس File - می تواند فایل ها را تغییر دهد، اما در عین حال خود تغییر ناپذیر است.
- UUID - که اغلب به عنوان یک شناسه منحصر به فرد برای عناصر استفاده می شود.
- تمام اشیاء کلاس بسته java.time.
- محلی - برای تعریف یک منطقه جغرافیایی، سیاسی یا فرهنگی استفاده می شود.
15. مزیت یک جسم تغییرناپذیر نسبت به اجسام معمولی چیست؟
- چنین اشیایی هنگام استفاده در یک محیط چند رشته ای ایمن هستند . با استفاده از آنها، لازم نیست نگران از دست دادن اطلاعات به دلیل شرایط مسابقه نخ باشید. بر خلاف کار با اشیاء معمولی: در این مورد، شما باید بسیار با دقت فکر کنید و مکانیسم های استفاده از شی را در یک محیط موازی کار کنید.
- اشیاء غیرقابل تغییر کلیدهای خوبی در نقشه هستند، زیرا اگر از یک شیء قابل تغییر استفاده می کنید و سپس شیء حالت خود را تغییر می دهد، استفاده از HashMap می تواند باعث سردرگمی شود: شی همچنان وجود خواهد داشت، و اگر از containKey() استفاده کنید ، ممکن است وجود نداشته باشد. یافت.
- اشیای تغییرناپذیر برای ذخیره داده های تغییرناپذیر (ثابت) عالی هستند که هرگز نباید در حین اجرای برنامه تغییر داده شوند.
- "اتمی تا شکست" - اگر یک شیء تغییرناپذیر استثناء ایجاد کند، باز هم در حالت ناخواسته (شکسته) باقی نمی ماند.
- تست این کلاس ها آسان است.
- مکانیسم های اضافی مانند سازنده کپی و پیاده سازی کلون مورد نیاز نیست.
سوالات در مورد OOP
16. مزایای OOP به طور کلی و در مقایسه با برنامه نویسی رویه ای چیست؟
بنابراین، مزایای OOP:- نوشتن برنامه های پیچیده آسان تر از برنامه نویسی رویه ای است، زیرا همه چیز به ماژول های کوچک تقسیم می شود - اشیایی که با یکدیگر تعامل دارند - و در نتیجه، برنامه نویسی به روابط بین اشیا خلاصه می شود.
- برنامههایی که با استفاده از OOP نوشته میشوند، بسیار سادهتر تغییر میکنند (تا زمانی که مفاهیم طراحی رعایت شود).
- از آنجایی که دادهها و عملیات روی آن یک موجودیت واحد را تشکیل میدهند، در سراسر برنامه لکه نمیشوند (که اغلب با برنامهنویسی رویهای اتفاق میافتد).
- کپسوله سازی اطلاعات از حیاتی ترین داده ها از کاربر محافظت می کند.
- استفاده مجدد از همان کد با داده های مختلف امکان پذیر است، زیرا کلاس ها به شما اجازه می دهند تا اشیاء زیادی ایجاد کنید که هر کدام مقادیر مشخصه خود را دارند.
- وراثت و چندشکلی همچنین به شما امکان می دهد تا از کدهای موجود استفاده مجدد و گسترش دهید (به جای تکرار عملکردهای مشابه).
- توسعه آسان تر برنامه نسبت به رویکرد رویه ای.
- رویکرد OOP امکان انتزاع از جزئیات پیاده سازی را فراهم می کند.
17. به ما بگویید چه کاستی هایی در OOP وجود دارد
متأسفانه آنها نیز حضور دارند:- OOP به دانش نظری زیادی نیاز دارد که قبل از اینکه بتوانید چیزی بنویسید باید تسلط داشته باشید.
- درک و کاربرد ایده های OOP چندان آسان نیست (شما باید در قلب کمی فیلسوف باشید).
- هنگام استفاده از OOP، به دلیل سازماندهی پیچیده تر سیستم، عملکرد نرم افزار کمی کاهش می یابد.
- رویکرد OOP به حافظه بیشتری نیاز دارد، زیرا همه چیز از کلاس ها، رابط ها، متدها تشکیل شده است که حافظه بسیار بیشتری نسبت به متغیرهای معمولی اشغال می کنند.
- زمان مورد نیاز برای تجزیه و تحلیل اولیه بیشتر از رویه ای است.
18. چندشکلی ایستا و پویا چیست
چند شکلی به اشیا اجازه می دهد تا برای یک کلاس یا رابط یکسان رفتار متفاوتی داشته باشند. دو نوع پلیمورفیسم وجود دارد که به نامهای پیوند زودرس و دیررس نیز شناخته میشوند . پلی مورفیسم ایستا یا اتصال اولیه:- در زمان کامپایل (در اوایل چرخه عمر برنامه) رخ می دهد.
- تصمیم می گیرد که کدام متد را در زمان کامپایل اجرا کند.
- اضافه بار روش نمونه ای از چندشکلی استاتیک است.
- اتصال اولیه شامل روش های خصوصی، ایستا و پایانه است.
- وراثت در اتصال اولیه دخیل نیست.
- چندشکلی ایستا شامل اشیاء خاصی نیست، بلکه اطلاعات مربوط به کلاس را شامل می شود که نوع آن در سمت چپ نام متغیر نشان داده شده است.
- در زمان اجرا (در حالی که برنامه در حال اجرا است) رخ می دهد.
- چندشکلی پویا تصمیم میگیرد که یک روش در زمان اجرا چه پیادهسازی خاصی داشته باشد.
- نادیده گرفتن روش نمونه ای از چندشکلی پویا است.
- اتصال دیرهنگام انتساب یک شی خاص، مرجعی از نوع آن، یا سوپرکلاس آن است.
- وراثت با پلی مورفیسم پویا همراه است.
GO TO FULL VERSION