当前位置: 首页 > news >正文

面试题整理01-集合详解

文章目录

  • 前言
  • 一、集合的整体结构
    • 单列集合接口:
    • 双列集合接口:
  • 二、单列集合详解
    • 1.List接口
      • 1.1 ArrayList集合
        • 特点:
        • 扩容:
        • 添加元素
        • 遍历
      • 1.2 LinkedList集合
        • 特点:
        • 添加元素:
    • 2.Set接口
      • 2.1 HashSet集合
        • 特点:
        • 重写equals()和hashcode()方法的必要性:
        • 存储对象示例:
      • 2.2 TreeSet集合
        • 特点:
        • 存储对象示例:
  • 三、双列集合详解
    • 1、Map集合
      • 特点:
      • 1.1.HashMap
        • 特点:
        • 1.1.1、LinkedHashMap
          • 特点:
      • 1.2.ConcurrentHashMap
        • 特点:
      • 1.3.TreeMap
        • 特点:
      • 4.HashTable
        • 特点:


前言

集合是老生常谈的内容,关于集合有很多内容可以挖掘,本篇梳理一下。


一、集合的整体结构

在这里插入图片描述

集合分为单列集合和双列集合

单列集合接口:

  • Collection:单列集合的顶级接口,其下有两个子接口分别是List和Set
    • List:有序,元素可重复
      • Vector:所有方法线程同步,效率低,线程安全
      • LinledList:双向链表,查找慢,增删快,线程不安全
      • ArrayList:基于数组实现,查找快,增删慢,线程不安全
    • set:无序,不可重复,最多存在一个null
      • HashSet:底层是HashMap,将set中存储的值作为HashMap的key来处理
      • LinkedHashSet:基于LinkedHashMap来实现,底层利用双向链表来实现的数据有序
      • TreeSet:元素自然有序,需要实现Comparator接口,不能存在null

双列集合接口:

  • Map :以键值存储,<key,value>,key不可重复,否则覆盖
    • HashMap:基于Hash表实现,线程不安全,无序,key和value都可为null,jdk1.8 之前 HashMap 由 数组 + 链表 组成,jdk1.8 以后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(或者红黑树的边界值,默认为 8 )并且当前数组的长度大于 64 时,此时此索引位置上的所有数据改为使用红黑树存储。
      • LinkedHashMap:通过在HashMap的基础上增加一条双向链表来实现,实现了插入顺序和访问顺序一致。
    • TreeMap:基于红黑树,有序存储,由Comparable或Comparator决定,需要自己实现比较器
    • HashTable:数组+链表,数组+二叉树(链表树化),通过把关键码值映射到表中一个位置来访问记录(类似索引),以加快查找的速度。
    • concurrentHashMap:底层可以看成一个HashTable数组,采用分段锁设计,线程安全。

二、单列集合详解

1.List接口

List接口的特点:

  • 存入的元素有序,且可重复。按照存储的顺序可以进行遍历操作。
  • 初始长度为10,当存储长度不够时会自动扩容为原来的1.5倍

List接口的方法

  • void add(int index,element);在指定位置插入指定元素。
  • boolean addAll(int index,Collection<? extends E> e);将一个集合插入到另一个集合的指定位置

删:

  • E remove(int index);删除指定位置的下标。返回被删除的元素。

改:

  • E set(int index , E e);通过指定的索引修改元素。返回被修改的原数据。

查:

  • E get(int index); 通过索引下标去获取指定元素
  • int indexOf(Object obj);通过元素获取指定的下标的
  • int lastIndexOf(object obj);通过元素获取最后一次出现的元素的下标
  • List< E> subList(int formIndex, int toIndex);截取一部分出来

1.1 ArrayList集合

  • 底层的数据结构为数组。
  • 增删慢,查改快。(涉及到数组的扩容机制)
  • 默认为10,会自动扩容为1.5倍。

特点:

ArrayList是List集合下面的一种集合,它的底层实现的数据结构为数组,所以它具有增删慢,查询修
改快
的特点。特别适合于数据一旦固定,就不会在额外的增加删除或者增加删除较少,查询修改较多的业务。

