华为电商项目面经总结

本文涉及的产品
云数据库 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
目录
打赏
0
0
0
0
863
分享
相关文章
番外·卓伊凡参加 [2025年2月HDD·鸿蒙赋能交流会·成都站] 线下活动的心得体会-优雅草卓伊凡
番外·卓伊凡参加 [2025年2月HDD·鸿蒙赋能交流会·成都站] 线下活动的心得体会-优雅草卓伊凡
41 3
番外·卓伊凡参加 [2025年2月HDD·鸿蒙赋能交流会·成都站] 线下活动的心得体会-优雅草卓伊凡
【电商新机遇】支付宝小程序如何助你打造爆款电商解决方案?揭秘背后的技术奥秘!
【8月更文挑战第27天】本文详细介绍如何利用支付宝小程序构建电商应用,覆盖从项目初始化、页面设计、功能开发到数据分析的全流程。首先,需注册开发者账号并安装相关工具;随后创建项目,并按示例配置基本页面结构;接着设计商品列表等界面布局;再实现商品展示等功能;最后运用支付宝提供的工具进行数据分析,以优化用户体验及营销策略。跟随本教程,您将能打造出一款完整的电商小程序。
153 1
励志!一年时间,从小白到进入阿里核心部门,“他”的逆袭之路
注明:这是一个励志老哥给我分享的个人经历,发本文的目的是为了让大家可以参考他的学习经历,提高自己的能力!当然人外有人天外有天,大神也别打我!再次说明,我只是为了能够帮助迷茫的兄弟们!接下来以他的第一视角为大家讲述他的经历。
华为电商项目面经总结
华为电商项目面经总结
154 0
靠这几个裂变工具和玩法,社区电商开了3300家店,融资10亿元
疫情期间,被身边的邻居朋友拉进微信群买水果、日用品更是成为“新常态”中的日常。
果冻有家:租房场景中的共享社交融合;抖音正式推出创作者学院,发布官方运营攻略。
昨日,阿里巴巴正式登陆香港联合交易所。被问及“阿里巴巴会不会回归A股或者继续登陆伦交所”,张勇表示:香港是一个新的起点,但绝对不是终点。
292 0
社区团购讲堂之社区团购“何德何能”,成为当下最火的社交电商!
互联网的高速发展,商业模式瞬息万变,层出不穷,原本线下的市场如今大部分已经“搬”倒了线上,吃喝玩乐、衣食住行被美团、淘宝、滴滴转移到线上进行交易,实体商超零售业面临移动互联网的普及发展,拓疆土的雄心,逐渐变成固江山的本心,开始深耕“一亩三分地”,精进“社区新零售”。