NullDeveloper
1.01K subscribers
222 photos
84 videos
34 files
210 links
حسین بدرنژاد | NullDeveloper

💻 برنامه نویس وب و موبایل

📱 آموزش نکات برنامه نویسی

اینستاگرام
https://Instagram.com/NullDevelopr

آموزش های رایگان
https://holosen.net/learn

دوره های آموزشی
https://holosen.net/courses
Download Telegram
https://castbox.fm/vb/697993794

📻 اپیزود خلاصه کتاب عادت های اتمی

📚 کتاب «عادت‌های اتمی» تقریباً برای هرکسی که می‌خواد زندگیشو با تغییرات کوچیک و مداوم بهتر کنه، عالیه. اگه می‌خوای عادت‌های بدتو کنار بذاری، تو درس یا کار بهره‌وری بیشتری داشته باشی، همیشه شروع می‌کنی ولی ادامه نمی‌دی، یا کلاً دنبال یه راه ساده و عملی برای رشد شخصی هستی، این کتاب عالی رو توصیه میکنم یا بخونی یا اگر فرصت خوندنشو نداری حتما این اپیزود رو گوش بده.

#پادکست #رشد_شخصی #اپیزود
9
API یا «رابط برنامه‌نویسی اپلیکیشن» در واقع پلیه بین دو نرم‌افزار که اجازه می‌ده بدون اینکه حجم زیادی از اطلاعات روی گوشی یا کامپیوتر کاربر ذخیره بشه، داده‌ها از یک سرور دریافت و استفاده بشن.
برای همین وقتی توی یک اپ موبایلی قیمت دلار، وضعیت آب‌وهوا، اخبار، موجودی فروشگاه‌های اینترنتی یا حتی موقعیت تاکسی اینترنتی رو می‌بینیم، این داده‌ها روی گوشی ذخیره نشده‌ان؛ بلکه برنامه از طریق API یک درخواست می‌فرسته و اطلاعات تازه و بروز رو می‌گیره.

🎯 استفاده از API چند دلیل مهم داره:
1️⃣ اول اینکه نرم‌افزارها بدون اینکه حافظه کاربر رو اشغال کنن، به حجم زیادی از اطلاعات دسترسی دارن.
2️⃣دوم اینکه همیشه به جدیدترین داده‌ها نیاز داریم؛ مثل قیمت ارز که لحظه‌به‌لحظه تغییر می‌کنه یا پیش‌بینی آب‌وهوا که مدام آپدیت میشه.
3️⃣سوم هم اینکه API کار توسعه رو خیلی ساده‌تر می‌کنه؛ مثلاً برنامه‌نویس بک‌اند یک API می‌سازه و برنامه‌نویس فرانت‌اند یا موبایل همون API رو مصرف می‌کنه تا داده‌ها رو نمایش بده. این یعنی یک بار سیستم رو می‌سازیم و روی هر پلتفرمی قابل استفاده است: موبایل، وب، دسکتاپ و…

🧩 کار API به این شکله که شما یک درخواست به یک Endpoint (یه آدرس مشخص مثل: example.com/api/v1/weather) می‌فرستید و سرور هم یک Response می‌فرسته که معمولاً با فرمت JSONه. این اتفاق در خیلی از جاها دیده میشه:
وقتی با گوگل‌مپ مسیر پیدا می‌کنیم، در واقع داریم از API نقشه استفاده می‌کنیم.

وقتی از سرویس پیامکی پیام می‌فرستیم، یک API پشت‌صحنه درخواست رو دریافت و ارسال می‌کنه.

وقتی پول کارت‌به‌کارت می‌کنیم، اپ بانک از APIهای بانکی استفاده می‌کنه.

وقتی توی دیجی‌کالا محصول سرچ می‌کنیم یا فیلتر می‌زنیم، همه درخواست‌ها به API فرستاده میشه و نتیجه برگشت داده میشه.

❇️ در نهایت API باعث میشه نرم‌افزارها سبک، سریع، بروز و قابل‌گسترش باشن و بتونن با سرویس‌های مختلف ارتباط برقرار کنن بدون اینکه لازم باشه همه چیز در خود برنامه نوشته یا ذخیره بشه.


➡️اشتراک و 👍لایک یادت نره

🌐سایت هولوسن: holosen.net

🆔 اینستاگرام: nulldevelopr


#هوش_مصنوعی #برنامه_نویسی #آنالیز_داده #ماشین_لرنینگ #پایتون #کاتلین #جت_پک #جنگو #آموزش_هوش_مصنوعی #یادگیری_عمیق #شی_گرایی #آموزش_برنامه_نویسی
7
اگه این مدت توی پاتوق‌های برنامه‌نویس‌ها (مثل X و یوتیوب) چرخیده باشی، احتمال زیاد با کلماتی مثل «cracked»، «cooked»، «lock in» و انواع و اقسام «vibe coding» روبرو شدی.

توی این دوره‌ای که تقریبا هرکاری رو داریم با GPT و GEMINI و ... انجام میدیم، عادت‌هامون هم با سرعت زیاد دارن عوض می‌شن. توی همین دوران انقلابی، آندری کارپاتی (یکی از هم‌بنیان‌گذاران سابق OpenAI) یه اصطلاح جدید ساخت به اسم «Vibe Coding».

💻 وایب کدینگ یک رویکرد نوین در برنامه‌نویسیه که در اون به جای اینکه بصورت مستقیم کد بزنیم، با زبان طبیعی، اهداف و نیازهامون رو به هوش مصنوعی بگیم و AI بخش عمدهٔ کدنویسی رو انجام می‌ده. ابزارهایی مثل Cursor نمونه‌هایی از مدل های هوش مصنوعین که میتونیم وایب کدینگ رو انجام بدیم.

از وقتی این پست رو کارپاتی منتشر کرد، بالای ۴.۵ میلیون بار دیده شده و این موج ابزارهای vibe coding تبدیل به یه صنعت کوچیک برای خودش شده. البته خیلی از این ابزارها قبل از این توییت معروف هم وجود داشتن، ولی حالا که اسم و دسته‌بندی رسمی دارن، اینفلوئنسرها هم بیکار ننشستن و هی دارن اسکرین‌شیر از بازی‌ها و اپ‌ها و SaaSهایی که با vibe coding ساختن منتشر می‌کنن.😅

وایب کدینگ درواقع یه تکامل توی برنامه‌نویسیه. از اینکه به سیستم بگی چطور کاری رو انجام بده (مثلاً bubble sort)، به اینکه فقط پرامپ بدی و بگی چی می‌خوای.

