• 学习面试题Day06


    1、字节流的处理方式
    字节流处理的是计算机最基本的单位byte,它可以处理任何数据格式的数据。主要的操作对象就是byte数组,通过read()和write()方法把byte数组中的数据写入或读出。
    2、字符流的处理方式
    字符流是由字节流包装而来,它的输入和输出流类型包括StringReader和StringWriter、BufferedReader和BufferedWriter。字符流API的基本使用思路有以下步骤:
    (1)获取输入或输出流对象。可以从File得到,也可以从网络或其他地方得到。
    (2)根据特定的字符格式创建InputStreanReader或InputStreamWriter对象。
    (3)使用read()或readLine()方法,得到数据。或使用write()或print()方法进行字符输出。
    (4)最后关闭reader或writer。
    3、什么是序列化?
    序列化本质上就是把对象内存中的数据按照一定的规则,变成一系列的字节数据,然后再把这些字节数据写入到流中。而反序列化的过程相反,限度去字节数据,然后再重新组装成Java对象。
    所有需要进行序列化的类,都必须实现Serializeable接口,必要时还需要提供静态的常量serialVersionUID。
    4、如何序列化和反序列化一个Java对象?
    对于对象的输出和输入,Java的I/O体系中主要提供了ObjectOutputStream和ObjectInputStream两个类以供开发者使用,它们的基本使用思路有以下步骤。
    (1)让需要序列化的类实现java.io.Serializable接口;
    (2)提供静态的long型的常量serialVersionUID;
    (3)如果是序列化对象,则用一个输出流创建一个ObjectOutputStream对象,然后调用writeObject()方法;
    (4)如果是反序列化,首先使用一个输入流创建一个ObjectInputStream对象。然后调用readObject(0方法,得到Object类型的对象。最后再做类型的强制转换;
    (5)最后关闭流。
    5、什么是多线程?
    线程是进程中的一个执行单元,又称为轻量级进程,它和进程一样拥有独立的执行控制,而操作系统负责调度;
    而多线程是这样一种机制:它允许在程序中并发执行多个指令流,每个指令流都称为一个线程。多线程机制下的线程彼此间互相独立,比较容易共享数据,通过并发执行的方式来提高程序的效率和性能。
    6、解释进程和线程的区别
    进程和线程的区别主要包括:
    (1)线程的划分尺度小于进程,线程隶属于某个进程;
    (2)进程是程序的一种动态形式,是CPU、内存等资源占用的基本单位,而线程是不能独立的占有这些资源的;
    (3)进程之间相互独立,通信比较困难,而线程之间共享一块内存区域,通信比较方便;
    (4)进程在执行过程中,包含比较固定的入口、执行顺序和出口,而线程的这些过程会被应用程序所控制。
    7、如何让一个类成为线程类?
    让一个类成为线程类的方式有两种,一个是实现了java.lang.Runnable接口,另一个是继承自java.lang.Thread类。
    8、解释Runnable接口与Thread类的区别
    Runnable接口与Thread类的区别主要包括一下几个方面:
    (1)线程类继承自Thread则不能继承自其它类,而Runnable接口可以;
    (2)线程类继承自Thread相对于Runnable来说,使用线程的方法更方便一些;
    (3)实现Runnable接口的线程类的多个线程,可以更方便的访问同意变量,而Thread类则需要内部类来进行替代。
    9、如何启动一个线程?
    继承自Thread类的线程类,可以通过new关键字创建一个线程对象以后,执行start()方法开始一个线程。而实现了Runnable接口的线程类,需要用它的对象实例,作为Thread类构造方法的参数,创建一个Thread对象,然后调用start()方法开始一个线程。
    10、如何用synchronized来让线程同步?
    sychronized关键字代表要为某一段代码加上一个同步锁,这样的锁是绑定在某一个对象上边的。如果是同步代码块,需要为该synchronized关键字提供一个对象的引用;如果是同步方法,只需要加一个sychronized关键字修饰。
    sychronized为某段代码加上锁以后,某个线程进入该段代码之前,首先需要检查该锁是否被占用,如果没有被占用则继续执行;如果已经被占用,则需要等到该锁被释放以后才能继续执行。其中,线程执行完该段代码就是释放锁的标志。
    11、如何使用java的线程池?
    java提供了java.util.concurrent.ThreadPoolExecutor类来使用线程池,通过它构造的对象,可以很容易地管理线程,并把线程代码与业务代码进行分离。
  • 相关阅读:
    CentOS7.6配置ip
    查看当前用户下没有主键也没有唯一性索引的表
    C++ 开机自动启动
    C++ 判断是文件还是文件夹
    Duilib热键
    c++将字符转换成字符串
    duilib中各控件响应的消息类型
    Duilib程序添加托盘图标显示
    C++打开文件夹
    C++获取驱动盘句柄
  • 原文地址:https://www.cnblogs.com/android-blogs/p/5622294.html
Copyright © 2020-2023  润新知