本人一直以来从事PHP互联网开发,之前用过Thinkphp,不过最近几年一直用Yii2。最近由于公司要开发一套OA系统,所以开始用JAVA在做(php开源的工作流引擎真的太烂,自己开发一套又没时间),这里就说说最近几天使用JAVA的一些感悟吧。

首先讨论一下理论上PHP和JAVA各自的优势。

PHP:开发效率非常高

JAVA:

(1),纯粹的面向对象,面向接口编程,各种设计模式让你玩得不亦乐乎。

(2),运行效率吊打PHP

(3),javaee开发的web项目,对象可以常驻内存,有真正的mysql和redis连接池

(4),强类型语言,保证代码规范

(5),有完善的开源社区支持,各种开源包让你玩得不亦乐乎

(6),做大数据开发,还是得用java,java对hadoop的支持比php好太多。

看到JAVA那么多好处,我也非常激动,怀着无限的憧憬,我用maven创建了我的第一个项目,框架用的是springboot + hibernate。可能有人要问我为什么不用mybatis,好像现在很多互联网项目都是用mybatis来实现。这个我是因为我之前只看过一本javase基础的书,没有做过javaee开发,所以我懂不起任何的java orm框架,后来一个qq群里面的哥们告诉我用hibernate,他告诉我OA系统并发不大,对效率要求不高的项目用hibernate很方便,所以我就去下载了一本hibernate的电子书来看。到后来我必须开始编码了,因为时间不够了,所以到现在为止我还用不来mybatis.

回归正题,吐槽一下我使用java崩溃的感觉:

(1),纯粹的面向对象感觉很有问题,比如一些对字符串处理和验证的公共方法。我定义一堆函数就完了的,现在用java,新建一个包,然后建立一堆类,然后用静态方法去实现

(2),配置太复杂,虽然说,现在springboot帮我们做了大量的默认配置,但是,对于一个写了7年php的程序员来说,这些配置还是让我非常崩溃的

(3),说到java的运行效率高于php,我承认。不过在实际的项目中呢,php提供了大量的函数,这些函数直接调用C语言编写的扩展,效率非常高。比如web开发中最常用的json操作,java还得去引入一个包,要不你自己写代码实现。java在这方面效率不如php

(4),说到对象可以常驻内存,这个有好处也有坏处吧,好处上面都说了,坏处就是代码如果编写不好,可能会造成内存溢出。但是php每次请求上来创建对象,完成请求之后所有资源全部回收的方式,基本不会出现内存溢出的问题

(5),强类型的语言,可以让我们代码很规范,不过,我却在无休止的类型转换中感觉到崩溃,特别是数字和字符串的转换。还有数字字符串没办法做四则运算,太繁琐了。

(6),太过于繁琐的开发,比如数据封装到javabean。大量的javaBean的定义,感觉特别奔溃,php开发中压根就不需要定义这样的对象,因为弱类型语言,就算对象没有定义某个属性,也可以动态加上。

(7),真正的连接池,这个是java的一大特色,在php中长连接是有问题的,因为每个php-fpm会长期持有一个连接,不管使用到没有。但是php的短连接非常强悍,直接调用C语言扩展,速度极快。我用php的短连接和jdbc的短连接对比,第一次连数据库php快30倍,之后也要快18到20倍左右。当然,php的短连接和java的连接池比起来就逊色很多了。然后这里说一下php也有连接池,php-cp扩展就是很好的连接池,不过由于php-cp也需要单独开启一个进程所以php-fpm进程和连接池的通信走的是进程信号的方式,这种方式效率依然比不上java的连接池,人家的对象就在内存中,拿过来就用。不过php-cp已经达到很好的效率了。我们要知道,和数据库和redis等需要走网络,和网络开销对比,php-cp比java连接池慢的那一点点效率完全可以忽略不计。

总结一下:

java纵使有高大上的设计思路,纵使高效的运行效率,纵使有那么多的优点。不过在实际开发中,我还是建议如果不是非得要使用java,用php来快速实现是一种很好的方式。然后,我之前听过有人告诉过我同样的代码运行起来php的cpu消耗比java高很多。这里说一下,opcache真的很重要,线上环境真的要努力的去配置好,劲量关闭opcache自动刷新,项目发布之后去手动刷新(不是真的手动,你可以写个脚本)是不错的选择。然后切记php在把源代码编译成opcode的时候,不会做代码优化,java是要做代码优化的(所以知道为什么php的编译那么快,java很慢了吧,人家要做编译优化的)。所以大家写代码的时候一定要保持良好的习惯。

我的疑问:

话说为什么php那么好,但是目前的工作岗位比起java少那么多呢?java那么难用,为什么大量的公司要用它做web开发,或者api开发呢?我是真没明白,因为真的觉得一点都不好用啊。

开个玩笑:

我也面试过很多php的人,说句实话,很多做php的人是学不懂java所以来做php的。因为java学习的东西太多,太复杂。不过这样的人就算是来学php,也不会学得有多好的,因为到后面来深入了之后,其实语言都大同小异的。我学习javaee然后整合各个框架开发项目一共用了10天时间。其实真的不难,沉下心去学习,所以技术都很简单。说真的我很难接受因为大量的php程序员水平不行(可能这也是很多公司不用php用java的原因吧),而让这门世界上最优秀的语言没落。

