Java面试题(持续更新中。。。)
程序员文章站
2022-04-18 08:25:48
...
一个".java"是否可以包含多个类(不是内部类)?有什么限制?
可以包含多个类,只能有一个public类
使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
修饰基本类型值不变,修饰引用类型只是引用不可变,但是引用所指向的地址的内容可以改变。
String s = “Hello”;s = s + “world”;这两行代码执行后,原始的String对象中的内容到底变了没有?
没有,改变是的地址的引用
HashMap、HashTable的区别?
HashMap 允许 key 和 value 为 null,而 Hashtable 不允许。
线程安全:Hashtable 是线程安全的,而 HashMap 是非线程安全的。
初始容量不一样,hashmap为16 hashtable为11;hashmap线程不安全,效率高,hashtable线程安全,效率低,被currenthashmap代替;hashmap的resize为2倍,hashtable为2倍加1
StringBuilder和StringBuffer的区别?
StringBuffer 字符串变量(线程安全),使用synchroized修饰
StringBuilder 字符串变量(非线程安全),效率比StringBuffer高
LinkedList和ArrayList有什么区别?
ArrayList和Vector使用了数组的实现,可以认为ArrayList或者Vector封装了对内部数组的操作,比如向数组中添加,删除,插入新的元素或者数据的扩展和重定向。【查询快,增删慢】
LinkedList使用了循环双向链表数据结构。与基于数组ArrayList相比,这是两种截然不同的实现技术,这也决定了它们将适用于完全不同的工作场景。【查询慢,增删快】
char型变量中能不能存储一个中文汉字?为什么?
可以,char类型本身就是用来存储字符的,而一个中文是两个字节 的字符。英文是一个字节的字符。如果是存取英文字符,那么可以使用byte,以便节省空间。
varchar,char两种数据类型有什么区别?如果库表某字段输入“ABC”后存储,该字段数据类型varchar(10),char(10),存储字节长度以及内容有何区别?
首先明确的是,char的长度是不可变的,而varchar的长度是可变的,
定义一个char[10]和varchar[10],如果存进去的是‘abcd’,那么char所占的长度依然为10,除了字符‘abcd’外,后面跟六个空格,而varchar就立马把长度变为4了,取数据的时候,char类型的要用trim()去掉多余的空格,而varchar是不需要的,
char的存取速度还是要比varchar要快得多,因为其长度固定,方便程序的存储与查找;但是char也为此付出的是空间的代价,因为其长度固定,所以难免会有多余的空格占位符占据空间,可谓是以空间换取时间效率,而varchar是以空间效率为首位的。
char的存储方式是,对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节;而636f70797a686964616f31333366303062varchar的存储方式是,对每个英文字符占用2个字节,汉字也占用2个字节,两者的存储数据都非unicode的字符数据。
多线程中,wait()方法和sleep()方法有什么区别?
sleep() 不释放锁;
wait() 释放锁。
用法不同:sleep() 时间到会自动恢复;
wait() 可以使用 notify(),notifyAll()直接唤醒
1.对于sleep()方法,该方法是属于Thread类中的。
而wait()方法,则是属于Object类中的。
2.sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。在调用sleep()方法的过程中,线程不会释放对象锁。而当调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备。获取对象锁进入运行状态。
3.最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用(使用范围)
jsp和servlet有什么区别?
Jsp是Servlet的一种简化,使用Jsp只需要完成程序员需要输出到来客户端的内容,Jsp中的Java脚本如何镶嵌到一个类中,由Jsp容器完成。
1、jsp经编译后就变成了Servlet。
2、jsp更擅长表现于页面显示,servlet更擅长于逻辑控制。
3、Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletResponse对象以及HttpServlet对象得到。
4、而Servlet则是自个完整的Java类,这个类的Service方法用于生成对客户端的响应。
Mybatis如何处理结果集?
mybatis如何处理结果集:反射
通过获取到所有的返回的列名字,反射获取目标对象中这个名字对应的属性,调用set方法,进行赋值
构造器(constructor)是否可被重写(override)?
构造器Constructor不能被继承,因此不能被重写(Override),但是可以被重载(Overload)
springboot核心配置文件是什么?
Spring Boot 有两种类型的配置文件,application 和 bootstrap 文件
Spring Boot会自动加载classpath目前下的这两个文件,文件格式为 properties 或 yml 格式
*.properties 文件是 key=value 的形式
*.yml 是 key: value 的形式
*.yml 加载的属性是有顺序的,但不支持 @PropertySource 注解来导入配置,一般推荐用yml文件,看下来更加形象
bootstrap 配置文件是系统级别的,用来加载外部配置,如配置中心的配置信息,也可以用来定义系统不会变化的属性.bootstatp 文件的加载先于application文件
application 配置文件是应用级别的,是当前应用的配置文件
字符串相关
1.打印出String str1 = "as7df3j4g345lo34"中的数字
2.打印出String str2 = "Hello world hello java"中的单词和单词的个数
package com.itheima.practice;
import java.util.HashSet;
import java.util.Set;
public class TestString {
public static void main(String[] args) {
String str1 = "as7df3j4g345lo34";
getNumber(str1);
System.out.println();
String str2 = "Hello world hello java";
getWord(str2);
}
public static void getNumber(String s) {
byte[] bytes = s.getBytes();
for (byte a : bytes) {
if (a >= 48 && a <= 57) {
System.out.print((char) a + " ");
}
}
}
public static void getWord(String s) {
String lowerCase = s.toLowerCase();
String[] splits = lowerCase.split(" ");
Set<String> sets = new HashSet<>();
for (String split : splits) {
sets.add(split);
}
System.out.println("单词为:");
for (String set : sets) {
System.out.println(set);
}
System.out.println("一共有" + sets.size() + "个词。");
}
}
public class TestHouseNumber {
public static void main(String[] args) {
getNumber();
}
public static void getNumber() {
Map<Integer,Integer> ids = new HashMap<>();
int m = 0;
for (int i = 0; i < 1001; i++) {
m += i;
ids.put(i,m);
}
for (int i = 1; i < 1001; i++) {
for (int j = i+2; j < 1001 ; j++) {
if(ids.get(j)-(i+1) == 2 * ids.get(i)){
System.out.println("门牌号:"+(i+1)+",最大门牌号:"+j);
continue;
}
if(ids.get(j)-(i+1) > 2 * ids.get(i)){
continue;
}
}
}
}
}
推荐阅读
-
[3]尝试用Unity3d制作一个王者荣耀(持续更新)->选择英雄-(中)
-
linux(centos7) 常用命令和快捷键 持续验证更新中...
-
Java日常错误及需要注意细节,持续更新......
-
2020 java Redis面试题及答案(最全版本持续更新)
-
2020 java MySQL面试题及答案(最全版本持续更新)
-
2020 java Elasticsearch面试题及答案(最全版本持续更新)
-
2020 java Memcached面试题及答案(最全版本持续更新)
-
2020 java ZooKeeper 面试题及答案(最全版本持续更新)
-
java 学习必备的软件,持续更新中
-
谈谈对事件的理解(持续更新中)