导航:首页 > 编程语言 > berkeleydbjava

berkeleydbjava

发布时间:2023-04-30 15:00:08

⑴ 为什么 MySQL 使用多线程,而 Oracle 和 PostgreSQL 使用多进程

.NET平台很棒。真的很棒。直到它不再那么棒。我为什么不再用.NET?简单来说,它限制了我们选择的能力(对我来说很重要),转移了我们的注意力,使得我们向内认知它的安全性,替代了帮助我们认知外面广阔世界的所有可能性。[系好安全带:这个文章的长度几乎成了一本书…]优点首先让我开始说说.NET做得对的许多事吧,尽管这其中的大多数并不来自.NET本身,但却是由.NET社区而来。C#C#令人惊叹。我认为它是一个令人惊叹的编程语言。从强大的C语言背景而来,我彻底地喜欢其语法,流和这门语言的所带来的感觉。当然有我可能改变的事,但总体来说它是一门扎实的语言。并且基于开发人员使用的编程语言如此巨额的百分比和Windows操作系统的优越性,它是一门众所周知的语言。ReSharper我也很喜欢Resharper。在JetBrains工作的开发者们都是奇迹般的人。如果没有ReSharper和一些相关的工具,我可能并不会如此喜欢C#。BDDandMSpec我也很喜欢简称为机器规格(mspec)的BDD风格的框架。它是一个令人惊叹的测试框架,真正支持在测试中使用正确的语言测试本身。在使用mspec之前,我的测试真是一团糟并且很碍我的事。另外,当我们创建GoConvey—基于Golang的BDD测试框架的时候,Mspec对于我的组织来说是一个巨大的灵感和激励。多语言运行时我认为多语言的CLR(公共语言运行时)的观念真得使得JVM的世界思考着。我不知道任何非java的JVM语言在CLR之前,但随着“公共语言运行时”的到来,我的理解是这使得使用JVM的人们向前进并且最终创造了如Scala和Clojure这样伟大的JVM编程语言。如果我错了请纠正我。再者,CLR使得Sun公司的人们坐下来并关注它,因为Java有一点陈旧并且随着Java8的到来,仅仅现在才在多个方面追赶着。竞争是一件非常好的事。NuGet另一个显着的例子是NuGet。这个包在Windows中作为一个整体特别是在Windows的开发中,它的管理轶事是糟透的。NuGet解决了很多问题,他们也通过从Python和Ruby借用了很多东西去做了很多正确的事。有改进的余地吗?当然。但比起其他一些选择在这儿或那儿的包升级来说,我还没有感到使用NuGet有这许多痛楚。Mono对于Mono的开发者们,我不能不说太棒了。他们所创造的太惊奇了。没有任何官方支持和不顾潜在的悬在他们头上的法律问题,他们向前推进并创造了一个居然能替代官方运行时的实现。我已经有一些运行在产品中应用程序,在Mono下运行了几乎一年而没有任何问题。它的产品准备好了吗?这可能取决于你的应用程序(见下文“Mono”)。CQRS和事件溯源可以认为,关于.NET最好事之一是,它是CQRS的诞生地并有相关的技术:事件溯源。就算这样,CQRS+ES本身并没有什么很新的东西。正如GregYoung将会告诉你的,这是由一堆40年历史原料为我们重新打包并更名的。对于大型代码库我有些非常严重的问题,当我5年前使用CQRS+ES的时候,它完全释放了我的域。CQRS+ES现在是命名模式的并且其成长是显而易见的。这可能是因为.NET已经能够和其他的开发平台交互共享的原因。除了这个之外,大多数的创新是从外部来的。缺点优点先放在一边,让我们看看什么出错了和我为什么不再用.NET框架。关于我最近开发平台的迁移,最能激励我的事是我可以利用许多最好的部分而丢下不好的部分(如下文所说)。Windows正如前文所述,当面对基于网络的服务器软件时,Windows并不是一个好的选手。在我看来,Windows的另一个真正的大问题是传统的Windows开发者是通常仅仅擅长于Windows,当他们离开安乐窝之后就会很快迷失,这对于Linux开发者来说却不是问题。计算远不止是Windows。开发者仅仅能操作单一的操作系统的一个问题是它不可避免得导致Windows的激增。换句话说,Windows生了Windows。没法打破这个循环。另一方面,*NIX的开发者通常熟悉多操作系统(Linux,Unix,OSX,Windows等等),一个操作系统的内部工作原理,不同的分布(基于Debian和基于Fedora),窗口管理器,桌面管理器,文件系统,包管理,编译,重新编译,重新打包,命令行“fu”等等。我的一个心病是文件系统。NTFS并不是系统唯一的文件系统,对于任何给予的任务它几乎都不是最好的选择。ZFS,BTRFS,ReiserFs,ext*等等,有一些很酷的特性。我也很喜欢为了各种高速/透明的磁盘操作,能从BASH创建回路设备或者创建RAM设备。这在Windows中不会发生—如果没有第三方软件的话。在AWS云服务中,启动一个Windows机器要花掉足足10多分钟。我大约15-20秒就能启动一个简单的Linux机器。当涉及到云计算规模,它能够迅速扩展是很重要的,因为当扩展很重要时,10-15分钟就像是永恒的。VisualStudio在我这另一根刺,当属VisualStudio。我需要一个大大超出预期的IDE去做任何开发,这个想法困扰着我。它只是如Windows一样庞大的资源猪。我有一个内核i73770K3.5GHZ的台式机,以16GB的内存和最大4512GB的固态硬盘去编译。它差不多刷爆了Windows体验指数,但Windows+VS仍然很慢。(是的,ReSharper使得它更慢了,但是ReSharper对这来说是值得的。)现在我在MacBookPro上开发,它比起我的强大的台式机来说只有更少的CPU马力,但运行明显更快,在一个短小的学习曲线之后,UX(用户体验)变得无限美好了。事实上,我甚至不再用鼠标了—我的双手一直在键盘或触控板上,我可以用手势操作我的电脑并让它回应—不像在Windows。关于VS很酷的一个事是调试器。它的查看和使用,令人难以置信得方便。每隔一段时间会在监视窗口报告错误的值,导致花费时间去调试。同时,这也是很大的负面,因为CLR默认的,多线程的世界使得我一开始就需要一个调试器。没有调试器是一个解脱的体验,因为它迫使你以另一种方式编程。VS同样也有创建“csproj”和“sln”文件的坏毛病。我恨这些。当然,C#必须知道编译什么和何时编译。我理解这点。在Golang中,引用在代码中使用了很重要的语句。如果它不是.NET中用到的工程文件,我可能使用简单的文本编辑器编码C#,并且对这门语言更流畅。使用gitrebase操作时,这些文件也有导致合并冲突。别让我开始说换行符的差异。我不能相信直到今天我们还在处理这样的事。如果VS解决方案文件以Linux行结束符结束,通过双击它并不能载入该解决方案,因为VS解决方案文件分析器读不出它来。源代码管理幸运的是,我早就跳出了微软阵营的源代码管理(版本控制系统VSS)。我早在2000年初,在VSS无数次丢失了我的提交之后,就使用了Subversion(译者注:Subversion是开源的版本控制系统)。之后git(译者注:git是开源的版本控制系统,内容管理系统等)出现了,我又迷上了它。不幸的是,没有Windows的接口—对我来说是典型的遭遇。最终有人创建了一个接口,我就用了那个并且没有回头。Git是一把非常锋利的刀,但当你正确运用它的时候,它是一个强大而高效的工具。我曾经在一个小工程中用过TFS(译者注:TeamFoundationServer,工作流协作引擎),它是一个怪物—和所有来自Redmond(译者注:美国微软总部)的产品一样。它感染了我的项目文件并且污染了我的源代码目录。真可恶。不,还是谢谢你。给了我任意一天用命令行git…或者可能是SourceTree,如果你需要从GUI得到一点关爱。Mono是的,这是第二次提及Mono。正如Mono本身如此惊艳一样。在.NET的世界,它仍然二等公民。无论什么时候我尝试在Mono上运行任何重要的东西,我通常都在和漏洞作斗争。幸运的是,对下载代码,查找问题,发送请求和在Linux上编译代码我没有感到不舒服。但是这件事我都记不清做了多少遍了。是的,CLR是个巨大的怪物,并且对一个非官方的应用在不同的操作系统都有相同的行为,简直是个类似于分开红海的奇迹。但事实是,我不得不花费如此多的时间来填补漏洞以使我的代码能够正确运行,实在是很难为其辩护。Mono的特定区域也慢。也许它不是在慢在过载,但对我来说Web服务器是关键所在。并且它非常慢,最后,慢到了最底下—即使是微不足道的东西。我想好消息是它只能从这儿得到更好的。我也应该提及Mono的开发者可能忘了Linux,比起我可能知道的还多,所以我不能太挑剔。IIS也许IIS在尝试着为太多的应用程序做太多的事情。它从作为一个web服务器变为像J2EE应用程序容器一样的应用程序宿主。它也站在慢速这一边。我猜如果我需要更高的性能,我应该编写我自己的web服务器,但我真的很想只关注我应用程序的代码。可能利用Windows事件服务器将是好的,但nginx(译者注:一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器)和其他服务器只是不喜欢在Windows中生产。虚拟的以JVM为基础的实现,例如Netty(译者注:JBOSS提供的一个java开源框架),很容易处理每秒650K+/的请求量。IIS在运行一个简单的CLR应用程序“Hello,World!”,处理大约每秒50K的请求量时就会壅塞。(有趣的题外话,参考基准开发者通过TCP套接字创建了一个简单的C#的web服务器,它能处理大约每秒120K的请求量。)狭隘的心理前些年有个运动叫做ALT.NET。该运动是全部是关于寻找我们自身之外的更广阔的开发社区以作为一个整体,并汇聚不同的部分。有趣的是,那是StructureMap、Autofac、NuGet、ASP.NETMVC和许多其它工具的灵感来源。在传统的.NET的圈子里,这个运动受到了很多的不屑和鄙视。我把这看作是,作为一个整体的社区普遍的狭隘心理和怠惰的一个极大的例证。(的确,它们中的一些可能会消失,进而以包括Redis,MongoBD还有其它的不同的技术而出现。)有这么多很棒的方案在那里。假定微软已注定是唯一正确之路的想法是荒谬的。如果是这样的话,我们就都还在使用VisualStudio的设计工具去拖放按钮和链接元素到一个WebForm的界面上,我们会设定了该按钮并且依赖ViewState以帮助我们与可怕的HTTP所带来的恐惧隔开。我从我的一个部署的代码库中最后一个WebForm中摆脱的那一天,是个光荣的值得庆贺的日子。谁又曾想过“网络控制”是个好主意?很显然我考虑过因为我喝了Kool-Aid(译者注:卡夫公司出品的饮料,这里意指明知是注定的或有危险的仍然去做,有负面涵义)并且完全接受它。它狠咬了我。见过2MB的ViewState吗?[注:当我写这篇文章的时候,原来的标题,“为什么我不再用.NET”,意味着整个.NET生态系统。标题感觉有点短于是我更新为“为什么我不再用.NET框架”。我想.NET作为一个生态系统,包括了所有的工具,工程,平台,组织还有很多开发者。这就是为什么有些更广泛的.NET社区的元素在我的这篇文章中受到抨击原因。]性能杀手C,Java和C#中典型的多线程范例都强烈推荐使用锁和互斥。对于锁来说有个隐藏的开销:它们慢得难以忍受。使用Disruptor(JVM中的无锁的环形缓存[译者注:实际上就是拥有一个序号指向下一个可用元素的数组]),你可以很容易得每秒处理20M以上的事件。在.NET中使用规定的“最佳实践”等任何超过每秒十几次的传输,都被认为是体面又好的性能表现,在这一点上来说你仅仅需要更大/更好/的硬件设备。事实上,我见过第三方客户端库(Rabbit,Couch,Mongo等等)中锁语句遍布整个代码。即使在我的代码中没有任何的并发,默认的和首选的方法都用了锁。无锁的、事件驱动的方法允许你大幅降低硬件和资金支出。大部分应用程序可以轻易地运行在两台机器上,第二台机器仅仅在冗余和失效备援时是必须的,以防因为硬件相关的问题导致第一台机器不可用的时候起作用。这个问题的另一个方面是调用网络和磁盘子系统的传统方式:同步,阻塞代码。如果你需要多个并发的HTTP请求,你需要的线程。大多数人不知道的是,为维持线程多出的1-2MB和上下文切换线程的需求,使得CPU内核消耗所有的时间颠簸在上下文切换上而不是做真正的工作。所以现在我们得到了在一个应用程序中数百或数千的线程,占用了RAM,并造成CPU停滞不前。还有个更好的方式。Netty/NIO(JVM),Erlang,Node,Gevent(Python)和Go都支持使用事件驱动的子系统操作(选择/epoll[译者注:Linux内核中的一种可扩展IO事件处理机制]/kqueue[译者注:FreeBSD的可扩展的事件通知接口])。这就意味着当等待数据包被tx/rx跨网络的时候,CPU可以自由地去做其它,重要的工作。因为JVM的成熟,Netty可以认为是做这项工作最快的,但我喜欢Go用Goroutines操作这个的方式—它简单,优雅,很容易推理,没有像意大利面条一样的回调。SQLServer作为一名.NET开发者,当你开始一个新的工程时,有一些事是你通常会去做的:创建一个新的solution将其部署到TeamFoundationServer(译者注:Microsoft应用程序生命周期管理(ALM)解决方案的核心协作平台)IIS中建立相应的网站入口创建一个新的SQLServer数据库在solution中关联EntityFramework(通常是2010年之后创建的工程)开始设计你的数据库和ActiveRecord实体在大多数情况下这不是编写代码的正确方式。当然它可能在某些情况下有效,但是作为一个“默认的架构”它并不是你想要的。为什么在我们甚至还没理解问题领域之前已经做了任何技术上的选择?这简直是本末倒置了。微软的生态系统鼓励每个人使用SQLServer。在VisualStudio中和SQLService进行交互或者使用SQLManagementStudio(和它的前身,SQL查询分析器)是如此令人难以置信的容易。这种以数据库为中心的重点,是钦定的或唯一正确的方式的一部分。它使你更加迷恋微软。厂商锁定始终对厂商来说是好的。为什么我们要如此开发?为什么我们不地考虑应用程序的行为而不是它如何存储的?现在我所有的项目都使用基于JSON的键/值存储。有了这种功能,我可以选择任何我想要的存储引擎,包括SQLServer,Oracle,PostgreSQL,MySQL,Cassandra,CouchDB,CouchBase,Dynamo,SimpleDB,S3,Riak,BerkeleyDB,Firebird,Hypertable,RavenDB,Redis,TokyoCabinet/Tyrant,AzureBlobs,文件系统中的明文JSON文件等等等等。突然之间,我们能够开始根据其优点而不是仅仅对其熟悉来选择存储引擎了。题外话:在AWSRDS的云上运行过SQLServer吗?别这么做。当然它会工作,但是一些例如复制这样最简单的事是不存在的。文章充斥着对SQLServer不能在AWSRDS上工作的引用。结论也许我在软件开发中学到的两件最重要的教训是:边界和封装的重要性(以多种形式)付出代价以得到正确的模型和抽象许多年前我恨“模型”这个词。每个人都会把它到处扔,它是一个如此过载的术语,很难理解它的含义和它为什么这么重要。就这点来说,我仅仅会说模型是对你想要封装的现实的一个有限的表示。也许最简单的例子就是地球仪的墨卡托投影了。这很确切得说明了一件事:导航。如果你在其他的事情上使用它,它并不毫无价值。如果你不专注于付出代价去使模型正确,去封装商业现实,那么没有任何技术能够拯救你。我对.NET最大的抱怨是,“唯一正确的方式”引导你远离理想的模型并把你推向关注实现细节和技术缺陷的方向。这样的关注导致技术实施渗血并且感染模型,最终导致它腐烂变质,因为它不能适应不断变化的商业需求。当这发生的时候,开发者挣扎着并蹬踢着,如同吸毒者一样,他们从一个新技术转向另一个,以期望下一个强大的技术能够治愈他们的病痛。技术本身并不是灵丹妙药,相反地,它是关于取舍和选择。只有正确地理解了商业行为并把它们封装进结构良好的,易于理解的模型中,以帮助保持技术堆栈在属于它的地方—作为一个实现细节。这就是我为什么不再用.NET框架,因为它不断地重申自己(的主张),不断地想要比它的本身的:一个实现细节。

