
java
文章平均质量分 66
雪中鱼01
所谓专家,就是在一个很小的领域里把所有的错误都犯过了的人
展开
-
代理模式和策略模式的差别
代理模式的核心是替代和控制对原始对象的访问,而策略模式的核心是选择合适的算法或策略来解决问题。原创 2023-04-23 10:20:09 · 1083 阅读 · 0 评论 -
MacOS 使用SwitchHosts修改 hosts 不生效的原因及解决方法
mac下默认不是root用户的文件修改,可能不会立刻起效。原创 2022-10-12 17:23:55 · 6618 阅读 · 0 评论 -
最近遇到几个小问题总结
这个配置的意思是设置cookie的域,只有以yto56.com.cn结尾的域名,才能共享cookie。子iframe一直没有获取到上层传递的cookie信息,导致需要重新登录。升级到https后,有些静态资源,好像无法访问了,找不到相应的静态资源。下面添加如下内容,可从 http 跳转到 https。https不允许同一页面中,出现http的请求。项目中涉及到iframe传递cookie信息的。的值为之前生成的 *.pfx文件,的值为生成.pfx文件时输入的密码,最后注意到项目里的一个配置。...原创 2022-08-30 20:42:04 · 637 阅读 · 0 评论 -
Mac上搭建ELK
本篇翻译自此篇博客https://medium.com/@pablo_ezequiel/installing-elk-stack-on-osx-74b132ad1498https://links.jianshu.com/go?to=https%3A%2F%2Fmedium.com%2F%40pablo_ezequiel%2Finstalling-elk-stack-on-osx-74b132ad1498已经授权,你也可以参考https://blog.youkuaiyun.com/ywheel1989/artic翻译 2022-05-23 14:56:49 · 849 阅读 · 0 评论 -
Sharding-JDBC分库分表学习笔记
什么是分库分表 分库分表就是为了解决由于数据量过大而导致数据库性能降低的问题,将原来独立的数据库拆分成若干数据库组成,将数据大表拆分成若干数据表组成,使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的。分库分表的方式...原创 2022-02-20 17:34:41 · 691 阅读 · 1 评论 -
多用户并发操作的解决方案,同步锁的具体实施方法
一:并发操作出现的原因原因:多个动作在一瞬间同时操作同一数据现象:多人在某一瞬间通过相同的方式操作同一条数据 多人在某一瞬间通过不同的方式操作同一条数据 在某一瞬间,同一动作,多次执行二:并发举例及解决办法针对上述的三种的情况,分别以实际情况进行举例。【多人在某一瞬间通过相同的方式操作同一条数据】1.某仓库系统有一品牌商品A,商品A在数据库中只允许存在一条记录,库存的数量是这条数据的一个字段,现有库存100件,在某一天到货了1000件。由于数量比较大,现在需要10名操作员去原创 2022-02-03 20:59:09 · 7023 阅读 · 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 · 2767 阅读 · 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 · 2502 阅读 · 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 · 156 阅读 · 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 · 660 阅读 · 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 · 597 阅读 · 0 评论 -
验证码生成 EasyCaptcha
验证码生成 EasyCaptchaJavaWeb图形验证码,支持gif验证码,可用于基于的session的web项目和前后端分离的项目。源码地址:https://gitee.com/jeesys/EasyCaptcha/一、引入依赖引入EasyCaptcha<dependency> <groupId>com.github.whvcse</groupId> <artifactId>easy-captcha</artifac.原创 2021-11-15 13:33:10 · 1276 阅读 · 0 评论 -
SpringAOP+注解实现简单的日志管理
一、写一个自定义注解注解中包括配置方法所在模块名称,以及功能名称,当然我们在注解里可以自定义。@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.METHOD,ElementType.PARAMETER})public @interface LogInfoAnnotation { //模块名 String moduleName(); //操作内容 String desc();}二、建切面类.原创 2021-11-12 11:38:02 · 826 阅读 · 0 评论 -
mysql varchar能不能超过255个字节及产生的问题。
项目里突然varchar字段设置255也不够用了,记得规定不能超过255,今天查了一下,现总结如下:MySQL要求一个行定义长度不能超过 65535 bytes(所有字符串类型字段包括其字段名称占用空间都计算在内, text、blob等大字段类型除外)。所有如果一个表有很多varchar字段的时候,不应该把varchar设置的特别大,会影响后面的字段InnoDB存储引擎的表索引的前缀长度最长是767字节(bytes)(前缀长度适用于mysql5.6及以前,后续版本有变化)你如果需要建索引,就原创 2021-08-23 10:23:27 · 15025 阅读 · 5 评论 -
单表几百万数据怎么在线修改表结构?
项目背景 项目中因为我们产品设计的时候只要用户打开app,就根据用户设备号自动生成一个账号存储在表里,所以短期内我们项目的用户表就达到了几百万的数据量,并且随着项目的运行,每年在几百万的数据量增加。这是修改字段的数据类型这种操作,就变的很麻烦起来,目前主要有三种操作方式:方式一:使用mysql5.6+提供的在线修改功能 所谓的mysql自己提供的功能也就是mysql自己原生的语句,例如我们要修改原字段名称及类型。 mysql> ALTER TABLE table_name CHAN..原创 2021-08-16 15:36:01 · 808 阅读 · 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 · 6795 阅读 · 0 评论 -
ThreadLocal存List遇到的坑
背景项目有个需求,存储一个类成员变量。供类中的各个方法使用,是在easyexcel 中最一开始没有注意到service是单例模式的,所以每回存取requiredColIndexs的需要验证的列索引有可能是上一个模版的。后来加了threadlocal后,发现还是有异常。@Slf4jpublic class TemplateExcelListener extends AnalysisEventListener<Map<Integer, String>> {原创 2021-07-31 22:34:45 · 1959 阅读 · 0 评论 -
责任链模式学习总结
责任链模式顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。如何解决:拦截的类都实现统一接口。实现我们创建抽象类AbstractLogger,带有详细的日志记录级别。然后我们创建三种类型的记录器,.转载 2021-07-24 16:49:16 · 107 阅读 · 0 评论 -
记录select for update mysql 死锁问题
背景项目要求某表单个列自增,但是where条件,并不是这个列所有的值都符合自增想用select for update mysql 锁表后,查询最大值自增,后发现有死锁问题,先记录一下。实例以下代码在可重复读隔离级别下执行,表中原来只有1~10的rank。假如A、B两个事务同时试图插入rank为21和22的rank;@Transactional public void createBannerDeadlock(Banner banner) { banner.r原创 2021-07-22 18:05:03 · 4809 阅读 · 3 评论 -
抽象工厂和建造者模式实现rpc调用小框架
public interface SdkClient { <T> SdkResponse<T> execute(SdkRequest<T> request);}创建jie原创 2021-06-10 16:26:48 · 278 阅读 · 1 评论 -
读spring-cloud-netflix-eureka-server项目源码笔记
InstanceRegistry实体注册类中实现springevent事件private void publishEvent(ApplicationEvent applicationEvent) { this.ctxt.publishEvent(applicationEvent); }写一个发布事件方法,让所有的事件都传递给一个父类ApplicationEvent 从而发布事件统一了事件发布代码的编写风格。...原创 2021-05-11 16:49:02 · 130 阅读 · 0 评论 -
rocketmq学习总结
rocketmq发送同步消息2.异步消息3.发送单向消息消费消息负载均衡顺序消息同一个业务的消息 发送到同一个队列当中去就可以了同一个订单id对应的消息 发送到同一个队列当中去消息的长度大于4mb时,最好把消息进行分割sql过滤事务消息事务消息生产者总结:mq的作用1.结耦2.流量的削峰3.数据的分发集群的搭建双主双从监控:1 mqadmin管理工具2.集群的监...原创 2021-04-18 14:02:07 · 214 阅读 · 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 · 652 阅读 · 0 评论 -
SpringCloudGateway自定义Predict—实现根据不同域名切换不同鉴权方式
背景项目相同的接口想同时提供给外部和内部调用,因为外部调用采用的是签名校验,内部调用采用的是token校验,因为签名校验可以有效起到防止用户多次调用同一个接口的作用,想同一个url,只是域名不同,起到不同的鉴权方式考虑在网管层实现这一功能。Spring Cloud Gateway自带的一些断言参数列表项目中有用到path - id: openapi order: 2 uri: ${domain.openapi}原创 2021-04-16 17:46:04 · 1201 阅读 · 1 评论 -
Docker 容器的学习笔记
Docker 容器使用容器使用获取镜像如果我们本地没有 ubuntu 镜像,我们可以使用 docker pull 命令来载入 ubuntu 镜像:docker pull ubuntu启动容器以下命令使用 ubuntu 镜像启动一个容器,参数为以命令行模式进入该容器:$ docker run -it ubuntu /bin/bash参数说明:-i: 交互式操作。 -t: 终端。 ubuntu: ubuntu 镜像。 /bin/bash:放在镜像名后的是命令,原创 2021-03-31 14:06:02 · 101 阅读 · 0 评论 -
监控神器-普罗米修斯Prometheus的学习总结
Prometheus架构:Prometheus 中文名称为普罗米修斯,受启发于Google的Brogmon监控系统,从2012年开始由前Google工程师在Soundcloud以开源软件的形式进行研发,2016年6月发布1.0版本。Prometheus 可以看作是 Google 内部监控系统 Borgmon 的一个实现prometheus是一个用Go编写的时序数据库,可以支持多种语言客户端,架构如下:Prometheus监控模式目前,监控系统采集指标有两种方式,一种是『推』,另一种就是『原创 2021-03-30 13:26:55 · 4178 阅读 · 2 评论 -
Kibana 日志查询语法
2 Lucene 语法查询2.1 简易查询若是查询的时候没有明确查询的字段,会默认为_all字段,也就是全文查询。也能够指定一个字段,又称为field来查询。ja# 全文查询 ExceptionException# 指定查询字段 message 里的 Exceptionmessage: Exception# 查询短语message: "java.lang.NullPointerException" # 任何 message 字段都包含 Exception message\...原创 2021-03-29 17:49:47 · 1017 阅读 · 0 评论 -
mongdb学习总结
1.MongoDB主键:使用ObjectId()设置_id字段在MongoDB中,_id字段是集合的主键,以便可以在集合中唯一地标识每个文档。_id字段包含唯一的ObjectID值。默认情况下,在集合中插入文档时,如果您没有在字段名称中添加带有_id的字段名称,则MongoDB将自动添加一个Object id字段,下图所示当查询集合中的文档时,可以看到该集合中每个文档的ObjectId。如果要确保在创建集合时MongoDB不会创建_id字段,并且要指定自己的ID作为集合的_id,则需要在转载 2021-03-23 14:23:38 · 308 阅读 · 0 评论 -
mysql锁和事务的实现原理1
mysql,如果每次更新操作都要写进磁盘,然后磁盘要找到对应记录,然后再更细,整个过程io成本、查找成本都很高。解决方案:WAL技术(Write-Ahead Logging)。先写日志,再写磁盘。具体来说,当有一条记录需要更新的时候,InnoDB 引擎就会先把记录写到 redo log里面,并更新内存,这个时候更新就算完成了。同时,InnoDB 引擎会在适当的时候,将这个操作记录更新到磁盘里面,而这个更新往往是在系统比较空闲的时候做。原创 2021-03-23 14:13:30 · 145 阅读 · 0 评论 -
JSON Web Token 入门教程(jwt)
一、跨域认证的问题互联网服务离不开用户认证。一般流程是下面这样1、用户向服务器发送用户名和密码。2、服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等等。3、服务器向用户返回一个 session_id,写入用户的 Cookie。4、用户随后的每一次请求,都会通过 Cookie,将 session_id 传回服务器。5、服务器收到 session_id,找到前期保存的数据,由此得知用户的身份。这种模式的问题在于,扩展性(scaling)不好。单机当然原创 2021-03-18 11:01:44 · 216 阅读 · 0 评论 -
抽象类和接口的区别
1.语法层面上的区别 1)抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法; 2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的; 3)接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法; 4)一个类只能继承一个抽象类,而一个类却可以实现多个接口。2.设计层面上的区别 1)抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象原创 2021-03-16 18:29:25 · 1507 阅读 · 0 评论 -
面试套路问题总结5
1.elasticsearch的问题1.为什么要使用Elasticsearch? 因为在我们商城中的数据,将来会非常多,所以采用以往的模糊查询,模糊查询前置配置,会放弃索引,导致商品查询是全表扫面,在百万级别的数据库中,效率非常低下,而我们使用ES做一个全文索引,我们将经常查询的商品的某些字段,比如说商品名,描述、价格还有id这些字段我们放入我们索引库里,可以提高查询速度。2.elasticsearch 的倒排索引是什么传统的我们的检索是通过文章,逐个遍历找到对应关键词的位置。而倒排索引,原创 2021-02-26 21:18:37 · 304 阅读 · 0 评论 -
面试套路问题总结4
1.理解synchronized底层原理synchronized有两种形式上锁,一个是对方法上锁,一个是构造同步代码块。他们的底层实现其实都一样,在进入同步代码之前先获取锁,获取到锁之后锁的计数器+1,同步代码执行完锁的计数器-1,如果获取失败就阻塞式等待锁的释放。只是他们在同步块识别方式上有所不一样,从class字节码文件可以表现出来,一个是通过方法flags标志,一个是monitorenter和monitorexit指令操作。1.1 同步方法首先来看在方法上上锁,我们就新定义一个同步方法然后原创 2021-02-06 10:32:46 · 323 阅读 · 0 评论 -
Mac下配置alias,zsh终端命令别名 出错解决记录
在~/.zshrc中配置abrew='/opt/homebrew/bin/brew' # ARM Homebrewibrew='arch -x86_64 /usr/local/bin/brew' # X86 Homebrew然后source ~/.zshrc 命令发现并不起效。后来对比其他博客发现,这是细小问题。改为alias go-work="cd ~/Document/work"双引号,在执行source ~/.zshrc 命令好了。...原创 2021-02-02 19:03:55 · 827 阅读 · 0 评论 -
面试套路问题总结3
1.Java 修饰符访问控制修饰符Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。 default(即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。 private: 在同一类内可见。使用对象:变量、方法。注意:不能修饰类(外部类) public: 对所有类可见。使用对象:类、接口、变量、方法 protected: 对同一包内的类和所有子类可见。使用对象...原创 2021-01-11 22:21:49 · 435 阅读 · 0 评论 -
如何理解Spring中的IOC和AOP及切面编程的实例的实现。
主要用到的设计模式有工厂模式和代理模式IOC就是典型的工厂模式,通过sessionfactory去注入实例。AOP就是典型的代理模式的体现。spring的IoC容器是spring的核心spring AOP是spring框架的重要组成部分。在传统的程序设计中,当调用者需要被调用者的协助时,通常由调用者来创建被调用者的实例。但在spring里创建被调用者的工作不再由调用者来完成,因此控制反转(IoC);创建被调用者实例的工作通常由spring容器来完成,然后注入调用者,因此也被称为依赖注入(DI原创 2020-12-29 15:03:50 · 500 阅读 · 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 · 2018 阅读 · 5 评论 -
redis高并发分布式锁实战
分布式锁 setnx如果key存在问题1: 抛异常 释放分布式锁finally解决死锁问题2:宕机了设置过期时间问题3:永久失效加线程id问题4 :超时时间不够redisson内部使用lua脚本语言redisson用了很多lua脚本来解决lockwatchdoytimeoutredlock实现原理redisson并行改为串行 再优化一下分段加锁...原创 2020-12-13 18:04:27 · 280 阅读 · 0 评论 -
什么是并发编程的原子性、可见性、有序性
1.原子性原子性是指一个操作是不可中断的,要么全部执行成功要么全部执行失败,有着“同生共死”的感觉。即使在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程所干扰。java内存模型中定义了8中操作都是原子的,不可再分的。lock(锁定):作用于主内存中的变量,它把一个变量标识为一个线程独占的状态; unlock(解锁):作用于主内存中的变量,它把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定 read(读取):作用于主内存的变量,它把一个变量的值从主内存传输到线程的原创 2020-06-17 09:30:34 · 820 阅读 · 0 评论 -
Spring 中运用的 9 种设计模式
1. 简单工厂实现方式:BeanFactory。Spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得Bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。实质:由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。实现原理:bean容器的启动阶段: 读取bean的xml配置文件,将bean元素分...原创 2020-03-23 22:28:39 · 346 阅读 · 0 评论