大厂面试 | 百度一面,顶不住

题目来源:https://www.nowcoder.com/feed/main/detail/d39aabc0debd4dba810b4b9671d54348

前文

本期是【捞捞面经】系列文章的第 2 期,持续更新中…。(更多与往期下方仓库直达
捞捞面经》系列正式开始连载啦,据说看了这个系列的朋友都拿到了大厂offer~

  • 你是否看面经只有问题没有解析?是否缺乏实时一线大厂面经攻略?捞捞面经帮你解决~
  • 欢迎星标+订阅,持续更新中。。。致力打造校招核心面试攻略~
  • NowcoderTop: 汇总收录牛客各互联网大厂实时高频面经攻略(含详解)🔥(欢迎投稿~):https://github.com/xlcoding/NowcoderTop

在这里插入图片描述

捞捞面经

注:养成先看真题,自己模拟回答,再看解析参考(别忘随手一键三连哦~)

1.基础题

  • 有几种网络io模型?
  • 异步网络模型在什么场景下你了解有应用过?(回答了线程相关的场景)
  • 除了用线程完成,还有什么操作可以完成异步操作?
  • 同步阻塞和同步非阻塞在Java层面怎么实现?(说前面网络io模型答得挺顺畅,具体实现细节还需要提升一下)
  • 描述一下一次完整的 Http 请求
  • 知道的长连接有几种实现方式?
  • 一个 Http 请求包含哪几部分内容?

2.代码题

  • 设计一个 HashSet(完全不会)

3.场景题

  • 1T 的数据怎么加载到 200M 的内存中,并且找到两行一样的数据?
  • Java 打开 1T 文件,第一部操作做什么?
  • 用代码打开一个文件和用鼠标打开一个文件有什么区别?

注意:博主基础题即不过多介绍,只选经典题目分析。

你了解哪些网络 IO 模型?

常见的网络IO模型有以下几种:

  1. 阻塞式IO模型(Blocking IO Model):在这种模型中,当一个线程执行一个 IO 操作时,它会一直阻塞,直到 IO 操作完成。
  2. 非阻塞式IO模型(Non-Blocking IO Model):在这种模型中,当一个线程执行一个IO操作时,它不会一直阻塞,而是会立即返回,告诉调用者 IO 操作是否完成。
  3. 多路复用IO模型(Multiplexed IO Model):一个线程可以同时监视多个 IO 操作,当有一个 IO 操作完成时,它会通知线程进行处理。
  4. 信号驱动式IO模型(Signal Driven IO Model):在这种模型中,当一个 IO 操作完成时,操作系统会向应用程序发送一个信号,应用程序在接收到信号后进行处理。
  5. 异步IO模型(Asynchronous IO Model):应用程序发起一个 IO 操作后,不需要等待操作完成,而是可以继续执行其他操作,当 IO 操作完成后,操作系统会通知应用程序进行处理。

异步网络模型你在什么场景下使用过,具体可以应用到哪些地方?

  1. 高并发的Web应用程序:在Web应用程序中,异步网络模型可以提高服务器的并发处理能力,减少线程的阻塞等待时间,提高系统的吞吐量。
  2. 高性能的网络服务器在网络服务器中,异步网络模型可以提高服务器的并发处理能力,减少线程的阻塞等待时间,提高系统的吞吐量。
  3. 大规模的实时数据处理系统:在实时数据处理系统中,异步网络模型可以提高数据的处理效率,减少数据处理的延迟时间,提高系统的实时性。
  4. 大规模的分布式系统在分布式系统中,异步网络模型可以提高系统的并发处理能力,减少线程的阻塞等待时间,提高系统的吞吐量。

异步网络模型可以应用于任何需要高并发、高性能、高实时性的场景,以提高系统的性能和可扩展性,提高用户体验。

能结合具体业务场景举个例吗?

异步网络模型在社交和购物等场景下也非常常见。比如:

  1. 社交应用程序:在社交应用程序中,异步网络模型可以用于处理用户的聊天消息、动态更新等请求,提高系统的实时性和性能。
  2. 购物网站:在购物网站中,异步网络模型可以用于处理用户的订单、支付、物流等请求,提高系统的并发处理能力和性能。

举个具体实际的例子,常常玩的 王者荣耀。(个人看法)它需要处理大量的游戏玩家请求,包括登录、注册、查询游戏数据、游戏操作等。如果使用阻塞式IO模型,每个请求都需要创建一个线程来处理,当并发请求量较大时,线程的创建和销毁会带来很大的开销,导致服务器的性能和吞吐量下降

而如果使用异步网络模型,可以通过 事件驱动的方式处理请求,当有玩家请求到达时,服务器不需要创建新的线程,而是通 过异步IO操作来处理请求,当IO操作完成后,服务器会回调相应的处理函数进行处理,这样可以大大减少线程的创建和销毁开销,提高服务器的性能和吞吐量。

另外,异步网络模型还可以应用于实时数据处理系统,比如金融交易系统、在线广告系统等,这些系统需要实时处理大量的数据请求,如果使用阻塞式IO模型,会导致数据处理的延迟时间较长,影响系统的实时性。而使用异步网络模型,可以通过事件驱动的方式实时处理数据请求,提高系统的实时性和性能。

怎样可以完成异步操作?

  1. 回调函数:在 Java 中,可以使用回调函数的方式来完成异步操作,比如使用 Java 的回调接口或者 Lambda 表达式来实现异步回调。
  2. Future对象Future 对象是 Java 中的一种异步编程解决方案,它可以将异步操作封装成一个 Future 对象,然后使用 Future.get() 方法来等待异步操作的完成,从而实现异步操作的同步化编程。
  3. CompletableFuture对象CompletableFuture是Java 8中新增的异步编程解决方案,它可以将异步操作封装成一个 CompletableFuture 对象,然后使用 CompletableFuture的方法来处理异步操作的结果,比如 thenApply()、thenAccept()、thenRun()等方法。
  4. 异步框架:可以采用一些异步框架可以用于实现异步操作,比如Netty、Vert.x等框架,它们可以通过事件驱动的方式实现异步操作,提高系统的性能和可扩展性。

在Java中,同步阻塞和同步非阻塞可以通过不同的IO模型来实现?

在Java中,同步阻塞和同步非阻塞可以通过不同的 IO 模型来实现。

  1. 同步阻塞 IO 模型:在Java中,同步阻塞 IO 模型是最常见的 IO 模型,它使用 InputStream 和 OutputStream 等阻塞式 IO 类来实现数据的读写操作。在同步阻塞 IO 模型中,当一个线程调用阻塞式 IO 类的 read() 或 write() 方法时,该线程会被阻塞,直到IO操作完成或者出现异常。
  2. 同步非阻塞 IO 模型:在Java中,同步非阻塞 IO 模型可以通过使用Java NIO(New IO)来实现。Java NIO 提供了一种基于通道和缓冲区的IO模型,可以实现非阻塞式的IO操作。在同步非阻塞 IO 模型中,当一个线程调用 Java NIO 的通道的 read() 或 write() 方法时,该线程不会被阻塞,而是立即返回,然后可以通过轮询的方式来检查 IO 操作的状态,从而实现非阻塞式的 IO 操作。

能结合具体场景讲解吗?

当涉及到高并发、高性能、高可靠性的场景时,选择合适的 IO 模型非常重要。下面结合具体场景来讲解:

  1. Web服务器:对于 Web 服务器来说,同步阻塞 IO 模型是最常用的IO模型,因为它可以提供稳定的性能和可靠性。在Java中,可以使用Servlet API来实现同步阻塞 IO 模型。如果需要更高的性能和可扩展性,可以考虑使用异步 IO 模型,比如 Java NIO 或者 Netty 等框架。
  2. 游戏服务器:对于游戏服务器来说,需要处理大量的并发连接和实时数据交互,因此同步非阻塞 IO 模型是比较适合的选择。在Java中,可以使用 Java NIO 或者 Netty 等框架来实现同步非阻塞IO模型。
  3. 数据库访问:对于数据库访问来说,同步阻塞IO模型是最常用的IO模型,因为它可以提供稳定的性能和可靠性。在 Java中,可以使用JDBC API 来实现同步阻塞 IO 模型。如果需要更高的性能和可扩展性,可以考虑使用异步 IO 模型,比如使用异步数据库驱动程序,比如HikariCP等。

除了同步阻塞和同步非阻塞 IO 模型之外,还有一些其他的 IO 模型,比如异步IO模型、多路复用IO模型等。在实际应用中,应该根据具体的场景和需求来选择合适的 IO 模型。

描述一下一次完整的 Http 请求?

一次完整的HTTP请求通常包括以下步骤:(如果是从浏览器发起地址请求,还需要地址各种解析哦~)

  1. 建立 TCP 连接:客户端通过 TCP 协议与服务器建立连接,进行 “三次握手”。客户端发送 SYN 包,服务器回应 SYN+ACK 包,客户端再回应 ACK 包,完成连接建立。
  2. 发送 HTTP 请求:客户端向服务器发送 HTTP 请求,请求中包含请求行、请求头和请求体。请求行包括请求方法、请求URL和HTTP协议版本;请求头包括一些附加信息,比如请求头部字段、Cookie 等;请求体包含请求的数据,比如POST请求中的表单数据。
  3. 服务器处理请求:服务器接收到客户端发送的 HTTP 请求后,会根据请求的内容进行处理,比如查询数据库、读取文件等。
  4. 服务器返回 HTTP 响应:服务器处理完请求后,会向客户端返回 HTTP 响应,响应中包含响应行、响应头和响应体。响应行包括 HTTP 协议版本、状态码和状态描述;响应头包括一些附加信息,比如响应头部字段、Cookie 等;响应体包含响应的数据,比如 HTML 页面、JSON 数据等。
  5. 关闭TCP连接:客户端接收到服务器返回的HTTP响应后,会关闭TCP连接,进行 “四次挥手”。客户端发送 FIN 包,服务器回应 ACK 包,然后服务器发送 FIN 包,客户端回应ACK 包,完成连接关闭。

总之,一次完整的 HTTP 请求包括建立 TCP 连接、发送 HTTP 请求、服务器处理请求、服务器返回 HTTP 响应和关闭 TCP 连接等步骤。在实际应用中,还需要考虑 HTTP 缓存、Cookie、会话管理等问题

长连接有哪些实现方式?

  • 长连接是指客户端和服务器之间保持连接状态,可以在一定时间内进行多次请求和响应,而不必每次请求都重新建立连接
  • 长连接可以减少连接建立和断开的开销,提高网络传输效率,常用于实时通信、推送服务等场景。

常见的长连接实现方式包括

  1. HTTP长连接HTTP/1.1 协议支持长连接,客户端和服务器之间可以保持连接状态,可以在一定时间内进行多次请求和响应。在 HTTP 长连接中,客户端发送请求后,服务器会保持连接状态,直到客户端发送关闭连接的请求或者超时时间到达。
  2. WebSocketWebSocket 是一种基于 HTTP 协议的长连接技术,它可以在客户端和服务器之间建立双向通信的连接,实现实时通信和推送服务。WebSocket 协议通过 HTTP协议的升级实现,客户端和服务器之间可以发送和接收数据帧,而不必重新建立连接。
  3. TCP长连接TCP 协议支持长连接,客户端和服务器之间可以保持连接状态,可以在一定时间内进行多次请求和响应。在TCP长连接中,客户端和服务器之间建立连接后,可以保持连接状态,直到客户端或服务器发送关闭连接的请求或者网络异常断开连接。

长连接可以提高网络传输效率,常用于实时通信、推送服务等场景

设计一个Hashset?

我随便设计的一个简单的 Hashset仅供参考):

  1. 定义一个哈希表数组,数组的长度为质数,每个元素是一个链表,用于存储哈希冲突的元素。
  2. 定义一个哈希函数,将元素映射到哈希表数组中的一个位置。可以使用取模运算或者位运算等方式实现哈希函数。
  3. 实现添加元素的方法。首先根据哈希函数计算元素的哈希值,然后将元素添加到对应位置的链表中。如果链表中已经存在相同的元素,则不添加。
  4. 实现删除元素的方法。首先根据哈希函数计算元素的哈希值,然后在对应位置的链表中查找元素,如果找到则删除。
  5. 实现查找元素的方法。首先根据哈希函数计算元素的哈希值,然后在对应位置的链表中查找元素,如果找到则返回元素,否则返回null。
  6. 实现获取元素个数的方法。遍历哈希表数组,统计所有链表中元素的个数。
  7. 实现清空哈希表的方法。遍历哈希表数组,将所有链表清空。

