Java变长数组笛卡尔积_面 经

本文深入探讨了网络连接的建立,包括手机与WiFi、路由器的工作原理,以及内网中电脑的连接方式。浏览器输入URL后发生的一系列过程,如DNS解析、TCP/IP通信等,也进行了详尽阐述。此外,文章涉及了内存管理,如malloc、内存池、进程虚拟地址空间等,并分析了操作系统中的IO模型、调度算法和死锁问题。最后,讨论了数据库的基础知识,如MySQL引擎、索引优化和事务处理。
摘要由CSDN通过智能技术生成

《网络》

手机与wifi是怎么建立连接的

路由器是怎么传输数据的(记不清了,围绕着路由器问了很多)

内网中两台电脑怎么建立连接

在浏览器中输入url,回车发生了什么

13台根域名的服务器ip地址保存在哪里

DNS的分级查找

3次握手都发送了什么数据包

设计路由表查找算法,满足最长匹配,(前缀树,根据需求不同设计4层的或32层的)

硬链接、符号链接的区别

如何处理粘包

ARP协议介绍,ARP表建立的过程

五层网络模型介绍一下,同时介绍一下每一层有哪些协议

http协议,connection选项的作用

IO模型有哪些

用的最多的应该算IO多路复用模型,讲讲它的优缺点

条件变量应用场景

ARP协议是干什么的,属于哪一层

阻塞与非阻塞,IO模型

http长连接短连接说一下

路由器是哪一层的,有什么功能,路由寻址怎么找的,路由表存了什么

ping协议会发生什么事情(当时以为问ICMP,结果下面引导到了dns)

dns协议,让后udp还是tcp

http response里面都有哪些内容(大概说了一部分)

B 树的特点,B 树与B树的区别

get/post 区别

HTTP 怎么建立连接

计算机开机后如何让这台机器联网,说一下mac地址找IP,然后ping测试

了解DHCP协议么

http的报文格式 ,说几个头部

http和https的区别? https加密实现?

错误的状态码

状态码 502是什么?

HTTP协议有状态吗?

cookie和session的作用和工作方式说一下。

HTTPS加密流程说一下,证书是怎么工作的

TCP为什么要进行握手 三次握手,四次挥手,TIME_WAIT状态的作用,时长为什么是2MSL,建立连接的时候只握手两次会有什么问题。

https://zhuanlan.zhihu.com/p/86426969

服务器大量处于TIME_WAIT状态,可能的原因,造成什么影响,怎么解决那大量处于close_wait呢

https://zhuanlan.zhihu.com/p/152120241

TCP为什么可靠

https://zhuanlan.zhihu.com/p/130730913

syn中的序号是固定的吗?这个序号的最大值是多少

socket编程的常见流程,accept调用什么时候会阻塞。

syn队列和accept队列 那listen函数的backlog参数是什么意思

https://zhuanlan.zhihu.com/p/87437843

syn_cookie原理

TCP UDP区别,介绍一下拥塞控制,丢包时为什么阈值会减半

https://zhuanlan.zhihu.com/p/76023663

tcp和udp可以绑定到同一个端口吗?如何实现

socket编程的流程,accept调用和三次握手的关系,accept什么时候会阻塞,accept队列是由谁维护的

有哪些协议是基于 TCP 的,哪些是基于 UDP 的

TCP:HTTP,FTP,SMTP,TENET,

UDP:BOOTP,DHCP,NTP,TFTP,SNMP

DNS可以基于TCP,也可以基于UDP

TCP滑动窗口

https://zhuanlan.zhihu.com/p/60893857

三次握手过程中有哪些不安全性

udp报文什么时候乱序,为社么乱序

可不可以三次挥手(可以,server不发包的时候给一条FIN=1的ACK)?

三次握手期间除了建立连接,还有互相交换什么信息?(窗口大小)

Tcp四次挥手,为什么要有Time-Wait的两个往返时间?如果有大量的Time-Wait会占用哪些资源?最应该的care的资源是什么?(端口号)

tcp四次挥手过程?最后为什么等待2msls,TCP的TIME_WAIT出现在哪一端?作用是什么?

