Java面试题(java高级面试题)

线程池的核心线程数设置为多大比较合理?

Worker线程在执行的过程中,有一部计算时间需要占用CPU,另一部分等待时间不需要占用CPU,通过量化分析,例如打日志进行统计,可以统计出整个Worker线程执行过程中这两部分时间的比例,例如:线程计算和等待的时间是1:1,即有50%的时间在计算(占用CPU),50%的时间在等待(不占用CPU):

1)假设此时是单核,则设置为2个工作线程就可以把CPU充分利用起来,让CPU跑到100%

2)假设此时是N核,则设置为2N个工作现场就可以把CPU充分利用起来,让CPU跑到N*100%

结论:

N核服务器,通过执行业务的单线程分析出本地计算时间为x,等待时间为y,则工作线程数(线程池线程数)设置为 N*(x+y)/x 也就是: N * (1+y/x),能让CPU的利用率最大化, 等待时间越长,线程数就可以越多。

30分钟不支付订单自动取消如何来实现?

技术方案

  • 定时任务每秒扫库(不推荐,对数据库的压力比较大)
  • Redisson(延迟消息的数量少的时候可用)
  • MQ
    • RabbitMQ延迟交换机插件
    • RocketMQ延迟消息
    • EMQ 延迟消息

具体的业务逻辑

创建订单完成以后,向RabbitMQ的延迟交换机发送延迟30分钟的消息,消息中存放了订单的id。
30分钟以后,消息到期会从MQ出队,消费者收到这个消息以后,根据消息中的订单id查询数据
库,检查订单的状态,如果是已经支付什么事情也不需要做,如果是未支付,则把订单状态
修改成已取消。

项目中用过AOP吗?如何用的?AOP底层的实现原理

如何来使用?

  • @Datasource做数据源切换
  • @Log记录用户的操作日志
  • @Lock 分布式锁

实现原理

  • springboot 2.0之前,目标类如果实现了接口,则使用JDK动态代理方式,否则通过CGLIB子类的方式生成代理。
  • springboot 2.0版本之后,如果不在配置文件中显示的指定spring.aop.proxy-tartget-class的值,默认情况下生成代理的方式为CGLIB

@Transantional失效的场景中,this内部调用会失效的解决办法

  • @EnableAspectJAutoProxy(exposeProxy = true) + AopContext.currentProxy()
  • @Lazy + 注入bean本身
    @Servicepublic class AopService {@Autowired@Lazyprivate AopService selfService;public void f1(){// f2()的事务会失效this.f2();// 第一种方式AopService aopService = (AopService)AopContext.currentProxy();aopService.f2();// 第二种方式selfService.f2();}@Transactional(rollbackFor = Exception.class)public void f2(){log.info("some business logic in f2()");}}

项目中的安全是如何来做的?项目如何防止sql注入攻击、xss攻击?CSRF漏洞?

防止xss主要就是对一些特殊字符做替换。

我们是写了一个Filter,在Filter中会把原始的HttpServletRequest替换成我们自定义的一个Request,我们在这个自定义的Requst中去做了特殊字符的替换,主要是替换掉比如

防止sql注入主要就是使用SQL的预编译。

有没有遇到过OOM?生产环境内存溢出怎么处理?

1)导出JVM内存映像

  • 当发生内存溢出的时候自动导出,需要添加jvm的启动参数
     -XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=./
  • 手动导出
      jmap -dump:format=b,file=heap.hprof [pid]

2)使用MAT之类的工具分析内存泄漏的原因

  • Histogram: 查看某个对象的数量
  • Dominator Tree:查看某个对象占的内存大小以及引用关系
  • Top Consumers:查看占内存最大的对象

生产环境CPU利用率(负载load)500%如何处理?

  • ps -ef | grep java 找到你的java进程
  • top -Hp pid 找到耗cpu高的线程
  • printf %x 十进制转化成16进制
  • jstack pid 打印线程堆栈
  • 在堆栈中找到cpu高的线程

Excel导出几十万条记录超时怎么办?

客户端点击导出按钮以后,服务端记录一个日志,状态是待处理,给客户端返回日志的id,然后服务端异步做excel的导出,完成以后,把excel上传到oss,把下载的url地址记录到日志,并把日志的状态改成已完成。

客户端拿到这个id以后可以到服务端的一个单独的页面上做查询,如果是已完成,则可以点击下载按钮去下载excel。