下面是一个简单的Java代码实现

public class MyHashSet<T> {private static final int DEFAULT_CAPACITY = 16;private static final float DEFAULT_LOAD_FACTOR = 0.75f;private Node<T>[] table;private int size;private int threshold;private float loadFactor;public MyHashSet() {this(DEFAULT_CAPACITY, DEFAULT_LOAD_FACTOR);}public MyHashSet(int initialCapacity, float loadFactor) {table = new Node[initialCapacity];this.loadFactor = loadFactor;threshold = (int) (initialCapacity * loadFactor);}public boolean add(T value) {int hash = hash(value);int index = indexFor(hash, table.length);Node<T> node = table[index];while (node != null) {if (node.value.equals(value)) {return false;}node = node.next;}Node<T> newNode = new Node<>(value, table[index]);table[index] = newNode;size++;if (size > threshold) {resize(table.length * 2);}return true;}public boolean remove(T value) {int hash = hash(value);int index = indexFor(hash, table.length);Node<T> node = table[index];Node<T> prev = null;while (node != null) {if (node.value.equals(value)) {if (prev == null) {table[index] = node.next;} else {prev.next = node.next;}size--;return true;}prev = node;node = node.next;}return false;}public boolean contains(T value) {int hash = hash(value);int index = indexFor(hash, table.length);Node<T> node = table[index];while (node != null) {if (node.value.equals(value)) {return true;}node = node.next;}return false;}public int size() {return size;}public void clear() {Arrays.fill(table, null);size = 0;}private int hash(T value) {return value.hashCode();}private int indexFor(int hash, int length) {return hash & (length - 1);}private void resize(int newCapacity) {Node<T>[] newTable = new Node[newCapacity];for (Node<T> node : table) {while (node != null) {Node<T> next = node.next;int index = indexFor(hash(node.value), newCapacity);node.next = newTable[index];newTable[index] = node;node = next;}}table = newTable;threshold = (int) (newCapacity * loadFactor);}private static class Node<T> {T value;Node<T> next;public Node(T value, Node<T> next) {this.value = value;this.next = next;}}
}

