Javaholics
Ir al canal en Telegram
Har bir dasturchida e'tibordan chetda qoldirgan mavzusi bo'lishi ehtimoli yuqori va biz joylaydigan keyingi post siz uchun ayni muddao bo'lishi mumkin.
Mostrar másEl país no está especificadoLa categoría no está especificada
193
Suscriptores
Sin datos24 horas
Sin datos7 días
Sin datos30 días
Archivo de publicaciones
193
To’g’ri javob: primitive type ya’ni long
Chunki,
1)
int i - primitive typeda, agar sum Long bo’lganda autoboxing ya’ni primitive typedan non-primitivega o’tqazish kerak bo’lardi va bu yaxshi yechim emas.
2) Sikl (for) Integerni maximum qiymati marta aylanadi. Agar sum non-primitive ya’ni Long bo’lganda va har safar i qo’shilganda yangi object yaratilgan bo’lardi. Va bizda Long ning keraksiz 2147483647 (Integer qabul qila oladigan max qiymat) ta obyekti yaratilgan bo’lardi.
P.S. kodni run qilib ko’rganda ham o’rtasidagi farq vaqt hisobida yaqqol seziladi.193
‘sum’ o’zgaruvchisi ushbu holatda primitive type bo’lgani yaxshimi (long) yoki non-primitive type (Long) va nima uchun ?
193
Kanalni reklama qilganimizda, post quyidagicha bo’lardi:
456 - raqamdagi bo’lishni xohlaysizmi ? Unda javaholics ga obuna bo’ling ;)
193
Agar sizda qandaydir taklif yoki ish jarayonida duch kelgan savollaringiz bo'lsa, yoki boshqalar uchun ham foydali deb topgan mavzuyingiz bo'yicha post yozishimizni xohlasangiz, quyidagi bot orqali bizga xabar qoldiringishingiz mumkin.
👉🏼 @javaholics_bot
Va biz albatta jamoamiz bilan birga taklifingizni ko'rib chiqib javobni yoki kanalda post ko'rinishida yoki shaxsiyda xabar qoldirish orqali amalga oshiramiz.
193
🧠 To'g'ri fikrlash, fikrlash uslubi (mindset) qanchalik muhim ekanligi har kuni isbotlanadigan haqiqat
🇺🇿 "Mindset"ingizni o'zgarishlarga tayyorlashning 12 usuli
👉 https://telegra.ph/Mindsetingizni-ozgarishlarga-tayyorlashning-12-usuli-09-22
🇺🇸 12 Ways to Shift Your Mindset and Embrace Change
👉 https://www.inc.com/young-entrepreneur-council/12-ways-to-shift-your-mindset-and-embrace-change.html
P/S: Sizlarga biz mashg'ulot. Hamma o'z rakursidan ko'rib izohlaringizni yozishingizni kutaman.
Blog: @OdilbekMirzayev
193
Serializable interfeysi obyektni shunchaki serializatsiya bo'la olishga munosib ekanligini belgilash uchun maxsus belgi sifatida ishlatilinadi.
static va transient kalit so'zi bilan belgilangan o'zgaruvchilar serializatsiya qilinmaydi.
Ma'lum bir obyekt serializatsiya bo'la olishi uchun har bir fieldi serializable interfeysidan implement olgan bo'lishi shart (rasm ko'rsatilganidek).
193
Serialization and Deserialization
Serializatsiya - bu obyektni bayt streamga aylantirish mexanizmi. Deserializatsiya - bu teskari jarayon, bu yerda bayt stream haqiqiy Java obyektini xotirada qayta yaratish uchun ishlatiladi.
193
#transactional
#configure
#enable
Ushbu post orqali @Transactional annotation dan foydalanishni qanaqa usullari mavjud hamda uni to'g'ri configuratsiya qilishni izohlashga harakat qilamiz.
- Transaction management ni sozlashni 2 xil usuli mavjud:
1-usul: @Configuration class lardan biriga @EnableTransactionManagement annotation qo'shish kerak hamda, ushbu bean ni qo'shish kerak
@Bean
public PlatformTransactionManager transactionManager(){
JpaTransactionManager transactionManager
= new JpaTransactionManager();
transactionManager.setEntityManagerFactory(
entityManagerFactoryBean().getObject() );
return transactionManager;
}
2-usul: XML file ga bean ni qo'shish kerak
<bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="myEmf" />
</bean>
<tx:annotation-driven transaction-manager="txManager" />
Eslatma: Agar siz Spring Boot project da spring-data- yoki spring-tx dependency lardan foydalangan bo'lsangiz, default holatda transaction management enable holatida bo'ladi
193
#transactional
@Transactional annotation ni repository da method-level da foydalanishimizga misol bo'la oladi.
193
#transactional
Ushbu holatda @Transactional annotation ni controller method lari bilan birgalikda ishlatilish holati ko'rsatilgan.
@Transactional annotation ni optional(ixtiyoriy) elementlari va ularning tasnifi
* isolation - Tranzaktsiyalarni izolyatsiya qilish darajasi.
* propagation - Propagation turi
* timeout - Transaktsiya bajarishni kutish vaqti (default -1)
* readOnly - Bu transaktsiyani faqat read (select - ma'lumot o'qish) yoki false qiymatida database ga o'rgarishni saqlashga ruxsatni bildiradi (default false).
* rollbackFor - Nolinchi (0) yoki undan ko'p istisno sinflarini belgilaydi, ular Throwable subklasslari bo'lishi kerak, bu esa qaysi istisno turlari tranzaktsiyani qaytarishga olib kelishi kerakligini ko'rsatadi. Ya'ni shu exception holatlari aniqlansa tranzaktsiya rollback bo'lib ketadi (O'zgarishlar saqlanmaydi).
193
#transactional
#transaction_management
JPA va transaksiyalarni boshqarishJPA (Java Persistence API) dan qanday foydalanishni bilamiz, lekin undagi mavjud transaksiyalarni boshqarish qanday amalga oshiriladi va uni JPA ni o'zi ta'minlay oladimi? kabi savollarga javob topishga harakat qilamiz. JPA ni o'zidan foydalangan holatimizda transaksiyalarni avtomatik boshqarish holati mavjud bo'lmaydi. Database dan faqatgina jpa query(hql), native query(sql) orqali select (ya'ni read) ni ishlatishimiz mumkin bo'ladi holos. Umumiy holatda database ga create, insert, update, delete buyruqlarini bermoqchi bo'lsak, @Transactional annotation dan foydalanishimiz kerak bo'ladi. Va bu bizga ACID (atomicity, consistency, isolation,durability) - ma'lumotlar bazasi tranzaktsiyalarining xususiyatlari to'plamidan foydalanishga imkon beradi. ACID haqida to'liqroq ma'lumotni ushbu linkda o'qishingiz mumkin. @Transactional annotation ni class yoki method levelida foydalanishimiz mumkin: 1) service-level: Bu holatda @Transactional service dagi barcha method larga tegishli.
@Service
@Transactional
public class TestService {
//...
}
2) method-level: Bu holatda @Transactional service dagi faqat shu method ga tegishli
@Service
public class TestService {
@Transactional
public void testMethod() {
//...
}
}
Transactional bo'yicha navbatdagi postimizda yana ham batafsilroq tushuncha berishga harakat qilamiz.193
#answer (spring-core)
Inson deganda biz ko'z ostimizga insonlar keltiramiz lekin aynan Palonchi (Axror) ni keltirmaymiz odatda yani aniq bir shaxsni.
Tasavvur qiling men 100 ta insonni ishlataman. Marketingga marketologni, Developerga developerni va hakoza bir birini bir birini ishiga aralashtirib yubormayman, agar aralashtirsam kassot bo'laman chunki o'zini mutaxasi qilmagani uchun.
Bu yerda har bir inson bitta object
Inson tushunchasi o'rnida IoC ya'ni objectlarni qanday boshqarish(configure), yig'ish (assemble) tushunamiz
DI deganda esa o'sha o'z mutaxasisini(objectni) kerakli joyda to'g'ri chaqirib ishlata olishimda. Agar DI ishlatmasam systema bir kun kelib kassot ya'ni qulash ehtimoli katta.
endi Springda IoC 2 xil usul hosil qilamiz, yani insonlarni 2 xil usulda boshqarishimiz mumkin
1.BeanFactory
2.ApplicationContext
biz bitta bo'sh Global Container(Quti buni ApplicationContext desak bo'ladi) yasaymiz, va har bitta classlarimizdan single object yaratib o'sha qutiga tashaymiz
manabuni IoC tushunchasi deyishimiz mumkin
Endi uni kerakli joyda developer kere bo'lsa developerni chaqirishni DI orqali qilamiz bu Spring Bootda @Authowired annotation orqali qilinadi.
P.S: yana documentation orqali o'qib javobni kuchaytirib oling !
193
#spring_core
#java_core
IoC (Inversion of Control) va DI (Dependency Injection) nimani tushunasiz ?
Java Object classdagi equals() and hashCode() nimani tushunasiz , o'zi biz ishlatamizmi , kerakmi ?
commentariyada to'liq fikringizni qoldiring, bu ko'pchilikka foyda bo'lishi mumkin
193
#jwt
sizningcha qanday yo'l tutish kerak !? 1 2 3 ?
1 . Jwt Tokeni filter qilayotganda subjectida usernameni olib bazadan o'sha userni topib rolelarini va boshqa permissionlarni tekshirish kerak shunda security taminlanadi.
2. Yo'q. Jwt generate qilayotganda tokeni ichiga o'sha rollarini, va boshqa permissionlarini ham beramiz va uni filter qilayotganimizda hamma permissionlarini tokendan olib authentication dan o'tkazib yuboramiz shunda systema database connection bo'lmaydi va sezilarli darajada tez ishlaydi 1 - usuldan ko'ra shu yaxshi
3. Boshqa yo'l qilish kerak . Commentda qoldiraman.
193
#spring_security
Cross-Site Request Forgery (CSRF) haqida.
CSRF bu - autentifikatsiyadan o'tgan userni o'zi xohlamagan actionni bajarishga majbur qilish orqali uni sessionidan foydalangan holda hacking qilish. Tushunganingizdek bu hacking turi hisoblanadi.
Xo'sh, buni qanday qilishadi ? Bu uchun brauzerlar qanday ishlashini tushinib olish zarur. User autentifikatsiyadan o'tgan paytda har bir requestga sessionId qo'shib jo'natiladi (aksiriyat vaziyatlarda shunday). Bu shuni anglatadiki, ko'p hollarda, tokenga asoslangan authentifikatsiyada tokendan va bir vaqtda sessionId dan foydalanishadi. Spring security bo'yicha mutaxassislar ham userlar ko'pchiligi web client sifatida (mobile yoki desktop emas) ro'yhatdan o'tishsa token bilan birgalikda sessiondan foydalanish afzal deb ta'kidlashadi.
Masalan, deylik siz sign in qilib kirgan foydalanuvchisiz, saytda sizga qiziq bo'lgan qandaydir reklamaga o'xshash ko'rinish yoki fake download tugmasini yaratishadi va siz uni bosganingizda serverga o'zlarini g'arazli maqsadlarini amalga oshirish uchun (siz uchun generatsiya qilingan session dan foydalangan holda) request jo'natishadi. Va shoh mot :)
CSRF hujumlari orqali nimalar qilish mumkin ? Agar to'lov tizimi bo'lsa o'zlarining hisoblariga pul o'tqazish yoki o'zlariga hamma permissionlarga ega bo'lgan user yaratib olish va shunga o'xshagan imkoniyatlar ega bo'ladilar.
Yaxshiroq tassavvurga ega bo'lish shu linkdagi videoni ko'rish mumkin.
193
Kech bo’lsa ham barcha javaholiklarni kasb bayrami bilan tabriklaymiz. Klaviaturangiz shiqirlashdan to’xtamasin ;)
193
Qo'shimcha ma'lumot: Stream qilishda haqiqatdan ham stream qilinayotgani sezilishi uchun har bir keyingi element 1 sekund kechiktirib uzatiladigan qilingan.
