springboot
文章平均质量分 55
雪中鱼01
所谓专家,就是在一个很小的领域里把所有的错误都犯过了的人
展开
-
代理模式和策略模式的差别
策略模式的主要目的是将一组相关算法封装到一系列策略类中,使它们可以互相替换,并让客户端代码可以根据需要选择合适的策略。总结一下,代理模式关注的是如何在访问实际目标对象时添加额外功能,而策略模式关注的是如何在运行时动态地选择合适的算法或行为。代理模式主要解决的问题是关注点的分离,而策略模式主要解决的问题是算法和行为的可替换性和扩展性。代理模式的核心是替代和控制对原始对象的访问,而策略模式的核心是选择合适的算法或策略来解决问题。总结:从代码示例可以看出,代理模式和策略模式的关键差别在于它们的目的和应用场景。原创 2023-04-23 10:20:09 · 846 阅读 · 0 评论 -
多用户并发操作的解决方案,同步锁的具体实施方法
一:并发操作出现的原因原因:多个动作在一瞬间同时操作同一数据现象:多人在某一瞬间通过相同的方式操作同一条数据 多人在某一瞬间通过不同的方式操作同一条数据 在某一瞬间,同一动作,多次执行二:并发举例及解决办法针对上述的三种的情况,分别以实际情况进行举例。【多人在某一瞬间通过相同的方式操作同一条数据】1.某仓库系统有一品牌商品A,商品A在数据库中只允许存在一条记录,库存的数量是这条数据的一个字段,现有库存100件,在某一天到货了1000件。由于数量比较大,现在需要10名操作员去原创 2022-02-03 20:59:09 · 6361 阅读 · 0 评论 -
java API接口签名授权安全认证问题—基于HMAC的rest api鉴权处理
创建一个拦截器public class AkSkAuthInterceptor implements ClientHttpRequestInterceptor { private static final String HEADER_X_CONTENT_MD5 = "X-Content-MD5"; private static final String HEADER_X_VERSION = "X-Sign-Version"; private static final Stri原创 2022-01-26 18:18:34 · 2616 阅读 · 0 评论 -
Lombok对与Java-16不兼容的jdk.compiler‘s内部包的访问
只需将我的一个项目从Java8升级到17(使用这里的最新版本)。在编译使用lombok的项目时,例如:<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId></dependency>maven编译器报告如下异常:[ERROR] Failed to execute goal org.apache.m原创 2022-01-20 00:03:41 · 2399 阅读 · 1 评论 -
面试套路问题总结6
1.数据库为什么使用B+树而不是B树B树和B+树的区别B树和B+树的区别主要有两点:在B树中,你可以将键和值存放在内部节点和叶子节点,但在B+树中,内部节点都是键,没有值。叶子节点同时存放键和值 B+树的叶子节点有一条链相连,而B树的叶子节点各自独立。使用B+树的好处1.由于B+树的内部节点只存放键,不存放值,因此,一次读取,可以在内存页中获取更多的键,有利于更快地缩小查找范围。2.B+树的叶节点由一条链相连,因此,当需要进行一次全数据遍历的时候,B+树只需要使用O(logN)时原创 2022-01-04 15:45:57 · 124 阅读 · 1 评论 -
java8 CompletableFuture使用示例
/** * 并发请求接口 将数据整理到一起处理 */ @SuppressWarnings("unchecked") private void parallelReqBigData(SegmentUVArgs segmentUVArgs, Map<Integer, Tag> tagMap, AreaTag areaTag) { List<SegmentTagsReply> list = Collections.synchroni..原创 2021-12-20 17:25:03 · 613 阅读 · 0 评论 -
Retrofit2+Okhttp3网络请求
一、引入依赖 <dependency> <groupId>com.squareup.retrofit2</groupId> <artifactId>retrofit</artifactId> <version>2.0.0-beta4</version> </dependency> <原创 2021-11-28 16:22:36 · 552 阅读 · 0 评论 -
SpringAOP+注解实现简单的日志管理
一、写一个自定义注解注解中包括配置方法所在模块名称,以及功能名称,当然我们在注解里可以自定义。@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.METHOD,ElementType.PARAMETER})public @interface LogInfoAnnotation { //模块名 String moduleName(); //操作内容 String desc();}二、建切面类.原创 2021-11-12 11:38:02 · 784 阅读 · 0 评论 -
Spring Cloud Gateway(读取、修改 Request Body)
Spring Cloud Gateway(以下简称 SCG)做为网关服务,是其他各服务对外中转站,通过 SCG 进行请求转发。在请求到达真正的微服务之前,我们可以在这里做一些预处理,比如:来源合法性检测,权限校验,反爬虫之类…之前是在各个微服务的拦截器里对来解密验证的,现在既然有了网关,自然而然想把这一步骤放到网关层来统一解决如果是使用普通的 Web 编程中(比如用 Zuul),这本就是一个 pre filter 的事儿,把之前 Interceptor 中代码搬过来稍微改改就 ..原创 2021-11-02 15:25:40 · 2614 阅读 · 0 评论 -
‘The client noticed that the server is not a supported distribution of Elasticsearch‘ 报错及解决办法
django项目运行的好好的,突然接口查询错误。观察报错信息{ "code": 400102, "message": "请求错误", "data": { "detail": "The client noticed that the server is not a supported distribution of Elasticsearch" }}搜索百度无果,随搜索谷歌查询到新闻链接链接如下:https://www.there原创 2021-08-11 13:16:49 · 6518 阅读 · 0 评论 -
ThreadLocal存List遇到的坑
背景项目有个需求,存储一个类成员变量。供类中的各个方法使用,是在easyexcel 中最一开始没有注意到service是单例模式的,所以每回存取requiredColIndexs的需要验证的列索引有可能是上一个模版的。后来加了threadlocal后,发现还是有异常。@Slf4jpublic class TemplateExcelListener extends AnalysisEventListener<Map<Integer, String>> {原创 2021-07-31 22:34:45 · 1821 阅读 · 0 评论 -
抽象工厂和建造者模式实现rpc调用小框架
public interface SdkClient { <T> SdkResponse<T> execute(SdkRequest<T> request);}创建jie原创 2021-06-10 16:26:48 · 234 阅读 · 1 评论 -
读spring-cloud-netflix-eureka-server项目源码笔记
InstanceRegistry实体注册类中实现springevent事件private void publishEvent(ApplicationEvent applicationEvent) { this.ctxt.publishEvent(applicationEvent); }写一个发布事件方法,让所有的事件都传递给一个父类ApplicationEvent 从而发布事件统一了事件发布代码的编写风格。...原创 2021-05-11 16:49:02 · 101 阅读 · 0 评论 -
多节点服务器定时任务重复处理的几种方案
1.使用zookeeper做分布式锁@Componentpublic class MutexConfig { @Value(value = "${zookeeper.host}") private String zkHost; public Boolean getLock(String lock, Integer acquireTime, Integer sleepTime) throws Exception { RetryPolicy retryPolicy = new Expone原创 2021-05-07 18:16:45 · 1874 阅读 · 0 评论 -
rocketmq学习总结
rocketmq发送同步消息2.异步消息3.发送单向消息消费消息负载均衡顺序消息同一个业务的消息 发送到同一个队列当中去就可以了同一个订单id对应的消息 发送到同一个队列当中去消息的长度大于4mb时,最好把消息进行分割sql过滤事务消息事务消息生产者总结:mq的作用1.结耦2.流量的削峰3.数据的分发集群的搭建双主双从监控:1 mqadmin管理工具2.集群的监...原创 2021-04-18 14:02:07 · 163 阅读 · 0 评论 -
将excel导入转化为json格式数据
运用gson将每个表格第一行作为列名public static JsonObject getExcelDataAsJsonObject(File excelFile) { JsonObject sheetsJsonObject = new JsonObject(); Workbook workbook = null; try { workbook = new XSSFWorkbook(excelFile); } catch (InvalidForma原创 2021-04-16 17:59:14 · 606 阅读 · 0 评论 -
SpringCloudGateway自定义Predict—实现根据不同域名切换不同鉴权方式
背景项目相同的接口想同时提供给外部和内部调用,因为外部调用采用的是签名校验,内部调用采用的是token校验,因为签名校验可以有效起到防止用户多次调用同一个接口的作用,想同一个url,只是域名不同,起到不同的鉴权方式考虑在网管层实现这一功能。Spring Cloud Gateway自带的一些断言参数列表项目中有用到path - id: openapi order: 2 uri: ${domain.openapi}原创 2021-04-16 17:46:04 · 1071 阅读 · 1 评论 -
监控神器-普罗米修斯Prometheus的学习总结
Prometheus架构:Prometheus 中文名称为普罗米修斯,受启发于Google的Brogmon监控系统,从2012年开始由前Google工程师在Soundcloud以开源软件的形式进行研发,2016年6月发布1.0版本。Prometheus 可以看作是 Google 内部监控系统 Borgmon 的一个实现prometheus是一个用Go编写的时序数据库,可以支持多种语言客户端,架构如下:Prometheus监控模式目前,监控系统采集指标有两种方式,一种是『推』,另一种就是『原创 2021-03-30 13:26:55 · 2798 阅读 · 0 评论 -
面试套路问题总结5
1.elasticsearch的问题1.为什么要使用Elasticsearch? 因为在我们商城中的数据,将来会非常多,所以采用以往的模糊查询,模糊查询前置配置,会放弃索引,导致商品查询是全表扫面,在百万级别的数据库中,效率非常低下,而我们使用ES做一个全文索引,我们将经常查询的商品的某些字段,比如说商品名,描述、价格还有id这些字段我们放入我们索引库里,可以提高查询速度。2.elasticsearch 的倒排索引是什么传统的我们的检索是通过文章,逐个遍历找到对应关键词的位置。而倒排索引,原创 2021-02-26 21:18:37 · 267 阅读 · 0 评论 -
面试套路问题总结4
1.理解synchronized底层原理synchronized有两种形式上锁,一个是对方法上锁,一个是构造同步代码块。他们的底层实现其实都一样,在进入同步代码之前先获取锁,获取到锁之后锁的计数器+1,同步代码执行完锁的计数器-1,如果获取失败就阻塞式等待锁的释放。只是他们在同步块识别方式上有所不一样,从class字节码文件可以表现出来,一个是通过方法flags标志,一个是monitorenter和monitorexit指令操作。1.1 同步方法首先来看在方法上上锁,我们就新定义一个同步方法然后原创 2021-02-06 10:32:46 · 282 阅读 · 0 评论 -
面试套路问题总结3
1.Java 修饰符访问控制修饰符Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。 default(即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。 private: 在同一类内可见。使用对象:变量、方法。注意:不能修饰类(外部类) public: 对所有类可见。使用对象:类、接口、变量、方法 protected: 对同一包内的类和所有子类可见。使用对象...原创 2021-01-11 22:21:49 · 353 阅读 · 0 评论 -
seata学习及原理总结、分布式锁的实现
tc seata服务器@globaltranctiontm 事务的发起方rm事务的参与方 Transaction Coordinator (TC): 事务协调器,维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚。 Transaction Manager(TM):控制全局事务的边界,负责开启一个全局事务,并最终发起全局提交或全局回滚的决议。 假设有三个微服务,分别是服务A、B、C,其中服务A中调用了服务B和服务C,TM、TC、RM三者之间的交互流...原创 2020-12-15 13:12:21 · 1873 阅读 · 5 评论 -
SpringCloud 教程总结 从Eureka到zuul
第一篇:服务的注册与发现Eureka创建服务注册中心Eureka作为服务注册与发现的组件2.1 首先创建一个maven主工程。**2.2 然后创建2个model工程:**一个model工程作为服务注册中心,即Eureka Server,另一个作为Eureka Client。下面以创建server为例子,详细说明创建过程:2.3 启动一个服务注册中心,只需要一个注解@EnableEurekaServer,这个注解需要在springboot工程的启动application类上加:.原创 2020-09-11 16:48:23 · 724 阅读 · 0 评论 -
面试套路问题总结2
1原创 2020-03-12 10:18:15 · 727 阅读 · 0 评论 -
仿微博社交平台系统设计[四]--使用springevent事件驱动模型(观察者模式)结合redis bitmap 运用 实现每日数据统计
观察者模式当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。何时使用:一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。如何解决:使用面向对象技...原创 2020-03-04 16:18:24 · 369 阅读 · 0 评论 -
仿微博社交平台系统设计[二]--使用redis的hash数据结构实现帖子点赞功能
Redis Hset 命令语法redis Hset 命令基本语法如下:redis 127.0.0.1:6379> HSET KEY_NAME FIELD VALUE 实例实例redis 127.0.0.1:6379> HSET myhash field1 "foo"OKredis 127.0.0.1:6379> HGET myhash field1...原创 2020-03-01 14:13:34 · 829 阅读 · 0 评论 -
LoadingCache简单实例,使用google缓存机制缓存每天数据库第一条数据并保存
使用LoadingCache缓存每天数据库第一条数据并保存 private LoadingCache<String, Integer> minId = CacheBuilder.newBuilder().expireAfterWrite(1L, TimeUnit.DAYS).build(new CacheLoader<String, Integer>() { @O...原创 2020-01-15 17:22:54 · 475 阅读 · 0 评论 -
JPA大坑 ,无法像mybaits一样在current_at字段,自动生成创建时间
JPA大坑 ,无法像mybaits一样在current_at字段,自动生成创建时间mybatisjpa下实体类的保存mybatis在mybatis项目中,我们一般会使用它的插件plus以扩充它的基本查询功能。另一方面,在阿里巴巴开发手册的规范中也提到,在数据库表创建的时候,一般会有一个create_time和update_time字段,它们的建表语句往往如下:'create_time' ti...原创 2020-01-14 14:33:22 · 607 阅读 · 1 评论 -
使用ScheduledExecutorService实现延时任务——延时发布视频
使用ScheduledExecutorService可以实现定时任务(例如定时发布的功能)先在类中定义局部变量 ScheduledExecutorService service = Executors.newScheduledThreadPool(50);@PostMapping("/ops/scheduled/publish") public Respons...原创 2020-01-07 14:12:30 · 1285 阅读 · 0 评论 -
Springboot 注解 @Cacheable自定义单个key设置expire超时时间 并在配置文件里配置
Springboot RedisCacheManager 类的配置 指定key的过期时间 并在配置文件里配置目的&效果在springBoot中配置了RedisCache,当使用@Cacheable注解时,默认为redisCache,通过在配置文件里设置不同key的过期时间,达到可自定义key过期时间的效果。方案step 1新建一个Map类,用于存放要设置的key...原创 2019-12-30 16:59:10 · 7587 阅读 · 0 评论 -
static 和 @postconstruct区别
摘自:stackoverflowstatic blocksare invoked when the class is being initialized, after it is loaded. The dependencies of yourcomponenthaven't been initialized yet. That is why you get aNullPointe...原创 2019-12-16 22:00:06 · 2758 阅读 · 0 评论 -
正则表达式过滤掉数字广告
public static String replaceSpecialNumeric(String numeric) { //广告数字的正则 String regex = "[A-Za-z0-9⓪①②③④⑤⑥⑦⑧⑨⑩零壹贰叁肆伍陆柒捌玖拾⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ㈠㈡㈢㈣㈤㈥㈦㈧㈨㈩㊀㊁㊂㊃㊄㊅㊆㊇㊈㊉]{5,}"; if (StringUtils....原创 2019-12-15 22:41:37 · 909 阅读 · 0 评论