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

【数据结构】(5) ArrayList 顺序表

一、使用 ArrayList

        ArrayList 就是数组的封装,但是数组只有 [] 操作存取值,和 .length 操作获取数组内存长度;而 ArrayList 有更多的功能:

1、创建对象

2、扩容机制

        ArrayList 有自动扩容机制,在插入元素时不用担心数组容量是否足够。创建对象时,数组容量默认为为 10,容量不够时,每次扩容都会乘以 1.5 倍。源码如下:

        若添加元素时触发扩容机制,过程如下:

  • 创建一个新的数组,长度比原来大。
  • 将旧数组的元素拷贝到新数组中。
  • 添加新的元素到新数组中。
  • 释放旧数组的空间。

        可以看到扩容存在拷贝操作,需要遍历旧数组中的元素,因此效率低下。故创建对象时应设置一个合适的大小避免频繁扩容

        从上面的源代码可以看到,拷贝操作使用的 Arrays.copyOf 方法,创建了 newCapacity 容量的新数组,并把旧数组 elementData 复制到新数组中,并返回新数组。

3、插入一个元素

.addAll(list):把 list 中的所有元素添加到末尾。

        总结一下获取数组长度的方法:

  • 数组为 .length
  • String 为 .length()
  • 集合类 为 .size()

        同样的作用却有不同的名字,这是在以后开放中需要避免的,我们应该统一风格。

4、获取、设置一个元素

5、遍历元素

        使用 for 循环或 for-each,重点讲 for-each。回顾集合类框架,集合接口 Collection 继承了可迭代的接口 Iterable

        因此实现了 Iterable 接口的 iterator 方法的集合类,可通过对象调用 iterator 方法得到一个迭代器。ArrayList 实现 iterator 方法的源码如下:

        手动实现遍历:

        迭代器的效果等价于 for-each,因此实现了 Iterable 接口的 iterator 方法的类,都是可迭代的,即可使用 for-each 语句的

6、删除一个元素

7、获取一个元素的位置

8、判断是否包含一个元素

        源码使用了 indexOf:

9、获取子列表

        若想避免子列表牵动父列表,应创建新的列表:

10、清空元素

        Java 中存在垃圾回收机制,JVM会自动回收没被引用的内存空间,不需要手动地释放元素所占空间(如 C 中的 free)。

二、ArrayList 的使用练习

1、实现简单的洗牌算法

        Card 类,对象表示一张牌,存有花色和牌值:

class Card {String suit; // 花色String value; // 牌值public Card(String suit, String value) {this.suit = suit;this.value = value;}public String getSuit() {return suit;}public String getValue() {return value;}public void setSuit(String suit) {this.suit = suit;}public void setValue(String value) {this.value = value;}@Overridepublic String toString() {return this.suit + this.value;}
}

        主类中 createPokerCards 方法,创建一副新牌:

    public static ArrayList<Card> createPokerCards() {ArrayList<Card> cards = new ArrayList<Card>();String[] suits = {"♠", "♥", "♦", "♣"};String[] values = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};for (String suit : suits) {for (String value : values) {cards.add(new Card(suit, value));}}return cards;}

         主类中 shufflePokerCards 方法,打乱扑克牌:

    public static void shufflePokerCards(ArrayList<Card> cards) {Random random = new Random();for (int i = 0; i < cards.size(); i++) {int j = random.nextInt(cards.size()); // 随机生成 j 位置// 交换 i 位置和 j 位置的牌Card temp = new Card(cards.get(i).getSuit(), cards.get(i).getValue()); // 创建新的对象,避免后续 temp 因 i 位置被 j 处覆盖而发生改变cards.set(i, cards.get(j));cards.set(j, temp);}}

        主类中 dealPokerCards 方法,发牌:

    public static ArrayList<ArrayList<Card>> dealPokerCards(ArrayList<Card> cards, int numPlayers) {ArrayList<ArrayList<Card>> hands = new ArrayList<>();// 创建 numPlayers 手空牌for (int i = 0; i < numPlayers; i++) {ArrayList<Card> hand = new ArrayList<>();hands.add(hand);}int numCards = cards.size() / numPlayers; // 每人手牌数// 给每人发牌for (int i = 0; i < numCards; i++) {for (int j = 0; j < numPlayers; j++) {Card card = cards.remove(0); // 取出第一张牌hands.get(j).add(card); // 给 j 号玩家发牌}}return hands;}

        主类中 printHands 方法,打印所有手牌:

    public static void printHands(ArrayList<ArrayList<Card>> hands) {for (ArrayList<Card> hand : hands) {System.out.println("手牌:" + hand);}}

        主逻辑:

    public static void main(String[] args) {// 创建扑克牌ArrayList<Card> cards = createPokerCards();System.out.println("新牌:" + cards);// 洗牌shufflePokerCards(cards);System.out.println("洗牌:" + cards);// 发牌ArrayList<ArrayList<Card>> hands = dealPokerCards(cards, 4);// 打印手牌printHands(hands);}

        结果:

2、打印杨辉三角

118. 杨辉三角 - 力扣(LeetCode)

分析:

  • 第 i (0 ~ numRows) 行有 i + 1 列。
  • 每一行第一个和最后一个都为 1。
  • 中间的第 j 个等于 [i-1][j-1] + [i-1][j] 。
class Solution {public List<List<Integer>> generate(int numRows) {List<List<Integer>> rows = new ArrayList<>(numRows);for(int i = 0; i < numRows; i++) {List<Integer> row = new ArrayList<>(i + 1);for(int j = 0; j < i+1; j++) {if(j == 0 || j == i) {row.add(1);}else {List<Integer> lastRow = rows.get(i - 1);row.add(lastRow.get(j - 1) + lastRow.get(j));}}rows.add(row);}return rows;}
}

三、自己实现一个 MyArrayList

1、功能实现

import java.util.Arrays;/** 功能代码 **/
public class MyArrayList {private int[] arr;private int size = 0; // 已用容量// 构造函数, 默认容量为10public MyArrayList() {arr = new int[10];}// 构造函数, 指定容量public MyArrayList(int capacity) {arr = new int[capacity];}// 获取元素个数public int size() {return size;}// 扩容, 私有, 不需要暴露给外界private void resize() {// 创建一个新的数组, 容量为原来的1.5倍int oldCapacity = arr.length;int newCapacity = oldCapacity + (oldCapacity >> 1); // 扩容为原来的1.5倍; cpu 计算加减移位比乘除快// 创建新数组,并将原数组中的元素复制到新数组中arr = Arrays.copyOf(arr, newCapacity);}// 添加元素public void add(int val) {// 已满,扩容if (size == arr.length) {resize();}// 添加元素arr[size++] = val;}// 指定位置添加元素public void add(int index, int val) {// 超出范围if (index < 0 || index > size) {throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);}// 已满,扩容if (size == arr.length) {resize();}// 移动元素for (int i = size - 1; i >= index; i--) {arr[i + 1] = arr[i];}// 添加元素arr[index] = val;size++;}// 根据下标,获取元素public int get(int index) {// 超出范围if (index < 0 || index >= size) {throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);}return arr[index];}// 根据下标,设置元素public void set(int index, int val) {// 超出范围if (index < 0 || index >= size) {throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);}arr[index] = val;}// 根据下标,删除元素,返回删除的元素public int remove(int index) {// 超出范围if (index < 0 || index >= size) {throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);}int val = arr[index];// 移动元素for (int i = index; i < size - 1; i++) {arr[i] = arr[i + 1];}size--;return val;}// 根据值,删除元素public boolean delete(int val) {for (int i = 0; i < size; i++) {if (arr[i] == val) {remove(i);return true;}}return false;}// 查找元素所在下标,不存在返回-1public int indexOf(int val) {for (int i = 0; i < size; i++) {if (arr[i] == val) {return i;}}return -1;}// 倒着查找元素所在下标,不存在返回-1public int lastIndexOf(int val) {for (int i = size - 1; i >= 0; i--) {if (arr[i] == val) {return i;}}return -1;}// 判断是否包含元素public boolean contains(int val) {return indexOf(val) >= 0;}// 清空元素public void clear() {size = 0;}// 打印元素public String toString() {StringBuilder sb = new StringBuilder();sb.append("[");for (int i = 0; i < size; i++) {sb.append(arr[i]);if (i < size - 1) {sb.append(", ");}}sb.append("]");return sb.toString();}
}

2、单元测试

/** 单元测试 **/
class MyArrayListTest {// 测试1:构造函数和 add 方法 和 size 方法 和 toString 方法public static void test1() {MyArrayList list = new MyArrayList(3);list.add(1);list.add(2);list.add(3);list.add(1,4); // 自动扩容if (list.size() == 4) {System.out.println("test1 pass");}else {System.out.println("test1 fail");}if (list.toString().equals("[1, 4, 2, 3]")) {System.out.println("test1 pass");}else {System.out.println("test1 fail");}list.add(100,5); // 越界}// 测试2:get 方法 和 set 方法public static void test2() {MyArrayList list = new MyArrayList();list.add(1);list.add(2);list.add(3);if (list.get(0) == 1 && list.get(1) == 2 && list.get(2) == 3) {System.out.println("test2 pass");}else {System.out.println("test2 fail");}list.set(1, 100);if (list.get(1) == 100) {System.out.println("test2 pass");}else {System.out.println("test2 fail");}list.get(100); // 越界list.set(100, 100); // 越界}// 测试3:remove 方法 和 delete 方法public static void test3() {MyArrayList list = new MyArrayList();list.add(1);list.add(2);list.add(3);list.add(4);list.add(5);list.remove(2);if (list.toString().equals("[1, 2, 4, 5]")) {System.out.println("test3 pass");}else {System.out.println("test3 fail");}list.delete(4);if (list.toString().equals("[1, 2, 5]")) {System.out.println("test3 pass");}else {System.out.println("test3 fail");}if (!list.delete(100)) {System.out.println("test3 pass");}else {System.out.println("test3 fail");}list.remove(100); // 越界}// 测试4:indexOf 方法 和 lastIndexOf 方法 和 contains 方法 和 clear 方法public static void test4() {MyArrayList list = new MyArrayList();list.add(1);list.add(2);list.add(3);list.add(2);if (list.indexOf(2) == 1 && list.lastIndexOf(2) == 3 && list.contains(2)) {System.out.println("test4 pass");}else {System.out.println("test4 fail");}if (list.indexOf(100) == -1 && list.lastIndexOf(100) == -1 && !list.contains(100)) {System.out.println("test4 pass");}else {System.out.println("test4 fail");}list.clear();if (list.size() == 0) {System.out.println("test4 pass");}else {System.out.println("test4 fail");}}public static void main(String[] args) {
//        test1();
//        test2();
//        test3();test4();}
}

3、注意事项

  • 顺序表是一个有序表,在实现添加一个元素时,不能直接将 index 处的元素移到最后面,再把新元素添加到 index 处;这样虽然避免了大量移动,但是打乱了顺序表的有序性,不符合要求。
  • 顺序表的缺点:顺序表在中间插入和删除需要大量移动,时间复杂度为 O(N);扩容也需要大量拷贝,降低效率;很有可能造成内存空间浪费。
  • 后续的链表可以解决以上问题,但同样带来了其它的问题,总的来说还是 ArrayList 更常用

相关文章:

【数据结构】(5) ArrayList 顺序表

一、使用 ArrayList ArrayList 就是数组的封装&#xff0c;但是数组只有 [] 操作存取值&#xff0c;和 .length 操作获取数组内存长度&#xff1b;而 ArrayList 有更多的功能&#xff1a; 1、创建对象 2、扩容机制 ArrayList 有自动扩容机制&#xff0c;在插入元素时不用担心数…...

Elasticsearch 指南 [8.17] | Search APIs

Search API 返回与请求中定义的查询匹配的搜索结果。 http GET /my-index-000001/_search Request GET /<target>/_search GET /_search POST /<target>/_search POST /_search Prerequisites 如果启用了 Elasticsearch 安全功能&#xff0c;针对目标数据流…...

【自开发工具介绍】SQLSERVER的ImpDp和ExpDp工具03

SQLSERVER的ImpDp和ExpDp工具 1、全部的表导出&#xff08;仅表结构导出&#xff09; 2、导出的表结构&#xff0c;导入到新的数据库 导入前&#xff0c;test3数据没有任何表 导入 导入结果确认&#xff1a;表都被做成&#xff0c;但是没有数据 3、全部的表导出&#x…...

JVM-运行时数据区

JVM的组成 运行时数据区-总览 Java虚拟机在运行Java程序过程中管理的内存区域&#xff0c;称之为运行时数据区。 《Java虚拟机规范》中规定了每一部分的作用 运行时数据区-应用场景 Java的内存分成哪几部分&#xff1f; Java内存中哪些部分会内存溢出&#xff1f; JDK7 和J…...

经典本地影音播放器MPC-BE.

经典本地影音播放器MPC-BE 链接&#xff1a;https://pan.xunlei.com/s/VOIAZbbIuBM1haFdMYCubsU-A1?pwd4iz3# MPC-BE&#xff08;Media Player Classic Black Edition&#xff09;是来自 MPC-HC&#xff08;Media Player Classic Home Cinema&#xff09;的俄罗斯开发者重新…...

求水仙花数,提取算好,打表法。或者暴力解出来。

暴力解法 #include<bits/stdc.h> using namespace std; int main() {int n,m;cin>>n>>m;if(n<3||n>7||m<0){cout<<"-1";return 0;}int powN[10];//记录0-9的n次方for(int i0;i<10;i){powN[i](int)pow(i,n);}int low(int) pow(1…...

后盾人JS -- 原型

没有原型的对象 也有没有原型的对象 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document<…...

Deepseek-R1 和 OpenAI o1 这样的推理模型普遍存在“思考不足”的问题

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

Nginx 命令行参数

文章来源&#xff1a;命令行参数 -- nginx中文文档|nginx中文教程 nginx 支持以下命令行参数&#xff1a; -?| — 打印帮助 以获取命令行参数。-h-c file— 使用替代项 configuration 而不是 default 文件。file-e file— 使用替代项 error log 来存储日志 而不是默认文件 &…...

YOLOV11-1:YoloV11-安装和CLI方式训练模型

YoloV11-安装和CLI方式训练模型 1.安装和运行1.1安装的基础环境1.2安装yolo相关组件1.3命令行方式使用1.3.1 训练1.3.2 预测 本文介绍yoloV11的安装和命令行接口 1.安装和运行 1.1安装的基础环境 GPU环境&#xff0c;其中CUDA是12.4版本 1.2安装yolo相关组件 # 克隆github…...

Docker Hub 镜像 Pull 失败的解决方案

目录 引言一、问题二、原因三、解决方法四、参考文献 引言 在云原生技术火热的当下&#xff0c;Docker可谓是其基础&#xff0c;由于其简单以及方便性&#xff0c;让开发人员不必再为环境配置问题而伤脑筋&#xff0c;因为可将其看作一个虚拟机程序去理解。所以掌握好它可谓是…...

重新思考绩效管理变革

Peter Cappelli 和 Anna Tavis 在绩效管理变革一文中&#xff0c;为我们带来了很多关于绩效管理变革的思考。企业为什么做绩效管理变革&#xff0c;为什么现在需要&#xff1f;让我们看看这些学者是如何思考的。 摘要 受到老板和下属的痛恨&#xff0c;传统的绩效考核已经被超…...

内核定时器2-高分辨率定时器

高分辨率定时器与低分辨率定时器 高分辨率定时器与低分辨率定时器相比&#xff0c;有如下两个根本性的不同。 (1) 高分辨率定时器使用红黑树对定时器进行管理。 (2) 定时器独立于周期时钟。即不基于jiffies&#xff0c;精度可以达到纳秒级别。 内核2.6.16版本开始&#xff…...

【自开发工具介绍】SQLSERVER的ImpDp和ExpDp工具02

工具运行前的环境准备 1、登录用户管理员权限确认 工具使用的登录用户(-u后面的用户)&#xff0c;必须具有管理员的权限&#xff0c;因为需要读取系统表 例&#xff1a;Export.bat -s 10.48.111.12 -d db1 -u test -p test -schema dbo      2、Powershell的安全策略确认…...

数据结构【单链表操作大全详解】【c语言版】(只有输入输出为了方便用的c++)

单链表操作的C/C实现详解 在数据结构中&#xff0c;单链表是一种非常基础且重要的数据结构。它由一系列节点组成&#xff0c;每个节点包含数据和指向下一个节点的指针。今天我们就来深入探讨用C/C实现的单链表及其各种操作。 一、单链表的定义 const int N 1e5; //单链表 t…...

【R语言】环境空间

一、环境空间种类 R语言中有5种环境&#xff1a; 全局环境&#xff1a;也叫用户环境&#xff0c;指在当前用户下R程序运行的环境空间。 内部环境&#xff1a;通过“new.env()”命令创建的环境空间&#xff0c;也可以是匿名的环境空间。 父环境&#xff1a;当前环境空间所处…...

Python处理数据库:MySQL与SQLite详解

Python处理数据库&#xff1a;MySQL与SQLite详解 在数据处理和存储方面&#xff0c;数据库扮演着至关重要的角色。Python提供了多种与数据库交互的方式&#xff0c;其中pymysql库用于连接和操作MySQL数据库&#xff0c;而SQLite则是一种轻量级的嵌入式数据库&#xff0c;Pytho…...

软考高项笔记 信息技术及其发展

信息技术及其发展 ❝ 信息系统项目管理师第二章第一节 1. 网络标准协议的定义 网络协议是为计算机网络中进行数据交换而建立的规则、标准或约定的集合。网络协议由三个要素组成&#xff0c;分别是语义、语法和时序。 语义&#xff1a;解释控制信息每个部分的含义&#xff0c;它…...

HAO的Graham学习笔记

前置知识&#xff1a;凸包 摘录oiwiki 在平面上能包含所有给定点的最小凸多边形叫做凸包。 其定义为&#xff1a;对于给定集合 X&#xff0c;所有包含 X 的凸集的交集 S 被称为 X 的 凸包。 说人话就是用一个橡皮筋包含住所有给定点的形态 如图&#xff1a; 正题&#xff1a…...

C#基础知识

0 C#介绍 定义与背景 C#&#xff08;发音为C - sharp&#xff09;是微软公司开发的一种高级编程语言。它是专门为构建在微软的.NET平台上运行的各种应用程序而设计的。在2000年左右推出&#xff0c;目的是结合当时编程语言的优点&#xff0c;如C的强大功能和Java的简单性与安全…...

Kafka中文文档

文章来源&#xff1a;https://kafka.cadn.net.cn 什么是事件流式处理&#xff1f; 事件流是人体中枢神经系统的数字等价物。它是 为“永远在线”的世界奠定技术基础&#xff0c;在这个世界里&#xff0c;企业越来越多地使用软件定义 和 automated&#xff0c;而软件的用户更…...

Tyrant(暴君):反向Shell-后门注入与持久化控制的渗透测试工具

Tyrant Tyrant 是一款用于渗透测试和远程控制持久化的恶意工具&#xff0c;具备以下功能&#xff1a; 反向Shell&#xff1a;允许攻击者通过指定用户UID进行反弹对应权限的Shell会话。后门注入与持久化&#xff1a;在目标系统中注入后门并确保即使重启后依然能恢复控制。Tyran…...

leetcode刷题-贪心04

代码随想录贪心算法part04|452. 用最少数量的箭引爆气球、435. 无重叠区间、763.划分字母区间 452. 用最少数量的箭引爆气球435. 无重叠区间763.划分字母区间 今天的三道题目&#xff0c;都算是 重叠区间 问题&#xff0c;大家可以好好感受一下。 都属于那种看起来好复杂&#…...

系统学习算法: 专题八 二叉树中的深搜

深搜其实就是深度优先遍历&#xff08;dfs&#xff09;&#xff0c;与此相对的还有宽度优先遍历&#xff08;bfs&#xff09; 如果学完数据结构有点忘记&#xff0c;如下图&#xff0c;左边是dfs&#xff0c;右边是bfs 而二叉树的前序&#xff0c;中序&#xff0c;后序遍历都可…...

2022年全国职业院校技能大赛网络系统管理赛项模块A:网络构建(样题2)-网络部分解析-附详细代码

目录 附录1:拓扑图​编辑 附录2:地址规划表 1.SW1 2.SW2 3.SW3 4.SW4 5.SW5 6.SW6 7.SW7 8.R1 9.R2 10.R3 11.AC1 12.AC2 13.EG1 14.EG2 15.AP2 16.AP3 附录1:拓扑图 附录2:地址规划表...

笔试-业务逻辑4

应用 小明在玩一个数字加减游戏&#xff0c;输入4个正整数&#xff1a;s、t、a、b&#xff0c;其中s>1&#xff0c;b<105&#xff0c;a!b。只使用加法或者减法&#xff0c;使得st。 每回合&#xff0c;小明用当前的数字&#xff0c;加上或减去一个数字&#xff1b;目前有…...

冷启动+强化学习:DeepSeek-R1 的原理详解——无需监督数据的推理能力进化之路

本文基于 DeepSeek 官方论文进行分析,论文地址为:https://github.com/deepseek-ai/DeepSeek-R1/blob/main/DeepSeek_R1.pdf 有不足之处欢迎评论区交流 原文翻译 在阅读和理解一篇复杂的技术论文时,逐字翻译是一个重要的步骤。它不仅能帮助我们准确把握作者的原意,还能为后续…...

ubuntu22安装issac gym记录

整体参考&#xff1a;https://blog.csdn.net/Yakusha/article/details/144306858 安装完成后的整体版本信息 ubuntu&#xff1a;22.04内核&#xff1a;6.8.0-51-generic显卡&#xff1a;NVIDIA GeForce RTX 3050 OEM显卡驱动&#xff1a;535.216.03cuda&#xff1a;12.2cudnn&…...

Docker小游戏 | 使用Docker部署2048网页小游戏

Docker小游戏 | 使用Docker部署2048网页小游戏 前言项目介绍项目简介项目预览二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署2048网页小游戏下载镜像创建容器检查容器状态检查服务端口安全设置四、访问2048网页小游戏五、总结前言 在当今快速发展的技术世…...

C基础寒假练习(2)

一、输出3-100以内的完美数&#xff0c;(完美数&#xff1a;因子和(因子不包含自身)数本身 #include <stdio.h>// 函数声明 int isPerfectNumber(int num);int main() {printf("3-100以内的完美数有:\n");for (int i 3; i < 100; i){if (isPerfectNumber…...

传输层协议 UDP 与 TCP

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 一&#xff1a;&#x1f525; 前置复盘&#x1f98b; 传输层&#x1f98b; 再谈端口号&#x1f98b; 端口号范围划分&#x1f98b; 认识知名端口号 (Well-Know Port Number) 二&#xf…...

Vue06

目录 一、声明式导航-导航链接 1.需求 2.解决方案 3.通过router-link自带的两个样式进行高亮 二、声明式导航的两个类名 1.router-link-active 2.router-link-exact-active 三、声明式导航-自定义类名&#xff08;了解&#xff09; 1.问题 2.解决方案 3.代码演示 四…...

AJAX笔记进阶篇

黑马程序员视频地址&#xff1a; AJAX-Day04-01.同步代码和异步代码https://www.bilibili.com/video/BV1MN411y7pw?vd_source0a2d366696f87e241adc64419bf12cab&spm_id_from333.788.videopod.episodes&p47 同步代码和异步代码 回调函数地狱与解决方法 回调函数地狱…...

Linux+Docer 容器化部署之 Shell 语法入门篇 【Shell 循环类型】

文章目录 一、Shell 循环类型二、Shell while 循环三、Shell for 循环四、Shell until 循环五、Shell select 循环六、总结 一、Shell 循环类型 循环是一个强大的编程工具&#xff0c;使您能够重复执行一组命令。在本教程中&#xff0c;您将学习以下类型的循环 Shell 程序&…...

【Redis】安装配置Redis超详细教程 / Linux版

Linux安装配置Redis超详细教程 安装redis依赖安装redis启动redis停止redisredis.conf常见配置设置redis为后台启动修改redis监听地址设置工作目录修改密码监听的端口号数据库数量设置redis最大内存设置日志文件设置redis开机自动启动 学习视频&#xff1a;黑马程序员Redis入门到…...

S4 HANA明确税金汇差科目(OBYY)

本文主要介绍在S4 HANA OP中明确税金汇差科目(OBYY)相关设置。具体请参照如下内容&#xff1a; 1. 明确税金汇差科目(OBYY) 以上配置点定义了在外币挂账时&#xff0c;当凭证抬头汇率和税金行项目汇率不一致时&#xff0c;造成的差异金额进入哪个科目。此类情况只发生在FB60/F…...

Nginx反向代理 笔记250203

Nginx反向代理 Nginx 是一个高性能的 HTTP 服务器和反向代理服务器。反向代理是指客户端请求资源时&#xff0c;Nginx 作为中间层&#xff0c;将请求转发到后端服务器&#xff0c;并将后端服务器的响应返回给客户端。通过反向代理&#xff0c;可以实现负载均衡、缓存、SSL 终端…...

【ChatGPT:开启人工智能新纪元】

一、ChatGPT 是什么 最近,ChatGPT 可是火得一塌糊涂,不管是在科技圈、媒体界,还是咱们普通人的日常聊天里,都能听到它的大名。好多人都在讨论,这 ChatGPT 到底是个啥 “神器”,能让大家这么着迷?今天咱就好好唠唠。 ChatGPT,全称是 Chat Generative Pre-trained Trans…...

OpenAI 实战进阶教程 - 第六节: OpenAI 与爬虫集成实现任务自动化

爬虫与 OpenAI 模型结合&#xff0c;不仅能高效地抓取并分析海量数据&#xff0c;还能通过 NLP 技术生成洞察、摘要&#xff0c;极大提高业务效率。以下是一些实际工作中具有较高价值的应用案例&#xff1a; 1. 电商价格监控与智能分析 应用场景&#xff1a; 电商企业需要监控…...

49【服务器介绍】

服务器和你的电脑可以说是一模一样的&#xff0c;只不过用途不一样&#xff0c;叫法就不一样了 物理服务器和云服务器的区别 整台设备眼睛能够看得到的&#xff0c;我们一般称之为物理服务器。所以物理服务器是比较贵的&#xff0c;不是每一个开发者都能够消费得起的。 …...

docker pull Error response from daemon问题

里面填写 里面解决方案就是挂代理。 以虚拟机为例&#xff0c;将宿主机配置端口设置&#xff0c;https/http端口设为7899 配置虚拟机的http代理&#xff1a; vim /etc/systemd/system/docker.service.d/http-proxy.conf里面填写&#xff0c;wq保存 [Service] Environment…...

院校联合以项目驱动联合培养医工计算机AI人才路径探析

一、引言 1.1 研究背景与意义 在科技飞速发展的当下&#xff0c;医疗人工智能作为一个极具潜力的新兴领域&#xff0c;正深刻地改变着传统医疗模式。从疾病的早期诊断、个性化治疗方案的制定&#xff0c;到药物研发的加速&#xff0c;人工智能技术的应用极大地提升了医疗服务…...

C++ Primer 标准库vector

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…...

Mac本地部署DeekSeek-R1下载太慢怎么办?

Ubuntu 24 本地安装DeekSeek-R1 在命令行先安装ollama curl -fsSL https://ollama.com/install.sh | sh 下载太慢&#xff0c;使用讯雷&#xff0c;mac版下载链接 https://ollama.com/download/Ollama-darwin.zip 进入网站 deepseek-r1:8b&#xff0c;看内存大小4G就8B模型 …...

kamailio-ACC_JSON模块详解【后端语言go】

要确认 ACC_JSON 模块是否已经成功将计费信息推送到消息队列&#xff08;MQueue&#xff09;&#xff0c;以及如何从队列中取值&#xff0c;可以按照以下步骤进行操作&#xff1a; 1. 确认 ACC_JSON 已推送到队列 1.1 配置 ACC_JSON 确保 ACC_JSON 模块已正确配置并启用。以下…...

利用Python高效处理大规模词汇数据

在本篇博客中&#xff0c;我们将探讨如何使用Python及其强大的库来处理和分析大规模的词汇数据。我们将介绍如何从多个.pkl文件中读取数据&#xff0c;并应用一系列算法来筛选和扩展一个核心词汇列表。这个过程涉及到使用Pandas、Polars以及tqdm等库来实现高效的数据处理。 引…...

安装hami的笔记

k3s环境下安装hami提示如下错误&#xff1a; "failed to “StartContainer” for “kube-scheduler” with InvalidImageName: "Failed to apply default image tag “registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.31.2k3s1”: 没有Inva…...

2024美团春招硬件开发笔试真题及答案解析

目录 一、选择题 1、在 Linux,有一个名为 file 的文件,内容如下所示: 2、在 Linux 中,关于虚拟内存相关的说法正确的是() 3、AT89S52单片机中,在外部中断响应的期间,中断请求标志位查询占用了()。 4、下列关于8051单片机的结构与功能,说法不正确的是()? 5、…...

HTML 字符实体

HTML 字符实体 在HTML中,字符实体是一种特殊的表示方式,用于在文档中插入那些无法直接通过键盘输入的字符。字符实体在网页设计和文档编写中扮演着重要的角色,尤其是在处理特殊字符、符号和数学公式时。以下是关于HTML字符实体的详细解析。 字符实体概述 HTML字符实体是一…...

FPGA|生成jic文件固化程序到flash

1、单击file-》convert programming files 2、flie type中选中jic文件&#xff0c;configuration decive里根据自己的硬件选择&#xff0c;单击flash loader选择右边的add device选项 3、选择自己的硬件&#xff0c;单击ok 4、选中sof选项&#xff0c;单机右侧的add file 5、选…...