Java攻城狮面试题(-)

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

C++中和Java中,public、private、 protected 的用法不完全一样。

C++中:public修饰的成员变量或方法可以被任意其他的类访问。

            private修饰的成员变量和方法,只能有类本身以及友元函数和友元类来访问。
            protected 修饰的成员变量和方法,能被类本身、继承本身的子类、友元函数以及友元类来访问。
           默认情况下,在class关键字定义的类中,第一个作用域限定词(public、private、 protected )出现之前的成员变量或方法都是private的。而在用struct关键字定义的类中,第一个限定词出现之前的成员变量和方法都是public的。两个作用域限定词之间的成员变量和方法都是被前一个限定词限制的。
         public: int a;
         int b;
private double d;以上例子中,int b;相当于public int b;
继承类(派生类)可以通过继承类对象(此处指访问自己内部的 protected 成员,不能访问其他继承类对象内的成员)访问基类中的 protected 成员,但是不可以通过基类对象访问基类中的 protected 成员。不能通过类的实例(对象)访问类的 protected 成员。
    友元关系时不可继承的。
    private继承将基类中的所有成员都变成private。
    protected 继承将基类中的public成员变成 protected ,其他成员不变。
    public继承保持基类中的限定条件不变。

    JAVA中:
private修饰的成员变量和函数只能在类本身和内部类中被访问。
    protected 修饰的成员变量和函数能被类本身、子类及同一个包中的类访问。
    public修饰的成员变量和函数可以被类、子类、同一个包中的类以及任意其他类访问。
    默认情况(不写)下,属于一种包访问,即能被类本身以及同一个包中的类访问。
    下面这个表能清楚的说明java中作用域操作符的作用:
2....简述servlet的生命周期中方法与作用
     ①实例化阶段:服务器对Servlet进行实例化,调用Servlet的构造方法

     ②初始化阶段:服务器调用Servlet的init方法进行初始化(只在第一次请求时调用)。

     ③请求处理阶段:服务器调用Servlet的service方法,然后根据请求方式调用相应的doXXX方法。

     ④服务终止阶段:服务器调用Servlet的destroy方法销毁Servlet实例

3。。。异步 和同步有什么区别?在什么情况下使用它们?举例说明
   举个例子:普通B/S模式(同步)AJAX技术(异步)
 
      同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事
异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕
--------------------------------------------------------------------------------------------------------------------
同步就是你叫我去吃饭,我听到了就和你去吃饭;如果没有听到,你就不停的叫,直到我告诉你听到了,才一起去吃饭。
异步就是你叫我,然后自己去吃饭,我得到消息后可能立即走,也可能等到下班才去吃饭。
所以,要我请你吃饭就用同步的方法,要请我吃饭就用异步的方法,这样你可以省钱。


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.。举例说明  synchronized修饰符应用的场景?
  在并发编程中,多线程同时并发访问的资源叫做临界资源,当多个线程同时访问对象并要求操作相同资源时,
分割了原子操作就有可能出现数据的不一致或数据不完整的情况,为避免这种情况的发生,我们会采取同步机制,
以确保在某一时刻,方法内只允许有一个线程。

      采用synchronized修饰符实现的同步机制叫做互斥锁机制,它所获得的锁叫做互斥锁。
每个对象都有一个monitor(锁标记),当线程拥有这个锁标记时才能访问这个资源,没有锁标记便进入锁池。
任何一个对象系统都会为其创建一个互斥锁,这个锁是为了分配给线程的,防止打断原子操作。每个对象的
锁只能分配给一个线程,因此叫做互斥锁。


7.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主要用于控制逻辑。


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


  function GetBytes(str){
    var len = str.length;
    var bytes = len;
    for(var i=0; i<len; i++){
        if (str.charCodeAt(i) > 255) bytes++;
    }
     return bytes;
}
alert(GetBytes("你好,as"));
  2.用javascript实现用正则表达式验证  某个字符串是合法的6为数字的邮编的函数
  var reg = /\d{6}
  3.请使用jquery将页面上的所有元素边框设置为2px宽的虚线?


<!DOCTYPE HTML>
<html>
<head>
<title>yugi</title>
<meta charset=UTF-8 />
<style type="text/css">
</style>
<script type="text/javascript" src="jquery-1.8.0.min.js"></script>
<script type="text/javascript">
    jQuery (function ($)
    {
        $ ("*").css ("border", "2px dashed");
    })
</script>
</head>
<body>
</body>
</html>
  4 如何设定jquery异步调用还是同步调用
     Ajax请求默认的都是异步的
     如果想同步 async 设置为 false 就可以(默认是true)
   
  5 说出三条以上firefox和ie的浏览器脚本兼容问题
    1.兼容firefox的 outerHTML,ie 中没有outerHtml的方法
   2.集合类对象问题

   说明:IE下,可以使用()或[]获取集合类对象;Firefox下,只能使用[]获取集合类对象.解决方法:统一使用[]获取集合类对象.
    3.自定义属性问题

说明:IE下,可以使用获取常规属性的方法来获取自定义属性,也可以使用getAttribute()获取自定义属性;Firefox下,只能使用getAttribute()获取自定义属性.解决方法:统一通过getAttribute()获取自定义属性.
三  数据库的基础知识点
  1  比较truncate和delete命令?
     runcate table命令将快速删除数据表中的所有记录,但保留数据表结构。这种快速删除与delete from
 数据表的删除全部数据表记录不一样,delete命令删除的数据将存储在系统回滚段中,需要的时候,数据可以
回滚恢复,而truncate命令删除的数据是不可以恢复的

  2  简述oracle数据库中rowid和rownum的区别?
   owid在记录创建时就生成了,而且是不变的,直接指向硬件上的存储位置,能用rowid直接访问是最快的,但也是人力所无法做到的。rownum是个伪列,查询的时候除非特别指定,否则不会显示。其主要的用处是控制查询返回的行数,比如在WHERE中加ROWNUM<5,则查询结果如果在5行或以上时,只返回前4行。
  3  写一个简单的触发器的实例
   求一个简单的触发器的写法?,增加a表的同时,增加b和c,要求3个表id相同,且a.softname=b.softname;a.sname=c.sname 。
各位可以用下面的sql继续写。谢谢各位大侠。
 
IF OBJECT_ID('A') IS NOT NULL
DROP TABLE A
IF OBJECT_ID('B') IS NOT NULL
DROP TABLE B
IF OBJECT_ID('c') IS NOT NULL
DROP TABLE c
 
GO
 
CREATE TABLE A( id int,sname varchar(8), softname varchar(16))
go
insert A SELECT  
01 , 'aaa','aaaaa' UNION ALL SELECT
02 , 'bbb' ,'bbbbb'
 
 
CREATE TABLE B( id int,巡检时间 datetime,softname varchar(16))
go
insert B SELECT  
01 ,  '2009-8-1','aaaaa' UNION ALL SELECT
02 , '2009-8-3','bbbbb'
 
 
CREATE TABLE c( id int,开始时间 datetime,结束时间 datetime,sname varchar(8))
go
insert c SELECT
01 , '2009-8-1'  ,  '2009-8-3','aaa' UNION ALL SELECT
02 , '2009-8-20'  , '2009-8-23' ,'bbb'
 
select * from a
select * from b  
select * from c
 
 
create trigger TB_TR
on a
for insert
as
 
insert b (id,巡检时间,softname )
select id,convert(varchar(10),getdate(),120),softname
from inserted A
where not exists(
  select 1 from B
  where id=A.id-1 and softname=A.softname
  )
 
insert c (id,开始时间,结束时间,SNAME )
select id,getdate(),convert(varchar(10),getdate(),120),sname
from inserted D
where not exists (
  select 1 from c
  where id=D.id-1 and sname=D.sname
  )
go
 
 
 
INSERT A SELECT '03' , 'ccc' ,'dddd'
INSERT A SELECT '04' , 'dddd' ,'eeeee'
 
 
select * from a
select * from b  
select * from c
 
/*a
id    sname    softname
1    aaa    aaaaa
2    bbb    bbbbb
3    ccc    dddd
4    dddd    eeeee
 
b
id    巡检时间    softname
1    2009-08-01 00:00:00.000    aaaaa
2    2009-08-03 00:00:00.000    bbbbb
3    2009-08-13 00:00:00.000    dddd
4    2009-08-13 00:00:00.000    eeeee
 
 
c
开始时间    结束时间    sname
2009-08-01 00:00:00.000    2009-08-03 00:00:00.000    aaa
2009-08-20 00:00:00.000    2009-08-23 00:00:00.000    bbb
2009-08-13 09:24:46.327    2009-08-13 00:00:00.000    ccc
2009-08-13 09:24:46.327    2009-08-13 00:00:00.000    dddd
*/



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值