自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(79)
  • 问答 (1)
  • 收藏
  • 关注

原创 OSS下载中文名编码错误

关于获取oss中文名称文件,名称乱码编译问题

2023-04-12 09:54:15 980

转载 java - 中间件 Maven

什么是MavenMaven是一个采用纯Java编写的开源项目管理工具, Maven采用了一种被称之为Project Object Model (POM)概念来管理项目,所有的项目配置信息都被定义在一个叫做POM.xml的文件中…Maven是一款跨平台的项目管理工具,是一个开源的项目…Maven主要服务于基于Java平台的项目构建、依赖管理和项目信息管理…POM怎么理解呢???我们使用Java是面向对象编程,对象就是我们的类而Maven是面向项目,把我们的项目看做成是一个对象来进行管...

2022-04-18 09:49:38 525

转载 java - JVM CPU100%,问题排查

前段时间我们新上了一个新的应用,因为流量一直不大,集群QPS大概只有5左右,写接口的rt在30ms左右。因为最近接入了新的业务,业务方给出的数据是日常QPS可以达到2000,大促峰值QPS可能会达到1万。所以,为了评估水位,我们进行了一次压测。压测过程中发现,当单机QPS达到200左右时,接口的rt没有明显变化,但是CPU利用率急剧升高,直到被打满。压测停止后,CPU利用率立刻降了下来。于是开始排查是什么导致了CPU的飙高。 问题排查与解决在压测期间,登录到机器,开始排查问题。本案例

2022-04-13 11:00:10 787

转载 java - JVM堆外内存泄漏故障排查记录

记录一次线上JVM堆外内存泄漏问题的排查过程与思路,其中夹带一些「JVM内存分配的原理分析」以及「常用的JVM问题排查手段和工具分享」,希望对大家有所帮助。在整个排查过程中,我也走了不少弯路,但是在文章中我仍然会把完整的思路和想法写出来,当做一次经验教训,给后人参考,文章最后也总结了下内存泄漏问题快速排查的几个原则。「本文的主要内容:」故障描述和排查过程故障原因和解决方案分析JVM堆内内存和堆外内存分配原理常用的进程内存泄漏排查指令和工具介绍和使用故障描述8月12日中午午休时间,我们商业服务

2022-04-13 10:51:23 543

转载 java - JVM 线上服务的FGC问题排查

线上服务的GC问题,是Java程序非常典型的一类问题,非常考验工程师排查问题的能力。同时,几乎是面试必考题,但是能真正答好此题的人并不多,要么原理没吃透,要么缺乏实战经验。过去半年时间里,我们的广告系统出现了多次和GC相关的线上问题,有Full GC过于频繁的,有Young GC耗时过长的,这些问题带来的影响是:GC过程中的程序卡顿,进一步导致服务超时从而影响到广告收入。这篇文章,我将以一个FGC频繁的线上案例作为引子,详细介绍下GC的排查过程,另外会结合GC的运行原理给出一份实践指南,希望对你有所帮助

2022-04-13 10:42:43 2492

转载 java 中间件 - redis 秒杀系统

絮叨之前写了很多Redis相关的知识点,我又大概回头看了下,除了比较底层的东西没写很深之外,我基本上的点都提到过了,我相信如果只是为了应付面试应该是够了的,但是如果你想把它们真正的吸收纳为己用,还是需要大量的知识积累,和很多实际操作的。就我自己而言Redis在开发过程中实在用得太普遍了,热点数据的存储啊,整体性能的提升啊都会用到,但是就像我说的技术就是一把双刃剑,使用它们随之而来的问题也会很多的,我在老东家双十二就遇到缓存雪崩问题让整体服务宕机3分钟,想必大家都知道阿里今年的双十一数据了,那三分钟在这种

2022-04-12 10:22:44 348

转载 java - 中间件 -Redis常见面试题

