面试题2

1java如何避免内存溢出

  及时释放资源


"上面的代码中,循环申请了Object对象,并添加到Vector中,然后将对象设置为null,可是这些对象因为被Vector引用着,因此并不能被GC回收,因此造成了内存泄漏。因此,要释放这些对象,还需要被它们从Vector删除,最简单的方法就是将Vector设置为null"

 

2 事务是什么?单表的增删改会产生事务吗

  对数据库进行crud操作时所执行的一系列操作都要保证正确的执行 保证事物的完整性

3 java反射是什么

  通过自己发现自己的属性和方法来构造对象

  和new的区别

4 gc是什么

   当对象失去引用时  对对象进行回收

5 ajax get与post请求区别?

function btn_get_click() {
    var xmlHttp = window.XMLHttpRequest ? 
        new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");

    var username = document.getElementById("txt_username").value;
    var age = document.getElementById("txt_age").value;

    //添加参数,以求每次访问不同的url,以避免缓存问题
    xmlHttp.open("get", "Server.aspx?username=" + encodeURIComponent(username)
        + "&age=" + encodeURIComponent(age) + "&random=" + Math.random());

    xmlHttp.onreadystatechange = function () {
        if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
            document.getElementById("result").innerHTML = xmlHttp.responseText;
        }
    }

    //发送请求,参数为null
    xmlHttp.send(null);
}


function btn_post_click() {
    var xmlHttp = window.XMLHttpRequest ?
        new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");

    var username = document.getElementById("txt_username").value;
    var age = document.getElementById("txt_age").value;
            
    var data = "username=" + encodeURIComponent(username)
        + "&age=" + encodeURIComponent(age);

    //不用担心缓存问题
    xmlHttp.open("post", "Server.aspx", true);

    //必须设置,否则服务器端收不到参数
    xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

    xmlHttp.onreadystatechange = function () {
        if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
            document.getElementById("result").innerHTML = xmlHttp.responseText;
        }
    }

    //发送请求,要data数据
    xmlHttp.send(data);
}
    get请求时,需要加上随机数,避免缓存问题

    post需要设置请求消息头

6 闭包作用

 

Js代码

  function f1(){

    n=999;

    function f2(){
      alert(n); // 999
    }

  }

在上面的代码中,函数f2就被包括在函数f1内部,这时f1内部的所有局部变量,对f2都是可见的。但是反过来就不行,f2内部的局部变量,对f1 就是不可见的。这就是Javascript语言特有的“链式作用域”结构(chain scope),

各种专业文献上的“闭包”(closure)定义非常抽象,很难看懂。我的理解是,闭包就是能够读取其他函数内部变量的函数。

由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成“定义在一个函数内部的函数”。

所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。

个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中

7 hibernate load与get区别

   在hibernate中我们知道如果要从数据库中得到一个对象,通常有两种方式,一种是通过session.get()方法,另一种就是通过session.load()方法,然后其实这两种方法在获得一个实体对象时是有区别的,在查询性能上两者是不同的。

  

 session = HibernateUtil.openSession();
      User user = (User)session.load(User.class, 2);
      System.out.println(user);
     使用load时会发生延迟加载

     这个user对象仅仅是一个保存了id的代理对象,但如果我需要打印出user对象的其他属性值时,这个时候会不会发出sql语句呢?答案是肯定的

    

②如果使用load方式来加载对象,当我们试图得到一个id不存在的对象时,此时会报ObjectNotFoundException异常

复制代码
      session = HibernateUtil.openSession();
            /*
             * 当通过get方式试图得到一个id不存在的user对象时,此时会报ObjectNotFoundException异常
             */
            User user = (User)session.load(User.class, 20);
            System.out.println(user.getId());
            System.out.println(user.getUsername());
复制代码

我们看看控制台的输出:

