Viva prep · Real questions · Student experiences Enroll in Bootcamp

Proctor workspace

Proctor APPDEV_LEVEL1_VIVA14

Share your experience Add your viva experience here
64 Questions
6 Sets
0 Topics
0 Reviews
Tips for this examiner: Really nice proctor. Gives you time to do everything. Will not pressure you. I actually got lost in my own project (point 7 in questions). I took like 2 mins to just find the code for it but he just kept quite till I found it. So just keep calm (unless you didn't make the project yourself)

In feedback he said the demo was nice. Be comfortable with theory for level 2 and also be prepared to make changes in code. (I didn't make any changes in level 1 except crontab to show the daily remainder. He didn't ask excpet point 7 where I said it will be lengthy)

I kept the celery beat and worker code and also venv activation code in notepad to reduce typing.

Student reviews

No student reviews for this proctor yet.

Approved viva sets

  1. 1
    Show GitHub repo colab access Start with your presentation After the presentation, he asked the following questions
    Times asked 2
  2. 2
    Show me your code base
    Times asked 2
  3. 3
    Can admin block (blacklist) the patient and doctor? Yes.
    Times asked 2
  4. 4
    Is it temporary or permanent? Blacklist - Temporary, Delete - permanent
    Times asked 2
  5. 5
    How do you manage authentication? By JWT tokens.
    Times asked 2
  6. 6
    Where the tokens are saved? Frontend local storage - browser
    Times asked 2
  7. 7
    What is caching and why do we need that?
    Times asked 2
  8. 8
    Can a patient book appointment with 2 different doctor in same slot? No
    Times asked 2
  9. 9
    Why and show the code where you did this feature?
    Times asked 2
  10. 10
    Go to any frontend vue maybe dashboard like Admin Dashboard, go to last part of script. What is onmounted? Do you remember any other Lifecycle hook?
    Times asked 2
Advice: Be confident and know what components do what functions where is it located. That's all Calm proctor. Won't hurry you, gives you time to find where the component is. No code changes asked
  1. 1
    NEED NOT BE IN ORDER (Based on Placement Portal App)
    Times asked 2
  2. 2
    Show github profile and colaborators (Didn't check my ID)
    Times asked 2
  3. 3
    Download and run the app
    Times asked 2
  4. 4
    Create a company and student
    Times asked 2
  5. 5
    Login as admin. Show functionality and approve company.
    Times asked 2
  6. 6
    Create a drive as the company then approve it via admin
    Times asked 2
  7. 7
    Apply as a student to the drive and show the flow of it.
    Times asked 2
  8. 8
    Show Export function (backend jobs).
    Times asked 2
  9. 9
    Asked me to blacklist a student and then try to login from it.
    Times asked 2
  10. 10
    Whats authentication and authorization and the difference.
    Times asked 2
  11. 11
    He asked me to show where caching is. (I just did it on one function for the sake of it as I was not sure where all to put it as server side caching is messy. I told him this.)
    Times asked 2
  12. 12
    Show the daily remainder email. (I made a student with temp mail and sent it there. Also, I sent it from my gmail for which you need to generate a key. Keep it saved in notepad or something).
    Times asked 2
  13. 13
    Asked me to open the vue file for one of the dashboard and asked what is mounted.
    Times asked 2
Advice: Really nice proctor. Gives you time to do everything. Will not pressure you. I actually got lost in my own project (point 7 in questions). I took like 2 mins to just find the code for it but he just kept quite till I found it. So just keep calm (unless you didn't make the project yourself) In feedback he said the demo was nice. Be comfortable with theory for level 2 and also be prepared to make changes in code. (I didn't make any changes in level 1 except crontab to show the daily remainder. He didn't ask excpet point 7 where I said it will be lengthy) I kept the celery beat and worker code and also venv activation code in notepad to reduce typing.
  1. 1
    Questions (NOT IN ORDER):
    Times asked 2
  2. 2
    * in db.relationship(...cascade='all,delete-orphan') what does 'all, delete-orphan' do?
    Times asked 2
  3. 3
    * can companies can start drive without being approved.
    Times asked 2
  4. 4
    * can a student apply to a drive more than once
    Times asked 2
  5. 5
    * what technology I used for authentication (I used flask-login) and then asked if that is session based or token based (I told that if I had used Flask-JWT (JSON Web Token) then that would have been Token based but flask-login is session based as it used cookies for authentication purpose. Additionally I showed the fetch requests which had `credentials: 'include'`)
    Times asked 2
  6. 6
    * to implement a feature as follows: if a student is rejected in a drive they can apply again one last time (a second chance)
    Times asked 2
  7. 7
    * (I used <script setup> and imported { computed, onMounted }) What are computed and onMounted here? I told him the difference between Composition API and Options API, and how vue lifecycle hooks work and where setup(){} comes into play. And how and why computed was used here.
    Times asked 2
  8. 8
    * to show the backend worker processes that were running, I told him that I did not have solid grasp of celery and redis and so did not implement them. Then he asked if had used them how would that have helped me, their need, etc.
    Times asked 2
  9. 9
    At the end he said that's all, and to start preparing for L2.
    Times asked 2
  1. 1
    Show GitHub repo colab access Start with your presentation After the presentation, he asked the following questions
    Times asked 2
    Official solution

    SimpleGitHub repo open karo: commits, collaborators, README. Examiner check karta hai tumne khud kaam kiya.

    Example

    Settings → Collaborators
    Commits: regular messages, last-day dump nahi.

    Viva tipPrivate repo access pehle de do. Main branch submitted ZIP se match honi chahiye.

  2. 2
    Show me your code base
    Times asked 2
    Official solution

    SimpleDemo 5–7 min ki kahani: saari roles, koi milestone skip nahi, bolte-bolte dikhao.

    Examiner list tick karta hai. Crash ho to panic nahi — terminal error padho.

    Code tab kholna jab poochhein. Extra uncommitted features mat dikhana agar portal ZIP mein nahi.

    Suggested flow1) Register/login user
    2) Admin login — CRUD
    3) Approval/blacklist
    4) Booking/apply + edge case
    5) Search + charts
    6) CSV export / email job
    7) Logout

    Project example: Jo statement/parking/jobs/tickets hai uske user+admin journeys.

    Viva tipBol: 'Yahan overbooking rokta hoon'. Mandatory features pehle, polish baad.

  3. 3
    Can admin block (blacklist) the patient and doctor? Yes.
    Times asked 2
    Official solution

    SimpleBlacklist/block: user.status='blocked' check login/booking pe. Temporary flag vs hard delete permanent.

  4. 4
    Is it temporary or permanent? Blacklist - Temporary, Delete - permanent
    Times asked 2
    Official solution

    SimpleBlacklist/block: user.status='blocked' check login/booking pe. Temporary flag vs hard delete permanent.

  5. 5
    How do you manage authentication? By JWT tokens.
    Times asked 2
    Official solution

    SimpleAuthentication: tu kaun hai? (login). Authorization: tujhe permission hai? (role check).

    Example

    # auth
    if check_password_hash(user.password, pwd):
        session['user_id'] = user.id
    
    # authz
    if user.role != 'admin':
        abort(403)
  6. 6
    Where the tokens are saved? Frontend local storage - browser
    Times asked 2
    Official solution

    SimpleJWT teen tukde ki signed chitthi: header.payload.signature. Padhi ja sakti hai, badli nahi ja sakti.

    Encoded (Base64) + signed, encrypted nahi (JWE alag). Payload mein password mat daalo — koi jwt.io pe dekh lega.

    Login pe server secret se HMAC (HS256). Har API Authorization: Bearer <token>.
    Expiry exp. Change payload → signature fail → 401.

    Session MAD1 server yaad rakhta. JWT MAD2 client rakhta, server stateless-ish.

    Example

    eyJhbGciOiJIUzI1NiJ9.{"sub":1,"role":"admin"}.signature
    # Authorization: Bearer <token>

    Project example: POST /login → token LS. fetch interceptor header. @jwt_required APIs.

    Viva tipAlgo HS256. Secret env var. jwt.io pe payload dikhao, secret public site pe mat paste.

  7. 7
    What is caching and why do we need that?
    Times asked 2
    Official solution

    SimpleCache = pehli baar hisaab karke copy rakh lo, doosri baar copy dikha do.

    Baar-baar same expensive kaam (DB query, counting bookings) mat karo. Result Redis jaise store mein timeout ke saath rakh do.

    Cache hit: key mil gayi, DB skip. Cache miss: DB se lao, SET karo, return karo.

    Tradeoff: speed vs stale data. Admin naya venue add kare aur cache 50s ka ho to user purani list dekh sakta hai — isliye write pe invalidation zaroori hai.

    Browser cache, Flask-Caching, Redis alag layers hain. MAD2 examiner Redis + @cache.cached code dekhta hai.

    Example

    @cache.cached(timeout=50, query_string=True)
    @app.route('/api/shows')
    def shows():
        return jsonify([s.serialize() for s in Show.query.all()])

    Project example: Admin dashboard counts / venues list cache. Create/update/delete ke baad cache.delete('venues').

    Viva tipprint('DB queried') function ke andar laga ke miss/hit demo karo — hit pe print nahi chalega.

  8. 8
    Can a patient book appointment with 2 different doctor in same slot? No
    Times asked 2
    Official solution

    SimplePehle 1-line definition, phir apne MAD1 project mein file dikhao, phir chhota example.

    Suggested flow1) Concept kya hai?
    2) Mere code mein kahan?
    3) Example / demo
    4) Edge case

    Example

    # related file: models.py / routes / template
    # formula: request → check/auth → DB → render/redirect

    Viva tipExact line yaad nahi to honestly related part dikhao. Bluff mat karo.

  9. 9
    Why and show the code where you did this feature?
    Times asked 2
    Official solution

    SimpleCode dikhao to pehle related file: models → route → template. Flow explain karte hue lines padho.

  10. 10
    Go to any frontend vue maybe dashboard like Admin Dashboard, go to last part of script. What is onmounted? Do you remember any other Lifecycle hook?
    Times asked 2
    Official solution

    SimpleonMounted = Composition API ka mounted. setup() ke andar call.

    Options API: mounted() method. Mix mat. Vue 3 dono chalte.

    Lifecycle = component ki zindagi: created (instance, DOM nahi) → mounted/onMounted (DOM ready — fetch, Chart.js yahi) → updated → unmounted (clearInterval).

    Dashboard API created mein isliye nahi ki $el/canvas missing ho sakta. Composition API: onMounted(() => {}) setup ke andar. Options: mounted() method. Mix mat.

    Examiner 'konsa hook use kiya' — related .vue kholo, line padh ke bolo.

    Example

    import { onMounted, ref } from 'vue'
    const items = ref([])
    onMounted(async () => {
      items.value = await (await fetch('/api/items')).json()
    })

    Project example: script setup: onMounted(loadStats).

