java高级部分[面试题]

上一篇文章[数据库部分(面试题)]

文章目录

    • 1.什么是java序列,如何实现java序列化
    • 2.java中有几种类型的流
    • 3.字节流和字符流的区别
    • 4.怎么判断指定路径是否为目录
    • 5.怎么获取指定路径下的全部文件
    • 6.Java怎么读取文件和写入文件
    • 7.java怎么复制文件
    • 8.JDBC连接实例
    • 9.JDBC中PreparedStatement相比Statement的好处
    • 10.Java中有多少种数据结构,分别是什么
    • 11.获取Class的实例有几种方式
    • 12.怎么获取类中所有的方法,所有属性
    • 13.JDBC常用接口有哪些
    • 14.什么是json
    • 15.什么是java反射机制


1.什么是java序列,如何实现java序列化

通俗的说,就是可以将内存中java对象可以写在硬盘上(序列化到硬盘上),反序列化就是讲硬盘的内容读取到内存中去;java是通过实现Serializeble接口,实现的序列化,Serializeble接口里面没有任何方法,只是标示接口

2.java中有几种类型的流

字节流,字符流

  • 字节流继承于InputStream outputStream
  • 字符流继承于InputStreamReader OutputStreamWriter
  • 在java.io包中还有许多其他的流,主要是为了提高性能和使用方便

3.字节流和字符流的区别

  • 把一片二进制数据数据逐一输出到某个设备中,或者从某个设备中逐一读取一片二进制数据,不管输入输出设备是什么,我们要用统一的方式来完成这些操作,用一种抽象的方式进行描述,这个抽象的描述方式起名为Io流,对应得抽象类为OutputStream和InputStream,不同的实现类就代表不同的输入和输出设备,他们都是针对字节进行操作的
  • 在应用中,经常要完全是字符的一段文本输出去或读进来,用字节流可以吗?计算机中一切最终都是二进制的字节流式存在.对于"中国"这些字符,首先要得到其对应的字节,然后将字节写入到输出流.读取时,首先读到的是字节,可是我们要把它显示为字符,我们需要将字节转换成字符.由于这样的需求很广泛,专门提供了字符流的包装类
  • 底层设备永远只接受字节数据,有时候要写字符串到底层设备,需要将字符串转成字节再进行写入,字符流是字节流的包装,字符流则是直接接受字符串,它内部将字符串转成字节,再写入底层设备,这为我们向Io设别写入或读取字符串提供了一点点方便
  • 字符向字节转换时,要注意编码的问题,因为字符串转成字节数组,其实是转成该字符的某种编码的字节形式,读取也是反之的道理

讲解字节流与字符流关系的代码案列:

package com.company;
import javax.annotation.processing.Filer;
import java.io.*;
public class IOTest {
  public static void main(String[] args) throws Exception {
       String str="我和我的祖国";
      /*FileOutputStream fos=new FileOutputStream("1.txt");
       fos.write(str.getBytes("utf-8"));
       fos.close();*/

      /*FileWriter fw=new FileWriter("1.txt");
      fw.write(str);
       fw.close();*/
       PrintWriter pw=new PrintWriter("1.txt","utf-8");
       pw.write(str);
       pw.close();

       /*FileReader fr=new FileReader("1.txt");
       char[] buf=new char[1024];
       int len=fr.read(buf);
       String myStr=new String(buf,0,len);
       System.out.println(myStr);*/

      /*FileInputStream frs=new FileInputStream("1.txt");
       byte[] bufs=new byte[1024];
       int lens=frs.read(bufs);
       String mystr=new String(bufs,0,len,"utf-8");
       System.out.println(mystr);*/

      BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream("1.txt"),"utf-8"));
       String Mystrs=br.readLine();
       br.close();
      System.out.println(Mystrs);
      }
    }

总结:很简单,字符流的底层就是字节流,而字符流主要是读取文本文件内容的,可以一个字符一个字符的读取,也可以一行一行的读取文本文件内容,而字节流读取单位为byte.byte作为计算机存储最基本的单位,可以用字节流来读取很多其他格式的文件,比如图片视频等等,基于B/S和C/S的文件传输都可以采用字节流的形式

4.怎么判断指定路径是否为目录

File f=new FIle(fileName);//构造文件File类
f.isDirectory();//判断是否为目录

5.怎么获取指定路径下的全部文件

File f=new File(filepath);//构造文件File类
String[] fileName=f.list();//获取目录的文件名
File[] files=f.listFiles();//获取目录下的文件

6.Java怎么读取文件和写入文件

读取文件:

package com.company;
import java.io.*;
public class FileRead {
   /**
    * 1.找到指定的文件
    * 2.根据文件创建文件的输入流
    * 3.创建字节数组
    * 4.读取内容,放到字节数组里面
    * 5.关闭输入流
    * @param args
    */
   public static void main(String[] args) {
       File file=new File("2.txt");//构建指定文件

       InputStream in=null;
       try {
           in=new FileInputStream(file);//根据文件创建文件的输入流
           byte[] bytes=new byte[1024];//创建字节数组
           in.read(bytes);//读取内容,放到字节数组里面
           System.out.println(new String(bytes));
        } catch (Exception e) {
           e.printStackTrace();
       }finally {
           try {
               in.close();
           } catch (IOException e) {
               e.printStackTrace();
           }
       }
   }
}

