项目经验
陆多多
这个作者很懒,什么都没留下…
展开
-
一致性hash的理解
hashhash即求散列值,可以将不确定长度的数据映射成一串固定值,节省空间且便于比较,通常用在辅助查找,去重等场景。hash的目的可以用较少的数据空间来体现原有数据的差异性,即同一条数据hash后的值结果肯定是相等的,不等数据的hash后值会尽量分开,这样的特性便于寻址定位,比如一个数组,我们可以根据hash值对数组长度取模,根据取模位置直接设置和获取数据。当然由于不同数据的hash值可能相...原创 2020-04-14 14:01:20 · 671 阅读 · 0 评论 -
hive sql
hive是什么hive是hadoop的一个数据仓库工具,可以将结构化的数据文件映射丞一张数据库表,并提供类SQL的查询功能。可以将sql语句转换为MapReduce任务进行运行。官方介绍:https://cwiki.apache.org/confluence/display/Hive#Home-UserDocumentationhive sql语法及函数一. 语法:hive sql与sq...原创 2019-11-12 09:51:14 · 439 阅读 · 0 评论 -
dao设计(五),反射的应用
在我们的dao框架设计中,sqlDao作为cacheDao的一个泛型参数,由于sqlDao和cacheDao实现了相同的接口,意味着他们有相同的方法和相同的参数,这样我们可以在cacheDao方法中利用反射方便的调用sqlDao中的方法,我们只需要获取aop中保存的方法信息然后调用即可。protected Long[] getIdsFromTarget() { Long[] v...原创 2018-03-06 08:42:25 · 266 阅读 · 0 评论 -
dao设计(四),预留实现(接口作为参数)
在查询缓存处理中,我们常常需要考虑一种情况,就是缓存不存在,然后需要去数据库中获取,如果每次都用if else来处理,那么代码看起来就会很冗余,现在我们来看下这种有意思的方式。在dao框架设计中,缓存处理相关的我们可以设计成一个类,如ObjectCacheManager,如更新缓存,删除缓存,根据id获取等通用方法,在获取方法上,我们希望如果getById获取不到数据,能预留一个方法去DB中获...原创 2018-03-01 19:36:47 · 1944 阅读 · 0 评论 -
dao设计(六),sql dao增删改查
sql封装在sql dao框架的架构开发中,重点需要处理的是对增删改查sql的封装,如何简化sql拼接操作,使上层应用能够很方便的接入开发并提升开发效率,下面是需要我们考虑的2个问题。 1. 对象关系映射ORM。 2. 多条件查询条件封装。增新增add操作对应是是sql dml中的insert操作,用于向数据库插入一条新的记录,在实际使用中,基本没人愿意每次插入新写一条inse...原创 2018-03-15 09:53:56 · 1640 阅读 · 0 评论 -
dao设计(三),缓存AOP拦截处理的几个思考
当我们发现我们可以用事件通知的方式来巧妙的实现缓存更新时,接下来需要考虑的就是如何用aop拦截方法并设置一些常量配置的问题了。 1. 首先考虑一个问题,例如每个DO实体对应key及缓存时间等配置我们是在启动初始化时全部设置好呢?还是在启动后动态设置? 个人认为,数量小可以在初始化设置,当量比较大或者在运行时很好获取时,运行时获取也是一个不错的选择。在此次缓存框架缓存配置信息我们采用了运行时原创 2018-01-17 20:10:15 · 780 阅读 · 0 评论 -
dao设计(二),缓存更新事件通知
观察者模式和消息监听回调函数是理解观察者的关键,一个为预定调用方法的接口,即抽象观察者。 - 观察者 观察者可以理解为主题(subject),观察者(observer)的一组作用关系,主题需要包含一组需要被通知的观察者集合,因此它需要添加,删除,通知观察者的方法,同时观察者需要一个接受通知的方法。 - 事件监听 事件监听机制涉及到事件源,事件监听器,事件对象三个组件,监听器一般是接口,原创 2018-01-05 14:16:00 · 543 阅读 · 0 评论 -
线上数据迁移
随着业务发展,总会出现一些系统重构及数据迁移,为了能最大限度的减少代码介入及平滑实现,最常见的方案为双写法。1.在某个访问低峰期间将老库数据同步到新库。 2.写操作同时作用在新库和老库上,读操作仍然读老库。 3.运行一段时间,观察新库和老库数据一致性。 4.停掉老库读写操作,读写全部转移到新库。为了保证数据的一致性,在最后切库之前,还是需要进行数据校验的。原创 2018-01-11 20:02:16 · 1111 阅读 · 0 评论 -
dao设计(一),缓存更新事件通知
场景: 在缓存应用中,我们常见做法是在增删改时使缓存失效,在查询时优先查询缓存,缓存不存在则从db中获取数据返回并更新缓存,如果我们采用一般常见写法,代码会比较冗余且有很多重复,解决这种重复代码有很多种方法,如采用模板模式,但今天我想要讲的是采用注解加事件通知方法实现。 设计: 1. 设计点在于查询,当我们调用一个查询方法时,我们希望优先查询缓存,缓存不存在则查询db,然后根据db返回结果更原创 2018-01-04 20:45:53 · 557 阅读 · 0 评论 -
怎样在公司混成一个码畜
到新公司,如果有几年工作经验的程序员,过去应该也算个负责人或资深码农,一般还是受领导重视会给机会的,可有些同事却混成了一个比应届生还差的码畜了,埋怨自己老是遇人不淑却又没分析过缘由,作为一个在码农圈挣扎的小码畜,且听我慢慢道来。码畜第一步:默默干活,来者不拒 俗话说,会叫的孩子有奶吃,作为程序员,平时就话少,对待巧舌如簧的运营妹子,一夸两句就忘了自己是谁,需求接的那叫一个欢,平时出现一两个BUG原创 2017-12-09 21:33:40 · 1333 阅读 · 0 评论 -
谈程序员的抽象思维
作为一个程序员,有几点比较重要,其中一点就是抽象思维,判断一个程序员的水平,我们如果单纯从代码上分析,很重要的一点就是代码结构及抽象程度,培养自己的抽象思维,可以从这几点入手。 一.功能分析 在一个项目中,开发前的功能分析很大程度决定了我们项目进展的可靠程度,当我们开始进行一个项目前,如果连基本的边界,模型都没有理出来,去开发就会变成一个盲人摸象的过程,开发着就突然不知道怎么进行下去了,预估的时原创 2017-12-09 21:17:50 · 2012 阅读 · 1 评论 -
优惠券设计-获取随机码
背景: 策划要求优惠券增加一个功能,需要将优惠券作为一个商品去购买,当优惠券为随机码券,用户下单时,从随机码表中取出一个随机码并绑定到对应的用户。相关表的关系如下:随机码表:包含随机码,优惠券id,使用状态等字段。优惠券表:包含优惠券使用条件和效果,领取数量,当优惠券类型为随机码券时,对应多个 随机码。用户优惠券关系表:包含用户id,优惠券id,状态等字段。最初做法:当下单时,首先原创 2017-09-06 00:24:15 · 6388 阅读 · 0 评论 -
用户锁
一、用户锁的作用,锁定用户后有那些限制1.用户锁表包含锁定状态,用户ID,锁定原因,版本号,操作时间,主键为用户ID,添加了约束条件,用户ID和锁定状态的唯一性。同时也包含一张用户锁记录表。记录操作人,操作原因,锁定原因等,包含约束条件,用户ID和操作时间 2.用户被锁定后将不能购买。二、如何解锁后台解锁。三、锁在订单中的作用被锁定的用户将不能购买,用户设备不合法等。四、如果我设计可能抛出锁用户异原创 2017-02-17 10:40:13 · 622 阅读 · 0 评论 -
Class.getName和Class.getCanonicalName[论坛-01]
对于大部分类来说,这两个方法没有什么不同,但对于array来说,区别就显示出来了,Class.getName是 [Ljava.lang.String之类的表现形式,而getCanonicalName返回的就是跟我们声明类似的形式。在load class的时候,需要的也是getName这种的名字。在hql的泛型查询,我们需要使用Class.getCanonicalName这种形式来获取对象名称转载 2014-07-06 11:29:30 · 660 阅读 · 0 评论