Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
¶àÖÖ¸ºÔؾùºâËã·¨¼°ÆäJava´úÂëʵÏÖ
 
À´Ô´£ºduzhi ·¢²¼ÓÚ 2017-2-17
  3403  次浏览      27
 

Ê×Ïȸø´ó¼Ò½éÉÜÏÂʲôÊǸºÔؾùºâ£¨À´×Ô°Ù¿Æ£©

¸ºÔؾùºâ ½¨Á¢ÔÚÏÖÓÐÍøÂç½á¹¹Ö®ÉÏ£¬ËüÌṩÁËÒ»ÖÖÁ®¼ÛÓÐЧ͸Ã÷µÄ·½·¨À©Õ¹ ÍøÂçÉ豸ºÍ ·þÎñÆ÷µÄ´ø¿í¡¢Ôö¼Ó ÍÌÍÂÁ¿¡¢¼ÓÇ¿ÍøÂçÊý¾Ý´¦ÀíÄÜÁ¦¡¢Ìá¸ßÍøÂçµÄÁé»îÐԺͿÉÓÃÐÔ¡£

¸ºÔؾùºâ£¬Ó¢ÎÄÃû³ÆÎªLoad Balance£¬ÆäÒâ˼¾ÍÊÇ·Ö̯µ½¶à¸ö²Ù×÷µ¥ÔªÉϽøÐÐÖ´ÐУ¬ÀýÈçWeb ·þÎñÆ÷¡¢ FTP·þÎñÆ÷¡¢ ÆóÒµ¹Ø¼üÓ¦Ó÷þÎñÆ÷ºÍÆäËü¹Ø¼üÈÎÎñ·þÎñÆ÷µÈ£¬´Ó¶ø¹²Í¬Íê³É¹¤×÷ÈÎÎñ¡£

±¾ÎĽ²ÊöµÄÊÇ¡±½«Íⲿ·¢ËÍÀ´µÄÇëÇó¾ùÔÈ·ÖÅäµ½¶Ô³Æ½á¹¹ÖеÄijһ̨·þÎñÆ÷ÉÏ¡±µÄ¸÷ÖÖËã·¨£¬²¢ÒÔJava´úÂëÑÝʾÿÖÖËã·¨µÄ¾ßÌåʵÏÖ£¬OK£¬ÏÂÃæ½øÈëÕýÌ⣬ÔÚ½øÈëÕýÌâǰ£¬ÏÈдһ¸öÀàÀ´Ä£ÄâIpÁÐ±í£º

import java.util.HashMap;

/** * @author ashang.peng@aliyun.com * @date ¶þÔÂ 07, 2017 */

public class IpMap {
// ´ý·ÓɵÄIpÁÐ±í£¬Key´ú±íIp£¬Value´ú±í¸ÃIpµÄÈ¨ÖØ
public static HashMap<String, Integer> serverWeightMap =
new HashMap<String, Integer>();

static
{
serverWeightMap.put("192.168.1.100", 1);
serverWeightMap.put("192.168.1.101", 1);
// È¨ÖØÎª4
serverWeightMap.put("192.168.1.102", 4);
serverWeightMap.put("192.168.1.103", 1);
serverWeightMap.put("192.168.1.104", 1);
// È¨ÖØÎª3
serverWeightMap.put("192.168.1.105", 3);
serverWeightMap.put("192.168.1.106", 1);
// È¨ÖØÎª2
serverWeightMap.put("192.168.1.107", 2);
serverWeightMap.put("192.168.1.108", 1);
serverWeightMap.put("192.168.1.109", 1);
serverWeightMap.put("192.168.1.110", 1);
}
}

ÂÖѯ£¨Round Robin£©·¨

ÂÖѯµ÷¶ÈËã·¨µÄÔ­ÀíÊÇÿһ´Î°ÑÀ´×ÔÓû§µÄÇëÇóÂÖÁ÷·ÖÅ䏸ÄÚ²¿ÖеķþÎñÆ÷£¬´Ó1¿ªÊ¼£¬Ö±µ½N(ÄÚ²¿·þÎñÆ÷¸öÊý)£¬È»ºóÖØÐ¿ªÊ¼Ñ­»·¡£Ëã·¨µÄÓŵãÊÇÆä¼ò½àÐÔ£¬ËüÎÞÐè¼Ç¼µ±Ç°ËùÓÐÁ¬½ÓµÄ״̬£¬ËùÒÔËüÊÇÒ»ÖÖÎÞ״̬µ÷¶È¡£

Æä´úÂëʵÏÖ´óÖÂÈçÏ£º

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/** * @author ashang.peng@aliyun.com * @date ¶þÔÂ 07, 2017 */

class RoundRobin {
private static Integer pos = 0;

public static String getServer()
{
// ÖØ½¨Ò»¸öMap£¬±ÜÃâ·þÎñÆ÷µÄÉÏÏÂÏßµ¼ÖµIJ¢·¢ÎÊÌâ
Map<String, Integer> serverMap =
new HashMap<String, Integer>();
serverMap.putAll(IpMap.serverWeightMap);

// È¡µÃIpµØÖ·List
Set<String> keySet = serverMap.keySet();
ArrayList<String> keyList = new ArrayList<String>();
keyList.addAll(keySet);

String server = null;
synchronized (pos)
{
if (pos > keySet.size())
pos = 0;
server = keyList.get(pos);
pos ++;
}

return server;
}
}

ÓÉÓÚserverWeightMapÖеĵØÖ·ÁбíÊǶ¯Ì¬µÄ£¬ËæÊ±¿ÉÄÜÓлúÆ÷ÉÏÏß¡¢ÏÂÏß»òÕßå´»ú£¬Òò´ËΪÁ˱ÜÃâ¿ÉÄܳöÏֵIJ¢·¢ÎÊÌ⣬·½·¨ÄÚ²¿ÒªÐ½¨¾Ö²¿±äÁ¿serverMap£¬ÏÖ½«serverMapÖеÄÄÚÈݸ´ÖƵ½Ï̱߳¾µØ£¬ÒÔ±ÜÃâ±»¶à¸öÏß³ÌÐ޸ġ£ÕâÑù¿ÉÄÜ»áÒýÈëеÄÎÊÌ⣬¸´ÖÆÒÔºóserverWeightMapµÄÐÞ¸ÄÎÞ·¨·´Ó³¸øserverMap£¬Ò²¾ÍÊÇ˵ÕâÒ»ÂÖÑ¡Ôñ·þÎñÆ÷µÄ¹ý³ÌÖУ¬ÐÂÔö·þÎñÆ÷»òÕßÏÂÏß·þÎñÆ÷£¬¸ºÔؾùºâËã·¨½«ÎÞ·¨»ñÖª¡£ÐÂÔöÎÞËùν£¬Èç¹ûÓзþÎñÆ÷ÏÂÏß»òÕßå´»ú£¬ÄÇô¿ÉÄÜ»á·ÃÎʵ½²»´æÔڵĵØÖ·¡£Òò´Ë£¬·þÎñµ÷ÓöËÐèÒªÓÐÏàÓ¦µÄÈÝ´í´¦Àí£¬±ÈÈçÖØÐ·¢ÆðÒ»´ÎserverÑ¡Ôñ²¢µ÷Óá£

¶ÔÓÚµ±Ç°ÂÖѯµÄλÖñäÁ¿pos£¬ÎªÁ˱£Ö¤·þÎñÆ÷Ñ¡ÔñµÄ˳ÐòÐÔ£¬ÐèÒªÔÚ²Ù×÷ʱ¶ÔÆä¼ÓËø£¬Ê¹µÃͬһʱ¿ÌÖ»ÄÜÓÐÒ»¸öÏ߳̿ÉÒÔÐÞ¸ÄposµÄÖµ£¬·ñÔòµ±pos±äÁ¿±»²¢·¢Ð޸ģ¬ÔòÎÞ·¨±£Ö¤·þÎñÆ÷Ñ¡ÔñµÄ˳ÐòÐÔ£¬ÉõÖÁÓпÉÄܵ¼ÖÂkeyListÊý×éÔ½½ç¡£

