挺早之前看过钟声老师的《Java程序员上班那点事儿》一书,当时看完后觉得很有感触,收获也挺多。但是过了一段比较长的时间后,好像觉得自己只是看过而已,没有记住太多的东西,所以决定重读一次,并打算把对自己有用的,有感触的东西记录下来,在博客上整理一下。钟声老师书中还写了关于程序员的心态,求职,自我提升方面的有价值的东西,这些太注重自我感受,所以没有做记录,有兴趣的可以关注钟声老师的博客http://blog.csdn.net/useway/
(话外音:“好记性不如烂笔头”,越来越觉得整理和记录对于记忆和理解的重要作用,个人很喜欢看书,但是好多书看完之后过段时间就变得茫茫然了,只记得自己看过,至于写的什么却怎么也想不起来。所以好的东西要多读,还要自己整理和记录才更好,所以为了加强看书效果,也为了督促自己学习,同时方便分享一些东西,决定开始记录自己的博客。)
好了,下面按条目整理一下我学到的一些东西,条目不分先后。
1、 从JDBC的源代码中学习到什么
(1)JDBC做的工作是建立一个和远程数据库服务器的Socket。(学会使用JDK文档查看
不同的类及其使用方法)
(2)所谓JDBC驱动,其实就是一个被封装起来的类,目的是使我们不关心底层网络协议从而更方便的链接数据库。
(3)使用JDBC驱动操作数据库,底层的操作核心就是通过向数据库服务器发送Socket包实现应用层网络协议。
(4)既然知道了其核心是发送以及接收返回的网络数据包,那么编写Java程序的时候,如何更好的利用JDBC提高网络利用率以及DB服务器的应用效率就成为了关注的焦点。
(5)利用JDBC的这个原理,我们将来是不是也可以实现一个能将底层应用协议封装起来的类呢?回答是肯定的。
2、不熟悉数据库就会“绕远”
(1)不熟悉数据库有回滚的功能而自己做了一个回滚。不知道或不去使用数据回滚这个功能会给程序带来安全性的隐患。
(2)不知道MySQL可以设定某字段权限而写了一个接口程序。
(3)不熟悉存储过程去做一个大的SQL执行程序。使用存储过程的好处就在于省略了多次和数据库服务器之间的交互过程。存储过程中的SQL语句还是会被DB Server接受并执行,只不过不是逐条的发送给数据库,而是调用在数据库中本身已经存储好的数据库执行指令即可,从而提高了整体运行速度。
3、关于web服务器
动态页面的web服务器和静态页面的web服务器之间仅仅有一点差别,就是在本地端得到HTML格式信息的方法不是直接从文件中读取,而是从程序生成的信息中取得而已。
那么支持JSP的动态页面服务器的原理又是什么呢?其实就是多了一个将JSP文件转换为Java文件并且编译的过程,然后运行被编译后的那个Class,从而使其得到要返回给浏览器的格式信息,然后将其返回给远端的浏览器。
(可以尝试自己动手写一个web服务器程序或者尝试修改一下Tomcat的源程序深入了解web服务器的原理)
4、操作系统
Java程序员必须熟练掌握至少两个操作系统的应用知识,这个问题是无法回避的。原因主要有Java开发语言的跨平台性和Java程序员需要自己去部署应用环境。
5、版本控制工具
主要用来帮助一个多人参与的项目进行开发工作,常用的有CVS、SVN
工作原理:在一台服务器上建立一个仓库,仓库里可以存放许多不同项目的源代码。由仓库管理员统一管理这些源代码。这样就好像只有一个人在修改文件一样,避免冲突。每个用户在使用仓库之前,首先要把仓库里的项目文件下载到本地。用户做的任何修改首先都是在本地进行,然后用cvs命令进行提交,由cvs仓库管理员统一修改。这样就可以做到跟踪文件变化、控制冲突等。
6、Java占用内存问题
Java比c程序内存的占用量相对多一些,但并没有我们想象的差距那么大,这是先天的因素,对于java程序员而言,养成良好的编程习惯比选用何种编程语言更重要,这样才能扬长避短,发挥好Java的优势。
7、Java和C的速度问题
(1)循环速度:在较小的循环次数时差距不大,大循环时才看出差距,c较快。
(2)读取文件速度:在读取较小文件时差距不大,处理大文件时有较大差距,c快。
(3)内存处理速度:在处理较小内存问题时差距不大,处理大内存时有较大差距。C快
8、B/S程序与C/S程序
(1)B/S程序本身也是一个C/S程序
C/S结构示意图:
纯数据流
数据库------à 服务器端软件或者数据库链接接口----------------à 客户端软件
B/S结构示意图:
http数据流
数据库-------àweb服务器软件------------------------à浏览器软件
B/S结构的客户端是浏览器,数据逻辑与计算基本上都是在服务器端进行的,客户端仅是将计算与数据取得的结果予以呈现,,而这时候所呈现的内容也依赖于服务器端所返回的http数据流中包含的标记。
(2)C/S程序的应用领域
对速度要求高、实时性要求高、用户一旦用上改动不大,如超市的销售收款程序。
9、关于EJB(EnterpriseJava Bean)
在J2EE中,运行在一个独立的服务器上并封装了业务逻辑的组件就是EJB组件。
通俗的说就是:把你编写的软件中的那些需要执行特定任务的类不放到客户端软件上了,而是给他打包放到一个服务器上。
EJB就是将那些“类”放到一个服务器上,用C/S形式的软件客户端对服务器上的“类”进行调用。
EJB的实现技术:EJB是运行在独立服务器上的组件,客户端是通过网络对EJB对象进行调用的。在Java中,能够实现远程对象调用的技术是RMI,而EJB技术基础正是RMI。通过RMI技术,J2EE将EJB组件创建为远程对象,客户端就可以通过网络调用EJB对象了。
10、关于远程方法调用RMI(Remote Method Invocation)
在说RMI之前需要理解两个名词:
对象序列化:对象的序列化过程就是将对象状态转换成字节流和从字节流恢复对象。将对象状态转换成字节流后,可以用java.io包中的各种字节流类将其保存到文件中,或者通过网络连接将对象数据发送到另一个主机。
分布式计算与RPC(RemoteProcedure Call 远程过程调用):说白了就是本地计算机调用远程计算机上的一个函数。
RMI就是利用Java对象序列化的机制实现分布式计算,从而实现远程类对象的实例化以及调用的对象。说得清楚些,就是利用对象序列化来实现远程调用,利用这个方法来调用远程的类的时候,就不需要编写Socket程序了,也不需要把对象进行序列化操作,直接调用就行了,非常方便。
11、服务集群的理解:
“服务集群”就是将原来在一个计算机上运算的几个类分别放到其他计算机上去运行,以便分担运行这几个类所需要占用的CPU和内存单元。同时也可以将不同的软件功能模块放到不同的服务器上,当需要修改某些功能的时候直接修改这些服务器上的类就行了。修改以后,所有客户端的软件都被修改了。
但是不管“计算”有多么的“分布”,也同样需要从一台服务器中取得数据。虽然看起来各个功能模块分布在不同的服务器上,从而分担了各个主计算机的CPU资源,然而真正的瓶颈不在这里,而是在数据库服务器那里。数据库服务器都会非常忙的应付各个服务器的查询及操作请求。假如把数据库分开则又会面临数据共享的问题。
12、J2EE不是必须使用EJB
下列情况尽量不要使用EJB:
(1)较为简单的纯web应用开发,不需要用EJB。
(2)需要与其他服务程序配合使用的应用,但调用或返回的自定义的网络协议可以解决的应用程序不需要使用EJB。
(3)较多人并发访问的C/S结构的应用程序,尽量不要使用EJB。