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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
JDKµÄsqlÉè¼Æ²»ºÏÀíµ¼ÖµÄÇý¶¯Àà³õʼ»¯ËÀËøÎÊÌâ
 
×÷ÕߣºÀî¼ÎÅô  À´Ô´£ºÍøÂç ·¢²¼ÓÚ 2017-1-20
  4991  次浏览      27
 

ÕâÆªÎÄÕÂÊÇʹÓÃÎÒÃÇÉú²ú»·¾³µÄÒ»¸öϵͳµÄÏß³ÌdumpºÍÄÚ´ædumpΪ»ù´¡½øÐзÖÎöÕ¹¿ªµÄ¡£

ÎÊÌâÃèÊö

µ±ÎÒÃÇÒ»¸öϵͳ¼ÈÐèÒªmysqlÇý¶¯£¬Ò²ÐèÒªoracleÇý¶¯µÄʱºò£¬ÔÚ²¢·¢¼ÓÔØ³õʼ»¯ÕâЩÇý¶¯ÀàµÄ¹ý³ÌÖвúÉúËÀËøµÄ¿ÉÄÜÐԷdz£´ó£¬ÏÂÃæÊÇÒ»¸öÄ£ÄâµÄÀý×Ó£¬¶ÔÓÚThread2µÄʵÏÖÆäʵÊÇjdkÀïjava.sql.DriverServiceµÄÂß¼­£¬Ò²ÊÇÎÒÃǵÚÒ»´Îµ÷ÓÃjava.sql.DriverManager.registerDriver×¢²áÒ»¸öÇý¶¯ÊµÀýÒª×ßµÄÂß¼­(jdk1.6ÏÂ)£¬²»¹ýÕâÆªÎÄÕÂÊÇʹÓÃÎÒÃÇÉú²ú»·¾³µÄÒ»¸öϵͳµÄÏß³ÌdumpºÍÄÚ´ædumpΪ»ù´¡½øÐзÖÎöÕ¹¿ªµÄ¡£

Èç¹ûÒÔÉÏ´úÂëÔËÐйý³ÌÖз¢ÏÖÓÐÏß³ÌÒ»Ö±¿¨ËÀÔÚClass.forNameµÄµ÷ÓÃÀÄÇô˵Ã÷ÎÊÌâÒѾ­ÖØÏÖÁË¡£

ÏÈÉÏÁ½ÕÅͼ

ÄÚ´æÌ¬Ï̶߳ÑÕ»

Ï̶߳ÑÕ»

´æÒɵã

×Ðϸ¿´¿´ÉÏÃæµÄÏß³Ìdump·ÖÎöºÍÄÚ´ædump·ÖÎöÀïµÄÏ̷߳ÖÎöÄ£¿é£¬Äú¿ÉÄÜ»áÓÐÈçÏÂÁ½¸öÒÉ»ó£º

¡¾ÎªÊ²Ã´Ïß³Ì[Thread-0]Ò»Ö±¿¨ÔÚClass.forNameµÄλÖá¿£ºÕâÓеã³öºõÒâÁÏ£¬×öÒ»¸öÀà¼ÓÔØÒªÃ´ÕÒ²»µ½Å׳öClassNotFoundException£¬ÒªÃ´ÕÒµ½Ö±½Ó·µ»Ø£¬ÎªÊ²Ã´»áÒ»Ö±¿¨ÔÚÕâ¸öλÖÃÄØ?

