基础常问 (概念、代码)
读源码

代码题
Void方法 ,也可以提前rerun;结束
RandomAccessFile类(随机访问文件)
在 Java 中,可以使用RandomAccessFile类来实现文件指针操作。RandomAccessFile提供了对文件内容的随机访问功能,它的文件指针可以通过seek方法来设置。
例如,假设你有一个文件,想要从指定的偏移量(offset)处开始读取内容。以下是一个简单的示例代码:
import java.io.File;import java.io.IOException;import java.io.RandomAccessFile;public class FileOffsetExample {public static void main(String[] args) {try {File file = new File("example.txt");RandomAccessFile raf = new RandomAccessFile(file, "r");long offset = 10; // 假设从第10个字节开始读取raf.seek(offset);byte[] buffer = new byte[100];int bytesRead = raf.read(buffer);String content = new String(buffer, 0, bytesRead);System.out.println(content);raf.close();} catch (IOException e) {e.printStackTrace();}}}
- 在这个示例中,RandomAccessFile的seek方法用于将文件指针移动到指定的偏移量offset处。然后,通过read方法读取从该偏移量开始的内容。
理解文件指针的移动方式
- 当你使用seek方法时,它会根据传入的偏移量来定位文件指针。偏移量是从文件开头开始计算的字节数。如果偏移量为 0,文件指针就位于文件的开头;如果偏移量大于文件的长度,根据RandomAccessFile的打开模式,可能会抛出IOException(在写模式下可能会扩展文件长度)。
- 例如,如果你想在文件末尾添加内容,可以先将文件指针移动到文件的末尾,再进行写入操作。代码如下:
import java.io.File;import java.io.IOException;import java.io.RandomAccessFile;public class AppendToFileExample {public static void main(String[] args) {try {File file = new File("example.txt");RandomAccessFile raf = new RandomAccessFile(file, "rw");raf.seek(raf.length()); // 将文件指针移到文件末尾String contentToAppend = "This is appended content.";raf.write(contentToAppend.getBytes());raf.close();} catch (IOException e) {e.printStackTrace();}}}
在这个示例中,raf.length()返回文件的当前长度,将文件指针移动到这个位置后,就可以在文件末尾写入新的内容。
Java实现一下密码长度不能大于 20 位,且其中任意挨着的 5 位不能相同且不能连续。
isValidPassword方法首先检查密码长度是否超过 20 位。
然后,它遍历密码字符串,每次取 5 个连续字符,检查这 5 个字符是否都相同以及是否连续。
如果发现不符合条件的情况,就返回false,如果整个遍历过程都没有问题,则返回true。在main方法中给出了一些测试示例。请注意,对于字符连续的检查假设了简单的编码连续情况,如果密码包含更复杂的字符集可能需要更精细的判断方法。
japublic class PasswordValidator {public static boolean isValidPassword(String password) {if (password.length() > 20) {return false;}for (int i = 0; i <= password.length() - 5; i++) {String fiveChars = password.substring(i, i + 5);// 检查是否有连续相同的5位字符boolean allSame = true;for (int j = 1; j < 5; j++) {if (fiveChars.charAt(j)!= fiveChars.charAt(0)) {allSame = false;break;}}if (allSame) {return false;}// 检查是否连续(这里假设字符编码是连续的,对于ASCII码数字和字母可以这样简单判断)boolean isConsecutive = true;for (int j = 0; j < 4; j++) {if ((int) fiveChars.charAt(j + 1) - (int) fiveChars.charAt(j)!= 1) {isConsecutive = false;break;}}if (isConsecutive) {return false;}}return true;}public static void main(String[] args) {System.out.println(isValidPassword("abcdefghijklmnopqrst"));System.out.println(isValidPassword("aaaaabbbbbcccccd"));System.out.println(isValidPassword("abcde12345fghij"));}}
冒泡算法-快排算法
public static void bubbleSort(int[] array) {int n = array.length;for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - i - 1; j++) {//> 升序//< 降序if (array[j] > array[j + 1]) {// 交换元素int temp = array[j];array[j] = array[j + 1];array[j + 1] = temp;}}}}public static void main(String[] args) {int[] array = {5, 3, 8, 6, 4};bubbleSort(array);for (int value : array) {System.out.print(value + " ");}}
//冒泡排序的时间复杂度为O(n*n)
快速排序算法是一种时间复杂度为O(nlogn)的排序算法
算法思想:用数组的第一个数作为基准数据,然后将所有比它小的数都放到它左边,所有比它大的数都放到它右边,这个过程称为一趟快速排序。
Java中的String有没有长度限制?
String s = "xxx";定义String的时候,xxx被我们称之为字面量,这种字面量在编译之后会以常量的形式进入到Class常量池。因为要进入常量池,就要遵守常量池的有关规定。
字符串有长度限制,在编译期,要求字符串常量池中的常量不能超过65535,并且在javac执行过程中控制了最大值为65534。
在运行期,长度不能超过Int的范围,否则会抛异常
String s = new String(“xyz”) 创建了几个对象
String str = new String(“abc”); 至少会创建一个对象,也有可能创建两个。
因为用到new关键字,肯定会在堆中创建一个String对象,
如果字符池中已经存在”abc”, 则不会在字符串池中创建一个String对象,
如果不存在,则会在字符串常量池中也创建一个对象。
jvm为了提升性能和减少内存开销,避免字符的重复创建,其维护了一块特殊的内存空间,
即字符串池,当需要使用字符串时,先去字符串池中查看该字符串是否已经存在,
如果存在,则可以直接使用,如果不存在,初始化,并将该字符串放入字符创常量池中。
int a = 2;Integer b = 2;Integer c = new Integer(2);//trueSystem.out.println(a == b);//告警 包装类型相等用equals替换// System.out.println(b == c);String x = "abc";String y = "a" + "bc";//true ,拼接之后y还是abc,所以还是会指向字符串常量池的内存地址System.out.println(x == y);String z = new String("abc");//falseSystem.out.println(y == z);String str1 = "hello";String str2 = "he" + new String("llo");System.out.println(str1 == str2); falseString str = "abc";String str1 = "abc";String str2 = "abc";System.out.println(str==str1);//trueSystem.out.println(str==str2);//true也就是str、str1、str2都是指向同一个内存地址。String str = "abc"; //在常量池中创建abcString str1 = "abcd"; //在常量池中创建abcdString str2 = str+"d"; //拼接字符串,此时会在堆中新建一个abcd的对象,因为str2编译之前是未知的String str3 = "abc"+"d"; //拼接之后str3还是abcd,所以还是会指向字符串常量池的内存地址System.out.println(str1==str2);//falseSystem.out.println(str1==str3);//true
String str = “abc”; 可能创建一个或者不创建对象。
如果”abc”在字符串池中不存在,会在java字符串池中创建一个String对象(”abc”),
然后str指向这个内存地址,无论以后用这种方式创建多少个值为”abc”的字符串对象,
始终只有一个内存地址被分配。
总结:==判断的是对象的内存地址,而equals判断的是对象内容
项目中还是不要使用new String去创建字符串,最好使用String直接赋值
String直接赋值与使用new String的区别_new string和直接赋值的区别-CSDN博客
String 和 StringBuffer,StringBuilder 的区别 - JohnieCheng - 博客园
xie.infoq.cn/article/9ff230e91d0ec22f705c4c8f4
面试题整理:Error与Exception的区别_面试题error和exception的区别-CSDN博客
== equals 区别
==比较的是变量栈内存中存放的堆内存地址,看它们是否是同一对象。(常量池问题->10、10L、10.0 相同)
Equal 用来比较两个对象的值是否相等,由于所有的类都继承自Object类,所以适用于所有对象,如果没有对该方法重写进行覆盖,调用仍然是Object类的方法,Object 中equals方法返回的却是==判断。常量写在前面,避免报空指针。
- equals 是object类方法,而 == 是操作符;
- 对于基本类型的变量来说(如 short、 int、 long、 float、 double),只能使用 == ,
因为这些基本类型的变量没有 equals 方法。对于基本类型变量的比较,使用 == 比较,
一般比较的是它们的值。
- 对于引用类型的变量来说(例如 String 类)才有 equals 方法,
因为 String 继承了 Object 类,equals 是 Object 类的通用方法。
对于该类型对象的比较,
默认情况下,没有复写 Object 类的 equals 方法,
使用 == 和 equals 比较是一样效果的,
都是比较的是它们在内存中的存放地址。但是对于某些类来说,为了满足自身业务需求,
可能存在 equals 方法被复写的情况,使用 equals 方法会比较它们的值;
注意:
所有比较是否相等时,Equals对常量比较时,把常量写在前面,
因为使用object的 equals object 可能为有null指针。
基本类型比较,那么只能用==来比较,不能用equals ,如果是基本类型的包装类型,那么用equals。
== 和 equals 的区别是什么?-腾讯云开发者社区-腾讯云
待更新
相关文章:
基础常问 (概念、代码)
读源码 代码题 Void方法 ,也可以提前rerun;结束 RandomAccessFile类(随机访问文件) 在 Java 中,可以使用RandomAccessFile类来实现文件指针操作。RandomAccessFile提供了对文件内容的随机访问功能,它的文件指针可以通…...
大学生机器人比赛实战(一)综述篇
大学生机器人比赛实战 参加机器人比赛是大学生提升工程实践能力的绝佳机会。本指南将全面介绍如何从零开始准备华北五省机器人大赛、ROBOCAN、RoboMaster等主流机器人赛事,涵盖硬件设计、软件开发、算法实现和团队协作等关键知识。 一、比赛选择与准备策略 1.1 主…...
什么是宽带拨号?
宽带拨号(PPPoE拨号)是一种通过账号密码认证接入互联网的方式,常见于家庭宽带、企业专线等场景。用户需要通过路由器或电脑进行拨号连接,运营商验证身份后分配IP地址,才能正常上网。 1. 宽带拨号的工作原理 PPPoE协议&…...
J1 ResNet-50算法实战与解析
🍨 本文為🔗365天深度學習訓練營 中的學習紀錄博客🍖 原作者:K同学啊 | 接輔導、項目定制 一、理论知识储备 1. 残差网络的由来 ResNet主要解决了CNN在深度加深时的退化问题(梯度消失与梯度爆炸)。 虽然B…...
[MySQL初阶]MySQL(8)索引机制:下
标题:[MySQL初阶]MySQL(8)索引机制:下 水墨不写bug 文章目录 四、从问题到底层,从现象到本质1.为什么插入的数据默认排好序2.MySQL的Page(1)为什么选择用Page?(2&#x…...
Muduo网络库实现 [九] - EventLoopThread模块
目录 设计思路 类的设计 模块的实现 私有接口 公有接口 设计思路 我们说过一个EventLoop要绑定一个线程,未来该EventLoop所管理的所有的连接的操作都需要在这个EventLoop绑定的线程中进行,所以我们该如何实现将EventLoop和线程绑定呢?…...
Vim操作指令全解析
Vim是我们在Linux日常工作中不可或缺的文本编辑器。它强大的功能和高效的编辑方式可以极大提升工作效率。本文将全面解析Vim的各种操作指令,从基础操作到高级技巧。 一、Vim模式解析 Vim是一个模式化编辑器,理解不同模式是掌握Vim的关键: …...
《K230 从熟悉到...》识别机器码(AprilTag)
《K230 从熟悉到...》识别机器码(aprirltag) tag id 《庐山派 K230 从熟悉到...》 识别机器码(AprilTag) AprilTag是一种基于二维码的视觉标记系统,最早是由麻省理工学院(MIT)在2008年开发的。A…...
VMware ESXi:企业级虚拟化平台详解
VMware ESXi:企业级虚拟化平台详解 目录 什么是VMware ESXi? ESXi的发展历史 ESXi的核心特性 3.1 裸机架构(Type-1 Hypervisor) 3.2 轻量化与高性能 3.3 集中管理(vCenter集成) ESXi的架构与工作原理…...
使用 PyTorch 的 `optim.lr_scheduler.CosineAnnealingLR` 学习率调度器
使用 PyTorch 的 optim.lr_scheduler.CosineAnnealingLR 学习率调度器 在深度学习中,学习率(Learning Rate, LR)是影响模型训练效果的一个关键超参数。一个合适的学习率调度策略可以帮助模型更快地收敛,同时避免陷入局部最优或振荡。PyTorch 提供了多种学习率调度器,其中…...
栈和队列的概念
1.栈的概念 只允许在固定的一端进行插入和删除,进行数据的插入和数据的删除操作的一端数栈顶,另一端称为栈底。 栈中数据元素遵循后进先出LIFO (Last In First Out) 压栈:栈的插入。 出栈:栈的删除。出入数据在栈顶。 那么下面…...
常用的元素操作API
click 触发当前元素的点击事件 clear() 清空内容 sendKeys(...) 往文本框一类元素中写入内容 getTagName() 获取元素的的标签名 getAttribute(属性名) 根据属性名获取元素属性值 getText() 获取当前元素的文本值 isDisplayed() 查看元素是否显示 get(String url) 访…...
红日靶场一实操笔记
一,网络拓扑图 二,信息搜集 1.kali机地址:192.168.50.129 2.探测靶机 注:需要win7开启c盘里面的phpstudy的服务。 nmap -sV -Pn 192.168.50.128 或者扫 nmap -PO 192.168.50.0/24 可以看出来win7(ip为192.168.50.128)的靶机开…...
SpringBoot集成Redis 灵活使用 TypedTuple 和 DefaultTypedTuple 实现 Redis ZSet 的复杂操作
以下是 Spring Boot 集成 Redis 中 TypedTuple 和 DefaultTypedTuple 的详细使用说明,包含代码示例和场景说明: 1. 什么是 TypedTuple 和 DefaultTypedTuple? TypedTuple<T> 接口: 定义了 Redis 中有序集合(ZSet…...
7-4 BCD解密
BCD数是用一个字节来表达两位十进制的数,每四个比特表示一位。所以如果一个BCD数的十六进制是0x12,它表达的就是十进制的12。但是小明没学过BCD,把所有的BCD数都当作二进制数转换成十进制输出了。于是BCD的0x12被输出成了十进制的18了&#x…...
Golang改进后的任务调度系统分析
以下是整合了所有改进点的完整代码实现: package mainimport ("bytes""context""fmt""io""log""net/http""sync""time""github.com/go-redis/redis/v8""github.com/robfig/…...
【目标检测】【深度学习】【Pytorch版本】YOLOV2模型算法详解
【目标检测】【深度学习】【Pytorch版本】YOLOV2模型算法详解 文章目录 【目标检测】【深度学习】【Pytorch版本】YOLOV2模型算法详解前言YOLOV2的模型结构YOLOV2模型的基本执行流程YOLOV2模型的网络参数YOLOV2模型的训练方式 YOLOV2的核心思想前向传播阶段反向传播阶段 总结 前…...
NineData云原生智能数据管理平台新功能发布|2025年3月版
本月发布 15 项更新,其中重点发布 3 项、功能优化 11 项、性能优化 1 项。 重点发布 基础服务 - MFA 多因子认证 新增 MFA 多因子认证,提升账号安全性。系统管理员开启后,所有组织成员需绑定认证器,登录时需输入动态验证码。 数…...
破局与赋能:信息系统战略规划方法论
信息系统战略规划是将组织的战略目标和发展规划转化为信息系统的战略目标和发展规划的过程,常见的方法有以下几种: 一、企业系统规划法(BSP) 1.基本概念:通过全面调查,分析企业信息需求,确定信…...
GLSL(OpenGL 着色器语言)基础语法
GLSL(OpenGL 着色器语言)基础语法 GLSL(OpenGL Shading Language)是 OpenGL 计算着色器的语言,语法类似于 C 语言,但提供了针对 GPU 的特殊功能,如向量运算和矩阵运算。 着色器的开头总是要声明…...
Redis基础知识-3
RedisTemplate对多种数据结构的操作 1. String类型 示例代码: // 保存数据 redisTemplate.opsForValue().set("user:1001", "John Doe"); // 设置键值对,无过期时间 redisTemplate.opsForValue().set("user:1002", &qu…...
Git Rebase 操作中丢失提交的恢复方法
背景介绍 在团队协作中,使用 Git 进行版本控制是常见实践。然而,有时在执行 git rebase 或者其他操作后,我们可能会发现自己的提交记录"消失"了,这往往让开发者感到恐慌。本文将介绍几种在 rebase 后恢复丢失提交的方法。 问题描述 当我们执行以下操作时,可能…...
【diffusers 进阶(十五)】dataset 工具,Parquet和Arrow 数据文件格式,load dataset 方法
系列文章目录 【diffusers 极速入门(一)】pipeline 实际调用的是什么? call 方法!【diffusers 极速入门(二)】如何得到扩散去噪的中间结果?Pipeline callbacks 管道回调函数【diffusers极速入门࿰…...
unity各个面板说明
游戏开发,unity各个面板说明 提示:帮帮志会陆续更新非常多的IT技术知识,希望分享的内容对您有用。本章分享的是Python基础语法。前后每一小节的内容是存在的有:学习and理解的关联性,希望对您有用~ unity简介-unity基础…...
游戏引擎学习第199天
回顾并发现我们可能破坏了某些东西 目前,我们的调试 UI 运行得相对顺利,可以创建可修改的调试变量,也可以插入分析器(profiler)等特殊视图组件,并进行一些交互操作。然而,在上一次结束时&#…...
Linux红帽:RHCSA认证知识讲解(十)使用 tar创建归档和压缩文件
Linux红帽:RHCSA认证知识讲解(十)使用 tar创建归档和压缩文件 前言一、归档与压缩的基本概念1.1 归档与压缩的区别 二、使用tar创建归档文件2.1 tar命令格式2.2 示例操作 三、使用tar进行压缩3.2 命令格式3.3 示例操作 前言 在红帽 Linux 系…...
端到端机器学习流水线(MLflow跟踪实验)
目录 端到端机器学习流水线(MLflow跟踪实验)1. 引言2. 项目背景与意义2.1 端到端机器学习流水线的重要性2.2 MLflow的作用2.3 工业级数据处理需求3. 数据集生成与介绍3.1 数据集构成3.2 数据生成方法4. 机器学习流水线与MLflow跟踪4.1 端到端机器学习流水线4.2 MLflow跟踪实验…...
相平面案例分析爱情故事
动态系统的分析可以分为三个步骤:第一步描述系统,通过语言来描述系统的特性,第一步描述系统,即通过语言来描述系统的特性;第二步数学分析,即使用数学工具对系统进行量化解析;第三步结果与讨论&a…...
《2024年全球DDoS攻击态势分析》
从攻击态势来看,2024年DDoS攻击频次继续呈增长趋势,2024年同步增加1.3倍;超大规模攻击激增,超800Gbps同比增长3.1倍,累计高达771次,且互联网史上最大带宽和最大包速率攻击均被刷新;瞬时泛洪攻击…...
RTC实时时钟M41T11M6F国产替代FRTC4111S
由NYFEA徕飞公司制造的FRTC4111S是一种低功耗的串行实时时钟(RTC),国产直接替代ST的M41T11M6F,其具有56字节的NVRAM,32.768 kHz振荡器(由外部晶体控制)和RAM的前8字节用于时钟/日历功能并以二进制编码十进制(BCD)格式配置。地址和数据通过两行双向总线串…...
