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

Java面经学习2

来源

https://www.nowcoder.com/discuss/619573767051800576

1.一面内容

RocketMQ延时消息(项目用到了)底层怎么实现的(不会)
消息量太大导致读消息延迟时间很长怎么办
redis为什么快(说了内存、数据结构优化、单线程不用考虑线程安全、io多路复用)
单线程模型有什么缺点,有什么不太适用的场景
redis的大key问题,为什么会产生大key
redis怎么设置过期时间,底层是怎么实现的,有哪些过期删除策略
普通索引、(a b c)联合索引,如果只通过b等值查询能走索引吗,如果用a和c呢
线程池主要解决什么问题,有什么优点
线程池的原理、来了一个任务后的处理流程
keepAliveTime对核心线程是否生效,是否能杀死核心线程
那如果我想杀死核心线程应该怎么做(不太会,说了动态地修改核心线程数,下来查资料才知道有核心线程的过期时间参数)
线程安全问题怎么解决
除了加锁还有什么方法,有没有无锁化方法
读写锁听过吗,大概说说
ThreadLocal说说
线程池和ThreadLocal一起用会有什么问题吗(说了内存泄漏,面试官补充了个可能有脏数据)
lc53 最大子数组和
反问
  1. RocketMQ延迟消息: 定时扫描延迟队列,到达延迟的时间就执行发送
  2. 消息量太大导致的延迟时间长,这里应该说的是消费端的延迟:增加消费端性能,过滤消息,修改为拉取消息的形式
  3. redis为什么快:存在于内存中.数据结构简单.单线程不用考虑线程安全.io多路复用,非阻塞io,一个线程处理事件. 使用了简单编码的网络协议,网络通信更快
  4. 单线程模型有什么缺点,有什么不太适用的场景:高并发场景,单线程无法使用多核优势.一个线程阻塞,整个系统都会阻塞.高io场景,系统延迟可能会增高.长时间计算任务可能会阻塞.
  5. redis的大key问题是什么,为什么会产生大key:存储的key信息过大,导致网络传输慢,涉及到大key的操作有较大延迟.大key的产生主要是不合理的数据结构,对象的序列化生成的.
  6. redis怎么设置过期时间,底层是怎么实现的,有哪些过期删除策略:
Expire myKey expire_time;
set myKey value EX expire_time;

底层维护一个过期字典数据结构,存放key:过期时间的键值对.
删除策略: 1. 定时删除. 2. 惰性删除:访问到这个key的时候,如果key过期了就删除. 3. 定时+惰性 4. 惰性+内存回收:当内存到达一定阈值进行一次回收

  1. 联合索引中遵循最左原则:从左向右,如果不包含最左边的则不能使用该索引
  2. 解决的问题:减少开启和销毁线程的开销(次数),控制线程的个数. 优点:降低资源消耗,提升性能,调度线程
  3. 流程:如果线程池中线程总数小于设置的核心线程数(不论是否有空闲的线程),则新增线程执行,如果达到了核心线程数量,那么吧任务加到等待队列,如果等待队列已满,那么线程池会创建新线程来处理任务,直到线程数量达到了最大线程数量.如果线程达到最大线程数量,而且任务队列已满,那么这个任务会fallback,以设置的策略执行.当非核心线程空闲一段时间后会自行销毁.
  4. keepAliveTime不对核心线程生效
  5. 想要关闭核心线程:ThreadPoolExecutor的 allowCoreThreadTimeOut参数可以让核心线程也过期关闭
  6. 线程安全问题怎么解决:加锁,使用线程安全的类和数据结构
  7. 有没有无锁化方法:原子操作,读写锁
  8. 读写锁:读可以并发,读写互斥,写写互斥
  9. ThreadLocal:可以生成线程,每一个线程内部有自己独立的变量副本,存储在TreadLocalMap中,key为线程id,value为其副本数据
  10. 线程池和ThreadLocal一起用会有什么问题吗:threadLocal的线程回到线程池中,其关联的对象仍然存活,造成内存泄漏.也会有脏数据
  11. 算法题:最大子数组和:昨天的面经1里也有这道题,dp[i] = Math.max(dp[i-1],0) + nums[i];

2.二面内容

