Kelgan g'oyani oxirigacha va 100% optimallik bilan bajarguncha shuncha urinish ketdi.
Bugungi masala qiziq ekan, Bir qarashda oson, lekin nozik joyi bor ekan))
@it_suhbat
Bugungi masala qiziq ekan, Bir qarashda oson, lekin nozik joyi bor ekan))
@it_suhbat
🔥7
O'ylab qarasam, birinchi marta junior va senior tushunchalarini qurilishda ishlagan paytim uchratgan ekanman.
15-16 yoshimda yozgi ta'tilda qurilishga ishga chiqqanman. Kuniga 20 mingdan berardi bizga. Katta usta bor edi, u 80 ming olardi)) Sababi uyning qurilishi, mustaxkamligi, bizlarni ishlatish va hokazo mas'uliyatli ishlar uning bo'ynida edi.
Mas'uliyatni bo'yningizga olganingiz sari ko'tarilasiz. Har tomonlama.
@it_suhbat
15-16 yoshimda yozgi ta'tilda qurilishga ishga chiqqanman. Kuniga 20 mingdan berardi bizga. Katta usta bor edi, u 80 ming olardi)) Sababi uyning qurilishi, mustaxkamligi, bizlarni ishlatish va hokazo mas'uliyatli ishlar uning bo'ynida edi.
Mas'uliyatni bo'yningizga olganingiz sari ko'tarilasiz. Har tomonlama.
@it_suhbat
👍17❤2🔥2
🔥7👍2
HRlar, iltimos, raqamlarda va valyutalarda adashmanglar))
Bunaqada hamma system analyst bo'lib ketadiku))
@it_suhbat
Bunaqada hamma system analyst bo'lib ketadiku))
@it_suhbat
😁26🗿3
#mock vs #spy
Mock — sinf yoki interfeysning skletini yasab beradi va unga so'rov bo'lganda o'zini qanday tutishini sozlashimizga, test davomida bu sinf metodlariga qanday so'rovlar bo'lganligini qayd qilib, tekshirishimizga yordam beradi.
Spy — sinfning haqiqiy obyektini hosil qiladi va xuddi mock'dagi kabi ta'sirlarni tekshirish imkoniyatini beradi.
Savol:
Qachon mock ishlatish kerak va qachon spy ishlatish kerak?
Javob:
Misol uchun, unit test jarayonida qandaydir adapter(tashqi servis bilan bog'lovchi, misol uchun REST) service bor va undan qaytgan natija ObjectMapper yordamida mapping qilinadi. Bu yerda adapter servis mock sifatida ishlatilishi mumkin. Ya'ni u o'zini haqiqiy servisdek tutmaydi, tashqi servisga so'rov yubormaydi. Biz oldindan tayyorlab qo'ygan javobni qaytarib bersa bo'ldi.
ObjectMapper esa spy bo'ladi. Sababi u qaytarilgan natijani haqiqatan mapping qilishi kerak. O'zining metodlarini to'laqonli bajarishi kerak. Shu bilan birga biz uning metodlariga murojaat bo'lgan yoki yo'qligini ham bemalol aniqlashimiz mumkin bo'ladi.
@it_suhbat
Mock — sinf yoki interfeysning skletini yasab beradi va unga so'rov bo'lganda o'zini qanday tutishini sozlashimizga, test davomida bu sinf metodlariga qanday so'rovlar bo'lganligini qayd qilib, tekshirishimizga yordam beradi.
Spy — sinfning haqiqiy obyektini hosil qiladi va xuddi mock'dagi kabi ta'sirlarni tekshirish imkoniyatini beradi.
Savol:
Qachon mock ishlatish kerak va qachon spy ishlatish kerak?
Javob:
Misol uchun, unit test jarayonida qandaydir adapter(tashqi servis bilan bog'lovchi, misol uchun REST) service bor va undan qaytgan natija ObjectMapper yordamida mapping qilinadi. Bu yerda adapter servis mock sifatida ishlatilishi mumkin. Ya'ni u o'zini haqiqiy servisdek tutmaydi, tashqi servisga so'rov yubormaydi. Biz oldindan tayyorlab qo'ygan javobni qaytarib bersa bo'ldi.
ObjectMapper esa spy bo'ladi. Sababi u qaytarilgan natijani haqiqatan mapping qilishi kerak. O'zining metodlarini to'laqonli bajarishi kerak. Shu bilan birga biz uning metodlariga murojaat bo'lgan yoki yo'qligini ham bemalol aniqlashimiz mumkin bo'ladi.
@it_suhbat
👍8
Tandirchi do'stlarimiz zo'r ketishyapti))
Va nihoyat kecha Javadan savollar qo'shildi. Endi bemalol kirib o'zbek tilida(!) bir-birimiz bilan bellashishimiz mumkin.
Ha aytgancha, siz platformada bo'lishini xohlagan noodatiy va qiziq savollarni bizdan.tandir.app manzili orqali qo'shishingiz ham mumkin.
Birgalikda ilm o'rganamiz, ulashamiz, tajriba oshiramiz.
📱 Android: Google Playdan yuklash
🍏 iOS: App Storedan yuklash
@it_suhbat
Va nihoyat kecha Javadan savollar qo'shildi. Endi bemalol kirib o'zbek tilida(!) bir-birimiz bilan bellashishimiz mumkin.
Ha aytgancha, siz platformada bo'lishini xohlagan noodatiy va qiziq savollarni bizdan.tandir.app manzili orqali qo'shishingiz ham mumkin.
Birgalikda ilm o'rganamiz, ulashamiz, tajriba oshiramiz.
📱 Android: Google Playdan yuklash
🍏 iOS: App Storedan yuklash
@it_suhbat
👍8🔥5
Leetcode'da SQL bo'yicha ham masalalar ishlab turishni tavsiya qilaman.
Misol uchun: investments-in-2016
@it_suhbat
Misol uchun: investments-in-2016
@it_suhbat
🔥2
#stack
Har bir Thread runtime ma'lumotlar saqlash uchun o'z Stack xotirasiga ega bo'ladi. Stack xotiraning ma'lum hajmi bo'ladi. Agar Thread Stack xotirasiga sig'maydigan darajada ko'p elementlar bilan ishlashga harakat qilsa, StackOverflow xatoligini keltirib chiqaradi.
Java oqimlari turli operatsion tizimlarda turlicha belgilangan hajmlarga ega Stacklar bilan ishlaydi. Misol uchun:
Windows IA32 — 64 KB
Windows IA64 — 320 KB
Windows x64 — 128 KB
Linux IA32 — 128 KB
Linux IA64 — 1024 KB
Linux x64 — 256 KB
Solaris/SPARC — 512 KB
Undan tashqari JVM ning ichki oqimlari bor. Misol uchun garbage collector, code generation oqimlari. Bular uchun hamma platformalarda hajm 256 KB qilib belgilangan.
Stack hajmini o'zgartirish uchun -Xss tanlovidan foydalanish mumkin. Misol uchun:
Bu buyruq hamma Stack xotiralarni, jumladan, JVM ichki oqimlaridagi Stack xotira hajmini ham o'zgartiradi.
@it_suhbat
Har bir Thread runtime ma'lumotlar saqlash uchun o'z Stack xotirasiga ega bo'ladi. Stack xotiraning ma'lum hajmi bo'ladi. Agar Thread Stack xotirasiga sig'maydigan darajada ko'p elementlar bilan ishlashga harakat qilsa, StackOverflow xatoligini keltirib chiqaradi.
Java oqimlari turli operatsion tizimlarda turlicha belgilangan hajmlarga ega Stacklar bilan ishlaydi. Misol uchun:
Windows IA32 — 64 KB
Windows IA64 — 320 KB
Windows x64 — 128 KB
Linux IA32 — 128 KB
Linux IA64 — 1024 KB
Linux x64 — 256 KB
Solaris/SPARC — 512 KB
Undan tashqari JVM ning ichki oqimlari bor. Misol uchun garbage collector, code generation oqimlari. Bular uchun hamma platformalarda hajm 256 KB qilib belgilangan.
Stack hajmini o'zgartirish uchun -Xss tanlovidan foydalanish mumkin. Misol uchun:
java -Xss:512k MyApplication
Bu buyruq hamma Stack xotiralarni, jumladan, JVM ichki oqimlaridagi Stack xotira hajmini ham o'zgartiradi.
@it_suhbat
👍18🔥1
IT suhbat
Tandirchi do'stlarimiz zo'r ketishyapti)) Va nihoyat kecha Javadan savollar qo'shildi. Endi bemalol kirib o'zbek tilida(!) bir-birimiz bilan bellashishimiz mumkin. Ha aytgancha, siz platformada bo'lishini xohlagan noodatiy va qiziq savollarni bizdan.tandir.app…
Yangi savollar qoʻshish imkoni ham bor mabodoga.
🆒5
#lock
Concurrency'da lock tushunchasining o'rni katta. Bugun shu haqida gaplashamiz.
Lock o'zbekchada qulf bo'ladi. Har bir obyekt lock'ga ega. Agar biz bir nechta oqimlar bilan ishlayotgan bo'lsak, murojaatlarni shu lock orqali cheklashimiz mumkin. Tasavvur qiling, obyekt — bir xona. Unga bitta eshikdan kiriladi va bu eshikning qulfi bor. Multithreading'da obyektni lock qilish deyilganda, ana shu xonaga bitta thread kirganidan keyin eshikni qulflash tushuniladi. Thread o'ziga tegishli ishni tugatib bo'lganidan keyin eshikning qulfini ochib(unlock), xonadan chiqib ketadi, navbatdagi thread'ga o'z o'rnini bo'shatadi.
Javada lock qilishning ikki xil yo'li bor.
Birinchisi — avtomat, synchronized kalit so'zi yordamida.
Ikkinchisi — qo'lda. Buning uchun bizga Lock interfeysi va uning merosxo'rlari yordamga keladi.
ReentrantLock yordamida biz kodning istalgan joyida obyektni lock qilamiz, try yordamida asosiy ishni bajaramiz va finally'da unlock qilib chiqib ketamiz.
Undan tashqari o'qish va yozish uchun ReentrantReadWriteLock'dan foydalanish mumkin. Bu o'z o'rnida 2 xil lock imkoniyatini beradi.
Read lock — bir paytning o'zida o'qish uchun xohlagancha oqim murojaat qilishi mumkin, faqatgina yozish imkoniyatini cheklaydi.
Write lock — yozish amaliyoti bo'layotgan vaqtda qolgan oqimlarga na yozish, na o'qish imkonini beradi.
In shaa Alloh, keyingi maqolada Atomic va Lock'ning bir-biridan farqi haqida gaplashamiz, tezliklarini solishtiramiz.
@it_suhbat
Concurrency'da lock tushunchasining o'rni katta. Bugun shu haqida gaplashamiz.
Lock o'zbekchada qulf bo'ladi. Har bir obyekt lock'ga ega. Agar biz bir nechta oqimlar bilan ishlayotgan bo'lsak, murojaatlarni shu lock orqali cheklashimiz mumkin. Tasavvur qiling, obyekt — bir xona. Unga bitta eshikdan kiriladi va bu eshikning qulfi bor. Multithreading'da obyektni lock qilish deyilganda, ana shu xonaga bitta thread kirganidan keyin eshikni qulflash tushuniladi. Thread o'ziga tegishli ishni tugatib bo'lganidan keyin eshikning qulfini ochib(unlock), xonadan chiqib ketadi, navbatdagi thread'ga o'z o'rnini bo'shatadi.
Javada lock qilishning ikki xil yo'li bor.
Birinchisi — avtomat, synchronized kalit so'zi yordamida.
Ikkinchisi — qo'lda. Buning uchun bizga Lock interfeysi va uning merosxo'rlari yordamga keladi.
ReentrantLock yordamida biz kodning istalgan joyida obyektni lock qilamiz, try yordamida asosiy ishni bajaramiz va finally'da unlock qilib chiqib ketamiz.
Undan tashqari o'qish va yozish uchun ReentrantReadWriteLock'dan foydalanish mumkin. Bu o'z o'rnida 2 xil lock imkoniyatini beradi.
Read lock — bir paytning o'zida o'qish uchun xohlagancha oqim murojaat qilishi mumkin, faqatgina yozish imkoniyatini cheklaydi.
Write lock — yozish amaliyoti bo'layotgan vaqtda qolgan oqimlarga na yozish, na o'qish imkonini beradi.
In shaa Alloh, keyingi maqolada Atomic va Lock'ning bir-biridan farqi haqida gaplashamiz, tezliklarini solishtiramiz.
@it_suhbat
👍17🔥2🆒1
Bizda haqiqiy maʼnoda stand-up😅
Oldin kunlik stand-up ertalab soat 10:45 da oʻtkazilar edi. Lekin buning bir qancha minus taraflari bor. Ulardan biri, misol uchun, kunning birinchi qismida fokus bilan uzoq ishlash qiyin. Sababi daily'ga kirish kerak degan hayol 10:45 gacha ishlashga qoʻymaydi, undan keyin tushlikkacha kam vaqt qoladi.
Keyin stand-up'ni kunning oxiriga, 17:45 ga koʻchirishni taklif qildim. Bu sprint shunday ishlaymiz va retroda hamma oʻz fikrini bildiradi.
Siz nima deb oʻylaysiz, stand-up'ni kunning birinchi yarmida qilgan yaxshimi yoki kun yakunida?
@it_suhbat
Oldin kunlik stand-up ertalab soat 10:45 da oʻtkazilar edi. Lekin buning bir qancha minus taraflari bor. Ulardan biri, misol uchun, kunning birinchi qismida fokus bilan uzoq ishlash qiyin. Sababi daily'ga kirish kerak degan hayol 10:45 gacha ishlashga qoʻymaydi, undan keyin tushlikkacha kam vaqt qoladi.
Keyin stand-up'ni kunning oxiriga, 17:45 ga koʻchirishni taklif qildim. Bu sprint shunday ishlaymiz va retroda hamma oʻz fikrini bildiradi.
Siz nima deb oʻylaysiz, stand-up'ni kunning birinchi yarmida qilgan yaxshimi yoki kun yakunida?
@it_suhbat
👍12🔥3
Forwarded from Tandir (Future Dreams)
Bu tanlovda bizga bellashuv savollarini yuborib pul mukofotiga ega bo’lishingiz mumkin
Bu safargi tillar
⏰ Yakunlanish vaqti: 13-sentabr, 23:59
#tanlov #java #python #javascript
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11
#mock #test
Unit test yozishda biror sinfning private modifikatorli maydoniga o'zimizga kerakli qiymat berish uchun org.springframework.test modulining ReflectionTestUtils sinfidan foydalanishimiz mumkin.
Aytaylik, biz RateService sinf metodlarini test qilmoqchimiz. U yerda private modifikatorli rateUrl nomli maydon bor va uni @Value annotatsiyasi orqali qiymat o'zlashtiradigan qilib yozganmiz. Bu holda aynan shu maydonga MockWebServer manzilini o'zlashtirish uchun quyidagicha yondoshsak bo'ladi:
Agar bu sinf sizda topilmayotgan bo'lsa, spring-boot-starter-test (spring boot loyihalari uchun) yoki spring-test(spring framework loyihalari uchun) dependency'larini qo'shishingiz kerak bo'ladi.
@it_suhbat
Unit test yozishda biror sinfning private modifikatorli maydoniga o'zimizga kerakli qiymat berish uchun org.springframework.test modulining ReflectionTestUtils sinfidan foydalanishimiz mumkin.
Aytaylik, biz RateService sinf metodlarini test qilmoqchimiz. U yerda private modifikatorli rateUrl nomli maydon bor va uni @Value annotatsiyasi orqali qiymat o'zlashtiradigan qilib yozganmiz. Bu holda aynan shu maydonga MockWebServer manzilini o'zlashtirish uchun quyidagicha yondoshsak bo'ladi:
ReflectionTestUtils.setField(rateService, "rateUrl", String.format("http://%s:%d", mockBackEnd.getHostName(), mockBackEnd.getPort()));Agar bu sinf sizda topilmayotgan bo'lsa, spring-boot-starter-test (spring boot loyihalari uchun) yoki spring-test(spring framework loyihalari uchun) dependency'larini qo'shishingiz kerak bo'ladi.
@it_suhbat
👍5❤1
#webclient #mutate
Aytaylik siz biror servisga so'rov yuborish uchun uning oldindan yozilgan tayyor kutubxonasidan foydalanayapsiz. Ko'pincha ichki loyihalarni o'zaro integratsiyalarida shunday tayyor kutubxonalar yoziladi, client sifatida. Shu joyda WebClient ishlatilgan bo'lsa, uning bean'i oldindan build qilib, e'lon qilingan bo'ladi.
Tasavvur qilaylik, sizga shu client kutubxona orqali yuborilgan so'rovlar yoki qabul qilib olingan javoblar logga chiqarilishi kerak bo'lib qoldi. Bean'ni qaytadan hosil qilmaysiz, bu ortiqcha ish. Mana shu joyda WebClient'ning mutate metodi yordamga keladi.
Bu metod orqali hosil qilingan bean'ni qaytadan o'zgartirsa bo'ladi. Tayyor WebClient'ga o'zingizning servisingizdan turib o'zgarishlar kiritsangiz bo'ladi. Mana shunday holatlarda bu metod o'zining hosil qilinishidan maqsadini ko'rsatadi :)
@it_suhbat
Aytaylik siz biror servisga so'rov yuborish uchun uning oldindan yozilgan tayyor kutubxonasidan foydalanayapsiz. Ko'pincha ichki loyihalarni o'zaro integratsiyalarida shunday tayyor kutubxonalar yoziladi, client sifatida. Shu joyda WebClient ishlatilgan bo'lsa, uning bean'i oldindan build qilib, e'lon qilingan bo'ladi.
Tasavvur qilaylik, sizga shu client kutubxona orqali yuborilgan so'rovlar yoki qabul qilib olingan javoblar logga chiqarilishi kerak bo'lib qoldi. Bean'ni qaytadan hosil qilmaysiz, bu ortiqcha ish. Mana shu joyda WebClient'ning mutate metodi yordamga keladi.
Bu metod orqali hosil qilingan bean'ni qaytadan o'zgartirsa bo'ladi. Tayyor WebClient'ga o'zingizning servisingizdan turib o'zgarishlar kiritsangiz bo'ladi. Mana shunday holatlarda bu metod o'zining hosil qilinishidan maqsadini ko'rsatadi :)
@it_suhbat
👍8🔥5
Bugun leetcode'ning top 150 interview masalalar to'plamini ishlashni boshlagan edim.
Birinchi masala merge sorted array ekan. Birinchi marta 2021-yil ishlagan ekanman. Hozir hayolimga kelgan birinchi yo'l bilan ishladim va oldingi algoritmim qanaqa bo'lganligiga qiziqdim. Sal turib oldin qanaqa yechim qilgan ekanligimni tashlayman.
Birinchi masala merge sorted array ekan. Birinchi marta 2021-yil ishlagan ekanman. Hozir hayolimga kelgan birinchi yo'l bilan ishladim va oldingi algoritmim qanaqa bo'lganligiga qiziqdim. Sal turib oldin qanaqa yechim qilgan ekanligimni tashlayman.
👍3
IT suhbat
Bugun leetcode'ning top 150 interview masalalar to'plamini ishlashni boshlagan edim. Birinchi masala merge sorted array ekan. Birinchi marta 2021-yil ishlagan ekanman. Hozir hayolimga kelgan birinchi yo'l bilan ishladim va oldingi algoritmim qanaqa bo'lganligiga…
Bu 2021-yil qilgan yechimim😅😂
🗿7🔥2
IT suhbat
Bu 2021-yil qilgan yechimim😅😂
Bu esa hozir birinchi hayolimga kelgan yechim, hech qanday qayta o'zgartirishlarsiz.
Ha, balki bu eng yaxshi yechim emasdir, har holda algoritm mutaxassisi emasman, lekin, o'ylashimcha oldingisidan ancha yaxshiroq.
Ha, balki bu eng yaxshi yechim emasdir, har holda algoritm mutaxassisi emasman, lekin, o'ylashimcha oldingisidan ancha yaxshiroq.
🔥8