摘要:
controller是线程不安全的,因为controller使用的是单例模式,不同的线程会对数据进行共享,导致数据混乱,没有实现我们想要的结果,除非定义的是常量,那就没有关系. 因为设计成单例模式的话,就不需要处理太多的gc,性能就可能得到提高 @RestController @RequestMap 阅读全文
摘要:
在开发系统的时候,你可能经常需要计算一个表的行数,比如一个交易系统的所有变更记录总数。这时候你可能会想,一条select count(*) from t 语句不就解决了吗? 但是,你会发现随着系统中记录数越来越多,这条语句执行得也会越来越慢。然后你可能就想了,MySQL怎么这么笨啊,记个总数,每次要 阅读全文
摘要:
1. 索引列不要使用函数和运算 2. 尽量避免使用 != 或 not in或 <> 等否定操作符 3.当查询条件为多个的时候,可以采用复合索引 4.范围查询对多列查询的影响 查询中的某个列有范围查询,则其右边所有列都无法使用索引优化查找。 举个例子,假设有一个场景需要查询本周发布的资讯文章,其中的条 阅读全文
摘要:
一、 技术背景你要了解吧 按照套路是要先装装X,谈谈JVM垃圾回收的前世今生的。说起垃圾回收(GC),大部分人都把这项技术当做Java语言的伴生产物。事实上,GC的历史比Java久远,早在1960年Lisp这门语言中就使用了内存动态分配和垃圾回收技术。设计和优化C++这门语言的专家们要长点心啦~~ 阅读全文
摘要:
常听见有人在问这几种类型的锁有什么区别,所以整理了这篇文章。 一、自旋锁 自旋锁是采用让当前线程不停地的在循环体内执行实现的,当循环的条件被其他线程改变时 才能进入临界区。如下: 使用了CAS原子操作,lock函数将owner设置为当前线程,并且预测原来的值为空。unlock函数将owner设置为n 阅读全文
摘要:
一、二叉树 特点:每个节点最多有两个子节点 完全二叉树:高度为k的二叉树,其1~h-1层为满结点,且其h层(叶子结点层)的节点从左至右依次排列(最多2^h-1个,最少0个) 满二叉树:除最后一层外,每个结点都有左右子结点的二叉树 平衡二叉树:任一结点的左右子树的高度差绝对值不超过1,且左右子树均为平 阅读全文
摘要:
RabbitMQ是流行的开源消息队列系统,使用erlang语言开发,由于其社区活跃度高,维护更新较快,性能稳定,深得很多企业的欢心(当然,也包括我现在所在公司【手动滑稽】)。 为了保证订单业务的消息数据不丢失,需要使用到RabbitMQ的死信队列机制,当消息消费发生异常时,将消息投入死信队列中。但由 阅读全文