布隆过滤器原理(项目用到了)
布隆过滤器有什么问题,为什么不能删除
Object类有哪些方法,都有什么用
hashcode和equal有什么关系
hash冲突有哪些解决方法
wait和notify是用来做什么的
wait和sleep有什么区别
wait带参和不带参有什么区别
如果wait带参,到时间后会做什么
到时之后如果获取不到对象锁不还是得等别的线程notify吗,这和不带参有啥区别
说说垃圾回收
lc32 最长有效括号
  1. 布隆过滤器:使用bitmap来标记是否存在某个元素,计算该元素多个hash值,如果这些hash都存在,说明这个元素可能存在.但可能误判. 但是如果说没有,那是一定不存在的
  2. 不能删除:删除一个元素对应的hash值,可能会影响其他元素的判别,和误判存在是一样的原理
  3. 常见的方法:toString() hashCode() equals() getClass() synchronize关键字下(wait(),notify() notifyAll())
  4. hashcode和equal有什么关系:equals的判断是根据hashcode的,hashcode的计算涉及到属性,能保证对象属性都相同才是同一个属性
  5. wait()使一个线程释放所有拥有的对象锁,并且被阻塞:不消耗cpu,直到被notify(),或notifyAll()
  6. wait()和sleep()的区别:wait()只能对同步块中使用,sleep()对线程在任何地方都可以使用,wait()后线程会释放所有的锁,而sleep不会,wait()不指定时间,sleep()指定时间.wait()的线程不会消耗cpu,sleep的线程仍然会消耗,并且可以被调度
  7. wait带参数超时时间,wait超过这个时间会自动结束,不带参数会永远直到notify
  8. 带参数还是需要被唤醒,那么和无参有什么区别呢:可以更好处理超时问题
  9. 垃圾回收:堆,新生代,老年代. 新生代满了会触发gc, 老年代满了会fullgc
  10. 最长有效括号
    核心思想:推导公式
