java后端面试问题

本文主要探讨Java后端面试中的关键知识点,包括线程、数据结构、设计模式、数据库和Linux等方面。深入讲解了wait(), notify()和notifyAll()的区别,sleep与wait的差异,以及HashMap与Hashtable、ArrayList与LinkedList的比较。此外,还讨论了线程安全的集合、Spring家族的特性、数据库事务和索引,以及前端和Linux的基础知识。面试者需要理解Java平台无关性的原理,并掌握重要的设计模式和编程题目。" 120413269,9279472,GBase 8d数据库ldapmodify命令详解,"['数据库管理', 'GBase 8d', 'LDAP']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概念

斐波那契数列
当n=5时,下列函数的返回值是:5
int foo(int n) {
if (n < 2) return n;
return foo(n - 1) + foo(n - 2);
}
f(0)=0
f(1)=1
f(2)=1
f(3)=2
f(4)=3
f(5)=5

正则匹配1-100的数字
/^([1-9]|[1-9]\d|100)$/

水仙花数只是自幂数的一种,严格来说3位数的3次幂数才称为水仙花数。
附:其他位数的自幂数名字
一位自幂数:独身数
两位自幂数:没有
三位自幂数:水仙花数:153,370,371,407 它的每个位上的数字的 3次幂之和等于它本身
四位自幂数:四叶玫瑰数
五位自幂数:五角星数
六位自幂数:六合数
七位自幂数:北斗七星数
八位自幂数:八仙数
九位自幂数:九九重阳数
十位自幂数:十全十美数

&与操作符
可以用来判断数字是不是2的次方

数据结构

红黑树
排序方法:快排、冒泡排序

java

servlet 的生命周期
post get区别

什么是虚拟机,为什么说java平台无关
java源程序(.java)被编译器编译成字节码文件(.class)。然后字节码文件,将由java虚拟机,解释成机器码
JVM,它们能够将相同的.class文件,解释成不同平台所需要的机器码。正是因为有JVM的存在,java被称为平台无关的编程语言

区别
hashmap hashtable
string stringbuffer
arraylist linkedlist
forward redirect
了解
thriht 协议
负载均衡
java7 try语句不需要finally语句中释放资源twr语法

arraylist和linkedlist区别
一个数组,一个链表
应用场景?
ArrayList使用在查询比较多,但是插入和删除比较少的情况,而LinkedList用在查询比较少而插入删除比较多的情况

final定义类,方法,常量不能被继承

static修饰符:用于修饰方法和变量
1.1静态变量:static关键字用来声明独立于对象的静态变量 (局部变量不能被声明为static变量)
1.2静态方法:static关键字用来声明独立于对象的静态方法,方法中不可使用类的非静态变量

下列代码的运行结果
public class Super{
public int eat(){
System.out.println(4)
}
}

public class Sub extend Super{
public long eat(){
System.out.println(5)
}
}

父子类输出pingpong

打印"3"+2

static int i=0
方法
i++
两个实例对象
i是多少

java变量名,方法名最长64KB
可以以下划线,$开头

int Integer
druid
log4j怎么只打印一个类的信息

垃圾收集器
System.gc()先3个ygc再fgc

消息服务的特点

"=="是判断两个对象引用的地址是否相同,也就是判断是否为同一个对象
JVM首先是在字符串常量池中找 字符串,如果没有创建字符串常量,然后放到常量池中,若已存在,则不需要创建;当遇到 new 时,还会在内存(在堆里面)上创建一个新的String对象,存储,并将内存上的String对象引用地址返回

Spring家族

spring boot自动配置
SpringBootApplication相当于三个注解
@EnableAutoConfiguration自动配置注解
读取配置文件,配置文件的路径是当前根目录(src/main/resources/application.yml等)
@SpringBootConfiguration 组合了@Configuration注解
开启自动配置,扫描当前的所有依赖的jar包,发现新的依赖出现将会将会根据依赖完各种自动配置
@ComponentScan告诉Spring从哪里找到bean,定义哪些包需要被扫描
扫描范围默认情况下是启动类所在的同名包及其子孙包