1T 的数据怎么加载到 200M 的内存中,并找到两行一样的数据?

1T 的数据加载到 200M 的内存中是不可能的,因为1T 的数据远远超过了 200M 的内存大小。因此,需要采用一些特殊的算法和技术来解决这个问题。

一种解决方案是使用 外部排序算法,将1T的数据分成多个小文件,每个小文件可以加载到内存中进行排序。然后,使用归并排序的思想将这些小文件合并成一个大文件,并在合并的过程中找到两行一样的数据。

具体步骤如下(参考):

  1. 将 1T 的数据分成多个小文件,每个小文件的大小为 200M
  2. 对每个小文件进行排序,可以使用快速排序等算法。
  3. 将排序后的小文件合并成一个大文件,可以使用归并排序的思想。
  4. 在合并的过程中,记录前一个文件的最后一行和当前文件的第一行,比较这两行是否相同,如果相同则找到了两行一样的数据。
  5. 最后,将找到的两行一样的数据输出即可。

而在实际操作中,还需要考虑磁盘读写速度、文件的读写方式等因素,以提高算法的效率和准确性

Java打开 1T 的文件,第一步做什么?

在 Java 中打开 1T 的文件,第一步应该是确定文件的读取方式和读取范围。

  1. 确定文件的读取方式:根据文件的类型和大小,选择适当的文件读取方式。如果文件是文本文件,可以使用 BufferedReader 逐行读取;如果文件是二进制文件,可以使用DataInputStream 或者 FileChannel 进行读取。
  2. 确定文件的读取范围:由于1T的文件非常大,无法一次性读取到内存中,因此需要确定读取的范围。可以将文件分成多个块,每次读取一个块的数据,处理完后再读取下一个块的数据。可以根据文件的大小和内存的大小来确定块的大小。

用代码打开一个文件和用鼠标打开用什么区别吗?

其底层区别主要在于操作系统和文件系统的交互方式

用鼠标打开文件是通过操作系统提供的图形用户界面(GUI)来实现的,用户点击图标,但实际操作系统会根据用户的操作来调用相应的API,从而实现文件的打开、读取、写入等操作。而这些 API 实际通常是操作系统提供的底层文件系统接口,例如 Windows 的 Win32 API、Linux 的 POSIX API 等。

而用代码打开文件则是 **通过编程语言提供的文件操作API **来实现的,这些API通常是对操作系统底层文件系统接口的封装和抽象。通常可以使用 File、FileInputStream、FileOutputStream 等类来实现文件的打开、读取、写入等操作,这些类会调用底层的操作系统文件系统接口来实现相应的功能。

因此,从底层的角度来看,用代码打开文件和用鼠标打开文件的区别在于调用的API不同,但底层的文件系统接口是相同的

一次 Http 请求包含哪几部分内容?

  1. 请求行(Request Line):包含请求方法、请求的URL和HTTP协议版本。常见的请求方法有 GET、POST、PUT、DELETE 等。
  2. 请求头部(Request Headers):包含请求的各种头部信息,例如 User-Agent、Content-Type、Cookie 等。头部信息提供了关于请求的附加信息,用于服务器处理请求。
  3. 请求体(Request Body):对于 GET 请求,请求体通常为空。对于 POST 请求等需要传递数据的请求,请求体包含了要发送给服务器的数据。

原文收录:https://github.com/xlcoding/NowcoderTop

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023年7月婴幼儿辅食市场数据分析(京东商品数据)

随着人们对婴幼儿饮食健康的关注不断增加&#xff0c;市场对高品质、安全、营养丰富的辅食需求也日益旺盛。婴幼儿辅食市场增长放缓&#xff0c;但整体仍保持上升态势。鲸参谋数据显示&#xff0c;今年7月份&#xff0c;京东平台婴幼儿辅食市场的销量为1000万&#xff0c;同比增…

分布式环境下的数据同步

一般而言elasticsearch负责搜索&#xff08;查询&#xff09;&#xff0c;而sql数据负责记录&#xff08;增删改&#xff09;&#xff0c;elasticsearch中的数据来自于sql数据库&#xff0c;因此sql数据发生改变时&#xff0c;elasticsearch也必须跟着改变&#xff0c;这个就是…

NS2安装及入门实例——(ns2.35 / Ubuntu20.04)

文章目录 一、ns2安装1、更新系统源2、准备工作3、下载安装包4、安装5、问题① 问题1② 问题2③ 问题3 6、安装成功7、环境配置 二、nam安装1、安装2、问题 三、实例 一、ns2安装 1、更新系统源 sudo apt-get update sudo apt-get upgrade2、准备工作 sudo apt-get install …

5个强大的Java分布式缓存框架推荐

在开发中大型Java软件项目时&#xff0c;很多Java架构师都会遇到数据库读写瓶颈&#xff0c;如果你在系统架构时并没有将缓存策略考虑进去&#xff0c;或者并没有选择更优的缓存策略&#xff0c;那么到时候重构起来将会是一个噩梦。 在开发中大型Java软件项目时&#xff0c;很…

LeetCode 2511 最多可以摧毁的敌人城堡数目

LeetCode 2511 最多可以摧毁的敌人城堡数目 力扣题目链接&#xff1a;力扣题目链接 给你一个长度为 n &#xff0c;下标从 0 开始的整数数组 forts &#xff0c;表示一些城堡。forts[i] 可以是 -1 &#xff0c;0 或者 1 &#xff0c;其中&#xff1a; -1 表示第 i 个位置 没…

sql:SQL优化知识点记录(九)

&#xff08;1&#xff09;小表驱动大表 对sql调优的分析&#xff1a; 排序优化&#xff1a; 数据库的连接方式&#xff0c;里面的数据尽量这样连接&#xff0c;尽量选择第一个方式&#xff0c;因为两个表的连接一共建立5次连接&#xff0c;第二个建立1000次连接&#xff0c;从…

Matlab中fdatool结合STM32F4设计滤波器

数字滤波器的原理 1.从功能上分&#xff1b;低通、带通、高通、带阻。滤波器口诀&#xff1a;低通滤高频&#xff1b;高通滤低频&#xff1b;带通滤两边&#xff1b;带阻阻中间&#xff1b; 2.从实现方法上分:FIR、IIR 3.从设计方法上来分&#xff1a;Chebyshev(切比雪夫&…

准备HarmonyOS开发环境

引言 在开始 HarmonyOS 开发之前&#xff0c;需要准备好开发环境。本章将详细指导你如何安装 HarmonyOS SDK、配置开发环境、创建 HarmonyOS 项目。 目录 安装 HarmonyOS SDK 配置开发环境 创建 HarmonyOS 项目 总结 1. 安装 HarmonyOS SDK HarmonyOS SDK 是开发 Harmo…

Springboot 实践(13)spring boot 整合RabbitMq

前文讲解了RabbitMQ的下载和安装&#xff0c;此文讲解springboot整合RabbitMq实现消息的发送和消费。 1、创建web project项目&#xff0c;名称为“SpringbootAction-RabbitMQ” 2、修改pom.xml文件&#xff0c;添加amqp使用jar包 <!-- RabbitMQ --> <dependency&g…

电压互感器倍频感应耐压试验方法

试验方法 升压设备的容器应足够&#xff0c; 试验前应确认高压升压等设备功能正常&#xff1b; 按上图接好线&#xff0c; 三倍频发生器、 高压器外壳必须可靠接地。 将三倍频电源发生装置的输出线与被试电压互感器的一组二次绕组接线端连接好&#xff08;如 a-n 端&#xff0…

Spring MVC 五 - Spring MVC的配置和DispatcherServlet初始化过程

今天的内容是SpringMVC的初始化过程&#xff0c;其实也就是DispatcherServilet的初始化过程。 Special Bean Types DispatcherServlet委托如下一些特殊的bean来处理请求、并渲染正确的返回。这些特殊的bean是Spring MVC框架管理的bean、按照Spring框架的约定处理相关请求&…

2D项目经验总结

2D项目经验总结 前言地图的绘制Sprite Editor叠层注意点&#xff08;SortingLayer相关知识点&#xff09;Tile Paltette的使用Animated Tiles&#xff08;动起来的图片&#xff08;也称作瓷片或者瓦砖&#xff09;&#xff09; 玩家移动玩家方向的翻转刚体注意点 碰撞器输入系统…

手写Mybatis:第19章-二级缓存

文章目录 一、目标&#xff1a;二级缓存二、设计&#xff1a;二级缓存三、实现&#xff1a;二级缓存3.1 工程结构3.2 二级缓存类图3.3 二级缓存队列3.3.1 FIFI缓存策略3.3.2 事务缓存3.3.3 事务管理3.3.4 修改一级缓存 3.4 缓存执行器3.4.1 执行器接口3.4.2 执行器抽象基类3.4.…

华为OD机试 - 等和子数组最小和 - 深度优先搜索(Java 2022 Q4 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#xff09;》…

企业电子招标采购系统源码java 版本 Spring Cloud + Spring Boot

项目说明 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&#xff0c;以及…

ARM编程模型-指令流水线

流水线技术通过多个功能部件并行工作来缩短程序执行时间&#xff0c;提高处理器核的效率和吞吐率&#xff0c;从而成为微处理器设计中最为重要的技术之一。 1. 3级流水线 到ARM7为止的ARM处理器使用简单的3级流水线&#xff0c;它包括下列流水线级。 &#xff08;1&#xff0…

机器人中的数值优化(五)——信赖域方法

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考&#xff0c;主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等&#xff0c;本系列文章篇数较多&#xff0c;不定期更新&#xff0c;上半部分介绍无约束优化&#xff0c;…

ubuntu22.04搭建verilator仿真环境

概述 操作系统为 Ubuntu(22.04.2 LTS)&#xff0c;本次安装verilator开源verilog仿真工具&#xff0c;进行RTL功能仿真。下面构建版本为5.008的verilator仿真环境。先看一下我系统的版本&#xff1a; 安装流程 安装依赖 sudo apt-get install git perl python3 make autoc…

肖sir__设计测试用例方法之边界值03_(黑盒测试)

设计测试用例方法之边界值 边界点定义 上点&#xff1a;边界上的点 离点&#xff1a;离上点最近的点&#xff08;即上点左右两边最邻近的点&#xff09; 内点&#xff1a;在域范围内的点 案例&#xff1a;qq号&#xff1a;5-12位 闭区间&#xff1a; 离点&#xff1a;5 位 &…

计算机组成原理学习记录(更新中)

文章目录 仅做个人记录计组的学习中认为容易记错的点或是个人认为的要点&#xff0c;如有错误&#xff0c;请多包涵。 学习资源为b站网课&#xff1a;王道计算机考研 计算机组成原理 大部分图片来自该网课 &#xff08;1&#xff09;冯诺依曼型计算机由五个部分组成&#xff…