http://blog.csdn.net/ch_jinyi/article/details/7421969
http://blog.csdn.net/ch_jinyi/article/details/7421969
5、要做的系统如果上线,将是给非常多人用的,随意一些访问量就能让我之前的做系统完全崩溃,高并发在这个时候开始经历了一些。采取的解决方案就是使用缓存技术,如memcache等。memcache实现的方式是将一些经常使用的信息,采用key,value的方式存储到内存中。可以设置其有效期,可以存储,更新,删除,全部删除。这中缓存技术因为是存储在缓存中的,所以存取速度非常快。但是,同时也是由于存储在缓存中的,所以一旦该服务器宕机,或者该服务器上的服务被停止重启,都会导致之前缓存的数据全部丢失。在缓存中存储一些有效数据可以有效的大幅度的降低访问数据库的频率。
6、做一个系统的开发,尤其是我们这中之前已经有个样例系统,我们要进行重新构建的项目,项目需求基本已经确定。一开始的需求文档那叫一个寒碜,不过幸好有个系统看着做。随后需求的讨论不断进步,最先形成的成型的文档是根据需求做出来的数据字典。我做的一个模块有部分是关于IP号码管理的,着手建表,才发现现在要用到oracle的sequence。以前只是听说过,甚至专门看过几遍,不过最终还是都忘了,应为没有用过。。。这次好了,好好理解了一下,而且有十几应用了,状况好太多。sequence,序列,虽然名字是跟表名相关的,但实际上这两者之间没啥大的关系。序列是可以被任何表使用的,他的作用就是不停的产生一个新的最大值,从而避免使用相同的值产生的冲突。小的系统里,甚至可以所有表使用同一个序列,所有表的主键都从一个序列里产生。
7、算法。在做IP相关的数据存储的时候,发现表里存储IP值的时候不是存储的字符串,而是数字(设计的字段类型是varchar)好吧,那就想办法把一个字符串算成一个可以反解析出来的数字吧,总不能存完了不管了,咱还得取不是。研究了一下原来系统里对于IP的转换。。。 汗颜~~ 哈哈 看了半天还是不太明白,应该是用数据库的正则把IP值的各个块取出来,然后转换成数字,然后计算成了一个位数比较少的数字,再拼接起来。。。贴出来
lpad(trim(to_char(regexp_replace(ip, ‘^(d{1,3}).(d{1,3}).(d{1,3}).(d{1,3})$’, ‘1’), ‘XX’)),2,’0′) ||
lpad(trim(to_char(regexp_replace(ip, ‘^(d{1,3}).(d{1,3}).(d{1,3}).(d{1,3})$’, ‘2’), ‘XX’)),2,’0′) ||
lpad(trim(to_char(regexp_replace(ip, ‘^(d{1,3}).(d{1,3}).(d{1,3}).(d{1,3})$’, ‘3’), ‘XX’)),2,’0′) ||
lpad(trim(to_char(regexp_replace(ip, ‘^(d{1,3}).(d{1,3}).(d{1,3}).(d{1,3})$’, ‘4’), ‘XX’)),2,’0′);
反计算:
to_number(substr(ip_num_hex, 1, 2), ‘XX’) || ‘.’ ||
to_number(substr(ip_num_hex, 3, 2), ‘XX’) || ‘.’ ||
to_number(substr(ip_num_hex, 5, 2), ‘XX’) || ‘.’ ||
to_number(substr(ip_num_hex, 7, 2), ‘XX’);
以后再研究吧。
8、生成Bean和Dao的方式都不是自己手写的,有个小工具叫codeGen,不知道是这里自己写的还是从网上搞来的开源的小东西,但是对于生成统一的数据库管理相关代码确实挺好使,在配置文件里写好链接数据的配置,然后在主函数里写入自己要生成的表名,运行一遍就可以了。不过到目前为止生成的文件,包名总是错误的,这里也是可以在代码里修改的。不明白管理这个小工具的家伙为啥总是不改捏。咱先不管了,好东西先留着呗。
9、做着做着就到了做前台的时候了。开始的时候并没有打算用jQuery EasyUI,不过组里有个小伙对这个玩意很熟,在做另外一个项目的时候也是用的EasyUI,在我们埋头解决数据查询出来后结果的分页的时候,拉出来EasyUI的Datagrid以及其页码栏,很好使,很好看,参数与公司集成的分页查询符合,于是果断采用了。jQuery是本来就会用的,所以也没什么稀奇,不过我就得好好学学了,毕竟之前不但EasyUI接触较少,连jQuery都很少接触,少有的接触机会还是自己学习的时候去学了一下基础。现在终于有可以实战一下了。乍一开始,对于jQuery的选择器并没有什么特别的感觉,而且我使用的时候基本上都是使用指定ID的方式(未完待续)
来新公司已经有一个多月的时间了.呃,准确点也就一个月零5天.哈哈.虽然时间其实并不多,但是学到的东西可不少.尤其用到了一些以前自己没有用过的东西.期间碰到了大大小小各种问题,到目前为止基本都解决了,但是怕稍微久一点就会全忘掉,所以在博客里做个记录.虽然现在都不一定全部记得.
项目挺大,前台展现部分功能丰富且复杂,要做第三方接口接入.我一开始被带我的人安排去做前台的一些东西,看了几天代码,自以为已经熟悉了一些了,可以下手做,所以给老师要活.头给安排了一个做第三方数据请求自动登录的功能来做。由于之前没有接触过类似的东西,所以一开始就是在看,熟悉整个系统,整个熟悉下来之后,发现有如下一些我没有用过的东西:
1、过滤器Filter。以前的时候顶多在web.xml文件里设置一下servelet的路径,中间的业务请求大部分甚至连servelet都没有通过,就直接用jsp里声明个实例调用后面的Java代码了。这种方式的好处是开发起来效率高,也好调试,但是安全性太差,代码也容易混乱,不易进行统一管理规划。声明一个Filter的语法如下:<filter>
<filter-name>FilterName</filter-name>
<filter-class>
org.*.filter.FilterName
</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterName</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>FilterName</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
这样的过滤器在一个web.xml中可以声明多个,其对相同内容的过滤的顺序就是按照声明的顺序由上到下。可以用来进行一些校验和设置的操作,如设置字符集,校验是否登录,校验是使用何种类型网络等等。
2、在这个项目开始之初,带我的人就告诉了我估计要用到的几个大的框架,如Controllar会使用struts,类管理控制会使用spring,展示方面主要使用jquery,后来引入了jquery的展示框架easyUI,界面上可能会用到的EL,处理大数据要使用的memcache等,因为第一次接触原因,第一次在工作中接触的原因,开始干活的效率都有点低,但是后来就快起来了。struts1.x在本系统中忠实的执行着控制中心的角色,基本整个系统中需要修改struts相关东西的地方只有两个,一个是要设置其配置文件,把自己要用的请求与类名关联起来,另一个就是要写这个类里的方法,把要处理的方法写出来。由于公司封装的框架的原因,我们用来指定前台请求调用的处理类的方法时,只需要在*.do的请求后添加一个参数do=****Manage.functionName就可以直接实现了。
3、对于spring这个东西,以前还是稍微看过一点,跟struts一样。其实struts看的最多了,因为ssh总是一开始就看struts,而且很久以前就看过一些struts,更容易看进去一些。Spring单独的IOC这部分其实并不难,更何况公司框架还给出了一个SpringHelper,可以使用其生成指定名称的类的实例。然而并不能所有一切都那么顺心如意,现在系统中就有地方使用这个去生成新的类的实例有问题,启动报错。所以我自己用的时候,一般还是使用注解来自动生成。使用spring注解的时候,需要在spring的配置文件中加入配置,这个之前的文章里有写过,回头再看看吧。
4、界面上获取后台传过来的值的时候,一般不再写Java代码,而是直接使用EL。而要访问哪些数据,在由后面处理程序返回时,通过设置attribute等方式放到request里就行了;在页面上使用的方式更加简单,直接使用${}符号,在花括号中间填上自己想要的那个实例的名字就可以获取到相应的实例,并且可以调用其方法,获取其属性。用起来很方便。
《未完待续》
近期评论