达美乐面试(部分)(未完全解析)

news2024/11/26 9:56:40
  • Java如何保证非线程安全的数据结构(比如HashMap)的原子性?读多写少时用哪种锁好? A: 方法1:CAS等乐观锁机制,方法2:如果读多写少,可以使用读写锁(ReentrantReadWriteLock)
  • 如何判断线上程序发生死锁?参考答案:jstack。Q:jstack具体如何操作和分析?
    实操答案(系统Windows10, 本文基本参考1):
    Java代码:
public class DeadLockCase {
    public static void main(String[] args){
        Object o1 = new Object();
        Object o2 = new Object();
        new Thread(new SyncThread(o1, o2),  "t1").start();
        new Thread(new SyncThread(o2, o1),  "t2").start();
    }

    static class SyncThread implements Runnable {
        private Object lock1;
        private Object lock2;

        public SyncThread(Object o1, Object o2){
            this.lock1 = o1;
            this.lock2 = o2;
        }

        @Override
        public void run() {
            String name = Thread.currentThread().getName();
            System.out.println(name + " acquiring lock on " + lock1);
            synchronized (lock1) {
                System.out.println(name + " acquired lock on " + lock1);
                work();
                System.out.println(name + " acquiring lock on " + lock2);
                synchronized (lock2) {
                    System.out.println(name + " acquired lock on " + lock2);
                    work();
                }
                System.out.println(name + " released lock on " + lock2);
            }
            System.out.println(name + " released lock on " + lock1);
        }

