当前位置: 首页 > news >正文

互联网Java工程师面试题·Java 总结篇·第七弹

目录

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

69、Java 中有几种类型的流?

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

71、如何用 Java 代码列出一个目录下所有的文件?


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

        序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决对象流读写操作时可能引发的问题(如果不进行序列化可能会存在数据乱序的问题)。

        要实现序列化,需要让一个类实现 Serializable 接口,该接口是一个标识性接口,标注该类对象是可被序列化的,然后使用一个输出流来构造一个对象输出流并通过 writeObject(Object)方法就可以将实现对象写出(即保存其状态);如果需要反序列化则可以用一个输入流建立对象输入流,然后通过 readObject 方法从流中读取对象。序列化除了能够实现对象的持久化之外,还能够用于对象的深度克隆(可以参考第 29 题)。

互联网Java工程师面试题·Java 总结篇·第三弹-CSDN博客


69、Java 中有几种类型的流?

        字节流和字符流。字节流继承于 InputStream、OutputStream,字符流继承于Reader、Writer。在 java.io 包中还有许多其他的流,主要是为了提高性能和使用方便。关于 Java 的 I/O 需要注意的有两点:

一是两种对称性(输入和输出的对称性,字节和字符的对称性);

二是两种设计模式(适配器模式和装潢模式)。

另外 Java 中的流不同于 C#的是它只有一个维度一个方向。

面试题 - 编程实现文件拷贝。(这个题目在笔试的时候经常出现,下面的代码给出了两种实现方案)

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;public final class MyUtil {private MyUtil() {throw new AssertionError();}public static void fileCopy(String source, String target) throws
IOException {try (InputStream in = new FileInputStream(source)) {try (OutputStream out = new FileOutputStream(target)) {byte[] buffer = new byte[4096];int bytesToRead;while((bytesToRead = in.read(buffer)) != -1) {out.write(buffer, 0, bytesToRead);}}}
}public static void fileCopyNIO(String source, String target) throws
IOException {try (FileInputStream in = new FileInputStream(source)) {try (FileOutputStream out = new FileOutputStream(target)) {FileChannel inChannel = in.getChannel();FileChannel outChannel = out.getChannel();ByteBuffer buffer = ByteBuffer.allocate(4096);while(inChannel.read(buffer) != -1) {buffer.flip();outChannel.write(buffer);buffer.clear();}}}}
}

注意:上面用到 Java 7 的 TWR,使用 TWR 后可以不用在 finally 中释放外部资源 ,从而让代码更加优雅。


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

代码如下:

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 ex) {ex.printStackTrace();}return counter;
}
}

71、如何用 Java 代码列出一个目录下所有的文件?

如果只要求列出当前文件夹下的文件,代码如下所示:

import java.io.File;class Test12 {public static void main(String[] args) {File f = new File("/Users/Hao/Downloads");for(File temp : f.listFiles()) {if(temp.isFile()) {System.out.println(temp.getName());}}}
}

如果需要对文件夹继续展开,代码如下所示:

import java.io.File;class Test12 {public static void main(String[] args) {showDirectory(new File("/Users/Hao/Downloads"));}public static void showDirectory(File f) {_walkDirectory(f, 0);}private static void _walkDirectory(File f, int level) {if(f.isDirectory()) {for(File temp : f.listFiles()) {_walkDirectory(temp, level + 1);}}else {for(int i = 0; i < level - 1; i++) {System.out.print("\t");}System.out.println(f.getName());}}
}

在 Java 7 中可以使用 NIO.2 的 API 来做同样的事情,代码如下所示:

class ShowFileTest {public static void main(String[] args) throws IOException {Path initPath = Paths.get("/Users/Hao/Downloads");Files.walkFileTree(initPath, new SimpleFileVisitor<Path>() {@Overridepublic FileVisitResult visitFile(Path file, BasicFileAttributesattrs)throws IOException {System.out.println(file.getFileName().toString());return FileVisitResult.CONTINUE;}});}
}

要想了解更多:

千题千解·Java面试宝典_时光の尘的博客-CSD

相关文章:

互联网Java工程师面试题·Java 总结篇·第七弹