¡¾Ã÷Ã÷[Thread-0]×¢²áµÄÊÇmysqlÇý¶¯ÎªÊ²Ã´»áÈ¥¼ÓÔØOdbcµÄÇý¶¯Àà¡¿£ºÍ¨¹ý[Thread-0]ÔÚÕ»ÉÏ¿´µ¹ÊýµÚ¶þÖ¡Õ¹¿ª¿´µ½´«ÈëClass.forNameµÄ²ÎÊýÊÇcom.mysql.jdbc.Driver£¬È»ºóÕ¹¿ªÕ»ÉÏ˳ÐòµÚ¶þÖ¡£¬¿´µ½´«ÈëµÄ²ÎÊýÊÇsun.jdbc.odbc.JdbcOdbcDriver£¬ÕâÒâζ×ÅÔÚ¶ÔmysqlÇý¶¯Àà×ö¼ÓÔØ³õʼ»¯µÄ¹ý³ÌÖÐÓÖ´¥·¢ÁËJdbcOdbcÇý¶¯ÀàµÄ¼ÓÔØ

ÒÉ»óµã½âÊÍ

ÒÉ»ó¶þ£º

µÚÒ»¸öÒÉ»óÎÒÃÇÏÈÁô×Å£¬ÏȽâÊÍϵڶþ¸öÒɻ󣬴ó¼Ò¿ÉÒÔ¶ÔÕÕ¶Ñջͨ¹ý·´±àÒërt.jar»¹ÓÐojdbc6-11.2.0.3.0.jar¿´¾ßÌåµÄ´úÂë

Çý¶¯Àà¼ÓÔØ¹ý³Ì¼òÒª½éÉÜ:

µ±Òª×¢²áij¸ösqlÇý¶¯µÄʱºòÊÇͨ¹ýµ÷ÓÃjava.sql.DriverManager.registerDriverÀ´ÊµÏÖµÄ(×¢ÒâÕâ¸ö·½·¨¼ÓÁËsynchronized¹Ø¼ü×Ö£¬ºóÃæ½âÊ͵ÚÒ»¸öÒÉ»óµÄʱºòÊǹؼü)£¬¶øÕâ¸ö·½·¨ÔÚµÚÒ»´ÎÖ´Ðйý³ÌÖУ¬»áÔÚµ±Ç°Ïß³ÌclassloaderµÄclasspathÏÂѰÕÒËùÓÐ/META-INF/services/java.sql.DriverÎļþ£¬Õâ¸öÎļþÔÚmysqlºÍoracleÇý¶¯jarÀï¶¼ÓУ¬ÀïÃæÐ´µÄÊǶÔÓ¦µÄÇý¶¯ÊµÏÖÀàÃû£¬ÕâÖÖ»úÖÆÊÇjdkÌṩµÄspiʵÏÖ£¬ÕÒµ½ÕâЩÎļþÖ®ºó£¬ÒÀ´ÎʹÓÃClass.forName(driverClassName, true, this.loader)À´¶ÔÕâЩÇý¶¯Àà½øÐмÓÔØ£¬ÆäÖеڶþ¸ö²ÎÊýÊÇtrue£¬Òâζ×Ų»½ö½ö×öÒ»´ÎloadClassµÄ¶¯×÷£¬»¹»á³õʼ»¯¸ÃÀ࣬¼´µ÷Óðüº¬¾²Ì¬¿éµÄ< clinit >·½·¨£¬Ö´ÐÐÍêÖ®ºó²Å»á·µ»Ø£¬ÕâÑù¾Í½âÊÍÁ˵ڶþ¸öÒÉ»ó£¬ÔÚmysqlÇý¶¯×¢²á¹ý³ÌÖл¹»á¶ÔodbcÇý¶¯Àà½øÐмÓÔØ²¢³õʼ»¯

¸ÐÏë:

ÆäʵÎÒ¾õµÃÕâÖÖÉè¼ÆÓеãɵ£¬ÎªÊ²Ã´Òª¸ÉºÍ×Ô¼º²»Ïà¹ØµÄÊÂÇéÄØ£¬»­ÉßÌí×ãµÄÉè¼Æ£¬Ê×ÏÈÀà³õʼ»¯µÄ¿ªÏúÊÇ·ñ·Åµ½Ò»Æð×ö²¢Ã»Óжà´óÇø±ð£¬Æä´ÎÕýÓÉÓÚÕâÖÖÉè¼Æµ¼ÖÂÁ˽ñÌìÕâ¸öËÀËøµÄ·¢Éú

