Posts

Showing posts from February, 2020

Testing

Project : Github Unit Testing , Integration Testing and Functional Testing 0. Proyekteki butun classlari test etmek , yeni konkret olaraq db ile ishleyen classlari test etmek Unit Testing adlanir. Yeni Proyektdeki butun komponentler bir biri ile duzgun ishleye bilirmi ? Meselen UserServiceImpl istifade olunursa ve daxilinde UserDataInter obyekti varsa ve esl data ile ishlemirse, bu Unit Testing adlanir. 1. Integration Testing - Unit Testingdir. Sadece burada esl data ile ishleyir. Lazim olan annotationlar  : @RunWith - Spring Context i ishe salir @SpringBootTest @DataJpaTest - Test muhitinde DB ya qoshulmagimiza imkan yaradir Autowired istifade olunur. 2. Functional Testing api uchun yazilmish testing sayilir. Meselen yazilan api uchun bir client tool yazilir ve sorgularla muraciet olunaraq neticeler muqayise olunur. TDD - Test Driven Development Testler yazilandan sonra uygun servis ve ya classlar yazilir BDD - Behaviour Driven Development Koddan anlayishi olmay

Restful API Security

Image
pom.xml Tutaq ki, app /movies api a muraciet edir. Bu zaman, o ilk once OAuth2 serverine chatir. Url e muraciet etdiyi zaman, ozunde appId , secretKey, username, password kimi melumatlari saxladir. OAuth2 serverine chatdiqda, appId ve secretKey e gore muracietin mumkunluyunu teyin edir. Meselen app in /movies e muraciet huququ var , lakin /news a muraciet huququ yoxdur. Eger muraciet huququ yoxdursa, hech restful a muraciet gedib chatmir, yari yolda OAuth2 terefinden saxladilir. Tutaq ki , muraciet huququ var, bu zaman restful a muraciet olunur. Muraciet zamani gelen username ve password burada rol oynayir. Restful API teyin edir ki, bu username ve password var mi , varsa hansi huquqlara malikdir. Alinan neticeni geri qaytarir. BasicAuthentication ve DigestAuthentication BasicAuth da api e her defe sorgu gonderende username ve password gonderilir ve bu melumatlara gore huququ teyin edilir, hech bir token olmur. Bu melumatlar gonderilen zaman hashlanmamish formada gonderili

ORM, JPA

Image
ORM - Object-Relational Mapping bir yanashmadir, spesifikasiya deyil. Table larin Class ile ifade olunmasidir, yeni user table ve daxilinde id , name , surname column lar varsa, class da da eynen bu deyishenler olmalidir. Acilishina nezer yetirsek, table lar arasinda olan elaqelerde class lar arasinda gosterilmelidir. Meselen, Teacher ozu Student ile OneToMany elaqelidir. Class da da bu Teacher obyekti daxilinde , Student list saxlamaqla gosterilmelidir. JPA spesifikasiyadir. Hibarnate ve Eclipselink ise bu spesifikasiyani istifade eden kitabxanalardir. 2ci blokda MySQL yox bashqa Driver olmali idi, sehv qalib o :D JPA ortada duraraq uygun SQL diline query generasiya edir (JPQL).Daha etrafli, JPA istifade eden zaman DB in ferqi olmur. Istenilen vaxt DB ni deyishib proqrami istifade etmek olar. JPA eslinde ne edir ? JPA yeni (meselen) EclipseLink den istifade etdiyimiz zaman persistance.xml fayli yaranir ve bu fayli oxuyaraq, db ya connect olur. EclipseLink eslinde arx

Java EE, Servlet

Java EE spesifikasiyadir. Bu spesifikasiyani reallashiran kitabxanalar(texnologiyalar) var. Meselen, Servlet , JSP ve s. Servlet eslinde bir spesifikasiyadir. Proyekti clean and build ederken evvelkinden ferqli olaraq , burada .war uzantili fayl yaranir. Bu fayl, Application Servere lazimli olan fayldir. Apache Tomcat bir proqramdir. Tomcat bizim komputerde ishleyir bundan elave JVM uzerinde ishleyir. Bizim App Tomcatda yerleshir(Yeni App run olduqda, Tomcata deploy olur). Tomcat ozu ise JVM de yerleshir. Etrafli : Proyekti run etdikden sonra tutaq ki bele link acilir. http://localhost:8080/webapp/ Tomcat 8080 portunda yerleshir. Yeni TCP socket achir. webapp sorgusu gedir ve Tomcat daxilinde olan proyektlere baxir, hansi bu sorguya uygundursa onu achir.

JDBC

Image
Java Database Connectivity - JDBC (API). Bir spesifikasiyadir. Interface ler toplusu (qaydalar toplusu) yaradilib. Onun vasitesile db ya connect oluruq. Bu spesifikasiyaya uygun Driverlar yazilir (MySQL, Oracle ve s.) Daxilinde Connection, Statement, ResultSet, PreparedStatement(SQL injection qarshisini almaq uchun) interface i var. Driverlar daxil olunduqdan sonra, her bir driver a username, password gonderilir ki, db ya connect ola bilsin. DAO - Data Access Object losely coupling UserDaoInter = Context.getUserDaoImpl(); Eger sonradan UserDaoImpl deyishse, bashqa class yerine gelse hal hazirda olan classin bundan xeberi olmaycaq. Yeni classlar bir birinen asili olmur. thightly coupling UserDaoInter = new UserDaoImpl(); bu zaman classlar arasinda asililiq yaranir. what is the difference between statement and preparedstatement ?

Set

Image
Set interfacedir. Shekilde gorunen classlar bir basha ve ya dolayi yolla bu interface i implemetns edir. Set diger Collection lardan ferqli olaraq, yalniz unique elementleri yigir. Set Map dan ferqli olaraq shekilden gorunduyu kimi Collection API ya daxildir. HashSet arxada HashMap istifade edir.  TreeSet in HashSet den ferqi sort olunmasidir. HashSet e elementler daxil edende bucket lardan istifade olunduguna gore siralanmish kimi gorsenir. Lakin eslinde siralanmir. TreeSet ise konkret olaraq gonderdiyimiz obyekte gore siralayir.

Map

Image
Map interfacedir. Onu implement eden diger Map lar var ki, misal Olaraq HashMap gostermek olar. Map<Integer, String> mp = new HashMap<>(); Sual olur ki, Map Collections hesab edilir ? Umumi nezeri olaraq desek, Map da data yigdigina gore Collection hesab edilir. Lakin, texniki olaraq Map Collection deyil. Collections API ya aid deyil. How HashMap Works Internally in Java Hashtable ishleme prinsipi HashMap kimidir, sadece HM nin kohne versiyasidir. Hashtable da put metodu synchronized olunmushdur. (ArrayList ile Vector arasindaki munsabiete benzeyir) Chox vaxt bu istifade olunmur. Collections.synchronizedMap() metodundan istifade olunur. TreeMap , shekilde gorunduyu kimi SortedMap dan implements edib, yeni put olunan keyler siralanmish shekilde oturur. Bele bir hal var ki, key kimi Java classlarindan birini istifade etdikde, (Integer, String ve s.) deyeri boyuk olan boyuk bucket da yerleshdiyine gore bize sort olunmush formada gorsenir. Eslinde bu

Comparable and Comparator

Comparable User classi Comparable interface i implements edenden sonra compareTo metodunu override etmelidir. Metodun ishleme prinsipi Tutaq ki, 2 User obyekti var ve bunun bir neche parametrini muqayise etmeliyik(meselen yash). Eger beraberdirse geriye 0, boyukdurse 1, kichikdirse - her hansi eded. Bu Java nin qoydugu qaydadir Comparator Comparator interface anonym obyekti yaradaraq istifade etmek olar.  compare metodunun override edilir ve ishleme prinsipi compareTo metodu ile eynidir. Comparator vasitesi ile Listleri ozumuze uygun sort etmek olar.  Bundan elave eger class Comparable dan implements edibse, Comparator obyekti istifade etmeden de ozu avtomatik olaraq ve compareTo metoduna uygun oaraq sort olunacaq.

Collections API ( Stack and Queue )

Image
List terkibinde add , size , remove, set ve diger metodlari olan interfacedir. ArrayList, LinkedList, Vector  - List interface den implements edib. ArrayList ozu arxada Array istifade edir. 1.add zamani eger capasity dolubsa, yeni array yaradir ve evvelki arrayi buna set edir. Performans cehetden problem olsa da, initialCapasity vermekle bu problemi onlemek olur. 2. remove zamani proses eyni gedir, yeni array yaradilir. Lakin burada problemin qarshisini almaq mumkun deyil. Her remove zamani yeni array yaradilir. 3. get prosesi burada optimal gedir. LinkedList arxada Array istifade etmir. Burada Obyektler bir birinin ichine set olunur. (Node) 1. Ilk add olunan zamani obyekt sonuncu index kimi yadda saxlanilir. Daha sonra her add zamani yadda saxlanan sonuncu obyekte yeni gelen obyekt set olunur. 2. Remove zamani ArrayList den ferqli olaraq burada optimal gedir. Remove olunacaq obyekt yerine ozunden sonraki obyekt set olunur. 3. get prosesi burada optimal veziyyetde i

Threads

Threadlarla ishlemek uchun evvelce Thread classini extend etmeliyik. Daha sonra run() metodu Override olunmalidir. Oz classimizin obyektini yaratdiqdan sonra, MyThread m = new MyThread(); m.start(); deyib threadi ishe salmaq olur. strart metodu arxada dolayi yolla run metodunu ishe salir. extends Thread ve implements Runnable Extends zamani artiq extends qabiliyyetini itiririk. class Runnable da implements etdikden sonra start() metodu bu interface ichinde olmadigina gore error olacaq. Buna gore asagidaki shekilde kod yazilmalidir. Thread mt = new Thread(new MyThread()); constructora oz obyektimizi gonderirik. Race Condition Eger butun threadlar eyni menbeye muraciet edirse bu zaman RaceCondition yaranir. Bu problemin qarshisini almaq uchun  synchronized istifade etmek lazimdir. Volatile Thread lar yaranan zaman proyektin cari hali kopyalanir. Yeni Threadlar her biri ayri yaddash sahesine muraciet edir. synchronized ne qeder bu ya