PROJE YÖNETİMİ Eğitimi - Açıköğretim Sistemi - Anadolu Üniversitesi - Video

 


PROJE YÖNETİMİ - Konu Anlatımı - Playlist


Proje ve proje yönetimi kavramlarını tanımlayabileceksiniz. Projelerin temel özelliklerine göre sınıflandırılmasını açıklayabileceksiniz. Proje yönetiminde göz önünde bulundurulması gereken parametreleri sıralayabileceksiniz. Proje yönetiminin temel işlevlerini isimlendirebileceksiniz. Proje paydaşlarını tanımlayabileceksiniz. Proje yaşam çevrimini tanımlayabilecek ve proje aşamalarını listeleyebileceksiniz. Proje yönetim süreç gruplarını tanımlayabilecek ve bunların proje aşamaları ile ilişkisini açıklayabileceksiniz. Proje yönetimi bilgi alanlarını sıralayabileceksiniz.

Proje ve proje yönetimi kavramlarını tanımlayabileceksiniz. Projelerin temel özelliklerine göre sınıflandırılmasını açıklayabileceksiniz. Proje yönetiminde göz önünde bulundurulması gereken parametreleri sıralayabileceksiniz. Proje yönetiminin temel işlevlerini isimlendirebileceksiniz. Proje paydaşlarını tanımlayabileceksiniz. Proje yaşam çevrimini tanımlayabilecek ve proje aşamalarını listeleyebileceksiniz. Proje yönetim süreç gruplarını tanımlayabilecek ve bunların proje aşamaları ile ilişkisini açıklayabileceksiniz. Proje yönetimi bilgi alanlarını sıralayabileceksiniz.

Proje entegrasyon yönetimini tanımlayabilecek ve alt süreçleri sıralayabileceksiniz. Proje kapsam yönetiminin projeler için önemini açıklayabilecek ve proje kapsam kaymasını tanımlayabileceksiniz. Proje zaman yönetiminin alt süreçlerini listeleyebileceksiniz. Proje maliyet yönetiminin proje için önemini açıklayabilecek ve alt süreçleri sıralayabileceksiniz. Projelerde kalite kavramını açıklayabilecek ve proje kalite yönetimi alt süreçlerini aktarabileceksiniz. Proje insan kaynakları yönetimini ve proje insan kaynakları planının oluşturulması sürecini ifade edebileceksiniz. Proje iletişim yönetiminin projeler için önemini açıklayabilecek ve proje iletişim yönetimi alt süreçlerini sıralayabileceksiniz. Proje risk yönetiminin projeler için önemini açıklayabileceksiniz. Proje tedarik yönetimini tanımlayabilecek ve tedarik yönetim sürecinin alt süreçlerini sıralayabileceksiniz. Proje bilgi alanlarının proje yönetimindeki süreç grupları ile ilişkisi tablo biçiminde özetleyebileceksiniz.

Proje entegrasyon yönetimini tanımlayabilecek ve alt süreçleri sıralayabileceksiniz. Proje kapsam yönetiminin projeler için önemini açıklayabilecek ve proje kapsam kaymasını tanımlayabileceksiniz. Proje zaman yönetiminin alt süreçlerini listeleyebileceksiniz. Proje maliyet yönetiminin proje için önemini açıklayabilecek ve alt süreçleri sıralayabileceksiniz. Projelerde kalite kavramını açıklayabilecek ve proje kalite yönetimi alt süreçlerini aktarabileceksiniz. Proje insan kaynakları yönetimini ve proje insan kaynakları planının oluşturulması sürecini ifade edebileceksiniz. Proje iletişim yönetiminin projeler için önemini açıklayabilecek ve proje iletişim yönetimi alt süreçlerini sıralayabileceksiniz. Proje risk yönetiminin projeler için önemini açıklayabileceksiniz. Proje tedarik yönetimini tanımlayabilecek ve tedarik yönetim sürecinin alt süreçlerini sıralayabileceksiniz. Proje bilgi alanlarının proje yönetimindeki süreç grupları ile ilişkisi tablo biçiminde özetleyebileceksiniz.

Proje entegrasyon yönetimini tanımlayabilecek ve alt süreçleri sıralayabileceksiniz. Proje kapsam yönetiminin projeler için önemini açıklayabilecek ve proje kapsam kaymasını tanımlayabileceksiniz. Proje zaman yönetiminin alt süreçlerini listeleyebileceksiniz. Proje maliyet yönetiminin proje için önemini açıklayabilecek ve alt süreçleri sıralayabileceksiniz. Projelerde kalite kavramını açıklayabilecek ve proje kalite yönetimi alt süreçlerini aktarabileceksiniz. Proje insan kaynakları yönetimini ve proje insan kaynakları planının oluşturulması sürecini ifade edebileceksiniz. Proje iletişim yönetiminin projeler için önemini açıklayabilecek ve proje iletişim yönetimi alt süreçlerini sıralayabileceksiniz. Proje risk yönetiminin projeler için önemini açıklayabileceksiniz. Proje tedarik yönetimini tanımlayabilecek ve tedarik yönetim sürecinin alt süreçlerini sıralayabileceksiniz. Proje bilgi alanlarının proje yönetimindeki süreç grupları ile ilişkisi tablo biçiminde özetleyebileceksiniz.

Başlangıç/Tanımlama aşamasında gerçekleştirilen faaliyetleri sıralayabileceksiniz. Proje başlatma belgesinin girdilerini açıklayabileceksiniz. Proje başlatma belgesinin oluşturulmasında yararlanılan araçları ve teknikleri sıralayabileceksiniz. Proje başlatma belgesinde yer alan bilgileri sıralayabileceksiniz. Paydaş kavramını tanımlayıp proje paydaşlarına örnekler verebileceksiniz. Paydaşların belirlenmesinde kullanılan girdiler ile yararlanılan araçları ve teknikleri sıralayabileceksiniz.

Projede zaman yönetimini etkin olarak yapılandırabileceksiniz. Bir projenin hiyerarşik planlamasını yapabileceksiniz. Proje hareket planını oluşturabileceksiniz. İş kırılımını yapabileceksiniz. Etkili bir proje ekibi oluşturabileceksiniz.

Projede zaman yönetimini etkin olarak yapılandırabileceksiniz. Bir projenin hiyerarşik planlamasını yapabileceksiniz. Proje hareket planını oluşturabileceksiniz. İş kırılımını yapabileceksiniz. Etkili bir proje ekibi oluşturabileceksiniz.

Projede zaman yönetimini etkin olarak yapılandırabileceksiniz. Bir projenin hiyerarşik planlamasını yapabileceksiniz. Proje hareket planını oluşturabileceksiniz. İş kırılımını yapabileceksiniz. Etkili bir proje ekibi oluşturabileceksiniz.

Maliyet türlerini tanımlayabileceksiniz. Maliyet tahmin türlerini ve kullanılan yöntemleri açıklayabileceksiniz. Bütçeleme yöntemlerini ve maliyet bütçeleme sürecini açıklayabileceksiniz. Risk yönetiminin planlanmasını açıklayabileceksiniz.

JPA - Hibernate Konu Anlatımı - Türkçe (ChatGPT)







JPA, nesne yönelimli programlama yaklaşımını veritabanı işlemlerine uygulayarak, veritabanı işlemlerini daha anlaşılır ve bakımı daha kolay hale getirir. JPA, veritabanı tabloları ve Java sınıfları arasındaki ilişkileri yönetmek için kullanılan JPA işaretçileri sayesinde birçok veritabanı işlemini otomatikleştirir.

