华为电商项目面经总结

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容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
目录
相关文章
|
机器学习/深度学习 前端开发 搜索推荐
2023大淘宝技术工程师推荐书单
今天是4月23日了,是联合国教科文组织规定的“世界读书日”。 大淘宝技术的工程师们精心挑选出7本技术类书籍, 有机器学习方面的、推荐系统方面的,分布式领域的,等等。每一位工程师都根据自己真实的阅读心得写了推荐语,希望能帮大家更快挑选到对自己有用的书籍。
229 0
《淘宝交付之道》出版!大淘宝技术36个月匠心之作
《淘宝交付之道》出版!大淘宝技术36个月匠心之作
117 0
|
Web App开发 搜索推荐 数据安全/隐私保护
极简极速!小米团队力作,难得的良心产品!
电脑端浏览器层出不穷,好用的也有很多选择,Chrome、Firefox、Edge等。
极简极速!小米团队力作,难得的良心产品!
|
XML 缓存 NoSQL
华为电商项目面经总结
华为电商项目面经总结
145 0
|
新零售 开发者
【讨论】“阿里巴巴小程序繁星计划”:如何用20亿扶持200万小程序开发者和100万商家?
提供20亿元补贴,扶持200万+小程序开发者、100万+商家。开发者可来云栖社区进行讨论。
22637 0
|
人工智能 算法 开发工具
阿里工程师开发弹幕新玩法,网友不淡定了……
如果你在追剧时喜欢看弹幕、发弹幕,那你一定知道有些剧里弹幕甚至比剧情还要精彩,比如上过热搜的出自《东宫》的那一句“谈恋爱吗?灭你全族的那种”。正是由于这些神一般的网友频频曝出精句,让某些剧集精彩程度翻了几倍,甚至有大量网友来追剧是被弹幕吸引来的。今天,阿里文娱高级开发工程师 神灭介绍一种弹幕新玩法,让弹幕的可玩性更高。
505 0
阿里工程师开发弹幕新玩法,网友不淡定了……
|
程序员 开发者
大咖集结 | 开发者进阶直通车
在这里,约专家,解疑难,看阿里p8、p9专家是如何处理技术问题的。
1061 0
|
算法 机器人 双11
围观阿里总部:边喝茶边搞技术是一种怎样的体验?
最近,一边喝着茶一边创造双11奇迹的阿里技术哥哥们火了。当大家感慨双11再次刷新历史的同时,也为阿里创新智能的能力而惊叹。 实际上在阿里巴巴内部,一些先进的智能技术已经运用到员工日常办公场景之中,让大家提高工作效率,时刻保持活力与创新。
3505 0
|
JavaScript 新零售 安全
11月20日云栖精选夜读:围观阿里总部:边喝茶边搞技术是一种怎样的体验?
最近,一边喝着茶一边创造双11奇迹的阿里技术哥哥们火了。当大家感慨双11再次刷新历史的同时,也为阿里创新智能的能力而惊叹。 实际上在阿里巴巴内部,一些先进的智能技术已经运用到员工日常办公场景之中,让大家提高工作效率,时刻保持活力与创新。
4418 0