《C++基础》

reactor与proactor的区别

析构函数中不建议抛出异常,这是因为析构函数的调用表示一个对象的销毁(包括对象所占有的资源的释放),如果此时抛出异常,对象将游离在内存之中,对象所占用的资源也将得不到释放

区别一:物理地址存储的连续性

数组的元素在内存中是连续存放的。

链表的元素在内存中不一定是连续存放的,通常是不连续的。

区别二:访问速度

数组的访问速度很快,因为数组可以根据数组可以根据下标进行快速定位。

链表的访问速度较慢,因为链表访问元素需要移动指针。

区别三:添加、删减元素速度

数组的元素增删速度较慢,因为需要移动大量的元素。

链表的元素增删速度较快,因为只需要修改指针即可。

#include 包含文件的时候,尖括号和双引号有什么区别,如果双引号中是库文件的话,会发生什么

#include <>格式:引用标准库头文件,编译器从标准库目录开始搜索

#incluce ""格式:引用非标准库的头文件,编译器从用户的工作目录开始搜索

1、内联函数在编译时展开,而宏在预编译时展开

2、在编译时,内联函数直接被嵌入到目标代码中去,宏只是一个简单文本替换。

3、内联函数可以进行诸如类型安全检查、语句是否正确等编译功能,

5、宏在定义时要小心处理宏参数,一般用括号括起来,否则容易出现二义性。

左值右值的区别

左值:有名字的变量(对象),可以被赋值,可以在多条语句中使用。

右值:没有名字的临时变量(对象),不能被赋值,只能在一条语句中出现。

https://blog.csdn.net/weixin_36691991/article/details/88623482

内存4G,malloc申请4.1G会发生什么 (不行)

OS给每个进程理论上都’分配’了2^32B的空间(逻辑空间),这个逻辑空间的大小与实际内存大小和外存大小都没有关系,只由计算机的地址结构决定(也即是CPU地址寄存器的位数)

char buffer[32] = "quantum6";

buffer[33] = 0x01;

buffer[34] = 0x00;

buffer[35] = 0x00;

buffer[36] = 0x00;

int* p = nullptr;

p = (int*)&buffer[33];

extern作用,在函数内可以使用么(不行)

对变量而言,如果你想在本源文件中使用另一个源文件的变量(注意:此时这个变量应该是全局变量,定义它的位置是在所有函数之外),就需要在使用前用extern声明该变量,或者在头文件中用extern声明该变量;

对函数而言,如果你想在本源文件中使用另一个源文件的函数(注意:此时这个函数应该是全局函数,定义它的位置是在所有函数之外),就需要在使用前用声明该函数,声明函数加不加extern都没关系,所以在头文件中函数可以不用加extern。

extern int a 不需要建立存储空间,其中 变量a是在别的文件中定义的。

个人习惯提高代码可读性, 头文件中用extern,因为头文件不能定义一个变量

头文件为什么不能定义变量

vector迭代器作用

模板使得算法独立于存储的数据类型,而迭代器使算法独立于使用的容器类型。

动态库的静态/动态链接,动态库和静态库区别,如何再运行时调用动态库

new 失败是抛出异常的,malloc返回一个NULL指针.

堆栈溢出的原因

1.函数调用层次太深。函数递归调用时,系统要在栈中不断保存函数调用时的现场和产生的变量,如果递归调用太深,就会造成栈溢出,这时递归无法返回。再有,当函数调用层次过深时也可能导致栈无法容纳这些调用的返回地址而造成栈溢出。

2.动态申请空间使用之后没有释放。由于C语言中没有垃圾资源自动回收机制,因此,需要程序主动释放已经不再使用的动态地址空间。申请的动态空间使用的是堆空间,动态空间使用不会造成堆溢出。

3.数组访问越界。C语言没有提供数组下标越界检查,如果在程序中出现数组下标访问超出数组范围,在运行过程中可能会内存访问错误。

4.指针非法访问。指针保存了一个非法的地址,通过这样的指针访问所指向的地址时会产生内存访问错误。

