دیتابیس های nosql
دیتابیس های nosql یا not only SQL دیتابیسهایی هستند که هر کدام برای مقصد و منظور خاص درست شدند ولی هیچکدام نمیتونن جایگزین دیتابیس های relational بشن، دلیلشم اینه که در همه business ها به دیتابیس هایی که ویژگی های دیتابیس های relational را دارند نیازه.
از Graph برای پیداکردن پترن های خاص مابین انتتی های متفاوت که واقعا یک دیتابیس relational نمیتونه براحتی انجام بده استفاده میشه.
مثلا شما نمیتونین مفهوم mutual friend هارو بهمین راحتی توی شبکه های اجتماعی با استفاده از یک دیتابیس relational پیاده سازی کنین. مثال این دیتابیس Neo4J
در مورد column database ها: این دیتابیس ها برای این خوب هستن که شما با مقدار بزرگی big amount of data سرو کار دارین و براتون عملکرد سیستمتان با performance بالا خیلی مهمه. مثال این دیتابیس Apache Cassandra
زمانی از key value دیتابیس ها استفاده میکنیم که تعداد زیادی small transaction دارین که میخواین با سرعت زیاد انجام بشه. مثلا خواندن تغییرات سنسورهای آب و هوا در یک منطقه و ذخیره و خوندن آن ها توی دیتابیس، IoT و اینها خیلی از این دیتابیس استفاده میکنند مثال این دیتابیس Redis
در مورد دیتابیس های داکیومنت document based به دیتابیس هایی گفته میشود که ما کاتالوگی از دیتا داریم و نگه داشتیم و برای مصرف خاص میخوایم استفاده کنیم
مثلا شما برای ذخیره اطلاعات آخرین تراکنش های یک حساب بانکی میتونین دیتاهارو توی یک آرشیو اطلاعاتی توسط دیتابیس های داکیومنت مثل mongodb نگه دارین
@this_java
دیتابیس های nosql یا not only SQL دیتابیسهایی هستند که هر کدام برای مقصد و منظور خاص درست شدند ولی هیچکدام نمیتونن جایگزین دیتابیس های relational بشن، دلیلشم اینه که در همه business ها به دیتابیس هایی که ویژگی های دیتابیس های relational را دارند نیازه.
از Graph برای پیداکردن پترن های خاص مابین انتتی های متفاوت که واقعا یک دیتابیس relational نمیتونه براحتی انجام بده استفاده میشه.
مثلا شما نمیتونین مفهوم mutual friend هارو بهمین راحتی توی شبکه های اجتماعی با استفاده از یک دیتابیس relational پیاده سازی کنین. مثال این دیتابیس Neo4J
در مورد column database ها: این دیتابیس ها برای این خوب هستن که شما با مقدار بزرگی big amount of data سرو کار دارین و براتون عملکرد سیستمتان با performance بالا خیلی مهمه. مثال این دیتابیس Apache Cassandra
زمانی از key value دیتابیس ها استفاده میکنیم که تعداد زیادی small transaction دارین که میخواین با سرعت زیاد انجام بشه. مثلا خواندن تغییرات سنسورهای آب و هوا در یک منطقه و ذخیره و خوندن آن ها توی دیتابیس، IoT و اینها خیلی از این دیتابیس استفاده میکنند مثال این دیتابیس Redis
در مورد دیتابیس های داکیومنت document based به دیتابیس هایی گفته میشود که ما کاتالوگی از دیتا داریم و نگه داشتیم و برای مصرف خاص میخوایم استفاده کنیم
مثلا شما برای ذخیره اطلاعات آخرین تراکنش های یک حساب بانکی میتونین دیتاهارو توی یک آرشیو اطلاعاتی توسط دیتابیس های داکیومنت مثل mongodb نگه دارین
@this_java
👍1
swing در مقابل AWT
درواقع دو مجموعه از کامپوننت های GUI در جاوا وجود دارد . قبل از اینکه swing در java SE 1.2 معرفی شود, GUI های جاوا با کامپوننت هایی از Abstract window Tolkit که به اختصار awt نامیده میشود در پکیج java.awt ایجاد میشدند. زمانیکه یک برنامه جاوا با awt gui در پلتفرم های مختلف جاوا اجرا میشد, ی gui برنامه در هر پلتفرم با ظاهری متفاوت به نمایش در می امدند.
کامپوننت های swing gui به شما این امکان را میدهند تا ظاهر متحد الشکلی برای برنامه خود در میان تمام پلتفرم ها و استفاده از آن را فراهم اورید . حتی برنامه میتواند در زمان اجرا ظاهر و عملکرد خود را بر حسب نیاز کاربر تغییر دهد.
@this_java
درواقع دو مجموعه از کامپوننت های GUI در جاوا وجود دارد . قبل از اینکه swing در java SE 1.2 معرفی شود, GUI های جاوا با کامپوننت هایی از Abstract window Tolkit که به اختصار awt نامیده میشود در پکیج java.awt ایجاد میشدند. زمانیکه یک برنامه جاوا با awt gui در پلتفرم های مختلف جاوا اجرا میشد, ی gui برنامه در هر پلتفرم با ظاهری متفاوت به نمایش در می امدند.
کامپوننت های swing gui به شما این امکان را میدهند تا ظاهر متحد الشکلی برای برنامه خود در میان تمام پلتفرم ها و استفاده از آن را فراهم اورید . حتی برنامه میتواند در زمان اجرا ظاهر و عملکرد خود را بر حسب نیاز کاربر تغییر دهد.
@this_java
lock-and-feel چیست؟
به ظاهر و روشی که کاربر با یک برنامه در تعامل قرار میگیرد,lock-and-feel برنامه گفته میشود
@this_java
به ظاهر و روشی که کاربر با یک برنامه در تعامل قرار میگیرد,lock-and-feel برنامه گفته میشود
@this_java
کامپوننت های سبک وزن در مقابل کامپوننت های سنگین وزن
اکثر کامپوننت های سویینگ واقعا به کامپوننت های GUI پشتیبانی شده توسط لایه های زیرین پلتفرم که برنامه بر روی ان اجرا میشود, بستگی ندارند. چنین کامپوننت های کامپوننت های سبک وزن یا lightweight شناخته میشوند. کامپوننت های AWT با پلتفرم محلی متصل میشوند و کامپوننت های سنگین وزن heavywheight را بوجود می اورند.. چرا که انها متکی به سیستم windowing پلتفرم محلی هستند تا عملکرد و ظاهر انهارا تعیین کند. تعدادی از کامپوننت های سویینگ از جمله کامپوننت های سنگین وزن هستند و همانند AWT کامپوننت های سنگین وزن سویینگ مستلزم تعامل مستقیم با سیستم windowing محلی هستند که ممکن است در ظاهر و عملکرد انها محدودیتی بوجود اورد.کامپوننت های سبک وزن به شما اجازه میدهند تا کنترل بیشتری بر روی ظاهر عملکرد انها داشته باشید
@this_java
اکثر کامپوننت های سویینگ واقعا به کامپوننت های GUI پشتیبانی شده توسط لایه های زیرین پلتفرم که برنامه بر روی ان اجرا میشود, بستگی ندارند. چنین کامپوننت های کامپوننت های سبک وزن یا lightweight شناخته میشوند. کامپوننت های AWT با پلتفرم محلی متصل میشوند و کامپوننت های سنگین وزن heavywheight را بوجود می اورند.. چرا که انها متکی به سیستم windowing پلتفرم محلی هستند تا عملکرد و ظاهر انهارا تعیین کند. تعدادی از کامپوننت های سویینگ از جمله کامپوننت های سنگین وزن هستند و همانند AWT کامپوننت های سنگین وزن سویینگ مستلزم تعامل مستقیم با سیستم windowing محلی هستند که ممکن است در ظاهر و عملکرد انها محدودیتی بوجود اورد.کامپوننت های سبک وزن به شما اجازه میدهند تا کنترل بیشتری بر روی ظاهر عملکرد انها داشته باشید
@this_java
چگونه میتوانیم مدت زمان اجرای یه بخش از کد رو اندازه بگیریم؟
🔺در حالت عادی، معمولاً این کار به کمک تابع System.currentTimeMillis انجام میشه، به این صورت که قبل از اجرای اون بخش از کد، یک بار این تابع رو فراخوانی میکنید، و زمان شروع رو به دست میارید.
🔺بعد از اجرای کد هم یک بار فراخوانی میکنید و زمان پایان رو به دست میارید. بعد این ۲ تا رو از هم کم میکنید و مدت زمان اجرای برنامه در واحد میلیثانیه به دست میاد. مثلاً:
✅ public static void f() {
....
}
public static void main(String[] args) {
long t1 = System.currentTimeMillis();
f();
long t2 = System.currentTimeMillis();
System.out.println("Time in milliseconds: " + (t2 - t1));
}
🔺در صورتی که سرعت اجرای کدتون انقدر بالا هست که به یک میلیثانیه نمیرسه و نیاز به واحد دقیقتری دارید، میتونید از System.nanoTime استفاده کنید که با دقت بیشتری بهتون زمان رو برمیگردونه.
@this_java
#this_java
🔺در حالت عادی، معمولاً این کار به کمک تابع System.currentTimeMillis انجام میشه، به این صورت که قبل از اجرای اون بخش از کد، یک بار این تابع رو فراخوانی میکنید، و زمان شروع رو به دست میارید.
🔺بعد از اجرای کد هم یک بار فراخوانی میکنید و زمان پایان رو به دست میارید. بعد این ۲ تا رو از هم کم میکنید و مدت زمان اجرای برنامه در واحد میلیثانیه به دست میاد. مثلاً:
✅ public static void f() {
....
}
public static void main(String[] args) {
long t1 = System.currentTimeMillis();
f();
long t2 = System.currentTimeMillis();
System.out.println("Time in milliseconds: " + (t2 - t1));
}
🔺در صورتی که سرعت اجرای کدتون انقدر بالا هست که به یک میلیثانیه نمیرسه و نیاز به واحد دقیقتری دارید، میتونید از System.nanoTime استفاده کنید که با دقت بیشتری بهتون زمان رو برمیگردونه.
@this_java
#this_java
کپسوله سازی
معنای کپسوله کردن این است که اطمینان حاصل شود که اطلاعات "حساس" از کاربران پنهان است.
برای رسیدن به این هدف باید:
متغیر های کلاس را با دسترسی private تعریف کنید(تنها در همان کلاس در دسترس خواهد بود)
برای مقدار دهی و یا خواندن مقدار یک متغیر یک Getter , Setter تعریف کنید
کپسوله سازی چه فایده هایی دارد؟
۱-کنترل بهتر : متغیرهای کلاس را فقط می توان به صورت read-only (اگر Stter را حذف کنید) یا write-only (اگر Getter را حذف کنید) قرار داد
۲-انعطاف پذیر: برنامه نویس می تواند یک قسمت از کد را بدون تاثیر بر سایر قسمت ها تغییر دهد
۳- افزایش امنیت اطلاعات
برای اطلاعات بیشتر به این لینک مراجعه کنید :
http://appinapps.com/View/articles/view/aid/135
@this_java
#Why_Encapsulation
معنای کپسوله کردن این است که اطمینان حاصل شود که اطلاعات "حساس" از کاربران پنهان است.
برای رسیدن به این هدف باید:
متغیر های کلاس را با دسترسی private تعریف کنید(تنها در همان کلاس در دسترس خواهد بود)
برای مقدار دهی و یا خواندن مقدار یک متغیر یک Getter , Setter تعریف کنید
کپسوله سازی چه فایده هایی دارد؟
۱-کنترل بهتر : متغیرهای کلاس را فقط می توان به صورت read-only (اگر Stter را حذف کنید) یا write-only (اگر Getter را حذف کنید) قرار داد
۲-انعطاف پذیر: برنامه نویس می تواند یک قسمت از کد را بدون تاثیر بر سایر قسمت ها تغییر دهد
۳- افزایش امنیت اطلاعات
برای اطلاعات بیشتر به این لینک مراجعه کنید :
http://appinapps.com/View/articles/view/aid/135
@this_java
#Why_Encapsulation
بعضی اینترفیس ها در جاوا هیچگونه پیاده سازی ای ندارند .. به چه درد میخورند؟(Marker Interface)مثال : Serializable
به این نوع اینترفیس ها Marker Interface گفته میشه که برای طبقه بندی یا classified کردن مجموعه ای از تایپ ها، کلاسها، اینترفیس ها استفاده میشن!
فرض کنین شما یکسری کلاس دارین که کارشون انتقال داده از یک مکان به مکان دیگس
شما یه اینترفیس میتونین بسازین به نام Transferrable که هیچی توش نیست
سپس مادامی که کلاس ها و اینترفیس های دیگه بصورت مستقیم و یا غیرمستقیم (از طریق پدر)، از این اینترفیس ارث بری داشته باشن، میتونن توی جاهای مختلف استفاده بشن
مثلا میتونین بعنوان ورودی یک متد بفرستینشون :
public void doAction(Transferrable tf)
اینجا شما میدونین که حتما کلاسها و اینترفیس های قابل Transfer شدن میتونن برن داخل
یعنی اومدین طبقه بندی کردین تایپ رو ...
یا مثلا ممکنه شرطی باشه که فقط بخواد به یکسری کلاس یا اینترفیس که یه اینترفیس مارکر رو به ارث بردن اجازه بده که واردش بشن
@this_java
#marker_interface
به این نوع اینترفیس ها Marker Interface گفته میشه که برای طبقه بندی یا classified کردن مجموعه ای از تایپ ها، کلاسها، اینترفیس ها استفاده میشن!
فرض کنین شما یکسری کلاس دارین که کارشون انتقال داده از یک مکان به مکان دیگس
شما یه اینترفیس میتونین بسازین به نام Transferrable که هیچی توش نیست
سپس مادامی که کلاس ها و اینترفیس های دیگه بصورت مستقیم و یا غیرمستقیم (از طریق پدر)، از این اینترفیس ارث بری داشته باشن، میتونن توی جاهای مختلف استفاده بشن
مثلا میتونین بعنوان ورودی یک متد بفرستینشون :
public void doAction(Transferrable tf)
اینجا شما میدونین که حتما کلاسها و اینترفیس های قابل Transfer شدن میتونن برن داخل
یعنی اومدین طبقه بندی کردین تایپ رو ...
یا مثلا ممکنه شرطی باشه که فقط بخواد به یکسری کلاس یا اینترفیس که یه اینترفیس مارکر رو به ارث بردن اجازه بده که واردش بشن
@this_java
#marker_interface
🔹به تازگی JetBrains گزارش و آمار جالبی از تغییرات مهم زبانهای برنامه نویسی در سال ۲۰۱۹ منتشر کردهاست؛ #Java محبوبترین زبان برنامه نویسی، #JavaScript پرکاربردترین.
http://bit.ly/2FONzD0
@this_java
http://bit.ly/2FONzD0
@this_java
کلمه ی کلیدی transient چیست؟
هنگامی که با عملیات Serialization داده هارا به صورت توالی از بایت ها در میاورید تمام فیلد های کلاس به صورت توالی از بایت ها در می ایند در صورت عدم تمایل به تبدیل یک متغیر به توالی بایت ها میتوانید از این کلمه ی کلیدی استفاده کنید:
public class Foo implements Serializable
{
private String saveMe;
private transient String dontSaveMe;
private transient String password;
//...
}
کاربرد transient در زمینه Serialization می باشد و به این معنی هست که فیلد مورد نظر در عمل Serialization استفاده نشود، فیلد هایی رو transient می کنند که نمی خواهند آن ها را نگهداری کنند یا در انتقال شی ها در شبکه نیازی به انتقال اطلاعات آن ها نیست. مثلا اگر شما وضعیت لحظه به لحظه ی یک فرآیند را در یک فیلدی از یک شی نگهداری کنید در موقع ثبت و Serialization ممکن است دوست نداشته باشید آن فیلد را نگهداری کنید چون همیشه در زمان اجرا محاسبه میشود.
@this_java
هنگامی که با عملیات Serialization داده هارا به صورت توالی از بایت ها در میاورید تمام فیلد های کلاس به صورت توالی از بایت ها در می ایند در صورت عدم تمایل به تبدیل یک متغیر به توالی بایت ها میتوانید از این کلمه ی کلیدی استفاده کنید:
public class Foo implements Serializable
{
private String saveMe;
private transient String dontSaveMe;
private transient String password;
//...
}
کاربرد transient در زمینه Serialization می باشد و به این معنی هست که فیلد مورد نظر در عمل Serialization استفاده نشود، فیلد هایی رو transient می کنند که نمی خواهند آن ها را نگهداری کنند یا در انتقال شی ها در شبکه نیازی به انتقال اطلاعات آن ها نیست. مثلا اگر شما وضعیت لحظه به لحظه ی یک فرآیند را در یک فیلدی از یک شی نگهداری کنید در موقع ثبت و Serialization ممکن است دوست نداشته باشید آن فیلد را نگهداری کنید چون همیشه در زمان اجرا محاسبه میشود.
@this_java
کاربرد annotation در جاوا چیست؟
در زبان برنامه نویسی جاوا، Annotation نوعی metadata (فراداده یا توضیح درباره اطلاعات) درباره برنامه است و قسمتی از برنامه حساب نمی شود و هیچ اثر مستقیمی در عملکرد کد ندارد. کاربرد های Annotation عبارتند از:
- فراهم کردن اطلاعات برای کامپایلر: توسط کامپایلر برای یافتن خطاها یا اعلام warning ها استفاده می شوند.
@Override
void mySuperMethod() { ... }
- پردازش رمان کامپایل (Compile-time) یا زمان deploy: کتابخانه ها و ابزار ها از اطلاعات Annotation ها برای ایجاد کد، فایل های XML و ... استفاده می کنند.
- پردازش زمان اجرا (runtime): بعضی از Annotation ها برای چک کردن در زمان اجرا کاربرد دارند.
Annotation یکی از مفاهیمی است که در جاوا 1.5 معرفی شد، روشی برای مستندسازی اجزای برنامه از قبیل کلاسهای، اینترفیسها، متدها، فیلدها، پارامترهای متدها، و متغیرهای محلی است. برخلاف دیگر روشهای سنتی مستندسازی، یعنی استفاده از متن های توضیحی در لابلای کدهای برنامه که فقط برای انسان قابل درک است و توسط کامپایلر صرفنظر می شود، مستندسازی با استفاده از Annotation هم برای انسان هم برای کامپایلر جاوا و هم برای اجراکنندة جاوا قابل درک است.
@this_java
در زبان برنامه نویسی جاوا، Annotation نوعی metadata (فراداده یا توضیح درباره اطلاعات) درباره برنامه است و قسمتی از برنامه حساب نمی شود و هیچ اثر مستقیمی در عملکرد کد ندارد. کاربرد های Annotation عبارتند از:
- فراهم کردن اطلاعات برای کامپایلر: توسط کامپایلر برای یافتن خطاها یا اعلام warning ها استفاده می شوند.
@Override
void mySuperMethod() { ... }
- پردازش رمان کامپایل (Compile-time) یا زمان deploy: کتابخانه ها و ابزار ها از اطلاعات Annotation ها برای ایجاد کد، فایل های XML و ... استفاده می کنند.
- پردازش زمان اجرا (runtime): بعضی از Annotation ها برای چک کردن در زمان اجرا کاربرد دارند.
Annotation یکی از مفاهیمی است که در جاوا 1.5 معرفی شد، روشی برای مستندسازی اجزای برنامه از قبیل کلاسهای، اینترفیسها، متدها، فیلدها، پارامترهای متدها، و متغیرهای محلی است. برخلاف دیگر روشهای سنتی مستندسازی، یعنی استفاده از متن های توضیحی در لابلای کدهای برنامه که فقط برای انسان قابل درک است و توسط کامپایلر صرفنظر می شود، مستندسازی با استفاده از Annotation هم برای انسان هم برای کامپایلر جاوا و هم برای اجراکنندة جاوا قابل درک است.
@this_java
spring-boot.zip
164.7 KB
سورس کد یک پروژه ی ساده ی spring boot به همراه jsp
اموزش spring :
https://t.me/this_java/655
@this_java
اموزش spring :
https://t.me/this_java/655
@this_java
Timer ,TimerTask
یکی از کلاس های مفید پکیج java.util تایمر و تایمر تسک هستند ..با استفاده از این کلاس ها میتوانید یک نخ در حال انتظار در پس زمینه بسازید. با فرا رسیدن زمان مربوطه وظیفه ی منتسب شده به نخ انجام میشود. تایمرتسک واسط Runnable را اجرا میکند بنابراین میتوان از ان برای ساخت یک نخ اجرایی استفاده کرد.
مثال :
public static void main(String[] args) {
Timer tm = new Timer();
tm.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("s");
}
}, 10000, 1000);
}
سایر متد های سودمند کلاس TimerTask :
boolean cancel()
وظیفه را به پایان میرساند.. در صورتی که مانع اجرای وظیفه شود ترو و در غیر این صورت فالس بر میگرداند
abstract void run()
کد وظیفه ی تایمر را در بر دارد
long scheduledExecutionTime()
زمان اخرین اجرای وظیفه ی برنامه ریزی شده را بر میگرداند
سازنده های کلاس Time:
Timer()
Timer(boolean DThread)
Timer(String tName)
Timer(String tName,boolean DThread)
سازنده ی اول یک نخ معمولی را اجرا میکند دومین سازنده یک نخ daemon اگر مقدار DThread ترو باشد استفاده میکند.یک نخ daemon تنها در صورتی اجرا میشود که بقیه ی برنامه در حال اجرا باشد(نخ متد main) ..سازنده ی سوم به شما اجازه میدهد یک نام برای تایمر ساخته شده انتخاب کنید
@this_java
یکی از کلاس های مفید پکیج java.util تایمر و تایمر تسک هستند ..با استفاده از این کلاس ها میتوانید یک نخ در حال انتظار در پس زمینه بسازید. با فرا رسیدن زمان مربوطه وظیفه ی منتسب شده به نخ انجام میشود. تایمرتسک واسط Runnable را اجرا میکند بنابراین میتوان از ان برای ساخت یک نخ اجرایی استفاده کرد.
مثال :
public static void main(String[] args) {
Timer tm = new Timer();
tm.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("s");
}
}, 10000, 1000);
}
سایر متد های سودمند کلاس TimerTask :
boolean cancel()
وظیفه را به پایان میرساند.. در صورتی که مانع اجرای وظیفه شود ترو و در غیر این صورت فالس بر میگرداند
abstract void run()
کد وظیفه ی تایمر را در بر دارد
long scheduledExecutionTime()
زمان اخرین اجرای وظیفه ی برنامه ریزی شده را بر میگرداند
سازنده های کلاس Time:
Timer()
Timer(boolean DThread)
Timer(String tName)
Timer(String tName,boolean DThread)
سازنده ی اول یک نخ معمولی را اجرا میکند دومین سازنده یک نخ daemon اگر مقدار DThread ترو باشد استفاده میکند.یک نخ daemon تنها در صورتی اجرا میشود که بقیه ی برنامه در حال اجرا باشد(نخ متد main) ..سازنده ی سوم به شما اجازه میدهد یک نام برای تایمر ساخته شده انتخاب کنید
@this_java
دانلود فایل در جاوا
import java.io.FileOutputStream;@this_java
import java.net.URL;
import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;
public class Download {
public static void main(String[] args)throws Exception {
URL url = new URL("url");
ReadableByteChannel readableByteChannel = Channels.newChannel(url.openStream());
FileOutputStream fileOutputStream = new FileOutputStream("fname.format");
fileOutputStream.getChannel().transferFrom(readableByteChannel, 0, Long.MAX_VALUE);
}
}