您的位置:首页 > 其它

之前的实习--关于Web部分的笔记

2016-06-03 22:17 471 查看
之前实习的时候做的是关于Web的,主要做的是CRM这类企业项目,比较传统,技术用的也比较传统,是典型的SSH架构,如今不再从事Web开发,但是之前实习的一些笔记进行简单记录下,都是实际项目中真实遇到的问题,希望以后能够用的着。

1、poi POI提供API给Java程序对Microsoft Office格式档案读和写的功能

2、在html中a标签的href中调用js函数

<a href="javascript:jumpPage()"></a>


3、在javascript 里怎样实现html中的 target=”_top” 这个功能

parent.location.href=”submitChangePwd.action”;

在js中设置

类似于设置target=”_top”

注意:location.href在框架中的使用target,如果只是简单的设置location.href=”“,会使得整个页面显示在子框架中,导致出现重叠框架。

解决办法:

window.top.framename.location.href = url;

window.parent.location.href=url;

mainframe.location.href=url;

4、datagrid和jqGrid的区别

5、Hibernate.initialize(Obj)用法

initialize(true) –》表示强制加载

initialize(true)–》简单理解:执行该方法后,可以将当前表关联的另一张表的数据查询出来

hibernate一个重要的特性:懒加载

懒加载:懒加载(延迟加载)机制是为了避免一些无谓的性能开销而提出来的,

所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。

例如下面的配置:

<hibernate-mapping>
......
<class name=”com.neusoft.entity.User” table=”user”>
<set name=”addresses” table=”address” lazy=”true” inverse=”true”>
<key column=”user_id”/>
<one-to-many class=”com.neusoft.entity.Arrderss”/>
</set>
</class>
</hibernate-mapping>


默认情况下,是支持懒加载的。–》Hibernate中load方法是懒加载,get方法不是。

–>引申hibernate中对象的的三种状态

6、ajax请求中的同步和异步问题

jquery的async:false,这个属性

默认是true:异步,false:同步。

$.ajax({
type: "post",
url: "path",
cache:false,
async:false,
dataType: ($.browser.msie) ? "text" : "xml",
success: function(xmlobj){
}
});


在这里,async默认的设置值为true,这种情况为异步方式,就是说当ajax发送请求后,
在等待server端返回的这个过程中,前台会继续 执行ajax块后面的脚本,
直到server端返回正确的结果才会去执行success,也就是说这时候执行的是两个线程,
ajax块发出请求后一个线程 和ajax块后面的脚本(另一个线程)


7、Hibernate中Criteria的完整用法–》Hibernate的QBC查询方式 (Query By Criteria)

Criteria是比hql查询更面向对象的一种方式。

–》http://blog.csdn.net/h_gao/article/details/49614531

8、BeanUtils中方法copyProperties(Object source, Object target, String[] ignoreProperties)

Copy the property values of the given source bean into the given target bean,

ignoring the given “ignoreProperties”.

即实现从一个实体到另一个实体的数据拷贝,不包括后面的String数组中的属性

9、js的push方法

将新元素添加到一个数组中,并返回数组的新长度值

jquery中的empty()方法和remove方法

empty方法–》清空div中的innerHTML,注意此时div还是存在的

remove方法–》删除整个div节,div已经不存在了

10、JSON.parse()和JSON.stringify()

parse用于从一个字符串中解析出json对象 stringify()用于从一个对象解析出字符串

url:http://blog.csdn.net/wangxiaohu__/article/details/7254598

11、通过addActionMessage添加的信息怎么显示出来

12、对js中this的理解,以及对于回调方法的理解

随着函数使用场合的不同,this的值会发生变化。但是有一个总的原则,那就是this指的是,调用函数的那个对象

对js面向对象的理解:如js的继承机制,js的闭包等

13、jQuery事件-trigger()方法 –》trigger() 方法触发被选元素的指定事件类型

如:

触发 input 元素的 select 事件:

(“button”).click(function()$(“input”).trigger(“select”););attr()方法设置或返回被选元素的属性值。根据该方法不同的参数,其工作方式也有所差异。改变图像的width属性:(“button”).click(function(){

$(“img”).attr(“width”,”180”);

});

attr()方法和prop()方法的区别
attr()方法操作的是文档节点的属性,因此设置的属性值只能是字符串类型。
如果不是字符串类型,也会调用toString()方法将其转换为字符串类型。
prop()方法操作的是js对象的属性,因此设置的属性值可以是包括数组和对象在内的任意类型。

