Java面试题(持续更新中。。。)

一个".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() +  "个词。");
    }
}

lock与synchronized的区别
在这里插入图片描述
springbean的生命周期
在这里插入图片描述
悲观锁与乐观锁的区别
在这里插入图片描述
如果要将对象用作 Map 中的 key,需要注意什么?

如果将对象作为Map中的key,需要重写该对象的equals方法
和hashCode方法(键唯一);现在一般通过lombok可以简单
得以实现,并且可以选择具体需要哪些字段参与equals
和hashCode方法的计算。

java中==号和equals的区别

== 在比较基本数据类型时比较的是值
   比较引用数据类型时比较的是地址值
equals()方法一般都是比较两个对象的值

equals()方法存在于Object类中,因为Object类是所有类的直接或
间接父类,也就是说所有的类中的equals()方法都继承自Object类
通过源码发现,Object类中equals()方法底层依赖的是==
那么,在所有没有重写equals()方法的类中,调用equals()方法其
实和使用==的效果一样,也是比较的地址值
然而,Java提供的所有类中,绝大多数类都重写了equals()方法,重
写后的equals()方法一般都是比较两个对象的值

事务不生效
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值