携程Java后端实习一面

携程的面试比较注重八股文和项目,算法相关没有字节腾讯严厉,大家参加携程的技术岗面试需要重视八股文和项目细节,要学会深挖项目,希望大家早日oc😊👍

HashMap底层原理,扩容机制,从并发问题引出ConcurrentHashMap,问如何上锁

HashMap底层原理

  • HashMap 基于数组和链表(在 JDK 1.8 之后引入了红黑树)实现。它通过哈希函数将键映射到数组的索引位置上。
  • 当发生哈希冲突时,会将相同索引位置的元素存储在一个链表中或转换为红黑树。

扩容机制

  • 当 HashMap 中的元素数量超过数组容量的负载因子(默认 0.75)时,会触发扩容操作,将容量加倍并重新分配所有元素到新的数组中。
  • 扩容时需要重新计算所有元素的哈希值,并重新插入到新的数组位置上。

并发问题与 ConcurrentHashMap

  • HashMap 在多线程环境中会出现数据不一致的问题,例如死循环、数据丢失等。
  • ConcurrentHashMap 通过分段锁机制进行并发控制,将整个 Map 分成多个 Segment,每个 Segment 独立加锁,减少锁竞争。
  • JDK 8 之后,ConcurrentHashMap 改用 CAS(Compare-And-Swap)和 Synchronized 结合的方式来提高并发性能。

线程通信的方式

  1. wait() 和 notify()/notifyAll():通过对象监视器进行通信,wait() 使线程等待,notify() 唤醒等待的线程。
  2. Condition:Java 5 引入的更灵活的线程通信机制,与 ReentrantLock 结合使用。
  3. 阻塞队列(BlockingQueue):生产者-消费者模式下常用,如 ArrayBlockingQueue、LinkedBlockingQueue。
  4. 信号量(Semaphore):控制同时访问特定资源的线程数量。
  5. 管道流(PipedInputStream 和 PipedOutputStream):用于线程间数据传输。

线程池参数以及线程池的好处

线程池参数

  1. corePoolSize:核心线程数,始终保持在线的线程数量。
  2. maximumPoolSize:最大线程数,线程池能容纳的最大线程数。
  3. keepAliveTime:空闲线程存活时间,当线程数超过核心线程数时,多余的空闲线程会在指定时间后终止。
  4. unit:keepAliveTime 的时间单位。
  5. workQueue:用于存放等待执行任务的队列。
  6. threadFactory:线程工厂,用于创建新线程。
  7. handler:拒绝策略,当任务队列已满且无法继续创建线程时,处理新任务的策略。

线程池的好处

  1. 重用线程:减少了频繁创建和销毁线程的开销。
  2. 控制最大并发数:通过配置最大线程数来控制并发数量,防止系统资源耗尽。
  3. 管理任务队列:有助于任务的排队和调度。
  4. 提高响应速度:线程池中的线程可以及时处理新任务,减少等待时间。

Mysql索引底层数据结构,用B+树的好处

Mysql索引底层数据结构

  • B+树 是 MySQL 索引的主要数据结构,适用于大多数存储引擎,如 InnoDB。
  • B+树是一种平衡树,所有叶子节点在同一层,并通过双向链表连接。

B+树的好处

  1. 有序性:有助于范围查询和排序操作。
  2. 磁盘读写效率高:B+树节点包含多个元素,一次磁盘读取可以获取更多数据,减少磁盘I/O次数。
  3. 查询效率高:通过树的平衡性保证查询的时间复杂度为 O(log n)。
  4. 适合范围查询:通过叶子节点的链表,可以高效地进行范围查询。

索引的类型

  1. 主键索引(Primary Key Index):唯一标识表中的每一行,不允许重复和空值。
  2. 唯一索引(Unique Index):保证列中的值唯一,但允许空值。
  3. 普通索引(Index):加速查询,没有唯一性限制。
  4. 全文索引(Full-text Index):用于全文搜索,如匹配关键字。
  5. 组合索引(Composite Index):在多个列上创建的索引,加速多条件查询。

如何优化查询语句

  1. 使用合适的索引:建立并使用索引,避免全表扫描。
  2. 选择合适的字段:只查询必要的字段,减少数据传输量。
  3. 避免使用 SELECT *:明确指定查询的列。
  4. 使用 WHERE 子句过滤数据:减少结果集的大小。
  5. 避免在 WHERE 子句中进行函数运算:可能导致索引失效。
  6. 使用 JOIN 代替子查询:提高查询效率。
  7. 适当使用 LIMIT:限制结果集大小,减少不必要的数据处理。
  8. 分析查询执行计划:使用 EXPLAIN 关键字查看查询的执行计划,找出瓶颈。

网络七层模型和四层模型的区别

网络七层模型(OSI模型)

  1. 物理层:传输原始比特流。
  2. 数据链路层:提供节点间的数据传输,进行帧的传输和纠错。
  3. 网络层:负责数据包的路由和转发。
  4. 传输层:提供端到端的通信,确保数据完整性和可靠传输。
  5. 会话层:管理会话,控制建立、维护和终止会话。
  6. 表示层:数据的表示、加密和解密、数据格式转换。
  7. 应用层:提供应用服务,如HTTP、FTP、SMTP等。

四层模型(TCP/IP模型)

  1. 网络接口层:对应OSI模型的物理层和数据链路层。
  2. 互联网层:对应OSI模型的网络层。
  3. 传输层:对应OSI模型的传输层。
  4. 应用层:对应OSI模型的会话层、表示层和应用层。

输入网址到网页显示,期间发生了什么

  1. DNS解析:将域名转换为IP地址。
  2. 建立TCP连接:通过三次握手与服务器建立TCP连接。
  3. 发送HTTP请求:客户端向服务器发送HTTP请求报文。
  4. 服务器处理请求:服务器处理请求并生成响应。
  5. 发送HTTP响应:服务器将响应报文返回给客户端。
  6. 浏览器渲染页面:浏览器解析HTML、CSS、JavaScript等文件,构建DOM树和渲染树,绘制页面。

网络传输如何保证可靠性和安全性

可靠性

  1. TCP协议:通过序列号、确认机制、重传机制和窗口控制实现可靠数据传输。
  2. 错误检测:使用校验和等方法检测并纠正传输错误。
  3. 拥塞控制:避免网络拥塞,提高传输效率。

安全性

  1. 加密:使用TLS/SSL协议加密数据,保护传输过程中的数据安全。
  2. 身份验证:验证通信双方的身份,防止伪装和中间人攻击。
  3. 数据完整性:使用消息摘要算法确保数据在传输过程中未被篡改。

手撕算法:最大连续子数组和(hot 100)

问题描述: 找到一个整数数组的一个连续子数组,使得该子数组的和最大,并返回这个最大和。

示例代码(Java)

public int maxSubArray(int[] nums) {int maxSoFar = nums[0];int maxEndingHere = nums[0];for (int i = 1; i < nums.length; i++) {maxEndingHere = Math.max(nums[i], maxEndingHere + nums[i]);maxSoFar = Math.max(maxSoFar, maxEndingHere);}return maxSoFar;
}

解释

  1. 初始化maxSoFarmaxEndingHere 都初始化为数组的第一个元素。
  2. 迭代:遍历数组,对于每个元素,更新 maxEndingHere 为当前元素和 maxEndingHere 之和的较大值。
  3. 更新最大值:每次都更新 maxSoFarmaxSoFarmaxEndingHere 中的较大值。
  4. 返回结果:返回 maxSoFar 即为最大子数组和。

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

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

相关文章

Java面试八股之Redis集群Cluster

Redis集群Cluster Redis Cluster是一种基于数据分片&#xff08;Sharding&#xff09;的分布式缓存和存储系统&#xff0c;它实现了数据的水平扩展、高可用性和自动故障转移。以下是对Redis Cluster模式详细实现流程的描述&#xff1a; 1. 初始化与配置 部署节点&#xff1a…

C++ //练习 15.15 定义你自己的Disc_quote和Bulk_quote。

C Primer&#xff08;第5版&#xff09; 练习 15.15 练习 15.15 定义你自己的Disc_quote和Bulk_quote。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /******************************************************************…

Python酷库之旅-第三方库Pandas(026)

目录 一、用法精讲 65、pandas.bdate_range函数 65-1、语法 65-2、参数 65-3、功能 65-4、返回值 65-5、说明 65-6、用法 65-6-1、数据准备 65-6-2、代码示例 65-6-3、结果输出 66、pandas.period_range函数 66-1、语法 66-2、参数 66-3、功能 66-4、返回值 6…

Gooxi受邀参加第三届中国数据中心服务器与设备峰会

7月2-3日&#xff0c;第三届中国数据中心服务器与设备峰会在上海召开&#xff0c;作为国内最聚焦在服务器领域的专业峰会&#xff0c;吸引了来自全国的行业专家、服务器与机房设备厂家&#xff0c;企业IT用户&#xff0c;数据中心业主共同探讨AIGC时代下智算中心设备的设计之道…

2024年最新最全面的Apifox使用-自动化测试

正文 编排测试场景运行测试持续集成查看测试结果 编排测试场景 新建测试场景 测试场景用于将多个接口有序地组合在一起运行&#xff0c;用于测试一个完整业务流程。 打开 Apifox 后点击左侧菜单栏中的“自动化测试”&#xff0c;点击左上角 号&#xff0c;选择所归属的目录…

记录|.NET上位机开发和PLC通信的实现

本文记录源自&#xff1a;B站视频 实验结果&#xff1a;跟视频做下来是没有问题的。能运行。 目录 前言一、项目Step1. 创建项目Step2. 创建动态图片展示Step3. 创建图片型按钮Step4. 创建下拉框Step1~4的效果展示Step5. 编程实体类操作类Main函数 Step1~5的效果展示Main函数 最…

Binder框架(二) ServiceManager初始化

0、总体流程四部 开机由init进程解析init.rc文件启动servicemanager.rc。启动会调用main.cpp的main函数 main函数里面主要做了以下几件事 &#xff1a; 1.1 打开/dev/binder设备; 1.2 通过mmap映射设备的内存空间到ServiceManager进程中。 1.3 设置ServiceManager为context…

气象水文耦合模式WRF-Hydro建模、编译及运行流程、依赖库准备、案例实践等

目录 第一部分 WRF-Hydro模型功能及运行流程、依赖库准备 第二部分 WRF-Hydro模式编译、离线运行及案例实践 第三部分 结合多案例进行模式数据制备及实践应用 第四部分 模式耦合编译及运行、总结 更多应用 WRF-Hydro模型是一个分布式水文模型&#xff0c;‌它基于WRF‌陆面…

数据库启动报ORA-600 6711故障分析处理---惜分飞

几个月以前的一个数据库故障,今天拿出来在win上重新分析,数据库启动报ORA-600 6711错 C:\Users\XFF>SQLPLUS / AS SYSDBA SQL*Plus: Release 12.1.0.2.0 Production on 星期日 7月 14 16:17:32 2024 Copyright (c) 1982, 2014, Oracle. All rights reserved. 已连接到空…

2024 7.8~7.14 周报

一、上周工作 2024 7.1~7.7 周报-CSDN博客 二、本周计划 跑实验、机器学习、数学表达式 三、完成情况 1. 跑实验 1&#xff09;编码器加入DenseNet&#xff0c;并在解码器的第一层加入cbam&#xff1a; 损失函数——smooth、lpips&#xff0c;跑的CurveVelA&#xff0c;…

LabVIEW扬尘控制系统

设计了一套基于LabVIEW的扬尘控制系统&#xff0c;通过监测TsP&#xff08;总悬浮颗粒物&#xff09;浓度、风向和摄像头视频&#xff0c;实现对环境的综合监控和扬尘控制。系统可以自动判断扬尘位置&#xff0c;并驱动抑尘设备进行抑尘。硬件选用NI cDAQ-9178数据采集模块、Om…

linux高级编程(网络)(www,http,URL)

数据的封包和拆包 封包&#xff1a; 应用层数据&#xff08;例如HTTP请求&#xff09;被传递给传输层。传输层&#xff08;TCP&#xff09;在数据前添加TCP头部&#xff08;包含端口号、序列号等&#xff09;。网络层&#xff08;IP&#xff09;在TCP段前添加IP头部&#xff…

数据库:基本操作

SQL struct query language 关系型数据库 非关系 芒果db ddl data defination language 建表 dml 新增 修改 删除一行 data modifty dql 查询 data query language 查询 select 数据库 sun solaris gnu 1、分类&#xff1a; 大型 中型 …

【C++】C++中的strcpy函数详解

目录 一. strcpy 是什么 二.strcpy怎么用 一. strcpy 是什么 在C中&#xff0c; strcpy 是一个用于字符串复制的函数&#xff0c;它定义在 <cstring> 头文件中。这个函数会将一个字符串复制到另一个字符串中&#xff0c;包括空字符 \0 &#xff0c;它标志着字符串…

Linux FFmpeg安装教程

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

DHCP服务、FTP服务

一、DHCP 1.1 DHCP是什么 DHCP&#xff08;Dynamic Host Configuration Protocol&#xff0c;动态主机配置协议&#xff09;是一种网络协议&#xff0c;用于自动分配 IP 地址和其他网络配置信息给网络中的设备 1.2 DHCP的好处 自动化: 减少了手动配置 IP 地址和网络参数的工…

Vulnhub:DC-1

1.环境搭建 靶机下载地址 将下载的靶机导入到Oracle VM VirtualBox中&#xff0c;设置仅主机模式&#xff0c;使用和kali相同的网卡 2.渗透过程 使用nmap工具进行主机发现扫描 nmap -sn 192.168.56.0/24 发现靶机ip地址&#xff0c;使用nmap工具进行靶机端口扫描 nmap -sS…

ArcGIS Pro SDK (九)几何 4 折线

ArcGIS Pro SDK &#xff08;九&#xff09;几何 4 折线 文章目录 ArcGIS Pro SDK &#xff08;九&#xff09;几何 4 折线1 构造折线 - 从映射点的枚举2 获取折线的点3 获取折线的各个部分4 枚举折线的各个部分5 反转折线中点的顺序6 获取折线的段7 构建多部分折线8 折线的起点…

Python算法分析学习目标及能力验证

1、突破编程的关键点 不破不立&#xff0c;如何破&#xff1f;如何立&#xff1f; 人生苦短&#xff0c;我用python 目标&#xff1a;不在于多&#xff0c;而在于准&#xff1b; 验证&#xff1a;必须量化&#xff0c;否则都是虚夸。 那么目标怎么准确可量化呢&#xff1f; …

IDEA创建普通Java项目

环境准备 Java环境 运行javac查看java环境是否安装完成 开发工具Intellij IDEA 下载地址&#xff1a;https://www.jetbrains.com/idea/download/?sectionwindows 创建项目 点击新建项目 填入项目名字&#xff0c;项目路径&#xff0c;选择maven,点击下面的创建 运行项目 …