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
相关文章:
Java面试题(java高级面试题)
线程池的核心线程数设置为多大比较合理? Worker线程在执行的过程中,有一部计算时间需要占用CPU,另一部分等待时间不需要占用CPU,通过量化分析,例如打日志进行统计,可以统计出整个Worker线程执行过程中这两…...
【MIdjourney】关于图像中人物视角的关键词
本篇仅是我个人在使用过程中的一些经验之谈,不代表一定是对的,如有任何问题欢迎在评论区指正,如有补充也欢迎在评论区留言。 1.全景镜头(panorama) 全景镜头是一种广角镜头,可以捕捉到比普通镜头更广阔的视野范围。全景镜头&…...
433. 最小基因变化(Queue使用ArrayList和LinkedList进行声明)
这道题可以看成一个24叉树。 因为基因序列长度固定为8,且每个位置的字母固定是AGCT,可以选择改变的只有3个字母,所以一次最多24种情况。 然后检查变化后的结果是否存在bank中(使用hashSet来存储),同时设置…...
MYSQL双主节点–更换ip
MYSQL双主节点–更换ip 一、更换双主节点ip 1.停止mysql服务 #安装了supervisor supervisorctl stop mysql #未安装 systemctl stop mysqld2.修改网卡配置信息 注:ens33是网卡名称,可能网卡不叫ens33 vi /etc/sysconfig/network-scripts/ifcfg-ens333…...
一文玩转Go语言中的面向对象编程~
温故而知新:什么是面向对象 面向对象(Object-Oriented)是一种计算机编程的方法和思想,它将程序中的数据(对象)和操作(方法)组织成一个个相互关联和交互的对象。对象是现实世界中的事…...
kylin集群反向代理(健康检查)
前面一篇文章提到了使用nginx来对kylin集群进行反向代理, kylin集群使用nginx反向代理-CSDN博客文章浏览阅读349次,点赞8次,收藏9次。由于是同一个集群的,元数据没有变化,所以,直接将原本的kylin使用scp的…...
【docker】centos7安装harbor
目录 零、前提一、下载离线包二、安装三、访问四、开机自启 零、前提 1.前提是已经安装了docker和docker-compose 一、下载离线包 1. csdn资源:harbor-offline-installer-v2.10.0.tgz 2. 百度云盘(提取码:ap3t):harbo…...
2024 年 1 月安全更新修补了 58 个漏洞(Android )
谷歌发布了针对 Android 平台 58 个漏洞的补丁,并修复了 Pixel 设备中的 3 个安全漏洞,拉开了 2024 年的序幕。 Android 2024 年 1 月更新的第一部分以 2024 年 1 月 1 日安全补丁级别发布在设备上,解决了框架和系统组件中的 10 个安全漏洞&…...
数据库系统概念 第七版 中文答案 第3章 SQL介绍
3.1 将以下查询使用SQL语言编写,使用大学数据库模式。 (我们建议您实际在数据库上运行这些查询,使用我们在书籍网站db-book.com上提供的示例数据。有关设置数据库和加载示例数据的说明,请参阅上述网站。) a. 查找计算机…...
什么是数通技术?以太网交换机在数通技术中的精要
什么是数通技术? 数通技术是指数字通信技术,它涵盖了数字信号处理、数据传输、网络通信等领域。通信工程师在数通技术中负责设计、建设和维护数字通信系统,以实现可靠、高效的信息传输。这涉及到数字信号的编解码、调制解调、数据压缩、网络…...
php 的数学常用函数
目录 1.常用列表 2.代码示例 1.常用列表 函数名描述输入输出abs()求绝对值数字绝对值数字ceil()进一法取整浮点数进一取整floor()舍去法求整浮点数直接舍去小数部分fmod()浮点数取余 两个浮点 数,x>y 浮点余数 pow()返回数的n次方基础数n次方乘方值round()浮点数四舍五入…...
Netty-Netty组件了解
EventLoop 和 EventLoopGroup 回想一下我们在 NIO 中是如何处理我们关心的事件的?在一个 while 循环中 select 出事 件,然后依次处理每种事件。我们可以把它称为事件循环,这就是 EventLoop 。 interface io.netty.channel. EventLoo…...
银行的压力测试如何进行?
为什么要进行压力风险测试? 压力风险测试的最终目的是测试银行在极度恶劣的市场环境中是否有足够的资本维持运转。 题主链接中的一级资本充足率(Tier 1 capital ratio) 亦即衡量标准,这个数字越大,表明银行资本约充裕,可以在停止…...
QtService、托盘程序使用
1、QtService 使用QtService实现Qt后台服务程序 用QT创建一个Windows Service以及踩到的若干坑 2、托盘程序 Qt之程序最小化托盘显示及操作 Qt系统托盘程序的实现...
使用Linux防火墙管理HTTP流量
在Linux系统中,防火墙是用于控制网络流量的重要工具。通过防火墙,你可以根据需要限制、过滤或允许特定的网络流量,从而提高系统的安全性。在处理HTTP流量时,防火墙可以帮助你实施访问控制、流量监控和其他安全策略。 iptables i…...
图鸟引入多套字体图标的方式教程
https://www.yuque.com/tuniao/qunyou/tgfvpg ①上传icon,生成iconfont.css 将css文件放这里 app.vue全局引入 适当改造iconfont.css的写法,方便调用...
在openEuler环境下快速编译GreatSQL RPM包
在上一篇中,已经介绍了在CentOS环境下编译GreatSQL RPM包的过程,本文再介绍如何在openEuler环境下编译GreatSQL RPM包。 运行环境是docker中的openEuler 22.03 x86_64: $ docker -v Docker version 20.10.10, build b485636$ docker run -itd…...
C语言基础语法跟练 day3
31、不使用累计乘法的基础上,通过移位运算(<<)实现2的n次方的计算。 #include <stdio.h> int main() {int i 0;scanf("%d",&i);printf("%d",1<<i);return 0; } 32、问题:一年约有 3.…...
【控制篇 / 策略】(7.4) ❀ 01. IP地理位置数据库和地理地址对象 ❀ FortiGate 防火墙
【简介】在很多使用环境下,我们需要对指定国家的IP地址进行允许或禁止访问操作,例如只允许访问国内IP。以前只能手动添加IP地址对象到地址组,繁杂且效率低下,Fortinet提供了基于地理位置的IP库,就可以解决这个问题。 I…...
NX二次开发点通过云配准获取相同体
先找到体的参考方向(这个参考方向对于相同体重合之后是相同的),这个时候我们的思路是三个不共线的点确定一个坐标系,然后和绝对方向求转换矩阵。然后获取体的所有边的几何中心,把这些点通过转换矩阵转换之后存起来&…...
5.4 Android BCC环境搭建(eadb版 下)
四,BCC使用示例 这里以tcplife为例,来显示TCP会话的生命周期和吞吐量统计。 4.1 进入/bcc/tools目录 root@localhost:/bcc# cd tools/ root@localhost:/bcc/tools# ls CMakeLists.txt javacalls.sh rubystat_example.txt argdist.py javacalls_e…...
【AI视野·今日Robot 机器人论文速览 第七十四期】Wed, 10 Jan 2024
AI视野今日CS.Robotics 机器人学论文速览 Wed, 10 Jan 2024 Totally 17 papers 👉上期速览✈更多精彩请移步主页 Daily Robotics Papers Hold em and Fold em: Towards Human-scale, Feedback-Controlled Soft Origami Robots Authors Immanuel Ampomah Mensah, Je…...
服务端性能测试——性能测试工具JMeter-L1
第一遍没学懂,后续文章会更新~ 目录: 1.JMeter介绍与安装Meter简介JMeter安装2.JMeter的运行JMeter运行、界面功能简介3.使用代理服务器录制请求录制压测脚本(一)Web端脚本录制方法4.测试计划5.线程组6.控制器7.JMeter采样器/取…...
C# OpenCvSharp DNN FreeYOLO 目标检测
目录 效果 模型信息 项目 代码 下载 C# OpenCvSharp DNN FreeYOLO 目标检测 效果 模型信息 Inputs ------------------------- name:input tensor:Float[1, 3, 192, 320] --------------------------------------------------------------- Outp…...
U盘启动安装win11遇到缺少计算机所需的介质驱动程序问题
一、使用U盘制作启动盘遇到问题 下载了windows原版镜像,验证了md5,确保文件没有损坏。使用ultroiso制作u盘启动盘,开始安装后出现下图的报错: 在网上搜索解决方案,主要有以下几种: 安装的时候,…...
正则表达式、文件访问(Python实现)
一、主要目的: 1.了解正则表达式的基本概念和处理过程。 2.掌握使用正则表达式模块 Re 进行字符串处理的方法。 3.了解文件的基本概念和类型。 4.掌握在 Python 中访问文本文件的方法和步骤。 5.熟悉在 Python 中访问二进制文件的方法和步骤。 二、主要内容和结…...
ES高级查询
ES中提供了一种强大的检索数据方式,这种检索方式称为Query DSL,这种方式的丰富查询语法让ES检索变得更强大,更简洁。 1.常见查询 1.1查询所有[match_all] match_all关键字:返回索引中的全部文档。 GET /products/_search { &…...
RT-Thread入门笔记6-空闲线程及两个常用的钩子函数
空闲线程 空闲线程是一个比较特殊的系统线程,它具备最低的优先级。当系统中无其他就绪线程可运行时,调度器将调度到空闲线程。 空闲线程还负责一些系统资源回收以及将一些处于关闭态的线程从线程调度列表中移除的动作 空闲线程在形式上是一个无线循环结…...
网络正常运行时间监控工具
正常运行时间是衡量系统可靠性的指标,表示为机器工作和可用时间的百分比。当提到 IT 网络时,正常运行时间是衡量网络设备、网站和其他服务的可用性的指标。网络正常运行时间通常以百分位数来衡量,例如“五个 9”,这意味着系统在 9…...
DEJA_VU3D - Cesium功能集 之 112-获取圆节点(1)
前言 编写这个专栏主要目的是对工作之中基于Cesium实现过的功能进行整合,有自己琢磨实现的,也有参考其他大神后整理实现的,初步算了算现在有差不多实现小140个左右的功能,后续也会不断的追加,所以暂时打算一周2-3更的样子来更新本专栏(每篇博文都会奉上完整demo的源代码…...
成都网页设计与网站建设/新闻发布会新闻通稿
给定一个链表,判断链表中是否有环。 进阶: 你能否不使用额外空间解决此题? /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ bool hasCycle(struct ListNode *head) {//定义…...
公司网站建设管理意见/社交网络的推广方法有哪些
算法比赛中,经常会出现 2D 地图,一般的描述如下: H W s11 s12 ⋯ s1W s21 s22 ⋯ s2W ⋮ sH1 sH2 ⋯ sHW 我们可以看到有两个关键参数 H 和 W。H 表示列,W 表示行。 其中 W 表示水平方向有多少个点,H 表示垂直方向有…...
网站代更新/百度热线电话
从氟化工行业产业链看,氢氟酸是氟化工产业链的起点,而萤石是制取氢氟酸最经济、最关键的矿物原料。氟化工行业上游主要分成萤石、甲烷氯化物、液氯和电石,其中萤石矿行业的龙头企业有亿立萤石矿、泰华萤石矿、金石资源和敖汉萤石矿。 由于氟…...
凡科网怎么样可靠吗/sem 优化价格
整合ITIL&SOA,实践IT管理。Future S很有意思地将这两个看似不相干的概念放在一起。印象中收到邀请时对方只是提到SOA的概念。虽然现场的主题有些意外,但是也正好给了我一个了解二者关系的机会。 ITIL与SOA的关系是什么?是否存在相互依存的关系? -…...
新建网站如何公安备案/搜索最多的关键词的排名
尽管非常喜欢Windows,但微软的首席执行官史蒂夫鲍尔默表示,微软将使企业能够更简单地管理更多类型的计算机━━其中包括运行Linux 的计算机。 美国太平洋时区时间本周三,鲍尔默表示,微软已经听取了客户的请求:在Operat…...
怎么做简单的微信浏览的网站/成都最新数据消息
http://www.52c51.com/article/63.html市场上盛行的电子高压灭蚊手拍(简称“电蚊拍”),以其实用、灭蚊效果好、无化学污染、安全卫生等优点,普遍受到人们的欢迎。其实这种电灭蚊拍线路简单,具有一定电子制作能力的青少…...