gitweixin
  • 首页
  • 小程序代码
    • 资讯读书
    • 工具类
    • O2O
    • 地图定位
    • 社交
    • 行业软件
    • 电商类
    • 互联网类
    • 企业类
    • UI控件
  • 大数据开发
    • Hadoop
    • Spark
    • Hbase
    • Elasticsearch
    • Kafka
    • Flink
    • 数据仓库
    • 数据挖掘
    • flume
    • Kafka
    • Hive
    • shardingsphere
    • solr
  • 开发博客
    • Android
    • php
    • python
    • 运维
    • 技术架构
    • 数据库
  • 程序员网赚
  • bug清单
  • 量化投资
  • 在线查询工具
    • 去行号
    • 在线时间戳转换工具
    • 免费图片批量修改尺寸在线工具
    • SVG转JPG在线工具

月度归档1月 2025

精品微信小程序开发门户,代码全部亲测可用

  • 首页   /  2025   /  
  • 1月
  • ( 页面3 )
面试 1月 5,2025

高频面试题:讲一下你在项目中是如何进行代码优化的,比如减少循环嵌套、避免重复计算等。

在项目中进行代码优化,特别是在性能要求较高的场景下,减少循环嵌套、避免重复计算、提升代码执行效率是非常重要的。优化代码的目标不仅是为了提高执行速度,还要考虑代码的可读性、可维护性和扩展性。以下是我在实际项目中进行代码优化的一些常见方法和策略:

1. 减少循环嵌套

嵌套循环通常会导致时间复杂度显著增加,尤其是当嵌套层数较多时,可能会导致算法执行非常慢。优化嵌套循环的常见方法包括:

合并循环

如果两个嵌套的循环没有强依赖关系,可以考虑将它们合并为一个循环,减少多余的计算。例如,如果在两个数组中查找匹配元素,而这两个数组的长度较大时,考虑使用更高效的数据结构(如哈希表)来降低复杂度。

示例:

# 原代码:两层嵌套循环
for i in range(len(list1)):
    for j in range(len(list2)):
        if list1[i] == list2[j]:
            print(f"Match found: {list1[i]}")

# 优化后:使用集合加速查找
set2 = set(list2)
for item in list1:
    if item in set2:
        print(f"Match found: {item}")

在这个例子中,我们通过使用集合来代替内层循环查找,从而将时间复杂度从 O(n * m) 降低到 O(n + m)。

避免不必要的计算

在嵌套循环中,有时会进行重复计算,可以通过将中间结果缓存下来,避免重复计算。例如,计算某个值的平方或某个子数组的和等,可以预计算并存储在变量中。

示例:

# 原代码:重复计算
for i in range(len(data)):
    for j in range(i + 1, len(data)):
        if data[i] + data[j] == target:
            print(f"Pair found: {data[i]}, {data[j]}")

# 优化后:避免重复计算
seen = set()
for num in data:
    if target - num in seen:
        print(f"Pair found: {num}, {target - num}")
    seen.add(num)

在这个优化后的代码中,我们用一个 set 来存储已经遍历过的元素,从而避免了两次遍历的重复计算。

2. 避免重复计算

重复计算是导致代码性能低下的一个常见问题。我们可以通过以下几种方法来避免重复计算:

缓存计算结果

如果某个计算的结果在整个程序运行过程中不会变化,可以使用缓存技术,避免每次都重新计算。例如,使用 Memoization(记忆化)来缓存递归函数的结果,或者将计算结果存储在变量中。

示例:

# 计算斐波那契数列(递归版本,存在重复计算)
def fib(n):
    if n <= 1:
        return n
    return fib(n - 1) + fib(n - 2)

# 优化:使用字典缓存计算结果
fib_cache = {}
def fib_optimized(n):
    if n in fib_cache:
        return fib_cache[n]
    if n <= 1:
        return n
    fib_cache[n] = fib_optimized(n - 1) + fib_optimized(n - 2)
    return fib_cache[n]

在这个例子中,通过缓存已经计算的斐波那契数列值,将递归的时间复杂度从 O(2^n) 降低到 O(n)。

减少冗余函数调用

有时我们在循环或递归中多次调用某个函数或进行重复计算,这时候可以将结果存储在一个局部变量中,避免每次都重新调用。

示例:

# 原代码:重复调用获取长度
for item in data:
    if len(item) > 5:
        print(item)

# 优化后:缓存长度
for item in data:
    item_len = len(item)
    if item_len > 5:
        print(item)

通过将 len(item) 结果存储在 item_len 变量中,避免了在每次比较时都重复计算。

3. 使用合适的数据结构

合适的数据结构可以大幅度提高程序的性能。在很多情况下,选择一个合适的集合类型(如 字典、集合、堆等)可以提高查找、插入、删除操作的效率。

哈希表

如果需要频繁地进行查找操作,哈希表(如 Python 的 dict 或 set)通常是最有效的数据结构。它能将查找操作的时间复杂度降到 O(1)。

示例:

# 需要频繁查找的场景:使用哈希表(字典)存储
data = ["apple", "banana", "cherry", "date"]
lookup = {item: True for item in data}

# 查找操作变为 O(1)
if "banana" in lookup:
    print("Found")

堆

对于需要快速获取最大值或最小值的场景,可以使用堆(Heap)。例如,在处理优先级队列时,堆提供了高效的插入和删除操作,时间复杂度为 O(log n)。

4. 并行化和异步处理

在需要处理大量数据或者IO密集型操作时,可以考虑使用并行化或异步编程来提高性能。

多线程或多进程

对于 CPU 密集型任务,可以使用多线程(或多进程)并行化任务,充分利用多核 CPU 的计算能力。

异步编程

对于 IO 密集型任务(如网络请求、文件操作等),可以使用异步编程来提高性能。通过 async/await 可以避免线程阻塞,提升程序的吞吐量。

5. 算法优化

优化代码的另一重要方向是选择合适的算法。通过优化算法的时间复杂度,可以大幅提升性能。例如:

  • 使用 二分查找 代替线性查找
  • 使用 快速排序 或 归并排序 代替冒泡排序
  • 采用 动态规划 替代暴力递归

在项目中进行代码优化时,主要的目标是提升代码的执行效率、降低资源消耗、并且保持代码的简洁性和可维护性。以下是一些核心策略:

  • 减少循环嵌套和重复计算,使用合适的数据结构。
  • 通过缓存和避免重复计算提升性能。
  • 采用并行化和异步处理来提高效率。
  • 优化算法,选择合适的时间复杂度。
作者 east
面试 1月 5,2025

《Android最全面试题-Offer直通车》目录

​

 如今Android求职是僧多粥少,竞争非常激烈,企业招聘时要求很高,本专栏汇聚android面试各种考点,各大公司Android面试题,《Android 最全面试题》将助你全方位提升,助您脱颖而出,早日拿到满意Offer。

本专栏汇聚了海量优质内容,文章数量超过100 篇。凭借过硬的质量,每月新增订阅用户数以百计,如今仅需特惠价 9.9 元,限时抢购,后续将逐步恢复原价,早订阅早开启逆袭之旅。

全方位 Android 面试知识覆盖:精心筹备,整理出一系列超万字精华篇章,累计数十万的 Android 面试题深度剖析。从基础的 Android 四大组件,到进阶的 Framework 底层原理;从热门的 Jetpack 组件应用,到棘手的性能优化难题;无论是大厂青睐的多线程编程、网络通信,还是新兴的 Kotlin 语言特性,都为你一网打尽。像 Android 中 Activity 的生命周期与启动流程优化、RecyclerView 的复杂使用场景、Handler 消息机制的深度解析等面试高频考点,均有详尽解答。

求职全程护航:不仅有专业详实的技术面试题,还贴心提供英文面试自我介绍模板与高频问答,助你在国际化面试场景中自信开口。面试告捷后,谈薪环节不迷茫,独家分享薪资谈判技巧;成功入职,也有新人快速上手项目指南,教你巧用前沿技术高效熟悉代码库,迅速融入团队。

