相关淘宝的名词解释
产品 淘宝标准化产品,由类目+关键属性唯一确定。如:手机类目,关键属性是品牌和型号,Nokia N95就是一个产品,nokia是品牌,N95是型号。 SPU spu=standard product unit 标准化产品单元;spu相当于一个产品,可详见产品定义。 SKU sku=stock keeping uint(库存量单位),为保存库存控制的最小可用单位,例如一件T恤中一个SKU通常由颜色、尺码组成,如下图: CSPU(达尔文) CSPU是以最细粒度的产品节点为核心,使用系统+运营机制的方式维护一套丰富、准确的产品库 天猫文档: https://open.taobao.com/doc.htm?docId=108954&docType=1 从天猫文档可以了解到: 达尔文主要为了实现一套丰富、准确的产品库,解决标准产品的信息统一、标准化问题 达尔文是一套多方参与共建的一个准确有效的产品库 达尔文通过品牌归一、型号归一等解决现存的重复SPU的问题。 spu、cspu、cku 关系 12cspu = spu + 销售属性sku = cspu + 价格...
Redis分布式锁如何续期
我们目前项目中使用的 redis 锁并没有续期的功能,所以在执行长时间任务时会触发 attempt to unlock '{}', not locked by current thread. 异常,解决这个问题比较正确的姿势是采用 redisson 这个客户端工具.具体介绍可以搜索最大的同性交友网站 github. 我们看官方的解释: Redisson 为避免存储这个分布式锁的Redisson节点宕机出现锁死的情况,在内部提供了一个监控锁的看门狗,其作用是在Redisson实例被关闭前,不断延长锁的有效期。默认情况下,看门狗的检查锁的超时时间是30秒,可以通过修改 Config.lockWatchdogTimeout 来指定。另外Redisson还通过加锁的方法提供了 leaseTime 的参数来指定加锁的时间。超过这个时间后锁便自动解开了。 细心的同学可能会发现上面解释的歧义: 看门狗每隔 30...
Java小数点数字和百分号数字之间的转换
小数点数字和百分号(百分比)需要进行两者之间相互转换。如代码: 1234567891011121314151617181920212223242526String s1 = "21.8%";String s2 = "-21.7%"; NumberFormat numberFormat = NumberFormat.getPercentInstance();try { Number n1 = numberFormat.parse(s1); Number n2 = numberFormat.parse(s2); Log.d("小数点字符串转百分数", n1.floatValue() + " , " + n2.floatValue()); // 小数点字符串转百分数: 0.218 , -0.217} catch (Exception e) { e.printStackTrace();} float f1 = 0.218f;float...
深入学习G1垃圾收集器
G1 (Garbage-First) 垃圾收集器在是Java9的默认垃圾收集器。G1 的主要关注点在于达到可控的停顿时间,在这个基础上尽可能提高吞吐量。 如果你的应用使用了较大的堆(如 6GB 及以上)而且还要求有较低的垃圾收集停顿时间(如 0.5 秒),那么 G1 是你绝佳的选择。 从分代上看,G1依然属于分代垃圾回收器,它会区分年代和老年代,依然有eden和survivor区,但从堆的结构上看,它并不要求整个eden区、年轻代或者老年代都连续。 分代收集器将堆分为年轻代、老年代和永久代,每个代空间都是确定的。 而 G1 将整个堆划分为一个个大小相等的小块(每一块称为一个 region),在jvm启动时会设置 region 的数量,取决于堆的大小,每个 region 的大小可在 1MB ~ 32 MB调整,最好不要超过2048个 region 。和分代算法一样,G1 中每个块也会充当 Eden、Survivor、Old 三种角色,但是它们不是固定的,这使得内存使用更加地灵活。 执行垃圾收集时,和 CMS 一样,G1...
linux查找日志技巧
linux 日志查找技巧 查询日志中含有某个关键字的信息cat app.log |grep 'error'关键字后10行日志cat app.log |grep -10 'error' 查询日志尾部最后10行的日志tail -n 10 app.log 实时更新日志tail -f app.log 从尾部查询日志,并过显示关键字后10行日志tail app.log |grep -10 'error' 查询10行之后的所有日志tail -n +10 app.log 查询日志文件中的头10行日志head -n 10 app.log 查询日志文件除了最后10行的其他所有日志head -n -10 app.log 查询日志中含有某个关键字的信息,显示出行号(在1的基础上修改)cat -n app.log |grep 'error' 显示102行,前10行和后10行的日志(不太好理解)cat -n app.log |tail -n +92|head -n...
mysql 查询设置事务隔离级别
查询mysql 5.7 1SELECT @@tx_isolation; mysql 8.0 1select @@transation_isolation; 设置设置 seesion 级别为可重复读1set session transaction ISOLATION level repeatable read; 设置系统级别为可重复读1set global transaction ISOLATION level repeatable read; 所有的隔离级别 read uncommitted : 读未提交 (可以读到未提交的数据 (脏读) ) read committed : 读已提交 — oracle 默认隔离级别 (可能每次读取的数据结果不一致 (幻读)) repeatable read : 可重复读 — mysql 默认隔离级别 ( innodb 采用 mvcc 解决幻读问题) serializable : 串行化 (类似锁,写数据必须等待另一个事务结束) 设置 事务不自动提交123set autocommit = 0 ;或者start...
重学spring(三) Spring IOC 源码分析--获取单例Bean
简介上一篇文章演演示了Bean的生命周期,我们从容器中获取bean使用一般是 ctx.getBean("xxx"),但这个这个方法具体做了哪些事情我们并不知道,在这篇文章我将详细分析getBean("xxx")方法实现细节,代码比较长,分析不到位的地方,请见谅。 源码分析入口getBean(String)源码ctx.getBean("xxx") 调用了BeanFactory 接口的getBean(String...
重学spring(一) Spring中Bean实例化的四种方式
从工作开始到现在一直都有使用Spring,日常开发中总有spring的身影,但实话实讲,对spring的认识一直停留在使用阶段,只知其然。做技术当然不能这样,柄着知其所以然的态度,想系统的学习分析一下spring,无奈懒惰让我一直没有着手做。不积跬步,无以至千里,万事得开个头,终于下定决定写下第一篇。 tip: 本系列根据spring 5.2.6.RELEASE 进行分析。 引入spring依赖 123456789101112<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.2.6.RELEASE</version></dependency><dependency> <groupId>org.springframework</groupId> ...