說(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位的.
有位朋友問(wèn)起,我就順便總結(jié)一下好了。個(gè)人知識(shí)有限,有謬誤歡迎指正。本人一直從事的服務(wù)端相關(guān)的工作,對(duì)前端只能說(shuō)是耳聞目染。參與的項(xiàng)目主要是頁(yè)游和手游。從程序開(kāi)發(fā)角度講起,程序一般常分為前端程序和后端程序。一.前端前端就是指玩家所使用的客戶(hù)端,主要包括處理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ō)的后端,常指的客戶(hù)端發(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ě)游戲邏輯然后與客戶(hù)端聯(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
現(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á)一下由衷的敬佩
最近的工作主要涉及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)這兩種方法哪種更好?
作為一名“萬(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:用戶(hù)權(quán)限配置
示例:
[groups]
#管理組
manager = boss
#服務(wù)端用戶(hù)組
server = server1,server2
#客戶(hù)端用戶(hù)組
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:用戶(hù)密碼
[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)證用戶(hù)權(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.安裝客戶(hù)端 TortoiseSVN
11.建立子目錄
在客戶(hù)端PC上找個(gè)目錄,用管理員帳戶(hù)從svn://192.168.1.100/game遷出game目錄,分別新建art,design,server,client 4個(gè)子目錄,然后提交。
這時(shí)候你可以用其他組的帳戶(hù)測(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
好多活兒
那種酸爽,根本說(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和myeclipseIDEA可以直接打開(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ì)于使用破解版的小伙伴,建議自己用用就好了,不必太聲張。
用戶(hù)養(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