扩容:

当我们使用默认的构造方法创建了一个ArrayList实例,在默认的情况下,当前实例的底层数组长度是为空的,当我们第一次调用该实例中的方法的时候,会将该数组大小设置为默认值10,ArrayList底层的数组是会随着我们元素的个数的增多,会进行扩容。ArrayList源码中有一个grow()方法,当我们调用add()方法的时候,ArrayList会先进行当前数组的最大容量(记为A),和我们(之前添加的数据个数+将要添加的数据个数 记为B)进行比对,如果A>B则正常的添加元素即可,否则则会调用grow()进行数组的扩容,扩容的方法是,我们会用B-A和A/2进行比较,如果B-A<A/2(B-A就是当前所需要的最小容量 A就是当前数组的最大容量),那么就采用默认的扩容机制,数组大小扩容为原来的1.5倍,这里的扩容是通过创建新的数组,然后讲原来的数组的元素移动到新的数组来完成的,效率较低因此建议在初始化ArrayList的时候,就指定默认的数组大小,降低数组扩容的次
数从而提高效率。

添加元素

ArrayList使用add方法进行添加元素,add方法默认的情况下是采用尾插法进行元素的添加。也可以使用add(index,value) 指定元素插入的位置。

遍历

  • 可以使用for循环遍历
List<String> list = new ArrayList<>();list.add("张三");list.add("李四");list.add("王五");list.add("张三");
for( var i = 0; i < list.size(); i ++){System.out.println(list.get(i))
}
  • 使用迭代器遍历
List<String> list = new ArrayList<>();list.add("张三");list.add("李四");list.add("王五");list.add("张三");System.out.println(list);ListIterator<String> sli = list.listIterator();while (sli.hasNext()) {System.out.println(sli.next());}//此时光标已经在最下面了while (sli.hasPrevious()) {System.out.println(sli.previous());}

1.2 LinkedList集合

  • 底层为双向带头链表
  • 增删快,查找慢
  • 非线程安全
  • 实现了Serializable接口,因此它支持序列化
  • 没有长度概念,理论来说容量无限

特点:

底层数据结构为带头双向链表,所以其特点为增删快,其增加删除元素只需要修改其指针的指向即可,不需要涉及到数据元素的移动,增删操作的时间复杂度为O(1) 就是因为其这样的特点,数据存储的不连续,导致其对数据的索引效率很低,需要从头节点进行遍历查找。底层的查询方法使用的是二分查找法,查找的时间复杂度为O(log2^n)
它是非线程安全的,只在单线程下适合使用。
LinkedList没有长度的概念,所以不存在容量不足的问题。

添加元素:

插入元素时,需要新增一个节点,将新的元素设置为该节点的存储值,修改新节点的前驱为last节点的后继。新的节点作为链表的尾节点。

2.Set接口

Set接口的特点:

  • 元素一旦存入,就会变得无序,不可能按照存入顺序,再取出
  • 元素不可重复,最多只允许包含一个null

Set接口的方法:
由于其继承自Collection,所以方法和List接口一致,遍历不可根据索引,使用增强for循环。

2.1 HashSet集合

  • HashSet的实现是依赖于HashMap
  • 使用迭代器进行遍历是调用了map.keySet().iterator()
  • HashSet实际上就是HashMap中键值对中的值的一半
  • HashSet集合中存储对象,必须重写equals和hashcode方法

特点:

HashSet构造方法是创建了一个HashMap,所以我们可以说HashSet的实现是依赖于HashMap,我们在对HashSet使用迭代器进行遍历的时候,实际上也是调用了map.keySet().iterator(),所以HashSet实际上就是HashMap中键值对中的值的一半,在比如说调用HashSet中的add方法,实际上就是调用了map.put(e, PRESENT) == null。在使用add方法时,必须要对 equals()和hashcode()方法进行重写 ,保证对象不会在集合中重复存储。

重写equals()和hashcode()方法的必要性:

