今天去了xx公司面试,总结下面试题吧
总的来说都很基础吧,自己在数据库那部分做的不是很好,这当然也是常见的多表查询的问题了,平均工资大于本部门工资的,,一点也不意外。做的时候觉得自己写的那些语句性能肿么那么戳。。。看来的补补才行。
多线程的问题也是必考的吧。sleep()和wait的区别。同步的实现方法。
还有题是考了css样式的种类和优先等级。内联大于 外链 大于浏览器缺省..(忘了最后一个)
面试官问的问题也是听基本的,基本上也是按照我的简历提到的技术上发挥,下面说说我遇到的无语:
1、struts2的二次绑定?? 是什么?没用过。。
附上实例看看吧有空:
import org.apache.commons.lang.xwork.StringUtils;
import org.apache.log4j.Logger;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.Preparable;
import com.zglv.base.model.Person;
public class RegisterAction extends ActionSupport implements Preparable {
/**
*
*/
private static final long serialVersionUID = 8602551280879236965L;
private Logger logger = Logger.getLogger(this.getClass());
private Person person;
@Override
public String execute() throws Exception{
logger.info(person.toString());
return SUCCESS;
}
@Override
public void validate() {
if (person != null) {
if (StringUtils.isBlank(person.getFirstName())) {
addFieldError("person.firstName", "first name is required.");
}
if (person.getAge() < 18) {
addFieldError("person.age", "too younge, less than 18");
}
}
}
public void prepare() {
person = new Person();
person.setAge(40);
person.setEmail("email");
person.setFirstName("first name");
person.setLastName("lastName");
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
person类
Java code
public class Person {
private String firstName;
private String lastName;
private String email;
private int age;
假如对应的界面有两个属性
<form style="width: 50%;" action="register.action" method="post">
<fieldset>
<lable>firstName</lable>
<input type="text" name="person.firstName" >
<br>
<lable>age</lable>
<input type="text" name="person.age" >
<br>
<input type="submit" name="" value="submit"/>
</fieldset>
</form>
前台输入参数的时候,只输入了firstName和age属性,请求注册action后,经过prepare方法后,我们把person的属性全部赋值,然后方法execute中可观察到对象person中的属性是综合了前台和后台的属性。即前台传入的参数把person对象对应的属性覆盖了,而前台没有传过来的参数保持不变。这样就实现了参数的二次绑定
2、hibernate 1N问题,虽然有所闻可是没遇到。惭愧性能上没下功夫
1+N问题也可以叫N+1问题,什么是1+N问题呢?
如果在一个对象里关联另一个对象,并且fetch = FetchType.EAGER。
比如说ManyToOne(OneToMany也存在这种问题)关联,本来只需要取Many里的对象属性,可是Many里关联的对象都会单独再发一条语句取关联对象的属性。
本来只用发一条就可以查出Many里的对象属性,可是它发了一条语句后,再发N条语句取关联对象的数据。
解决办法:
1、 设置多的那方的FetchType为LAZY :在合适的时候才发出语句(按需要发语句)。
2、BatchSize:在One对象设置Size后,取出Many里的数据后,再发N/Size条语句取关联对象的数据,从而达到少发语句的目的。(----不能彻底解决~)
3、使用Join Fetch:(使用Criteria或者写HQL语句时在后面加上left join fetch w.category)将Many与One做外连接,因此只要发一条语句就可以查出Many与其相关联的One对象数据,Criteria默认就是这种做法。
如何选择解决办法:
如果只要用Many里的对象,不用关联对象的属性,那就用方法1解决;
如果要Many里的对象属性,也想要关联的对象属性就用方法3解决。
3、hibernate 的二次缓存 数据库的优化。代码优化 做缓存 openSessionView
4、spring 的事务管理 实现原理
最后说说Hr跟我的聊天 我说我是忠诚的,不会逃跑的,信不信你有你,反正我是信了。