`
zlotus
  • 浏览: 52020 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

面试笔试

    博客分类:
  • Java
阅读更多
1.局部变量:定义没有赋初值时,如果这个变量没使用不会报错,要是使用会出错。
(1)int i;(2)System.out.println(i);只有1编译不会报错,有2编译出错。

2.重写重载
  重写方法的规则:
     参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载.
     返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载.
访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)
     重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常.例如,
父类的一个方法申明了一个检查异常IOException,在重写这个方法是就不能抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常.
  而重载的规则:
  必须具有不同的参数列表;
  可以有不同的返回类型,只要参数列表不同就可以了;
  可以有不同的访问修饰符;
  可以抛出不同的异常;
重写和重载的区别在于:重写多态性起作用,对调用被重载过的方法可以大大减少代码的输入量,同一个方法名只要往里面传递不同的参数就可以拥有不同的功能或返回值.

3.父类中包含有参构造函数时,需要加上无参构造函数,否则子类会报错:implicit super
  constructor XX  is undefined.
类初始化加载顺序:
package mianshi;

public class TestA {

String s = "A";
static {

System.out.println("static(A)");

}

{
System.out.println("Nonstatic(A)");
}

public String toString() {
return "A-" + "A-";

}

public TestA() {

System.out.println("-----A()");

}

public TestA(String s) {

System.out.println("-----A(s)");

}

}


package mianshi;

public class TestB extends TestA {
// private String s;

static {

System.out.println("static(B)");

}

{

System.out.println("Nonstatic(B)");
}

public TestB() {

System.out.println("--B()");

}

private TestB(String s) {
System.out.println("--B(s)");
this.s = s;

}

@Override
public String toString() {
return s + "-B-";
}

public static void changestr(String str) {
str = "welcome";
}

public static void main(String[] args) {
TestB b = new TestB("dddd");
// System.out.println(b.toString());
// String mm ="mm";
// changestr(mm);
// System.out.println(mm+"..");
// TestB b1 = new TestB();

}

}


打印顺序:

static(A)
static(B)
Nonstatic(A)
-----A()
Nonstatic(B)
--B(s)

4.tomcat配置数据库连接池:
http://blog.csdn.net/it_man/archive/2008/01/22/2058979.aspx
5.log4j的日志信息的级别
等级可分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL,如果配置OFF则不打出任何信息
6.序列化及其作用-摘自网络
简单来说序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化,流的概念这里不用多说(就是I/O),我们可以对流化后的对象进行读写操作, 也可将流化后的对象传输于网络之间(注:要想将对象传输于网络必须进行流化)!在对对象流进行读写操作时会引发一些问题,而序列化机制正是用来解决这些问题的!

类通过实现 java.io.Serializable 接口以启用其序列化功能。
可序列化类的所有子类型本身都是可序列化的.
什么时候使用序列化:
一:对象序列化可以实现分布式对象。主要应用例如:RMI要利用对象序列化运行远程主机上的服务,就像在本地机上运行对象时一样。 H%cSy) 
二:java对象序列化不仅保留一个对象的数据,而且递归保存对象引用的每个对象的数据。可以将整个对象层次写入字节流中,可以保存在文件中或在网络连接上传递。利用对象序列化可以进行对象的"深复制",即复制对象本身及引用的对象本身。序列化一个对象可能得到整个对象序列。
http://hi.baidu.com/yushugang/blog/item/86870f08f32b06d663d98687.html

7.rmi,ejb --摘自网络
RMI是Java的一组拥护开发分布式应用程序的API。RMI使用Java语言接口定义了远程对象,它集合了Java序列化和Java远程方法协议(Java Remote Method Protocol)。
简单地说,这样使原先的程序在同一操作系统的方法调用,变成了不同操作系统之间程序的方法调用,由于J2EE是分布式程序平台,它一RMI机制实现程序组件在不同操作系统之间的通信。
比如,一个EJB可以通过RMI调用Web上另一台机器上的EJB远程方法。
  RMI(Remote Method Invocation,远程方法调用)是用Java在JDK1.1中实现的,它大大增强了Java开发分布式应用的能力。Java作为一种风靡一时的网络开发语言,
其巨大的威力就体现在它强大的开发分布式网络应用的能力上,而RMI就是开发百分之百纯Java的网络分布式应用系统的核心解决方案之一。其实它可以被看作是RPC的Java版本。
但是传统RPC并不能很好地应用于分布式对象系统。而Java RMI 则支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用


8、EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。
    EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT等技术实现。
SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB组件。EntityBean被用来代表应用系统中用到的数据。
对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器上运行的业务逻辑。
对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的实体。
Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless Session Bean ,这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此通常来说,一个使用者会有一个相对应的 Stateful Session Bean 的实体。Stateless Session Bean 虽然也是逻辑组件,但是他却不负责记录使用者状态,也就是说当使用者呼叫 Stateless Session Bean 的时候,EJB Container 并不会找寻特定的 Stateless Session Bean 的实体来执行这个 method。换言之,很可能数个使用者在执行某个 Stateless Session Bean 的 methods 时,会是同一个 Bean 的 Instance 在执行。从内存方面来看, Stateful Session Bean 与 Stateless Session Bean 比较, Stateful Session Bean 会消耗 J2EE Server 较多的内存,然而 Stateful Session Bean 的优势却在于他可以维持使用者的状态。


9.jspinclude指令
动态 INCLUDE 用 jsp:include 动作实现 <jsp:include page="included.jsp" flush="true" /> 它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。静态 INCLUDE 用 include 伪码实现 , 定不会检查所含文件的变化,适用于包含静态页面 <%@ include file="included.htm" %>

10.数据库连接池机制
J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。
11.异常机制:
Error表示系统级的错误和程序不必处理的异常,  虚拟机异常。
Exception表示需要捕捉或者需要程序进行处理的异常。程序错了。

12.递归算法:
递归算法设计的基本思想是:对于一个复杂的问题,把原问题分解为若干个相对简单类同的子问题,继续下去直到子问题简单到能够直接求解,也就是说到了递推的出口,这样原问题就有递推得解。
http://blog.csdn.net/mzf333/archive/2009/04/19/4091653.aspx
求1到i平方和:
      static long  multiTotal(int i ){

if(i==1){
return 1;

}else{
return i*i+multiTotal(i-1);
}

}

1到n的阶乘:
    public int factorial(int num)
      {
       //递归
       if(num == 1)
       {
           return 1;
       }
      
       return num*factorial(num-1);
      
     }


13.修饰符范围:

         同一个类  同一个包  子类  全局
private  ok
default  ok       ok
protected ok      ok       ok
public    ok      ok       ok   ok  

14.类型运算:
byte b = 6,e=8;
byte  b1 = b+e;//错误的
在表数范围内可以将int型数据直接赋值给char byte short类型的变量。
byte char short类型数据在计算时会转换成int类型计算,得出结果是int类型。

15.排序算法:
数组Arrays.sort(数组名);这个方法只是升序。
System.arraycopy(源数组,开始位置,目的数组,开始位置,拷贝个数)
冒泡:
选择:

转自:http://www.360doc.com/content/070510/16/2807_492346.html
文件操作:
--------------------------------------------------------------

jsp文件操作常用方法:
mkdir() 方法用于对文件夹的创建  
delete() 方法可以删除文件夹和文件 
exists() 方法是判断文件夹或文件是否存在 
createNewFile() 方法是创建一个文件 
listFiles() 方法是获取文件夹下的文件 
read() 方法是对文件进行读取 
readLine() 方法是对文件进行以行读取 
write() 方法是将字符或字符串写入文件 

下面就对这些方法进行示例说明
1.目录的新建与删除
mkdir()方法:
<%@ page import="java.io.*" %> 
<% 
String path = request.getRealPath("/file/"); 
String subPath = path+"mulu"; 
File ml = new File(subPath); 
if(ml.exists()) 

ml.delete(); 
out.println(path + "文件夹mulu已经被删除!"); 

else 

ml.mkdir(); 
out.println(path + "文件夹mulu创建成功!"); 

%> 
2.文件的新建与删除
createNewFile()方法:
<%@ page import="java.io.*" %> 
<% 
String path = request.getRealPath("/file/"); 
File fileName = new File(path, "File.txt"); 
if(fileName.exists()) 

fileName.delete(); 
out.println(path + "文件File.txt文件已经被删除!"); 

else 

fileName.createNewFile(); 
out.println(path + "文件File.txt创建成功!"); 

%> 


3.获取文件夹下的文件
listFiles()方法:
<%@ page import="java.io.*" %> 
<% 
String path = request.getRealPath("/file/"); 
File fl = new File(path); 
File list[] = fl.listFiles(); 
out.println("文件列表:<br>"); 
for(int i=0; i < list.length; i++) 

     out.println(list[i].getName()+"<br>");  

%> 

4.读取文件的内容
read()方法:
<%@ page import="java.io.*" %> 
<% 
String path = request.getRealPath("/file/");  
FileReader fr = new FileReader(path + "File.txt");  
//单个字节方式读取 
int c = fr.read();  
while(c != -1) //判断是否已读到文件的结尾 

out.print((char)c); //输出读取到的数据  
c = fr.read(); //从文件中读取数据 
if(c == 13) //判断是否为断行字节 

out.print("<BR>"); //输出分行标签 
fr.skip(1); //略过一个字节 
c = fr.read(); //读取一个字节 


fr.close(); 
%> 
还可以用读取行的方式进行对文件的读取
readLine()方法:
<% 
BufferedReader br = new  BufferedReader(fr); 
String brl = BufferedRead.readLine(); 
while(brl!=null) 

out.println(brl+"<br>"); 
brl = BufferedRead.readLine(); 

brl.close(); 
fr.close(); 
%> 

5.写入文件
write()方法:
<%@ page import="java.io.*" %> 
<% 
String path = request.getRealPath("/file/");  
FileWriter fw = new FileWriter(path + "File.txt");  
fw.write("hello!"); 
fw.write("祝大家学习jsp愉快!"); 
fw.write("希望本文能给大家对’jsp文件操作的理解’有所帮助!"); 
fw.close();  
%> 
<a href="http://localhost:8080/k/file/File.txt">查看文件</a> 
这时你只要点击"查看文件"的连接就能看到刚刚写入的字符串了!
---------------------------------------------------------------




分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics