您的位置:首页 > 其它

2014上半年计划与经典笔记整理hxxj…

2014-04-25 16:40 211 查看
论文1:论文必须出炉:wg+la两条线路工作2:根据大公司的面试题,查漏补缺自己的专业知识!要做到面对不懂的地方,态度为“我要学!”,而不是“我不会!”,不做菜鸟就算是菜鸟也要能飞得高。 apache的http压力测试工具ab;熟悉Node.js基本语法、cluster模块、child_process模块和express框架2014-02-27旧知试点重写,记忆!!!***************************************************************----------------------------------------------------------新学了一个知识点:日志打印!日志打印有很多jar比如说常见的log4j,JDK logging,在ssh三个框架中都有一个共同的jar:commons-logging-1.0.4.jar.这些日志打印我们可以简单的看成是:if(needlogging){//打印日志},而这个needlogging开关可以在配置文件中打开,比如说log4j就有log4j.properties文件中设置对于属性值为true即可!在.properties的文件中还有常见的设置:什么级别(及以上)错误打印(debug,info,warn,error,fatal),比如说配置info的时候,其后面的错误也都打印log4j.rootLogger=error,stdout还可以这样设置:指定包中打印的错误级别:log4j.Logger.cn.huanglei_jmr.test=debug这个时候一个常见的问题就出现了,这么多jar包都是关于日志打印的,如果没有一个共同的规范的话岂不是很冗余。这个时候就有一个叫做slf4j-api-**.jar的包,这是一套接口(并不含打印日志具体功能),当你导入某种打印日志的jar时候需要指定哪种实现,比如说我想使用log4j打印则有对应的jarslf4j-log4j***,想使用jdk的自带打印则导入slf4j-jdk***。(**为版本,必须与前面的slf4j-api-**版本对应,也就是说要导入两个jar哦),注意还需要导入log4j-**.jar!!!所以需要三个包!第一个为接口规范,第二个为规范的实现,第三个为具体日志打印的实现!---------------------------------------------------------***************************************************************----------------------------------------------------------BaseDao的实现只说几点关键性的点:1 BaseDao中T的类型怎么得到?使用反射技术public BaseDaoImpl(){ //使用反射技术得到T的真实类型 ParameterizedTypept=(ParameterizedType)this.getClass.getGenericSuperClass(); //Arguments?如果类型是map就是两个(0-K,1--v)咯,这里只是一个基本类型只有第0位 this.clazz=(Class)pt.getActualTypeArguments()[0];}2整个的继承怎样?首先必须要面向接口编程!!所有DAO的增删改查方法都实现在BaseDaoImpl中UserDao extends BaseDaoUserDaoImpl extends BaseDaoImpl//实际业务方法必须继承BaseDaoImpl来获取基本的增删改查方法(这就实现了通用)3 有人说根本不需要再为UserDaoImpl写一个接口UserDao,直接实现类继承不就行了吗?咋一看确实在最后的功能上是没有什么影响的!但是我们代码都需要面向接口编程:这样:UserDao ud=new UserDaoImpl();如果不写接口就不能这样写咯!!---------------------------------------------------------***************************************************************------------------------------------------------------转发和重定向应用场景?虽然自己对这两者的区别很清楚,但是当在某一场景中选择这两者却迟疑了很久!!其实应该这样想:比如说在某一功能的链接中(如删除按钮),应该选择重定向,因为重定向地址栏的地址发生改变(注意咯,改变后的地址栏的地址应该为功能代码中所返回的地址,而不是功能按钮这个链接的地址,比如说在列表页面中有一个删除按钮,点击删除后可以回到这个列表页面的地址),如果地址不改变,那么会发生什么情况?这时候刷新,就是另一次业务请求了(比如说又删除了一次!!)---------------------------------------------------------***************************************************************------------------------------------------------------struts2的值栈,新的深刻的理解! valuestatck是一个数据中心!!以前所知的知识点:****StrutsPrepareAndExecuteFilter是Struts 2框架的核心控制器,它负责拦截由 public String list() throws Exception { List roleList =roleService.findAll(); ActionContext.getContext().put("roleList",roleList); return "list"; } public String delete() throws Exception { roleService.delete(model.getId());//不用mode,则写id return "toList"; } public String addUI() throws Exception { return "saveUI"; } public String add() throws Exception { // //封装到对象中 // Role role = newRole(); //role.setName(model.getName()); //不用mode,则写name //role.setDescription(model.getDescription()); // // // 保存到数据库 //roleService.save(role); roleService.save(model);//用mode,上面全注释只要这一行 return "toList"; } public String editUI() throws Exception { // 准备回显的数据 Role role =roleService.getById(model.getId());//不用mode,则写id ActionContext.getContext().getValueStack().push(role); return "saveUI"; } public String edit() throws Exception { //1,从数据库中获取原对象 Rolerole = roleService.getById(model.getId()); // 2,设置要修改的属性 role.setName(model.getName()); role.setDescription(model.getDescription()); // 3,更新到数据库 roleService.update(role); return "toList"; } //-不要model下面的get/set方法必不可少-- // public Long getId(){ // return id; // } // // public void setId(Long id) { // this.id = id; // } // // public String getName() { // return name; // } // // public void setName(String name) { // this.name = name; // } // // public String getDescription() { // return description; // } // // public void setDescription(String description){ // this.description = description; // }} //可见用model可以省下许多代码,原理见上一点笔记的划红处的理解---------------------------------------------------------***************************************************************------------------------------------------------------匿名类-java-----就是没有名字的类,可想而知不能引用咯!其实一直在接触这个点,只是一下没想到是这个名字而已!举例代码:java 代码import java.awt.*; import java.awt.event.*; public class QFrame extends Frame { public QFrame() { this.setTitle(\"my application"); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { dispose(); System.exit(0); } }); this.setBounds(10,10,200,200); } } 其中的:new WindowAdapter() { public void windowClosing(WindowEvent e) { dispose(); System.exit(0); } }); 就是一个匿名类的定义(应该也叫实例化),因为匿名类在定义的时候就要实例化,不然没名字怎么再次操作呢!所以说只能操作一次咯!注意WindowAdapter是一个接口,这段代码是一个匿名类,且实现了这个接口的closewindow方法!所以匿名类必须要有一个父类或者接口来实现,而这个new classname就是写的接口的名字或父类的名字1一般匿名类都是匿名内部类:看需要注意哪些点:注意匿名类的声明是在编译时进行的,实例化在运行时进行。这意味着for循环中的一个new语句会创建相同匿名类的几个实例,而不是创建几个不同匿名类的一个实例。在使用匿名内部类时,要记住以下几个原则: ·匿名内部类不能有构造方法。  ·匿名内部类不能定义任何静态成员、方法和类。  ·匿名内部类不能是public,protected,private,static。  ·只能创建匿名内部类的一个实例。 ·一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。  ·因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。 ·内部类只能访问外部类的静态变量或静态方法。 匿名类和内部类中的中的this :有时候,我们会用到一些内部类和匿名类。当在匿名类中用this时,这个this则指的是匿名类或内部类本身。这时如果我们要使用外部类的方法和变量的话,则应该加上外部类的类名匿名内部类的作用呢?Java的内部类和C++中的嵌套类有本质的不同:C++的嵌套类没有指向包装类的句柄。仅仅表达一个封装的概念;但是Java的内部类不同,它可以访问包装类的成员(这表示它拥有指向包装类的句柄)。 匿名内部类是内部类的一种简化写法:return new Wrapper { ... }; 等价于:Wrapped extends Wrapper { ... } return new Wrapped(); 难道匿名内部类就只这一点作用吗? 考虑一下这样的case: interface ICount { int count(); } class Parent { int i = 0; int count() { return i++; } } 有一个类Child,它既想继承Parent的count()方法,又想实现ICount接口中的count方法,这个时候怎么办呢?内部类就可以大显身手了: class Child extendsParent { ICount getCount() { return new ICount(){ int i = 0; int count() { return (i *= 2); } } } }---------------------------------------------------------***************************************************************------------------------------------------------------AJAX+jQuery复习 ajax技术: 用户的浏览器在执行任务时即装载了AJAX引擎(客户端-->AJAX引擎-->服务器),是多种技术综合:javascript+xhtml+css+xml+XMLHttpRequest)(XMLHttpRequest)******挂一个例子jquery ajax******* --hxxjmr评论:姓名:内容: cols="20">已有评论: //数据放这里,数据显示格式懒写了,要加格式见附加代码public class test extends HttpServlet {public void doPost(HttpServletRequest request, HttpServletResponseresponse) throwsServletException, IOException { //处理中文问题 request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); Stringusername=request.getParameter("username"); Stringcontent=request.getParameter("content"); //实际应用中这里进行DB存储操作,这里直接输出了 PrintWriter out =response.getWriter();//输出的数据也可以优化一下,可以写成html格式撒!见附加代码 out.write(username); out.write(content); out.flush(); out.close(); }}附加代码:--hxxjmr1:在服务器业务代码中的返回数据StringBuffer sb=newStringBuffer(""); sb.append("username"); sb.append("content"); sb.append("
"); out.write(sb.toString()); out.close(); 2:在js的回调函数success:function(data,textStatus){ $("#resText").html(data); //未测,不知道会不会显示标签//如果不使用jquery ajax的话,直接使用ajax是这样写的//var responsehtml=xmlHttpRequest.responseHTML;//当然这后面还有方法可以取出标签中的值,如果确实不能显示格式就取出值// document.all['td'].innerHTML+=str[i]+""; 类似操作写入页面,那么页面中要写空的td标签 } });3:页面 可以这样</> 自己在实际的编程中测试后决定!!---------------------------------------------------------***************************************************************------------------------------------------------------
对象的实例化,子类和父类子类在实例化的时候究竟父类会不会被实例化??有一点可以肯定,new son();的时候会调用父类的构造方法,但是父类可以是一个抽象类啊,抽象类怎么实例化呢?打个简单的比喻,如果家具是父类,子类为书桌,难道我们在买一个书桌的时候还必须买一个家具吗??!!但是书桌是具有家具的一些通用的特征的,怎么含有这些特征呢?也就是方法和属性,在方法区内JVM装载一个类的时候,首先检查他有没有父类,如果有父类则装载父类,然后再装载该类,装载!=实例化,但要开辟内存,这些类都放在JVM的方法区内,类实例化后的对象放在JVM的堆内。实例化一个子类时,父类一定被装载,但并不是实例化。 ---------------------------------------------------------***************************************************************------------------------------------------------------高内聚低耦合的深刻理解以前只知道,高内聚的意思就是模块内部要联系越紧密越好,低耦合就是模块间的联系要越少越好!至于什么叫做联系越紧密,什么叫做联系越少没有一个客观具体的认识!!比如说java中一个package中有5个类,这5个类看成是一个5个模块(我觉得单独一个方法也属于一个模块),则我们都希望这5个类之间的联系越少越好,因为我经常会删除某个类或者某个类出错了我可不想影响其他类是吧!!所以我们希望每个类调用其他类的方法越少越好,所以当一个方法的参数越少(这个少的意思是:同名参数参数个数不一样的有多个)的话,它被调用的就越少(因为它的扩展就越少),低耦合的目的就是不愿意去调用别人的东西,最好都自己实现吧!!高内聚的意思就是方法内部高度封装,比如说函数传参如果参数越少耦合度就越低不传参是最理想的但是不传参的话这个函数功能就很单一如果传入的参数越多可能公用性就越强这就是高内聚很矛盾要追求低耦合就得尽量减少模块数量或者类的数量,即要一个类中写入较多的方法,这样子一来内聚就会降低,相反过高的追求高内聚必然要细分,这样必然会触返低耦合,这时候就得寻求一种平衡和和谐。---------------------------------------------------------***************************************************************------------------------------------------------------在web开发中的后退/返回按钮可以用js来写!!

javascript:history.go(-1)和javascript:history.back(-1)

go(-1): 返回上一页, 原页面表单中的内容会丢失; back(-1): 返回上一页, 原页表表单中的内容会保留. input type=button value=刷新onclick="window.location.reload()">input type=button value=前进onclick="window.history.go(1)"> input type=button value=后退onclick="window.history.go(-1)">input type=button value=前进onclick="window.history.forward()"> input type=button value=后退onclick="window.history.back()">后退+刷新input type=button value=后退onclick="window.history.go(-1);window.location.reload()">history.back()是会上一页i=1history.go(i)去指定的某页如果是history.go(0)那就是刷新这两个属于JS代码,相当于IE的前进、后退功能。具体的用处就要看什么时候需要这个就用上。比如用户注册时的验证是后台验证,不符合要求的时候就可以用这个,可以最大限度保证用户少重复输入数据。例如:载入页面:function onLoadPage(){if(event.srcElement.tagName=="SPAN"){oFrame=top.window.middle.frames[2];oTxt=event.srcElement.innerText;switch(oTxt){ case"前进":oFrame.history.go(1);case "后 退":oFrame.history.back();case "刷 新":oFrame.location.reload();}}} 可是有时候会出现下面的问题:用javascript:history.go(-1)返回上一页时,出现网页已过期!!
在网站或Web系统设计中,当使用javascript的history.go(-1)或history.back()函数时,若上一页是静态页面或提交数据前的动态页面,则应该能够顺利返回,但若上一页是提交数据后的动态页面、或者禁用了缓存等原因,则可能导致出现“网页已过期”的现象,解决办法:首先试试back()或go(-2),若依然不行,则取消禁用页面缓存的限制,
上一页上php文档吗?如果是,请在php文档开始加入
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: