面试题-Java基础篇(11)

1.对 Map 的用法,正确的有:

A.new java.util.Map().put(“key” , “value”) ;

B.new java.util.SortedMap().put(“key” , “value”) ;

C.new java.util.HashMap().put( null , null ) ;

D.new java.util.TreeMap().put( 0 , null ) ;

答: C D

2.设 int a,b,c; 执行表达式 a=b=1 , a++ , b+1 , c=a+b-- 后, a,b 和 c 的值分别是

A.2,1,2 B.2,0,3 C.2,2,3 D.2,1,3

答: B

3.任意2n个整数,从其中选出n个整数,使得选出的n个整数和同剩下的n个整数之和的差最小

面试题-Java基础篇(11)_第1张图片

4.检查程序,是否存在问题,如果存在指出问题所在,如果不存在,说明输出结果。

面试题-Java基础篇(11)_第2张图片

答: 输出结果:goodandgbc

5.编写函数扫描制定目录(包含各级目录)下所有文本文件( *.txt ),将扫描到的文件全路径以及文件大小记录到指定的文件中,返回扫描到的文件总数。

:	先上个单线程,留待改进。
/**
    * 总入口
    * @param path
    * @param list_filo
    */
   static void intScanTextFiles(String path,String list_filo){
      
       StringBuffer result = new StringBuffer();
       int count = scanFiles(path, list_filo,result);
       writeResult(result, list_filo,count);
   }
   static int scanFiles(String path,String list_filo,StringBuffer result){
      
       File file = new File(path);
       File[] list = file.listFiles();
       int count = 0;
       for (File file2 : list) {
      
           if(file2.isDirectory()){
      
               count += scanFiles(file2.getAbsolutePath(), list_filo,result);
           }
           if(file2.isFile()&&isTxt(file2.getName())){
      
               result.append(file2.getAbsolutePath()).append("   字节数:");
               result.append(file2.length()).append("\n");
               count ++;
           }
       }
       return count;
   }
   /**
    * 写入结果
    * @param result)
    * @param list_filo
    */
   static void writeResult(StringBuffer result,String list_filo,int count){
      
       File file = new File(list_filo);
       File folder = file.getParentFile();
       if (!folder.exists()) {
      // 判断文件夹是否存在,不存在就建立个目录
           folder.mkdirs();
       }
       try {
      
           if (!file.exists()) {
      
               file.createNewFile();
           }
           PrintStream ps = new PrintStream(new FileOutputStream(file));
           ps.println(result.toString());// 往文件里写入字符串
           ps.print("扫描总数: "+count);
           ps.close();
       } catch (FileNotFoundException e1) {
      
           // TODO Auto-generated catch block
       } catch (IOException e) {
      
           // TODO Auto-generated catch block
       }
   }
   /**
    * 判断是否为txt文件
    * @param fileName
    * @return
    */
   static boolean isTxt(String fileName){
      
       //扩展名格式: 
       if (fileName.lastIndexOf(".") >= 0) {
      
           String extName = fileName.substring(fileName.lastIndexOf("."));
           if(".TXT".equals(extName)||".txt".equals(extName)){
      
               return true;
           }
       }
       return false;
   }
   public static void main(String[] args) {
      
       String path = "C:\\Users\\chen\\Desktop\\面试题";
       String result = "C:\\Users\\chen\\Desktop\\result.txt";
       ScanFile.intScanTextFiles(path, result);
   }

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

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

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

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

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

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

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

Servlet生命周期分为三个阶段:
  (1),初始化阶段 :调用init()方法
  (2),响应客户请求阶段:调用service()方法
  (3),终止阶段:调用destroy()方法

生命周期:Servlet是一种可以在Servlet容器中运行的组件,那么理所当然就应该有一个从创建到销毁的过程,这个过程我们可以称之为Servlet生命周期。Servlet的生命周期可以分为加载、实例化、初始化、处理客户请求和卸载五个阶段,体现在方法上主要是init()、service()和destroy()三个方法。生命周期的具体说明如下:

Servlet容器完成加载Servlet类和实例化一个Servlet对象;

init()方法完成初始化工作,该方法由Servlet容器调用完成;

service()方法处理客户端请求,并返回响应结果;

destroy()方法在Servlet容器卸载Servlet之前被调用,释放一些资源

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

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

9.1.简述forward和redirect的区别。

(1).从地址栏显示来说
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.
(2).从数据共享来说
forward:转发页面和转发到的页面可以共享request里面的数据.
redirect:不能共享数据.
(3).从运用地方来说
forward:一般用于用户登陆的时候,根据角色转发到相应的模块.
redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.
(4).从效率来说
forward:高.
redirect:低.

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

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

你可能感兴趣的:(Java面试题-基础篇)