简述什么是迭代器(Iterator)?
迭代器
迭代器(Iterator)是一种设计模式,Java 中的迭代器是集合框架中的一个接口,它可以让程序员遍历集合中的元素而无需暴露集合的内部结构。使用迭代器可以遍历任何类型的集合,例如 List、Set 和 Map 等。通过调用集合类的 iterator() 方法可以获取一个迭代器,并使用 hasNext() 方法判断是否还有下一个元素,如果有,则使用 next() 方法获取下一个元素。使用迭代器的好处在于遍历集合时不需要了解集合内部的结构,从而让代码更具可维护性和可重用性。迭代器还具有一些额外的功能,比如支持 remove() 方法来删除迭代器返回的最后一个元素,以及可以使用 forEachRemaining() 方法来迭代集合中余下的所有元素等。
注意的是,一旦使用了迭代器进行遍历,就不能在遍历时修改集合中的元素,否则可能会导致不可预知的行为。如果需要修改集合中的元素,应该使用集合提供的遍历方式(如 for-each 循环)来进行遍历,或者使用列表迭代器(ListIterator)来对列表进行修改。
Java为什么不直接实现Iterator接口,而是实现Iterable? ...
请描述JDK和JRE的区别?
JDK:全称Java Development Kit,翻译为Java开发工具包,提供Java的开发和运行环境,是整个Java的核心。目前各大主流公司都有自己的jdk,比如oracle jdk(注意,生产环境使用时需要注意法律风险)、openjdk(目前生产环境主流的jdk)、dragonwell(阿里家的jdk,在金融电商物流方面做了优化)、zulujdk(巨硬家的jdk)等等
JRE:全称Java Runtime Environment,Java运行时环境,为Java提供运行所需的环境总的来说,JDK包含JRE,JAVA源码的编译器javac,监控工具jconsole,分析工具jvisualvm总结,如果你需要运行Java程序(类似我的世界那种),只需要安装JRE;如果你需要程序开发,那么需要安装JDK就行了,不需要再重复安装JRE。
简述什么是值传递和引用传递?
值传递:方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参 数的值。
引用传递:也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值。
Java中Exception和Error有什么区别?
Exception(异常)应用程序中可能的可预测、可恢复问题。一般大多数异常表示中度到轻度的问题。异常一般是在特定环境下产生的,通常出现在代码的特定方法和操作中。在 EchoInput 类中,当试图调用 readLine 方法时,可能出现 IOException 异常。Exception 类有一个重要的子类 RuntimeException。RuntimeException 类及其子类表示“JVM 常用操作”引发的错误。例如,若试图使用空值对象引用、除数为零或数组越界,则分别引发运行时异常(NullPointerException、ArithmeticException)和 ArrayIndexOutOfBoundException。
Error(错误)运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。例如,当 JVM 不再有继续执行操作所需的内存资源时,将出现 OutOfMemoryError。
处理异常的方式
使用try..catch..finally进行捕获;
在产生异常的方法声明后面写上throws 某一个E ...
如果要重写一个对象的equals方法,还要考虑什么?
特点
自反性:x.equals(x)一定返回true
对称性:x.equals(y)返回true当且仅当y.equals(x)
传递性:x.equals(y)且y.equals(z),则x.equals(z)为true
一致性:若x.equals(y)返回true,则不改变x,y时多次调用x.equals(y)都返回true
对于任意的非空引用值x,x.equals(null)一定返回false。
代码实现public class Point { private final int x; private final int y; public Point(int x, int y) { this.x = x; this.y = y; } public boolean equals(Object o) { if(!(o instanceof Point)) return false; Point p = (Point)o; return p.x == x && p.y == y; } //...}
阐述==与equals的区别?
对象类型不同
equals():是超类Object中的方法。
==:是操作符。
比较的对象不同
equals():用来检测两个对象是否相等,即两个对象的内容是否相等。
==:用于比较引用和比较基本数据类型时具有不同的功能,具体如下:
基础数据类型:比较的是他们的值是否相等,比如两个int类型的变量,比较的是变量的值是否一样。
引用数据类型:比较的是引用的地址是否相同,比如说新建了两个User对象,比较的是两个User的地址是否一样。
运行速度不同
equals():没有==运行速度快。
==:运行速度比equals()快,因为==只是比较引用。
如何将String类型转化成Number类型?
使用Integer.parseInt()如果你知道字符串表示的是一个整数,可以使用Integer.parseInt()方法:
String numberStr = "123";int number = Integer.parseInt(numberStr);使用Double.parseDouble()如果字符串表示的是一个浮点数,可以使用Double.parseDouble()方法:
String numberStr = "123.456";double number = Double.parseDouble(numberStr);
使用new Integer() 或 new Double()这种方法已经被视为过时,不推荐使用,但仍可作为参考:
String numberStr = "123";Integer number = new Integer(numberStr); // 整数Double number = new Double(numberStr); // 浮点数
使用NumberFormat如果你需要进 ...
说明public static void main(String args[])这段声明里每个关键字什么作用?
public表示权限修饰符,表明任何类或对象都可以访问这个方法;
static表示main()方法是一个静态方法,即方法中的代码是存储在静态存储区的,只要类被加载后,就可以使用该方法而不需要通过实例化对象来访问;
void表示该方法没有返回值;
main是JVM识别的特殊方法名,是程序的入口方法。
String 类来创建和操作字符串
解释什么是语义化的HTML?
什么是html语义化?
官方解释:html语义化是指用合理的html标记以及其特有的属性去格式化文档内容。通俗的讲:就是用合理、正确的标签来展示内容。(标签指一种标记方式,如<title>,表示标题信息;也可以理解为人体骨架的某一块骨头,专属名称叫什么)。
为什么需要语义化?
易读,易书写,易理解(多数情况,标签英文翻译的含义就是其功能含义);
利于SEO搜索:语义化可以和搜索引擎建立良好的联系,有利于爬虫抓取有效信息;因为爬虫依赖于语义化标签来确定上下文和各个关键字的权重。
易于跨设备解析,进而完成渲染网页(如屏幕阅读器、盲人阅读器、移动设备);
利于规范化:方便团队开发和维护,也遵循W3C规范。
h5新增标签
结构化标签:<header>:头部标签 ;<nav>:导航标签 ;<article>:内容标签 ;<section>:定义文档某个区域; <aside>:侧边栏标签 ;<footer>:尾部标签;
多媒体标签:*音频标签:audio; <video src="文件地址&qu ...
如何实现浏览器内多个标签页之间的通信?
LocalStorage 和 sessionStorage通过使用localStorage和sessionStorage,可以在不同的标签页中保存和读取数据。
使用CookieCookie 是存储在客户端的小文件,可以存储少量数据并在多个标签页之间共享。在一个标签页中设置的 Cookie 可以被其他标签页中的 JavaScript 访问和修改。
BroadcastChannelBroadcastChannel API 允许在同源的不同上下文(例如,不同标签页、iframes、workers)之间进行简单的通信。
SharedWorker可以使用SharedWorker创建一个共享的工作线程,它可以在同源的多个上下文之间共享。这意味着它可以用于在不同标签页之间进行通信。