Advice: Be confident and know what components do what functions where is it located. That's all Calm proctor. Won't hurry you, gives you time to find where the component is. No code changes asked
  1. 1
    NEED NOT BE IN ORDER (Based on Placement Portal App)
    Times asked 2
    Official solution

    SimpleLevel = viva difficulty band. Level 1 usually demo + basics; higher pe live coding + deeper theory.

    Viva tipJo level assign hai uske hisaab se demo + theory ready rakho.

  2. 2
    Show github profile and colaborators (Didn't check my ID)
    Times asked 2
    Official solution

    SimpleGitHub repo open karo: commits, collaborators, README. Examiner check karta hai tumne khud kaam kiya.

    Example

    Settings → Collaborators
    Commits: regular messages, last-day dump nahi.

    Viva tipPrivate repo access pehle de do. Main branch submitted ZIP se match honi chahiye.

  3. 3
    Download and run the app
    Times asked 2
    Official solution

    Simplevenv activate → dependencies → DB create/migrate → flask run. Browser pe localhost dikhao.

    Example

    python -m venv .venv
    source .venv/bin/activate
    pip install -r requirements.txt
    flask run
  4. 4
    Create a company and student
    Times asked 2
    Official solution

    SimpleNaya Flask route: URL, method, auth if needed, query, jsonify. Postman pehle.

    Examiner number/filter change easy rakhna. CORS. Frontend tabhi jab bole.

    Status codes sahi. Password JSON mein nahi.

    Examiner 2 cheezein: simple desi line + tumhare project ki exact file.

    Pehle ID, GitHub, portal ZIP. Phir run: Redis + Flask + worker + beat + Vue. Feature demo: login, RBAC, cache hit/miss, Celery mail, search.

    Line pe ungli: input kahan, kaunsa check, query/cache/task, JSON/UI. Copilot band. Jo nahi kiya honestly bolo + kaise add karte.

    Example

    @app.route('/api/sum', methods=['POST'])
    def sum_num():
        d = request.get_json()
        return jsonify(result=d['a'] + d['b'])

    Project example: resources.py new Resource. Test Thunder. Optional Vue fetch.

  5. 5
    Login as admin. Show functionality and approve company.
    Times asked 2
    Official solution

    SimpleLogin flow pehle poochta hai "tu kaun hai?", token milne ke baad har API pe wohi proof dikhate ho.

    Authentication step: Vue form email + password JSON POST karta hai. Flask user dhoondhta hai, check_password_hash se prove karta hai ki tum genuine ho. Galat 401. Sahi pe JWT + role milta hai — yeh session/token hai.

    Vue localStorage (ya cookie) mein token rakhta hai, dashboard pe router.push. Aage ki har fetch header: Authorization: Bearer <token>. @jwt_required identity check (authentication). @roles_required('admin') permission check (authorization) — logged in ho, lekin allowed nahi to 403.

    Validation alag cheez hai: empty email, password 8+ — form sahi bhara hai ya nahi. Woh identity prove nahi karta.

    Logout = client token delete + login page. Server blacklist optional. Password response JSON mein kabhi mat bhejo.

    Example

    # Authentication
    @app.route('/api/login', methods=['POST'])
    def login():
        u = User.query.filter_by(email=data['email']).first()
        if not u or not check_password_hash(u.password, data['password']):
            return jsonify(msg='bad'), 401
        return jsonify(token=create_access_token(u.id), role=u.role)
    
    # baad ki APIs
    # Authorization: Bearer <token>
    if current_user.role != 'admin':
        abort(403)

    Project example: Login.vue POST /api/login → token LS → interceptor. Student token se admin route = 403. Empty form = validation, galat password = 401.

    Viva tipNetwork tab mein password body dikhega localhost pe — prod HTTPS. Response mein hash/password echo mat karo.

  6. 6
    Create a drive as the company then approve it via admin
    Times asked 2
    Official solution

    SimpleNaya Flask route: URL, method, auth if needed, query, jsonify. Postman pehle.

    Examiner number/filter change easy rakhna. CORS. Frontend tabhi jab bole.

    Status codes sahi. Password JSON mein nahi.

    Examiner 2 cheezein: simple desi line + tumhare project ki exact file.

    Pehle ID, GitHub, portal ZIP. Phir run: Redis + Flask + worker + beat + Vue. Feature demo: login, RBAC, cache hit/miss, Celery mail, search.

    Line pe ungli: input kahan, kaunsa check, query/cache/task, JSON/UI. Copilot band. Jo nahi kiya honestly bolo + kaise add karte.

    Example

    @app.route('/api/sum', methods=['POST'])
    def sum_num():
        d = request.get_json()
        return jsonify(result=d['a'] + d['b'])

    Project example: resources.py new Resource. Test Thunder. Optional Vue fetch.

  7. 7
    Apply as a student to the drive and show the flow of it.
    Times asked 2
    Official solution

    SimpleDemo script pehle se practice: 5–7 min, Admin + User roles, saare mandatory features.

    Suggested flow1) Register/login user
    2) Admin login — CRUD
    3) Approval/blacklist
    4) Booking/apply + edge case
    5) Search
    6) Logout

    Viva tipBolte-bolte dikhao. Code tab kholna jab poochhein.

  8. 8
    Show Export function (backend jobs).
    Times asked 2
    Official solution

    SimpleLive jobs: Redis, worker, beat, crontab abhi, logs + email/CSV.

    Scheduled vs user-triggered dono dikhao. Missing feature honestly.

    Examiner 2 cheezein: simple desi line + tumhare project ki exact file.

    Pehle ID, GitHub, portal ZIP. Phir run: Redis + Flask + worker + beat + Vue. Feature demo: login, RBAC, cache hit/miss, Celery mail, search.

    Line pe ungli: input kahan, kaunsa check, query/cache/task, JSON/UI. Copilot band. Jo nahi kiya honestly bolo + kaise add karte.

    Suggested flow1) redis
    2) worker
    3) beat
    4) crontab now
    5) logs + MailHog

    Example

    CELERY_BEAT_SCHEDULE = {
      'daily-reminder': {
        'task': 'jobs.daily_reminder',
        'schedule': crontab(hour=18, minute=0),
      },
    }

    Project example: Change schedule current time. MailHog. Export button 202.

  9. 9
    Asked me to blacklist a student and then try to login from it.
    Times asked 2
    Official solution

    SimpleBlacklist/block: user.status='blocked' check login/booking pe. Temporary flag vs hard delete permanent.

  10. 10
    Whats authentication and authorization and the difference.
    Times asked 2
    Official solution

    SimpleAuthentication: tu kaun hai? (login). Authorization: tujhe permission hai? (role check).

    Example

    # auth
    if check_password_hash(user.password, pwd):
        session['user_id'] = user.id
    
    # authz
    if user.role != 'admin':
        abort(403)
  11. 11
    He asked me to show where caching is. (I just did it on one function for the sake of it as I was not sure where all to put it as server side caching is messy. I told him this.)
    Times asked 2
    Official solution

    SimpleDecorator + Redis ping + invalidation line + miss/hit demo idea.

    Kaunsi routes, timeout, key_prefix, query_string. POST pe nahi.

    print after set sirf miss. Timeout chhota karke expiry.

    Redis in-memory key-value store hai — fridge pe sticky note, poori kitchen (SQL database) har baar mat kholo.

    MAD2 mein Redis do kaam: (1) cache — same venues/shows/dashboard JSON baar-baar DB se nahi (2) Celery broker — Flask task queue mein daalta hai, worker uthata hai.

    Flow: cache.get(key) → hit pe return, miss pe SQLAlchemy + SET with timeout. Admin write ke baad cache.delete, warna stale list.

    Source of truth database hi hai. Redis crash/band = cache miss (app chalni chahiye) + queue ruk sakti hai. Important bookings sirf Redis mein mat rakho.

    Alag: Redis ≠ Memcached (Celery broker nahi). Redis ≠ localStorage (woh browser). redis-cli ping → PONG viva proof.

    Project example: resources list GET cached. create_venue delete key.

  12. 12
    Show the daily remainder email. (I made a student with temp mail and sent it there. Also, I sent it from my gmail for which you need to generate a key. Keep it saved in notepad or something).
    Times asked 2
    Official solution

    SimpleDemo 5–7 min ki kahani: saari roles, koi milestone skip nahi, bolte-bolte dikhao.

    Examiner list tick karta hai. Crash ho to panic nahi — terminal error padho.

    Code tab kholna jab poochhein. Extra uncommitted features mat dikhana agar portal ZIP mein nahi.

    Suggested flow1) Register/login user
    2) Admin login — CRUD
    3) Approval/blacklist
    4) Booking/apply + edge case
    5) Search + charts
    6) CSV export / email job
    7) Logout

    Project example: Jo statement/parking/jobs/tickets hai uske user+admin journeys.

    Viva tipBol: 'Yahan overbooking rokta hoon'. Mandatory features pehle, polish baad.

  13. 13
    Asked me to open the vue file for one of the dashboard and asked what is mounted.
    Times asked 2
    Official solution

    SimpleonMounted = Composition API ka mounted. setup() ke andar call.

    Options API: mounted() method. Mix mat. Vue 3 dono chalte.

    Lifecycle = component ki zindagi: created (instance, DOM nahi) → mounted/onMounted (DOM ready — fetch, Chart.js yahi) → updated → unmounted (clearInterval).

    Dashboard API created mein isliye nahi ki $el/canvas missing ho sakta. Composition API: onMounted(() => {}) setup ke andar. Options: mounted() method. Mix mat.

    Examiner 'konsa hook use kiya' — related .vue kholo, line padh ke bolo.

    Example

    import { onMounted, ref } from 'vue'
    const items = ref([])
    onMounted(async () => {
      items.value = await (await fetch('/api/items')).json()
    })

    Project example: script setup: onMounted(loadStats).