实战干货满满:专栏还无私分享众多 Android 工程师珍藏的实用工具与高效技巧,诸如精准高效的网络抓包方法、APP 后台保活秘籍、APK 安装包瘦身诀窍等,入职即可实战运用,为你的职业晋升助力加码。

无论你是初出茅庐的 Android 小白,还是经验丰富的行业老兵,本专栏都能精准满足你的需求,助力你攻克面试难关,提升专业技能。

别再犹豫,现在就加入我们,踏上你的 Android 求职征途吧!让《Android 求职宝典 – 直通名企之路》成为你求职路上最坚实的依靠,引领你迈向 Android 开发的巅峰之路。

本书共分为以下几个部分:

基础夯实篇:系统梳理 Android 入门知识,包含四大组件基础、常用布局与控件详解,助你筑牢根基,面试开场惊艳面试官。

大厂真题篇:汇总阿里、腾讯、字节跳动等大厂历年 Android 校招、社招面试真题,并附精准参考答案,让你洞悉大厂用人标准,面试有的放矢。

Framework 深度剖析篇:深入讲解 Android Framework 核心模块,如 AMS、PMS、WMS 等的原理、流程与面试题,助你突破高阶面试瓶颈。

性能优化专题:聚焦 Android 性能优化关键领域,涵盖内存、卡顿、耗电、网络等优化策略与面试实战题,使你在面试中脱颖而出。

前沿技术探索篇:紧跟行业潮流,介绍 Kotlin、Flutter、Android Jetpack 等前沿技术应用与面试考点,彰显你的技术前瞻性。

工具技巧实战篇:分享 Android 开发、调试、测试全流程实用工具与技巧,如高效开发环境搭建、代码调试技巧、自动化测试框架运用等,入职即可大展身手。

综合篇

进BAT必懂:大厂高频八股文面试题及参考答案(6万字长文)

最全手写SQL面试题及代码实现(万字长文持续更新)

软件产品国际化:前后端及App多语言版本解决方案(超详细实现过程)

性能优化篇

2万字Android应用程序性能优化保姆级教程(持续更新)

Android面试高阶问题:Android屏幕刷新机制与优化指南

面试必考问题:Android APP耗电最全解析和优化指南

Android面试必考问题:Android性能优化最全面试题及参考答案(8万字长文)

Android高频考点和难点:APK安装包瘦身方案研究

Android开发兼容性问题3万字保姆级教程(Android版本、屏幕、多语言、硬件、第三方库、权限)

android app如何在后台保活,不被系统杀掉

Android各版本的适配和兼容保姆级教程(万字长文持续更新)

面试技巧篇

外企大厂英文面试题大全及参考答案(万字长文)

framework深度剖析

Android事件分发机制深入浅出全面解析和优化指南

一文看懂Android Binder机制原理和使用示例

Android Framework AMS面试题及参考答案

Android Framework PMS面试题及参考答案

Android Framework AudioFlinge 面试题及参考答案

Android Framework WMS面试题及参考答案

Android Framework SurfaceFlinger面试题及参考答案

Android OTA 更新面试题及参考答案

Android HAL最强面试题及参考答案

Android RIL面试题及参考答案

前沿技术篇

Flutter面试题及参考答案(android和ios面试必懂)

Android Jetpack 最全面试题及参考答案

基础夯实篇

android技术

Android最全8万字Fragment面试题及参考答案(持续更新)

Android NDK/JNI面试题大全及参考答案(3万字长文)

Android自定义View最全面试题及参考答案

Android面试消息机制高频面试题及参考答案(4万字长文讲Handler、AsyncTask和组件之间通信)

Android面试消息机制高频面试题及参考答案(4万字长文讲Handler、AsyncTask和组件之间通信)

大厂面试必备:Android View工作原理面试题及参考答案(5万字长文)

Android RecyclerView面试题及参考答案(8万字长文)

Android Activity面试题最全解析(5万字长文)

Android Service 100道面试题及参考答案(6万字长文)

Android Content Provider最全面试题及参考答案(8万字长文)

Android BroadcastReceiver最全面试题及参考答案(8万字长文)

吃透高频考点:Android中的ANR问题及其解决策略万字教程

Android中的Activity生命周期和启动流程及优化策略

Android热修复原理万字保姆级教程

Android插件化原理及其实现

Android面试必备知识:Android络访问框架对比(特点、使用高级技巧、使用场景)

Android自定义View详解(实现、工作流程、使用场景和优化)

Android Serializable和Parcelable的区别及其使用

CVTE Android面试题及参考答案(100道题)

Android UI控件必刷80道面试题及参考答案

Android插件化和组件化面试题及参考答案

kotlin

Android Kotlin最全面试题及参考答案(100道题)

Java技术

通往大厂Java面试题及参考答案2万字长文

Java虚拟机最全面试题及参考答案

Java架构师必知的 JVM 调优知识

进阶面试题:Java反射机制最全面试题及参考答案

Java中的Lock、synchronize、CAS关系及其应用场景

Java单元测试面试题及参考答案

数据结构、算法和设计模式

从上千份大厂面经呕心沥血整理:大厂高频手撕面试题(数据结构和算法篇 ,Java实现亲试可跑)

数据结构高频问题:数组与链表的特点、细节及其原理详解

Java设计模式面试题及参考答案

科大讯飞android面试题及参考答案面试高频高阶问题:2万字长文详解JDK源码用到哪些设计模式

多媒体技术

一文看懂视频播放器丢帧策略

OpenCV 100道面试题及参考答案(7万字长文)

音频如何低延时回声消除与降噪篇保姆级教程

Android Audio最全面试题及参考答案(7万字长文)

MediaPipe最全面试题及参考答案

Halcon面试题及参考答案

中间件

RxJava最全面试题及参考答案

Android EventBus最全面试题及参考答案

网络篇

物联网(IoT)及物联网网络协议面试题及参考答案(2万字长文)

开发和测试要懂知识:如何进行网络抓包最全宝典

 存储篇

SQLite 数据库设计最佳实践

SQLite从入门到精通面试题及参考答案

混合开发

移动混合开发面试题及参考答案

大厂面试篇

腾讯阅文集团Android面试题及参考答案

腾讯微信Android面试题及参考答案(多张原理图)

字节跳动Android面试题汇总及参考答案(80+面试题,持续更新)

小米Android面试题及参考答案

美团Android开发200道面试题及参考答案(上)

美团Android开发200道面试题及参考答案(中)

美团Android开发200道面试题及参考答案(下)

虾皮Shopee Android面试题及参考答案

欢聚时代(BIGO)Android面试题及参考答案

顺丰Android面试题集锦及参考答案

贝壳Android面试题及参考答案

 TCL Android面试题大全及参考答案

 米哈游Android面试题汇总及参考答案

 虎牙Android面试题及参考答案

 2024年京东Android面试题及参考答案(80道题)

 小红书Android面试题汇总及参考答案

 京东Android最全面试题及参考答案

 蔚来Android面试题及参考答案(3万字长文)

理想汽车Android面试题及参考答案

 大华Android面试题及参考答案

海康Android面试题及参考答案

 大厂安卓面经:大疆Android面试题及参考答案

猫眼Android面试题及参考答案

去哪儿Android面试题及参考答案

4399 Android面试题及参考答案

360 最新Android面试题及参考答案

 快手Android开发面试题及参考答案(60道面试题)

康佳Android面试题及参考答案(多张原理图)

三七互娱Android面试题及参考答案

唯品会Android面试题及参考答案

OPPO Android面试题及参考答案 (上)

OPPO Android面试题及参考答案 (下)

VIVO Android面试题及参考答案

斗鱼Android面试题及参考答案

滴滴Android开发面试题及参考答案

科大讯飞android面试题及参考答案 ​

作者 east
面试 1月 5,2025

《嵌入式最全面试题-Offer直通车》目录