JPA ile veritabanı işlemlerini gerçekleştirmek için Entity Manager nesnesini kullanabilirsiniz. Entity Manager, veritabanı işlemlerini gerçekleştirmek için kullanılan bir nesnedir. EntityManager, JPA'nın sağladığı API'leri kullanarak veritabanı işlemlerini gerçekleştirir. EntityManager, veritabanı tablolarındaki kayıtları işlemek için CRUD işlemlerini (Create, Read, Update, Delete) destekler.

JPA, Entity sınıflarını kullanarak veritabanı tabloları ve Java sınıfları arasındaki ilişkileri yönetir. Bir Entity sınıfı, bir veritabanı tablosuna karşılık gelir. Entity sınıflarında, veritabanı tablosundaki her sütun bir özellik (property) olarak tanımlanır. Entity sınıflarında tanımlanan özellikler, veritabanındaki sütunlarla eşleştirilir.

JPA işaretçileri, veritabanı işlemleri için kullanılan özel işaretçilerdir. Bu işaretçileri kullanarak, bir Entity sınıfının bir veritabanı tablosuna karşılık geldiğini belirtebilirsiniz. Ayrıca, bir Entity sınıfındaki bir özelliğin bir veritabanı sütununa karşılık geldiğini belirtebilirsiniz.

JPA, bir veritabanından veri almak için JPQL (Java Persistence Query Language) adında özel bir sorgu dilini de destekler. JPQL, SQL benzeri bir sorgu dilidir. JPQL, bir Entity Manager üzerinden çalışır ve veritabanından veri çekmek için kullanılır.

JPA'nın avantajları arasında veritabanı işlemlerinin daha kolay ve anlaşılır hale getirilmesi, nesne yönelimli programlama yaklaşımının veritabanı işlemlerine uygulanması, ORM araçlarının desteklenmesi, JPQL'nin kullanımı ve daha az kod yazımı gibi konular yer alır.

JPA, veritabanı işlemlerinin daha kolay ve anlaşılır hale getirilmesi, daha az kod yazma ihtiyacı ve veritabanı işlemlerinin daha hızlı gerçekleştirilmesi gibi avantajları nedeniyle Java programlama dili için popüler bir ORM aracıdır. JPA (Java Persistence API), Java programlama dilinde bir ORM (Object-Relational Mapping) aracıdır. ORM araçları, veritabanı işlemlerini gerçekleştirmek için kullanılan SQL (Structured Query Language) sorgularını yazmak yerine, Java nesneleri arasındaki ilişkileri kullanarak veritabanı işlemlerini gerçekleştirmeyi mümkün kılar.

JPA, özellikle Java EE (Enterprise Edition) uygulamalarında kullanılmak üzere tasarlanmıştır. JPA'nın temel amacı, veritabanı tabloları ve Java sınıfları arasındaki ilişkileri yönetmektir. Bu sayede, veritabanı işlemleri için kullanılan SQL sorgularını yazmak zorunda kalmadan, Java kodu üzerinden veritabanı işlemlerini gerçekleştirebilirsiniz.

JPA, JDBC (Java Database Connectivity) kütüphanesine dayanır. Ancak, JDBC'de olduğu gibi doğrudan SQL sorguları yazmak yerine, JPA'da veritabanı işlemleri için bir Entity Manager kullanılır. Entity Manager, veritabanı işlemlerini gerçekleştirmek için kullanılan bir nesnedir. Veritabanı işlemleri, Entity Manager aracılığıyla gerçekleştirilir.

JPA'nın en büyük avantajlarından biri, nesne yönelimli programlama yaklaşımının veritabanı işlemlerine uygulanmasıdır. Bu sayede, veritabanı işlemleri için kullanılan kodların daha anlaşılır ve bakımı daha kolay olur. Ayrıca, veritabanı tabloları ve Java sınıfları arasındaki ilişkileri yönetmek için kullanılan JPA işaretçileri (annotations) sayesinde, birçok veritabanı işlemi otomatikleştirilir.

JPA, farklı ORM (Object-Relational Mapping) araçlarını destekler. Hibernate, EclipseLink ve OpenJPA gibi farklı ORM araçları, JPA'nın desteği altındadır. Bu sayede, bir uygulamanın veri tabanı işlemlerini yönetmek için kullanılan Hibernate veya EclipseLink gibi bir ORM aracını değiştirerek JPA'ya geçebilirsiniz.

JPA ayrıca, bir veritabanından veri almak için JPQL (Java Persistence Query Language) adında özel bir sorgu dilini de destekler. JPQL, SQL benzeri bir sorgu dilidir, ancak Java sınıfları ve JPA işaretçileri kullanarak veritabanından veri çekmeyi mümkün kılar.

Sonuç olarak, JPA, Java programlama dili için veritabanı işlemlerini yönetmek için kullanılan bir ORM aracıdır. JPA, JDBC kütüphanesine dayanır ve veritabanı işlemleri için Entity Manager nesnesini kullanır.

