Learn Java
304 subscribers
92 photos
1 video
94 files
84 links
یاد گیری زبان برنامه نویسی جاوا و نکات و مفاهیم
کاربردی ان



@parsa8113
@bardiademon
Download Telegram
راه اندازی Dynamic Port Forwarding با جاوا:
همانند سوییچ D در ssh عمل میکند و یک پراکسی ساکس راه می اندازد ..یک پورت روی لوکال باز میشود و به ssh فروارد میشود...
کتابخانه ی jsch در این مورد عملکرد مناسبی ندارد اما بوسیله ی apache mina میشود آن را انجام داد :

package com.parsakav.sshtunnelsocks;

import java.io.IOException;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

import org.apache.sshd.client.SshClient;
import org.apache.sshd.client.keyverifier.AcceptAllServerKeyVerifier;
import org.apache.sshd.client.session.ClientSession;
import org.apache.sshd.common.forward.PortForwardingEventListener;
import org.apache.sshd.common.session.Session;
import org.apache.sshd.common.util.net.SshdSocketAddress;
import org.apache.sshd.server.forward.AcceptAllForwardingFilter;

public class Main {
public static void main(String[] args) {
m();
}
public static void m() {
String remote_host = "remotehost";
String login = "user";
String password = "pass";
SshClient client = SshClient.setUpDefaultClient();
client.setServerKeyVerifier(AcceptAllServerKeyVerifier.INSTANCE);
client.setForwardingFilter(AcceptAllForwardingFilter.INSTANCE);
client.start();
ClientSession session = null;
try {
session = client.connect(login, remote_host, 22).verify(1000).getSession();
session.addPasswordIdentity(password);
session.auth().verify(10000);
session.addPortForwardingEventListener(new PortForwardingEventListener() {

@Override
public void establishedDynamicTunnel(Session session, SshdSocketAddress local,
SshdSocketAddress boundAddress, Throwable reason) throws IOException {
PortForwardingEventListener.super.establishedDynamicTunnel(session, local, boundAddress, reason);
System.out.println(
"ColpMina.main(...).new PortForwardingEventListener() {...}.establishedDynamicTunnel()");
}
});
SshdSocketAddress sshdSocketAddress = session
.startDynamicPortForwarding(new SshdSocketAddress("localhost", 9780));

System.out.println("Host: " + sshdSocketAddress.getHostName());
System.out.println("Port: " + sshdSocketAddress.getPort());
} catch (Exception e) {
System.err.println("Error : "+e.getMessage());
}
while (session.isOpen()) {
}
}
}
کد زیر:
while(session.isOpen(): از خاتمه یافتن برنامه تا زمانی که کانکشن برقرار است جلوگیری میکند
@this_java
جستجوی یک فایل :

import java.io.File;
public class Search {
public static void listFilesInDirectory(File dir,String filename) {
String format=filename.substring(filename.indexOf("."));
String name=filename.substring(0, filename.indexOf("."));
File[] files = dir.listFiles();
if (files != null) {
for (File f : files) {
if (f.isDirectory()) {
listFilesInDirectory(f,filename);
} else {
if((filename.contains("**")&& f.getName().contains(format))||f.getName().equals(filename)||(filename.indexOf("*")==filename.indexOf(".")-1&&f.getName().startsWith(filename.substring(0,filename.indexOf("*")))&& f.getName().contains(format))||(filename.indexOf("*")==0&&f.getName().substring(0,f.getName().indexOf(".")+1).endsWith(filename.substring(filename.indexOf("*")+1,filename.indexOf("."))+".")&& f.getName().contains(format))||(f.getName().substring(0,f.getName().indexOf(".")+1).equals(name+".")&&format.contains(".*")) )
System.out.println(f.getAbsolutePath());
}
}
}
}
}
https://www.youtube.com/watch?v=9waW1A_s7K4&index=1&list=PLT--3zJy_gmmJPvWxif0w-KA2rEwVHGo-
دوره ی اموزش وب به زبان جاوا فارسی و رایگان
از servlet ها و معماری java ee شروع میکنند . بعد هم که میرند سراغ spring , hibernate
در اخر هم کمی spring security

دوستانی که وب جاوا میخوان شروع کنند این دوره میتونه شروع خوبی باشه
TopLearn هم یک دوره ی رایگان servlet و jsp داره که خیلی مفید هست

دوره ی اسپرینگ بوت ارکادمی هم میتونه شروع خوبی برای اسپرینگ بوت باشه ولی رایگان نیست متاسفانه
@this_java
انوتیشن های تزریق وابستگی در اسپرینگ:

(تزریق وابستگی چیست؟ https://fa.wikipedia.org/wiki/%D8%AA%D8%B2%D8%B1%DB%8C%D9%82_%D9%88%D8%A7%D8%A8%D8%B3%D8%AA%DA%AF%DB%8C)
(شرح مفهوم تزریق وابستگی :
https://barnamenevisan.org/Articles/Article2880.html)

(قوانین استفاده از انوتیشن ها به همراه وراثت در جاوا:
http://iropensource.com/?p=164)

@Autowirted برای ستر و گتر و سازنده هست و روی داده های اولیه کار نمیکنه
به محض ایجاد یک Bean از شی مورد نظر وابستگی تامین میشود

@Required 
موقعی که بین ساخته شد وابستگی حتما باید تامین بشه
در صورت تامین نشدن وابستگی توسط container برنامه خطای NullPointerException میدهد

@Qualifier 
در صورت وجود چند Bean از یک جنس انوتیشن @Autowired قادر به تشخیص نمیباشد پس با این انوتیشن مشخص میشود منظور ما کدام Bean بوده است

@Value
همانند @Autowired است..Autowired نمیتواند برای داده های اولیه (primitive type) کارایی داشته باشد پس با استفاده از انوتیشن
@Value
میتوان از داده های اولیه نیز استفاده کرد

#SPRING_DI_ANNOTATION
@this_java
تزریق وابستگی چیست؟(Dependency Injection)
به سخن ساده تزریق وابستگی الگویی است برای تزریق وابستگی های خارجی یک کلاس به ان, به جای استفاده ی مستقیم از آن وابستگی ها در درون خود کلاس
بدین شکل اگر روزی خواستین کد یک لایه ی دیگر رو بطور کامل تغییر بدین هیچ مشکلی برای لایه ی پایینی که داره از اون لایه استفاده میکنه بوجود نمیاد چون اون لایه هه داره روی وابستگی inject شده لایه ی بالاتر کار میکنه!!! (نه مستقیم با کلاس لایه ی بالاتر)

https://stackoverflow.com/questions/32365877/why-use-dependency-injection-when-you-can-import-a-java-class

@this_java
دسته بنده کلاس ها در یک package:

یکی از اصولی که بسیاری از ابزارها و کتابخانه های مشهور در جاوا آن را رعایت می کنند Package by Feature است که در برابر روش Package By Layer قرار دارد.

در روش Package by Feature از package ها بعنوان ابزاری برای بیان قابلیت های نرم افزار استفاده می شود و در هر package فقط کلاس های مرتبط با یک قابلیت خاص قرار داده می شود، برای مثال در یک برنامه مدیریت داروخانه ممکن است package بندی بصورت زیر باشد:

com.app.doctor
com.app.drug
com.app.presription

و در هر کدام از این package ها کلاس ها و فایل های مرتبط با آن package در لایه های مختلف نرم افزار جمع شده اند (کلاس های UI, Controller و ...). مهمترین مزیت این روش ماژولاریتی بالا و وابستگی کم بین package است.

در روش Package By Layer، از لایه بندی برنامه برای دسته بندی کلاس ها استفاده می شود، برای مثال در برنامه مدیریت داروخانه packaging می تواند بصورت زیر باشد:

com.app.action
com.app.model
com.app.dao

که در این روش کلاس ها مختلف یک قابلیت در package های مختلف پراکنده می شوند و در نهایت ماژولاریتی پایین می آید و وابستگی بین package زیاد است.

از مزایای روش Package by Feature نسبت به Package By Layer می توان به موارد زیر اشاره کرد:

Modularity بالاتر
Navigation آسانتر بین کدها
مدیریت راحتتر کلاس ها و قابلیت ها در زمان بزرگ شدن پروژه

#package_best_practice
@This_java
hale-masaele-java.pdf
4.7 MB
کتاب حل مسعله های جاوا
زبان:فارسی

@this_java
Forwarded from بینام
glassfish_4.1.2.zip
104.9 MB
glassfish server

#webserver
@this_java
Object_Oriented_SourceBaran.Com.rar
2.5 MB
آموزش آسان؛ساده و شیرین شی گرایی در جاوا در یک‌فایل فشرده 👌👌👌
@this_java
یافتن اعداد کامل در جاوا:

عدد کامل عددی صحیح و مثبت است که مجموع مقسوم علیه های آن جز خودش برابر خود عدد شود.
مثال : 6عددی کامل هست
که به عدد های 1,2,3 بخش پذیره و جمع این عدد ها برابر با خود 6 است.

public class Dcoder{
public static void main(String[] args){
for(long i = 1;i<=Long.MAX_VALUE;i++){
long m=0;
for(long i2=1;i2<i;i2++){
if(i%i2==0){
m+=i2;
}
}
if(m==i){
System.out.println(i);
m=0;
}
}
}
}

@this_java
انوتیشن @Required در اسپرینگ منسوخ شده است جایگزین ان چیست؟
لینک

@Required :برای این است که اعلام شود یک وابستگی حتما باید تامین شود تا بین ساخته شود

استفاده از انوتیشن بالا در عمل تفاوتی با استفاده از سازنده ندارد .
میتوان به جای انوتیشن @Required از سازنده و یا از اینترفیس InitializingBean(و نه از انوتیشن @PostConstruct زیرا منسوخ شده است) استفاده نمود.

انوتیشن @PostConstruct @PreDestroy منسوخ شده اند ..جایگزین انها چیست؟
لینک
استفاده از دو اینترفیس InitializingBeanو DisposableBean


@this_java
رمز سزار:

اصولا رمزنگاری به دو بخش رمزنگاری با کلید متقارن(دو روش مدرن برای مثال جایگزینی و کلاسیک برای مثال AES) و رمزنگاری با کلید نامتقارن تقسیم میشود.

رمزنگاری جایگزینی یا جانیشنی: هر واحد از متن اصلی بر طبق یک سیستم معین با متن رمز شده جایگزین میشود. یک واحد ممکن است یک حرف باشد(معمولا اینطور است) یا دو حرف . رمزگشایی ان با کمک عکس عمل جایگذاری امکان پذیر است

تفاوت با رمزنگاری جابجایی:جابجایی مکان حروف را تغییر میدهد و نه خود حرف را اما جایگزینی خود حرف را تغییر میدهد

یکی از ساده ترین و ابتدایی ترین مثال برای برای رمزنگاری جایگزینی رمز سزار میباشد

تابع رمزنگاری در رمز سزار:
E(x) =(x+n) mod 26
n = ضریب انتقال
(۲۶ همان پیمانه است که در اینجا تعداد حروف انگلیسی میباشد)

تابع رمزگشایی در رمز سزار:

D(x)=(x-n)mod26

ابتدا هر حرف یک عدد نظیر میکند: (برای a صفر و برای z بیست و شش)

شکستن رمز سزار: از انجایی که انتقال های ممکن (n) محدود است (در زبان انگلیسی ۲۶) میتوان حالات ممکن را بررسی کرد تا به یک عبارت با معنی رسید و ضریب انتقال را پیدا کرد.

در واقع در رمز سزار ما میایم به هر حرف توی زبان انگلیسی یک عدد میدیم از صفر تا بیست و شش و یک ضریب جابجایی در نظر میگیریم ..مثلا ۱...در این صورت اگر حرف ما A باشد (شماره اش صفر است) یک واحد به جلو میرویم و میشود ۱ که همان حرف B است...

نکته : اگر x-n منفی شد باید قدر مطلق این عدد منفی را از ۲۶ کم کنیم

@this_java
SpringProject.zip
41.2 KB
اسپرینگ و هایبرنیت(جهت تمرین)
دیتابیس: h2
@this_java
springboot.zip
139.5 KB
یک وب سرویس ساده resT با اسپرینگ بوت

@this_java'
Forwarded from Iran Open Source Community (🕯SOLIDARITY🕯)
iropensource.com - What’s New in Java 13.zip
53.1 MB
📌 مباحث جدید عرضه شده در ورژن ۱۳ جاوا

تایپ : ‌ویدئو
زبان : انگلیسی
مدت زمان : ۴۶ دقیقه

🔗 @iropensource
‏لیست محبوب ترین زبان های برنامه نویسی سال 2019 توسط IEEE Spectrum

@this_java
لیست محبوب ترین زبان های برنامه نویسی سال 2019
TIOBE

@this_java
چرا نباید کامنت گذاری کنیم 🤔

🔻 اگر زبان برنامه نویسی ما به اندازه کافی گویا می‌بود و یا اگر ما استعداد این را داشتیم که با استفاده از این زبان مقصود خودمان را به خوبی بیان کنیم، شاید نیازی به نوشتن کامنت های بسیاری نبود و شاید اصلا نیازی نبود.
بنابراین هنگامی که در موقعیتی قرار می‌گیرید که نیاز به نوشتن کامنت دارید، فکر کنید و سپس ببینید که آیا راهی برای تبدیل جداول و گویا کردن کدتان وجود دارد یا خیر. هر زمانی که کد خودتان را به درستی نشان دادید باید خودتان را تشویق کنید. هر بار که شما کامنتی می‌نویسید باید در توانایی بیان خود احساس شکست کنید.
نظور خودتان را درون کد توضیح دهید
مطمئنا زمان هایی وجود دارد که کد وسیله ای ضعیف برای بیان توضیحات می‌باشد. متاسفانه برخی از برنامه نویسان این را بدین معنا می‌دانند که کد به ندرت ابزاری خوب برای توضیح دادن است. این به وضوح غلط است. کدامیک از اینها از نظر شما بهتر است ؟

یا این

تنها چند ثانیه طول می‌کشد که فکر کنید و مقصود خود را بیشتر در کد توضیح دهید. در بسیاری از موارد کاری را که میخواهید در کامنت بگویید به سادگی با ایجاد یک تابع میتوان بیان کرد.

چکیده ای از کتاب Clean Code

@this_java