说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

专访庄晓丹:Java程序员眼中的Clojure

HTML文档下载 WORD文档下载 PDF文档下载
近日,CSDN采访了LeanCloud后端工程师庄晓丹。谈及为何从Java转向Clojure,他说是为了提升生产效率。同时,他还分享了基于Clojure开发的LeanCloud核心技术以及丰富的Clojure开发经验。

庄晓丹,LeanCloud后端工程师,目前主要使用Clojure语言从事移动服务后端研发工作,曾经在企业信息、Web 游戏以及电子商务企业从事软件研发,主要关注分布式系统、移动后端架构和性能优化、Clojure等函数式语言实践等领域。

近日,CSDN采访了庄晓丹,请他分享基于Clojure开发的LeanCloud核心技术,以及丰富的Clojure开发经验。

“Java语言相比,Clojure的优势我愿意归纳为:生产效率的提升”,庄晓丹如是说。

CSDN:请先自我介绍下,目前所在的公司以及所负责的领域。

庄晓丹:我目前在LeanCloud公司负责产品研发,主要从事后端服务的开发工作。

CSDN:团队现在有多少人?你们是如何分工的?

庄晓丹:我们的研发团队总共有17个人,分成北京和苏州昆山两个办公室。一部分同事主要从事客户端SDK研发工作;一部分同事主要从事LeanCloud后端服务的研发,还有几位同事负责运维和部署等工作。

CSDNLeanCloud是个什么样的项目?主要功能有哪些?

庄晓丹:LeanCloud提供一站式的后端云服务包,涵盖对象存储、文件存储、用户帐号系统、消息推送、移动统计以及聊天等移动开发需要用到的主要功能。此外还提供一些小组件,比如第三方平台登录、用户反馈组件等,来帮助开发者快速开发应用。我们的SDK也覆盖了iOS、Android、Web、Unity3D等主要平台。

CSDN:与其他云服务平台相比,它有哪些优势?

庄晓丹:作为BaaS服务,很重要的一点是以开发API的方式提供易于使用、稳定的后端服务,用户无需操心硬件、数据库软件、缓存、容灾、运维等等后端开发的“琐事”,而专注于利用API来完成所需要的业务逻辑,并且可以轻易地跨平台使用。此外,我们希望提供的是一站式的服务,打包整体开放给开发者,免于各式各样服务集成的痛苦。

CSDNLeanCloud是采用哪种语言开发的?它的核心技术架构有哪些?

庄晓丹:LeanCloud采用了多种语言混合来构建整个后端系统,包括Clojure、Java、Node.js、Scala。其中Clojure构建了整个网站门户、存储开放API、推送、聊天等核心服务,Node.js构建了云端代码服务(类似应用代码托管),我们还使用Scala编写的Spark任务来处理离线数据分析,此外,还有大量的统计类MapReduce任务使用Java编写并运行在Hadoop集群上。不同服务之间使用RESTful协议、RPC框架或者队列进行通信。

LeanCloud的整个后端架构是一个水平可扩展的设计,所有服务都以集群的方式运行,我们可以轻易地通过添加节点来扩容整个服务的处理能力,得益于Clojure的nREPL,我们也能做到核心代码的热替换。

CSDN:你之前是Java技术领域的实践者,为何选择弃Java转投Clojure?与Java相比,Clojure有哪些优势?

庄晓丹:“放弃”Java有点言过其实,在接触Clojure并学习之后,刚好有这样的机会可以在工作里使用和实践,自然而然地慢慢地脱离Java语言,而专注于使用Clojure语言进行开发工作。此外,Clojure程序员无法真正的“放弃”Java,因为Clojure语言本身乃至类库都是寄生于Java之上,换句话说,仍然是每天都在同Java平台打交道,只是用另一种语言。

与Java语言相比,Clojure的优势我愿意归纳为:生产效率的提升。

从表面上看,相比Java,同样的代码片段,Clojure代码总会显得更简洁,我们做过估计,同样的项目,Java的代码行数和Clojure代码行数是5:1甚至更高的比例。

其次,Clojure的不可变数据结构,可以让你避免更多隐藏的修改带来的副作用Bug,鼓励你编写无副作用的小函数组合起来,因为没有状态信息的干扰,这样的代码也将更易于测试。

内置REPL也方便你随时做各种代码尝试,nREPL远程执行还可以实时查看应用的实时运行信息、变量当前状况甚至代码热替换修复Bug等。Clojure的工具链都相当轻量,鼓励一种轻松编程的氛围。