空类占1个字节,因为对象是有地址的 (占位符),这个地址里边保存的是1个字节才能去地址。

后面的占4+4+4 = 12字节, 因为类也内存对齐

C++菱形继承是怎么解决的,什么情况下菱形继承会出现问题。

《操作系统》

select poll epoll(讲了区别,epoll底层数据结构,ET、LT)

解释一下内存池的概念

Linux IO模型,哪些属于同步IO,哪些属于异步IO

五种IO模型包括:阻塞IO、非阻塞IO、IO多路复用、信号驱动IO、异步IO。

https://zhuanlan.zhihu.com/p/115912936

epoll的底层实现,红黑树了解多少

进程和线程的区别

进程虚拟地址空间,mmap映射和动态链接库在哪个位置

fork,vfork,clone的关系,clone是为了创建线程的吗?

调用malloc时会立即分配物理内存吗?页表中一定会对应物理页框吗?swap交换空间

linux中基本的操作命令,一个日志文件很大,vim打开很费时间,怎么快速搜索某个内容

查看端口号情况

查看进程id、内存使用情况等

查看打开的文件or描述符

常用哪些linux命令,查看线程用哪个命令,会用vim吗

epoll的机制,什么时候用ET

怎么查看端口号占用情况

有一个日志文件,里面每一行都有ip、time、context等信息,怎么查询某个ip有多少个

线程安全队列该怎么实现,说了一下生产者消费者模型

如果不用锁怎么实现,说的自旋锁忙等待

调用fork,发生了些什么事情

32位机器,一个程序可以用的内存有多少

shell脚本了解吗

互斥锁会有一些性能开销,不想用怎么办

什么时候会发生死锁在代码实现上怎么解决死锁呢

有些线程处于死锁状态了,怎么在另一个线程中检测出来

那一个线程可以访问另一个线程的线程栈吗,会发生什么

链表了解吗,跳表呢

进程虚拟地址空间划分,分别存储什么

线程栈通常是多少

协程了解吗

死锁(死锁条件、避免死锁、死锁检测、死锁预防)

僵尸进程?僵尸进程和孤儿进程区别是什么?孤儿进程如何善终?进程的状态(逻辑状态和ps指令看到的状态分别回答)

虚拟内存是什么用途,如何实现

讲一下共享内存的实现。

父子进程间共享哪些资源。

多线程之间共享哪些资源。

缓存机制有了解吗?缓存的替换策略有哪些,说一下。

缺页中断是什么?

换页算法有哪些?

fork函数介绍一下,怎么用?fork的时候内存是怎么变化的?

epoll的边缘触发和水平触发了解吗?分别说一下特点和区别。

阻塞队列具体是怎么实现的,怎么优化它。(锁的粒度以及不空的时候读不加锁)

进程虚拟地址空间布局

进程间通讯的方式

进程调度算法

进程间通信机制

了解共享内存吗(说了下虚拟页面到物理页帧的映射),后问如果这两个进程都终止了,共享内存还在吗

互斥锁和读写锁有什么区别

自旋锁是什么,怎么实现的

低地址到高地址说一下进程的虚拟地址空间

共享库的映射区是做什么的,讲了下mmap映射到文件对象,设置为有效位无效,访问时再按需调页

进程虚拟地址空间分布

linux中CPU调度怎么做的

操作系统内存分配与释放

这个进程队列是什么队列

进程状态都有哪些,怎么转换

说一下进程线程,fork和vfork

fork时内存空间发生了哪些变化

设计一个内存池,满足内存申请、内存释放以及内存碎片管理等基本功能

作业调度的几种方式。

负载均衡的算法你了解哪些?项目中的负载均衡是怎么实现的。

进程间通讯的方式,未命名管道和命名管道的区别

《数据库》

数据库基础

http://datawhale.club/c/team-learning/IntroductionToSQL/13

mysql中innodb和myisam的区别,行锁的实现原理

redis可以做什么,mysql buffer pool 可以做缓存吗?

mysql join有哪些,笛卡尔积

如何优化一条sql的查询语句

