Python Hints
راجب این موضوع و leetcode : یک سری مشکلات رو با leetcode و یا data structure, algo این چندروز مطرح کردید که منطقی هم بود (منم دنبال راهکار بودم) ۱- وقتی تگهای سوال + سطحش رو میبینم میفهمم چطوری باید حلش کرد ولی اگر اونها نباشه تو بعضی سوالات کامل میمونم.…
لینک رو کپی کنید و توی مرورگر باز کنید؛ بازکردنش با خود تلگرام بهتون
406
میده👍19
#نکته_مصاحبه
قبلاً راجب توجه به یک سری نکات تو مصاحبه صحبت کردم؛ یکی از دوستان مصاحبه داشت و کدی که برای مرحله اول زده بود رو نشونم داد.
با اینکه بنظر خودش عالی جلو رفته بود.
چرا ؟
شرکتهای زیادی هستند که توی مرحله اول مصاحبه از شما سوالات بنظر ساده میپرسند؛ شخصاً بعضی وقتا این کار رو میکنم بخصوص وقتی تعداد رزومهها بسیار زیاد هست.
ازین دوستمون پرسیده شده بود که؛ یک نوع خاص از آرایه رو پیادهسازی کنه برای سادگی من همون آرایه مرتب درنظر میگیرم.
شاید سوال بشه؛ چرا باید سوال به این سادگی بپرسند توی مصاحبه ؟ هزاران هزار پیادهسازی از آرایه توی اینترنت هست و برای خیلیها پیادهسازیش شاید ۲۰ دیقه هم نکشه (اگر تایپ کردنش کند هم باشه)
مسئله همینجا هست؛ چون پیادهسازی زیادی داره و همه هم خوندند خیلیها یک کدی رو حفظ میکنند و همین حفظ کردن باعث میشه توی مصاحبه فقط تایپش کنند که مشکل اصلی به وجود میاد (استرس بالا باعث میشه امنترین کار رو بکنید، واکشی از ذهن بدون فکر کردن بهش)
توی مثال آرایه مرتب فرض کنید به شما بگم، روی سیستم ۸ بیتی قراره آرایه شما استفاده بشه!
بعد کمی جلوتر بگم که قابلیت سرچ رو براش پیادهسازی کنید؛ اگر درساتو خوب خونده باشی و کدها رو خوب حفظ کرده باشی؛ میدونی چون آرایه مرتب هست توی جستجو میتونی از
یک بخشی داریم توی جستجوی باینتری که باید وسط آرایه رو پیدا کنید، ۹۹٪ مینویسند (توی دورههای آموزش و کتابهای معروف ببینید) :
که خب وسط دوتا عدد رو پیدا میکنه خیلی هم عالی! ولی اگر توی مثالی که من زدم اینو بنویسید از مصاحبه حذف میشید و میرم سراغ نفر بعدی (وقتی تعداد رزومهها زیاده ازین تکنیک استفاده میکنم شخصاً؛ تا برای مرحله دوم و سوم مصاحبه بجای ۵۰۰ نفر با ۱۵ نفر مصاحبه کنم)
حالا چرا با این مدل میانگین گیری حذف میشید ؟
فرضیه مسئله من این بود کد روی سیستم ۸ بیتی اجرا بشه؛ ۸ تا بیت یعنی اعداد ۰ تا ۲۵۵ (چون ایندکس رو داریم صحبت میکنیم و منفی نداره) اگر مقدار high , low توی یکی از حالات جمعش بیشتر از ۲۵۵ بشه؛ کل محاسبات شما اشتباه میشه و آرایه شما بعد از اولین دیلیت هم دیگه ولید نخواهد بود.
یکی از راهکارهاش هست.
ولی یک سری نکات ریز این چنینی و موارد دیگه که قبلتر صحبت کردیم (نحوه نوشتن repr, iter, ...) بسیار مهم میشه!
همیشه به دوستان خودم میگم؛ وقتی دیدی سوال مصاحبه اول خیلی ساده هست حتماً بیشتر بترس ! چرا ؟
چون احتمال و درصد حذف بسیار بسیار بالاس؛ و ممکنه اولین اشتباه، آخرین اشتباه باشه.
شخصاً وقتی سوالات مصاحبه خیلی سخت میشه، خیلی استرس کمتری دارم
قبلاً راجب توجه به یک سری نکات تو مصاحبه صحبت کردم؛ یکی از دوستان مصاحبه داشت و کدی که برای مرحله اول زده بود رو نشونم داد.
بهش گفتم امید زیادی به قبولی نداشته باشه!
با اینکه بنظر خودش عالی جلو رفته بود.
چرا ؟
شرکتهای زیادی هستند که توی مرحله اول مصاحبه از شما سوالات بنظر ساده میپرسند؛ شخصاً بعضی وقتا این کار رو میکنم بخصوص وقتی تعداد رزومهها بسیار زیاد هست.
ازین دوستمون پرسیده شده بود که؛ یک نوع خاص از آرایه رو پیادهسازی کنه برای سادگی من همون آرایه مرتب درنظر میگیرم.
شاید سوال بشه؛ چرا باید سوال به این سادگی بپرسند توی مصاحبه ؟ هزاران هزار پیادهسازی از آرایه توی اینترنت هست و برای خیلیها پیادهسازیش شاید ۲۰ دیقه هم نکشه (اگر تایپ کردنش کند هم باشه)
مسئله همینجا هست؛ چون پیادهسازی زیادی داره و همه هم خوندند خیلیها یک کدی رو حفظ میکنند و همین حفظ کردن باعث میشه توی مصاحبه فقط تایپش کنند که مشکل اصلی به وجود میاد (استرس بالا باعث میشه امنترین کار رو بکنید، واکشی از ذهن بدون فکر کردن بهش)
توی مثال آرایه مرتب فرض کنید به شما بگم، روی سیستم ۸ بیتی قراره آرایه شما استفاده بشه!
بعد کمی جلوتر بگم که قابلیت سرچ رو براش پیادهسازی کنید؛ اگر درساتو خوب خونده باشی و کدها رو خوب حفظ کرده باشی؛ میدونی چون آرایه مرتب هست توی جستجو میتونی از
binary search
استفاده کنی. یک بخشی داریم توی جستجوی باینتری که باید وسط آرایه رو پیدا کنید، ۹۹٪ مینویسند (توی دورههای آموزش و کتابهای معروف ببینید) :
(Low + High) // 2
که خب وسط دوتا عدد رو پیدا میکنه خیلی هم عالی! ولی اگر توی مثالی که من زدم اینو بنویسید از مصاحبه حذف میشید و میرم سراغ نفر بعدی (وقتی تعداد رزومهها زیاده ازین تکنیک استفاده میکنم شخصاً؛ تا برای مرحله دوم و سوم مصاحبه بجای ۵۰۰ نفر با ۱۵ نفر مصاحبه کنم)
حالا چرا با این مدل میانگین گیری حذف میشید ؟
overflow
فرضیه مسئله من این بود کد روی سیستم ۸ بیتی اجرا بشه؛ ۸ تا بیت یعنی اعداد ۰ تا ۲۵۵ (چون ایندکس رو داریم صحبت میکنیم و منفی نداره) اگر مقدار high , low توی یکی از حالات جمعش بیشتر از ۲۵۵ بشه؛ کل محاسبات شما اشتباه میشه و آرایه شما بعد از اولین دیلیت هم دیگه ولید نخواهد بود.
((high - low) // 2) + low
یکی از راهکارهاش هست.
ولی یک سری نکات ریز این چنینی و موارد دیگه که قبلتر صحبت کردیم (نحوه نوشتن repr, iter, ...) بسیار مهم میشه!
همیشه به دوستان خودم میگم؛ وقتی دیدی سوال مصاحبه اول خیلی ساده هست حتماً بیشتر بترس ! چرا ؟
چون احتمال و درصد حذف بسیار بسیار بالاس؛ و ممکنه اولین اشتباه، آخرین اشتباه باشه.
👍66❤21
Python Hints
راجب این موضوع و leetcode : یک سری مشکلات رو با leetcode و یا data structure, algo این چندروز مطرح کردید که منطقی هم بود (منم دنبال راهکار بودم) ۱- وقتی تگهای سوال + سطحش رو میبینم میفهمم چطوری باید حلش کرد ولی اگر اونها نباشه تو بعضی سوالات کامل میمونم.…
تقریبا روزی ۱ دونه دارم حل میکنم و لذت بخش هست.
من به سادهترین روشی که به جواب برسه دارم حل میکنم مسئله رو و مسئله ها تا اینجا ساده بوده برام اما ...
بهترین بخشش برای من این هست که بعد از حل هر مسئله میتونم راه حلهای باقی آدمها رو هم ببینم و مقایسه کنم.
خیلی ساده با مثال کاربردی چیزایی که یادم رفته بود دوباره برام یادآوری میشه مثلا توی یکی از چالشهای قبلی یکی اومده بو برای تمیزی کد از
استفاده کرده بود؛ با اینکه میشناختم این متد رو ولی چون خیلی وقت بود بکارم نیومده بود کامل فراموش کرده بودم اما حالا با مثال بهم یادآوری شده و یادداشت هم کردم که بعد از چندبار مرور به ذهنم برگرده.
خود سوالات و حل کردنشون بجای خودش؛ بخش راهحلهای
من به سادهترین روشی که به جواب برسه دارم حل میکنم مسئله رو و مسئله ها تا اینجا ساده بوده برام اما ...
بهترین بخشش برای من این هست که بعد از حل هر مسئله میتونم راه حلهای باقی آدمها رو هم ببینم و مقایسه کنم.
خیلی ساده با مثال کاربردی چیزایی که یادم رفته بود دوباره برام یادآوری میشه مثلا توی یکی از چالشهای قبلی یکی اومده بو برای تمیزی کد از
from itertools import groupby
استفاده کرده بود؛ با اینکه میشناختم این متد رو ولی چون خیلی وقت بود بکارم نیومده بود کامل فراموش کرده بودم اما حالا با مثال بهم یادآوری شده و یادداشت هم کردم که بعد از چندبار مرور به ذهنم برگرده.
خود سوالات و حل کردنشون بجای خودش؛ بخش راهحلهای
clever, best practice
که بعد از حل بهمون نشون میده واقعا عالیه؛ کاملا در تلاشم که حداقل روزی ۱ مورد رو حل کنم.👍43❤🔥6❤6👏2
#تجربه #مصاحبه
بعد از خیلی سال دوباره یک مصاحبه خیلی مهم دارم با یک شرکت بزرگ. برای همین چند روزی هست که روزی ۱-۲ ساعت دارم تمرین انجام میدم (خیلی وقت بود ازینکارا نکرده بودم ولی حالا که وقت دادن قبل مصاحبه بد نیست تمرین کنم)
سوالاتی که توی مصاحبههای خوبم تجربه کردم و بنظرم سوالات ارزشمندی بوده رو دارم تمرین میکنم و البته بحثهایی که بعدش اومده.
بله من سوالات و بحثهای مهم رو مینویسیم و نگه میدارم؛ شما هم باید اینکار رو بکنید. (قبلاً توضیح دادم)
امروز رسیدم به اولین سوالم؛ با یکی از شرکتهای
گفتم سوال رو اینجا هم بذارم :
سیستمی رو پیاده سازی کن که بعنوان ورودی یک استرینگ از محاسبات ریاضی بصورت
من اینو یادمه که با
اما چندتا چیز رو بررسی میکرد:
۱- چون صحبت از
۲- حتماً باید
۳- سراغ پیادهسازی سادهتر رفتم (تصمیم گیری و شناخت مسأله، البته توضیح هم دادم چرا بنظرم سادهتر هست و ...)
۴- استفاده از
و موارد دیگهای که بعدش اومد و بحث شد؛ امروز دارم اینو تمرین میکنم با تست کیسهای سختتر. یاد اون مصاحبه افتادم و چون سوال خوبی بود برای تمرین گفتم اینجا هم بذارم.
پ.ن؛ اگر خواستید پیادهسازی کنید این حالات رو تست کنید (تو مصاحبه از مصاحبه کننده باید پرسیده بشه)
۱- سیستم ورودی
۲- سیستم
۳- سیستم فقط از ۴ عمل اصلی + پرانتز پشتیبانی خواهد کرد
۴- ورودیهای عددی ممکنه
۵- ممکنه بین کاراکترها space باشه یا نباشه
هر دو درست هست.
بعد از خیلی سال دوباره یک مصاحبه خیلی مهم دارم با یک شرکت بزرگ. برای همین چند روزی هست که روزی ۱-۲ ساعت دارم تمرین انجام میدم (خیلی وقت بود ازینکارا نکرده بودم ولی حالا که وقت دادن قبل مصاحبه بد نیست تمرین کنم)
سوالاتی که توی مصاحبههای خوبم تجربه کردم و بنظرم سوالات ارزشمندی بوده رو دارم تمرین میکنم و البته بحثهایی که بعدش اومده.
بله من سوالات و بحثهای مهم رو مینویسیم و نگه میدارم؛ شما هم باید اینکار رو بکنید. (قبلاً توضیح دادم)
امروز رسیدم به اولین سوالم؛ با یکی از شرکتهای
FAANG
خیلی سال پیش بود و سوال مرحله اول (دقیقاً چهره مصاحبه کننده و استرس خودم و ... همرو یادم هست.) گفتم سوال رو اینجا هم بذارم :
سیستمی رو پیاده سازی کن که بعنوان ورودی یک استرینگ از محاسبات ریاضی بصورت
infix
دریافت کنه؛ بتونه خروجی رو بصورت postfix
, یا prefix
(هرکدوم راحتتری) تحویل بده یا اگر object
اون کلاس صدا زده شده؛ با استفاده از postfix/prefix
پیادهسازی شده محاسبات رو انجام بده و خروجی رو تحویل.من اینو یادمه که با
postfix
حل کردم چون راحتتر بود (stack) : اما چندتا چیز رو بررسی میکرد:
۱- چون صحبت از
object
شد باید. OOP
میبود۲- حتماً باید
__call__
رو براش پیادهسازی میکردم که callable
باشه (این یعنی داندر متودها رو میشناسم) ۳- سراغ پیادهسازی سادهتر رفتم (تصمیم گیری و شناخت مسأله، البته توضیح هم دادم چرا بنظرم سادهتر هست و ...)
۴- استفاده از
stack
که بعد خود stack
رو پیادهسازی کردم (آشنایی با DS
, حتی بحث هم کردم بین LinkedList, Array
چرا و کدوم رو انتخاب میکنم برای ساخت stack
) و موارد دیگهای که بعدش اومد و بحث شد؛ امروز دارم اینو تمرین میکنم با تست کیسهای سختتر. یاد اون مصاحبه افتادم و چون سوال خوبی بود برای تمرین گفتم اینجا هم بذارم.
پ.ن؛ اگر خواستید پیادهسازی کنید این حالات رو تست کنید (تو مصاحبه از مصاحبه کننده باید پرسیده بشه)
۱- سیستم ورودی
invalid
داشته باشه؛ خروجی برای هر دو حالت None
هست ۲- سیستم
infix
برای اولویت دادن به محاسبات از () ممکنه استفاده کنه۳- سیستم فقط از ۴ عمل اصلی + پرانتز پشتیبانی خواهد کرد
۴- ورودیهای عددی ممکنه
float/int
باشه۵- ممکنه بین کاراکترها space باشه یا نباشه
"17+3.5" or "17 + 3.5"
هر دو درست هست.
👍43❤17❤🔥10
#کتاب
#Book
تابستون شده و کلی دانشجو/دانشآموز پر انرژی پیام دادند برای یادگیری لینوکس کتاب معرفی کن.
و خب چی بهتر از کتاب مقدس ؟ 😁
The Linux Bible
اضافه کنم تا نیومدید بمبارونم کنید:
کلمه Bible توی کتابای فنی به منظور مقدس و ... نیست و بیشتر منظور این هست که کتاب طبق ادعا نویسنده و انتشارات کاملاً جامع و کامل هست ۰ تا ۱۰۰.
من اولین بار نسخههای قدیمیتر این کتاب رو ۱۳-۱۴ سال پیش خوندم؛ و بعد با کتابهای
هنوزم بنظرم یکی از بهترینهاس.
برای دوستانی که با کتابهای
#Book
تابستون شده و کلی دانشجو/دانشآموز پر انرژی پیام دادند برای یادگیری لینوکس کتاب معرفی کن.
و خب چی بهتر از کتاب مقدس ؟ 😁
The Linux Bible
اضافه کنم تا نیومدید بمبارونم کنید:
کلمه Bible توی کتابای فنی به منظور مقدس و ... نیست و بیشتر منظور این هست که کتاب طبق ادعا نویسنده و انتشارات کاملاً جامع و کامل هست ۰ تا ۱۰۰.
من اولین بار نسخههای قدیمیتر این کتاب رو ۱۳-۱۴ سال پیش خوندم؛ و بعد با کتابهای
RedHat
آشنا شدم.هنوزم بنظرم یکی از بهترینهاس.
برای دوستانی که با کتابهای
Sander van Vugt
لینوکس رو شروع کردند (قبلتر پیشنهاد دادم بهشون برای آزمون ردهت) نیازی به خوندن این کتاب نیست ولی چون اون مباحث چندین کتاب میشه طبق آزمون و این کتاب جامع هست برای همین به دانشجوهایی که آزمون و سرور ادمین شدن هدف فعلی نیست؛ این کتاب رو پیشنهاد میدم.👍38❤10❤🔥2
با socketify تازه آشنا شدم؛
دیروز دیدم (توی میت) همکارم داشت روش کار میکرد.
شخصاً به کارم نمیاد فعلا اما، بنچمارکهای جالبی ازش دیدم!
GitHub
دیروز دیدم (توی میت) همکارم داشت روش کار میکرد.
شخصاً به کارم نمیاد فعلا اما، بنچمارکهای جالبی ازش دیدم!
GitHub
👍22🔥1
اگر
بهترین خبری که راجب
What is new in python3.14
خیلی اتفاقی داشتم دنبال یک تکنیک برای درک باگ کدم میگشتم که یک پست روی
بنظرم این خیلی اتفاق قشنگی هست.
Async
کد میزنید توی پایتون بهترین خبری که راجب
python3.14
میتونم بهتون بدم این بخش از تغییرات هست :What is new in python3.14
خیلی اتفاقی داشتم دنبال یک تکنیک برای درک باگ کدم میگشتم که یک پست روی
Medium
دیدم (پست خوب توضیح نداده بود) برای همین سرچ کردم و دیدم python3.14
این ویژگی رو داره uv python install 3.14
بنظرم این خیلی اتفاق قشنگی هست.
Python documentation
What’s new in Python 3.14
Editor, Hugo van Kemenade,. This article explains the new features in Python 3.14, compared to 3.13. For full details, see the changelog. Summary – release highlights: Python 3.14 beta is the pre-r...
❤20👍11
نمیدونم چرا ولی خیلیها پیام دادید کتاب برای
برای خودمم نیاز بود یک کتاب خوب تو زمینه
تا اینجا ۳ تا کتاب رو خوندم که بنظرم هیچکدوم با ارزش نبود.
امیدم به ۲ تا کتاب آخر هست؛ (البته اینها کتابایی هست که آپدیت شده ۲۰۲۵-۲۰۲۴)
فعلاً پیشنهادم همون داکیومنت خود
فکر میکنم این موج رفتن سراغ
حواستون باشه
پروفایلینگ فراموش نشه 👌
fastapi
هم معرفی کنم!برای خودمم نیاز بود یک کتاب خوب تو زمینه
FastApi
پیدا کنم برای معرفی؛ برای review
مطالب یکی از دوستان هم اینکار رو زودتر شروع کرده بودم (۲ هفته قبل).تا اینجا ۳ تا کتاب رو خوندم که بنظرم هیچکدوم با ارزش نبود.
امیدم به ۲ تا کتاب آخر هست؛ (البته اینها کتابایی هست که آپدیت شده ۲۰۲۵-۲۰۲۴)
فعلاً پیشنهادم همون داکیومنت خود
FastApi
هست و چیز بهتری براش ندیدم و ندارم!فکر میکنم این موج رفتن سراغ
FastApi
بخاطر LLM, Agent
ها باشه.حواستون باشه
Fastapi
به خودی خود مشکلات Sync, Async
شمارو حل نمیکنه پروفایلینگ فراموش نشه 👌
❤38👍13
خروجی این ۳ تا کتاب؛
آشنایی من با یک پروژه بود :
GitHub Page
کاری که میکنه اینه؛ بهش
اگر وارد پروژهای شدید که تست نویسی نداره؛ یا اینکه برای قدم آخر و اطمینان بیشتر میخواید تست نهایی هم داشته باشید
بنظرم چیز خوبی هست👌
یادتون نره
آشنایی من با یک پروژه بود :
GitHub Page
کاری که میکنه اینه؛ بهش
Swagger
رو میدید یا هر داکیومنتی که با استاندارد OpenAPI
هست و بصورت خودکار با حالات مختلف تستش میکنه !اگر وارد پروژهای شدید که تست نویسی نداره؛ یا اینکه برای قدم آخر و اطمینان بیشتر میخواید تست نهایی هم داشته باشید
بنظرم چیز خوبی هست👌
یادتون نره
Property Testing
آخرین گزینه هست؛ حتماً خودتون باید تست نویسی داشته باشید (خواستم اسمش رو بدونید اگر تو مصاحبهای پرسیدند ازتون)GitHub
GitHub - schemathesis/schemathesis: Catch API bugs before your users do
Catch API bugs before your users do. Contribute to schemathesis/schemathesis development by creating an account on GitHub.
👍23❤9🔥5
Python Hints
خروجی این ۳ تا کتاب؛ آشنایی من با یک پروژه بود : GitHub Page کاری که میکنه اینه؛ بهش Swagger رو میدید یا هر داکیومنتی که با استاندارد OpenAPI هست و بصورت خودکار با حالات مختلف تستش میکنه ! اگر وارد پروژهای شدید که تست نویسی نداره؛ یا اینکه برای قدم…
#موقت
اگر ۳ تا کتاب لازم باشه (۸۰۰ صفحه) تا فقط ۱ نکته جهت بهبود پروژههام یاد بگیرم
کاملاً خوشحال خواهم بود!
خلاصه که راضی شدم 👌
حیف توی کتاب راجبش توضیح نداده بود و فقط ابزار رو اسم برده بود (اگر کسی گیتهابش رو چک نکنه نمیدونه پروژهاش چیکار میکنه)
اگر ۳ تا کتاب لازم باشه (۸۰۰ صفحه) تا فقط ۱ نکته جهت بهبود پروژههام یاد بگیرم
کاملاً خوشحال خواهم بود!
خلاصه که راضی شدم 👌
حیف توی کتاب راجبش توضیح نداده بود و فقط ابزار رو اسم برده بود (اگر کسی گیتهابش رو چک نکنه نمیدونه پروژهاش چیکار میکنه)
👍23❤2
هرکسی گوه غزه رو خورد اینو بزنید تو صورتش!
بعد از این همه جنگ و بزرگنمایی، فقط ۲۰٪ کودکان غزه سو تغذیه دارند
ولی از طرفی در ایران
۵۴٪ بچههای سیستان و بلوچستان سو تغذیه دارند
اون حرومزادههایی که غزه از دهنشون نمیوفته یک کامنت هم برای بچههای سیستان و بلوچستان ندارند!
آره عزیز؛ حتی توی این همدردی هم به فکر وام دولتی و پشتیبانی حکومتی هستید.
لینک خبر رکنا
بعد از این همه جنگ و بزرگنمایی، فقط ۲۰٪ کودکان غزه سو تغذیه دارند
ولی از طرفی در ایران
۵۴٪ بچههای سیستان و بلوچستان سو تغذیه دارند
اون حرومزادههایی که غزه از دهنشون نمیوفته یک کامنت هم برای بچههای سیستان و بلوچستان ندارند!
آره عزیز؛ حتی توی این همدردی هم به فکر وام دولتی و پشتیبانی حکومتی هستید.
لینک خبر رکنا
رکنا اقتصادی: یک استاد اقتصاد با بیان اینکه در سیستان و بلوچستان 54 درصد از کودکان، دچار سوء تغذیه و کوتاه قامتی هستند و 25 درصد هم دچار کم وزنی ناشی از اختلال در تغذیه هستند، گفت: در استان خوزستان، 58 درصد ازخانوارها دچار تغذیه ناامن هستند. این رقم در سیستان و بلوچستان 70 درصد و در استان کرمان 74 درصد است.
👍196👏14❤8❤🔥5
#Quick
سوال مصاحبه یکی از دوستان بوده.
توی مصاحبه خیلی از زبانهای برنامهنویسی مختلف یکی از سوالاتی که پرسیده میشه مربوط به نحوه ارسال آرگومان به توابع هست اکثرا هم شما به یکی از دو حالت:
Pass by Value
Pass by Reference
اشاره میکنید؛ اما توی پایتون اینطوری نیست توی پایتون ما
Pass By Object Reference (Pass by Assignment)
رو داریم. اول برگردیم به این تعریف که:
وقتی یک آرگومان رو به تابع میدید؛ رفرنس اون آبجکت رو براش میفرستید و نه یک کپی از اون رو ولی این رفرنس رو بصورت pass by value میفرستید! گیج گننده شد؟ برای همین میگیم پایتون نه Pass By Reference هست نه Pass By Value
یک صندوق رو فرض کنید که توش وسایل شما قرار داره (این حکم object رو داره) حالا فرض کنید برای اینکه جاش رو یادتون نره آدرسش رو روی یک کاغذ نوشتید و توی جیبتون میذارید (این میشه reference شما)
یکی از دوستانتون میخواد صندوق رو ببینه؛ شما فقط کافیه آدرس رو بهش بدید که برای اینکار شما آدرس رو روی یک کاغذ جدید مینویسید و اون رو بهش میدید (این میشه Pass reference by Value)
و این میشه مدل پایتون؛ اگر رفیق شما بره اونجا و از داخل صندوق چیزی برداره یا تغییراتی روی صندوق انجام بده؛ شما هم اون تغییرات رو خواهید دید. اگرم که صندوق رو ببینه و کارش که تموم شد کاغذ آدرس صندوق رو بندازه دور اونوقت صندوق هنوز سرجاش خواهد بود و شما صاحبش هستید.
اگر بره از صندوق یدونه بسازه؛ صندوق شما تغییری نمیکنه فقط یکی دیگه مشابهش وجود داره (که ممکنه چیزایی که داخلش هست فرق کنه)
مثال بالا میشه برای Object هایی که قابل تغییر هستند مثل list
اما اگر Object قابل تغییر نبود چی ؟ مثل Int
اونوقت رفیق شما هر تغییری که بخواد بده اول باید ی دونه از روی چیزی که مال شما هست برای خودش بسازه بعد تغییرش بده.
سوال مصاحبه یکی از دوستان بوده.
توی مصاحبه خیلی از زبانهای برنامهنویسی مختلف یکی از سوالاتی که پرسیده میشه مربوط به نحوه ارسال آرگومان به توابع هست اکثرا هم شما به یکی از دو حالت:
Pass by Value
Pass by Reference
اشاره میکنید؛ اما توی پایتون اینطوری نیست توی پایتون ما
Pass By Object Reference (Pass by Assignment)
رو داریم. اول برگردیم به این تعریف که:
همه چیز در پایتون نهایتا object هست.
وقتی یک آرگومان رو به تابع میدید؛ رفرنس اون آبجکت رو براش میفرستید و نه یک کپی از اون رو ولی این رفرنس رو بصورت pass by value میفرستید! گیج گننده شد؟ برای همین میگیم پایتون نه Pass By Reference هست نه Pass By Value
یک صندوق رو فرض کنید که توش وسایل شما قرار داره (این حکم object رو داره) حالا فرض کنید برای اینکه جاش رو یادتون نره آدرسش رو روی یک کاغذ نوشتید و توی جیبتون میذارید (این میشه reference شما)
یکی از دوستانتون میخواد صندوق رو ببینه؛ شما فقط کافیه آدرس رو بهش بدید که برای اینکار شما آدرس رو روی یک کاغذ جدید مینویسید و اون رو بهش میدید (این میشه Pass reference by Value)
و این میشه مدل پایتون؛ اگر رفیق شما بره اونجا و از داخل صندوق چیزی برداره یا تغییراتی روی صندوق انجام بده؛ شما هم اون تغییرات رو خواهید دید. اگرم که صندوق رو ببینه و کارش که تموم شد کاغذ آدرس صندوق رو بندازه دور اونوقت صندوق هنوز سرجاش خواهد بود و شما صاحبش هستید.
اگر بره از صندوق یدونه بسازه؛ صندوق شما تغییری نمیکنه فقط یکی دیگه مشابهش وجود داره (که ممکنه چیزایی که داخلش هست فرق کنه)
مثال بالا میشه برای Object هایی که قابل تغییر هستند مثل list
اما اگر Object قابل تغییر نبود چی ؟ مثل Int
اونوقت رفیق شما هر تغییری که بخواد بده اول باید ی دونه از روی چیزی که مال شما هست برای خودش بسازه بعد تغییرش بده.
def demonstrate_passing_behavior(my_list, my_int):
print("\n--- INSIDE FUNCTION ---")
print(f"List ID: {id(my_list)}, Int ID: {id(my_int)}")
my_list.append(4)
print(f"List after append: {my_list}, ID(append): {id(my_list)}")
print("Copy of the original list")
my_list = list(my_list)
print(f"List copy and reassignment: {my_list}, ID(copy): {id(my_list)}")
print("Modifying integer...")
my_int = my_int + 10
print(f"Int after modification: {my_int}, ID(modified) : {id(my_int)}")
original_list = [1, 2, 3]
original_int = 5
print(f"Original list: {original_list}, ID: {id(original_list)}")
print(f"Original int: {original_int}, ID: {id(original_int)}")
demonstrate_passing_behavior(original_list, original_int)
print("\n--- AFTER FUNCTION CALL ---")
print(f"Original list: {original_list}, ID: {id(original_list)}")
print(f"Original int: {original_int}, ID: {id(original_int)}")
👍53❤23
Python Hints
#Quick سوال مصاحبه یکی از دوستان بوده. توی مصاحبه خیلی از زبانهای برنامهنویسی مختلف یکی از سوالاتی که پرسیده میشه مربوط به نحوه ارسال آرگومان به توابع هست اکثرا هم شما به یکی از دو حالت: Pass by Value Pass by Reference اشاره میکنید؛ اما توی پایتون…
رفتار
Rust
هم شباهتهای زیادی داره به Python
اما با مفاهیم دیگری مثل ownership, ...
ارزیابی میشه.👍30❤4
#تجربه
بیش از ۹۸٪ پروژههای اپلیکیشنهایی که کار کردم دیتابیس رو اشتباه انتخاب کرده بودند!
اصلا طبیعیت دیتاها و کار با دیتابیس و ... اشون
اما ۱۰۰٪ تأکید دارند که از
مشکل کجاس ؟
- عدم شناخت کافی از دیتابیسهای دیگه:
این بیشترین موردی هست که دیدم.
- عدم توانایی طراحی درست سیستم؛ معماری سیستم خیلی مهم هست.
- عدم بررسی و آنالیز نیازمندیهای سیستم؛ اینکه درگیر دنبال بهترینها بودن نشید چیز خوبیه ولی اینکه سر چیزای ابتدایی هم تحقیق نمیکنید و میندازید گردن اینکه من نمیخوام کمالگرا باشم یک موضوع متفاوت هست.
- ترس، ترس از تست کردن چیزای جدید.
طرف میگه من ۱۰ ساله دارم
احمقانه تصمیم نگیر
راجب mongodb بخونید، خیلی از شما چیزی که بهش نیاز دارید
رو هم داره؛ تا ۱۰۰ لول ارتباط تو در تو هم نگه میداره (که عمرا و عملاً بهش نمیرسید)
به راحتی میتونید
دیزاین collection (مثل table بهش فکر کنید) میتونی ثانیهای عوض بشه اگر بخواید.
فرض کنید توی sql بتونید، هروقت خواستید بدون دردسر و
به کمک پکیج
Janus
هم گزینه خوبی هست برای اونهایی که به دیتابیس
۶ سال قبل بعنوان جایگزین رایگان Neo4j ازش استفاده کردم روی حجم داده بسیار بسیار بالا و خیلی رضایت بخش بود.
خلاصه که زرتی نرید با
بیش از ۹۸٪ پروژههای اپلیکیشنهایی که کار کردم دیتابیس رو اشتباه انتخاب کرده بودند!
اصلا طبیعیت دیتاها و کار با دیتابیس و ... اشون
SQL
نیستاما ۱۰۰٪ تأکید دارند که از
SQL
استفاده بشه و اکثراً بعد از مدتی کوئریهای پیچیده کل سیستمشون رو میگیره !مشکل کجاس ؟
- عدم شناخت کافی از دیتابیسهای دیگه:
Mongo, Janus, Casandra, Scylla, ....
این بیشترین موردی هست که دیدم.
- عدم توانایی طراحی درست سیستم؛ معماری سیستم خیلی مهم هست.
- عدم بررسی و آنالیز نیازمندیهای سیستم؛ اینکه درگیر دنبال بهترینها بودن نشید چیز خوبیه ولی اینکه سر چیزای ابتدایی هم تحقیق نمیکنید و میندازید گردن اینکه من نمیخوام کمالگرا باشم یک موضوع متفاوت هست.
- ترس، ترس از تست کردن چیزای جدید.
طرف میگه من ۱۰ ساله دارم
SQL
کار میکنم (خب به درک!!)، نهایت همرو خودم Query
مینویسم! به فکر نفرات بعدی روی پروژه هم باش احمقانه تصمیم نگیر
راجب mongodb بخونید، خیلی از شما چیزی که بهش نیاز دارید
mongodb
هست Transaction
رو هم داره؛ تا ۱۰۰ لول ارتباط تو در تو هم نگه میداره (که عمرا و عملاً بهش نمیرسید)
به راحتی میتونید
replication
و read-only
داشته باشید دیزاین collection (مثل table بهش فکر کنید) میتونی ثانیهای عوض بشه اگر بخواید.
فرض کنید توی sql بتونید، هروقت خواستید بدون دردسر و
migration
, ... ستون اضافه کنید.به کمک پکیج
motor
خیلی راحت؛ async
رو هم در اختیار خواهید داشتJanus
هم گزینه خوبی هست برای اونهایی که به دیتابیس
Graph
نیاز دارند.۶ سال قبل بعنوان جایگزین رایگان Neo4j ازش استفاده کردم روی حجم داده بسیار بسیار بالا و خیلی رضایت بخش بود.
خلاصه که زرتی نرید با
SQL
شروع کنید.👍80❤16👏5❤🔥2
متا دیگه دنبال
حتی اینکه چندتا
ازین پس، توی مصاحبههای شرکت
۱ سال و نیم قبل گفتم، شرکتها قطعاً و حتماً به این سمت خواهند رفت 👌
تعریف جونیور هم بیشتر عوض خواهد شد !
پینوشت:
برای دوستان تازه وارد
coder
نمیگرده حتی اینکه چندتا
leetcode
هم حل کردید و حفظ کردید توی متا مهم نیست.ازین پس، توی مصاحبههای شرکت
META
اجازه استفاده از هوش مصنوعی رو هم دارید.۱ سال و نیم قبل گفتم، شرکتها قطعاً و حتماً به این سمت خواهند رفت 👌
تعریف جونیور هم بیشتر عوض خواهد شد !
پینوشت:
Coder != Software Engineer
برای دوستان تازه وارد
👍105❤13🔥1
طبق تجربه خودم؛
بیشترین دلیل fail شدن استارتاپهایی که دیدم ایده بد یا وجود رقیب و .... نیست!
فقط یک چیز هست؛ انجام کارهای تکراری به تعداد دفعات تغییر توی کدها
دلیلش؛عدم تست نویسی !
از هر ۱۰ مورد، ۹ مورد دلیلش جز این نبوده.
پ.ن:
راجب این مورد، قطعاً روی استارتاپ یکی از دوستان صحبت خواهم کرد (صحبتی که باهم داشتیم، راجب اینکه حتی وقتی پول زیادی هم پشتوانهاش بود بازم نهایتاً استارتاپ fail شد)
بیشترین دلیل fail شدن استارتاپهایی که دیدم ایده بد یا وجود رقیب و .... نیست!
فقط یک چیز هست؛ انجام کارهای تکراری به تعداد دفعات تغییر توی کدها
دلیلش؛
از هر ۱۰ مورد، ۹ مورد دلیلش جز این نبوده.
پ.ن:
راجب این مورد، قطعاً روی استارتاپ یکی از دوستان صحبت خواهم کرد (صحبتی که باهم داشتیم، راجب اینکه حتی وقتی پول زیادی هم پشتوانهاش بود بازم نهایتاً استارتاپ fail شد)
❤48👍17🔥2
#مصاحبه
چندوقت پیش برای یک شرکتی داشتم مصاحبه انجام میدادم؛ یک توسعه دهنده پایتون میخواستند با دانش بالا از concurrency, parallelism کلی هم روزمه دریافت کرده بودند.
قرار بود من فقط ۲ روز براشون وقت بذارم و مصاحبه کنم ولی انقدر تعداد روزمهها زیاد بود که ۱ هفته کار میبرد؛ مصاحبه رو ۲ مرحلهای کردیم توی مرحله اول سوال جوابای کلی پایتون بود که نیروهای خود شرکت انجام میدادند و درنهایت هم ۱ تسک بهشون داده میشد که توی همون مصاحبه انجام بدند؛ تسک این بود (چون خودم تسک رو داده بودم میگم):
تقریبا همه شرکت کنندهها حل کردند مسئله رو؛ به هیچکس هیچ راهنمایی داده نمیشد و از هیچکدوم از افراد هم چیزی اضافه بر متن بالا خواسته نمیشد.
حدود ۱۲ نفر موندند که به مصاحبه مرحله دوم دعوت شدند؛ اما یکنفر بود که کلا آدم اعتراض کردن هست (پستهاش توی لینکدین توی چند وقت اخیر چیزایی که منم تگ شدم)
نمیدونست سوال مصاحبه با من بوده و ادعا کرده توی لینکدین که بهترین راه حل رو ارائه داده ولی رد شده (انگاز کسی باهاش جنگ داره) ازش خواستم پستش رو پاک کنه وگرنه براش خیلی بد میشه ...
اما این قضیه و دیدن اینکه خیلی از بچههای حتی سنیور عکسی که از راهکار گذاشته رو لایک کردند باعث شد بیام و بگم چرا کدی که اون آدم گذاشته بود اصلا بدرد نمیخورد:
بله کد
همهی کدهای parallel به یک اندازه خوب نیستند و یا حتی درست هم نیستند.
ادامه پست بعدی ...
چندوقت پیش برای یک شرکتی داشتم مصاحبه انجام میدادم؛ یک توسعه دهنده پایتون میخواستند با دانش بالا از concurrency, parallelism کلی هم روزمه دریافت کرده بودند.
قرار بود من فقط ۲ روز براشون وقت بذارم و مصاحبه کنم ولی انقدر تعداد روزمهها زیاد بود که ۱ هفته کار میبرد؛ مصاحبه رو ۲ مرحلهای کردیم توی مرحله اول سوال جوابای کلی پایتون بود که نیروهای خود شرکت انجام میدادند و درنهایت هم ۱ تسک بهشون داده میشد که توی همون مصاحبه انجام بدند؛ تسک این بود (چون خودم تسک رو داده بودم میگم):
یک کد ۸ رقمی با الگوریتم sha256 هش شده؛ و تونستیم هش خروجی رو بدست بیاریم. کدی بنویسید که عدد رو برامون پیدا کنه.
توی سوال و جواب بهشون گفته میشد که عدد میتونه مثلا 5 هم باشه ولی به اینصورت:
"00000005"
تقریبا همه شرکت کنندهها حل کردند مسئله رو؛ به هیچکس هیچ راهنمایی داده نمیشد و از هیچکدوم از افراد هم چیزی اضافه بر متن بالا خواسته نمیشد.
حدود ۱۲ نفر موندند که به مصاحبه مرحله دوم دعوت شدند؛ اما یکنفر بود که کلا آدم اعتراض کردن هست (پستهاش توی لینکدین توی چند وقت اخیر چیزایی که منم تگ شدم)
اما این قضیه و دیدن اینکه خیلی از بچههای حتی سنیور عکسی که از راهکار گذاشته رو لایک کردند باعث شد بیام و بگم چرا کدی که اون آدم گذاشته بود اصلا بدرد نمیخورد:
بله کد
parallel
اجاره میشه ولیهمهی کدهای parallel به یک اندازه خوب نیستند و یا حتی درست هم نیستند.
ادامه پست بعدی ...
❤32👍3🔥1
Python Hints
#مصاحبه چندوقت پیش برای یک شرکتی داشتم مصاحبه انجام میدادم؛ یک توسعه دهنده پایتون میخواستند با دانش بالا از concurrency, parallelism کلی هم روزمه دریافت کرده بودند. قرار بود من فقط ۲ روز براشون وقت بذارم و مصاحبه کنم ولی انقدر تعداد روزمهها زیاد بود که…
اول کد آقای اعتراض (این سورس کد رو خودم زدم ولی با تکنیکی که ایشون بعنوان راهکار نهایی ثبت و ایمیل کردند.)
کد پارالل هست و اجرا هم میشه؛ هش اول رو توی ۲۲ ثانیه پیدا میکنه و عدد 5 رو به درستی بر میگردونه. (این هشها توی تست به مصاحبه شوندهها داده نشده بود و من الان ایجادشون کردم اعدادش هم به عمد هست)
چرا 5 ؟
برای اینکه توی رنج اعدادی که ایجاد میشه اوایل اولین لیست chunk قرار میگیره پس سریع محاسبه میشه.
با همین نکته باید فهمیده باشید مشکل کد بالا چیه!
ربطی نداره کد ۸ رقمی کجای لیست قرار بگیره تمام اعداد ۸ رقمی رو باید تست کنه تا به جواب برسه. برای همین انقدر طول کشید.
چرا 69269268 ؟
مشگل دوم باگ برنامهنویس هست؛ من هم میخواستم خروجی رو برای یک عدد رندوم ببینم و هم میخواستم توی
یک مقدار دقت کنید پیداش میکنید (البته من بخاطر این اشتباه ردش نکردم)
ادامه پست بعدی ...
کد پارالل هست و اجرا هم میشه؛ هش اول رو توی ۲۲ ثانیه پیدا میکنه و عدد 5 رو به درستی بر میگردونه. (این هشها توی تست به مصاحبه شوندهها داده نشده بود و من الان ایجادشون کردم اعدادش هم به عمد هست)
چرا 5 ؟
برای اینکه توی رنج اعدادی که ایجاد میشه اوایل اولین لیست chunk قرار میگیره پس سریع محاسبه میشه.
با همین نکته باید فهمیده باشید مشکل کد بالا چیه!
ربطی نداره کد ۸ رقمی کجای لیست قرار بگیره تمام اعداد ۸ رقمی رو باید تست کنه تا به جواب برسه. برای همین انقدر طول کشید.
چرا 69269268 ؟
مشگل دوم باگ برنامهنویس هست؛ من هم میخواستم خروجی رو برای یک عدد رندوم ببینم و هم میخواستم توی
chunk
های اول نباشه ولی برای این عدد بهم -1
برگردوند.یک مقدار دقت کنید پیداش میکنید (البته من بخاطر این اشتباه ردش نکردم)
ادامه پست بعدی ...
👍20❤1🔥1
اینم براساس راهکار کسی که استخدام شد؛ استفاده از
برای اینکه بتونه بین پراسسها وضعیت رو بررسی کنه؛ به محض اینکه یکی از پراسسها اعلام کنه به جواب رسیده
باقی پراسسها قطع میشند و پردازش تکمیل میشه.
با این روش؛ جواب هش اول توی 7ms بدست میاد.
اما این کد هم میتونه بهتر بشه؛ برای hash دوم با عدد
بطور کلی برای اعدادی که توی ۲۵٪ انتهای
راهکار بهتر رو کسی توی مصاحبه ننوشته بود برای همین کدهای هیچکدوم از مصاحبه شونده هارو با اون مقابسه نکردم؛ ولی تمرین خوبی هست اگر بهش فکر کنید!
=================
سوال شده:
۱- لینکدین من روی پست اول توی پین شدهها هست
۲- فونتی که استفاده میکنم
۳- ادیتور و تم و ... هم مربوط به تنظیمات
۴- توی مصاحبه اول، دسترسی به
۵- سوال اصلی مصاحبه نبود؛ برای حذف روزمههای اضافه بود
multiprocessing.Value
برای اینکه بتونه بین پراسسها وضعیت رو بررسی کنه؛ به محض اینکه یکی از پراسسها اعلام کنه به جواب رسیده
found.value
باقی پراسسها قطع میشند و پردازش تکمیل میشه.
با این روش؛ جواب هش اول توی 7ms بدست میاد.
اما این کد هم میتونه بهتر بشه؛ برای hash دوم با عدد
69269268
تقریبا ۲ برابر روش قبلی زمان نیاز داره!بطور کلی برای اعدادی که توی ۲۵٪ انتهای
chunk
خودشون قرار میگیرند! راهکار بهتر رو کسی توی مصاحبه ننوشته بود برای همین کدهای هیچکدوم از مصاحبه شونده هارو با اون مقابسه نکردم؛ ولی تمرین خوبی هست اگر بهش فکر کنید!
=================
سوال شده:
۱- لینکدین من روی پست اول توی پین شدهها هست
۲- فونتی که استفاده میکنم
operator mono
هست ۳- ادیتور و تم و ... هم مربوط به تنظیمات
neovim
هست که گذاشتم البته از برنچ javascript
استفاده کنید این تغییرات اونجاس (فونت رو باید روی ترمینال فعال کنید)۴- توی مصاحبه اول، دسترسی به
ai
وجود نداشت؛ مصاحبه دوم بلامانع بود استفاده از ai
۵- سوال اصلی مصاحبه نبود؛ برای حذف روزمههای اضافه بود
👍22❤7
Python Hints
اینم براساس راهکار کسی که استخدام شد؛ استفاده از multiprocessing.Value برای اینکه بتونه بین پراسسها وضعیت رو بررسی کنه؛ به محض اینکه یکی از پراسسها اعلام کنه به جواب رسیده found.value باقی پراسسها قطع میشند و پردازش تکمیل میشه. با این روش؛ جواب هش اول…
یه کار خوب دیگم که میشه کرد استفاده از concurrent.futures هست به نظر من. interface راحتی در اختیار میذاره برای حل کردن این موضوع. میشه یه process pool ساخت، تسک ها رو submit کرد و بعد wait کرد روی future ها. منتها با return_when عه FIRST_COMPLETE. اولی که اومد باقی kill بشن. برای مواقعی که نیاز نداریم gracefully تسک ها رو shutdown بکنیم (مثل اینجا) این جواب میده.پ.ن:
حالا من انتظار داشتم که متد shutdown یه argument ای چیزی تحت عنوان force میگرفت من مجبور نشم process ها رو اونطوری بگیرم و کیل کنم. ولی بازم خونه api تمیزی داره این.
یک راهکار خوب از سروش؛ منم توضیحاتم رو همینجا مینویسم.
توی راهحل اول گفتم نتایج بهتری میشه داشت؛ مشکل راهحل این بود که فرقی نمیکرد کی به جواب برسیم باید برای همه صبر میکردیم.
اما یک کار خوب کرده بودیم؛ استفاده از ProcessPool و عدم نیاز به SharedMemory و انتقال مقدار اون بین پروسسها (اینکار سربار زیادی داره)
ادامه پست بعدی ....
❤13👍5