ÒÉ»óÒ»£º

ÏÖÔÚÀ´ËµµÚÒ»¸öÒÉ»ó£¬ÎªÊ²Ã´»áÒ»Ö±¿¨ÔÚClass.forNameÄØ£¬µ½µ×¿¨ÔÚÄÄÀÓÚÊÇÔÙͨ¹ýjstack -m ÃüÁjvmÀïµÄ¶ÑÕ»Ò²´òÓ¡³öÀ´£¬ÈçÏÂËùʾ

ÎÒÃÇ¿´µ½ÆäʵÕýÔÚ×öÀàµÄ³õʼ»¯¶¯×÷£¬²¢ÇÒÏß³ÌÕýÔÚµ÷ÓÃObjectSynchronizer::waitUninterruptiblyһֱû·µ»Ø£¬ÔÚ¿´Õâ·½·¨µÄµ÷ÓÃÕßinstanceKlass1::initialize_impl£¬ÎÒÃÇÕÒµ½Ô´ÂëλÖÃÈçÏ£º

ÀàµÄ³õʼ»¯¹ý³Ì:

µ±Ä³¸öÏ̻߳ñµÃ»ú»á¶Ôij¸öÀà½øÐгõʼ»¯µÄʱºò(Çë¿´ÉÏÃæµÄStep 6)£¬»áÉèÖÃÕâ¸öÀàµÄinit_stateÊôÐÔΪbeing_initialized(Èç¹û³õʼ»¯ºÃÁË»áÉèÖÃΪfully_initialized£¬Òì³£µÄ»°»áÉèÖÃΪinitialization_error)£¬»¹»áÉèÖÃinit_threadÊôÐÔΪµ±Ç°Ị̈߳¬ÔÚÕâ¸öÉèÖùý³ÌÖÐÊÇÓÐÕë¶ÔÕâ¸öÀàÌṩÁËÒ»°Ñ»¥³âËøµÄ£¬Òò´Ëµ±ÓбðµÄÏ߳̽øÀ´µÄʱºò»á±»À¹½ØÔÚÍâÃæ£¬Èç¹ûÉèÖÃÍêÁË£¬Õâ°Ñ»¥³âËøÒ²ÊÍ·ÅÁË£¬µ«ÊÇÒòΪÕâ¸öÀàµÄ״̬±»ÉèÖÃÁË£¬Òò´Ë²¢·¢ÎÊÌâÒ²µÃµ½Á˽â¾ö£¬µ±ÁíÍâÒ»¸öÏß³ÌÒ²³¢ÊÔ³õʼ»¯Õâ¸öÀàµÄʱºò»áÅжÏÕâ¸öÀàµÄ״̬ÊDz»ÊÇbeing_initialized£¬²¢ÇÒÆäinit_thread²»Êǵ±Ç°Ị̈߳¬ÄÇô¾Í»áÒ»Ö±¿¨ÔÚÄÇÀҲ¾ÍÊÇ´Ë´ÎÏß³ÌdumpµÄÏß³ÌËù´¦µÄ״̬£¬ÕýÔÚ³õʼ»¯ÀàµÄÏ̻߳áµ÷ÓÃ< clinit >·½·¨£¬Èç¹ûÕý³£½áÊøÁË£¬ÄÇô¾ÍÉèÖÃÆä״̬Ϊfully_initialized£¬²¢ÇÒ֪֮ͨǰ¿¨ÔÚÄÇÀïµÈ´ý³õʼ»¯Íê³ÉµÄỊ̈߳¬È»ËûÃǼÌÐøÍùÏÂ×ß(ÏÂÒ»¸ö¶¯×÷¾ÍÊÇÔÙÅжÏÏÂ״̬£¬·¢ÏÖÍê³ÉÁ˾ÍÖ±½ÓreturnÁË)

²ÂÏë:

ÔÚÁ˽âÁËÉÏÃæµÄ¹ý³ÌÖ®ºó£¬ÓÚÊÇÎÒÃDz²âÁ½ÖÖ¿ÉÄÜ

µÚÒ»£¬Õâ¸öÀàµÄ״̬»¹ÊÇbeing_intialized£¬»¹ÔÚwhileÑ­»·ÀïûÓÐÌø³öÀ´

µÚ¶þ£¬Ê¼þ֪ͨ»úÖÆ³öÏÖÁËÎÊÌ⣬Ҳ¾ÍÊÇpthread_cond_waitºÍpthread_cond_signalÖ®¼äµÄͨÐŹý³Ì³öÏÖÁËÎÊÌâ¡£

²»¹ýµÚ¶þÖÖ¿ÉÄÜÐԷdz£Ð¡£¬±È½Ïlinux¾Ã¾­¿¼ÑéÁË£¬ÄǽÓÏÂÀ´ÎÒÃÇÑéÖ¤ÆäʵÊǵÚÒ»¸ö²ÂÏë

ÑéÖ¤£º

ÎÒÃÇͨ¹ýGDB attachµÄ·½Ê½Á¬µ½ÁËÎÊÌâ»úÆ÷ÉÏ(ºÃÔÚ»úÆ÷ûÓйÒ)£¬Ê×ÏÈÎÒÃÇÒªÕÒµ½¾ßÌåµÄÎÊÌâỊ̈߳¬ÎÒÃÇͨ¹ýÉÏÃæµÄjstack -mÃüÁî¿´µ½ÁËÏß³ÌIDÊÇ5738£¬È»ºóͨ¹ýinfo threadsÕÒµ½¶ÔÓ¦µÄỊ̈߳¬²¢µÃµ½ËüµÄÐòºÅ14

È»ºóͨ¹ýthread 14Çл»µ½¶ÔÓ¦µÄỊ̈߳¬²¢Í¨¹ýbt¿´µ½ÁËÈçϵĶÑÕ»£¬ÕýÈçÎÒÃÇÏëÏóµÄÄÇÑù£¬ÕýÔÚ×öÀàµÄ³õʼ»¯£¬Ò»Ö±¿¨ÔÚÄÇÀï

ÎÒÃÇͨ¹ýf 6Ñ¡ÔñµÚ7Ö¡£¬ÔÚͨ¹ýdisassemble·´»ã±à¸ÃÖ¡£¬Ò²¾ÍÊǶÔinstanceKlass::initialize_impl ()Õâ¸ö·½·¨·´»ã±à

´ÓÉÏÃæµÄ×¢ÊÍÎÒÃÇÆäʵµÃ³öÁË£¬ÎÒÃÇÒª¿´µ±Ç°ÀàµÄ³õʼ»¯×´Ì¬£¬ÄǾÍÊÇ¿´eax¼Ä´æÆ÷Æ«ÒÆ0xe0µÄλÖõÄÖµ£¬¶øeaxÆäʵ¾ÍÊÇebp¼Ä´æÆ÷Æ«ÒÆ0xfffffff4λÖõÄÖµ£¬ÓÚÊÇÎÒÃÇͨ¹ýÈçϵØÖ·ÄÚ´æ²éµ½µÃµ½ÊÇ4

¶ø4Æäʵ´ú±íµÄ¾ÍÊÇbeing_initializedÕâ¸ö״̬£¬´úÂëÈçÏÂ