PA (Java Persistence API) işaretçileri, Java sınıfları ve veritabanı tabloları arasındaki ilişkileri tanımlamak için kullanılan özel işaretçilerdir

  1. @Entity: Bir Java sınıfının bir veritabanı tablosuna karşılık geldiğini belirtir.
  2. @Table: Bir Java sınıfının hangi veritabanı tablosuna karşılık geldiğini belirtir.
  3. @Id: Bir sınıf özelliğinin bir veritabanı tablosundaki birincil anahtar (primary key) sütunu olduğunu belirtir.
  4. @GeneratedValue: Birincil anahtar sütununun nasıl oluşturulacağını belirler.
  5. @Column: Bir sınıf özelliğinin bir veritabanı sütunu olduğunu belirtir.
  6. @Basic: Bir sınıf özelliğinin basit bir veritabanı sütunu olduğunu belirtir.
  7. @Temporal: Bir tarih veya zaman özelliğinin veritabanındaki tarih veya zaman sütunlarına nasıl eşleneceğini belirler.
  8. @Transient: Bir sınıf özelliğinin veritabanına kaydedilmemesi gerektiğini belirtir.
  9. @OneToOne: Bir sınıfın diğer bir sınıf ile bir-bir ilişkisi olduğunu belirtir.
  10. @OneToMany: Bir sınıfın diğer bir sınıf ile bir-çok ilişkisi olduğunu belirtir.
  11. @ManyToOne: Bir sınıfın diğer bir sınıf ile çok-bir ilişkisi olduğunu belirtir.
  12. @ManyToMany: İki sınıf arasında birçok-çok ilişkisi olduğunu belirtir.
  13. @JoinColumn: İki sınıf arasındaki ilişkide kullanılacak veritabanı sütununu belirtir.
  14. @JoinTable: İki sınıf arasındaki ilişki için kullanılacak ortak bir tablonun adını belirtir.
  15. @Index: Bir veritabanı tablosunda bir indeksin tanımlanmasını sağlar.
  16. @NamedQuery: Bir JPQL (Java Persistence Query Language) sorgusunun adını ve sorgusunu tanımlar.
  17. @NamedQueries: Birden fazla @NamedQuery tanımlar.
  18. @QueryHint: Bir JPQL sorgusu için veritabanı yönetim sistemine yönelik bir ipucu sağlar.
  19. @SqlResultSetMapping: SQL sorguları tarafından döndürülen sonuçların nasıl eşleneceğini belirler.
  20. @Cacheable: Bir sınıfın ve/veya bir sınıf özelliğinin önbelleğe alınması gerektiğini belirtir.
  21. @Cache: Bir önbellek için yapılandırma bilgilerini sağlar.
  22. @ElementCollection: Bir sınıf özelliğinin bir koleksiyon olarak tutulacağını belirtir.
  23. @Embedded: Bir sınıf özelliğinin başka bir sınıfın özellikleriyle birleştirileceğini belirtir.
  24. @Embeddable: Bir sınıfın diğer bir sınıfın özelliği olarak kullanılabileceğini belirtir.
  25. @AttributeOverride: @Embedded sınıfının özelliklerinin nasıl eşleneceğini belirler.
  26. @AttributeOverrides: Birden fazla @AttributeOverride tanımlar.
  27. @Transient: Bir sınıf özelliğinin geçici olduğunu ve veritabanına kaydedilmemesi gerektiğini belirtir.
  28. @Version: Bir sınıfın optimistik kilitlemesini belirtir.
  29. @Access: Bir sınıf özelliğinin nasıl erişilebileceğini belirtir.
  30. @DiscriminatorColumn: Kalıtımlı sınıfların nasıl ayırt edileceğini belirler.
  31. @DiscriminatorValue: Bir kalıtımlı sınıfın değerini belirler.
  32. @Inheritance: Kalıtım stratejisini belirler.
  33. @NamedQuery: JPQL sorgularının adını ve sorgusunu tanımlar.
  34. @NamedQueries: Birden fazla @NamedQuery tanımlar.
  35. @SecondaryTable: Bir sınıfın birincil tablosuna ek olarak kullanılacak bir veya daha fazla tablonun adını belirtir.
  36. @SecondaryTables: Birden fazla @SecondaryTable tanımlar.
  37. @SequenceGenerator: Bir sınıfın birincil anahtarının nasıl oluşturulacağını belirler.
  38. @TableGenerator: Bir sınıfın birincil anahtarının nasıl oluşturulacağını belirler.
  39. @ExcludeSuperclassListeners: Bir sınıfın ana sınıfının olay dinleyicilerinin kullanılmamasını belirtir.
  40. @ExcludeDefaultListeners: Bir sınıfın varsayılan olay dinleyicilerinin kullanılmamasını belirtir.
  41. @EntityListeners: Bir sınıfın olay dinleyicilerini belirtir.
  42. @PrePersist: Bir sınıf örneği kalıcı hale getirilmeden önce çalışacak işlemi belirtir.
  43. @PostPersist: Bir sınıf örneği kalıcı hale getirildikten sonra çalışacak işlemi belirtir.
  44. @PreUpdate: Bir sınıf örneği güncellenmeden önce çalışacak işlemi belirtir.
  45. @PostUpdate: Bir sınıf örneği güncellendikten sonra çalışacak işlemi belirtir.
  46. @PreRemove: Bir sınıf örneği silinmeden önce çalışacak işlemi belirtir.
  47. @PostRemove: Bir sınıf örneği silindikten sonra çalışacak işlemi belirtir.
  48. @PostLoad: Bir sınıf örneği veritabanından yüklendikten sonra çalışacak işlemi belirtir.
  49. @MapKeyColumn: Bir harita sınıfının anahtar sütununun adını belirtir.
  50. @MapKeyJoinColumn: Bir harita sınıfının anahtar sütununu belirleyen bir join column oluşturur.
  51. @OrderBy: Bir koleksiyonun veya sıralı bir haritanın nasıl sıralanacağını belirler.
  52. @Lob: Bir sınıf özelliğinin büyük verileri tutmak için kullanılabileceğini belirtir.
  53. @NamedNativeQuery: Native SQL sorgularının adını ve sorgusunu tanımlar.
  54. @NamedNativeQueries: Birden fazla @NamedNativeQuery tanımlar.
  55. @SqlResultSetMappings: Native SQL sorguları tarafından döndürülen sonuçların nasıl eşleneceğini belirler.
  56. @SqlResultSetMapping: Bir SQL sonucu kümesinin bir sınıfa nasıl eşleneceğini belirtir.
  57. @Convert: Bir sınıf özelliğinin veritabanına nasıl dönüştürüleceğini belirler.
  58. @Converter: Bir dönüştürücü sınıfını belirtir.
  59. @AttributeConverter: Bir sınıf özelliğinin nasıl dönüştürüleceğini belirleyen bir dönüştürücü sınıfını belirtir.
  60. @ElementCollection: Bir sınıf özelliğinin bir koleksiyon olarak tutulacağını belirtir.
  61. @CollectionTable: Bir @ElementCollection için tablo ismini belirler.
  62. @AssociationOverride: Kalıtım hiyerarşisinde bir ilişkiyi geçersiz kılar.
  63. @AttributeOverride: Bir gömülü sınıfın veya bir sınıfın özelliklerinin nasıl eşleneceğini belirler.
  64. @BatchSize: Hibernate tarafından kullanılan önbellekleme için yüksek bir sayı belirtir.
  65. @Proxy: Hibernate tarafından kullanılan proxy'lerin davranışını belirler.
  66. @NaturalId: Bir sınıf özelliğinin doğal bir kimlik olduğunu belirtir.
  67. @NaturalIdCache: Bir doğal kimlik için önbellekleme bilgilerini sağlar.
  68. @Immutable: Bir sınıfın değiştirilemez olduğunu belirtir.
  69. @Filter: Bir sınıfın veya koleksiyonun dinamik olarak filtrelenmesine izin verir.
  70. @Filters: Birden fazla @Filter tanımlar.
  71. @TypeDef: Bir özel tip tanımlar.
  72. @Type: Bir sınıf özelliğinin özel bir tiple ilişkili olduğunu belirtir.
  73. @Loader: Bir ilişki yükleyicisini belirtir.
  74. @FetchProfile: Bir yük profili tanımlar.
  75. @PersistenceContext: Bir EntityManager referansı almak için kullanılır.
  76. @PersistenceUnit: Bir EntityManagerFactory referansı almak için kullanılır.
  77. @Enumerated: Bir özellik için belirtilen enum tipinin nasıl eşleneceğini belirler.
  78. @SequenceGenerator: Bir sınıfın birincil anahtarının nasıl oluşturulacağını belirler.
JPA (Java Persistence API) yaşam döngüsü, bir nesnenin oluşturulmasından, veritabanına kaydedilmesine ve nihayetinde veritabanından silinmesine kadar geçen süreçleri kapsar. JPA yaşam döngüsü, JPA entegrasyonu olan herhangi bir uygulama tarafından kullanılabilir.

JPA yaşam döngüsü, şu aşamalardan oluşur:

  1. Yeni nesne oluşturma: Bir nesne oluşturulduğunda, bu nesne henüz JPA yönetimi altında değildir. Bu aşamada nesne "new" durumundadır.
  2. Yönetilen durum: Bir EntityManager tarafından yönetilen bir nesne oluşturulduğunda, JPA tarafından yönetilen bir duruma girer. Bu aşamada nesne "managed" durumundadır.
  3. Yönetilen durumda değişiklikler: Yönetilen bir nesnedeki değişiklikler, otomatik olarak EntityManager tarafından izlenir ve veritabanına yansıtılır. Bu aşamada nesne "managed" durumunda kalır.
  4. Yönetilen durumdan ayrılma: EntityManager'dan çıkarılan bir nesne, "detached" duruma geçer. Detached durumdaki nesne, EntityManager tarafından yönetilmemekte ve veritabanında değişiklikler yansıtılmamaktadır.
  5. Yönetilen duruma geri getirme: EntityManager tarafından yönetilmeyen bir nesne, EntityManager tarafından tekrar yönetilen bir nesne haline getirilebilir. Bu durumda nesne tekrar "managed" durumuna geçer.
  6. Silme: EntityManager tarafından yönetilen bir nesne silindiğinde, nesne "removed" durumuna geçer.
  7. Veritabanına kaydetme: EntityManager tarafından yönetilen bir nesne veritabanına kaydedildiğinde, nesne "persistent" durumuna geçer.
  8. Veritabanından silme: EntityManager tarafından yönetilen bir nesne veritabanından silindiğinde, nesne "transient" durumuna geçer.