20
Hibernate: select user0_.id as id0_0_, user0_.username as username0_0_, user0_.password as password0_0_, user0_.born as born0_0_ from user user0_ where user0_.id=?
org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [com.xiaoluo.bean.User#20]......

为什么使用load的方式和get的方式来得到一个不存在的对象报的异常不同呢??其原因还是因为load的延迟加载机制,使用load时,此时的user对象是一个代理对象,仅仅保存了当前的这个id值,当我们试图得到该对象的username属性时,这个属性其实是不存在的,所以就会报出ObjectNotFoundException这个异常了。


8 hibernate 查询的方式 除hql 还有哪些的?

  http://blog.sina.com.cn/s/blog_7ffb8dd501014a6o.html

 

从点到面,讲讲hibernate查询的6种方法。分别是HQL查询
,对象化查询Criteria方法,动态查询DetachedCriteria,例子查询,sql查询,命名查询。
           如果单纯的使用hibernate查询数据库只需要懂其中的一项就可以完成想要实现的一般功能,但是
从一个点,让我们掌握6中方法,则提供了更多选择。每一种方法都有其适用的情况与前提。
HQL查询
HQL是hibernate自己的一套查询语言,于SQL语法不同,具有跨数据库的优点。示例代码:

static void query(String name){
  Session s=null;
  try{
   s=HibernateUtil.getSession();
   
   //from后面是对象,不是表名
   String hql="from Admin as admin where admin.aname=:name";//使用命名参数,推荐使用,易读。
   Query query=s.createQuery(hql);
   query.setString("name", name);
   
   List<Admin> list=query.list();
   
   for(Admin admin:list){
    System.out.println(admin.getAname());
   }
  }finally{
   if(s!=null)
   s.close();
  }
 }

适用情况:常用方法,比较传统,类似jdbc。缺点:新的查询语言,适用面有限,仅适用于Hibernate框架。
对象化查询Criteria方法:条件查询

static void cri(String name,String password){
  Session s=null;
  try{
   s=HibernateUtil.getSession();
   
   Criteria c=s.createCriteria(Admin.class);
   c.add(Restrictions.eq("aname",name));//eq是等于,gt是大于,lt是小于,or是或
   c.add(Restrictions.eq("apassword", password));
   
   List<Admin> list=c.list();
   for(Admin admin:list){
    System.out.println(admin.getAname());
   }
  }finally{
   if(s!=null)
   s.close();
  }
 }

适用情况:面向对象操作,革新了以前的数据库操作方式,易读。缺点:适用面较HQL有限。


sql查询

static List sql() {

  Session s = HibernateUtil.getSession();
  Query q = s.createSQLQuery("select * from user").addEntity(User.class);
  List<User> rs = q.list();
  s.close();
  return rs;
 }

适用情况:不熟悉HQL的朋友,又不打算转数据库平台的朋友,万能方法   缺点:破坏跨平台,不易维护,不面向对象。

9 oracle的优化

   为经常出现在where ,order by,distinct后面的字段创建索引

   减少表之间关联 

10 jquery与dom相互转换

    var obj = document.getElementById("d1")

   $o = $(obj);  //dom-->jquery

  

   $o = $("#d1");//jquery-->dom

   var obj = $o.get(0);

11 js addclass 与css作用

    <html>
<head>
<script type="text/javascript" src="/jquery/jquery.js"></script>
<script type="text/javascript">
$(document).ready(function(){
  $("button").click(function(){
    $("p:first").addClass("intro");
  });
});
</script>
<style type="text/css">
.intro
{
font-size:120%;
color:red;
}
</style>
</head>

<body>
<h1>This is a heading</h1>
<p>This is a paragraph.</p>
<p>This is another paragraph.</p>
<button>向第一个 p 元素添加一个类</button>
</body>
</html>


12 title 与 alt 区别 

alt 用来给图片来提示的。Title用来给链接文字或普通文字提示的。 

用法如下: 

   <p Title="给链接文字提示">文字</p> 

   <a href="#" Title="给链接文字提示">文字</a> 

   <img src="图片.gif" alt="给图片提示">

13 string stringbuffer区别

14 分页查询 聚合函数的使用   

SELECT*

 FROM(SELECTROWNUMASrowno,t.*

         FROMempt

        WHEREhire_dateBETWEENTO_DATE('20060501','yyyymmdd')

                            ANDTO_DATE('20060731','yyyymmdd')

          ANDROWNUM<=20)table_alias

 WHEREtable_alias.rowno>=10;

  
常用的count()求个数 sum() 求和 avg()求平均数 min()最小值 max()最大值
一般与group by 语句使用

15 存储过程与函数区别

     函数必须要有返回值

   

16 tcp 和 udp区别

   

1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接

2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的
UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP首部开销20字节;UDP的首部开销小,只有8个字节

6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道


17 hashmap结构

    底层采用数据加链表的方式实现

18 表空间 临时表空间 游标

 临时表空间 在事物提交前存储数据的地方   

一个表空间是由具体的一个或多个用户模式下的表,索引等等里面的数据所构成的. 
临时表空间


游标是指针

19 数值赋值和引用赋值区别

    数值赋值大多数是在栈区分配内存,引用赋值是在方法区开辟内存

20 list

public class listTest {
	public static void main(String[] args) {
		List list = new ArrayList();
		Person p1 = new Person("kk", 34);
		Person p2 = new Person("jj", 66);
		list.add(p1);
		list.add(p2);
		for (Object obj : list) {
			if (obj instanceof Person) {
				Person p = (Person) obj;
				p.name = "kevin";
				p.age = 11;
			}
		}
		System.out.println(p1.name);
		System.out.println(p1.age);
		System.out.println(p2.name);
		System.out.println(p2.age);
	}
}

<pre name="code" class="java">kevin
11
kevin
11

 

21 io 采用什么模式

    装饰模式

22 spring如何处理异常的

    拦截器

23 数据源如何加载的

24 二级缓存 如何实现 缓存在哪里

25java singleton 与 spring singleton 区别

26 hibernate 模版的使用

25 http 1 2 3 4 5 含义

    readyState

 

存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。

  • 0: 请求未初始化
  • 1: 服务器连接已建立
  • 2: 请求已接收
  • 3: 请求处理中
  • 4: 请求已完成,且响应已就绪
status

200: "OK"

404: 未找到页面


26 视图解析器 多个展现页面

27 事务 隔离 传播

    对数据库进行crud操作时执行的一系列动作,都要保证能够正确的执行

    一个事务对数据库的修改与并行的另一个事务的隔离程度 committed 一个事物不会读取并行的另一个事物已修改但未提交的数据

   事物传播 required 支持当前事物,如果当前没有事物就创建一个新事物


28 java 序列化是为了解决什么问题,为什么要序列化呢

29. 多线程访问一个变量,会出现什么问题。
30. 异常类有哪几种类型。

      http://blog.csdn.net/woshixuye/article/details/8230407
31. 讲一讲你接触的框架的区别。

32.栈里放的是什么,堆里放的是什么

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章