面试题30天打卡-day14

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 有序集合。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

controlnet1.1模型和预处理器功能详解(各预处理器出稿对比及对应模型说明)

ControlNet 1.1 与 ControlNet 1.0 具有完全相同的体系结构,ControlNet 1.1 包括所有以前的模型&#xff0c;具有改进的稳健性和结果质量&#xff0c;且增加并细化了多个模型。 命名规范 项目名版本号标识基础模型版本功能名文件后缀名 control 官方总是以control为项目名&…

Go | 一分钟掌握Go | 9 - 通道

作者&#xff1a;Mars酱 声明&#xff1a;本文章由Mars酱编写&#xff0c;部分内容来源于网络&#xff0c;如有疑问请联系本人。 转载&#xff1a;欢迎转载&#xff0c;转载前先请联系我&#xff01; 前言 在Java中&#xff0c;多线程之间的通信方式有哪些&#xff1f;记得吗&…

【云计算•云原生】3.一小时熟练掌握docker容器

文章目录 docker简介ubuntu下安装dockerkali下安装dockerdocker基本命令docker搭建mysql、nginx、redis容器/镜像打包搭建私有镜像仓库docker网络管理Dockerfile文件docker-compose.yml示例&#xff1a;搭建lamp docker简介 docker是一个开源的应用容器引擎&#xff0c;可以让…

缓存优化----SpringCache

spring cache spring Cache介绍 spring cache是一个框架&#xff0c;实现了基于注解的缓存功能&#xff0c;只需要简单地加一个注解&#xff0c;就能实现缓存功能。 Spring cache提供了一层抽象&#xff0c;底层可以切换不同的cache实现。具体就是通过CacheManager接口来统一不…

解决方案丨票据集中在集团总部处理,如何解决实物票据管理难?

目前越来越多的企业都成立了财务共享中心&#xff0c;通过统一财务中心可以进行集中式、标准化、统一化管理&#xff0c;提升财务运营水平与效率、降低企业的整体运作成本、集团战略发展支撑。 如何确保财务共享中心稳健和高效运营&#xff0c;是很多企业建立共享中心后面的难…

7.参数校验

在controller和service进行前端传参校验&#xff0c;保证存到数据库的数据是正确的 1.引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>这里无需…

《程序员面试金典(第6版)》面试题 16.05. 阶乘尾数

题目描述 设计一个算法&#xff0c;算出 n 阶乘有多少个尾随零。 示例 1: 输入: 3输出: 0解释: 3! 6, 尾数中没有零。 示例 2: 输入: 5输出: 1解释: 5! 120, 尾数中有 1 个零 说明: 你算法的时间复杂度应为 O(log n) 。 解题思路与代码 这道题&#xff0c;乍一看很简单…

米哈游新游正式公测!还没上线就已经“爆了”!

米哈游制作的3D冒险主题回合制策略游戏《崩坏&#xff1a;星穹铁道》&#xff0c;在2023年4月26日正式开启全平台公测。 该游戏在2021年10月27日曾开启过“始发测试”&#xff0c;后继续沉淀了两年才正式开启公测。 B站的ACG内容生态丰富&#xff0c;其中游戏相关内容当数米哈…

锂溶液净化和提纯

锂离子电池是一种充电电池&#xff0c;依靠锂离子在正极和负极之间移动来工作&#xff0c;广泛应用在便携式设备、卫星、储备电源、电动汽车等领域&#xff0c;具有替代各种二次电源的潜力。 近年来国家大力提倡和发展的新能源产业&#xff0c;锂离子电池的需求量的不断攀升&a…

聊聊「低代码」的实践之路

区块链、低代码、元宇宙、AI智能&#xff1b; 01 【先来说说背景】 这个概念由来已久&#xff0c;但是在国内兴起&#xff0c;是最近几年&#xff1b; 低代码即「Low-Code」&#xff1b; 指提供可视化开发环境&#xff0c;可以用来创建和管理软件应用&#xff1b; 简单的说…

Apache Zeppelin系列教程第一篇——安装和使用