JPA yaşam döngüsü, EntityManager nesnesinin yönettiği nesnelerin her birinde gerçekleşir ve JPA özelliklerini kullanarak nesnenin durumunu izler. Bu süreç, JPA entegrasyonu olan herhangi bir uygulama tarafından kullanılabilir ve nesnelerin veritabanı ile etkileşimini yönetmek için çok önemlidir.

Hibernate, bir JPA (Java Persistence API) uygulamasıdır ve JPA yaşam döngüsünü takip eder. Hibernate'in yaşam döngüsü, bir nesnenin oluşturulmasından, veritabanına kaydedilmesine ve nihayetinde veritabanından silinmesine kadar geçen süreçleri kapsar. Hibernate yaşam döngüsü, bir Hibernate uygulamasında kullanılabilir.

Hibernate yaşam döngüsü, şu aşamalardan oluşur:


  1. Yeni nesne oluşturma: Bir nesne oluşturulduğunda, bu nesne henüz Hibernate yönetimi altında değildir. Bu aşamada nesne "transient" durumundadır.


  1. Kalıcı nesne: Bir nesne Hibernate tarafından yönetildiğinde, Hibernate tarafından yönetilen bir duruma girer. Bu aşamada nesne "persistent" durumundadır.

  2. Yönetilen durumda değişiklikler: Yönetilen bir nesnedeki değişiklikler, Hibernate tarafından izlenir ve veritabanına yansıtılır. Bu aşamada nesne "persistent" durumunda kalır.

  3. Yönetilen durumdan ayrılma: Session'dan çıkarılan bir nesne, "detached" duruma geçer. Detached durumdaki nesne, Hibernate tarafından yönetilmemekte ve veritabanında değişiklikler yansıtılmamaktadır.
    Ayrılmış durum için kullanılan yöntemler şunlardır:
            session.detach(e);
            session.evict(e);
            session.clear();
            session.close();




// Transient State
Employee e = new Employee("Neha Shri Rudra", 21, 180103);

// Persistent State 
session.save(e); 


// Detached State
session.close(); 
            

4.Yönetilen duruma geri getirme: Session tarafından yönetilmeyen bir nesne, Session tarafından tekrar yönetilen bir nesne haline getirilebilir. Bu durumda nesne tekrar "persistent" durumuna geçer.


5.Silme: Session tarafından yönetilen bir nesne silindiğinde, nesne "removed" durumuna geçer.


6.Veritabanına kaydetme: Session tarafından yönetilen bir nesne veritabanına kaydedildiğinde, nesne "persistent" durumuna geçer
7.Veritabanından silme: Session tarafından yönetilen bir nesne veritabanından silindiğinde, nesne "transient" durumuna geçer.

Hibernate yaşam döngüsü, Session nesnesinin yönettiği nesnelerin her birinde gerçekleşir ve Hibernate özelliklerini kullanarak nesnenin durumunu izler. Bu süreç, Hibernate entegrasyonu olan herhangi bir uygulama tarafından kullanılabilir ve nesnelerin veritabanı ile etkileşimini yönetmek için çok önemlidir.









Hibernate'de persistent durumunda olan nesnelerdeki değişiklikler, Hibernate tarafından otomatik olarak takip edilir ve veritabanına yansıtılır. Ancak bu işlem, bir işlem sırasında farklı noktalarda gerçekleşebilir.

Genellikle, bir Hibernate işlemi, bir transaction (işlem) içinde gerçekleştirilir. Bir transaction içinde, nesnelerin veritabanına yansıtılması tam olarak kontrol edilebilir. Bir transaction içinde, veritabanındaki herhangi bir değişiklik (oluşturma, güncelleme, silme vb.) geri alınabilir.

Persistent nesnelerde yapılan değişiklikler, transaction'in commit (onaylama) işlemi gerçekleştirildiğinde veritabanına yansıtılır. Örneğin, bir nesne üzerinde yapılan değişiklikler, Session'ın flush() metodu çağrıldığında, transaction commit edildiğinde veya Session kapatıldığında veritabanına yansıtılır.

Hibernate, bir Session içindeki tüm persistent nesneleri otomatik olarak takip eder ve değişiklikleri otomatik olarak veritabanına yansıtır. Bu sayede, geliştiricinin değişiklikleri elle takip etmesine gerek yoktur.

Ancak, bazı durumlarda, bazı değişikliklerin otomatik olarak veritabanına yansıtılmasını istemeyebilirsiniz. Bu durumlarda, Session'ın setFlushMode() metodu kullanılarak flush mode (sıfırlama modu) ayarlanabilir. Bu modda, otomatik flush işlemi devre dışı bırakılabilir veya flush işlemi, geliştiricinin belirlediği bir zaman diliminde gerçekleştirilebilir.

Özetle, Hibernate'de persistent durumunda olan nesnelerde yapılan değişiklikler, Session'ın flush işlemi gerçekleştirdiği anda veya transaction commit edildiğinde veritabanına yansıtılır. Ancak, Session'ın flush modu ayarlanarak, flush işlemi geciktirilebilir veya devre dışı bırakılabilir.

Hibernate'de flush() metodunu veya commit() metodunu çağırmazsam nesne yine de veritabanına kaydedilir mi?







Hibernate'de flush() veya commit() metotlarının çağrılmaması durumunda, Hibernate otomatik olarak bir flush işlemi gerçekleştirir. Bu flush işlemi, nesnenin veritabanına kaydedilmesini sağlar.

Ancak, otomatik flush işleminin zamanlaması, bir Session'in flush moduna bağlıdır. Hibernate'de flush modu, Session'ın flush işleminin ne zaman gerçekleştirileceğini kontrol eder. Varsayılan olarak, Hibernate, transaction commit edildiğinde veya bir sorgu çalıştırıldığında otomatik flush işlemi gerçekleştirir.

Ancak, flush modu değiştirilerek flush işlemi zamanlaması kontrol edilebilir. Örneğin, Session'ın setFlushMode() metodu kullanılarak FlushModeType.MANUAL moduna ayarlandığında, otomatik flush işlemi devre dışı bırakılır. Bu durumda, nesnenin veritabanına kaydedilmesi için flush() metodu çağrılması gerekir.

Özetle, Hibernate'de, Session'ın flush() veya commit() metotları çağrılmadığında bile, Hibernate otomatik olarak bir flush işlemi gerçekleştirir ve nesnenin veritabanına kaydedilmesini sağlar. Ancak, flush modu değiştirilerek flush işlemi zamanlaması kontrol edilebilir ve flush() metodu çağrılmadan önce veritabanına kaydetmek için flush işlemi manuel olarak gerçekleştirilmelidir.

Hibernate'de removed state'inde bulunan bir nesne veritabanından otomatik olarak silinir mi?

Hibernate'de removed state'inde bulunan bir nesne, veritabanından otomatik olarak silinmez. Removed state, sadece nesnenin Hibernate tarafından veritabanından silinmek üzere işaretlendiği durumdur. Nesnenin veritabanından silinmesi için, işaretlenmiş olmasına rağmen, Hibernate tarafından bir delete işlemi gerçekleştirilmesi gerekir.