我们都知道,java的机制决定了当我们new创建对象时。即使两个对象的内容一模一样,它们的内存地址也不一样。hashcode()是Object类的方法,其作用是用来获取Hash码,返回值是一个int类型的整数。hash是当前对象在hash表中的索引位置。这会造成一种现象:即使是两个对象的内容一模一样,它们的hash值却不一定相等。当我们在HashMap中存储元素时,会自动调用equals()方法去比较集合中的对象和将要存储的对象的内存地址,这样无论如何比较,得到的永远是false。所以我们必须重写hashcode和equals方法,让代码帮我们比较它们的内容。以此来保证HashMap中存储内容不相同的元素。

存储对象示例:

import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
class Car{private String carId;private String color;private String brand;//有参无参,getter和setter省略@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Car car = (Car) o;return Objects.equals(carId, car.carId) && Objects.equals(color, car.color) && Objects.equals(brand, car.brand);}@Overridepublic int hashCode() {return Objects.hash(carId, color, brand);}
}
public class Demo2 {public static void main(String[] args) {Set<Car> carSet = new HashSet<>();carSet.add(new Car("豫A.88888","银色","保时捷"));carSet.add(new Car("豫A.66666","火烈鸟","法拉利"));carSet.add(new Car("豫A.QQ123","军绿色","拖拉机"));Car car1  = new Car("豫A.12345","黑色","五菱之光");Car car2  = new Car("豫A.12345","黑色","五菱之光");System.out.println(car1.hashCode());//哈希值一样且内容也一样,则不能添加进集合。System.out.println(car2.hashCode());//哈希值一样,内容不一样则能添加进集合System.out.println(carSet.add(car1));//返回trueSystem.out.println(carSet.add(car2));//返回falsefor (Car car : carSet) {System.out.println(car);}}
}

2.2 TreeSet集合

