![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
叫我坚哥
Java软件开发工程师,励志开发一款百万人以上使用的产品!
展开
-
商城系统开发从0到1(sku之设计与实现)
商城系统开发从0到1(sku之设计与实现)原创 2020-04-30 23:13:25 · 975 阅读 · 0 评论 -
商城系统开发从0到1(商品库存单独缓存)
商城系统开发从0到1(商品库存单独缓存)原创 2019-11-19 11:20:10 · 542 阅读 · 0 评论 -
商城系统开发从0到1(集成Lucene搜索商品信息)
首先说明为什么现在还要用Lucene,用ES他不香吗!因为没有服务器资源,所以无法单独部署ES服务,只能先使用Lucene顶着先,因为ES是基于Lucene的,且是分布式的,后期有服务器后还是要换为ES,现在就让我们先用案例集成Lucene吧。Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个...原创 2019-10-28 11:07:30 · 340 阅读 · 0 评论 -
Java 13 来袭,最新最全新特性解读
2017年8月,JCP执行委员会提出将Java的发布频率改为每六个月一次,新的发布周期严格遵循时间点,将在每年的3月份和9月份发布。目前,JDK官网上已经可以看到JDK 13的进展,最新版的JDK 13将于2019年9月17日发布。目前,JDK13处于Release-Candidate Phase(发布候选阶段),将于9月17日正式发布。目前该版本包含的特性已经全部固定,主要包含以下五个:...转载 2019-09-30 10:53:08 · 104 阅读 · 0 评论 -
程序员那些必须掌握的排序算法(下)
程序员那些必须掌握的排序算法(下)转载 2019-09-01 22:04:31 · 182 阅读 · 0 评论 -
程序员那些必须掌握的排序算法(上)
程序员那些必须掌握的排序算法(上)转载 2019-09-01 22:03:39 · 112 阅读 · 0 评论 -
为什么要重写equals和hashcode
package com.macro.mall.component;import java.util.*;/** * 参与equals函数的字段,也必须都参与hashCode 的计算。 */public class Test { private int num; private String data; public Test(i...原创 2019-09-01 21:03:14 · 118 阅读 · 0 评论 -
乐观锁和悲观锁
一、乐观锁总是认为不会产生并发问题,每次去取数据的时候总认为不会有其他线程对数据进行修改,因此不会上锁,但是在更新时会判断其他线程在这之前有没有对数据进行修改,一般会使用版本号机制或CAS操作实现。version方式:一般是在数据表中加上一个数据版本号version字段,表示数据被修改的次数,当数据被修改时,version值会加一。当线程A要更新数据值时,在读取数据的同时也会读取vers...转载 2019-09-01 20:49:01 · 116 阅读 · 0 评论 -
商城系统开发从0到1(介绍篇)
首先做下自我介绍,本人目前工作经验一年,从事Java开发,很高兴公司给了一次机会可以从0到1开始开发一套完整的电商系统,但是以我目前的经验来说,肯定会遇到一系列的问题。本博客会连载,持续更新,直到项目开发完成,目前已规划到2021年。本博客不会涉及到公司相关隐私,只会把自己开发过程中遇到的难题,和如何解决的,和一个整体的架构设计和构想会在博客中记录下来,希望大家关注下。20190626-2...原创 2019-06-26 11:48:13 · 701 阅读 · 0 评论 -
商城系统开发从0到1(Rabbitmq延迟队列)
Rabbitmq实时队列很多人都用过,本文就讲解下延时队列。延时队列的使用场景有很多,一般用来做延时的消息推送,比如订单取消前的通知,还有消息通知。首先定义消息通知队列枚举类型@Getterpublic enum QueueEnum { /** * 消息推送队列 */ QUEUE_PUSH_MESSGAE("mall.pushMessgae...原创 2019-08-13 18:04:30 · 303 阅读 · 0 评论 -
商城系统开发从0到1(Redis实现拦截重复请求)
private boolean limitRequest(String id) { boolean result = false; String key = String.format("id:%s", id); BoundZSetOperations<String, String> zSetOperations = stringRe...原创 2019-08-13 18:03:45 · 292 阅读 · 0 评论 -
商城系统开发从0到1(MapStruct属性复制)
说到Java的属性复制,大家很快就想到了 BeanUtils.copyProperties();,其中Apache下的属性复制,其性能很慢,用到了反射的机制,还记录到了很多日志,Spring下的属性复制比Apache快很多,但是毕竟使用了反射,性能还是比较慢,这里推荐大家使用MapStruct属性复制。 <dependency> <gr...原创 2019-08-13 17:36:57 · 168 阅读 · 0 评论 -
商城系统开发从0到1(解决事务和锁引起的问题)
开发商城系统的过程中遇到了个问题,在这里记录一下。说到商品,那就有库存的问题,那么如何解决在分布式系统下商品的库存问题呢,那肯定要考虑到分布式锁了,一开始想自己实现Redis分布式锁,后面看到网上有开源的klock 码云地址:https://gitee.com/kekingcn/spring-boot-klock-starter,上手非常的简单。在这里就不多做介绍了,那接下来问题来了,附...原创 2019-08-13 16:34:56 · 311 阅读 · 0 评论 -
Java线程池实操,带你直接上手使用
现在讲解Java线程池的博客很多,本文不再细说理论,直接教大家使用,jdk环境1.8首先直接在想使用多线程池的类中实例以下方法,无需添加任何依赖private final static ExecutorService executors = new ThreadPoolExecutor(4, 40, 300L, TimeUnit.SECONDS, n...原创 2019-06-18 14:57:21 · 309 阅读 · 0 评论 -
Java通过反射给通用方法赋值
User user =new User();//方法调用getObj(user ,date,user,userId);//通用对象赋值方法private <T> T getObj(T t,Date date,String user) throws Exception { Class clazz = t.getClass(); clazz.ge...原创 2019-06-18 14:47:42 · 1254 阅读 · 0 评论 -
CompletableFuture实操,提升并发处理能力
在Java8中,CompletableFuture提供了非常强大的Future的扩展功能,可以帮助我们简化异步编程的复杂性,并且提供了函数式编程的能力,可以通过回调的方式处理计算结果,也提供了转换和组合 CompletableFuture 的方法。 它可能代表一个明确完成的Future,也有可能代表一个完成阶段( CompletionStage ),它支持在计算完成以后触发一些函数或执行某些动作...原创 2019-06-18 14:39:22 · 3422 阅读 · 1 评论 -
Springboot文件上传--资源映射
关于Java的文件上传有很多种方式,可以直接上传本地,或者上传七牛云,或者搭个HDFS文件系统,但是后者相对麻烦。本文采用的方式是使用springboot进行文件上传,并进行资源映射,可直接通过本地服务访问存储本地的图片。application.yml文件中,配置统一的存储文件路径。包括本地路径和返回给前端的路径ueditor: config: config.json un...原创 2019-06-18 12:00:59 · 820 阅读 · 0 评论 -
前端传大量数据到后台进行导出
各位小伙伴有没有遇到过这种需求,前端有大量的数据需要传到后台,在将这些数据导出成excel。常用的导出都是前端通过超链接的请求方式,但因为超链接是get请求,无法传大量的数据。如果你想到了用ajax,那么很抱歉,因为ajax不支持流形式的导出,所以是无法导出excel的。下面写出我的解决方案,通过form表单的形式进行导出。HTML代码:通过提交表单,将数据传到后台,注意要使用ifra...原创 2019-01-21 15:06:41 · 3630 阅读 · 0 评论