⑵ Java软件工程师的发展路径

Java软件工程师的未来发展方向大致分为两类:
一是成为管理人员,例如产品研发经理,技术经理,项目经理等;
二是继续他的技术工作之路,成为高级软件工程师、需求工程师等。 Java语言是一个面向对象的。Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。Java语言全面支持动态绑定,而C++ 语言只对虚函数使用动态绑定。总之,Java语言是一个纯的面向对象程序设计语言。
Java语言是分布式的。Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
Java语言是健壮的。Java的强类型机制、异常处理、废料的自动收集等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择。Java的安全检查机制使得Java更具健壮性。
Java语言是安全的。Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。除了Java语言具有的许多安全特性以外,Java对通过网络下载的类具有一个安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类SecurityManager)让Java应用设置安全哨兵。
Java语言是体系结构中立的。Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件),然后可以在实现这个Java平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。
Java语言是可移植的。这种可移植性来源于体系结构中立性,另外,Java还严格规定了各个基本数据类型的长度。Java系统本身也具有很强的可移植性,Java编译器是用Java实现的,Java的运行环境是用ANSI C实现的。
Java语言是编译解释型的。如前所述,Java程序在Java平台上被编译为字节码格式,然后可以在实现这个Java平台的任何系统中运行。在运行时,Java平台中的Java解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。
Java是高性能的。与那些解释型的高级脚本语言相比,Java的确是高性能的。事实上,随着JIT(Just-In-Time)编译器技术的发展,Java的运行速度可以和优化过的本地代码相媲美。
Java语言是多线程的。在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建。通常有两种方法来创建线程:其一,使用型构为Thread(Runnable) 的构造子将一个实现了Runnable接口的对象包装成一个线程,其二,从Thread类派生出子类并重写run方法,使用该子类创建的对象即为线程。值得注意的是Thread类已经实现了Runnable接口,因此,任何一个线程均有它的run方法,而run方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。Java语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为synchronized)。
Java语言是动态的。Java语言的设计目标之一是适应于动态变化的环境。Java程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。另外,Java中的类有一个运行时刻的表示,能进行运行时刻的类型检查。Java语言的优良特性使得Java应用具有无比的健壮性和可靠性,这也减少了应用系统的维护费用。Java对对象技术的全面支持和Java平台内嵌的API能缩短应用系统的开发时间并降低成本。Java的编译一次,到处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式。特别是Java企业应用编程接口(Java Enterprise APIs)为企业计算及电子商务应用系统提供了有关技术和丰富的类库。
和C/C++的差异熟悉C语言和C++语言的读者一定想搞清楚这个问题,实际上,Java确实是从C语言和C++语言继承了许多成份,甚至可以将Java看成是类C语言发展和衍生的产物。比如Java语言的变量声明,操作符形式,参数传递,流程控制等方面和C语言,C++语言完全相同.尽管如此,Java和C语言,C++语言又有许多差别,主要表现在如下几个方面:
(1) Java中对内存的分配是动态的,它采用面向对象的机制,采用运算符new为每个对象分配内存空间,而且,实际内存还会随程序运行情况而改变。程序运行中 Java系统自动对内存进行扫描,对长期不用的空间作为”垃圾”进行收集,使得系统资源得到更充分地利用.按照这种机制,程序员不必关注内存管理问题,这使Java程序的编写变得简单明了,并且避免了由于内存管理方面的差错而导致系统出问题。而C语言通过malloc()和free()这两个库函数来分别实现分配内存和释放内存空间的,C++语言中则通过运算符new和delete来分配和释放内存。在C和C++这种机制中,程序员必须非常仔细地处理内存的使用问题。一方面,如果对己释放的内存再作释放或者对未曾分配的内存作释放,都会造成死机;而另一方面,如果对长期不用的或不再使用的内存不释放,则会浪费系统资源,甚至因此造成资源枯竭。
(2) Java不在所有类之外定义全局变量,而是在某个类中定义一种公用静态的变量来完成全局变量的功能。 (3) Java不用goto语句,而是用try-catch-finally异常处理语句来代替goto语句处理出错的功能。(4) Java不支持头文件,而C和C++语言中都用头文件来定义类的原型,全局变量,库函数等,这种采用头文件的结构使得系统的运行维护相当繁杂。
(5) Java不支持宏定义,而是使用关键字final来定义常量,在C++中则采用宏定义来实现常量定义,这不利于程序的可读性。
(6) Java对每种数据类型都分配固定长度。比如,在Java中,int类型总是32位的,而在C和C++中,对于不同的平台,同一个数据类型分配不同的字节数,同样是int类型,在PC机中为二字节即16位,而在VAX-11中,则为32位.这使得C语言造成不可移植性,而Java则具有跨平台性(平台无关性)。
(7) 类型转换不同。在C和C++中,可通过指针进行任意的类型转换,常常带来不安全性,而在Java中,运行时系统对对象的处理要进行类型相容性检查,以防止不安全的转换。
(8) 结构和联合的处理。在C和C++中,结构和联合的所有成员均为公有,这就带来了安全性问题,而在Java中根本就不包含结构和联合,所有的内容都封装在类里面。
(9) Java不再使用指针。指针是C和C++中最灵活,也最容易产生错误的数据类型.由指针所进行的内存地址操作常会造成不可预知的错误,同时通过指针对某个内存地址进行显式类型转换后,可以访问一个C++中的私有成员,从而破坏安全性。而Java对指针进行完全地控制,程序员不能直接进行任何指针操作。
(10)避免平台依赖。Java语言编写的类库可以在其它平台的Java应用程序中使用,而不像C++语言必须依赖于Windows平台。
(11)在B/S开发方面,Java要远远优于C++。 自从sun被甲骨文收购以后,Java的发展前景就变得扑朔迷离起来,很多程序开发者都感到很迷惑。2010年4月9日,被称为Java之父的JamesGosling又在个人博客上宣布离开Oracle,这一事件更为Java的前景增加了一层迷雾。但是在进入5月份之后,一切开始变得明朗起来。首先是Oracle在Java的后续支持方面,宣布了一系列关于Java的相关计划。然后是Java之父JamesGosling继声明Java不会死去之后又盛赞Oracle对Java所做的贡献。在Oracle的活动发布网站上,连续发布了多个关于Java的推广活动。
版本简介
2010年5月12日,Oracle主要产品负责人DaveHofert将大谈对JavaSE商业应用的改进和革新。根据宣传资料,在这次演讲中,DaveHofert将提到以下问题:
商业版与社区版本之间平台支持的差异。
如何获得专家帮助,以帮助企业增强其Java应用。
对于旧版本的安全修补问题。
可使用的发布工具和更新。
2010年6月18、19、20、27日,将分别在赫尔辛基、斯图加特、布达佩斯、伦敦举行Oracle、Sun专家与用户见面会,在见面会上与用户一起探讨Java的发展路线。主要讨论的问题包括Oracle将如何继续投资和改进Java技术,并且还会向用户通报JavaSE、JavaME专家团队的最新消息、JavaFX和JDK7最新的消息,以及OracleBerkeley DB的相关信息。
2010年5月3日,已经离开Oracle近一个月的Java之父JamesGosling在他的博客上表达了对NetBeans 6.9 和 FX1.3发布的关心。这两个项目最新版本的发布,可以证明Oracle已经开始兑现当初的承诺。JamesGosling在其早期的博客中,也透露了不会放弃Java事业,只是需要解决一些与Oracle之间的法律问题。
这一切迹象表明,Oracle绝对不会轻易放弃Java这块巨大的蛋糕,并且Oracle也开始逐渐学会了对开源社区的尊重。首先在JDK的商业版本方面,Oracle将会继续深入挖掘Java的商业利益,与其固有产品进行更深入的整合。在社区版本方面,Oracle将与Java开发者一起探讨和研发Java的技术。这里需要特别提到的一个产品是OracleBerkeleyDB,该产品是Oracle一直支持的一个开源非关系数据库产品,在NOSQL大行其道的今天,如果Oracle能够将BerkeleyDB与Java进行深入整合,将会为Java带来更多的活力和生命。从JamesGosling的表现来看,他似乎与Oracle之间已经达成某种谅解,并且有进一步合作的可能性。
java发展
Java在日新月异的IT技术领域内不算年轻,在过去的十几年中,Java曾凭借开放和跨平台等特性、借助互联网蓬勃发展的东风,改变了C/C++称霸天下的局面,形成Java、C、C++三足鼎立的格局。特别是Java在编程语言排名榜上独占鳌头长达10年之久,并帮助Sun奠定了其在IT技术和开源领域的地位,都说明Java在开发领域中的重要性。
在未来发展方向上,Java在Web、移动设备以及云计算方面前景非常广阔。虽然面对来自网络的类似于Ruby on Rails这样编程平台的挑战,Java依然还是事实上的企业Web开发标准。在Java对新开发者吸引力方面,这么多年以来,Java一直都在面对那些不成熟的,基于脚本的程序语言的挑战。比如PHP和Ruby,虽然经过多年努力,但是并没有看到他们相具有比Java更强的竞争力。另一方面,随着云计算以及移动领域的扩张,更多的企业在考虑将其应用部署在Java平台上,无论是本地主机,公共云,Java都是目前最合适的选择。
事实上Java技术的开放性、安全性和庞大的社会已有资源,以及其跨平台性,即“编写一次,到处运行”的特点,也使Java技术成为智能手机软件平台的事实标准。采用Java技术后,编写应用程序和提供服务的人就不必关心接受其服务的手机采用的是什么操作系统和芯片,只要按照Java的要求去写程序就好了;同样,生产手机的厂商也不必顾虑将来谁来提供增值服务。同时在Oracle的技术投资担保下,Java也将是企业在云应用方面回避微软平台、在移动应用方面回避苹果公司的一个最佳选择。比如VMware就宣布了一个称为VMforce的服务,该服务将在云计算机中布置Java应用,Google应用引擎也将一如既往的支持Java。他们都是微软提供的,基于.Net和开源PHP语言基础上的Azure云平台的竞争对手。此外,进军传统的桌面应用仍是Java未来一个努力的方向之一。
JAVA作为主流的商业应用的语言在3G、物联网时代下焕发出新的生机!
在互联网时代,JAVA语言已经是使用最广泛的服务器端语言。随着3G、互联网时代的到来,JAVA语言并不会“过时”,相反,JAVA语言会在新的业务领域有着更辉煌的发展前景。
3G、互联网的发展不仅仅带动了“智能手机制造业”、“电信运营业”、“RFID产业”、“嵌入式设备”等硬件或系统软件行业的发展;更重要的是:3G、互联网开创了更多、更新的商业领域应用,而这些领域的核心编程语言仍然是JAVA!
在TTS4.0 课程体系中的基于智能手机平台的“航空公司移动服务门户”项目和基于全球定位、实时订单跟踪、RFID仓储管理等诸多互联网新技术的“新一代物流管理系统”都是这些新商业应用领域的典型代表。
未来趋势
对Java来说,2010年是不平凡的一年,从Oracle在年初完成对Sun的收购,使大家对Java的未来充满了关注,而12月份在北京进行的JavaOne大会,可以说是Oracle在收购Sun之后的第一次正式大会,大家可以从 JavaOne上更多了解了Java未来的发展。而2011年,将成为Java新的开始。
Java走过了它15年的历程,在日新月异的IT技术领域不算年轻,但它一直没有停下变革、创新的脚步。Java已经不单单是一种计算机语言,很多情况下,我们称它是一个平台,一个社区。下面从Java SE、Java EE、Java ME、JavaFX几个方面,展望Java技术在2011年的发展。
Java SE
从Oracle公布的Java未来战略我们可以看到,Oracle目标是加强和继续扩大Java在新领域的应用,并将Java平台纳入新的部署架构,加大对 Java社区的投资,允许社区更多地参与。开发人员比较关注的Java SE 7将会在2011年夏天就绪,其中JCP已经批准了JSR 334、JSR 335、JSR 336和JSR 337等,支持改进Java语言和API规范,比如switch in string、multi-catch、泛型实例创建中的precise rethrow、Lambda表达式(闭包)等。而Java SE 8也将在SE 7发布之后的一年到一年半的时间就绪。
模块化的VM:可以将VM拆分成小块由应用程序使用,并按需推向Internet,这样的结果是Java应用程序的启动时间更短了,当VM不在目标机器上时,下载的时间也更短了。
额外的语言支持:Java平台支持用不同语言编写的应用程序,未来将会添加更多的语言支持,当然也包括对动态语言的支持,这就是所谓的达芬奇机或多语言虚拟机,请参考JSR-292。
增强的多核支持:需要借助工具、库和内置设施帮助新的和现有的Java应用程序更有效地利用多核硬件的优势,Java的线程模型可以轻松地创建并行执行任务的线程,但你如何将一个单一的任务拆分成多片进行并行执行呢?
其它改进包括持续的性能改进,以及许多语言方面的增强,包括增加的闭包,在switch语句中对Strings的支持,以及多块异常捕获,闭包是一个有争议的功能,它是通过使用匿名的Java内部类实现的。
Java EE
Oracle长期以来一直都是Java的支持者,也是最大的JCP成员之一,10多年前就开始参与Java EE规范的编制,因此对Oracle成为Java中间件市场的大鳄不应该感到意外。
Java EE展望
模块化,开发标准:Java EE 6通过配置文件(Profile)定义实现了模块化Java EE,允许厂商根据特定需求创建更小的Java EE堆栈子集,解决成本和Java EE使用复杂问题。通过模块化设计和定义标准,有助于简化Java EE,让它的应用领域更广泛。
Java EE 6规定了两种配置文件:Web配置文件(Servlet,JSP和JSF)和Java EE企业配置文件。显然还可以定义更多的配置文件种类,例如,为支持会话初始化协议(SIP)定义电信服务器配置文件。
UI和RIA:HTML仍然是Java EE应用程序隐含的UI协议,通常有Java Servlet,JSP和JSF生成,考虑到生产的Web页面是静态的,可以使用Ajax技术,不过它已经超出了Java EE的范畴。
虽然Oracle没有明确这方面的具体计划,但未来Java EE和JavaFX集成时将会解决Ajax问题。
Java ME
作为 Oracle 首选的移动环境的 Java,这个堆栈未来默认的呈现方式将会是 HTML, CSS 和 Javascript。Java ME 将包含 WebKit 引擎,JavaScript. 引擎,和 Java/JavaScript. 桥,换言之,未来运行新版 Java ME 的手机,将能够访问浏览器以外的 Web 服务,而不会有任何性能问题。这些引擎将直接插入 Java ME虚拟机和插入 Java FX。
Oracle 的 Java ME 引擎,将利用当代图形硬件加速器所擅长的(60 frames/秒)二维和三维渲染(在 Windows 环境下,微软的 Direct X,还有 OpenGL 或未来“更好”的技术)。 Java ME 将会针对 ARM7 和 ARM9芯片组进行优化,包括 Broadcom,三星,NEC,德州仪器,以及其他取得授权的手机部件制造商,还将内置充分利用手机装置的支付,通话,和定位等功能的 API。
JavaFX
随着 JavaFX 和 Java 的整合,并运行于 JVM 之上,它的富媒体处理及二维和三维渲染功能,也将能提供给任何在 JVM 上运行的其他编程语言,这意味着,例如 Groovy, Scala 和 JRuby 等也都能用来整合 JavaFX 的能力。
JavaFX展望:
基于可视化组件创建一个设计范式
为JavaFX应用程序创建一个丰富的UI扩展库
提升所有平台的JavaFX性能
增强跨设备移植JavaFX应用程序的能力
与Java,JavaScript和HTML 5无缝集成
支持新兴设备和UI范式(如多点触摸)