Removed state'e geçirilen bir nesne, Session tarafından yönetilen nesneler listesinden kaldırılır ve Hibernate tarafından veritabanından silinmek üzere işaretlenir. Bu, nesnenin Session tarafından yönetilmediği anlamına gelir, ancak nesne henüz veritabanından silinmemiştir.

Hibernate'de veritabanından bir nesneyi silmek için, Session.delete() metodu kullanılır. Bu metot, veritabanındaki nesneyi siler ve Hibernate Session'dan da kaldırır. Bu yöntem çağrılmadan önce, nesnenin persistent state'de olması gerekir.

Özetle, Hibernate'de removed state'inde bulunan bir nesne, veritabanından otomatik olarak silinmez. Nesnenin veritabanından silinmesi için, Hibernate tarafından delete() metodu çağrılması gerekir.


Converting Persistent State to Removed State

Example

// Java Pseudo code to Illustrate Remove State
 
// Transient State
Employee e = new Employee();     
Session s = sessionfactory.openSession();
e.setId(01);


// Persistent State
session.save(e)  

// Removed State                 
session.delete(e);


Hibernate'de detach ile evict arasındaki fark nedir?

Hibernate'de detach() ve evict() metotları, bir nesnenin Session yönetiminden kaldırılmasını sağlar. Ancak, bu iki metot arasında bazı farklılıklar vardır.

detach() metodu, bir nesnenin Session ile olan bağlantısını keser, ancak nesne Hibernate Session yönetiminde kalır. Yani, nesne, detached (bağlantısı kesilmiş) bir nesne haline gelir, ancak hala Session içinde yer alır ve Session'ın kontrolü altındadır. Detach() metodu çağrıldığında, nesnenin Hibernate Session yönetiminden kaldırılması, nesnenin veritabanındaki durumunu etkilemez.

Öte yandan, evict() metodu, bir nesnenin Session yönetiminden kaldırılmasını ve Session tarafından tamamen unutulmasını sağlar. Yani, nesne Hibernate Session yönetiminden tamamen kaldırılır ve nesne artık Session tarafından yönetilmez. Evict() metodu çağrıldığında, nesnenin Hibernate Session yönetiminden kaldırılması, nesnenin veritabanındaki durumunu etkilemez. Ancak, bir nesne evict edildikten sonra, Session tarafından yeniden yönetilmek istenirse, nesne tekrar yüklenmesi gerekir.Genel olarak, detach() metodu, nesnenin Session yönetiminden çıkarılmasını sağlar, ancak nesne ile ilgili verilerin Session'dan kaldırılmamasını sağlar. Bu nedenle, nesne ile ilgili değişiklikler, daha sonra yeniden yönetildiğinde veritabanına kaydedilebilir. Öte yandan, evict() metodu, nesneyi tamamen unutulmuş hale getirir ve yeniden yüklenene kadar nesnenin değişiklikleri kaydedilmez. Bu nedenle, evict() metodu, nesnenin Session yönetiminden kalıcı olarak kaldırılması gerektiği durumlarda kullanılır.



Hibernate'de detach edilmiş bir nesne tekrar sesiona nasıl eklenir?

Hibernate'de detach edilmiş bir nesne, daha sonra tekrar Session'a eklemek için merge() veya update() metotları kullanılabilir. Bu iki metot arasındaki farklılıklar şunlardır:

Merge() metodu, detach edilmiş nesne üzerinde yapılan değişiklikleri korur ve yeni bir persistent nesne oluşturur. Detach edilmiş nesne, merge edildikten sonra, Hibernate Session'ın yönetimine geri alınır.

MyEntity detachedEntity = ...;

Session session = sessionFactory.openSession();

Transaction tx = session.beginTransaction();

MyEntity persistentEntity = (MyEntity) session.merge(detachedEntity);

tx.commit();

session.close();


Update() metodu, detach edilmiş nesnenin verilerini veritabanından yeniden yükler. Bu nedenle, detach edilmiş nesne üzerinde yapılan değişiklikler kaybedilir ve veritabanındaki verilere göre nesne yeniden oluşturulur.


MyEntity detachedEntity = ...;

Session session = sessionFactory.openSession();

Transaction tx = session.beginTransaction();

session.update(detachedEntity);

tx.commit();

session.close();

Özetle, detach edilmiş bir nesneyi tekrar Hibernate Session'a eklemek için, merge() veya update() metotları kullanılabilir. Merge() metodu, nesnenin değişikliklerini korurken, update() metodu, nesneyi veritabanından yeniden yükleyerek, değişiklikleri kaybeder.




Google Interview Süreci Nasıl İşliyor?



#google #interview

Google teknoloji görüşmeleri herkesin bildiği gibi zor ve oldukça zordur. Bir telefon ekranı almak için, özgeçmişinizi çevrimiçi başvuru sistemlerine veya bir Google çalışanının dahili yönlendirmesi yoluyla göndermeniz gerekir.

Özgeçmiş ekranını geçtiğinizi varsayarsak, bir işe alım görevlisi size ulaşacaktır. Genellikle iki telefon ekranı olur ve başarılı olursanız yerinde görüşmelere davet edilirsiniz.

Google geniş bir ölçekte faaliyet gösterdiğinden, yazdığınız algoritmayı birden çok makine için nasıl ölçeklendireceğinizle ilgili birçok soruyu yanıtlamaya hazır olun. Bazı örnekler: Ada Sayısı ve İki Dizinin Kesişimi II .


Mülakat Süreci

Görüşme sürecinin ilk adımı olarak bir çevrimiçi değerlendirme bağlantısı alabilirsiniz. Değerlendirme 7 gün içinde sona erecek ve bir saat içinde tamamlanması gereken iki kodlama sorusu içermektedir. Aşağıda alıştırma yapmanız için bazı Çevrimiçi Değerlendirme soruları bulunmaktadır.

Bu bölümün sonuna doğru, bir Google görüşmesinin farklı aşamaları hakkında daha fazla ayrıntı sağlıyoruz.

 Benzersiz E-posta Adresleri

Çevrimiçi Değerlendirme Sorusu

 Tek Çift Atlama

Çevrimiçi Değerlendirme Sorusu

 Lisans Anahtarı Biçimlendirmesi

Çevrimiçi Değerlendirme Sorusu

 Sepete Meyve

Çevrimiçi Değerlendirme Sorusu

 Google Telefon Görüşmesi

Google Telefon Görüşmesinin Temelleri

 Google Yerinde Görüşme

Google Yerinde Görüşmenin Temelleri

 Google İşe Alma Komitesi

Google İşe Alım Komitesi aşamasının temelleri

 Google Teklif İncelemesi

Google Teklif İnceleme sürecinin temelleri


Google Telefon Görüşmesi


Telefon ekranı genellikle 30 ile 60 dakika arasında sürer.

Telefon görüşmeniz veri yapılarını ve algoritmaları kapsayacaktır. En güçlü dilinizde yaklaşık 20-30 satır kod yazmaya hazır olun. Bu temiz, zengin, sağlam bir kod olmalıdır.

Görüşmeciniz, pek çok takip sorusu içeren bir veya iki kodlama sorusu soracaktır. Görüşmecinizle paylaşacağınız bir Google Dokümanına kod yazarken düşünce süreciniz üzerinden konuşmaya hazır olun. Serbestçe yazabilmeniz için eller serbest kulaklık veya hoparlör kullanmanızı öneririz.

Size açık uçlu bir soru sorulacak. Açıklayıcı sorular sorun, gereksinimler belirleyin.

Bunu bir algoritma ile açıklamanız istenecektir.

Çalışabilir bir koda dönüştürün.