​

 嵌入式领域蓬勃发展,嵌入式工程师成为众多科技企业争抢的热门人才。如果你渴望在嵌入式面试中脱颖而出,成功斩获心仪的 offer,那么《嵌入式最全面试题 – Offer直通车》将是你的绝佳选择。本专栏是CSDN是热门专栏,100多篇文章,总字数过百万。

全面嵌入式面试知识体系:本专栏精心整理了众多超万字的精华内容,总计达数十万字的嵌入式面试题总结。涵盖从嵌入式基础知识到各大厂面试真题,从驱动开发到操作系统,从硬件到软件等各个方面。无论是 FreeRTOS、UCOS 等嵌入式操作系统,还是 STM32、ESP32 等微控制器,本书都为你提供了最全面的试题和参考答案。对于面试难点如嵌入式驱动开发流程、Linux 并发与竞争等,更是有多篇深度详解!

从面试到入职全程贴心指导:不仅有丰富全面的各类技术面试题,还提供英文面试自我介绍参考和综合素质提升建议。面试成功后,为你提供谈薪技巧;入职新公司后,指导你如何快速上手项目,如何利用先进技术高效熟悉代码。

实用干货分享:本专栏分享众多嵌入式工程师工作中珍藏且亲测有效的工具和技巧,如嵌入式元件的认识方法、嵌入式开发中的代码优化技巧等,可立即应用到你的新工作中,为你的职业发展加分!

无论你是嵌入式领域的新手还是经验丰富的老手,本专栏都能为你提供宝贵的参考和指导。无论你是准备面试还是想要提升自己的嵌入式技能,本书都能帮助你更好地应对挑战。

现在就加入我们,开启你的嵌入式面试之旅吧!让《嵌入式最全试题 – 开启高薪之路》成为你的得力助手,助你顺利通过面试,迈向嵌入式领域的成功之路!

本书共分为以下几个部分:

综合篇:提供多篇嵌入式八股文的综合篇,可以面试前进行突击。

面试:本部分为你提供了英文自我介绍的参考范文和英文高频面试题,帮助你在面试中展现自信、流利的一面。

嵌入式大厂校招面试题汇总及参考答案:本部分汇总了各大厂校招嵌入式岗位的面试题及参考答案,帮助你更好地了解企业的面试要求和侧重点,让你在竞争激烈的校招中脱颖而出。

嵌入式基础知识:本部分详细介绍了嵌入式元件认识、嵌入式学习路线等嵌入式入门必备知识。

嵌入式操作系统:本部分重点讲解了 FreeRTOS、UCOS、RT-Thread 等嵌入式操作系统的面试题及参考答案,包括任务调度、软件定时器等方面的问题。

嵌入式驱动开发:本部分深入剖析了嵌入式驱动开发的流程和技巧,以及常见接口协议如 SPI、I2C 等的面试题。

嵌入式处理器架构与微控制器:本部分涵盖了 ARM、RISC-V 等处理器架构以及 STM32、ESP32 等微控制器的选型对比和面试题。

C语言和C++:汇总了C和C++高频知识点和难点,例如智能指针。

嵌入式技术面试综合:本部分汇总了 C 语言、数据结构、密码学与信息安全等嵌入式相关技术的面试题及参考答案,让你在面试中全面展示自己的技术实力。

目录

一、综合篇

面试综合技术

面试指导及综合素质篇

二、软件篇

系统驱动总线篇

大模型

linux开发

C和C++相关

数据结构和算法:

软件开发

多媒体开发

网络协议和安全

三、硬件相关件篇

硬件相关

四、公司面试和行业篇

行业相关

公司面试题

五、工具和运维篇

开发工具相关

 DevOps流程自动化

运维篇


一、综合篇

面试综合技术

6万字嵌入式最全八股文面试题大全及参考答案(持续更新)

嵌入式面试高频八股文面试题及参考答案

嵌入式高频面试题100道及参考答案(3万字长文)

 嵌入式面试题精选100道及参考答案(4万字长文)

嵌入式学习路线:掌握这些知识点可以入门拿Offer

小白变高手要懂的知识点:嵌入式开发的难点与优化措施

面试指导及综合素质篇

嵌入式面试英文自我介绍参考(万字长文)

外企面企必备:IT技术面试英文高频面试题

技术简历优化秘籍:迈向求职成功第一步

做好这些不用担心试用期不通过:程序员入职新公司如何快速上手项目

如何把自己卖个好价钱:实战面试谈薪水

外企大厂英文面试题大全及参考答案(万字长文)

二、软件篇

系统驱动总线篇

最新最全ARM 3万字面试题及参考答案(持续更新)

UCOS高频面试题及参考答案(2万字长文)

嵌入式u-boot最全面试题及参考答案(5万字长文持续更新)
嵌入式FPGA(现场可编程门阵列)面试题及参考答案

嵌入式最全BLE面试题及参考答案

STM32Cube精选30道面试题及参考答案(3万字长文)

嵌入式驱动程序100道面试题(6万字长文)

嵌入式MCU面试题汇总及参考答案(2万字长文)

嵌入式最全BLE面试题及参考答案

嵌入式Bootloader面试题面面观(2万字长文)

嵌入式u-boot最全面试题及参考答案(5万字长文持续更新)

嵌入式板级支持包(BSP)80道面试题及参考答案(3万字长文)

大厂嵌入式数字信号处理器(DSP)面试题及参考答案

2万字长文详解嵌入式网络设备驱动开发面试题及参考答案

RT-Thread必考面试题及参考答案

嵌入式μClinux必考面试题及参考答案

嵌入式PowerPC面试题及参考答案(2万字长文)

一文看懂 Rt-thread 系统(移植、任务管理、调度、通讯机制、内存管理)

UCos 系统从入门到精通万字保姆级教程

FreeRTOS系统从入门到精通万字保姆级教程

FreeRTOS任务调度从入门到精通

嵌入式开发工程师要懂的FPGA知识要点

嵌入式开发工程师必懂的FreeRTOS知识要点

嵌入式实时操作系统VxWorks面试题及参考答案(4万字长文)

FreeRTOS必考面试题及参考答案

万字长文详解FreeRTOS软件定时器

万字长文详解嵌入式驱动开发流程和技巧(多个代码实例)

嵌入式SoPC最全面试题及参考答案

嵌入式片上系统(SoC)最全面试题及参考答案

嵌入式MPU(微处理器单元)最全面试题及参考答案(3万字长文)

嵌入式SPI接口协议最全面试题及参考答案

RTEMS面试题汇总及参考答案

通信协议的选择:UART、SPI、I2C与CAN的比较

嵌入式操作系统选型:FreeRTOS、Zephyr、ThreadX与RTEMS的比较

嵌入式必懂处理器架构选型:ARM、RISC-V、MIPS与x86对比

嵌入式必懂微控制器选型:STM32、ESP32、AVR与PIC的比较分析

深入解析Linux驱动开发中的I2C时序及I2C高频面试题嵌入式I2C总线最全面试题及参考答案(10万字长文)

大模型

装上大模型翅膀,程序员入职新公司如何快速上手代码(老员工如何选择大模型编程如虎添翼)

linux开发

嵌入式linux面试题大全及参考答案(3万字长文)

嵌入式Framebuffer面试题精要及参考答案

嵌入式内存管理高频面试题及参考答案(4万字长文)

Linux Shell面试题大全及参考答案(3万字长文)

嵌入式高频考点:万字长文详解Linux中的阻塞IO与非阻塞IO

万字长文详解Linux并发与竞争 – 原子操作、自旋锁、信号量、互斥体

嵌入式epoll面试题面试题及参考答案

epoll内核原理与实现详解

CAN总线物理层知识点详解及大厂CAN总线高频面试题

面试高频问题:linux进程间通信详解

高频面试考点:IO多路复用之select、poll和epoll原理剖析和对比

C和C++相关


C语言内存管理深度解析知识点大全

C语言内存管理深度解析面试题及参考答案(2万字长文)

大白话深入浅出讲嵌入式C语言多线程编程

嵌入式C语言多线程编程最全面试题及编程实例(10万字长文)

嵌入式C语言文件操作(IO读写)手写面试题及参考答案

嵌入式C语言指针面试题大全(持续更新)

面试必问知识:C语言内存分配最全解释和案例

C++ STL最全最新面试题及参考答案(13万长文)

C++11智能指针最全面试题及代码示例参考答案(100+面试题11万字)

C++智能指针全面解析和高频面试题

C++面试必懂知识:C++对象的生命周期详细解读

C++面向对象面试题及参考答案

C++容器面试题及参考答案

 C++内存管理面试题及参考答案(面试必备,持续更新)

 面试高频问题:C/C++编译时内存五个分区

数据结构和算法:

数据结构高频问题:数组与链表的特点、细节及其原理详解

软件开发

QT面试宝典:看你会了几道题?

ZeroMQ最全面试题解读(3万字长文)

 嵌入式软件 Bug 排查与调试技巧

 存储篇:

SQLite从入门到精通面试题及参考答案

 SQLite 数据库设计最佳实践

多媒体开发

音频如何低延时回声消除与降噪篇保姆级教程

OpenCV 100道面试题及参考答案(7万字长文)

网络协议和安全

密码学与信息安全面试题及参考答案(2万字长文)

大厂计算机网络高频八股文面试题及参考答案(面试必问,持续更新)

开发和测试要懂知识:如何进行网络抓包最全宝典

三、硬件相关件篇

硬件相关

51单片机从入门到精通面试题及参考答案(2万字长文)

嵌入式电机80道精选面试题及参考答案

嵌入式数字电路面试题大全及参考答案(持续更新)

嵌入式模拟电路面试题大全及参考答案(持续更新)

嵌入式信号处理面试题及参考答案(持续更新)

嵌入式PCB制图面试题及参考答案(2万字长文)

嵌入式开发必懂入门知识:认识嵌入式元件

面试高阶问题:单片机选型策略万字长文详解

嵌入式电源管理面试题及参考答案

嵌入式元件面试题及参考答案

四、公司面试和行业篇

行业相关

一文吃透物联网(IoT)的面试题及参考答案

AUTOSAR 2万字面试题全面解析(持续更新)

大厂物联网(IoT)高频面试题及参考答案

公司面试题

华为嵌入式面试题及参考答案(持续更新)

大厂面经:大疆嵌入式面试题及参考答案(4万字长文:持续更新)

中兴嵌入式面试题汇总及参考答案(3万字长文)

海康威视嵌入式最全面试题及参考答案(3万字长文)

普联(TP-LINK)嵌入式面试题大全及参考答案(持续更新)

大华嵌入式面试题大全及参考答案(2万字长文)

2024年百度嵌入式面试题及参考答案(7万字长文)

2024嵌入式面试:OPPO嵌入式面试题及参考答案

2万字大厂面经:小米嵌入式面试题及参考答案(持续更新)

荣耀嵌入式面试题及参考答案

2024嵌入式面试:VIVO嵌入式面试题及参考答案(6万字长文)

理想汽车嵌入式面试及参考答案

蔚来嵌入式面试题及参考答案大全(5万字长文)

2024年联发科嵌入式面试题及参考答案

2024嵌入式面经:地平线嵌入式面试题及参考答案(5万字长文)

诺瓦星云社招嵌入式面试题及参考答案(10万字长文)

诺瓦星云校招嵌入式面试题及参考答案(100+面试题、10万字长文)

影石嵌入式面试题及参考答案(7万字长文)

2024年最新紫光嵌入式面试题及参考答案

中新赛克嵌入式面试题及参考答案

2024最新大厂面试:汇川嵌入式面试题及参考答案

经纬嵌入式面试题及参考答案(万字长文)

西门子嵌入式面试题及参考答案(万字长文)

智洋创新嵌入式面试题汇总及参考答案

嵌入式高频考点:万字长文详解Linux中的阻塞IO与非阻塞IO

大厂校招:海能达嵌入式面试题及参考答案

大厂校招:海能达嵌入式面试题及参考答案

禾赛嵌入式面试题及参考答案(2万字长文)

阳光能源嵌入式面试及参考答案(2万字长文)

迈瑞嵌入式面试及参考答案

联影医疗嵌入式面试题及参考答案(3万字长文)

大厂面经:兆易创新嵌入式面试及参考答案(2万字长文)

中科曙光嵌入式面试大全及参考答案(3万字长文)

格力嵌入式面试题及参考答案

海尔嵌入式硬件校招面试题及参考答案

大厂校招:星宸科技嵌入式面试及参考答案(5万字长文)

芯原科技嵌入式面试题及参考答案

全志科技嵌入式面试题及参考答案

卓胜微嵌入式面试题及参考答案(2万字长文)

歌尔嵌入式面试题及参考答案

沐曦嵌入式面试题及参考答案

 寒武纪嵌入式面试题及参考答案

比特大陆/算能科技嵌入式面试题及参考答案

摩尔线程嵌入式面试题及参考答案(2万字长文)

元戎启行嵌入式面试题及参考答案

宁德时代嵌入式面试题及参考答案(万字长文)

吉利极氪汽车嵌入式面试题及参考答案

百度集度嵌入式面试题及参考答案 

 零跑汽车嵌入式面试题汇总及参考答案

 美团嵌入式面试题及参考答案(无人机团队)

阿里平头哥嵌入式面试题及参考答案

五、工具和运维篇

开发工具相关

Protel DXP 面试题详解及参考答案(4万字长文)

Altium Designer (AD) 设计软件高频面试题及参考答案(3万字长文)

Linux gdb lldb面试题及参考答案(万字长文)

 DevOps流程自动化

通晓Git操作-git面试题及参考答案

Jenkins从入门到精通面试题及参考答案(3万字长文)

SonarQube面试题一卷到底60问及参考答案(3万字长文)

运维篇

Grafana面试题精选和参考答案

Prometheus面试题精选及参考答案(2万字长文) ​

作者 east
Java, 面试 1月 5,2025

《Java开发及前端最全面试题-Offer直通车》目录

​

 Java开发是需求最广,工资高的细分领域,同时也是会的人最多,有的公司招1个Java开发,要面试几十甚至上百面试者,同时要求很高,要求通晓技术栈很多及很深深度。

如果你正准备面试,想要脱颖而出,那么《Java开发及前端最全面试题-Offer直通车》是你的不二选择。

本书汇集了多篇超过1万字的精华内容,无论是Java基础、数据库、SpringBoot和SpringCloud等必问的,还是前端、k8s等容器和虚拟化和大数据各类技术面试,本书都为你提供了最全面的试题和参考答案。

无论你是Java开发的新手还是有一定经验的老手,本书都能为你提供宝贵的参考和指导。无论你是准备面试还是想要提升自己的技能,本书都能帮助你更好地应对挑战。

现在就加入我们,开启你的大数据面试之旅吧!让《Java开发及前端最全面试题-Offer直通车》成为你的得力助手,助你顺利通过面试,迈向大数据领域的成功之路!

本书共分为以下几个部分:

一、Java语言篇

在Java领域,掌握扎实的Java基础和虚拟机知识是必不可少的。本专栏将为您提供Java虚拟机最全面试题及参考答案,助您轻松应对各种面试挑战。同时,我们还将为您呈现通往大厂Java面试题及参考答案2万字长文,让您在激烈的求职竞争中脱颖而出。

二、数据库及SQL篇

数据库作为软件开发的核心组件,其重要性不言而喻。本专栏将为您带来MySQL、SQL Server、Oracle、PostgreSQL等主流数据库的面试题及参考答案,让您在数据库领域的面试中游刃有余。此外,我们还将提供最全手写SQL面试题及代码实现,让您在SQL技能上更上一层楼。

三、框架篇

在Java开发中,SpringBoot和SpringCloud等框架的使用已成为标配。本专栏将为您带来互联网大厂Spring Cloud面试题及参考答案、Nacos高频面试题及参考答案、Seata面试宝典等一系列精彩内容,助您在框架领域的面试中轻松过关。

四、综合素质篇

除了专业技能外,综合素质也是面试官关注的重点。本专栏将为您提供程序员入职新公司如何快速上手项目的实用建议,让您在试用期也能表现出色。

五、NoSQL篇

随着大数据时代的到来,NoSQL数据库在数据处理中的应用越来越广泛。本专栏将为您带来Elasticsearch、Redis、Pulsar等NoSQL数据库的高频面试题及参考答案,助您在NoSQL领域大展拳脚。

六、容器和虚拟化篇

容器化和虚拟化技术已经成为现代软件开发的重要组成部分。本专栏将为您带来k8s(Kubernetes)、Docker等容器和虚拟化技术的最新面试题及参考答案,让您在这一领域更具竞争力。

七、消息队列篇

消息队列作为异步处理的关键组件,在大型系统中发挥着重要作用。本专栏将为您提供RocketMQ等消息队列的最全面试题详解,助您在消息队列领域的面试中取得成功。

八、前端篇

在前端领域,Angular、React、Vue等框架的使用日益普及。本专栏将为您带来这些框架的必问面试题及参考答案,让您在前端领域的面试中更加自信。

九、其他语言网页开发篇

除了Java外,Python、Django等其他语言和框架也在网页开发中占据一席之地。本专栏将为您带来这些语言和框架的面试题及参考答案,让您在多元化的网页开发领域更具竞争力。

十、大数据篇

在大数据时代背景下,掌握Kafka、Zookeeper等大数据处理技术已成为必备技能。本专栏将为您带来这些技术的面试题及参考答案,助您在大数据领域的面试中脱颖而出。

经验或案例干货篇

软件产品国际化:前后端及App多语言版本解决方案(超详细实现过程)

综合技术面试篇

大厂计算机网络高频八股文面试题及参考答案(面试必问,持续更新)

后端高频考点:网站限流机制与算法详解

Java语言篇

Java虚拟机最全面试题及参考答案

通往大厂Java面试题及参考答案2万字长文

Java多线程和并发编程面试题和参考答案100多道(持续更新)

Java中的Lock、synchronize、CAS关系及其应用场景

 进阶面试题:Java反射机制最全面试题及参考答案

 大厂校招必懂:Java反射机制原理详解(2万字长文)

Java架构师必知的 JVM 调优知识

NIO和Netty保姆级5万字面试题及参考答案

Java设计模式面试题及参考答案

 Java RMI最全面试题及参考答案

 Java中的Lock、synchronize、CAS关系及其应用场景

SpringBoot和SpringCloud

互联网大厂Spring Cloud面试题及参考答案(持续更新)

Nacos高频面试题及参考答案(2万字长文)

Seata面试宝典(2万字长文)

Spring Security高频面试题及参考答案(3万字长文)

Spring Boot过百道保姆级面试题及参考答案(持续更新)

Spring MVC八股文面试题及参考答案(4万字长文)

 精通Spring Cloud: Spring Cloud Config面试题详解及参考答案(3万字长文)

 Eureka从入门到精通面试题及答案参考

Dubbo面试题甄选及参考答案

Spring框架原理面试题及参考答案

数据库及SQL篇

数据库篇

2万字长文:MySQL面试题及参考答案(持续更新)

3万字长文:SQL Server面试题和参考答案(持续更新)

DBA必备知识:Oracle面试题及参考答案(3万字长文)

大厂PostgreSQL面试题100道及参考答案(5万字长文)

MyCat面试题及参考答案(3万字长文)

关系数据库/SQL篇

最全手写SQL面试题及代码实现(万字长文持续更新)

DBA必懂选型:MySQL、PostgreSQL与Oracle对比研究

 后台开发必问题:分库分表面试题及参考答案(3万字长文)

 一文看懂ProxySQL面试题(3万字长文)

ShardingSphere面试题及参考答案(3万字长文)

Mysql海量数据经常有下面这些操作,离被开除就不远了(持续更新)

Oracle Sql查询和性能优化(持续更新)

看完不怕面试官拷打了:mysql sql优化最全总结(万字长文持续更新)

MySQL存储过程原理、实现及优化

DBA必懂选型:MySQL、PostgreSQL与Oracle对比研究

ORM框架

MyBatis-Plus 2万字面试题详解

Hibernate最新6万字面试题及参考答案

Struts2 3万字经典面试题及参考答案

JPA 3万字面试宝典

万字长文看懂MyBatis一二级缓存机制原理、使用和优化

万字长文看懂MyBatis一二级缓存机制原理、使用和优化

框架篇

RxJava最全面试题及参考答案

综合素质篇

做好这些不用担心试用期不通过:程序员入职新公司如何快速上手项目

装上大模型翅膀,程序员入职新公司如何快速上手代码(老员工如何选择大模型编程如虎添翼)

简历面试篇 

技术简历优化秘籍:迈向求职成功第一步

 外企面企必备:IT技术面试英文高频面试题

一文让你不怕Java开发英文自我介绍:英文面试保姆级教程

 如何把自己卖个好价钱:实战面试谈薪水

Nosql篇

Elasticsearch 面试题及参考答案:深入解析与实战应用

大厂Redis高频面试题及参考答案(持续更新)

Pulsar高频面试题及参考答案(持续更新)

通往大厂之路:Solr面试题及参考答案100道题

一文搞懂MongoDB面试题(2万字长文)

Cassandra面试题及答案详解(3万字长文)

时序数据库InfluxDB面试题和参考答案

Lucene最新最全面试题及参考答案

Redis 性能优化策略与实战保姆级教程

Redis如何实现高性能和高可用

万字长文详解缓存穿透、击穿、雪崩现象的原因和解决方案

Lucene最新最全面试题及参考答案

公司篇

字节跳动后端或大数据基础知识面试题及参考答案(2万字长文)

 阿里2024年Java开发最新最全面试题及参考答案(11万长文

 呕血整理4万字长文:百度Java后台开发面试题及参考答案

进BAT必懂:大厂高频八股文面试题及参考答案(6万字长文)

 阿里Java开发社会招聘面试题及参考答案

虾皮Java后台开发校园招聘面试题及参考答案

大厂面试:2024年虾皮Java开发面试题及参考答案(5万字长文)

 希音(Shein)Java后台开发面试题集锦和参考答案

大厂校招:希音(Shein)校园招聘面试题及参考答案

 大厂校招:唯品会Java面试题及参考答案

 4399 Java开发最全面试题及参考答案

 阿里Java开发校园招聘面试题及参考答案

 搜狐畅游Java后台开发面试题大全及参考答案

 搜狐2024年最新Java开发面试题及参考答案

斗鱼Java后端开发面试题及参考答案

金山云Java 开发面试题及参考答案

蔚来Java面试题及参考答案

小马智行Java开发面试题及参考答案

宁德时代Java面试题及参考答案

​​​​​​​

行业篇 

一文吃透物联网(IoT)的面试题及参考答案

物联网(IoT)及物联网网络协议面试题及参考答案(2万字长文)

大厂物联网(IoT)高频面试题及参考答案

容器和虚拟化

k8s(Kubernetes)最新100道面试题及参考答案(5万字长文)

最新5万字长文:Docker 100道面试题及参考答案

分布式篇

分布式架构最新最全面试题及参考答案

数据结构篇

数据结构高频问题:数组与链表的特点、细节及其原理详解

消息队列

最全RocketMQ面试题详解

 ZeroMQ最全面试题解读(3万字长文)

WebSocket面试常见知识点和面试题

3万字长文看透ActiveMQ面试题及参考答案

RabbitMQ 2万字面试题及参考答案

消息队列原理面试题及参考答案

消息代理工具Apollo面试宝典及参考答案

网络及协议篇

网络丢包问题分析和解决最全解析

开发和测试要懂知识:如何进行网络抓包最全宝典

前端篇

Angular必问面试题及参考答案

React常见面试题及参考答案(3万字长文)

JQuery从入门到精通2万字面试题

前端HTML5从入门到精通面试题及参考答案(2万字长文)

Ajax面试题精选及参考答案(3万字长文)

4万字长文让人看懂ElementUI面试题及参考答案

Vue面试题精选大全及参考答案(5万字长文)

前端面试高频知识点:Angular知识点精华汇总

前端Express.js面试题甄选及参考答案

前端UniApp面试题及参考答案(100道题)

Bootstrap最新最全面试题及参考答案

Linux/Shell篇

Linux Shell面试题大全及参考答案(3万字长文)

其它语言网页开发

3万字长文看懂Django面试

CGI面试题及参考答案

大数据篇

Kafka 面试题及参考答案(持续更新)

深入解析Zookeeper面试题及参考答案(超过万字精华篇)

2万字长文:ELK高频面试题及参考答案

ETL利器:Kettle 2万字长文详解面试题

自动化及调度篇

 DevOps在提升软件质量方面的作用

SVN 80道面试题及参考答案(2万字长文)

SonarQube面试题一卷到底60问及参考答案(3万字长文)

 通晓Git操作-git面试题及参考答案

 Jenkins从入门到精通面试题及参考答案(3万字长文)

分布式任务调度XXL – JOB面试题及参考答案

监控篇 

Nagios高频面试题及参考答案(2万字长文)

 Ganglia面试大全及参考答案(2万字长文)

Prometheus面试题精选及参考答案(2万字长文)

测试篇

Java单元测试面试题及参考答案

安全加密篇

 7万字详解Apache Shiro面试题、示例、参考答案

密码学与信息安全面试题及参考答案(2万字长文)

服务器和运维

JBoss面试题精要和参考答案(3万字长文)

 WebLogic面试题精要和参考答案(2万字长文)

WebSphere面试题精选和参考答案(3万字长文)

2.5万字长文吃透Tomcat面试题及参考答案

Nginx面试题精选及参考答案(3万字长文) ​

作者 east
面试 1月 5,2025

面试高频问题:说一下 HTTP 1.0、HTTP 1.1、HTTP 2 以及 HTTP 3 的发展以及变化

1. HTTP 1.0:基础协议的诞生(1991年)

HTTP 1.0 是最早的 HTTP 协议版本,由万维网的发明人蒂姆·伯纳斯-李(Tim Berners-Lee)在 1991 年提出并应用于最初的 Web 服务。作为一个简单的基于文本的协议,HTTP 1.0 在当时的互联网环境下解决了浏览器和服务器之间的数据传输问题。

特点
  • 请求/响应模型:HTTP 1.0 是基于请求-响应模型的。当客户端向服务器发送请求时,服务器会根据请求返回响应。这是 HTTP 协议的核心理念。
  • 无状态性:HTTP 是无状态的,即每一次请求都是独立的,服务器不会记住上一次请求的状态。
  • 文本协议:所有的 HTTP 消息都是纯文本的,便于人类阅读和调试。
  • 一次请求/一次响应:HTTP 1.0 协议设计中,客户端发起请求时,服务器处理该请求并返回响应后,连接就会关闭。如果客户端需要请求多个资源(如 HTML 页面中的图片、CSS 文件、JavaScript 文件等),就需要建立多个连接。
限制与问题
  • 每个请求需要建立新连接:在 HTTP 1.0 中,每个请求和响应都需要建立一个新的 TCP 连接。随着 Web 内容日益复杂,页面上需要加载的资源数量增加,每个请求都要重新建立连接,导致了大量的网络开销和性能瓶颈。
  • 头部冗余:每个 HTTP 请求和响应都带有完整的头部信息,但这些头部信息往往重复,增加了传输的数据量。

2. HTTP 1.1:改进与优化(1997年)

HTTP 1.1 是对 HTTP 1.0 的重要改进,由 IETF(互联网工程任务组)在 1997 年发布,并迅速成为 Web 上的标准协议。与 HTTP 1.0 相比,HTTP 1.1 引入了多个优化和新特性,主要是为了解决性能瓶颈和提高多用户的并发性能。

主要特点
  • 持久连接(Persistent Connection):HTTP 1.1 引入了持久连接的概念。通过将“Connection: close”头去除,HTTP 1.1 默认为持久连接。这样,客户端和服务器之间可以复用同一个连接,减少了每个请求都建立新连接的开销。一个 TCP 连接可以处理多个请求和响应,直到客户端或服务器主动关闭连接。
  • 管道化(Pipelining):管道化技术允许客户端在等待服务器响应之前,先后发送多个请求,而无需等待每个请求的响应。这有助于减少请求延迟,提升性能。然而,管道化存在问题,比如响应顺序问题,当一个请求的响应延迟时,后续请求的响应也会被阻塞。
  • 缓存控制:HTTP 1.1 引入了更加精细的缓存控制机制,包括 Cache-Control、ETag、Last-Modified 等头部字段,使得浏览器能够更好地控制缓存,从而减少不必要的请求和数据传输。
  • 更多的状态码:HTTP 1.1 扩展了状态码的定义,增加了一些新的响应状态码,例如 409 Conflict、411 Length Required 和 416 Range Not Satisfiable 等,提供了更好的错误处理机制。
  • Chunked Transfer Encoding:HTTP 1.1 支持分块传输编码(Chunked Transfer Encoding),允许服务器分块发送响应数据,客户端可以在接收到部分数据时开始处理,提升了响应的速度。
限制与问题
  • Head-of-line Blocking(HOLB):尽管 HTTP 1.1 引入了持久连接和管道化技术,管道化模式存在一个重大问题:如果其中一个请求的响应延迟,则后续的请求也会被阻塞,这被称为“Head-of-line Blocking”。这种情况在请求较多时会显著影响性能。
  • TCP 连接的限制:虽然持久连接降低了每个请求的连接开销,但仍然受到 TCP 的限制,浏览器通常会为每个域名建立有限数量的连接,导致需要加载多个资源时性能依然受限。

3. HTTP 2:性能革命(2015年)

随着 Web 技术的发展和用户需求的提升,HTTP 1.1 逐渐暴露出一些性能瓶颈,尤其是在处理复杂页面和高并发场景时。为了提升性能,HTTP 2 在 2015 年正式发布,成为现代 Web 上广泛采用的协议。HTTP 2 主要通过优化传输层、提高并发性和减少延迟来改进 HTTP 1.1 的局限。

主要特点
  • 二进制协议:HTTP 2 完全摒弃了 HTTP 1.x 的文本协议,采用了二进制协议。二进制协议相比文本协议具有更高的传输效率,并且解析更为简便,可以避免出现由于文本格式导致的错误和性能损失。
  • 多路复用(Multiplexing):HTTP 2 允许在一个 TCP 连接上并发地发送多个请求和响应,并且它们的顺序不会相互干扰。这样可以有效解决 HTTP 1.1 中的 Head-of-line Blocking 问题,多个请求可以同时发出并独立处理。
  • 流控制:HTTP 2 引入了流控制机制,可以有效控制数据流的传输速率,防止一方发送数据过快导致另一方处理不过来,从而避免网络阻塞。
  • 头部压缩:HTTP 2 使用 HPACK 压缩算法来压缩 HTTP 请求和响应的头部信息,减少了由于重复的头部信息造成的开销,提高了传输效率。
  • 服务器推送(Server Push):HTTP 2 支持服务器推送机制,允许服务器主动向客户端推送资源,而不需要客户端明确请求。这有助于减少延迟,特别是在页面加载时,服务器可以提前将客户端可能需要的资源推送到浏览器中。
  • 优先级和依赖关系:HTTP 2 允许客户端指定请求的优先级,服务器可以根据优先级来处理请求,这对于高性能的应用尤为重要,能够显著提升页面加载速度。
限制与问题
  • 依然依赖 TCP:HTTP 2 尽管引入了多路复用和流控制等优化机制,但它仍然基于 TCP 连接,这意味着它仍然无法克服 TCP 协议在高延迟和网络丢包情况下的局限性。
  • 服务器推送的问题:虽然服务器推送可以减少某些情况下的请求次数,但它也存在一定的问题,例如推送资源可能没有被客户端需要,从而浪费带宽。

4. HTTP 3:基于 QUIC 协议的新时代(2020年)

HTTP 3 是基于 Google 提出的 QUIC(Quick UDP Internet Connections)协议的 HTTP 协议新版本,旨在进一步提升 Web 性能,特别是在高延迟和不稳定网络环境下。HTTP 3 仍然基于 HTTP 2 的多路复用和流控制等特性,但它摒弃了传统的 TCP 协议,转而使用 QUIC 协议。

主要特点
  • 基于 QUIC 协议:HTTP 3 使用 QUIC 协议而不是 TCP。QUIC 是一个基于 UDP 的传输协议,具有低延迟和更快连接建立的优势。由于 QUIC 可以在用户端和服务器之间建立加密的传输通道,并且实现了多路复用和流控制机制,它能够有效解决 HTTP 2 中 TCP 带来的瓶颈。
  • 更快的连接建立:QUIC 协议比 TCP 协议建立连接的速度更快,因为它集成了 TLS(传输层安全协议)和握手过程,减少了连接时延。QUIC 在首次连接时仅需一次握手就可以完成加密,避免了 TCP 中多次握手的延迟。
  • 内建加密:QUIC 协议内建加密功能,确保了 HTTP 3 传输的数据始终是加密的,这比传统的 HTTP 协议更加安全。
  • 更强的抗丢包能力:由于QUIC 基于 UDP 协议,它比 TCP 更加高效地处理丢包和网络延迟问题。在 TCP 中,丢包会导致整个连接的阻塞(因为 TCP 是面向流的协议,每次丢包都需要等待重传),而 QUIC 可以独立地重传丢失的数据包,不会影响到其他数据流的传输,因此在不稳定网络环境下性能更好。
  • 减少的延迟:QUIC 支持快速恢复连接,它在中断后可以快速恢复,并且减少了重新握手的延迟。在传统的 TCP 中,每次建立新连接时需要经过三次握手,TLS 也需要额外的加密和握手过程,而 QUIC 能够在同一连接中直接进行加密和身份验证,大大减少了延迟。
  • 多路复用与流控制:与 HTTP 2 类似,HTTP 3 支持多路复用,在同一个连接上同时传输多个数据流,而且每个流可以独立地处理,避免了 HTTP 2 中的 Head-of-Line Blocking 问题。每个数据流在 QUIC 中是独立的,即使一个流丢包或出现延迟,其他流也不会受到影响。
  • 内建加密:HTTP 3 默认启用了加密,使用的是 TLS 1.3 协议。这意味着所有的 HTTP 3 流量都是加密的,确保了更高的安全性和隐私保护。
  • 更快的连接恢复和更低的延迟:相比于传统的 TCP + TLS,QUIC 协议能够提供更快速的连接建立和恢复,因为它减少了多个协议层之间的交互和握手过程。QUIC 采用了基于 UDP 的流量控制和拥塞控制,减少了连接建立的时延,特别是在需要频繁断开和重新连接的移动网络环境中表现尤为突出。
  • 抗丢包能力更强:QUIC 可以更好地应对丢包情况,在不影响其他流的情况下重传丢失的包,极大地提升了数据传输的可靠性和稳定性。
  • 自动加密:HTTP 3 强制使用加密连接,这使得 Web 安全性得到更大的提升,同时也避免了多次加密层的开销,提升了性能。
  • 广泛的支持尚需时间:虽然主要浏览器和服务器已经开始支持 HTTP 3,但因为 QUIC 协议基于 UDP,这意味着防火墙和网络运营商的支持仍然是一个挑战。某些网络可能会阻止 UDP 流量,这可能影响到 HTTP 3 的普及程度。
  • 过渡期的兼容性问题:虽然大多数现代浏览器和服务器已经开始支持 HTTP 3,但对于仍然使用 HTTP 1.1 和 HTTP 2 的环境,仍然需要维持向后兼容。服务器和客户端需要根据协议版本的支持情况选择适当的协议版本,可能会导致一些额外的复杂性。
  • HTTP 1.0 为 Web 的初步发展奠定了基础,但它的局限性很快暴露,尤其是每次请求都需要建立一个新的连接的问题。
  • HTTP 1.1 通过引入持久连接、管道化和缓存控制等特性,显著提高了性能,尤其是在客户端与服务器之间频繁通信的情况下。
  • HTTP 2 则通过采用二进制协议、支持多路复用和服务器推送等技术,进一步提高了 Web 应用的响应速度和效率。
  • HTTP 3 采用基于 UDP 的 QUIC 协议,解决了 HTTP 2 中的 TCP 拥塞问题,进一步降低了延迟,并提高了抗丢包能力,尤其在移动网络和高延迟环境下表现尤为出色。
作者 east
Flink, tdengine 1月 3,2025

Flink读取TDEngine数据实例,解决com.taosdata.jdbc.rs.RestfulDatabaseMetaData@38af9828 is not serializable. The object probably contains or references non serializable fields错误

用flink读取TDEngine,运行报错:
com.taosdata.jdbc.rs.RestfulDatabaseMetaData@38af9828 is not serializable. The object probably contains or references non serializable fields

这意味着 com.taosdata.jdbc.rs.RestfulDatabaseMetaData 类的对象无法被序列化,而 Flink 的作业中涉及到的某些操作需要将对象传递到不同的任务中,这就要求对象是可序列化的(即实现了 Serializable 接口)。在 Flink 中,所有要在分布式环境中传输或持久化的对象都必须是可序列化的。

  • RestfulDatabaseMetaData 是 TDengine JDBC 驱动中的一个类,它可能没有实现 Serializable 接口,因此在需要将该类对象传输到其他机器时,Flink 无法进行序列化。

解决方法是

使用 transient 关键字避免对不可序列化对象进行传递。

通过标记 connection、preparedStatement 和 resultSet 为 transient,这些对象不会被 Flink 传递到 Task Manager。

完整可执行代码如下:


import org.apache.flink.streaming.api.functions.source.RichParallelSourceFunction;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class TDengineSourceFunction extends RichParallelSourceFunction<RunData> {

    private transient Connection connection;        // 使用 transient 避免序列化
    private transient PreparedStatement preparedStatement;
    private transient ResultSet resultSet;
    private String query;
    private volatile boolean isRunning = true;

    private String jdbcUrl;
    private String user;

    private String password;


    public TDengineSourceFunction(String jdbcUrl, String user, String password, String query) {
        this.query = query;
        this.jdbcUrl = jdbcUrl;
        this.user = user;
        this.password = password;

        // JDBC连接参数在open()方法中初始化
    }

    @Override
    public void open(org.apache.flink.configuration.Configuration parameters) throws Exception {
        super.open(parameters);
        Class.forName("com.taosdata.jdbc.rs.RestfulDriver");
        // 在这里初始化数据库连接
        this.connection = DriverManager.getConnection(jdbcUrl, user, password);
        // 准备SQL查询语句
        this.preparedStatement = connection.prepareStatement(query);
        this.resultSet = preparedStatement.executeQuery();
    }

    @Override
    public void run(SourceContext<RunData> sourceContext) throws Exception {
        while (isRunning && resultSet.next()) {
            // 从ResultSet中提取数据并转换为RunData对象
            RunData data = convertResultSetToData(resultSet);
            // 将数据发送到Flink的处理流中
            if (data != null) {
                sourceContext.collect(data);
            }
        }
    }

    @Override
    public void cancel() {
        isRunning = false;
        // 关闭资源
        try {
            if (resultSet != null) resultSet.close();
            if (preparedStatement != null) preparedStatement.close();
            if (connection != null) connection.close();
        } catch (SQLException e) {
            // 处理关闭资源时的异常
            e.printStackTrace();
        }
    }

    private RunData convertResultSetToData(ResultSet resultSet) throws SQLException {
        // 提取单行数据
      
        // 将数据转换为 RunData 对象


      //  return new RunData(......);
        return null;
    }
}
作者 east
Flink 1月 3,2025

解决flink读取TDEngine的数据Could not initialize class com.taosdata.jdbc.TSDBJNIConnector

需要用flink读取TDEngine的数据,用jdbc方式连接,运行报错:Could not initialize class com.taosdata.jdbc.TSDBJNIConnector

JDBC-JNI的方式需要 TDengine-client(使用JDBC-JNI时必须,使用JDBC-RESTful时非必须),所以采用JDBC-RESTful 的方式,原因是一开始想用
JDBC-JNI 的方式,想改用 JDBC-RESTful 代码没改干净。



通过指定URL获取连接,如下所示:

Class.forName("com.taosdata.jdbc.rs.RestfulDriver");
String jdbcUrl = "jdbc:TAOS-RS://taosdemo.com:6041/test?user=root&password=taosdata";
Connection conn = DriverManager.getConnection(jdbcUrl);
Class.forName("com.taosdata.jdbc.rs.RestfulDriver");String jdbcUrl = "jdbc:TAOS-RS://taosdemo.com:6041/test?user=root&password=taosdata";Connection conn = DriverManager.getConnection(jdbcUrl);

以上示例,使用 JDBC-RESTful 的 driver,建立了到 hostname 为 taosdemo.com,端口为 6041,数据库名为 test 的连接。这个 URL 中指定用户名(user)为 root,密码(password)为 taosdata。

使用 JDBC-RESTful 接口,不需要依赖本地函数库。与 JDBC-JNI 相比,仅需要:

  1. driverClass 指定为“com.taosdata.jdbc.rs.RestfulDriver”;
  2. jdbcUrl 以“jdbc:TAOS-RS://”开头;
  3. 使用 6041 作为连接端口。

按上面的方式修改,果然没有再报上面的错误。

作者 east
Flink 1月 3,2025

flink运行报错:java.lang.IllegalStateException: No ExecutorFactory found to execute the application

在本地运行flink代码,报错“
java.lang.IllegalStateException: No ExecutorFactory found to execute the application ”

通常是由于缺少必要的 Flink 依赖项导致的。具体来说,Flink 需要特定的执行器工厂来运行应用程序,而这些依赖项可能未正确包含在您的项目中。

原因分析

  1. 缺少 Flink 运行时依赖:
    • 您的代码片段看起来是基于 Flink 的流处理 API 编写的。如果项目缺少 Flink 运行时的相关依赖(例如 flink-java, flink-streaming-java, 和 flink-clients),Flink 将无法找到执行器工厂来启动作业。
  2. 依赖版本不匹配:
    • 如果您使用的 Flink 版本与代码不兼容,也可能导致类似的问题。确保所有 Flink 相关依赖的版本一致。
  3. 缺少必要的插件或扩展:
    • 某些情况下,特定的 Flink 插件或扩展可能缺失,导致执行器工厂无法加载。

解决方案

确保您的项目中包含了所有必要的 Flink 依赖项。以下是使用 Maven 的示例 pom.xml 配置,确保包含了 Flink 的核心和流处理依赖:

<dependencies>
    <!-- Flink 核心依赖 -->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-java</artifactId>
        <version>1.16.2</version> <!-- 请根据需要替换为合适的版本 -->
    </dependency>

    <!-- Flink 流处理依赖 -->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-streaming-java_2.12</artifactId>
        <version>1.16.2</version> <!-- 版本需与 flink-java 一致 -->
    </dependency>

    <!-- Flink 客户端依赖(如果需要远程提交作业) -->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-clients_2.12</artifactId>
        <version>1.16.2</version>
    </dependency>



    <!-- 如果使用自定义 Source 和 Sink,确保它们所在的依赖已添加 -->
</dependencies>
作者 east

上一 1 2 3

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。回复”chatgpt”获取免注册可用chatgpt。回复“大数据”获取多本大数据电子书

标签

AIGC AI创作 bert chatgpt github GPT-3 gpt3 GTP-3 hive mysql O2O tensorflow UI控件 不含后台 交流 共享经济 出行 图像 地图定位 外卖 多媒体 娱乐 小程序 布局 带后台完整项目 开源项目 搜索 支付 效率 教育 日历 机器学习 深度学习 物流 用户系统 电商 画图 画布(canvas) 社交 签到 联网 读书 资讯 阅读 预订

官方QQ群

小程序开发群:74052405

大数据开发群: 952493060

近期文章

  • 详解Python当中的pip常用命令
  • AUTOSAR如何在多个供应商交付的配置中避免ARXML不兼容?
  • C++thread pool(线程池)设计应关注哪些扩展性问题?
  • 各类MCAL(Microcontroller Abstraction Layer)如何与AUTOSAR工具链解耦?
  • 如何设计AUTOSAR中的“域控制器”以支持未来扩展?
  • C++ 中避免悬挂引用的企业策略有哪些?
  • 嵌入式电机:如何在低速和高负载状态下保持FOC(Field-Oriented Control)算法的电流控制稳定?
  • C++如何在插件式架构中使用反射实现模块隔离?
  • C++如何追踪内存泄漏(valgrind/ASan等)并定位到业务代码?
  • C++大型系统中如何组织头文件和依赖树?

文章归档

  • 2025年6月
  • 2025年5月
  • 2025年4月
  • 2025年3月
  • 2025年2月
  • 2025年1月
  • 2024年12月
  • 2024年11月
  • 2024年10月
  • 2024年9月
  • 2024年8月
  • 2024年7月
  • 2024年6月
  • 2024年5月
  • 2024年4月
  • 2024年3月
  • 2023年11月
  • 2023年10月
  • 2023年9月
  • 2023年8月
  • 2023年7月
  • 2023年6月
  • 2023年5月
  • 2023年4月
  • 2023年3月
  • 2023年1月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年6月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年7月
  • 2018年6月

分类目录

  • Android (73)
  • bug清单 (79)
  • C++ (34)
  • Fuchsia (15)
  • php (4)
  • python (43)
  • sklearn (1)
  • 云计算 (20)
  • 人工智能 (61)
    • chatgpt (21)
      • 提示词 (6)
    • Keras (1)
    • Tensorflow (3)
    • 大模型 (1)
    • 智能体 (4)
    • 深度学习 (14)
  • 储能 (44)
  • 前端 (4)
  • 大数据开发 (488)
    • CDH (6)
    • datax (4)
    • doris (30)
    • Elasticsearch (15)
    • Flink (78)
    • flume (7)
    • Hadoop (19)
    • Hbase (23)
    • Hive (40)
    • Impala (2)
    • Java (71)
    • Kafka (10)
    • neo4j (5)
    • shardingsphere (6)
    • solr (5)
    • Spark (99)
    • spring (11)
    • 数据仓库 (9)
    • 数据挖掘 (7)
    • 海豚调度器 (10)
    • 运维 (34)
      • Docker (3)
  • 小游戏代码 (1)
  • 小程序代码 (139)
    • O2O (16)
    • UI控件 (5)
    • 互联网类 (23)
    • 企业类 (6)
    • 地图定位 (9)
    • 多媒体 (6)
    • 工具类 (25)
    • 电商类 (22)
    • 社交 (7)
    • 行业软件 (7)
    • 资讯读书 (11)
  • 嵌入式 (70)
    • autosar (63)
    • RTOS (1)
    • 总线 (1)
  • 开发博客 (16)
    • Harmony (9)
  • 技术架构 (6)
  • 数据库 (32)
    • mongodb (1)
    • mysql (13)
    • pgsql (2)
    • redis (1)
    • tdengine (4)
  • 未分类 (6)
  • 程序员网赚 (20)
    • 广告联盟 (3)
    • 私域流量 (5)
    • 自媒体 (5)
  • 量化投资 (4)
  • 面试 (14)

功能

  • 登录
  • 文章RSS
  • 评论RSS
  • WordPress.org

All Rights Reserved by Gitweixin.本站收集网友上传代码, 如有侵犯版权,请发邮件联系yiyuyos@gmail.com删除.