  • 底层依靠TreeMap实现,TreeMap底层是红黑树、故元素有序
  • 添加的元素要实现Comparable或者添加操作时实现Comparator接口
  • 添加元素较为繁琐,删除查找时需要遍历二叉树
  • 效率低,时间复杂度为O(logN)

特点:

TreeSet的底层的实现时依靠TreeMap,而TreeMap的底层是红黑树,所以其元素是有序的,这就导致了一个问题,要么这个元素具有自然顺序,要么用户给这个元素增加一个Comparable的能力,要么在进行add操作的时候,提供Comparator比较方式,这就导致其添加元素较为繁琐,同样其在进行删除,查找等操作的时候需要遍历这棵二叉树, 效率较低,时间复杂夫为O(logn)。

存储对象示例:

如果想要在TreeSet集合中添加对象,那么必须实现Comparable()接口,重写compareTo方法,让其对对象内部的int属性进行排序。

抽象方法:
int compareTo(T o)将此对象与指定的对象进行比较以进行排序。
返回一个负整数,0,或者正整数,表示该对象小于、等于、或大于该对象

实现Comparable接口重写方法

package com.lzl.day017;import java.util.Set;
import java.util.TreeSet;
class Student implements Comparable<Student>{private String name;private Integer age;//省略构造和getter和setter方法@Overridepublic int compareTo(Student o) {int num = this.age - o.age;return num;}
}
public class Demo3 {public static void main(String[] args) {Set<Student> studentSet = new TreeSet<>();studentSet.add(new Student("大飞", 25));studentSet.add(new Student("任老板", 26));studentSet.add(new Student("UZI", 23));studentSet.add(new Student("厂长", 30));for (Student s : studentSet) {System.out.println(s);}}
}

使用比较器的方法实现存储

package com.lzl.day018;import java.util.Comparator;
import java.util.TreeSet;class Weapon{private Integer id;private String name;private String description;
//省略无参有参,getter和setter,toString方法
}
class MyComparator implements Comparator<Weapon> {@Overridepublic int compare(Weapon o1, Weapon o2) {int num = o1.getId() - o2.getId();if (o1.getId() == o2.getId()&& o1.getName().compareTo(o2.getName())!=0){return o1.getName().compareTo(o2.getName());}if (o1.getId() == o2.getId() && o1.getName().compareTo(o2.getName())==0){return o1.getDescription().compareTo(o2.getDescription());}return num;}
}
public class Demo {public static void main(String[] args) {TreeSet<Weapon> weapons = new TreeSet<>(new MyComparator());weapons.add(new Weapon(3,"赤霄","传说是一把帝道之剑,汉高祖刘邦曾用它斩杀白蛟"));weapons.add(new Weapon(4,"泰阿(太阿)","泰阿剑是一把诸侯威道之剑,早已存在,只是无形无迹,但是剑气早已存于天地之间,只等待时机凝聚起来,天时、地利、人和三道归一,此剑即成。"));weapons.add(new Weapon(5,"七星龙渊","剑传说是由欧冶子和干将两大剑师联手所铸。" +"欧冶子和干将为铸此剑,凿开茨山,放出山中溪水,引至铸剑炉旁成北斗七星环列的七个池中,是名“七星”。剑成之后,俯视剑身,如同登高山而下望深渊,飘渺而深邃,仿佛有巨龙盘卧。是名“龙渊”。后改名为龙泉剑"));weapons.add(new Weapon(1,"轩辕剑","黄金色之千年古剑,传说是天界诸神赐予轩辕黄帝击败蚩尤之旷世神剑;其内蕴藏无穷之力,为斩妖除魔的神剑。"));weapons.add(new Weapon(2,"湛卢","君贤能,剑在侧,国兴旺。君无能,剑飞弃,国破败。五金之英,太阳之精,出之有神,服之有威。"));weapons.add(new Weapon(9,"纯钧","剑是天人共铸的不二之作。为铸这把剑,千年赤堇山山破而出锡,万载若耶江江水干涸而出铜。铸剑之时,雷公打铁,雨娘淋水,蛟龙捧炉,天帝装炭。铸剑大师欧冶					子承天之命呕心沥血与众神铸磨十载,此剑方成。剑成之后,众神归天,赤堇山闭合如初,若耶江					波涛再起,欧冶子也力尽神竭而亡,这把剑已成绝唱."));weapons.add(new Weapon(10,"承影","天色愈暗,长剑又归于无形,远古的暮色无声合拢,天地之间一片静穆。"));weapons.add(new Weapon(7,"莫邪","干将、莫邪是两把剑,但是没有人能分开它们。干将、莫邪是两个人,同样也没有人能将他(她)们分开。"));weapons.add(new Weapon(6,"干将","干将、莫邪是两把剑,但是没有人能分开它们。干将、莫邪是两个人,同样也没有人能将他(她)们分开。"));weapons.add(new Weapon(8,"鱼肠","夫专诸之刺王僚,飞鹰击殿"));//测试数据weapons.add(new Weapon(1,"假的轩辕剑","黄金色之千年古剑,传说是天界诸神赐予轩辕黄帝击败蚩尤之旷世神剑;其内蕴藏无穷之力,为斩妖除魔的神剑。"));weapons.add(new Weapon(1,"假的轩辕剑","天界诸神赐予轩辕黄帝击败蚩尤之旷世神剑;其内蕴藏无穷之力,为斩妖除魔的神剑。"));for (Weapon weapon : weapons) {System.out.println(weapon);}}
}

三、双列集合详解

1、Map集合

特点:

Map是双列集合的顶级接口,存储的是键值对映射,一个键对应一个值,底层采用双边队列

常用方法
增:

  • v put(k key , v value); 向集合中添加数据。
    【注意】键key必须是唯一的。
  • void putAll(Map<? extends K> k,<? extends V> v);将一个Map集合存入另一个Map集合。

删:

  • remove(K key); 返回值是删除的value。

改:

  • v put(K key,V value);当键值存在的时候,会覆盖原来的内容。

查:

  • int size(); 获得集合中元素的个数。
  • boolean isEmpty(); 是否为空。
  • boolean containsKey();是否包含键名。
  • boolean containsValue();是否包含值。
  • v get(K key); 通过键名获取值。
  • set< k > keySet(); 获取map集合中的键,然后存到Set集合。
  • Collection< v > values(); 获取map集合的值,然后存在Collection集合里边。
  • Set< Map.Entry< K,V >> entrySet(); 将map集合的键值对,存到Set集合。
    Map.Entry方法:
    getKey():获取键值对的键
    getValue():获取键值对的值

1.1.HashMap

特点:

  • 非线程安全
  • 无序键值对
  • 1.7之前是哈希表+链表
  • 1.8哈希表+链表+红黑树
  • 当HashMap中的元素个数超过数组大小*负载因子时,就会进行数组扩容
  • 默认长度为16,负载因子为0.75,

1.1.1、LinkedHashMap

特点:
  • LinkedHashMap是基于HashMap实现的,LinkedHashMap重写了HashMap,在其基础上在Entry节点上增加了一个next元素,用来指向当前节点的下一个节点,即:HashMap和双向链表的合二为一
  • 可以实现元素按照插入的顺序来进行顺序的输出
  • LinkedHashMap的key 和value都可以为空
  • 非线程安全

1.2.ConcurrentHashMap

特点:

  • 线程安全
  • key和value均不可以为null
  • 在JDK1.8之前,采用分段锁机制来保证线程安全的,一定程度上提高了并发执行效率
  • 从JDK1.8开始, ConcurrentHashMap数据结构与1.8中的HashMap保持一致,均为数组+链表+红黑树
  • 通过乐观锁+Synchronized来保证线程安全

1.3.TreeMap

特点:

  • 可以实现元素的有序排列,需要提供比较器,或者实现Comparble接口
  • 底层基于红黑树实现
  • 非线程安全
  • key不可为null
  • 存储元素需要自己传入比较器,或者元素自然有序,根据key值排序

4.HashTable

特点:

