PHP 程序员如何快速进行 Java 开发
shadow_修修
7年前
<h2>入门不要拿着放大镜去学</h2> <p>就像盲人摸象一样,他要想弄清楚大象的真实面貌可能要摸很久,就好比我们拿着放大镜在学习 java 一样,java 经过这么多年的发展,可以说非常庞大。如果我们要知道大象长什么样,就应该放下手中的放大镜,向后退远点,反而能够非常清晰的看到它的全貌。学习一门新的语言也一样,有很多很多网上的教程,非常的大而全,一般得系统的学习30~60小时之后才能正式的接触项目开发。基础很重要,但是学习了太多的基础会让大家失去学习的乐趣和自信心。很多知识点其实可以项目之后再补。按需去学,反而是自我驱动着去学习的最佳方式。</p> <p><img src="https://simg.open-open.com/show/ea3cfe0ad1f3039bb1acc0e1309dd9ad.jpg"></p> <p>比如 hashmap 的哈希分布、哈希碰撞、动态扩容,这些都是我们后期深入提高需要理解的内容,初期,我们只需要知道能拿 hashmap 做什么就行。</p> <h2>以实现自己熟悉的东西为导向</h2> <p>比如我们做 Web 后端 api 开发,首先是常用的循环/迭代、条件判断、增删改成。那么能不能快速用 java 实现一遍这些我们用 php 做起来非常顺手的事呢?</p> <p>这样有助于我们快速提升自信心。</p> <h2>使用类比的学习方法</h2> <p>PHP 里如何实现,重新用 java 实现一遍就行了。</p> <h2>最后深入系统的学习</h2> <p>当自己实现了一些小 demo 再去参考别人的项目。如果一开始就直接看别人的项目,可能完全不知道别人在干嘛。比如别人用了 ConcurrentHashMap ,就再去思考为什么我用 HashMap 他却用 ConcurrentHashMap ,带着问题,带着思考去看开源代码。</p> <p>完成了一些简单的项目了之后就可以再回过头来系统的学习了。这时候就会有不一样的收获。</p> <p>最后就是当项目需要调优,性能提升的时候,再各个击破,深入学习,更有针对性,更有目标性。</p> <h2>实战开始</h2> <p>我们用 netty 来提供高性能的 web 服务服务。使用简单方便(netty 并不简单),不依赖其他软件。然后思考完成一个简单的 web api 服务器需要哪些必不可少的组成部分。(其实在思考这的时候,你必须要要对做简单的架构必须熟记于心)。</p> <p>我简单概括了下:</p> <ol> <li> <p>java 基础数据类型(php 也有,不怕)</p> </li> <li> <p>java 集合框架(php 有数组,很强大)</p> </li> <li> <p>初识 maven(php 有 composer)</p> </li> <li> <p>反射 (框架路由等地方要用到,php 也有)</p> </li> <li> <p>序列化(数据传输要用到,php 没有复杂的数据结构要简单 N 倍)</p> </li> <li> <p>jdbc (数据库操作要用到,php 有 pdo)</p> </li> <li> <p>大概认识泛型、注解等语法 (可选)</p> </li> <li> <p>使用 netty 实战开发一个 web api 服务(php 有 swoole)</p> </li> </ol> <h3>Java 基本的数据结构、各种基本数据类型包装类</h3> <p><img src="https://simg.open-open.com/show/4e78fcc6ace3e04779536d1dc789d1c1.jpg"></p> <h3>Java - Collections Framework 高频类举例</h3> <p><img src="https://simg.open-open.com/show/b72b73a1b307976f3ef2d2120d27cb9b.jpg"></p> <p>HashSet 是一个没有重复元素的集合。它是由HashMap实现的,不保证元素的顺序,也就是说所说元素插入的顺序与输出的顺序不一致。</p> <p>这其实是我的老朋友了,redis 里经常用,比如咱们可以它来实现一个黑名单,这样查找的速度就非常快,也不用去远程查询 redis 了,直接在当前内存中查询。</p> <p>ArrayList 基于数组来实现集合的功能,其内部维护了一个可变长的对象数组,集合内所有对象存储于这个数组中,并实现该数组长度的动态伸缩。</p> <p>这不就是我们的 PHP 里面常用的索引数组么?</p> <p>HashMap 以哈希表数据结构实现,查找对象时通过哈希函数计算其位置,它是为快速查询而设计的。特点就是快,非线程安全。</p> <p>这不就是我们的 PHP 里面常用的关联数组么?</p> <p><a href="/misc/goto?guid=4959750923183941911" rel="nofollow,noindex">http://www.cnblogs.com/ITtang...</a></p> <p><a href="/misc/goto?guid=4959750923272759010" rel="nofollow,noindex">http://www.jianshu.com/p/b54f...</a></p> <p><a href="/misc/goto?guid=4959750923372255270" rel="nofollow,noindex">http://www.cnblogs.com/xiaoxi...</a></p> <h3>初识 maven</h3> <p>Maven的基本原理很简单,采用远程仓库和本地仓库以及一个核心的配置文件pom.xml,pom.xml中定义的jar文件从远程仓库下载到本地仓库,各个项目使用同一个本地仓库的jar,同一个版本的jar只需下载一次,而且避免每个应用都去拷贝jar。</p> <p>这和 php 的包管理工具 composer 很像,或者是 composer 是参考着 maven 而设计的。maven 的功能更强大,composer 需要每个项目都要导入一遍,maven 却像 git 一样,有一个本地仓库,第三方包也不会直接引用到项目中,而是在编译的时候才会引入(是不是很方便)。另一方面,maven 不仅仅是包管理工具,而且是一个项目管理工具,集成了编译、打包、单元测试等功能。</p> <h3>实现控制器的访问</h3> <p>具体需求:提供一个 api 可以用户指定用户的信息</p> <p>定义接口:</p> <pre> http://localhost:10000/users/{id} http://localhost:10000/?method=user.get&id={id}</pre> <p>可能现在大家早已习惯了前者 restful 的 api 接口。</p> <p>因为这里需要一次路由的映射和 http method 的匹配,考虑到学习的成本呢,我没有选择这种方式。</p> <p>我们今天的目标是以最简单有效的方式实现我们的功能。</p> <p>我们首先从最简单的方式来实现(其实没有路由的 api 反而是最快的,毕竟需要做的判断少嘛)。</p> <p>后面大家有兴趣可以参考我写的一个 restful api 的 demo <a href="/misc/goto?guid=4959651509761830096" rel="nofollow,noindex">https://github.com/zhoumengka...</a></p> <p> </p> <p>来自:https://segmentfault.com/a/1190000010333464</p> <p> </p>