java后端字节一面

029f4651fde64d9d97f48759bc5b08df.png
1. 我现在和你进行视频通话,这个是怎么做的?
视频通话通常基于实时通信技术(RTC),如WebRTC。它利用现代浏览器的API来实现视频、音频和数据的直接P2P(点对点)通信,或通过服务器中转。视频通话涉及信号的协商、媒体流的编码、传输和解码等多个步骤。


2. 推流会怎么推呢?
推流是将音视频数据实时传输到服务器或接收端的过程。在直播或视频会议中,推流通常使用RTMP(Real Time Messaging Protocol)、HLS(HTTP Live Streaming)或WebSocket等协议。推流前,音视频数据会被编码压缩,然后通过选定的协议发送到服务器,服务器再分发给其他客户端。


3. 视频通话和你打开一个url网页有什么不同吗?
视频通话是实时交互的,涉及音视频数据的实时传输和处理,对延迟和带宽要求较高。而打开一个URL网页主要是从服务器获取HTML、CSS、JavaScript等资源,并在客户端渲染,不涉及实时音视频传输,对延迟的要求相对较低。


4. TCP是什么协议?RTC又是什么协议? 

TCP(Transmission Control Protocol):一种面向连接的、可靠的、基于字节流的传输层通信协议。它提供全双工通信,即数据可以在两个方向上同时传输。TCP通过确认应答、数据重传、滑动窗口等机制来保证数据的可靠传输。
RTC(Real-Time Communication):不是一种具体的协议,而是一种技术的总称,用于实现实时音视频通信。RTC可以基于多种协议和技术实现,如WebRTC、RTMP等。

5. 为什么音视频用UDP协议传输呢?实时性体现在哪里?
音视频传输对实时性要求很高,而UDP(User Datagram Protocol)是一种无连接的、不可靠的传输层协议,它传输数据时不建立连接,也不保证数据的可靠传输,但具有较低的延迟和较高的传输效率,因此常用于音视频传输。实时性体现在数据的快速传输和较小的延迟上。
6. 你从网站上下载一个很大的,1个G的文件,这个文件途中有没有可能被损坏?
在TCP协议下,文件在传输过程中是有可能被损坏的,但由于TCP的可靠性保证机制(如确认应答、数据重传),即使数据在传输过程中损坏,TCP也会通过重传机制确保数据的完整性和正确性。因此,在TCP协议下下载的文件,理论上应该是完整的。


7. 需要对文件的完整性进行一个校验吗?为什么需要校验?TCP 不是可靠的吗?
虽然TCP协议本身具有可靠性保证,但在实际应用中,由于网络环境的复杂性,仍然可能存在一些不可预见的问题(如硬盘故障、内存错误等)导致文件损坏。因此,对文件的完整性进行校验是必要的。常见的校验方式有MD5、SHA-1等哈希算法。


8. 怎么对文件进行一个完整性的校验?
可以使用哈希算法(如MD5、SHA-1、SHA-256等)对文件进行校验。具体做法是,在文件传输前后,分别在发送端和接收端计算文件的哈希值,然后比较这两个哈希值是否一致。如果一致,说明文件在传输过程中没有被损坏;如果不一致,则说明文件可能已被损坏。


9. 为什么redis 查询会比数据库更快?
Redis 是一种基于内存的数据库,它将数据存储在内存中,因此访问速度非常快。相比之下,传统的关系型数据库(如MySQL)将数据存储在硬盘上,虽然硬盘的容量远大于内存,但访问速度却远低于内存。因此,Redis 的查询速度通常会比关系型数据库快很多。


10. redis 单线程模型为什么会比较快呢?
Redis 采用单线程模型,但这并不意味着它不能处理高并发。Redis 的单线程主要指的是它处理网络请求和命令执行是在一个主线程中完成的。这种设计简化了数据一致性和并发控制的问题,避免了多线程竞争和锁的开销。同时,Redis 的IO操作(如网络请求和磁盘写入)是异步的,不会阻塞主线程的执行。因此,Redis 能够在单线程下保持较高的性能。


11. 为什么要引入MQ呢?我直接发送给下游不行吗?
引入消息队列(MQ)主要有以下几个原因:

解耦:系统间的直接调用会增加耦合度,而MQ可以作为一个中间层,降低系统间的耦合度。
异步:MQ可以实现异步处理,提高系统的响应速度和处理能力。
流量削峰:在系统面临高并发请求时,MQ可以暂存请求,起到流量削峰的作用。
数据一致性:通过事务消息等机制,MQ可以保证数据的一致性。

 

12. 说一下volatile
volatile 是Java中的一个关键字,它用于修饰变量,确保变量的可见性和禁止指令重排序。当一个变量被声明为 volatile 后,它告诉编译器这个变量的值可能会被意外地改变,因此编译器在生成代码时不会对这个变量进行缓存优化。同时,它还会确保每次读取这个变量时都会直接从主内存中读取,而不是从线程的本地缓存中读取,从而保证了变量的可见性。


13. 什么是可见性?我不用volatile就是永远见不到了?如果我有一万个线程,那就是有一万个copy?
可见性 是指当一个线程修改了某个共享变量的值后,其他线程能够立即看到这个修改后的值。如果不使用 volatile 关键字,由于缓存一致性问题,其他线程可能无法立即看到修改后的值。但这并不意味着永远看不到,只是存在延迟。
对于“如果我有一万个线程,那就是有一万个copy?”的疑问,这种理解是不准确的。在Java中,共享变量通常存储在主内存中,而不是每个线程都有自己的copy。但是,由于缓存机制的存在,每个线程可能会有该变量的一个本地缓存副本。使用 volatile 可以确保当变量值被修改后,所有线程的本地缓存副本都会被更新为最新的值。


14. 你刚刚说的禁止指令重排序,指令为什么会重排序?为了优化什么对它进行重排序?
指令重排序是编译器和处理器为了优化程序性能而采取的一种策略。在不改变程序单线程语义的前提下,编译器和处理器可以重新安排指令的执行顺序,以提高程序的执行效率。但是,这种重排序可能会导致多线程程序出现不可预见的行为,特别是当涉及到共享变量时。
为了解决这个问题,Java内存模型(JMM)规定了在多线程环境下哪些指令不能重排序,并提供了 volatile、synchronized 等关键字来确保程序的正确执行顺序。volatile 关键字可以禁止指令重排序,确保在 volatile 变量之前的指令不会在其之后的指令之后执行,从而保证了变量的可见性和有序性。

(os:说实话问的不难..但是给我们的机会太少了😭,全是92的大军冲刺)

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

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

相关文章

【JavaEE】IP协议 应用层协议

🔥个人主页: 中草药 🔥专栏:【Java】登神长阶 史诗般的Java成神之路 🕶️一.IP地址 IP协议(Internet Protocol)是TCP/IP协议族中最核心的协议之一,它定义了数据包在网络中传输的标准…

应用层协议HTTP介绍

一、HTTP协议介绍 HTTP(HyperText Transfer Protocol,超文本传输协议)是一个至关重要的协议。它定义了客户端(如浏览器)与服务器之间如何通信,以交换或传输超文本。 超文本:视频,音…

24年蓝桥杯及攻防世界赛题-MISC-1

2 What-is-this AZADI TOWER 3 Avatar 题目 一个恐怖份子上传了这张照片到社交网络。里面藏了什么信息?隐藏内容即flag 解题 ┌──(holyeyes㉿kali2023)-[~/Misc/tool-misc/outguess] └─$ outguess -r 035bfaa85410429495786d8ea6ecd296.jpg flag1.txt Reading 035bf…

深度学习——管理模型的参数

改编自李沐老师《动手深度学习》5.2. 参数管理 — 动手学深度学习 2.0.0 documentation (d2l.ai) 在深度学习中,一旦我们选择了模型架构并设置了超参数,我们就会进入训练阶段。训练的目标是找到能够最小化损失函数的模型参数。这些参数在训练后用于预测&…

AOP-前置原理-怎么判断和拦截?

判断模式 类型(Class)方法(Method)注解 (Annotation)参数 (Parameter)异常 (Exception) public class TargetFilterDemo {public static void main(String[…

项目(石头剪刀布游戏双循环)

while (true) { #region 猜拳游戏主题逻辑 // 定义猜拳次数 int count 3; //定义用户赢得次数 int winCount 0;// 初始值为零表示用户一次没饿赢 int sysCou…

如何使用命令行快速下载Google Drive/OneDrive大文件

OneDrive OneDrive使用wget下载会出现403 forbidden,可通过下面方法下载。 浏览器右键进入检查界面,选择netowork,搜索download.aspx,然后在待下载文件处点击下载,即可出现下载链接,复制为cURL即可下载。…

数据结构与算法-Trie树添加与搜索

trie树的使用场景 我们若需要制作一个通讯录的软件,使用常规树结构查询的复杂度为O(logn),但trie树的复杂度确与数据多少无关,与单词长度有关,这就大大缩减的查询的时间复杂度。 trie树的基本实现 基础结构 package com.study.trieDemo;i…

日志收集工具 Fluentd vs Fluent Bit 的区别

参考链接: FluentdFluentd BitFluentd & Fluent Bit | Fluent Bit: Official Manual Fluentd 与 Fluent Bit 两者都是生产级遥测生态系统! 遥测数据处理可能很复杂,尤其是在大规模处理时。这就是创建 Fluentd 的原因。 Fluentd 不仅仅是…

Java List sort() 排序

sort是java.util.List接口的默认方法。 List的排序方法在Java 8中被引入。 排序方法接受比较器作为参数&#xff0c;并根据指定的比较器对这个列表进行排序。 default void sort(Comparator<? super E> c) 示例代码&#xff1a; import java.text.Collator; import …

jenkins声明式流水线语法详解

最基本的语法包含 pipeline&#xff1a;所有有效的声明式流水线必须包含在一个 pipeline 块中stages&#xff1a;包含一系列一个或多个stage指令stage&#xff1a;stage包含在stages中进行&#xff0c;比如某个阶段steps&#xff1a;在阶段中具体得执行操作&#xff0c;一个或…

Eclipse 编译项目

Eclipse 编译项目 Eclipse 是一个广泛使用的集成开发环境(IDE),它支持多种编程语言,包括 Java、C/C++ 和 Python。在 Eclipse 中编译项目是一个基本但重要的过程,确保代码的正确性和运行效率。本文将详细介绍在 Eclipse 中编译项目的步骤,包括配置、常见问题及其解决方案…

极狐GitLab CI/CD 功能合集(超详细教程)

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门面向中国程序员和企业提供企业级一体化 DevOps 平台&#xff0c;用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规&#xff0c;而且所有的操作都是在一个平台上进行&#xff0c;省事省心省钱。可以一键安装极狐GitL…

React js Router 路由 2, (把写过的几个 app 组合起来)

完整的项目&#xff0c;我已经上传了&#xff0c;资源链接. 起因&#xff0c; 目的: 每次都是新建一个 react 项目&#xff0c;有点繁琐。 刚刚学了路由&#xff0c;不如写一个 大一点的 app &#xff0c;把前面写过的几个 app, 都包含进去。 这部分感觉就像是&#xff0c; …

[ IDE ] SEGGER Embedded Studio for RISC-V

一、FILE 二、Edit 三、View 四、Search 五、Navigate 六、Project 七、Build 7.1 编译 先选择一个目标类型&#xff0c;再选择编译。 八、Debug 九、Target 十、Tools 10.1 自定义快捷键 点击菜单项&#xff0c;通过Tools –> Options –> Keyboard&#xff0c;实现自…

Java | Leetcode Java题解之第413题等差数列划分

题目&#xff1a; 题解&#xff1a; class Solution {public int numberOfArithmeticSlices(int[] nums) {int n nums.length;if (n 1) {return 0;}int d nums[0] - nums[1], t 0;int ans 0;// 因为等差数列的长度至少为 3&#xff0c;所以可以从 i2 开始枚举for (int i …

Appium高级话题:混合应用与原生应用测试策略

Appium高级话题&#xff1a;混合应用与原生应用测试策略 在移动应用开发领域&#xff0c;混合应用与原生应用各有千秋&#xff0c;但它们的测试策略却大相径庭。本文旨在深入探讨这两种应用类型的测试挑战&#xff0c;并介绍如何利用自动化测试软件ItBuilder高效解决这些问题&…

安卓13设置动态显示隐藏第一页的某一项 动态显示隐藏无障碍 android13设置动态显示隐藏第一页的某一项

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改4.1修改方法14.2修改方法25.编译6.彩蛋1.前言 有时候,我们的设置里面显示的信息,需要根据不同的情况显示不同的信息,例如,动态的显示或者隐藏 “无障碍” 这一项。 2.问题分析 像这个问题…

英集芯IP5902:集成电压可调异步升压转换充电管理功能的8位MCU芯片

英集芯IP5902是一款集成了9V异步升压转换、锂电池充电管理及负端NMOS管的8-bit MCU芯片&#xff0c;外壳采用了SOP16封装形式&#xff0c;高集成度和丰富的功能使其在应用时只需很少的外围器件&#xff0c;就能有效减小整体方案的尺寸&#xff0c;降低BOM成本&#xff0c;为小型…

Day69补 前后端分离思想

ajax前后端分离 前后端分离处理&#xff1a;前端------&#xff08;数据&#xff09;-----服务端----&#xff08;数据&#xff09;-----前端-----动态改变页面的内容 1.json 1、JSON&#xff1a;由于JSON易读以及纯文本格式的特性&#xff0c;可以非常容易地与其他程序进行沟通…