首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
别问了别问了答不出来了
门头沟学院 后端工程师
发布于湖北
关注
已关注
取消关注
mark
@已转行:
美团一面
1、ArrayList 和 LinkList 区别(1)ArrayList 基于数组,需要连续内存;LinkList 基于双向链表,不需要连续内存。(2)ArrayList 随机访问快(可以根据下标访问);LinkedList 随机访问慢(需要迭代遍历)。(3)ArrayList 插入和删除性能慢;LinkedList 插入和删除性能快。2、ArraryList 扩容过程分为两个步骤:ArrarList默认大小是10,当集合个数大于容量的时候,就会以1.5倍容量去进行扩容,如果还不够大就在扩容后的1.5倍再扩容。扩容后要对原来的集合进行copy到新的集合中。(在add()方法中调用确保内部容量方法,传入参数当前元素个数加一,当它大于实际数组大小的时候就调用grow()方法进行扩容。扩容是右移一位,进行扩容1.5倍,不够再进行扩容,通过copyof()方法进行数组的复制。)3、hashmap 冲突怎么解决?(1)开放地址法:也称线性探测法,就是从发生冲突的那个位置,按照一定次序从Hash表中找到一个空闲的位置, 把发生冲突的元素存入到这个位置。而在java种ThreadLocal就用到了线性探测法,来解决Hash冲突。(2)链式寻址法:通过单向链表的方式来解决哈希冲突,Hashmap就是用了这个方法。(但会存在链表过长增加遍历时间)(3)再哈希法:key通过某个哈希函数计算得到冲突的时候,再次使用哈希函数的方法对key哈希一直运算直到不产生冲突为止 (耗时间,性能会有影响)(4)建立公共溢出区:就是把Hash表分为基本表和溢出表两个部分,凡是存在冲突的元素,一律放到溢出表中。补充:在JDK1.8中HashMap通过链式寻址法以其红黑树来解决哈希冲突的,其中红黑树是为了优化哈希表的链表过长导致遍历时间复杂度增加的问题。当链表长度大于8并且哈希表的容量大于64,再向链表中添加元素,会转化为红黑树。4、ConcurrentHashMap 如何实现线程安全?JDK 1.7 给 Segment 添加 ReentrantLock 锁来实现线程安全。JDK 1.8 通过 CAS 或 synchronized 来实现线程安全。5、sychronized 关键字如何实现线程安全?synchronized 关键字可以实现线程安全,它的作用在于保证同一时间只有一个线程可以执行被 synchronized 关键字修饰的代码块或方法,从而避免了多个线程同时访问共享资源的情况。具体来说,当一个线程进入一个对象或类的 synchronized 代码块或方法时,它将会获得一个锁。如果该锁已经被其他线程获得,则该线程将会阻塞,直到该锁被释放。只有当该线程执行完 synchronized 代码块或方法并释放锁时,其他线程才能获取该锁并执行相应的代码。6、解释一下 minitor ?synchronized底层使用monitor来控制锁的活动, wait(),notify(),notifyAll() 操作都与他有关,所以也必须在同步块能才能用。了解monitor中的各个属性值的含义,锁的竞争流程。每个Java对象都可以关联一个Monitor对象,如果给这个Java对象使用了Synchronized加上了重量级锁,那么这个对象就会关联一个Monitor对象,在Mark Down中会有一个指针指向这个Monitor对象。7、简述线程池工作原理?线程池是一种用来管理线程的技术,它可以避免在程序执行时频繁地创建和销毁线程带来的性能消耗。线程池中的线程可以被重复利用,以完成多个任务。下面是线程池的工作原理: (1)创建线程池:在程序启动时,创建一个线程池,将一定数量的线程放入线程池中,并等待任务的到来。 (2)提交任务:当有新的任务需要执行时,将其提交给线程池。 (3)任务处理:线程池中的某个线程会从等待队列中获取待执行的任务,并执行该任务。 (4)线程回收:当线程执行完任务后,该线程并不会立即被销毁,而是重新归入线程池,等待下一个任务的到来。线程池按照线程数量分为两部分,分别是核心线程和非核心线程。当任务提交给线程池时,如果当前线程池中的线程数量小于核心线程数,则会立即创建一个新的线程来执行该任务。如果当前线程池中的线程数量已经达到核心线程数,但还有其他任务需要执行,则此时任务会被加入等待队列。如果等待队列已满,且当前线程池中的线程数量仍然小于最大线程数,则会创建非核心线程来执行任务。如果当前线程池中的线程数量已经达到最大线程数,此时再有新的任务提交,则会采取一定的拒绝策略。通过线程池,我们可以有效地利用有限的计算资源,提高程序的执行效率和性能,降低系统的负载。8、Redis 的数据类型?Redis 支持五种数据类型,分别是string、hash、list、set和zset(sorted set)。9、结合开发经验,用了那种Redis在实际业务?缓存查询记录、缓存登录状态10、Redis 分布式锁怎么实现?Redis 分布式锁的实现,一般有以下两种方式:基于 SETNX 命令实现使用 SETNX(key, value) 命令,若 key 不存在,则设置 key 的值为 value。若 key 已存在,则不进行任何操作。该命令具有原子性,即对于一个 key,只有一个客户端能够成功地对其设置值。因此,可以将 SETNX 命令用于分布式锁的实现中。具体实现步骤如下:1)获取分布式锁时,利用 SETNX(key, value) 命令尝试将 key 设置为特定的值(例如 "locked");2)如果返回值为 1,表示锁设置成功,客户端获取到了锁,可以开始执行任务了;3)如果返回值为 0,表示锁已被其他客户端占用,客户端需要等待一段时间后重新尝试获取锁。在释放锁的时候,可以使用 Redis 的 DEL 命令将键值从 Redis 中删除来释放锁。基于 Redission 框架实现Redisson 是一个基于 Java 实现的 Redis 客户端,它提供了丰富的分布式锁实现方案,包括可重入锁、公平锁、联锁、红锁、读写锁等。Redisson 支持使用单个 Redis 实例、多个 Redis 实例甚至是集群模式下的 Redis 进行分布式锁的实现。具体实现步骤如下:1)添加 Redisson 的相关依赖;2)创建 Redisson 对象,并使用其 getLock 方法获取锁对象;3)调用锁对象的 lock() 方法尝试获取锁,如果获取成功就可以开始执行任务了;4)任务执行完毕后,调用锁对象的 unlock() 方法释放锁。以上是 Redis 分布式锁的两种常见实现方式。在实际场景中,我们需要根据不同的业务需求选择不同的实现方式。例如,基于 SETNX 命令实现方式简单易懂,但需要手动添加重试机制;基于 Redisson 框架实现方式复杂一些,但提供了更多的分布式锁实现方案和优秀的性能。11、setnx 为什么是原子性?SETNX 是 Redis 中的一个原子性操作指令,它可以用于实现分布式锁等功能。SETNX 的原子性指的是多个客户端并发执行 SETNX 操作时,只有其中一个客户端能够成功地将键值对设置到 Redis 中。SETNX 命令的原子性是由 Redis 内部的单线程机制所保障的。在 Redis 中,所有命令都会交给一个单独的线程执行,这个线程会依次执行命令队列中的每个命令,并根据自己的特性维护自己的状态。对于 SETNX 命令,Redis 的单线程机制会保证在执行该命令时,任何其他命令都无法干扰其执行结果。具体来说,当 SETNX 命令被执行时,Redis 会检查要设置的 key 是否已经存在,如果不存在,则会执行 SETNX 命令将 key 设置为指定的 value,此时 Redis 会阻塞其他客户端的读写请求,直到 SETNX 命令执行完成并返回结果。因此,无论是单个客户端还是多个并发的客户端,SETNX 命令执行时都不会出现并发问题,即 SETNX 命令具有原子性。同时,Redis 还提供了诸如 INCR 和 DECR 等其他单个命令具有原子性的操作,在分布式场景中也可以利用这些指令实现原子性操作。12、如何实现 Redis 和 MySQL 一致性?(1)先更新数据库,后更新缓存;(2)先更新缓存,后更新数据库;(3)先更新数据库,后删除缓存;(4)先删除缓存,后更新数据库。「先更新数据库,再删除缓存」的方案虽然保证了数据库与缓存的数据一致性,但是每次更新数据的时候,缓存的数据都会被删除,这样会对缓存的命中率带来影响。如果我们的业务对缓存命中率有很高的要求,我们可以采用「先更新数据库,再更新缓存」的方案,因为更新缓存并不会出现缓存未命中的情况。在更新缓存前先加个分布式锁,保证同一时间只运行一个请求更新缓存,就会不会产生并发问题了,当然引入了锁后,对于写入的性能就会带来影响。在更新完缓存时,给缓存加上较短的过期时间,这样即时出现缓存不一致的情况,缓存的数据也会很快过期,对业务还是能接受的。延迟双删:先进行缓存清除,再执行update,最后(延迟N秒)再执行缓存清除。13、Redis 缓存雪崩问题及解决方案?缓存雪崩:大量的缓存同时过期 或 Redis 服务宕机,导致大量的请求到达数据库,导致数据库承受压力过大而宕机。解决方案:大量缓存同时过期:(1)设置均匀的过期时间,随机设置;(2)双 key,主 key 过期,副 key 不过期;(3)互斥锁,确保只有一个请求能到达数据库,并把数据更新至缓存Redis 服务宕机:(1)搭建高可用 Redis 集群;(2)利用熔断机制,暂停业务应用对缓存服务的访问,直接返回错误,不用再继续访问数据库。(3)限流机制:只将少部分请求发送到数据库进行处理,再多的请求就在入口直接拒绝服务,等到 Redis 恢复正常并把缓存预热完后,再解除请求限流的机制。14、什么是熔断?当系统中某一个服务出现性能瓶颈时,对这个服务的调用进行快速失败,避免造成连锁反应,从而影响整个链路的调用。服务熔断的作用类似于我们家用的保险丝,当某服务出现不可用或响应超时的情况时,为了防止整个系统出现雪崩,暂时停止对该服务的调用。15、熔断和限流的区别?限流是指上游服务对本服务请求 QPS 超过阈值时,通过一定的策略(如延迟处理、拒绝处理)对上游服务的请求量进行限制,以保证本服务不被压垮,从而持续提供稳定服务。常见的限流算法有滑动窗口、令牌桶、漏桶等。16、Redis 更高效的原因?(1)更高效的数据结构(2)运行在内存上面(3)IO 多路复用17、项目18、算法19、反问
点赞 22
评论 4
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
12-10 12:30
厦门大学 驱动开发
嵌入式软件架构设计浅谈(短文简述技术拓展)
1.前言 嵌入式软件架构设计的核心是在硬件资源受限(MCU/MPU 的 RAM、Flash、算力有限)的前提下,平衡实时性、可靠性、可维护性与硬件适配性,区别于通用软件架构(如 Web、桌面软件),嵌入式架构必须深度绑定硬件特性(外设、中断、时钟、功耗),同时满足工业级 / 消费级的功能、非功能需求(如实时响应、抗干扰、低功耗)。软件架构设计决定了系统的可靠性、可维护性和可扩展性。优秀的架构能在有限的硬件资源上构建出稳定高效的系统,而糟糕的架构则会导致项目延期、维护困难和性能瓶颈。2.机制简述一.前后台架构(含中断机制)1.核心要点前台:无限循环的主任务流,顺序执行低优先级常规任务(如传感器采...
点赞
评论
收藏
分享
12-11 13:25
柠檬微趣_数据库内核测试工程师(准入职员工)
柠檬微趣内推,柠檬微趣内推码
面经:暑假投递,面试时间线拉的比较长自我介绍实习经历介绍问了我他们公司有什么产品,让我说一款的细节设置,以及和竞品的细节差异在这个游戏设计一个中秋节主题关卡,应该怎么设计,什么思路?现在的关卡设置有什么需要改进的地方?休闲游戏的目标客户群体?有什么理解?休闲游戏符合设置付费点?什么品类的游戏是经久不衰的?🍋【柠檬微趣26届秋招】火热开启!一周极速Offer,职等柠来!✔ 研发发行《宾果消消消》《浪漫餐厅》《梦幻旅行》等爆款手游✔ 中国手游发行商出海收入排行榜Top 5✔ 合成手游赛道全球收入No.1的发行商📍 工作地点:北京市西城区🔥 秋招亮点✅ 岗位全覆盖:游戏开发、数据分析、游戏策划...
点赞
评论
收藏
分享
10-20 16:50
字节跳动_移动开发(实习员工)
第一天入职 把mt认成男生了咋办
如题 入职培训的时候她说来接我 我说好的哥 然后结束了我说我好了哥 结果来的是个女生 说xxx是吗 来吧 我直接傻眼了bro 这是我第一次遇到女mt 巨尴尬 我要不买个奶茶道个歉啊
牛客48325473...:
叫错了名称,口头上道歉一下就行了。道歉程度要与犯的错误相匹配,没必要把自己搞得这么卑微
你是怎么和mt相处的?
点赞
评论
收藏
分享
11-26 14:42
郑州轻工业大学 Java
数字马力
hr回复我的,这个笔试不代表啥,放心
在写周报的打工人很独...:
这个笔试昨天晚上做了一下,真难啊,前后端,ai全有
点赞
评论
收藏
分享
12-15 15:27
传音控股_技术运维工程师(准入职员工)
传音内推,传音内推码
我投递的是供应链的岗位,有需求的宝宝可以参考一下~ 一开始投递简历后,会有一个线上**,大家可以去一些软件刷刷题再去做(因为这个题库有时候真的有点怪怪的),通过后经过漫长的审批,有些岗位会有专业测试(研发岗之类的),然后又是漫长的审批,你就会进入面试阶段啦! 首先是11月中旬的时候hr会打一个电话面试: 时间不一定,早中晚都有可能,当时我以为是骚扰电话给挂了,幸好hr小姐姐打了第二个,听说有人挂了之后就没有接到第二个电话了,大家一定要注意(广东)种地方的来电!!!说不定就是你的面试通知!!! 电话面的问题: 1.对传音的了解(可以多搜索传音相关的资料了解) 2.对薪资的期望(看个人需求) 3....
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
勇气与抉择
2.4W
2
...
2025年12月16日 多年之后 我又梦到那天
1.4W
3
...
拼多多开奖了
1.0W
4
...
双非本硕客户端总结/经验贴
6345
5
...
有些事真是只有工作了才知道。。
4687
6
...
被mt骂了怎么办
3865
7
...
单9机械结构硕的求职大结局
3698
8
...
为什么上班这么痛苦?其实无非这四种内耗
3495
9
...
关于双非找实习的一个暴论
3394
10
...
入职大厂坦白局
3353
创作者周榜
更多
正在热议
更多
#
mt对你说过最有启发的一句话
#
11369次浏览
148人参与
#
打工人的精神状态
#
120934次浏览
1398人参与
#
今年秋招你收到了多少封邮件?
#
8100次浏览
122人参与
#
找工作有哪些冷知识
#
200502次浏览
2554人参与
#
什么是优秀的实习经历
#
2587次浏览
102人参与
#
市场营销人求职交流聚集地
#
165580次浏览
1227人参与
#
提前批过来人的忠告
#
142020次浏览
1326人参与
#
滴滴求职进展汇总
#
285947次浏览
2386人参与
#
携程求职进展汇总
#
830373次浏览
5307人参与
#
来聊聊你目前的求职进展
#
701557次浏览
6955人参与
#
职场新人体验
#
154995次浏览
1118人参与
#
秋招被挂春招仍然能投的公司
#
1518次浏览
20人参与
#
工作中遇到的歹人
#
12051次浏览
181人参与
#
秋招特别不鸣谢
#
5556次浏览
79人参与
#
考研失败就一定是坏事吗?
#
163522次浏览
1195人参与
#
摸鱼被leader发现了怎么办
#
79514次浏览
487人参与
#
被上班搭子“传染”了哪些习惯
#
2525次浏览
66人参与
#
选实习,你更看重哪方面?
#
5007次浏览
105人参与
#
工作后,你落下了哪些病根
#
5568次浏览
122人参与
#
实习简历求拷打
#
529次浏览
16人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务