首页 文章 精选 留言 我的

精选列表

搜索[SpringBoot4],共10000篇文章
优秀的个人博客,低调大师

Beetl开源那些事情4: 开源10年总结

之前我写过Beetl开源那些事情 ,最早是2014年写的。每篇都会对开源有不同的感悟,今天这篇应该是这个系列结束之作。 第一篇,2014年,Beetl开源那些事情,感慨开源艰难,国外开源做比国内开源更容易得到信任 第二篇, 2015年 Beetl开源那些事情2,建议开源不要给公司,自己独立自主,同时,也对小白很不爽 第三篇,2018年Beetl开源那些事情3,对国内开源的待遇感到不公平,同时也对开源有所总结, 第四篇,也就是这一篇,在人到中年的时候,总结一下开源11年的感触。 一转眼,Beetl已经开源11年了,从早期托管到sourceforge,到后来的github,然后再到gitee,如今Beetl已经演变成为模板类语言的天花板级别的实现了。无论其功能,性能,可定制性都是顶配的,是国外开源不能比的。每天Beetl的文档都会被打开2000次。独立访问用户上百人。这在现在动态页面不怎么流行的情况,这个浏览量还是非常高的 Beetl之所以是模板语言的天花板实现,是因为它满足了几乎对所有模板引擎的需求,有些如下特性是国外模板语言不具备的 自定义定界符和占位符 使得模板更适合特定文件,比如在htlm里可以定义<!--# -> 作为定界符,再比如在代码生成Java文件模板里,可以定义 //# 和回车为定界符。避免了freemaker那种生成代码模板出现xml标签怪怪的感觉 脚本语法和xml标签语法同时支持,实际上xml标签会被翻译成相应的脚本语法,类JS语法非常容易学习。Freemaker只有XML标签,Velocity等只有脚本语法。 高性能执行引擎。 Beetl提出和借鉴了很多Java高性能编程方式(后来总结为我的Java系统性能优化书籍或者电子版)。比如,我在JDK8中看到的将浮点数转化成String用的性能技巧 FloatingDecimal.getBinaryToASCIIBuffer ,在Beetl中就早已经使用。可以查看我的书,里面提到了很多性能优化手段,都用在了Beetl里,或者我曾经的优化的JD的核心交易系统里。如下是一个性能测试汇总,或者直接运行JMH工程,你可以下载下来看看。 可定制的语法树。Beetl可以定制语法实现,比如简单的占位符输出 ${},可以解释为文本输出,也可以像再BeetlSQL那样,解释为输出"?" 从而防止SQL注入。 再比如Beetl在线引擎,http://ibeetl.com/beetlonline/ 运行了很多年从来没有意外过,那怕你输入如下代码也不会无限循环运行 while(true){ } 定制话的在线引擎会对while语法提供新的实现,只会执行固定的次数,这也是Beetl被很多开源平台用在在线模板或者脚本引擎的原因。 反观国内牛逼的FastJSON,缺少定制,如果Fastjson在渲染成JSON的时候,提供Interceptor或者可定制的注解,那么他的功能必然比Jackson更强大。 这种定制设计影响了BeetlSQL,比如你见到的BeetlSQL大部分注解和使用习惯都是可定制的,比如在BeetlSQL 2中,如下定义一个BaseMapper //BeetlSQL 2定义 public interface BaseMapper<T> { void insert(T entity); } insert方法的实现需要在别的地方配置。但是,到了到了BeetlSQL3,改成了如下 //BeetlSQL 3定义 public interface BaseMapper<T> { @AutoMapper(InsertAMI.class) void insert(T entity); } 这样,很容易定义N个方法,只要使用@AutoMapper标注一下此方法的实现类即可。这种技巧用到了BeetlSQL其他地方,如果你看别的ORM工具,你以为的需要特殊实现,在BeetlSQL中都很简单。比如想实现对脱敏数据的存取。 @Table(name="sys_user") @Data public static class UserData{ @AutoID Integer id; @Base64 String name; } 你可以自定义个Base64注解,并再注解上申明其实现类即可 @Retention(RetentionPolicy.RUNTIME) @Target(value = {ElementType.METHOD, ElementType.FIELD}) @Builder(Base64Convert.class) / public static @interface Base64 { } Base64Convert是此注解的实现类,实现AttributeConvert接口即可。 在2000年的最初10年,大家只希望开源具有完善的文档和充分的示例 。然而,如今不一样了,开源这11年,越来越意识到,把代码写的越好,开源本生的定制性越强,那么开源更容易被接受。开源也更容易发展-我最初写Beetl开源的时候,还有藏着掖着代码的想法,很龌蹉想法。 开源这11年,感觉变化还有 开源使用者已经开始学会提出问题。以前提问甚至连个错误贴图都不会贴,现在不仅仅有贴图,还有红圈标注重点,甚至还有自己的见解。 开源使用者已经能通过源码来解决使用问题,开源使用者甚至能贡献新的开源代码,一个普通程序员在多个开源项目里做贡献常见 无论是高端人才,还是一个初中学历的就业者,对开源的贡献都是一样的大。 开源作者得到了社会认可,相当于半个学历的提升了。比如,我作为普通院校本科生,这几年,有机会去更酷的公司,有机会给电子工业出版社写俩本书,以及能交往很多技术大牛,都是跟开源有关系的。我应该是国内唯一写俩个很好开源,出版过俩本很好书的人 公司资助的开源越来越强大,这可能会扼杀个人开源独立性,但谁不羡慕,一边做开源,一边有公司支付薪水的日子。比如API JSON就被腾讯收编,Shard-JDBC就被JD收编。我也多么希望我的开源也被收编:) 公司开源得到了各种媒体的资源倾斜,媒体资源而以前更倾向于个人开源。 开源11年,我也从青年变成中年,程序员的中年,感觉真的不是很好。如果时间能回到过去,我一定会对当时的我说,"别搞开源,别搞开源,别搞开源,去刷题,别在北京呆着,去杭州,别怕996"。然而,没有如果,把一个开源从无做到优秀,做到仍然在坚持,耗费了太多的精力。这里有个大概的统计数据,以解决Beetl&BeetlSQL的用户的问题(算上官网论坛和Gitee,Github,)至少解决了2500个用户提出的问题和建议。每个问题,都有可能是1小时,或者一天的时间的付出。 比起解决用户问题,编写文档和博客,和Beetl&BeetSQL代码编写,更是翻倍的时间耗费。如果把这些时间用在其他学习,我不会错过很多炫酷知识,以及更酷的公司。 我当时的某个HP同事就有先见之明,同样无聊的他刷了很多算法题目。得以顺利进入更好的公司。现在已经是技术总裁。而我,只是个中年程序员。 我之所以有点后悔,不仅仅是因为如今的中年程序员尴尬身份,而是因为刚碰到了失业。当初本来有更好的选择,但老同事三顾茅庐,又说公司有美国AI工程院士李飞飞作为董事长的背书,我想必然靠谱和有前景,谁愿意错过未来呢,厌倦了CRUD的我,觉定冒险试一试尚未A轮的创业公司。亢奋了一年多,结果是,当所有的AI支撑系统和业务实现都被我完成的很好情况下,却因为AI同事不给力,导致李飞飞决定暂时放弃中国业务。 这个公司有很多中年同事,都是熟人介绍,聘请过来打公司基础的,刚过完年,当天就得到了裁员通知,不得不说资本的力量是无情的。我对面的医学博士,非常聪明,在医学领域深更多年,也在裁员之列,之后他成天都失眠。 中年大叔们什么都没有做错,却被惨遭淘汰 。我在被裁员之前三个月还写了博客《中年程序员转》来调侃未来的自己。没想到这么快就实现了,今年被裁员的经历,整的我人生都不自信了。 开源11年,技术上炫酷的事情都做过,而且做的到很好,但暮然回首,事业一塌糊涂,甚至到了中年失业的状况。这一方面是IT行业本来变动就大,并没有一个行业能容你呆很长时间,比如电信没落,网络彩票不让搞,P2P违法和金融IT投资下降等,另外一方面还是没有太多时间和精力学习炫酷技术,以此进入好的公司。 关于未来,前景不明,但对于我的开源Beetl和BeetlSQL,我一定会坚持维护下去,在我规划中,至少还有3年的时间去完善剩下的功能和使用体验,我也找到一些志同道合的人一起维护。 希望10年以内,一提到模板引擎,都把Beetl作为技术选型之一,一提到数据库访问,能想到BeetlSQL也是备选工具之一。 (插图备注: 科学家一直没搞明白猿人进化成人类的关键步奏,我从996得到启发,也许高强度劳动是关键)

