人人都面试

今天去了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跟我的聊天 我说我是忠诚的,不会逃跑的,信不信你有你,反正我是信了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值