(İpucu: Zaman sınırlı olduğu için mükemmel hale getirme konusunda endişelenmeyin. Neyin geldiğini yazın ama sonra düzeltin. Ayrıca köşe kasaları ve kenar kasaları, üretime hazır olarak değerlendirdiğinizden emin olun.)

Kodu optimize edin, test durumlarıyla takip edin ve hataları bulun.

Google Telefon Görüşmesi

Rapor bildir

Budur! Telefon görüşmelerini geçtiniz ve şimdi bir yerinde görüşme daveti aldınız. Yerinde görüşme, bir Google görüşmesinin en önemli sürecidir ve bir teklif alma beceriniz büyük ölçüde yerinde görüşmeler sırasındaki performansınıza bağlı olacaktır. Geleneksel olarak, yerinde görüşmeden sonra teklif alacak adayların yüzdesi yaklaşık 5'te 1 ila 7'de 1'dir .

Genellikle beş Google çalışanıyla her biri yaklaşık 30 ila 45 dakika görüşeceksiniz ve bunlardan biri öğle yemeği görüşmeciniz olacak ve görüşme geri bildirimi göndermeyecek, bu nedenle bu fırsatı özgürce soru sormak için kullanın.

Tüm adaylar dört farklı alanda güçlü yanlarını öne çıkarma şansına sahip olacak:

Genel bilişsel yetenek: Sorunlara nasıl yaklaştığınızı ve çözdüğünüzü öğrenmek için açık uçlu sorular sorulur. Ve tek bir doğru cevap yok; düşünce sürecinizi açıklama beceriniz ve kararları bilgilendirmek için verileri nasıl kullandığınız en önemli şeydir.

Liderlik: Başkalarını harekete geçirmek için iletişim ve karar verme becerilerinizi nasıl kullandığınızı tartışmaya hazır olun. Bu, işte veya bir kuruluşta liderlik rolüne adım atarak veya resmi olarak lider olmasanız bile bir ekibin başarılı olmasına yardımcı olarak olabilir.

Rol ile ilgili bilgi: Google, etki yaratmak için bireysel güçlü yanlarınızın deneyiminizle nasıl birleştiğiyle ilgilenir. Google, yalnızca bugün nasıl katkıda bulunabileceğinizi değil, henüz icat edilmemiş olanlar da dahil olmak üzere farklı rollere nasıl dönüşebileceğinizi araştırır.

Googleyness: Bireysel olarak ve ekip olarak nasıl çalıştığınızı, başkalarına nasıl yardım ettiğinizi, belirsizliği nasıl aştığınızı ve konfor alanınızın dışına çıkmak için kendinizi nasıl zorladığınızı paylaşın.

İş deneyiminiz ne olursa olsun , Google'ın analitik yeteneğinize büyük önem verdiğini unutmayın . Veri yapılarının ve algoritmaların sağlam bir şekilde anlaşıldığını sergilemeye hazır olun. Sektörde yılların deneyimine sahipseniz ve Bilgisayar Bilimi temellerinizde paslanmışsanız, temel CS temel becerilerinizi geliştirmek için daha fazla zaman ayırın. Aksi takdirde, bir ikili ağacı tersine çeviremediğiniz için Max Howell gibi reddedilebilirsiniz .

Google, kodlama becerilerinizi ve araçlar veya programlama dilleri dahil olmak üzere teknik uzmanlık alanlarınızı ve veri yapıları ve algoritmalar gibi konularda genel bilgileri anlamak istiyor. Bu tartışmalarda genellikle bir miktar ileri geri vardır, tıpkı işte birbirlerinin düşüncelerini zorlamak ve farklı yaklaşımlar hakkında bilgi edinmek gibi. Bu nedenle, çözümlerinizi derinlemesine konuşmaya hazır olun. Kendi sınırlarınızı zorlayın ve en iyi yanıtı bulun; muhtemelen zaten böyle çalışıyorsunuz.

Google'da teknik yerinde görüşmeler, geçmişte beyaz tahtalarda gerçekleştiriliyordu, ancak daha az zaman alan daha özgün bir kodlama deneyimi sağlamak için Google, bazı sitelerde kodlama görüşmeleri için dizüstü bilgisayarlar sunmaya başladı. Bu chromebook'larda, tercih ettiğiniz kodlama dilini seçmenize izin veren bir görüşme uygulaması bulunur.

Görüşme süreci boyunca, sorularını tam olarak anladığınızdan emin olmak için görüşmecilerden açıklama istemekten çekinmeyin.


Google İşe Alma Komitesi


Yerinde görüşmeden sonra, görüşmecilerinizin her birinin (öğle yemeği görüşmecisi hariç) ayrıntılı görüşme geri bildirimi göndermesi gerekecektir. Birinin geri bildiriminin diğerlerini etkilememesini sağlamak için her görüşmecinin geri bildirimi diğer görüşmecilerden gizli tutulur. Her görüşmeci bir puan atayacak ve İşe Al / İşe Almama kararı verecektir.

Geri bildirimden alınan puanların yeterince iyi olduğunu varsayarsak, tüm paketiniz incelenmek üzere işe alım komitesine iletilecektir.

İşe alım komitesi, gönderilen tüm geri bildirimleri kapsamlı bir şekilde inceleyecek ve bir işe alma / işe almama tavsiyesi verecektir.


Google Teklif İncelemesi


İşe Alma Komitesi kiralamayı önerirse, tebrikler! Sürecin son aşamasına geldiniz. Bu aşamada uzatılmamış teklifler yaklaşık % 10-12 aday var. İşveren, Dış Referanslar ve Tazminat Geçmişi ister, referans kontrolleri yapar ve Teklif İnceleme Süreci için bir paket hazırlar.

Teklif İnceleme süreci:

Ön İnceleme Komitesi

Tazminat Komitesi İncelemesi

Kıdemli Başkan Yardımcısı İncelemesi

Son SVP incelemesinde teklifin onaylanmama ihtimali küçük bir yüzdedir .


Veri Bilimi Neden Geleceğin Bilimi? - Veri Bilimi Hakkında Her Şey @istanbuldatascienceacademy938

 



“Veri Bilimi Nedir? Veri Mühendisliği, Analitiği, Madenciliği vs. nelerdir, bu alanlardaki meslekler neler? Yeni başlayanlar nereden başlamalı?” gibi soruları ve çok daha fazlasını canlı yayında konuşacağız. Şimdiden takvimlerinizi ayarlayın.

Gündem Teknoloji - ChatGPT Yapay Zeka Teknolojileri Şirketlere Nasıl Fayda Sağlayacak | 19 Ocak 2023

 



Performans ile ilgili notlarım (Network, CPU, Ram, DB )

Bir uygulama mimarisinde performans için nelere bakmalıyım?

Uygulama performansı, uygulama mimarisi ve uygulama tasarımı gibi birçok faktörden etkilenir. Uygulama performansını iyileştirmek için, aşağıdaki konulara dikkat etmeniz

önerilir:

Ölçeklenebilirlik: Uygulamanızın ölçeklenebilir olması gerekir. Bu, uygulamanızın yüksek talep dönemlerinde bile hızlı ve verimli bir şekilde çalışabileceği anlamına gelir. Ölçeklenebilir bir uygulama tasarlamak için, yüksek talep dönemlerinde kullanılan donanım ve yazılım kaynaklarının kullanımını optimize etmelisiniz.


Veritabanı Tasarımı: Veritabanı tasarımı, uygulama performansı için önemlidir. İyi bir veritabanı tasarımı, veritabanının hızlı, güvenilir ve ölçeklenebilir olmasını sağlar. Ayrıca, uygulamanın veri işleme işlemlerini optimize etmek için indeksleme ve normalleştirme gibi teknikleri kullanabilirsiniz.