目录 68、Java 中如何实现序列化&#xff0c;有什么意义&#xff1f; 69、Java 中有几种类型的流&#xff1f; 70、写一个方法&#xff0c;输入一个文件名和一个字符串&#xff0c;统计这个字符串在这个文件中出现的次数。 71、如何用 Java 代码列出一个目录下所有的文件&a…...

UVa658 It’s not a Bug, it’s a Feature!(Dijkstra)

题意 给出一个包含n个bug的应用程序&#xff0c;以及m个补丁&#xff0c;每个补丁使用两个字符串表示&#xff0c;第一个串表示补丁针对bug的情况&#xff0c;即哪些bug存在&#xff0c;以及哪些bug不存在&#xff0c;第二个串表示补丁对bug的修复情况&#xff0c;即修复了哪些…...

Object 类常用方法

在Java中&#xff0c;java.lang.Object类是所有类的根类&#xff0c;因此所有对象都继承了Object类的方法。以下是Object类中一些常用的方法&#xff1a; equals(Object obj)&#xff1a; 用于比较两个对象是否相等。默认实现是比较对象的引用是否相同&#xff0c;但通常需要…...

chromium 52 chrome 各个版本发布功能列表(58-84)

chromium Features 58-84 From https://chromestatus.com/features chromium58 Features:41 ‘allow-top-navigation-by-user-activation’ <iframe sandbox> keyword Adds a new keyword named “allow-top-navigation-by-user-activation” for iframe sandbox, wh…...

python web开发(四): Bootstrap

1.初步了解 别人已经写好的CSS样式&#xff0c;我们可以直接引用 下载 Link-BootStrap 解压&#xff0c;并放入到当前项目中 引用 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</tit…...

【EI会议征稿】2024年遥感技术与测量测绘国际学术会议(RSTSM 2024)

2024年遥感技术与测量测绘国际学术会议&#xff08;RSTSM 2024&#xff09; 2024 International Conference on Remote Sensing Technology and Survey Mapping 2024年遥感技术与测量测绘国际学术会议&#xff08;RSTSM 2024&#xff09;将在2024年1月12-14日于吉林长春召开。…...

灵感:VUE2实现权限按钮控制

运用场景&#xff1b; 根据权限码&#xff0c;实现判断当前用户是否能控制权限按钮 一、在main.JS 里面写入全局指令《自定义权限按钮》 // S 自定义按钮权限 Vue.directive(has, {inserted: function(el, binding) {const buttonList JSON.parse(localStorage.getItem(butt…...

【2023最新版】Python全栈知识点总结

python全栈知识点总结 全栈即指的是全栈工程师&#xff0c;指掌握多种技能&#xff0c;并能利用多种技能独立完成产品的人。就是与这项技能有关的都会&#xff0c;都能够独立的完成。 全栈只是个概念&#xff0c;也分很多种类。真正的全栈工程师涵盖了web开发、DBA 、爬虫 、…...

推荐系统离线评估方法和评估指标,以及在推荐服务器内部实现A/B测试和解决A/B测试资源紧张的方法。还介绍了如何在TensorFlow中进行模型离线评估实践。

文章目录 &#x1f31f; 离线评估&#xff1a;常用的推荐系统离线评估方法有哪些&#xff1f;&#x1f34a; 1. RMSE/MSE&#x1f34a; 2. MAE&#x1f34a; 3. Precision/Recall/F1-score&#x1f34a; 4. Coverage&#x1f34a; 5. Personalization&#x1f34a; 6. AUC &…...

day1:Node.js 简介

day1:Node.js 简介 文章目录 day1:Node.js 简介Node.js 是什么?Node.js 的历史和发展 ?Node.js 的主要用途和优势 ?Node.js 是什么? 简单的说 Node.js 就是运行在服务端的 JavaScript。 Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台。 Node.js 是一个事…...

ESP RainMaker 客户案例 #1|Halonix

Halonix 是印度规模增长最快的电器公司之一&#xff0c;专注于照明、风扇等电器产品&#xff0c;正在进军健康和安全领域&#xff0c;现已推出紫外线消毒器和安全摄像头。Halonix 致力于创新&#xff0c;不断采用新兴前沿技术实现产品迭代&#xff0c;并通过加强设备间的互联互…...