Query认为:attribute的checked、selected、disabled就是表示该属性初始状态的值,
property的checked、selected、disabled才表示该属性实时状态的值(值为true或false)。
在jQuery 1.6及以后版本中,请使用prop()函数来设置或获取checked、selected、disabled等属性。
对于其它能够用prop()实现的操作,也尽量使用prop()函数。


14、JNDI(Java Naming and Directory Interface) Java命名和目录接口,它对应于J2SE中的javax.naming包

这套API的主要作用在于:它可以把Java对象放在一个容器中(JNDI容器),并为容器中的java对象取一个名称

以后程序想获得Java对象,只需通过名称检索即可。

其核心API为Context,它代表JNDI容器,其lookup方法为检索容器中对应名称的对象.

15、html应用的CSS只能是class,cssClass是在某些动态编程(网络设计)语言中的控件属性

并非html的标签属性,虽然最终仍会解析成class,但是在设计之初仍然要用cssClass

16、for update 数据库的悲观锁

当Oracle中出现数据表时被锁的情况时,可以用下面的命令找出未关闭的session,执行相关语句关闭session

选择最后一个KILL_SESS中的语句关闭相应的session

Select /*+ rule */

s.Username

,Decode(l.Type, 'TM', 'TABLE LOCK', 'TX', 'ROW LOCK', Null) Lock_Level

,o.Owner,o.Object_Name,o.Object_Type,s.Sid

,s.Serial#,s.Terminal,s.Machine,s.Program,s.Osuser

,s.Module,s.Action

,'ALTER SYSTEM KILL SESSION ''' || s.Sid || ',' || s.Serial# || ''';' Kill_Sess

From V$session s, V$lock l, Dba_Objects o

Where l.Sid = s.Sid

And l.Id1 = o.Object_Id(+)

And s.Username Is Not Null

And s.Terminal Is Not Null

Order By s.Machine, s.Terminal;


17、在Oracle中,对char和varchar2字段来说,”“就是null,即空字符串会以null的形式存在数据库中

18、

StringUtils.equals()方法

StringUtils.equals("", "");    //结果是true
StringUtils.equals(null, null);//结果是true
StringUtils.equals(null, "");  //结果是false
StringUtils.equals("",null);   //结果是false
StringUtils.equals(null,"");   //结果是false


StringUtils.isNotBlank()方法

StringUtils.isNotBlank(null) = false
StringUtils.isNotBlank("") = false
StringUtils.isNotBlank(" ") = false
StringUtils.isNotBlank("/t /n /f /r") = false
StringUtils.isNotBlank("/b") = true
StringUtils.isNotBlank("bob") = true
StringUtils.isNotBlank(" bob ") = true


StringUtils.isNotEmpty()方法

StringUtils.isNotEmpty(null) = false
StringUtils.isNotEmpty("") = false
StringUtils.isNotEmpty(" ") = true
StringUtils.isNotEmpty(" ") = true
StringUtils.isNotEmpty("bob") = true
StringUtils.isNotEmpty(" bob ") = true


19、window.open(pageURL,name,parameters)

其中:

pageURL 为子窗口路径

name 为子窗口句柄

parameters 为窗口参数(各参数用逗号分隔)

实例:

window.open("/MecoxCRM/jsp/util/initUserSelection.action", "",
'height=' + iHeight + ',innerHeight=' + iHeight + ',width=' + iWidth + ',innerWidth=' + iWidth
+ ',top=' + iTop + ',left=' + iLeft + ',toolbar=no,menubar=no,scrollbars=auto,resizeable=no,location=no,status=no');


$("#memberVo\\.primeSalesId",window.opener.document).val(users[0].userId);


将弹出的子窗口中的值传回到父窗口中

20、s:radio的取值问题

通过id获取radio选中值

var cT = $('input[id="sc_ct"]').filter(':checked').val();  ==>通过id查找的时候总是取不出来值,这个地方不太清楚
通过name获取radio选中值
"condition.marriage" : $('input[name="condition\\.marriage"]:checked').val();
var cT = $('input[name="ct"]').filter(':checked').val();


21、

$("#memberVo\\.primeSalesId",window.opener.document).val(users[0].userId);
$("#memberVo\\.primeSalesId",window.opener.document).html(users[0].userId);
将弹出的子窗口中的值传回到父窗口中
这里注意.val和点html的区别,如果父窗口的标签是span,则用.html来进行传值


22、小技巧:如果js有错(有的时候alert的信息不出来),可以按F12进入控制台查看js脚本是否有错

23、在JBoss上配置数据库的连接池对应的配置文件路径 jboss_home/server/deploy/oracle-ds.xml

24、