Clojure源自Lisp的强大的宏能力,可以让你方便地编写DSL,包装各类领域问题,写出优雅的解决方案,一个简单的例子比如korma这个类库就是对于JDBC的DSL包装。

从另一个角度看,Java语言及其模式是以对象为核心、以类型体系为基础来做方法派发,利用接口抽象和多态来隔离变化。比如桥接模式,变化有多少个维度,就用多少个接口将每个维度抽象起来,然后将变化隔离到接口实现类中,将业务逻辑表达在接口之间的联系上,将变化隔离在接口的实现上。对象是重中之重,封装了状态,隐藏了信息,附加上类型信息做动态派发,“不堪重负”,并且可变的状态也引入了难以并发和难以测试的痛点。

而在Clojure里,你更多会将变化表现在数据的变化上,数据从用户那里过来,经过每个“阶段”的处理,变化成最终想要的结果,然后返回给用户。每个“阶段”理想状态下都是无状态的、可以单独测试、可以并发执行的,变化的数据本身也是使用不可变数据结构“串联”起来,没有并发修改的隐患。本质上,将业务逻辑表达在数据的变化上。

CSDN:有人说,一个有Java背景的爱好者,学习Clojure具备得天独厚的优势,你怎么看?

庄晓丹:我非常认同这个观点,没有Java经验当然可以学好用好Clojure,但是有丰富的Java经验,会让你更方便、更深入的使用Clojure。就像前面提到的,Clojure语言和类库都是基于Java平台,它的很多类库也是Java类库的直接封装。Clojure提供了方便和快捷的操作Java类库的方式,如果你熟悉Java,在使用Clojure的时候也将如鱼得水。

其次,Clojure的应用也是运行在JVM之上,Java性能优化特别是GC调优、VM参数优化等知识也能帮助你去优化Clojure应用的性能。

最后,Java语言的经验可以让你有针对性地比较两门语言、两种编程风格(面向对象VS.函数式)的优劣势,在未来学习其他语言的时候,这些编程语言方面的认识也将帮助你更快地上手。

CSDN:你最喜爱的开发工具有哪些?在日常工作中会用到哪些?

庄晓丹:工作中主要的开发工具是GNUEmacs。Emacs刚开始的学习曲线比较陡峭,但是在强制自己使用一段时间后,你会方便这是一个非常强大的开发工具。

其次,Clojure开发,Leiningen是最主要的项目构建工具,利用它做依赖管理、构建、打包等日常构建任务。

Cider是Clojure在Emacs里一个交互式的开发环境,结合其他插件,提供了编译、求值、测试、REPL、代码模板和代码自动完成等日常开发所需要的大多数功能。

此外,我很喜欢ack这个代码搜索命令,支持多种编程语言的搜索,提供丰富的搜索模式。在这些主要工具之外,日常更多的是使用Mac上一些优秀的App,比如Alfred、Dash、Mou.app等。

CSDN:给学习Clojure的开发者分享下经验吧

庄晓丹:如果没有其他函数式语言编程的经验,Clojure的学习将是先难后易,一开始会遇到很多新的概念和挑战,很多对Clojure感兴趣的人可能刚开始就被括号、各种奇怪的符号(特别是编写宏的时候)、函数式编程所吓跑,这时候就需要特别鼓励大家坚持看下去,先尝试用Clojure做一些实际的编程小任务,比如实现一些算法、编写一个Web小程序、增删改查数据库等,来慢慢找到感觉。在这里要推荐下4clojure这个做题网站,通过这些题目和其他人的解答,你可以更加迅速地熟悉Clojure语言、类库和函数式编程。

过了这个阶段,你会发Clojure的核心是极其简练的,所谓“奇怪符号”寥寥无几。接下来不妨阅读一些函数式编程方面的介绍性资料,或者SICP这样的系统性的书籍,来加深对函数式编程的理解,你对Clojure的使用将更加得心应手。

除了语言和类库之外,还需要加强对Clojure工具链的熟悉,寻找一个趁手的开发工具并坚持使用,了解各种快捷键和插件。订阅社区的邮件列表,及时了解社区动态。Clojure中国社区欢迎各位加入。如果过去没有过Java开发的经验,你还需要去了解下Java平台的相关知识,有兴趣还可以深入学习下JVM方面的知识。