十万个修改数据同时来了,十万个新增数据?

  • MQ削峰

    • 请求先放到MQ,给客户端返回:正在排队中…
    • 客户端起定时任务,向服务端轮询执行结果
  • Redis预减

    //请求url:/miaosha/product/12234
    //服务端controller:
    @PostMapping(“/product/miaosha/{productId}”)
    public boolean miaosha(@PathVariable(“productId”) long productId){
    // 秒杀活动开始之前,把商品id和商品的库存数量加载到redis中,key:商品id,value:库存数量
    // redis预减库存,让1万个人去抢数据库中的10个商品是没有意义的,只让10个人去抢就可以了
    int count = redisTemplate.decr(“”+productId);
    if(count <= 0){
    // 秒杀失败
    return false;
    }
    //预减成功以后, 再放入MQ,返回给前端排队中
    kafkaTemplate.send(productId);
    // 从MQ收消息,下单,SQL中要加上stock>0的判断,防止把库存扣成负数
    select * from product where id = #{productId} //version
    int ret = update product set stock=stock-1 where id = #{productId} and stock>0
    if(ret > 0){
    // 秒杀成功,生成订单
    return true;
    }else{
    // 秒杀失败
    return false;
    }
    }

  • 验证码,非常复杂,防止机器人刷接口,减少瞬间的并发

  • 活动开始之前换接口,换页面,防机器人

  • 回仓

  • 卖不完是允许的,卖超是不允许的!!

参考秒杀功能

有没有搭建过ES的集群?

主要就是设置了每一个节点的名称、集群的名称、启动的端口、数据存储路径以及其他节点的IP和端口,集群名称一样的话,他们就能组成一个集群。

    services:es01:image: elasticsearch:7.12.1container_name: es01environment:- node.name=es01- cluster.name=es-docker-cluster- discovery.seed_hosts=es02,es03- cluster.initial_master_nodes=es01,es02,es03- "ES_JAVA_OPTS=-Xms512m -Xmx512m"volumes:- data01:/usr/share/elasticsearch/dataports:- 9200:9200networks:- elastic

jdk8为啥要用红黑树?

红黑树是一种自平衡二叉搜索树,因此查找和插入操作的时间复杂度为 O(log n),而链表的时间复杂度为 O(n)。在哈希冲突比较严重的情况下,使用红黑树能够更快地进行搜索和插入操作。

在这里插入图片描述

  • 红黑树是”近似平衡“的。
  • 红黑树相比avl树,在检索的时候效率其实差不多,都是通过平衡来二分查找。但对于插入删除等操作效率提高很多。红黑树不像avl树一样追求绝对的平衡,他允许局部很少的不完全平衡,这样对于效率影响不大,但省去了很多没有必要的调平衡操作,avl树调平衡有时候代价较大,所以效率不如红黑树,在现在很多地方都是底层都是红黑树的天下啦。
  • 红黑树的高度只比高度平衡的AVL树的高度(log2n)仅仅大了一倍,在性能上却好很多。
  • HashMap在里面就是链表加上红黑树的一种结构,这样利用了链表对内存的使用率以及红黑树的高效检索,是一种很happy的数据结构。
  • AVL树是一种高度平衡的二叉树,所以查找的效率非常高,但是,有利就有弊,AVL树为了维持这种高度的平衡,就要付出更多代价。每次插入、删除都要做调整,就比较复杂、耗时。所以,对于有频繁的插入、删除操作的数据集合,使用AVL树的代价就有点高了。
  • 红黑树只是做到了近似平衡,并不严格的平衡,所以在维护的成本上,要比AVL树要低。
  • 所以,红黑树的插入、删除、查找各种操作性能都比较稳定。对于工程应用来说,要面对各种异常情况,为了支撑这种工业级的应用,我们更倾向于这种性能稳定的平衡二叉查找树。

ES如何与Mysql数据保持一致?

ES与MySQL的数据同步分成了3部分:

  • 全量同步
    系统上线之前,首先会做一次全量同步,把mysql中的数据批量的导入到ES中。
  • 增量同步
    常见的增量同步的方式有很多,比如:
    • 同步双写
      • 耦合严重
      • 性能问题
    • 异步双写
      • 松耦合
      • 依赖MQ的可靠性,有可能丢消息
    • 监听binlog
      • 无耦合
      • 技术门槛比较高

我们的系统中是使用的基于MQ的异步双写来实现数据同步的,具体来说,当mysql数据发生变化的时候,会向MQ中发一个消息,然后我们的搜索服务会接收这个消息,根据消息中的数据Id构造出完整的数据,然后同步到ES中。

  • 定时任务全量同步

