IT技术类
文章平均质量分 93
我是鳄鱼头领
@公众号 | IT技术小栈
展开
-
@Autowired依赖注入为啥不推荐了
这几天更新升级了一下java编码神器IDEA,升级完进行日常开发,可能是以前用的IDEA版本比较老旧,升级之后发现之前的日常写法有了个warning提醒。来看图:如上图,这就奇怪了,我们经常写的业务层就是service接口层和对应的实现类层进行属性注入的时候都是采用注解进行注入的。这也是springIOC给提供的比较方便的地方。我使用IDEA提供的自动修复提示修复了之后变成采用构造函数的形式进行注入了。但是多年面向Spring开发的经验告诉我,使用@Autowired注解进行依赖注入,肯定是没有问题原创 2021-05-26 17:19:38 · 2927 阅读 · 1 评论 -
学习微服务系列(八):springboot服务分布式事务及解决方案
事务相信有过研发经验的小伙伴都听过这个词"事务”,什么是事务咱们简单举个生活中的例子:比如你去饭店吃饭,你吃完饭就得给钱结账,你不结账人家饭馆老板就不同意,你给钱了但是老板没给你做菜那么你也不同意。所以这个场景就是双方必须全部成功整个过程才算结束。所以事务的定义就是:事务可以看做是若干个操作共同组成的一件事,这些子事件要么全部成功,要么全部失败。本地事务本地事务其实就是说的是我们传统的单体服务下的数据库事务,我们先回顾一下数据库事务的四大特性 ACID:A(Atomic):原子性,构成事务的原创 2021-02-08 13:31:38 · 5115 阅读 · 2 评论 -
学习微服务系列(七):nacos原理分析
我们前两篇文章介绍了nacos在服务注册发现和分布式配置方面的作用。在实际生产中使用nacos你就会体会到nacos是多么的方便,基于nacos的服务注册能力可以做优雅停服功能,从此我们发版上线就不必非要等到半夜才能发布。只要随时找个业务低峰发布对应的服务集群即可。接下来我们看一下nacos的原理。Nacos 服务注册与发现原理分析nacos的功能之一就是作为服务注册发现模块也就是我们常说的注册中心,nacos支持所有主流类型服务框架的注册配置和管理,微服务我们最开始接触的中间件就是Dubbo,很多人对原创 2021-02-05 15:54:19 · 1710 阅读 · 1 评论 -
学习微服务系列(六):springboot微服务使用nacos作为配置中心
上篇文章我们介绍了服务采用nacos作为注册中心,其实nacos还有另外一个作用是作为配置中心,但是功能要比springcloud-config功能强大配置简单。说配置文件大家都比较了解。我们在项目里经常使用各种properties配置各种内容,比如我们把调用其它服务的url配置到配置文件中统一管理。但是在分布式架构生态下各个应用自己都维护一份配置显然就会出现不足。第一:配置的动态更新问题,第二:配置相同需要多次修改问题,第三:安全性问题。所以一般我们在微服务体系中会维护一个配置中心来动态变更配置并可以动态原创 2021-02-03 18:17:40 · 567 阅读 · 0 评论 -
学习微服务系列(五):springboot微服务使用nacos作为注册中心
前面几篇文章我们介绍了微服务,知道了微服务网关。下面呢我们就学习一下微服务的注册中心。什么是注册中心呢,现在我们的每个微服务都是部署一个独立的机器或者docker中,每个都有一个独立的IP地址,那么服务发现基本上都是通过某种方式获取到服务所部署的IP地址。A服务调用B服务时如果采用微服务的模式进行调用的话就需要到注册中心获取B服务所部署的机器的ip和端口进而才能进行对B服务的调用。所以可想而知注册中心在整个微服务体系中是十分重要的。我们经常听到的ZooKeeper就是可实现服务发现的组件之一,包括eurek原创 2021-02-01 18:12:47 · 1103 阅读 · 1 评论 -
学习微服务系列(四):springboot服务gateway网关
什么是服务网关前文我们已经了解了构建微服务的基础springboot,同时也能使用springboot构建服务。接下来我们就基于springboot聊一下springcloud。这个springcloud并不是一个特定的技术,它指的是微服务中一个生态体系。比如包括网关,注册中心,配置中心等。今天我们就先了解一下微服务网关,微服务网关有很多种我们这次采用现在主流的spring cloud gateway来讲解说明。在微服务体系中,每个服务都是一个独立的模块都是一个独立运行的组件,一个完整的微服务体系是由若原创 2021-01-29 16:36:27 · 10751 阅读 · 0 评论 -
学习微服务系列(三):springboot+页面前后端分离与RESTFUL风格接口编写
前后端分离通过我们本系列第二个文章"学习微服务系列(二):基于springboot构建服务"我们可以搭建了一个基于springboot的服务,同时也可以实现类似我们以前的单体服务一样整合一个页面模板到服务中。现在主流的应用并不是在一个服务中整合页面模板,而是做成前后端分离的机构,采用http协议进行前后端数据交互,我们做的B-S类的产品大概进行了3个阶段最终到我们现在的前后端分离:第一阶段是所有的请求都被发送给作为控制器的Servlet,并根据请求信息将它们分发给适当的JSP来响应,Servlet还根原创 2021-01-28 15:38:21 · 751 阅读 · 2 评论 -
学习微服务系列(二):基于springboot构建服务
注意:本 Spring Boot 系列文章基于 Spring Boot 版本最新版 2.4.2 进行学习分析,版本不同可能会有细微差别。另外springboot-springcloud是实现微服务生态的一种,并不说明使用springboot就是实现了微服务。根据上文学习微服务系列(一):认识微服务 的介绍相信大家对与微服务都有所了解了,也知晓微服务的作用以及微服务生态中涉及的技术和中间件。Spring Boot 是什么相信大家对于Spring肯定不陌生,在JAVA这个技术圈中Spring占据着举足.原创 2021-01-26 18:09:59 · 475 阅读 · 2 评论 -
学习微服务系列(一):认识微服务
我们曾经的服务-单体服务我们对于一个新模块开发时,好多小伙伴就会问为什么我们要搞微服务架构,一个项目把代码从头撸到尾不是很方便吗,开发更快速,部署也容易。如果使用微服务,涉及的技术就一大堆,中间还容易出现各种不一致的问题。对于这种问题怎么回答呢?那我们就先看看我们以前做个B-S服务是啥样的吧。。。最开始我们都是弄一个tomcat(服务容器)+mysql(数据库)直接就把项目打成war包扔到tomcat下直接启动部署,通过浏览器就可以访问了。有的甚至是服务+页面+数据库都在一台机器上直接就上到网上了给用原创 2021-01-25 19:55:14 · 446 阅读 · 0 评论 -
策略模式与工厂方法模式在项目中区别与应用
我们写代码如果逻辑判断比较多的时候,if的情况比较复杂的时候是不是经常写出这样的代码:就如上图一堆一堆的if-else判断,看的人眼花缭乱的。其实从代码的优雅角度来看这就是一堆辣鸡,根本拿不上台面。那么需要怎么优化一下类似上面的这么多if-else呢?策略模式经典兵法 《设计模式之禅》对于策略模式有个简单的定义:定义一组算法,将每个算法都封装起来,并且使他们之间可以互换。。。。。Context叫做上下文角色,起承上启下封装作用,屏蔽高层模块对策略、算法的直接访问,封装可能存在的变化。。。。。原创 2021-01-23 18:06:04 · 294 阅读 · 0 评论 -
springboot做代理分发服务+代理鉴权
还原背景大家都做过b-s架构的应用,也就是基于浏览器的软件应用。现在呢有个场景就是FE端也就是前端工程是前后端分离的,采用主流的前端框架VUE编写。服务端采用的是springBoot架构。现在有另外一个服务也需要与前端页面交互,但是由于之前前端与服务端1交互时有鉴权与登录体系逻辑控制以及分布式session存储逻辑都在服务1中,没有把认证流程放到网关。所以新服务与前端交互则不想再重复编写一套鉴权认证逻辑。最终想通过服务1进行一个代理把前端固定的请求转发到新加的服务2上。怎么实现.原创 2021-01-21 17:10:55 · 2346 阅读 · 4 评论 -
js 处理特殊字符
//匹配中文 数字 字母 下划线varcheckInput =function(str) { varpattern =/^[\w\u4e00-\u9fa5]+$/gi; if(pattern.test(c)) { returnfalse; } returntrue;}//过滤特殊字符, 校原创 2016-10-28 15:50:43 · 1545 阅读 · 1 评论 -
css+div模拟进度条
50%原创 2014-09-05 11:18:30 · 621 阅读 · 0 评论 -
js常用校验
//校验是否全由数字组成[code] function isDigit(s) { var patrn=/^[0-9]{1,20}$/; if (!patrn.test(s)) return false return true } [/code]//校验登录名:只能输入5-20个以字母开头、可带数字、“_”、“.”的字串[code] function isRegisterUs转载 2014-09-17 10:57:13 · 387 阅读 · 0 评论 -
java操作properties文件
public static String readValue(String filePath,String key) { Properties props = new Properties(); try { InputStream in = new BufferedInputStream (new FileInputStream(filePath));转载 2014-10-11 11:24:24 · 305 阅读 · 0 评论 -
项目开发中遇到的谷歌和火狐之间细微差异
1.火狐和IE可以使用document.documentElement.scrollTop获取滚动条高度,而谷歌只能用document.body.scrollTop。2.火狐中innerText是获取不到文本的。谷歌却可以。原创 2015-07-31 10:26:24 · 817 阅读 · 0 评论 -
web开发中上传图片保存base64 好还是保存文件
使用base64:URL的优缺点个人觉得base64:URL传输图片文件的好处在于:1.减少了HTTP请求2.某些文件可以避免跨域的问题3.没有图片更新要重新上传,还要清理缓存的问题不足在于:1.浏览器支持使用base64编码图片作为背景图片的这种技术IE6/IE7浏览器是不支持的(IE9浏览器IE7模式下支持,这里被@前端的那点破事鄙视了转载 2016-01-28 17:36:04 · 14749 阅读 · 0 评论 -
高并发高可用
构建高并发高可用的电商平台架构实践一、 设计理念 1. 空间换时间 1) 多级缓存,静态化客户端页面缓存(http header中包含Expires/Cache of Control,last modified(304,server不返回body,客户端可以继续用cache,减少流量),ETag)反向代理缓存应用端的缓转载 2016-01-28 18:01:14 · 4457 阅读 · 0 评论 -
缓存
在平时做项目的时候,有一些数据并不是很频繁的改动,而且这些数据在很多地方用到,这个时候就可以把这个数据做成缓存的形式,一旦有了缓存,就不用每次用到的时候,就去数据库里读取,只需要第一次拿到数据以后,以后就可以从缓存里面提取数据。一个通常的处理方式,就是在应用程序启动的时候,就从数据库读取数据,然后保存在缓存中.缓存的数据放在上面地方呢,在JAVA中比较方便的是放在hashmap里面。注意h转载 2016-01-29 09:58:10 · 364 阅读 · 0 评论 -
今天面试面试官叫我当场写a+aa+aaa+aaaa......java实现,现在完善一下。
package publicpp.demo;import java.util.Scanner;public class SumNumbers{public SumNumbers(int num,int count){int[] r=getNumbers(num,count);System.out.println(getString(r)+ "=" + c原创 2013-09-30 10:35:27 · 808 阅读 · 0 评论