面试题30天打卡-day14

news2025/1/12 23:12:23

1、线程的生命周期是什么,线程有几种状态,什么是上下文切换?

image-20230305101810104

线程通常有五种状态:创建,就绪,运行、阻塞和死亡状态。

  1. 新建状态(New):新创建了一个线程对象。
  2. 就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。
  3. 运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。
  4. 阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。
  5. 死亡状态(Dead):线程执行完了或者因异常退出了run方法,该线程结束生命周期。

其中阻塞的情况又分为三种:
(1)、等待阻塞:运行的线程执行wait方法,该线程会释放占用的所有资源,JVM会把该线程放入“等待池”中。进入这个状态后,是不能自动唤醒的,必须依靠其他线程调用notify或notifyAll方法才能被唤醒,wait是object类的方法

(2)、同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入“锁池”中。

(3)、其他阻塞:运行的线程执行sleep或join方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep状态超时、join等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。sleep是Thread类的方法。

2、什么是网关,网关有哪些作用?

网关英文名称为Gateway,又称网间连接器、协议转换器。它可以连接两个或者多个不同的网络,从而实现网络之间的通信和数据交换。网关通常具有路由、协议转换、安全控制、流量控制等多种功能。

网关既可以用于广域网互连,也可以用于局域网互连。 网关是一种充当转换重任的计算机系统或设备。使用在不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器,与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。

网关的作用主要包括以下几个方面:

  1. 路由转发:网关可以根据不同的目的地址,将数据包转发到不同的目标网络或者主机。
  2. 协议转换:不同的网络可能采用不同的协议,网关可以实现不同协议之间的转换,从而实现不同网络之间的互通。
  3. 安全控制:网关可以实现安全控制,如访问控制、数据加密、防火墙等,保障网络的安全。
  4. 流量控制:网关可以对网络流量进行控制和限制,避免网络拥堵和资源浪费。
  5. 缓存和负载均衡:网关可以缓存数据,提高数据访问速度,同时也可以实现负载均衡,分摊服务器负载。

网关可以实现不同网络之间的互通互联,保障网络的安全和稳定。常用的网关包括路由器、网络服务器、防火墙、负载均衡等。

3、如何使用 Redis 实现一个排行榜?

使用 Redis 的 Zset 数据结构实现排行榜可以分为以下几个步骤:

  1. 连接 Redis 数据库:使用 Redis 客户端连接到 Redis 数据库。
  2. 创建排行榜:使用 Redis 的 Zadd 命令创建一个有序集合作为排行榜。
  3. 添加成员:使用 Redis 的 Zadd 命令向排行榜中添加成员,每个成员对应一个分值。
  4. 获取排行榜:使用 Redis 的 Zrevrange 命令获取排行榜中的成员,按照分值从高到低排序。
  5. 获取成员排名:使用 Redis 的 Zrevrank 命令获取某个成员在排行榜中的排名。
  6. 更新成员分值:使用 Redis 的 Zadd 命令更新某个成员的分值。
  7. 删除成员:使用 Redis 的 Zrem 命令删除某个成员。
import org.redisson.Redisson;
import org.redisson.api.RScoredSortedSet;
import org.redisson.api.RedissonClient;
import org.redisson.client.codec.StringCodec;
import org.redisson.config.Config;

public class RedisRanking {

    private static RedissonClient redissonClient;

    // 初始化 Redisson 客户端
    static {
        Config config = new Config();
        config.useSingleServer()
                .setAddress("redis://localhost:6379")
                .setDatabase(0);
        redissonClient = Redisson.create(config);
    }

    // 添加成员到排行榜
    public static void addMember(String member, double score) {
        RScoredSortedSet<String> ranking = redissonClient.getScoredSortedSet("ranking", StringCodec.INSTANCE);
        ranking.add(score, member);
    }

    // 获取排行榜
    public static void getRanking() {
        RScoredSortedSet<String> ranking = redissonClient.getScoredSortedSet("ranking", StringCodec.INSTANCE);
        int rank = 1;
        for (String member : ranking.descendingIterator()) {
            double score = ranking.getScore(member);
            System.out.printf("%d\t%s\t%f\n", rank++, member, score);
        }
    }

    // 获取成员排名
    public static void getRank(String member) {
        RScoredSortedSet<String> ranking = redissonClient.getScoredSortedSet("ranking", StringCodec.INSTANCE);
        long rank = ranking.revRank(member);
        double score = ranking.getScore(member);
        System.out.printf("%s\t%d\t%f\n", member, rank + 1, score);
    }

    // 更新成员分值
    public static void updateScore(String member, double score) {
        RScoredSortedSet<String> ranking = redissonClient.getScoredSortedSet("ranking", StringCodec.INSTANCE);
        ranking.addScore(member, score);
    }

    // 删除成员
    public static void removeMember(String member) {
        RScoredSortedSet<String> ranking = redissonClient.getScoredSortedSet("ranking", StringCodec.INSTANCE);
        ranking.remove(member);
    }