ÂÖѯ·¨µÄÓŵãÔÚÓÚ£ºÊÔͼ×öµ½ÇëÇó×ªÒÆµÄ¾ø¶Ô¾ùºâ¡£

ÂÖѯ·¨µÄȱµãÔÚÓÚ£ºÎªÁË×öµ½ÇëÇó×ªÒÆµÄ¾ø¶Ô¾ùºâ£¬±ØÐ븶³öÏ൱´óµÄ´ú¼Û£¬ÒòΪΪÁ˱£Ö¤pos±äÁ¿Ð޸ĵĻ¥³âÐÔ£¬ÐèÒªÒýÈëÖØÁ¿¼¶µÄ±¯¹ÛËøsynchronized£¬Õ⽫»áµ¼Ö¸öÎÂÖѯ´úÂëµÄ²¢·¢ÍÌÍÂÁ¿·¢ÉúÃ÷ÏÔµÄϽµ¡£

Ëæ»ú£¨Random£©·¨

ͨ¹ýϵͳµÄËæ»úËã·¨£¬¸ù¾Ýºó¶Ë·þÎñÆ÷µÄÁбí´óСֵÀ´Ëæ»úѡȡÆäÖеÄһ̨·þÎñÆ÷½øÐзÃÎÊ¡£ÓɸÅÂÊͳ¼ÆÀíÂÛ¿ÉÒÔµÃÖª£¬Ëæ×ſͻ§¶Ëµ÷Ó÷þÎñ¶ËµÄ´ÎÊýÔö¶à£¬

Æäʵ¼ÊЧ¹ûÔ½À´Ô½½Ó½üÓÚÆ½¾ù·ÖÅäµ÷ÓÃÁ¿µ½ºó¶ËµÄÿһ̨·þÎñÆ÷£¬Ò²¾ÍÊÇÂÖѯµÄ½á¹û¡£

Ëæ»ú·¨µÄ´úÂëʵÏÖ´óÖÂÈçÏ£º

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/** * @author ashang.peng@aliyun.com * @date ¶þÔÂ 07, 2017 */

class Random {
public static String getServer()
{
// ÖØ½¨Ò»¸öMap£¬±ÜÃâ·þÎñÆ÷µÄÉÏÏÂÏßµ¼ÖµIJ¢·¢ÎÊÌâ
Map<String, Integer> serverMap =
new HashMap<String, Integer>();
serverMap.putAll(IpMap.serverWeightMap);

// È¡µÃIpµØÖ·List
Set<String> keySet = serverMap.keySet();
ArrayList<String> keyList = new ArrayList<String>();
keyList.addAll(keySet);

java.util.Random random = new java.util.Random();
int randomPos = random.nextInt(keyList.size());

return keyList.get(randomPos);
}
}

ÕûÌå´úÂë˼·ºÍÂÖѯ·¨Ò»Ö£¬ÏÈÖØ½¨serverMap£¬ÔÙ»ñÈ¡µ½serverÁÐ±í¡£ÔÚѡȡserverµÄʱºò£¬Í¨¹ýRandomµÄnextInt·½·¨È¡0~keyList.size()Çø¼äµÄÒ»¸öËæ»úÖµ£¬´Ó¶ø´Ó·þÎñÆ÷ÁбíÖÐËæ»ú»ñÈ¡µ½Ò»Ì¨·þÎñÆ÷µØÖ·½øÐзµ»Ø¡£»ùÓÚ¸ÅÂÊͳ¼ÆµÄÀíÂÛ£¬ÍÌÍÂÁ¿Ô½´ó£¬Ëæ»úËã·¨µÄЧ¹ûÔ½½Ó½üÓÚÂÖѯËã·¨µÄЧ¹û¡£

Ô´µØÖ·¹þÏ££¨Hash£©·¨