        private void work() {
            try {
                //模拟死锁的关键,保证线程1只能获取一个锁,而线程2能获取到另一个锁
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
  1. 用jps命令查看当前系统中所有正在运行的 Java 进程,以及这些进程的 PID 等信息:jps -l:
    在这里插入图片描述
  2. jstack <pid>命令可以输出对应Java进程的线程快照信息:
    运行jstack 10524 后得到的部分关键结果的截屏如下两图。可以看到各线程的状态、线程已占用的锁和正申请的锁、以及死锁信息。
    在这里插入图片描述
    。。。
    在这里插入图片描述
  • 如何解决RabbitMQ重复消费的问题

  • spring有个注解@Async能实现异步处理,有用过吗?Answer by new bing: 是的,@Async注解可以让Spring中的方法异步执行。使用该注解后,Spring会将该方法放到一个线程池中执行,而不是在调用该方法的线程中执行。这样可以避免阻塞调用线程,提高系统的并发能力。

  • 起一个线程耗多少内存,可以通过JVM的什么参数来控制吗? Answer by new bing: 可以使用-Xss参数来设置每个线程的栈大小。默认情况下,每条线程的栈大小为1M。

  • Spring事务传播机制。我有一个业务类,它有两个方法,方法A是REQUIRED,方法B是REQUIRES_NEW,方法A调用方法B,外部调用方法A,会启动几个事务?Q:如果两个方法不在同一个类呢?

  • Redis List底层的数据结构是什么? 参考答案:

    • Redis3.2之前(此段参考new bing以及2,3),Redis List底层的数据结构有两种:压缩列表(ziplist)和双向链表(linkedlist). Redis在创建新的List时,会优先考虑使用压缩列表. 在满足条件(1,试图往列表添加一个字符串值,这个字符串的长度超过某个值; 或者2,ziplist 包含的节点超过某个值)时,才从压缩列表实现转换到双向链表实现。

ziplist 是一个特殊的双向链表
特殊之处在于:没有维护双向指针:prev next;而是存储上一个 entry的长度和当前entry的长度,通过长度推算下一个元素在什么地方。

    • Redis3.2版本开始对列表数据结构进行了改造,使用 quicklist 代替了 ziplist 和 linkedlist.
      quicklist 实际上是 zipList 和 linkedList 的混合体,它将 linkedList 按段切分,每一段使用 zipList 来紧凑存储,多个 zipList 之间使用双向指针串接起来。4
  • Redis如果采用AOF持久化方式,每隔5秒持久化一次,那它持久化时会影响其它读写线程吗?会不会阻塞主线程?参考答案5,6:AOF采用everysec时,Redis使用另一条线程每秒执行fsync同步硬盘。主线程在执行时候如果发现上一次的fsync操作还没有返回(对比上一次的fsync操作时间,大于2秒),主线程就会阻塞。 如图所示:
    在这里插入图片描述

当系统硬盘资源繁忙时,会造成Redis主线程阻塞

简单来说,如果系统fsync缓慢,将会导致Redis主线程阻塞。

Q:Redis里存了几百个Key,遍历读取它们的值可能需要一两秒,有没有效率更高的方法?参考答案:

  1. 方法1,mget;
  2. 方法2,pipeline。

值得注意的是:

  1. 性能上7,8: MGET 》PIPELINE》GET
  2. mget等命令可以保证原子性,pipeline 无法保证9
  3. 与 mget、mset 相同的是,pipeline 操作也无法在原生的集群模式下工作9

Q:使用redis pipeline有什么需要注意的?参考答案(主要参考new bing):在使用Redis Pipeline时,需要注意以下几点:

  1. 每次Pipeline携带数量不推荐过大,否则会影响网络性能,也会消耗更多redis的内存占用。
  2. Pipeline每次只能作用在一个Redis节点上(就是上文提到的pipeline无法在原生的集群模式下工作)。

  1. jstack分析线程快照的三步曲及CPU占用过高和死锁问题的排查-CSDN博客 ↩︎

  2. Redis官网:The ziplist representation ↩︎

  3. 知乎:Redis列表list 底层原理 ↩︎

  4. Redis数据结构——快速列表(quicklist) ↩︎

  5. Redis 分享-AOF的阻塞简单记录 ↩︎

  6. Redis AOF 追加阻塞问题分析处理 ↩︎

  7. Performance benchmarks - redis get vs mget ↩︎

  8. Sharing: Redis get pipeline vs mget ↩︎

  9. 如何通过批量操作提升 redis 性能 ↩︎ ↩︎

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

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

相关文章

【MySQL 数据库】3、多表查询

目录 一、多表关系二、多表查询三、内连接四、外连接五、自连接六、联合查询七、什么是子查询八、标量子查询九、列子查询十、行子查询十一、表子查询十二、多表查询练习题 一、多表关系 项目开发中&#xff0c;在进行数据库表结构设计时&#xff0c;会根据业务需求及业务模块…

移动端H5页面PDF操作及预览

环境&#xff1a;nodejs 适配&#xff1a;移动端主流浏览器支持企业微信低版本 插件&#xff1a;pdfjs-dist 2.6.347 方案一 本地构建 拉取项目&#xff1a; git clone https://github.com/mozilla/pdfjs-dist.git 全局安装gulp npm install -g gulp-cli 安装项目依赖 np…

chatgpt赋能python:Python中的s.len()方法介绍

Python中的s.len()方法介绍 Python中有各种字符串处理方法&#xff0c;其中s.len()方法是一个重要的方法之一。s.len()返回一个字符串s的长度。这是一个非常基本的方法&#xff0c;但是在很多情况下都会被使用。本文将介绍Python中s.len()方法的一些用法和注意事项。 s.len()…

Redis持久化及集群

Redis可以通过将数据保存在磁盘里实现持久化功能, 以防止宕机导致的数据大量丢失.但是持久化只能保证在磁盘不损坏的情况下, 长时间保存数据, 如果一旦磁盘损坏, 数据仍然会丢失. 为了解决这个问题, 主从复制应允而生. 主从复制是Redis集群中的一总, 其中一个Redis做主, 其他R…

C++数据结构:线性顺序表(数组)

文章目录 前言一、vector简介二、泛型编程自定义数组结构1、定义类2、删除、读取元素和首尾指针3、修改元素、获取元素数量、和插入 总结 前言 将一个线性表存储到计算机中&#xff0c;把线性表的结点按逻辑顺序依次存放到一组地址连续的存储单元里&#xff0c;用这种方法存储…

nodejs+vue+elementui个人心情日志博客网站系统5ht83

语言 node.js 框架&#xff1a;Express 前端:Vue.js 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;VScode 前端vueelementui,博客管理系统模块 该模块是博客管理系统中的重要模块&#xff0c;它也是博客管理系统的主模块&#xff0c;该模块的…

从 WebKit 看浏览器内核架构

浏览器常见的浏览器内核有&#xff1a;Blink、WebKit、Gecko、Trident 等&#xff0c;目前 WebKit 内核占据了非常大的的市场&#xff0c;包括 Chrome、Safari、安卓浏览器等市面上的主流浏览器&#xff0c;都使用了 WebKit 内核。 从 WebKit 看浏览器内核架构 既然 WebKit 这么…

lwip的arp协议的意义和更新时机

ARP协议存在的目的 ARP&#xff08;Address Resolution Protocol&#xff09;协议是 TCP/IP 协议族中的一个协议&#xff0c;它的主要目的是将 IP 地址解析为 MAC&#xff08;Media Access Control&#xff09;地址&#xff0c;以便在局域网中进行通信。 具体而言&#xff0c…

## 如何顺序处理设备上报的数据

1. 引言 随着智能技术的发展&#xff0c;市场上出现了很多的智能设备&#xff0c;其具有连接网络的能力。用户可以实现远程控制&#xff0c;并且设备也可上报自己的状态&#xff0c;实现云端对设备的运行情况分析。在某些情况下需要保证设备上报状态的有序性&#xff0c;例如传…

Unity之ShaderGraph 节点介绍 Input输入节点

目录 Input&#xff08;输入&#xff09;  1、Basic&#xff08;基本&#xff09;   1) Boolean&#xff08;布尔&#xff09;   2) Color&#xff08;颜色&#xff09;   3) Constant&#xff08;常量&#xff09;   4) Integer&#xff08;整型&#xff09;   5)…

weblogic CVE-2023-21839 复现

影响版本 Weblogic 12.2.1.3.0 Weblogic 12.2.1.4.0 Weblogic 14.1.1.0.0 这里是用的docker下载的vulhub的CVE-2023-21839 靶机和攻击机都是192.168.85.131 docker 启动环境 ocker-compose up -d 然后看一下说明书 vim README.zh-cn.md 让你访问ip:7001/console 好&a…

chatgpt赋能python:PythonWoody:网站优化工具的首选

Python Woody: 网站优化工具的首选 在当今数字化时代&#xff0c;网站被认为是企业的门面。 然而&#xff0c;这只是建立网络存在的起点。 在许多情况下&#xff0c;优化网站并提高其排名对于企业的成功至关重要。 在这里&#xff0c;Python Woody成为了网站优化工具的首选。 …

LVGL-最新版本及其版本定义标准

lvgl的最新版本是9.0.0&#xff0c;处于开发分支中。 稳定版本是8.3.0. 建议一般开发使用稳定版8.3.0. .\lvgl.h定义了当前版本 /*************************** CURRENT VERSION OF LVGL ***************************/ #define LVGL_VERSION_MAJOR 8 #define LVGL_VERSION_MINO…

《JavaEE》HTTPS

文章目录 HTTPS起源HTTPS对称加密非对称加密两者的区别 HTTPS的安全问题使用对称加密正常交互黑客入侵解决方案 非对称加密引入非对称加密后的流程 中间人攻击黑客的入侵方案加入后的流程解决方案黑客再次加注解决方案 ​&#x1f451;作者主页&#xff1a;Java冰激凌 &#x1…

ChatGPT突然上线APP!iPhone可用、速度更快,GPT-4用量限制疑似取消

新建了一个网站 ChatGPT人工智能中文站 - ChatGPT人工智能中文站http://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT免费镜像站 OpenAIChatGPT正式推出iOS应用程序的官方公告突然发布。 立即在苹果商店的免费列表中排名第二&#xff0c;在效率列表中排名第一。 &am…

VScode+LaTeX 配置时遇到的一些问题

文章目录 VScodeLaTeX 配置时遇到的一些问题1. json 配置文件总览2. 使用 SumatraPDF 作为 pdf 阅读器时的双向跳转3. 选择使用 VScode 内置的 tab 打开 pdf 或者使用外部 SumatraPDF 打开4. 关于 LaTeX Workshop 插件的安装 VScodeLaTeX 配置时遇到的一些问题 1. json 配置文…

『MySQL 实战 45 讲』17 - 如何正确地显示随机消息?(随机抽取 3 个词)

如何正确地显示随机消息&#xff1f;&#xff08;随机抽取 3 个词&#xff09; 需求&#xff1a;从用户的英语单词表中&#xff0c;随机选择三个单词&#xff0c;创表和插入数据如下&#xff1a; # 建表 CREATE TABLE words (id INT(11) NOT NULL AUTO_INCREMENT,word VARCHA…

Chatgpt版本的opencv安装教程

文章目录 前言一、安装opencv方法一二、安装opencv方法二 前言 最近刚买了台RTX 3070的电脑&#xff0c;顺手刷了个ubuntu系统专门玩Carla&#xff0c;为了方便查资料&#xff0c;也顺手搭了浏览chatgpt的环境&#xff0c;用的clash&#xff0c;还挺好用的。然后刚好在看Carla…

(转载)MATLAB智能算法30个案例分析(4)——基于遗传算法的TSP算法

1 理论基础 TSP(traveling salesman problem,旅行商问题)是典型的NP完全问题&#xff0c;即其最坏情况下的时间复杂度随着问题规模的增大按指数方式增长&#xff0c;到目前为止还未找到一个多项式时间的有效算法。 TSP问题可描述为&#xff1a;已知n个城市相互之间的距离&…