📌ولی چالش دقیقا همین‌جاست، مخصوصاً اگه مهندسی باشی که توی یه شرکت بزرگ کار می‌کنی. دیگه قرار نیست هر روز بازی یا اپ جدید بسازی؛ داری روی میلیون‌ها خط کد قبلی کار می‌کنی، رفع باگ، اضافه کردن فیچر، بهبود، همکاری با بقیه.
اینجا دیگه خیلی مهمه چیزها چطور ساخته شدن یعنی بحث پروداکشنه.
یه برنامه نویس در واقع یه محصولی میسازه که بقا داشته باشه، بتونه بهش فیچر اضافه کنه!
وایب کدینگ بیشتر تجربه روزِ صفرمه برای ساختن یه اپ جدید اما از روز اول دیگه یعنی ادامه دادن، نگهداری، فیکس‌کردن باگ، همکاری‌کردن. اگه نتونی همون اپ رو دیباگ کنی یا فیچر بهش اضافه کنی قطعا کاربرد خاصی نداره.

⬅️ تأثیر وایب کدینگ بر شغل برنامه‌نویسان

خیلیا نگران اینن که ابزارهای هوش مصنوعی، و همین وایب کدینگ، باعث از بین رفتن شغل برنامه‌نویسان بشه. اما واقعیت اینه که ما نمیتونیم ابزار رو با مهارت مقایسه کنیم! یه برنامه نویس ابزار های مختلفی داره. مثه اینه بگیم آچار فرانسه جای لوله کشو میگیره! تو برنامه نویسیم همینه. همون‌طور که IDEهای پیشرفته، دیباگرها، و Git جایگزین برنامه‌نویسا نشدن، وایب کدینگ هم فرایند کدنویسی رو سریع‌تر و آسون‌تر می‌کنه. اصلا مثالش رو در زمینه وب میرنم:
همین الانش وردپرس برای طراحی وب هست آیا برنامه نویسان وب بیکار شدن؟!
بعلاوه کلی سایت ساز هست. یک نفر که تازه کسب و کارش رو راه انداخته که براش نمیصرفه n تومن خرج برنامه نویس کنه تا یه سایت درست حسابی داشته باشه که کلی فیچر داشته باشه سایتش و بتونه سرویس های مختلف رو داشته باشه پس بهتره از وایب کدینگ و وردپرس و ... بهره مند بشه.
اما وقتی بحث سازمان باشه (یعنی کسب و کاری که جا افتاده و دیگه در حال توسعه است) استفاده از این ابزار ها نه تنها بصرفه و کارآمد نیست بعلاوه کلی ریسک داره!

با این حال، کُدر(توجه کنید به تفاوت واژه کدر و برنامه نویس) که فقط به حفظ سینتکس و نوشتن کدهای ساده متکی هستن یعنی قوای حل مساله و تحلیل رو ندارن، قطعا ممکنه تحت تأثیر قرار بگیرن. در آینده، مهارت‌های تفکر الگوریتمی، حل مسئله، و طراحی سیستم‌های نرم‌افزاری اهمیت خیلی خیلی بیشتری دارن حتی الان هم این بخش‌ها به خلاقیت و مهارت انسانی نیاز دارن.

⁉️آیا باید از وایب کدینگ استفاده کنیم؟

برای افزایش بهره‌وری: وایب کدینگ می‌تونه روند توسعه نرم‌افزار رو سریع‌تر کنه، مخصوصاً برای کارهایی که نیاز به نوشتن کدهای تکراری دارن واقعا نعمته اینجا.

برای یادگیری و تجربه: این ابزارها می‌تونن به یادگیری کمک کنن و کدنویسی رو جذاب‌تر کنن بعنوان مثال نمونه های مختلف پیاده سازی کد رو ببینی.

برای یادگیری اولیه مناسب نیست: اگه یک برنامه‌نویس مبتدی هستید، استفاده‌ی صرف از وایب کدینگ ممکنه درک عمیق مفاهیم برنامه‌نویسی رو کم کنه و در نتیجه مسیر و زمان یادگیری رو طولانی تر کنه.


➡️اشتراک و 👍لایک یادت نره

🌐سایت هولوسن: holosen.net

🆔 اینستاگرام: nulldevelopr


#هوش_مصنوعی #برنامه_نویسی #آنالیز_داده #ماشین_لرنینگ #پایتون #کاتلین #جت_پک #جنگو #آموزش_هوش_مصنوعی #یادگیری_عمیق #شی_گرایی #آموزش_برنامه_نویسی
16
مدیریت استثنا (Exception Handling) چیست؟

مدیریت استثنا فرآیندیه که طی اون برنامه وقتی با اتفاقات ناخواسته یا غیرمنتظره روبه‌رو می‌شه، به‌جای اینکه کرش کنه یا از کار بیفته، به شکل کنترل‌شده بهشون واکنش نشون می‌ده. بدون این مکانیزم، این اتفاقات می‌تونن روند عادی برنامه رو مختل کنن.

به‌طور کلی دو نوع خطا داریم:

1️⃣ خطاهایی که به‌خاطر بد نوشتن برنامه به وجود میان همون خطاهای موقع کامپایل.
2️⃣ خطاهایی که موقع اجرا و به خاطر ورودی کاربر یا شرایط بیرونی ایجاد می‌شن (مثل همون مثال‌های قطع شبکه، فایل نبودن، تقسیم بر صفر و …).

استفاده از exception handling برای پوشوندن خطاهای نوع اول یعنی موقع کامپایل نیست. اما برای خطاهای نوع دوم، استفاده از exception handling عالیه، چون به برنامه اجازه می‌دیم به‌جای اینکه کرش کنه، پیام درست و قابل فهم بده و ادامه بده یا حداقل درست خارج بشه.

📎دلایل زیادی هست که ممکنه یک Exception رخ بده. انقدر زیاد که واقعاً نمی‌شه همه‌شون رو شمرد. مثلاً اینترنت قطع می‌شه، سیستم حافظه کم میاره، سرویسی که بهش وصل شدی شروع می‌کنه به محدود کردن درخواست‌هات، و کلی چیزهای دیگه. واقعاً صدها دلیل مختلف وجود داره.

📌 وقتی تجربه‌ت در برنامه‌نویسی بیشتر می‌شه، کم‌کم یاد می‌گیری پیش‌بینی کنی چه Exceptionهایی ممکنه اتفاق بیفته و اون‌ها رو درست مدیریت کنی. یادت باشه: در اکثر مواقع، Exceptionهایی که رسیدگی نشده باشن، برنامه رو کامل از کار می‌اندازن.

🔖چندنمونه رایج از استثناها

🔺 SQLException → خطا در اجرای دستور SQL

🔺 ClassNotFoundException → پیدا نشدن کلاس مورد نیاز

🔺 IllegalStateException → اجرای یک عملیات در شرایط نامعتبر

🔺 IllegalArgumentException → ارسال آرگومان اشتباه به تابع

🔺 NullPointerException → تلاش برای استفاده از شئ‌ای که null هست

✔️ اما وقتی Exception رو هندل کنیم، می‌تونیم برنامه رو خیلی تمیز و شیک کنترل کنیم. یعنی به‌جای اینکه برنامه بترکه و کاربری که داره از برنامه مون استفاده میکنه عاصی بشه، می‌تونیم یه پیام مناسب مثل «اوه، یه مشکلی پیش اومد، لطفاً دوباره امتحان کنید» نشون بدیم.