Ô´µØÖ·¹þÏ£µÄ˼ÏëÊǸù¾Ý»ñÈ¡¿Í»§¶ËµÄIPµØÖ·£¬Í¨¹ý¹þÏ£º¯Êý¼ÆËãµÃµ½µÄÒ»¸öÊýÖµ£¬ÓøÃÊýÖµ¶Ô·þÎñÆ÷ÁбíµÄ´óС½øÐÐȡģÔËË㣬µÃµ½µÄ½á¹û±ãÊǿͷþ¶ËÒª·ÃÎÊ·þÎñÆ÷µÄÐòºÅ¡£²ÉÓÃÔ´µØÖ·¹þÏ£·¨½øÐиºÔؾùºâ£¬Í¬Ò»IPµØÖ·µÄ¿Í»§¶Ë£¬µ±ºó¶Ë·þÎñÆ÷ÁÐ±í²»±äʱ£¬Ëüÿ´Î¶¼»áÓ³É䵽ͬһ̨ºó¶Ë·þÎñÆ÷½øÐзÃÎÊ¡£

Ô´µØÖ·¹þÏ£Ëã·¨µÄ´úÂëʵÏÖ´óÖÂÈçÏ£º

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/** * @author ashang.peng@aliyun.com * @date ¶þÔÂ 07, 2017 */

class Hash {
public static String getServer()
{
// ÖØ½¨Ò»¸öMap£¬±ÜÃâ·þÎñÆ÷µÄÉÏÏÂÏßµ¼ÖµIJ¢·¢ÎÊÌâ
Map<String, Integer> serverMap =
new HashMap<String, Integer>();
serverMap.putAll(IpMap.serverWeightMap);

// È¡µÃIpµØÖ·List
Set<String> keySet = serverMap.keySet();
ArrayList<String> keyList = new ArrayList<String>();
keyList.addAll(keySet);

// ÔÚWebÓ¦ÓÃÖпÉͨ¹ýHttpServletµÄgetRemoteIp·½·¨»ñÈ¡
String remoteIp = "127.0.0.1";
int hashCode = remoteIp.hashCode();
int serverListSize = keyList.size();
int serverPos = hashCode % serverListSize;

return keyList.get(serverPos);
}
}

ǰÁ½²¿·ÖºÍÂÖѯ·¨¡¢Ëæ»ú·¨Ò»Ñù¾Í²»ËµÁË£¬²î±ðÔÚÓÚ·ÓÉÑ¡Ôñ²¿·Ö¡£Í¨¹ý¿Í»§¶ËµÄipÒ²¾ÍÊÇremoteIp£¬È¡µÃËüµÄHashÖµ£¬¶Ô·þÎñÆ÷ÁбíµÄ´óСȡ죬½á¹û±ãÊÇÑ¡ÓõķþÎñÆ÷ÔÚ·þÎñÆ÷ÁбíÖеÄË÷ÒýÖµ¡£

Ô´µØÖ·¹þÏ£·¨µÄÓŵãÔÚÓÚ£º±£Ö¤ÁËÏàͬ¿Í»§¶ËIPµØÖ·½«»á±»¹þÏ£µ½Í¬Ò»Ì¨ºó¶Ë·þÎñÆ÷£¬Ö±µ½ºó¶Ë·þÎñÆ÷Áбí±ä¸ü¡£¸ù¾Ý´ËÌØÐÔ¿ÉÒÔÔÚ·þÎñÏû·ÑÕßÓë·þÎñÌṩÕßÖ®¼ä½¨Á¢ÓÐ״̬µÄsession»á»°¡£

