自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(143)
  • 收藏
  • 关注

原创 restful

https://www.cnblogs.com/lasdaybg/p/10180201.html

2021-07-28 18:38:21 159

原创 分页顶顶顶顶

package cn.hutool.core.util;public class PageUtil { public PageUtil() { } public static int getStart(int pageNo, int pageSize) { if (pageNo < 1) { pageNo = 1; } if (pageSize < 1) { page.

2021-07-28 14:37:35 166

原创 mapstruct 代替beanutil

https://www.cnblogs.com/homejim/p/11306313.htmlhttps://www.cnblogs.com/homejim/p/11313128.html这篇文章还让我学到了entity 和 dto的区别entity是服务内部自己用 映射数据库dto是传递给外部 首先比entity少的就是主键id字段...

2021-07-28 13:03:33 188

原创 分布式事务+远程调用服务异常事务回滚

同一个商品在很多仓库都有库存 库存-锁定是剩余的商品数量下了一个订单 里面有多件商品 要分别找每个商品是否还有库存没有在一个订单下的多个商品只要有一个是没有库存的 整个订单就要回滚写Sql语句的时候 先不用找到具体的字段关系 可以先用数字来代替 然后在数据库哪里好使了就焕抛异常来判断返回的值是什么 而不是用 if else来判断分布式事务异常回滚在同一个服务器中很简单如果在一个逻辑下包含本服务自身事务异常回滚+远程服务器里的事务异常回滚就涉及到分布式异常在分布式事务中A1.

2021-06-22 10:02:24 3452

原创 拦截器类与配置类threadlocal+filter interceptor

拦截器 实现 spring家的handlerInterceptor可以看下就是拦截前 中 后public interface HandlerInterceptor { default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { return true; } default void p

2021-06-21 08:49:27 144

原创 如何做到接口幂等性

防止接口多次提交 保证幂等性什么情况需要幂等性数据库查询 天然幂等性更新 sql更新无论发生多少次 数据库都是1删除 无论删除多少次 第一次删除成功后 就已经没有相应的id 对应无法删除插入 插入都是主键唯一 不重复的 幂等性更新库存 如果不断加库存 那么这个就不是幂等性的更新插入 不带主键唯一 就不是幂等性token机制做到幂等性自己的思考类似验证码 既然是幂等性 肯定需要Redis来限制次数 并且要与客户端浏览器有关系分布式集群下 用共享的redis来存储 当前这个

2021-06-21 08:49:18 171 1

原创 配置类绑定配置文件读取 @cofigurantionProperties

https://www.cnblogs.com/FraserYu/p/11261916.html从前配置类关联配置文件 都是在@Configuration的类中用@Value(“”)指定属性名来获取配置文件中的值但是这并不优雅 而且重复的value有时让我们忘记 属性 所以使用@ConfigurationProperties 来抽取配置文件 并注入到容器中 配置类可以直接关联这个配置文件类声明配置文件类上图进行了1.绑定配置文件 和2. 接纳代码手动set覆盖属性 get获取属性配置类与配置文

2021-05-28 12:30:53 326

原创 feign远程调用会新创建一个请求,原有的浏览器请求无法共享session

feign内部的源码遍历容器中的拦截器 对当前的feign请求进行拦截并发的请求这么多 拦截器如何拦截这个请求 并且知道是这个请求 并且对请求操作每一个客户端的一个请求都是一个线程请求过来都是在这一个线程里 在一个线程中拿取东西 就可以用threadloacl...

2021-05-20 11:48:35 558

原创 httpsession cookie 单点登录 顶域

微博回调地址 跳转回来会携带code就是一个访问服务器的请求 我们只要在本地写一个controller就能将code获取

2021-05-10 16:15:41 364 1

原创 短信验证码+token唯一机制+防止重刷+幂等性

将蓝色标记变成可配置的 怎么做??一个文件要是想可配置 就是从配置文件中取首先当前的函数要和配置文件关联上 你要知道配置文件在哪里那么需要在函数所在的类上 加下图注解prefix就是指定在配置文件中以该字符串开头的 配置都是我这个函数使用的如果这个发送短信的函数要想被别人使用 那所在的类就应该放到容器里 他不是service 不是controller 不是mapper 我们就加component注解 这样谁要引用就autowired 最终形成一个工具类外部请求后端服务器,去使用发送.

2021-05-07 22:24:08 2136

原创 多线程Future设计模式+异步处理

想实现异步发送邮件的功能,比如说,在客户成功提交了一个订单时,程序需要发送邮件给管理员和客户,然后报告说订单提交成功。如果不用异步方式,那么当邮件发送很耗时的时候,用户就要等很久才能看到成功提示,因此我想,在保存了订单数据后,就用另一个线程来发送邮件,从而当前线程立即就可以向用户反馈订单提交成功的提示信息。这个就像thread-per-message模式只不过有了futuredata可以用来存储结果 仍然是主线程立即结束返回响应 新启线程异步做委托的任务 主线程利用空闲时间去做其他事 多线程资源利

2021-04-28 14:26:56 328

原创 多线程技术!=异步效果!=高并发情况!=并发概念

多线程是一种技术同步/异步是一种想要达到的效果 他不止可以用多线程实现高并发是遇到的情况异步与多线程的区别同步正常结束 走到一半新起一个线程异步回调结果 多线程的Thread-per-Message模式就是这样达到了一个异步的效果我们用多线程技术 使用synchronized等锁 实现了同步的效果并发 并行https://blog.csdn.net/liuhuiteng/article/details/88371292并发当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同

2021-04-27 19:31:01 208

原创 多线程work thread模式+线程池demo模拟

设想在工厂里 有一个管道 客人将请求放到管道里 传递员工工作人员读取请求单 然后去工作 没请求时候就等着客人看不到工厂内部构造 他只看到了管道 什么都不知道在客户端没有 工作人员这个类 客户端看不到 只能看到管道说明管道帮助创建和启动了工作人员类 这很像threadpool多线程就是 有一个基础目标类/被操作类 里面的方法都是供线程使用的该类是命定当前多线程要完成什么业务 制定规则 他里面写上方法 写上调度所有的线程私有维护一个目标类实例 可以用构造函数初始化该实 以此达到所有线程共享

2021-04-27 16:45:05 355 1

原创 多线程thread-per-message设计模式+异步消息

感谢看了这篇书 我才终于懂了异步消息的概念现实场景:主任委托员工A去打印 委托员工B去买水 主任不关心他们返回的结果主任就接着做自己的事情了该模式又成为多线程下的代理模式 多线程下的适配器模式该模式需要以下几个角色:客户访问类代理类 Host 在客户端只创建一个host实例被代理类 Helperclass Client{ public static void main(String[] args) { System.out.println(Thre

2021-04-26 14:59:18 121

原创 多线程read-write lock模式

设想教师里 老师在黑板上写字 同学在下面读读+读 无需等待读+写 写等待读释放锁写+读 读等待写释放锁写+写 后来的等待总结:读都是共享的只要有写 就有互斥等待 谁是后来的 谁就等待该模式需要四个类共享资源类读类对比互斥独占,读时也只能一个一个线程读。该模式读锁可以共享数据资源 不用一个一个读 但是却因为逻辑过重未必比互斥独占来的快写类读写锁类该模式的读写锁 是程序员自己编写的一套逻辑锁(比如JUC) 对JAVA基层的物理锁进行封装 看似是两个锁 其实是两个逻辑锁在共用

2021-04-25 21:41:02 139

原创 springcache

分布式锁有单独的框架去做但面对不同的缓存 spring应该如何对接缓存功能大体相似 spring可否有一套框架操作不同的缓存 就像jdbc操作所有的数据库要想通过一个框架去应对所有的缓存模式缓存管理器按照业务来划分缓存的区 以后想要删除所有薪水相关的缓存 就删除这一个区就好了要有面向不同缓存模式的 动态生成配置类管理器的 代码CacheAutoConfiguration然后动态的去生成对应的选择的缓存模式 这样就可以操作无限种缓存 只要实现缓存管理器接口 然后生成对应的配置类

2021-04-25 16:58:33 59

原创 redisTemplate从单机存储到分布式锁的使用

谷粒商城项目中Redis部分阅读22222222分布式缓存不同服务器如何共享同一个缓存 并保证缓存的一致性引坐标 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>

2021-04-22 21:17:21 187

原创 策略模式及其重构场景

https://guisu.blog.csdn.net/article/details/7558249如需要提供多种查找算法,可以将这些算法写到一个类中,在该类中提供多个方法,每一个方法对应一个具体的查找算法;当然也可以将这些查找算法封装在一个统一的方法中,通过if…else…或者case等条件判断语句来进行选择。这两种实现方法我们都可以称之为硬编码硬编码增加新功能 违反开闭原则算法(策略)现在与对象耦合在一起 如何将对象和算法分离开 使算法与客户端分离开来策略模式很像工厂模式只不过工厂模式

2021-04-22 17:16:01 118

原创 设计模式重构+消除类型码 switch if else 语句

看下面这个类 把他当做一个查询类把 根据职位种类 返回工作内容很简单 都没有具体的对象生成 只是用一句话练习: 一步步改进当前类违反开闭原则 如果想要再加入一种职务类型 那就要修改原代码 可扩展性低尤其观察work其实非常像简单工厂模式 用if else type来equals 返回指定产品我们可以对其修改变为工厂模式创建好的类型在work类中如何引入 如何被用...

2021-04-21 18:45:08 317

原创 小白进来学线程通信

wait notify的生产者创建者模式,在具体场景中怎么使用 如何创建类 并调用。需要下面这三个类管道类 (包含两个方法一个给生产者线程用 一个给消费者线程用 类中一定会有一个变量像flag一样 给这两个方法用来判断 作为守护模式的守护条件 )生产者线程类消费者线程类其实和正常的线程创建很像 只不过将目标类称为管道类 线程调用者被区分成两种线程类而已在学习生产者消费者模式之前先来学守护模式 简单来说就是只有一个wait 一个notify 单方面的唤醒守护模式注意wait和notify操

2021-04-21 14:20:42 86 1

原创 并发多线程银行取钱案例深入剖析

不要只读书 只看视频看完再背着打代码也不行在案例之前自己思考应该怎么打代码取钱的案例学了N遍 但你自己打不出来使用多线程会涉及三个角色操作对象线程类(包含run方法 线程业务所在)客户端(生成多个线程实例调用run方法 并且多个线程维护一个操作对象 这样达到多个线程共享资源 才会有线程之间的调度控制 对象锁互斥等)线程类是包含业务run方法的类 线程是线程实例调用start的之前没有这个清楚的认知 如果要我三个线程交替打印ABC我会创建三个线程类(三个run方法) 每一个线程类维护

2021-04-19 12:19:03 338

原创 重新组织数据

== 的作用:  基本类型:比较值是否相等  引用类型:比较内存地址值是否相等equals 的作用:  引用类型:默认情况下,比较内存地址值是否相等。可以按照需求逻辑,重写对象的equals方法。误区大解释:引用对象和值对象,我一直以为引用对象是类,值对象是字段。原来不是这样,是以意义区分,不是数据结构区分。引用对象和值对象区分,像在现实生活中可以抽象为一个事物,有一定的行为,比如Aniaml类。值对象是日期Date类 Money类这种完全由数据值来定义的值类。类本身的概念是单纯储值,另一

2021-04-17 15:36:34 112

原创 在对象之间搬移特性

如果一个函数或者字段与另一个类交往更密切,可以移动字段或函数依赖情况判断是否要在原类增加委托函函数,如果源类也在调用这个函数,引入一个对象比委托更好。字段迁移1.封装字段,数据隐藏,讲数据和行为分开,对于字段不应该生明为public封装字段的好处,除了第一点,还有第二点便于子类覆盖父类get函数进行新的计算class fathet{public Integer getNum(){return mums;}class son{public Integer getNum(){ret

2021-04-17 11:12:16 69

原创 你可给我坚持写算法题

你看看while()语法现在你都写成啥样了以前是这个样在while的条件语句里你要写上条件

2021-04-12 10:06:08 63

原创 黑大学子在学effective java

毕业前把这些都学完 只要坚持就可以

2021-04-09 09:52:28 49

原创 在学设计模式(结构型模式)

1–点击阅读网站教程2—围观设计模式–作者感悟3—详细总结4—工程师总结

2021-04-08 17:18:40 80

原创 黑大学子在学设计模式(创建型)

1–点击阅读网站教程创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是“将对象的创建与使用分离”。单例模式在计算机系统中,还有 Windows 的回收站、操作系统中的文件系统、多线程中的线程池、显卡的驱动程序对象、打印机的后台处理服务、应用程序的日志对象、数据库的连接池、网站的计数器、Web 应用的配置对象、应用程序中的对话框、系统中的缓存等常常被设计成单例。J2EE 标准中的 ServletContext 和 ServletContextConfig、Spring 框架应用中的 Appli

2021-04-01 20:38:55 62

原创 黑大学子在学设计原则

以下文章大部分出于 可以自行阅读 而且都要阅读围观设计模式–作者自己的感悟转载总结的设计模式–全备教程设计模式学习网站–基本定义开闭原则修改关闭 扩展开放 我一直以为是抽象类写的好 然后实现类扩展 原来是不可以新增功能就对抽象类进行修改的 可以新写一个类继承当前的抽象类 然后在里面新增功能1—点击阅读开闭原则定义2—开闭原则简单案例3—进阶案例也不难4—总结里氏替换原则在继承关系中,父类的对象如果替换为子类的对象,他原来执行的行为依然保持不变,那么这样的程序才符合里氏替换原则,否则违

2021-04-01 18:06:09 62

原创 重构你的代码extact method

第六章重新组织函数提炼函数解决过长函数的方法第一条将函数中的一段代码放进一个独立的函数当中,并且让函数的名称解释该函数的用途如果函数的力度足够小,那么他就会达到很大的复用率即使想要提炼的函数非常非常短,哪怕函数当中只有一句话,但是如果他能达到很高的复用率,并且它的函数命名可以阐述清楚它的作用我们就应该提炼这个函数提炼函数的过程当中可能会涉及到形参,这个行参有可能是由原函数传递给新的提炼函数的一个变量,也有可能仅仅只存在于新建的函数当中那么比较复杂的一定是原函数传递了一个变量给新建的这

2021-04-01 10:26:17 79

原创 微服务互相调用

微服务互相调用服务A 调用远程服务Bfeign为了彼此发现 大家要一同注册到NAOCS 在各服务的配置文件中配置相同的注册中心地址引入open-feign maven坐标并都在启动类上开启服务注册和发现功能 注解@EnableDiscoverClient使其他服务可以发现自己在服务A 中创建feign包 在包下创建接口 声明式的远程调用声明注解@FeignClient() 调用那个远程服务的想调用服务B的什么方法 就照搬服务B该方法的完整请求路径 (服务B的类的mapping+方法m

2021-03-23 22:40:41 1345

原创 两个微服务同时启动端口号错乱

天啊 卡了我整整两个半小时啊啊啊啊啊啊啊啊啊https://blog.csdn.net/xhf852963/article/details/102564107就是不走bootstrap配置的端口号最后我想那把配置文件的名字改为application吧好使了。。。

2021-03-23 12:06:44 488

原创 mybatis-plus学习

官网IService基本封装了baseMapper(Dao)对于数据库的操作所以 业务service实现Iservice就可以调用service 也可以调用 this.basemapper 的函数来进行数据库的操作还可以用wrapper 条件构造器 做为参数 wrapper如同最简便的sql语句上图中 如果想要查找符合条件的数据库记录 就可以在业务service(业务Service一定实现ISERVICE) 中直接调用this.save(new QueryWrapper<Enti

2021-03-21 21:40:10 147

原创 bishe

多台机器相同的代码 来提供同一个服务多台机器就是集群服务与服务之间的调用是分布式的 但是集群内部未必是分布式的

2021-02-12 12:50:02 675

原创 2021-01-22

数据库设计:作为一个博客论坛 牛客网为例用户表useridusernamepasswordgenderhead_url文章表idnamekind关联评论表iduser_comm_id

2021-01-22 19:42:11 70

原创 NIO随笔记录

http://www.52im.net/thread-2640-1-1.html学习2学习3这里是引用举个生活中简单的例子,你妈妈让你烧水,小时候你比较笨啊,在哪里傻等着水开(同步阻塞)。等你稍微再长大一点,你知道每次烧水的空隙可以去干点其他事,然后只需要时不时来看看水开了没有(同步非阻塞)。后来,你们家用上了水开了会发出声音的壶,这样你就只需要听到响声后就知道水开了,在这期间你可以随便干自己的事情,你需要去倒水了(异步非阻塞)。NIO 弥补了原来的 I/O 的不足,它在标准 Java 代码中提

2021-01-22 15:02:14 79

原创 索引的优点

索引是存储引擎层面的帮助服务器快速定位表的指定位置索引中存储数据,帮助服务器避免扫表,减少查找数据量避免排序和临时表的创建将随机I/O变成顺序I/O口诀快速查找 减少查表简单查找 我已存好共赢查找 不用排序层面从索引自身的结构 那就是排序 和 存值—>临时表 和 排序 的问题解决为服务器带来的影响 快查 少查为操作系统带来影响 进行磁盘I/O是顺序的...

2021-01-15 14:09:55 211

原创 mysql索引的排列顺序

索引的排序是按照定义索引的顺序来的索引的顺序要遵循三个规则要遵循最左前缀 无论是多个还是一个列的索引 都不应该跳过最左列 如果在查询语句当中 没有使用最左前缀的字段 就不会使用索引index_key1_key2_key3 是我们的索引即使使用select key_2 ,key_3 from table where 。。。越过了最左前缀 是不会使用到索引index_key1_key2_key3的不能跨越索引列index_key1_key2_key3 不能使用key1 key3字

2021-01-15 13:45:50 2439

原创 事务的隔离级别

自己理解的事物ACID原子性一致性隔离性持久性隔离级别读未提交 READ UNCOMMITTED导致脏读读已提交 READ COMMITTED解决脏读 无法解决两次读数值不一致 不可重复读可重复读 REPEATABLE READ保证在一个事物里多次的读取 读是数值一致的 无法解决当前读的事无下又被修改了导致幻读串行化 SERIALIZABLE行锁SET SESSION/层面 TRANSACTION ISOLATION LEVEL READ COMMIT

2021-01-13 16:36:04 65

原创 曾宪杰《大型网站系统与JAVA中间件实践》阅读记录

第一章 分布式系统介绍分布式定义:在网络上 多个节点组成的一个系统,各节点之间通过消息传递互相通信 并且协调行动完成系列操作背景阐述单核到多核的年代单线程-》单进程多线程-》多线程-》多机多线程线程和进程的区别结构上:进程由线程组成通信:线程notify wait 进程之间通信需要事件通知/回调对共享资源操作:线程sychronized 进程互斥锁(分布式)通信共享资源:线程在同一进程内本就共享 进程需要对资源进行序列化反序列化才可以多进程共享网络知识NIO BIO AIO节点与节点之

2021-01-03 23:18:00 137 1

原创 dubbo

一个服务通常分两个模块=实现功能的模块+对外提供接口以供调用的share(api)对外share的模块 发布maven的远程私服上其他服务需要调用就在pom中引入这个share dependecy进行接口调用现实公司都会自己创建一套公共所有接口 使用的response类属性包含 接口返回data 错误码 错误原因 业务是否处理成功等@FeignClient(name="myApplication",url="${myApplication-share}")public interface

2020-12-31 16:32:05 91

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除