Cache Kullanımı: Cache kullanımı, uygulama performansını artırmanın bir başka yolu. Uygulamanızın sık kullanılan verileri, önbelleğe alarak erişim hızını artırabilirsiniz. Bu, uygulamanın daha hızlı yanıt vermesine ve daha iyi bir kullanıcı deneyimi sağlamasına yardımcı olur.


Yüksek Kullanılabilirlik: Yüksek kullanılabilirlik, uygulamanın her zaman kullanılabilir olmasını sağlamak için alınacak önlemleri içerir. Bu, sunucu yedekleme, yük dengeleme, veritabanı yedekleme, güvenlik ve diğer teknikleri içerir. Yüksek kullanılabilirlik, uygulama performansının iyileştirilmesine yardımcı olur, çünkü kullanıcıların uygulamaya her zaman erişebilmeleri gerekir.


Teknoloji Seçimi: Uygulama performansı, teknoloji seçimine de bağlıdır. Doğru teknolojileri seçerek, uygulamanın hızlı ve verimli çalışmasını sağlayabilirsiniz. Ayrıca, uygulamanın ölçeklenebilirliğini de artırabilirsiniz.


Kod Kalitesi: Kod kalitesi, uygulama performansını etkileyen en önemli faktörlerden biridir. İyi bir kod yazmak, uygulamanın daha hızlı ve daha az hata ile çalışmasını sağlar. Ayrıca, kodunuzda gereksiz işlemleri ortadan kaldırmak, uygulamanın daha hızlı çalışmasına yardımcı olur.


Bir java uygulamasında performans için nelere bakmalıyım?





Java uygulamaları, performans açısından bazı özel dikkat gerektiren bir programlama dilidir. Java uygulamalarınızın performansını iyileştirmek için aşağıdaki konulara dikkat etmeniz önerilir:

Bellek Kullanımı: Java uygulamaları, otomatik bellek yönetimi özelliği nedeniyle özellikle bellek kullanımı açısından dikkatli bir şekilde tasarlanmalıdır. Bellek tüketimini optimize etmek için, kullanılmayan nesnelerin zamanında bellekten temizlenmesini sağlamalısınız. Ayrıca, programınızda gereksiz nesneleri yaratmamaya da özen göstermelisiniz.


Multithreading: Multithreading, Java uygulamaları için önemli bir performans artırıcıdır. Eşzamanlılık ve paralelleştirme özelliği sayesinde uygulamanızın performansını artırabilirsiniz. Ancak, multithreading kodu karmaşık hale getirebilir ve hatalara neden olabilir. Bu nedenle, multithreading kodunuzun kalitesini ve doğruluğunu iyileştirmeye özen gösterin.


Koleksiyonlar: Java koleksiyonları, veri yapıları için önemli bir araçtır. Ancak, bazı koleksiyon türleri performans açısından daha iyi olabilir. Örneğin, ArrayList gibi sıralı bir veri yapısı kullanmak, veriye erişim hızını artırabilir. Ayrıca, Java koleksiyonlarının boyutunu önceden belirlemek, performansı da artırabilir.


Garbage Collection: Java, bellek yönetimi için otomatik çöp toplama işlevi sunar. Ancak, bu özellik performans açısından maliyetli olabilir. Bu nedenle, uygulamanızın bellek tüketimini minimize etmek için kullanılmayan nesneleri zamanında temizlemelisiniz.


JIT Derleyici: Java'nın Just-In-Time (JIT) derleyicisi, kodun çalışma zamanında derlenmesini sağlar. JIT derleyici, uygulamanın çalışma hızını artırır. Ancak, JIT derleyici kodun doğruluğunu etkileyebilir. Bu nedenle, JIT derleyiciyi kullanmadan önce, uygulamanızın doğruluğunu test etmelisiniz.


Veritabanı Bağlantısı: Veritabanı bağlantısı, uygulama performansı için önemli bir faktördür. Veritabanı sorgularını optimize etmek için, uygun indeksleme tekniklerini ve hazırlanmış ifadeleri kullanabilirsiniz. Ayrıca, veritabanı bağlantılarını gereksiz yere açık bırakmamaya da özen göstermelisiniz.


Daha fazla detay verebilir misin?


Elbette! Java uygulama performansını değerlendirmek ve geliştirmek için daha fazla detay şunları içerebilir:

Zamanlama: Uygulamanızın hangi bölümlerinin daha uzun süre aldığını ve hangi bölümlerinin daha az zaman aldığını ölçün. Bu, uygulamanın hangi bölümlerinin optimize edilmesi gerektiğini anlamak için önemlidir. Bu ölçümler, uygulamanın zamanlamasını ölçmek için kullanabileceğiniz araçlar veya JVM'in sunduğu birçok ölçümleme aracı ile alınabilir.


Bellek Yönetimi: Java, bellek yönetimi için otomatik bir sistem sunar. Ancak, bellek yönetimi ile ilgili sorunlar uygulama performansını etkileyebilir. Bellek sızıntılarına veya yetersiz bellek kullanımına neden olan kodu tespit etmek ve gidermek önemlidir. Bu amaçla, JVM'in sunduğu araçları kullanabilirsiniz.


Thread Yönetimi: Thread yönetimi, performans açısından kritik bir faktördür. Thread'ler, birden fazla görevin eş zamanlı olarak yürütülmesini sağlar ve performansı artırır. Ancak, yanlış kullanımı veya fazla sayıda thread kullanımı uygulamanın performansını olumsuz yönde etkileyebilir. Thread yönetiminde en iyi uygulamaları kullanarak, thread sayısını ve kullanımını optimize edebilirsiniz.


I/O İşlemleri: I/O işlemleri, uygulama performansını önemli ölçüde etkileyebilir. Bu nedenle, dosya okuma/yazma işlemleri, veritabanı sorguları ve diğer I/O işlemleri optimize edilmelidir. Bu işlemleri optimize etmek için, ara belleklemeyi, giriş/çıkış işlemlerini sıralamayı ve asenkron I/O işlemlerini kullanmayı düşünebilirsiniz.


Veritabanı Etkileşimi: Veritabanı etkileşimi, uygulama performansının en büyük nedenlerinden biridir. Veritabanı tasarımı ve veritabanı sorgularınızı optimize etmek, uygulama performansını artırmanın en iyi yollarından biridir. Veritabanı bağlantı havuzları kullanmak, sorgu optimizasyonunu ve veritabanı tasarımını iyileştirmek performansı artırabilir.


Garbage Collection: Java, otomatik bellek yönetimi ile birlikte gelir. Ancak, otomatik bellek toplama da uygulama performansını etkileyebilir. Büyük nesneleri oluşturmaktan kaçınmak, bellek kullanımını sınırlamak ve uygun bir Garbage


daha da detay verebilir misin?

Tabii, şu detayları da ekleyebilirim:

Kütüphaneler: Kullanılan kütüphaneler uygulama performansı için önemlidir. Güvenilir, performanslı ve güncel kütüphaneler seçmek, uygulama performansını artırmak için önemlidir. Ayrıca, uygulamanızda yalnızca kullanacağınız kütüphaneleri eklemelisiniz. Eğer kullanmadığınız kütüphaneler varsa, uygulamanızı yavaşlatabilirler.


Algoritma ve Veri Yapıları: Uygulamanızdaki algoritmaların ve veri yapılarının performansını etkileyebilir. En iyi algoritmaları ve veri yapılarını kullanarak, uygulama performansını artırabilirsiniz. Ayrıca, büyük veri setleri üzerinde işlem yaparken, algoritma ve veri yapılarına özellikle dikkat etmek gerekmektedir.


