华为电商项目面经总结

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 华为电商项目面经总结

今天向大家介绍下面试华为电商项目面经,面试官可是华为公司的大佬哦!

面试问题如下

线程安全的集合

1.Vector

Vector和ArrayList类似,是长度可变的数组,与ArrayList不同的是,Vector是线程安全的,它给几乎所有的public方法都加上了synchronized关键字。由于加锁导致性能降低,在不需要并发访问同一对象时,这种强制性的同步机制就显得多余,所以现在Vector已被弃用。

2.HashTable

HashTable和HashMap类似,不同点是HashTable是线程安全的,它给几乎所有public方法都加上了synchronized关键字,还有一个不同点是HashTable的K,V都不能是null,但HashMap可以,它现在也因为性能原因被弃用了

3.ConcurrentHashMap ConcurrentHashMap和HashTable都是线程安全的集合,它们的不同主要是加锁粒度上的不同。HashTable的加锁方法是给每个方法加上synchronized关键字,这样锁住的是整个Table对象。而ConcurrentHashMap是更细粒度的加锁

在JDK1.8之前,ConcurrentHashMap加的是分段锁,也就是Segment锁,每个Segment含有整个table的一部分,这样不同分段之间的并发操作就互不影响。JDK1.8对此做了进一步的改进,它取消了Segment字段,直接在table元素上加锁,实现对每一行进行加锁,进一步减小了并发冲突的概率。

4.CopyOnWriteArrayList和CopyOnWriteArraySet

它们是加了写锁的ArrayList和ArraySet,锁住的是整个对象,但读操作可以并发执行。

5.除此之外还有ConcurrentSkipListMap、ConcurrentSkipListSet、ConcurrentLinkedQueue、ConcurrentLinkedDeque等,至于为什么没有ConcurrentArrayList,原因是无法设计一个通用的而且可以规避ArrayList的并发瓶颈的线程安全的集合类,只能锁住整个list,这用Collections里的包装类就能办到。

redis线程安全是怎么保证的

Redis是个单线程程序,所以它是线程安全的。

redis穿透以及解决方案

1.缓存空对象会有一个必须考虑的问题:

空值做了缓存,意味着缓存层中存了更多的键,需要更多的内存空间(如果是攻击,问题更严重),比较有效的方法是针对这类数据设置一个较短的过期时间,让其自动剔除。

2.布隆过滤器实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。如果想判断一个元素是不是在一个集合里,一般想到的是将集合中所有元素保存起来,然后通过比较确定。链表、树、散列表(又叫哈希表,Hash table)等等数据结构都是这种思路。但是随着集合中元素的增加,我们需要的存储空间越来越大。同时检索速度也越来越慢,上述三种结构的检索时间复杂度分别为 O(n),O(log n),O(n/k)布隆过滤器的原理是,当一个元素被加入集合时,通过K个散列函数将这个元素映射成一个位数组中的K个点,把它们置为1。检索时,我们只要看看这些点是不是都是1就(大约)知道集合中有没有它了:如果这些点有任何一个0,则被检元素一定不在;如果都是1,则被检元素很可能在。这就是布隆过滤器的基本思想。

redis雪崩以及解决方案

缓存雪崩,是指在某一个时间段,缓存集中过期失效。

第一,大多数考虑用加锁或者队列的方式保证来保证不会有大量的线程对数据库一次性进行读写,避免缓存失效时对数据库造成太大的压力,虽然能够在一定的程度上缓解了数据库的压力但是与此同时又降低了系统的吞吐量。

第二,分析用户的行为,尽量让缓存失效的时间均匀分布。

第三,如果是因为某台缓存服务器宕机,可以考虑做主备,比如:redis主备,但是双缓存涉及到更新事务的问题,update可能读到脏数据,需要好好解决。

redis竞争资源是怎么解决的

利用redis自带的incr命令

可以使用独占锁的方式,类似操作系统的mutex机制。

使用乐观锁的方式进行解决(成本较低,非阻塞,性能较高)

说说Throadlocal

ThreadLocal用于保存某个线程共享变量:对于同一个static ThreadLocal,不同线程只能从中get,set,remove自己的变量,而不会影响其他线程的变量。

多线程死锁问题的解决

线程死锁一般是发生在多个线程的多个锁之间,比如线程A拥有临界区对象LockA的所有权,等待临界区对象LockB;线程B拥有临界区对象LockB的所有权,等待临界区对象LockA;由于两个线程间相互等待各自的锁,并且不释放,就会导致程序一直等待下去,发生死锁;

加锁顺序一致

避免锁未释放的场景

XML中依赖注入几种方式

构造器注入

setter注入

接口注入

实体类中没有getset方法,然后在xml中依赖注入后会报什么错

null

Bean中导入集合需要哪些标签

<list>,<set>,<map>为 TsetUtil 的List、Set、Map集合属性赋值

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
7月前
|
SQL NoSQL 关系型数据库
基础版本抖音(字节跳动青训)
本抖音项目是基于grpc通讯协议开发的高性能微服务,不仅使用gin作为业务层框架,gorm框架作为持久层框架,还使用预编译sql防止sql注入,同时该项目结合连接池技术来构建连接工厂和复用grpc连接来提高系统的性能,这样可以有效的处理高并发场景下的挑战,还可以通过减少频繁创建和销毁grpc连接带来的性能开销
|
消息中间件 设计模式 负载均衡
2023年我凭借这份pdf成功拿到了阿里,腾讯,京东等六家大厂offer
拿到大厂的offer一直是程序员朋友的一个目标,我是如何拿到大厂offer的呢,今天给大家分享我拿到大厂offer的利器,大厂核心知识面试宝典,375页面试宝典,内容囊括jvm,java集合,java多线程并发,java基础,spring原理,微服务,网络,日志,zookeeper,kafka,mongoDB,设计模式,负载均衡,数据库,数据结构,分布式缓存。
66 0
|
缓存 前端开发 JavaScript
2018年各大互联网前端面试题四(美团)
2018年各大互联网前端面试题四(美团)
98 0
|
消息中间件 设计模式 存储
查漏补缺第六期(京东一面)
前言 目前正在出一个查漏补缺专题系列教程, 篇幅会较多, 喜欢的话,给个关注❤️ ~ 本专题主要以Java语言为主, 好了, 废话不多说直接开整吧~ Kafka的应用场景有哪些,在项目里是如何应用的 Kafka 是一个高吞吐量、可扩展的分布式流处理平台,主要用于构建实时数据流应用程序和数据管道。以下是一些Kafka的应用场景:
|
存储 XML SQL
阿里巴巴2021春招二面(淘宝商家平台实习生)
支付的时候提交订单以后会调用远程支付接口,比如支付宝,如何保证在复杂的网络环境下不会重复支付? 商城平台都有物流追踪功能,如果现在某个订单平台上已经显示物流配送完毕,订单结束,但这时物流公司比较拉跨,过了一段时间又发过来了这个物流信息显示正在配送中,应该怎么办?
|
设计模式 缓存 算法
互联网大厂考点(阿里+百度+腾讯+字节跳动+美团+京东)
- 01 互联网大厂考点(阿里+百度+腾讯+字节跳动+美团+京东) - 02 Java 面试考点大全(基本功底+常用技术+技术深度+技术经验+学习能力+工作能力+项目经验) - 03 面试真题重现
297 0
|
机器学习/深度学习 算法 Java
百度,阿里,网易顺丰为何纷纷抛出橄榄枝?这位大佬的求职之路!
  2021,有过迷茫,有过努力,也有很多收获。为了记录这一年以来的感受,于是有了这篇文章。   前期准备   当然在学习Python的道路上肯定会困难,没有好的学习资料,怎么去学习呢?   所以小编准备了一份零基础入门Python的学习资料。关注,转发,私信“007”即可领取!   也是在去年十一月份左右,看着身边两年制的同学经历了长时间而又艰难的秋招,我开始意识到自己应该提前准备了,否则自己的秋招会很惨。   本科的时候,虽然学过计算机网络、操作系统和数据结构等课程,而且 Leetcode 也刷了一两百题,但是离招聘要求还差的很远,学的都很浅只够应付考试,也没有实际的项目经验。
199 0
|
XML 缓存 NoSQL
华为电商项目面经总结
华为电商项目面经总结
140 0
|
前端开发 Java
【程序媛晒83行代码】阿里口碑平台技术部工程师,不秀美颜秀代码
衔远小姐姐的83行代码,一个技术与马甲线并存的mm
2002 0
****创业者必看:黄太吉商业计划书完整版
黄太吉的煎饼好不好吃,对此不予置评(因为还没有吃过,突然好桑感)。各位客官,十一马上收假了,是不是也很难过呢,那还不赶紧看看人家这个准备融资2亿元的商业计划书(让自己内心平静一下下),尤其是正在创业路上的小伙伴们。
1118 0