php转java知乎_php程序员来谈谈php和java相关推荐

  1. java 静态方法_80后程序员,教你学Java核心技术:用户自定义类+静态域静态方法

    用户自定义类 在第3章中,已经开始编写了一些简单的类.但是,那些类都只有一个简单的main方法.现在让我们开始学习如何设计复杂应用程序所需要的各种"主力类"(workhorse c ...

  2. java语言情话_程序员的浪漫:用 java 实现每天给对象法发情话

    一.引言 最近看到一篇用js代码实现表白的文章,深有感触. 然后发现自己也可以用java代码实现,然后就开始写代码了,发现还挺有意思的,话不多说开搞 实现思路: 使用HttpClient远程获取彩虹屁 ...

  3. Java说情话_程序员的浪漫:用 java 实现每天给对象法发情话

    一.引言 最近看到一篇用js代码实现表白的文章,深有感触. 然后发现自己也可以用java代码实现,然后就开始写代码了,发现还挺有意思的,话不多说开搞 实现思路: 使用HttpClient远程获取彩虹屁 ...

  4. 【程序员养成之路】Java基础篇 8-流进流出的IO流(二)

    以下内容若有误,欢迎私信我或在下方留言,谢谢^_− 目录 IO流(二) 1.特殊操作流 1.1 标准流 1.2 打印流 1.3 对象序列化流 1.4 Properties 拓展1:比较字节流和字节缓冲 ...

  5. 新手Java程序员找工作更看重Java项目经验?

    动力节点IT培训,全真项目实操实训,贯穿八大行业,彻底帮助学员摆脱纸上谈兵的尴尬,一技成,天下行. 新手Java程序员找工作更看重Java项目经验?这个问题,想必是很多学Java的朋友也特别好奇的地方 ...

  6. 为什么中国这么多高薪程序员,开发不出Java, Typescript, Python, Rust, Node.js这些基础设施?...

    近日,有人在网上问了这个问题,引起了网友热议: 为什么中国这么多高薪程序员,开发不出Java,Typescript, Python, Rust, Node.js这些基础设施? 对这个问题,大家从不同角 ...

  7. java程序员烂大街了吗?java入坑之前先来看看行情

    java程序员烂大街了吗?下面就跟着小编一起来看看吧! 任何东西的存在.火与不火都是一个供求关系决定的.有需求.有市场.有利益.再加上有合适工具.才会有人去做. 而java却恰恰符合这一点.为什么这么 ...

  8. Java程序员的认证Sun Certified JAVA Programmer(SCJP)

    Java程序员的认证Sun Certified JAVA Programmer(SCJP) 课程:SL-275 JAVA语言编程 本课程使学员掌握如何使用标准JAVA Development Kit, ...

  9. 深受Java程序员欢迎的10款Java IDE

    概述:Java是全世界最受欢迎的一门程序语言,它被广泛的应用于企业项目.游戏设计.安卓应用程序等开发领域.以下的列表是整理的近些年来深受Java程序员欢迎的10款Java IDE. Java是全世界最 ...

最新文章

  1. DOS命令行中用MAVEN构建Java和Java Web项目
  2. 获取组件的方式(方法)
  3. 1061. 判断题(15)
  4. python以下导入包的格式错误的是_ICMP python上的错误数据包
  5. docker 容器安装conposer_docker和php:将依赖项(composer)放入容器中
  6. element 项目 示例_Java ArrayDeque element()方法与示例
  7. 菜鸟也能搞定C++内存泄漏
  8. android开发:Android 中自定义属性(attr.xml,TypedArray)的使用
  9. Smart ORM v0.4.1开发计划
  10. nsarray数组越界_NSArray,NSMutableArray –目标C数组
  11. token令牌防止重复提交
  12. spark读取gz文件与parquet文件
  13. Eclipse语言包在官网下载不了-解决方案
  14. python concat时报错‘InvalidIndexError: Reindexing only valid with uniquely valued Index objects’
  15. three 星空穿梭,常见的星空星星移动
  16. 华为机试二星题--机器人走迷宫
  17. MySQL Replication 梳理详解
  18. 【有利可图网】PS实战教程35:用PS快速抠透明的水花
  19. 电梯惊魂”不再发生,物联卡解决电梯安全问题!
  20. 回转半径的计算公式_截面最小回转半径怎么算,比如300*400的柱子

热门文章

  1. 12c adg添加数据文件报错处理ORA-01111
  2. PHP5 $this self parent static的区别
  3. 2014中国软件开发者调查(一):Java最受欢迎 第二语言JS使用比例最高
  4. 在普通PC上安装XENSERVER 6.2
  5. 一起学DNS系列(十)图、例详解DNS递归和迭代查询原理及过程 (1)
  6. Java8的集合:HashMap的实现原理
  7. 满屏的try-catch,你不瘆得慌?
  8. 为什么都说 Go 是大厂通行证!
  9. 甲方爸爸,大概你要的是代码生成器吧?
  10. 还在学JVM?我都帮你总结好了(附脑图)