Android面试题 之 网络通信基础 面试题

news2024/7/5 0:05:24

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点

序列化
判断标准
  • 序列化后的码流大小
  • 性能
  • 跨语言
Serializable方式
  • 码流偏大
  • 性能较低
XML方式
  • 人机可读性好
  • 文件格式复杂、占带宽
JSON
  • 轻量级、兼容性好、格式简单,人机可读性较好
  • 可读性没有XML好,额外空间消耗比较大
ProtoBuff
如何让单机的应用程序支持几十万至百万级别的长连接?
  • 首先要突破系统对应用进程的线程数限制:ulimit -n 1000000
  • 还要突破软限制和硬限制:cat /etc/security/limits.conf;改完以后还要该so,让系统重新加载这个文件
  • 操作系统的限制,所有进程的文件连接数的限制
  • socket通信时,每个socket都有2个缓冲区,一般是4K*2,连接数过大,内存就会很高,就需要把这个缓冲区调小一点:SO_SNDBUF;SO_RCVBUF
select、poll、epoll的区别?
  • 都是操作系统实现的IO多路复用的机制
  • select是操作系统都支持的,poll和epoll主要是在类UNiX的操作系统中支持
  • 支持一个进程所能打开的连接数限制不一样:selector是1024个(64位上面可以变成2048);poll和select没有太大区别,不过连接上select是用数组来维护,poll是链表维护,最大连接数上poll是没限制的;epoll没有什么限制,只受限于机器内存的大小
  • 连接数激增时的效率不同:当连接数上升到几十万百万的时候,select和poll性能会急剧下降,而epoll跟总连接数没有关系,只能活跃的连接有关,性能基本不变
  • 消息的传递方式:select和poll在每次消息调用中都需要将很多数据从用户空间拷贝到内核空间;epoll不需要(共享一块内存)
  • 怎么选择?:连接数比较少又比较活跃的时候,select和poll可能性能更好
  • select、poll只支持水平触发,epoll默认是水平触发,也支持边缘触发
水平触发(LT)和边缘触发(ET)?

水平触发:socket的接收缓冲区里有数据来了,只要缓冲里有数据,select、poll或者epoll就都会一直收到通知

边缘触发:只有在有新数据到达socket的缓冲区时才会触发

直接内存比堆内存快在哪里?

直接内存避免了二次拷贝,如果buffer在堆上,就需要先从堆拷贝到应用进程缓冲区,再从应用进程缓冲区拷贝到内核套接字缓冲区,再发送到网络,直接内存少了从堆拷贝到应用进程的这一步。

数据从应用进程缓冲区拷贝到套接字发送缓冲区时,内存是不允许发生变化的,不能失效的

什么是零拷贝

指计算机执行操作时,CPU不需要先将数据从某处内存复制到另一个特定区域。

DMA:direct memory access,用于接收CPU的指令负责去IO拷贝。会把文件数据拷贝到内核缓冲区,再拷贝到用户空间

零拷贝技术可以减少数据拷贝和共享总线操作的次数,消除传输数据在存储器之间不必要的中间拷贝次数,从而提高数据传输效率

传统数据传送过程

磁盘 -->DMA拷贝到内核文件读取缓冲区 -->CPU拷贝到应用进程缓冲区 --> CPU拷贝到套接字发送缓冲区(应用进程到内核进程) --> DMA拷贝到网络设备(网卡)

4次拷贝,4次上下文切换

内存映射:MMAP

把文件映射到应用进程的某段内存区域里面,减少CPU拷贝到应用进程的步骤

Linux之sendfile

DMA将文件拷贝到文件读取缓冲区后,直接进行CPU拷贝到套接字发送缓冲区,都在内核空间中,省去了从应用进程周转的拷贝

3(2)次拷贝2次上下文切换

Linux之slice

在上面的基础上,文件缓冲区和套接字缓冲区之间用了管道机制PIPE,管道实际上就是共用了一段内存

2次拷贝,2次上下文切换

Java JDK里面的零拷贝主要是MMAP和sendfile,sendfile比如FileChannel的transferFrom


欢迎关注我的公众号查看更多精彩文章!

AntDream

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

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

相关文章

SpringBoot自定义Starter及原理分析

目录 1.前言2.环境3.准备Starter项目4.准备AutoConfigure项目4.1 准备类HelloProperties4.2 准备类HelloService4.3 准备类HelloServiceAutoConfiguration4.4 创建spring.factories文件并引用配置类HelloServiceAutoConfiguration4.5 安装到maven仓库 5.在其他项目中引入自定义…

Stable Diffusion3 开源!一文教你玩转 Stable Diffusion3

节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。 汇总合集…

企业化运维(4)_tomcat

###1.配置tomcat### 可以将tomcat部署在server2主机,与nginx主服务器分开,便于进行交互存储。 下载安装jdk与tomcat,并开启服务,便可以在浏览器进行访问。 [rootserver3 ~]# rpm -ivh jdk-8u121-linux-x64.rpm [rootserver3 ~]#…

window安装miniconda

下载 https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/ 安装 双击安装 配置环境变量 添加:PYTHONUSERBASE你的安装路径 添加Path: cmd执行: python -m site将USER_SITE添加进Path 还需要将如下添加进环境变量 D:\Miniconda…

Python学习笔记13 -- API的说明及使用

一、API说明 1、API:Application Programming Interface -- 接口 2、Restful API:基于网页的API 3、JSON:JavaScript objection Notation 4、很多数据都可以找到公用API 二、安装requests模块 在终端输入: 可以保证使用当前…

会声会影色彩校正在哪里 会声会影色彩素材栏在哪 会声会影中文免费版下载

会声会影是一款功能强大的视频编辑软件,它可以帮助用户轻松地编辑和制作视频。在进行视频编辑时,色彩校正是一个重要的步骤,它可以调整视频的色调、亮度和对比度等参数,使视频更加生动和鲜明。在会声会影中,色彩校正功…

MySQL数据库初识

目录 一.数据库相关概述 1.数据库概念 数据(Data) 表 数据库(database) 数据库管理系统(DBMS) 数据库系统 2.数据库系统发展史 3.数据库分类 3.1.关系数据库 3.2.非关系型数据库 二.MySQL数据库…

C语言适不适合新手学习?

C 语言,尽管从整体上看相对较为简单,但在实际编写 C 程序的过程中,会涉及到诸如指针等一些细节方面,这确实可能会给新手带来一定程度的困扰和挑战。不过,我们需要明确的是,这种挑战从某种意义上来说是具有积…

JavaScript算法实现dfs查找省市区路径

需求 存在如下数组,实现一个算法通过输入区名,返回省->市->区格式的路径,例如输入西湖区,返回浙江省->杭州市->西湖区。 // 定义省市区的嵌套数组 const data [{name: "浙江省",children: [{name: "…

线程池ThreadPoolExecutor源码分析

一、线程池基本概念和线程池前置知识 1.1 Java中创建线程的方式有哪些 传统答案: 继承Thread类 通过继承Thread类并重写其run方法来创建线程。具体步骤包括定义Thread类的子类,在子类中重写run方法以实现线程的具体逻辑,然后创建子类的实例…

docker和docker compose 部署

一. 将微服务运行在docker上: 1.新建一个空文件夹docker-demo,在里面再新建文件夹app,在app目录下新建一个名为Dockerfile的文件。 2.编写Dockerfile文件 3.构建镜像 4.启动镜像 5.可以访问了。 二使用Dockerfile构建微服务镜像 1.将j…

GET POST

GET&& POST 一 : 使用场景二: 请求如何构造的???2.1: GET 请求2.2 : POST 请求 三 : GET 和 POST 的区别四 : 常见易错点 一 : 使用场景 网络上的大部分请求 都是 GET , 通过 query string 告诉服务器要搜索什么, 服务器返回搜索结果的完整网页. POST 使用场景比较…

MySQL数据操作与查询- 连接查询

一、引入 1、为什么需要使用连接查询? 查询信息的来源如果来自多张表,则必须对这些表进行连接查询。 2、连接查询的分类 内连接和外连接。 二、内连接 1、概述 将两张表的记录组合在一起,产生一个新的结果。 (1&#xff09…

【JS重点17】原型链(面试重点)

一:原型链底层原理 以下面一段代码为例,基于原型对象(Star构造函数的原型对象)的继承使得不同构造函数的原型对象关联在一起(此处是最大的构造函数Object原型对象),并且这种关联的关系是一种链…

【JS重点17】原型继承

目录 一:什么是原型继承 二:通过赋值方式实现原型继承 三:通过构造函数实现原型继承 四:如何赚钱 一:什么是原型继承 通过往构造函数上的原型对象添加属性和方法,再new一个实例对象,从而实例…

生信技能48 - 如何获取基因的SNP及RefSeq参考序列命名规则

1. SNP概念 SNP 是指基因组水平上由单个核苷酸的变异所引起的DNA 序列多态性,在群体中的发生频率不小于1 %,包括单个碱基的转换、颠换、插入和缺失等。每核苷酸发生突变的概率大约为10 -9 , 由于压力选择,SNP在单个基因和基因组以及动物不同种群间分布是不均匀的,在非编码…

有趣的傅里叶变换与小波变换对比(Python)

不严谨的说,时域和频域分析就是在不同的空间看待问题的,不同空间所对应的原子(基函数)是不同的。你想一下时域空间的基函数是什么?频域空间的基函数是什么?一般的时-频联合域空间的基函数是什么?小波域空间的基函数是什…

深度学习Day-20:DenseNet算法实战 乳腺癌识别

🍨 本文为:[🔗365天深度学习训练营] 中的学习记录博客 🍖 原作者:[K同学啊 | 接辅导、项目定制] 一、 基础配置 语言环境:Python3.8编译器选择:Pycharm深度学习环境: torch1.12.1c…

阿里云短信发送

阿里云短信发送 前置条件接口说明具体实现pom依赖yml短信参数配置发送方法 主页传送门:📀 传送 用阿里云的短信服务发送单条短信获取验证码。 前置条件 申请短信签名和短信模板 申请短信签名文档:签名申请 申请短信模板:模版申…

【OrangePiKunPengPro】 linux下编译、安装Boa服务器

OrangePiKunPengPro | linux下编译、安装Boa服务器 时间:2024年6月7日21:41:01 1.参考 1.boa- CSDN搜索 2.Boa服务器 | Ubuntu下编译、安装Boa_ubuntu安装boa-CSDN博客 3.i.MX6ULL—ElfBoard Elf1板卡 移植boa服务器的方法 (qq.com) 2.实践 2-1下载代码 [fly752fa…