此外,非常鼓励大家从Clojure.core这个标准库入手阅读Clojure的源码,从中可以学习到很多语言的惯用法,在高阶函数、宏等漂亮外衣之下的运行机理,更深入地掌握Clojure语言。

以上是我对Clojure学习的一点粗浅交流,欢迎交流,谢谢。


如果您也想与他人分享编码趣事(开发经历、编程语言、开发工具等),欢迎与我联系,与他人分享开发经验,不仅可以展现您的才华,还能提升知名度。(联系方式:xiamz#csdn.net 注:请将#改为@。)

RemoteViews - Android Widget开发入门 ASP.NET如何用正则表达式得到网站页面中的所有链接 PHP实现图形验证码案例(1) Android Widget开发实例-电量监控 Android自带Widget - Clock指针钟表源代码分析 C#实现文件批量改名工具 PHP利用Google Chart API生成饼图 PHP操作SQLite数据库 PHP利用DomDocument创建XML文件 ASP.NET如何加密/解密URL网址 如何使用C#读取csv文件 三步骤实现ASP.NET(C#)项目中添加谷歌(Google Map)地图 使用C# ASP.NET以FTP客户端方式下载文件 ASP.NET如何用C#代码检测手机浏览器 使用C#读取上传的Excel文件 新版本SQL Helper类 C#使用iTextsharp生成PDF 在.NET里用iTextSharp库生成PDF文档 用itextsharp将ASP.NET页面导出到PDF中 什么是JQuery-JQuery API jQuery入门指南-JQuery API jQuery的核心部分-JQuery API $(elements)-JQuery API $(expr, context)-JQuery API $(fn) -JQuery API $(html) -JQuery API $.extend(prop) -JQuery API $.noConflict() -JQuery API each(fn)-JQuery API eq(pos)-JQuery API get(num)-JQuery API 如何在image或者PICTURE控件中保持图像的比例 小问题:使用image控件时,能不能用mask将图片的背景色给屏蔽掉? 如何在javascript中调用COM对象? WinCE emulator !!!!!! *************2000分求救!!!SOS!!!************** 线程里执行查询时碰到的错误。。。。说BDE引擎内存不足。。请各位多多指教 刚才我发了一个贴子,请问我怎样结贴?(不好意思,我真笨) JCreator LE 使用!?各位兄弟姐妹,用过JCreator LE的来给小弟指指路好吗? dbgrid 各位,请看下面一段有关线程同步的代码: 大家上来帮我看一下http://www.csdn.net/expert/topic/613/613969.xml?temp=.7868463 大家上来帮我看一下http://www.csdn.net/expert/topic/613/613969.xml?temp=.7868463 简单的一道题,各位高手指点一下把! 大家上来帮我看一下http://www.csdn.net/expert/topic/613/613969.xml?temp=.7868463 美丽的故事悲伤的结局 大家上来帮我看一下http://www.csdn.net/expert/topic/613/613969.xml?temp=.7868463 98安装故障,急!请帮看看! 大家上来帮我看一下http://www.csdn.net/expert/topic/613/613969.xml?temp=.7868463 oracle 入门的书籍,请大家推荐!本人是菜鸟现在想学习 oracle请大家多多指教!!!!! 谁有好的VB电子书籍 不会使用网上的控件,谁教我? **********四大网站被黑!!!********** 怎麼寫這兩條SQL語句;(1)顯示當前數據庫?(2)顯示當前所有用戶表? 急,謝謝 送分问题,绝对给分! 如何才能不改变字体大小? 数据窗口有bh(编号),name(名称)两列,编号是string型,用什么方法可快速查找出bh中的最大值?只准对数据窗口操作。 delphi(dll) 大话爱情大结局 ??如何编写邮件服务器? createfont怎样创建一个随意宽高的字体? 急,请问有函数可取字符串后面N位字符吗?在线等待 怎样显示报表页总数问题 在打印中如何实现实现小计(即每页显示金额的总和)100分 问一个简单的问题,关于初始化 请问谁有动态树状目录的原码啊,急需!! 什么问题,怎么解决? 西瓜:有人要求我贴你的没穿外套没穿鞋子的照片 就是你说生气的那张 贴不贴啊? 怎样将一个十进制数转换为二进制数,并将二进制数中的每一位单独取出来? GetProcAddress在VB中的使用? excel单元格格式问题 用按钮保存网页的问题 用c++ builder和access.数据表中的记录多了之后,应用什么方案将之备份以及恢复? 以下ASP在Win2000server上运行报错请问大家为什么??? 在指定位置输出文本 怎么办? 如何启动和终止一个NT服务 .Net——又一个起跑线 怎么样注册jsp上的jdbcoracle驱动 什么问题,怎么解决? 我的爱情大结局----失败爱情原闯文章 在学习了2个月的delphi后,总结四大问题! 校篮球比赛中,每场比赛都要分出胜负,胜一场得3分,负一场得1分,若某班在28场比赛中得分不少于43分,那么该班最少要胜多少场? 用一些小正方体积木搭成一个立体图形,从左面看和上面看分别看到如下图,至少需要几块 下面是由几个相同的小正方体搭成的几何体从正面.上面和左面看到的形状图,要搭成这样的几何体:(1)最多需要几个小正方体?(2)最少需要几个小正方体?(3)当所需最少小正方体时,从 新闻稿,关于篮球的新闻稿我公司与电信集团友谊篮球赛的新闻稿 南街小学买了6本数学书和9本语文书共花171元,已知5本数学书的定价和2本语文书的 七年级一班原有学生若干人,从外地转来5人,这样,原有人数是现在人数的90%,则由学生? 篮球赛新闻稿应该怎么写? 南街小学增买了6本数学书和9本语文书共付款117元,已知5本数学书的定价和与2本语文书的定价相等.数学书和语文书的每本的定价各是多少? 八下数学(北师大)新课堂(青岛版)16页15题如图,铁路上A、B两站相距25km,C、D为村庄,且DA⊥AB,CB⊥AB.已知AD=15km,CB=10km在AB上是否存在一点E,使它到C、D两村庄的距离相等?AE是多少米? 200字左右的篮球新闻稿怎么写?2个系女蓝打比赛.比分18:32,开赛时间17点.地点校篮球场! 初二上册数学课堂感悟38页尖子生探究1题,已知,DE是三角形ABC中BC边上的垂直平分线,与角BAC 的平分线交于E,EM 垂直AC。求证AB =AC +2CM 七年级1班有x人,七年级2班比七年级一班的4分之3少1人,则七年级2班的人数是().用代数式表示 急…求帮忙写一篇系篮球赛新闻稿.大致内容为,09级新生篮球赛,四个班级,二班45V42三班,前三节三班14分领先,第四节二班反攻,三班在第四节没得一分.最后二班一个同学造犯规,获得两罚一掷,并 图书馆小学买了6本数学书和9本语文书共付款171元,已知5本数学书的价格与2本语文书的价格相等. 一个立体图形从正面、左面看到的情况如下图,要搭一个这样的立体图形,至少要()个小正方体. 篮球比赛的新闻稿怎么写,手头只有采访内容? 计算 根号8x5的平方 根号36*25 根号24a的平方b的3次方 根号75a的3次方b的5次方 根号18x的平方y的5次方 根号a的4次方-a的平方*b的平方 你们也可以去看九年级上册数学课堂感悟 第3面的2大题的3,4,5. 八下数学课堂精炼第59页答案 二十中学初一年级的人数占学生总数的1/4,初二年级的人数是初三年级的3/4,三个年级共多少人? 有五本不同的书其中语文书2本,有5本不同的书,其中语文书2本,数学书2本,物理书1本.若将其随机地摆放到书架的同一层上,则同一科目的书都不相邻的概率是( 2/5 ) 两本数学相邻且两本 七年级一二两班学生共104人到某公园春游,一班人数不足50人,二班人数超过50人,已知公园的门票的价格规定如下:购票张数:[1-50张] [51-100张] [100张以上] 每张票价:[13元] [11元] [9元](1)如果两个 初一,初二年级的英语语法,急~~~越详细越好 我只要194页的1到4题就行了 六年级下册数学书题目解答(说清楚理由)1.从扑克牌中抽出两张王牌,在剩下的52张中任意抽出5张,至少有2张是同花色的.试一试,并说明理由.2.张叔叔参加飞镖比赛,投了5镖,成绩是41环.张叔叔 初一和初二年级共有780人,初一年级的人数比初二年级的2倍还少30人,则初一和初二年级各有多少人.列方程 某校九年级进行班级单循环排球赛,共进行45场,问这个年级共有多少个班.急.二元一次方程应用题. 按一定顺序排列:农作物 小麦 植物 粮食作物 如图,是由一些大小相同、棱长为1的小正方体组成的几何体从正面、上面看的图形(1)试画出几何体体积最从左面看到的图形(2)试求几何体的最大体积 某校初一年级4个班进行排球单循环赛,共比赛多少场?5个班呢?m个班? 植物 小麦 粮食作物 农作物 以上词语按一定的顺序排序. 华罗庚金杯初一与初二一组吗 (江苏人民出版社)国际版七年级寒假作业答案语文 按顺序排列词语 面粉 粮作物 农作物 小麦 植物 两个车间共有150人,如果从一车间调出50人,这时一车间人数是二车间的3分之2,二车间原有多少人? 求2012年江苏人民出版社假期生活寒假作业七年级答案. 植物,粮食,作物,水稻 农作物按一定的顺序排序 两个车间共有150人,如果从一车间调走50人,这是一车间人数是二车间的三分之二,二车二车间原有多少人? 某校体育器材室共有60个篮球,一天课外活动,有3个班级分别计划借篮球总数的二分之一,三分之一和四分之一请你算一算,这60个篮球够借吗?如果够了,还多几个篮球?如果不够,还缺几个?(要算 六年级下册数学第86页2题,要过程 快点来答案 7年纪上册 数学分课练习单元测试 我的是北师大版, 我校体育器材室有六十个篮球一天课外活动,有三个班分别计划借篮球总数的二分之一,三分之一和四分之一,请你算一算这六十个篮球构建吗? 某校有男、女同学若干人,女同学因故走了14名,这时男、女同学人数之比为5:3,后来男同学又走了22名,这时、女同学人数相同,那么最初的女同学有 最常见的乔木有哪些? 某校体育器材室共有60个篮球 一天课外活动某校体育器材室共有60个篮球,一天课外活动有3个班级分别计划借篮球总数的二分之一,三分之一和四分之一请你算一算,这60个篮球够借吗?如果够了, 期中测试六一班有48人参加有30人的数学成绩是优秀.六二班46人参加有23人的数学成绩是优秀哪个班数学成绩的优秀率高 还是一部电影? 某班学生不到50人,再一次测验中,有3/1的学生得优,2/1的学生得良,7/1的学生及格,那么,有多少人不及格? 某校积极推进“阳光体育”工程,本学期在九年级11个班中开展篮球单循环比赛(每个班某校积极推进“阳光体育”工程,本学期在九年级11个班中开展篮球单循环比赛(每个班与其他班分别进行 我现在是初一下学期的一个男生.有个二年级女生追我,我怎么办?她叫人给我送了一封信说:我也不知道为什么想认识你,但是你给我的第一个感觉就是怕冷,因为春天啊,我们都只穿一件校服,而 某班同学不到50人,有1/7的人得优,1/3得良,1/2及格,则有几个人不及格?要过程 为庆祝国庆,市工会组织篮球比赛,赛制为单循环形式(每两队之间都赛一场)共进行了45场比赛,问这次比赛有多少只代表队参加?答案上列出了式子,½x(x-1)可是我不明白为什么要乘二分 用一些小正方体积木搭成一个立体图形,从正面和上面看到的情况如下图,至少需要多少块小正方体? 某校八年级举行足球比赛,每个班级都要和其他班级比赛一次,结果一共进行15场比赛那么八年级一共有几个班级 有4支球队要进行篮球比赛,赛制为循环形式(每两队之间都赛一场),则一共需比赛____场 PS: 如图K—6—16是由几个小正方体积木搭成的几何体从上面看到的平面图形,图形中的数字表示再该位置中正方体积木的个数,请你画出从这个几何体正面和左面看到的平面图形23 1 一个立体图形,从正面,上面,左面的形状.【如图】 搭这样的一个立体图形,需要【 】个小正方体一个立体图形,从正面,上面,左面的形状.【如图】 搭这样的一个立体图形,需要【 】个小正方体 庆“五一”,市工会组织篮球比赛,赛制为单循环形式(每两对之间都要赛一场),共进行了45场比赛,这次有()队参加比赛. 篮球联赛中,每场比赛都要分出胜负,每队胜1场得2分,负1场得1分,某队在10场比赛中得到16分,那么这个队胜负场书分别是多少?用一元一次方程和二元一次方程解,并讲解讲解这道题是怎样解出来 32个边长1厘米的正方体积木能堆成长方体如果将这些正方体积木排成一排,排成的立体图形的表面积是多少? 如图是从正面和左面看由几个相同的小正方体搭成的几何体的形状图,该几何体最少由几个小正方体搭成?希望在三个小时内有高人答出来啊!
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