十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
一、基础知识填空题(2*20)
创新互联公司主营南岔网站建设的网络公司,主营网站建设方案,重庆APP软件开发,南岔h5微信小程序搭建,南岔网站营销推广欢迎南岔等地区企业咨询
1. 面向对象语言的三个典型特征是____、____、____。
2. java中数值型变量被声明而未赋值时,是带有缺省值的,boolean类型声明的缺省值是____,float类型声明时的缺省值是___.
3. String s = new String(“xyz”)创建了____个String Object.
4. JavaBean 的 scope(生命周期)一般可为四种类型:request,____,____,____.
class A {
void method1(){
System.out.println("method1() in class A");
}
void method2(){
System.out.println("method2() in class A");
}
}
class B extends A{
void method1(){
System.out.println("method1() in class B");
}
void method3(){
System.out.println("method2() in class B");
}
}
class C{
public static void main(String[] args) {
A a = new B();
a.method1(); //a _________
a.method2(); //b _________
}
}
当运行class C后,请在注释a/b处填写输出内容.
6. int a=2; int v=++a + ++a * ++a;那么v = _______.
7.
class C {
public static void main(String[] args){
int i = 1;
int j=i++;
System.out.println("i="+i+",j="+j);
}
}
当运行class C后,会输入_________?
8. public class Test{
private void paraTest(int x, java.util.Vector y){
x+=5;
y.add("22");
System.out.println("x:"+x);
System.out.println("y:"+y.size());
}
public static void main(String[] args){
int a= 5;
java.util.Vector b = new java.util.Vector();
b.add("11");
System.out.println(a); //a ________.
System.out.println(b.size()); //b ________.
Test test = new Test();
test.paraTest(a, b);
System.out.println(a); //c ________.
System.out.println(b.size()); //d ________.
}
}
当运行class Test后,请在注释a,b,c处填写输出内容.
9. Ajax无需刷新页面便可向server端传输或读写数据,这一点主要基于browser的一个对象实现,这个对象是______.
10. XML的解析方法有两种,包括______解析和______解析.
二、
1. java中的char类型对象可以储存一个汉字.( )
2. 如果没有显式调用父类的构造函数,java总是调用父类的黑夜构造函数,即在执行当前类的构造函数之前会先执行默认的super()语句( )
3. 静态方法中可以使用类中定义的非静态成员变量.( )
4. java中只允许单一继承, 可以在继承的同时实现一个接口.( )
5. java中的boolean类型可以作为数字处理.( )
6. 局部变量(方法内部变量)在使用时必须显式初始化.( )
7. 如果一个对象实例为null, 则不会被instanceof其父类或接口的.( )
8. switch语句可以作用在char上,byte上,short上.( )
9. try{}里有一个return语句,那么跟在try后的finally{}里的代码不会被执行.( )
10. 一个一般的类(没有父类),其初始化的顺序是: static变量, static方法块, 一般的实例变量, 构造函数.( )
三、综合知识问答题(3*10)
1. 请描述java语言中类的修饰符, public, protected, private, 以及没有修饰符时的作用范围.
2. MVC是一种典型的架构模式, Sturts是Mvc2的一种实现形式, 请简述Struts的体系结构和其主要组成部分的作用.
3. 简单工厂模式和工厂方法模式均属于设计模式之创建模式的一种, 请从其OO法则及实现原理等方面论述二者的实现过程(写出示例代码亦可).
4. JDK1.5导入了一些新的语言特性, 更有利于代码的书写, 如支持泛型, 自动拆/装箱,增强的for循环等, 请结合代码给出示例.
5. OO法则是OO语言书写时需要遵从的约定俗成的规则, 如开放--关闭法则,请简述你所知道的其它OO法则.
6. 给出冒泡排序的代码实现.
7. Overload和Override的区别?
8. 请试图描述java语言中的GC(Gabage Collection)
9. 请传述数据库中的几种表连接方式, 或代码未例.
10. 请描述你对自己的职业规划或者未来的职业发展目标.
1.JSP、Servlet、JavaBean技术的出现给我们构建强大的企业应用系统提供了可能。但用这些技术构建的系统非常的繁乱,所以在此之上,我们需要一个规则、一个把这些技术组织起来的规则,这就是框架,Struts便应运而生。
经过长达五年的发展,Struts已经逐渐成长为一个稳定、成熟的框架,并且占有了MVC框架中最大的市场份额。但是Struts某些技术特性上已经落后于新兴的MVC框架。面对Spring MVC、Webwork2 这些设计更精密,扩展性更强的框架,Struts受到了前所未有的挑战。但站在产品开发的角度而言,Struts仍然是最稳妥的选择。
Struts2.0为其它框架提供了更好的集成。
使得与Spring的集成非常的容易。
2.Struts的工作流程:
在web应用启动时就会加载初始化ActionServlet,ActionServlet从
struts-config.xml文件中读取配置信息,把它们存放到各种配置对象
当ActionServlet接收到一个客户请求时,将执行如下流程.
-(1)检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路径无效信息;
-(2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中;
-(3)根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm的validate()方法;
-(4)如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActuibErrors对象,就表示表单验证成功;
-(5)ActionServlet根据ActionMapping所包含的映射信息决定将请求转发给哪个Action,如果相应的Action实例不存在,就先创建这个实例,然后调用Action的execute()方法;
-(6)Action的execute()方法返回一个ActionForward对象,ActionServlet在把客户请求转发给ActionForward对象指向的JSP组件;
-(7)ActionForward对象指向JSP组件生成动态网页,返回给客户;
3.在struts配置文件中配置具体的错误提示,再在FormBean中的validate()方法具体调用。
4.(1) 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
(2) Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作
(3)hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。
(4)hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。
5.原理:
(1).读取并解析配置文件
(2).读取并解析映射信息,创建SessionFactory
(3).打开Sesssion
(4).创建事务Transation
(5).持久化操作
(6).提交事务
(7).关闭Session
(8).关闭SesstionFactory
6.
Hibernate的最大的好处就是简化数据库的操作,允许你的代码以对象模式来访问数据库内容,
比如通常我们找一个User的资料需要select出所需要的资料,而通过hibnate我们可以把这个User的资料作为一个对象来看待
,通过User.getName()或者User.getId()等操作来获得,这样就完全统一了上层JAVA或者C#等OO语言中对于数据库的非OO操作的不和谐了.
另外对于复杂的表和表之间的关联我们也不用去使用复杂的Select等SQL来操作,而使用对象可以方便获得,
比如多对多关系某用户属于的部门的名称,虽然底层数据库使用了3个表的主键关联操作,
但是我们可以通过User.getDep().getName()来简单的获得,这个就是持久化对象的好处了
7.
(1)、spring能简化企业级开发, spring可以用简单的java bean来代替实现复杂的EJB。(大部分情况下)
(2)、spring是一个轻量级的IOC和AOP框架,可以spring的IOC实现松耦合,而作为一个AOP框架他又能分离系统服务,实现内聚开发
(3)、spring是非侵入式,基于spring的系统可以不依赖于spring的类。
良好的spring运用可以使程序代码清晰,容易维护,容易测试。
8.
Spring是个很不错的框架。内部最核心的就是IOC了,
动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射
反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xml Spring的配置
文件来动态的创建对象,和调用对象里的方法的 。
Spring还有一个核心就是AOP这个就是面向切面编程,可以为某一类对象 进行监督和控制(也就是
在调用这类对象的具体方法的前后去调用你指定的 模块)从而达到对一个模块扩充的功能。这些都是通过
配置类达到的。
Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明
管理的(Spring根据这些配置 内部通过反射去动态的组装对象)
要记住:Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。
Spring里用的最经典的一个设计模式就是:模板方法模式。(这里我都不介绍了,是一个很常用的设计模式)
Spring里的配置是很多的,很难都记住,但是Spring里的精华也无非就是以上的两点,把以上两点跟理解了
也就基本上掌握了Spring.
9.
(1).spring mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。
(2).DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.
(3).DispatcherServlet请请求提交到目标Controller
(4).Controller进行业务逻辑处理后,会返回一个ModelAndView
(5).Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象
(6).视图对象负责渲染返回给客户端。
你好,代码如下。需要修改的话,你可以根据情况修改:
class Info{ // 定义信息类
private String name = "生产者"; // 定义name属性
private String content = "压入子弹" ; // 定义content属性
private boolean flag = false ; // 设置标志位
public synchronized void set(String name,String content){
if(!flag){
try{
super.wait() ;
}catch(InterruptedException e){
e.printStackTrace() ;
}
}
this.setName(name) ; // 设置名称
try{
Thread.sleep(300) ;
}catch(InterruptedException e){
e.printStackTrace() ;
}
this.setContent(content) ; // 设置内容
flag = false ; // 改变标志位,表示可以取走
super.notify() ;
}
public synchronized void get(){
if(flag){
try{
super.wait() ;
}catch(InterruptedException e){
e.printStackTrace() ;
}
}
try{
Thread.sleep(300) ;
}catch(InterruptedException e){
e.printStackTrace() ;
}
System.out.println(this.getName() +
" -- " + this.getContent()) ;
flag = true ; // 改变标志位,表示可以生产
super.notify() ;
}
public void setName(String name){
this.name = name ;
}
public void setContent(String content){
this.content = content ;
}
public String getName(){
return this.name ;
}
public String getContent(){
return this.content ;
}
};
class Producer implements Runnable{ // 通过Runnable实现多线程
private Info info = null ; // 保存Info引用
public Producer(Info info){
this.info = info ;
}
public void run(){
boolean flag = false ; // 定义标记位
for(int i=0;i12;i++){
if(flag){
this.info.set("生产者","压入子弹") ; // 设置名称
flag = false ;
}else{
this.info.set("消费者","射出子弹") ; // 设置名称
flag = true ;
}
}
}
};
class Consumer implements Runnable{
private Info info = null ;
public Consumer(Info info){
this.info = info ;
}
public void run(){
for(int i=0;i24;i++){
this.info.get() ;
}
}
};
public class ThreadCaseDemo03{
public static void main(String args[]){
Info info = new Info(); // 实例化Info对象
Producer pro = new Producer(info) ; // 生产者
Consumer con = new Consumer(info) ; // 消费者
new Thread(pro).start() ;
new Thread(con).start() ;
}
};
Integer[] merge(Integer[] arr1, Integer[] arr2) {
java.util.CollectionInteger aCollection=new TreeSetInteger();
aCollection.addAll(Arrays.asList(arr1));
aCollection.addAll(Arrays.asList(arr2));
Integer[] arr3 = new Integer[aCollection.size()];
aCollection.toArray(arr3);
return arr3;
}