⁉️چطور کار میکنه؟
نحوه‌ی کار exception handling به این شکله که ما یه بخشی از کد رو داخل یک بلوک try قرار می‌دیم؛ یعنی مشخص می‌کنیم «این قسمت ممکنه خطا ایجاد کنه». اگه موقع اجرای try یک استثنا رخ بده، کنترل برنامه به بلوک except منتقل می‌شه، جایی که مشخص کردیم با اون خطا چه برخوردی انجام بشه. این سازوکار باعث می‌شه برنامه به‌جای اینکه یکهو هنگ کنه یا بپره بیرون از صفحه، یک رفتار کنترل‌شده‌ای نشون بده، مثلاً نمایش پیام مناسب به کاربر یا اجرای یک مسیر جایگزین. علاوه بر این، در پایتون یا کلا هر زبان شی گرای دیگه می‌تونیم چندتا exception بنویسیم تا برای هر نوع خطا واکنش جداگانه ای تعریف بشه.

برای زمانی که اجرای بخش try بدون خطا پیش می‌ره، از بلوک else استفاده می‌کنیم. این بلوک معمولاً برای کدی به‌کار می‌ره که فقط در صورت موفقیت‌آمیز بودن مرحله‌ی قبل باید اجرا بشه؛ مثل نشون دادن نتیجه‌ی پردازش یا ادامه‌ی جریان اصلی برنامه. در کنار این‌ها، بلوک finally همیشه اجرا می‌شه؛ چه خطایی رخ داده باشه چه نه. این بخش معمولاً برای انجام کارهای پایانی یا پاک‌سازی به‌کار می‌ره، مثل بستن فایل‌ها، آزاد کردن منابع، یا ثبت یک پیام پایانی.

جمع‌بندی:
Exception یه خطای زمان اجراست که برنامه نمی‌تونه ورودی یا شرایط خاصی رو مدیریت کنه و ممکنه باعث خروج ناخواسته بشه.
Exception handling یعنی برنامه‌نویس از قبل حدس می‌زنه چه خطاهایی ممکنه رخ بدن، و مشخص می‌کنه برنامه باید در اون شرایط چه‌کاری انجام بده، از گرفتن ورودی جدید گرفته تا نمایش یک پیام واضح و خروج منظم بدون اینکه برنامه غیرمنتظره بسته بشه.


➡️اشتراک و 👍لایک یادت نره

🌐سایت هولوسن: holosen.net

🆔 اینستاگرام: nulldevelopr


#برنامه_نویسی #مدیریت_استثنا #شی_گرایی #پایتون #کاتلین #جت_پک #جنگو #آموزش_برنامه_نویسی #یادگیری_عمیق #جاوا #oop
10
❇️ پایتون چهار کلمه‌ی کلیدی اصلی برای مدیریت استثناها داره: try, except, else و finally. هرکدوم نقش مشخصی دارن. ساختار کلی (Syntax) به این شکل هست:

try:
# کدی که ممکنه خطا بده

except SomeException:
# واکنش به خطای مشخص‌شده

except:
# واکنش به هر خطای دیگه (اختیاری)

else:
# اجرا می‌شه فقط اگر هیچ خطایی در try رخ نده

finally:
# اجرا می‌شه در هر حالت (با خطا یا بدون خطا)


🧩 یک مثال مدیریت استثنا با زبان پایتون:

try:
n = 0
res = 100 / n

except ZeroDivisionError:
print("نمیتونی یه عدد رو به صفر تقسیم کنی!")

except ValueError:
print("عدد درست وارد کن!")

else:
print("نتیجه:", res)

finally:
print("عملیات با موفقیت انجام شد.")


📌توضیحات مثال بالا:

این کد مدیریت استثنا رو با استفاده از try / except / else / finally نشون می‌ده. بریم بخش‌به‌بخش توضیحش بدیم:


۱. بخش try

try:
n = 0
res = 100 / n



اینجا کدی قرار گرفته که ممکنه خطا بده.
در اینجا n = 0 هست و برنامه تلاش می‌کنه:

100 / 0


که این کار باعث ZeroDivisionError می‌شه (تقسیم بر صفر مجاز نیست).


۲. بخش except ZeroDivisionError

except ZeroDivisionError:
print("نمیتونی یه عدد رو به صفر تقسیم کنی!")



وقتی خطای تقسیم بر صفر رخ می‌ده، برنامه به این بخش می‌ره و این پیام رو چاپ می‌کنه:

 نمیتونی یه عدد رو به صفر تقسیم کنی!


یعنی جلوی کرش کردن برنامه گرفته می‌شه.


۳. بخش except ValueError

except ValueError:
print("عدد درست وارد کن!")



این بلوک برای زمانی‌ه که ورودی نامعتبر باشه و خطای ValueError رخ بده.
ولی در این مثال چنین خطایی رخ نمی‌ده.


۴. بخش else

else:
print("نتیجه:", res)


این بخش فقط زمانی اجرا می‌شه که هیچ خطایی در try رخ نداده باشه.
اما چون اینجا خطا داشتیم، این بخش اجرا نمی‌شه.



۵. بخش finally

python
finally:
print("عملیات با موفقیت انجام شد.")

این بخش همیشه اجرا می‌شه چه خطا رخ بده چه نده.

پس خروجی آخر اینه:

عملیات با موفقیت انجام شد.




خروجی نهایی برنامه


با توجه به اینکه تقسیم بر صفر انجام شده، خروجی:

نمیتونی یه عدد رو به صفر تقسیم کنی!
عملیات با موفقیت انجام شد.


➡️اشتراک و 👍لایک یادت نره

🌐سایت هولوسن: holosen.net

🆔 اینستاگرام: nulldevelopr


#برنامه_نویسی #مدیریت_استثنا #شی_گرایی #پایتون #کاتلین #جت_پک #جنگو #آموزش_برنامه_نویسی #یادگیری_عمیق #جاوا #oop
12
*️⃣ مولتی‌تردینگ در برنامه نویسی این امکان رو می‌ده که چندتا ترد (واحدهای کوچیک‌تر یه پروسه) هم‌زمان اجرا بشن و این باعث می‌شه چندکارگی به‌صورت مؤثر انجام بشه.
این موضوع مخصوصاً برای کارهای I/O-bound خیلی کاربردیه؛ مثل کار با فایل‌ها، درخواست‌های شبکه‌ای یا تعامل‌های کاربر.

🆚فرق پروسه (Process) و ترد (Thread) چیه؟

پروسه یه برنامه‌ی در حال اجرائه که شامل ایناس:

✔️ کد برنامه (دستوراتی که باید اجرا بشن)

✔️ دیتا (متغیرها، بافرها، فضای کاری)

✔️ کانتکست اجرایی (وضعیت فعلی پروسه)

در صورتی که:

