Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Jobname | جاب‌نامه

فهرست

دیباچه

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

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

شرکت‌ها

شرکت‌هایی که در سال ۱۴۰۴ باهاشون مصاحبه داشتم (داغ داغ):

شرکت‌هایی که در سال ۱۴۰۳ باهاشون مصاحبه داشتم:

شرکت‌هایی که در سال ۱۴۰۲ باهاشون مصاحبه داشتم:

شرکت‌هایی که قبل از ۱۴۰۲ باهاشون مصاحبه داشتم:

مصاحبه‌ها بر اساس ترتیب زمانی از جدید به قدیم مرتب شده‌اند.

مصاحبه‌های دیگران:

ریفر، میفر، مایکروفر

referral_meme

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

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

فرض کنید شما حدودا ۲۰‌‌تا مصاحبه می‌رید و بالاخره طبق اصل لانه کبوتری، حداقل یه جا اوکی می‌شه. ولی از دید شرکت و اون تک‌لیدی که برای تیمش دو تا نیرو با پوزیشن‌های متفاوت نیاز داره نگاه کنید. مثلا یه بک‌اند و یه فرانت‌اند. اون باید برای هر پوزیشن ۲۰‌تا مصاحبه بره رو هم می‌شه ۴۰تا! تازه این برای دو تا نیروئه. تعداد بیشتر بشه همینجوری کار سخت‌تر می‌شه. پس پیدا کردن نیرو برای یک شرکت، از کسی که دنبال کاره، سخت‌تره. حالا این که سنجش، عادلانه و درست صورت می‌گیره رو کاری نداریم که همه اینا جزو سختیای کاره. پس راه‌حل شرکت چیه؟ این که چند نفر از کارکنان خودش معرفی بشه مثلا n نفر. دیگه می‌ره با همونا مصاحبه می‌کنه و از خداشه همونا اوکی شن چون هم این که یکی از همکارا اونارو می‌شناسه بیشتر می‌تونه کمک کنه به راه افتادنش، هم این که چون با اون آدم در ارتباطه، در یک دایره اجتماعی قرار می‌گیرن، پس، اوکیه. البته نقدهایی بهش وارده ولی خب بیاین فعلا بگذریم ازش. پس بیشتر از این که مهارت و دانش رو افزایش بدیم، اگه ارتباطات‌مون رو بیشتر کنیم، برنده‌ایم. دانش و مسائل پیرامونش خواه ناخواه باگذشت زمان میاد.

فرای ریفر، دیده شدن و visibility مسئله مهمی‌ست. توانایی‌های ما باید دیده بشه. ما تا یه غذایی رو نخوریم، نمی‌تونیم طعمش رو بچشیم. آدما تا چیزی از ما نبینن، نمی‌تونن بفهمن که دانش‌مون چجوریه. پس «ارائه کردن»، واجبه و خوب ارائه کردن، هنره. اگه یه غذا دیزاین خوبی داشته باشه، احتمال می‌دیم طعمشم خوب باشه یا شانس این که تستش کنیم رو بالا می‌بره حتی اگه نخوریم! آدما حوصله کندوکاو و گشت و گذار تو محتوا و پروژه‌هامونو ندارن به ویژه در دنیای امروز که متن بیشتر از یه پاراگراف، خارج از حوصله‌ست. هنر اونجاست که به صورت ساندویچی توانایی‌هاتو به خورد مخاطب بدی و جذبش کنی، کسی درگیر جزئیات نمی‌شه خیلی (این حرف در گوشی بود). حالا روش‌ها بسیاره. می‌شه از گیتهاب، لینکدین، یوتوب، کانال تلگرام، بلاگ و خیلی چیزای دیگه در این راستا استفاده کرد.

visibility image

پرچم‌های خونی🚩

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

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

  • شرکتی که از اولین مصاحبه‌ای که می‌خواد انجام بده، اصرار به حضوری بودن جلسه داره. آدما کار دارن، زندگی دارن، ممکنه یکی شهر دیگه‌ای باشه، یا محل زندگی‌ش با شرکت، فاصله زیادی داشته باشه و باید کلی هزینه و زمان بذاره بیاد مصاحبه‌ای که نه به داره و نه به باره.

  • شرکتی که مدت طولانی برای یک پوزیشن در سایت‌های کاریابی آگهی داره، ندای یک جای تاکسیک رو می‌ده. یا انقد شرایطش بده که کسی حاضر نمی‌شه اونجا کار کنه یا هی آدما از اونجا میان بیرون و دوام نمیارن یا انقد بی‌عرضه‌ست که نمی‌تونه یه نیرو پیدا کنه.

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

  • داشتن بروکراسی و کاغذ‌بازی برای ساده‌ترین کارها به عنوان نمونه کوچک مثلا؛ کاغذ میارن از روش می‌خونن سوالا رو تیک می‌زنن. این یعنی؛ شرکتی‌ست بی‌آب و علف‌.

  • gus fring redflag meme
  • شرکتی که ناهار یا بیمه نمی‌ده، کنسله. ناهار و بیمه و حقوق سر وقت و چیزهایی از این قبیل، جزو وظایف یک شرکته نه فیچر. تو آگهی‌ها اینا رو به عنوان فیچر بهتون غالب می‌کنن. مثل این می‌مونه من بیام عدم کتک‌کاری و وحشی‌بازی در محل کار رو یک فیچر بدونم. خب این بدوی‌ترین چیزه که باید رعایت بشه حالا یه سریا رعایت نمی‌کنن فیچر نیس یه چیزی مثل نسبت منفی و صفر مطلقه.

  • روشن نکردن وب‌کم در مصاحبه بدون اطلاع دادن از چرایی ماجرا.
    مصاحبه‌کننده حداقل باید یه رخی نشون بده، هر چند کوتاه.

  • داشتن سیستم اضافه‌کاری و عدم شناور بودن و سیستم‌ تسک‌محور، یعنی؛ برده‌داری.

  • عدم وجود نیروی منابع انسانی در شرکت و نداشتن مایندستی برای ایجاد کالچر در شرکت. به عنوان مثال: اچ‌آر به چه درد می‌خوره ما حواسمون به خودمون هست و از این جور مهملات.

  • عدم تهیه تجهیزات و لوازم مورد نیاز کار از سمت شرکت. مثلا: خودتون لپ‌تاپ بیارید سیستم نداریم!

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

ریجکت، ریجکت، ریجکت...

آخ چقدر این کلمه آشناست! همه ما حداقل یه بار تجربه‌ش کردیم. اون دوره‌ای که آدم دنبال کاره، پر از استرس، فشار، کاهش نمایی اعتماد‌به‌نفس، استأصال، تنهایی و حسی حاوی خالی شدنه که نتیجه‌ی پرسیدن سوال تکراریِ «اه چرا نشد؟ چرا نمی‌شه؟»ئه که تو ذهن رخ می‌ده. هیچ! بله هیچ ربطی هم به دانش فنی نداره. اصلا اینجوری بگم که شما فرض کنید پرفکتید، باز هم ریجکت شدن، رخ می‌ده (این‌جا رو ببین). به هزاران دلیلی که دقیقا نمی‌فهمیم چرا و فقط با حدس و گمان و reverse engineering مصاحبه کشف می‌کنیم که چرا. پس چاقوی ریجکشن تیزه و گریزی ازش نیست. حتما زخمیت می‌کنه. این که چطوری زخمو ببندی و دوران نقاهت رو بگذرونی، هنره. چیزی که به نظر من خیلی مهمه، اینه که از اون حال و هوا بیای بیرون و حواست رو پرت کنی، گویی که اصلا اون اتفاق رخ نداده و با دوپامین دیگری، افت سطح دوپامین ناشی از ایمیل‌های ریجکتی رو پر کنی. تاثیرگذارترین عوامل، تفریح کردن و گذران وقت با دوستان و دل‌بندانه. صحبت کردن با دیگری (صرفا فقط صحبت کردن) موجب حس آرامش می‌شه. هر چی بیشتر با پارتنر یا دوستان (مشخصا اگه پارتنر دارید دوست سگ کی باشه؟ (:) وقت بگذرونید، آرام‌تر و منطقی‌تر این مسیر پرفراز و نشیب رو طی می‌کنید. اگر هم باز آروم نمی‌شید و مغزتون به فاک می‌ره، یا تنهایید و دوستی ندارید و سینگل بدبختم هستید، اشکالی ندارد، طبیعی‌ست. می‌تونم این قول رو بهتون بدم که نمی‌میرید! همچنین، درست می‌شه. بله می‌دونم اگه تو این دوره هستید، نفرت‌انگیزترین جمله همینه. rejection_meme ولی خب واقعیته و فراری ازش نیست. تو کامیونیتیِ آدمایی که دنبال کار هستن، هم باشید، چون درد مشترک دارید باهاشون و می‌تونید تبادل اطلاعات کنید، باز می‌تونه کمک کنه که فکر نکنید تنهایید و فقط شما هستید که ریجکت می‌شید. فیلم و سریال دیدن هم خوب است. باعث می‌شه حدودا یه دو ساعتی (اگه شبی یه فیلم یا یه قسمت سریال ببینید) به چیزی فکر نکنید. نوشتن از حس و حال در لحظه هم می‌تونه از پرخاش ذهن کم کنه و حتی بعدا خوندنش جالبه می‌فهمید که چقد تغییر کردید یا چجوری بوده حس‌تون. پس شد:

  • وقت‌گذرانی با زید و دوستان (به کلمه زید گیر ندید خیلیم خوبه)
  • تفریح و سرگرمی (فیلم و سریال)
  • نوشتن

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

نگاه آماری


Application Count

این، مربوط به مصاحبه‌های سال ۱۴۰۲ بین بازه آبان تا اسفند (۵ ماه) است. رکورد جالبیه!



از ۲۲ شرکت که به مصاحبه کشیده شده.



نمودار حاصل از ۲۴ شرکتی که اپلای شده و حداقل یک مرحله به جلو رفته.

شفاف‌سازی

اموجی‌ها

EmojiMeaning
📜Resume
📞HR Call
👱🏻‍♀️HR Interview
🔧Technical Interview
Accepted
Rejected
I Rejected
📝Task
⚖️Task Review

سوالات پرتکرار | FAQ

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

bullshit_everywhere_meme

Go

Is go an OOP language?
(3 times - ozone, hamkaran-system, sternx)

Go has inheritance concept?

No. Inheritance means inheriting the properties of the superclass into the base class and is one of the most important concepts in Object-Oriented Programming. Since Golang does not support classes, so inheritance takes place through struct embedding. We cannot directly extend structs but rather use a concept called composition where the struct is used to form other objects. So, you can say there is No Inheritance Concept in Golang.

What is Mutex?

What is goroutine?

What is channel?

What is waitgroup?

How go manage memory? how garbage collector work?

Python

What is decorator?
(5 times - digikala, siz-tel, exalab, karnameh, sternx)

Why are we able to change python tuple values even though they are immutable? Suppose:
(1 times - snapp)

a = 1
b = 2
a, b = b, a

Tuple Packing: When you write a, b = 1, 2 Python is packing the values 1 and 2 into a tuple (1, 2), and then unpacking them into the variables a and b. This is a convenient way to assign multiple variables at once.

a, b = 1, 2
# This is equivalent to:
# temp_tuple = (1, 2)
# a = temp_tuple[0]
# b = temp_tuple[1]

Tuple Unpacking: When you write a, b = b, a Python is creating a tuple (b, a) with the current values of b and a, and then unpacking this tuple back into the variables a and b. This is a common idiom in Python for swapping the values of two variables without needing a temporary variable.

a, b = b, a
# This is equivalent to:
# temp_tuple = (b, a)
# a = temp_tuple[0]
# b = temp_tuple[1]

Why This Works Immutability of Tuples: The immutability of tuples means that the tuple itself cannot be changed after it is created. However, this doesn't prevent you from creating new tuples or reassigning variables to new tuples. Variable Reassignment: The operation a, b = b, a involves creating a new tuple and then reassigning the variables a and b to the elements of this new tuple. The original tuple (a, b) is not modified; instead, new tuples are created and the variables are updated to reference these new tuples.

Python is call by reference or call by value?
(1 times - narvan)

In Python, the concepts of "call by value" and "call by reference" are often discussed, but Python actually uses a mechanism sometimes referred to as "call by object reference" or "call by assignment" . Here's what this means: Call by Object Reference Immutable Objects: When you pass immutable objects (like integers, strings, or tuples) to a function, Python behaves similarly to "call by value." This means that the function receives a copy of the reference to the object, and since the object itself cannot be changed, any modifications within the function do not affect the original object outside the function. For example, if you pass a string to a function and attempt to change it, the original string remains unchanged . Mutable Objects: When you pass mutable objects (like lists, dictionaries, or sets) to a function, Python allows changes made within the function to affect the original object outside the function. This is because the function receives a reference to the object, and since the object is mutable, modifications are reflected in the original object. This behavior is often likened to "call by reference"

How does python manage memory? Explain python memory management.

What is the difference between concurrency in python and go? todo

Database

SQL vs NoSQL.
(4 times - snapp, exalab, siz-tel, narvan)

What is ACID?
(3 times - digikala, karnameh, mhholding)

Why redis is fast?

Say some redis data structures.

What is indexing? How database index columns?
(3 times - snappshop, snapp, karnameh, quiz of kings)

Why use indexing a lot, is a bad thing?
(3 times - snappshop, snapp, karnameh)

  1. Increased Storage Requirements
    While having more space might seem beneficial, each index consumes additional disk space. For large databases, this can lead to significant storage overhead, especially if many indexes are created on various columns that may not be frequently queried.

  2. Slower Write Operations
    Every time a record is inserted, updated, or deleted, all associated indexes must also be updated. This can slow down write operations considerably. For databases with high transaction volumes, the overhead of maintaining numerous indexes can lead to performance bottlenecks.

  3. Index Maintenance Overhead
    Indexes require regular maintenance to ensure they remain efficient. Over time, as data is modified, indexes can become fragmented, which can degrade performance. This maintenance can be resource-intensive, requiring additional processing time and effort.

  4. Diminished Query Performance
    While indexes are designed to speed up read operations, having too many can lead to confusion for the query optimizer. The optimizer may struggle to determine which index to use for a given query, potentially leading to suboptimal execution plans and slower performance.

  5. Complexity in Query Optimization
    With many indexes, the complexity of the query optimization process increases. The database management system (DBMS) must evaluate multiple indexes to determine the most efficient way to execute a query. This can lead to longer planning times and may not always result in the best performance.

  6. Reduced Performance for Certain Queries
    Some queries may not benefit from additional indexes, particularly those that involve complex joins or aggregations. In such cases, the overhead of maintaining multiple indexes can outweigh the performance benefits, leading to slower overall query execution.

What are database isolation levels?

We have a query that is too slow, how you try to fast it?
(2 times, snappshop, hamkaran system)

  1. Analyze the Query Execution Plan
    Use EXPLAIN: Run the query with the EXPLAIN command (or EXPLAIN ANALYZE for more detailed output) to understand how the database engine executes the query. This will provide insights into which indexes are being used, join methods, and where potential bottlenecks lie. Identify Slow Operations: Look for operations that have high costs, such as full table scans, large sorts, or expensive joins.

  2. Optimize Index Usage
    Create Indexes: Ensure that appropriate indexes are in place for columns used in WHERE, JOIN, ORDER BY, and GROUP BY clauses. Review Existing Indexes: Check if existing indexes are being utilized effectively. Sometimes, redundant or unused indexes can slow down write operations. Consider Composite Indexes: If multiple columns are frequently queried together, consider creating composite indexes.

  3. Rewrite the Query
    Simplify the Query: Break down complex queries into simpler sub-queries or Common Table Expressions (CTEs) to improve readability and performance. *Avoid SELECT : Instead of selecting all columns, specify only the columns you need. This reduces the amount of data processed and transferred. Use EXISTS Instead of IN: If applicable, using EXISTS can be faster than IN for subqueries, especially when dealing with large datasets.

  4. Optimize Joins
    Check Join Conditions: Ensure that join conditions are using indexed columns. Limit the Number of Joins: If possible, reduce the number of joins or rearrange them to optimize performance. Use INNER JOIN Instead of OUTER JOIN: If you don’t need all rows from both tables, prefer INNER JOIN as it can be more efficient.

  5. Use Query Caching
    Enable Query Caching: If your database supports it, enable query caching for frequently executed queries. This can significantly reduce execution time for repeated queries.

  6. Partition Large Tables
    Table Partitioning: For very large tables, consider partitioning them based on certain criteria (e.g., date ranges). This can improve query performance by limiting the amount of data scanned.

  7. Optimize Database Configuration
    Tune Database Settings: Review and optimize database configuration settings such as memory allocation, cache sizes, and connection limits based on your workload.

  8. Monitor and Analyze Performance
    Use Monitoring Tools: Employ database monitoring tools to track query performance over time and identify trends or recurring issues. Log Slow Queries: Enable slow query logging to capture queries that exceed a certain execution time, allowing you to focus on optimizing the most problematic queries.

  9. Consider Denormalization
    Denormalization: In some cases, denormalizing the database schema (i.e., combining tables) can improve performance for read-heavy applications, at the cost of increased complexity for write operations.

  10. Review Application Logic
    Optimize Application Code: Sometimes, the issue may not be with the query itself but with how it is called from the application. Review the application logic to ensure that it is making efficient use of database queries.

Git

Merge vs Rebase... explain differneces and pros and cons.
(3 times - snappshop, wallex, sternx)

What was your git flow at your previous company?
(3 times - snappshop, wallex, digikala)

What is fast-forward?
(1 times - snappshop)

Design Pattern

What is SOLID?
(4 times - snapp, wallex, digikala, itoll)

Jobname Markdown Generator
<!-- Air Datepicker CSS (jsDelivr - v3.6.0) -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/air-datepicker@3.6.0/air-datepicker.css">

<style>
    :root {
        --primary: #4361ee;
        --secondary: #3a0ca3;
        --success: #4cc9f0;
        --warning: #f72585;
        --light: #f8f9fa;
        --dark: #212529;
        --gray: #6c757d;
        --border: #dee2e6;
        --card-bg: #ffffff;
        --shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
    }
    
    * {
        box-sizing: border-box;
        margin: 0;
        padding: 0;
    }
    
    body {
        font-family: 'Fira Sans', 'Ubuntu Mono', 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
        line-height: 1.6;
        color: var(--dark);
        background: linear-gradient(135deg, #f5f7fb 0%, #e4e8f0 100%);
        padding: 20px;
        max-width: 1400px;
        margin: 0 auto;
        min-height: 100vh;
    }
    
    .container {
        display: flex;
        flex-direction: column;
        gap: 20px;
    }
    
    .form-grid {
        display: grid;
        grid-template-columns: 1fr 1fr;
        gap: 20px;
    }
    
    .full-width {
        grid-column: 1 / -1;
    }
    
    @media (max-width: 992px) {
        .form-grid {
            grid-template-columns: 1fr;
        }
    }
    
    header {
        text-align: center;
        margin-bottom: 30px;
        padding: 25px;
        background: linear-gradient(135deg, var(--primary) 0%, var(--secondary) 100%);
        color: white;
        border-radius: 12px;
        box-shadow: var(--shadow);
        position: relative;
        overflow: hidden;
    }
    
    header::before {
        content: "";
        position: absolute;
        top: -50%;
        left: -50%;
        width: 200%;
        height: 200%;
        background: radial-gradient(circle, rgba(255,255,255,0.1) 0%, rgba(255,255,255,0) 60%);
        transform: rotate(30deg);
    }
    
    h1 {
        font-size: 2.4rem;
        margin-bottom: 10px;
        position: relative;
        font-weight: bold;
    }
    
    .description {
        font-size: 1.1rem;
        opacity: 0.9;
        max-width: 700px;
        margin: 0 auto;
        position: relative;
    }
    
    .card {
        background-color: var(--card-bg);
        border-radius: 12px;
        box-shadow: var(--shadow);
        padding: 20px;
        transition: transform 0.3s, box-shadow 0.3s;
        border: 1px solid rgba(0,0,0,0.05);
        display: flex;
        flex-direction: column;
    }
    
    .card:hover {
        transform: translateY(-5px);
        box-shadow: 0 8px 15px rgba(0, 0, 0, 0.1);
    }
    
    .card-title {
        font-size: 1.3rem;
        margin-bottom: 15px;
        color: var(--primary);
        border-bottom: 2px solid var(--primary);
        padding-bottom: 8px;
        display: flex;
        align-items: center;
        gap: 10px;
    }
    
    .form-group {
        margin-bottom: 15px;
    }
    
    label {
        display: block;
        margin-bottom: 8px;
        font-weight: 600;
        color: var(--dark);
        display: flex;
        align-items: center;
        gap: 8px;
    }
    
    input[type="text"],
    input[type="url"],
    input[type="date"],
    input[type="number"],
    input[type="time"],
    select,
    textarea {
        width: 100%;
        padding: 12px;
        border: 1px solid var(--border);
        border-radius: 8px;
        font-size: 16px;
        transition: all 0.3s;
        background-color: var(--light);
    }
    
    input:focus,
    select:focus,
    textarea:focus {
        outline: none;
        border-color: var(--primary);
        box-shadow: 0 0 0 3px rgba(67, 97, 238, 0.2);
        background-color: #fff;
    }
    
    .checkbox-group,
    .radio-group {
        display: flex;
        flex-wrap: wrap;
        gap: 10px;
        margin-top: 8px;
    }
    
    .checkbox-label,
    .radio-label {
        display: flex;
        align-items: center;
        gap: 8px;
        cursor: pointer;
        padding: 10px 14px;
        background-color: var(--light);
        border-radius: 8px;
        transition: all 0.3s;
        flex: 1;
        min-width: 120px;
        font-size: 14px;
    }
    
    .checkbox-label:hover,
    .radio-label:hover {
        background-color: #e9ecef;
        transform: translateY(-2px);
    }
    
    input[type="checkbox"],
    input[type="radio"] {
        width: 18px;
        height: 18px;
    }
    
    .required {
        color: var(--warning);
    }
    
    button {
        padding: 14px 24px;
        background: linear-gradient(135deg, var(--primary) 0%, var(--secondary) 100%);
        color: white;
        border: none;
        border-radius: 8px;
        cursor: pointer;
        font-size: 16px;
        font-weight: 600;
        transition: all 0.3s;
        display: inline-flex;
        align-items: center;
        justify-content: center;
        gap: 10px;
        box-shadow: var(--shadow);
    }
    
    button:hover {
        transform: translateY(-2px);
        box-shadow: 0 6px 12px rgba(0, 0, 0, 0.15);
    }
    
    button.secondary {
        background: var(--light);
        color: var(--dark);
        border: 1px solid var(--border);
    }
    
    button.secondary:hover {
        background: #e2e6ea;
    }
    
    .actions {
        display: flex;
        gap: 15px;
        flex-wrap: wrap;
        margin-top: 25px;
        justify-content: center;
    }
    
    .preview-container {
        width: 100%;
        margin-top: 20px;
    }
    
    .preview {
        white-space: pre-wrap;
        background-color: var(--light);
        padding: 20px;
        border-radius: 8px;
        border: 1px solid var(--border);
        font-family: 'Courier New', Courier, monospace;
        line-height: 1.5;
        transition: all 0.3s;
        min-height: 300px;
        max-height: 500px;
        overflow-y: auto;
        font-size: 14px;
    }
    
    .preview:hover {
        box-shadow: inset 0 0 10px rgba(0,0,0,0.1);
    }
    
    .field-row {
        display: flex;
        gap: 15px;
    }
    
    .field-row .form-group {
        flex: 1;
    }
    
    .score-input {
        display: flex;
        align-items: center;
        gap: 15px;
    }
    
    .score-input input {
        width: 100px;
        flex-shrink: 0;
    }
    
    .score-display {
        font-weight: bold;
        padding: 8px 16px;
        border-radius: 20px;
        background: linear-gradient(135deg, #4caf50 0%, #2e7d32 100%);
        color: white;
        min-width: 80px;
        text-align: center;
    }
    
    .toggle-section {
        margin-top: 15px;
    }
    
    .toggle-header {
        display: flex;
        align-items: center;
        gap: 10px;
        cursor: pointer;
        padding: 10px;
        background-color: var(--light);
        border-radius: 8px;
        transition: all 0.3s;
        font-size: 14px;
    }
    
    .toggle-header:hover {
        background-color: #e9ecef;
    }
    
    .toggle-content {
        padding: 15px;
        background-color: var(--light);
        border-radius: 0 0 8px 8px;
        margin-top: -5px;
        border: 1px solid var(--border);
        border-top: none;
        display: block; /* Changed from none to block by default */
    }
    
    .icon {
        font-size: 18px;
        width: 20px;
        text-align: center;
    }
    
    .success-badge {
        display: inline-block;
        padding: 6px 12px;
        background: linear-gradient(135deg, #4caf50 0%, #2e7d32 100%);
        color: white;
        border-radius: 20px;
        font-size: 14px;
        margin-left: 10px;
    }
    
    .time-inputs {
        display: flex;
        gap: 15px;
    }
    
    .time-inputs .form-group {
        flex: 1;
    }
    
    /* IMPROVED MERMAID PREVIEW SECTION */
    .mermaid-preview {
        margin-top: 15px;
        padding: 12px;
        background-color: #f8f9fa;
        border-radius: 8px;
        border: 1px solid var(--border);
        min-height: 250px; /* Increased from 150px */
        height: 350px; /* Added fixed height */
        display: flex;
        align-items: center;
        justify-content: center;
        color: var(--gray);
        font-style: italic;
        font-size: 14px;
        overflow: auto; /* Added for scroll if needed */
        resize: vertical; /* Allow user to resize if needed */
    }
    
    .notification {
        position: fixed;
        top: 20px;
        right: 20px;
        padding: 15px 25px;
        background: linear-gradient(135deg, #4caf50 0%, #2e7d32 100%);
        color: white;
        border-radius: 8px;
        box-shadow: 0 5px 15px rgba(0,0,0,0.2);
        transform: translateX(100%);
        opacity: 0;
        transition: all 0.5s;
        z-index: 1000;
    }
    
    .notification.show {
        transform: translateX(0);
        opacity: 1;
    }
    
    .compact-form {
        display: flex;
        flex-direction: column;
        gap: 12px;
    }
    
    .status-options, .apply-options {
        display: grid;
        grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
        gap: 8px;
    }
    
    .duration-fix {
        font-size: 14px;
        color: var(--gray);
        margin-top: 5px;
    }
    
    /* New styles for better layout */
    .interview-process-card {
        display: flex;
        flex-direction: column;
        height: 100%; /* Make card take full height */
    }
    
    .interview-process-card .form-group {
        flex: 1;
        display: flex;
        flex-direction: column;
    }
    
    .interview-process-card textarea {
        flex: 1; /* Make textarea take available space */
        min-height: 150px;
        resize: vertical; /* Allow vertical resize */
    }
    
    .toggle-section {
        flex: 2; /* Give more space to diagram preview */
        display: flex;
        flex-direction: column;
    }
    
    .toggle-content {
        flex: 1;
        display: flex;
        flex-direction: column;
    }

    /* Small tweak for the date inputs when using Air Datepicker */
    .air-date-input {
        position: relative;
    }
    
    /* New styles for email fields */
    .email-field-group {
        display: flex;
        gap: 15px;
        margin-bottom: 15px;
    }
    
    .email-field-group .form-group {
        flex: 1;
        position: relative;
    }
    
    .email-field-group .form-group::after {
        content: "OR";
        position: absolute;
        top: 50%;
        right: -25px;
        transform: translateY(-50%);
        background: var(--light);
        padding: 5px 10px;
        border-radius: 20px;
        font-size: 12px;
        font-weight: bold;
        color: var(--gray);
        z-index: 1;
    }
    
    .email-field-group .form-group:last-child::after {
        display: none;
    }
    
    .email-status-label {
        display: inline-block;
        padding: 4px 8px;
        border-radius: 4px;
        font-size: 12px;
        margin-left: 5px;
    }
    
    .rejection-status {
        background-color: #ffe6e6;
        color: #d32f2f;
    }
    
    .offer-status {
        background-color: #e6f7e6;
        color: #2e7d32;
    }
</style>
Markdown downloaded successfully!
<header>
    <h1>Jobname Markdown Generator</h1>
    <p class="description">Generate markdown files with your content and jobname structure</p>
</header>

<div class="container">
    <div class="form-grid">
        <!-- Company Information -->
        <div class="card">
            <h2 class="card-title"><i class="fas fa-building"></i> Company Information</h2>
            
            <div class="compact-form">
                <div class="form-group">
                    <label for="companyName"><i class="fas fa-signature"></i> Company Name <span class="required">*</span></label>
                    <input type="text" id="companyName"  placeholder="Enter company name">
                </div>
                
                <div class="form-group">
                    <label for="companySite"><i class="fas fa-globe"></i> Company Website <span class="required">*</span></label>
                    <input type="url" id="companySite" placeholder="https://example.com">
                </div>
                
                <div class="form-group">
                    <label for="jobTitle"><i class="fas fa-briefcase"></i> Job Title <span class="required">*</span></label>
                    <select id="jobTitle">
                        <option value="Director of Engineering">Director of Engineering</option>
                        <option value="Engineering Manager">Engineering Manager</option>
                        <option value="Technical Lead">Technical Lead</option>
                        <option value="Team Lead">Team Lead</option>
                        <option value="Senior Software Engineer">Senior Software Engineer</option>
                        <option value="Software Engineer" selected>Software Engineer</option>
                        <option value="Junior Software Engineer">Junior Software Engineer</option>
                        <option value="Software Developer">Software Developer</option>
                        <option value="Junior Software Developer">Junior Software Developer</option>
                        <option value="Intern Software Developer">Intern Software Developer</option>
                        <option value="AI Software Engineer">AI Software Engineer</option>
                        <option value="Back-End Developer">Back-End Developer</option>
                        <option value="Back-End Engineer">Back-End Engineer</option>
                        <option value="Front-End Developer">Front-End Developer</option>
                        <option value="Front-End Engineer">Front-End Engineer</option>
                        <option value="Full-Stack Developer">Full-Stack Developer</option>
                        <option value="Python Developer">Python Developer</option>
                        <option value="Senior Python Developer">Senior Python Developer</option>
                        <option value="Go Developer">Go Developer</option>
                        <option value="Golang Developer">Golang Developer</option>
                        <option value="Senior Golang Developer">Senior Golang Developer</option>
                        <option value="Senior Go Developer">Senior Go Developer</option>
                        <option value="Mobile Developer">Mobile Developer</option>
                        <option value="Android Developer">Android Developer</option>
                        <option value="Game Developer">Game Developer</option>
                        <option value="Systems Engineer">Systems Engineer</option>
                        <option value="Systems Administrator">Systems Administrator</option>
                        <option value="Machine Learning Engineer">Machine Learning Engineer</option>
                        <option value="Database Administrator">Database Administrator</option>
                        <option value="Data Analyst">Data Analyst</option>
                        <option value="Data Scientist">Data Scientist</option>
                        <option value="Data Engineer">Data Engineer</option>
                        <option value="Blockchain Developer">Blockchain Developer</option>
                        <option value="Java Developer">Java Developer</option>
                        <option value="Site Reliability Engineer (SRE)">Site Reliability Engineer (SRE)</option>
                        <option value="Web Developer">Web Developer</option>
                        <option value="Computer Systems Analyst">Computer Systems Analyst</option>
                        <option value="Cloud Engineer">Cloud Engineer</option>
                        <option value="DevOps Engineer">DevOps Engineer</option>
                    </select>
                </div>
            </div>
        </div>
        
        <!-- Interview Timeline -->
        <div class="card">
            <h2 class="card-title"><i class="fas fa-calendar-alt"></i> Interview Timeline</h2>
            
            <div class="compact-form">
                <div class="field-row">
                    <div class="form-group">
                        <label for="sentResume"><i class="fas fa-paper-plane"></i> Sent Resume</label>
                        <!-- changed to text input to allow Air Datepicker -->
                        <input type="text" id="sentResume" class="air-date-input" value="2023-10-30" placeholder="yyyy/mm/dd">
                    </div>
                    
                    <div class="form-group">
                        <label for="hrCall"><i class="fas fa-phone"></i> HR Call</label>
                        <input type="text" id="hrCall" class="air-date-input" value="2023-11-07" placeholder="yyyy/mm/dd">
                    </div>
                </div>
                
                <div class="field-row">
                    <div class="form-group">
                        <label for="technicalInterview"><i class="fas fa-laptop-code"></i> Technical Interview</label>
                        <input type="text" id="technicalInterview" class="air-date-input" value="2023-11-12" placeholder="yyyy/mm/dd">
                    </div>
                </div>
                
                <!-- Email fields grouped together with OR indicator -->
                <div class="email-field-group">
                    <div class="form-group">
                        <label for="rejectionEmail"><i class="fas fa-envelope"></i> Rejection Email 
                            <span class="email-status-label rejection-status">Rejected</span>
                        </label>
                        <input type="text" id="rejectionEmail" class="air-date-input" placeholder="yyyy/mm/dd">
                    </div>
                    
                    <div class="form-group">
                        <label for="offerEmail"><i class="fas fa-envelope"></i> Offer Email 
                            <span class="email-status-label offer-status">Offer</span>
                        </label>
                        <input type="text" id="offerEmail" class="air-date-input" placeholder="yyyy/mm/dd">
                    </div>
                </div>
                
                <div class="form-group">
                    <label><i class="fas fa-clock"></i> Interview Duration</label>
                    <div class="time-inputs">
                        <div class="form-group">
                            <label for="hours">Hours</label>
                            <input type="number" id="hours" min="0" max="10" value="1">
                        </div>
                        <div class="form-group">
                            <label for="minutes">Minutes</label>
                            <input type="number" id="minutes" min="0" max="59" value="10">
                        </div>
                    </div>
                    <div class="duration-fix">Note: 0 hours or 0 minutes will not be displayed</div>
                </div>
            </div>
        </div>
        
        <!-- Application Details -->
        <div class="card">
            <h2 class="card-title"><i class="fas fa-tasks"></i> Application Details</h2>
            
            <div class="compact-form">
                <div class="form-group">
                    <label><i class="fas fa-list-alt"></i> Status <span class="required">*</span></label>
                    <div class="status-options">
                        <label class="checkbox-label">
                            <input type="checkbox" name="status" value="📜" checked>
                            <span class="icon">📜</span> Apply Resume
                        </label>
                        <label class="checkbox-label">
                            <input type="checkbox" name="status" value="📞" checked>
                            <span class="icon">📞</span> HR Call
                        </label>
                        <label class="checkbox-label">
                            <input type="checkbox" name="status" value="🔧" checked>
                            <span class="icon">🔧</span> Technical
                        </label>
                        <label class="checkbox-label">
                            <input type="checkbox" name="status" value="❌" checked>
                            <span class="icon">❌</span> Rejected
                        </label>
                        <label class="checkbox-label">
                            <input type="checkbox" name="status" value="👱🏻‍♀️">
                            <span class="icon">👱🏻‍♀️</span> HR Interview
                        </label>
                        <label class="checkbox-label">
                            <input type="checkbox" name="status" value="✅">
                            <span class="icon">✅</span> Accepted
                        </label>
                        <label class="checkbox-label">
                            <input type="checkbox" name="status" value="📝">
                            <span class="icon">📝</span> Task
                        </label>
                        <label class="checkbox-label">
                            <input type="checkbox" name="status" value="⚖️">
                            <span class="icon">⚖️</span> Code Review
                        </label>
                    </div>
                </div>
                
                <div class="form-group">
                    <label><i class="fas fa-paper-plane"></i> Apply Way <span class="required">*</span></label>
                    <div class="apply-options">
                        <label class="checkbox-label">
                            <input type="checkbox" name="applyWay" value="Site" checked>
                            <i class="fas fa-desktop"></i> Site
                        </label>
                        <label class="checkbox-label">
                            <input type="checkbox" name="applyWay" value="LinkedIn" checked>
                            <i class="fab fa-linkedin"></i> LinkedIn
                        </label>
                        <label class="checkbox-label">
                            <input type="checkbox" name="applyWay" value="Refer">
                            <i class="fas fa-user-friends"></i> Refer
                        </label>
                        <label class="checkbox-label">
                            <input type="checkbox" name="applyWay" value="Jobinja">
                            <i class="fas fa-briefcase"></i> Jobinja
                        </label>
                        <label class="checkbox-label">
                            <input type="checkbox" name="applyWay" value="Jobvision">
                            <i class="fas fa-eye"></i> Jobvision
                        </label>
                        <label class="checkbox-label">
                            <input type="checkbox" name="applyWay" value="Quera">
                            <i class="fas fa-code"></i> Quera
                        </label>
                    </div>
                </div>
                
                <div class="form-group">
                    <label for="interviewPlatform"><i class="fas fa-video"></i> Interview Platform <span class="required">*</span></label>
                    <select id="interviewPlatform">
                        <option value="Google Meet" selected>Google Meet</option>
                        <option value="Microsoft Teams">Microsoft Teams</option>
                        <option value="Zoom">Zoom</option>
                        <option value="In-person">In-person</option>
                        <option value="Phone">Phone</option>
                    </select>
                </div>
                
                <div class="form-group">
                    <label for="score"><i class="fas fa-star"></i> Score <span class="required">*</span></label>
                    <div class="score-input">
                        <input type="range" id="score" min="0" max="10" step="0.5" value="5">
                        <div class="score-display">5/10</div>
                    </div>
                </div>
            </div>
        </div>

        <!-- Interview Process - Improved with better height management -->
        <div class="card interview-process-card">
            <h2 class="card-title"><i class="fas fa-project-diagram"></i> Interview Process</h2>
            
            <div class="form-group">
                <label for="interviewProcess"><i class="fas fa-code"></i> Mermaid Diagram Code <span class="required">*</span></label>
                <textarea id="interviewProcess" rows="6">flowchart LR
sr(Send Resume) --> hr(HR Call) --> ti(Technical Interview) --rejected--x hri(HR Interview) -.-> o(Offer)</textarea>
            </div>
            
            <div class="toggle-section">
                <div class="toggle-header">
                    <i class="fas fa-eye"></i>
                    <span>Preview Diagram</span>
                </div>
                <div class="toggle-content">
                    <div class="mermaid-preview">
                        <p>Mermaid diagram preview will be displayed here after rendering</p>
                    </div>
                </div>
            </div>
        </div>
        
        <!-- Technical Interview Notes (Full Width) -->
        <div class="card full-width">
            <h2 class="card-title"><i class="fas fa-sticky-note"></i> Technical Interview Notes</h2>
            
            <div class="form-group">
                <label for="interviewNotes"><i class="fas fa-edit"></i> Notes <span class="required">*</span></label>
                <textarea id="interviewNotes" rows="8">- Tell us about yourself.
  • Whould you like to work free?

  • Do you think we are family (HR said)?

...

  • Any question?

  <!-- Buttons -->
  <div class="actions">
      <button id="downloadBtn">
          <i class="fas fa-download"></i> Download Markdown
      </button>
      <button class="secondary" id="resetBtn">
          <i class="fas fa-redo"></i> Reset Form
      </button>
  </div>
  
  <!-- Preview -->
  <div class="preview-container">
      <div class="card">
          <h2 class="card-title"><i class="fas fa-eye"></i> Preview</h2>
          <div class="preview" id="markdownPreview">
              <!-- Preview content will be generated here -->
          </div>
      </div>
  </div>

hamkaran system

Status

📜📞🔧❌

Go Developer

Interview Process

flowchart LR
    sr(Send Resume) --> hr(HR Call) --> ti("Technical Interview
(live code)") --rejected--x hri(HR Interview) -.-> o(Offer)

Apply Way

Jobinja

Interview Date

Interview Duration

Interview Platform

Google Meet

Technical Interview

Live code

رشته ای از پرانتز باز و پرانتز بسته را در نظر بگیرید. در این رشته‌ها هر پرانتز باز با یک پرانتز بسته جفت می باشد. مانند:

(())
()()
(())()

ارزیابی هر رشته‌ای از پرانتز باز و بسته را با قواعد زیر تعریف می کنیم:

۱. اگر رشته فقط و فقط شامل () باشد آنگاه مقدار ارزیابی آن معادل ۱ خواهد بود.

۲. فرض کنید که A , ‌B خود رشته ایی از پرانتز باز و بسته باشد آنگاه مقدار ارزیابی رشته ایی از اتصال آنها در کنار هم معادل مجموع ارزیابی هر دوی آنها خواهد بود. به عنوان مثال:

A = ()    =>    Eval(A) = 1
B = ()    =>    Eval(B) = 1

AB = ()()   =>    Eval(AB) = Eval(A)+Eval(B) = 1+ 1 = 2

۳. فرض کنید A رشته ای از پرانتز باز و پرانتز بسته باشد آنگاه مقدار رشته‌ی (A) برابر است با 2 به توان مقدار ارزیابی A. به عنوان مثال:

A = ()()()    =>   Eval(A) = 3
B = (A)      =>    Eval(B) = 2 ^ Eval(A) = 2 ^ 3 = 8

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

مثال:

()  => 1
()() => 2
(()) => 2
(()()) => 4
()(())() =>4

این سوال رو نتونستم حل کنم.

Answer (GPT):
Also in playground.

package main

import (
	"fmt"
	"log"
	"math"
)

// Eval computes the value of a balanced parentheses string based on rules:
// 1. "()" evaluates to 1
// 2. Concatenation AB evaluates to Eval(A) + Eval(B)
// 3. Wrapping (A) evaluates to 2^Eval(A)
func Eval(s string) int {
	// stack of ints; use -1 as marker for '('
	stack := []int{}

	for _, ch := range s {
		switch ch {
		case '(':
			// push marker
			stack = append(stack, -1)

		case ')':
			// check top of stack
			top := stack[len(stack)-1]
			if top == -1 {
				// it's "()": pop marker and push 1
				stack = stack[:len(stack)-1]
				stack = append(stack, 1)
			} else {
				// sum all values until marker
				sum := 0
				for len(stack) > 0 && stack[len(stack)-1] != -1 {
					sum += stack[len(stack)-1]
					stack = stack[:len(stack)-1]
				}
				// pop the marker
				if len(stack) == 0 {
					log.Fatal("invalid parentheses string")
				}
				stack = stack[:len(stack)-1]

				// compute 2^sum and push
				val := int(math.Pow(2, float64(sum)))
				stack = append(stack, val)
			}
		}
	}

	// final result is sum of stack
	result := 0
	for _, v := range stack {
		result += v
	}
	return result
}

func main() {
	tests := []string{"()", "()()", "(())", "(()())", "()(())()"}
	for _, t := range tests {
		fmt.Printf("%s => %d\n", t, Eval(t))
	}
}

Score

4/10

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

Malltina

Status

📜📞🔧❌

Senior Software Engineer (python)

Interview Process

flowchart LR
    sr(Send Resume) --> hr(HR Call) --> ti("Technical Interview
(Live code)") --rejected--x hri(HR Interview) -.-> o(Offer)

Apply Way

Jobinja

Interview Date

Interview Duration

Interview Platform

Google Meet

Technical Interview

Live code

Write a function to calculate pow(x, n).

My answer:

import sys

def pow(x: float, n: int) -> float:
    res = 1
    if n == 0:
        return res
    while n > 0:
        if n % 2 == 1:
            res *= x
        x *=x
        n >>= 1
    return res

x = 10000
n = 20000
ans = pow(x, n)
print(ans)

Score

6/10

اوکی بود خیلی نظر خاصی ندارم. مقداری عجیب بود چنین شرکت نه چندان شناخته‌شده‌ای لایوکد داشته باشه. روند مصاحبه هم معرفی بود و حل مسئله. ایمیل ریجکتی هم ندادند.

wallex

Status

📜📞🔧❌

Senior Python developer

Interview process

flowchart LR
    sr(Send resume) --> hr(HR call) --> ti(Technical Interview) --rejected--x hri(HR Interview) -.-> o(Offer)

Apply Way

Site

Interview Date

Interview Duration

Interview Platform

Google Meet

Technical Interview

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

Score

9/10

به نظر خودم مصاحبه خوبی بود و امید خوبی به اکسپت شدن داشتم. حس می‌کنم اون سوال ریاضی و آماری رو خوب جواب ندادم ریجکت شد. در هر صورت خودم حس خوبی داشتم و خوب تونستم پرزنت کنم و با مایندست مصاحبه‌کننده هم خیلی حال کردم. بیشتر دنبال این بود که ببینه خب چی کارا کردی؟ این تجربه هایی که داشتی و اینا چجوری بوده؟ نگاهِ یه ربات استخدام کنم همه چی بلد باشه نداشت.

ozone social

Status

📜📞🔧🔧👱🏻‍♀️✅

Go developer

Interview Process

flowchart LR
    sr(Send resume) --> hr(HR call) --> ti1(1st Technical Interview) --> ti2(2nd Technical Interview) --> hri(HR Interview) --> o(Offer) --accepted :) --> r((" "))

Apply Way

Linkedin

Interview Date

Interview Duration

1st Technical Interview

یک بار تایم مصاحبه رو عوض کردم که خیلی حرفه‌ای برخورد کردن. مصاحبه خوبی بود و خودم از خودم راضی بودم و وقتی لایوکدو زدم دیگه گفتم تمومه کار.

Live code

یه سوال الگوریتمی از codewars انتخاب کرده بودن که این بود. سرچ کردن هم آزاد بود.
من با استفاده از string و این‌ها سعی کردم مسئله رو حل کنم و روشی هم که تو ذهنم داشتم اوکی بود و مصاحبه‌‌کننده تایید کرد اما یه سری پیشنهاد داد که می‌تونی از لایبرری استفاده کنی برای ولیدیشن که خب من گفتم نمی‌دونستم می‌شه استفاده کرد چون مسائل الگوریتمی جوریه که می‌خوان بدونن چطور فکر می‌کنی. یه جاهایی برای تبدیل string به int سرچ کردم. در کل روال بود برام.

قبلش به من نگفتن که لایوکد هم هست و من خیلی شرایط درستی براش نداشتم هر چند که کار دراومد ولی بهتر بود می‌گفتن.

2nd Technical Interview

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

HR Interview

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

Score

8/10

مصاحبه‌ها خوب بود به ویژه فنی‌ها که اندازه و درست بود. یک بار بعد مصاحبه اول گفتن حضوری برم برای مصاحبه که من تا حدودی فهمیدم اوکیه قضیه (طبق تجربه بعد یه مصاحبه می‌گن حضوری بیا یعنی ۸۰ درصد اوکیه) اما اون تایم شرایطم جوری بود که نمی‌تونستم حضوری فول‌تایم باشم و به همین دلیل بهشون اطلاع دادم که نمی‌تونم (برای همینه تایم مصاحبه‌ها انقد فاصله داره و جدای اون دو مورد کنسلی هم بود). بعد از حدود ۴ ماه، دوباره تو لینکدین پیام دادم (میزان پاسخ‌گویی‌شون تو لینکدین ۱۰/۱۰ بود واقعا) که اگه اوکی هستین من شرایطم اوکیه و خب جلسه ست کردن و فوقع ما وقع. (: تا حدی من سیگنال سبز رو گرفته بودم، هم اون اول هم بعد بازگشت دوباره که خب باحال بود این روند.

exalab

Status

📜📞🔧❌

Python Developer (crawl)

Interview process

flowchart LR
    sr(Send resume) --> hr(HR call) --> ti(Technical Interview) --rejected--x hri(HR Interview) -.-> o(Offer)

Apply Way

jobinja

Interview Date

Interview Duration

Interview Platform

Google Meet

Technical Interview

ایمیلی که برای مصاحبه فرستاده بودن، بسیار مرتب و منظم و فارسی بود. تمپلیت خوبی برای پیام‌های ایمیل‌شون داشتن. اطلاعاتی بیش از ایمیل‌های مصاحبه عادی داشت. حاوی اطلاعات مصاحبه‌کننده، لینک محصول، اگر نیاز به تغییر مصاحبه باشه با کی باید در میون بذاریم و آیا حتما سیستم نیازه یا نه (که گفته بودن نیاز نیس) و علائم نگارشی هم رعایت شده بود. مصاحبه one-on-one بود. مصاحبه‌کننده، آدم به شدت متین و مودّب و حرفه‌ای‌ای بود. چند دقیقه دیر جوین شد به میت و عذرخواهی کرد. داخل مصاحبه مطالبی رو یادداشت می‌کرد که باعث می‌شد به دوربین نگاه نکنه که گفت من باید یه سری مطالب رو از مصاحبه بنویسم و منتقل کنم اگه به دوربین نگاه نمی‌کنم بی‌احترامی برداشت نشه. مقداری هم شبیه آقا استالمن بود از جهت استایل، سیس و چهره.

Score

6/10

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

Snapp

snapp

Status

📜📞🔧❌

Software Engineer (Golang/Python) - Map

Interview process

flowchart LR
    sr(Send resume) --> hr(HR call) --> ti1(1st Technical Interview) --rejected--x  ti2(2nd Technical Interview) -.-> hri(HR Interview) -.-> o(Offer)

Apply way

Site

Interview date

Interview duration

1st Technical Interview

Score

7/10

این مصاحبه برای وقتیه که تجربه کاری نداشتم و اون پختگی و تفت دادن لازم برای مصاحبه و صحبت از تجربیات کاری گذشته وجود نداشت. یکی دو سوال رو هم خوب بلد نبودم. مثلا اسم همه‌ی لایه‌های OSI یادم نبود یا design patterns نمی‌دونستم چیه. اما در کل خوب بود. سوالا هم پیچیدگی خاصی نداشت و آسون بود. فیدبک که خب مثل همه جا یک عمل تعریف نشده‌ست کاری باهاش نداریم. از نظر hrای، اسنپ به شدت ضعیف و افتضاحه. اصلا تو لول شرکتی که چندین میلیون یوزر داره نیست. اینو خیلی جاها هم شنیدن گفتن ولی ما که با بقیه کار نداریم، این‌جا هدف، انتشار تجربه‌ست و آن چیزی که رخ داده. آن چه که من به وضوح دیدم، کند بودن و طولانی بودن پروسه مصاحبه‌ست. طوری که حدودا یک ماه از ارسال رزومه گذشت تا به مصاحبه برسه. دلیل و توجیه این که کاندیداها زیاده که اینطوریه نیز مهمل کلیشه‌ای دیگری‌ست. با تقسیم نیرو و مدیریت درست می‌شه هندلش کرد. حتی مصاحبه‌های بعدی که در سال‌های دیگه با اسنپ داشتم، این موضوع باز هم دیده شد و آزار داد. به عبارتی؛ در بهترین حالت، از وقتی که رزومه می‌فرستی تا زمانی که آفر بدن، دو ماه طول می‌کشه. حالا می‌تونی متصور باشی بخوره به تایم تعطیلی، حوادث نامترقبه و... که چقد به طول می‌انجامه.

snapp

Status

📜📞🔧❌

Software Engineer (Golang)

Interview process

flowchart LR
    sr(Send resume) --> hr(HR call) --> ti1(1st Technical Interview) --rejected--x  ti2(2nd Technical Interview) -.-> hri(HR Interview) -.-> o(Offer)

Apply Way

Site

Interview Date

Interview Duration

Interview Platform

Skype

1st Technical Interview

اول مصاحبه بلوتوث هندزفریم قطع و وصل می‌شد و یک دقیقه از تایم مورد نظر گذشته بود (دقیقا یک دقیقه!) تا جوین شم که تو این فاصله HR زنگ زد و علت را جویا شد! و مشکل رو توضیح دادم.
مصاحبه با دونفر بود که هر دو فنی بودن.

Score

8/10

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

Snapp Market Pro

Status

📜📞🔧❌

Software Engineer

Interview process

flowchart LR
    sr(Send resume) --> hr(HR call) --> ti1(Technical Interview) --rejected--x  ti2(Live Code) -.-> hri(HR Interview) -.-> o(Offer)

Apply Way

Site & Linkedin

Interview Date

Interview Duration

Interview Platform

Skype

HR Call

Technical Interview

مصاحبه با یک نفر بود.
از هر چی که تو رزومه و گیتهابم بود پرسید. مثلا می‌پرسید فلان پروژه رو که زدی هدفت چی بوده؟ چه تکنولوژی‌هایی استفاده کردی و بلاه بلاه بلاه. بعدش روش گوشه رینگ رو انتخاب کرد و با بحث میکروسرویس‌ها انداخت گوشه رینگ. هر چی می‌گفتم، می‌گفت خب فلان ایرادو داره. می‌گفتم trade-off عه می‌گفت چه چیزی رو چشم‌پوشی می‌کنیم که بریم سمتش؟ خلاصه ۷۰ درصد مصاحبه همین بحث بود.

Score

5.5/10

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

snappshop

Status

📜📞🔧❌

Senior Software Engineer (Golang)

Interview process

flowchart LR
    sr(Send resume) --> hr(HR call) --> ti1(1st Technical Interview) --rejected--x  ti2(2nd Technical Interview) -.-> hri(HR Interview) -.-> o(Offer)

Apply Way

Jobinja

Interview Date

Interview Duration

Interview Platform

Skype

1st Technical Interview

سوالات سناریومحور و کنکوری بود. مثلا یه سناریو می‌گفت که در شرایط x چی کار می‌کنی؟ و هی از اون سناریو سوالات مختلف درمیاورد. نحوه برخورد و رفتار مصاحبه‌کننده اوکی بود و یه نفرم بود. نیم ساعت بیشتر از تایم ست شده طول کشید.

Score

7/10

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

cpol

Status

📜📞👱🏻‍♀️🔧❎

Back-End developer (Django)

Interview Process

flowchart LR
    sr(Send Resume) --> hr(HR Call) --> hri(HR Interview) --> ti(Technical Interview) --> o(Offer) --rejected--> r((" "))

Apply Way

jobinja

Interview Date

Interview Duration

Interview Platform

Google Meet

HR Interview

تیپیکال سوالای hrای!

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

Technical interview

دو نفر بودن که یکیشون hr بود و دیگری tech lead. باز هم تصویر hr دیده نمی‌شد و اون یکی دوست‌مون قابل رویت بود خداروشکر. خب من اینجا فهمیدم که اون باگ بیرون پرت شدن از منه و بعد چند بار قطع شدن گفتن که زنگ بزنیم پشت تلفن ادامه بدیم مصاحبه رو (تقریبا آخرای مصاحبه بود) که تصمیم درستی بود.

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

Offer

بعد از چند روز، hr با شماره خودش (پیش شماره 933 داشت) زنگ زد و گفت ما اوکی‌ایم همکاری کنیم و رقم پیشنهادی رو گفت. دیدم خیلی کمه. پرسیدم ناهار و میان وعده چطوره؟ دورکاری؟ گفت ناهار با خودتونه و کار هم کلا حضوریه. گفتم تا یک هفته دیگه بهتون اطلاع می‌دم. گفت نمی‌شه زودتر؟ خیلی دیره. گفتم اوکی تا سه چهار روز دیگه می‌گم بهتون. مقداری اندیشیدم و چرتکه انداختم هر طور حساب کردم دیدم نمی‌صرفه. پول خورد و خوراک و جا رو بذاری کنار، هیچی نمی‌مونه. بعد همون چند روزی که مهلت گرفته بودم، به hr اسمس دادم (نمی‌دونم ملّت مشکل‌شون با ایمیل چیه) و گفتم به این دلایل نمی‌تونم همکاری کنم. جواب داد رقم درخواستیتون چقده؟ و در جواب، رنج مورد نظرمو گفتم که بعدش گوستم کرد. می‌تونست یه پیام بده که ما توانایشو نداریم خیلی ممنون از شما یا همچین چیزی نمی‌دونم این رفتارای کودکانه‌ی گوست‌گونه کی‌‌ می‌خواد درست بشه تو شرکتا.

Score

5/10


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

hermes capital

Status

📜📞🔧❌

Software Engineer

Interview process

flowchart LR
    sr(Send resume) --> hr(HR call) --> ti(Technical Interview) --rejected--x hri(HR Interview) -.-> o(Offer)

Apply way

jobinja

Interview date

Interview duration

Interview Platform

Google Meet

Technical interview

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

Score

5/10

Quiz of Kings

Status

📜📞🔧❌

BackEnd Developer (Go)

Interview process

flowchart LR
    sr(Send resume) --> hr(HR call)
    hr(HR call) --> ti(Technical Interview) --rejected--x hri(HR Interview) -.-> o(Offer)

Apply Way

jobinja

Interview Date

Interview Duration

Interview Platform

Google Meet

Technical Interview

مصاحبه با یک نفر بود.

Score

7/10

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

yektanet

Status

📜📞🔧❌

Software Engineer

Interview process

flowchart LR
    sr(Send resume) --> hr(HR call) --> ti1(1st Technical Interview) --rejected--x ti2("2nd Technical Interview (On-site)") -.-> hri(HR Interview) -.-> o(Offer)

Apply way

Site & jobinja

Interview Date

Interview Duration

30 minutes

Interview Platform

Google Meet

HR Call

اچ‌آر زنگ زد یه ۱۵ دقیقه‌ای حرف زدیم. داشت رزومه رو دابل‌چک می‌کرد و هر چی که نوشته بودم رو می‌خوند و یه علامت سوال می‌ذاشت جلوش.

Technical Interview

Live code

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

def check_buzz(n: int) -> str | None:
    if n % 15 == 0:
        return "FizzBuzz"
    if n % 3 == 0:
        return "Fizz"
    if n % 5 == 0:
        return "Buzz"
    return None

My first answer with o(n ^ 2)

def check_2sum(nums: list, k: int) -> tuple:
    index = 0
    for item in nums:
        for item_2 in nums[index +1:]:
            if item_2 + item == k:
                return item, item_2
        index +=1

My second answer with O(n)

def check_2sum(nums: list, k: int) -> tuple:
    map_ = {}
    for i in range(len(nums)):
        map_[nums[i]] = i

    for i in range(len(nums)):
        target = k - nums[i]
        if target in map_ and map_[target] != i:
            return nums[i], nums[map_[target]]

Best answer (one loop)

def twosum(nums: list[int], target: int) -> list[int]:
    num_map = {}  # Hash table to store number and its index
    for i, num in enumerate(nums):
        complement = target - num  # Find the complement
        if complement in num_map:
            return [num_map[complement], i]  # Return indices of complement and current number
        num_map[num] = i  # Store the number with its index

قسمت return رو فکر کنم اشتباه نوشتم به نظرم i نوشته بودم جای nums[i]. حالا خیلی مهم نیس منطق و روش درسته و خودشونم گفته بودن syntax مهم نیست.

Score

5/10

هر دو سوال رو درست زدم. گر چه سوال دوم برای روش بهینه‌ش رو یه مقدار بیشتر فکر کردم چون یه بار زده بودم، داشتم یادم میاوردم و می‌دونستم باید hash map طور برم جلو. اون ایده فور دوم یه مقدار با زور اومد ذهنم ولی اومد در نهایت، زدم و اوکی هم بود. نت آن‌استیبلی هم داشتم از شانس ولی یه درصدم فکر نمی‌کردم ریجکت شه. انتظار اینو داشتم حداقل یه مرحله جلو بره. بعد از چند هفته به hr ایمیل زدم و جوابی نمی‌داد یه جواب سرسری داد که من الان سیستم پیشم نیس چند روز دیگه خبر می‌دم. مثل این که ایمیل شرکتی‌شون نیومده بود و چند روز دنبال‌شون بودم که بهم بگن ریجکت شدی! بعدش ایمیلو خودش فرستاد. hr نوبی بود خلاصه. سیستم مصاحبه‌شون اینجوری کار می‌کنه: ریفر +‌ خفه کردن با الگوریتم. اگر سابقه کاری هم نداشته باشید، ندید کنسلید (احتمالا به جز ریفرا). یه چیز دیگه‌ایم که خیلی از اونایی که اونجا بودن شنیدم، فشار کاری بالا و عدم وجود تعادل بین کار و زندگیه. طوری که از کلمه‌های برده و حیوانات اهلی دربارش استفاده می‌کنن. اما پول خوبی می‌دن. حقوق پیشنهادی که پشت تلفن گفتم، ۵تا گذاشتم رو حقوق خودم و برای اونجا یه ۱۰تام اومدم روش و یه ۵تای دیگم جهت بازه بین این و آن (بکنید از این کارا، حال می‌ده (:) که خب می‌دونستم مشکل مالی ندارن ولی با این حال گفتم الان تلفنو قطع می‌کنه! بدین صورت. نمره‌ای که دادم هم قابل مشاهده‌ست.

wallex

Status

📜📞🔧❌

Junior Backend Developer

Interview process

flowchart LR
    sr(Send Resume) --> hr(HR Call) --> ti(Technical Interview) --rejected--x hri(HR Interview) -.-> o(Offer)

Apply way

Site & Linkedin & Refer :)

Interview date

Interview duration

Interview Platform

Google Meet

Technical Interview

مصاحبه با دو نفر بود که هر دو فنی بودن.

Score

8/10

سوالای خوبی پرسیدن که پایه مهندسی نرم‌افزار داشت نه فریموورک و زبان و ابزار. سوالای دیتابیسی و اون سوال یک میلیون ریکوئست رو خوب جواب ندادم و به نظرم همون فاتحمو خوند. به جز اینا مشکلی تو بقیه موارد نداشتم. فقط یه مورد عجیب دیدم که هنوزم برام خنده‌داره. بعد مصاحبه حدود چند هفته گذشت و خبری نشد. بوی ریجکتی و گوست شدن میومد قشنگ. اما هرگز همینجوری شل نگیرید، پیگیر باشید و موقع نتیجه هم فیدبک بخواید. فیدبک خواستنیه و گرفتنی کسی فیدبک نمی‌ده باید بگیریش. شرکت خوبیم بود تمام زورمو می‌خواستم بزنم یه جورایی. تو لینکدین به hr پیام دادم پس چی شد نتیجه مصاحبه ما؟ (حالا اینجوری نه منطقا) فورا بعد چند دقیقه زنگ زد و عذرخواهی و اینا که دیر شده و گفت پوزیشن hold شده و شما هم overqualified شدی سطح‌تون بالا بوده و تو لول مید هستید و فراتر از جونیورید. خیلی جلوی خندمو نگه داشتم. به نظرم اینجوری گفت که مثلا ناراحت نشم و این حرفا وگرنه من خودم می‌دونم که سگ‌جونیورم، سابقه کاریم مشخصه خب. البته که مودب و محترم صحبت می‌کرد. برای شرکتی تو این سطح بعیده. شگفت‌انگیز!

digikala(digicloud)

Status

📜📞🔧📝⚖️❌

Python Engineer (Digicloud)

Interview process

flowchart LR
    sr(Send resume) --> hr(HR Call) --> ti1(Technical Interview) --> t(Task) --> ti2(Task Review) -- rejected --x hri(HR Interview) -.-> o(Offer)

Apply Way

jobinja & site

Interview Date

Interview Duration

Interview Platform

Skype

Technical Interview

مصاحبه با دو نفر بود که هر دو فنی بودن. یکی‌شون خیلی سوالای کمی پرسید و دیگری حضور پررنگ‌تری داشت. قبل مصاحبه، hr که پروسه رو توضیح داد، از لایوکد هم حرف زد امّا خبری از لایوکد و الگوریتم نبود. مصاحبه‌کننده بسیار خوش‌برخورد، مودب و باحوصله بود. خوب گوش می‌کرد، استرس نمی‌داد و باعث می‌شد ریلکس باشی. ذهنش هم خیلی مرتب و منسجم بود. سوالات درهم و میکسی از هر شاخه نمی‌پرسید. مثلا در مورد پایتون می‌پرسید بعد می‌گفت خب دیگه سوالام از این بخش تموم شد بریم در مورد دیتابیس حرف بزنیم بعد سوالای دیتابیس رو مطرح می‌کرد بعد می‌گفت به نظرم کافیه بریم در مورد معماری و میکروسرویس صحبت کنیم. این خیلی برام جالب بود که ذهن منظمی داره و step by step جلو می‌ره. ممکن بود یه سوالایی بپرسه که فراتر باشه بعدش می‌گفت نگران نباش اگه خیلی باهاش آشنا نیستی انتظار نمی‌ره که بدونی و جزو مصاحبه نبود صرفا خواستم ببینم باهاش آشنایی داری یا نه. در کل حال کردم با مصاحبه چون یادگیری داشت توش و تقریبا هر چی که می‌تونستن، پرسیدن.

          Answer : We use JOIN with tables

این سوال با کلمه for آدمو به اشتباه میندازه. خودشونم گفتن همه این سوالو اشتباه جواب دادن و گمراه شدن در صورتی که ساده‌ست.

          My answer:

فرض کنید همه چی خوب پیش رفت و من رو اکسپت کردین و اومدم تو تیم‌تون. چی باعث می‌شه که بعد یه سال فکر کنید انتخاب‌تون خوب بوده؟

          They response:

به نظرم پیگیر بودن و تلاش برای یادگیری و نظم خیلی مهمه و ارتباط داشتن. اینا چیزاییه که می‌تونه باعث پیشرفت فردی و حتی تیمی بشه.

Task

من خیلی وقت نداشتم برای انجام تسک حتی می‌خواستم کلا نزنم دیدم حسش نیس زیاده وقت بذارم ممکنه کلا ریجکت شه ولی گفتم دیجی‌کالاس یهو دیدی اوکی شد. خلاصه سعی کردم از اون‌جاهایی که بلدم شروع کنم و سه روزه زدم. همه چی داشت تسک‌شون. مهم‌ترین بخش، قسمت async و back-offاش بود که خوب نزدم ولی بقیه قسمتا رو خیلی تمیز زدم هدفم این بود کد مرتبی باشه و خب مثل این که همون دو قسمت براشون مهم بود. بعد از فرستادن تسک، hr فکر کرده بود وقتش گذشته و اگه پیگیری نمی‌کردم، مثل این که کلا زنگ نمی‌زدن بهشون توضیح دادم تاریخ ایمیلا هست تو همون بازه ددلاین فرستادم. موقع زنگ زدن البته عذرخواهی کرد برای اشتباه پیش آمده.
تسک و جواب من.

Task Review

اولش گفت یه بار بیار بالا و همه قسمت‌ها رو از اول تست کن. مثل register, login و اضافه کردن rssها و بقیه apiهایی که بود. مهم‌ترین نکته‌ای که بود، همون قسمت back-off و asyncاش بود. که گفت خب اینجوری که زدی می‌دونی چه مشکلی ایجاد می‌شه؟ و فهمیدم که اون قسمت امضای آفر بود. بعد گفت راه‌حلی داری واسش؟ و یه سری سوال هم کرد که فرض کن یه عالمه لینک خراب داشته باشیم چجوری خیلی سریع و بدون خون‌ریزی می‌تونیم اون خراب‌ها رو تشخصی بدیم و دیگه fetch نکنیم. در مورد دیزاین دیتابیسم یه سری نکات گفته شد که یه جا foreign key استفاده کرده بودم که نیاز نبود. و خب بعد از همه اینا گفت که تمیز کد زدی و معماریت عالیه و تست هم نوشتی اینم خیلی خوبه اما اون قسمتم می‌زدی تموم بود. ازم فیدبک خواست. گفت به نظرت چجوریه؟ ما همه چیو واضح توضیح داده بودیم؟ نظرت راجع به تسک چی بود؟ حس می‌کنم با توجه به مصاحبه‌هایی که می‌ریم خیلی خوب نمی‌زنن این تسکو. در طول مصاحبه هم بسیار مودب و محترمانه برخورد کرد. یه جا وب‌کم رو قطع کرده بود و در مورد کد نظر می‌داد و وب‌کمو روشن کرد گفت من نظرمو می‌گما حس نکنی دارم می‌گم کدی که زدی خوب نیس نترسی یه وقت؟ :)

Score

9/10

تجربه حرفه‌ای و خوبی بود.

karnameh

Status

📜📞🔧👱🏻‍♀️❌

Backend developer (python-django)

Interview process

flowchart LR
    sr(Send resume) --> hr(HR call)
    hr(HR call) --> ti1(Technical Interview) --rejected--x hri(HR Interview) -.-> o(Offer)

Apply Way

jobinja & site

Interview Date

Interview Duration

Interview Platform

Google Meet

Technical Interview

دو نفر بودن یکی hr و دیگری فنی.

Score

6/10

مصاحبه بدی بود. هم خودم خوب نبودم و هم اون‌ها. اولش که hr اومد یه سری توضیحات داد از شرکت و کاراشون که خیلی آشفته بود هی می‌رفت و میومد. گفت خودتو معرفی کن که خب من داشتم به hr توضیح می‌دادم چیکار کردم نه یه آدم فنی و عملا نتونستم با کارای فنیم خودمو خوب پرزنت کنم چون اشرافی به موضوع نداشت. یک مقداری هم منتظر نفر سوم شدیم که بیاد. چون نفر اصلی مثل این که نشده بود بیاد و یکی دیگه جاش اومد. کلهم فضا اینجوری بود که مصاحبه‌ها زیادن تند تند بریم تموم شن کار داریم! اون بی‌نظمی رو می‌تونستم حس کنم. مصاحبه هم زود تموم شد و خب من قشنگ فهمیدم که ریجکت شدم. دو سه روز بعد هم ایمیل ریجکتی رو زدن.

از hr یه سوال پرسیدم (از این سوال فلسفیا که می‌خوای به hr نشون بدی کت تن کیه) و اون این بود که: بزرگ‌ترین چالشی که می‌تونم حل کنم چیه؟ چی ارزش حساب می‌شه؟ که خب یه مکثی کرد فهمیدم اصلا نفهمید و یه جوابی داد که داده باشه تیما رو توضیح داد و اهداف شرکتو که خب من با همین سوال فهمیدم فازشونو. این از اون سوالاس که تو خارج باید پرسید ولی خب تو ایرانم می‌تونی ببینی طرفت چقد حرفه‌ایه.

siz-tel

siz-tel

Status

📜📞🔧❎

Golang Internship

Interview process

flowchart LR
    sr(Send resume) --> hr(Call) --> ti1(Technical Interview) --> o(Offer) --rejected--> r((" "))

Apply way

Linkedin

Interview duration

1 hour

Technical Interview

TODO

Score

6/10

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

siz-tel

Status

📜📞🔧❎

Junior Golang Developer

Interview process

flowchart LR
    sr(Send resume) --> hr(Call) --> ti(Technical Interview) --> o(Offer) --rejected--> r((" "))

Apply way

Linkedin

Interview Date

Interview Duration

1 hour & 15 minutes

Technical Interview

Live code

صفحه رو که شِیر کردم مصاحبه‌کننده گفت: با vim و tmux می‌خوای کد بزنی جدی؟ گفتم آره صرفا چندتا فانکشن کوچولو می‌خوایم بنویسیم دیگه نیازی به IDE نیس. (: یه چلنج ریز در مورد goroutineها بود. هدف نحوه کار باهاشون و مفهوم چنل و سینتکس کلی go بود. چلنجه این بود که دو تا goroutine داریم و می‌خوایم از یکی به اون یکی دیتا بفرستیم (با channel) و یه سری پیام نشون بدیم. که خب لابه‌لاش سوالای مفهومی که اگه goroutineای که تو main وجود داره تموم بشه چه اتفاقی برای بقیه میوفته یا چرا بدون استفاده از sleep بقیه goroutineها نشون داده نمی‌شدن و سوالاتی از این دست. من هم کانسپت کلی رو می‌دونستم (همیشه کانسپت مهمه جزئیات داکیومنت داره) که خب waitGroup چیه و اون وقفه برا اینه که اگه روتین اصلی تموم بشه بقیه هم kill می‌شن. یکم برای پیدا کردن کتابخونه‌هایی مثل rand و waitGroup سرچ کردم برای این که بدونم از کجا import می‌شن که سرچ هم آزاد بود. در کل اوکی بود با این که از قبل حس می‌کردم رو concurrency مسلط نیستم. کدی که زدم رو این‌جا می‌تونید ببینید و از این‌جا ران کنید.

Score

8/10

من یک بار برای internship با این شرکت مصاحبه کرده بودم که چون حقوق نداشت رد کردم. اصلا در مخیله‌ام نمی‌گنجه کار کنی و پول ندن! ربطی به سطح هم نداره چون عدد کم یه بحثه، نداشتن حقوق بحث دیگه. اصلا چیز قابل قبولی نیست. انی‌وی. بعدها دیدم که پست گذاشتن برای جونیور و دوباره به همون کسی که مصاحبه داشتم، تو لینکدین پیام دادم و گفتم مایل به همکاری هستم گفت اوکیه یه تایم ست کن مصاحبه کنیم که برای این کار از calendly استفاده می‌کردن. hrای هم نبود و همه کارا رو تک‌لید (یاseniorشون) انجام می‌داد. بعدش که اوکی شد و دو روز بعد از مصاحبه با شماره خودش زنگ زد و گفت اوکی‌ای علاقمندی و درسته تجربت زیاد نیس ولی کارو درمیاری. چه عددی مد نظرته؟ منم عددم رو (که خب می‌خواستم بالاتر از اونجایی که قبلا بودم باشه)‌ رو گفتم و ایشون گفتن که بالاس و خیلی فاصله داره با چیزی که مد نظر ماست و داستان همین‌جا به پایان می‌رسه. فکر کنم ناهار هم نداشتن. ناهار وظیفه شرکته. اما امریه داشتن و کاری که می‌کردن باحال بود.

System group

Status

📜📞🔧❌

Golang Developer

Interview process

flowchart LR
    sr(Send resume) --> hr(HR call) --> ti1(1st Technical Interview) --rejected--x ti2(2nd Technical Interview) -.-> hri(HR Interview) -.-> o(Offer)

Apply way

jobinja

Interview date

Interview duration

1 hour and 30 minutes

Interview Platform

Skyroom

Technical Interview

مصاحبه با دو نفر بود که هر دو فنی بودند. اولش لایوکد بود که از قبل نمی‌دونستم لایوکد داره بعد لابه‌لاش و بعدش سوال پرسیده می‌شد. خیلی سوالات در هم و برهم بود و دلیلشم این بود که هر چی که می‌گفتم از توش سوال درمیاوردن. مثلا از stringها تو go می‌رفتیم تو خود utf-8 یا از مفهوم stack می‌رفتیم به اون شاخه که تو گو چجوریه تو هیپ چجوریه بقیه زبانا چجورین و این شکلی. مینداختن گوشه رینگ و هر چیزی که تونستن، پرسیدن.

از این سوال مشخصه می‌خوان مثل برده از نیرو کار بکشن.
فرانت بزن بک بزن دواپسم بزن و از یک نیرو به اندازه چندتا نیرو کار بکشن.

Live code

محیطی که باید کد می‌زدم rustpad.io بود که انتخاب خوبی بود و ران کردن کد هم نبود همون psudo code استایل باید مسئله رو حل می‌کردم. فکر می‌کنم نمی‌شد سرچ کرد. البته مصاحبه‌کننده هم نمی‌فهمید اگه سرچ می‌کردم (به شرط سریع سرچ کردن).

Problem 1

Find the most repeated item in this array [1,4,7,4,3,8,4]. return item and repeated time.

My answer:

func getMostRepeatedNum(nums []int) (int, int) {
	numMap := make(map[int]int, len(nums))
	maxCount, maxNum := 0, 0
	for _, i := range nums {
    		numMap[i]++
    		if numMap[i] > maxCount {
        		maxCount = numMap[i]
        		maxNum = i
    		}
	}
	return maxNum, maxCount
}

You can run it here.
What is complexity of your code (time & memory)?

Problem 2

This code runs or fails? & Why? What is zero value of struct?

type a struct {
	B a
}

Answer:

According here; If it's a value, then the zero value would be another Category, and you would have initialized, zero-value Categories all the way down until you overflow the stack. With a pointer, the zero value will just be nil.
It can handle with pointer:

type a struct {
	B *a
}

This link is good. And this.

Problem 3

We have a linked list. Write a function to create string with this linked list. First char is A. I can't remember the question is this or not. But sth like that.

type MyString struct {
	Char rune
	Next *MyString
}

func CreateString(s MyString) string {
	// write sulotion
}

//otherPackage
myString := MyString{
	char = 'A',
}

My answer (It's not complete):

func CreateString(s MyString) string {
	result := string(s.char)
	for s.next != nil {
    		result += s.char
    		s = s.next
	}
	return result
}

Problem 4

Write a function to check if slice is nil, return error otherwise, change first value then return that.

My answer:

func changeArray(a []int) ([]int, error) {
	if a == nil {
		return nil, errors.New("Error: Array is empty")
	}
	a[0] = 5
	return a, nil
}

You can run it here.

Problem 5

Suppose we have these tables.

student
id   name
-----------
1	amir
2	reza
3	mostafa

courses
id  title
---------
1   math
2   art
3   data structure

studentCourse
id   studentRef	     courseRef		grade
----------------------------------------------
1 	1          	2       	12
1 	2          	1       	18
1 	1          	3       	8

1 - Write a query shows students, course and grade like this:

amir art 12
reza math 18
mostafa dataStructure 8

2 - Write a query shows each student average grade.

Score

5/10

مصاحبه طولانی و طاقت‌فرسایی بود. سوالایی که پرسیدن به نظرم too much بود. واقعا این مقدار دیپ شدن لازم نیست برای جونیور تازه اونم برای شرکت خشک و سازمانی‌ای مثل همکاران سیستم! یکی از دوستانم بعد از چند ماه برای همین پوزیشن، رفته بود مصاحبه و دقیقا همین سوالا رو پرسیده بودن و نظر اونم با توجه به این که تجربه بیشتری از من داشت، این بود که زیاده‌روی‌ست. حقوقی که بهشون پیشنهاد دادم، پشماشون ریخت. گفتن منظورت خالصه انقد یا با بیمه و اینا؟ گفتم حقوق رو خالص می‌گن. این مال اون دوره‌ایه که مصاحبه می‌رفتم که فقط رقمو ببرم بالا واکنش‌ها رو ببینم، حال می‌ده بکنید از این کارها. در کل خیلی با شرکتای b2b و b2g حال نمی‌کنم. جاست فور فان بود نتیجه‌ش اصلا برام مهم نبود.

bitex

Status

📜📝❌

Backend/Blockchain Engineer

Interview process

flowchart LR
    sr(Send resume) --> task(Task) --rejected--x ti(Technical Interview) -.-> hri(HR Interview) -.-> o(Offer)

Apply way

Linkedin

Interview date

Interview duration

Task

لینک تسک (یا این‌جا ) و جواب من.

در کل تسک آسونی بود. اما من خیلی با بلاکچین و node آشنا نبودم. این تسک رو هم از یکی از بچه‌های شرکت‌مون که خدای بلاکچین بود، پرسیدم حاجی این چیه؟ حالا خودم تو یه جایی کار می‌کردم که کارش crypto exchange بود ولی بیشتر کار بک‌اندی می‌کردم تا بلاکچینی. خلاصه توضیحاتی من باب این مفاهیم داد و گفت چیزی نداره منم یکی دو روز مونده بود، سَمبَلیک کردم. کاملا انتظار می‌رفت که ریجکت بشه.

Score

8/10

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

Interview Assignment for Backend/Blockchain Engineer

Objective:

Design and implement an API that allows users to store key-value pairs in a smart contract and retrieve values by providing the corresponding keys.

Requirements:

  1. Write a smart contract in Solidity that can store key-value pairs and retrieve values using keys. The smart contract should have functions for setting key-value pairs and getting values by keys. Both key and values are integers.

  2. Set up a project to interact with the smart contract. Include necessary dependencies and configurations in the project.

  3. Deploys the smart contract to a local Ethereum test network (e.g., Ganache, Hardhat, Anvil).

  4. Use the ABI and contract address to create an instance of the smart contract.

  5. Design and implement the API with the following endpoints:
  1. Provide documentation on how to set up and run the project

  2. (Optional) Write unit tests for the API endpoints and smart contract functions.

autoshenas

Status

📜📞🔧❌

Backend Developer (Go)

Interview process

flowchart LR
    sr(Send resume) --> hr(HR Call) --> ti(Technical Interview) -- rejected --x hri(HR Interview) -.-> o(Offer)

Apply Way

jobinja

Interview Date

Interview Duration

Interview Platform

Google Meet

Technical Interview

Score

3/10

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

mhholding - doki app

Status

📜📞🔧🔧❌

Senior Golang Developer

Interview process

flowchart LR
    sr(Send resume) --> hr(HR call) --> ti(1st Technical Interview) --> ti2(2nd Technical Interview) --rejected--x hri(HR Interview) -.-> o(Offer)

Apply way

jobinja

Interview date

Interview duration

Interview Platform

Google Meet

1st Technical Interview

مصاحبه با یک نفر بود.

2nd Technical Interview

Live code

در این مصاحبه به جز من، دو نفر دیگه هم حضور داشتن (هر دو فنی).
مسئله این بود که سه تا endpoint داریم که دارای متودهای post, get و delete است و باید یه وب‌سرور کوچولو می‌نوشتم که این سه تا رو هندل می‌کرد. یه اسلایسی از استرینگ (یا همچین چیزی) رو باید با آیتم‌هاش بازی می‌کردم.
خوب عمل نکردم و بلند بلند هم فکر نکردم. خیلی سرچ می‌کردم و خب دیدن که طول می‌کشه، گفتن نیم ساعت بیشتر وقت می‌دیم برو بزن بفرست که این عملا یعنی ریجکت. البته واقعا مهم نبود چون یه جا دیگه ۸۰ درصد برام اوکی شده بود.

Score

7/10

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

itoll

Status

📜📞🔧❌

Software Engineer - Internship

Interview process

flowchart LR
    sr(Send Resume) --> hr(HR Call) --> ti(Technical Interview) --rejected--x hri(HR Interview) -.-> o(Offer)

Apply way

E-mail (:

Interview date

Interview duration

Technical interview

مصاحبه با یک نفر بود.

Score

6/10

این مصاحبه بعد از گرفتن آفر از جای دیگری بود و جنبه‌ی جاست فور فان داشت. گر چه به عنوان کارآموز، به نظرم نباید ریجکت می‌شد اما مهم هم نبود. بیشتر روی OOP فوکوس شده بود تا چیزهای دیگر. سوال‌های زرد و لوس از قبیل یه جمله بساز که سه تا کلمه بی‌ربط توش باشه هم رنک رو پایین میاره. در کل می‌شد که بهتر باشه. نمره ۶ برای این مصاحبه، نمره مناسبیه.

narvan

invex

Status

📜📞🔧👱🏻‍♀️✅

Python developer

Interview process

flowchart LR
    sr(Send resume) --> hr(HR call) --> ti1(Technical Interview) --> hri("HR Interview (On-site)") --> o(Offer) --accepted--> r((" "))

Apply Way

jobinja & Quera

Interview Date

Interview Duration

Interview Platform

Google Meet

Technical Interview

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

جواب چند سوالو گفتم نمی‌دونم و بعدش حس کردم خب به خاطر اونا ریجکته که نشد. (:

HR Interview (On-site)

دو نفر بودن که یکی HR manager بود و دیگری co-founder که خیلی آدم خوش برخورد و کول و مودبی بود. گپ و گفت دوستانه بود و لابه‌لاش به شکل روانشناسانه‌ای سوالا رو می‌پرسیدن. یعنی یه بحثی شکل می‌گرفت و من توضیح می‌دادم و به موضوع a اشاره می‌کردم و مصاحبه‌کننده از موضوع a سوالایی می‌کرد یا واکنشی نشون می‌داد و به نتیجه b که جواب سوال اصلیش بود، می‌رسید؛ حرفه‌ای و بلد بودن.

Offer

روز بعد مصاحبه، آفر رو فرستادن. من از وقتی که گفتن مرحله دوم حضوری بیا، سیگنال مثبتو گرفتم فهمیدم اوکیه قضیه.

Score

8/10

شرکت خوبیه فرهنگ خوبی داره برای شروع خوبه.

sahmeto

Status

📜📞📝❌

Back-End developer (pyhton)

Interview process

flowchart LR
    sr(Send resume) --> hr(HR Call) --> t(Task) -- rejected --> ti1(Technical Interview) -.-> hri(HR Interview) -.-> o(Offer)

Apply Way

jobinja

Interview Date

Interview Duration

Task

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

Score

6/10

Dade Afzar Arman (daa)

Status

📜📞🔧❎

Backend Developer (C)

Interview process

flowchart LR
    sr(Send Resume) --> hr(HR Call) --> ti(Technical Interview) --rejected--x hri(HR Interview) -.-> o(Offer)

Apply Way

Linkedin (Hiring)

Interview Date

Interview Duration

Interview Platform

Skype

HR Call

وقتی با من تماس گرفتن، همه چیزایی که لازم بود رو پرسیدن و همه شرایط شرکت رو توضیح دادن. همه چی خوبه به بچه‌ها می‌رسیم ناهار، حقوق به موقع، بیمه، ریموت، امریه، پروژه سربازی، دورهمی، اتاق بازی، پاداش در هر ماه و فیچرهای شرکت. ۵۰ میلیون سفته هم باید می‌دادم. بعد از گفتن چنین چیزی عملا شرکت برای من مرد ولی گفتم حالا ببینم به آفر می‌رسه یا نه و یه سری سوال‌های معمول hrای که همه می‌پرسن در مورد دانشگاه و تکنولوژی و سربازی و این‌ها مشخص بود از رو کاغذ داره می‌خونه و تیک می‌زنه. گفت روند مصاحبه بسته به سطحت، ممکنه متغیر باشه. یا یه مصاحبه فنیه که اوکی می‌شی یا علاوه بر اون، یه تسک انجام می‌دی یا بعد اینا یه ماه آزمایشی کار می‌کنی. که اون یه ماه، حقوق و همه مزایا رو داره. یه مصاحبه هم با مدیرعامله. نظم و انظباط خیلی مهمه برامون، نگاه بالا به پایین نداریم و صحبت‌هایی با چاشنی شوآف. از این سخنرانیا که تهش باید بگی: «تموم شد؟ خیلی تاثیرگذار بود».

Technical Interview

مصاحبه با یه نفر بود و مصاحبه‌کننده وب‌کم رو روشن نکرد و چیزی هم درباره‌ش نگفت.
بعدش فهمیدم برای مسائل امنیتی و ایناس!

از نظر سطح مصاحبه، برام ایزی بود، چیز چالش‌برانگیزی نداشت.

Score

5/10

مزایای شرکت خوب بود ولی خب با فضا و سفته اوکی نبودم. حتی هنوزم نمی‌دونم فعالیت‌شون چیه؟ اما قشنگ متوجه شدم که سوال آخر رو می‌گفتم بله، ریجکت نمی‌شد یعنی از نظر فنی؛ مشکلی نداشتم.

hamravesh

Status

📜📞📝❌

Interview process

flowchart LR
    sr(Send resume) --> hr(HR call) --> task(Technical Task) --rejected--x  ti(Technical Interview) -.-> hri(HR Interview) -.-> o(Offer)

Apply Way

Site & jobinja

Interview Date

Interview Duration

Task

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

Score

6/10

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

sternx

Status

📜📞🔧👱🏻‍♀️❎

Senior Golang developer

Interview process

flowchart LR
    sr(Send resume) --> hr(HR call) --> ti1(Technical Interview) --> os(On-site Interview) --> o(Offer) --rejected--> r((" "))

Apply way

jobinja

Interview Duration

1st Technical Interview

مصاحبه با دو نفر بود. مدیرعامل و CTO. اول مصاحبه CTO در مورد کامتریبیوت‌های گیتهابم سوال کرد و خیلی جذب شده بود به کانتریبیوتم رو یکی از پروژه‌های گوگل. چون با پروژه اوپن‌سورس کار داشتن، به نظرشون من مناسب بودم.

          My answer: With graph. it's a tree and with BFS & DFS, we can traverse it.

2nd Interview (On-site)

بعد اولین مصاحبه زنگ زدن که یه جلسه حضوری باید برم. رقم و اینارو صحبت کردیم. مصاحبه نبود خیلی بیشتر توضیح در مورد پروژه و چیزی که روش کار می‌کردن بود. روی mdm solution کار می‌کردن (تکنولوژی جالبیه اگه دوست داشتید سرچ کنید) و از یه لایبرری اوپن‌سورس استفاده می‌کردن که با گو نوشته شده بود. منو برای این می‌خواستن که اونو توسعه بدم و داشتن اونو بهم توضیح می‌دادن. یه ساعتی بهم توضیح دادن که چیه اصلا این لایبرری! شرکت کوچیک و خوبی بود و ناهارم نداشتن انگار البته به من یه ساندویچ کالباس آماده دادن و هر کی ناهار خودشو رو میزش یا تو آشپزخونه می‌خورد. با تیم یکم آشنا شدم و رفتار CTO هم خیلی کول و صمیمی بود. با پروژه‌ها ور رفتم و خوندم و CTO شماره خودشو بهم داد گفت برو بخون یکم ببین می‌تونی توسعه بدی؟ هر چی سوال داشتی هم بپرس. بیشتر آشنایی با محیط و تیم بود. بعدش هم خورد به روزهای قطع اینترنت و کلا همه چی رفت رو هوا و خب من خیلی نمی‌تونستم روش وقت بذارم و نه من پیگیر شدم و نه اونا.

Score

7/10

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

phanous

Status

📜📞🔧📝⚖️❌

Software Engineer

Interview process

flowchart LR
    sr(Send Resume) --> hr(HR Call) --> ti(HR & Technical Interview) --> task(Task) --> tr(Task Review)--rejected--x o(Offer)

Apply way

Linkedin

Interview date

TODO: they said we have two Interview and set two of them once

Interview duration

Interview Platform

gharar.ir

HR & Technical Interview

مصاحبه با دو نفر بود که یکی HR بود و دیگری فنی. لابه‌لای سوالای hrای اون یکی دوستمون میومد سوالای فنی می‌پرسید.

Technical Questions

Task

تسک ساده‌ای بود و ۴ روزه زدم. به خوبی نیازمندی‌های خواسته شده رو پوشش می‌داد.

Task Review & Live code

در مورد تسک خیلی بحثی نبود چندتا نکته بود که برای بهتر شدنش بیان شد. یکی این که برای تبدیل عدد به فارسی و انگلیسی (همچین چیزی فکر کنم) چرا از لایبرری استفاده کردی؟ خودت می‌تونستی با string هندل کن ی. یکی دیگه هم استفاده از bare except ها بود. بعدش یه ریپو از گیتهاب معرفی کرد که یک فایل منیجر بود که با go نوشته شده بود. گفت اول اینو clone کن و بیارش بالا. برای استفاده ازش اولش یه پسوورد می‌خواست که من دهنم صاف شد از تو ریپو پیداش کنم استرس داشتم پس از پا زدن‌های بسیار و یکم راهنمایی مصاحبه‌کننده دیدم تو داک نوشتن. (: بعدش گفت خب موقع استفاده از این ممکنه یه سری فایل به اون دایرکتوری اضافه بشه یا تغییر کنه. یه اسکریپت بنویس که بالا باشه و هر فایلی که تغییر کرد بهمون بگه. سرچ هم آزاد بود. که خب من خیلی زور زدم و دقیقا نمی‌دونستم چیکار کنم یه چیزایی هم با پایتون نوشتم که نصفه نیمه کار می‌کرد و مفاهیم async رو هم بلد نبودم و خب کار درنیومد. از دو ساعت‌های فرسایشی بود. وسطا مصاحبه‌کننده محو می‌شد قطع امید کرده بود. من هم خیلی بلند بلند فکر نمی‌کردم.

Score

8/10

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

graph

Status

📜📞👱🏻‍♀️📝❌

C++ developer

Interview process

flowchart LR
    sr(Send resume) --> hr(HR Call) --> hri(HR Interview) --> task(Technical Task) --rejected--x ti(Technical Interview) -.-> o(Offer)

Apply way

Linkedin

Interview date

Interview duration

Interview Platform

Google Meet

HR Interview

Task

تسک رو خوب نزدم و یه چیزی ماسمال کردم فرستادم که زده باشم. ایمیل دادن گفتن فلان جاشو درست کن بفرست چند روزم اضافه وقت دادن که دیگه نفرستادم چون اون تایم خیلی خوب بلد نبودم و بیخیالش شدم.

Score

6.5/10

به نظرم تسکی که فرستادن اندکی سخت بود. یعنی؛ برای مصاحبه یه چالش کوچولو باید باشه. با تسک مشکل دارم کلا. حتی live code رو به تسک ترجیح می‌دم، تموم می‌شه می‌ره و سریع‌ترم هست برخلاف عده‌ی کثیری که ازش می‌ترسن.

gharar

Status

📜📞🔧❌

Software Engineer Internship

Interview process

flowchart LR
    sr(Send Resume) --> hr(HR Call) --> ti(Technical Interview) --rejected--x hri(HR Interview) -.-> o(Offer)

Apply way

Site

Interview date

Interview duration

Interview Platform

gharar

Technical Interview

Score

7/10

Toman

Status

📜📞🔧❌

Senior Backend Developer (Python/Django)

Interview process

flowchart LR
    sr(Send resume) --> hr(HR call) --> ti1(1st Technical Interview) --rejected--x  ti2(2nd Technical Interview) -.-> hri(HR Interview) -.-> o(Offer)

Apply way

Refer

Interview Date

Interview Duration

Interview Platform

Microsoft Teams

1st Technical Interview

Score

9/10

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

Contributors