⑶ 请推荐java消息队列

要求:
可持久化:数据不会丢失
简单:不需安装、不需要数据库、最好是基于文件的
高效:支持大数据量的插入、读取和删除(支持每秒1000条的插入和删除的并发操作),如果可以进行简单的排序就更好了。
最好是第三方
jar
包,引入到项目中就可以使用。
消息队列:消拍则息队列是利用文件持久化技术,将用户数据通过随机访问机制缓存到磁盘,同时在内存保留索引作为查询依缺贺液伏物据的一种机制
目前已经尝试了,文件、BerkeleyDB、JMS等作为队列,均不能达到满意的效果。
希望有该方面经验的朋友给推荐一下。
回答问题的朋友,请不要直接粘贴网上的文章。最好自己使用或测试过,性能可靠的再发上来。拜托了

⑷ java开源的其它

Quartz 【Java开源 Job调度】
Quartz是OpenSymphony开源组织在Job scheling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。Jobs可以做成标准的Java组件或 EJBs。Quartz的最新版本为Quartz 1.5.0。
Velocity 【Java开源 模板引擎】
Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。 当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。Velocity将java代码从web页面中分离出来,这样为web站点的长期维护提供了便利,同时也为我们在JSP和PHP之外又提供了一种可选的方案。 Velocity的能力远不止web站点开发这个领域,例如,它可以从模板(template)产生SQL和PostScript、XML,它也可以被当作一个独立工具来产生源代码和报告,或者作为其他系统的集成组件使用。Velocity也可以为Turbine web开发架构提供模板服务(template service)。Velocity+Turbine提供一个模板服务的方式允许一个web应用以一个真正的MVC模型进行开发。 【VeloEclipse :Velocity在Eclipse平台下的一个辅助开发插件】
Roller Weblogger 【Java开源 Blog博客】
这个weblogging 设计得比较精巧,源代码是很好的学习资料。它支持weblogging应有的特性如:评论功能,所见即所得HTML编辑,TrackBack,提供页面模板,RSS syndication,blogroll管理和提供一个XML-RPC 接口。
XPlanner 【Java开源 项目管理】
XPlanner 一个基于Web的XP团队计划和跟踪工具。XP独特的开发概念如iteration、user stories等,XPlanner都提供了相对应的的管理工具,XPlanner支持XP开发流程,并解决利用XP思想来开发项目所碰到的问题。XPlanner特点包括:简单的模型规划,虚拟笔记卡(Virtual note cards),iterations、user stories与工作记录的追踪,未完成stories将自动迭代,工作时间追踪,生成团队效率,个人工时报表,SOAP界面支持。
JOnAS 【Java开源 J2EE服务器】
JOnAS是一个开放源代码的J2EE实现,在ObjectWeb协会中开发。整合了Tomcat或Jetty成为它的Web容器,以确保符合Servlet 2.3和JSP 1.2规范。JOnAS服务器依赖或实现以下的Java API:JCA、JDBC、JTA 、JMS、JMX、JNDI、JAAS、JavaMail 。
FreeMarker 【Java开源 模板引擎】
FreeMarker允许Java servlet保持图形设计同应用程序逻辑的分离,这是通过在模板中密封HTML完成的。模板用servlet提供的数据动态地生成 HTML。模板语言是强大的直观的,编译器速度快,输出接近静态HTML页面的速度。
【FreeMarker Eclipse Plugin与FreeMarker IDE:Eclipse平台下的辅助开发工具】
Lucene 【Java开源 全文检索】
Apache Lucene是一个开放源程序的搜寻器引擎,利用它可以轻易地为Java软件加入全文搜寻功能。Lucene的最主要工作是替文件的每一个字作索引,索引让搜寻的效率比传统的逐字比较大大提高,Lucen提供一组解读,过滤,分析文件,编排和使用索引的API,它的强大之处除了高效和简单外,是最重要的是使使用者可以随时应自己需要自订其功能。
Beanshell 【Java开源 动态语言】
Beanshell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性。BeanShell执行标准Java语句和表达式,另外包括一些脚本命令和语法。它将脚本化对象看作简单闭包方法(simple method closure)来支持,就如同在Perl和JavaScript中的一样。它具有以下的一些特点:使用Java反射API以提供Java语句和表达式的实时解释执行;可以透明地访问任何Java对象和API;可以在命令行模式、控制台模式、小程序模式和远程线程服务器模式等四种模式下面运行;与在应用程序中一样,可以在小程序中(Applet)正常运行(无需编译器或者类装载器);非常精简的解释器jar文件大小为175k
Big Two 【Java开源 Java游戏】
采用Java开发的中国式纸牌升级游戏。源码下载
JBoss SSO Framework 【Java开源 身份认证管理】
JBoss SSO Framework是一个组件集能够很容易集成到现有的web应用中提供单一登录功能.该框架已经能够支持一些重要的SSO标准如SAML。整个系统包括以下组件:
1.联合服务器(Federation Server)– 一个联合服务器用于为放置在不同安全域(security domain)中的web应用程序安全地传播Federation Token。
2.Token编排框架(Token Marshalling Framework)– 这是一组灵活的/可插件的Java API用来marshal/unmarshal一个Federation Token。该系统默认提供一个SAML兼容的编排器(Marshaller) 。
3.身份管管理框架(Identity Management Framework)–这是一组灵活的/可插件的Java API用来连接中中央身份存储库(Identity Store)。该系统默认提供一个Provider来连接基于LDAP的身份存储库。
JawFlow 【Java开源 开源工作流】
JawFlow是一个部分遵循WfMC规范,采用JMX技术开发的工作流引擎。它能够解析XPDL,并能够用Java或BSF支持的脚本语言来自定义行为。
rails-asyncweb 【Java开源 Web服务器】
用于JRuby on Rails的一个快速Http服务器。
jBatchEngine 【Java开源 Job调度】
jBatchEngine是一个采用Java开发的批任务spooler。jBatchEngine与其它以时间为驱动的Job调度引擎不同之处在于它是以事件以驱动,可用于启动任何批处理程序。jBatchEngine可以安装成一个Windows Service或一个Unix Daemon。
Gant 【Java开源 项目构建】
Gant是一个基于Ant的构建工具,它采用Groovy脚本代替XML来编写构建逻辑。 Gant完全依赖于Ant task来做真正的事情,所以你如果用Ant实现构建,但不喜欢用XML构建文件,Gant是一个不错的选择。
Jaxmao 【Java开源 Web服务器】
Tomcat是开源的JSP/Servlet服务器。多年的开发使Tomcat已越来越完善,被越来越多的网站采用。Jaxmao(中文版Tomcat)项目的任务是为Tomcat提供一个友好的中文界面,推广Tomcat在中文JSP/Serlet 开发者中的使用。
Metanotion BlockFile 【Java开源 DBMS数据库】
BlockFile一个100%纯Java,轻量级,单个文件嵌入式数据库。它的功能介于SQLite与BerkeleyDB之间。专门为PDA和Mobile应用程序而开发。
JRuleEngine 【Java开源 规则引擎】
JRuleEngine基于JSR94规范的java规则引擎。
JBasic 【Java开源 动态语言】
JBasic是一个完全采用Java开发的BASIC语言解释器。JBasic可运行在大部分Unix系统(包括Mac OS X),Windows command shell,或VMS DCL command line。
jSoapServer 【Java开源 Web Service】
jSoapServer这个Java类包可以集成到Java应用程序中为外部程序提供一个SOAP接口。jSoapServer是一个独立的SOAP服务器,因此不需要让Java程序运行在像Tomcat这样的容器中。
Artistic Style 【Java开源 代码优化】
Artistic Style是一个C,C++,C#和Java源代码缩排/格式化/美化工具。
JLoom 【Java开源 模板引擎】
JLoom是一个采用类似于JSP语法的模板引擎。参数可以是任何Java类型,甚至是泛型(generic)。JLoom还提供一个Eclipse插件来辅助开发。
Liquid look&feel 【Java开源 Swing外观】
基于Mosfet Liquid KDE 3.x主题的Swing外观。
MicroNova YUZU 【Java开源 JSP标签】
MicroNova YUZU开源基于EL的JSP标签库。这是一个增强的JSTL(兼容JSP1.2与JSP 2.0)。

⑸ java的作用是什么

Java 是一种编程语言,它本身的作用是通过编写应用程序
帮助人们解决日常工作、生活和学习遇到的问题

阅读全文

与berkeleydbjava相关的资料

热点内容
760贴片机编程视频 浏览:333
欧姆龙plc编程第36讲 浏览:915
我的世界如何将一个服务器弄崩 浏览:8
php网站访问量代码 浏览:431
怠速压缩机咔咔响 浏览:176
怎么才能修改APP中的数据 浏览:688
哪里有抢单的app 浏览:462
算法概率题 浏览:465
长方形拉伸的命令 浏览:279
python代码函数编程技术 浏览:194
java正则式 浏览:429
外包程序员好进吗 浏览:384
云服务器服务模型架构 浏览:901
删文件夹什么指令 浏览:509
极速抖音已加密怎么办 浏览:603
matlab拉格朗日算法框图 浏览:430
华为公司计算机视觉算法顾问 浏览:254
夏老师讲的单片机 浏览:298
在编程中如何将图片放大 浏览:163
appstore怎么看是否付费 浏览:603