✔️ ترد کوچک‌ترین واحد اجرای داخل یه پروسه‌س.

✔️ یه پروسه می‌تونه چندتا ترد داشته باشه.

✔️ تردها کد و دیتای گلوبال مشترک دارن، ولی رجیسترها و متغیرهای محلی خودشون (استک) رو دارن.

✔️ می‌تونیم به ترد به چشم یه «زیرپروسه‌ی سبک» نگاه کنیم.

⁉️ مولتی‌تردینگ چجوری کار می‌کنه؟

تو CPU‌های تک‌هسته‌ای، از چیزی به اسم تعویض کانتکست استفاده می‌کنه (یعنی سریع بین تردها جابه‌جا می‌شه). همین باعث می‌شه تردها انگار موازی اجرا می‌شن، درحالی‌که واقعی موازی نیستن. وجود چندتا ترد کمک می‌کنه یه‌سری کارها تو پس‌زمینه انجام بشه بدون اینکه برنامه‌ی اصلی قفل کنه یا منتظر بمونه.


❇️ مثال تردینگ تو پایتون

پایتون یه ماژول به اسم threading داره که باهاش می‌تونیم ترد بسازیم و مدیریت کنیم.

مراحل ساخت و اجرای تردها

۱. ایمپورت کردن ماژول

import threading


۲. ساختن تردها

t1 = threading.Thread(target=func1, args=(...,))
t2 = threading.Thread(target=func2, args=(...,))


۳. شروع کردن تردها

t1.start()
t2.start()


۴. صبر کردن تا کارشون تموم بشه

t1.join()
t2.join()


مثال:

import threading
import time

def square(num):
print(f"Square: {num*num}")
time.sleep(1)

def cube(num):
print(f"Cube: {num*num*num}")
time.sleep(1)

t1 = threading.Thread(target=square, args=(4,))
t2 = threading.Thread(target=cube, args=(4,))

t1.start()
t2.start()
t1.join()
t2.join()

print("Done!")


چون هر دو ترد (t1 و t2) هم‌زمان اجرا می‌شن، ترتیب اجرای خروجی ثابت نیست. خروجی ممکنه این شکلی باشه:

Square: 16
Cube: 64
Done!



ThreadPoolExecutor (مدیریت ساده‌تر تردها)

ماژول ThreadPoolExecutor از concurrent.futures کار مدیریت تردهای زیاد رو ساده‌تر می‌کنه، چون دیگه لازم نیست تردها رو دستی بسازیم.

مثال:

from concurrent.futures import ThreadPoolExecutor

def worker(task):
print(f"Task {task} running")

# Create a thread pool with 2 workers
with ThreadPoolExecutor(max_workers=2) as executor:
# Submit two tasks to run in parallel
executor.submit(worker, 1)
executor.submit(worker, 2)


توضیح:

🔹 یه Thread Pool با دو تا worker ساخته می‌شه.
🔹 دو تا تسک هم‌زمان ارسال می‌شن.
🔹 هر تسک یه پیام پرینت می‌کنه (مثل: Task 1 running).
🔹 مدیریت اجرا و بستن تردها رو خودش انجام می‌ده و به‌طور خودکار بسته می‌شه.


➡️اشتراک و 👍لایک یادت نره

🌐سایت هولوسن: holosen.net

🆔 اینستاگرام: nulldevelopr


#برنامه_نویسی #مولتی_ترد #شی_گرایی #پایتون #کاتلین #جت_پک #جنگو #آموزش_برنامه_نویسی #یادگیری_عمیق #جاوا #چند_نخی #همزمانی
10
دیتابیس چیه؟
دیتابیس یا پایگاه داده، مجموعه‌ای سازمان‌یافته از داده‌هاست که برای ذخیره، بازیابی و دستکاری اطلاعات به‌صورت کارآمد طراحی شده.دیتابیس مثل یه مخزن مرکزی عمل می‌کنه که به چند تا کاربر یا برنامه اجازه می‌ده داده‌ها رو دسترسی، مدیریت و آپدیت کنن.

⁉️ خب همین جمله یعنی چی؟
فرض کن بخوایم یه اپ بسازیم، یه فروشگاه آنلاین راه بندازیم یا حتی یه بازی ساده درست کنیم، یه جایی باید باشه که همه‌ی اطلاعات مهم ذخیره بشه. مثل اسم کاربرا، پسوردها، محصولات، تراکنش‌ها، پیام‌ها و هر چی که فکرشو بکنی که مشتری بتونه با اطلاعاتی که ثبت کرده وارد پنلش بشه، خرید کنه، پسوردشو تغییر بده و ...

🔶 انواع دیتابیس چیا هستن؟
به‌طور کلی، دیتابیس‌ها به دو نوع اصلی تقسیم می‌شن:
Relational (SQL) و NoSQL.
❗️دیتابیس‌های NoSQL خودشون به چهار نوع تقسیم می‌شن: Document-oriented، Key-Value، Wide-Column و Graph.

🧩 دیتابیس ها چطوری کار میکنن؟

در قلب هر سیستم دیتابیس، یه نرم‌افزار به نام DBMS (سیستم مدیریت پایگاه داده) وجود داره که بین کاربر و خود داده‌ها واسطه می‌شه. مثلاً فرض کن تو می‌خوای توی سایتت اسم کاربرت رو سرچ کنی. در واقع تو داری یه درخواست به دیتابیس می‌فرستی، DBMS اون درخواست رو می‌گیره، می‌ره بین داده‌ها می‌گرده، نتیجه رو پیدا می‌کنه و بهت نشون می‌ده.

🎯 کارهای اصلی DBMS:
1.ذخیره و سازمان‌دهی داده‌ها
2.کنترل سطح دسترسی (کی چی رو ببینه)
3.انجام کوئری‌ها (جست‌وجو یا ویرایش داده‌ها)
4.پشتیبان‌گیری، بازیابی و حفظ امنیت

🆓 آموزش رایگان دیتابیس👇

🏅 دوره طلایی دیتابیس رایگان

➡️اشتراک و 👍لایک یادت نره

🌐سایت هولوسن: holosen.net

🆔 اینستاگرام: nulldevelopr


#هوش_مصنوعی #برنامه_نویسی #آنالیز_داده #ماشین_لرنینگ #پایتون #کاتلین #جت_پک #جنگو
9😍1
NullDeveloper
پستارو با لایک و اشتراک گذاری حمایت کنید هزارتا که شدیم سوالات استخدامی رو میذارم انواع سوالاتی که تو مصاحبه ها در لول های مختلف ازتون میپرسن😎
رفقا هزار تایی شدیم و تا چند ساعت آینده سوالات استخدامی رو میذارم براتون
❤️🥳😍
دمتون گرم😍❤️
10👏1
EmploymentInterviewQuestions.pdf
5.1 MB
سوالات استخدامی برنامه نویس ها