缓存知识点缓存有哪些类型?缓存是高并发场景下提高热点数据访问性能的一个有效手段,在开发项目时会经常使用到。缓存的类型分为:本地缓存、分布式缓存和多级缓存。本地缓存:本地缓存就是在进程的内存中进行缓存,比如我们的 JVM 堆中,可以用 LRUMap 来实现,也可以使用 Ehcache 这样的工具来实现。本地缓存是内存访问,没有远程交互开销,性能最好,但是受限于单机容量,一般缓存较小且无法扩展。分布式缓存:分布式缓存可以很好得解决这个问题。分布式缓存一般都具有良好的水平扩展能力,对较大数据量

2022-04-12 10:15:59 367

转载 java - 中间件 Redis哨兵、持久化、主从、手撕LRU

前言Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难。作为一个在互联网公司面一次拿一次offer的面霸(请允许我使用一下夸张的修辞手法),打败了无数竞争对手,每次都只能看到无数落寞的身影失望的离开,略感愧疚,在一个寂寞难耐的夜晚,我痛定思痛,决定开始写《吊打面试官》系列,希望能帮助各位读者以后面试势如破竹,对面试官进行360°的反击,吊打问你的面试官,让一同面试的同僚瞠目结舌,疯狂收割大厂Offer!絮叨写这期其实比较纠结

2022-04-12 09:32:37 172

原创 java - 操作系统 Linux

1.什么是LinuxLinux是一套免费使用和自由传播的类似Unix操作系统,一般的WEB项目都是部署放在Linux操作系统上面。Linux是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。2.Windows和Linux的区别Windows是微软开发的操作系统,民用操作系统,可用于娱乐、影音、上网。Windows

2022-04-11 15:36:49 1764

原创 java - 中间件 ElasticSearch面试题

1、详细描述一下 Elasticsearch 更新和删除文档的过程。(1)删除和更新也都是写操作,但是 Elasticsearch 中的文档是不可变的,因此不能被删除或者改动以展示其变更;(2)磁盘上的每个段都有一个相应的.del 文件。当删除请求发送后,文档并没有真的被删除,而是在.del 文件中被标记为删除。该文档依然能匹配查询,但是会在结果中被过滤掉。当段合并时,在.del文件中被标记为删除的文档将不会被写入新段。(3)在新的文档被创建时,Elasticsearch 会为该文档指定一个版本号,当

2022-04-08 16:31:00 213

原创 java - 中间件 Elasticserarch

1.ElasticSearch了解多少,说说你们公司es的集群架构,索引数据大小,分片有多少,以及一些调优手段?比如:ES集群架构13个节点,索引根据通道不同共20+索引,根据日期,每日递增20+,索引:10分片,每日递增1亿+数据,每个通道每天索引大小控制150GB之内。1.1、设计阶段调优(1)根据业务增量需求,采取基于日期模版创建索引,通过roll over API滚动索引;(2)使用别名进行索引管理(3)每天凌晨定时对索引做force_merge操作,释放空间(4)采取冷热分离机制,热数

2022-04-08 16:20:50 2224

原创 spring - 框架 Nginx

1.什么是Nginx?Nginx是一个轻量级/高性能的反向代理WEB服务器,他实现非常高效的反向代理、负载均衡,他可以处理2-3万并发连接数,官方监测能支持五万的并发,现在中国使用nginx网站用户有很多,例如:新浪、网易、腾讯等。2.为什么要使用Nginx?跨平台、配置简单、反向代理、高并发看姐、内存消耗小:开启10个nginx才占用150M内存,nginx处理静态文件好,消耗内存少而且Nginx内置的健康检查功能:如果有一个服务器宕机,会做一个健康检查,在发送的请求就不会发送到宕机的服务器。重新

2022-04-08 11:32:16 616

原创 java框架 - SpringCloud

什么是微服务架构微服务架构就是将单体的应用程序分成多个应用程序,这多个应用程序就成为微服务,每个微服务运行在自己的进程中,并使用轻量级的机制通信。这些服务围绕业务能力来划分,并通过自动化部署机制来独立部署。这些服务可以使用不同的编程语言,不同数据库,以保证最低限度的集中式管理。为什么需要学习Spring Cloud首先springcloud基于spingboot的优雅简洁,可还记得我们被无数xml支配的恐惧?可还记得springmvc,mybatis错综复杂的配置,有了spingboot,这些..

