
Java
文章平均质量分 61
LongZheOVO
死Java去nm的
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
微服务--docker学习
什么是Dockerfile:Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer。需求说明:进入nginx容器内部,已经知道nginx的html目录所在位置(/usr/share/nginx/html,需要把这个目录挂载到html这个数据卷上,方便操作其中的内容。创建一个nginx容器,修改容器内的html目录内的index.html内容。镜像是将应用程序及其需要的系统函数库,环境,配置,依赖打包而成。原创 2023-02-22 00:11:07 · 146 阅读 · 0 评论 -
微服务--Gateway网关学习
Zuul是基于Servlet的实现,属于阻塞式编程。而SpringCloudGateway则是基于Spring5中提供的WebFlux,属于响应式编程的实现,具备更好的性能。请求路由后,会将当前路由过滤器和DefaultFilter,GlobalFilter,合并到一个过滤器链(集合)中,排序后依次执行每个过滤器。请求进入网关会碰到三类过滤器:当前路由的过滤器,DefaultFilter,GlobalFilter。全局过滤器的作用也是处理一切网关的请求和微服务响应,与GatewayFilter的作用一样。原创 2023-02-09 21:39:59 · 1230 阅读 · 0 评论 -
微服务--Feign学习
Feign的介绍:Feign是一个声明式的http客户端,官方地址:https://github.com/OpenFeign/feign其作用就是帮助我们优雅的实现http请求的发送,解决上面提到的问题。方式二(抽取):将FeignClient抽取为独立模块,并且把接口有关的POJO,默认的Feign配置都放到这个模块中,提供给所有消费者使用。方式一(继承):给消费者的FeignClient和提供者的controller定义统一的父接口作为标准。Feign的性能优化-连接池配置。原创 2023-02-09 21:35:26 · 413 阅读 · 0 评论 -
微服务技术--Nacos与Eureka
负载均衡原理:请求会被LoadBalancerInterceptor负载均衡拦截器拦截,会得到请求中的服务名称把它交给RibbonLoadBanlancerClient然后会把服务交给DynamicServerListLoadBalancer去eureka里拉取服务列表得到多个服务的信息,然后找到IRule从服务列表中基于规则做出选择挑一个出来服务,将其返回到RibbonLoadBanlancerClient中然后替换url中userservice得到真实的ip然后发起http请求。原创 2023-01-14 21:46:31 · 1880 阅读 · 0 评论 -
maven-repo/org/springframework/cloud/spring-cloud-netflix-eureka-server/4.0.0/spring-cloud-netflix-e
原因:我搭建eureka服务模块中springCloud版本为2022.0.x对应的springboot为3.0,而。所以你需要降低你的boot版本,因此你需要降低你的Cloud版本。在搭建eureka注册中心出现jdk版本不匹配。3.0的boot只支持jdk17及以上。原创 2022-12-22 23:31:31 · 443 阅读 · 0 评论 -
微服务技术--认识微服务
注册RestTemplate:在order-service的模块中注册RestTemplate。拆分服务之后产生的问题:在8080端口服务查询订单时并没有将用户信息一起返回。SpringCloud是目前国内使用最广泛的微服务框架。SpringCloud与SpringBoot的版本兼容性关系如下。这样就可以在查询订单消息的同时查询用户信息,解决了微服务远程调用。微服务是一种良好架构设计的分布式架构方案。在查询订单时发送http请求用户信息。原创 2022-12-22 22:00:38 · 869 阅读 · 0 评论 -
黑马点评--用户签到
Redis是利用string类型数据结构实现BitMap,因此最大上限512M,转换为bit则是2^32个bit位。BITFIELD:操作(查询,修改,自增)BitMap中bit数组中的指定位置(offset)的值。我们按月来统计用户签到信息,签到记录为1,未签到则记录为0.(布隆过滤器就是采用这种结构)从最后一次签到开始向前统计,直到遇到第一次未签到为止,计算总的签到次数,就是连续签到天数。BITOP:将多个BitMap的结果做位运算(与,或,异或)随后右移1位,下一个bit为就成为最后一个bit为。原创 2022-11-29 23:47:34 · 1044 阅读 · 0 评论 -
黑马点评--达人探店
查看探店笔记:点赞功能:需求:实现步骤:给Blog类中添加一个isLike字段,标示是否被当前用户点赞修改点赞功能,利用Redis的set集合判断是否点赞过,未点赞过则点赞数+1,已点赞过则点赞数-1修改根据id查询Blog的业务,判断当前登录用户是否点赞过,赋值isLike字段修改分页查询Blog业务,判断当前登录用户是否点赞过,赋值给isLike字段判断该blog用户是否点赞点赞排行榜需求1:把笔记点赞的人显示出来,比如最早点赞的TOP5,形成点赞排行榜不同集合比较:由于set集原创 2022-11-26 14:18:33 · 639 阅读 · 0 评论 -
黑马点评--Redis优化秒杀
如果采用异步思路就能:在redis中判断秒杀库存和校验一人一单,在tomcat中读取队列中的信息对数据库进行操作。在redis返回结果,Tomcat判断生成id并返回。思路,在多线程同时秒杀时,由于判断秒杀库存和校验一人一单用时短,而减库存和创建订单时间耗时长。基于Lua脚本,判断秒杀库存,一人一单,决定用户是否抢购成功,开启线程任务,不断从阻塞队列中获取信息,实现异步下单功能。如果抢购成功,将优惠劵id和用户id封装后存入阻塞队列。新增秒杀优惠券的同时,将优惠券保存到Redis中。原创 2022-11-23 20:54:21 · 596 阅读 · 0 评论 -
黑马点评--分布式锁
分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。原创 2022-11-20 15:41:48 · 919 阅读 · 0 评论 -
黑马点评--优惠卷秒杀
在VoucherController中提供一个接口,可以添加秒杀优惠券:http://localhost:8081/voucher/seckill。通过加锁可以解决在单机情况下的一人一单安全问题,但是在集群模式下就不行了。现在,用户请求会在这两个节点上负载均衡,再次测试下是否存在线程安全问题。需求:修改秒杀业务,要求同一个优惠券,一个用户只能下一单。2.乐观锁:不加锁,在更新时判读是否有其它线程在修改。CAS法(CompareAndSet)1.悲观锁:添加同步锁,让线程串行执行。原创 2022-11-16 13:06:36 · 1140 阅读 · 2 评论 -
黑马点评第二个模块---商户查询缓存
线程1查询缓存未命中,查询数据库之后要写入缓存时,有一个线程2插入进来更新数据库,由于缓存本来就没有所以删除缓存也没有。缓存击穿问题也叫热点Key问题,就是一个被高并发访问并且缓存重建业务比较复杂的key突然失效,无数的请求访问会在瞬间给数据库带来巨大的冲击。方法3:根据指定的key查询缓存,并反序列化为指定类型,利用缓存空值的方式解决缓存穿透问题。线程1删除缓存之后要更新数据库,同时线程2查询缓存未命中,然后查询数据库,写入缓存。代码改变ShopServiceImpl。原创 2022-11-13 17:57:21 · 742 阅读 · 0 评论 -
黑马点评第一个模块---短信登录实现
session共享问题:多台Tomcat并不共享session存储空间,当请求切换到不同tomcat服务时导致数据丢失的问题。新增一个拦截器(RefreshTokenInterceptor)去拦截所有请求,在每次请求之前刷新token。登录验证功能:请求中Cookie携带sessionId。MvcConfig中新增拦截器。SpringMvc配置拦截器。显然redis就是完美的。存入了UserDTO对象。以及请求拦截器的改变。原创 2022-11-09 20:05:24 · 1181 阅读 · 0 评论 -
ThreadLocal源码解析学习
每一个ThreadLocal都创建一个Map,然后用线程作为Map的key,要存储的局部变量作为Map的value,这样就能达到给个线程的局部变量隔离的效果。ThreadLocal的设计是:每一个Thread维护一个ThreadLocalMap,这个Map的key是ThreadLocal实例本身,value才是真正要存储的值Object。这个理解其实是不对的。ThreadLocalMap是ThreadLocal的内部类,没有实现Map接口,用独立的方式实现了Map的功能,其内部的Entry也是独立实现。原创 2022-11-08 13:05:04 · 384 阅读 · 0 评论 -
ThreadLocal类与synchronize关键字区别----一个简单示例
这里我们先构建一个简单的转账场景:有一个数据表account,里面有两个用户Jack和Rose,用户Jack给Rose转账。区别:虽然ThreadLocal模式与synchronize关键字都用于处理多线程并发访问变量,不过两者处理问题的角度和思路不同。案例中的转账涉及两个DML操作:一个转出,一个转入。下面用synchronize和ThreadLocal分别实现同样的功能。用一个案例去了解ThreadLocal具体运用在什么场景中。案例的实现主要用mysql数据库,jdbc和c3p0框架。原创 2022-11-06 16:53:26 · 474 阅读 · 0 评论 -
Redis学习基础知识
Redis的SortedSet是一个可排序的set集合,与Java中的TreeSet有些类似,但底层数据结构却差别很大。SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipLIst)加hash表。Redis的Set结构与Java中的HashSet类似,可以看做是一个value为null的HashMap。既可以支持正向检索和也可以支持反向检索。Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构。原创 2022-11-01 17:48:11 · 540 阅读 · 0 评论 -
栈的简单实现--Java
定义:栈是一种基于先进后出(FILO)的数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。我们称数据进入到栈的动作为压栈,数据从栈中出去的动作为弹栈。原创 2022-10-21 10:14:46 · 275 阅读 · 0 评论 -
线性表的顺序表和链表简单实现--Java
当我们使用SequenceList时,先new SequenceList(5)创建一个对象,创建对象时就需要指定容器的大小,初始化指定大小的数组来存储元素,当我们插入元素时,如果已经插入了5个元素,还要继续插入数据,则会报错,就不能插入了。顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组连续的存储单位,依次存储线性表中的各个元素,使得线性表在逻辑上相邻的数据元素存储在相邻的物理单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系。这个问题有没有解决方案呢?原创 2022-10-17 22:15:31 · 449 阅读 · 0 评论 -
redis基本数据类型以及常用操作学习
Redis sorted set 有序集合是String类型元素的集合,且不允许重复的成员。redis正是通过分数来为集合中的成员进行从小到大排序。有序集合的成员是唯一的,但分数却可以重复。移除并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。向有序集合添加一个或多个成员,或者更新已存在成员的分数。将哈希表key中的字段field的值设为value。设置指定key值,并将key的过期时间为10秒。获取存储在哈希表中的指定字段的值。移除有序集合中的一个或多个成员。原创 2022-10-03 13:53:43 · 500 阅读 · 0 评论 -
redis缓存失效问题
一个正常的访问流程1.缓存雪崩:redis缓存key同一时间大量失效,导致大量请求全部打到数据库,造成数据库挂掉。1.设置缓存的失效时间,让它2不在同一时间失效。在设置缓存的时候,随机初始化失效时间。这样就能避免缓存在同一时间失效,把所有请求都打到数据上。2.redis一般都是集群部署,可以将热点key放到不同的节点上。让热点的缓存,平均的分布在不同的节点上。3.不设置缓存失效时间,使其永远不失效。4.去跑定时任务,让它定时刷新缓存,避免缓存失效。2.缓存穿透。原创 2022-09-21 11:11:41 · 2250 阅读 · 0 评论 -
Springboot-redis学习第一天
1:如果你需要下Windows版redis可以在我的仓库中。通过:redis-cli.exe启动客户端。安装Redis环境,并练习数据类型相关命令。更改protected-mode yes为。requirepass 要很长的密码。注释掉bind 127.0.0.1。更改daemonize no为。3.启动,并指定配置文件。在redis目录中通过。启动redis服务器。原创 2022-09-17 22:07:57 · 414 阅读 · 0 评论 -
用mybatisplus实现一个简单的crud操作
根据 SpringBoot 中的数据访问章节中的案例,修改为 SpringBoot + MyBatisPlus 来实现用户的CRUD功能。原创 2022-09-15 23:07:00 · 243 阅读 · 0 评论 -
Spring-boot-starter-actuator的可视化spring-boot-admin
然后新建一个springboot项目导入spring-boot-admin-starter-server,将其作为我们的监控服务器。总结:Spring-boot-starter-actuator 通过请求可以获取被监控服务器的配置(前提是对外开放信息)基于Spring-boot-starter-actuator的可视化工具:spring-boot-admin。在被监控的服务器中导入spring-boot-admin-starter-client。然后可以观察到我们的应用被监控服务器所监控。原创 2022-09-13 22:43:09 · 1021 阅读 · 0 评论 -
Springboot2.7.3版本自动装配JmsMessagingTemplate失败问题
在使用Springboot2.7.3整合activemq中JmsMessagingTemplate装配不上。换一个Springboo2.5.4t版本可以装配上。原创 2022-09-11 20:51:01 · 389 阅读 · 0 评论 -
关于JavaMailSender明明导了包,写了yaml配置,但还是不能自动装配的问题。。。。。
什么都做了都是还是报错,可能是自己菜。所以就不用yaml文件,自己写配置类:如下。原创 2022-09-10 21:18:59 · 727 阅读 · 0 评论 -
SpringBoot自动装配原理
在通过getCandidateConfigurations加载所有spring-boot-autoconfigure.jar/META_INF/spring.factories中的类,在通过getCandidateConfigurationEntry方法和yml配置进行筛选,选择出需要自动装配的类,完成配置类的自动装配。可以获取所有的配置类,然后在getCandidateConfigurationEntry方法中进行筛选,选择出需要自动装配的类。导入的是我们启动类的所在的目录com.cdcas。原创 2022-09-08 23:30:51 · 221 阅读 · 0 评论 -
SpringBoot应用创建有几种方式?
编写启动类:springboot98Application。创建一个maven项目:导入如下坐标。这里的url可以换成阿里巴巴提供的。一个boot工程就建好了。原创 2022-09-08 18:57:06 · 191 阅读 · 0 评论 -
【无标题】
日期类型转换:传的数据为—date=2022/08/06&date1=2022-08-06&date2=2022/08/06 10:21:46。没有登录,跳转到登录页面。将拦截器注入到SpringMvcSupport中。原创 2022-09-04 23:50:47 · 119 阅读 · 0 评论 -
【无标题】
文件上传文件下载第一步导包:第二步配置.CommonsMultipartResolver的bean:第三步:编写业务层处理:上传完成。然后展示上传的文件到页面上:原创 2022-09-03 14:53:31 · 142 阅读 · 0 评论 -
【无标题】
需要提交 配置文件[mybatis-config.xml, spring.xml]以及 一个service和实现类,保证测试一个方法通过的截图。记得配置事务,注解事务以及xml事务。spring整合mybais。原创 2022-08-29 13:53:00 · 272 阅读 · 0 评论 -
【无标题】
3>创建部门和员工类将类交给spring管理,给dept中的list集合赋值.一种list赋值。查看,添加,修改 在方法执行都需要获取数据库的链接,在方法执行之后都需要关闭数据库的链接【环绕】添加,修改的方法,在方法之前执行,需要开启事务,如果没有异常提交事务,如果有异常,需要回滚事务。2>创建类,包含集合属性,如何给以下集合属性注入信息。2>创建切面类,切面类中规定对哪些类中的方法做增强。创建Car类,1) 借助set给属性注入值。dao又多了一个实现类,如何注入?emp:给emp中的dept赋值。...原创 2022-08-26 00:05:10 · 597 阅读 · 0 评论 -
Mybatis第三天
一级缓存:同一个sqlsession同一个namespace(大条件)–在两个相同的操作之间有增删改的操作会缓存失效。同sqlsession不同namespace失效,同namespace不同SQL session失效。很好的表达出一级缓存和二级缓存,以及代码正确的分析。1>动态sql练习关于员工的条件查询+分页。测试一级缓存,一级缓存失效的情况。测试一级缓存,一级缓存失效的情况。测试二级缓存,了解二级缓存失效。原创 2022-08-21 16:47:56 · 296 阅读 · 0 评论 -
mybatis第二天
1> 课堂案例做一遍2> 备份emp表,表明 emp_bak;查询方法 List(String tabname,String firstname,String email,int max,int min):传入表名,是从原表中获取数据还是从备份的表中获取数据List(String tabname,String firstname,String email,int max,int min)List(Map map);3>用户登录信息和用户基本信息[一对一的关系]用户登录,同时获取用户的基本信息Users f原创 2022-08-19 19:13:02 · 325 阅读 · 0 评论 -
mybatis第一天
单表的crud操作【字段多一些】 employees表条件查询动手能力强的同学,可以将之前的项目中的dao层更改为mybatis的实现。结构:}} < settings >原创 2022-08-18 01:17:06 · 168 阅读 · 0 评论 -
纯注解Spring整合Mybatis学习总结
MapperScannerConfigurer类通过动态代理,产生AccountDao的实现类。—如果你想了解底层原理。有了实现类,就可以通过sqlSession对象产生mapper代理对象,从而使使用者操作数据库。Spring-jdbc操作与数据库有关的jar包;JdbcConfig类------连接数据库产生DataSource对象。这两个bean会被Spring容器创建最后的mapper代理对象。**第一步**导入整合相关的jar包。**第三步**编写相关的配置类。......原创 2022-08-02 00:08:07 · 203 阅读 · 0 评论 -
数据源对象管理Druid和c3p0
这样我们就通过Spring管理第三方数据库连接池,获取到连接池对象。从而获取到Connection对象。在配置之前要开context空间;并且使用下面这句配置context空间加载properties文件。原创 2022-07-30 22:13:03 · 140 阅读 · 0 评论 -
Spring--bean生命周期
第一步编写BookDao}编写BookDaoImpl实现类System.out.println("初始化BookDaoImpl对象");System.out.println("BookDaoImpl对象已销毁");}}第二步Spring容器的配置原创 2022-07-30 00:18:16 · 148 阅读 · 0 评论 -
Spring学习的第一天
总结通过ApplicationContext对象加载Spring配置文件创建和初始化所有的对象,使对象的创建权由创建者到Spring容器这就是SpringIoC-----控制反转(InversionofControl)。(导入jar包)可以手动导也可以,通过maven或者其他工具导入。创建配置文件ApplicationContext.xml。创建HelloWorld类。创建MainApp类。...原创 2022-07-28 22:04:28 · 114 阅读 · 0 评论 -
Spring IoC与DI
学习目标:达到掌握IoC与DI的基本概念1.IoC什么是控制反转?基本概念:Spring容器负责程序之间的关系,而不是由调用者的程序代码直接控制。控制权由调用者到Spring容器。控制权发生反转,这就是Spring IoC。IoC作用:消减计算机的耦合问题(降低程序之间的关联性),有利代码的升级和维护Spring IoC容器的设计主要基于BeanFactory和ApplicationContext两个接口//通过BeanFactory接口实现Spring IoC从Spring容器中获取对象步骤1:编写原创 2022-06-17 15:08:37 · 110 阅读 · 0 评论 -
Java设计模式——代理模式
代理模式根据创建代理类的创建方式和时间不同可以分为:1、静态代理 2、动态代理代理模式的特征是什么?代理类与委托类有相同的接口,代理类主要负责为委托类预处理事件以及其它消息。代理类与委托类之间的联系一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法。1、静态代理静态代理是什么静态代理:编译时就将接口,代理类确定下来。在程序运行前就生成代理类的.class文件。一个简单的静态代理实现假如我给一个同学钱,让同学帮我写作业。这里原创 2022-04-04 15:13:58 · 652 阅读 · 1 评论