优秀的个人博客,低调大师

2021年大数据和分析4大趋势

自动驾驶汽车、仿生机器人和自主送货的无人机是我们今天看到的数字化转型的尤物,不时出现在新闻头条。不过如果没有第四次工业革命的石油--数据以及分析技术来让我们解读和理解数据,这些都是不可能实现的。 大数据是一个术语,它被用来描述处理数据的技术和实践,这些数据不仅数量大,速度快,而且有许多不同的形式。埃隆·马斯克的自动驾驶汽车以及杰夫·贝佐斯的无人便利店背后,都有一个复杂的大数据系统和一支聪明的数据科学家队伍,他们已经把愿景变成了现实。 “大数据”这个词可能不像几年前那样无处不在,因为它所体现的许多概念已经彻底融入了我们周围的世界。不过大数据并没有过时,事实上,即使在今天,大多数组织也在努力从其所能接触到数据中获得价值。作为一种商业实践,大数据仍然处于非常初级的阶段。 因此,以下是我对一些关键趋势的看法,这些趋势将影响今年和不久的将来如何将数据和分析用于工作和生活中。 AI推动更深入的洞察力和更复杂的自动化进程 人工智能(AI)改变了分析领域的游戏规则。由于公司及其客户生成了大量结构化和非结构化数据,自动手动分析也只能触及表面。 今天使用的人工智能,最简单的思维方式是计算机和软件能够自我学习。举个简单的例子,我们的客户中,哪一个对我们最有价值? 如果是传统的、非学习型的计算方式,可以通过建立一个数据库来探究一下哪些客户花钱最多。但是,如果出现了一个新客户,第一次交易就花了100美元,该客户是否比过去一年每月消费10美元的客户更有价值?要了解这一点,我们需要更多的数据,比如客户的平均终身价值,客户本身的个人数据,比如他们的年龄、消费习惯或收入水平也会很有用! 从数据集中解读、理解和得出见解是一项复杂得多的任务。这就需要人工智能,因为它可以尝试解释所有数据,无论是否理解数据之间的关联,并根据我们所知道的一切预测客户终身价值。它不一定会得出“正确”或“错误”的答案,但是能够提供一个概率范围,然后根据这些预测的准确性进行改进。 探索和解释数据的新方法 数据可视化是分析过程中的“最后一公里”,然后我们才会根据我们的发现采取行动。传统上,人机交互是通过可视化来进行的,采取图形、图表和仪表盘的形式,突出关键的发现,帮助我们获得数据价值。 问题是,并不是所有的人都能洞察隐藏在一堆统计数据中的潜在价值。随着组织内每个人从数据中获得洞察越来越重要,新的技术和方法也不断发展。 其中一个取得重大突破的领域是人类语言的使用。分析工具可以让我们对数据提出问题,并以清晰的人类语言获得答案,这将极大地增加对数据的访问,并提高组织的整体数据能力。这一技术领域被称为自然语言处理(NLP)。 另一个是新技术,沉浸式体验发挥数据价值。扩展现实(XR)这个术语包括虚拟现实(VR)和增强现实(AR),他们是推动创新的动力。VR可以用来创建新型的可视化,让我们从数据中传递出更丰富的意义,而AR则可以直接向我们展示数据分析的结果如何实时影响世界。例如,一个试图诊断汽车问题的机械师可能会戴着AR眼镜查看发动机,并预测哪些部件可能有问题,哪些部件可能需要更换。在不久的将来,我们应该期待可视化或数据交流的新方式的应用。 混合云和边缘计算 云计算是另一个对大数据分析方法产生巨大影响的技术趋势。无需昂贵的本地基础设施的情况下,就能够访问庞大的数据存储和对实时信息采取行动,这推动了按需提供数据驱动服务的应用程序和初创公司的发展。但完全依赖公有云提供商并不是最佳业务模式,当你将整个数据操作托付给第三方时,难免对数据安全和治理产生担忧。 许多公司现正在尝试混合云系统,其中一些信息保存在AWS、微软Azure或谷歌云等公有云服务器上,而其它个人或敏感数据则部署在本地或私有云。云提供商也不断布局混合云,提供“云-本地”解决方案,提供公共云的所有丰富功能和稳健性,但允许数据所有者完全保管其数据。 边缘计算是另一个强劲的趋势,它将在未来一年内影响大数据和分析。从本质上讲,边缘计算意味着设备在收集数据的地方处理数据,不用将其发送到云端进行存储和分析。有些场景对时延要求很高,比如从自动汽车上的传感器收集的数据,需要及时处理。此外,当消费者可以直接从他们的设备中收集洞察力,而无需将数据发送给任何第三方时,隐私也有了一定的保障。例如,谷歌新安卓手机上的Now Playing功能会持续扫描环境中的音乐,因此它可以告诉我们超市中播放的歌曲或我们正在观看的电影的名称。这在纯基于云的解决方案中是不可能的,因为用户会拒绝向谷歌发送全天候的音频环境流。 DataOps的崛起 DataOps是一种方法和实践,它借鉴了软件开发中的DevOps框架。DataOps(数据操作)是一门新兴学科,将DevOps团队与数据工程师和数据科学家角色结合在一起,提供一些工具、流程和组织结构服务于以数据为中心的企业。 DataOps工作不需要任何正式的培训,对IT职业感兴趣的人希望从事创新的项目,这通常是数据项目,DataOps为其提供了一个很好的机会,我们还将看到“DataOps即服务”供应商的普及,提供数据流程和管道的端到端管理,并按需付费。这将继续降低小型组织和初创组织的进入门槛,这些组织对新的数据驱动服务有很好的想法,但缺少实现这些想法所需的基础设施。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册