msyql有哪些索引

说一下数据库索引,然后说一下索引的优缺点

redis都有哪些数据类型

索引的使用条件 优化 最左原则

sql语句查询每个班级的平均分,查询班级平均分 排名前三的班。

覆盖索引了解吗?

单列索引,如果查询的字段不是主键,一定会搜索两次吗?

事务的隔离界别,说一下幻读

文件里面 两亿个数,找到最大100个的

系统的文件日志,几千万条,怎么找出出现最多的ip地址。

mysql有哪些引擎,优劣。备份怎么实现。

主键索引和普通索引有什么区别。

查询慢怎么优化。

mysql中索引为什么会增加查询速度,索引的内部怎么实现?

《手撕代码》

算法题:最长不重复子串

实现strcpy

实现快排

实现非递归后序遍历二叉树

归并排序的过程

实现pow,最佳的时间复杂度是多少

给定a=1,b=2,不给定其他变量,怎么交换它们俩的值

算法题:根据前序遍历序列和中序遍历序列求出后续遍历序列

算法题:strcmp

算法题:二分查找firstK

算法题:给定一个BST,和一个Key,删除这棵BST中Key所在的节点

二分查找复杂度是多少,实现一下最基本的二分查找,更改一下题目,做一下变种题(12345 变为 45123)

反转链表

topk问题说思路、时间复杂度

拓扑排序

链表的归并排序

约瑟夫环

合并两个有序链表

手写memmove函数

手写一个socket客户端和服务端。

手写4条sql(like,in,or,between)

lunux awk命令,文件排序命令

手写一个泛型函数。

手撕代码:实现一个LRU缓存机制,按照访问频率保存,要求存储和读取时间为O(1);

代码题:单链表判断是否有环?若有环如何判断环的入口。

记录了10T的请求记录,找出前100个高频访问用户。

如何判断二叉树是二叉搜索树(中序遍历判断是否比前一个大)

三数之和

手写单例模式

中位数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好,如果要对一个 Map 中的 value 数组进行笛卡尔积操作,可以按照以下步骤实现: 1. 将 Map 中的 value 数组存储到一个二维数组中,方便后续操作。 2. 定义一个 List 用来存储笛卡尔积的结果。 3. 使用多重循环遍历二维数组,每次取一个数组元素,与上一次遍历得到的元素拼接,直到遍历完最后一个数组元素为止,将拼接后的结果加入到 List 中。 下是一个 Java 代码示例: ```java import java.util.ArrayList; import java.util.HashMap; import java.util.List; public class CartesianProduct { public static void main(String[] args) { HashMap<String, Integer[]> map = new HashMap<>(); map.put("key1", new Integer[]{1, 2}); map.put("key2", new Integer[]{3, 4}); List<Integer[]> result = cartesianProduct(map); for (Integer[] arr : result) { for (int i : arr) { System.out.print(i + " "); } System.out.println(); } } public static List<Integer[]> cartesianProduct(HashMap<String, Integer[]> map) { int size = map.size(); Integer[][] arrays = new Integer[size][]; int index = 0; for (Integer[] array : map.values()) { arrays[index++] = array; } List<Integer[]> result = new ArrayList<>(); int[] indexes = new int[size]; int[] lengths = new int[size]; for (int i = 0; i < size; i++) { lengths[i] = arrays[i].length; } int total = 1; for (int i = 0; i < size; i++) { total *= lengths[i]; } for (int i = 0; i < total; i++) { Integer[] arr = new Integer[size]; for (int j = 0; j < size; j++) { arr[j] = arrays[j][indexes[j]]; } result.add(arr); indexes[size - 1]++; for (int j = size - 1; j > 0; j--) { if (indexes[j] >= lengths[j]) { indexes[j] = 0; indexes[j - 1]++; } } } return result; } } ``` 上述代码中,我们先定义了一个 Map 对象,其中 key 是字符串,value 是整型数组。然后调用 cartesianProduct 方法对 value 数组进行笛卡尔积操作,并将结果存储到 List 中。最后,我们遍历 List,输出笛卡尔积的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值