- 博客(61)
- 收藏
- 关注
原创 【踩坑】异步写文件报错java.nio.channels.ExceptionAsynchronous
但是在生产环境中,由于网络延迟、负载或资源限制等因素,异步操作的执行速度可能会变慢,甚至可能超过了一定的时间限制。至于本地没报错,而生产环境报错,可能原因由于网络延迟较小、资源较为充足,可能会导致异步操作的执行速度较快,从而在正常情况下能够成功完成操作,不会触发错误或异常。2.异步方法有个回调函数,重写回调函数的complete方法,完成方法里加channel.close(),保证方法写入结束后再关闭通道。仔细看代码后发现,由于是异步的:当管道建立后,没来得及写入文件,管道就被关闭了。
2023-07-06 11:27:59
762
原创 【学习笔记】Docker(二)
例如基于Ubuntu Linux16.04创建一个新的镜像,这就是新镜像的第一层,如果在该镜像中添加Python包,就会在基础镜像层之上创建第二个镜像层;在bootfs上,包括的就是典型的Linux系统中的/dev、/proc、/bin、/etc等标准目录和文件,rootfs就是各种不同的操作系统发行版,比如Ubuntu、Centos等。-基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是from。-指定该镜像以什么样的用户去执行,如果都不指定,默认是root。
2023-03-09 09:55:05
474
1
原创 【学习笔记】Docker(一)
解决问题:Error response from daemon: Container xxx is restarting, wait until the container is running和外部无法远程连接虚拟机中mysql问题
2023-02-20 17:10:44
622
原创 【学习笔记】Nginx实战
可以看见两个都启动,但是第一个是/root/tomcat不是Tomcat8081(因为8081是后面改名),应该是原本就启动了8080端口的,所以杀死它。问题:刚开始8081端口的访问并不成功,我们查看一下两个Tomcat是否成功启动。在配置文件中,将首行的user注解解开,并且改为root(我登录的是这个账户)·fair(第三方):按后端服务器的响应时间来分配请求,响应时间短优先分配。·weight:权重,默认是1,权重越高被分配的客户端越多。Autoindex on:列出目录内容。
2023-02-10 16:50:54
837
原创 【学习笔记】Nginx学习
主要设置一些影响nginx服务器整体运行的配置指令,只要包括配置运行Nginx服务器的用户(组)、运行生成的work process数,进程PID存放的路径、日志存放路径和类型以及配置文件文件的引入等。此时就需要Nginx作为前置的反向代理。访问量过大,服务器处理请求处理不过来,此时多开几个进程,但是之前的端口只有一个,如果我们另用一个端口,客户端却是不得知的,处理起来也麻烦且没必要。客户端向反向代理发送请求,代理选择目标服务器发送请求,将获取的数据返回给客户端,,对客户端而言代理是目标服务器。
2023-02-09 19:39:47
858
原创 【学习笔记】Kafka学习
生产者将消息发布到kafka的Topic中,broker接收到生产者的消息后,将消息追加数据到segment文件中,生产者发送的消息存储到一个partition中,生产者也可以指定数据存储的partition。其他broker的日志目录修改;集群有多个broker,创建主题时可以指明该主题有多少个分区(把消息拆分在不同的分区中存储),可以为分区创建多个副本,不同的副本存入不同的Broker。消息的发布者不会将消息直接发送给特定的订阅者,而是将发布的消息分为不同的类别,订阅者只接受感兴趣的消息。
2022-11-14 09:43:27
768
原创 Zookeeper
集群的话,先创建持久节点,下面多个临时节点。需要注意的是:java操作集群和操作单节点一致,虽然集群数据保持高度一致,但是初始化客户端对象时,zkServer最好全部写上,假设只写一个,如果该zkServer宕机,则无法用java操作集群。对集群中一个节点操作写操作时,会向leader节点进行确认,如果leader确认后会向所有节点原子广播写入当前数据,如果有节点写入失败,全部节点撤销写操作回滚。在节点创建后,就一直存在,知道有删除操作来主动删除这个节点——不会因为创建该节点的客户端会话消失而消失。
2022-11-05 14:53:41
1975
原创 SpringCloud Alibaba学习(四)——seata
修改script-config-center文件中的config.txt,同样将存储模式改为db,修改具体信息;管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。最终一致的分阶段事务模式,无业务侵入,也是Seata的默认模式。强一致性分阶段事务模式,牺牲了一定的可用性,无业务侵入。定义全局事务的范围、开始全局事务、提交或回滚全局事务。:维护全局和分支事务的状态,协调全局事务提交或回滚。最终一致的分阶段事务模式,有业务侵入。openFeign接口。
2022-11-02 12:03:06
646
原创 【seata报错】no available service ‘default‘ found, please make sure registry config correct
记录一个坑:no available service 'null' found, please make sure registry config correct
2022-11-02 11:00:03
4558
原创 SpringCloud Alibaba学习(三)
OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方法产生实现类,实现类中的做负载均衡并调用其他服务。Feign是SpringCloud组件中的一个轻量级Restful的HTPP服务客户端Feign内置了Ribbon,用来做客户端负载均衡,去调用服务祖册中心的服务。步骤:使用Feign的注解定义接口,调用这个接口,就可以调用服务注册中心的服务。注意:如果在nacos的服务名修改了,限流配置类也需要修改,访问网址也需要修改。
2022-10-26 16:16:37
444
原创 SpringCloud Alibaba学习(二)
同样自定义配置类(过滤器),设置必须有参数(任何值)才可以正常访问,授权:对参数设置规定值,如果设置为白名单,即只有输入固定值才能正常访问,如果设置黑名单,即输入固定值不可访问。由于多个服务相互调用,假设服务B调用A,服务A出现问题,服务B全部线程进入阻塞状态,一直等待不释放资源,导致服务B堆积内存沾满,B奔溃;单个请求的响应时间超过阈值,则进入准降级状态,接下来 1 S 内连续 5 个请求响应时间均超过阈值,就进行降级,持续时 间为时间窗口的值。若设置黑名单,即name值为a不可访问,其他值可以访问。
2022-10-17 16:13:06
486
原创 SpringCloud Alibaba学习(一)
SpringCloud是一系列分布式框架的集合,基于Spring Boot进行开发,将不同公司生产的不同组件进行集成,以SpringBoot的风格进行集成,开发者不需要关注底层的整合实现,而是开箱即用,需要哪个组价就用SpringBoot整合进来。需求:多个服务器,但是由于没有算法,默认肯定是全部请求只访问其中一个服务器,请求过多导致压力大,服务器容易奔溃。创建消费者consumer——导入nacos依赖(与provider一致)——consumer controller调用提供者的接口。
2022-10-17 15:56:04
637
原创 【学习笔记】Shiro安全框架入门(二)完结
认证过程——获取需要认证的信息 ,模拟从数据库取出用户账号,进行对比,如果对比通过则说明该用户存在,继续对比密码:将传入的密码进行加密与数据库存入的密码进行对比。——其中Md5Hash传入三个参数,可以直接只传密码,但是简单的密码容易被穷举出来,于是有了参数二:盐值(利用随机盐值与密码一起加密);授权过程——首先获取用户信息 认证,模拟从数据库中获取该用户的角色和操作权限,加入该用户中。4.SecurityUtils给全局安全工具类设安全管理器。6.获取登录用户的令牌(账号密码)......
2022-08-26 09:59:43
906
原创 【学习笔记】Shiro安全框架入门(一)
外部应用与Subject进行交互,Subject记录了当前操作用户,将用户概念 理解为当前操作的主体,可能是一个通过浏览器请求的用户,也可能是一个运行的程序,Subject在shiro中是一个接口,接口中定义了很多认证授权的方法,外部通过Subject进行认证全收,而Subject是通过SecurityManager安全管理器进行认证授权的。Shiro是Apache旗下的开源框架,将软件系统的安全认证相关功能抽取出来,一个功能强大且易于使用的Java安全框架,它执行身份验证、授权、加密和会话管理。...
2022-08-25 10:54:14
880
原创 非对称加密——网络安全
A给B发信件,A对信件使用摘要算法对信件原文进行摘要(摘要算法HASH一旦内容发生轻微的变动,摘要会发生巨大的改变),A使用私钥对摘要进行加密(即数字签名),将加密后的摘要附在信的原文下面。B取到信件后使用公钥对加密的摘要进行解密,对信件进行摘要,与该摘要进行对比,如果对比成功即可确定是A发送的信件,且没有更改。先判断是否是CA颁布的证书,如果不是或者非正规的或者过期,取出信件的证书利用CA的公钥解密证书,对原信件获取数字证书,两者进行对比,如果一致则取出A的公钥,再进行以上步骤,利用公钥解密摘要。...
2022-08-09 14:09:15
1509
原创 Vue--改变鼠标指针的图片
需要注意的是,脚手架搭建的vue项目不能直接使用.ico后缀的图片,会报错告诉说,不支持这种格式的图片文件。1.检查自己的file-loader url-loader是否安装以及版本是否正确,未安装在终端输入该命令。关键代码:cursor:url('...........'),auto;2.下载完成后,在webpack-base.conf.js中添加ico。//利用图片替换pointer指针。...
2022-08-05 18:01:07
1789
原创 密码明文加密-Java对称加密与非对称加密(一)
3DES加密在DES基础上时使用三重数据加密算法,提供相对简单的方法增强DES密钥长度,破解的概率小了,但是使用三重数据加密算法可能比较消耗性能。非常安全,但是对比对称加密来说性能过低。其使用一对密钥公钥和私钥。私钥由一方安全保管,公钥发送给请求它的人。加密解密使用相同密钥的算法,常见加密算法DES、3DES、AES、PBE等,安全性逐渐增强。DES加密简便的加密算法,密钥长度比较短,DES使用56位密钥,24h内可被破解。最快速、最简单的加密方式,加密解密使用同一个密钥。...
2022-07-27 09:44:55
864
原创 Error in render: “TypeError: Cannot read properties of undefined (reading ‘commentsContent‘)“
刚开始commentsArr还是一个空数组,渲染完后才异步加载带数据的数据。所以开始直接读取commentArr[0]时的对象并不存在,但是渲染完成后加载有数据的数据后又加载好了,于是可以获取到。问题出在这里,经过上网百度是说,在渲染时如果读取该对象的属性时,发现该对象不存在那么就会报错。添加一个v-if判断,判断commentArr[index]是否存在,不存在就不显示。...
2022-07-20 10:31:06
5359
原创 【记录错误】Vue复制后改变代码不发生改变
打开项目终端同时也发现,显示的操作项目路径是原项目路径,Ctrl+C终止批处理操作,cd到复制后的路径,或者直接×掉终端,再点开一次就是现路径。当时将Vue项目复制到了一个文件夹额外打开复制后的项目,改变很多代码但是跑起来后页面完全没变,试了很多次重启项目依旧没变。试了很多一步步排查,最后发现改变的代码显示在原来的项目里。在现路径下运行Vue项目npmrundev。ok,找到问题,进行解决。记录一次简单的错误。...
2022-07-20 09:58:30
738
原创 Redis学习笔记【四】完结
Redis是内存数据库,如果不将内存中的数据状态保存到磁盘中,那么一旦服务器进程退出,服务器中的数据库状态就会消失,所以Redis提供了持久化功能dump.rdb是由Redis服务器自动生成的,默认每隔一段时间Redis服务器程序会自动对数据库做一次遍历,把内存快照写在此文件中,这个持久化机制叫做snapshot。如果服务器宕机,重新启动服务器就会加载dump.rdb将数据库状态恢复到上一次做快照时状态Snapshot时间间隔和保存的文件路径、文件名都在conf配置文件中指定1.实现备份;...
2022-07-18 16:53:55
191
原创 讲讲Java的垃圾回收机制
给对象添加一个引用计数器,每当一个地方引用它时计数器的值+1,引用失效计数器值-1。当计数器为0的时候该对象就是不可被使用的。优点:实现简答、效率简单缺点:无法解决对象之间的相互循环引用的问题通过叫GC Roots的对象作为根节点,向下检索,检索到的对象被视为可达性对象,即非垃圾,检索的路径成为引用链。而当一个对象到GC Roots没有任何引用链的时候即视为‘垃圾’GC Roots对具体包括:属于执行上下文中的对象,线程在执行方法的时候,会把方法打包成一个栈帧入栈执行。方法中的局部变量会存放在其本地变量表中
2022-07-13 20:40:28
613
原创 Spring5【学习笔记三】
4.切面把通知应用到切入点的过程AspectJ不是Spring的组成部分,独立AOP框架,一般把AspectJ和Spring一起使用进行AOP操作。添加依赖和约束前置通知实现MethodBeforeAdvice接口 后置通知实现AfterReturningAdvice接口将所有方法写入bean配置文件中进行AOP配置:首先配置切入点:id和expression(executor(方法位置))* com.wang.service.UserServiceImp.*(..)第一个*代表所有返回类
2022-07-06 15:07:00
94
原创 Jedis连接问题!!
这几天没写redis的笔记,因为一直卡在Jedis连接这块,当时学习是说先连接本地的,但是一直报错,试了很多方法都没用,所以一直卡着不能继续往下学怎么调试都是报连接失败的提示 。百度了很多,首先第一步关闭防火墙重新运行——没用换成虚拟机所在的ip运行——没用继续按照网上的方法修改,修改redis.conf配置文件,将bind 127.0.0.1前加上#注释掉。如果没有注释掉代表只能本机访问(但是我还是不能本地连接),注释之后可以外机访问,也可以把外机的ip加在后面如果出现:DENIED Redis is r
2022-07-05 17:31:01
172
原创 Spring5【学习笔记二】
1.普通bean:在配置文件中定义bean类型就是返回类型2.工厂bean:在配置文件定义bean类型可以和返回类型不一致步骤:--创建类,让这个类作为工厂bean,实现接口FactoryBean--实现接口里的方法,在实现的方法定义返回的bean 类型 *上面四个注解功能一样,都用来创建bean实例基于注解创建Bean实例将注解component换成以上任意一个都可以实现对象的创建基于注解方式实现属性的注入@AutoWired:根据属性类型进行自动装配,所以不需s
2022-07-05 16:43:24
98
原创 Spring5【学习笔记】
IOC控制反转:使用set注入后从程序控制转为给用户控制,本质上不用程序员去管理对象的创建,系统的耦合性大大降低。其是一种通过描述(XML或者注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IOC容器,其实现方法就是依赖注入(Dependency Injection,DI)Bean标签中:id即最后getBean获取对象使用的标识class对应的创建对象的类property是该类中的成员变量,一定要有set,根据set对成员变量进行赋值创建对象。--ref引用Spring容器中
2022-07-04 16:58:22
73
原创 【力扣】同构字符串
大概意思:判断是否为同构"abb" "bcc"或者"aabb" "bbcc"等,根据映射,如果出现多对一的情况直接返回false。例如“abb”“aab”第二个字符串,发现第二个字符a已经存在a-a这条映射,又一条b-a映射,直接判为false.或者另一种情况,一对多。当abb 和 abc。b-b和b-c同样判为false代码解释:首先判断s和t的字符串的长度是否相等,若不相等不可能同构,直接返回false。创建Map集合,将s和t的字符存进去,一条key-value代表一条映射。任意循环一个字符串(
2022-07-04 15:40:13
153
原创 【力扣】判断子序列
题目分析:即t字符串中(按顺序)包含s中的字符定义两个指针i,j,i指向字符串s,j指向t。while循环比较,指针j每次循环都加一,如果指向的字符相等,指针i加一 。如果i循环s结束即都找到了,返回true,也就是最后只需要比较i和s的长度indexOf,查找指定字符串,指定开始位置,返回该字符串出现的最早位置。如果没找到返回-1。循环s的字符数组,利用t字符串的indexOf方法找到当前的s字符。返回的下标作为下次循环的开始位置(题目:按顺序判断)。判断index如果等于-1即如果有一次没找到
2022-07-01 11:25:07
347
原创 Redis学习笔记【三】
Redis设置密码进入redis,config set requirepass ***(密码)config get requirepass(查看密码)使用方法二设置的密码是临时的,重启后会恢复默认值,需要命令行设置新密码后使用config rewrite将修改持久化到redis.conf配置文件设置密码之后登入redis要附带密码,或者先登录后验证密码,具体操作如下:Redis三种特殊化数据类型---geoadd :添加地理位置---geopo...
2022-06-30 16:32:45
1594
原创 Redis学习笔记【二】
--mget:获得多个key的值--mset:同时设置多个键值对--msetnx:和mset一样 ,不同的是,如果设置的key有相同的,该行命令会执行失败。而mset同样和set一致,如果遇到相同key会覆盖前面设置的--getrange :获取值的范围,类似Java的substring--setrange :在key值的指定位置替换指定字符--setex :替换或创建key-value值,同时设置过期时间--...
2022-06-29 16:54:36
607
原创 Redis学习笔记【一】
Redis是一个开源的 key-values存储系统,存储的value类型包括string(字符串)、list(链表)、set(集合)、zset(sorted有序集合)、hash(哈希)。支持主从同步1.官网:开始 | Vuex (redis.io)下载压缩包2.利用XShell将压缩包上传到虚拟机上,解压tar -zxvf redis-7.0.2.tar.gz3.gcc如果未下载yum install gcc 4.否则直接编译(先进入redis-7.0.2)make5.编译成c文件后进行安装make in
2022-06-28 17:22:15
148
原创 MyBatis学习笔记【五】完结
跟着尚硅谷的视频陆陆续续把MyBatis学习完了,其实课程挺短但是期间很多事情所以现在才学完,不得不说杨老师讲的很好!!MyBatist缓存会将查询的数进行缓存,再次查询时如果数据已经存在,则直接缓存中取出,否则再次查询数据库。MyBatis缓存分为一级缓存(默认开启)和二级缓存MyBatis一级缓存是sqlSession级别的,也就是说,前提是同一个sqlSession查询同一条数据才会在缓存中取 控制台可以看出,sql语句其实只执行了一次,在第二次查询学校信息时是直接从缓存中取出。如果创建两个sq
2022-06-27 17:02:01
176
原创 SpringBoot、Mybatis、Vue整合出现的问题
这段时间由于实训要求写一个项目,所以一直没有弄笔记了,接下来说说项目期间出现的一些问题MyBatis和SpringBoot整合期间需要注意的是创建对象和连接数据库都是交给Spring来管理进行创建对象,所以不需要Utils工具类,也不需要config.xml。Mapper接口处没忘了注释,不然识别不到Mapper层,无法自动注入.在配置文件application.properties下配置mybatis即可。第一行即配置实体类别名(entity整个包),默认类名首字母大写。第二行即mybatis的映射文件所
2022-06-27 15:45:31
473
原创 MyBatis学习笔记【四】
前面学习中,我们知道POJO类中的属性名一定要与数据库表中的字段名一致(一对一进行映射),那么如果不一致时,则可以使用resultMapMyBatis多个参数输入案例:根据用户名和密码找到用户首先我们想到的是@param注解,底层map映射是以注解的值为键参数为值如果不使用注解,直接输入参数的话 结果报错,提示说name找不到,可以使用arg和param解决最终结果都输出成功,那么arg0、param1和arg1、param2分别代表的就是参数一和参数二,当然也可以组合一起使用 M
2022-06-16 14:21:43
226
原创 设计模式-笔记
单例模式是指在内存中只会创建一次对象,在程序中防止使用同一个对象反复创建导致的内存升高,让需要调用的地方共享这一单例对象。在程序使用对象前,先判断该对象是否已经实例化,如果实例化则返回该对象,否则实例化在类加载(程序启动时)时创建好对象,需要使用时直接返回该对象加载是将class文件读入内存并创建一个java.lang.Class对象。Java文件经过编译后变成.class字节码文件,类加载由类加载器完成,类加载器一般由JVM提供,将所有的class文件全部搬到JVM中(即加载所有的类,为这些类创建java
2022-06-13 13:33:34
147
原创 Mybatis的核心配置文件
配置文件mybatis-config.xml包含了会深深影响MyBatista行为的设置和属性信息MyBatis可以配置成适应多种连接数据库的环境,但是每个SqlSessionFactory实例只能选择一种环境,可以用default进行指定默认使用的环境.——transactionManager:设置事务管理方式,type=”JDBC|MANAGED”,Mybatis默认的事务管理器就是JDBC。 ——JDBC:事务的提交或回滚需要手动提交 ——MANAGED:被管理,例如Spr
2022-06-09 18:15:42
354
原创 MyBatis的Map传参和模糊查询
多个参数尽量使用Map比起规定类对象参数,Map实际把参数变成了灵活的参数,不固定死参数,想传什么传什么正在上传…重新上传取消正在上传…重新上传取消正在上传…重新上传取消前者是占位符 会进行预编译,解析为一个参数占位符‘?’将传入的数据当做一个字符串,当解析成sql语句时,会在变量外侧自动加入引号,能很大程度的防止sql注入${}方法是拼接符 将传入的数据直接显示生成sql中,一般用在传入数据库对象例如表名通过Statement对象执行SQL语句时需要先发送给数据库关系系统DBMS,由其进行编译后再执行。每
2022-06-07 17:14:03
417
原创 【JS基础】实训笔记
匹配模式对象,数据的校验语法:1.New RegExp(“……”,[“igm”]);2./……/[igm]模式i代表忽略大小写g代表全局查找m代表多行查找常用方法test判断是否匹配,返回true或者falseexec返回第一个匹配的信息,不匹配为null案例,使用语法一创建boX模式为ig(忽略大小写全局查找),和content进行匹配 案例,使用语法二创建 字符串正则的相关方法match返回匹配的字串、search返回匹配字符串的开始位置、replace替换、split分割 边界符^代表开始$
2022-06-07 17:01:29
133
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人