#استخدام #برنامه_نویسی #بازار_کار
💯52🙏1
❗️یکی از اصلی‌ترین ترین دغدغه های کسایی که تازه برنامه نویسی رو شروع کردن اینه که چطور پروژه‌های مختلف رو تحلیل کنن و کدش رو بزنن، یعنی سینتکس رو بلدن ولی نمی‌تونن پروژه رو بزنن.

این مشکل فقط با تکرار و تمرین و حل مسائل مختلف رفع می‌شه!

🎯 یک ریپازیتوری عالی گیت هاب براتون می‌ذارم که این مشکل رو رفع می‌کنه. کلی پروژه اپن سورسِ رایگان داره در زمینه‌های مختلف. وارد لینکش بشید و زبانی که باهاش کار می‌کنید ( پایتون، جاوا، PHP و ...) رو انتخاب کنید.
کلی پروژه هست که هرکس با توجه به سطح و نیازش می‌تونه بره سراغ اون پروژه ها.🔥

لینک ریپازیتوری

یادتون نره با اشتراک گذاری و لایک حمایت کنید از پست ها.❤️


🌐سایت هولوسن: holosen.net

🆔 اینستاگرام: nulldevelopr


#برنامه_نویسی #پروژه #شی_گرایی #پایتون #کاتلین #جت_پک #جنگو #آموزش_برنامه_نویسی #یادگیری_عمیق #جاوا #پروژه_برنامه_نویسی
8👏1😍1
❇️ CRUD
یعنی چهار کاری که هر برنامه برای مدیریت اطلاعات باید بتونه انجام بده: ایجاد، خواندن، به‌روزرسانی و حذف.
این کارها پایه و اساس کار با داده‌ها هستن و معمولاً یه برنامه شامل سه بخشه:
سرور یا API که داده‌ها رو پردازش می‌کنه، پایگاه داده که اطلاعات رو ذخیره و بازیابی می‌کنه و رابط کاربری که کاربر باهاش کار می‌کنه.
با این چهار عمل، کاربر می‌تونه داده‌ها رو بسازه، ببینه، تغییر بده یا پاک کنه، و این کار می‌تونه با هر زبان برنامه‌نویسی حتی سمت کاربر هم انجام بشه.

🔷 Create (ایجاد):
عملیاتی که داده‌های جدید را وارد سیستم می‌کند، مثل ساخت حساب کاربری جدید، آپلود یک عکس یا ثبت یک سفارش.

🔶 Read (خواندن):

عملیاتی که داده‌های موجود را از سیستم بازیابی می‌کند، مثل جستجوی یک محصول، مشاهده پروفایل یا تولید یک گزارش.

🔷 Update (به‌روزرسانی):
عملیاتی که داده‌های موجود را تغییر می‌دهد بدون اینکه رکورد جدیدی ساخته شود، مثل ویرایش اطلاعات پروفایل، تغییر رمز عبور یا به‌روزرسانی موجودی انبار.

🔶 Delete (حذف)
عملیاتی که داده‌های غیرضروری یا ناخواسته را از سیستم پاک می‌کند، مثل حذف یک ‏ پست در شبکه اجتماعی، لغو سفارش یا آرشیو کردن رکوردهای قدیمی.

فرض کن یه جدول داریم به اسم patients برای بیماران در سیستم نوبت‌دهی دندان‌پزشکی:

CREATE TABLE patients (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100),
phone VARCHAR(15),
age INT
);


حالا چهار عملیات CRUD رو با کوئری‌های SQL ببین 👇

🟢 1. CREATE → اضافه کردن داده جدید

INSERT INTO patients (name, phone, age)
VALUES ('Ali Ahmadi', '09121234567', 28);


📘 این کوئری یک بیمار جدید به جدول اضافه می‌کنه.


🔵 2. READ → خواندن داده‌ها (نمایش)

SELECT * FROM patients;


📘 همه بیماران رو نمایش می‌ده.
یا مثلاً برای نمایش یک بیمار خاص:

SELECT * FROM patients WHERE id = 1;



🟠 3. UPDATE → ویرایش داده‌ها

UPDATE patients
SET phone = '09129876543', age = 29
WHERE id = 1;


📘 شماره تلفن و سن بیمار با id = 1 تغییر می‌کنه.


🔴 4. DELETE → حذف داده‌ها

DELETE FROM patients WHERE id = 1;


📘 بیمار با شناسه ۱ حذف می‌شه.


🆓 آموزش رایگان دیتابیس👇

🏅 دوره طلایی دیتابیس رایگان

➡️اشتراک و 👍لایک یادت نره

🌐سایت هولوسن: holosen.net

🆔 اینستاگرام: nulldevelopr


#هوش_مصنوعی #برنامه_نویسی #آنالیز_داده #ماشین_لرنینگ #پایتون #کاتلین #جت_پک #جنگو
5🔥5
کتاب آموزش پایتون از صفر مطلق🔥
رونمایی شد😍🥳

💰۲۰۰ هزار تومان تخفیف رونمایی
و
🆓 ارسال رایگان

همین الان بزن👇

🔗 دریافت کتاب

🌐سایت هولوسن: holosen.net

🆔 اینستاگرام: nulldevelopr


#هوش_مصنوعی #برنامه_نویسی #آنالیز_داده #ماشین_لرنینگ #پایتون #کاتلین #جت_پک #جنگو #آموزش_هوش_مصنوعی
5👏1👌1
❇️ کلین کد به نوشتن کدی گفته می‌شه که راحت قابل فهم باشه، نگه‌داریش آسون باشه و بشه راحت تغییرش داد. تمرکزش روی خوانایی، سادگی و شفافیت هست، طوری که همکاری چند تا برنامه‌نویس روی یه کد راحت‌تر بشه. کلین کد از یه‌سری اصول و روش‌ها پیروی می‌کنه، مثل استفاده از اسم‌های معنادار برای متغیرها، فرمت‌بندی یکدست و طراحی ماژولار.

⁉️کد رو می‌شه به هر شکلی نوشت. یعنی چی؟
رض کن میخوایم از تهران بریم مشهد. فارغ از اینکه بخوایم به وسیله حمل و نقل فکر کنیم، چند جور راه داریم که بریم؟
می‌تونیم هزارتا راه مختلف بشماریم. می‌تونیم مستقیم با هواپیما از تهران بریم مشهد، یا مثلاً با ماشین بریم یه شهر دیگه، بعد از اون‌جا دوباره مسیر رو عوض کنیم و آخرش به مشهد برسیم. در نهایت به هر حال ممکنه به مشهد برسیم. اما…

اگه راه دوم رو انتخاب کنیم، باید پول بیشتری خرج کنیم، ۳–۴ برابر بیشتر زحمت بکشیم، خیلی خسته می‌شیم، مجبور می‌شیم تصمیم‌های زیادی بگیریم (ممکنه بارها توی مسیر یا نقشه راه اشتباه بریم)، و اگه همسفر داشته باشیم، احتمالاً باید مدام حواسمون به مسیر و راهنمایی اون هم باشه.