【Linux】adduser命令使用

我们经常在linux系统中创建用户。有时候用的是 useradd 有时候用的是 adduser &#xff0c;好混乱啊到底用哪个啊。今天咱们一起来学习一下。 adduser与useradd的区别 useradd 命令是内置的 Linux 命令&#xff0c;在任何 Linux 系统中都可用。然而&#xff0c;使用这种低级…...

中文连续视觉语音识别挑战赛

视觉语音识别&#xff0c;也称唇语识别&#xff0c;是一项通过口唇动作来推断发音内容的技术。该技术在公共安全、助老助残、视频验真等领域具有重要应用。当前&#xff0c;唇语识别的研究方兴未艾&#xff0c;虽然在独立词、短语等识别上取得了长足进展&#xff0c;但在大词表…...

(ubuntu) 安装JDK

文章目录 前言参看java版本的命令&#xff1a;安装jdk命令安装jps关闭防火墙&#xff1a;查看端口占用&#xff1a;&#xff08;坑&#xff09;ubuntu上Mysql默认标明 区分大小写 前言 提示&#xff1a;常以为人是一个容器&#xff0c;盛着快乐&#xff0c;盛着悲哀。但是人不…...

工程管理系统源码之全面+高效的工程项目管理软件

高效的工程项目管理软件不仅能够提高效率还应可以帮你节省成本提升利润 在工程行业中&#xff0c;管理不畅以及不良的项目执行&#xff0c;往往会导致项目延期、成本上升、回款拖后&#xff0c;最终导致项目整体盈利下降。企企管理云业财一体化的项目管理系统&#xff0c;确保…...

网络安全常见问题隐患及其应对措施

随着数字化时代的到来&#xff0c;网络安全已经成为组织和个人面临的严重挑战之一。网络攻击日益普及&#xff0c;黑客和不法分子不断寻找机会侵入系统、窃取敏感信息、破坏服务和网络基础设施。在这种情况下&#xff0c;了解网络安全的常见问题隐患以及如何应对它们至关重要。…...

《机器学习分类器 二》——朴素的贝叶斯算法,项目实践,算法实践。

1,朴素贝叶斯算法的介绍 1. 朴素贝叶斯算法定义 朴素贝叶斯算法是基于概率统计的分类方法。它的核心思想是利用贝叶斯定理来估计在给定特征的条件下某个类别的概率&#xff0c;然后选择具有最高概率的类别作为预测结果。在分类问题中&#xff0c;我们通常有一个数据集&#x…...

亚马逊英国站手机/笔记本电脑电池和充电器的合规标准是什么?

手机/笔记本电脑电池和充电器 亚马逊网站上销售的所有手机/笔记本电脑电池和充电器替换件均须符合指定的认证标准。请注意&#xff0c;如果不符合这些标准&#xff0c;亚马逊可能会撤销您的销售权限。要在亚马逊商城销售这些商品&#xff0c;您必须先将以下信息提交至 eu-elec…...

亚马逊云科技顾凡解读云计算助力初创快速抢滩生成式AI新风口

麦肯锡发布的《生成式人工智能的经济潜力》报告指出&#xff0c;“生成式AI可以被用到16个业务部门的63个场景&#xff0c;解决具体的业务挑战&#xff0c;为企业带来2.6到4.4万亿美元的价值。” 在亚马逊云科技大中华区战略业务发展部总经理顾凡看来&#xff0c;未来每一个To …...

Unity之ShaderGraph如何实现积雪效果

前言 我们在一些特殊场景&#xff0c;比如冰雪天&#xff0c;经常会对周围物体添加一些积雪效果&#xff0c;如果我们直接把积雪做到模型上&#xff0c;就无法更加灵活的表现其他天气的环境了&#xff0c;比如春夏秋冬切换。所以一般这种需求我们都是使用Shader来表现。 入下图…...

JASP统计分析软件:开源数据分析的技术实践指南

JASP统计分析软件&#xff1a;开源数据分析的技术实践指南 【免费下载链接】jasp-desktop JASP aims to be a complete statistical package for both Bayesian and Frequentist statistical methods, that is easy to use and familiar to users of SPSS 项目地址: https://…...