Ô´µØÖ·¹þÏ£Ëã·¨µÄȱµãÔÚÓÚ£º³ý·Ç¼¯ÈºÖзþÎñÆ÷µÄ·Ç³£Îȶ¨£¬»ù±¾²»»áÉÏÏÂÏߣ¬·ñÔòÒ»µ©ÓзþÎñÆ÷ÉÏÏß¡¢ÏÂÏߣ¬ÄÇôͨ¹ýÔ´µØÖ·¹þÏ£Ë㷨·Óɵ½µÄ·þÎñÆ÷ÊÇ·þÎñÆ÷ÉÏÏß¡¢ÏÂÏßǰ·Óɵ½µÄ·þÎñÆ÷µÄ¸ÅÂʷdz£µÍ£¬Èç¹ûÊÇsessionÔòÈ¡²»µ½session£¬Èç¹ûÊÇ»º´æÔò¿ÉÄÜÒý·¢¡±Ñ©±À¡±¡£Èç¹ûÕâô½âÊͲ»ÊʺÏÃ÷°×£¬¿ÉÒÔ¿´ÎÒ֮ǰµÄһƪÎÄÕÂMemCache³¬Ïêϸ½â¶Á£¬Ò»ÖÂÐÔHashËã·¨²¿·Ö¡£

¼ÓȨÂÖѯ£¨Weight Round Robin£©·¨

²»Í¬µÄºó¶Ë·þÎñÆ÷¿ÉÄÜ»úÆ÷µÄÅäÖú͵±Ç°ÏµÍ³µÄ¸ºÔز¢²»Ïàͬ£¬Òò´ËËüÃǵĿ¹Ñ¹ÄÜÁ¦Ò²²»Ïàͬ¡£¸øÅäÖøߡ¢¸ºÔص͵ĻúÆ÷ÅäÖøü¸ßµÄÈ¨ÖØ£¬ÈÃÆä´¦Àí¸ü¶àµÄÇ룻¶øÅäÖõ͡¢¸ºÔظߵĻúÆ÷£¬¸øÆä·ÖÅä½ÏµÍµÄÈ¨ÖØ£¬½µµÍÆäϵͳ¸ºÔØ£¬¼ÓȨÂÖѯÄܺܺõش¦ÀíÕâÒ»ÎÊÌ⣬²¢½«ÇëÇó˳ÐòÇÒ°´ÕÕÈ¨ÖØ·ÖÅäµ½ºó¶Ë¡£¼ÓȨÂÖѯ·¨µÄ´úÂëʵÏÖ´óÖÂÈçÏ£º

import java.util.*;

/** * @author ashang.peng@aliyun.com * @date ¶þÔÂ 07, 2017 */
class WeightRoundRobin {
private static Integer pos;

public static String getServer()
{
// ÖØ½¨Ò»¸öMap£¬±ÜÃâ·þÎñÆ÷µÄÉÏÏÂÏßµ¼ÖµIJ¢·¢ÎÊÌâ
Map<String, Integer> serverMap =
new HashMap<String, Integer>();
serverMap.putAll(IpMap.serverWeightMap);

// È¡µÃIpµØÖ·List
Set<String> keySet = serverMap.keySet();
Iterator<String> iterator = keySet.iterator();

List<String> serverList = new ArrayList<String>();
while (iterator.hasNext())
{
String server = iterator.next();
int weight = serverMap.get(server);
for (int i = 0; i < weight; i++)
serverList.add(server);
}

String server = null;
synchronized (pos)
{
if (pos > keySet.size())
pos = 0;
server = serverList.get(pos);
pos ++;
}

return server;
}
}

ÓëÂÖѯ·¨ÀàËÆ£¬Ö»ÊÇÔÚ»ñÈ¡·þÎñÆ÷µØÖ·Ö®Ç°Ôö¼ÓÁËÒ»¶ÎÈ¨ÖØ¼ÆËãµÄ´úÂ룬¸ù¾ÝÈ¨ÖØµÄ´óС£¬½«µØÖ·Öظ´µØÔö¼Óµ½·þÎñÆ÷µØÖ·ÁбíÖУ¬È¨ÖØÔ½´ó£¬¸Ã·þÎñÆ÷ÿÂÖËù»ñµÃµÄÇëÇóÊýÁ¿Ô½¶à¡£

¼ÓÈ¨Ëæ»ú£¨Weight Random£©·¨

