碼農(nóng)往事
          我的代碼為什么這么丑?一定是因?yàn)槲议L(zhǎng)的不好看
          posts - 29,comments - 86,trackbacks - 0
          說(shuō)有一個(gè)屋里有多個(gè)桌子,有多個(gè)人? 如果3個(gè)人一桌,多2個(gè)人。 如果5個(gè)人一桌,多4個(gè)人。 如果7個(gè)人一桌,多6個(gè)人。 如果9個(gè)人一桌,多8個(gè)人。 如果11個(gè)人一桌,正好。 請(qǐng)問(wèn)這屋里多少人?
          最近比較閑,逛論壇看到隨手做了.
          最小答案是
          代碼如下:
              public static void main(String[] args) {
                  for (int i = 0; i < Integer.MAX_VALUE; i++) {
                      long value = i * 11;
                      if (value % 3 == 2 && value % 5 == 4 && value % 7 == 6 && value % 9 == 8) {
                          System.out.println("i:" + i + ",value:" + value);
                          break;
                      }
                  }
              }
          計(jì)算出來(lái)的結(jié)果是:i:229,value:2519
          轉(zhuǎn)念一想,結(jié)果可能不止一個(gè),于是換個(gè)寫(xiě)法:
              public static void main(String[] args) {
                  int count = 0;
                  long value;
                  long valueMax = 0;
                  long iMax = 0;
                  long pram = 11;
                  for (int i = 0; i < Integer.MAX_VALUE; i++) {
                      value = i * pram;
                      if (value % 3 == 2 && value % 5 == 4 && value % 7 == 6 && value % 9 == 8) {
                          count++;
                          if (iMax < i) {
                              iMax = i;
                          }
                          if (valueMax < value) {
                              valueMax = value;
                          }
                      }
                  }
                  System.out.println("count:" + count);
                  System.out.println("iMax:" + iMax);
                  System.out.println("valueMax:" + valueMax);
              }
          當(dāng)i在Integer.MAX_VALUE范圍內(nèi)的計(jì)算結(jié)果:
          count:6817408
          iMax:2147483434
          valueMax:23622317774
          這邊遇到了一個(gè)問(wèn)題,當(dāng)代碼中的pram聲明為int類(lèi)型時(shí)計(jì)算的結(jié)果會(huì)與聲明為long類(lèi)型發(fā)生極大偏差,貌似是因?yàn)镴ava乘法對(duì)于int類(lèi)型越界處理的問(wèn)題,具體原因待查.
          如果你用如下代碼執(zhí)行:
           int count = 0;
                  for (int i = 0; i < Integer.MAX_VALUE; i++) {
                      long value = i * 11;
                      if (value % 3 == 2 && value % 5 == 4 && value % 7 == 6 && value % 9 == 8) {
                          System.out.println("i:" + i + ",value:" + value);
                          count++;
                      }
                  }
                  System.out.println("count:" + count);
          最后數(shù)行看到的結(jié)果是這樣:
          i:2147475704,value:2147396264
          i:2147476019,value:2147399729
          i:2147476334,value:2147403194
          i:2147476649,value:2147406659
          i:2147476964,value:2147410124
          i:2147477279,value:2147413589
          i:2147477594,value:2147417054
          i:2147477909,value:2147420519
          i:2147478224,value:2147423984
          i:2147478539,value:2147427449
          i:2147478854,value:2147430914
          i:2147479169,value:2147434379
          i:2147479484,value:2147437844
          i:2147479799,value:2147441309
          i:2147480114,value:2147444774
          i:2147480429,value:2147448239
          i:2147480744,value:2147451704
          i:2147481059,value:2147455169
          i:2147481374,value:2147458634
          i:2147481689,value:2147462099
          i:2147482004,value:2147465564
          i:2147482319,value:2147469029
          i:2147482634,value:2147472494
          i:2147482949,value:2147475959
          i:2147483264,value:2147479424
          i:2147483579,value:2147482889
          count:3718586
          問(wèn)題產(chǎn)生的原因應(yīng)該是Java對(duì)于int的乘法結(jié)果大于上限的情況,自動(dòng)截取了前10位.
          -----------------------------------------------------------------------------------------------------------------之前的理解不正確.

          根據(jù)Java的基礎(chǔ)類(lèi)型的變窄轉(zhuǎn)換(Narrowing primitive conversion)規(guī)則,對(duì)于運(yùn)算結(jié)果超出int范圍的,將超出部分全部丟棄,只保留低32位的.
          posted @ 2016-01-25 17:16 Jimi 閱讀(3413) | 評(píng)論 (0)編輯 收藏
          有位朋友問(wèn)起,我就順便總結(jié)一下好了。個(gè)人知識(shí)有限,有謬誤歡迎指正。
          本人一直從事的服務(wù)端相關(guān)的工作,對(duì)前端只能說(shuō)是耳聞目染。
          參與的項(xiàng)目主要是頁(yè)游和手游。

          從程序開(kāi)發(fā)角度講起,程序一般常分為前端程序和后端程序。

          一.前端
          前端就是指玩家所使用的客戶端,主要包括處理UI事件和向服務(wù)端發(fā)送請(qǐng)求。
          頁(yè)游主流的技術(shù)有ActionScript及新興的Unity框架,由html5和JavaScript做的小游戲也不少。
          手游上現(xiàn)在比較火的框架就是cocos2d-x和Unity 3D,cocos2d-x 是開(kāi)源的,Unity 對(duì)開(kāi)發(fā)者收費(fèi)。
          兩者都支持多平臺(tái),就是說(shuō)一次開(kāi)發(fā),ios、android等平臺(tái)都可以生成相應(yīng)代碼。
          我自己只稍微玩過(guò)一點(diǎn)cocos2d-x,主要用的語(yǔ)言是C++,也可以跟Lua混合使用。
          Unity平臺(tái)則支持C#、Boo、JavaScript、Lua,我沒(méi)玩過(guò),不發(fā)表評(píng)論。
          2者現(xiàn)在都很火,行情都還不錯(cuò)。
          最近比較大的新聞,就是Unreal Engine虛幻引擎宣布開(kāi)發(fā)者免費(fèi),感興趣的可以自行g(shù)oogle下。

          二.后端
          通常所說(shuō)的后端,常指的客戶端發(fā)送請(qǐng)求的接收和處理者。語(yǔ)言的選擇就很多了,Java、C++、Python、PHP等等。
          端游等對(duì)實(shí)時(shí)性能要求比較高的場(chǎng)合,一般會(huì)選擇C++,與之相應(yīng)的開(kāi)發(fā)成本更高。相對(duì)來(lái)講,手游頁(yè)游選其它語(yǔ)言的就很多了。
          一般根據(jù)對(duì)實(shí)時(shí)性的要求,來(lái)選擇合適的通信方式,長(zhǎng)連接或短連接,以及合適的通訊協(xié)議如http、protobuf、amf3,及自定義協(xié)議等。
          大多數(shù)時(shí)間,你主要的工作在定義協(xié)議、寫(xiě)游戲邏輯然后與客戶端聯(lián)調(diào)。
          另外,服務(wù)端一個(gè)重要的工作就是負(fù)責(zé)數(shù)據(jù)的存儲(chǔ),mysql數(shù)據(jù)庫(kù)是一個(gè)很常見(jiàn)的選擇,還有這幾年興起的各種Nosql數(shù)據(jù)庫(kù),其中尤其是redis(有人說(shuō)它不是數(shù)據(jù)庫(kù)),用的越來(lái)越多。
          最后,對(duì)于日志的處理,也是至關(guān)重要的。常用到的框架有l(wèi)og4j以及l(fā)ogback。簡(jiǎn)單粗暴點(diǎn)的,你可以另外開(kāi)線程,直接丟入數(shù)據(jù)庫(kù),精細(xì)點(diǎn)的可以先寫(xiě)log文件,然后用腳本解析,轉(zhuǎn)發(fā)到日志服務(wù)器然后再存入數(shù)據(jù)庫(kù)。
          如果是放mysql數(shù)據(jù)庫(kù),記得把二進(jìn)制日志關(guān)掉,不然沒(méi)跑幾天硬盤(pán)就爆了。
          工作內(nèi)容上,除了上述事務(wù),經(jīng)常需要你做的事情還有:
          其一,各種游戲平臺(tái)的SDK對(duì)接,頁(yè)游如騰訊、360、37wan,手游如蘋(píng)果官方、谷歌官方以及各種大小平臺(tái);
          其二,制作游戲測(cè)試工具,GM命令等;
          其三,開(kāi)發(fā)供運(yùn)維人員使用的WEB版本的游戲管理平臺(tái)。
          小規(guī)模的公司,你可能啥都要做,人力配置稍微寬松的公司,這些工作往往會(huì)區(qū)分開(kāi)來(lái)。
          架構(gòu)上來(lái)說(shuō),大型游戲的服務(wù)端,會(huì)分成登錄服、邏輯服、數(shù)據(jù)存儲(chǔ)服、日志服、GM管理服甚至更復(fù)雜。
          一般服務(wù)器承載量不高的情況下,單進(jìn)程的登錄-邏輯-數(shù)據(jù)的架構(gòu)也很常見(jiàn)。

          從團(tuán)隊(duì)結(jié)構(gòu)角度講,常見(jiàn)的職位分配:

          1.策劃類(lèi):主策劃、關(guān)卡策劃、數(shù)值策劃、劇本策劃
          2.美術(shù)類(lèi):主美、UI、3D建模、動(dòng)作、特效、場(chǎng)景、原畫(huà)
          3.程序類(lèi):后端、前端
          4.其它:商務(wù)、運(yùn)營(yíng)、維護(hù)、QA
          一個(gè)大規(guī)模團(tuán)隊(duì)里往往美術(shù)是最多的,現(xiàn)在是看臉的時(shí)代,囧RZ!好的美術(shù)都是用錢(qián)砸的。
          小團(tuán)隊(duì)來(lái)說(shuō),自然就是需要各種身兼數(shù)職的牛人。
          策劃?一個(gè)就夠了,
          前端?策劃也能兼,
          后端?一個(gè)就夠了
          運(yùn)維?后端也能干
          美術(shù)?不好搞就外包吧
          這個(gè)世界上永遠(yuǎn)不缺少一個(gè)人搞定以上所有事情的大牛。

          答博友問(wèn):我們當(dāng)時(shí)的團(tuán)隊(duì)是,策劃兼前端,共3前端,后期只剩倆了,后端,前期倆,后期只剩我一個(gè),還有一位特效,美術(shù)外包。
          答畢。

          該休息了

          在此申明,轉(zhuǎn)載——請(qǐng)注明出處。
          來(lái)自:http://www.aygfsteel.com/rockblue1988/archive/2015/03/10/423328.html

          posted @ 2015-03-10 02:05 Jimi 閱讀(4177) | 評(píng)論 (3)編輯 收藏
          現(xiàn)在總結(jié),是有那么點(diǎn)晚了呢。
          只是想把那些容易不經(jīng)意間忘卻的,大的小的、圓的扁的、重要的不重要的,都稍稍記錄下來(lái)。

          這是結(jié)完婚后的第一個(gè)年頭,酸甜苦辣,冷暖自知(這句我咋就能聯(lián)想到鴨子呢?)。

          一.工作
          2月份,13年開(kāi)始做的頁(yè)游創(chuàng)業(yè)項(xiàng)目徹底黃了,還沒(méi)過(guò)年呢,尾牙都不給吃,團(tuán)隊(duì)就“被”滾蛋了。
          過(guò)完年回來(lái),花了三個(gè)禮拜找工作。
          3月2號(hào),最終選擇到一家手游公司上班,提前轉(zhuǎn)正。
          由于種種原因,決定換工作,拿了三份Offer,其中有我職業(yè)生涯中拿到過(guò)的最高的,還是比較欣慰的,這種被人認(rèn)可的感覺(jué)良好,雖然最終沒(méi)選擇它。
          11月27號(hào)到了當(dāng)前公司上班,目前為止,工作和交流都很funny,是個(gè)令人愉快的選擇。

          二.生活
          在魔都這地方,換租了一套有獨(dú)立廚房的居室,租的房子啥都沒(méi),買(mǎi)了各種東西,才有那么點(diǎn)家的樣子。
          每天上班下班,做飯洗碗,生活也有點(diǎn)像個(gè)樣子。
          這一年是到影院觀影次數(shù)最多的一年,這也是戀愛(ài)時(shí)候曾經(jīng)憧憬的。
          給自己買(mǎi)了個(gè)nokia x2的手機(jī),可是不到一個(gè)月就碎屏了,渣渣傷不起。
          小舅子來(lái)到,帶他走向了碼農(nóng)的不歸路。

          三.技能
          1.廚藝
          研究嘗試了很多沒(méi)做過(guò)的菜式:
          酸菜大腸、豬肚燉蛤蜊、燉王八、蒜泥扇貝、醬汁鮑魚(yú)、清蒸多寶魚(yú)、清蒸鱸魚(yú)、肉末蒸蛋、土豆燉牛腩、
          啤酒燉羊肉、香鹵牛筋、清蒸豬舌頭、酸菜魚(yú)頭、土豆色拉、西式牛排、香煎鱈魚(yú),還做了第一份自制雙皮奶。
          這里一點(diǎn)要說(shuō)說(shuō),一個(gè)智能電壓力鍋實(shí)在是太值得入手了,煮飯燉湯燜肉都用的上,最重要的是有預(yù)約功能,晚上下好米,早上起來(lái)就能吃稀飯了。
          2.籃球
          周六無(wú)安排的話,堅(jiān)持到上海大學(xué)打籃球,虐與被虐之間,技術(shù)還是有所進(jìn)步的。值得一提的事,公司內(nèi)部比賽,也算是第一次正式上了場(chǎng),蠻開(kāi)心。
          3.吉他
          沒(méi)進(jìn)步,只剩下隨便吼吼的技能,走入社會(huì)越久,越啞。這個(gè)技能的好處是,年會(huì)總有機(jī)會(huì)上臺(tái)去釋放下悶騷的青春,順帶還能帶點(diǎn)小禮品下來(lái)。
          4.電子琴
          主要練熟了兩首曲子:《菊次郎的夏天》和《夢(mèng)中的婚禮》,完成了大學(xué)時(shí)的小心愿。《克羅地亞狂想曲》挑戰(zhàn)失敗,最近電子琴已擺爛。
          5.駕照
          魔都4月份報(bào)名,7500,模擬考什么的花了500左右,每次練車(chē)都AA請(qǐng)教練吃飯,加上請(qǐng)假考試,總成本10000左右,好在一次性過(guò)----說(shuō)實(shí)話,沒(méi)上過(guò)幾回車(chē),教練素質(zhì)一般,考科三中間三個(gè)月停練,呆車(chē)上的時(shí)間也絕對(duì)沒(méi)達(dá)標(biāo) ---- 全國(guó)的駕校都這樣嗎?都TM沒(méi)人管了?
          6.代碼能力
          對(duì)于Linux下的操作更加熟練,shell腳本編寫(xiě),組織SQL的能力有所提高。
          在不同的公司,讀到不同風(fēng)格的代碼,隱約覺(jué)得內(nèi)功有所提升----別的不說(shuō),抄代碼能力那是肯定增長(zhǎng)了。
          作為一個(gè)半路出家的程序員,補(bǔ)了《C++ primer》和《C程序設(shè)計(jì)語(yǔ)言》兩本心法,眼界稍稍增長(zhǎng),至少不會(huì)被“java程序員不曉得指針是啥”這類(lèi)的說(shuō)辭給躺槍。
          主要的吃飯家伙----Java方面,我再“三”次嘗試了《Java并發(fā)編程實(shí)踐》這本書(shū),比最初多懂得一點(diǎn)。
          比較用得上的一本書(shū)是《Java程序性能優(yōu)化》,在大牛眼中這書(shū)可能比較淺顯,但里面的東西確實(shí)比其它一些大部頭里說(shuō)的簡(jiǎn)潔一些,挺多地方一般面試也常問(wèn)到。
          《Java性能優(yōu)化權(quán)威指南》就是前者的加強(qiáng)版,干貨不少,字太多沒(méi)堅(jiān)持讀完。
          項(xiàng)目中用上了redis,漲了點(diǎn)姿勢(shì)。
          比較實(shí)用的新技能:Lua算是比較熟練了,可以拿來(lái)?yè)Q飯錢(qián)。

          四.開(kāi)心的事
          1.年會(huì)上中了三等獎(jiǎng)
          2.論壇上抽中一個(gè)機(jī)械鍵盤(pán)

          五.最重要的事
          兩口之家即將變成三口之家了,希望一切順順利利、平平安安!

          六.2015的目標(biāo)
          年底再揭曉

          祝觀文的諸位碼友三羊開(kāi)泰,心想事成!
          PS:沒(méi)多少內(nèi)容的一篇隨筆,竟然花了近兩個(gè)小時(shí),必須對(duì)產(chǎn)出高質(zhì)量博文的博主們表達(dá)一下由衷的敬佩
          posted @ 2015-03-07 03:09 Jimi 閱讀(5642) | 評(píng)論 (11)編輯 收藏
          最近的工作主要涉及LUA,這有個(gè)坑必須記一下。
          下面是一個(gè)LUA面向?qū)ο髮?xiě)法非常常見(jiàn)的寫(xiě)法。
          Bird = {
              color = {};canFly = true
          }

          function Bird:new(o)
              o = o or {}
              setmetatable(o, self)
              self.__index = self
              self.color = {}
              return o
          end
          注意,這里Bird類(lèi)有兩個(gè)屬性,1個(gè)表,1個(gè)是基本類(lèi)型,然后上測(cè)試代碼(Utils類(lèi)只是簡(jiǎn)單的封裝類(lèi),可以自己實(shí)現(xiàn)一個(gè))
                  local A = Bird:new()
                  LoggerUtils:debug("------------------------------原始值-----------------------------------");
                  LoggerUtils:debug("Bird canFly:" .. StringUtils.boolean2string(A.canFly));
                  LoggerUtils:debug("Bird color:");
                  CommonUtils.printTable(Bird.color)
                  LoggerUtils:debug("a canFly:" .. StringUtils.boolean2string(A.canFly));
                  LoggerUtils:debug("a color:");
                  CommonUtils.printTable(A.color)
                  --改變A的屬性
                  A.canFly = false
                  A.color[1] = "red"
                  A.color[2] = "blue"
                  A.color[3] = "green"
                  LoggerUtils:debug("------------------------------A改變后----------------------------------");
                  LoggerUtils:debug("Bird canFly:" .. StringUtils.boolean2string(Bird.canFly));
                  LoggerUtils:debug("Bird color:");
                  CommonUtils.printTable(Bird.color)
                  LoggerUtils:debug("A canFly after change:" .. StringUtils.boolean2string(A.canFly));
                  LoggerUtils:debug("A color after chagne:");
                  CommonUtils.printTable(A.color)
                  LoggerUtils:debug("-------------------------------B的值----------------------------------");
                  local B = Bird:new()
                  LoggerUtils:debug("B canFly:" .. StringUtils.boolean2string(B.canFly));
                  LoggerUtils:debug("B color:");
                  CommonUtils.printTable(B.color)

          代碼執(zhí)行結(jié)果:
          2014-12-29 11:20:40,690 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: ------------------------------原始值-----------------------------------
          2014-12-29 11:20:40,690 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: Bird canFly:true
          2014-12-29 11:20:40,691 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: Bird color:
          2014-12-29 11:20:40,691 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: a canFly:true
          2014-12-29 11:20:40,691 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: a color:
          2014-12-29 11:20:40,691 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: ------------------------------A改變后----------------------------------
          2014-12-29 11:20:40,691 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: Bird canFly:true
          2014-12-29 11:20:40,691 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: Bird color:
          2014-12-29 11:20:40,692 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: 1:red
          2014-12-29 11:20:40,692 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: 2:blue
          2014-12-29 11:20:40,692 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: 3:green
          2014-12-29 11:20:40,692 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: A canFly after change:false
          2014-12-29 11:20:40,692 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: A color after chagne:
          2014-12-29 11:20:40,693 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: 1:red
          2014-12-29 11:20:40,693 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: 2:blue
          2014-12-29 11:20:40,695 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: 3:green
          2014-12-29 11:20:40,695 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: -------------------------------B的值----------------------------------
          2014-12-29 11:20:40,695 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: B canFly:true
          2014-12-29 11:20:40,695 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: B color:
          2014-12-29 11:20:40,695 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: 1:red
          2014-12-29 11:20:40,695 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: 2:blue
          2014-12-29 11:20:40,696 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: 3:green
          發(fā)現(xiàn)神馬問(wèn)題了嗎?
          當(dāng)A的類(lèi)型為表的屬性color改變時(shí),原始類(lèi)的color屬性也改變了,同時(shí)這個(gè)改變也影響到新建的B,而類(lèi)型為基本類(lèi)型的屬性canFly就沒(méi)有這個(gè)問(wèn)題。
          我的解決方法是新增一個(gè)set方法:
          function Bird:setColor(color)
              self.color = color
          end

          然后修改改變屬性的方式:
          local color ={}
                  color[1] = "red"
                  color[2] = "blue"
                  color[3] = "green"
                  A:setColor(color)
          輸出結(jié)果:
          2014-12-29 11:31:58,648 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: ------------------------------原始值-----------------------------------
          2014-12-29 11:31:58,648 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: Bird canFly:true
          2014-12-29 11:31:58,649 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: Bird color:
          2014-12-29 11:31:58,649 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: a canFly:true
          2014-12-29 11:31:58,649 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: a color:
          2014-12-29 11:31:58,649 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: ------------------------------A改變后----------------------------------
          2014-12-29 11:31:58,649 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: Bird canFly:true
          2014-12-29 11:31:58,650 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: Bird color:
          2014-12-29 11:31:58,650 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: A canFly after change:false
          2014-12-29 11:31:58,650 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: A color after chagne:
          2014-12-29 11:31:58,650 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: 1:red
          2014-12-29 11:31:58,650 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: 2:blue
          2014-12-29 11:31:58,650 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: 3:green
          2014-12-29 11:31:58,651 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: -------------------------------B的值----------------------------------
          2014-12-29 11:31:58,651 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: B canFly:true
          2014-12-29 11:31:58,653 [main] DEBUG server.app.game.util.LoggerUtils:34 - LUA: B color:
          另外同事一個(gè)解決方法更簡(jiǎn)單,直接修改new()方法,其它的地方都不用改:
          function Bird:new(o)
              o = o or {}
              setmetatable(o, self)
              self.__index = self
              o.color = {} 
              return o
          end
          這個(gè)問(wèn)題基本上網(wǎng)上的示例貌似都沒(méi)提到,我讀的書(shū)里也沒(méi)有,實(shí)際調(diào)試過(guò)程中才發(fā)現(xiàn)的,會(huì)造成新創(chuàng)建的類(lèi)里會(huì)有不該有的屬性,比較蛋疼。
          具體原因不了解,有木有筒子指教一下?順便問(wèn)問(wèn)這兩種方法哪種更好?
          posted @ 2014-12-29 11:42 Jimi 閱讀(10776) | 評(píng)論 (5)編輯 收藏
          作為一名“萬(wàn)能”的碼農(nóng),這種活兒你遲早要干的。----By Jimi沒(méi)有bond

          準(zhǔn)備工作:yum

          1.檢查是否已安裝
          rpm -qa subversion
          如果要卸載舊版本:
          yum remove subversion

          2.安裝

          yum install subversion
          PS:yum install httpd httpd-devel subversion mod_dav_svn mod_auth_mysql(這是安裝配合Apache的模塊,我暫時(shí)還沒(méi)做,做了再補(bǔ)上,你可以只裝subversion,多裝了也無(wú)所謂)
          3.檢查是否安裝成功
          svnserve --version
          如果成功會(huì)輸出版本號(hào)

          4.創(chuàng)建倉(cāng)庫(kù)目錄
          例如:
          mkdir /home/svn/game

          5.創(chuàng)建項(xiàng)目
          svnadmin create /home/svn/game

          6.檢查是否創(chuàng)建成功
          cd /home/svn/game
          ll
          如果成功,game目錄下會(huì)多出幾個(gè)文件夾


          7.進(jìn)入conf目錄會(huì)看到3個(gè)配置文件,生成的文件中都有英文注釋說(shuō)明
          示例需求:
          策劃組:開(kāi)策劃、美術(shù)讀寫(xiě)
          后端組:開(kāi)后端讀寫(xiě),策劃只讀
          前端組:開(kāi)前端讀寫(xiě),策劃、美術(shù)只讀
          美術(shù)組:開(kāi)美術(shù)讀寫(xiě),策劃只讀
          管理員組:所有的讀寫(xiě)
          authz:用戶權(quán)限配置
          示例:
          [groups]
          #管理組
          manager = boss
          #服務(wù)端用戶組
          server = server1,server2
          #客戶端用戶組
          client = client1,client2
          #美術(shù)組
          art = art1,art2
          #策劃組
          design=design1,design2
          [game:/]
          @manager=rw
          [game:/server]
          @server=rw
          [game:/client]
          @client=rw
          @design=r
          @art=r
          [game:/art]
          @design=rw
          @art=rw
          @client=r
          [game:/design]
          @design=rw
          @server=r
          @client=r
          @art=r
          passwd:用戶密碼
          [users]
          boss=123456
          server1=123456
          server2=123456
          client1=123456
          client2=123456
          art1=123456
          art2=123456
          design1=123456
          design2=123456
          svnserve.conf:
          #匿名訪問(wèn)者權(quán)限
          anon-access = none
          #驗(yàn)證用戶權(quán)限
          auth-access = write
          #密碼文件地址
          password-db = /home/svn/game/passwd
          #權(quán)限文件地址
          authz-db = /home/svn/game/authz
          #項(xiàng)目名稱(chēng)(UUID)
          realm =game


          8.開(kāi)放svn端口
          默認(rèn)是3690端口,你也可以用別的。已開(kāi)啟的跳過(guò)這一步
          修改
          iptables -I INPUT -p tcp --dport 3690 -j ACCEPT
          保存
          /etc/rc.d/init.d/iptables save
          重啟
          service iptables restart
          查看
          /etc/init.d/iptables status

          9.啟動(dòng)SVN服務(wù)
          svnserve -d -r /home/svn
          -d:守護(hù)進(jìn)程
          -r:svn根目錄
          假設(shè)服務(wù)端IP為192.168.1.100,那么如下設(shè)置后game的訪問(wèn)目錄就為:
          svn://192.168.1.100/game

          10.安裝客戶端 TortoiseSVN

          11.建立子目錄
          在客戶端PC上找個(gè)目錄,用管理員帳戶從svn://192.168.1.100/game遷出game目錄,分別新建art,design,server,client 4個(gè)子目錄,然后提交。
          這時(shí)候你可以用其他組的帳戶測(cè)試下是否正常使用了。

          12.安裝好的svn服務(wù)端,默認(rèn)是不會(huì)開(kāi)機(jī)自啟動(dòng)的,每次開(kāi)機(jī)自己?jiǎn)?dòng)會(huì)很麻煩,我們可以把它設(shè)成開(kāi)機(jī)啟動(dòng)
          首先:編寫(xiě)一個(gè)啟動(dòng)腳本svn_startup.sh,我放在/root/svn_startup.sh
          #!/bin/bash
          /usr/bin/svnserve -d -r /home/svn/
          這里的svnserve路徑保險(xiǎn)起見(jiàn),最好寫(xiě)絕對(duì)路徑,因?yàn)閱?dòng)的時(shí)候,環(huán)境變量也許沒(méi)加載。
          絕對(duì)路徑怎么查?
          which svnserve
          這里還有可能碰到一個(gè)問(wèn)題,如果你在windows下建立和編寫(xiě)的腳步,拿到linux下,用vi或者vim修改后可能會(huì)無(wú)法執(zhí)行,這是文件格式的問(wèn)題
          vi svn_startup.sh

          輸入:set ff 回車(chē)

          如果顯示的結(jié)果不是fileformat=unix

          再次輸入

          set ff=unix

          就OK了
          然后修改該腳本的執(zhí)行權(quán)限
          chmod ug+x svn_startup.sh

          或者萬(wàn)能的

          chmod 777 svn_startup.sh
          最后:加入自動(dòng)運(yùn)行
          vi /etc/rc.d/rc.local
          在末尾添加腳本的路徑,如:
          /root/svn_startup.sh
          現(xiàn)在,你可以重啟一下試試了。 不懂得怎么確認(rèn)成功?敗給你了
          ps -ef|grep svnserve
          好多活兒
          posted @ 2014-11-19 11:50 Jimi 閱讀(58613) | 評(píng)論 (9)編輯 收藏
          那種酸爽,根本說(shuō)不出來(lái)—————————————————————————— by: Jimi沒(méi)有Bond
          Jimi是誰(shuí)? 就是灑家啊!

          剛開(kāi)始學(xué)習(xí)寫(xiě)Java的時(shí)候,用的eclipse,正式工作后,主要用的myeclipse,去年初在前輩的推薦下,在2折的時(shí)候買(mǎi)了正版的 IntelliJ IDEA 和 Pycharm,12.0版終生使用,一年更新。
          使用前早就久聞其名,據(jù)說(shuō)是最好的Java開(kāi)發(fā)工具。
          起先用的非常不習(xí)慣,但是花了錢(qián)的,硬著頭皮用了下去。
          短短一個(gè)禮拜,徹底愛(ài)上了它!就是辣么酸爽!--------------------------------------------------------------謹(jǐn)以此文獻(xiàn)給對(duì)于擁抱IDEA還存在疑慮的筒子們

          JetBrains(這個(gè)公司的名稱(chēng)翻譯過(guò)來(lái)就是“大腦噴射?”) 公司的宣傳語(yǔ)是這么說(shuō)的:Develop with pleasure!(帶著快樂(lè)開(kāi)發(fā)!)

          Why?
          他們咋這么有信心呢?
          這到底是怎樣的一個(gè)工具?

          跟我一起來(lái)數(shù)數(shù)IDEA特別長(zhǎng)的地方:

          一.黑色主題 Darcula

          眼睛舒服,最重要的是酷!
          設(shè)置方式:FILE--Settings--Edit--Colors&Fonts--Scheme name



          二.智能提示

          創(chuàng)建或引入項(xiàng)目的時(shí)候,會(huì)自動(dòng)引入缺少的包,真找不著的還可以search in the net
          鍵入代碼的時(shí)候,區(qū)分大小寫(xiě)的智能提示,自動(dòng)引入包,如果有重名的會(huì)列出所有選擇,但是比 myeclipse 的更聰明,至于怎么個(gè)聰明法,你自個(gè)兒試試就知道了

          三.工具集成

          基本上正式開(kāi)發(fā)的常用工具基本都集成了,而且基本都在你非常容易觸到的位置。
          說(shuō)說(shuō)我比較常用的:

          1.ant
          你懂的

          2.maven
          你也懂的

          3.SVN
          相比之下,IDEA的SVN的提交提供了更多的選項(xiàng)和功能
          提交的界面兩側(cè)會(huì)顯示當(dāng)前文件和修改的部分對(duì)比,可以非常方便地檢查和修改文件。
          提交前:
          (1).可選擇自動(dòng)格式化
          (2).可選擇自動(dòng)忽略沒(méi)有使用的imports
          (3).可選擇分析代碼
          (4).檢查是否有TODO
          提交后甚至可以選擇將改變上傳到特定的目錄


          4.系統(tǒng)終端
          有了這個(gè)東西,你就不必頻繁地切換窗口了
          打開(kāi)方式:Tools--Open Terminal
          快捷鍵:Alt+F12

          5.SSH工具
          打開(kāi)方式:Tools--Start SSH session

          6.數(shù)據(jù)庫(kù)連接工具
          打開(kāi)方式:View--Tool Windows--Database

          7.IDEA talk
          神奇的東西,你可以聯(lián)系局域網(wǎng)內(nèi)其它的IDEA使用者,可以方便地把你的代碼show給你的同事
          打開(kāi)方式:View--Tool Windows--IDEA talk

          8.Changes
          非常方便的changes視圖,它會(huì)變色顯示你所有改動(dòng)過(guò)的文件,而且可以方便的與 本地歷史 或 線上歷史 做對(duì)比
          打開(kāi)方式:View--Tool Windows--Changes

          還有g(shù)it、github、cvs、groovy consle以及等等,真沒(méi)有的你還可以:
          FILE--Settings--Plugins

          四.強(qiáng)大的繪圖工具

          讀源碼看不懂項(xiàng)目結(jié)構(gòu)?寫(xiě)文章畫(huà)類(lèi)圖好麻煩?
          右鍵diagram幫助你

          上個(gè)例圖:

          右鍵選擇 Show Categories 有驚喜,什么值域、方法、構(gòu)造器、內(nèi)部類(lèi)統(tǒng)統(tǒng)有

          五.無(wú)縫接入eclipse和myeclipse

          IDEA可以直接打開(kāi)有.project文件的項(xiàng)目,也可以將自身項(xiàng)目導(dǎo)出成eclipse的項(xiàng)目。
          而且因?yàn)镮DEA的項(xiàng)目配置文件為1個(gè).iml文件加一個(gè)獨(dú)立文件夾.idea,
          所以只要你將兩者放入ignore目錄,即使在你個(gè)人使用IDEA而團(tuán)隊(duì)使用其他IDE的情況下,也并不會(huì)對(duì)其他人造成麻煩。

          導(dǎo)出方法:FILE--Export to eclipse

          六.更小的體積,更快的速度

          用過(guò)myeclipse的你明白的

          綜上,我想你應(yīng)該能夠明白,為啥用IDEA寫(xiě)代碼,就是那么愉快,就是那么酸爽,就是那么令人停不下來(lái)!


          接著分享開(kāi)發(fā)中我比較常用的一些快捷鍵:

          一.找文件找代碼找引用相關(guān)

          1.雙擊shift
           在項(xiàng)目的所有目錄查找,就是你想看到你不想看到的和你沒(méi)想過(guò)你能看到的都給你找出來(lái)

          2.ctrl+f
          當(dāng)前文件查找特定內(nèi)容

          3.ctrl+shift+f
          當(dāng)前項(xiàng)目查找包含特定內(nèi)容的文件

          4.ctrl+n
          查找類(lèi)

          5.ctrl+shift+n
          查找文件

          6.ctrl+e
          最近的文件

          7.alt+F7
          非常非常頻繁使用的一個(gè)快捷鍵,可以幫你找到你的函數(shù)或者變量或者類(lèi)的所有引用到的地方

          二.編輯相關(guān)

          1.shift+enter
          另起一行

          2.ctrl+r
          當(dāng)前文件替換特定內(nèi)容

          3.ctrl+shift+r
          當(dāng)前項(xiàng)目替換特定內(nèi)容

          4.shift+F6
          非常非常省心省力的一個(gè)快捷鍵,可以重命名你的類(lèi)、方法、變量等等,而且這個(gè)重命名甚至可以選擇替換掉注釋中的內(nèi)容

          5.ctrl+d
          復(fù)制當(dāng)前行到下一行

          6.ctrl+x
          剪切當(dāng)前行

          7.ctrl+c \ ctrl+v 
          大家都懂的

          8.ctrl+z
          撤銷(xiāo)

          9.ctrl+shift+z
          取消撤銷(xiāo)

          10.ctrl+k
          提交代碼到SVN

          11.ctrl+t
          更新代碼

          12.alt+insert
          非常非常以及相當(dāng)方便的一個(gè)組合鍵,不信您往下看
          在類(lèi)中使用:


          可以自動(dòng)生成構(gòu)造器、getter/setter等等常用方法
          在項(xiàng)目目錄上使用:


          可用于新建各種文件。

          13.alt+enter
          又是一個(gè)大殺器,有多殺?
          例1:
          發(fā)現(xiàn)代碼很“黃”怎么辦?

          鼠標(biāo)移上去喵一下:

          試試alt+enter:

          選擇simplify看看

          我勒個(gè)去,代碼簡(jiǎn)潔了有木有啊!

          PS:黃色警告編譯可以通過(guò),不影響程序的正常運(yùn)行,一般都是一些對(duì)于代碼優(yōu)化的建議,我遇到過(guò)的有:
          (1).can be simplify
          代碼可以簡(jiǎn)化
          (2).Variable is never use
          聲明的變量從未被使用
          (3)unnecessary boxing
          不必要的聲明包裝

          以及等等等,多留意下,對(duì)于編碼的某些細(xì)節(jié)能夠更了解。

          例2:
          寫(xiě)個(gè)類(lèi)實(shí)現(xiàn)某個(gè)接口,加上 implements Runnable 后你就會(huì)發(fā)現(xiàn)這條紅色的波浪線:

          咱試試在這行上來(lái)個(gè) alt+enter:

          感動(dòng)地哭了有木有?你想到的沒(méi)想到的IDEA都幫你想到了。
          看到代碼里提示的各種紅XX,就試試alt+enter吧!什么未拋異常啊沒(méi)有try catch啊都能搞得定。

          14.ctrl+alt+L

          自動(dòng)格式化代碼,我已經(jīng)養(yǎng)成了寫(xiě)完代碼就來(lái)一發(fā)的習(xí)慣。
          你可以個(gè)性化設(shè)置你自己的代碼風(fēng)格:File--Settings--CodeStyle

          ——————————切——————————切——————————切——————————切——————————切——————————

          凡事有利有弊,IDEA同樣是把雙刃劍,最后說(shuō)說(shuō)它不好的地方

          1.最重要的就是“貴”!
          專(zhuān)業(yè)版?zhèn)€人許可2折可以接受,5折小貴,不打折桑不起!!!囧RZ~
          美刀的消費(fèi)水準(zhǔn)令國(guó)內(nèi)大多在屌絲線上掙扎的猿類(lèi)們望而卻步。
          好在JetBrains是有社區(qū)版的,最近對(duì)于學(xué)生也有免費(fèi)的Key。
          對(duì)于使用破解版的小伙伴,建議自己用用就好了,不必太聲張。

          用戶養(yǎng)成良好的軟件付費(fèi)習(xí)慣,才能讓我們的工作變得越來(lái)越有價(jià)值。

          2.集成太完善了
          集成的工具完全能夠應(yīng)付大多數(shù)的工作需求,對(duì)于不求甚解又偷懶的筒子們,直接使用,可能很多工具的細(xì)節(jié),你都不會(huì)了解,也不會(huì)再去了解了。
          比如:maven,ant

          3.不自帶JDK
          不是缺點(diǎn)的缺點(diǎn),myeclipse是集成的


          差不多了,該擼代碼了。
          以上這些,就是我使用IDEA一年半來(lái)幾乎所有的心得了。
          能力有限,磚頭輕拍。
          如果你有殺傷力更強(qiáng)大的手段,歡迎交流。

          后記:最近偶然發(fā)現(xiàn),這篇文章被人轉(zhuǎn)載了,而且沒(méi)注明出處,令人蛋疼。
          在此重申下,轉(zhuǎn)載,請(qǐng)注明出處。
          來(lái)自:http://www.aygfsteel.com/rockblue1988/archive/2014/10/24/418994.html 



          posted @ 2014-10-24 12:49 Jimi 閱讀(264140) | 評(píng)論 (15)編輯 收藏
          1.rm 刪除
          參數(shù):
          -r:遞歸
          -f:強(qiáng)制

          2.cd 打開(kāi)目錄
          cd ../  打開(kāi)上級(jí)目錄

          3.mv 移動(dòng)或者重命名文件
          重命名: mv test.txt test_old.txt
          移動(dòng)文件:mv 文件路徑 新路徑

          4.cp 拷貝文件或目錄 參數(shù)與mv類(lèi)似
          例:cp -r folder folder2
          sz 下載到本地

          5.sz 下載到本地

          6.rz 上傳到服務(wù)器

          7.find 查找文件或者文件內(nèi)容
          查找文件中包含特定內(nèi)容的行(支持通配符):find . -name "game.log" -type f |xargs grep "hello world" 

          8.df 查看存儲(chǔ)狀態(tài)

          9.top查看內(nèi)存和CPU狀態(tài)

          10.ll 列出當(dāng)前目錄所有文件

          11.ls列出當(dāng)前目錄所有文件詳情

          12.chmod 777 修改文件讀寫(xiě)權(quán)限(全可讀可寫(xiě))

          13.more 查看文件 按空格鍵向下翻頁(yè)

          14.less 與more相反,用法一致

          15.sudo -i 提權(quán)

          16.netstat -nat|grep -i "9001"|wc -l   查看9001端口連接數(shù)

          17.history 查看歷史操作

          18.last 查看歷史登陸,可以看看服務(wù)器有沒(méi)有陌生IP登陸
          例:last|grep 192.168.1.1  查看192.168.1.1的登陸情況 

          19.sh 執(zhí)行腳本
          例:sh restart.sh

          20.ps 查看程序快照
          例:ps -ef|grep tomcat 查看運(yùn)行中名稱(chēng)包含tomcat的進(jìn)程
                ps -aux|grep svn 

          21.kill -9 進(jìn)程號(hào) 殺死進(jìn)程,常與ps命令配合使用
          例:假設(shè)要關(guān)閉的進(jìn)程號(hào)為 111
          kill -9 111

          22.date 顯示當(dāng)前時(shí)間

          23.mkdir 創(chuàng)建目錄

          24.ssh 用戶名@IP地址 遠(yuǎn)程連接
          例:ssh root@192.168.1.111

          25.tail 查看文件尾
          例:tail -100f game.log 查看文件最后100行,持續(xù)刷新,適合在服務(wù)器上看實(shí)時(shí)日志時(shí)使用


          26.head 與tail相反,用法一致

          27.vi 文本編輯
          最基本的操作:
          按i進(jìn)入編輯模式,編輯完成后,按ESC退出編輯模式
          輸入:wq 回車(chē)后保存修改
          輸入:q!  不保存退出
          輸入ZZ 保存退出

          28.ctrl+c 撤銷(xiāo)或退出當(dāng)前程序

          29.文件目錄下,按TAB有智能提示

          30.按 ↑ 符號(hào),會(huì)顯示使用過(guò)的命令

          31.rpm -qa 查看已安裝過(guò)的程序
          例:rpm -qa|grep subversion 查看是否已安裝svn

          32.安裝sz/rz命令
          yum install lrzsz

          33.修改用戶密碼
          passwd 用戶名
          例:passwd root

          34.which 查找命令所在的路徑
          例1:which ssh
          例2:which sh

          35.查看編碼方式
          echo $LANG
          posted @ 2014-10-23 16:52 Jimi 閱讀(4880) | 評(píng)論 (1)編輯 收藏
          并發(fā)模式中,有一個(gè)稱(chēng)做Future模式。啥是Future模式捏? future,翻譯成中文就是“未來(lái),將來(lái)”的意思,可以簡(jiǎn)單地理解為 “明天的事明天再做” 。
          比方說(shuō),你在做晚飯,而只有一個(gè)火爐,先燉個(gè)豬蹄要1小時(shí),在等待豬蹄的這個(gè)時(shí)間里,你可以去淘米、洗菜、刷牙、摳腳,待豬蹄燉好了,再繼續(xù)炒菜。
          在編碼中體現(xiàn)為:將耗時(shí)任務(wù)丟入單獨(dú)的線程,從而使主線程能夠繼續(xù)執(zhí)行其它的邏輯,待耗時(shí)任務(wù)執(zhí)行完成后再做相應(yīng)的處理。
          Future模式是一鐘十分常用的并發(fā)模式,所以JDK的并發(fā)包中自帶一套實(shí)現(xiàn)。上類(lèi)圖:



          這個(gè)自己畫(huà)的,既然畫(huà)了不能白畫(huà),囧!!!

          下面這個(gè)是用 IntelliJ IDEA 自帶工具生成的,真心太酸爽。


          只看函數(shù)名稱(chēng),也能基本了解FutureTask所提供的主要能力:
          1、可判斷執(zhí)行狀態(tài)(isDone())
          2、可取消(cancel())
          3、可讀取返回結(jié)果(get())
          4、可判斷是否取消(isCancelled)
          現(xiàn)在,我們可以解決上面這個(gè)豬腳的問(wèn)題了:

              public static class TestTask implements Callable<Boolean> {
                  @Override
                  public Boolean call() throws Exception {
                      //模擬時(shí)間消耗
                      System.out.println("--------漫長(zhǎng)的一小時(shí)--------");
                      Thread.sleep(10000);
                      System.out.println("--------豬腳燉完--------");
                      return true;
                  }
              }

              public static void main(String[] args) throws ExecutionException, InterruptedException {

                  System.out.println("--------開(kāi)始做晚飯--------");
                  System.out.println("開(kāi)始燉豬腳~~~");
                  System.out.println("--------豬腳下鍋--------");
                  FutureTask<Boolean> futureTask = new FutureTask<Boolean>(new TestTask());
                  Thread thread = new Thread(futureTask);
                  thread.start();
                  Thread.sleep(1000);
                  System.out.println("--------淘米--------");
                  Thread.sleep(1000);
                  System.out.println("--------洗菜--------");
                  Thread.sleep(1000);
                  System.out.println("--------刷牙--------");
                  Thread.sleep(1000);
                  System.out.println("--------摳腳--------");
                  //如果豬腳燉好了
                  if(futureTask.get()==true){
                      System.out.println("--------繼續(xù)炒菜--------");
                  }
              }
          執(zhí)行結(jié)果:
          --------開(kāi)始做晚飯--------
          開(kāi)始燉豬腳~~~
          --------豬腳下鍋--------
          --------漫長(zhǎng)的一小時(shí)--------
          --------淘米--------
          --------洗菜--------
          --------刷牙--------
          --------摳腳--------
          --------豬腳燉完--------
          --------繼續(xù)炒菜--------
          posted @ 2014-10-23 16:13 Jimi 閱讀(5270) | 評(píng)論 (3)編輯 收藏
          public class InsertionSortAlgorithmTest {

              public static String arrayToString(int[] array){
                 StringBuilder sb = new StringBuilder();
                  for(int a:array){
                      sb.append(a).append(" ");
                  }
                  return sb.toString();
              }

              public static int[] insertionSort(int[] array){
                  int key;
                  int j;
                  for (int i = 1; i < array.length; i++) {
                      key = array[i];
                      j = i - 1;
                      while (j >= 0 && array[j] > key) {
                          array[j + 1] = array[j];
                          j = j - 1;
                      }
                      array[j + 1] = key;
                      System.out.println(arrayToString(array));
                  }
                  return array;
              }

              public static void main(String[] args) {
                  int[] array = {2, 3, 1, 7, 5, 9, 4, 6, 8};
                  insertionSort(array);
              }

          }
          posted @ 2014-02-18 23:23 Jimi 閱讀(1530) | 評(píng)論 (0)編輯 收藏
          1.說(shuō)說(shuō)ArrayList、Vector、LinkedList的區(qū)別
          2.HashMap的實(shí)現(xiàn)原理
          3.HashMap出現(xiàn)哈希沖突是如何處理的
          4.觀察者模式的定義和實(shí)現(xiàn)
          5.單例模式的定義和實(shí)現(xiàn)
          6.spring的事務(wù)如何配置
          7.什么是AOP?
          8.寫(xiě)一個(gè)永不停止的線程
          9.mysql的優(yōu)化
          10.如何查找性能瓶頸
          11.請(qǐng)自我介紹
          12.netty 3 和 netty 4的區(qū)別
          13.ArrayBlockingQueue和LinkedBlockingQueue的區(qū)別
          14.緩存的實(shí)現(xiàn)方式
          15.什么時(shí)候會(huì)GC?
          16.內(nèi)存回收模型
          17.spring配置事務(wù)
          18.Mysql的事務(wù)處理
          19.ant自動(dòng)上傳服務(wù)器
          posted @ 2014-02-18 23:18 Jimi 閱讀(1565) | 評(píng)論 (0)編輯 收藏

          --啟用Ad Hoc Distributed Queries 
          --
          (使用以下兩句代碼的原因:下面的sql中,其中有幾個(gè)從其他數(shù)據(jù)庫(kù)導(dǎo)入數(shù)據(jù)的語(yǔ)句,所以必須得先啟用Ad Hoc Distributed Queries,使用結(jié)束后,最好關(guān)閉它 )
          exec sp_configure 'show advanced options',1
          reconfigure
          exec sp_configure 'Ad Hoc Distributed Queries',1
          reconfigure

           

          GO
          delete from syscode
          insert into syscode 
          select type,code,name,note,value1,value2 FROM opendatasource('SQLOLEDB','Data Source=192.168.1.101;User ID=sa; Password=***').[DATABASE_NAME].dbo.syscode


          --使用完成后,關(guān)閉Ad Hoc Distributed Queries:
          exec sp_configure 'Ad Hoc Distributed Queries',0
          reconfigure
          exec sp_configure 'show advanced options',0
          reconfigure
          posted @ 2013-02-03 11:27 Jimi 閱讀(2771) | 評(píng)論 (0)編輯 收藏
          import java.util.ArrayList;
          import java.util.Calendar;

          public class CAL {
              
              public static void main(String[] args) {
                  // TODO Auto-generated method stub
                  Calendar start = Calendar.getInstance();
                  System.out.println(start.getTimeInMillis());
                  ArrayList<Integer> number = new ArrayList<Integer>();
                  number.add(1);number.add(1);
                  for (int i = 2; i <= 100000; i++) {
                      number.add(number.get(i - 1) + number.get(i - 2));
                  }
                  Calendar end = Calendar.getInstance();
                  System.out.println(end.getTimeInMillis());
                  System.out.println("時(shí)間:" + (end.getTimeInMillis()-start.getTimeInMillis() ));
                  System.out.println("last:"+number.get(100000));
              }

          }
          posted @ 2013-01-25 11:15 Jimi 閱讀(1915) | 評(píng)論 (0)編輯 收藏
          項(xiàng)目上有一個(gè)這樣的需求:登錄的時(shí)候選擇一個(gè)單位名稱(chēng),然后輸入賬號(hào)完成登錄,下次登錄的時(shí)候,“單位選擇”框里自動(dòng)顯示為上次登錄的頁(yè)面。
          具體實(shí)現(xiàn)如下:

                      {
          xtype : 'combo',                              //這里是選擇單位的Combo
          id:'orgname',
          store : orgStore,
          name:'orgname',
          emptyText : '請(qǐng)選擇單位',
          displayField : 'orgname',
          valueField : 'dbname',
          editable : false,
          forceSelection : true,
          triggerAction : 'all',
          shadow : 'frame',
          hiddenName : 'dbname',
          listeners:{
              select:function(){                                                          //增加1個(gè)select函數(shù),當(dāng)選擇的時(shí)候,將選擇結(jié)果保存入cookie
              savedbname= Ext.getCmp('orgname').getValue();
                                           Ext.util.Cookies.set('savedbname',savedbname);
          }
              }
          }



           
          var orgStore = new Ext.data.JsonStore( {                                 //這是單位選擇Combo的數(shù)據(jù)源
          url : 'test/LoginOrgSelectServlet',
          root : 'orgselect',
          fields : [ 'orgname', 'dbname' ],
          autoLoad : true,
          listeners:{load:function(){                                                  //給store添加一個(gè)load監(jiān)聽(tīng)器
            var cookiedata = Ext.util.Cookies.get("savedbname");
            if (cookiedata!=null){Ext.getCmp('orgname').setValue(cookiedata);}   //當(dāng)cookie中的數(shù)據(jù)不為空的時(shí)候,設(shè)置combo的值
          }}
          });
          posted @ 2012-09-12 17:23 Jimi 閱讀(5205) | 評(píng)論 (1)編輯 收藏
          public List queryDeviceName(String where) {
          Session session =  this.getSession();
          List list = session.createSQLQuery("select number, name from devrepair " + where).list();
          return list;
          }

          List deviceList = this.getDevrepairService().queryDeviceName(where);
          StringBuilder sb = new StringBuilder();
          sb.append("{devices:[");
          for(Object nameinfo:deviceList){                                                            //查詢的結(jié)果為Object
          sb.append("{number:'").append(((Object[])nameinfo)[0]).append("',");          //將查詢結(jié)果轉(zhuǎn)化為Object的集合,取值
          sb.append("name:'").append(((Object[])nameinfo)[1]).append("'}");              
          sb.append(",");
          }
          posted @ 2012-09-03 17:25 Jimi 閱讀(618) | 評(píng)論 (0)編輯 收藏

          總體方案:從sql server 中導(dǎo)出建立數(shù)據(jù)庫(kù)的sql文件,在powerdesigner中生成PDM,再將PDM轉(zhuǎn)化為MySql的版本,然后生成數(shù)據(jù)庫(kù)的sql,在MySql中導(dǎo)入sql文件生成數(shù)據(jù)庫(kù)。將sql server 表中已存在的數(shù)據(jù)導(dǎo)出為CSV文件,將CSV文件導(dǎo)入MySql中實(shí)現(xiàn)數(shù)據(jù)遷移。
          用到的工具:Excel,PowerDesigner,SQLyog,記事本
          1.在sql server 2005中,右鍵點(diǎn)擊數(shù)據(jù)庫(kù)→任務(wù)→生成腳本  按提示點(diǎn)擊下一步,最后將腳本保存到文件xxx.sql



          2.打開(kāi)powerdesigner,點(diǎn)擊文件→reverse engineer→database

          選擇數(shù)據(jù)庫(kù)類(lèi)型為sql server 2005

          選擇第一步中生成的sql文件
          點(diǎn)擊確定,生成sql server 2005版本的PDM文件
          3.powerdesigner中,點(diǎn)擊工具→generate physical data model
          選擇類(lèi)型為mysql 5.0,點(diǎn)擊確定生成mysql 5.0版本的pdm,如果出現(xiàn)如下錯(cuò)誤

          將detail選項(xiàng)卡中的check model的打鉤去掉
          4.powerdesigner中選擇 數(shù)據(jù)庫(kù)→generate database

          點(diǎn)擊確定生成Mysql 5.0版本的數(shù)據(jù)庫(kù)腳本文件
          5.mysql 中,用source命令從sql文件創(chuàng)建相關(guān)的表 “source d:/xxx.sql”檢查上一步驟中生成的腳本文件,由于是從sql server中生成,數(shù)據(jù)庫(kù)名稱(chēng)可能是dbo,將dbo改為你打算創(chuàng)建的數(shù)據(jù)庫(kù)名稱(chēng)
          6.sql server中,,右鍵點(diǎn)擊數(shù)據(jù)庫(kù)→任務(wù)→導(dǎo)出數(shù)據(jù) 按提示導(dǎo)出為excel文件,如:xx.xls
          7.excel中打開(kāi),選擇文件→另存為csv文件  毋須保留列名,方式選擇utf-8,否則可能出現(xiàn)亂碼的問(wèn)題
          8.再將csv文件導(dǎo)入mysql,有多種方式,圖形化界面SQLyog中,直接右鍵表→從CSV中導(dǎo)入數(shù)據(jù) 即可
          posted @ 2012-08-31 10:34 Jimi 閱讀(9155) | 評(píng)論 (3)編輯 收藏
          刪除了A項(xiàng)目,運(yùn)行B項(xiàng)目的時(shí)候總是有A項(xiàng)目的啟動(dòng)信息,甚至物理刪除A項(xiàng)目后都無(wú)法解決,猜測(cè)是A項(xiàng)目的項(xiàng)目文件被保存在myeclipse自帶的tomcat中,網(wǎng)上查了查,沒(méi)有找到相關(guān)的解決辦法,憑感覺(jué)找到以下目錄:
          \Workspaces\MyEclipse 8.5\.metadata\.me_tcat\webapps
          發(fā)現(xiàn)原來(lái)刪除的A項(xiàng)目的文件都保存在該目錄下,此外該目錄還包括當(dāng)前運(yùn)行的項(xiàng)目,刪除相關(guān)A項(xiàng)目的文件即可解決。
          看來(lái) \Workspaces\MyEclipse 8.5\.metadata\.me_tcat\webapps 就是Myeclipse的發(fā)布目錄
          posted @ 2012-08-27 11:51 Jimi 閱讀(1949) | 評(píng)論 (0)編輯 收藏
          你必須學(xué)會(huì)翻##墻,感謝領(lǐng)導(dǎo)!
          posted @ 2012-08-07 10:39 Jimi 閱讀(1420) | 評(píng)論 (2)編輯 收藏
          小明和小強(qiáng)都是王老師的學(xué)生,老師的生日是M月N日,他們都知道老師的生日是以下十組中的一個(gè),老師把M告訴了小明,把N告訴了小強(qiáng),然后問(wèn)他們是否知道自己的生日,小明說(shuō)“如果我不知道小強(qiáng)也不知道”,小強(qiáng)說(shuō)“本來(lái)我不知道,你說(shuō)了這話我就知道了”,小明說(shuō)“那我也知道了 ”。問(wèn)老師的生日是以下的哪個(gè)。

          3,4
          3,5
          3,8
          6,4
          6,7
          9,1
          9,5
          12,1
          12,2
          12,8

          正在上班 orz..,偶然看到一個(gè)題目,就動(dòng)動(dòng)腦子吧。
          按月份排:
          3,4 3,5 3,8
          6,4 6,7
          9,1 9,5
          12,1 12,2 12,8
          按日期排:
          9,1 12,1
          12,2
          3,4 6,4
          3,5 9,5
          6,7
          3,8 12,8

          小明說(shuō)“如果我不知道小強(qiáng)也不知道”  按月份排,小明一定不知道,小明知道月份以后肯定小強(qiáng)不知道,由于12,2 6,7的日期是唯一的,可見(jiàn)月份不是6月或12月,生日可能是以下5個(gè):
          按月份排:
          3,4 3,5 3,8 
          9,1 9,5 
          小強(qiáng)說(shuō)“本來(lái)我不知道,你說(shuō)了這話我就知道了”,除去6,7 12,2,小強(qiáng)原本的選擇如下,
          按日期排:
          9,1 12,1
          3,4 6,4
          3,5 9,5
          3,8 12,8
          現(xiàn)在聽(tīng)完小明說(shuō)的話,剔除6月和12月的數(shù)據(jù),老師的生日可能的日期如下:
          按日期排:
          9,1
          3,4
          3,5 9,5
          3,8
          現(xiàn)在小強(qiáng)知道了,由于3,5 9,5日期重復(fù),所以日期一定不是5,生日的可能的集合為:3,4 3,8 9,1

          小明說(shuō)“那我也知道了 ” 小明原本可能的選擇如下,
          按月份排:
          3,4 3,5 3,8 
          9,1 9,5 
          現(xiàn)在小明以小強(qiáng)的邏輯推斷,也可推知日期一定不是5,而小明自己知道月份,如果為3月,那么小明自己也無(wú)法知道老師的生日,所以只能是9月,
          老師的生日為9,1。



          posted @ 2012-07-25 12:48 Jimi 閱讀(1773) | 評(píng)論 (4)編輯 收藏
          JSP頁(yè)面定義了如下幾個(gè)作用域:
          頁(yè)面作用域(page scope)、請(qǐng)求作用域(request scope)、會(huì)話作用域(session scope)、應(yīng)用程序作用域(application scope)
          頁(yè)面作用域中的對(duì)象僅在當(dāng)前頁(yè)面可用;請(qǐng)求作用域中的對(duì)象在所有處理同一請(qǐng)求的頁(yè)面中都可用;會(huì)話作用域中的對(duì)象用于同一瀏覽器發(fā)出的所有請(qǐng)求;應(yīng)用程序作用域中的對(duì)象被應(yīng)用程序的所有用戶共享。
          通過(guò)設(shè)置<jsp:useBean>行為的scope屬性,制定bean應(yīng)該放在哪個(gè)作用域中,例如:
          <jsp:useBean id="test" scope="request"  class="com.testBean" />
          會(huì)話跟蹤過(guò)程解釋?zhuān)河捎贖TTP是一種無(wú)狀態(tài)協(xié)議,即服務(wù)器處理完瀏覽器的請(qǐng)求后將忘掉所發(fā)生的事務(wù),當(dāng)瀏覽器再次發(fā)出請(qǐng)求時(shí),Web服務(wù)器并不知道新的請(qǐng)求與之前的請(qǐng)求有何關(guān)系。解決這個(gè)問(wèn)題主要有兩種方法:
          1、服務(wù)器在應(yīng)答中返回與該用戶有關(guān)的所有信息,并讓瀏覽器將其作為下一個(gè)請(qǐng)求的一部分發(fā)回去
          2、在服務(wù)器的任何位置保存狀態(tài)信息,并且發(fā)回一個(gè)標(biāo)識(shí)符,瀏覽器在下一請(qǐng)求中返回該標(biāo)識(shí)符,然后借由該標(biāo)識(shí)符定位服務(wù)器上的狀態(tài)信息
          在這兩種情況下,可以用以下三種方式將狀態(tài)信息發(fā)送給瀏覽器:
          1、作為cookie    
          2、嵌入HTML表單作為隱藏字段
          3、進(jìn)行編碼,編入應(yīng)答主體的URL中,一般作為連接到其它應(yīng)用程序的鏈接(也稱(chēng)作URL復(fù)寫(xiě),URL rewriting)

          在瀏覽器和服務(wù)器間來(lái)回發(fā)送所有狀態(tài)信息的效率是極低的,所以大多數(shù)現(xiàn)代服務(wù)器都將信息保留在服務(wù)器上,只在瀏覽器和服務(wù)器間傳遞標(biāo)識(shí)符,這就是會(huì)話跟蹤(session tracking),JSP隱藏了cookie會(huì)話跟蹤的所以細(xì)節(jié),并實(shí)現(xiàn)了對(duì)URL復(fù)寫(xiě)的支持,此外,JSP規(guī)范允許使用安全套接字協(xié)議層(Secure Socket Layer,SSL)內(nèi)置的會(huì)話機(jī)制。在會(huì)話的生命周期中,保存在會(huì)話作用域中的信息可被同一瀏覽器的所有頁(yè)面所用。
          在線購(gòu)物(P179):
          內(nèi)存使用策略:
          1、只把那些真正需要被每個(gè)會(huì)話單獨(dú)擁有的對(duì)象放在會(huì)話作用域中
          2、將會(huì)話的有效期設(shè)成比默認(rèn)值更短
          3、提供一種顯示的結(jié)束會(huì)話的方法。一個(gè)好的示例就是注銷(xiāo)功能,或者是當(dāng)某件事務(wù)完成時(shí),使會(huì)話失效。在servlet和其他自定義代碼中,可以使用HttpSession invalidate()方法。
          posted @ 2012-05-21 00:35 Jimi 閱讀(1859) | 評(píng)論 (1)編輯 收藏
          JSP有三種類(lèi)型的元素:指令元素(directive element)、行為元素(action element)、和腳本元素(script element)。
          指令元素:
          <%@ page...%>  定義了獨(dú)立于頁(yè)面的屬性,例如會(huì)話跟蹤、錯(cuò)誤處理頁(yè)面、對(duì)緩存的要求等
          <%@ include...>  在翻譯階段引入文件
          <%@ taglib...>    聲明一個(gè)在頁(yè)面中使用的包含自定義行為的標(biāo)記庫(kù)
          標(biāo)準(zhǔn)行為元素:
          <jsp:usebean>  使一個(gè)JavaBeans在當(dāng)前頁(yè)面可用    
          <jsp:getProperty>  從JavaBeans中獲得某個(gè)屬性值,并將其添加到應(yīng)答中
          <jsp:setProperty>  設(shè)置JavaBeans的屬性值
          <jsp:include>  在請(qǐng)求處理階段引入來(lái)自一個(gè)servlet或頁(yè)面的應(yīng)答結(jié)果
          <jsp:forward>  將對(duì)請(qǐng)求的處理轉(zhuǎn)交給一個(gè)servlet或JSP頁(yè)面
          <jsp:param>  使用<jsp:forward> 或<jsp:include> 時(shí),向這個(gè)請(qǐng)求添加參數(shù)
          <jsp:plugin>
          自定義行為元素和標(biāo)準(zhǔn)標(biāo)記庫(kù):JSTL,JSP標(biāo)準(zhǔn)標(biāo)記庫(kù)(JSP Standard Tag Library),可以用擴(kuò)展API開(kāi)發(fā)自定義行為
          腳本元素:
          <%...%>  小腳本,用于嵌入腳本代碼
          <%=...%>  用于嵌入JAVA表達(dá)式
          <%!...%>  聲明變量和方法
          posted @ 2012-05-20 03:47 Jimi 閱讀(281) | 評(píng)論 (0)編輯 收藏
          http: HyperText Transport Protocol (超文本傳輸協(xié)議) 是一種無(wú)狀態(tài)協(xié)議,即服務(wù)器發(fā)送應(yīng)答后不會(huì)保留關(guān)于客戶端的任何信息
          URI:Uniform Resource Identifier (統(tǒng)一資源標(biāo)示符) 
          URL:Uniform Resource Locator (統(tǒng)一資源定位器)   是URI的特殊化,標(biāo)準(zhǔn)端口號(hào)為80 
          Request:
          請(qǐng)求頭信息
          Accepttext/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
          Accept-Encodinggzip, deflate
          Accept-Languagezh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
          Connectionkeep-alive
          Content-Length55
          Content-Typeapplication/x-www-form-urlencoded; charset=UTF-8
          CookieJSESSIONID=6E9A50496EFFEBDB7E0FA60DFE506B74
          Hostlocalhost.:8080
          Refererhttp://localhost.:8080/SWS/login.jsp
          User-AgentMozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20100101 Firefox/12.0
          X-Requested-WithXMLHttpRequest
          Accept:瀏覽器所能接受的語(yǔ)言和格式方面的信息
          User-Agent:瀏覽器類(lèi)型
          Host:URL所對(duì)應(yīng)的主機(jī)名
          請(qǐng)求參數(shù):兩種傳遞方式
          1、通過(guò)查詢字符串的形式添加在URI后面,查詢字符串以“?”開(kāi)始,由“&”符號(hào)分隔的經(jīng)過(guò)URL編碼的(URL-encoded)名稱(chēng)/值對(duì)組成
          2、作為消息主體的一部分發(fā)送
          請(qǐng)求方法:GET和POST,GET用于從服務(wù)器上取得資源,而不引起服務(wù)器的任何其它行為,POST用于請(qǐng)求服務(wù)器執(zhí)行某個(gè)處理過(guò)程。兩者最明顯的區(qū)別之一是參數(shù)的傳遞方式,GET請(qǐng)求通常以查詢字符串的形式傳遞參數(shù),而POST通常是把參數(shù)作為消息主體的一部分來(lái)發(fā)送。


          Response:
          響應(yīng)頭信息
          Content-Type text/html;charset=utf-8 -------應(yīng)答數(shù)據(jù)類(lèi)型
          DateSat, 19 May 2012 18:48:50 GMT
          Server Apache-Coyote/1.1              --------服務(wù)器信息
          Transfer-Encoding chunked
          posted @ 2012-05-20 03:14 Jimi 閱讀(609) | 評(píng)論 (0)編輯 收藏

          啟動(dòng)終端: Ctrl + Alt + T 

          切換正在運(yùn)行中的程序:Alt + Tab 

          切換桌面: Ctrl + Alt + 上/下/左/右 

          快速啟動(dòng):微標(biāo)鍵 

          彈出側(cè)邊欄:長(zhǎng)按微標(biāo)鍵 

          快速啟動(dòng)側(cè)邊欄程序:微標(biāo)鍵 + 對(duì)應(yīng)數(shù)字 
           
          進(jìn)入全屏終端:Ctrl + Alt + F1-F6 

          返回圖形界面:Ctrl + Alt + F7

          移動(dòng)當(dāng)前窗口到不同工作臺(tái):Ctrl + Alt + Shift + → / ←


          posted @ 2012-05-05 00:09 Jimi 閱讀(316) | 評(píng)論 (0)編輯 收藏
          F11              debug運(yùn)行
          CTRL+F11        運(yùn)行
          CTRL+F       當(dāng)前頁(yè)面搜索
          CTRL+H      搜索文件
          ALT+SHIFT+R   重命名
          F2       重命名
          F3         進(jìn)入方法
          CTRL+ /          注釋
          CTRL+Z         撤銷(xiāo)編輯
          CTRL+D         刪除整行
          CTRL+ALT+↓ 復(fù)制當(dāng)前行到下一行
          posted @ 2012-05-04 00:38 Jimi 閱讀(171) | 評(píng)論 (0)編輯 收藏
          向同一表中插入多條記錄:
          (sql server 2005)
          INSERT INTO users ([name],[filename],[type],location2)
          SELECT '日消耗','/pages/daycost','1','13.13.1' UNION ALL
          SELECT '月消耗','/pages/monthcost','1','13.12.1' 
          (sql server 2008和MySQL)
          INSERT INTO users 
          ([name],[filename],[type],location2) 
          VALUES
          (
          '日消耗','/pages/daycost','1','13.13.1' ), 
          (
          '日消耗','/pages/daycost','1','13.13.1' )
          PS: UNION ALL 是允許數(shù)據(jù)重復(fù)
          條件查詢所有數(shù)據(jù)庫(kù)名稱(chēng):
          (sql server 2005)
          USE master
          SELECT [name] FROM sys.databases WHERE [name] LIKE 'SWS%'
          (MySQL)
          show databases
          修改數(shù)據(jù):
          UPDATE users SET [name] = 'test' WHERE [name] ='admin'
          查詢所有存儲(chǔ)過(guò)程:
          select * from sys.objects where type = 'P';
          查看存儲(chǔ)過(guò)程的語(yǔ)句:
          exec sp_helptext 'createDaily1'
          去重查詢:
          SELECT DISTINCT 列名稱(chēng) FROM 表名稱(chēng)

          SELECT DISTINCT testtime
          FROM         testrec
          日期格式轉(zhuǎn)換:
          CONVERT(data_type(length),data_to_be_converted,style)
          Style IDStyle 格式
          100 或者 0mon dd yyyy hh:miAM (或者 PM)
          101mm/dd/yy
          102yy.mm.dd
          103dd/mm/yy
          104dd.mm.yy
          105dd-mm-yy
          106dd mon yy
          107Mon dd, yy
          108hh:mm:ss
          109 或者 9mon dd yyyy hh:mi:ss:mmmAM(或者 PM)
          110mm-dd-yy
          111yy/mm/dd
          112yymmdd
          113 或者 13dd mon yyyy hh:mm:ss:mmm(24h)
          114hh:mi:ss:mmm(24h)
          120 或者 20yyyy-mm-dd hh:mi:ss(24h)
          121 或者 21yyyy-mm-dd hh:mi:ss.mmm(24h)
          126yyyy-mm-ddThh:mm:ss.mmm(沒(méi)有空格)
          130dd mon yyyy hh:mi:ss:mmmAM
          131dd/mm/yy hh:mi:ss:mmmAM

          切割字符串:
          SUBSTRING expression , start , length )
          start是從1開(kāi)始,而不是0
          SELECT DISTINCT testtime
          FROM         testrec
          WHERE     (SUBSTRING(CONVERT(VARCHAR(11), testtime, 120), 1, 7) = '2012-05')


          posted @ 2012-04-20 11:04 Jimi 閱讀(308) | 評(píng)論 (0)編輯 收藏
          主站蜘蛛池模板: 中牟县| 成安县| 扬中市| 遵化市| 滕州市| 邵阳市| 新密市| 交城县| 新河县| 哈密市| 邵东县| 宁安市| 河北省| 巧家县| 井冈山市| 突泉县| 新乐市| 登封市| 伊宁市| 伊金霍洛旗| 松江区| 尼木县| 根河市| 昌乐县| 谷城县| 高台县| 景东| 海兴县| 江都市| 肥西县| 河池市| 城固县| 和田市| 永靖县| 苍梧县| 社旗县| 绥棱县| 嘉义县| 镇康县| 阆中市| 定陶县|