    // 关闭 Redisson 客户端
    public static void close() {
        redissonClient.shutdown();
    }

    // 测试
    public static void main(String[] args) {
        addMember("Tom", 90);
        addMember("Jack", 80);
        addMember("Lily", 95);
        addMember("Lucy", 85);
        getRanking();
        getRank("Tom");
        updateScore("Tom", 95);
        removeMember("Lucy");
        getRanking();
        close();
    }
}

我们首先使用 Redisson 客户端初始化 Redis 连接,然后定义了几个操作排行榜的方法,包括添加成员、获取排行榜、获取成员排名、更新成员分值和删除成员。这些方法分别对应了 Redisson 的 RScoredSortedSet 接口的不同方法,使用 Redisson 提供的方法可以非常方便地操作 Redis 有序集合。

在测试代码中,我们添加了几个成员到排行榜中,并测试了获取排行榜、获取成员排名

了 Redisson 的 RScoredSortedSet 接口的不同方法,使用 Redisson 提供的方法可以非常方便地操作 Redis 有序集合。

在测试代码中,我们添加了几个成员到排行榜中,并测试了获取排行榜、获取成员排名

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

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

相关文章

超赞的实用前端社区精选?

转载 作者&#xff1a;黑马程序员前端 链接&#xff1a;https://www.zhihu.com/question/39503897/answer/2998752442 社区精选 | 好的前端社区可以根据其特点和领域进行分类整理&#xff1a; 1. 问答社区 Stack Overflow&#xff08;https://stackoverflow.com/&#xf…

【一起撸个DL框架】3 前向传播

CSDN个人主页&#xff1a;清风莫追 欢迎关注本专栏&#xff1a;《一起撸个DL框架》 文章目录 3 前向传播&#x1f95d;3.1 前情提要3.2 前向传播&#xff1a;递归的forward方法3.3 再添乘法节点&#xff1a;搭建函数y2x13.4 小结 3 前向传播&#x1f95d; 3.1 前情提要 上一篇…

vue - 实现对div的拖动功能

实现对div的拖动功能&#xff0c;需要先要知道以下的一些原生事件和方法&#xff1b; 1&#xff0c;事件: 方法描述onmousedown鼠标按钮被按下onmousemove鼠标被移动onmouseup鼠标按键被松开 2&#xff0c;方法: 方法描述event.clientX返回当事件被触发时鼠标指针相对于浏览…

基于elementplus 实现多级表格 最后一级展示图片

想要实现的效果 总共四级 前三级是表格 第四级使用图片展示&#xff1b; 看了一下官网 计划使用官网的树形结构&#xff0c; 但是发现并不能满足最后一个是图片形式的展示 最后利用了表格的expand&#xff1b; 在过程中主要需要解决的问题有&#xff1a;vue3 递归使用组件&am…

JavaScript题解2652.倍数求和|容斥原理

解题思路 在JavaScript中计算7/3*3&#xff0c;结果是7&#xff0c;而不是6。这是因为JavaScript中除法运算符&#xff08;/&#xff09;得到的结果是一个浮点数&#xff0c;而不是一个整数。 具体来说&#xff0c;7/3得到的结果是2.3333…&#xff0c;然后再乘以3得到7.0000…

辞了外包,上岸字节我落泪了,400多个日夜没人知道我付出了多少....

前言&#xff1a; 没有绝对的天才&#xff0c;只有持续不断的付出。对于我们每一个平凡人来说&#xff0c;改变命运只能依靠努力幸运&#xff0c;但如果你不够幸运&#xff0c;那就只能拉高努力的占比。 2023年3月&#xff0c;我有幸成为了字节跳动的一名自动化测试工程师&am…

nacos搭建

1、查询对应的nacos版本 在pom.xml文件中&#xff0c;按住ctrl单击 spring-cloud-alibaba-dependencies 跳转到对应的页面&#xff0c;搜索nacos 2、下载软件nacos 官网&#xff1a;https://nacos.io/zh-cn/ 地址 https://github.com/alibaba/nacos/releases 这里我们根据我…

【架构】如何在微服务下保证事务的一致性

文章目录 背景一、事务的介绍1.1 事务1.1.1 事务的产生1.1.2 事务的概念1.1.3 事务的特性1.1.4 Mysql隔离级别1.1.5 启动事务 1.2 本地事务1.2.1 本地事务定义1.2.2 本地事务的缺点 二、分布式事务定义三、分布式事务-强一致性解决方案3.1 二阶段提交协议3.2 三阶段提交协议 四…

centos7 nbd 挂在qcow2或qcow,raw,虚机镜像,virsh,virt,使用qemu-nbd挂载qcow2镜像文件

