2012/3/9面试

1.嘉讯软件公司
  1.js闭包,所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。
   function a(){
      var i=0;
      function b(){
        alert(++i);
      }
      return b;
    }
    var c = a();
    c();
  这段代码有两个特点:
  1、函数b嵌套在函数a内部;
  2、函数a返回函数b。
当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个闭包。
闭包的作用就是在a执行完并返回后,闭包使得Javascript的垃圾回收机制GC不会收回a所占用的资源,因为a的内部函数b的执行需要依赖a中的变量

原型(js-proptory):
每个javascript对象都有一个原型对象(简称原型),这个原型是由该对象的构造函数所定义(javascript自动创建的),并且对象继承原型的所有属性和方法(函数),
比如 一个String对象 的原型为 String.prototype ,如果我们想要给String类添加方法,可以这样做(比如添加常用的trim()方法):
js 代码
String.prototype.trim = function (){  
  return this.replace(/(^\s*)|(\s*$)/g, "");  


这个特性是相当令人惊讶的,因为这破坏了封装性,就好像在Java中你可以对String类直接进行修改一样。function() 可以当作数据来给左操作数赋值(而不仅仅是当作动作),也跟Java非常地不同。
,那为什么要使用原型呢?我感觉主要是为了解决对内部类型的继承问题,也就是说当你无法修改String的构造函数而想要让所有String实例都具有某一方法的时候,你可以用这个prototype;
或者说,你用这个prototype来模拟实现String类的子类,达到对父类进行扩展的目的。

  2.Spring实现的原理  Aop(什么是Aop,有什么作用), 用动态代理实现(什么是动态代理--->MyAdvice implements Advice,afterMethod,beforeMethod(前置通知,后置通知))
  3.多线程(多锁,写锁,读写锁怎么互斥),Socket,http协议,tcp/ip,upd协议
  4.怎么锁定是哪条线程耗费大内存,线程池,主线程,次线程分别做什么事 (android中ui,Handler: 主线程如何通知子线程,通知子线程处理耗时操作,Bundle)
  5.什么是同步,什么是异步,一般什么情况下使用.
  6.反射怎么获取对象 Class.forName("xxx.xxx.texst").newInstance();
  7.可不可以自己写个内加载器去加载自己定义的java.lang.arraylist;
  --->Class clazz = new MyClassLoader("itcastlib").loadClass("cn.itcast.day2.ClassLoaderAttachment");
  8.oracle创建了哪些索引(主键索引,聚合索引),oracle执行顺序不是从右往左,只能说where 条件的右边放过滤大量的数据的条件
  数据量大的表写在前面&过滤数据大的条件写在后面可以需要较少执行时间了。
  SQL解析的大概步骤:
翻译SQL语句,验证它是合法的语句,即书写正确
实现数据字典的查找,以验证是否符合表和列的定义 楼上的例子显然是这一步就结束了
在所要求的对象上获取语法分析锁(latch),使得在语句的语法分析过程中不改变这些对象的定义
验证为存取所涉及的模式对象所需的权限是否满足
决定此语句最佳的执行计划 这一步才会考虑CBO还是RBO,并生成执行计划,而LZ问的执行顺序应该指的就是整个解析过程完成后的执行过程,其采用的顺序由此处产生的执行计划决定
将它装入共享SQL区
  9.索引什么情况下失效(帅选数据量超过表中的一个阀值,索引会失效)
     1.只要索引的基表在物理上被移动了就会失效的
     2.发生了ddl 操作,,,有没有使用update global indexes 来更新这个ddl操作涉及到的数据,,就会导致索引失效...
  2.易思博技术公司
    1.怎样自己写一个类加载器去加载(自己写类加载器(重写findClass方法))
    2.获取路径webapp下面(getclassloader(""),ActionContext.getServletContext+getrealpath,+seporator,)
    3.常见的设计模式:Mvc,模板模式,适配器模式(usb接口,更方便),单列模式(Sington),观察者模式(Observer)
    4.Struct2(过滤器 Filter)
    5.spring怎么实现(动态代理)
    6.Hibernate原理
    7.怎么防止表单重复提交(客服端(js),服务器(写一个方法),写一个TokenProccessor { // 令牌类,里面产生随机数)
    8.spring里面怎样自己实现注入属性
    9.js怎么定义一个类
       一、定义类并创建实例
     function MyClass() {
        this.id = 5;
        this.name = 'myclass...';
     }
     10.webkit开发
     3.远行科技
       1.多线程断点上传下载(android)
       2.FileInputStream ,FileOutputStream 中 notify方法不抛出异常
       3.String(null) 强制转换不报错
       4.

public static void main(String[] args) throws Exception {
/*FileInputStream fi =new FileInputStream(new File(""));
FileOutputStream fo =new FileOutputStream(new File(""));
fi.close();
fo.close();
fi.notify(); //notify 没异常
*/
   /* String s ="";
    String b =(String)s;
    System.out.println(b);*/
/*String s="hello";
if(s=="hello"){System.out.println("hello");}else
if(s!="hello"){System.out.println("!hello");}*/
StringBuffer strr=new StringBuffer("AA");
changeStr(strr);
System.out.println(strr);

}

public static void changeStr(StringBuffer str){
/* str.toLowerCase();
str+="bb";
StringBuffer bf =new StringBuffer();
bf.append(str);
bf.append("cc");
     bf.toString();*/
str.append("BB");
str.toString().toLowerCase();

}

1.synchronized是利用锁的机制,使变量或代码块在某一时该只能被一个线程访问。而ThreadLocal为每一个线程都提供了变量的副本,
  使得每个线程在某一时间访问到的并不是同一个对象,这样就隔离了多个线程对数据的数据共享.
  而Synchronized却正好相反,它用于在多个线程间通信时能够获得数据共享。Synchronized用于线程间的数据共享,
  而ThreadLocal则用于线程间的数据隔离。当然ThreadLocal并不能替代synchronized,
  它们处理不同的问题域。synchronized是用来处理多线程环境下的数据同步,而ThreadLocal只是为了保存当前线程私有的某种状态。

  2.strust1常用标签
     1.Struts提供了五个标签库,即:HTML、Bean、Logic、Template和Nested。这里仅对项目中常用的Bean标签及Logic标签做一介绍。
Bean标签: 在访问JavaBeans 及其属性,以及定义一个新的bean 时使用
Logic标签: 管理条件产生的输出和对象集产生的循环
在使用标签的时候需注意struts标签不能嵌套使用 (也就是说在一个标签的属性中不能写另一个标签)。
标签的一些公共属性:
id 命名自定义标签创建时的脚本变量名。
name   指出关键字值,在该关键字下可以找到一个存在的bean 。如果给出了scope属性,则仅仅在scope中查找。否则,根据标准的顺序在各种scope中查找:(page, request, session, or application)。
property   指出bean 中的某个属性,可以在其中检索值。如果没有标明,则使用对象本身的值。
scope   定义了Bean在哪个范围(page, request, session, or application)中被查找。如果没有标明按顺序查找。脚本变量(见id)将在相同的范围中创建。

       1.bean:define:有三个用途。我们较多使用为后两者。
        1.三是复制一个现有的bean的属性给新的bean:
  Xml代码 
     <bean:define id="bop" name="user" property="role[3].name"/> 
     <bean:define id="foo" name="bar" property="baz" scope="request"  toScope="session"/> 
    //toScope属性指新bean的scope,默认为page   
2.bean:message:用来实现对国际化的支持的一个标签。
3.bean:write:以字符串形式输出bean的属性值。
4.Logic标签实例说明
logic:iterate 标签来迭代集合。
indexId属性:当前访问元素的序号
length属性:指定输出元素的个数
offset属性:指定从第几个元素开始输出
        5.logic:empty 该标签是用来判断是否为空的。如果为空,该标签体中嵌入的内容就会被处理。
6.logic:equal 该标签为等于比较符。

    3.struts2的常用标签
      1.<s:textfield>标签:文本框标签,可填写文本内容,同时该标签含有很多有用的属性:
      2.<s:password>标签:密码框标签,其附带的属性与textfield相似
<s:textarea>标签:定义多行的文本输入控件,其核心属性cols和rows分别指定文本域的宽度和高度
<s:date>标签:时间显示标签,用于显示指定格式的时间对象,很多人不知道如何在文本框中显示指定日期格式,
大家可以参考通过<s:textfield>+<s:date>的形式
      3.<s:radio>标签:单选按钮,该控件依然采用key/value的形式处理数据,即key值传到后台,
      value值显示给用户,结合上面的例子,我们知道性别男的key=0,value="男",性别女的key=1,value="女",
      这就是为什么在后台将性别以SexBean这种javabean的形式来存储。开发用struts2的<s:radio>标签展示单选按钮完全是傻瓜式的操作:
      设置需要显示的数据集合(collection或array),设置key和value,如下面的代码:
      4.<s:select>标签:下拉列表,该标签的使用方法跟<s:radio>标签完全类似,另外可以通过headerKey和headerValue属性设置下拉列表默认值和显示的内容
<s:select>转换成普通html后的代码
      5.<s:hidden>标签:隐藏标签,可以设置变量值,但是不在页面显示
<s:submit>标签:表单提交按钮
<s:reset>标签:表单重置按钮
<s:debug>标签:struts2独有的调试标签,在开发中使用,可以在页面看到值栈中的所有信息,方便调试。
      6.<s:property>标签:用于显示变量值的标签,没有什么可说的
<s:if><s:elseif><s:else>标签:这三个标签结合使用就能实现java的if...elseif...else的逻辑操作,标签中的test属性用于分之条件判断。
<s:iterator>标签:迭代标签,这个标签的功能类似于java的for循环操作,value属性装的是集合对象,var属性是集合中的某一对象,
status表示迭代的次数,begin和end表示循环开始位置和结束位置。最后看上面例子的代码:
      7.OGNL简介
OGNL是一个功能强大的EL,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,
遍历整个对象的结构图,实现字段类型转化等功能,它使用相同的表达式去存取对象的属性。
之所以命名为OGNL,就是因为它处理对象很给力,struts能够将对象层层解析,
把各个对象的关系以图的样式展示出来。比如userBean.userId,之所以能找到这个对象,
就是因为OGNL会先找userBean对象,然后再找userBean对象里的userId属性。假设UserBean这个类还包含了名为Role的javabean的实例,
Role里面包含字段roleName,我们要找到roleName就可以直接写<s:property value="user.role.roleName">,OGNL通过对象逐级导航找到子对象。
      

猜你喜欢

转载自lvwenwen.iteye.com/blog/1448216
3/9
今日推荐