tcp高难度问题

以下是针对这些问题,在面试场景下,既保证理论扎实、逻辑清晰,又具备交流延展性的回答思路与内容,可根据实际面试节奏和面试官反馈灵活调整展开:

1. 客户端端口号如何确定的?

面试官您好,客户端端口号的确定,本质是操作系统内核动态分配的逻辑。当客户端发起 TCP 连接(比如调用 connect 函数)时,若应用层没指定端口,操作系统会从 临时端口范围 选一个未被占用的端口分配。以 Linux 为例,临时端口范围可通过 /proc/sys/net/ipv4/ip_local_port_range 配置,通常是一段动态端口(比如 32768 - 60999 这类区间 )。系统会遍历检查这些端口,找一个处于 CLOSED 或可用状态的,绑定给客户端套接字,作为连接的源端口 。简单说,就是系统为了区分不同客户端进程的网络连接,动态选一个闲置端口来用,保证通信时源端口的唯一性 。

2. 客户端端口动态变化,服务端什么资源消耗最快?

当客户端端口动态变化、频繁建立连接时,服务端 文件描述符(File Descriptor,FD ) 消耗往往最快。因为 TCP 连接在 Linux 等系统里,是以文件描述符形式被内核管理的,每个连接对应一个 FD 。服务端每接受一个连接(accept 调用 ),就会新增一个 FD ,用于读写数据。同时,这些连接还会占用内核的套接字缓冲区(接收/发送队列 )、连接跟踪的哈希表等资源,但 FD 是最直接的“入口”资源,一旦 FD 达到进程/系统限制(比如 ulimit -n 限制 ),服务端就无法再接受新连接,所以在高并发短连接场景,FD 资源池的耗尽往往是最先出现的瓶颈 。当然,具体也得看场景,要是连接建立后数据收发频繁,缓冲区内存消耗也可能突出,但常规情况 FD 是首当其冲的 。

3. 一个端口可以建立多少 TCP 连接?

从理论和协议设计看,一个端口能建立的 TCP 连接数,核心限制是「四元组(源 IP、源端口、目的 IP、目的端口 )」的唯一性 。对于服务端固定端口(比如 80、443 ),客户端每次用不同的源 IP + 源端口(动态分配 ),就能建立新连接。所以,服务端一个端口可支持的连接数,上限取决于客户端的 IP 数量和端口范围。比如单个客户端 IP ,源端口最多约 65535(端口号 16 位 ),但实际受临时端口范围限制;要是有多个客户端 IP ,那连接数能大幅扩展。

举个例子,服务端监听 80 端口,客户端 IP 有 100 个,每个客户端最多用 3 万左右临时端口,那理论上服务端 80 端口能承载的连接数就是 100×30000 ≈ 300 万(当然,实际受系统资源、内核参数限制 )。所以关键是四元组的组合,只要四元组不同,一个端口就能支撑大量连接 。

4. 一个 TCP 连接供多少 HTTP 连接使用?

这得看 HTTP 协议的工作模式。如果是 HTTP/1.0 不开启 Keep-Alive ,一个 TCP 连接只能承载 1 次 HTTP 请求 - 响应,完成后连接就关闭;要是 HTTP/1.0 或 1.1 开启 Keep-Alive(长连接 ) ,一个 TCP 连接可承载 多个 HTTP 请求 - 响应 ,直到连接因超时、显式关闭等原因断开。像浏览器访问一个网页,可能在一个 TCP 长连接上,依次请求 HTML、CSS、JS 等资源 。到了 HTTP/2 及以上 ,基于同一个 TCP 连接,还能通过 多路复用(Multiplexing ) ,并行处理多个 HTTP 流(可理解为逻辑上的“HTTP 连接” ),实现一个 TCP 连接同时处理大量 HTTP 请求 - 响应,避免队头阻塞,提升效率 。所以,从协议设计看,一个 TCP 连接能支撑的 HTTP 连接(或请求 - 响应)数量,在长连接、多路复用机制下,上限由配置的长连接超时、系统资源决定,理论上可以有很多次 。

5. 服务器可以支撑多少 TCP 连接?

服务器能支撑的 TCP 连接数,受多方面限制:

  • 文件描述符(FD )限制:每个 TCP 连接对应一个 FD ,进程的 FD 上限由 ulimit -n 等配置,系统级的还受 /proc/sys/fs/file-max 限制。比如默认情况下,Linux 进程可能默认 FD 限制是 1024,调大后能到几万、几十万 。
  • 内存资源:每个 TCP 连接在内核要占用套接字缓冲区(sendbufrecvbuf )、连接控制块(存储四元组、状态等 )等内存。内存总量有限,大量连接会耗尽内存 。
  • 端口资源:服务端虽然监听固定端口,但客户端连接的源端口是动态的,不过服务端自身的端口不是瓶颈,主要是客户端侧的源端口可能限制并发(但服务端一般是被连的一方,所以影响小 )。
  • 内核参数与网络栈性能:像 net.ipv4.tcp_max_syn_backlog(半连接队列 )、net.core.somaxconn(全连接队列 )等参数,会影响连接建立的效率;还有网络处理能力(中断处理、软中断调度 ),高并发下若网络栈处理不过来,也会成为瓶颈 。

综合来看,在资源充足(内存足够、FD 调大 )、参数优化的情况下,现代服务器(比如配置好的物理机 )支撑几十万、甚至百万级 TCP 连接是可行的,但实际得结合业务场景(长连接/短连接、数据收发频率 )来评估,短连接场景更考验连接建立的效率,长连接场景更考验内存和 FD 资源 。

6. 客户端可以支撑多少 TCP 连接?

客户端能支撑的 TCP 连接数,同样受这些限制:

  • 文件描述符限制:客户端进程的 FD 上限,决定了最多能同时维护多少连接,默认可能较低(比如 1024 ),但可通过 ulimit 等方式调整 。
  • 端口资源:客户端发起连接时,源端口是动态分配的,依赖临时端口范围(比如 Linux 的 ip_local_port_range )。假设临时端口范围是 32768 - 60999 ,约 2.8 万个端口,理论上单个客户端 IP 最多能同时建立约 2.8 万条 outbound 连接(因为四元组里源端口要唯一 )。但实际中,系统不会让端口全被占满,还要留一些给其他进程,所以单个客户端 IP 并发连接数通常在万级左右 。
  • 内存与系统资源:每个连接占用内存、套接字资源,客户端设备(比如手机、PC )的内存有限,大量连接会导致内存不足、系统卡顿 。

比如,手机客户端要同时连多个服务器,端口和内存就会限制并发数;而 PC 上的高并发测试工具(如 wrkab ),通过多进程/多线程、调整临时端口范围、优化 FD 限制,能模拟出更高的并发连接数,但也受限于设备本身的资源 。

7. TCP 连接后一端 KILL 掉进程会发生什么?断电断网呢?

(1)KILL 掉进程

当 TCP 连接的一端(比如客户端或服务端 )进程被 KILL ,操作系统会做这些事:

  • 主动关闭连接:进程被终止时,内核会为该进程的所有套接字执行 主动关闭 操作,发送 FIN 报文,触发 TCP 四次挥手流程 。对端收到 FIN 后,会回复 ACK ,然后自己也会按四次挥手逻辑关闭连接(如果对端没数据要发 )。
  • 资源回收:进程相关的文件描述符、套接字缓冲区等资源,会被内核回收,释放给系统 。

但要注意,如果是强制 kill(比如 kill -9 ),进程可能没机会优雅关闭套接字,不过内核依然会在进程退出后,自动清理其占用的套接字资源,发起 FIN 来关闭连接 。

(2)断电/断网

要是一端(比如客户端 )突然断电、断网:

  • 对端感知延迟:对端(服务端 )无法立即知道连接中断,会保持连接的 ESTABLISHED 状态。直到对端尝试发送数据(比如服务端给客户端发心跳、业务数据 ),触发 超时重传 ,经过多次重传失败后,才会判定连接失效,关闭连接 。
  • TCP Keepalive 的作用:如果两端启用了 TCP Keepalive(保活机制 ),当连接空闲超时后,对端会发送 Keepalive 探测包。若收不到响应,经过重试、超时后,会主动关闭连接,释放资源 。

所以,断电/断网属于“被动断开”,对端需要依赖 TCP 的超时重传、Keepalive 等机制来检测,耗时会比主动 KILL 进程更长,期间连接会一直占用资源 。

8. TIME_WAIT 一定出现在客户端吗?

不是的!TIME_WAIT 状态出现在 主动发起关闭连接的一端 。不管是客户端还是服务端,只要是主动发送 FIN 报文、触发连接关闭的一方,在收到对端的 FIN 并回复 ACK 后,就会进入 TIME_WAIT 状态,等待 2MSL 时间 。

举个例子:

  • 客户端主动关闭:比如浏览器主动关闭标签页,触发四次挥手的第一次 FIN ,客户端会进入 TIME_WAIT 。
  • 服务端主动关闭:比如服务器配置了连接超时时间,主动发 FIN 断开连接,服务端也会进入 TIME_WAIT 。

所以,TIME_WAIT 不特定属于客户端,谁主动发起关闭,谁就可能进入这个状态 。像一些长连接场景,服务端可能因超时主动关连,此时服务端就会出现 TIME_WAIT ,这在排查服务器 TIME_WAIT 过多问题时,得留意这种情况 。

9. 高并发场景下,如何解决 TIME_WAIT 过多?

在高并发短连接场景(比如大量 HTTP 短连接 ),TIME_WAIT 过多会占用大量端口、文件描述符资源,导致新连接无法建立。解决思路主要有这些:

(1)调整内核参数
  • 减少 TIME_WAIT 时长:修改 net.ipv4.tcp_fin_timeout(Linux 下 ),默认是 60 秒,可适当调小(比如 30 秒 ),让 TIME_WAIT 状态更快释放端口。但要注意,过短可能导致历史连接的报文干扰新连接,需结合业务场景评估 。
  • 开启 TIME_WAIT 复用:启用 net.ipv4.tcp_tw_reuse(Linux ),允许处于 TIME_WAIT 状态的端口被新连接复用。但要配合时间戳(net.ipv4.tcp_timestamps = 1 ,默认开启 ),通过序列号和时间戳验证,避免报文混淆 。
  • 开启 TIME_WAIT 快速回收net.ipv4.tcp_tw_recycle(需谨慎使用,因可能与 NAT 网络冲突,导致连接异常,现代系统已逐渐弃用 )。
(2)应用层优化
  • 使用长连接:尽量用 HTTP 长连接(Keep-Alive )、TCP 长连接,减少短连接的创建/销毁频率,从源头减少 TIME_WAIT 。
  • 连接池复用:服务端和客户端都可维护连接池,复用已有的 TCP 连接,避免频繁建连/断连 。
(3)网络架构优化
  • 负载均衡器处理:在反向代理(如 Nginx )、负载均衡层,让 TIME_WAIT 集中在中间层,而非业务服务器。中间层可通过调整参数(如 Nginx 的 keepalive_timeoutreset_timedout_connection ),更高效地管理连接状态 。

不过,调整内核参数时要非常谨慎,得充分测试,避免因参数不当引发网络问题(比如报文冲突、连接异常 )。通常优先从应用层优化(长连接、连接池 )入手,再结合内核参数微调,这样更稳妥 。

这些问题都围绕 TCP 连接的资源管理、生命周期展开,面试时可以顺着“资源限制 - 协议设计 - 实际场景优化”的逻辑,和面试官深入探讨,比如聊到 TIME_WAIT 时,还能延伸讲讲线上遇到的案例、如何通过抓包分析问题,让回答更生动、体现实战经验 。

以下这些 TCP 连接相关问题,都是大厂面试里高频出现、能考察底层知识理解与深度思考的,附上清晰逻辑的回答思路,方便你和面试官“聊出深度”:

一、TCP 核心原理深挖类

1. TCP 如何实现“可靠传输”?(从机制到细节 )

回答要拆解确认、重传、排序、流量控制、拥塞控制等机制:
“TCP 可靠传输是一套组合拳:首先靠序列号 + 确认应答(ACK) ,发送方发数据带 seq,接收方回 ACK 确认已收到;要是发送方没收到 ACK ,触发超时重传 。同时,接收方会帮数据排序、去重 ,保证应用层收到有序数据。

为了避免发送太快撑爆接收方缓冲区,有滑动窗口(流量控制) ,接收方通过 ACK 告知自己的窗口大小,发送方动态调整发数据量。更绝的是,TCP 还关注整个网络的拥堵,用拥塞控制(慢启动、拥塞避免、快重传、快恢复 ) ,根据网络状况调整发送速率,既保证数据可靠,又不搞垮网络 。”

2. TCP 三次握手时,“回退 N 帧”和“选择重传”会触发吗?(结合可靠传输机制 )

这类问题考对 TCP 重传机制的边界理解:
“三次握手阶段,其实还没进入数据传输的可靠传输逻辑 。三次握手交换的是 SYN、SYN+ACK、ACK ,这些控制报文的重传,是简单的超时重传(类似回退 N 帧的思路,但没有数据帧的排序、选择重传场景 )。

因为握手阶段没有实际数据,只有连接建立的控制信息,所以不会触发‘回退 N 帧’(针对连续数据帧的批量重传 )和‘选择重传’(精准重传单个丢失数据帧 ),就是单纯的超时重传 SYN 或 ACK ,保证连接能建立 。”

3. TCP 连接中,接收方的窗口大小一直为 0 会怎样?(流量控制极端场景 )

考察对滑动窗口、零窗口探测的理解:
“如果接收方窗口一直为 0 ,发送方会停止发送数据,进入零窗口等待 。但 TCP 有个‘零窗口探测’机制,发送方会周期性发零窗口探测报文 (比如 Linux 下默认 10 秒发一次 ),询问接收方窗口状态。

要是接收方回复窗口仍为 0 ,继续等;一旦回复窗口 >0 ,发送方就根据新窗口大小恢复发送。这样既避免接收方缓冲区溢出,又保证连接不会因为长期零窗口而‘卡死’ 。”

二、连接状态与异常场景类

4. TCP 半连接队列(SYN 队列 )和全连接队列(ACCEPT 队列 )满了会怎样?(高并发建连问题 )

大厂常考的“SYN 洪泛攻击”“连接建立失败”本质问题:
“半连接队列存的是收到 SYN 还没完成三次握手的连接(状态 SYN_RECV ),全连接队列存的是完成三次握手、等待应用层 accept 的连接(状态 ESTABLISHED )。

如果半连接队列满,服务器收到新 SYN 时,可能直接丢弃(取决于 tcp_syncookies 等参数,开启 syncookies 会用 cookie 机制避免队列溢出 );全连接队列满,服务器收到客户端 ACK(三次握手第三步 )后,无法把连接从半连接队列移到全连接队列,会回复 RST 报文 ,客户端会收到连接重置错误(比如 connection reset by peer )。

实际运维里,得调大 net.ipv4.tcp_max_syn_backlog(半连接队列大小 )、net.core.somaxconn(全连接队列大小 ),还要结合应用层 accept 速度,避免队列溢出 。”

5. TCP 连接出现“丢包”,一定是网络问题吗?(丢包的多维度分析 )

引导面试官展开讨论“丢包”的复杂成因:
“不一定哦!丢包可能分几种情况:

  • 网络层丢包:路由拥塞、物理链路故障、防火墙拦截,这类是传统‘网络问题’,可以用 pingtraceroute 排查。
  • 传输层丢包:发送方缓冲区满导致丢包(比如滑动窗口太小,或者应用层发数据太快 ),或者接收方处理不过来,主动丢弃(不过 TCP 一般不会主动丢,除非缓冲区真的溢出 )。
  • 应用层丢包:比如应用层读取数据时,没正确处理 TCP 缓冲区的数据,导致‘逻辑上的丢包’(实际 TCP 层已经收到,应用层没读 )。

所以排查丢包,得从网络、传输、应用三层逐步分析,用 tcpdump 抓包看 TCP 报文交互,结合应用日志,才能定位根因 。”

三、协议对比与关联类

6. TCP 与 QUIC(HTTP/3 基于的协议 )的可靠性有啥区别?(新兴协议对比 )

体现对前沿协议的了解,适合大厂考察技术广度:
“TCP 的可靠性是传输层原生实现 ,靠序列号、ACK、重传、滑动窗口这些机制。而 QUIC 把可靠性‘挪到’应用层 实现,基于 UDP 做了类似 TCP 的序列号、重传、拥塞控制。

QUIC 的优势是连接迁移(换网络不中断连接 )多路复用无队头阻塞 ,但可靠性实现更灵活,也依赖应用层自己的逻辑。比如 QUIC 的重传不需要等 RTO(超时重传 ),收到重复 ACK 可以更快触发,而且拥塞控制算法可定制(不像 TCP 受限于内核实现 )。

不过 TCP 更成熟、兼容性好,QUIC 还在推广期,两者在可靠性的‘实现层级’和‘灵活性’上差异挺大 。”

7. TCP 如何与 TLS(HTTPS 加密 )协同工作?(应用层协议联动 )

结合 HTTPS 场景,考察协议栈联动:
“HTTPS 里,TCP 是 TLS 的‘传输底座’。流程是:先建立 TCP 连接(三次握手 ),然后在 TCP 之上跑 TLS 握手(交换证书、协商加密算法、生成会话密钥 ),TLS 握手完成后,应用层的 HTTP 数据会被加密,再通过 TCP 传输。

这里有个关键点:TLS 握手的报文,也是通过 TCP 传输的,所以 TCP 的拥塞控制、可靠传输,会影响 TLS 握手的效率(比如 TLS 握手包丢了,TCP 会重传 )。而且,TLS 有自己的记录层(Record Layer ) ,会把应用数据分片、加密,这些分片在 TCP 层又会被封装成 TCP 报文,两层的‘分片’逻辑得协同,否则可能出现‘TCP 分片 + TLS 分片’导致的额外开销 。

实际优化 HTTPS 性能时,会调 TCP 拥塞控制算法(比如 BBR ),或者用 TLS 1.3 的 0 - RTT 功能,减少握手次数,这些都离不开 TCP 和 TLS 的协同 。”

四、实战与优化类

8. 如何优化 TCP 连接的建立时间?(低延迟场景必问 )

针对“秒开”“低延迟”需求,拆解优化点:
“想让 TCP 建连更快,得从三次握手、网络路径、协议特性下手:

  • 三次握手优化:用 TCP Fast Open(TFO ),客户端第一次发 SYN 时带数据(需要服务端支持 TFO ,并提前交换 cookie ),减少一次 RTT(往返时间 )。
  • 网络路径优化:用 CDN 让服务器离用户更近,或者优化网络拓扑(比如 BGP 选路 ),减少物理距离带来的延迟。
  • 协议栈优化:调小 TCP 初始 RTO(超时重传时间 ),避免建连时因超时重传等待太久;或者用 HTTP/3(基于 QUIC ),实现‘0 - RTT’建连(部分场景 )。

另外,服务端要避免 SYN 队列、ACCEPT 队列溢出,否则建连会失败或延迟,得结合内核参数(tcp_max_syn_backlogsomaxconn )和应用层 accept 逻辑优化 。”

9. 高并发下,如何优化 TCP 连接的吞吐量?(性能优化核心 )

考察对 TCP 拥塞控制、缓冲区、网卡的理解:
“优化吞吐量得‘全链路’考虑:

  • 拥塞控制:选更激进的算法,比如 Linux 下的 BBR(适合高带宽低延迟网络 ),比传统 CUBIC 能更高效利用带宽。
  • 缓冲区调优:调大 TCP 发送/接收缓冲区(net.ipv4.tcp_wmemnet.ipv4.tcp_rmem ),避免因缓冲区小导致数据发不出去或接收慢,但要结合内存资源,别搞溢出。
  • 网卡与中断:开启网卡多队列、RSS(接收端扩展 ),把网络中断分发到多个 CPU 核处理,避免单核心瓶颈;还能调中断 coalescing(合并中断 ),减少中断次数,提升吞吐量。
  • 应用层配合:应用层别频繁 read/write ,用批量读写减少系统调用开销;或者用异步 IO、零拷贝(sendfile ),减少数据在用户态和内核态的拷贝时间 。

这些优化得结合实际场景(比如是长连接大吞吐量,还是短连接高并发 ),通过压测(iperfwrk )找瓶颈点 。”

五、总结:大厂爱考这些方向

  • 底层机制深挖:三次握手/四次挥手的细节、可靠传输的实现逻辑、拥塞控制的流程。
  • 异常与边界场景:队列溢出、丢包、零窗口、连接异常中断的处理。
  • 协议协同与对比:和 QUIC、TLS、HTTP 的联动,理解不同层级协议如何配合。
  • 实战优化:建连优化、吞吐量优化、高并发场景的参数调优与问题排查。

面试时,遇到这类问题别慌,先拆解“协议层级”“机制目的”“实际场景影响”,再结合原理延伸案例(比如“线上遇到过 SYN 队列满,是怎么排查的” ),就能和面试官深入交流,体现你的技术深度与实战思维啦~

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

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

相关文章

广东省省考备考(第二十八天6.13)—资料分析(第二节课)

基期与现期 官方定义:作为对比参照的是基期,而相对于基期比较的是现期 通俗说法:时间靠前的为基期,时间靠后的为现期 增长量与增长率 增长量用来表述基期量与现期量变化的绝对量; 增长率用来表述基期量与现期量变化…

pytorch 中前向传播和后向传播的自定义函数

系列文章目录 文章目录 系列文章目录一、torch.autograd.function代码实例 在开始正文之前,请各位姥爷动动手指,给小店增加一点访问量吧,点击小店,同时希望我的文章对你的学习有所帮助。本文也很简单,主要讲解pytorch的…

【项目实训#08】HarmonyOS知识图谱前端可视化实现

【项目实训#08】HarmonyOS知识图谱前端可视化实现 文章目录 【项目实训#08】HarmonyOS知识图谱前端可视化实现一、背景简介二、技术方案与架构设计2.1 技术选型2.2 组件架构设计 三、知识图谱可视化组件实现3.1 KGResultTab组件设计组件模板结构不同状态的处理用户交互控制节点…

【软件开发】什么是DSL

什么是DSL DSL(Domain-Specific Language,领域特定语言)是一种为特定领域或任务设计的编程语言,目的在于提高该领域中的表达能力与开发效率。 1 在脚本语言中的 DSL 是什么? 在脚本语言(如 Python、Lua、…

JasperReport生成PDF/A类型文档

当JasperReport导出的文档为PDF/A模式时,该PDF为只读可以防止被修改。 设置导出参数 JRPdfExporter exporter new JRPdfExporter();exporter.setExporterInput(SimpleExporterInput.getInstance(jasperPrints));exporter.setExporterOutput(new SimpleOutputStre…

微信小程序使用画布实现飘落泡泡功能

微信小程序使用画布实现飘落泡泡功能:从组件封装到页面调用的完整实践 先看示例截图: 一、背景与技术选型 在微信小程序中实现类似于飘落的泡泡或者樱花飘落的功能,一般主要有 Canvas 和图片两种方案: (1&#xff…

使用STM32设置GPIO中断

使用S™ 32设置GPIO中断 中断示例按键中断实例设计:EXTI0和EXTI9硬件连接分析STM32代码实现代码说明 中断示例 设计一个按键中断的实例。设置两个中断:EXTI0、EXTI9, 在EXTI9的中断服务之程序中实现LED灯的控制 按键中断实例设计&#xff…

解决在微信小程序中view组件下的text和images设置了样式display: flex; align-items: center;对不齐

原始代码的问题 <view style"display: flex; align-items: center;"><text style"line-height: 1;">全国</text><image src"/images/xia.png" style"height: 20rpx; width: 20rpx; display: block;"></im…

归并排序详解:优雅的分治艺术

什么&#xff1f;归并排序&#xff1f;这让博主想起了大学那会被《数据结构与算法》支配的恐惧… 哈哈言归正传&#xff0c;一直想对算法做一个专栏&#xff0c;因为其实工作中很少很少有机会用到算法&#xff0c;倒是很多工具方法底层会使用&#xff0c;工作被各种需求业务“折…

新零售视域下实体与虚拟店融合的技术逻辑与商业模式创新——基于开源AI智能名片与链动2+1模式的S2B2C生态构建

摘要&#xff1a;新零售的核心在于打破线上线下边界&#xff0c;构建“人、货、场”的全场景融合生态。本文提出&#xff0c;实体线下店与虚拟店的协同发展是新零售的重要演进方向&#xff0c;其底层逻辑在于满足消费者作为“现实人”的体验需求与“虚拟人”的效率需求。通过引…

可视化图解算法51:寻找第K大(数组中的第K个最大的元素)

牛客网 面试笔试 TOP101 | LeetCode 215. 数组中的第K个最大元素 1. 题目 描述 有一个整数数组&#xff0c;请你找出数组中第 k 大的数。 给定一个整数数组 a ,同时给定它的大小n和要找的 k &#xff0c;请返回第 k 大的数(包括重复的元素&#xff0c;不用去重)&…

DataWhale-零基础网络爬虫技术(一)

课程链接先给各位 ↓↓↓ &#xff08;点击即可食用.QAQ Datawhale-学用 AI,从此开始 一、引言 还是在笔记的开始&#xff0c;唠唠一些自己的故事 十年前第一次接触网络&#xff0c;也可以说是第一次接触计算机的时候&#xff0c;那时候还是在中学阶段&#xff0c;那时候大…

Linux02

目录 linux常用命令 用户和权限 压缩和解压缩 其他相关命令 Linux中安装常用软件 1.1. jdk的安装 1.1.1. 卸载linux中自带的open-jdk 1.1.2. 把安装包上传到 linux上 1.1.3. 解压安装包 1.1.4. 配置环境变量 1.1.5 验证环境变量 1.3 安装mysql 1.3.1. 检查依赖 1.…

JavaSE超详细笔记-网络编程篇-基于黑马

1. 什么是网络编程【理解】 1.1 概念 在网络通信协议下&#xff0c;不同计算机上运行的程序&#xff0c;进行的数据传输。 应用场景: 即时通信、网游对战、金融证券、国际贸易、邮件、等等。 不管是什么场景&#xff0c;都是计算机跟计算机之间通过网络进行数据传输Java中可以使…

时序数据库Influxdb3 core安装

本文介绍时序数据库Influxdb3 core(开源版本)的安装和简单使用以及调优参数的介绍。 预期&#xff1a; 安装时序数据库Influxdb3 core 创建数据库mydb 写入数据&#xff1b; 使用influxdb3-cli 和 grafana2种方式查询写入的数据 前期准备&#xff1a; linux服务器(本文服…

区间合并:区间合并问题

区间合并&#xff1a;区间合并问题 区间合并 www.acwing.com/problem/content/805/ 按区间的左端点排序 扫描整个区间&#xff0c;在这过程中把可能有交点的区间合并 全包含&#xff1a;不做改动相交&#xff1a;right 后移相离&#xff1a;更新至下一个维护区间 import j…

中国古代数学符号的演进 | 算筹 / 符号 / 算法

注&#xff1a;本文为“中国古代数学符号”相关合辑。 图片清晰度受引文原图所限。 略作重排&#xff0c;未整理去重。 如有内容异常&#xff0c;请看原文。 这个中国古代的数学瑰宝&#xff0c;到底厉害在哪&#xff1f; 原创 朱一文 科普中国 2024 年 07 月 31 日 15:30 北…

XMLDecoder、LDAP 注入与修复

问题&#xff1a;XMLDecoder注入 针对 xml 解码器的注入攻击 反序列化用户控制的 XML &#xff0c;程序没有进行验证&#xff0c; 会让攻击者有机会在服务器上执行恶意代 码。 例&#xff1a;下面代码片段中&#xff0c; XMLDecoder 处理不可信的输入。 ... XMLDecode…

Unity 对象层级处理小结

一.第一优先级Camera Culling Mask属性指定Camera显示的Layer,可以多选 Depth:Depth大的Camera显示的Layer显示在前面 二.避免使用PositionZ调整遮挡关系 在 2D 游戏中,虽然可以通过 Z 轴来调整显示顺序,但这与 2D 游戏的设计理念不符。在可以控制显示层级的多个要素或方…

python基础举例

最近又重新开始学python&#xff0c;浅浅记录下学习到的东西&#xff08;也方便自己回顾看&#xff09; 缩进、空格对于python很重要&#xff0c;一定要注意&#xff01; 以下代码是基于pycharm编写的。 01 输出 #注释 # 单行注释用# &#xff0c;ctrl/是单行注释的快捷键 # …