[rootlocalhost linux-3.10.63]# cat ../../../readme https://blog.51cto.com/mshxuyi/5857760 https://blog.csdn.net/weixin_42097108/article/details/111414501 错误解决 &#xff11;、nbd 模块未安装 登录后复制 [rootlocalhost ~]# modprobe nbd modprobe: FATAL…

ElasticJob-Lite 3.x 集成springBoot 实战 (一次性作业、定时作业)

文章目录 前言ElasticJob-Lite 3.x 集成springBoot 实战 (一次性作业、定时作业)1. ElasticJob简介2. ElasticJob-Lite 是什么3. 功能列表4. 所需依赖包5. 定时作业配置5.1. 作业:5.2. yml配置:5.3. 测试 6. 一次性任务配置、并手动触发6.1. 作业:6.2. yml配置:6.3. 测试 7. 其…

洞见数字时代的创新原力,数云原力大会暨2023TECH第五届数字中国技术年会开幕

4月25日&#xff0c;神州控股、神州信息、神州数码集团共同主办的数云原力大会暨2023TECH第五届数字中国技术年会开幕。开幕式上&#xff0c;数百位投身并关注数字技术、数字产业发展的学者、技术专家、从业者、行业用户齐聚一堂&#xff0c;围绕云原生、数字原生、大数据、金融…

2.龙芯2k1000 linux3.10内核编译过程

龙芯2k1000 linux3.10内核编译过程 文章目录 龙芯2k1000 linux3.10内核编译过程&#xff08;一&#xff09;、在Ubuntu环境下载并配置交叉编译链&#xff08;二&#xff09;、下载linux3.10内核源码&#xff08;三&#xff09;、使用menuconfig配置内核&#xff08;四&#xff…

【react从入门到精通】深入理解react生命周期这一篇就够了

文章目录 前言React的生命周期是什么React v16.0前的生命周期组件初始化(initialization)阶段组件挂载(Mounting)阶段组件更新(update)阶段组件销毁阶段 React v16.4 的生命周期总结写在最后 前言 在上一篇文章《react入门这一篇就够了》中我们已经掌握了React的基本知识。通过…

XXE原理利用防御

XXE原理利用防御 一、XML定义 1、定义 XML用于标记电子文件使其具有结构性的标记语言&#xff0c;可以用来标记数据、定义数据类型&#xff0c;是一种允许用户对自己的标记语言进行定义的源语言。 2、原因 应用程序解析XML时&#xff0c;没有过滤外部实体的加载&#xff0…

多用户商城平台开发需要注意哪些问题?

电子商务的快速发展&#xff0c;越来越多的企业选择借助第三方商城软件开设自己的多用户商城平台&#xff0c;以此来帮助他们增加销售额和提高品牌知名度&#xff0c;如目前市面上常见的shop、shopnc等第三方商城软件。但是&#xff0c;多用户商城平台的开发并不是一件容易的事…

QFIELD-GIS工具版如何编辑数据

一、 简介 在现场进行GIS数据对比、采集、编辑是移动GIS App的一项非常实用的功能。能够使用户更加及时准确的收集到第一手资料&#xff0c;并在现场第一时间进行编辑和完善。同时配合遥感、GPS或移动设备自带各类传感器&#xff0c;再辅助以其它矢量参考数据可以对已有成果…

如何利用社交媒体来做Etsy店铺推广?

利用社交媒体是 Etsy 店铺推广的重要一环。通过创作优秀的社交媒体内容、定期发布内容、与关注者互动和利用广告&#xff0c;你可以吸引更多的潜在客户&#xff0c;增加你的店铺销售量和品牌影响力。以下是详细说明如何利用社交媒体来做店铺推广&#xff1a; 选择适合的社交媒体…

FinClip 现已支持云开发

在开发一个小程序时&#xff0c;除了考虑界面功能逻辑外&#xff0c;还需要后端的数据支持&#xff0c;开发者需要提前考虑服务器、存储和数据库等相关需求的支持能力&#xff0c;此外还可能需要花费时间精力在部署应用、和依赖服务的建设上。 因此&#xff0c;腾讯小程序为了实…

NetMQ | 实现TCP的发布订阅模式

NetMQ | 实现TCP的发布订阅模式 文章目录 NetMQ | 实现TCP的发布订阅模式前言什么是发布订阅模式&#xff1f;实现步骤步骤1&#xff1a;创建Publisher和Subscriber步骤2&#xff1a;绑定和连接步骤3&#xff1a;添加订阅步骤4&#xff1a;发布消息步骤5&#xff1a;接收消息 示…

构建一体化数字营销平台,助力医药企业实现销售转化能级大幅跃迁 | 案例研究

今日分享的案例企业成立于1994年&#xff0c;主要从事心血管、消化领域的药品生产、加工、分装和销售&#xff0c;其中心血管相关药品广泛畅销至世界很多个国家。目前&#xff0c;该医药公司销售网络遍及全国80余个城市&#xff0c;以专业人员组成的营业队伍&#xff0c;致力于…