´ÓÕâÓÚÊÇÎÒÃÇÑéÖ¤Á˵ÚÒ»¸ö²ÂÏ룬ÆäʵÊÇ״̬һֱûÓбä¸ü£¬Òò´ËÒ»Ö±¿¨ÔÚÄÇÀΪÁ˸ü½øÒ»²½È·ÈÏÕâ¸öÎÊÌ⣬ҪÊÇÎÒÃÇÄÜÕÒµ½¸ÃÀàµÄinit_threadÏß³Ìid¾Í¸üÇå³þÁË£¬Äõ½Õâ¸öIDÎÒÃǾÍÄÜ¿´µ½Õâ¸öÏß³ÌÕ»£¬¾ÍÖªµÀËüÔÚ¸ÉʲôÁË£¬µ«ÊǺÜÒź¶£¬Õâ¸öºÜÄÑ»ñÈ¡µ½£¬ÖÁÉÙÎÒһֱûÓÐÕÒµ½°ì·¨£¬ÒòΪÏß³ÌIDÔÚÏ̶߳ÔÏóÀïһֱûÓд棬¶¼Êǵ÷ÓõÄosº¯ÊýÀ´»ñÈ¡µÄ£¬µÃ»»¸ö˼·¡£

ͻȻ·¢ÏÖinstanceKlass.hpp´úÂëÖеÃÖªÁ½¸öÊôÐÔÔ­À´ÊÇÏàÁÚµÄ(init_stateºÍinit_thread)£¬ÓÚÊǶ϶¨ÏÂÒ»¸öµØÖ·µÄÖµ¾Í´ú±íÊÇÕâ¸öÏ̶߳ÔÏóÁË£¬µ«ÊÇÆäÊôÐÔºÎÆä¶à£¬ÕÒµ½ÏëÒªµÄÌ«²»Ò×ÁË£¬×îÖ÷ÒªµÄÊÇ»¹µ£ÐÄ×Ô¼º¿´µÄ´úÂëºÍ·þÎñÆ÷ÉϵÄjvm´úÂë²»Ò»Ö£¬ÕâÑù¸üµ°ÌÛÁË£¬ÓÚÊǼÌÐø²é¿´Thread.hppÖеÄJavaThreadÀ࣬ÕÒµ½¸ö¹Ø¼ü×Ö0xDEAD-2=0xDEAB,Õâ¸öÓпÉÄÜÊÇvolatile TerminatedTypes _terminatedÊôÐÔµÄÖµ£¬ÓÚÊǰÑÏ̶߳ÔÏó´òÓ¡³öÀ´£¬¹ûÈ»²éµ½Á˹ؼü×Ö0xDEAB

Òò´Ë˳×ÅÕâ¸öÊôÐÔ¼ÌÐøÍùÉÏÕÒ£¬ÕÒµ½ÁË_thread_state±íʾÏß³Ì״̬µÄÖµ(ÏòÉÏÆ«ÒÆÈý¸ö×Ö)£¬0x0000000a£¬¼´10£¬È»ºó²é¿´´úÂëÖªµÀÔ­À´Ïß³ÌÊdzöÓÚblock״̬

JavaThreadState

ÕâÑùÒ»À´²é¿´ÏÂÏß³Ìdump£¬·¢ÏÖThread-1ÕýºÃ´¦ÓÚBLOCKED״̬£¬Ò²¾ÍÊÇ˵Thread-1¾ÍÊÇÄǸöÕýÔÚ¶ÔmysqlÇý¶¯Àà×ö³õʼ»¯µÄỊ̈߳¬Õâ˵Ã÷Thread-0ºÍThread-1³É¹¦»¥ËøÁË

ÓÚÊÇÎÒÃÇÕ¹¿ªThread-1£¬¿´µ½- waiting to lock <0x71ae2ec0> (a java.lang.Class for java.sql.DriverManager)£¬¸ÃÏß³ÌÕýÔڵȴýjava.sql.DriverManagerÀàÐÍËø£¬¶øblockedÔÚÄÇÀ¶øÕâ¸öÀàÐÍËøÊDZ»Thread-0Ï̳߳ÖÓе쬴ÓThread-1Õâ¸öÏ̶߳ÑÕ»À´¿´ËüÆäʵҲÊÇÔÚ×öClass.forName¶¯×÷£¬²¢ÇÒͨ¹ýThread-1,Õ¹¿ªµÚËÄÖ¡ÎÒÃÇ¿ÉÒÔ¿´µ½ÆäÕýÔÚ¶Ô¼ÓÔØ

