每日五题-Java面试题220812


1、线程的基本状态以及状态之间的关系?

说明:其中 Running 表示运行状态,Runnable 表示就绪状态(万事俱备,只欠CPU),Blocked 表示阻塞状态,阻塞状态又有多种情况,可能是调用wait() 方法进入等待池,也可能是执行同步方法或者同步代码块进入等锁池(lock pool),或者是调用了sleep() 方法或 join() 方法等待休眠或其他线程结束,或是因为发生了I/O中断。

在这里插入图片描述


2、简述 synchronized 和 java.util.concurrent.locks.Lock 的异同?

Lock 是 java5 以后引入的新的API 和关键字

synchronized 相比主要相同点:Lock 能完成synchronized所实现的所有功能;

主要不同点:

Lock 有比 synchronized 更精确的线程语义和更好的性能,而且不强制性的要求一定要获得锁。synchronized 会自动释放锁,而 Lock 一定要求程序员手工释放,并且最好在 finally 块中释放(这是释放外部资源的最好的地方)。


3、Java 中如何实现序列化,有什么意义?

[序列化]([Java序列化与反序列化 - niceyoo - 博客园 (cnblogs.com)](https://www.cnblogs.com/niceyoo/p/10596657.html#:~:text=Java,中对象的序列化就是将对象转换成二进制序列,反序列化则是将二进制序列转换成对象。 二是可以对象数据的远程通信。))就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可以将流化后的对象传输于网络之间。序列化是为了解决对象流读写操作时可能引发的问题(如果不进行序列化可能会存在数据乱序的问题)。要实现序列化,需要让一个类实现Serializable接口,该接口是一个标识性接口,标注该类对象是可别序列化的,然后使用一个输出流来构造一个对象输出流并通过 writeObject(Object)方法就可以将实现对象写出(即保存其状态);如果需要反序列化则可以用一个输入流建立对象输入流,然后通过readObject 方法从流中读取对象。序列化除了能够实现对象的持久化之外,还能够用于对象的深度克隆。


4、 java中有几种类型的流?

字节流和字符流。字节流继承于 InputStream、OutputStream,字符流继承于Reader、Writer。在java.io 包中还有许多其他的流,主要是为了提高性能和使用方便。关于 java 的 I/O 需要注意的有两点:一是两种对象性(输入和输出的对称性,字节和字符的对称性);二是两种设计模式([适配器模式]((2条消息) Java适配器模式_YuenBin128的博客-CSDN博客_java适配器模式)和装潢模式)。另外 Java 中的流不同于C# 的是它只有一个维度和一个方向。


5、写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数。

package day220812;

import java.io.BufferedReader;
import java.io.FileReader;

public final class MyUtil {
//    工具类中的 方法都是静态方式访问的因此将构造器私有不允许创建对象(绝对好习惯)
    private MyUtil(){
        throw  new AssertionError();
    }

    /**
     *  统计给定文件中给定字符串的出现次数
     * @param filename 文件名
     * @param word  字符串
     * @return 字符串在文件中出现的次数
     */
    public static int countWordInFile(String filename, String word){
        // 计数器
        int counter = 0;

        try (FileReader fr = new FileReader(filename)) {
            try (BufferedReader br = new BufferedReader(fr)){
                String line = null;
                while ((line = br.readLine())!=null){
                    int index = -1;
                    while (line.length() >= word.length() && (index =line.indexOf(word))>=0){
                        counter ++;
                        line = line.substring(index + word.length());
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return counter;
    }
}

源链接-掘金

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值