当前位置: 首页 > news >正文

Java后端开发面试题(含答案)

在广州一个小公司(BOSS标注是20-99人,薪资2-3k左右),直接面试没有笔试,按流程自我介绍,然后直接拿着简历问项目场景,问题是结合场景题和八股文。废话不多说,直接分享面试题目个大家做参考。

1、List和Map的区别?

(1)接口和继承关系:List继承自Collection接口,属于单列集合,用于存储单个元素序列。常见的实现类包括ArrayList、LinkedList和Vector;Map是一个独立接口,属于双列集合,用于存储键值对数据。常见的实现类包括HashMap、TreeMap、LinkedHahMap、ConcurrentHashMap;

(2)存储结构和元素特性:List具有有序性和可重复性,元素按插入顺序存储,ArrayList支持通过索引直接访问;Map每个键对应一个值,键不可重复,值可以重复。大部分实现类不保证顺序,但LinkedHashMap维护插入顺序,TreeMap按键排序;

2、JWT和Token的区别?

Token 是一个广义的概念,它指的是一种代表用户身份或会话状态的字符串,常用于身份验证和授权。在登录成功后,服务器会生成一个 Token 发给客户端,客户端在之后的请求中携带这个 Token,用于证明自己的身份。

JWT 是一种具体的 Token 实现格式,全称是 JSON Web Token。它是一种基于 JSON 的开放标准(RFC 7519),由三部分组成:Header(头部)+ Payload(载荷)+ Signature(签名),用.连接。JWT 不仅能携带身份信息,还可以加密签名,具有自包含、跨平台、可验证等特点。


总结一句话:
Token 是一种机制,JWT 是 Token 的一种实现方式。所有的 JWT 都是 Token,但不是所有的 Token 都是 JWT。

3、sleep和wait的区别?

wait和sleep方法都是用来暂停线程的执行,但他们有很大的区别如下:

(1)归属类不同:wait方法是Object中的一个方法,被finally修饰,不可被重写,因此每个对象都可以调用wait方法;而sleep是Thread中的一个静态方法,只能通过Thread类来调用;

(2)醒来机制不同:wait()方法用于让当前线程进入等待状态,直到有其他线程调用该对象的notify()或notifyAll()方法;wait(long)和sleep(long)方法用于使当前线程暂停执行指定的时间,然后恢复运行;

(3)锁特性不同(重点):wait方法的调用是基于对象的监视器锁实现的,只能放在同步代码块或同步方法中,wait方法执行后会释放对象锁;而sleep没有这个限制,sleep如果在synchronized代码块中执行,并不会释放对象锁;

4、synchronized和Lock有什么区别?

(1)底层实现和使用:synchronized是关键字,源码在JVM中的本地方法区,用C++实现的,基于对象的监视器锁实现的,它可以用来修饰方法或代码块,确保同一时刻只有有一个线程访问该方法或代码块;而Lock是个接口,源码有JDK提供,用Java语言实现的,基于AQS抽象队列同步器实现的,需要显示创建实现了Lock接口的对象,比如ReentrantLock;

(2)锁的获取和释放:synchronized锁的获取和释放是隐式的,当一个线程进入synchronized块时会自动尝试获取锁,没有获得锁会被阻塞直到获取锁,线程离开就会自动释放锁;而Lock的获取和释放都需要显式的设置,调用lock.lock() 来获取锁,调用lock.unlock()来释放锁;

(3)功能层面:二者都属于悲观锁,都具备基本的互斥、同步功能。但Lock提供了很多synchronized不具备的功能,比如公平锁可中断,可超时,多条件变量;Lock有适合不同场景的实现,如ReentrantLock,ReentranReadWriteLock;

(4)性能方面:在没有线程竞争情况下,synchronized做了很多优化,如偏向锁,轻量级锁,使用CAS操作减少了性能开销;如果竞争比较激烈,Lock的实现通常会提供更好的性能(比如尝试锁、定时锁);

(5)尝试获取锁机制:synchronized获取锁是不可中断的,如果一个线程无法获取锁,他会一直等待直到获取锁;而Lock是可中断的,可以调用tryLock()方法尝试获取锁,并在指定时间内等待,等待时间过后就放弃获取锁实现其他逻辑

5、前后端连桥需要注意什么?

(1)接口规范统一:定义好清晰的API文档,包括请求方式、URL、参数和响应接口等,前后端对参数名、数据格式、返回字段必须达成一致;

(2)跨域处理:当前端和后端不在同一域名或端口下时,后端需要开启CORS支持,设置响应头如 Access-Control-Allow-Origin

(3)数据格式一致:请求体一般采用application/json,避免默认application/x-www-form-urlencoded带来的数据解析问题;确保前后端对于布尔型、数字、时间等数据类型解析一致;

(4)鉴权与安全:登陆成功后建议使用Token进行认证,前端每次请求携带Token(通常放在请求头Authorization中),注意Token过期处理、刷新机制、接口权限校验。

http://www.xdnf.cn/news/111349.html

相关文章:

  • java kafka
  • 初始https附带c/c++源码使用curl库调用
  • Java 调用webservice接口输出xml自动转义
  • 关于 xpath 查找 XML 元素的一点总结
  • 2025新版懒人精灵零基础及各板块核心系统视频教程-全分辨率免ROOT自动化开发
  • Docker从0-1搭建个人云盘(支持Android iOS PC)
  • 关于Safari浏览器在ios<16.3版本不支持正则表达式零宽断言的解决办法
  • 汽车自动驾驶介绍
  • OpenHarmony 开源鸿蒙北向开发——hdc工具使用及常用命令(持续更新)
  • 数据库进阶之MySQL 程序
  • ARINC818协议一些说明综述
  • onlyoffice8.3.3发布了-豆豆容器市场同步更新ARM64版本
  • 【CAPL实战:以太网】对IPv4报文的Payload部分进行分片并创建分片包
  • 从Kafka读取数据
  • Cephalon端脑云:神经形态计算+边缘AI·重定义云端算力
  • Trae或者VsCode无法识别相对路径(不自动切换工作目录)
  • 高光谱相机在生物医学中的应用:病理分析、智慧中医与成分分析
  • React在什么情况下需要用useReducer
  • 前缀和-724.寻找数组的中心下标-力扣(LeetCode)
  • java—14 ZooKeeper
  • 【C++游戏引擎开发】第23篇:基础阴影映射(Shadow Mapping)
  • 2025/4/24
  • LeetCode 2799.统计完全子数组的数目:滑动窗口(哈希表)
  • 机器学习(9)——随机森林
  • 缓存与数据库数据一致性:旁路缓存、读写穿透和异步写入模式解析
  • “Daz to Unreal”将 G8 角色(包括表情)从 daz3d 导入到 UE5。在 UE5 中,我发现使用某个表情并与闭眼混合后,上眼睑出现了问题
  • 加密认证库openssl初始附带c/c++的使用源码
  • Nginx 中间件
  • 焊接机排错
  • 【C++指南】位运算知识详解