本栏目Java开发岗高频面试题主要出自以下各技术栈:Java基础知识、集合容器、并发编程、JVM、Spring全家桶、MyBatis等ORMapping框架、MySQL数据库、Redis缓存、RabbitMQ消息队列、Linux操作技巧等。
订单定时取消是一个非常常见的需求,尤其是上面说到的下单减库存模式,因为我们有时候会比较担心用户下单了,但是不支付,这时候又锁住了库存,那其他用户就一直没法购买了,所以我们其实就需要进行订单的自动取消功能,避免长期锁住库存让其他人无法购买;
我们都知道,MySQL中关于字符,有char和varchar两种常用的类型,可能在平时的使用过程中,大家不会去关心这两种类型的区别,只是会用就可以了,或者说看到过一些它们的区别,但是没有时间去测试,今天有时间了,我将这两种类型的具体情况实验一把,让大家直观感受下,纯属分享,大神请绕道。
商城有种商品仅剩一个库存,用户A的下单请求进入到后端接口,由于用户A的网络环境不太好,导致请求卡死,此时用户B也进入下单页面,由于用户A网络环境不好,并没有执行减库存操作,用户B查询到的库存也是1,那么用户B点击下单按钮,最终剩余一个库存却下单成功了两次,我们需要使用技术手段解决业务上的问题,即:保证不同线程请求进来,当前线程操作的数据没有被其他线程修改过。
创建mysql数据表的时候,通常会指定类型和长度,那么到底代表什么意思呢,每种类型最大长度又是多少,经过我的查阅资料和实验,把结果记录一下
set key value xx key存在才设置,不存在不设置,也就是update 更新操作
最近业务试水电商,接了一个秒杀的活。之前经常看到淘宝的同行们讨论秒杀,讨论电商,这次终于轮到我们自己理论结合实际一次了。
在MySQL5.5和MySQL5.6中,处理主从复制断开的问题时,经常会用到sql_slave_skip_counter这个参数,一般是将这个参数设置为1,跳过当前的event即可。其实这样的操作是危险的。
当前形势不佳,在这种情况下。小猫更是雪上加霜,他被裁了。投了个把月简历,终于约到一个面试。
在多线程高并发场景下,为了保证资源的线程安全问题,jdk为我们提供了synchronized关键字和 ReentrantLock可重入锁,但是它们只能保证一个jvm内的线程安全。在分布式集群、微服务、云原生横行的当下,如何保证不同进程、不同服务、不同机器的线程安全问题,jdk并没有给我们提供既有的解决方案。此时,我们就必须借助于相关技术手动实现了。目前主流的实现有三种方式: 1. 基于mysql关系型实现 2. 基于redis非关系型数据实现 3. 基于zookeeper实现
在多线程环境下,由于上下文的切换,数据可能出现不一致的情况或者数据被污染,我们需要保证数据安全,所以想到了加锁。
👆点击“博文视点Broadview”,获取更多书讯 丰收的9月,好书实在是太多,技术方面不仅涉及AI安全、软件研发效能、前端性能、分布式高可用算法、MySQL高可用解决方案,还有讲给孩子听的C语言大师编程课、Cadence印制电路板设计;职场办公方面,不仅有Excel图表设计攻略,还有导图思维修炼大法;更有一本财富秘籍分享给你哦…… 本期书单精选9月的12本新书,希望为大家带来一场知识的饕餮盛宴! ---- 01 ▊《AI安全:技术与实战》 腾讯安全朱雀实验室 著 国内首部揭秘AI安全前沿技术力
项目源代码:https://github.com/nnngu/nguSeckill ---- 关于并发 并发性上不去是因为当多个线程同时访问一行数据时,产生了事务,因此产生写锁,当一个获取了事务的线程
高并发下争夺共享资源,比如秒杀对于库存这种共享资源需要用到分布式锁,如果不用分布式锁很可能造成超卖。
👆点击“博文视点Broadview”,获取更多书讯 近年来,全球网络安全形势严峻,发生了多起个人信息与商业数据大规模泄露及违规利用事件,针对关键信息基础设施的恶意网络攻击频发,各国的网络空间对抗态势加剧。 面对这种情况,如何加强网络安全建设,更好地应对网络安全威胁,更有力地保障个人与企业信息安全,是我们需要思考和完善的。 本期就来分享10本与网络安全相关的经典畅销书,让你既知攻,又知防,在建设网络安全的道路上知己知彼,百战百胜! ---- 01 ▊《最强iOS和macOS安全宝典》 [美] Jo
强烈推介IDEA2020.2破解激活,IntelliJ IDEA 注册码,2020.2 IDEA 激活码
关于MySQL varchar字段类型的最大值计算,也许我们一直都理解错误了,本文从问题出发,经实践验证得出一些实用经验,希望对大家的开发工作有些帮助~
常用命令 设置值 set key value [ex seconds] [px milliseconds] [nx|xx] 选项说明: ex seconds 设置秒级过期时间 px milliseconds 设置毫秒级过期时间 nx 键不存在时才设置成功,用于添加 xx 键存在时才设置成功,用于更新 除了set选项,redis还提供了setnx,作用与nx选项相同 127.0.0.1:6379> exists hello (integer) 0 127.0.0.1:6379> set hell
比如有10件商品要秒杀,可以放到缓存中,读写时不要加锁。 当并发量大的时候,可能有25个人秒杀成功,这样后面的就可以直接抛秒杀结束的静态页面。进去的25个人中有15个人是不可能获得商品的。所以可以根据进入的先后顺序只能前10个人购买成功。后面15个人就抛商品已秒杀完。
MySQL提供了不同等级的锁,按限制能力的划分,分为全局锁、表锁、行锁。本文会描述不同锁的应用场景与实现原理。
来源:https://www.tuicool.com/articles/JzQvUb 秒杀系统涉及到的知识点 高并发,cache,锁机制 基于缓存架构redis,Memcached的先进先出队列。 稍
👆点击“博文视点Broadview”,获取更多书讯 1024程序员节马上就要到啦 值此佳节来临之际 博文菌为大家带来一份“反内卷”书单 助大家在这个充满焦虑的时代稳中求进、节节攀升 那什么样的书才能“反内卷”呢? 那必须是经典好书才行! 因为经典是经得住时间考验的珍品 它讲述了一些底层的真理 让我们以不变应万变 才能将我们从快节奏焦虑的内卷中解放出来~~ ---- 以下18本经典好书,绝不是博文菌吹嘘,而是大家有口皆碑、众所周知的好书,即使没读过,也肯定听过它们的大名! 所以,小伙伴们一定不要错过这些
新学期即将到来,你准备好了吗? 时间不允许你再做一条快乐咸鱼了, 博文菌奉上一份充电书单 帮你快速加载学霸Buff 满状态迎接新学期! 当然少不了我们的神仙优惠码 【实付200减40】 可叠加当前每满100减50活动使用 相当于花160元买到价值400元的书 让你品质好书囤到爽! 快点收下这份快乐吧~ 当当大促怎么BUY? ---- 结算时输入优惠码:UB5RXZ 使用渠道:当当小程序或当当APP 使用时间:9月7日前 省省省的快乐喷泉 > 小程序直达购书专题 < 扫描小程序选择想要的书,结算页面输入
秒杀大家都不陌生。自2011年首次出现以来,无论是双十一购物还是 12306 抢票,秒杀场景已随处可见。简单来说,秒杀就是在同一时刻大量请求争抢购买同一商品并完成交易的过程。
读了极客时间许令波的如何设计秒杀系统后,总结出秒杀系统设计的一些需要注意的点,如何从更多的角度去考量一个架构的设计,保证性能和高可用。
记账处理过程主要包括两部分,一是记录记账凭证,二是更新账户的余额。为了保证账户不被其他请求影响数据的准确性,在进行记账处理时,会先对账户的资源加锁,记账处理完毕后会自动释放锁。随着账务处理业务量的增大,账务数据库中的账户常常会在瞬间产生多个并发操作,但所有对应的并发线程中只有一个线程能够持有当前账户的资源锁,其他线程必须等待该锁被释放后再逐一进行记账处理,这样该账户将会被频繁加锁释锁,使该账户成为账务数据库热点,产生性能瓶颈点,严重影响账务数据库的性能。
去IOE的话题最近很火,而来自四川电信的客户访问,其中有一段颇有借鉴意义:去“O”不如减“O”。 我可以稍微总结一下: 时至今日,Oracle数据库仍然是最好的关系型数据库产品,最适合强一致性、高可靠性的OLTP业务采用; 国内在过去对于Oracle的使用是过于泛滥了,其中很大部分未经授权; 与其大谈难于落地的去“O”,不如脚踏实地的整合减“O”,将Oracle用得更加合理合法; 对于原本不应或不必要用Oracle支撑的系统,回归到MySQL、国产数据库或其他产品上去,从盲目、盲从回归理性; 转引用户的访问
时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。 5、转换时间戳的函数
其实 nowait 和 skip locked 这两个新特性已经出来好久了;之所以现在才写,是因为最近用他们帮朋友解决了一个生产问题。也算是体验了一下其价值,在这里安利一下。
在【精通高并发系列】的《实践出真知:全网最强秒杀系统架构解密!!》一文中,冰河详细的阐述了高并发秒杀系统的架构设计,也简单提到了如何扣减商品的库存。
秒杀大家都不陌生。自2011年首次出现以来,无论是双十一购物还是 12306 抢票,秒杀场景已随处可见。简单来说,秒杀就是在同一时刻大量请求争抢购买同一商品并完成交易的过程。从架构视角来看,秒杀系统本质是一个高性能、高一致、高可用的三高系统。而打造并维护一个超大流量的秒杀系统需要进行哪些关注,就是本文讨论的话题。
满200减150 / 满500减375 / 满1000减750 / 满2000减1500
之前做的SQL审核工具不支持text类型的字段的,今天一个业务方问我为什么不支持text字段,大概给他讲了讲,后续发现可能还有些不完善的地方,这里总结一下text的用法,先来看看官方文档上对这个字段的解释:
第十三章 电商优惠券微服务业务介绍和模块开发 第1集 互联网公司中优惠券微服务业务介绍和效果体验 简介:介绍常见的优惠券业务和课程案例效果体验 互联网企业最重要的是拉新业务,产品经理 自然诞生了很多玩法 砍价 拼团 裂变 优惠券 📷 电商优惠券逻辑,优惠券的玩法很多,主要讲一下比较常见的优惠券 获取方式维度 被动:新人优惠券 无门槛现金劵 …其他 第一次登录注册某平台,登录成功后进入到首个页面弹出新人红包或者某固定位置领取新人红包,前端领取位置及细节不做详细讲解,根据实际业务场景而定 主动:领取优惠券
1.MySQL悲观锁 悲观锁:顾名思义,对待过来的请求持比较悲观的态度,在处理请求的整个过程中,将数据锁定,不允许其他进程/线程 修改
第一种事务补偿性方案更注重原子性,既是要么同时成功,要么同时失败;其中涉及到子事务和主事务,主事务用来维护每个库的子事务,大概原理既是其中一个子事务失败,主事务要进行补偿(撤销或者追加)操作,达到数据原子性要求,可以注意到维护多个子事务这样的成本很高
最近工作中遇到两例mysql时间戳相关的问题,一个是mysql-connector-java和msyql的精度不一致导致数据查不到;另一例是应用服务器时区错误导致数据查询不到。
SQL 层面:SQL 的生命周期、权限管理、count(*) 的底层原理、底层的排序原理、连表原理。存储引擎层面:InnoDB 存储引擎的底层架构、索引的算法、事务的原理、锁机制、隔离机制、幻读
创建一个Maven项目spring-declaration-transaction,增加maven依赖
从刚面试的问题回答中,能看得出你用了不少拙力背了不少题。直接拿这些技术点问,你可以回答。但同样是这些技术点,我换个场景来问用到了什么技术,你就像从没有听说过一样。当然不可否认你能通过背把这些内容记住也是一种能力,但作为招聘从事软件编程的码农来说,其实更希望是招聘那些通过实际场景积累下来技术经验研发人员,对各个技术点有张有弛,举一反三。这也是一个理科生该具备的学习编程的基本素质,也更具有培养价值。
当我们通过 id 查找相关信息,redis 做中间层,当数据缓存在 redis 中时,我们直接返回该数据,如果 redis 中不存在,就到 MYSQL 中查找,查找成功后在返回。
synchronized (this):同步方法支持一种简单的策略来防止线程受到干扰和内存一致性错误;如果一个对象对多个线程可见,则对该对象变量的所有读取或写入都是通过同步方法完成。通俗点来说就是程序中用于保护线程安全的一种机制。
一、字符串对象概述 字符串类型是Redis最基础的数据结构。首先键都是字符串类型,而且其他几种数据结构都是在字符串类型基础上构建的,所以字符串类型能为其他四种数据结构的学习奠定基础 字符串就是一个由
这里主要介绍一下mysql里面一些常用的日期函数,掌握了这些函数可以更好地编写sql语句。
字段设计 错误示例 function test1() { //商品id $id = request()->input('id'); $product = Product
最近一学妹跳槽到北京某信,闲聊的时候,发现学妹在做餐厅的后端,女生做后端,很强。我说你个餐厅能做什么???然后她秀烂了的我。下面进入正题。
假设库存 num=5 情况1(减库存成功)update 库存表 set num=num-5 where num-5 >= 0 and id=1; // 减5库存,影响行数1 情况2(减库存失败)update 库存表 set num=num-6 where num-6 >= 0 and id=1; // 减6库存,影响行数0
Github:https://github.com/nnngu 项目源代码:https://github.com/nnngu/nguSeckill
领取专属 10元无门槛券
手把手带您无忧上云