1、scala 適合做 伺服器api么
Scala相對於Java的優勢是巨大的。熟悉Scala之後再看Java代碼,有種讀匯編的感覺…… 如果僅僅版是寫Spark應用,權並非一定要學Scala,可以直接用Spark的Java API或Python API。但因為語言上的差異,用Java開發Spark應用要羅嗦許多。
2、手機游戲伺服器端用node.js 還是用go,fibjs之類等比較好
好玩的游戲超多啊,每個時期吊炸天的游戲都不一樣,畢竟手游很快紅起來,又很快沒人玩了,每個人的口味都不一樣,比較實用的還是推薦給你這樣一個手游排行榜,這個是18183手游排行榜,裡麵包含2個大榜單,18183新游期待榜和18183熱門手游榜,親可以依據具體情況去選擇,這里每天都更新,現在最多人玩的游戲一看就知道了,選起來也方便,給你地址 http://top.18183.com/?=wd還有一個對應的,直接拿禮包,親可以看看http://ka.18183.com/list_game_2188.shtml
3、在linux上如何配置spark環境,在linux上安裝scala和spark老是失敗
方法/步驟
首先你的機器安裝了jdk,我的新機器,所以早上剛在centos上折騰了jdk,沒有的也可以去參考下
下載安裝包
scala-2.11.4.tgz
spark-1.2.0-bin-hadoop2.4.tgz
後面的包忘了之前哪找的了,需要的可以私我。將包傳到伺服器,解壓
tar zxvf scala-2.11.4.tgz
tar zxvf spark-1.2.0-bin-hadoop2.4.tgz
配置環境變數
vim /etc/profile
加上以下對應內容:
export JAVA_HOME=/home/yy/jdk1.8
export SCALA_HOME=/home/yy/scala
export SPARK_HOME=/home/yy/spark-1.2.0-bin-hadoop2.4
export PATH=$PATH:$JAVA_HOME/bin:$SCALA_HOME/bin:$SPARK_HOME/bin:$SPARK_HOME/sbin
執行source /etc/profile使配置生效
修改spark配置
進入spark-1.2.0-bin-hadoop2.4/conf
復制模板文件:
cp spark-env.sh.template spark-env.sh
cp slaves.template slaves
編輯spark-env.sh
添加上你的對應信息:
export JAVA_HOME=/home/yy/jdk1.8
export SCALA_HOME=/home/yy/scala
export SPARK_MASTER_IP=172.20.0.204
export SPARK_WORKER_MEMORY=2g
export HADOOP_CONF_DIR=/home/yy/spark-1.2.0-bin-hadoop2.4/conf
編輯slaves
添加上你的對應信息,所有的集群的機器:
172.20.0.204
172.20.0.205
到此為止,前面所有的安裝配置動作,在你的另一個機器上(所有的slave機器)同樣的做一遍,即我這里的205機器
進入spark-1.2.0-bin-hadoop2.4/sbin/目錄
執行:./start-all.sh
如果沒有設置ssh免密碼登陸,會要求輸入密碼
這時候jps查看多了個master和worker
瀏覽器查看集群信息
master地址+8080埠
啟動Running Applications
在bin目錄下執行:
MASTER=spark://172.20.0.204:7077 ./spark-shell
這時候就可以看到運行的app啦
同時可以查看jobs內容
slave機器上也運行app,這時候就可以看到運行的applications有兩個啦。
好了,環境就算先搭起來啦,後面就是去調用吧。
http://jingyan.baidu.com/article/7e440953308f122fc0e2ef81.html
4、如何配置 scala + maven + eclipse
1.安裝maven插件
安裝插件有好幾種方法,一種是在help->Eclipse marketplace 查找,另一種是在help->Install New Software,地址為:http://download.eclipse.org/technology/m2e/releases/
說明:網上也有人說因為eclipse是最新版,可能你下的m2e插件不穩定,導致在Install New SoftWare的時候安裝不了。查看jboss的官方博客,已經有新版的m2e插件出現在marketplace中。
一般來說,都是調用外部的settings.xml文件,這個時候就需要在window->preferences->maven->user settings選擇你本地的文件。
2.安裝scala插件
打開http://scala-ide.org/download/current.html,你會看到適合eclipse各種版本的scala插件下載地址,適合indigo的地址是:http://download.scala-ide.org/releases-29/stable/site
3.安裝jetty插件
maven項目比較推崇jetty伺服器,在eclipse里用命令運行,平時能查看源碼,但是debug的時候,會導致找不到maven 倉庫里的源碼(不知道大家有沒有遇到過類似的問題)。
解決辦法:安裝jetty插件,在help->Eclipse Marketplace 輸入jetty,安裝下,之後debug就能解決這個問題的。這樣會有另一個問題的發生,因為在pom里配置jetty插件需要配置系統變數如下:
<systemProperties>
<systemProperty>
<name>CONFIG_DIR_PATH</name>
<value>${basedir}/config</value>
</systemProperty>
</systemProperties>
這樣用命令行:mvn jetty:run 就可以讀到系統變數,但是用eclipse jetty插件就會導致找不到CONFIG_DIR_PATH。
5、Visual Studio 對 F#的支持真的好過 IntelliJ 對 Scala 的支持嗎
不覺得哦,我們用Intellij的Scala已經完成好幾個工業級項目了,而且是回純Scala開發的;但是VS的F#更像是插件,除了WebSharper,還是收答費很貴的,望而卻步。而且Windows平台的伺服器端部署的確很好資源那。
6、Java Groovy,Scala 的未來會怎樣
Scala有兩個流派:FP和Better Java。
FP派喜歡scalaz,喜歡shapeless,喜歡type level programming。這一派特點是程序高度抽象但可讀性奇差。適合PL研究者驗證概念,適合業余項目自嗨,也適合學習PL概念。不適合多人協作的工程項目。
Better Java派以前之所以存在,單純是因為Java語法設計太爛,爛到無法忍受。而JVM上當時也沒有其它更好的選擇。那些告訴你「寫了n年Java以後,我切換到Scala,現在每天都活在幸福中」的人,基本都是這一派。
但Scala
as a better Java的工程性也不好,因為特性太多太復雜,除非有高手帶隊,否則很難只用到它「better
java」的那個子集。解決一個問題的同時,往往引入更多的問題。所以會有Java8發布以後Linkedin所有新項目全部回歸Java這種事情。
Groovy是動態語言,工程性比Scala還差。但是因為有Gradle這種被廣泛採用的項目,所以會存活下去。但是請記住愛因斯坦曾經說過:
「任何超過兩百行的新項目,都不應該採用動態語言開發,無論是Ruby,Python,Perl,Groovy還是Clojure」。
哦,對了,也不要用Clojure。因為它是動態語言,而且是Lisp系的動態語言。「Lisp系」意味著,讀書的時候可以靠它開眼界。畢業工作以後,對於這一類語言,能躲多遠就躲多遠。
剛
剛發布的Kotlin看上去靠譜。它不講究FP有多純,目標就一個:「a better
java」。Kotlin在「到底引入多少FP特性」上面做得恰到好處。 看到Kotlin,我馬上就想起了這個演講:「Please stop
polluting our imperative languages with pure concepts」。
Kotlin有以下好處:
1. 強大的IDE。而且是JetBrains第一方支持,不是3年更新一次的第三方插件;
2. 庫多生態強。Kotlin的設計者非常重視和Java的互操作,所以Kotlin號稱可以無縫銜接所有Java庫。
3. 宇宙第一運行時:JVM。
4. Android上不能用Java8的新語法,Kotlin恰逢其時的出現,抓了一波完美的timing。如果Kotlin依靠Android開發爆發,那伺服器端,大數據界,也會收益,最後多面開花,勢不可擋。
但是Kotlin剛出來,到底有沒有它自稱的那麼好用還待觀察。另外,Kotlin社區現在集中力量攻堅Android,在伺服器和大數據方向沒什麼靠譜項目。所以還是得用Java8。
總之,「魔鏡啊魔鏡,誰是JVM上最好的語言」之最後決戰,將是Java10 vs Kotlin(Java9在語法特性上已經輸了)。而在這場最終決戰之前,C#已經靠著CoreCLR統一世界了。
7、scala 交互模式 代碼怎麼提示
Scala提供了很多學習材料幫助你學習核心語言內容,有很多在線的教程、示例和項目可以去研究。但是提供的最重要的一個工具是交互模式(REPL)。REPL是一個互動式解釋器,可以即時編譯、運行代碼並返回結果。假定你已經在機器上裝好了Scala,也設置了正確的路徑,那麼在命令行下運行scala命令就可以啟動Scala REPL。啟動Scala REPL後屏幕上會輸出如下內容:
後面的代碼示例中,我會用scala>提示這是輸入到REPL的內容。接下來的一行是REPL的輸出。我們在REPL里快速做幾個例子,看看會得到什麼輸出。
你應該注意到了在我們輸入解釋器的每個語句後,它會輸出一行信息,類似res0: java.lang.String = Hello。輸出的第一部分是REPL給表達式起的變數名。在這幾個例子里,REPL為每個表達式定義了一個新變數(res0到res3)。輸出的第二部分(:後面的部分)是表達式的靜態類型。第一個例子的類型是java.lang.String,最後一個例子的類型則是scala.util.matching.Regex。輸出的最後一部分是表達式求值後的結果的字元串化顯示。一般是對結果調用toString方法得到的輸出,JVM給所有的類都定義了toString方法。
圖2.1 REPL的返回值
如你所見,REPL是一種測試Scala語言及其類型系統的強有力手段。不僅如此,大部分構建工具都提供了機制讓你能載入當前工程的classpath,然後啟動REPL。這意味著你可以在REPL里訪問工程中引用的庫和你自己的代碼。你能夠在REPL里調用API和訪問遠端伺服器。這是很棒的快速測試Web服務或REST API的方法,也導向我稱為實驗驅動開發(Experiment Driven Development)的方法。
2.1.1 實驗驅動開發
實驗驅動開發就是開發者在寫測試或生產代碼前,先花點時間在交互環境或REPL里做實驗。這可以給你時間全面理解你需要打交道的軟體或庫的外部介面,並對其API的優點和缺點得到點切身體會。這是學習新發布的Web服務或RESTful API或最新的Apache庫的極好辦法,甚至可以用來學習你同事剛剛寫出來的東西。在理解了API是怎麼工作後,你就能更好地寫自己的代碼,或者開始寫測試,如果你遵循測試驅動開發的話。
現在推動開發人員擁抱測試驅動開發(TDD)的呼聲很高。TDD要求開發者先寫單元測試,然後寫實現類。在你開始寫測試前,你並不總是很清楚自己的API要定義成什麼樣的。TDD的一個組成部分就是通過寫測試來定義API,這樣你可以在(用戶的)上下文里來看你的代碼,可以感覺一下你自己願意不願意用你自己寫的API。由於表達力(較差)的原因,強類型語言在應用TDD時可能會比動態語言碰到更多麻煩。實驗驅動開發將「定義API」這個步驟向前期推動一步,提前到了寫測試代碼之前。REPL幫助開發者確保其設計的API在類型系統里能表達得出來。
Scala是一種語法非常靈活的強類型語言,因此有時候需要用點手段欺騙類型系統才能達成你真正想要的API設計。因為很多開發者缺乏強類型理論基礎,所以經常需要更多的實驗。實驗驅動設計(Experiment Driven Design)讓你在REPL里結合類型系統進行實驗,以便為你的API提煉出最有效的類型定義。實驗驅動設計主要用在給代碼里添加大特性或領域對象的時候,不適合在添加新方法或者修bug時使用。
實驗驅動設計在你定義領域特定語言時(DSL)也能幫上大忙。領域特定語言是用於特定領域的偽編程語言,這種語言專門用來解決手頭的某個領域,比如說,從資料庫里查詢數據。DSL可以是內部的,在很多Scala庫里都能看到的;也可以是外部的,比如SQL。在Scala社區,庫開發者圈子裡非常流行為自己的庫創建一種DSL。比如Scala的actors庫定義了一種線程安全的發送和接收消息的DSL。
用Scala定義DSL的挑戰之一在於有效地利用類型系統。設計良好的類型安全的DSL不僅應該富有表達力、易讀,而且應該能在編譯期而不是運行期捕捉到很多編程錯誤。同時靜態類型信息也可以極大地提高性能。REPL不僅能用來實驗怎樣表達一個特定領域,而且能幫助你確定你得表達式是否能編譯。進行Scala開發時,有些人採用下面這種創造性的流程。
在REPL里實驗API設計。
把能工作的API拷貝到項目文件。
為API寫單元測試。
修改代碼直到測試通過。
有效地使用實驗驅動開發能夠極大地提高你的API的質量。也會幫你在推進過程中更適應Scala的語法。不過這種做法有個大問題,就是並非所有能用Scala表達的API都能在REPL里表達。這是因為REPL是積極(eagerly)解析輸入,即時解釋執行的。
2.1.2 繞過積極(eaglerly)解析
Scala REPL嘗試盡可能快地解析輸入。這個特點加上其他一些限制,意味著有些東西很難甚至是無法在REPL里表達的。其中一個難以表達的重要的功能是伴生對象和伴生類。
伴生對象和伴生類是一組用完全一樣的名字定義的對象和類。用文件編譯的方式很容易實現,就像這樣簡單的聲明對象和類:
這些語句在REPL里也能執行,但是它們不會像真的伴生類那樣起作用。為證明這一點,我們來做一些只有伴生對象能做,普通對象做不了的事:訪問類的私有變數。
為了解決這個問題,我們需要把這些對象嵌入解釋器里某個能訪問到的其他作用域里。我們現在來把它們放入某個作用域里,以便能同時解釋/編譯類和伴生對象。
我們在這創建了一個holder對象。這給了我們一個可訪問的作用域,也把REPL的編譯推遲到holder對象關閉的時候。這樣我們就可以在REPL里測試/定義伴生對象了。
即使繞過了積極解析,也還有一些語言特性無法在REPL里重現。大多數這種問題都跟包、包對象、包可見性約束等問題有關。尤其是你無法像在源代碼文件里一樣有效地在REPL里創建包和包對象。這也意味著其他跟包有關的語言特性,特別是使用private關鍵字實現的可見性限制也無法在REPL里表達。包通常用來為你的代碼設定命名空間,以便與你可能使用的其他類庫分開。通常情況下你不需要在REPL里用到它,但是可能有些時候你需要把玩一些Scala的高級特性,比如包對象和隱式解析(implicit resolution),這時你可能會想做點實驗驅動開發。但是這種場景下,你無法在REPL里去表達。
請不要絕望。如我之前說過的,大部分構建工具可以讓你啟動一個針對你當前工程的Scala REPL。作為最後的手段,你可以在Scala文件里把玩那些高級概念,重編譯然後重啟REPL會話。
另外還有個工具叫做JRebel,它可以動態地在運行中的JVM里重載類文件。JRebel團隊非常慷慨地為Scala中的使用提供了免費許可。利用這工具結合某種形式的持續編譯—大部分Scala構建工具都提供的這一特性—你可以在修改工程文件後立刻在REPL會話里得到修改後的行為。對於maven-scala-plugin。Simple Build Tool提供了CC任務來做持續編譯。不管用哪種構建工具都必須和JRebel類載入器集成以便實現動態類重載。這個技巧有點過於細節,而且可能會變,所以如果需要幫助請參考你用的構建工具的文檔或者JRebel網站。
在嘗試創建大而復雜的系統前,你可以先利用REPL來實驗Scala代碼,獲得一些真實的感覺。軟體開發中,在開發一個新特性前,對當前系統得到一個稍微深入一些的理解(而不只是草草看過)往往是很重要的。Scala REPL可以讓你投入最少的時間達成對系統的理解,還可以提高你的開發技巧。本書全文穿插著很多REPL的例子,因為它是教學Scala的最好工具。我經常完全通過REPL運行示例,而不是採用Java開發時的標准做法,先寫main方法或者單元測試。
REPL也是開始學習面向表達式編程的極佳方法。
8、在eclipse 中運行scala程序 報錯如下:
錯誤信息說的非常清楚啊,你main函數的聲明不對,應該是
public static def main(String[] args):Unit
9、java或者scala寫socket客戶端發送頭消息和消息體到服務端並接收返回信息,這個頭消息怎麼寫
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
public class Client {
public static final String IP_ADDR = "localhost";//伺服器地址
public static final int PORT = 12345;//伺服器埠號
public static void main(String[] args) {
System.out.println("客戶端啟動...");
System.out.println("當接收到伺服器端字元為 \"OK\" 的時候, 客戶端將終止\n");
while (true) {
Socket socket = null;
try {
//創建一個流套接字並將其連接到指定主機上的指定埠號
socket = new Socket(IP_ADDR, PORT);
//讀取伺服器端數據
DataInputStream input = new DataInputStream(socket.getInputStream());
//向伺服器端發送數據
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
System.out.print("請輸入: \t");
String str = new BufferedReader(new InputStreamReader(System.in)).readLine();
out.writeUTF(str);
String ret = input.readUTF();
System.out.println("伺服器端返回過來的是: " + ret);
// 如接收到 "OK" 則斷開連接
if ("OK".equals(ret)) {
System.out.println("客戶端將關閉連接");
Thread.sleep(500);
break;
}
out.close();
input.close();
} catch (Exception e) {
System.out.println("客戶端異常:" + e.getMessage());
} finally {
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
socket = null;
System.out.println("客戶端 finally 異常:" + e.getMessage());
}
}
}
}
}
}
10、scala 適合做 伺服器api么
Scala相對於Java的優勢是巨大的。熟悉Scala之後再看Java代碼,有種讀匯編的感覺…… 如果僅僅是寫Spark應用,內並非一定要容學Scala,可以直接用Spark的Java API或Python API。但因為語言上的差異,用Java開發Spark應用要羅嗦許多。