تو این مثال، ما یه راهی رو می‌خوایم که کمترین زحمت و کمترین هزینه رو داشته باشه، تو دنیای نرم‌افزار، برای این موضوع یه‌سری اصول داریم.

اصول نرم‌افزاری (Software Principles) راهنماها یا مفاهیم پایه‌ای هستن که طراحی و توسعه‌ی نرم‌افزار باکیفیت رو ممکن می‌کنن. این اصول یه چارچوب می‌دن برای تصمیم‌گیری درباره‌ی معماری، طراحی و پیاده‌سازی.

📌چند تا اصل مهم در نوشتن کد که کارمون رو خیلی راحت‌تر می‌کنن:

✔️ اصول SOLID

هر برنامه‌نویسی باید این پنج اصل طراحی رو بدونه. این اصول برای هدایت طراحی و توسعه‌ی نرم‌افزار به‌کار می‌رن تا کدی تولید بشه که قابل نگه‌داری‌تر، منعطف‌تر و مقیاس‌پذیرتر باشه. هر کدوم از این اصول روی یه بخش خاص از طراحی نرم‌افزار تمرکز دارن، اما در کنار هم کمک می‌کنن سیستم‌هایی ساخته بشن که با گذشت زمان راحت‌تر فهمیده، تغییر داده و گسترش داده بشن.

Single Responsibility Principle (SRP):
«هر کلاس فقط باید یه دلیل برای تغییر داشته باشه.»
یعنی یه کلاس نباید چند تا مسئولیت مختلف داشته باشه، و یه مسئولیت هم نباید بین چند کلاس پخش بشه یا با مسئولیت‌های دیگه قاطی بشه. خیلی منطقی‌تره که توی یه شرکت هرکسی وظیفه‌ی خودش رو داشته باشه، نه این‌که مدیر، کارمند، راننده و آشپز همه یه نفر باشن.

Open/Closed Principle (OCP):
«موجودیت‌های نرم‌افزاری باید برای توسعه باز باشن، ولی برای تغییر بسته.»
این اصل می‌گه کلاس باید طوری باشه که بشه بهش قابلیت اضافه کرد، بدون این‌که لازم باشه پیاده‌سازی اصلیش رو تغییر بدیم.
آیا برای اضافه کردن یه بالکن به خونه‌م، لازمه کل فونداسیون خونه رو بکنم و عوض کنم؟

Liskov Substitution Principle (LSP):
«هر جا که از یه کلاسِ پدر استفاده می‌شه، باید بشه بدون دردسر از کلاسِ فرزندش هم استفاده کرد، بدون این‌که رفتار برنامه خراب بشه.»
اگه یه برنامه یا ماژول داره از یه کلاس پایه استفاده می‌کنه، کلاس مشتق‌شده باید بتونه اون رو گسترش بده بدون این‌که رفتار اصلیش رو تغییر بده.
به عنوان یه مثال خیلی ساده از دنیای واقعی، فرض کن مفهومی به اسم «پرنده» داریم. پرنده می‌تونه حرکت کنه و بعضی از پرنده‌ها هم می‌تونن پرواز کنن. حالا اگه بیایم این فرض اشتباه رو بکنیم که «هر پرنده‌ای می‌تونه پرواز کنه»، بعد پنگوئن رو هم به عنوان یه پرنده وارد سیستم کنیم، کل منطق به‌هم می‌ریزه؛ چون پنگوئن پرنده هست، اما توانایی پرواز نداره. توی این حالت، وقتی جایی از برنامه انتظار پرنده‌ای رو داره که پرواز کنه، پنگوئن نمی‌تونه جای اون قرار بگیره و این دقیقاً نقض اصل Liskov Substitution Principle محسوب می‌شه.

Interface Segregation Principle (ISP):
«کلاینت‌ها نباید مجبور باشن به اینترفیس‌هایی وابسته باشن که ازشون استفاده نمی‌کنن.»
هیچ کلاینتی نباید مجبور بشه متدهایی رو پیاده‌سازی کنه که بهشون نیازی نداره، و قراردادها باید به اینترفیس‌های کوچیک‌تر و سبک‌تر شکسته بشن.
یه پرنده می‌تونه پرواز کنه، پرنده یه حیوانه، پس همه حیوان‌ها باید پرواز کنن؟
آیا همه‌ی حیوان‌ها می‌تونن پرواز کنن؟

Dependency Inversion Principle (DIP):
«ماژول‌های سطح بالا نباید به ماژول‌های سطح پایین وابسته باشن؛ هر دو باید به abstraction وابسته باشن.»
این اصل می‌گه اجزای نرم‌افزار نباید به‌شدت به هم وابسته باشن و برای جلوگیری از این موضوع، باید به abstraction وابسته باشن.
طراحی ماشین که به آپشن‌ها و متعلقاتش وابسته نیست، درسته؟

➡️اشتراک و 👍لایک یادت نره

🌐سایت هولوسن: holosen.net

🆔 اینستاگرام: nulldevelopr


#هوش_مصنوعی #برنامه_نویسی #آنالیز_داده #ماشین_لرنینگ #پایتون #کاتلین #جت_پک #جنگو
5👍1
✔️ YAGNI (You Ain’t Gonna Need It)

YAGNI می‌گه قابلیت‌ها رو تا وقتی واقعاً بهشون نیاز نداری، پیاده‌سازی نکن، چون فقط پیچیدگی الکی ایجاد می‌کنن و تمرکز رو از نیازهای فعلی می‌گیرن.
من می‌خوام برم مشهد، ولی دارم چمدون رو برای سفر به اصفهان می‌بندم، شاید یه روزی برم اون‌جا.
الان واقعاً لازم دارم؟

✔️ KISS (Keep It Simple, Stupid)

KISS سادگی رو توی طراحی و توسعه تشویق می‌کنه و راه‌حل‌های ساده و سرراست رو به راه‌حل‌های پیچیده ترجیح می‌ده، تا فهم و نگه‌داری کد راحت‌تر بشه.
قطعا رفتن به مشهد با هواپیما خیلی ساده‌تر از رفتن با ماشینه!

✔️ DRY (Don’t Repeat Yourself)

DRY روی جلوگیری از تکرار کد یا منطق تأکید داره و باعث می‌شه کد تمیزتر و قابل نگه‌داری‌تری داشته باشیم.
آیا برای هر سفر باید یه چمدون جدید بخریم؟


➡️اشتراک و 👍لایک یادت نره

🌐سایت هولوسن: holosen.net

🆔 اینستاگرام: nulldevelopr


#هوش_مصنوعی #برنامه_نویسی #آنالیز_داده #ماشین_لرنینگ #پایتون #کاتلین #جت_پک #جنگو
7🔥1
🧩JSON (مخفف JavaScript Object Notation) و XML (مخفف Extensible Markup Language) هر دو فرمت‌هایی هستن که برای ساختاردهی و رد و بدل کردن داده استفاده می‌شن.
JSON از ساختار کلید-مقدار استفاده می‌کنه و XML از ساختار تگ‌محور، تا فرمت‌ها مستقل از پلتفرم باشن.
JSON و XML هر دو فرمت سریال‌سازی داده هستن. یعنی بهمون اجازه می‌دن داده‌ها رو به شکل استاندارد بین برنامه‌ها، پلتفرم‌ها یا سیستم‌های مختلف جابه‌جا کنیم.

📌زبان‌های برنامه‌نویسی و پلتفرم‌های مختلف، یه داده‌ی یکسان رو به شکل‌های متفاوتی نمایش می‌دن. مثلا یه برنامه‌ی جاوا از یه آبجکت داده استفاده می‌کنه، ولی یه برنامه‌ی پایتون از دیکشنری برای نگه داشتن اطلاعات همون موجودیت دنیای واقعی استفاده می‌کنه.
برای اینکه بتونیم داده رو بین اینا رد و بدل کنیم، می‌تونیم این کارها رو انجام بدیم:

1️⃣آبجکت جاوا رو به XML یا JSON تبدیل کنیم.

2️⃣فایل XML یا JSON رو از طریق شبکه بفرستیم.

3️⃣XML یا JSON رو دوباره به دیکشنری پایتون تبدیل کنیم.

JSON (JavaScript Object Notation)
JSON یه سینتکس ساده و سرراست داره که بر پایه‌ی جفت‌های کلید-مقداره، برای همین خوندن و نوشتنش برای آدما خیلی راحته.
JSON نسبت به XML سبک‌تره، در نتیجه سریع‌تر پردازش می‌شه و حجم داده‌ای که جابه‌جا می‌کنه کمتره.

{"Holosenia":[ 
{ "firstName":"Hosein", "lastName":"Badrnezhad" },
{ "firstName":"Ali", "lastName":"Ahmadi" },
{ "firstName":"Zaha", "lastName":"Amini" },
]}



XML (Extensible Markup Language)
XML خیلی قابل گسترشه و به برنامه‌نویس‌ها اجازه می‌ده تگ‌ها و ساختارهای دلخواه خودشون رو بسته به نیاز تعریف کنن.
همچنین پشتیبانی قوی‌ای از XML Schema Definition یا همون XSD داره که باعث می‌شه اعتبارسنجی دقیق و بررسی صحت داده‌ها راحت‌تر انجام بشه.

<Holosenia> 
<HolosenMember>
<firstName>Hosein</firstName> <lastName>Badrnezhad</lastName>
</HolosenMember>
<HolosenMember>
<firstName>Ali</firstName> <lastName>Ahmadi</lastName>
</HolosenMember>
<HolosenMember>
<firstName>Zahra</firstName> <lastName>Amini</lastName>
</HolosenMember>
</Holosenia>



🆚 تفاوت‌های JSON و XML

🔹JSON مخفف JavaScript Object Notation هست
🔸XML مخفف Extensible Markup Language هست

🔹JSON بر پایه‌ی زبان جاوااسکریپته
🔸XML از SGML گرفته شده

🔹JSON روشی برای نمایش آبجکت‌هاست
🔸XML یه زبان نشانه‌گذاریه و با ساختار تگ‌دار داده‌ها رو نمایش می‌ده

🔹JSON از namespace پشتیبانی نمی‌کنه
🔸XML از namespace پشتیبانی می‌کنه

🔹JSON از آرایه پشتیبانی می‌کنه
🔸XML به‌صورت مستقیم از آرایه پشتیبانی نمی‌کنه

🔹فایل‌های JSON نسبت به XML خیلی راحت‌تر خونده می‌شن
🔸خوندن و تفسیر فایل‌های XML سخت‌تره

🔹JSON تگ پایانی نداره
🔸XML تگ شروع و پایان داره

🔹JSON امنیت کمتری داره
🔸XML نسبت به JSON امن‌تره

🔹JSON از کامنت پشتیبانی نمی‌کنه
🔸XML از کامنت پشتیبانی می‌کنه

🔹JSON فقط از encoding UTF-8 پشتیبانی می‌کنه
🔸XML از چندین نوع encoding پشتیبانی می‌کنه

🕰 کی از JSON استفاده کنیم و کی از XML؟

از JSON وقتی استفاده میکنیم که:

- سرعت و سادگی برامون مهمه

- میخوایم اپلیکیشن‌های وب مدرن یا API بسازیم

از XML وقتی استفاده میکنیم که:

- به اعتبارسنجی قوی یا قابلیت گسترش بالا نیاز داریم

- با سیستم‌های قدیمی یا گردش‌کارهای مبتنی بر سند سر و کار داریم


➡️اشتراک و 👍لایک یادت نره

🌐سایت هولوسن: holosen.net

🆔 اینستاگرام: nulldevelopr


#هوش_مصنوعی #برنامه_نویسی #آنالیز_داده #ماشین_لرنینگ #پایتون #کاتلین #جت_پک #جنگو #آموزش_برنامه_نویسی #XML #JSON #جاوا
7👏2
یه کامپیوتر چند تا منبع اصلی در اختیار برنامه‌ها و کاربرا می‌ذاره.
سیستم‌عامل این منابع رو مدیریت می‌کنه تا هم استفاده ازشون بهینه باشه، هم امنیت حفظ بشه و هم همه به‌صورت منصفانه بهشون دسترسی داشته باشن.
وقتی توی یه برنامه متغیر تعریف می‌کنیم، از یه کلاس instance می‌سازیم، تابع صدا می‌زنیم یا حتی یه thread جدید ایجاد می‌کنیم، همه‌ی این کارها نیاز به حافظه دارن و هر کدوم یه بخشی از رم رو اشغال می‌کنن. برای همین خیلی مهمه که یه برنامه‌نویس بدونه حافظه‌ای که در اختیار داره چطوری کار می‌کنه و قراره کجا استفاده بشه.
به‌طور کلی، موقع اجرای برنامه با دو نوع حافظه‌ی اصلی سر و کار داریم: Stack و Heap.
هر کدوم از این دوتا یه کاربرد جدا دارن و برای نگه‌داری نوع خاصی از داده‌ها در طول اجرای برنامه به کار می‌رن.

🔹CPU (واحد پردازش مرکزی)

CPU همون بخشیه که دستورات رو اجرا می‌کنه و روند اجرای برنامه رو کنترل می‌کنه؛ یعنی می‌گه کد از کجا شروع بشه، کِی کدوم تابع اجرا بشه و جریان برنامه چطوری جلو بره.

🔹حافظه اصلی (RAM)

RAM جاییه که هم Stack داخلش قرار داره هم Heap.
به بخش‌هایی از RAM که فقط موقع اجرای برنامه استفاده می‌شن می‌گن volatile memory، یعنی با خاموش شدن برنامه یا سیستم، اطلاعاتش از بین می‌ره.

❇️ متغیرهای Global و Static

