V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sfree2005
V2EX  ›  Java

PHPer 想学 Java Web

  •  
  •   sfree2005 · 2017-05-29 20:29:30 +08:00 · 6439 次点击
    这是一个创建于 2496 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近看了一些框架性能的对比,感觉还是有些担心 PHP 框架在某些业务场景扛不住,所以想学学 Java web, 在多任务,并行计算,处理并发上发挥优势。

    Java 的生态环境不用说,该有的都有,搬砖就是,需要思考的就是针对实际的应用场景选择合适的架构。

    工作之后后端都是用 PHP,最后用 Java 还是在学校的时候,只是写了些简单的小程序。大概在网上搜了下,了解到 Spring 应该是比较大而全的框架,Dropwizard 比较轻量级。

    都说现在的趋势都是 Microserivce,所以我应该比较偏向使用 Dropwizard. 前后端分离,就只用 Dropwizard 做 API。 例如我可能用 PHP 负责网站登陆模块,Java 负责高级搜索模块。

    熟悉 Java 的朋友,你们觉得我的想法有没有得搞?

    43 条回复    2017-11-22 11:01:08 +08:00
    reeco
        1
    reeco  
       2017-05-29 20:50:29 +08:00 via iPhone
    学 Spring
    sfree2005
        2
    sfree2005  
    OP
       2017-05-29 20:57:00 +08:00
    @reeco #1 如果我只是做些小功能, 也是上 spring 比较好吗?
    sorkl
        3
    sorkl  
       2017-05-29 21:07:27 +08:00 via iPhone   ❤️ 1
    @sfree2005 spring 全家桶,微服务请使用 spring boot。BTW,i'm a PHPer
    likezun
        4
    likezun  
       2017-05-29 21:57:03 +08:00
    有这样的想法,只能说楼主浅薄
    edsgerlin
        5
    edsgerlin  
       2017-05-29 22:01:49 +08:00   ❤️ 1
    @likezun 别光吐槽,有何高见呢。我觉得 Dropwizard 挺好的,就是国内企业感觉没什么用的……
    mewushuang
        6
    mewushuang  
       2017-05-29 22:13:36 +08:00 via Android   ❤️ 1
    spring boot 上手,简单粗暴
    Reign
        7
    Reign  
       2017-05-29 22:23:56 +08:00   ❤️ 5
    有些人啊,平时写写 PHP,用用 WP 之类的,还挺好的,突然有一天就开始学 Java 了,哎,年纪轻轻的,可惜了
    0915240
        8
    0915240  
       2017-05-29 23:00:45 +08:00 via iPhone   ❤️ 1
    简单服务没必要 spring 全家桶

    轻量级的 dropwizard vertx 之类的完全可以玩玩
    hujianxin
        9
    hujianxin  
       2017-05-29 23:04:24 +08:00
    只做小功能?那没必要上 java。既然你要学 Java,那就不用考虑小场景了,小场景继续用你的 php 就行啊
    iVanilla
        10
    iVanilla  
       2017-05-29 23:08:48 +08:00 via Android
    学 Python 或者 Ruby 的 Rails 不是更好?
    追求高效率还有 Go 语言!
    lsido
        11
    lsido  
       2017-05-29 23:27:45 +08:00 via Android   ❤️ 1
    工作之后很少用 java,上线部署修改等等一系列确实不太友好,除了一些系统应用,基本都是用 php,lz 实在要上 Java,最好把 ssh ssm 都走一遍再用 boot
    qiukong
        12
    qiukong  
       2017-05-30 03:03:39 +08:00 via iPhone
    建议楼主先去学一学 javascript
    sfree2005
        13
    sfree2005  
    OP
       2017-05-30 07:51:02 +08:00
    @hujianxin 我说的“小功能"是指业务逻辑目的比较单一,或许只是某一个模块,但它有可能承受整个 app 的大部分计算量或者要求速度很快,并发高的要求。另一方面,php 在异步处理,并行计算上不是很给力,所以想引入 Java。
    sfree2005
        14
    sfree2005  
    OP
       2017-05-30 07:52:50 +08:00
    @qiukong 恩 有学的,平时工作会用到 Angular 1/2, 据说不少 Angular 的概念都是从 Java 引入的。
    sfree2005
        15
    sfree2005  
    OP
       2017-05-30 07:58:40 +08:00
    @iVanilla 恩呀 我也想学 Go, 它的性能的确很棒,我就是担心它相对比较新,生态没有老 Java 那么丰富。据我的了解,它更适合系统级别的功能,能用于写 Docker 也说明了这一点。我在想如果 app 需要更接近底层的优化,Go 或者 C++是逃不掉了。
    sfree2005
        16
    sfree2005  
    OP
       2017-05-30 08:05:42 +08:00
    @Reign 有什么详细的论述吗?不是很看得懂,或者引用一些文章支持你的论点?
    nicevar
        17
    nicevar  
       2017-05-30 09:56:49 +08:00 via iPhone   ❤️ 1
    既然你已经有 java 基础,php 也是用了很长时间,数据库这一块知识已经又了,去学 spring 花不了多长时间,找点稍大的项目看一下,一个星期就够了,前期主要就是掌握增查删改,一些深度问题需要后期慢慢磨练了。
    ixiaohei
        18
    ixiaohei  
       2017-05-30 09:59:13 +08:00   ❤️ 8
    作为一个几年的 java 建议你,java web 学 spring springMVC mybtais 就行了。另外 Dropwizard 没有听说过,应该很小众。可以了解 spring boot 开发,简单粗暴。另外如果真想学习 java 就要肯花时间了,java 体系太庞大。其中很多可以不用学。如果单纯 java web 路线。先学习 servlet、jsp,后面几乎用不上这些,框架都封装了,基础还是这些东西。了解下 tomcat、其他的 java ee 中间件可以不用了解了( weblogic 等)。另外 springMVC 必须要学的,现在做项目做网站都有这个东西了。spring 理解下 ioc 控制反转,aop 这些东西。另外 ORM 框架只学习 mybtais 就行,上手简单,hibernate 别去学(太重,而且现在互联网项目几乎不用)。另外我以前也是开发 php,php 除了不用编译,随意部署这点优点外,真心跟 java 没法比工程协作,运行效率。( php5 开发的时候面向对象和过程齐飞,变量不定义直接使用写代码很爽,读起来累,java 强制面向对象,强类型,虽然语法有点啰嗦,没有太多语法糖,偏于多人协作开发,java 是编译语言,jvm 效率完爆一切动态语言是一切,除了很耗内存外这点缺点外,垃圾回收器已经是所有带垃圾回收中最先进的了,不过以前在上位机开发 php5 内存随便占用 100m,也没有见 php 垃圾回收有多好)。另外可能 java 跟 php 不一样的是:php 一个请求完之后所有资源释放,新手不容易弄出内存泄漏,但 java 不一样。要多了解 java servlet 生命周期,多注意静态变量,这些新手很容易搞出内存泄漏。另外平时多了解基础知识就行了,深入 jvm 就行了。简单上手懂语法就行了。good luck。
    另外多关注 spring 家族的东西。
    ixiaohei
        19
    ixiaohei  
       2017-05-30 10:02:18 +08:00   ❤️ 1
    另外 java 微服务了解下 spring cloud。一套成熟的微服务解决方面。以 spring boot 为基础,集成了 netflix 开源 ereuka ribbon zuul 等核心框架。可能是以后 java 微服务主流。不过现在国内用阿里的 dubbo 居多。
    gouchaoer
        20
    gouchaoer  
       2017-05-30 11:12:16 +08:00 via Android   ❤️ 1
    高耗 cpu 的地方用 php-cpp 写成扩展
    sfree2005
        21
    sfree2005  
    OP
       2017-05-30 11:26:34 +08:00
    @gouchaoer 恩,这也是个不错的解决方案,到时可以试试。
    sfree2005
        22
    sfree2005  
    OP
       2017-05-30 11:29:25 +08:00
    @ixiaohei 非常感谢如此详细的回复,你提到的关键词都会去看看。
    ixiaohei
        23
    ixiaohei  
       2017-05-30 11:55:48 +08:00   ❤️ 1
    mybtais 打错了,应该是 mybatis (学 3 别学 2,mybatis 跟 ibatis 是一个东西。当年 ibatis 给 apache 维护不上心,ibatis 团队要回 ibatis 自己维护,然后改名成 mybatis,之后更新了很多东西,但是现在老项目很多用 ibatis,新手直接学 mytatis3,上手一天就行)。mac 输入法真心不好用,见谅
    sagaxu
        24
    sagaxu  
       2017-05-30 12:27:35 +08:00 via Android   ❤️ 1
    既然是现在入门,直接学 Kotlin 吧,小项目框架就用 springboot,大项目用 springcloud 服务化,简单查询用 springdata,复杂查询再 fallback 到 mybatis,springmvc 挺好,structs 不宜再碰了。
    crossoverJie
        25
    crossoverJie  
       2017-05-30 12:54:29 +08:00   ❤️ 3
    新项目的话就不要用 dubbo 了 免得今后还得换 直接 springboot+springcloud 应该就是之后的趋势了 现在项目正在用 感觉还不错。
    weer0026
        26
    weer0026  
       2017-05-30 13:53:31 +08:00 via iPhone   ❤️ 1
    我也有和你一样的问题,不过我开始尝试用 Go 来处理高并发场景,冗杂的业务用 PHP 来写还是很舒服。
    sfree2005
        27
    sfree2005  
    OP
       2017-05-30 15:37:42 +08:00 via Android
    @weer0026 go 的生态基本够用吗? 之前就是担心 go 比较新,生态还不够 Java 丰富
    weer0026
        28
    weer0026  
       2017-05-30 18:52:00 +08:00 via iPhone   ❤️ 1
    @sfree2005 够用但是肯定没那么成熟,我是混用的,有几个并发高的接口被我用 Go 重写了,而且我觉得写业务还是 PHP 好用。
    recovery0394
        29
    recovery0394  
       2017-05-30 19:10:26 +08:00   ❤️ 1
    php 挺好的啊。另外 go 语言的热度近两年也是在上升的。java 内容太多容易学偏,要找对方向才行,18 楼讲解的方向可以。
    wdlth
        30
    wdlth  
       2017-05-30 20:09:52 +08:00   ❤️ 1
    这不是换一种语言的事情,换 Java 意味着需要将整个技术栈进行更新。PHP 可以无脑写,出错可以当场改文件,但 Java 就没这么简单了,要编译要部署,框架出个错 Backtrace 给你返回几页甚至几十页。
    你可以先尝试把业务从 PHP 框架中移植到 Java 的框架中,两种语言语法上差别不。密集计算还是用 C、C++吧。
    wangchenyang
        31
    wangchenyang  
       2017-05-30 20:10:51 +08:00 via iPhone   ❤️ 1
    可以用一下 jfinal,一个国产 java web 框架,简单、方便、实用,社区很不错
    sagaxu
        32
    sagaxu  
       2017-05-30 20:33:26 +08:00   ❤️ 1
    @wangchenyang jfinal 就算了,外包项目公司专用,拼堆 CRUD 代码的速度
    sfree2005
        33
    sfree2005  
    OP
       2017-05-30 20:49:12 +08:00 via Android
    @wangchenyang 由于是外企,所以暂时不考虑国产框架。依然谢谢你的回复。
    sfree2005
        34
    sfree2005  
    OP
       2017-05-30 20:56:50 +08:00 via Android
    @wdlth 实验性质,应该只是将部分性能要求高的业务转到 Java,用的感觉如果不错或许会在新项目中全面使用。 密集计算什么的,业务暂时还不需要。
    zachping
        35
    zachping  
       2017-05-30 21:43:55 +08:00   ❤️ 1
    其实,php 够用的...
    要学的话,我觉得 Go 不错..
    我也是玩 PHP 的....
    准备下一个 学 Go..
    zjsxwc
        36
    zjsxwc  
       2017-05-30 21:48:06 +08:00 via Android   ❤️ 1
    主流不都是:脚本语言写业务,静态语言写中间设施吗?
    mrgeneral
        37
    mrgeneral  
       2017-05-31 12:18:11 +08:00   ❤️ 1
    PHP 快速开发,PHP7 也不慢,JIT 也有了可喜进展。但是缺乏稳定运行的机制,不适合 Daemon 服务比较蛋疼。
    公司有个 java 推送服务,跑了 1 年没人维护,也没出错,换成 PHP 估计够呛。

    所以你得看使用场景。PHP 做 web 和 API 开发,都是很不错的选择。java 也有适合他的场景。

    武林里面各种武器都有,挑一个合适的就好。
    bk201
        38
    bk201  
       2017-05-31 13:38:49 +08:00
    和语言好像没啥关系,apache 的一些项目是支持多语言的
    sfree2005
        39
    sfree2005  
    OP
       2017-05-31 15:05:04 +08:00
    @mrgeneral 恩 我这里看上的就是 JAVA 的性能和稳定性,复杂一些的场景就需要它
    sfree2005
        40
    sfree2005  
    OP
       2017-05-31 15:09:10 +08:00
    @bk201 不是很明白。看业务场景,也不一定需要 Apache 的支持。
    no13bus
        41
    no13bus  
       2017-11-21 17:48:34 +08:00
    @ixiaohei 同样是 php 转过来的。能加个好友聊聊不?
    ixiaohei
        42
    ixiaohei  
       2017-11-22 10:12:47 +08:00
    @no13bus aXhpYW9oZWlAMTI2LmNvbQ==
    no13bus
        43
    no13bus  
       2017-11-22 11:01:08 +08:00
    @ixiaohei ok 了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2815 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 14:55 · PVG 22:55 · LAX 07:55 · JFK 10:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.