Óë¼ÓȨÂÖѯ·¨Ò»Ñù£¬¼ÓÈ¨Ëæ»ú·¨Ò²¸ù¾Ýºó¶Ë»úÆ÷µÄÅäÖã¬ÏµÍ³µÄ¸ºÔØ·ÖÅ䲻ͬµÄÈ¨ÖØ¡£²»Í¬µÄÊÇ£¬ËüÊǰ´ÕÕÈ¨ÖØËæ»úÇëÇóºó¶Ë·þÎñÆ÷£¬¶ø·Ç˳Ðò¡£

import java.util.*;

/** * @author ashang.peng@aliyun.com * @date ¶þÔÂ 07, 2017 */

class WeightRandom {
public static String getServer()
{
// ÖØ½¨Ò»¸öMap£¬±ÜÃâ·þÎñÆ÷µÄÉÏÏÂÏßµ¼ÖµIJ¢·¢ÎÊÌâ
Map<String, Integer> serverMap =
new HashMap<String, Integer>();
serverMap.putAll(IpMap.serverWeightMap);

// È¡µÃIpµØÖ·List
Set<String> keySet = serverMap.keySet();
Iterator<String> iterator = keySet.iterator();

List<String> serverList = new ArrayList<String>();
while (iterator.hasNext())
{
String server = iterator.next();
int weight = serverMap.get(server);
for (int i = 0; i < weight; i++)
serverList.add(server);
}

java.util.Random random = new java.util.Random();
int randomPos = random.nextInt(serverList.size());

return serverList.get(randomPos);
}
}

Õâ¶Î´úÂëÏ൱ÓÚÊÇËæ»ú·¨ºÍ¼ÓȨÂÖѯ·¨µÄ½áºÏ£¬±È½ÏºÃÀí½â£¬¾Í²»½âÊÍÁË¡£

×îСÁ¬½ÓÊý£¨Least Connections£©·¨

×îСÁ¬½ÓÊýËã·¨±È½ÏÁé»îºÍÖÇÄÜ£¬ÓÉÓÚºó¶Ë·þÎñÆ÷µÄÅäÖò»¾¡Ïàͬ£¬¶ÔÓÚÇëÇóµÄ´¦ÀíÓпìÓÐÂý£¬ËüÊǸù¾Ýºó¶Ë·þÎñÆ÷µ±Ç°µÄÁ¬½ÓÇé¿ö£¬¶¯Ì¬µØÑ¡È¡ÆäÖе±Ç°

»ýѹÁ¬½ÓÊý×îÉÙµÄһ̨·þÎñÆ÷À´´¦Àíµ±Ç°µÄÇëÇ󣬾¡¿ÉÄܵØÌá¸ßºó¶Ë·þÎñµÄÀûÓÃЧÂÊ£¬½«¸ºÔðºÏÀíµØ·ÖÁ÷µ½Ã¿Ò»Ì¨·þÎñÆ÷¡£

Ç°Ãæ¼¸ÖÖ·½·¨·Ñ¾¡ÐÄ˼À´ÊµÏÖ·þÎñÏû·ÑÕßÇëÇó´ÎÊý·ÖÅäµÄ¾ùºâ£¬µ±È»Õâô×öÊÇû´íµÄ£¬¿ÉÒÔΪºó¶ËµÄ¶ą̀·þÎñÆ÷ƽ¾ù·ÖÅ乤×÷Á¿£¬×î´ó³Ì¶ÈµØÌá¸ß·þÎñÆ÷µÄÀûÓÃÂÊ£¬µ«ÊÇʵ¼ÊÇé¿öÊÇ·ñÕæµÄÈç´Ë£¿Êµ¼ÊÇé¿öÖУ¬ÇëÇó´ÎÊýµÄ¾ùºâÕæµÄÄÜ´ú±í¸ºÔصľùºâÂð£¿ÕâÊÇÒ»¸öÖµµÃ˼¿¼µÄÎÊÌâ¡£