Doğru JVM Ayarları: JVM, uygulamanın çalışmasını kontrol eden bir sanal makinedir. JVM ayarları, uygulama performansını önemli ölçüde etkileyebilir. JVM ayarlarını yapılandırarak, uygulama performansını artırabilirsiniz. Bu ayarlar, Java heap boyutu, Garbage Collection zamanlaması ve iş parçacığı havuzu boyutu gibi ayarları içerebilir.


Ölçeklenebilirlik: Uygulamanızın ölçeklenebilirliği de performans açısından önemlidir. Uygulamanızın büyüdükçe performansının da artması gerekiyor. Bu nedenle, uygulamanızın ölçeklenebilirliğini göz önünde bulundurarak tasarlamanız gerekir. Bu amaçla, dağıtılmış sistemler ve bulut tabanlı hizmetler kullanılabilir.


Testler: Uygulama performansının ölçülmesi için testler yapmak önemlidir. Testler, uygulamanın performansını ölçmek ve potansiyel performans sorunlarını tespit etmek için kullanılabilir. Bu amaçla, yük testleri, stres testleri ve diğer performans testleri kullanılabilir.



Sonuç olarak, Java uygulama performansını değerlendirmek ve geliştirmek için birden fazla faktör göz önünde bulundurulmalıdır. Zamanlama, bellek kullanımı, thread yönetimi, I/O işlemleri, veritabanı etkileşimi, garbage collection, kütüphaneler, algoritma ve veri yapıları, doğru JVM ayarları, ölçeklenebilirlik ve testler bu faktörlerin bazılarıdır.şu detayları da ekleyebilirim:

Kütüphaneler: Kullanılan kütüphaneler uygulama performansı için önemlidir. Güvenilir, performanslı ve güncel kütüphaneler seçmek, uygulama performansını artırmak için önemlidir. Ayrıca, uygulamanızda yalnızca kullanacağınız kütüphaneleri eklemelisiniz. Eğer kullanmadığınız kütüphaneler varsa, uygulamanızı yavaşlatabilirler.


Algoritma ve Veri Yapıları: Uygulamanızdaki algoritmaların ve veri yapılarının performansını etkileyebilir. En iyi algoritmaları ve veri yapılarını kullanarak, uygulama performansını artırabilirsiniz. Ayrıca, büyük veri setleri üzerinde işlem yaparken, algoritma ve veri yapılarına özellikle dikkat etmek gerekmektedir.


Doğru JVM Ayarları: JVM, uygulamanın çalışmasını kontrol eden bir sanal makinedir. JVM ayarları, uygulama performansını önemli ölçüde etkileyebilir. JVM ayarlarını yapılandırarak, uygulama performansını artırabilirsiniz. Bu ayarlar, Java heap boyutu, Garbage Collection zamanlaması ve iş parçacığı havuzu boyutu gibi ayarları içerebilir.


Ölçeklenebilirlik: Uygulamanızın ölçeklenebilirliği de performans açısından önemlidir. Uygulamanızın büyüdükçe performansının da artması gerekiyor. Bu nedenle, uygulamanızın ölçeklenebilirliğini göz önünde bulundurarak tasarlamanız gerekir. Bu amaçla, dağıtılmış sistemler ve bulut tabanlı hizmetler kullanılabilir.


Testler: Uygulama performansının ölçülmesi için testler yapmak önemlidir. Testler, uygulamanın performansını ölçmek ve potansiyel performans sorunlarını tespit etmek için kullanılabilir. Bu amaçla, yük testleri, stres testleri ve diğer performans testleri kullanılabilir.

Sonuç olarak, Java uygulama performansını değerlendirmek ve geliştirmek için birden fazla faktör göz önünde bulundurulmalıdır. Zamanlama, bellek kullanımı, thread yönetimi, I/O işlemleri, veritabanı etkileşimi, garbage collection, kütüphaneler, algoritma ve veri yapıları, doğru JVM ayarları, ölçeklenebilirlik ve testler bu faktörlerin bazılarıdır.
#network #performance
Network için performance artırımları neler olabilir?

Http 1.0'da eklenti ile yapılan, ama daha sonraları persistence connection özelliğinin gelmesiyle bağlantı belli bir süre kalıcı hale getrilebilir. Bu sayede her istekte connection kurmaya gerek kalmaz.

Reverse proxy : Web sunucunun önünde ngnix gibi reverse proxy'ler bulunur. Bu reverse proxy sayesinde gelen isteklerde static bir content isteniyorsa proxy sunucunun cache'inden bu ihtiyaç karşılanır.
Eğer dinamik bir content isteniyorsa proxy sunucusu web sunucuna isteği aktarır ve web sunucusunun dinamik response'unu kullanıcıya iletir. Ayrıca reverse proxy ile web sunucusu arasında firewall bulunabilir.

Restful gibi Http web çağrıları yerine thrift gprc gibi binary çağrılarla network trafiği düşürülebilir.

Veri client-server server-client taraflarında sıkıştırılarak network'deki veri miktarı düşürülebilir. CPU'ya ek yük getirse de bu tolere edilebilecek düzeydedir.


#cpu #memory #performance

Yazdığınız uygulamaların bigO karmaşıklığının efficient olduğuna ve CPU'ya aşırı yük getirmemesine dikkat etmeliyiz.

Thread pool miktarını CPU sayımıza göre orantılı bir şiklde tutmalıyız. Eğer 2 CPU muz varsa 100-200 threadlik bir pool çok fazla context switching yapacağından çok verimsiz olacaktır. 20-30 gibi bir sayıyla makul hale getirmeliyiz.

Yazdığımız uygulamalar memory'de ne kadar az yer kaplarsa o kadar iyidir. 50 GB JVM memory'miz var diye 40 GB 'lık bir uygulama yazmamalıyız. Çünkü memorydeki bu veriler (heap) süreki garbage collectorler tarafından taranacak ve eğer çok olursa uygulamamız sürekli kesintiye gidecektir.

Doğru garbage collection algoritması ve implemantasyonu seçmeliyiz. Batch gibi işlemlerde belli süre işlem yapılıp ardından garbage collection toplu çalıştırırken, web sunucuları gibi response time'ı küçük olan anında cevap veren sistemlerde garbage collection user thread'lere paralel bir şekilde çalışmalıdır.

Uygulamamızda gerektiği kadar memory olmalıdır. Sabit diski memory olarak kullanmak latency açısından pahalıdır.

#db #performance #denormalization #connectionpool #indexing #queryoptimization

Db'de sorgularımız mümkün olduğunca az veri kümesi üzerinden işlem yapmalıdır. Bu noktada query optimizasyonu önemlidir.

Join işlemleri bir kaç tablo üzerinde işlem yaptığından hard disk üzerinde hareketlere sebep olmaktadrır. Eğer yeterince donanımımız (hardware, ram) varsa denormalizasyon yapmak iyidir. Donanım-yazılım dengesini düşündüğümüzde normalizasyonu çok abartmadan optimal bir seviyede de yapabiliriz.

SSD, RAID gibi güncel donanımlar ve teknolojiler kullanabiliriz.

Full table scan yapmamaak için okuma ağırlıklı tablolarda alanlar için index kullanmalıyız. Eğer sıralama sorgularının çok olduğu bir tabloysa ağaç yapısında index, direk erişim sorgusunun çok olduğu bir tabloysa hash yapısında bir index kullanmalıyız.

Rastgele İçerik

DonanımHaber

© tüm hakları saklıdır
made with by templateszoo