sun.jdbc.odbc.JdbcOdbcDriver 

ÎÊÌâÏÖ³¡åÚÏë:

ÓÚÊÇÎÒÃÇ´óµ¨ÉèÏëÒ»¸ö³¡¾°£¬Thread-1ÏÈ»ñÈ¡µ½³õʼ»¯sun.jdbc.odbc.JdbcOdbcDriverµÄ»ú»á£¬È»ºóÔÚÖ´ÐÐsun.jdbc.odbc.JdbcOdbcDriverÕâ¸öÀàµÄ¾²Ì¬¿éµÄʱºòµ÷ÓÃDriverManager.registerDriver(new Driver());£¬¶ø¸Ã·½·¨Ö®Ç°ÒѾ­Ìáµ½ÁËÊÇ»á¼Óͬ²½ËøµÄ£¬ÔÙÏëÏóһϣ¬ÔÚÕâ¸öÕâ¸ö¾²Ì¬¿é֮ǰ£¬²¢ÇÒÉèÖÃÁËsun.jdbc.odbc.JdbcOdbcDriverÀàµÄ³õʼ»¯×´Ì¬Îªbeing_initializedÖ®ºó£¬Thread-0Õâ¸öÏß³ÌÖ´Ðе½ÁË¿¨ÔÚµÄÄǸöλÖ㬲¢ÇÒÎÒÃÇ´ÓÆä¶ÑÕ»¿ÉÒÔ¿´³öËüÒѾ­³ÖÓÐÁËjava.sql.DriverManagerÕâ¸öÀàÐ͵ÄËø£¬Òò´ËÕâÁ½¸öÏß³ÌÏÝÈëÁË»¥Ëø×´Ì¬

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

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

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

MySQLË÷Òý±³ºóµÄÊý¾Ý½á¹¹
MySQLÐÔÄܵ÷ÓÅÓë¼Ü¹¹Éè¼Æ
SQL ServerÊý¾Ý¿â±¸·ÝÓë»Ö¸´
ÈÃÊý¾Ý¿â·ÉÆðÀ´ 10´óDB2ÓÅ»¯
oracleµÄÁÙʱ±í¿Õ¼äдÂú´ÅÅÌ
Êý¾Ý¿âµÄ¿çƽ̨Éè¼Æ

²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿â
¸ß¼¶Êý¾Ý¿â¼Ü¹¹Éè¼ÆÊ¦
HadoopÔ­ÀíÓëʵ¼ù
Oracle Êý¾Ý²Ö¿â
Êý¾Ý²Ö¿âºÍÊý¾ÝÍÚ¾ò
OracleÊý¾Ý¿â¿ª·¢Óë¹ÜÀí

GE Çø¿éÁ´¼¼ÊõÓëʵÏÖÅàѵ
º½Ìì¿Æ¹¤Ä³×Ó¹«Ë¾ Nodejs¸ß¼¶Ó¦Óÿª·¢
ÖÐÊ¢Òæ»ª ׿Խ¹ÜÀíÕß±ØÐë¾ß±¸µÄÎåÏîÄÜÁ¦
ijÐÅÏ¢¼¼Êõ¹«Ë¾ PythonÅàѵ
ij²©²ÊITϵͳ³§ÉÌ Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À
ÖйúÓÊ´¢ÒøÐÐ ²âÊÔ³ÉÊì¶ÈÄ£Ðͼ¯³É(TMMI)
ÖÐÎïÔº ²úÆ·¾­ÀíÓë²úÆ·¹ÜÀí