ÉÏÃæµÄÎÊÌ⣬ÔÙ»»Ò»¸ö½Ç¶ÈÀ´Ëµ¾ÍÊÇ£ºÒÔºó¶Ë·þÎñÆ÷µÄÊÓ½ÇÀ´¹Û²ìϵͳµÄ¸ºÔØ£¬¶ø·ÇÇëÇ󷢯ð·½À´¹Û²ì¡£×îСÁ¬½ÓÊý·¨±ãÊôÓÚ´ËÀà¡£

×îСÁ¬½ÓÊýËã·¨±È½ÏÁé»îºÍÖÇÄÜ£¬ÓÉÓÚºó¶Ë·þÎñÆ÷µÄÅäÖò»¾¡Ïàͬ£¬¶ÔÓÚÇëÇóµÄ´¦ÀíÓпìÓÐÂý£¬ËüÕýÊǸù¾Ýºó¶Ë·þÎñÆ÷µ±Ç°µÄÁ¬½ÓÇé¿ö£¬¶¯Ì¬µØÑ¡È¡ÆäÖе±Ç°»ýѹÁ¬½ÓÊý×îÉÙµÄһ̨·þÎñÆ÷À´´¦Àíµ±Ç°ÇëÇ󣬾¡¿ÉÄܵØÌá¸ßºó¶Ë·þÎñÆ÷µÄÀûÓÃЧÂÊ£¬½«¸ºÔغÏÀíµØ·ÖÁ÷µ½Ã¿Ò»Ì¨»úÆ÷¡£ÓÉÓÚ×îСÁ¬½ÓÊýÉè¼Æ·þÎñÆ÷Á¬½ÓÊýµÄ»ã×ܺ͸ÐÖª£¬Éè¼ÆÓëʵÏÖ½ÏΪ·±Ëö£¬´Ë´¦¾Í²»ËµËüµÄʵÏÖÁË¡£

   
3403 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Java΢·þÎñÐÂÉú´úÖ®Nacos
ÉîÈëÀí½âJavaÖеÄÈÝÆ÷
JavaÈÝÆ÷Ïê½â
Java´úÂëÖÊÁ¿¼ì²é¹¤¾ß¼°Ê¹Óð¸Àý
Ïà¹ØÎĵµ

JavaÐÔÄÜÓÅ»¯
Spring¿ò¼Ü
SSM¿ò¼Ü¼òµ¥¼òÉÜ
´ÓÁ㿪ʼѧjava±à³Ì¾­µä
Ïà¹Ø¿Î³Ì

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

Java ÖеÄÖÐÎıàÂëÎÊÌâ
Java»ù´¡ÖªÊ¶µÄÈýÊ®¸ö¾­µäÎÊ´ð
Íæ×ª Java Web Ó¦Óÿª·¢
ʹÓÃSpring¸üºÃµØ´¦ÀíStruts
ÓÃEclipse¿ª·¢iPhone WebÓ¦ÓÃ
²å¼þϵͳ¿ò¼Ü·ÖÎö

Struts+Spring+Hibernate
»ùÓÚJ2EEµÄWeb 2.0Ó¦Óÿª·¢
J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Java EE 5ÆóÒµ¼¶¼Ü¹¹Éè¼Æ
Javaµ¥Ôª²âÊÔ·½·¨Óë¼¼Êõ
Java±à³Ì·½·¨Óë¼¼Êõ

Struts+Spring+Hibernate/EJB+ÐÔÄÜÓÅ»¯
»ªÏÄ»ù½ð ActiveMQ Ô­ÀíÓë¹ÜÀí
ijÃñº½¹«Ë¾ Java»ù´¡±à³Ìµ½Ó¦Óÿª·¢
ij·çµç¹«Ë¾ Java Ó¦Óÿª·¢Æ½Ì¨ÓëÇ¨ÒÆ
ÈÕÕÕ¸Û J2EEÓ¦Óÿª·¢¼¼Êõ¿ò¼ÜÓëʵ¼ù
ij¿ç¹ú¹«Ë¾ ¹¤×÷Á÷¹ÜÀíJBPM
¶«·½º½¿Õ¹«Ë¾ ¸ß¼¶J2EE¼°ÆäÇ°ÑØ¼¼Êõ