java面试宝典

一、Java基础知识点:

1.作用域public,private,protected,以及不写时的区别。

(1)、public:public表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用

(2)、private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用,私有财产神圣不可侵犯嘛,即便是子女,朋友,都不可以使用。

(3)、protected:protected对于子女、朋友来说,就是public的,可以自由使用,没有任何限制,而对于其他的外部class,protected就变成private。

作用域 当前类 同一package 子孙类 其他package

public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
不写时默认为friendly

2.简述Servlet的生命周期中的方法及作用。

Servlet生命周期分为三个阶段:

  (1),初始化阶段 :调用init()方法

  (2),响应客户请求阶段:调用service()方法

  (3),终止阶段:调用destroy()方法
生命周期:Servlet是一种可以在Servlet容器中运行的组件,那么理所当然就应该有一个从创建到销毁的过程,这个过程我们可以称之为Servlet生命周期。Servlet的生命周期可以分为加载、实例化、初始化、处理客户请求和卸载五个阶段,体现在方法上主要是init()、service()和destroy()三个方法。生命周期的具体说明如下:
Servlet容器完成加载Servlet类和实例化一个Servlet对象;
init()方法完成初始化工作,该方法由Servlet容器调用完成;
service()方法处理客户端请求,并返回响应结果;
destroy()方法在Servlet容器卸载Servlet之前被调用,释放一些资源

3.同步和异步有何异同,在什么情况下分别使用他们?举例说明。

如果数据将在线程间共享.例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取.
当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率.

4.简述forward和redirect的区别。

(1).从地址栏显示来说

forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.

redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.

(2).从数据共享来说

forward:转发页面和转发到的页面可以共享request里面的数据.

redirect:不能共享数据.

(3).从运用地方来说

forward:一般用于用户登陆的时候,根据角色转发到相应的模块.

redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.

(4).从效率来说

forward:高.

redirect:低.

5.char型变量中能不能存贮一个中文汉字?为什么?

java采用unicode,2个字节(16位)来表示一个字符, 无论是汉字还是数字字母,或其他语言。char 在java中是2个字节。所以可以存储中文

6.举例说明sychronized修饰符应用的场景。

synchronized关键字是JAVA中内置的语言级同步原语,可以通过使用这个关键字实现多线程间访问之间的同步。synchronized关键字可以作为函数的修饰符,也可以直接在函数语句中使用,也就是平时说的同步方法和同步语句。从作用域上上来看,它可以分为作用于某个实例对象内和某个类的范围内。也可以实现在类的范围内的某个方法的同步,或是让一个类的所有对象都在某个代码块的使用上同步:

public synchronized static void test(){

}

public class Tester{

​ public void test(){

​ synchronized(Tester.class){

​ //代码…

​ }

​ }

}

​ 此时的对象锁是Tester类的所有对象,即假设Testert1,Tester t2两个对象,当一个线程在执行完t1的同步语句之前,另一个线程也不能执行t2的同步语句。

7.JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?

jsp和servlet的区别和联系:

(1).jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)

(2).jsp更擅长表现于页面显示,servlet更擅长于逻辑控制.

(3).Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到.

Jsp是Servlet的一种简化,使用Jsp只需要完成程序员需要输出到客户端的内容,Jsp中的Java脚本如何镶嵌到一个类中,由Jsp容器完成。而Servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应。

联系:  JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。

8.简述cookie和session的区别。

cookies:是针对每一个网站的信息,每一个网站只对应一个,其它网站不能访问,这个文件是保存在客户端的,每次你打相应网站,浏览器会查找这个网站的cookies,如果有就会将这个文件起发送出去。cookies文件的内容大致包函这些信息如用户名,密码,设置等。

session: 是针对每一个用户的,只有客户机访问,程序就会为这个客户新增一个session。session里主要保存的是用户的登录信息,操作信息等。这个session在用户访问结束后会被自动消失(如果超时也会)。

二、JavaScript前端基础知识点:

1.编写一个方法。求一个字符串的字节长度?

// GBK字符集实际长度计算

function getStrLeng(str){

​ var realLength = 0;

​ var len = str.length;

​ var charCode = -1;

​ for(var i = 0; i < len; i++){

​ charCode = str.charCodeAt(i);

​ if (charCode >= 0 && charCode <= 128) {

​ realLength += 1;

​ }else{

​ // 如果是中文则长度加2

​ realLength += 2;

​ }

​ }

​ return realLength;

}

// UTF8字符集实际长度计算

function getStrLeng(str){

​ var realLength = 0;

​ var len = str.length;

​ var charCode = -1;

​ for(var i = 0; i < len; i++){

​ charCode = str.charCodeAt(i);

​ if (charCode >= 0 && charCode <= 128) {

​ realLength += 1;

​ }else{

​ // 如果是中文则长度加3

​ realLength += 3;

​ }

​ }

​ return realLength;

}

2.用JavaScript实现用正则表达式验证,某个字符串是否合法的6位数字的邮编的函数。

var reg = /\d{6}/

3请使用jQuery将页面上的所有元素边框设置为2px宽的虚线?

yugi

2.如何设定jQuery异步调用还是同步调用?

(1) 异步请求:
​ 1.1 $.ajax
​ $.ajax({
​ url
: ‘your url’,
data:{name:value},
cache : false,
async : true,
type : “POST”,
dataType : ‘json/xml/html’,
success : function (result){
​ do something…
​ }
​ });
​ (2) 同步请求
​ 2.1 $.ajax
​ $.ajax({
​ url
: ‘your url’,
data:{name:value},
cache : false,
async : false,
type : “POST”,
dataType : ‘json/xml/html’,
success : function (result){
​ do something…
​ }
​ });
​ 2.2 $.post
​ $.post(
‘your url’,
{name:value},
function(data) {
​ do something…
​ },
​ ‘json/xml/html’
​ );

3.说出3条以上firefox和IE的浏览器脚本兼容问题?

IE/Firefox中JS脚本常见兼容问题
1、document.form.item/document.ID
IE中 document.formName.item(”itemName”)
FF中 document.formName.elements[“elementName”]
建议使用document.getElementById(itemName)
2, 下标运算
IE中 document.forms(”formName”)
FF中 document.forms[“formName”]
IE中 document.getElementsByName(”inputName”)(1)
FF中 document.getElementsByName(”inputName”)[1]
建议使用[]作为下标运算
3,window.event
IE中 可以使用window.event
FF中 event 只能在事件发生的现场使用,可以改写成
事件=函数(event);
function somemethod(evt) {
evt = evt ? evt : (window.event ? window.event : null);
alert(evt);
}
例如:
4,event.x 与 event.y 问题
IE中,event 对象有 x, y 属性
FF中,可用event.clientX
,event.clientY替代(IE也有该属性)
也可用:mX = event.x ? event.x : event.pageX;
5,操作frame
IE中 可以用window.FrameName取得该frame,FF中不行
FF中 可以用window.top.document.getElementById(”frameId”)来访问frame
注:IE 和FF都可以通过window.top.document.getElementById(”Frame”).src = ’somefile.htm’来切换frame的 内容,也都可以通过window.top.frameName.location
= ’somefile.htm’来切换frame的内容
6,调用showModalDialog
IE中可以用showModalDialog一个子窗口,并获得返回值.
FF中没有showModalDialog,但可以用window.open来实现.
例如:
在Main.cfm文件中有如下代码:
function ShowItemList(Obj){
if (document.all){//IE
var ReturnValue=window.showModalDialog(”ItemList.cfm?Id=341″,”self”,”dialogwidth:500px;status:false”);
if (typeOf(ReturnValue)!=’undefined’){
Obj.value=ReturnValue;
}
}
else{
var subwin=window.open(Item.cfm?id=341,’newWin’,’modal=yes,width=500px’);
}
}
function ReturnValue(ReturnValue){
Obj=document.getElementById(’elementname’);
Obj.value=ReturnValue;
}
如果需要得到返回值.需要用到window.open的参数modal=yes,而且必须在子窗口中向母窗口传值(window.opener).
例如在subwin.cfm中加入以下代码:
function ReturnThisValue(){
window.opener.ReturnValue(document.getElementById(’SelectedItem’).value);
}
7,其它
a, 在FF中,自定义的属性必须使用getAttribute()
b, FF中没有 parentElement parement.children 而用parentNode parentNode.childNodes,可以使用
node.getElementsByTagName()
c, FF不支持onpropertychange事件
d, FF中 createElement不支持HTML代码,可以考虑用:document.write(esHTML);
e, IE 中innerText ,在FF中可以用textContent
f, FF下用class代替IE下的className
g, 如果FF调用obj.focus(); 报错,请尝试改为:window.setTimeout( function(){
obj.focus(); }, 0);
h, firefox不支持 FILTER
i, IE: blur发生在focus后,FF: blur发生在focus前调用
j. IE:event.keyCode=====FF:event.which
function catcathevent(evt)
{
evt = evt ? evt : (window.event ? window.event : null);
if (document.all){
var keyvalue=evt.keyCode;
}
else{
var keyvalue=evt.which;
}
k. 设置容器位置 left、top及长宽,必须加上’px’,如 $(’obj’).style.left
= ‘50px’;
l.在FF地址栏中输入about:config,会出现火狐的参数配置设置****

**三、**数据库基础知识点:

1.比较truncate和delete命令?

1、都是删除
2、truncate不会触发触发器
3、delete可以回滚,truncate不会
4、truncate速度快

2.简述Oracle数据库中rowid和rownum的区别?

rowid在记录创建时就生成了,而且是不变的,直接指向硬件上的存储位置,能用rowid直接访问是最快的,但也是人力所无法做到的。rownum是个伪列,查询的时候除非特别指定,否则不会显示。其主要的用处是控制查询返回的行数,比如在WHERE中加ROWNUM<5,则查询结果如果在5行或以上时,只返回前4行。

3.写一个简单的触发器的示例。

创建触发器那一段代码,在sql 窗口无法正常执行,会报错,必须放到命令窗口去方可

![说明: IMG_256](file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image002.jpg)

4.写一个简单的函数示例。

oracle写法

create function fn_plus(x number, y number)

return number is

return x+y;

end fn_plus;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值