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通过对象逐级导航找到子对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值