为了提高MQ的性能,我们没有对消息的可靠性做特殊处理,因此理论上会存在消息丢失导致数据不一致的风险,所以,我们有一个定时任务,每周会把mysql中的数据全量的再导入一次ES,如果这中间发现不一致,人工手动处理。

linux跑了两个docker容器,怎么让两个docker进行通讯

  • 两个容器都使用host网络模式,就可以使用主机的ip和端口进行通信
      // 启动两个容器docker run --name d1 --network=host -e port=8081 -d demodocker run --name d2 --network=host -e port=8082 -d demo// 进入d1容器,执行telnet命令docker exec -it d1 shtelnet 192.168.137.138 8082 GET /demo 正常输出
  • 两个容器连接到同一个网络模式是bridge的自定义网络上,可以使用容器名进行通信
      docker network create mynet// 启动两个容器docker run --name d3 --network=mynet -e port=8083 -d demodocker run --name d4 --network=mynet -e port=8084 -d demo// 进入d3容器,执行telnet命令docker exec -it d3 shtelnet d4 8084GET /demo 正常输出
  • 测试用的Dockerfile和接口如下:
      //DockerfileFROM java:8-alpineCOPY ./demo.jar /tmp/app.jarENV port 8080EXPOSE $portENTRYPOINT java -Dserver.port=$port  -jar /tmp/app.jar// 接口@RestControllerpublic class DemoController {@GetMapping("/demo")public String demo() {return "demo";}}//docker-compose.ymlversion: '3.9'services:d1:image: demoenvironment:port: '8081'ports:- '8081:8081'container_name: d1hostname: d1d2:image: demoenvironment:port: '8082'ports:- '8082:8082'container_name: d2hostname: d2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/616835.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

书生·浦语大模型--第二节课笔记

书生浦语大模型--第二节课 大模型及InternLM基本介绍实战部分demo部署准备工作模型下载代码准备终端运行web demo 运行 Lagent 智能体工具调用 Demo准备工作Demo 运行 浦语灵笔图文理解创作 Demo环境准备下载模型下载代码运行 大模型及InternLM基本介绍 大模型 定义&#xff…

一阶低通滤波器

一阶低通滤波器 X为输入&#xff0c;Y为滤波后得到的输出值&#xff1b;本次的输出结果主要取决于上次的滤波输出值&#xff0c;其中a是和滤波效果有关的一个参数&#xff0c;称为滤波系数&#xff1b;它决定新采样值在本次滤波结果中所占的权重&#xff1b; 滤波系数a越小&a…

2024年湖北中级职称是不是通用?不限制地域呢?

最近有人问甘建二湖北中级职称是否全国通用&#xff1f; 甘建二可以明确告诉大家&#xff0c;职称证书可以全国通用了&#xff0c;只要是人SHE局部门评审的正规职称证都是可以的。使用地域也没有限制。 因为职称没有说哪个省份只能在哪里使用&#xff0c;不像是二建&#xff0…

500mA High Voltage Linear Charger with OVP/OCP

一、General Description YHM2810 is a highly integrated, single-cell Li-ion battery charger with system power path management for space-limited portable applications. The full charger function features Trickle-charge, constant current fast charge and const…

Java中的栈和队列操作,相互实现(力扣 232, 225)

栈和队列&#xff08;Java&#xff09; Java中的 栈 & 队列 操作栈的使用队列的使用 LeetCode 232. 用栈实现队列我的代码 LeetCode 225. 用队列实现栈我的代码 Java中的 栈 & 队列 操作 栈的使用 栈的方法功能Stack()构造一个空的栈E push(E e)将e入栈&#xff0c;并…

群狼调研开展某预制菜品牌NPS及消费者心理研究调研

为了解某预制菜品牌在消费者心中的地位&#xff0c;评估其NPS&#xff08;净值&#xff09;&#xff0c;并深入研究消费者的购买心理和需求&#xff0c;为品牌提供有针对性的改进建议。群狼调研&#xff08;长沙消费者画像研究&#xff09;受客户委托开展某预制菜品牌NPS及消费…

【开源】基于JAVA语言的民宿预定管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用例设计2.2 功能设计2.2.1 租客角色2.2.2 房主角色2.2.3 系统管理员角色 三、系统展示四、核心代码4.1 查询民宿4.2 新增民宿4.3 新增民宿评价4.4 查询留言4.5 新增民宿订单 五、免责说明 一、摘要 1.1 项目介绍 基于…

Vulnhub-GoldenEye

一、信息收集 nmap探测&#xff1a;nmap -p 1-65535 -T4 -A -v 192.168.1.9 PORT STATE SERVICE VERSION 25/tcp open smtp Postfix smtpd |_smtp-commands: ubuntu, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN |_…

Python基础知识:整理12 JSON数据格式的转换

首先导入python中的内置包json import json 1 准备一个列表&#xff0c;列表内每个元素都是字典&#xff0c;将其转换为JSON 使用json.dumps()方法 data [{"name": "John", "age": 30}, {"name": "Jane", "age":…

HarmonyOS Stage模型 UIAbility生命周期状态

UIAbility的生命周期包括Create、Foreground、Background、Destroy四个状态 Create状态&#xff0c;在UIAbility实例创建时触发&#xff0c;对应onCreate回调。可以在onCreate回调中进行相关初始化操作 import UIAbility from ohos.app.ability.UIAbility; import window from…

NAND SCA接口对性能影响有多大?

在多LUN场景下&#xff0c;SCA接口尤其有助于提高随机读取性能。通过合理安排读取命令和等待时间&#xff08;如tR&#xff09;&#xff0c;SCA接口可以在一个LUN完成读取后立即开始另一个LUN的读取操作&#xff0c;而无需等待整个DQ总线空闲&#xff0c;从而减少了延迟和提高了…

c++ 继承是否需要调用父类的构造函数

今天遇到一个继承的问题。请回答下面问题&#xff1a;&#xff08;已知 B 继承自 A&#xff09; 子类是否需要调用父类的构造函数&#xff1f;必须还是可选&#xff1f; 先回答&#xff1a; 结论1 &#xff1a;强烈建议显示调用父类构造。因为有些父类可能会初始化一些成员变…

基于SpringBoot的洗衣店管理系统

基于SpringBoot的洗衣店管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatis工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 登录界面 可视化展示 用户界面 管理员界面 摘要 洗衣店管理系统基于Spring Boot框…

c++对象拷贝与堆中的对象实例拷贝

文章目录 拷贝构造函数等于号运算符总结深拷贝堆中对象实例的拷贝错误的方法正确的拷贝方法使用多态技术拷贝实例拷贝构造函数 拷贝构造函数是C++中的一种特殊的构造函数,用于创建一个新对象,该对象是已存在的对象的副本。 拷贝构造函数的语法如下: class ClassName {// .…

IBM X3750 M4服务器主板故障全国协助处理

2023年12月31这天中午看到有位网络朋友加我&#xff0c;通过后该用户反馈说是有一台IBM System x3750 M4服务器有故障&#xff0c;现在无法开机。希望我们工程师协助他检测 分析 定位该故障问题原因和处理方案。 如上图所示&#xff1a;经过工程师与用户排查&#xff0c;发现该…

docker run命令

docker run命令 通过 docker run 命令创建一个新的容器。 Docker容器运行语法 docker run [OPTIONS] IMAGE [COMMAND] [ARG…] docker run常用选项 d, --detachfalse 指定容器运行于前台还是后台&#xff0c;默认为 false。 -i, --interactivefalse 打开 STDIN&#xff0c…

【linux】history命令显示时间的例子

在Linux中&#xff0c;你可以通过设置HISTTIMEFORMAT环境变量来显示命令的执行时间。这个环境变量定义了history命令中时间的显示格式。以下是设置和说明的步骤&#xff1a; 打开终端&#xff1a; 打开你的终端应用。 编辑配置文件&#xff1a; 使用文本编辑器&#xff08;如n…

SQL server 给列添加描述

添加列&#xff0c;列名为 sType。 use [DBName]; alter table [tbName] add sType int null default 0;添加新增列的描述&#xff1a; exec sys.sp_addextendedproperty name NMS_Description ,value 【该字段的描述】, level0typeNSCHEMA,level0nameNdbo, level1typeNTA…

pytorch学习笔记(七 )

池化类似压缩 最大池化-上采样 例如给一个3的话就会生成一个33的窗口&#xff08;生成相同的高和宽&#xff09;&#xff0c;给一个tuple就会给出一个相同的池化核。stride默认值就是核的大小 dilation 在卷积dialation设置之后每一个会和另外的差一个&#xff0c;空洞卷积 …

使用Pygame库来显示一个简单的窗口,并绘制一些基本的形状和文本

import pygame from pygame.locals import *# 初始化pygame库 pygame.init()# 创建窗口并设置大小和标题 screen_width 800 screen_height 600 screen pygame.display.set_mode((screen_width, screen_height)) pygame.display.set_caption("My Pygame")# 定义颜色…