数据结构------手撕顺序表
文章目录
- 线性表
- 顺序表的使用及其内部方法
- ArrayList 的扩容机制
- 顺序表的几种遍历方式
- 顺序表的优缺点
- 顺序表的模拟实现
- 洗牌算法
线性表
线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列…
线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储
顺序表的使用及其内部方法
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。ArrayList底层是一段连续的空间,并且可以动态扩容,是一个动态类型的顺序表
ArrayList的使用
ArrayList 的构造方法如下:
示例代码如下:
public static void main(String[] args) {
// ArrayList创建,推荐写法
List<Integer> list1 = new ArrayList<>();
// 构造一个具有10个容量的列表
List<Integer> list2 = new ArrayList<>(10);
list2.add(1);
list2.add(2);
list2.add(3);
// list2.add("hello"); // 编译失败,List<Integer>已经限定了,list2中只能存储整形元素
// list3构造好之后,与list中的元素一致
ArrayList<Integer> list3 = new ArrayList<>(list2);
// 避免省略类型,否则:任意类型的元素都可以存放,使用时将是一场灾难
List list4 = new ArrayList();
list4.add("111");
list4.add(100);
}
ArrayList 中的方法
ArrayList 的扩容机制
ArrayList是一个动态类型的顺序表,即:在插入元素的过程中会自动扩容。
【总结】
- 默认容量为10
- 检测是否真正需要扩容,如果是调用grow准备扩容
- 预估需要扩容的大小
- 初步预估按照1.5倍大小扩容
- 如果用户所需大小超过预估1.5倍大小,则按照用户所需大小扩容
- 真正扩容之前检测是否能扩容成功,防止太大导致扩容失败
- 使用copyOf进行扩容
顺序表的几种遍历方式
public static void main(String[] args) {ArrayList<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);System.out.println(list);System.out.println("=========for循环遍历=========");for (int i = 0; i < list.size(); i++) {System.out.print(list.get(i) +" ");}System.out.println();System.out.println("=========foreach循环遍历=========");for(Integer x : list) {System.out.print(x +" ");}System.out.println();System.out.println("=========迭代器遍历1=========");Iterator<Integer> it = list.iterator();while(it.hasNext()) {System.out.print(it.next() +" ");}System.out.println();System.out.println("=========迭代器遍历2=========");ListIterator<Integer> tmpList = list.listIterator();while(tmpList.hasNext()) {System.out.print(tmpList.next() +" ");}System.out.println();System.out.println("=========迭代器遍历3=========");ListIterator<Integer> tmpList2 = list.listIterator(list.size());while(tmpList2.hasPrevious()) {System.out.print(tmpList2.previous() +" ");}System.out.println();}
顺序表的优缺点
优点:
- 内存连续—>物理上和逻辑上
- 根据下标查找元素,时间复杂度为O(1)
缺点:
- 插入数据和删除数据不合适,因为每次都要移动元素
- 时间复杂度会达到O(N)
顺序表的模拟实现
顺序表的底层使用数组实现的,所以这里模拟实现顺序表也使用数组来实现。
在实现之前,先看看ArrayList中的常用方法,后续要模拟实现这些方法,如下:
public class IList {
// 新增元素,默认在数组最后新增
public void add(int data) { }
// 在 pos 位置新增元素
public void add(int pos, int data) { }
// 判定是否包含某个元素
public boolean contains(int toFind) { return true; }
// 查找某个元素对应的位置
public int indexOf(int toFind) { return -1; }
// 获取 pos 位置的元素
public int get(int pos) { return -1; }
// 给 pos 位置的元素设为 value
public void set(int pos, int value) { }
//删除第一次出现的关键字key
public void remove(int toRemove) { }
// 获取顺序表长度
public int size() { return 0; }
// 清空顺序表
public void clear() { }
// 打印顺序表,注意:该方法并不是顺序表中的方法,为了方便看测试结果给出的
public void display() { }
}
【思路】:把这些ArrayList中的方法放入一个接口中(当然这些方法放入接口中暂时没有具体实现,为抽象方法),让模拟实现的MyArrayList 类实现这个接口,然后在MyArrayList 类中把这些方法全部重写并实现。
创建一个 IList 接口,接口中包含各种关于ArrayList的抽象方法,代码示例如下:
public interface IList {// 新增元素,默认在数组最后新增void add(int data);// 在 pos 位置新增元素void add(int pos, int data);// 判定是否包含某个元素boolean contains(int toFind);// 查找某个元素对应的位置int indexOf(int toFind) ;//// 获取 pos 位置的元素int get(int pos);// 给 pos 位置的元素设为 valuevoid set(int pos, int value);//删除第一次出现的关键字keyvoid remove(int toRemove);// 获取顺序表长度int size();// 清空顺序表void clear();// 打印顺序表,注意:该方法并不是顺序表中的方法,为了方便看测试结果给出的void display();//判断数组是否为空boolean isEmpty();//删除所有数据为toRemove的元素void removeAll(int toRemove);
}
创建MyArrayList 类 使其实现 IList 接口,在类中重写接口中的方法
import java.util.Arrays;
public class MyArrayList implements IList{public int[] elem;public int usedSize;public MyArrayList() {this.elem = new int[10];}//判断数组是否满了public boolean isFull() {return elem.length == usedSize;}//数组满了,进行扩容private void grow() {elem = Arrays.copyOf(elem,2*elem.length);}/*** 对数组的 最后一个位置 新增data* @param data*/@Overridepublic void add(int data) {if(isFull()) {grow();}elem[usedSize] = data;usedSize++;}/*** 在pos位置 新增 元素data* @param pos* @param data*/@Overridepublic void add(int pos, int data) {if(isFull()) {grow();}if(pos < 0 || pos > usedSize) {throw new PosOutOfException("pos位置不合法");}for (int i = usedSize-1; i >= pos; i--) {elem[i+1] = elem[i];}elem[pos] = data;usedSize++;}/*** 查找一个数据,返回true或false* @param toFind* @return*/@Overridepublic boolean contains(int toFind) {if(isEmpty()) {return false;}for (int i = 0; i < usedSize; i++) {if(elem[i] == toFind) {return true;}}return false;}/*** 查找一个数据,返回其下标* @param toFind* @return*/@Overridepublic int indexOf(int toFind) {for (int i = 0; i < usedSize; i++) {if(elem[i] == toFind) {return i;}}return -1;}/*** 查找下标为pos的元素,返回其数值* @param pos* @return*/@Overridepublic int get(int pos) {if(isEmpty()) {throw new EmptyArrayListException("顺序表为空");}if(pos < 0 || pos >= usedSize) {throw new RuntimeException("pos位置不合法");}return elem[pos];}/*** pos位置 设置成 value* @param pos* @param value*/@Overridepublic void set(int pos, int value) {if(pos < 0 || pos >= usedSize) {throw new PosOutOfException("pos位置不合法");}elem[pos] = value;}/*** 删除数组中的一个元素 toMove* @param toRemove*/@Overridepublic void remove(int toRemove) {int index = indexOf(toRemove);if(index == -1) {return;}for (int i = index; i < usedSize-1; i++) {elem[i] = elem[i+1];}usedSize--;}@Overridepublic int size() {return usedSize;}@Overridepublic void clear() {usedSize = 0;}@Overridepublic void display() {for (int i = 0; i < usedSize; i++) {System.out.print(elem[i] +" ");}System.out.println();}@Overridepublic boolean isEmpty() {if(usedSize == 0) {return true;}return false;}@Overridepublic void removeAll(int toRemove) {while(contains(toRemove)) {int index = indexOf(toRemove);for (int i = index; i < usedSize-1; i++) {elem[i] = elem[i+1];}usedSize--;}}
}
测试类Test
public static void main1(String[] args) {MyArrayList myArrayList = new MyArrayList();myArrayList.add(1);myArrayList.add(2);myArrayList.add(3);myArrayList.add(1,19);myArrayList.display();myArrayList.set(0,100);myArrayList.display();boolean ret = myArrayList.contains(100);System.out.println(ret);myArrayList.set(1,33);myArrayList.display();myArrayList.add(0,1);myArrayList.add(1,2);myArrayList.add(2,1);myArrayList.add(3,4);myArrayList.add(4,1);myArrayList.display();myArrayList.removeAll(1);myArrayList.display();}
洗牌算法
实现效果:能够完成创建扑克牌、洗牌、发牌操作
思路:
完成洗牌和发牌操作,需要先拿到一副扑克牌,所以先创建一副扑克牌(共52张牌,没有大小王)
一副扑克牌由 13张红桃♥、13张黑桃♠、13张方片♦、13张梅花♣ 组成。
创建 Card类,内部定义变量 suit 花色、rank 数字,重写toString方法,便于观察每张牌的信息
创建 Game类,内部实现 创建一副牌、洗牌、发牌操作.
Card类的代码示例如下:
public class Card {public String suit;//花色--红桃、黑桃、方块、梅花public int rank;//数字public Card(String suit, int rank) {this.suit = suit;this.rank = rank;}@Overridepublic String toString() {
// return "Card{" +
// "suit='" + suit + '\'' +
// ", rank=" + rank +
// '}';return "{ "+suit+rank+" }";}
}
1.创建一副牌,使用顺序表作为容器,将每一张牌放入这个容器中
如何把每一张牌放入顺序表中?–> 四种不同花色分别有13张牌,所以使用两个 for 循环,将卡牌放入顺序表
内部循环13次,把放入同一花色的13张牌放入顺序表,外部循环4次,每次都是不同的花色。代码示例如下:
import java.util.ArrayList;
import java.util.List;
import java.util.Random;public class Game {public String[] suits = {"♥","♠","♦","♣"};public List<Card> cardsList = new ArrayList<>();//作为扑克牌的容器//创建一副扑克牌public List<Card> createCards() {for (int i = 0; i < suits.length; i++) {for (int j = 1; j <= 13 ; j++) {Card card = new Card(suits[i],j);cardsList.add(card);}}return cardsList;}
2.洗牌操作,现实中洗牌是将任意不同的卡牌交换位置,转换为代码层面,可以把任意不同下标的卡牌进行交换,for(i)循环遍历顺序表,每次生成一个i下标后面的随机数(i+1,51),但是这样生成随机数的实现比较麻烦,因此可以从最后面即下标为 51 的位置向前遍历顺序表,每次生成 [0,i) 的随机数,然后交换下标为i 和 下标为randIndex的元素。 代码示例如下:
//洗牌操作public void shuffle(List<Card> cardsList) {Random random = new Random();for (int i = 51; i > 0; i--) {int randIndex = random.nextInt(i);//生成 [0,i-1] 区间的随机数//i下标位置 与 randIndex下标位置元素进行交换swap(i,randIndex);}}//i下标位置 与 randIndex下标位置元素进行交换private void swap(int i,int randIndex) {Card tmp = cardsList.get(i);cardsList.set(i,cardsList.get(randIndex));cardsList.set(randIndex,tmp);}
3.发牌操作
要求:三人依次取牌,每人每次取牌一张,进行五次轮回取牌,最终每人手中有五张牌
三个人取出的牌,也需要一个容器容纳扑克牌,可以为每个人创建一个顺序表容纳取出的扑克牌
三人依次取牌,每次一张,进行五次轮回,就可以使用两个for循环,完成取牌和牌进入入顺序表的操作
每次取牌都要把取出的这张牌从顺序表中删除,避免其他人重复取这张牌(现实中也是如此,取出一张牌,那么这张牌就不会存在于 待取的那摊扑克牌中,谁取的这张牌,这张牌就在谁手上),转换为代码层面,就是调用 cardsList.remove(0)
方法。将cardsList.remove(0)
方法的返回值 传给 每个人的手中
【注意】这里
cardsList.remove(0)
方法中的参数一直都是0,因为每次取牌都是最上面的牌,而顺序表删除已取出的牌之后,第二张牌又会称为新的下标为 0 的新的元素。
代码示例如下:
//发牌,三个人轮流取牌,一次取一张,最终每个人五张牌public List<List<Card>> play(List<Card> cardsList) {List<List<Card>> cardLists = new ArrayList<>();List<Card> hand0 = new ArrayList<>();List<Card> hand1 = new ArrayList<>();List<Card> hand2 = new ArrayList<>();cardLists.add(hand0);cardLists.add(hand1);cardLists.add(hand2);for (int i = 0; i < 5; i++) {for (int j = 0; j < 3; j++) {Card card = cardsList.remove(0);cardLists.get(j).add(card);}}return cardLists;}
Test测试类,代码示例如下:
import java.util.List;public class Test {public static void main(String[] args) {Game game = new Game();List<Card> cardsList = game.createCards();System.out.println("初始牌:"+cardsList);game.shuffle(cardsList);System.out.println("洗过后的牌:"+cardsList);System.out.println("发牌后,每人手中的牌:"+game.play(cardsList));}
}
运行结果:
“C:\Program Files\Java\jdk-17\bin\java.exe” “-javaagent:D:\softstall\idea\IntelliJ IDEA Community Edition 2021.3.3\lib\idea_rt.jar=63623:D:\softstall\idea\IntelliJ IDEA Community Edition 2021.3.3\bin” -Dfile.encoding=UTF-8 -classpath D:\javacode\J20241025_CardGame\out\production\J20241025_CardGame Test
初始牌:[{ ♥1 }, { ♥2 }, { ♥3 }, { ♥4 }, { ♥5 }, { ♥6 }, { ♥7 }, { ♥8 }, { ♥9 }, { ♥10 }, { ♥11 }, { ♥12 }, { ♥13 }, { ♠1 }, { ♠2 }, { ♠3 }, { ♠4 }, { ♠5 }, { ♠6 }, { ♠7 }, { ♠8 }, { ♠9 }, { ♠10 }, { ♠11 }, { ♠12 }, { ♠13 }, { ♦1 }, { ♦2 }, { ♦3 }, { ♦4 }, { ♦5 }, { ♦6 }, { ♦7 }, { ♦8 }, { ♦9 }, { ♦10 }, { ♦11 }, { ♦12 }, { ♦13 }, { ♣1 }, { ♣2 }, { ♣3 }, { ♣4 }, { ♣5 }, { ♣6 }, { ♣7 }, { ♣8 }, { ♣9 }, { ♣10 }, { ♣11 }, { ♣12 }, { ♣13 }]
洗过后的牌:[{ ♣13 }, { ♥13 }, { ♠5 }, { ♦10 }, { ♠13 }, { ♦12 }, { ♥4 }, { ♦6 }, { ♣5 }, { ♣3 }, { ♣1 }, { ♠12 }, { ♣11 }, { ♣2 }, { ♣7 }, { ♥5 }, { ♦9 }, { ♥11 }, { ♥2 }, { ♦2 }, { ♥7 }, { ♦5 }, { ♣12 }, { ♠7 }, { ♠11 }, { ♦11 }, { ♥1 }, { ♠8 }, { ♥10 }, { ♣8 }, { ♥8 }, { ♥3 }, { ♠4 }, { ♣10 }, { ♦4 }, { ♠2 }, { ♠1 }, { ♥9 }, { ♠3 }, { ♣6 }, { ♠6 }, { ♦7 }, { ♥12 }, { ♦8 }, { ♣4 }, { ♠10 }, { ♦13 }, { ♠9 }, { ♦1 }, { ♣9 }, { ♥6 }, { ♦3 }]
发牌后,每人手中的牌:[[{ ♣13 }, { ♦10 }, { ♥4 }, { ♣3 }, { ♣11 }], [{ ♥13 }, { ♠13 }, { ♦6 }, { ♣1 }, { ♣2 }], [{ ♠5 }, { ♦12 }, { ♣5 }, { ♠12 }, { ♣7 }]]
相关文章:
数据结构------手撕顺序表
文章目录 线性表顺序表的使用及其内部方法ArrayList 的扩容机制顺序表的几种遍历方式顺序表的优缺点顺序表的模拟实现洗牌算法 线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,…...
UDP(用户数据报协议)端口监控
随着网络的扩展,确保高效的设备通信对于优化网络功能变得越来越重要。在这个过程中,端口发挥着重要作用,它是实现外部设备集成的物理连接器。通过实现数据的无缝传输和交互,端口为网络基础设施的顺畅运行提供了保障。端口使数据通…...
【Java小白图文教程】-05-数组和排序算法详解
精品专题: 01.《C语言从不挂科到高绩点》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12753294.html?spm1001.2014.3001.5482 02. 《SpringBoot详细教程》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12789841.html?spm1001.20…...
OpenCV视觉分析之目标跟踪(1)计算密集光流的类DISOpticalFlow的介绍
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 这个类实现了 Dense Inverse Search (DIS) 光流算法。更多关于该算法的细节可以在文献 146中找到。该实现包含了三个预设参数集,以提…...
Lucas带你手撕机器学习——套索回归
好的,下面我将详细介绍套索回归的背景、理论基础、实现细节以及在实践中的应用,同时还会讨论其优缺点和一些常见问题。 套索回归(Lasso Regression) 1. 背景与动机 在机器学习和统计学中,模型的复杂性通常会影响其在…...
面试中的一个基本问题:如何在数据库中存储密码?
面试中的一个基本问题:如何在数据库中存储密码? 在安全面试中,“如何在数据库中存储密码?”是一个基础问题,但反映了应聘者对安全最佳实践的理解。以下是安全存储密码的最佳实践概述。 了解风险 存储密码必须安全&am…...
XML HTTP Request
XML HTTP Request 简介 XMLHttpRequest(XHR)是一个JavaScript对象,它最初由微软设计,并在IE5中引入,用于在后台与服务器交换数据。它允许网页在不重新加载整个页面的情况下更新部分内容,这使得网页能够实现动态更新,大大提高了用户体验。虽然名字中包含“XML”,但XML…...
TLS协议基本原理与Wireshark分析
01背 景 随着车联网的迅猛发展,汽车已经不再是传统的机械交通工具,而是智能化、互联化的移动终端。然而,随之而来的是对车辆通信安全的日益严峻的威胁。在车联网生态系统中,车辆通过无线网络与其他车辆、基础设施以及云端服务进行…...
当遇到 502 错误(Bad Gateway)怎么办
很多安装雷池社区版的时候,配置完成,访问的时候可能会遇到当前问题,如何解决呢? 客户端,浏览器排查 1.刷新页面和清除缓存 首先尝试刷新页面,因为有时候 502 错误可能是由于网络临时波动导致服务器无法连…...
学习记录:js算法(七十五): 加油站
文章目录 加油站思路一思路二思路三思路四思路五 加油站 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发…...
强心剂!EEMD-MPE-KPCA-LSTM、EEMD-MPE-LSTM、EEMD-PE-LSTM故障识别、诊断
强心剂!EEMD-MPE-KPCA-LSTM、EEMD-MPE-LSTM、EEMD-PE-LSTM故障识别、诊断 目录 强心剂!EEMD-MPE-KPCA-LSTM、EEMD-MPE-LSTM、EEMD-PE-LSTM故障识别、诊断效果一览基本介绍程序设计参考资料 效果一览 基本介绍 EEMD-MPE-KPCA-LSTM(集合经验模态分解-多尺…...
yarn的安装与使用以及与npm的区别(安装过程中可能会遇到的问题)
一、yarn的安装 使用npm就可以进行安装 但是需要注意的一点是yarn的使用和node版本是有关系的必须是16.0以上的版本。 输入以下代码就可以实现yarn的安装 npm install -g yarn 再通过版本号的检查来确定,yarn是否安装成功 yarn -v二、遇到的问题 1、问题描述…...
大数据行业预测
大数据行业预测 编译 李升伟 和所有预测一样,我们必须谨慎对待这些预测,因为其中一些预测可能成不了事实。当然,真正改变游戏规则的创新往往出乎意料,甚至让最警惕的预言家也措手不及。所以,如果在来年发生了一些惊天…...
可能是NextJs(使用ssr、api route)打包成桌面端(nextron、electron、tauri)的最佳解决方式
可能是NextJs(使用ssr、api route)打包成桌面端(nextron、electron、tauri)的最佳解决方式 前言 在我使用nextron(nextelectron)写了一个项目后打包发现nextron等一系列桌面端框架在生产环境是不支持next的ssr也就是api route功能的这就导致我非常难受&…...
二百七十、Kettle——ClickHouse中增量导入清洗数据错误表
一、目的 比如原始数据100条,清洗后,90条正确数据在DWD层清洗表,10条错误数据在DWD层清洗数据错误表,所以清洗数据错误表任务一定要放在清洗表任务之后。 更关键的是,Hive中原本的SQL语句,放在ClickHouse…...
CentOS6升级OpenSSH9.2和OpenSSL3
文章目录 1.说明2.下载地址3.升级OpenSSL4.安装telnet 服务4.1.安装 telnet 服务4.2 关闭防火墙4.2.使用 telnet 连接 5.升级OpenSSH5.1.安装相关命令依赖5.2.备份原 ssh 配置5.3.卸载原有的 OpenSSH5.4.安装 OpenSSH5.5.修改 ssh 配置文件5.6关闭 selinux5.7.重启 OpenSSH 1.说…...
2024 年 MathorCup 数学应用挑战赛——大数据竞赛-赛道 A:台风的分类与预测
2024年MathorCup大数据挑战赛-赛道A初赛--思路https://download.csdn.net/download/qq_52590045/89922904↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓…...
kotlin实现viewpager
说明:kotlin tablayout viewpager adapter实现滑动界面 效果图 step1: package com.example.flushfragmentdemoimport androidx.appcompat.app.AppCompatActivity import android.os.Bundle import androidx.fragment.app.Fragment import androidx.viewpager2.adapter.…...
RabbitMQ最新版本4.0.2在Windows下的安装及使用
RabbitMQ 是一个开源的消息代理和队列服务器,提供可靠的消息传递和队列服务。它支持多种消息协议,包括 AMQP、STOMP、MQTT 等。本文将详细介绍如何在 Windows 系统上安装和使用最新版本的 RabbitMQ 4.0.2。 前言 RabbitMQ 是用 Erlang 语言开发的 AMQP&…...
东方博宜1180 - 数字出现次数
问题描述 有 50 个数( 0∼19),求这 50个数中相同数字出现的最多次数为几次? 输入 50 个数字。 输出 1 个数字(即相同数字出现的最多次数)。 样例 输入 1 10 2 0 15 8 12 7 0 3 15 0 15 18 16 7 17 16 9 …...
LeetCode: 3274. 检查棋盘方格颜色是否相同
一、题目 给你两个字符串 coordinate1 和 coordinate2,代表 8 x 8 国际象棋棋盘上的两个方格的坐标。 以下是棋盘的参考图。 如果这两个方格颜色相同,返回 true,否则返回 false。 坐标总是表示有效的棋盘方格。坐标的格式总是先…...
datax编译并测试
mvn -U clean package assembly:assembly -Dmaven.test.skiptrue 参看:DataX导数的坑_datax插件初始化错误, 该问题通常是由于datax安装错误引起,请联系您的运维解决-CSDN博客 两边表结构先创建好: (base) [rootlnpg bin]# pwd /db/DataX-datax_v20230…...
2-133 基于matlab的粒子群算法PSO优化BP神经网络
基于matlab的粒子群算法PSO优化BP神经网络,BP神经网络算法采用梯度下降算法,以输出误差平方最小为目标,采用误差反向传播,训练网络节点权值和偏置值,得到训练模型。BP神经网络的结构(层数、每层节点个数)较复杂时&…...
复盘秋招22场面试(四)形势重新评估与后续措施
连续好多天睡不着觉,经常晚上起来好几次,到现在还是没offer。之前有个校友在抖音留言说我能收到这么多面试说明简历没问题,这么多一面挂,说明我技术面有问题。确实有一些是kpi面,但是我复盘之后我发现也没有那么多kpi面…...
揭开C++ STL的神秘面纱之string:提升编程效率的秘密武器
目录 🚀0.前言 🚈1.string 构造函数 🚝1.1string构造函数 🚝1.2string拷贝构造函数 🚈2.string类的使用 🚝2.1.查询元素个数或空间 返回字符串中有效字符的个数:size lenth 返回字符串目…...
用人工智能,应该怎么掏钱?
人工智能(AI)服务的发展正快速改变企业和开发者的工作方式,不仅提供了强大的数据分析和预测能力,还涵盖了从自然语言处理到图像识别的广泛功能。然而,理解AI服务的支付模式对成本控制和合理资源分配至关重要࿰…...
【Axure高保真原型】移动案例
今天和大家分享多个常用的移动案例的原型模板,包括轮盘滑动控制元件移动、页面按钮控制元件移动、鼠标单击控制元件移动、元件跟随鼠标移动、鼠标拖动控制元件移动、键盘方向键控制元件移动,具体效果可以点击下方视频观看或打开下方预览地址查看哦 【原…...
Bytebase 3.0.0 - AI 助手全面升级
🚀 新功能 SQL 编辑器里的 AI 助手:支持将自然语言转换成 SQL 语句,解释 SQL 代码,还能帮助发现潜在问题。 支持 SQL Server DML 语句一键回滚。支持 MariaDB 的在线大表变更。新的 SQL 审核规则: 要求为 MySQL 设置 …...
php基础:数据类型、常量、字符串
语法补充: 每句必须以;结尾 echo:能输出一个以上的字符串,英文逗号隔开 print:只能输出一个字符串并返回1 1.数据类型 php可以自动识别数据类型。 php有5种数据类型:String(字符串…...
Discuz发布原创AI帖子内容生成:起尔 | AI原创帖子内容生成插件开发定制
Discuz发布原创AI帖子内容生成:起尔 | AI原创帖子内容生成插件开发定制 在当今互联网快速发展的时代,内容创作成为了网站运营、社交媒体管理和个人博客维护不可或缺的一部分。然而,高质量内容的创作往往耗时耗力,特别是对于需要频…...
seo在线网站诊断推推蛙/百度外包公司有哪些
2019独角兽企业重金招聘Python工程师标准>>> Bean的作用域Spring 3中为Bean定义了5中作用域,分别为singleton(单例)、prototype(原型)、request、session和global session,5种作用域说明如下&am…...
网站建设合同性质/装修公司网络推广方案
问题:使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”。程序设计思想:利用静态变量指定一个计数器number,创建一个对象…...
easyui做门户网站/友情链接检查工具
本文讲述 MiniGUI 中的对话框和控件编程。首先讲解 MiniGUI 中的控件类和控件实例的关系,并举例说明控件子类化的概念及应用;其次讲解 MiniGUI 对话框的编程技术,包括对话框模板的定义和对话框回调函数的编程;最后解释模态对话框和…...
制作好网站/市场营销策划方案3000字
题目描述 现在棋盘的大小不一定,由p,q给出,并且在棋盘中将出现障碍物(限制马的行动,与象棋走法相同) 输入 第一行输入n表示有n组测试数据。 每组测试数据第一行输入2个整数p,q,表示棋盘的大…...
淘宝客做网站好还是建群号/自动优化句子的软件
一、编辑Grafana配置文件,设置发件人 docker安装的Grafana: vim /home/monitor/grafana/config/grafana.iniyum安装: vim /etc/grafana/grafana.ini在[smtp] 标签下 修改配置 # 配置邮件服务器 [smtp] enabled true # 发件服务器 host s…...
做网站用什么/企业邮箱怎么开通注册
MySQL数据字典相关的sql查询和navicat的一个导出ER图功能##mysql 查看表结构SELECTCOLUMN_NAME Field,COLUMN_TYPE Type,IS_NULLABLE Null,COLUMN_KEY Key,COLUMN_DEFAULT Default,COLUMN_COMMENT CommentFROMINFORMATION_SCHEMA.COLUMNSWHEREtable_schema dbname ##数据库名A…...