一、Apache Zeppelin 介绍 Apache Zeppelin是一种开源的Web笔记本类型交互式数据分析工具&#xff0c;它提供了基于浏览器的界面&#xff0c;允许数据工程师和科学家通过各种语言和工具&#xff0c;如Scala, Python, SQL, R,等等&#xff0c;交互式地进行数据分析、可视化以及…

成功解决长时间挂起虚拟机后再次打开无法连接网络,并提示网络激活失败(亲测有效)

成功解决长时间挂起虚拟机后再次打开无法连接网络&#xff0c;并提示网络激活失败&#xff08;亲测有效&#xff01;&#xff09; 之前做区块链的一个虚拟机很久没打开&#xff0c;一直处于挂起状态&#xff0c;一直提示网络连接激活失败。试了很多种方法没解决&#xff0c;更…

如何设置ddns动态域名实现内网发布外网

在本地搭建好服务器&#xff0c;部署好web网站或其他应用后&#xff0c;需要设置动态域名服务ddns&#xff0c;将主机的内网IP端口映射到外网访问&#xff0c;才能实现在外网访问内网。今天小编就和大家分享一下内网发布外网方案&#xff0c;即如何设置ddns动态域名服务实现外网…

【hello Linux】可重入函数、volatile和SIGCHLD信号

目录 1. 可重入函数 2. volatile 3. SIGCHLD信号 Linux&#xff01;&#x1f337; 1. 可重入函数 先来谈一下重入函数的概念&#xff1a;重入函数便是在该函数还没有执行完毕便重复进入该函数&#xff08;一般发生在多线程中&#xff09;&#xff1b; 可重入函数&#xff1a…

【私有云底层】理解OpenStack核心组件

文章目录 &#x1f479; 关于作者一、Keystone 身份认证服务Keystone 架构工作流程 二、Glance 镜像服务Glance 架构磁盘与容器Glance 工作流程 三、Placement 放置服务Placement 工作流程 四、Nova 计算服务Nova 架构Nova 工作流程 五、Neutron 网络服务Neutron 架构Neutron 支…

浅谈测试用例设计 | 京东云技术团队

作者&#xff1a;京东物流 王莹莹 一、测试用例为什么存在 1.1 定义 测试用例(Test Case)是指对特定的软件产品进行测试任务的描述&#xff0c;体现测试方案、方法、技术和策略。测试用例内容包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等&#xff0c;…

FreeRTOS系统学习第一步:新建 FreeRTOS 工程—软件仿真

创建一个FreeRTOS系统工程 1.新建工程文件夹2.Keil新建工程2.1 New Project2.2 Select Device For Target2.3 Manage Run-Time Environment 3. 在 KEIL 工程里面新建文件组3.1在 KEIL 工程里面添加文件 4. 编写 main 函数5. 调试配置5.1 设置软件仿真5.2 修改时钟大小在时钟相关…

基于python的socket网络通信【1】

一、Socket原理 学习了大佬的知识&#xff0c;简单记一些笔记 https://www.jianshu.com/p/066d99da7cbd http://c.biancheng.net/view/2351.html 1.1什么是Socket 在计算机通信领域&#xff0c;socket 被翻译为“套接字”&#xff0c;它是计算机之间进行通信的一种约定或一种…

计算机网路常见面试题(上)

计算机网络基础 # 网络分层模型 # OSI 七层模型是什么&#xff1f;每一层的作用是什么&#xff1f; OSI 七层模型 是国际标准化组织提出一个网络分层模型&#xff0c;其大体结构以及每一层提供的功能如下图所示&#xff1a; 每一层都专注做一件事情&#xff0c;并且每一层都…

网络安全:namp扫描工具

-sP可以扫描一个网段ip以及状态和基本信息&#xff0c;10.1.1.2-3就是扫描2和3这两个ip的主机 -p可以扫描指定ip对应主机的端口号&#xff0c;可以是一个范围 nmap简单扫描&#xff1a;nmap 地址 检查地址是否在线以及open的端口号 在端口开放&#xff0c;不一定可以与对方正常…