Advice: Really nice proctor. Gives you time to do everything. Will not pressure you. I actually got lost in my own project (point 7 in questions). I took like 2 mins to just find the code for it but he just kept quite till I found it. So just keep calm (unless you didn't make the project yourself) In feedback he said the demo was nice. Be comfortable with theory for level 2 and also be prepared to make changes in code. (I didn't make any changes in level 1 except crontab to show the daily remainder. He didn't ask excpet point 7 where I said it will be lengthy) I kept the celery beat and worker code and also venv activation code in notepad to reduce typing.
  1. 1
    Questions (NOT IN ORDER):
    Times asked 2
    Official solution

    SimpleViva wrap-up hai. Short thanks + confirm submission ZIP latest hai.

  2. 2
    * in db.relationship(...cascade='all,delete-orphan') what does 'all, delete-orphan' do?
    Times asked 2
    Official solution

    Simpledb.relationship se object graph: lot.spots, booking.user. backref reverse side auto deta hai.

    Example

    spots = db.relationship('Spot', backref='lot', cascade='all, delete-orphan')
  3. 3
    * can companies can start drive without being approved.
    Times asked 2
    Official solution

    SimpleEdge cases: duplicate booking, full capacity, wrong role URL, empty search, invalid id.

    Example

    if Spot.query.get_or_404(spot_id).status != 'available':
        flash('Already taken')
        return redirect(...)
  4. 4
    * can a student apply to a drive more than once
    Times asked 2
    Official solution

    SimpleCode explain formula: input kya aaya → auth/validation → DB change → response/UI.

    Viva tipFunction signature + 3-4 important lines + edge case.

  5. 5
    * what technology I used for authentication (I used flask-login) and then asked if that is session based or token based (I told that if I had used Flask-JWT (JSON Web Token) then that would have been Token based but flask-login is session based as it used cookies for authentication purpose. Additionally I showed the fetch requests which had `credentials: 'include'`)
    Times asked 2
    Official solution

    SimpleMAD1 mein usually session-based auth: login pe session['user_id'], har request pe verify.

    Example

    session['user_id'] = user.id
    uid = session.get('user_id')
    user = User.query.get(uid)

    Viva tipSECRET_KEY set karo warna session insecure. logout pe session.clear().

  6. 6
    * to implement a feature as follows: if a student is rejected in a drive they can apply again one last time (a second chance)
    Times asked 2
    Official solution

    SimpleViva wrap-up hai. Short thanks + confirm submission ZIP latest hai.

  7. 7
    * (I used <script setup> and imported { computed, onMounted }) What are computed and onMounted here? I told him the difference between Composition API and Options API, and how vue lifecycle hooks work and where setup(){} comes into play. And how and why computed was used here.
    Times asked 2
    Official solution

    SimpleOptions: data methods computed alag. Composition: setup() logic group, reuse.

    Vue 3 both. Course either. Don't claim unused API.

    Component = reusable UI block (Navbar, Card). Props parent→child data, emit child→parent event. Slots parent HTML inner content.

    computed cache + reactive derive (filtered list). watch side-effect (query change pe API). methods events. ref() primitive, reactive() object. Vuex/Pinia global store; localStorage persist, store nahi.

    SFC: template + script + style ek .vue file. Parent-child exam favourite: list parent, row child :item + @delete.

    Project example: script setup vs export default options — open file.

  8. 8
    * to show the backend worker processes that were running, I told him that I did not have solid grasp of celery and redis and so did not implement them. Then he asked if had used them how would that have helped me, their need, etc.
    Times asked 2
    Official solution

    SimpleRedis box hai, Celery us box se kaam uthane wala worker hai — same cheez nahi.

    Redis: store (cache keys) + queue (broker lists).
    Celery: Python library jo tasks define karti hai, .delay() se queue mein daalti hai, worker execute karta hai.

    Dono localhost pe ho sakte hain. Alag Redis DB index use karo. Redis band = cache miss + Celery stuck.

    Example

    Celery: broker_url='redis://localhost:6379/0'
    Cache:  CACHE_REDIS_URL='redis://localhost:6379/1'

    Project example: export_csv.delay(user_id) Flask se. Worker Redis se task uthata hai, CSV+email. Cache alag keys venues.

    Viva tipAgar possible ho to cache db=1, broker db=0 — keys mix nahi hoti.

  9. 9
    At the end he said that's all, and to start preparing for L2.
    Times asked 2
    Official solution

    SimpleViva wrap-up hai. Short thanks + confirm submission ZIP latest hai.

Created for educational purposes only. Questions are based on students' personal experiences and may not reflect actual exam content.