spring boot的启动方式
main
mvn:spring-boot:run
mvn install 然后 java -jar ***.jar

spring特性依赖注入,面向切面,动态代理
di
aop,ioc的应用场景
aop的注解

springboot里的事务管理

权限控制用切面实现

SSM的配置
mybatis和spring的配置文件

@Resource @Autowire
@Autowired 是通过 byType 的方式去注入的, 使用该注解,要求接口只能有一个实现类。
@Autowire+@Qualifier 注解可以按名称注入, 但是注意是 类名。
在接口有多个实现类的时候,使用@Resource,默认按照名称注入

dubbo和spring cloud区别

kafka

线程

哪个集合是线程安全的
线程安全,效率低
vector,hashtable,StringBuffer
事务
要求:从数据库查没有此人 再插入此人
如果从数据库没查到,执行了插入,导致有两条相同数据怎么办

有几种方式实现多线程

比较wait()、notify()、notifyall()

sleep 和wait的区别

关于sleep和wait,以下描述错误的是
正确答案: D
sleep是线程类的方法,wait是object的方法
sleep不释放对象锁,wait放弃对象锁
sleep暂停线程,但监控状态依然保持,结束后会自动恢复
wait进入等待锁定池,只有针对此对象发出notify方法获得对象锁进入运行状态

首先,sleep()是Thread类中的方法,而wait()则是Object类中的方法。

sleep()方法导致了程序暂停,但是他的监控状态依然保持着,当指定的时间到了又会自动恢复运行状态。在调用sleep()方法的过程中,线程不会释放对象锁。
wait()方法会导致线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备获取对象锁进入运行状态。
注意是准备获取对象锁进入运行状态,而不是立即获得

hashmap

hashmap和treemap
LinkedHashMap 是HashMap的一个子类,如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现,它还可以按读取顺序来排列,像连接池中可以应用。

hashmap默认存储多大
在 Java 7 中,ArrayList 的默认大小是 10 个元素,HashMap 的默认大小是16个元素(必须是2的幂)。
Java 7 中 ArrayList 和 HashMap 类 的代码片段:
// from ArrayList.java JDK 1.7
private static final int DEFAULT_CAPACITY = 10;
//from HashMap.java JDK 7

static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16

过滤器和拦截器的区别

过滤器常用的资源访问权限控制、特殊字符以及敏感词过滤、响应信息压缩等功能。
在web.xml配置字符编码,不然会导致乱码问题:对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次

拦截器在springmvc的配置文件中
在AOP(Aspect-Oriented Programming)中拦截器用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。
缺点是只能对controller请求进行拦截,

拦截器(Interceptor)是基于Java的反射机制,而过滤器(Filter)是基于函数回调
从灵活性上说拦截器功能更强大些,Filter能做的事情,都能做,而且可以在请求前,请求后执行,比较灵活。Filter主要是针对URL地址做一个编码的事情、过滤掉没用的参数、安全校验(比较泛的,比如登录不登录之类),太细的话,还是建议用interceptor。不过还是根据不同情况选择合适的。

索引底层 数组 联合索引四个字段单个搜索用到索引么

联合索引 IDX(字段A,字段B,字段C,字段D),当仅使用字段A查询时,索引IDX就会使用到;如果仅使用字段B或字段C或字段D查询,则索引IDX都不会用到。

抽象类和接口

抽象类可以有抽象方法(抽象方法只需要声明,不需要实现)
可以有构造方法,不能被实例化,用abstract修饰
抽象类的子类必须实现所有抽象方法,否则还是个抽象类

抽象类不能用来实例化对象,声明抽象类的唯一目的就是为了将来对该类进行补充
一个类不能同时被abstract和final修饰