写入文件:

package com.company;
import java.io.*;
public class FileWriter {
   /**
    * 文件的输出流,用来写入文件内容
    * 1.找到指定的文件
    * 2.根据文件创建文件的输出流
    * 3.把内容转换成字节数组
    * 4.向文件写入内容
    * 5.关闭输出流
    * @param args
    */
   public static void main(String[] args) {
       File file=new File("2.txt");//构建指定文件
       OutputStream out =null;
       try {
           out=new FileOutputStream(file);//根据文件创建文件的输出流
           String message="我和我的祖国!";
           byte[] mesbyte=message.getBytes();//把内容转换成字节数组
           out.write(mesbyte);
       } catch (Exception e) {
           e.printStackTrace();
       }finally {
          try {
               out.close();
           } catch (IOException e) {
               e.printStackTrace();
           }
       }
   }
}

7.java怎么复制文件

package com.company;
import java.io.*;
public class FileCopy {
   /**
    * 实现思路
    * 1.构建源文件与目标文件
    * 2.源文件创建输入流,目标文件创建输出流
    * 3.创建字节数组
    * 4.使用循环,源文件读取一部分内容,目标文件写入一部分内容,直到写完所有内容
    * 5.关闭源文件输入流,目标文件输出流
    * @param args
    */
   public static void main(String[] args) {
       //构建源文件
       File file=new File("2.txt");
       //构建目标文件
       File fileCopy=new File("3.txt");
       InputStream in=null;
       OutputStream out=null;
       try {
           if(!fileCopy.exists()){
               fileCopy.createNewFile();
           }
           //源文件创建输入流
           in=new FileInputStream(file);
           //目标文件创建输出流
           out=new FileOutputStream(fileCopy,true);
           //创建字节数组
           byte[] bytes=new byte[1024];
           int len=0;
           while ((len=in.read(bytes))!=-1){
               //目标文件写入一部分内容
               out.write(bytes,0,len);
           }
       } catch (Exception e) {
           e.printStackTrace();
       }finally {
           try {
               in.close();
               out.close();
           } catch (IOException e) {
               e.printStackTrace();
           }
       }
   }
}

8.JDBC连接实例

package com.company;

import java.sql.*;

public class DBUtil {
    private static final String USERNAME = "*";
    private static final String PASSWORD = "*";
    private static final String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
    private static final String URL = "jdbc:sqlserver://*****:1433;database=**";
    /**
     *
     * @return
     */
    public static Connection getConnection(){
        Connection con=null;
        try {
            Class.forName(DRIVER);
            con = DriverManager.getConnection(URL, USERNAME, PASSWORD);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return con;
    }
    public static  void close(Connection con, PreparedStatement ps, ResultSet rs){
        try {
            if(rs!=null){
                rs.close();
                rs=null;
            }
            if(ps!=null){
                ps.close();
                ps=null;
            }
            if(con!=null){
                con.close();
                con=null;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

9.JDBC中PreparedStatement相比Statement的好处

提高性能:

  • 在使用PreparedStatement对象执行的SQL时候,命令被数据库编译和解析,然后被放到命令缓冲区,然后每当执行同一个PreparedStatement时候,他就被在解析一次,如果你写Insert update delete 最好使用PreparedStatement,并且可以重新使用

安全性:

  • PreparedStatement可以防止SQL注入

10.Java中有多少种数据结构,分别是什么

  • List:是列表,有下标值,存储元素可以重复,遍历元素是有序的
  • Set:是散列表,无下标值,存储元素不可重复,遍历元素时无序的
  • Map:是以键值对存储,一个key一个value,key不可以重复,value可以重复
  • 数组:指定类型,固定长度,元素存储地址是连续的
  • 数:元素以树形结构存储,只有一个根节点
  • 栈:元素是先进后出,后进先出
  • 向量:动态数组,可以存储任何类型元素,动态长度,元素存储地址是连续的
  • 队列:元素存储是排列有序的,一定保证先进的先出,后进的后出

11.获取Class的实例有几种方式

Class<?> demo1=Class.forName("Reflect.Dmeo");//使用class类
Class<?> demo2=new Demo().getClass();//通过对象
Class<?> demo3 =Demo.class;//通过类

12.怎么获取类中所有的方法,所有属性

获取所有方法:

Class<?> demo=Class.forName("Reflect.Demo");
Method[] methods=Demo.getDeclaredMethods();

获取所有属性:

Class<?> demo =Class.forName("Reflect.Demo");
Field[] fields=demo.getDeclaredFiekds();

13.JDBC常用接口有哪些

1.Connection  用来与数据库建立连接
2.Statement  用来执行SQL语句
3.ResultSet  用来接收结果集
4.PreParedStatement 是Statement子接口,执行SQL语句,预编译,防止SQL注入,安全性高

14.什么是json

Json是一种字符串数据格式,一般用于数据传输格式
Json字符串中[]对应JSONArray,{}对应JSONObject

15.什么是java反射机制

JAVA反射机制是在运行状态中,对于任意一个类都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制
[扩展学习]

[简言]
全网呼叫,四川8633,收到请回答!

你可能感兴趣的:(Java)