class Solution {public int longestValidParentheses(String s) {if (s.equals(""))return 0;int[] dp = new int[s.length()];dp[0] = 0;int max = 0;for (int i = 1; i < s.length(); i++) {// ()形式的,等于前面的有效括号个数+2if (s.charAt(i) == ')' && s.charAt(i - 1) == '(') {dp[i] = (i >= 2 ? dp[i - 2] : 0) + 2;} else if (s.charAt(i) == ')' && s.charAt(i - 1) == ')') {// )) 形式,如果前面使匹配的( ,就是前面(之前的有效和 (到 )之间的有效和 +2 if (i - dp[i - 1] - 1 >= 0  && s.charAt(i - dp[i - 1] - 1) == '(') {dp[i] = dp[i-1]+ ((i-dp[i-1])>=2 ? dp[i-dp[i-1] -2]  :0 )+ 2;}}max = Math.max(max, dp[i]);}return max;}
}

3.三面内容

什么场景适合分布式事务
微服务了解吗
说说tcp,它有哪些优点在平时的开发中有借鉴意义
说说http
java的NIO主要是为了减少线程数,为什么线程数多了会有问题
线程安全版lru
  1. 什么场景适合分布式事务:跨多个数据源,消息队列,数据库,服务,系统.需要分布式事务
  2. 微服务:了解springcloud Netflix一套,eureka服务注册,服务熔断
  3. tcp:传输层控制协议,基于字节流.可靠有序,有拥塞控制,流量控制.借鉴TCP的确认,重传和排序机制来保证数据的完整性和顺序,动态调整发送速率和控制发送窗口来避免拥塞
  4. http:是应用层协议,使用tcp进行传递信息,无状态,可以传输多种信息,本身不安全,可以配合ssl证书.有多种请求方法.
  5. 线程多了对内存占用多,上下文切换开销大,线程调度有开销
  6. LRU可以使用LinkedHashMap实现,线程安全可以给操作加上synchronized

public class  ThreadSafeLRUCache<K,V>{private final Map<K,V> cache ;private final int capacity;public ThreadSafeLRUCache(int capacity){this.capacity = capacity;// true 为访问顺序, false为插入顺序this.cache = new LinkedHashMap<K,V>(capacity,0.75f,true){@Overrideprotected boolean removeEldestEntry(Map.Entry<K, V> eldest) {return size() > capacity;}};}public synchronized V get(K key){return cache.get(key);}public synchronized void put(K key,V value){cache.put(key,value);}public synchronized void remove(K key){cache.remove(key);}public synchronized int size(){return cache.size();}}

相关文章:

Java面经学习2

来源 https://www.nowcoder.com/discuss/619573767051800576 1.一面内容 RocketMQ延时消息&#xff08;项目用到了&#xff09;底层怎么实现的&#xff08;不会&#xff09; 消息量太大导致读消息延迟时间很长怎么办 redis为什么快&#xff08;说了内存、数据结构优化、单线…...

Java bin目录中的文件如何执行?

在 Java 项目中&#xff0c;bin 目录通常用于存放编译后的 .class 文件。如果你将编译后的 .class 文件放在 bin 目录中&#xff0c;需要确保在运行 Java 程序时指定正确的类路径。下面是一个简单的例子说明如何执行 bin 目录中的文件。 假设你的项目结构如下&#xff1a; pr…...

Kafka和Spark Streaming的组合使用学习笔记(Spark 3.5.1)

一、安装Kafka 1.执行以下命令完成Kafka的安装&#xff1a; cd ~ //默认压缩包放在根目录 sudo tar -zxf kafka_2.12-2.6.0.tgz -C /usr/local cd /usr/local sudo mv kafka_2.12-2.6.0 kafka-2.6.0 sudo chown -R qiangzi ./kafka-2.6.0 二、启动Kafaka 1.首先需要启动K…...

5.9网络协议

由网卡发送数据通过网线进行发送&#xff0c;当网卡接收到信号以后将数据传给内核数据区&#xff0c;然后由操作系统交给相应的进程。 将数据进行发送的时候需要借助于网线实现&#xff0c;这个时候会出现当传输的数据比较远的时候就借助于中继器将信号进行再生扩大&#xff0…...

QT客户端开发的注意事项

QT客户端开发是一个涉及图形用户界面&#xff08;GUI&#xff09;设计、网络编程、数据库交互等多个方面的复杂过程。以下是在进行QT客户端开发时应注意的一些关键事项&#xff0c;通过关注这些事项&#xff0c;可以提高QT客户端应用的质量和开发效率。北京木奇移动技术有限公司…...

k8s源码编译失败:Makefile:1: *** 缺失分隔符。 停止。

目录 问题解决 更换Arch或系统 问题解决 编译k8s源码的kubelet时执行make失败&#xff1a;Makefile:1: *** 缺失分隔符。 停止。 首先&#xff0c;查看文件内容 # cat Makefile build/root/Makefile 修改Makefile&#xff0c;给第一行前增加include&#xff0c;如下&…...

服务器数据恢复—拯救raid5阵列数据行动,raid5数据恢复案例分享

Raid5数据恢复算法原理&#xff1a; 分布式奇偶校验的独立磁盘结构&#xff08;被称之为raid5&#xff09;的数据恢复有一个“奇偶校验”的概念。可以简单的理解为二进制运算中的“异或运算”&#xff0c;通常使用的标识是xor。运算规则&#xff1a;若二者值相同则结果为0&…...

旅游集市数仓建设

旅游集市数仓建设 小白如何从0到1成为大数据工程师 目录 旅游集市数仓建设 1.上传数据 2.可能用到的UDF函数 3.创建所需数据库及表 1&#xff09;ODS层 ①ods_oidd ②ods_wcdr ③ods_ddr ④ods_dpi 2&#xff09;DWD层 ①dwd_res_regn_mergelocation_msk_d ②dwm_s…...

vue实现点击高亮效果

<view class"tabs"><textv-for"(item, index) in subTypes":key"item.id"class"text":class"{ active: index activeIndex }"//动态绑定高亮类&#xff1a;判断下标是否等于当前下标tap"activeIndex index&…...

uniapp 配置请求代理+请求封装

uniapp官网提供了三种方式&#xff1a;什么是跨域 | uni-app官网 1. 通过uniapp自带浏览器 打开项目是不存在跨域的 第二种方式&#xff1a; "h5" : {"template" : "static/index.html","devServer": {"proxy": {&quo…...

代码随想录算法训练营第二十八天|​216.组合总和III​、17.电话号码的字母组合

216.组合总和III 文档讲解:代码随想录 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 这一题与昨天的组合差不多&#xff0c;区别就在只有和是目标值的时候才会加入到result数组中&#xff0c;并且在回溯时&#xff0c;会处理sum的值 class Solution:def __i…...

大模型prompt实例:知识库信息质量校验模块

大模型相关目录 大模型&#xff0c;包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步&#xff0c;扬帆起航。 大模型应用向开发路径&#xff1a;AI代理工作流大模型应用开发实用开源项目汇总大模…...

正则表达式和lambda表达式

正则表达式&#xff08;Regular Expressions&#xff09;和Lambda表达式虽然都包含“表达式”一词&#xff0c;但它们在编程中的作用和用法是完全不同的。让我们详细比较一下它们的定义、用途和应用场景&#xff1a; 正则表达式 定义&#xff1a;正则表达式是一种用于匹配文本…...

pyenv 之 python 多版本管理(win11)

1. 背景 常常会用到Python的多个版本&#xff0c;因此可以使用Pyenv来对Python版本进行管理。 2. win11下载 pyenv 在终端执行下载语句&#xff1a; pip install pyenv-win --target D:\software\pyenv 其中 D:\software\pyenv 为你想要下载到的文件目录&#xff0c;建议在 …...

nodemon运行ts文件

https://juejin.cn/post/7035637086451400734 nodemon经常用来调试js文件&#xff0c;大家都是知道的&#xff0c;但是用nodemon来调试ts文件&#xff0c;大家试过吗&#xff1f; 如果直接运行nodemon index.ts是会报错的。 ts 复制代码 //index.ts console.log(1) 需要全局…...

内网渗透瑞士军刀-impacket工具解析(二)

impacket工具解析之Kerberos认证协议 上一期我们介绍了impacket中ntlm协议的实现&#xff0c;在Windows认证中除了使用ntlm认证&#xff0c;还支持Kerberos认证协议&#xff0c;Kerberos认证也是Windows 活动目录中占比最高的认证方式。 什么是Kerberos协议&#xff1f; Kerb…...

huggingface 笔记:pipeline

1 介绍 pipeline() 是使用预训练模型进行推理的最简单和最快速的方式。可以针对不同模态的许多任务直接使用 pipeline() 2 举例&#xff1a;情感分析 2.1 创建pipeline实例 from transformers import pipelineclassifier pipeline("sentiment-analysis") #首先创…...

玩转Matlab-Simscape(初级)-01-从一个简单模型开始学习之旅

** 玩转Matlab-Simscape&#xff08;初级&#xff09;- 01 - 从一个简单模型开始学习之旅 ** 目录 玩转Matlab-Simscape&#xff08;初级&#xff09;- 01 - 从一个简单模型开始学习之旅 前言一、从模板开始建模二、建模一个简单的连杆2.1 建模2.2 生成子系统 总结 前言 在产…...

电脑录屏软件有哪些?这3款神器必须要知道

在当今现代社会&#xff0c;电脑录屏软件已经成为人们日常生活中不可或缺的一部分。无论是录制游戏精彩瞬间、制作教程、还是在线会议记录&#xff0c;一款好用的电脑录屏软件都能帮助我们更高效地完成任务。可是电脑录屏软件有哪些呢&#xff1f;接下来&#xff0c;我们将介绍…...

如何在华企盾DSC防泄密系统中设置文件自动加密?

在华企盾DSC系统中设置文件自动加密的过程&#xff0c;简单且用户友好&#xff0c;确保了企业数据的安全&#xff0c;同时不干扰日常工作流程。以下是设置文件自动加密的步骤&#xff1a; 系统安装与配置&#xff1a;确保华企盾DSC数据防泄密系统已经在企业的网络中正确安装和配…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…...

API网关Kong的鉴权与限流:高并发场景下的核心实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中&#xff0c;API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关&#xff0c;Kong凭借其插件化架构…...

【Veristand】Veristand环境安装教程-Linux RT / Windows

首先声明&#xff0c;此教程是针对Simulink编译模型并导入Veristand中编写的&#xff0c;同时需要注意的是老用户编译可能用的是Veristand Model Framework&#xff0c;那个是历史版本&#xff0c;且NI不会再维护&#xff0c;新版本编译支持为VeriStand Model Generation Suppo…...

基于鸿蒙(HarmonyOS5)的打车小程序

1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...

Python异步编程:深入理解协程的原理与实践指南

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 持续学习&#xff0c;不断…...