接口和抽象类有什么区别
抽象类可以有具体的方法和属性,变量是普通变量。接口只能有抽象方法和不可变常量。
抽象类是从子类中发现了公共的东西,泛化出父类,然后子类继承父类;
接口是根本不知子类的存在,方法如何实现还不确认,预先定义。

如果你拥有一些方法并且想让他们中的一些有默认实现,那么使用抽象类吧。
如果你想实现多重继承,那么你必须使用接口。由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口来解决它。
如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。

抽象类的使用场景
接口的使用场景

抽象类可以和普通类重名么

webservice如果服务端没有反应怎么处理

restful接口和普通接口区别
什么时候用put,什么时候用post

设计模式

设计模式单例模、工厂模式的特点
open-close设计原则
开闭原则
一个软件实体应当对扩展开放,对修改关闭。

编程题

  1. 判断版本号大小用.分隔
  2. 判断最近相隔时间10:33,23:59,00:00
    答案:1
    得到字符串数组内时间的最小分隔数
  3. 四个1-9的数字 判断能不能得到24
  4. 判断质因数
  5. 在字符串中找出第一个只出现一次的字符,如输入“abaccdeff”,则输出b

张村1,3,5说谎,李村2,4,6说谎,前天是我们说谎的日子,这一天是哪天

一根不均匀的绳子烧一个小时,半个小时怎么判断,75分钟怎么判断

统计文章中指定的字符
统计英文字符 hashmap 映射

打印99乘法表
按照中序序列插入二叉树
用链表实现查找倒数第K个元素

数据库

班级学生成绩
获取全部及格的学生名称和班级名称
获取班级数学平均分在60分以上的班级名称

索引的创建有什么限制,索引越多越好吗
数据量小的表不需要建立索引,建立会增加额外的索引开销
数据变更需要维护索引,意味着更多的索引意味着更多的维护成本
更多的索引也需要更多的存储空间,索引表空间

事务的四大特性
数据库隔离级别,事务并发的区别
ru脏读
rc不可重复读
rr幻读
串行化

可重复读隔离级别下如何避免幻读

数据库悲观锁 乐观锁

单个条件distincy
多个条件去重 group by
having和where区别
where筛选的是数据库表里面本来就有的字段,而having筛选的字段是从前筛选的字段筛选的。
having的原理是先select 然后从select出来的进行筛选。而where是先筛选再select

mybatis的工具类
mybatis请求数据库返回数据
mybatis如何分页
集合分页
map参数,传currentpage pagesize
拦截器分页
创建拦截器,拦截mybatis接口方法id以ByPage结束的语句
pagehelper插件

linux

linux修改所有用户的权限的文件

linux 进程命令
ps
查找文件命令
find

linux 文件权限问题
从左至右,1-3位数字代表文件所有者的权限,4-6位数字代表同组用户的权限,7-9数字代表其他用户的权限。

读取的权限等于4,用r表示;写入的权限等于2,用w表示;执行的权限等于1,用x表示;
通过4、2、1的组合,得到以下几种权限:
0(没有权限);
5(4+1 | 读取+执行);
6(4+2 | 读取+写入);
7(4+2+1 | 读取+写入+执行)

其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。

chmod a=rwx file

chmod 777 file
效果相同
chmod ug=rwx,o=x file

chmod 771 file
效果相同

linux查看本目录占用控件大小
du

把网络202.112.78.0划分为多个子网,(子网掩码是255.255.255.192)则各子网中
可用的主机地址总数是多少?62

192=128+64,对应的8位二进制也就是11000000,所以可供给主机位使用的二进制有6位,那么可供主机使用的IP地址总数(要减去子网的网络地址和广播地址)为:
2^6-2=62个

思考题

考试系统 5000人 早上8.同时获取一套试卷,每人试卷不同

登录逻辑:单点登录

购物车模块怎么实现
如何防止重复下单

前端

vue elementui和jquery bootstrap的区别
几种不同的浏览器内核
优化浏览器请求的方法

开发工具

github如何处理冲突

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值