微服务架构带来的变化分析?
微服务架构对于程序员来说是需要掌握的新型技术之一,而其受到追捧的原因就是符合互联网的发展以及其便捷性。今天我们就一起来了解一下,微服务架构带来的变化。微服务架构给IT系统和团队带来了以下显著的变化:基础设施的升级,需要引入虚拟化(如Docker),现存基础设施也需要与之进行适配;系统架构的升级,需要引入服务注册(如Consul),服务间的交互方式也需要与之进行适配;运维平台的升级,建议引入日志收集(如Fluentd),分布式跟踪(如Zipkin)和仪表盘(如Vizceral/Grafana)等;运维效率和自动化水平的提升也迫在眉睫,否则无法应对实例数量,变更频率,系统复杂度的快速增长;观念的转变,基础设施,系统架构和运维平台等的大幅升级,犹如小米加步枪换成飞机大炮,相应的战略战术也需要与之相适配才行。微服务架构下用户面临的监控问题在转型到微服务架构以后,用户在监控方面主要会面临以下问题。监控配置的维护成本增加。某个在线系统大概有106个模块,每个模块都需要添加端口监控,进程监控,日志监控和自定义监控;不同服务的监控指标,聚合指标,报警阈值,报警依赖,报警接收人,策略级别,处理预案和备注说明也不完全相同;如此多的内容,如何确保是否有效,是否生效,是否完整无遗漏。当前针对维护成本,业界常用的几种方法有:通过变量的方式尽量减少人工输入;通过监控配置文件解析做一些可标准化的校验;通过故障演练验证报警是否符合预期;其次,三方依赖越来越多。昌平电脑培训发现例如Docker的可靠性很大程度上取决于宿主机,如果所在的宿主机发生资源争用,网络异常,硬件故障,修改内核参数,操作系统补丁升级等,都可能会让Docker莫名其妙地中招。
[create_time]2023-04-03 11:37:42[/create_time]2023-04-18 11:37:42[finished_time]1[reply_count]0[alue_good]北大青鸟志远科技[uname]https://pic.rmb.bdstatic.com/bjh/user/6605214b69d37ac263f711e92fd08fe2.jpeg[avatar]用心创作内容,感谢您的关注。[slogan]这个人很懒,什么都没留下![intro]2[view_count]微服务架构带来的变化分析?
微服务架构对于程序员来说是需要掌握的新型技术之一,而其受到追捧的原因就是符合互联网的发展以及其便捷性。今天我们就一起来了解一下,微服务架构带来的变化。微服务架构给IT系统和团队带来了以下显著的变化:基础设施的升级,需要引入虚拟化(如Docker),现存基础设施也需要与之进行适配;系统架构的升级,需要引入服务注册(如Consul),服务间的交互方式也需要与之进行适配;运维平台的升级,建议引入日志收集(如Fluentd),分布式跟踪(如Zipkin)和仪表盘(如Vizceral/Grafana)等;运维效率和自动化水平的提升也迫在眉睫,否则无法应对实例数量,变更频率,系统复杂度的快速增长;观念的转变,基础设施,系统架构和运维平台等的大幅升级,犹如小米加步枪换成飞机大炮,相应的战略战术也需要与之相适配才行。微服务架构下用户面临的监控问题在转型到微服务架构以后,用户在监控方面主要会面临以下问题。监控配置的维护成本增加。某个在线系统大概有106个模块,每个模块都需要添加端口监控,进程监控,日志监控和自定义监控;不同服务的监控指标,聚合指标,报警阈值,报警依赖,报警接收人,策略级别,处理预案和备注说明也不完全相同;如此多的内容,如何确保是否有效,是否生效,是否完整无遗漏。当前针对维护成本,业界常用的几种方法有:通过变量的方式尽量减少人工输入;通过监控配置文件解析做一些可标准化的校验;通过故障演练验证报警是否符合预期;其次,三方依赖越来越多。天通苑电脑培训发现例如Docker的可靠性很大程度上取决于宿主机,如果所在的宿主机发生资源争用,网络异常,硬件故障,修改内核参数,操作系统补丁升级等,都可能会让Docker莫名其妙地中招。
[create_time]2023-04-03 11:38:46[/create_time]2023-04-18 11:38:46[finished_time]1[reply_count]0[alue_good]北大青鸟志远科技[uname]https://pic.rmb.bdstatic.com/bjh/user/6605214b69d37ac263f711e92fd08fe2.jpeg[avatar]用心创作内容,感谢您的关注。[slogan]这个人很懒,什么都没留下![intro]1[view_count]电子签到的签到形式
条形码签到(Barcode):条形码签到需要一套系统的支持,这套系统包括:条形码阅读器、条形码生成器、服务器等,系统提前为每位参会者提前生成条形码,并将条形码直接打印或贴在参会者的邀请函或会场出入证上,参会者持印有条形码的请柬或证件即可实现签到。条形码系统的标签是由一组宽度不同的平行的条纹与空白,按照标准编码规则组成的标识,可以代表字母,数字等信息。其读写器则是激光扫描器,条码扫描枪。应用领域包括商品零售,图书流通,以及医疗卫生等领域。条形码大约在上世纪70年代开始被采用,使用范围日益扩大,至今已经有20余年的历史。条形码用于签到的最大优势是成本低。操作简单,适合学术会议、商务会议和展会等。缺点是很容易损坏,而且不能编程,改写。磁卡签到(MagneticStripeCards):磁卡签到方式:与会者进入会场时,手持事先领取的磁卡,送进电子签到机里,签到机便即时将其姓名、号码等内容输入电脑,与会者入场完毕,签到情况便立即在电脑屏幕上显示出来。磁卡式签到适用于较大型会议。磁卡的基底是PVC塑料片。上面安置有可存储信息的磁性条。磁卡系统的优点是标签的价格低;但是阅读系统的成本偏高。标签可以做得比较坚固耐用,但是成本也相应提高。也可以嵌入其它介质,但是需要可见标签,才能完成读取。磁卡的最大缺点是,只要具备了读写器,就可能比较容易地被伪造或改写。IC(智能)卡签到(SmartCards)IC卡签到根据距离远近分为接触与非接触式。接触式智能卡,在使用中容易出现接触不良的弊病,而且容易磨损。于是出现了非接触式智能卡克服了以上缺点,并得以广泛的应用。非接触式签到:会议前,系统要求给每一位参会人员发放一张身份标识感应IC卡。姓名、照片、工作单位、联系方式等信息存入会议签到系统内。签到时,只需将事先准备好的IC卡在距离屏幕10cm范围以内的区域轻轻掠过,屏幕上即可显示该卡所对应的姓名、照片、工作单位等资料,即可实现签到。IC卡签到方便了与会人员的出席签到、会议管理人员的统计和查询;为有效地掌握、管理与会人员出入和出席情况提供了轻松的解决方案。RFID无线射频识别(Radio-FrequencyIdentification)严格的话,RFID(射频身份识别)也是智能卡的家族成员。是一种利用射频通信实现的非接触式自动识别技术,RFID电子标签具有体积小,容量大,寿命长,可重复使用等特点,可支持快速读写,非可视识别,移动识别,多目标识别,定位以及长期跟踪管理;RFID系统通常由三部分组成:即电子标签(tag);读写器(reader);以及数据库系统或数据控制与管理中心。RFID技术正在迅速和其它技术发展相融合。尤其是和计算机技术,网络技术,无线通信技术,便携式消费类电子产品技术的发展相融合,随着3G商用网的启动和三网融合的大趋势,必将进一步促进智能卡以及RFID技术的新应用,开拓更大的新市场。例如,基于数字化3C产品具有电子支付功能的各种信息终端和系统;基于智能卡和RFID技术的,可以提供多元化业务的有偿信息服务的“电子亭(MicroKiosk)”以及信息服务系统。此外,RFID系统有可能作为一种‘嵌入式模块’,广泛被安置于其它产品内,以增加该产品的功能。多媒体签到(Multimedia)多媒体电子签到:这是近些年来出现在高端会议、大型公关活动上的一种新型互动签到方式,是伴随着新兴多媒体互动技术、多点触控技术、3G网络的应用发展而出现的一种新产品,它的功能已经远远超出了传统会议签到范畴,更准确的说它是一种多媒体互动平台,从会议签到开始,把互动元素融入贯穿会议整个流程。多媒体电子签到系统是将数字毛笔签名、影像捕捉、flash动画、配音配乐、多屏显示技术、数据库技术、身份识别技术、计算机编程等技术融为一体,配备多点光学触摸屏、大容量硬盘、高清摄像头、外接LED及DPL等大屏幕高端设备,实现人机交互性签到的多媒体终端设备。同时内嵌CRM客户资源管理系统.产品功能主要包括客户关系管理、数字毛笔签名、影像合成、席位地图、信息统计、娱乐抽奖互动、现场打印、客户数据深加工等多种可扩展性功能。二维码签到【二维码签到系统】是MyMova网络科技开发的一项“凭证”类的移动数据业务新产品电子签到系统以其“无纸化”的创意邀请以及“电子化”的时尚签到方式,为来宾带来尊贵的体验,体现了企业的时尚化和前瞻性,必定能为企业带来深刻影响。全球用户对二维码的搜索量也在逐年增加, 从这个趋势不难发现二维码签到将逐渐成为主流,取代传统签到方式。
[create_time]2016-05-28 17:35:53[/create_time]2016-06-10 04:29:11[finished_time]5[reply_count]0[alue_good]符小熊3179[uname]https://himg.bdimg.com/sys/portrait/item/wise.1.ddc4c739.dmaox95vha08P7uY4uKMsg.jpg?time=1334&tieba_portrait_time=1334[avatar]TA获得超过172个赞[slogan]这个人很懒,什么都没留下![intro]873[view_count]北京现在开什么会呢
北京是中国的首都,同时也是国家的政治、文化和经济中心。因此在北京经常会举办各种各样的会议和活动。这些会议和活动涵盖了各个领域,包括政治、经济、教育、科技等等。在北京举行这些大型会议不仅可以促进国家的发展,还可以提高北京在国际上的地位和影响力。
近年来,随着中国的经济和科技的快速发展,越来越多的国际性会议和论坛选择在北京举办。例如,北京论坛是中国政府重点支持的高端国际会议之一,聚集了来自全球的政治家、学者、企业家等各界精英,探讨当前世界所面临的重大问题。此外,北京还是亚洲和世界的许多国际组织和协会的总部,例如亚洲开发银行、世界卫生组织等等,也会在北京举办各种会议和活动。
除了国际性的会议,北京还有许多重要的国内会议和活动。例如,每年的“两会”就是中国政治生活中的重要事件之一,全国政协和全国人大代表齐聚北京,审议和决定国家的重要事务。此外,各省市和行业也会在北京举办各种会议和活动,例如北京国际汽车展览会、北京国际文化创意产业博览会等等。
总之,北京作为中国的首都和全球重要城市,各种各样的会议和活动在这里举行。这些会议和活动不仅是中国和世界发展的重要推动力,也为北京和中国提供了向世界展示自己的重要机会。
[create_time]2023-04-10 20:22:14[/create_time]2023-04-25 20:10:55[finished_time]1[reply_count]0[alue_good]惠企百科[uname]https://pic.rmb.bdstatic.com/bjh/user/343825d09bee196abf9cec8955c23e80.jpeg[avatar]百度认证:北京惠企网络技术有限公司官方账号[slogan]惠企百科网是一家科普类综合网站,关注热门中文知识,集聚互联网精华中文知识,本着自由开放、分享价值的基本原则,向广大网友提供专业的中文知识平台。[intro]9[view_count]
林仕鼎的人物荣誉
2002年毕业于北京航空航天大学计算机系,获得硕士学位。2002年4月到2007年10月,于微软亚洲研究院系统研究组工作,历任助理研究员、副研究员、研究员。2007年10月加入百度,担任网页搜索部高级研究员、主任架构师。2010年9月,任基础架构部主任架构师。2011年10月,任百度云首席架构师。2012年10月起全面负责百度云的技术、产品与生态系统。2013年3月,担任百度基础体系与大数据首席架构师。2014年5月,从百度离职,于教育互联网领域创业。
[create_time]2016-05-27 17:44:26[/create_time]2016-06-10 00:33:48[finished_time]1[reply_count]1[alue_good]灬灬得0V[uname]https://himg.bdimg.com/sys/portrait/item/wise.1.aa99f494.28BUsPPEaoukWM-7oLkM5A.jpg?time=3686&tieba_portrait_time=3686[avatar]超过15用户采纳过TA的回答[slogan]这个人很懒,什么都没留下![intro]313[view_count]nodejs的优势
NodeJs的优势: 现在的很多的服务器端的语言(PHP,JAVA,ASP),有什么问题呢,现在的服务器端的语言在用户访问服务器时,为每个用户链接创建了一个线程,但每个线程大约要耗费2M的内存,如果一个8G内存的服务器,也就能链接4000个左右的用户,如果用户的链接数较大,就必须增加服务器的数量,而且现在用户的链接方式有很多(如app,网页同时访问),这就又涉及到服务器共享的问题,所以服务器怎么支持最大的同时链接用户量就成了一个问题; NodeJS修改了客户端到服务器端的链接方法,解决了这个问题,他不在为每个客户端创建一个新的线程,而是为每个客户端链接出发一个NodeJs内部进行处理的事件,所以NodeJS具备同时处理多达几万个用户的客户端链接的能力; NodeJS适合开发的应用程序: 当应用程序需要处理大量并发的输入/输出,而在向客户端发出响应之前,应用程序内部并不需要进行非常复杂的处理的时候,我们应该考虑使用NodeJs来进行应用程序的开发,例如: 1、聊天服务器:如果聊天的人很多,用户的与服务器之间的并发链接量很大,但是服务器端的数据处理并不复杂; 2、综合类服务网站和电子商务网站的服务器:在这类网站中的服务器端,往往可能每秒存内可以接受多达上千条的数据并且需要将这些数据写入数据库中,NodeJs可以通过其队列机制将这些数据迅速写入缓存区中,然后再通过每一个单独的处理从缓存区中取出这些数据并将其写入数据库中,如果是其他的服务器(如Apache服务器或Tomcat服务器)的话,由于这些服务器采用的是阻塞型I/O机制,因此每条数据写入到数据库中都要等待一段时间(等上一条写完,才能写下一条),但是NodeJs使用的是非阻塞的I/O机制,因此可以实现这些数据到数据库中的写入,而不必再为每条数据的写入而等待一段时间; 总结: 一个规模稍微大点的系统都不是一种开发语言可以搞定的,往往是几种混杂一起,比如c、c++做服务器端开发,java做业务逻辑,php等做前端展示,此外还需要消息中间件等等。 nodejs可以很快地在服务器端做原型(原来只有c系和java等能做的事情,性能还很高),而且代码量相对会少很多;另一点是它的语法优势,js闭包等。 但它不太适合做cpu密集型处理的工作,只能绕着弯去解决,据说这次QCon会有人分享这方面的研究成果,可以关注下。 每种语言都有它适合的领域,没必要强求一门语言可以解决所有事情,拥有其它语言的特性,只有不断的tradeoff把系统做出来才是目标。 这些都是丛书上看到总结的,还望指正
[create_time]2022-10-22 06:08:02[/create_time]2022-11-03 15:18:31[finished_time]1[reply_count]1[alue_good]大沈他次苹0B[uname]https://himg.bdimg.com/sys/portrait/item/wise.1.268b9e4f._Pqr3QJiDoKzKAJr45bDew.jpg?time=4988&tieba_portrait_time=4988[avatar]TA获得超过6158个赞[slogan]这个人很懒,什么都没留下![intro]21[view_count]
使用Node.js的优势和劣势都有哪些
NodeJs的优势:现在的很多的服务器端的语言(PHP,JAVA,ASP.net),有什么问题呢,现在的服务器端的语言在用户访问服务器时,为每个用户链接创建了一个线程,但每个线程大约要耗费2M的内存,如果一个8G内存的服务器,也就能链接4000个左右的用户,如果用户的链接数较大,就必须增加服务器的数量,而且现在用户的链接方式有很多(如app,网页同时访问),这就又涉及到服务器共享的问题,所以服务器怎么支持最大的同时链接用户量就成了一个问题;NodeJS修改了客户端到服务器端的链接方法,解决了这个问题,他不在为每个客户端创建一个新的线程,而是为每个客户端链接出发一个NodeJs内部进行处理的事件,所以NodeJS具备同时处理多达几万个用户的客户端链接的能力;NodeJS适合开发的应用程序:当应用程序需要处理大量并发的输入/输出,而在向客户端发出响应之前,应用程序内部并不需要进行非常复杂的处理的时候,我们应该考虑使用NodeJs来进行应用程序的开发,例如:1、聊天服务器:如果聊天的人很多,用户的与服务器之间的并发链接量很大,但是服务器端的数据处理并不复杂;2、综合类服务网站和电子商务网站的服务器:在这类网站中的服务器端,往往可能每秒存内可以接受多达上千条的数据并且需要将这些数据写入数据库中,NodeJs可以通过其队列机制将这些数据迅速写入缓存区中,然后再通过每一个单独的处理从缓存区中取出这些数据并将其写入数据库中,如果是其他的服务器(如Apache服务器或Tomcat服务器)的话,由于这些服务器采用的是阻塞型I/O机制,因此每条数据写入到数据库中都要等待一段时间(等上一条写完,才能写下一条),但是NodeJs使用的是非阻塞的I/O机制,因此可以实现这些数据到数据库中的写入,而不必再为每条数据的写入而等待一段时间;总结:一个规模稍微大点的系统都不是一种开发语言可以搞定的,往往是几种混杂一起,比如c、c做服务器端开发,java做业务逻辑,php等做前端展示,此外还需要消息中间件等等。nodejs可以很快地在服务器端做原型(原来只有c系和java等能做的事情,性能还很高),而且代码量相对会少很多;另一点是它的语法优势,js闭包等。但它不太适合做cpu密集型处理的工作,只能绕着弯去解决,据说这次QCon会有人分享这方面的研究成果,可以关注下。每种语言都有它适合的领域,没必要强求一门语言可以解决所有事情,拥有其它语言的特性,只有不断的tradeoff把系统做出来才是目标。这些都是丛书上看到总结的,还望指正
[create_time]2023-04-26 14:16:03[/create_time]2023-05-11 14:16:03[finished_time]1[reply_count]0[alue_good]猪八戒网[uname]https://pic.rmb.bdstatic.com/c958ab6d003b1ca8df45ae4fa0226ac5.jpeg[avatar]百度认证:重庆猪八戒网络有限公司官方账号[slogan]猪八戒网(zbj.com)创建于2006年,现已形成猪八戒网、天蓬网和线下八戒工场的“双平台+一社区”服务模式,是中国领先的人才共享平台。 [intro]25[view_count]为什么程序员一定要会深度学习?
对于深度学习,我也是一个初学者,能力有限,但这些的确是我现在的真实想法,我也会按这个思路去尝试。1我是一个好奇心很重的人。深度学习刚开始流行的时候,我就做过简单的学习。当时我的结论是短期内,深度学习只能在弱智能徘徊,很难进展到强智能。这个结论在今天看来,也不算过时。但真正被深度学习给Shock到,是去年和某教育APP的CEO同学聊天。他告诉我,在教育这个垂直领域,他们的语音识别率已经比讯飞要高了,依赖于大量的数据;更NB的是,加上NLP,他们的AI已经可以帮老师改主观题了。主观题啊,就是数学的问答题,语文的作文。这让我开始重新思考弱智能。2完全依靠强智能的应用场景,会产生很多问题。比如自动驾驶,要想在中国这种交通环境下运行,一时半会儿是不行。即使是一个看起来简单的问答机器人,也没一家真正做好,你多问siri几句,她很快就晕了。经常关注我微博同学会知道,我最喜欢说的一句话就是:「能自动化的,要自动化;不能自动化的,要半自动化」。在人工智能上,这个法则似乎依然是有效的。既然现在强智能还不够强,那么为什么我们不用弱智能+人工确认的方式,来实现「半智能化」呢:用机器帮你做预选,你来做最终选择,虽然依然包含了人工干预,但却可以把生产效率提升几十倍。3有同学和我说,找不到应用深度学习的场景,这是因为太执着于强智能,想让机器独立处理所有事情;如果使用「半自动化」的思路,你会发现遍地都是场景。最典型的场景就是「按需求进行组合搭配」。拿今天小程序举例,小程序在框架层上,将功能分隔到了page的粒度,这使得小程序的组件会很好的被重用;而在设计上,小程序提供了统一的官方指导风格,所以不会出现太多个性化的东西。我需要一个用户资料管理,xpminstalluser-profile;我需要动态Feed流,xpminstallfeed-timeline。然后这货就喊着要去做,还在GitHub上开了个坑,据说SDK已经写完,安装器年前能开始内测。然后我告诉他,你得赶紧做,从长远看,通用应用最后是不太值钱的,因为很快就有开源项目把它做得很好。真正值钱的是,下沉到行业里边的应用。比如说吧,同样是用户资料页,房地产行业的、猎头行业的以及技术社区的会完全不一样。但区别也就是添加几个行业特定的字段而已。大量的「二次开发」工作,才是最为琐碎又最为挣钱的。这就是典型的可以用上深度学习的场景。通过抓取对应行业的H5页面,我们很快就可以把各个行业需要哪些可能的字段给整理出来,然后把这些交给机器进行学习,当再有新的需求进来的时候,机器就可以自动配好预设字段。机器会出错么?当然。但哪怕是80%的准确率,也已经可以节省掉好几个程序员了。为什么我要学深度学习?因为这背后是TM白花花的银子。4其实细心的同学会发现,我一直说的是「深度学习」而不是「机器学习」。因为我的目的很简单,那就是用。在学习第一年,我给自己定的目标不是要理解「机器学习」的原理,而是要把「深度学习」用到自己产品的方方面面。先学「深度学习」还有一个好处,那就是不用太多「机器学习」的基础。能把tensorflow、kears这种开源框架搭起来,然后喂数据,然后看结果。等到优化的时候再去补知识点。因为深度学习更像是一个黑盒子,现在很多专门搞深度学习的同学也说不清楚为什么要建三个层、要放四个节点;什么情况下用什么激活函数。只说通过实践+观察数据慢慢调整。这简直就是新手上路的最好切入点嘛。如果不想在本地搭建环境,AWS上已经有可以用的镜像,基于API的深度学习服务也日益增多。这东西就像水电气一样,用比学重要。也有同学严谨的指出,很多场合下,机器学习的其他方法远比深度学习有效。他们是对的,如果说学好整个机器学习,可以做到90分;那么光用深度学习,可能只有70分。但现在绝大部分的程序,连TM一点智能都还没用上呢。从零分到70分,只需要把深度学习用起来。为什么我要学习深度学习,因为这TM的性价比太高。感谢大家阅读由java培训机构分享的“为什么程序员一定要会深度学习”希望对大家有所帮助,更多精彩内容请关注Java培训官网免责声明:本文由小编转载自网络,旨在分享提供阅读,版权归原作者所有,如有侵权请联系我们进行删除
[create_time]2022-10-28 14:26:58[/create_time]2022-11-12 14:26:58[finished_time]1[reply_count]0[alue_good]云南嘉荟教育[uname]https://pic.rmb.bdstatic.com/bjh/user/4eb23b6682caa61a9f528a8988d07e60.jpeg[avatar]百度认证:云南嘉荟教育信息咨询官方账号,教育领域创作者,本地资讯创作者[slogan]%³O솋㻺ѧɁӚ2005ĪցϦ#x0241;17ĪΪԆď؇ѸKʽǧITӢȋţ⎷ď؇䈋Ŷ̈ď֗Ҳ⁋Ǧ#x010F;؇ʌҵѹfӾΪǦ#x010F;ȭȋŷ믻[intro]15[view_count]Scala语言的主要应用领域与作用?
Scala的特性1.面向对象特性Scala是一种纯面向对象的语言,每一个值都是对象。对象的数据类型以及行为由类和特征(Trait)描述。类抽象机制的扩展有两种途径。一种途径是子类继承,另一种途径是灵活的混入(Mixin)机制。这两种途径能避免多重继承的种种问题。2.函数式编程Scala也是一种函数式语言,其函数也能当成值来使用。Scala提供了轻量级的语法用以定义匿名函数,支持高阶函数,允许嵌套多层函数,并支持柯里化。Scala的CaseClass及其内置的模式匹配相当于函数式编程语言中常用的代数类型(AlgebraicType)。更进一步,程序员可以利用Scala的模式匹配,编写类似正则表达式的代码处理XML数据。在这些情形中,顺序容器的推导式(comprehension)功能对编写公式化查询非常有用。由于JVM不支持尾部递归,Scala也不能完全支持尾部递归优化。不过,在简单的情况下,Scala编译器可以把尾部递归优化成循环。4.静态类型Scala是具备类型系统,通过编译时的检查,保证代码的安全性和一致性。类型系统具体支持以下特性:泛型类,型变注释(VarianceAnnotation),类型继承结构的上限和下限,把类别和抽象类型作为对象成员,复合类型,引用自己时显式指定类型,视图,多态方法。5.扩展性Scala的设计承认一个事实,即在实践中,某个领域特定的应用程序开发往往需要特定于该领域的语言扩展。Scala提供了许多独特的语言机制,可以以库的形式轻易无缝添加新的语言结构:任何方法可用作前缀或后缀操作符,可以根据预期类型自动构造闭包。联合使用以上两个特性,使你可以定义新的语句而无须扩展语法也无须使用宏之类的元编程特性。5.使用Scala的框架Lift是一个开源的Web应用框架,旨在提供类似RubyonRails的东西。因为Lift使用了Scala,所以Lift应用程序可以使用所有的Java库和Web容器。scala语言主要应用领域cala运行于JVM之上,并且它可以访问任何的java类库并且与java框架进行互操作,scala也大量重用了java类型和类库。大数据的开发语言是Scala的原因:1:大数据的本身是计算数据,而Scala即有面向对象组织项目工程的能力,又有计算数据的功能。2:现在大数据事实上的计算标准框架Spark,它是用Scala开发的,因为计算数据,Scala它是函数式编程,它实现算法非常简洁优雅。例:kafka,它是一个消息中间件,如果外部数据要流进大数据中心,我们一般都要用kafka作适配器,那如果大数据中心的数据流到外部,也是用kafka(如Spark计算的数据要交给HBASE或MySql,期间我们都会用kafka),很多的大数据组件都是用的Scala编写的,所以,如果你想成为一个较高级的大数据开发高手,你一定要掌握Scala。
[create_time]2020-11-20 20:39:37[/create_time]2020-12-05 20:25:38[finished_time]1[reply_count]0[alue_good]科仔又要补[uname]https://pic.rmb.bdstatic.com/bjh/user/3540267b75fdaedd0fb8902eb70a7c37.jpeg[avatar]她以绝美之姿行来,犹如夜晚[slogan]她以绝美之姿行来,犹如夜晚[intro]775[view_count]
Scala 是一门怎样的语言,具有哪些优缺点
以前在这个版块也答过关于Scala的问题,但那更多的是知识普及,而没有谈Scala是什么,做什么,以及有怎样的特点。Scala可怕的地方在于人人都能对它说上一二,但是不一定每个人都能明白。查看这个版块的帖子,有人把它当做Java的延伸版(一个UPenn宾大的学生Justin Kim ——此人目前在沃顿混得风生水起,当着我的面说Scala是在JVM上的脚本语言),有人把它当做JVM上的C++,有人觉得这是面对对象语言和函数语言的简单混合,有人觉得这就是Haskell,而且也还不如Haskell强。对Scala的偏见(或者是错误的见地)达到了很高的地步,Martin Odersky马丁·奥德斯基(Scala的发明者,EPFL教授)在今年夏天的Scala Day旧金山大会上发出了这张著名的玩笑照片:gt;这个图片上的翻译是:“Scala唯一的作用是将人引向Haskell”(原谅我没法完全直译)。马丁·奥德斯基以此作为一个笑话,说他该把Scala改一下名字,叫做Hascalator,还请人设计了一个Logo。不同的语言有不同的特点,同时也带来不同的优势。如果不能理解Scala的特点,就不可能知道如何运用Scala,以及发挥其最大的优势。一些语言有很显而易见的优势,也很容易理解,比如Python,Python的哲学(Zen of Python PEP 20 -- The Zen of Python),我很早的时候曾经觉得有道理,尤其是One way to do it(一种方法做一件事情),理由是对任何任务,虽然可以采用很多方法,但总有最好的一种方法,通过在语言或者哲学层面这样定义后,能简化程序员的任务,从而达到提高效率的方法。但经过一段时间的思考后,我突然发现Python其实并不是“一种方法做一件事”的哲学,而是“一种方法做一百万件事情”的哲学:极其有限的数据结构(只有四个: List, Tuple, Dictionary, Sets),以及不能查看时间复杂度的访问方法,比如鼓励人们使用for x in list。这种处理方式能达到Python最初的打算:发明一种每个人都能使用的简易语言,但是对于追求速度和效率的程序员而言,这几乎是略带噩梦性质的。当然,这不是说Python很慢,通过各种优化(比如NumPy/SciPy中的),以及Cython这样的将Python直接翻译为C/C++语言又重新通过C_Module方式读回Python环境的编译器,性能可以得到不少提升,但是仍旧,Python并不追求快。再举一个语言的例子:Java。Java的特性或者优势何在?Java的第一个优势在于它是第一个系统提供模块化(module)设计的语言(在此之前有Smalltalk存在,该货是OOP的鼻祖)。在Java之前,炒程序员鱿鱼是很困难的事情,那些C/C++程序员,以及而且尤其是那些Lisp程序员,一旦炒掉他们,新来的人没有十天半个月,甚至半年,是不可能搞懂前任人士的代码的。每个人的代码有自己的逻辑,自己的思路,写上个数万行任谁来看都头疼。这也是为什么Paul Graham保罗·格雷厄姆(写了《黑客与画家》)讲他给雅虎做了一个用Lisp写成的在线商店的案例,在他离开后,雅虎根本没法维护他写的代码,因为数万行Lisp没人能弄得很清楚。Java的模块化,给企业、大公司带来了第一道曙光,模块化之后,这些公司不再给程序员一整个任务,而是一大块任务的一小块。接口一定义,虚拟类一定义,换谁上都可以,管你是保罗·格雷厄姆这样的明星程序员,还是一个新来的大学生,程序员不听话就直接开除,反正模块化之后,开除程序员的成本大大降低,这也是为什么谷歌、甲骨文(这货最后收购了Java)一类的公司大规模的推崇Java,还一度提出了模块化人事管理的理念(把人当模块化的积木一样随时移进移出)。过度企业化后,这延展出了Java的第二个特性,束缚手脚。保罗·格雷厄姆在《黑客与画家》中写道,Java属于B&D(捆绑与束缚)类型的语言。为何束缚手脚?因为要让新手和明星程序员写出类似质量的代码,尽可能的抹消人的才华对程序的影响。不同于C/C++,老手和新手写出的Java代码不会有上百倍的耗时差距。但同样也导致了Java的一个弱点——不容易优化。很多优化Java代码的程序员必须要对JVM(虚拟机)进行优化,实际上增大了很多任务难度。通过Python和Java这两个语言的优缺点,返回来看Scala,就能瞬间明白Scala的定位了。首先,Scala不把程序员当傻子。当马丁·奥德斯基宣布Scala 2.12将要简化语法,推出Scala "Don Giovanni"项目的时候,在视频中说的很清楚:“Scala现在是为聪明人创造的,以后也是为聪明人服务的。”所以不同于Python让程序员用一种方法做所有事情,Scala提供一整套工具,让程序员自由选择,无论是mutable数据结构,immutable数据结构,并行(parallel)数据结构。然后在这些选择中,Scala再针对他们进行算法层面的特殊优化。Scala相信程序员的聪明才智,让程序员自行选择合适的结构,以针对变化万千的任务需求,这点是Scala做得极好的地方。再者,有人会说immutable数据结构占用内存,或者速度很慢。这是真的,但这不是Scala的错,而是这些结构就是这样定义的。这里讲的是Scala集合的运行速度,是一个来自Goldman Sachs的程序员讲他们为Java写的集合库(GSCollection)速度和内存消耗,但同时比较了gs-collection(goldmansachs/gs-collections · GitHub),Java,和Scala库的速度。最后Scala的可变集合mutable原生库完爆Java,和gs-collection基本持平。Scala的第二个优势,相较于Java而言,则是相信程序员的优化能力。在Scala with Style讲话中(),马丁·奥德斯基说:“很多程序员会告诉我,他们一般会重构他们的Scala代码两三次,甚至三四次。”这听起来似乎非常的没有效率,但Scala就是这样的语言,每一次重构,代码的性能或者是可读性都会有极高的提升。之前就有人提到过,Scala新手和老手写出来的代码完全会呈现两种不同的风格,甚至新人根本不能读懂有经验的Scala程序员所写的代码,有人于是戏称:“太好了,这样的话我们部门的实习生就不能乱碰我写的代码啦!”但其实不仅风格不同,执行效率差距也一定是巨大的。Scala提供一整套工具,但是要明白什么时候用拿一种工具,哪些算法能够随意调用,哪些算法不能,这一定要依靠经验、研究和学习以及对源代码的理解才能得知。最简单的例子,Scala的foreach()方法是高度优化过了的(尤其针对Range结构和Vector结构),但是fold()就不一定了。或者当受到诱惑想用zipWithIndex()的时候,一定要明白这是两次循环,最好改用Vector(...).indices.foreach()的方法,或者用.view来推迟执行。像这样的地方还有很多。所以在这个层面上来讲,简直和C++非常的相似。从另外一个层面来讲,不仅仅是要理解语言层面的优化,Scala作为一个社区而言,是非常追求运行速度的。Ruby社区就完全不同了,Ruby曾经是推特的主要语言。推特的团队找到了Ruby团队,说,你们能不能让Ruby运行的快一点,我们有这个这个和这个建议。Ruby直接把这些建议拒绝了,因为它们会增加语言复杂度,让Ruby不能继续做一个“fun”(好玩)的语言。而Python直接就立志做一个“Simple”(简单)的语言了。于是推特只好将后台换做Scala和Java的结合。有一位在推特工作的知乎友人在我的一个回答下留言说推特换用Scala后,TypeSafe(Scala的母公司)还送去了一个蛋糕。为了追求速度,Scala社区是绝对不会管所谓的“简单”或者是“好玩”,怎样有效率就怎样弄。与其专注于JVM的改进,Scala社区大部分在编译器上下功夫,比如很著名的Miniboxing(Miniboxing),这是一个编译器增进器。Miniboxing做的是什么呢?只做一件事:防止auto-boxing和auto-unboxing。所有的泛型,尤其是原生类泛型(Primitive Types),诸如Int、Double等等,在进行各种操作的时候会自动取出和装回它们所属的类中去——这个我解释的不太好,但是可以看这里(Java 自动装箱与拆箱(Autoboxing and unboxing))。Miniboxing这样的插件可以让所有的原生类泛型再也不用自动装拆箱,从而将Scala的运行速度提升1.5倍到22倍()。当然这样的东西可不是白来的,这是马丁·奥德斯基的PhD博士学生做的一个研究项目,然后为OOPSLA写了一篇论文(),所以怪不得这玩意Scala可以有,但其他语言想要有都没有。另一个Scala的很大优势就是所谓的Macro——宏。宏本身作为元编程而言,其实和运行速度是没有什么太大关系的,反而,因为对反射(Reflect)的利用,可能会影响到速度。但Scala社区对宏的理解显然和最初的设计理念有偏差。因为Scala本身是没有传统意义的循环的(for-loop),所以很多时候循环必须利用while或者foreach。但是部分追求效率的Scala程序员们利用宏为Scala写了一个传统循环,叫做cfor,被收录在Spire(non/spire · GitHub)数学计算库中。cfor的写法如下:import spire.syntax.cfor._// print numbers 1 through 10cfor(0)(_ println(i)}而这玩意运行效率如何呢?文章中做了一次测评,将cfor和zip写的一个算法作比较——在公布结果之前,我想说的是,zip并不是一个高度优化的方法,所以本身就慢很多,cfor用了26.1毫秒运行,zip方法用了7.4 秒运行,这几乎是284倍的速度差距。通过这两点,Scala的一个优势就很明显了——多样化。当需要写简单的代码,像Python一样当脚本语言使用时,Scala提供大量的原生方法和数据结构,可以很轻松的写出比较复杂的操作。但当需要速度的时候,又可以通过重构来获取数十倍或者上百倍的速度提升。通过Miniboxing一类的编译器增强器,Scala在某些操作的速度是必定超过Java的。Scala的第二个优势就是——一帮勤劳勇敢的PhD博士生。二十一世纪的程序语言和二十世纪的程序语言已经不能比拟了。那个年代的普通人(甚至是学生)还能任意发明一下语言,稍微把编译器优化几次就能上得了厅堂(比如那一大堆Lisp方言),到了这个年代,编译技术已经达到了很复杂的程度(虚拟机技术也是如此),优化和语义理解,程序语言的定义与延展,再也不是随便任何人都能搞定的工作了。作为编程语言方面的教授,马丁·奥德斯基不断的将最前沿的学术界成果转移到Scala这个语言中,还让他的博士学生发展出新的,让语言运行得更快的方法,这些都是其他语言,尤其是Python、Ruby、甚至是Go都没有的优势。当然,说了这么多,总会有人说了,Scala如果像C++一样难,又追求速度的话,为什么不直接去学C++,原因很简单——现在有很多在JVM上面写成的软件啊!大家又不是Haskell程序员,压根不打算一切自己写呐。
[create_time]2017-11-16 12:53:01[/create_time]2017-11-16 14:48:34[finished_time]1[reply_count]2[alue_good]从空去听8[uname]https://himg.bdimg.com/sys/portrait/item/wise.1.f10f3c30.WvzbtlmjSOOyeP0--5NgIQ.jpg?time=5048&tieba_portrait_time=5048[avatar]TA获得超过7430个赞[slogan]这个人很懒,什么都没留下![intro]709[view_count]