  • 线程安全
  • key和value均不可以为null
  • 通过给整张散列表加锁的方式来保证线程安全,并发执行效率底下
  • 处理哈希冲突可以使用,拉链法,开放寻址法等

相关文章:

面试题整理01-集合详解

文章目录前言一、集合的整体结构单列集合接口&#xff1a;双列集合接口&#xff1a;二、单列集合详解1.List接口1.1 ArrayList集合特点&#xff1a;扩容&#xff1a;添加元素遍历1.2 LinkedList集合特点&#xff1a;添加元素&#xff1a;2.Set接口2.1 HashSet集合特点&#xff…...

数据驱动的两阶段分布鲁棒(1-范数和∞-范数约束)的电热综合能源系统研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

ArcGIS网络分析之发布网络分析服务(二)

在上一篇中讲述了如何构建网络分析数据集,本篇将讲解如何发布网络分析服务。本文将使用上一篇中建立的网络数据集,下载地址在上一篇博文的最后已给出。 之前我们已经实现了基于ArcMap中的网络分析,但是仅仅支持本地是万万不够的,这里我们的目的就是将我们建好的网络分析图…...

js实现元素样式切换的基本功能

需求&#xff1a;用户第一次点击某些元素&#xff0c;改变元素的某些样式&#xff0c;比如背景颜色&#xff0c;字体颜色。用户第二次点击某些元素&#xff0c;恢复之前的样式。.....思路&#xff1a;准备一定量的div盒子&#xff0c;并取相同的类名<div class"box&quo…...

java 策略模式 + 工厂模式 实例

一 前言 经常听说各种设计模式&#xff0c;知道理论&#xff0c;也知道应该使用&#xff0c;但具体怎么用&#xff0c;什么时候用&#xff0c;使用的优点一直比较模糊&#xff0c;今天写一个项目中经常用到的模式&#xff0c;来具体理解。项目中经常用到工厂模式或者策略模式&…...

本地生成动漫风格 AI 绘画 图像|Stable Diffusion WebUI 的安装和部署教程

Stable Diffusion WebUI 的安装和部署教程1. 简介2. Windows安装环境3. 运行4. 模型下载链接5. 其他资源1. 简介 先放一张WebUI的图片生成效果图&#xff0c;以给大家学习的动力 &#xff1a;&#xff09; 怎么样&#xff0c;有没有小小的心动&#xff1f;这里再补充一下&…...

华为OD机试 - 异常的打卡记录 | 备考思路,刷题要点,答疑 【新解法】

最近更新的博客 【新解法】华为OD机试 - 关联子串 | 备考思路,刷题要点,答疑,od Base 提供【新解法】华为OD机试 - 停车场最大距离 | 备考思路,刷题要点,答疑,od Base 提供【新解法】华为OD机试 - 任务调度 | 备考思路,刷题要点,答疑,od Base 提供【新解法】华为OD机试…...

「机器学习笔记」之深度学习基础概念(基于Pytorch)

本文以 Pytorch 为线索&#xff0c;介绍人工智能和深度学习相关的一些术语、概念。 关于发展历史您也可以阅读深度学习神经网络之父 Jrgen Schmidhuber 所写的《Annotated History of Modern AI and Deep Learning&#xff08;现代人工智能和深度学习的注释版历史&#xff09;…...

概率和似然

在日常生活中&#xff0c;我们经常使用这些术语。但是在统计学和机器学习上下文中使用时&#xff0c;有一个本质的区别。本文将用理论和例子来解释概率和似然之间的关键区别。 概率与似然 假设在一场棒球比赛中&#xff0c;两队的队长都被召集到场上掷硬币。获胜的队长将根据掷…...

前期软件项目评估偏差,如何有效处理?

1、重新评估制定延期计划 需要对项目进行重新评估&#xff0c;将新的评估方案提交项目干系人会议&#xff0c;开会协商一致后按照新的讨论结果制定计划&#xff0c;并实施执行。 软件项目评估偏差 怎么办&#xff1a;重新评估制定延期计划2、申请加资源 如果项目客户要求严格&a…...

Xline v0.2.0: 一个用于元数据管理的分布式KV存储

Xline是什么&#xff1f;我们为什么要做Xline&#xff1f; Xline是一个基于Curp协议的&#xff0c;用于管理元数据的分布式KV存储。现有的分布式KV存储大多采用Raft共识协议&#xff0c;需要两次RTT才能完成一次请求。当部署在单个数据中心时&#xff0c;节点之间的延迟较低&a…...

CompletableFuture

一、一个示例回顾Future 一些业务场景我们需要使用多线程异步执行任务,加快任务执行速度。JDK5新增了Future接口,用于描述一个异步计算的结果。虽然Future以及相关使用方法提供了异步执行任务的能力,但是对于结果的获取却是很不方便,我们必须使用Future.get()的方式阻塞调…...

面试不到10分钟就被赶出来了,问的实在是太变态了...

干了两年外包&#xff0c;本来想出来正儿八经找个互联网公司上班&#xff0c;没想到算法死在另一家厂子。 自从加入这家外包公司&#xff0c;每天都在加班&#xff0c;钱倒是给的不少&#xff0c;所以也就忍了。没想到11月一纸通知&#xff0c;所有人不许加班&#xff0c;薪资…...

【C++】类与对象 (四)初始化列表 static成员 友元 内部类 匿名对象 拷贝对象时的一些编译器优化

前言 本章就是我们C中类与对象的终章了&#xff0c;不过本章的难度不大&#xff0c;都是类中一些边边角角的知识&#xff0c;记忆理解就行了&#xff0c;相信经过这么长时间的学习类与对象&#xff0c;你对面向对象也有了更加深的理解&#xff0c;最后我们学习完边边角角的一些…...

04:进阶篇 - 编译 CTK

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 在使用 CTK 之前,首先要进行编译。但要成功编译它,并不是一件很容易的事,这不仅取决于平台、Qt 的版本,也取决于编译器,以及所使用的 IDE。 平台(Linux、Windows)Qt 版本(4.x、5.x、6.x)编译器(MS…...

SQL73 返回所有价格在 3美元到 6美元之间的产品的名称和价格

描述有表Productsprod_idprod_nameprod_pricea0011egg3a0019sockets4b0019coffee15【问题】编写 SQL 语句&#xff0c;返回所有价格在 3美元到 6美元之间的产品的名称&#xff08;prod_name&#xff09;和价格&#xff08;prod_price&#xff09;&#xff0c;使用 AND操作符&am…...

【Linux 多线程互斥】如何保证锁的原子性(互斥的原理)

临界资源:可以被多个执行流&#xff08;线程或者叫轻量级进程&#xff09;同是访问的&#xff08;多个执行流共享的&#xff0c;比如&#xff1a;全局、堆等等&#xff09;&#xff1b;临界区&#xff1a;访问这些临界资源的代码&#xff1b;原子性&#xff1a;没有中间态&…...

Android 实现沉浸式全屏

前言 本文总结 Android 实现沉浸式全屏的实现方式。 实现沉浸式全屏 在一些需要全屏显示的场景下,比如玩游戏、看横屏视频的时候,内容全屏,占满窗口的体验会让用户更加沉浸到对内容的消费中,带来好的用户体验。 沉浸式显示具体来说就是如状态栏和导航栏部分的显示效果调…...

数据分析与SAS学习笔记6

数据集整理&#xff1a; 目的&#xff1a;对数据集中的数据进行预处理&#xff0c;使数据更适合统计分析过程对数据格式的要求&#xff1b; 常见整理要求&#xff1a; 1&#xff09;建立新的变量&#xff0c;衍生变量&#xff0c;删除某些原变量&#xff1b; 2&#xff09;…...

自动化完成1000个用户的登录并获取token并生成tokens.txt文件

自动化完成1000个用户的登录并获取token并生成tokens.txt文件 写作背景 在我学习使用redis实现秒杀功能的过程中&#xff0c;在编写完秒杀代码后&#xff0c;需要使用Jmeter实际测试1000个用户进行秒杀&#xff0c;由于秒杀功能需要在用户登录完成后才能实现&#xff0c;用户是…...

2023年全国最新安全员精选真题及答案1

百分百题库提供安全员考试试题、建筑安全员考试预测题、建筑安全员ABC考试真题、安全员证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 11.&#xff08;单选题&#xff09;在起重作业中&#xff0c;&#xff08;&#xff09…...

NoMachine 输入用户名密码后 闪断 解决办法

大家好&#xff0c;我是虎哥&#xff0c;最近工作忙&#xff0c;好长时间没有继续套件的深度学习&#xff0c;今天周六&#xff0c;难得有空&#xff0c;泡好茶&#xff0c;打开电脑&#xff0c;链接套件桌面&#xff0c;得&#xff0c;出问题了&#xff0c;一个很奇怪的问题&a…...

WebADI - 参数的使用

* 本文仅供交流分享&#xff0c;不作为专业指导 最近研究了一下WEBADI文档下载的参数&#xff0c;由于网上这块资料较少&#xff0c;所以专意分享下我的笔记。 准备 集成器&#xff1a;BHSC_EMP_ADI 表值集&#xff1a;BHSC_DEPT_LOV&#xff08;值&#xff1a;dname&#x…...

【OJ】两个圆

&#x1f4da;Description: 直角坐标系内现有两个半径相等的圆&#xff0c;问两圆的位置关系。 位置关系有&#xff1a;重合&#xff0c;相切&#xff0c;相离&#xff0c;相交&#xff1b; 若两圆相交&#xff0c;需要求出两圆的重叠面积。 ⏳Input: 输入包含多组数据&a…...

一文读懂澳洲医疗:白菜价的药物怎么领?

众所周知&#xff0c;福利优厚的澳洲&#xff0c;在医疗系统上有着令全世界人民都羡慕的超高福利。 几十万的天价药&#xff0c;在澳洲&#xff0c;白菜价就能轻松到手。 国内70万元一针的“诺西那生钠注射液”&#xff08;目前中国国内唯一治疗脊髓性肌萎缩症的进口精准靶向药…...

scrum看板视图切换时间线视图做项目管理

企业需要开发一个项目&#xff0c;可以制作时间线进行管理&#xff0c;以便参与者和管理者了解项目的时间进度。项目进行到哪一步&#xff0c;参与者有哪些&#xff0c;责任人是谁&#xff0c;这些都可以通过时间线进行展示。「时间线视图」是一种比甘特图更轻量、更实用的工具…...

10、MySQL查询优化

MySQL查询优化 1.MySQL查询优化技术2.子查询优化2.1 优化器自动优化2.2 优化措施:子查询合并2.2 优化措施:子查询上拉技术3.外连接消除4.生产环境不使用join联表查询5.group by分组优化5.1 group by执行流程5.2 为什么group by要创建临时表6.order by排序优化7.MySQL性能抖动…...

C++模板(一)

文章目录C模板&#xff08;一&#xff09;1. 泛型编程2. 函数模板2.1 函数模板格式2.2 模板原理2.3 模板实例化2.4 模板参数匹配原则3. 类模板3.1 类模板格式3.2 背景3.3 类模板的实例化C模板&#xff08;一&#xff09; 1. 泛型编程 前面我们学到了函数重载这个特性&#xf…...

【TypeScript】TypeScript的基础类型(string,number,boolean,void,null,undefined):

文章目录一、安装【1】安装npm install typescript -g【2】基础类型&#xff1a;Boolean、Number、String、null、undefined 以及 ES6 的 Symbol 和 ES10 的 BigInt二、字符串类型(string)三、数字类型(number)四、布尔类型(boolean)五、空值类型(void)六、null和undefined类型…...

【C语言】 详谈指针

☃️内容专栏&#xff1a;【C语言】初阶部分 ☃️本文概括&#xff1a;继初识C语言&#xff0c;对C语言指针初阶部分进行归纳与总结。 ☃️本文作者&#xff1a;花香碟自来_ ☃️发布时间&#xff1a;2023.2.17 目录 一、指针和指针类型 1.1 指针 1.2 指针类型 其一&#x…...

做兼职网站的主要参考文献/超级外链工具有用吗

JavaScript之原型链 参考&#xff1a;http://zhangjiahao8961.iteye.com/blog/2070650原型链 概念 原型链是一种机制&#xff0c;指的是JavaScript每个对象包括原型对象都有一个内置的[[proto]]属性指向创建它的函数对象的原型对象&#xff0c;即prototype属性。 作用 原型链的…...

百度登录/长沙网站优化方案

更多代码请见&#xff1a;https://github.com/xubo245/SparkLearning Spark中组件Mllib的学习之分类篇 1解释 MLlib决策树支持三种不纯度的计算&#xff1a;gini、entropy、variance。其他的目前不支持 def fromString(name: String): Impurity name match {case "gin…...

免费做网站的/网络营销管理

Simulink 是面向框图的仿真软件。7.1 演示一个Simulink 的简单程序【例7.1】创建一个正弦信号的仿真模型。步骤如下&#xff1a;(1) 在MATLAB 的命令窗口运行simulink 命令&#xff0c;或单击工具栏中的图标&#xff0c;就可以打开Simulink模块库浏览器(Simulink Library Brows…...

朝阳网站推广/第三方平台推广引流

一、 互斥锁的概念 我们知道&#xff0c;一个进程中的多个线程是可以共享这个进程的系统资源的。如果多个线程同时修改统一个资源&#xff08;对象&#xff09;就会导致这个资源的不稳定性和某一时刻的不准确性。 于是&#xff0c;为了保证共享数据操作的完整性&#xff0c;在…...

龙岗龙城街道网站建设/建站系统有哪些

创建 const event new Events() 方法 订阅事件on(eventName, fn,[...args])触发事件fire(eventName,[...fireArgs])取消订阅off(eventName,fn)订阅事件(一次性)once(eventName, fn,[...args]) 代码 class Events {constructor(){this.events {}}on(eventName,fn,...args…...

巴南城乡建设网站/泽成杭州seo网站推广排名

VMware服务随意关发表时间&#xff1a; 2008年04月23日 00时48分 评论/阅读(/)本文地址&#xff1a; http://qzone.qq.com/blog/280883610-1208882895VMware 虚拟机程序安装后同时会有4个服务打开&#xff0c;极大的消耗了系统资源&#xff0c;对我这样的铁公鸡来说实在…...