首页 > 其他分享 >面试问题

面试问题

时间:2024-10-19 11:36:12浏览次数:6  
标签:Product obj cache 问题 面试 return null productId

1.防止订单重复提交

使用 redis 分布式锁来实现,可以使用用户ID,加购物车的商品ID,使用 MD5算法,得出一个key 作为分布式锁的key。解决问题的关键是 保持分布式锁的 key 的唯一性。

2. 缓存击穿

如果用户查的ID数据库没有值,那么缓存就击穿了,解决办法,如果数据库没有值,也给他缓存一个空值,第二次 在访问的时候,就直接给他返回null

private String Empty="-1";
public Product getProduct(String productId){
	Object obj= cache.get(productId);
	if(obj!=null){
		if(obj instantOf(Product.class)){
			return (Product)obj;
		}
		if(Empty.equals(obj)){
			return null
		}
	}
	Product p=dao.get(productId);
	if(p!=null){
		cache.put(productId,p);
	}
	else{
		cache.put(productId,Empty);
	}
	return p;
}

这个方法有个问题,如果大量的 空存在会 损耗 内存,那么空缓存可以设置一个缓存过期时间,过一段时间缓存就会被清理掉。

还可以使用布隆过滤器。

  • 热点数据访问。
//双重检测锁
Product getProduct(String productId){
	Object obj= cache.get(productId);
	if(obj!=null){
		if(obj instantOf(Product.class)){
			return (Product)obj;
		}
		if(Empty.equals(obj)){
			return null
		}
	}
	synchronized(this){
		Object obj= cache.get(productId);
		if(obj!=null){
			if(obj instantOf(Product.class)){
				return (Product)obj;
			}
			if(Empty.equals(obj)){
				return null
			}
		}
		Product p=dao.get(productId);
		if(p!=null){
			cache.put(productId,p);
		}
		else{
			cache.put(productId,Empty,60000);
		}
	}
	return p;
}

synchronized 性能提升

synchronized 锁定时,需要注意锁的对象。
如果在 spring 使用

// 这个代码会锁定当前控制器的实例对象,因为控制器实例是单例对象,因此效率不高。
synchronized(this){

}

性能提升

CurrentHashMap map=new CurrentHashMap();
public void save(String userId){
	//产生锁对象
	Object o=map.computeIfAbsent(userId,o->new Object());
	//这样就每个用户ID就持有有一把锁。
	synchronized(o){
	
	}
}

标签:Product,obj,cache,问题,面试,return,null,productId
From: https://www.cnblogs.com/yg_zhang/p/18475596

相关文章

  • 没有大模型经验,面试官给机会吗?_没有大模型经验,面试官给机会吗
    做大模型一年半,经历了无数场面试。经验我最常听到的候选人(尤其是学生)的说辞是:我没有大模型经验,可以给个机会吗?答案是,我们并不看重候选人的大模型训练经验。这里不是说经验不重要,而是大部分人的经验没有意义。只有头部大模型公司的核心骨干的经验才有意义,而这和绝大多数......
  • int32_t的发散性问题
    int32_t 是一个在C和C++中定义的固定宽度整数类型。它表示一个32位的有符号整数类型,定义在 stdint.h(C标准库)或 cstdint(C++标准库)中。宽度:32位取值范围:-2,147,483,648到2,147,483,647类型:有符号整数(signed),即可以表示正数、负数和零。这种类型确保了在......
  • java_day18_多线程、线程安全问题、死锁、等待唤醒机制
    一、线程1、多线程进程:是系统进行资源分配和调用的独立单位,每一个进程都有它自己的内存空间和系统资源。举例:IDEA,阿里云盘,wegame,steam线程:是进程中的单个顺序控制流,是一条执行路径一个进程如果只有一条执行路径,则称为单线程程序。一个进程如果有多条执行......
  • Java最全面试题->Java基础面试题->JavaWeb面试题->Cookie/Session面试题
    Cookie/Session下边是我自己整理的面试题,基本已经很全面了,想要的可以私信我,我会不定期去更新思维导图哪里不会点哪里什么是Cookie?HTTPCookie(也叫WebCookie或浏览器Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求......
  • 解决下包慢的问题(常用命令)
    解决下包慢的问题(常用命令)1.切换npm的下包镜像源1.查看当前的下包镜像源​npmconfiggetregistry2.将下包的镜像源切换为淘宝镜像源​npmconfigsetregistry=https://registry.npmmirror.com/3.检查镜像源是否下载成功​npmconfiggetregistry2.......
  • 面试题速刷 - 实战会碰到的一些问题
    页面如何进行首屏优化?路由懒加载服务端渲染SSR只获取HTML就可以,里面包含data。APP预取(啥东西)APP结合H5、结合JSbridge分页图片懒加载lazyloadHybrid总结:后端一次性返回10w条数据,你会如何渲染?本身后端设计方案的设计就不合理!非要的话......自定义中间......
  • 异常问题解决
    异常:java程序编译或运行过程中出现的问题Throwable:Error:表示非常严重的问题,自己无法解决的问题Exception:除了RuntimeException其它异常【编译时期异常】:一般指的是异常尚未处理就编译了RuntimeException【运行时期异......
  • 【智能算法应用】鸭群算法求解二维路径规划问题
    摘要本文研究了鸭群算法在二维路径规划问题中的应用,旨在解决复杂障碍环境下的最优路径搜索问题。通过模拟鸭群觅食行为,鸭群算法能够有效避开障碍物,找到最短路径。实验结果表明,鸭群算法在路径规划中表现出较快的收敛速度和较优的路径规划效果,适用于多种复杂环境下的路径优化......
  • 【智能算法应用】引力搜索算法求解二维路径规划问题
    摘要引力搜索算法(GSA)是一种基于引力学说的启发式算法,用于解决复杂的优化问题。本文应用GSA于二维路径规划问题,通过优化路径来避开障碍物并达到目标点。实验结果表明,GSA在路径规划中具有良好的表现,尤其在多障碍场景中,其优化路径平滑且避障效果显著。理论引力搜索算法是......
  • 搜索,问题 I: 围成面积
    题目描述编程计算由“*”号围成的下列图形的面积。面积计算方法是统计*号所围成的闭合曲线中水平线和垂直线交点的数目。如下图所示,在10×10的二维数组中,有“*”围住了15个点,因此面积为15。 输入10×10的图形。输出输出面积。样例输入 复制0000000000000......