<input type="text" name="name" value="xxx" disabled="true"/>
<input type="text" name="name" value="xxx" readonly="true"/>


这两种写法都会使显示出来的文本框不能输入文字,但disabled会使文本框变灰,
而且通过request.getParameter("name")得不到文本框中的内容(如果有的话),form表单方式也不能传递数据
而readonly只是使文本框不能输入,外观没有变化,而且通过request.getParameter("name")可以得到内容。


25、Integer类型的数据比较容易出错

Integer temp;

“0”.equals(temp) –>”0” 与 Integer in = new Ingeger(0) –》不一样

26、http://www.cnblogs.com/jackcxd/archive/2010/04/29/1723688.html

–》js弹出子窗口更新父窗口

27、sql中的exists关键字

–》exists (sql 返回结果集为真) not exists (sql 不返回结果集为真)

SELECT * FROM (
SELECT r.*, rownum rn FROM (
SELECT M.MEMBER_ID,''          FROM mm_member M
where  exists (select * from sl_order o,sl_order_item s where o.member_id=m.member_id and s.order_no=o.order_no and s.sku=? and s.shipping_date between To_date(?, 'YYYY/MM/DD HH24:MI:SS') and To_date(?, 'YYYY/MM/DD HH24:MI:SS') )
order by M.MEMBER_ID   ) r ) where  rn Between  ?  And  ?


28、oracle中的哈希连接 –》http://blog.csdn.net/yuan22003/article/details/6713240

29、 –》OnUnload事件–》当用户卸载文档时执行一段 JavaScript

30、java中的ThreadLocal和FutureTask

线程局部量是局限于线程内部的变量,属于线程自身所有,不在多个线程间共享。

java提供ThreadLocal类来支持线程局部变量,是一种实现线程安全的方式。

31、Oracle中的查询分页问题–》http://www.itpub.net/thread-824147-1-1.html

Mysql中的分页比较简单,由于有limit这种关键字:select * from table limit M,N (注:MySQL的limit关键字,这个表示返回第M+1到第第M+N行的记录)

Oracle中没有limit关键字,通过使用rownum来实现

但是对于rownum有一个问题:

很多资料都说不支持>,>=,=,between…and,只能用以上符号(<、<=、!=),

并非说用>,>=,=,between..and 时会提示SQL语法错误,而是经常是查不出一条记录来。

解释:

ROWNUM是一个序列,是oracle数据库从数据文件或缓冲区中读取数据的顺序。

它取得第一条记录则rownum值为1,第二条为2,依次类推。如果你用>,>=,=,between…and这些条件,

因为从缓冲区或数据文件中得到的第一条记录的rownum为1,则被删除,接着取下条,

可是它的rownum还是1,又被删除,依次类推,便没有了数据。

因为这样,所以需要通过嵌套子查询来实现
select * from (
select rownum r_,row_.* from (select * from mm_member mm) row_
where rownum <=20
) where r_>=5
最内层是不进行翻页的原始查询语句,在这个查询上添加序列rownum作为一个新列名为r_
这样带出来的这一列r_就可以进行>=的操作,即可以设定查询的起始位置。


32、策略设计模式

33、Hibernate的抓取策略

34、面向对象设计的SOLID原则

S.O.L.I.D是面向对象设计和编程(OOD&OOP)中几个重要编码原则(Programming Priciple)的首字母缩写。

SRP—》The Single Responsibility Principle—》单一责任原则

让一个类只做一种类型责任,当这个类需要承当其他类型的责任的时候,就需要分解这个类。

OCP—》The Open Closed Principle—》开放封闭原则

软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。

这个原则是诸多面向对象编程原则中最抽象、最难理解的一个。

LSP—》The Liskov Substitution Principle—》里氏替换原则

当一个子类的实例应该能够替换任何其超类的实例时,它们之间才具有is-A关系。

DIP—》The Dependency Inversion Principle—》依赖倒置原则

1. 高层模块不应该依赖于低层模块,二者都应该依赖于抽象

2. 抽象不应该依赖于细节,细节应该依赖于抽象

ISP—》The Interface Segregation Principle—》接口分离原则

不能强迫用户去依赖那些他们不使用的接口。换句话说,使用多个专门的接口比使用单一的总接口总要好

35、Java种的WeakReference与SoftReference的区别

WeakReference和SoftReference都有利于提高GC和内存的效率,但是WeakReference一旦失去最后一个强引用,就会被GC回收

而软引用虽然不能阻止被回收,但是可以延迟到JVM内存不足的时候。