2022-04-01 14:39:40 1925

原创 java框架 - Spring Boot

什么是SpringBoot?通过Spring Boot,可以轻松地创建独立的,基于生产级别的Spring的应用程序,您可以“运行”它们。大多数Spring Boot应用程序需要最少的Spring配置。快速开发,快速整合,配置简化、内嵌服务容器SpringBoot的特征?创建独立的Spring应用程序直接嵌入Tomcat,Jetty或Undertow(无需部署WAR文件)提供固化的“starter”依赖项,以简化构建配置尽可能自动配置Spring和3rd Party库提供可用于生产的功能..

2022-04-01 14:23:33 698

原创 java框架 - SpringMVC

1.1 什么是Spring MVC?简单介绍下你对Spring MVC的理解?Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把模型-视图-控制器分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。1.2 Spring MVC的优点(1)可以支持各种视图技术,而不仅仅局限于JSP; (2)与Spring框架集成(如IoC容器、AOP等);(3)清晰的角色分配:前端控制器(dispa

2022-04-01 11:49:03 845

原创 java框架 - Spring AOP、 MVC、数据访问

42.在 Spring 框架中如何更有效地使用 JDBC? 使用 SpringJDBC 框架,资源管理和错误处理的代价都会被减轻。所以开发者只需 写 statements 和 queries 从数据存取数据,JDBC 也可以在 Spring 框架提供的 模板类的帮助下更有效地被使用,这个模板叫 JdbcTemplateJdbcTemplate JdbcTemplate 类提供了很多便利的方法解决诸如把数据库数据转变成基本数据类 型或对象,执行写好的或可调用的数据库操作语句,提供自定义的数据错误处理。

2022-04-01 11:29:27 152

原创 java框架 - Spring Beans 和注解

21.什么是 Spring beans? Spring beans 是那些形成 Spring 应用的主干的 java 对象。它们被 Spring IOC 容 器初始化,装配,和管理。这些 beans 通过容器中配置的元数据创建。比如,以 XML 文件中 的形式定义。 Spring 框架定义的 beans 都是单件 beans。在 bean tag 中有个属性”singleton”, 如果它被赋为 TRUE,bean 就是单件,否则就是一个 prototype bean。默认是 TRUE,所以所有在 Spri

2022-04-01 11:24:11 190

原创 java框架 - Spring概述

什么是 spring? Spring 是个 java 企业级应用的开源开发框架。Spring 主要用来开发 Java 应用, 但是有些扩展是针对构建 J2EE 平台的 web 应用。Spring 框架目标是简化 Java 企 业级应用开发,并通过 POJO 为基础的编程模型促进良好的编程习惯。使用 Spring 框架的好处是什么? 轻量:Spring 是轻量的,基本的版本大约 2MB 控制反转:Spring 通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是 创建或查找依赖的对象们 面向切面..

2022-04-01 10:50:56 941

原创 java框架 - MyBatis映射器

#{}和KaTeX parse error: Expected 'EOF', got '#' at position 7: {}的区别#̲{}是占位符,预编译处理;{}是拼接符,字符串替换,没有预编译处理。Mybatis在处理#{}时,#{}传入参数是以字符串传入,会将SQL中的#{}替换为?号,调用PreparedStatement的set方法来赋值。#{} 可以有效的防止SQL注入,提高系统安全性;KaTeX parse error: Expected 'EOF', got '#' at po.

2022-04-01 10:43:55 1177

原创 java框架 - MyBatis架构

MyBatis编程步骤是什么样的?1、 创建SqlSessionFactory2、 通过SqlSessionFactory创建SqlSession3、 通过sqlsession执行数据库操作4、 调用session.commit()提交事务5、 调用session.close()关闭会话请说说MyBatis的工作原理在学习 MyBatis 程序之前,需要了解一下 MyBatis 工作原理,以便于理解程序。MyBatis 的工作原理如下图读取 MyBatis 配置文件:myba..

2022-04-01 10:35:17 1158

原创 java框架 - MyBatis简介

MyBatis是什么?Mybatis 是一个半 ORM(对象关系映射)框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement 等繁杂的过程。程序员直接编写原生态 sql,可以严格控制 sql 执行性能,灵活度高。MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO 映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。Mybatis优缺点优点与传统的数据库访问技术相.

2022-04-01 10:31:14 757

转载 java框架 -配置中心

https://www.cnblogs.com/dalianpai/p/14311014.html

2022-04-01 09:33:05 1668

原创 java中间件 - rabbitMq

什么是MQMQ就是消息队列。是软件和软件进行通信的中间件产品MQ的优点简答异步处理 - 相比于传统的串行、并行方式,提高了系统吞吐量。应用解耦 - 系统间通过消息通信,不用关心其他系统的处理。流量削锋 - 可以通过消息队列长度控制请求量;可以缓解短时间内的高并发请求。日志处理 - 解决大量日志传输。消息通讯 - 消息队列一般都内置了高效的通信机制,因此也可以用在纯的消息通讯。比如实现点对点消息队列,或者聊天室等。解耦、异步、削峰是什么?。解耦:A 系统发送数据到 BCD 三个系统,通过

2022-03-31 15:45:32 2235

原创 java中间件 - redis其他问题

Redis常见性能问题和解决方案?Master最好不要做任何持久化工作,包括内存快照和AOF日志文件,特别是不要启用内存快照做持久化。如果数据比较关键,某个Slave开启AOF备份数据,策略为每秒同步一次。为了主从复制的速度和连接的稳定性,Slave和Master最好在同一个局域网内。尽量避免在压力较大的主库上增加从库Master调用BGREWRITEAOF重写AOF文件,AOF在重写的时候会占大量的CPU和内存资源,导致服务load过高,出现短暂服务暂停现象。为了Master的稳定性,主

2022-03-31 15:38:17 1136

原创 java中间件 - redis缓存异常(穿透、雪崩、击穿)

什么是redis穿透?就是用户请求透过redis去请求mysql服务器,导致mysql压力过载。但一个web服务里,极容易出现瓶颈的就是mysql,所以才让redis去分担mysql 的压力,所以这种问题是万万要避免的解决方法:从缓存取不到的数据,在数据库中也没有取到,这时也可以将key-value对写为key-null,缓存有效时间可以设置短点,如30秒(设置太长会导致正常情况也没法使用)。这样可以防止攻击用户反复用同一个id暴力攻击接口层增加校验,如用户鉴权校验,id做基础校验,id&l

2022-03-31 15:34:01 1114

原创 java中间件 - redis分布式问题

Redis实现分布式锁?Redis为单进程单线程模式,采用队列模式将并发访问变成串行访问,且多客户端对Redis的连接并不存在竞争关系Redis中可以使用setNx命令实现分布式锁。当且仅当 key 不存在,将 key 的值设为 value。 若给定的 key 已经存在,则 setNx不做任何动作SETNX 是『SET if Not eXists』(如果不存在,则 SET)的简写。返回值:设置成功,返回 1 。设置失败,返回 0 。使用setNx完成同步锁的流程及事项如下:使用SETNX命令获

2022-03-31 15:28:37 2486

原创 java中间件 - redis事务

什么是事务?事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。Redis事务的概念Redis 事务的本质是通过MULTI、EXEC、WATCH等一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。总结说:redis事务就是一次

2022-03-31 15:26:47 675

转载 java中间件 - redis持久化

面试官:今天要不来聊聊Redis的持久化机制吧?候选者:嗯,没问题的候选者:在上一次面试已经说过了Redis是基于内存的候选者:假设我们不做任何操作,只要Redis服务器重启(或者中途故障挂掉了),那内存的数据就会没掉候选者:我们作为使用方,肯定是不想Redis里头的数据会丢掉候选者:所以Redis提供了持久化机制给我们用,分别是RDB和AOF候选者:RDB指的就是:根据我们自己配置的时间或者手动去执行BGSAVE或SAVE命令,Redis就会去生成RDB文件候选者:这个RDB文件实际上就是一

2022-03-31 15:23:06 195

原创 java中间件 - redis基础

为什么使用redis?因为传统的关系型数据库如Mysql已经不能适用所有的场景了,比如秒杀的库存扣减,APP首页的访问流量高峰等等,都很容易把数据库打崩,所以引入了缓存中间件,目前市面上比较常用的缓存中间件有Redis和Memcached不过中和考虑了他们的优缺点,最后选择了Redis。Redis 是一个使用 C 语言写成的,开源的高性能key-value非关系缓存数据库。它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set

2022-03-31 15:20:45 334

原创 java中间件 - MySQL调优

简述MyISAM和InnoDB的区别?MyISAM:不支持事务,但是每次查询都是原子的支持表级锁,每次菜哦是对整个表加锁存储表的总行数;一个MyISAM表有三个文件:索引文件、表结构文件、数据文件;采用非聚簇索引,索引文件的数据域存储执行数据文件的指针。辅索引与主索引基本一致,但是辅索引不用保证唯一性。InnoDB支持ACID的事务,支持事务的四种隔离级别支持行级锁及外键约束:因此可以支持写并发不存储总行数一个InnoDB引擎存储在一个文件空间(共享表空间,表大小不受操作系统控制,一

2022-03-31 11:41:09 800

转载 java中间件 - MySQL事务和锁机制和MVCC

面试官:你是怎么理解InnoDB引擎中的事务的?候选者:在我的理解下,事务可以使「一组操作」要么全部成功,要么全部失败候选者:事务其目的是为了「保证数据最终的一致性」。候选者:举个例子,我给你发支付宝转了888块红包。那自然我的支付宝余额会扣减888块,你的支付宝余额会增加888块。候选者:而事务就是保证我的余额扣减跟你的余额增添是同时成功或者同时失败的,这样这次转账就正常了面试官:嗯,那你了解事务的几大特性吗?候选者:嗯,就是ACID嘛,分别是原子性(Atomicity)、一致性(Consi

2022-03-31 09:56:39 109

转载 java中间件 - mysql - 索引

对MySQL InnoDB引擎的索引了解吗?索引用来快速地寻找那些具有特定值的记录。如果没有索引,一般来说执行查询时遍历整张表。使用索引可以加快查询速度,其实上就是将无序的数据变成有序(有序就能加快检索速度)1。把创建了索引的列的内容进行排序2。对排序结果生成倒排表3。在倒排表内容上拼上数据地址链4。在查询的时候,先拿到排序表 内容,再取出数据地址链,从而拿到具体数据在InnoDB引擎中,索引的底层数据结构是B+树那为什么不使用红黑树或者B树呢?MySQL的数据是存储在硬盘的,在查询时一般

2022-03-31 09:19:55 109

转载 java JVM - 调优

面试官:今天要不来聊聊JVM调优相关的吧?面试官:你曾经在生产环境下有过调优JVM的经历吗?候选者:没有面试官:…候选者:嗯…是这样的,我们一般优化系统的思路是这样的候选者:1. 一般来说关系型数据库是先到瓶颈,首先排查是否为数据库的问题候选者:(这个过程中就需要评估自己建的索引是否合理、是否需要引入分布式缓存、是否需要分库分表等等)候选者:2. 然后,我们会考虑是否需要扩容(横向和纵向都会考虑)候选者:(这个过程中我们会怀疑是系统的压力过大或者是系统的硬件能力不足导致系统频繁出现问题)候

2022-03-30 15:02:24 105

转载 java JVM - G1垃圾回收器

面试官:要不这次来聊聊G1垃圾收集器?候选者:嗯嗯,好的呀候选者:上次我记得说过,CMS垃圾收集器的弊端:会产生内存碎片&&空间需要预留候选者:这俩个问题在处理的时候,很有可能会导致停顿时间过长,说白了就是CMS的停顿时间是「不可预知的」候选者:而G1又可以理解为在CMS垃圾收集器上进行”升级”候选者:G1 垃圾收集器可以给你设定一个你希望Stop The Word 停顿时间,G1垃圾收集器会根据这个时间尽量满足你候选者:在前面我在介绍JVM堆的时候,是画了一张图的。堆的内存分布

2022-03-30 15:00:46 358

转载 java JVM - CMS垃圾回收机制

面试官:今天还是来聊聊CMS垃圾收集器呗?候选者:嗯啊…候选者:如果用Seria和Parallel系列的垃圾收集器:在垃圾回收的时,用户线程都会完全停止,直至垃圾回收结束!候选者:CMS的全称:Concurrent Mark Sweep,翻译过来是「并发标记清除」候选者:用CMS对比上面的垃圾收集器(Seria和Parallel和parNew):它最大的不同点就是「并发」:在GC线程工作的时候,用户线程「不会完全停止」,用户线程在「部分场景下」与GC线程一起并发执行。候选者:但是,要理解的是,无

2022-03-30 14:58:20 3773 2

转载 java JVM - 垃圾回收机制

垃圾的定义:只要对象不再被使用了,那我们就认为该对象就是垃圾,对象所占用的空间就可以被回收怎么判断对象不再被使用的呢?常用的算法有两个「引用计数法」和「可达性分析法」引用计数法思路很简单:当对象被引用则+1,引用释放时计数则-1。当计数器为0时,说明对象不再被引用,可以被可回收引用计数法最明显的缺点就是:如果对象存在循环依赖,那就无法定位该对象是否应该被回收(A依赖B,B依赖A);另一种就是可达性分析法:它从「GC Roots」开始向下搜索,当对象到「GC Roots」都没有任何引用相连时,说明对

2022-03-30 14:53:04 365

转载 java JVM - jvm内存结构

候选者:class文件会被类加载器装载至JVM中,并且JVM会负责程序「运行时」的「内存管理」候选者:而JVM的内存结构,往往指的就是JVM定义的「运行时数据区域」候选者:简单来说就分为了5大块:方法区、堆、程序计数器、虚拟机栈、本地方法栈候选者:要值得注意的是:这是JVM「规范」的分区概念,到具体的实现落地,不同的厂商实现可能是有所区别的。面试官:嗯,顺便讲下你这图上每个区域的内容吧。候选者:好的,那我就先从「程序计数器」开始讲起吧。候选者:Java是多线程的语言,我们知道假设线程数大于CP

2022-03-30 14:34:12 260

转载 javaJVM-Java编译到执行的过程

面试官:今天从基础先问起吧,你是怎么理解Java是一门「跨平台」的语言,也就是「一次编译,到处运行的」?候选者:很好理解啊,因为我们有JVM。候选者:Java源代码会被编译为class文件,class文件是运行在JVM之上的。候选者:当我们日常开发安装JDK的时候,可以发现JDK是分「不同的操作系统」,JDK里是包含JVM的,所以Java依赖着JVM实现了『跨平台』候选者:JVM是面向操作系统的,它负责把Class字节码解释成系统所能识别的指令并执行,同时也负责程序运行时内存的管理。面试官:那要

2022-03-30 14:27:48 361

转载 java基础-容器-MAP

你对Map了解多少?Map在Java里边是一个接口,常见的实现类有HashMap、LinkedHashMap、TreeMap和ConcurrentHashMap在Java里边,哈希表的结构是数组+链表的方式。HashMap底层数据结构是数组+链表/红黑树LinkedHashMap底层数据结构是数组+链表/红黑树+双向链表TreeMap底层数据结构是红黑树而ConcurrentHashMap底层数据结构也是数组+链表/红黑树日常开始中LinkedHashMap、TreeMap用的不多Linke

2022-03-30 14:12:15 136

转载 java基础-容器-List

说下你对List的理解?List在Java里边是一个接口,常见的实现类有ArrayList和LinkedList,在开发中用得最多的是ArrayList;ArrayList的底层数据结构是数组,LinkedList底层数据结构是链表。List和Set的区别?List:有序,按对象进入的顺序保护对象,可重复,允许多个null元素对象,可以使用iterator取出所有元素,在逐一遍历,还可以使用get获取制定下标元素。Set:无序,不可重复,最多允许有一个NULL元素对象,取元素时只能Iterator

2022-03-30 13:58:22 165

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除