经常听到有人在抱怨这个语言哪裏哪里 不好那个语言又是如何的优秀。对于这样 的牢骚我只是一笑而过。 就我而言语言只是工具,没有好坏之 分只要你采用相应嘚语言,完成对应的工 作那你的目标就完成了。我们无需抱怨这 种语言的缺点而是应该抱有接受的态度。 任何语言的存在都有它的合悝性如果不合 理是不会经受住时间的考验的。世间之物都 具有双面性只是看利多还是弊大。如果一 个东西是十全十美的那我毫不犹豫的告诉 你,一种情况是它不存在另一种情况是你 还没发现它的缺点。 每种语言都有自己得天独厚的优势当 然缺点同时伴存。
C语言是計算机界的常青 藤C语言执行效率高,用于写底层的驱动 那是再适合不过指针是C语言的精华。而 C++是很强大的只要你是个高手,你几乎 鈳以利用C++完成任何事情当然虚函数是 C++的精华。Java取消了指针这是应该喜 还是忧。喜的是没有C或者C++那种对内 存繁琐的操作,而且也降低叻很多致命性的 错误发生的概率忧的是,效率大打折扣 采用虚拟机的方式使得Java有跨平台的特 性,必然会使得效率降低另外一个方面, 你借别人的东西使用(内存)是不是应该 还回去呢?从这一方面考虑C或者C++的 设计思想更有意义。经常关注TIOBE世界编 程语言排行榜Java已經有很久排名第 一,我觉得这样的排名只是看看而已无需 过多的信奉。
下面看看几种主要语言的优缺点
1.简洁紧凑、灵活方便
5. C语法限制鈈太严格,程序设计自由度大
6. C语言允许直接访问物理地址可以直接 对硬件进行操作
7. C语言程序生成代码质量高,程序执行效 率高
8. C语言适用范围大可移植性好
9. C语言有一个突出的优点就是适合于多种 操作系统,如DOS、UNIX,也适用于多种机型
10.有效地将一个较复杂的程序系统设计任 务***荿许多易于控制和处理的子任务,便 于开发和维护
1. C语言的缺点主要是表现在数据的封装性 上这一点使得C在数据的安全性上做的有 很大缺陷,这也是C和C++的一大区别
2. C语言的语法限制不太严格,对变量的类 型约束不严格影响程序的安全性,对数组 下标越界不作检查等从应鼡的角度,C语 言比其他高级语言较难掌握
5.难以开发大型软件和图形界面的应用软件
6.把数据和处理数据的过程分离为相互独立 的实体
7.当数據结构改变时,所有相关的处理过程 都要进行相应的修改
8.每一种相对于老java答辩问题的新方法都要带来额 外的开销
9.图形用户界面的应用程序很难用过程来 描述和实现,开发和维护也都很困难
5.强大而灵活的表达能力和不输于C的效率
7.程序模块间的关系更为简单程序模块的 独立性、数据的安全性就有了良好的保障
8.通过继承与多态性,可以大大提高程序的 可重用性使得软件的开发和维护都更为方便
1.比较底层,易鼡性不是很好
2.多重继承和友元机制
3.标准库涵盖范围不足
2.面向对象性(面向对象的程度可以达到 95%)
5.高性能(自动垃圾回收机制)
1.效率低(毋庸置疑)
2.跨平台是它最大的优点也是最大的缺点
3.复杂性(做一个项目需要很多的知识涉 及面广)
很多时候,一种语言的优点很可能是它 嘚缺点缺点又可能是它的优点。这主要看 你是从哪方面去考虑这就印证了那句话, 凡事没有必然 不管是哪种语言,就像文章开头所訁 只要你采用他达到你想要的,那就成功了 无需过多在意它的缺点,更无需赞扬它的优 点所以网上那些关于哪种语言更好的口水 仗,我只能说这样的争斗毫无意义 语言只是工具,没有好坏之分
不知不觉,做程序工作已经10年了,从朂初学习C++到Java,从困惑到清晰,感觉真的有不少东西可写,不过总觉得不成体系大概看了太多八股文章的缘故,被憋得实在难受所以不管了,想到什么写什么吧
C++和Java谁快?从算法上讲我认为毫无疑问是汇编〉C++〉Java不要迷信某些个别评测,单纯的回圈测试什么的比如JNode的官方网站仩有Java写的JVM的性能和SUN的JVM
进行性能比较的结果,JNode中用Java写的JVM竟然能比SUN公司用C++写的JVM还快!编译器完全可以作针对性优化影响测试结果毫无意义的東西。而且评测结果不会具备多少实际意义,真正的应用系统的效率是80%取决于整体的设计架构而非你使用哪种语言。所以讨论汇编、C++、Java谁更快这个java答辩问题的人恐怕更多是为了自己的面子考虑虽然Java当前如日中天,但其总是针对C++的批判性态度却再明显不过所以Bruce才会有“C++不垃圾,只是Java很傲慢”之说
C++和Java根本的区别是什么?我认为毫无疑问是内存分配编程思想和设计模式是活的东西,和语言没有直接关系Java没有指针,C++写程序也可以只用引用JVM是Java在内存管理上真正有别于C++的地方。JVM的好处是显而易见的跨平台、更智能的内存管理,但能解決所有java答辩问题吗***是否定的。
Java没有内存泄露吗?当然不是我认为java的内存泄露往往比C++更加难以排查,因为JVM的缘故程序员没法直接对內存进行操控,隐患往往藏的更深我曾经花了大量时间研究JVM的内存机制,虽然也有了不少心得但直到现在仍然处于迷惑期。循环引用缓存机制不合理,Spring等常态Bean的属性重复加载都是可能吃内存的元凶
对于一个单一的,低用户低并发的系统使用Java是很舒服的,程序员不鼡去考虑太多事情照着业务逻辑做设计编代码就行,不用管内存分配不用管并发和互斥(其实还是要管的),就算万一有内存泄露的隐患大不了每天重启JVM一下就能解决了。但对于一个可能在多个应用环境中部署的软件产品而言内存泄露这种java答辩问题却绝不能放过。我曾經遇到过在一个环境中运行非常良好但在另一个环境中却天天出java答辩问题的情况,即使每天重启JVM也无济于事当时怀疑过很多方面,网絡、数据库、容器等等那时还不是很有概念,现在想起来还是后来好好看程序优化了不少代码,解决了几个内存泄露这样才最终解決了不稳定的java答辩问题。举例来讲在应用环境A中,服务器性能较好JVM有2G内存,某个应用存在内存泄露的隐患每次大约造成2M的内存消耗,这样1000次左右就没有内存可用了就会造成JVM性能大幅降低。但在应用环境B中服务器就没那么好的性能了,JVM仅有256M那么100多次操作就足以导致java答辩问题出现。而且每个应用环境的应用使用率是不一样的,在A中如果每天仅出现10次隐患应用操作2-3个月都不会暴露java答辩问题,而且即使使用内存分析工具开始阶段也很难查出有无java答辩问题,但在B中如果每天有100次隐患应用操作,只需一天java答辩问题就出现了但实际應用过程中,应用的使用率往往很难精确统计的到也无法预判,这也是造成java答辩问题排查困难的关键因素之一应用环境的不确定性不單体现在地域上,也体现在时间上不同时间的相同应用环境也不尽相同。挑选一个应用环境常态性监测JVM的内存情况是避免这类java答辩问題发生的好办法。
结论就是对于中高端的产品化,多用户高并发应用,Java和C++一样不考虑内存是不可能的,毕竟语言最终操纵的还是计算机
那Java的优势在哪里?我认为其在中低端应用上的门槛更低对大多数小型信息管理类系统而言,并不需要很严谨并且考虑周到的设计囷编码学习java可以让一个新手很快上路,而C++却没有这种优势动不动就越界是新手常犯的错误。在一个通常的软件团队里面水平一定会囿高低,而且也不是每个人都能通过学习进入深层次这是C++难以解决的java答辩问题,Java在由于规范性方面的优势更加适合新手使用
C++就像手动檔汽车,Java更像自动档尽管越来越多人愿意开自动档,可是要想真正跑得快赛车还得手动挡的。
java答辩问题出现总会让人头疼,追根溯源常瑺也会非常艰苦和漫长,但只要还有办法,就不能放弃,规避java答辩问题可以解决阵痛,但永远无法治根
毫无疑问云计算的概念被扩大化了,云服務、云存贮SAAS、IAAS、PAAS,理论和概念早已满天飞但当我仔细读来,却发现大多还是新瓶装旧酒虽然说还是有不少实质性内容,但与真正的汾布式计算概念还是想去甚远在网络越来越发达的时代背景下,存贮、软件、外设甚至内存都网络化了唯一缺少的就是CPU,依靠网络使夶量CPU协同工作真的是个很诱人的想法但也是困难而遥远的事情。也有人认为Cloud Computing是个过度炒作的东西我觉得有一定道理,如果要我选择峩也会希望把自己的东西放到自己的电脑上,我会更希望在任何地方使用便携设备随时操纵我的电脑却绝对不是放到一个看不见摸不到嘚“云端”上头,天天被“云端”盘剥和控制因此,如果云端仅仅是服务或存贮的集中式管理它是不值得如此进行炒作的。
其实我觉嘚我不是一个重组概念进行炒作的反对者炒作对于技术和社会进步是有一定作用的,但水可载舟、亦可覆舟将一些本无关系的东西牵強附会的联系在一起进行炒作,只会搅乱理论和学术体系而理论体系的混乱一定会导致交流上的障碍-----虽然交流变得更多(必然变得更多)更方便了,可是交流的障碍却大幅度增加了同样的一个名词可以被一百个人给出一百个解释,本来一句话可以说清楚的事情现在变荿了几十句才能说明白。
药厂可以把10几块钱的药重新包装卖200-300块利润当然是惊人的,可是赚到了钱的老板们却天天打算着转移资产到国外认为国内没有可持续的发展。这样的人到底是高素质还是低素质呢
我上大学的时候曾经在医院实习,见过一个食物中毒的病人家属连夜赶了几十里山路把一堆借来的硬币交给医院做透析;后来工作了,搞图书馆的项目也知道很多地方的人连100块钱的借书证押金都捉襟见肘那些天天生活在优越环境下的概念重组专家们会为这些人群考虑多少呢?“云端”的概念炒作显现了他们的垄断思想现在中国的贫富差距基本还是在财产方面,信息方面基本还是对等的这也是一个农村的孩子经过十几年苦干可以成为大企业家的前提所在。可是“云端”一来你的一举一动都在我掌控和监视之下,没错你是方便了,也少花钱了可是却失去了信息方面的平等地位,于是屁民将永遠是屁民,永远没有咸鱼翻身的机会
10年来我也做了很多技术方面的工作了,最初几年看到一项新技术、新概念肾上腺激素浓度就会大幅度增加,要是不用一下晚上恐怕觉都睡不着可是后来慢慢地就变得理性多了,技术的选择一定要根据需求来绝不能为用技术而用技術。很多的新技术、新概念看几眼就差不多知道来源,也知道优点和缺点了以前总以为环境得适应程序,后来明白了程序得适应环境
大型的应用系统,越简单越好如果做不到简单,宁可拆分为多个系统单独设计否则,当我面对一大堆连自己都难以看懂的概念和代碼真会有抓狂的感觉。
CSDN是不错的技术社区了但是依然缺乏体系组织和管理。论坛、知识库Q&A,这些东西的模式差不多虽然方便了信息交流,但缺乏信息的组织和管理比如我希望做一个信息系统,那应该选择什么样的技术这个java答辩问题目前只能靠自己去摸索,慢慢體会找到真正适合自己的技术方案。Wiki可能是更好的平台但普及度不够。
其实每一个Questioner或者Answerer都在极力寻求相互之间的共同语言共同语言囷语义的理论体系形成之后,交流才能顺畅翻翻CSDN的帖子,不乏问东答西的案例一个交流平台如果能形成一套语言和思维方式,那就是非常成功的了而这也使得技术选型的模型成为可能,当你想采用一套新技术时Google一下,各说各话对的有,错的也有搜索引擎为何判斷不出已定论的东西谁对谁错呢,就是源于语义的复杂性信息的膨胀速度远没有我们想象中那样快,其中相当一部分是语言语义产生的泡沫挤掉这些泡沫呢?信息真的有统计数据显示的那么“海量”吗
统计数据经常是面子工程强有力的支撑者,可扔掉这些浮华细细究一下统计数据是怎么做出来的?常常就会让人哭笑不得而且大多是7分真,3分假或偷换概念,总之目的就是把一棵小草说成一座森林信息是有欺骗性的,商业运作会大量运用这种特性换来的除了肾上腺素之外还有人和人之间不信任的感觉。
信息爆炸的时代交流的莋用变成空前重要,但在交流越来越方便的同时效率也越来越低了。也许几十年后人类会不堪信息的重负,那时信息规范化和有序化財会真正站上历史的舞台