面试官:什么是最左前缀匹配?为什么要遵守?(修订版)

在线 Java 面试刷题&#xff08;持续更新&#xff09;&#xff1a;https://www.quanxiaoha.com/java-interview面试考察点原理理解&#xff1a;面试官不仅仅想知道你会背 "最左前缀原则"&#xff0c;更想考察你是否理解联合索引的 B 树存储结构&#xff0c;能否从数据…...

PCL2社区版:打造个性化Minecraft启动器的终极指南

PCL2社区版&#xff1a;打造个性化Minecraft启动器的终极指南 【免费下载链接】PCL-CE PCL2 社区版&#xff0c;可体验上游暂未合并的功能 项目地址: https://gitcode.com/gh_mirrors/pc/PCL-CE 想要完全掌控你的Minecraft游戏体验吗&#xff1f;PCL2社区版&#xff08;…...

晶体塑性有限元显式代码VUMAT(同时也包含umat子程序),基于黄永刚umat的vumat子...

晶体塑性有限元显式代码VUMAT&#xff08;同时也包含umat子程序&#xff09;&#xff0c;基于黄永刚umat的vumat子送学习资料。黄永刚huang.for晶体塑性子程序具有良好的收敛性&#xff0c;以及较高的计算效率&#xff0c;在一般变形下可直接使用。 然而在一些特殊的工况下&…...

平面六杆机构的运动仿真(毕业论文+CAD图纸+开题报告+外文翻译)

平面六杆机构作为机械传动领域的重要构件&#xff0c;其运动特性直接影响机械系统的整体性能。该机构由六个刚性杆件通过转动副或移动副连接形成闭合环路&#xff0c;通过调整杆长比例与铰链位置&#xff0c;可实现复杂轨迹输出与多自由度运动控制。相较于四杆机构&#xff0c;…...

别再只调包了!深入对比VGG16、ResNet等9大模型在农业病害识别上的实战表现(附数据集)

深度视觉模型在农业病害识别中的实战评测&#xff1a;从特征提取到部署优化的全流程解析 当一片叶子出现褐色斑点时&#xff0c;农民往往需要等待数天才能获得实验室检测结果——这种传统诊断方式的滞后性&#xff0c;每年造成全球约20-40%的农作物损失。计算机视觉技术的突破正…...

EVA-01开发者案例:Qwen2.5-VL-7B集成至MAGI类AI平台实现多源视觉融合

EVA-01开发者案例&#xff1a;Qwen2.5-VL-7B集成至MAGI类AI平台实现多源视觉融合 1. 引言&#xff1a;当视觉AI遇见机甲美学 想象一下&#xff0c;你正在处理一份复杂的市场分析报告&#xff0c;里面混杂着数据图表、产品照片和手写笔记。传统的AI工具要么只能看文字&#xf…...

5分钟搞定专业级黑苹果配置:OpCore Simplify智能工具让复杂EFI构建化繁为简

5分钟搞定专业级黑苹果配置&#xff1a;OpCore Simplify智能工具让复杂EFI构建化繁为简 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 开篇痛点直击&…...

Rufus高效使用实战指南:精通ext2/ext3/ext4文件系统格式化

Rufus高效使用实战指南&#xff1a;精通ext2/ext3/ext4文件系统格式化 【免费下载链接】rufus The Reliable USB Formatting Utility 项目地址: https://gitcode.com/GitHub_Trending/ru/rufus 在Linux系统管理和开发工作中&#xff0c;USB设备的格式化与启动盘制作是一…...

小白挖漏洞必备的两个平台!有技术就能挖,没有上限,光靠挖洞月入1w+的都大有人在!_漏洞挖掘提交网站。

今天给大家推荐两个新手挖漏洞最合适的两个平台&#xff0c;有技术就能上&#xff0c;没有啥门槛&#xff0c;挖多赚多&#xff0c;练技术的同时把钱给赚了。 01补天 https://hack.zkaq.cn/ 这个平台应该是我推荐最多的&#xff0c;上面光靠挖漏洞月入几万的都大有人在 我有个…...