java
文章平均质量分 50
冲冲冲 干就完了!
记录一下日常的错误,以及记录一些比较nb的技术。
展开
-
响应20毫米内的请求如何处理
把数据加工号,然后存在redis里,但是也有可能给redis弄满,所以这一方案还得进行redis的调优。解决方案一:从http调用请求修改,改为GRPC请求,因为http有许多多余的参数,header,cookie之类的,而GRPC没有那么多东西,所以能更快一点。然后上游服务http请求过来,再通过数据库去查,在返回。解决方案三:每30分钟,处理一次接口把它从redis里放在程序缓存里,去处理。需求:由于上游服务要求响应速度,必须要在10毫秒内返回结果,否则不能处理。原创 2023-11-16 15:46:26 · 196 阅读 · 0 评论 -
联合索引、覆盖索引和索引下推
联合索引(也叫组合索引、复合索引、多列索引)是指对表上的多个列进行索引。联合索引的创建方法跟单个索引的创建方法一样,不同之处仅在于有多个索引列。下面我们给出一个需求:查询表中以字母"L"开头的姓名及年龄。1、常规的写法(回表查询)优化写法(索引覆盖)因为我们要查询name和age。原创 2023-05-08 10:08:12 · 704 阅读 · 1 评论 -
Lock锁心得
获取lock锁的四种方法:lock(),trylock(),trylock(time,unit),lockInterruptibly()原创 2023-03-01 17:58:38 · 475 阅读 · 0 评论 -
JVM内存结构,Java内存模型,Java对象模型
JVM内存结构,Java内存模型,Java对象模型原创 2023-02-15 15:05:56 · 520 阅读 · 0 评论 -
为什么需要在拦截器删除threadLocal中的数据
根源:由于Entry的key弱引用特性(见注意),当每次GC时JVM会主动将无用的弱引用回收掉,因此当ThreadLocal外部没有强引用依赖时,就会被自动回收,这样就可能造成当ThreadLocal被回收时,相当于将Map中的key设置为null,但问题是该key对应的entry和value并不会主动被GC回收,threadLocal的应用主要是对一个线程内的变量进行传递不会创建对象,比如在全局日志里的应用,数据库连接池的应用也是。第一:因为在实际中的使用的时候,我们使用的tomcat的。原创 2023-02-06 17:51:53 · 1170 阅读 · 0 评论 -
利用mybatis拦截器注解处理sql
/ 通过mybatis的反射来获取对应的值,目的是找到方法的基础信息。建个类 实现 Interceptor接口,重写intercept方法;// id字段对应执行的SQL的方法的全路径,包含类名和方法名。这样就可以在每条sql的时候做判断,方便做统一处理。// 动态加载类并获取类中的方法。// 获取方法上的注解以及注解对应的参数。// 反射获取参数对象。// 获取拦截器拦截的设置参数对象。//获取名称 用来判断是否是入参。//首先获取该xml信息。//获取参数,然会做处理。原创 2023-02-06 12:01:23 · 908 阅读 · 0 评论 -
运用线程的一些问题,基础篇
线程的基本问题原创 2022-11-07 17:20:27 · 282 阅读 · 0 评论 -
堆排序(Java语言实现)
记录一下 写的不错的堆排序。原创 2022-11-02 18:43:53 · 114 阅读 · 0 评论 -
Spring Boot的自动配置原理
而诸多的XxxxAutoConfiguration自动配置类,就是Spring容器的JavaConfig形式,作用就是为Spring 容器导入bean,而所有导入的bean所需要的属性都通过xxxxProperties的bean来获得。那么所有其他的和这个类相关的属性都可以在全局配置文件中定义,也就是说,真正“限制”我们可以在全局配置文件中配置哪些属性的类就是这些。Spring Boot的出现得益于“比配置更熟悉”的理念,没有复杂的配置、难以集成的内容(集成了很多流行的第三方技术)。...原创 2022-08-31 11:36:30 · 92 阅读 · 0 评论 -
mvn打包中常用plugin个个插件总结
作用:主要是生命jdk编译版本,如果我们不告诉它我们的代码要使用什么样的 jdk 版本编译的话,它就会用 maven-compiler-plugin 默认的 jdk 版本来进行处理,这样就容易出现版本不匹配,以至于可能导致编译不通过的问题.作用:主要是将项目中的资源文件编译、打包;注意,资源文件不是源代码,一般是环境的配置文件,默认存在src/main/resources和src/test/resources中.作用:springboot的maven打包方式和传统的maven打包生成的结果不一样。原创 2022-08-25 16:33:24 · 818 阅读 · 0 评论 -
利用BeanMap进行对象与Map的相互转换
啦啦啦转载 2022-07-28 19:48:16 · 392 阅读 · 0 评论 -
Correct the classpath of your application so that it contains compatible versions of the classes io.
错误检查原创 2022-07-27 17:12:45 · 855 阅读 · 0 评论 -
线程池要通过ThreadPoolExecutor的方式去创建
线程池创建原创 2022-06-10 11:34:39 · 174 阅读 · 0 评论 -
java中对SPI的理解
java中对SPI的理解原创 2022-06-10 11:27:41 · 205 阅读 · 0 评论 -
java启动数据源报错
1.首先检查配置文件数据库是否配置正确。2.检查你配置的数据源,如果你就引了spring的。那在配置类上添加@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})如果你也引入了阿里的包<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter原创 2022-05-19 14:47:49 · 605 阅读 · 0 评论 -
shardingsphere :数据库分库分表
首先拉jar包<!--导入数据库驱动--><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope></dependency><!--导入分库 shardingsphere--><depend原创 2022-05-19 11:45:21 · 462 阅读 · 0 评论 -
类上<T extends U>有什么用
建二个类public class Query {}继承第一个public class QueryGo extends Query {}建立测试类public class user<T extends Query> { private T id; public static void main(String[] args) { user<Query> test1 = new user<>(); .原创 2022-04-20 17:05:45 · 295 阅读 · 0 评论 -
IDEA Eval Reset 使用方法
IDEA Eval Reset 使用方法安装插件离线安装方式1、下载插件下载地址:https://plugins.zhile.io/files/ide-eval-resetter-2.1.6.zip2、安装插件直接下载插件 zip 包(macOS 可能会自动解压,然后把 zip 包丢进回收站)通常可以直接把 zip 包拖进 IDE 的窗口来进行插件的安装。如果无法拖动安装,你可以在Settings/Preferences... -> Plugins 里手动安装插件(Install P原创 2022-04-11 14:48:32 · 8064 阅读 · 0 评论 -
关于redis序列化的问题
工作中遇到一个reids序列化问题,当你存储map的时候,传统的:GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer(); // 采用Json序列化 redisTemplate.setHashValueSerializer(jsonRedisSerializer); redisTemplate.setValueSerializer(jsonRedisSerializer原创 2022-03-31 12:03:54 · 1387 阅读 · 0 评论 -
@Autowired和@Resource的区别
转载:@Autowired和@Resource的区别是什么? - 知乎转载 2022-03-30 17:19:40 · 75 阅读 · 0 评论 -
微服务通过feign.RequestInterceptor传递参数
Feign支持请求拦截器,在发送请求前,可以对发送的模板进行操作,例如设置请求头等属性,自定请求拦截器需要实现 feign.RequestInterceptor 接口,该接口的方法 apply 有参数 template ,该参数类型为 RequestTemplate,我们可以根据实际情况对请求信息进行调整,示例如下: 创建自定义请求拦截器,在发送请求前增加了一个请求头信息,进行身份校验。 具体代码参考如下: 1 2 3 4 5 6 7.原创 2022-03-24 16:41:22 · 998 阅读 · 0 评论 -
Spring Cloud Gateway:GlobalFilter和GatewayFilter的区别与联系
. global filter和gateway filter区别1.1 接口定义不一样global filter和gateway filter是分别定义了一个接口,他们的结构看起来很像,下面是glogal filter的定义:// GlobalFilter自己就是一个单独的接口,没有任何继承关系,里面就一个方法filter。简单理解英文:// GlobalFilter是一个拦截样式,链路方式处理web请求,用来实现横切面,以及一些安全,超时等需求/*** Contract for int..转载 2022-03-24 14:17:53 · 2718 阅读 · 0 评论 -
spring中过滤器(filter)、拦截器(interceptor)和切面(aop)的执行顺序
1.程序执行的顺序是先进过滤器,再进拦截器,最后进切面。注意:如果拦截器中preHandle方法返回的为false时,则无法进入切面,例子如下@RestController@RequestMapping("/user")public class UserController { @GetMapping("/{id:\\d+}") @JsonView(User.UserDetailView.class) public User getInfo(@PathVariable St...转载 2022-03-24 10:50:33 · 4764 阅读 · 0 评论 -
java8-流的操作
流的操作流的使用一般包括三件事:一个数据源来执行一个查询;一个中间操作链,形成一条流的流水线;一个终端操作,执行流水线,并能生成结果中间操作操作 类型 返回类型 操作参数 函数描述符 filter 中间 Stream Predicate T -> boolean map 中间 Stream Function<T,R> T->R limit 中间 Stream转载 2022-03-22 15:05:01 · 458 阅读 · 0 评论 -
@JsonIgnore注解的作用
@JsonIgnore 这个注解作用:json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。主要是用在出参上,不让前端看到这个字段。我理解的就是将这个字段的set方法给干掉。Serializable 简单的了解,就是序列化是调用方法的set方法,反序列化就是调用get方法。serialVersionUID成员,如果你的类没有提供serialVersionUID,那么编译器会自动生成,而这个serialVersionUID就是对象的hash code值。那么如果加入.原创 2022-03-22 11:29:22 · 1916 阅读 · 0 评论 -
Redis集群模式
再认识redis集群前,若想先知道redis单机版的可查看,springboot整合redis。好了,下面开始了。每个redis实例可称为一个节点,安装redis并以默认端口启动是节点,不关闭,以另一个端口启动,是一个新节点。在另一台机器安装redis并启动,也是一个新节点。节点分为主节点 (master) ,从节点 (slave) ,数据从主节点向多个从节点上同步 。redis3.0开始支持集群,redis集群是没有统一的入口的,客户端(client)连接集群的时候连接集群中的任意节点(nod转载 2022-02-24 12:01:41 · 341 阅读 · 0 评论 -
jvm的类加载器和双亲委派机制
(1)启动类加载器Bootstrap ClassLoader,他主要是负责加载我们在机器上安装的Java目录下的核心类的 相信大家都知道,如果你要在一个机器上运行自己写好的Java系统,无论是windows笔记本,还是linux服务器,是不是都得装一下JDK?那么在你的Java安装目录下,就有一个“lib”目录,大家可以自己去找找看,这里就有Java最核心的一些类库,支撑你的Java系统的 运行。所以一旦你的JVM启动,那么首先就会依托启动类加载器,去加载你的Java安装目录下的“lib”目录中原创 2022-02-17 10:57:47 · 304 阅读 · 0 评论 -
内存耗尽之后,redis会发生什么
首先,我们在设置缓存的时候,要加一个过期时间,这样可以避免无效数据占用大量缓存。也可以选择加集群。但是即使加过期时间,也有可能内存会满,那redis会发生什么呢。这个时候就会用到内存淘汰策略,那么什么是内存淘汰策略呢。他就相当于清除掉那些占用内存并且使用不太频繁的数据,淘汰掉这些不活跃数据来清理内存。我们知道,redis设置配置文件的maxmemory参数,可以控制其最大可用内存大小(字节)。config set maxmemory 1GB 来动态修改...原创 2022-02-09 11:16:26 · 1081 阅读 · 0 评论 -
Redis到底是单线程还是多线程
redis是一个高性能的key-value数据库,它是完全开源免费的,而且redis是一个NOSQL类型数据库,是为了解决高并发、高扩展,大数据存储等一系列的问题而产生的数据库解决方案,是一个非关系型的数据库。它支持的数据结构类型包括五种基本类型:字符串(String)、链表(lists)、哈希表(hash)、集合(set)、有序集合(Zset),三种高级类型:GEO(存储地理位置),Bitmaps(以极小的单位来运算亿级数据量的去重等操作),HyperLogLogs(搜...原创 2022-01-26 16:39:01 · 134 阅读 · 0 评论 -
mysql聚簇索引和非聚簇索引的区别
聚簇索引是mysql每一个表中都要有的一个索引,一般来说第一行的主键id就是聚簇索引,他是唯一的,不重复的,如果你没有选择主键,他会选择一个合适的当这个聚簇索引,如果都没有,那会自动生成一个列,用来当这个索引。mysql查询的时候可以根据这个聚簇索引直接查询到这个id的数据。而非聚簇索引则没有这些要求,可以建造很多,在查询的时候,他的叶子节点存储的是索引列的值,它的数据域是聚簇索引即ID。如下图:可以根据情况选择创建索引,当然索引并不是越多越好,开销和维护都会花费一定时间。所以要...原创 2022-01-26 16:26:01 · 1088 阅读 · 0 评论 -
mysql查询如何优化
mysql开启慢查询日志记录,先查看 show variables like '%quer%';参数说明:slow_query_log : 是否已经开启慢查询slow_query_log_file : 慢查询日志文件路径long_query_time : 超过多少秒的查询就写入日志log_queries_not_using_indexes 如果值设置为ON,则会记录所有没有利用索引的查询(性能优化时开启此项,平时不要开启)如何开启呢 set global slow_query_l原创 2022-01-26 16:07:52 · 1236 阅读 · 0 评论 -
关于nginx如何根据域名去转发路由
nginx在配置文件中,加入你的域名是a.fly.com,那么你这么写即可:server {listen 80;server_name a.fly.com;location / { root /data/web-a/dist;index index.html;}}这样就可以转发你需要的项目里。有的小伙伴可能会有这样的想法,nginx和gateway都是做负载均衡的,不要nginx行不行。我在查阅相关资料后得出结论:Nginx在其中扮演的角色是什么?原创 2022-01-21 16:04:36 · 2318 阅读 · 0 评论 -
mybatis查询没有数据时返回的list是null还是空集合
记录一下,返回的是空集合。原创 2022-01-12 19:18:53 · 514 阅读 · 0 评论 -
java内存优化之SoftReference
首先,引用对象在Java定义中有四种类型,从弱到强依次为:强引用、软引用、弱引用与虚引用。(一)强引用(默认存在)强引用,是在实际开发中最为普遍的引用。有时候你开发的时候,申请一个内存空间的时候,就已经是强引用了。例如: Object obj =new Object(); // 强引用在强引用中,如果不让该对象指向为空,垃圾回收器绝对不会回收它。除非当出现内存空间不足的时候。jvm抛出oom导致程序异常种植的时候,才会回收具有强引用的对象来解决内存空间不足问题...原创 2021-12-24 09:58:31 · 641 阅读 · 0 评论 -
注解开发实战
项目中想要获取字段都注解,在此记录一下获取注解都步骤。首先创建一个注解:@Documented@Target({ElementType.FIELD}) //注解应用类型(应用到方法的注解,还有类的可以自己试试)@Retention(RetentionPolicy.RUNTIME) // 注解的类型public @interface zhujie { //属性字段名称 默认空字符串 String name() default "";}然后在你的需要实体类的字段上加上:原创 2021-12-23 17:30:36 · 221 阅读 · 0 评论 -
HashMap 的源码
jdk里的hashmap源码,的确是很枯燥,推荐一篇文章,写得比较清楚明白JDK1.8源码(七)——java.util.HashMap 类 - YSOcean - 博客园不错,学习了转载 2021-12-22 14:09:59 · 90 阅读 · 0 评论 -
gateway在写GlobalFilter时候,调用feign出现的问题
gateway在写全局filter的时候,继承GlobalFilter,调用feign接口报错。原因是在gateway项目创建的时候,不会创建HttpMessageConverters实例。所以需要建立一个手动放入bean容器里@Configurationpublic class FeignConfig { /** * 默认connect timeout 10s,read timeout 60s * @return */ @Bean publi原创 2021-12-02 11:52:24 · 2463 阅读 · 0 评论 -
关于java的clone方法 浅拷贝和深拷贝
正常来说想要复制一个对象,只需要实现Cloneable接口即可但是浅拷贝只会对你对象的基本类型进行一个新的赋值,对象中的引用类型不会,还是回调用同一个地址。所以这个时候我们需要深拷贝。简单的深拷贝:依然是实现Cloneable接口,在你对象.clone的基础上,你对象的引用对象也跟着clone。例如:PptTaskDO p1 = new PptTaskDO();p1.setCarId("1111");p1.setTaskType(11);AreaNewRequest a = new原创 2021-11-26 16:28:23 · 333 阅读 · 0 评论 -
log日志记录
<!-- 日志目录 --><property name="LOG_PATH" value="./logs"/> 只需要调用<File>${LOG_PATH}/debug.log</File> 用即可调用 <logger name="com.yiche.index.service.impl.CacheServiceImpl" level="warn"/> 在name的目录下。warn以上的会打印<springProfile.原创 2021-10-29 19:35:12 · 313 阅读 · 0 评论 -
算法分享之递归
给你两个非空 的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0开头。输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]输出:[8,9,9,9,0,0,0,1]类:public static class ListNode { int val; ListNode next; ...原创 2021-10-26 20:15:57 · 86 阅读 · 0 评论