همه‌ی متغیرهای global و static که توی کدمون تعریف می‌کنیم، داخل بخشی به اسم Data Segment ذخیره می‌شن.

مثلاً:

int global_var;        // داخل data segment
static int static_var = 10; // اینم همون‌جا



این بخش از حافظه:

✔️موقع شروع برنامه ساخته می‌شه

✔️موقع پایان برنامه از بین می‌ره

✔️به‌صورت خودکار پاک می‌شه

✔️اندازه‌ش ثابته

✔️اندازه‌ش موقع کامپایل و بر اساس تعداد متغیرهای global، static و string literalها مشخص می‌شه

Stack

Stack بخشی از حافظه‌ست که برای نگه‌داری این چیزها استفاده می‌شه:

✔️متغیرهای محلی

✔️پارامترهای توابع

✔️اطلاعات مربوط به فراخوانی توابع (مثل آدرس برگشت)

Stack با الگوریتم LIFO کار می‌کنه، یعنی «آخرین ورودی، اولین خروجی».

⁉️Call Stack چیه؟

Call Stack یه ساختاره که ردگیری می‌کنه چه توابعی پشت سر هم صدا زده شدن.
هر بار که یه تابع اجرا می‌شه، یه stack frame جدید می‌ره روی Stack.
وقتی تابع تموم می‌شه، stack frame مربوط بهش برداشته می‌شه.

فرض کن این کد رو داریم:
function one(){
// وقتی one صدا زده می‌شه
// یه stack frame جدید برای one ساخته می‌شه
two();
}

function two() {
// frame تابع two میاد روی frame تابع one
three();
}

function three() {
// frame تابع three میاد بالاتر از two
console.trace("Call Stack");
// این خط کل Call Stack رو نشون می‌ده
// ترتیبش: three -> two -> one
}
// بعد از تموم شدن three، frame اون حذف می‌شه
// بعد two حذف می‌شه
// بعد one حذف می‌شه
// و Stack خالی می‌شه



❗️نکته مهم اینه که:

🔹 داده‌های Stack فقط تا وقتی تابع در حال اجراست وجود دارن

🔹 Stack خودش با صدا زدن و تموم شدن توابع بزرگ و کوچیک می‌شه

🔹 لازم نیست دستی حافظه Stack رو آزاد کنیم

↪️ Pointer و Stack


Pointerها متغیرهایی هستن که آدرس حافظه رو نگه می‌دارن.

وقتی یه تابع تموم می‌شه:
1- همه متغیرهای Stack مربوط بهش از بین می‌رن

2- stack pointer برمی‌گرده عقب

اگه از داخل یه تابع، آدرس یه متغیر محلی رو برگردونیم، خیلی خطرناکه:

int* foo() {
int local = 42; // روی stack
return &local; // اشاره به متغیر stack (خطرناک!)
}
// اینجا local از بین رفته و pointer نامعتبره



❗️Stack اندازه‌ی محدودی داره که توسط سیستم‌عامل تعیین می‌شه (معمولاً چند صد کیلوبایت تا چند مگابایت برای هر thread).
اگه بیشتر از حدش استفاده کنیم ، Stack Overflow اتفاق می‌افته.

➡️اشتراک و 👍لایک یادت نره

🌐سایت هولوسن: holosen.net

🆔 اینستاگرام: nulldevelopr


#هوش_مصنوعی #برنامه_نویسی #آنالیز_داده #ماشین_لرنینگ #پایتون #کاتلین #جت_پک #جنگو #آموزش_برنامه_نویسی #XML #JSON #جاوا #heap #stack
2
Heap
هیپHeap یه بخش بزرگ از حافظه‌ست که برای تخصیص داینامیک استفاده می‌شه؛ یعنی داده‌هایی که اندازه‌شون از قبل مشخص نیست یا قراره عمرشون بیشتر از اجرای یه تابع باشه داخل این بخش ذخیره می‌شن. توی Heap معمولاً خود برنامه‌نویس حافظه رو می‌گیره، مثلاً با malloc یا new، و در زبان‌هایی مثل C و C++ باید خودش هم حافظه رو آزاد کنه با free یا delete، اما توی زبان‌های managed مثل Java یا Python این کار به عهده‌ی Garbage Collector گذاشته می‌شه. Heap نسبت به Stack فضای خیلی بزرگ‌تری داره و معمولاً objectها، ساختارهای داده‌ی بزرگ مثل آرایه‌ها و linked listها و همین‌طور داده‌هایی که باید بین چند تابع یا حتی چند thread به اشتراک گذاشته بشن توش قرار می‌گیرن. هر thread یه Stack اختصاصی برای خودش داره، اما Heap یه فضای مشترکه که همه‌ی threadها بهش دسترسی دارن، به همین خاطر مدیریت درستش خیلی مهمه تا جلوی مشکلاتی مثل memory leak یا خراب شدن داده‌ها گرفته بشه.

📌 مثال Heap و Stack با کلاس Person
class Person {
int id; // فیلدهای کلاس
String name; // این فیلدها داخل Heap ذخیره می‌شن

public Person(int id, String name) {
// این سازنده وقتی صدا زده می‌شه
// یه stack frame جدید براش ساخته می‌شه

this.id = id;
// مقدار primitive مستقیماً داخل شیء در Heap ذخیره می‌شه

this.name = name;
// name یه reference هست
// به String داخل Heap (string pool) اشاره می‌کنه
}
}

public class PersonBuilder {

private static Person buildPerson(int id, String name) {
// وقتی این تابع صدا زده می‌شه
// یه frame جدید روی Stack ساخته می‌شه

return new Person(id, name);
// خود شیء Person روی Heap ساخته می‌شه
// reference اون برمی‌گرده
}

public static void main(String[] args) {

int id = 23;
// متغیر primitive
// مقدارش مستقیم روی Stack ذخیره می‌شه

String name = "John";
// name یه reference روی Stackه
// خود "John" داخل Heap (string pool) ذخیره شده

Person person = null;
// reference person روی Stack ساخته می‌شه
// فعلاً به هیچ شیئی اشاره نمی‌کنه

person = buildPerson(id, name);
// reference شیء ساخته‌شده در Heap
// می‌ره داخل متغیر person روی Stack
}
}



❇️ جمع بندی:

☑️ داده‌های primitive مستقیم روی Stack ذخیره می‌شن

☑️ referenceها روی Stack هستن، ولی خود objectها توی Heap

☑️ Heap جای داده‌های بلندمدت و اشتراکیه

☑️ Stack خودکار بزرگ و کوچیک می‌شه و خیلی سریعه


➡️اشتراک و 👍لایک یادت نره
🌐سایت هولوسن: holosen.net

🆔 اینستاگرام: nulldevelopr


#هوش_مصنوعی #برنامه_نویسی #آنالیز_داده #ماشین_لرنینگ #پایتون #کاتلین #جت_پک #جنگو #آموزش_برنامه_نویسی #XML #JSON #جاوا
1👍1