- 博客(260)
- 资源 (30)
- 收藏
- 关注
原创 从0到1学SpringCloud第十篇:登录鉴权和IP防刷
文章内容输出来源:拉勾教育Java高薪训练营1. 前言1.1 说明本文将对案例的判断是否登录以及非业务需求(注册限制)进行实现。在欢迎页面需要获取到登录用户的邮箱信息,这个请求api/users/info就要判断下用户是否登录,如果未登录则返回相应信息,让用户可以去登录后再操作 在注册页面,一个IP可以注册多次,但也不能让他们无节制的注册。所以需要限制一个IP最多可以注册多少次;一个IP的多次注册不能太频繁,要有时间间隔。实现的技术将使用GateWay提供的过滤器功能,它能够拦截请求.
2021-01-27 13:05:17
1464
原创 从0到1学SpringCloud第九篇:登录限流
文章内容输出来源:拉勾教育Java高薪训练营1. 前言1.1 说明本文将针对于用户登录接口进行限制它的请求频率,进行限流防刷。使用到了Sentinel进行相应的实践应用。1.2 什么是SentinelSentinel 是阿里巴巴开源的,面向分布式服务架构的高可用防护组件。主要以流量为切入点,从流量控制、流量整形、熔断降级、系统自适应保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。Sentinel 分为两个部分:核⼼库:(Java 客户端)不依赖任何框架/库,能够运⾏于.
2021-01-05 13:15:32
359
原创 从0到1学SpringCloud第八篇:API网关
文章内容输出来源:拉勾教育Java高薪训练营1. 前言1.1 说明现在我们是有三个服务:邮箱、验证码、用户。每个服务都有自己的请求端口。本文我们将引入GateWay网关,做为整个项目的访问入口,然后将流量转发至对应的服务。1.2 什么是GateWayGateWay是Spring Cloud的⼀个全新项⽬,⽬标是取代Netflix Zuul,它基于Spring5.0+SpringBoot2.0+WebFlux等技术开发。GateWay天⽣就是异步⾮阻塞的,基于Reactor模型。当.
2020-12-31 15:06:14
441
原创 从0到1学SpringCloud第七篇:分布式配置中心
文章内容输出来源:拉勾教育Java高薪训练营1. 前言1.1 说明前面使用了Nacos做为了服务的注册中心。然后Nacos也提供了配置管理的功能。本文就将使用Nacos提供的配置功能,对用户登录注册服务中的数据库连接信息、邮箱服务器的连接信息进行配置。然后各个服务就去找Nacos拿相应的配置进行使用。1.2 什么是Nacos的配置管理Nacos 提供用于存储配置和其他元数据的key/value存储,为分布式系统中的外部化配置提供服务器端和客户端支持。它的控制台很方便的提供了编辑配置.
2020-12-25 13:13:58
333
原创 从0到1学SpringCloud第六篇:服务远程调用
文章内容输出来源:拉勾教育Java高薪训练营1. 前言1.1 说明前面已经将三个服务注册到了Nacos服务端了。接下来就要继续改造三个服务的相互调用:验证码服务调用邮箱服务提供的发送邮件,用户服务调用验证码服务提供的校验服务。原先是直接通过HTTP请求进行调用。而针对于分布式服务来说,HTTP调用相比而言就单薄了些。更多的是使用RPC来调用。因为良好的rpc调用是面向服务的封装,针对服务的可用性和效率等都做了优化。单纯使用http调用则缺少了这些特性。本文就介绍下如何使用Dubbo来.
2020-12-18 11:07:30
932
原创 从0到1学SpringCloud第五篇:服务注册与发现
文章内容输出来源:拉勾教育Java高薪训练营1. 前言1.1 说明前面已经构建好了三个服务,并跑通了用户登录注册的业务流程。接下来,将会开始应用分布式技术对这个案例进一步的应用。这里主要使用了阿里巴巴开源的SpringCloudAlibaba(SCA)的相关技术。本文将介绍使用Nacos作为服务的注册发现中心,将用户、验证码、邮箱服务自动注册到Nacos服务端,然后服务消费方就可以通过Nacos感知到服务提供方的存在,进行调用。1.2 什么是NacosNacos是阿里巴巴开源的.
2020-12-17 09:27:02
214
原创 Ubuntu系统MySQL5.7的安装笔记
2.1 说明安装方式是通过官网下载相应的tar.gz压缩包进行安装。这种方式需要自己动手的部分比较多,如配置文件的设计、环境变量的配置、开机启动服务等。虽然麻烦些,但细节会更清楚。2.2 下载安装包2.2.1 进入官网的下载页面直达地址:https://downloads.mysql.com/archives/community/2.2.2 选择相应的版本下载这里我选择了5.7.29,Linux的通用版本,然后点击下载按钮,将安装包下载到本地官网下载会比较慢,可以从从这个地址
2020-12-09 16:49:02
334
原创 从0到1学SpringCloud第四篇:Nginx的配置
文章内容输出来源:拉勾教育Java高薪训练营1. 问题说明通过前面几篇,整个案例的业务逻辑都处理完了,提供了以下的动态资源服务用户服务:http://localhost:8081 验证码服务:http://localhost:8083 邮箱服务:http://localhost:8082因为前后端分离,还有一个静态资源的服务也是不一样的端口。在前面测试的时候,因为各个服务的请求端口不一样,在静态页面上调用时出现了跨域的问题。这里,考虑通过在Nginx上配置静态资源和动态资源服务.
2020-12-04 11:07:49
441
原创 从0到1学SprignCloud第三篇:用户业务实现以及前端交互
文章内容输出来源:拉勾教育Java高薪训练营本文接着实现用户服务的业务逻辑,还有前端的登录、注册、欢迎页面的交互1. 用户服务接口lagou-service-user项目1.1 创建实体类包括了用户实体User、用户令牌实体Token@Data@Entity@Table(name = "lagou_token")public class Token { @Id @GeneratedValue(strategy = GenerationType.IDEN.
2020-12-03 10:38:53
538
1
原创 从0到1学SpringCloud第二篇:邮箱和验证码业务实现
文章内容输出来源:拉勾教育Java高薪训练营前期的准备后,接下来就可以编写业务逻辑代码。本文就针对于邮箱的发送邮件,验证码服务的生成以及校验的逻辑进行实现。1. 邮箱服务接口lagou-service-email项目1.1 在pom.xml配置文件中添加邮件的依赖<dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId>.
2020-12-02 11:13:21
1436
原创 从0到1学SpringCloud第一篇:前期准备
文章内容输出来源:拉勾教育Java高薪训练营本文想通过一个用户登录注册的案例,一步一步的将学习到的SpringCloud的知识点串起来。从简单的需求做起,拆分服务实现业务逻辑。然后再将这个案例分布式化,实现服务的注册与发现、网关配置、服务的远程调用、分布式配置、限流防刷。接下来,先梳理下这个案例的前期准备:要实现什么样的功能、数据库表的设计、项目的搭建。1. 案例的业务需求1.1 注册需求在注册页面上,用户输入邮箱、密码、验证码,进行注册 在注册页面上,有一个获取验证码的按钮,点击.
2020-12-01 18:09:09
426
1
原创 Dubbo学习笔记-入门
文章内容输出来源:拉勾教育Java高薪训练营介绍Dubbo是一款高性能、轻量级的Java RPC框架(官网地址)提供了三大核心能力面向接口的远程方法调用智能容错和负载均衡服务自动注册和发现处理流程节点说明Provider:服务提供方,暴露服务Consumer:服务消费者,调用远程服务Registry:注册中心,服务注册与发现Monitor:监控中心,统计服务的调用次数和调用时间Container:服务运行容器,启动、加载、运行服务提供者调用关系说明实线是同步调用.
2020-11-26 23:41:14
1217
原创 Zookeeper学习笔记-安装以及基础命令
从官网下载直达地址解压tar -zxvf xxx.tar.gz创建zoo.cfg配置mv conf/zoo_sample.cfg zoo.cfg指定数据的存储目录# 进入zookeeper的目录下创建data目录mkdir data# 编辑zoo.cfg配置文件,在data配置项中指定上述data的路径启动sh bin/zkServer.sh start验证sh bin/zkServer.sh status登录客户端sh bin/zkCli.s.
2020-11-26 23:35:51
157
原创 集群环境下实现Session共享
文章内容输出来源:拉勾教育Java高薪训练营文章目录为什么要实现Session共享实现方案1. Nginx的IP_Hash策略2. Tomcat的Session复制3. Session集中存储SpringSession使用示例数据库脚本项目实现步骤Tomcat配置步骤Nginx配置步骤演示效果项目代码为什么要实现Session共享Http是无状态的,为了保持用户的信息,就需要通过Cookie或者Session来存储会话信息。如用户登录成功后,在Session中存储用户信息,此用户后续的操作就不用再.
2020-10-12 16:53:02
538
原创 设计模式实践-策略模式小Demo
文章内容输出来源:拉勾教育Java高薪训练营文章目录策略模式问题分析示例Demo1. 定义能用的折扣方案基类2. 定义多种价格方案3. 定义商品4. 多种商品使用多种优惠的测试项目代码策略模式策略模式Strategy,指一个问题有多种解决方案,选择其中的一种使用,并能灵活的扩展解决方案而不影响原有的代码。如商品打折有多种方案:打1折,不打折,打5折,满200减50等。问题分析像上面说到的商品打折方案,商家要根据不同的商品选择不同的打折方案,从而计算出客户购买的商品的优惠后价格,生成订单。比.
2020-09-27 09:55:21
198
原创 熟悉Thymeleaf模板引擎
文章内容输出来源:拉勾教育Java高薪训练营Thymeleaf是什么 服务端的Java模板引擎技术 有丰富的标签语言、函数和表达式 SpringBoot默认的页面模板 HTML模板 xmlns:th="http://thymeleaf.org" 引入模板引擎标签 使用th开头的语法标签,如th:href,th:text 常用标签常用表达式 <div th:insert="~{thDemo:title}"></div>将...
2020-09-26 22:31:07
223
原创 SpringBoot的理论笔记-基础回顾
文章内容输出来源:拉勾教育Java高薪训练营Spring的优化 SpringBoot在处理什么问题 EJB的替代品,轻量级的组件 IOC和AOP提高开发效率 与框架能很好的配合使用 Spring的缺点 配置重量级 很多的XML配置 后期使用了注解扫描进行了改进 编写配置增加开发时间,降低开发效率 项目依赖管理耗时耗力 考虑引入哪些依赖 分析引入依赖的关联依赖 依赖的版本兼容性问题 SpringBoot的优点 处理上述...
2020-09-26 20:53:09
223
原创 SpringMVC实践笔记-手写简易MVC第二篇之权限
文章内容输出来源:拉勾教育Java高薪训练营文章目录说明思路说明实现过程测试项目代码说明接着上一篇手写简易MVC第一篇,接着为这个框架增加权限的控制功能。主要是配置请求方法能被哪些用户访问,如果某个用户没有权限则提示没有相应的权限。这里的实现,直接按用户名进行判断,用户名在代码中硬编码。前端发送URL请求带上username就表示某个用户的访问。思路说明创建权限注解,权限注解在Controller类或者Controller类的method方法上标识权限注解有个用户名数组,可以配置哪些.
2020-09-26 19:43:23
386
原创 SpringMVC实践笔记-手写简易MVC第一篇
文章内容输出来源:拉勾教育Java高薪训练营文章目录说明整体思路实现过程1. 创建web的maven项目**simple_mvc**2. 创建Controller注解3. 创建RequestMapping注解4. 创建处理器类``Handler``5. 创建mvc的配置文件**spring-mvc.properties**6. 创建前端控制器``DispatcherServlet``7. 前端控制器的初始化准备工作8. 前端控制器的请求解析处理9. web.xml进行mvc的配置测试项目代码说明写.
2020-09-26 19:16:12
255
原创 Mybatis实践笔记-如何自定义插件
文章内容输出来源:拉勾教育Java高薪训练营插件说明Mybatis提供了插件这一个扩展功能,可以支持开发者进行按需定制开发,丰富了Mybatis的功能。插件支持对以下组件的方法进行拦截,进行增强执行器Executor(update,query,commit等方法)SQL语法构建器StatementHandler(prepare,parameterize,batch等方法)参数处理器ParameterHandler(setParameters等方法)结果集处理器ResultSetHandl.
2020-09-25 17:40:54
242
原创 Spring实践笔记-手写简易的Spring第三篇之注解
文章内容输出来源:拉勾教育Java高薪训练营文章目录相关文章问题问题思路注解实现1. 创建注解类2. 创建Bean信息类``BeanDefinition``3. 在配置文件中配置上需要进行扫描放到IOC容器中管理的类所在的包名package4. 在``BeanFactory``的初始化加载Bean方法中增加注解解析处理5. 代理工厂``ProxyFactory``增加CGLIB动态代理生成对象方法6. 创建Bean工厂单例工具类``BeanFactoryUtils``7. 在相关的业务类、工具类上声明.
2020-09-25 14:55:31
298
原创 Spring实践笔记-手写简易的Spring第二篇之事务AOP
文章内容输出来源:拉勾教育Java高薪训练营文章目录问题问题思路实现事务管理1. 数据库连接Connection的复用2. 增加事务管理类,实现事务的三种操作3. 增加代理工厂,实现对方法进行事务的增加4. 生成事务相关的Bean5. 测试项目代码问题在上一篇写一个简单的IOC中提到了转账业务,A从自己的帐户中取出钱,转到了B的帐户上。这里要拆分成两个动作:A帐户取出钱、B帐户增加钱。如果因为某些故障,导致了A帐户取出钱成功,但是B帐户增加钱失败,那就有问题,违反了数据的一致性。这两个动作要.
2020-09-25 11:51:03
192
原创 面试题-Mybatis
文章目录什么是ORM框架什么是MybatisMybatis的优势是什么Mybatis的缺点是什么Mybatis适用的场景为什么说 Mybatis 是半自动 ORM 映射工具?它与全自动的区别在哪里?Mybatis与Hibernate有什么不同什么是 MyBatis的接口绑定?有哪些实现方式?使用 MyBatis 的 mapper 接口调用时有哪些要求?通常一个 Xml 映射文件,都会写一个 Dao 接口与之对应,请问,这个 Dao 接口的工作原理是什么?Dao 接口里的方法,参数不同时,方法能重载吗?Myb
2020-09-25 11:07:30
208
原创 Spring实践笔记-手写简易的Spring第一篇之IOC
文章内容输出来源:拉勾教育Java高薪训练营文章目录Spring的IOC什么是控制什么是反转手写IOC功能项目代码Spring的IOCIOC:Inversion of Control,控制反转什么是控制对象的创建、销毁的控制权什么是反转传统方式下,对象需要由开发者自己写New代码去创建,控制权掌握在开发者手里反转就是把开发者的这个权利移交出去,交由Spring的IOC容器去实例化、管理。开发者想要什么对象,直接找容器拿手写IOC功能定义配置文件beans.xml,在配置文件.
2020-09-24 23:25:22
247
原创 设计模式实践-小Demo示例
文章内容输出来源:拉勾教育Java高薪训练营文章目录Builder建造者模式示例Demo简单工厂模式示例Demo代理模式示例Demo项目代码Builder建造者模式如果一个对象的构建比较复杂,将其进行拆分成多个组件,再一步一步构建为一个复杂对象示例Demo汽车的构造很复杂,需要由很多的部件组合而成,像车轮、发动机、底盘这些。那么就可以拆分下,先去生产汽车的各个部件。再统一由一个汽车构建器,将各个生产完的部件组合在一起,创建一辆汽车。创建汽车类Car,汽车拥有发动机、底盘等部件属性.
2020-09-24 16:10:52
247
原创 Mybatis实践笔记-使用分页插件PageHelper
文章内容输出来源:拉勾教育Java高薪训练营文章目录项目准备分页功能实现项目代码项目准备创建示例的Maven项目mybatis_demo_03_plugin_pagehelper引入mybatis依赖,创建核心配置文件mybatis-config.xml项目使用h2内存数据库引入h2的驱动依赖 <dependency> <groupId>com.h2database</groupId> <artifactId&g.
2020-09-24 14:18:24
252
原创 Mybatis实践笔记-写一个简易Mybatis
文章内容输出来源:拉勾教育Java高薪训练营文章目录说明一、数据准备二、项目准备三、分析问题四、项目设计设计思路框架设计五、项目实现1. 读取并解析配置文件2. 创建执行器3. 创建会话层项目测试1. 创建核心配置文件2. 创建用户DAO接口3. 创建用户Mapper数据脚本4. 创建用户单元测试类项目代码说明通过分析使用原生JDBC操作存在的问题,带着这些问题的解决思路,结合Mybatis框架主流程,一步一步搭建一个简易版本。一、数据准备创建MYSQL数据库DROP DATABASE .
2020-09-23 16:42:47
236
原创 Mybatis实践笔记-一级缓存和二级缓存
文章内容输出来源:拉勾教育Java高薪训练营文章目录缓存说明一级缓存一级缓存介绍二级缓存二级缓存介绍参数配置示例示例准备一级缓存示例二级缓存示例源码跟踪一级缓存源码分析项目代码缓存说明Mybatis的缓存分为一级缓存、二级缓存一级缓存一级缓存介绍SqlSession级别的缓存采用了基于HashMap实现的PerpetualCache进行存储不同SqlSession的缓存是互不影响当同一个Session进行了commit或者close操作后,缓存就会失效Mybatis默认开启一级缓存.
2020-09-22 15:10:26
209
原创 Mybatis实践笔记-去XML化的注解开发
文章内容输出来源:拉勾教育Java高薪训练营文章目录介绍注解介绍示例一、开始之前的配置二、新增订单数据三、更新订单数据四、删除订单数据五、查询全部订单数据六、查询单条订单数据七、查询订单以及关联的用户数据八、查询用户以及关联的订单数据九、使用动态SQL支持复杂条件的查询订单数据介绍Mybatis使用注解开发,可以减少编写XML文件,对于不复杂的数据逻辑处理也是比较简单适用。本文演示Mybatis使用注解开发的增删改查操作。注解介绍@Insert:插入@Update:更新@De.
2020-09-22 12:03:52
481
原创 一步一步搭建Spring/SpringMVC/SpringJPA整合的示例项目
文章内容输出来源:拉勾教育Java高薪训练营文章目录目标整体思路实现过程数据库准备创建项目Spring与Spring JPA的整合整合Spring MVC实现用户登录功能简历的CRUD功能实现项目代码目标项目的主要目标是,将SSS三个主流框架进行整合,并实现简单的用户登录,展示简历的列表、添加、编辑、删除的功能SSS = Spring + Spring JPA + Spring MVC整体思路分为以下三个步骤:1、整合Spring+Spring JPA2、整合Spring MVC3.
2020-09-21 18:34:33
223
原创 了解SSL证书以及SSL证书的选型
证书类型DV证书 只验证域名信息 签发时间:几分钟 适合:个人网站 细分类型 通配符DV 个人/企业型SSL证书。保护一个主要域名和无限个子域名。浏览器上有https提示并有绿锁标记。最快分钟级签发。适合个人和小企业,支持个人和企业申请。 免费版(个人)DV 个人型SSL证书,保护一个域名。浏览器上有https提示并有绿锁标记。快速签发,适合个人和小微企业,支持个人/企业申请。一个阿里云帐户最多签发20张。 OV证书 要求认证公司信息
2020-09-17 17:58:25
719
原创 解决Git项目的文件提交人信息不是指定账号的问题
问题在gitee上创建了项目,拉取到本地后,进行文件提交、更新,发现提交人信息不是我在gitee上注册的账号、邮箱。本文记录在mac系统下增加不同邮箱的SSH Key、在gitee上的配置、以及修改项目的提交人信息为指定邮箱。自定义的邮箱为yyh@126.com。在mac上增加SSH key进入~/.ssh目录生成一个SSH KEY(1)自定义邮箱:yyh@126.com,并将目标文件指定为了id_rsa.giteessh-keygen -t rsa -f ~/.ssh/id
2020-09-16 10:27:37
2133
原创 String、StringBuilder、StringBuffer的区别
String是Java中很常使用到的字符串类。从源码看,它被设计成了final class,属性value是被final修饰的char数组,具备不可变性,也就是说String对象一旦被创建就不能再被修改,当进行字符串的拼接、截取,都会产生新的String对象因为String的拼接操作很普遍,频繁创建、销毁对象开销就会比较的大。于是,就有了StringBuffer、StringBuilder类...
2020-01-07 16:53:47
209
原创 泛型知识
1、泛型是指参数化类型的能力。使用泛型能定义带泛型类型的类或方法,之后编译器会用具体类型来替换泛型类型2、泛型的主要优势是能够在编译时而不是运行时发现错误3、泛型类或方法允许指定对象允许的类型,以和这个类或方法一起工作。如果试图使用带有不兼容对象的类或方法,编译器会检测出这个错误4、定义在类、接口或者静态方法中的泛型称为形式泛型类型,随后可以用一个实际具体类
2013-08-12 23:41:41
818
原创 在你的C:\android-sdk-windows\tools目录下并没有adb.exe这个可执行文件
如果在你的C:\android-sdk-windows\tools目录下并没有adb.exe这个可执行文件。并且当你打开Eclipse时,有关Android的插件会报错。这时你就应该这样做:首先,改一下你的环境变量,把原来的C:\android-sdk-windows\tools改成C:\android-sdk-windows\platform-tools。其次,把C:\android-sdk
2013-08-11 17:45:52
3240
转载 一篇不错的讲解Java异常的文章(转载)----感觉很不错,读了以后很有启发
六种异常处理的陋习你觉得自己是一个Java专家吗?是否肯定自己已经全面掌握了Java的异常处理机制?在下面这段代码中,你能够迅速找出异常处理的六个问题吗? 1 OutputStreamWriter out = ... 2 java.sql.Connection conn = ... 3 try { // ⑸ 4 Statement stat = con
2013-07-09 19:26:17
926
原创 android学习笔记
系统提供的对话框警告AlertDialog,进度对话框ProgressDialog,日期选择对话框DatePickerDialog 时间选择对话框TimePickerDialog常见事件监听器 OnClickListener,OnFocusChangeListener,OnKeyListener,OnTouchListener,OnCreateContextMenuListene
2013-05-15 15:42:01
963
原创 android之alertDialog
final AlertDialog.Builder builder=new AlertDialog.Builder(this); builder.setMessage("sure to exit?"). setPositiveButton("yes",new DialogInterface.OnClickListener(){ }). setNegativeButton("no",new
2013-05-15 15:26:48
897
原创 android三种菜单
一、创建可选菜单public class MainActivity{ public boolean onCreateOptionMenu(Menu menu){ menu.add(0,1,"start"); menu.add(0,2,"exit"); return true; } public boolean onOptionsItemSelected(MenuItem i
2013-05-15 15:25:19
942
原创 android学习笔记点滴
关于Activity生命周期 开始Activity: onCreate,onStart,onResume 重新获得焦点: onRestart,onStart,onResume 关闭Activity: onPause,onStop,onDestory 整体生命周期 :onCreate---onDestory 可视生命周期:onStart---onStop 焦点生命周期:onR
2013-05-15 15:16:02
932
mysql5.7.29版本的安装包
2020-12-09
Solr参考书籍
2015-03-16
SVN参考资料
2015-03-13
基于SharpPcap的协议分析器
2012-12-22
简易聊天室
2012-05-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人