finalize 方法是在对象被回收之前调用的方法,给对象自己最后一个复活的机会,但是什么时候调用 finalize 没有保证。


36、问题场景:hibernate中两个对象进行关联,配置的是一对多 one to many

主对象通过getXXXSet().add()的方式更新与其关联的从对象

那么通过这种方式来更新数据是在什么时候发出sql语句?这是个问题,毕竟是框架内部的操作

问题:当页面上同时新增两条数据,两条数据都是通过getSet().add()的方式保存

并且两条数据之间对从表的数据有查询操作,这时在查询操作时发出了update语句

–》这是问题:为什么在查询的的时候将上面通过set方式储存的数据更新到了数据库中(发出了update语句)

@Override
@Transactional
public void saveBcExchangeSalesSkuCriteria(String activityId,
Collection<EvSalesSkuCriteriaVo> salesSkuCriterias,
String modifierId, String modifierName) throws Exception {
Date sysTime = DateUtil.getNow();
BcExchange entity = bcExchangeDao.loadByExchangeId(activityId, true);
List<EvSalesSkuCriteria> tempList = new ArrayList<EvSalesSkuCriteria>();
for(EvSalesSkuCriteriaVo salesSkuCriteriaVo : salesSkuCriterias) {
//儲存交易條件
EvSalesSkuCriteria salesSkuCriteria = null;
if(StringUtils.isNotBlank(salesSkuCriteriaVo.getOid())) {
//修改讀取 oid 相同
for(EvSalesSkuCriteria model : entity.getEvSalesSkuCriteriaSet()) {
if(model.getOid().equals(salesSkuCriteriaVo.getOid())) {
Integer skuType = model.getSkuType();
if (StringUtils.isNotBlank(salesSkuCriteriaVo
.getSkuNo())) {
if (skuType.equals(EvActivity._SKU_TYPE_NO)) {
if (!model.getSkuNo().equals(
salesSkuCriteriaVo.getSkuNo())
&& model.getSkuNo() != null) {
checkRepeatData(salesSkuCriteriaVo,
activityId);
}
}
}
if (StringUtils.isNotBlank(salesSkuCriteriaVo
.getDeptId())) {
String skuVoClassify = salesSkuCriteriaVo
.getDeptId()
+ salesSkuCriteriaVo.getSubDeptId()
+ salesSkuCriteriaVo.getClassId()
+ salesSkuCriteriaVo.getSubClassId();
String skuModelClassify = nvl(model.getDeptId())
+ nvl(model.getSubDeptId())
+ nvl(model.getClassId())
+ nvl(model.getSubClassId());
if (skuType.equals(EvActivity._SKU_TYPE_CLASS)) {
if (!skuVoClassify.equals(skuModelClassify)
&& model.getDeptId() != null) {
checkRepeatData(salesSkuCriteriaVo,
activityId);
}
}
}
if (StringUtils.isNotBlank(salesSkuCriteriaVo
.getBrand())) {
if (skuType.equals(EvActivity._SKU_TYPE_BRAND)
&& model.getBrand() != null) {
if (!salesSkuCriteriaVo.getBrand().equals(
model.getBrand())) {
checkRepeatData(salesSkuCriteriaVo,
activityId);
}
}
}
salesSkuCriteria = model;
break;
}
}
} else {
// 检核新增数据是否重复 add by Jason
checkRepeatData(salesSkuCriteriaVo, activityId);
//新增
salesSkuCriteria = new EvSalesSkuCriteria();
salesSkuCriteria.setCreateTime(sysTime);
salesSkuCriteria.setCreator(modifierId);
salesSkuCriteria.setCreatorName(modifierName);

}
salesSkuCriteria.setModifyTime(sysTime);
salesSkuCriteria.setModifier(modifierId);
salesSkuCriteria.setModifierName(modifierName);
salesSkuCriteriaVo.mergeVoToModel(salesSkuCriteria);

//放回 set 自動儲存
//modify by Jason 由于在检核重复数据的时候进行查询会发出sql语句,导致activityId为空
//这里用tempList来缓存需要更新的数据,在循环结束后一次性保存
//entity.getEvSalesSkuCriteriaSet().add(salesSkuCriteria);
tempList.add(salesSkuCriteria);

}
entity.getEvSalesSkuCriteriaSet().addAll(tempList);

List<EvSalesSkuCriteria> list = new ArrayList<EvSalesSkuCriteria>();
list.addAll(entity.getEvSalesSkuCriteriaSet());
this.sortSalesSkuCriteria(list);
int seq = 0;
for(EvSalesSkuCriteria model : list) {
model.setSeq(++seq);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: