java学习练习题及答案

时间:2023-02-23 13:37:33

---------------------------corejava----------------------------------------

1.列出8种基本数据类型和其对应的包装类。(1分)

答:

(1)整型     byte short、int、float、long、double

(2)字符型    char

(3)布尔类型 boolean

对应包装类:Byte Short Integer Float  Long  Double  Character Boolean  

 

2.定义一个Worker类, 

1)属性:name,age,salary  

2)方法:Worker另外实现2个构造方法(有参和无参)(1分)

3)完成属性的封装,提供get/set方法。(1分)

4)覆盖toString方法(1分)

5)equals方法(1分)

Class Worker{

private String name;

private Integer age;

private Double salary;  

public Worker(){}

public Worker(String name,Integer age,Double salary){

this.name=name;

this.age=age;

this.salary=salary;

}

public void setName(String name){

this.name=name;

}

public String getName(){

return name;

}

public void setAge(Integer age){

this.age=age;

}

public Integer getAge(){

return age;

}

public void setSalary(Double salary){

this.salary=salary;

}

public Double getSalary(){

return salary;

}

public String toString(){

return “name=”+name+”age=”+age+”salary=”+salary;

}

public Boolean equals(Object obj){

if(this==obj){return true;}

if(obj==null){return false;}

if(this.getClass()!=obj.getClass()){return false;}

Worker w=(Worker)obj;

if(this.name.equals(w.name)&&this.age.equals(w.age)&&this.salary.equals(w.salary)){return true;}

else return false; 

}

 

3.内部类有几种?分别叫什么?(1分)

答:成员内部类、局部内部类、静态内部类、匿名内部类

 

4.简述Java中四个访问修饰符 以及各自的特点(1分)

答:private     限制只能访问本类的方法、属性               不能修饰类 

Default     限制只能访问本类或者同包的类的方法、属性   可以修饰类

protected   限制只能访问本类、同包的类或者不同包的子类 不能修饰类

public      没有访问限制                               可以修饰类

 

5.简述方法覆盖和方法重载的区别(1分)

答:

(1)方法覆盖(Override):访问修饰符 返回值类型 方法名(参数列表)

要求,访问修饰符和父类一样或者范围更广、返回值类型、方法名必须和父类一致

(2)方法重载(Overload):访问修饰符 方法名(参数列表)

要求,方法名相同,参数列表必须不同

 

6.写出String常用的方法(3个)(1分)

答:

(1)str.charAt(i):返回str中指定下标i处的值

(2)str.indexOf(ch):返回指定chstr中第一次出现的下标值

(3)length: 返回字符串的长度

(4)spilt(\): 按括号内指定的内容(\)拆分字符串

(5)str.hashCode():返回字符串str的哈希码


------------------------Oracle和JDBC第一阶段----------------------------

【1】.封装Account对象,属性为:id(Integer)、name(String)、password(String)、balance(double),

  get/set方法可省略

  (1)创建5个Account对象,存放入Map中,Map<Integer,Account>(键为id,值为Account对象)

  (2)将Map中所有Account计算平均余额(balance)

class Account {

private Integer id;

private String name;

private String password;

Private Double balance;

//get/set方法

//toString方法

public class T1{

public void static main(String[]args){

Account a1=new Account(1,”Tom”,”123”,12.1);

Account a2=new Account(2,”Jim”,”123”,22.1);

Account a3=new Account(3,”Aim”,”123”,33.1);

Account a4=new Account(4,”Jony”,”123”,44.1);

Account a5=new Account(5,”Ms”,”123”,55.1);

Map<Integer,Account> map=new HashMap<Integer,Account>();

map.put(a1.getId(),a1);

map.put(a2.getId(),a2);

map.put(a3.getId(),a3);

map.put(a4.getId(),a4);

map.put(a5.getId(),a5);

double sum=0;

//Set<Account> set=map.keySet();得到键

Set<Account> set=map.values();//得到值

For(Account a:set){

Sum+=a.getBalance();

}

Syso(sum/(map.size()));

}

 

2.建表:

(1)课程表:table_class

 

列名 数据类型   位数    键 Not null/unique

id number    6    pk

name Varchar2    20       nn

create table_class(

id number(6) primary key ,

name Varchar2(20) 

)

(2)学生表:table_stu

列名 数据类型 位数 键 Not null/unique 检查约束

id number 6 pk

name Varchar2 20 nn       

zip number 6            必须6位

address Varchar2 50

class_id number 6  FK(指向table_class的pk)

create  table_stu(

id number(6) primary key,

name Varchar2(20),

zip number(6) check(zip.length==6),

address Varchar2(50),

class_id number(6) references table_class(id)

)

 

(3)为两个表分别插入一条数据

Insert into table_class values(22,”Tom”);

Insert into table_stu   values(23,”lisi”,12,22);

3.简述JDBC六个步奏。

  答:

加载驱动

创建数据库连接

创建发送Sql语句的工具

执行SQL语句

处理结果集

释放资源


-------------------HTML----------------------

1.from标签的作用:有哪些属性,每个属性的作用;

 答:action:数据提交的目标位置

     method:提交数据的方式

 

2.post和get提交方式有什么不同;

答:post提交方式安全且数据容量大

Get提交方式不安全且数据量小

 

3.请用HTML实现如下图所示的申请表表单(只写body部分):

  申请表

姓名:

密码:

提交

 

要求:将数据提交给  action="http://xxxx:xx/xxxx/xx" 资源;

答:

<html>

<head>

<title></title>

</head>

<body>

<form action=”http://localhost:8989/xxx”method=”post”>

<p>申请表</p>

姓名:<input type=’text’value=’请输入姓名’>

密码:<input type=’password’value=’请输入密码’>

<input type=’submit’value=’确认提交’>

<input type=’reset’ value=’重新输入’>

</form>

</body>

</html>

 

4.已知已创建如下表格并插入了多条数据:

create table t_bank(

  id number(7) primary key,

  name varchar2(34) ,

  password varchar2(35),

  balance number(10,2)

);

完成如下代码(工具类JdbcUtil、实体类Person;只需要完成dao):

(1)查询所有数据;

 public List<Person> queryAllPerson()throws Exception{

Connection conn=null;

 

 }

(2)修改一条数据。

 public void updateOnePerson(Person person)throws Exception{

......

 }

 

---------------------oracle and JDBC-------------------------------

已知已创建如下表格并插入了多条数据(表中序列名为:t_bank_seq):

create table t_bank(

  id number(7) primary key,

  name varchar2(34) ,

  password varchar2(35),

  balance number(10,2)

);

根据如下代码实现对应的功能(工具类JDBCUtil和实体类Bank已给出;完成dao层、service层):

public class BankTest{

public static void main(String[] rabs){

//测试

}

//查看账户

public void showBank(){

Scanner sc = new Scanner(System.in);

Integer id = sc.nextInt();

BankService service = new BankService();

Bank bank = service.getBankById(id);

System.out.println(bank);

}

//开户

public void openBank(){

Scanner sc = new Scanner(System.in);

String name = sc.next();

String password = sc.next();

Double balance = sc.nextDouble();

Bank bank = new Bank(null,name,password,balance);

//调用service

BankService service = new BankService();

service.addBank(bank);

}

}

=========================================

public class BankService{

public Bank queryBankById(Integer id){

//实现....

}

public void addBank(Bank bank){

//实现....

}

}

public class BankDAO{

public Bank selectBankById(Integer id){

//实现...

}

public void insertBank(Bank bank){

//实现...

}

}

 

 

---------------------JDBC阶段测试------------------

1.封装Account对象,属性为:id(Integer)、name(String)、password(String)、balance(double),

  get/set方法可省略

   

  (1)创建5个Account对象,存放入Map中,Map<Integer,Account>(键为id,值为Account对象)

  (2)将Map中所有Account计算平均余额(balance)

  

2.建表:

(1)课程表:table_class

 

列名 数据类型   位数    键 Not null/unique

id number    6    pk

name Varchar2    20       nn

 

(2)学生表:table_stu

列名 数据类型 位数 键 Not null/unique 检查约束

id number 6 pk

name Varchar2 20 nn       

zip number 6            必须6位

address Varchar2 50

class_id number 6  FK(指向table_class的pk)

:refereces table_class(id)

(3)为两个表分别插入一条数据

insert into table_class values(?,?);

3.简述JDBC六个步奏。

  

 

------------------------Oracle数据库-------------------

1.已知有一个Worker类如下:

public class Worker{

private int age;

private String name;

private double salary;

public Worker(){}

public Worker(int age, String name, double salary) {

super();

this.age = age;

this.name = name;

this.salary = salary;

}

//省落get()/set()方法

}

  完成下面的要求:

  (1)创建一个List,在List中增加三个工人,基本信息如下:

姓名 年龄 工资

zhang3  18      3000

li4     25      3500

wang5   22      3200

  (2)遍历集合,打印List中所有工人的信息。

    

2.已知一学校的教学课程内容安排如下:

老师 课程

Tom CoreJava

John Oracle

Susan JDBC

完成下列要求:

  (1)使用一个Map,以老师的名字作为键,以老师教授的课程名作为值,表示上述课程安排;

  (2)遍历Map,输出所有的老师及老师教授的课程。  

3.查询first_name 中包含"na"的员工信息;

4.显示各种部门的最低工资

5.把hiredate列看做是员工的生日,求本月过生日的员工

 

 

 

------------------------------Servlet--------------------------------------

 

1.根据自己的理解,简述forward和sendRedirect。

答:(1)forward,带参数跳转,会改变地址,一次请求,共享request作用域

RequestDispatcher rdp=request.RequestDispatcher(“url”);

rdp.forwoard(request,response);

(2)sendRedirect,不带参数跳转,会改变地址,多次请求,不共享作用域

response.sendRedirect(“uri”);

(3)include:不会改变地址

RequestDispatcher rdp=request.RequestDispatcher(“url”);

rdp.include(request,response);

 

2.简述servlet的生命周期。

答:init(),servlet执行初始化时执行的方法

service():servlet提供服务时所执行的方法

destroy():servlet对象销毁时所执行的方法

 

3.根据下面要求完成通讯录的登陆验证功能:

(1)工具类:JdbcUtil,entity:User,dao、service层已给出

(service方法:public User queryByName(String name,String password){...}),

只需完成action(com.zpark.LoginAction);

(2)登陆界面信息:

<body>

 <form action="/telbook_web/loginAction" method="post">

  <table border="1" bordercolor="blue" cellspacing="0" align="center">

 <tr>

<td>请输入姓名:</td>

<td><input type="text" name="username"/></td>

 </tr>

 <tr>

<td>请输入密码:</td>

<td><input type="password" name="password"/></td>

 </tr>

 <tr>  

<td colspan="2"><input type="submit" value="login"/></td>

 </tr>

  </table>

  </form>

   </body>

(3)登陆成功跳转到html/success.html页面,否则跳转到/ErrorView(com.zpark.ErrorView),并将登陆信息回显给客户端;

(4)写出登陆配置文件web.xml(只需写出LoginAction的配置信息即可)。


一、提问问题

1、 param pageScope requestScope  sessionScope

applicationScope cookie pageContext

 

2、静态include:在输出结果前把源代码合在一起,再输出结果

   动态include:在输出结果时,把源代码编译合在一起,输出结果!

 

3、 pageContext可以获得其他8个隐含对象

pageContext.getRequest(); --request

pageContext.getSession(); --session

pageContext.getServletContext();--application

4、获得作用域中的值

${pageScope.命名属性名}--------<%=pageContext.getAttribute("命名属性名")%>

${requestScope.命名属性名}------<%=request.getAttribute("命名属性")%>

${sessionScope.命名属性名}------<%=session.getAttribute("命名属性")%>

${applicationScope.命名属性名}-----<%=application.getAttribute("命名属性")%>

【注意】不存在这种写法:

${session.命名属性名}-

${application.命名属性名}

${page.命名属性名}

${request.命名属性名}

 

 

 

1.写出JSP中九个隐含对象。(2分)

答:pageContext request session application config out exception response

page

 

2.在servlet中往作用域里存值,代码如下:  (2分)

    

  session.setAttribute("name","zhangsan");

     

  request.setAttribute("name" ,"lisi");

  

如果从jsp页面中用如下代码取值,写出取值结果:

     

   ${name} ----------------->从最小的作用域取到最大的 "lisi" "zhangsan"

     

   ${requestScope.name} "lisi" ----->"zhangsan"

     

   ${sessionScope.name}"zhangsan"----->"lisi"

 

 

3.根据java代码写出对应的EL表达式  (3分)

   

(1)<%=request.getParameter("age")%> ${param.age}

   

(2)<%=pageContext.findAttribute("age")%> ${age}

  

(3)打印stu对象的age属性值: <%= stu.getAge() %> ${stu.age}

   

(4)<%=request.getContextPath()%>  ${pageContext.request.contextPath}

   

(5)<%=session.getId() %> ${pageContext.sesion.id}

   

(6)<%Cookie[] cookies = request.getCookies();

if (cookies != null){

for(Cookie c : cookies){

if (c.getName().equals("JSESSIONID")){

c.getValue();

}

}

   };

%>

${cookie.JSESSIONID.value}

 

4. 描述session和cookie的关系。(2分)

答:cookie是session的底层实现,在会话过程中,服务器创建session对象,把JSESSION存放至浏览器端cookie中,当客户端访问服务器时带JSESSIONID去访问session对象.

 

    备注:每个session对象都有一个编号:JSESSIONID。当浏览器第一次访问服务器(request.getSession(true)),创建session,并且将session的编号,通过cookie随着响应写入浏览器;

 

5.分别简述forward和sendRedirect在使用时如何编写,叙述各自的特点并分析二者的区别。(2分)

(1)forward

RequestDispatcher rdp=request.getRequestDispatcher("URL");

rdp.forward(request,response);

特点:带参数跳转,共享作用域,一次请求,跳转后地址栏不改变

(2)sendRedirect重定向

response.sendRedirect("URI");

特点:不带参数跳转,不共享作用域,多次请求,跳转后地址栏改变

6.简述Servlet的生命周期。(2分)

答:

(1)init():servlet开始执行初始化

(2)service():servlet提供服务时创建的方法

(3)destroy():servlet进行销毁时所提供的方法

 

 --------------hibernate----------

 1. 简述hibernate采取了哪些措施来减少java与数据库之间的交互次数(abcd)
a. 缓存(一级、二级)
b. 懒加载:延迟加载
c. hql 批处理
d. 事务提交时,批量执行增删改语句


2. HQL与SQL的说法哪些是正确的:(bcd)
a. HQL与SQL没有差别
b. HQL面向对象,而SQL面向关系型数据库
c. HQL与SQL都包含select, insert, update, delete 语句
  d. HQL仅用于查询数据,不支持insert, update, delete语句

3. 下面哪些方法不属于org.hibernate.Session:(aef)
  a. find  b. load  c. save
  d. delete  e. upload  f. open
  g. close  h. evict(移除session中的一个对象)  i. clear  j. flush


4. 有如下实体类和映射文件
public class Employee{
    ...
    private Department department;
}
public class Department {
    ...
    private Set<Employee> employees = new HashSet<Employee>();
}
...
<many-to-one name="department" column="department_id" >
...
<set name="employees" inverse="true">
    <key column="department_id"/>
    <one-to-many class="Employee"/>
</set>
执行查询(假设有一条部门记录id=1存在,并有3条员工记录) 问:
Session session = ...
Department d = (Department)session.load(Department.class, 1);(不会立即到数据库查询)     //1
session.close();                                      //2
System.out.println(d.getName());                      //3
System.out.println(d.getEmployees().size());          //4
下面哪种说法正确:c
    a. 会正常打印部门名称,以及员工人数
    b. 程序运行到2处出现异常
    c. 程序运行到3处出现异常
d. 程序运行到4处出现异常


5. 实体类、映射文件和数据库数据同上题
执行:
Session session = ...
Department d = session.load(Department.class, 1);(不会立即执行)     //1
System.out.println(d.getName());   (会打印部门名称,因为不会用到关系属性)                  //2
session.close();                                      //3
System.out.println(d.getEmployees().size()); (用到关系属性)        //4
下面哪种说法正确:(d)
    a. 会正常打印部门名称,以及员工人数
    b. 程序运行到2处出现异常
    c. 程序运行到3处出现异常
d. 程序运行到4处出现异常


6. 实体类、映射文件和数据库数据同上题
执行:
Session session = ...
List<Department> d = session.createQuery(
"from Department d inner join fetch      //(fetch是将自身和关系表的属性同时查询出来)
d.employees where d.id=1").list();    //1
System.out.println(d.get(0).getName());                      //2
session.close();                                      //3
System.out.println(d.get(0).getEmployees().size());        //4
下面哪种说法正确:(a)
    a. 会正常打印部门名称,以及员工人数
    b. 程序运行到2处出现异常
    c. 程序运行到3处出现异常
d. 程序运行到4处出现异常 

 
7. 对于hibernate中的一级缓存,二级缓存,说法错误的是?(c)
  a.二级缓存能够提高查询效率
  b.二级缓存可以被多个Session所共享
  c.一级缓存需要单独配置
  d.一级缓存属于Session级别,session关闭,一级缓存中内容也会被清空


8. 实体类、映射文件和数据库数据同第4题
假设数据库中已有记录Department(id=1),下面哪种说法正确?
    a. 执行(错误)
       session.get(Department.class, 1);
       session.get(Department.class, 1);
    会导致查询2次数据库
  b. 执行(错误)
       session.load(Department.class, 1);//未发送sql语句
       session.load(Department.class, 1);//未发送sql语句
    会导致查询2次数据库//1次
  c. 执行(错误)
       session.createQuery("from Department where id=1").uniqueResult();//进入session缓存
       session.get(Department.class, 1);//进入session寻找,如果没有,那么进入数据库查询
    会导致查询2次数据库//1次
  d. 执行(错误)
       session.createQuery("from Department where id=1").uniqueResult();
       session.load(Department.class, 1);
    会导致查询2次数据库//1次
  e. 执行(正确)
       session.get(Department.class, 1);
       session.createQuery("from Department where id=1").uniqueResult();        
  会导致查询2次数据库
  
  
  

------------jquery和ajax--------
  1.请说出至少五个以上的选择器
*ID选择器:$("#ID值")
  var a=$("#con");//选取出id为con的标签
*元素选择器:$("标签名")
  var a=$("div");//选取出div标签
*类选择器:$(".样式类名")

*层级选择器
*jquery对于多选择器共存时的解析规则:从左到右依次解析
   *后代选择器:$("selectorA selectorB ....")
*父子选择器:$("selectorA>selectorB>.....")
*紧邻的后续兄弟选择器:$("selectorA+selectorB+.....")
*所有后续兄弟选择器:$("selectorA~selectorB~.....")

2.DOM对象和Jquery对象之间的相互转化,有什么区别?
答:document.getElementById(id) ---- dom对象 不可以调用jquery相关方法.
$(“#id”)    ---- jquery对象才可以调用jquery相关的方法 text() css()




3.什么是异步请求?异步请求有哪些好处?
Ansynchronized JavaScript And XML (异步 javacript 和 xml)
异步:在不同的执行线上
异步请求:浏览器在展示当前页面的同时,在后台偷偷的发起的请求,进行数据库内容修改
         如此的请求不会阻塞当前页面的展示。




4.书写jquery对ajax封装后,使用ajax发送post请求的代码?
$.ajax({
type:"post",
url:
data:
success:function(result){
//
}
,dataType:"JSON"
});

var re=22;
var pp=4349;
$.ajax({
type:"post",
url:"${pageContext.request.contextPath}/xxxx",
data:"name="+re&"password="+pp,
success:function(ret){

}
,dataType:"JSON"
});


5.请写出发送ajax时,后台返回的是一个list集合时,后台转化list集合的关键代码?
GsonBuilder gb=new GsonBuilder();时
Gson gson=db.create();
String str=gson.toJson(*****);


public class Test{
public static void main(String[]args){
Gson gson=new Gson();
String str=gson.toJson();

//常用的方法response需要从HttpServletContext中获得
response.EncodingType("utf-8");
GsonBuilder gb=new GsonBuilder();
Gson gson2=db.settoDateFormat("yyyy-MM-dd").create();
gb.setExclusionStrategies(new ExclusionStrategy);
gson.toJson(list);
}
}






6.在jquery中,要想在DOM中清空所有匹配的元素,下面选项正确的是?( c.empty() 或a.remove())
<div id="d">
<div>hello</div>
</div>

a.remove():即移除元素的同时会把该元素所在的标签和事件同时移除
b.removeAll();//不存在
c.empty();只清除匹配的元素,而不清除标签
d.delete();//不存在



---------------------struts2-----------------
  
  1、struts2的核心控制器
<filter>
<filter-name>c35</filter-name>
<filter-class>org.apache.struts2.dispacther.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>c35</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


2、jsp向action传生日值
<form action="^^^^^?name=***&age=***&birthday=yyyy-MM-dd"/>


3、业务逻辑由DAO和Service处理完成