
Java学习
文章平均质量分 63
记录学习Java的故事!
cj1561435010
这个作者很懒,什么都没留下…
展开
-
手写RPC框架
一、架构预览二、传输的实体类为了使异步请求能正确接收到对端的响应,分别在请求和响应传输实体中加了唯一 ID 作为标记。 @Getter @Setter public class RpcRequest implements Serializable { private static final long serialVersionUID = 7750930861331017198L; //接口名 private String interfaceName;原创 2021-04-04 16:06:57 · 313 阅读 · 1 评论 -
JDK8中新的日期类学习
一、LocalDate类1、获得当前日期(年、月、日) LocalDate localDate = LocalDate.now(); System.out.println(localDate); //localDate.getMonth()返回的是个枚举对象 System.out.println("年: " + localDate.getYear() + "\t月: " + localDate.getMonth().getValue() + "\t日: " + localDate原创 2020-12-14 19:35:23 · 232 阅读 · 0 评论 -
论Maven(SpringBoot打成可执行jar包的那些坑、SpringBoot打war包)
一、概述Maven1、Maven工程的约定目录项目名(根目录) - src - main - java(主程序的java源码) &nbs原创 2020-11-15 09:19:25 · 634 阅读 · 0 评论 -
基于SpringBoot实现的文件监听器
最近有这么个需求,用户期望可以通过修改配置文件,并将数据文件丢到服务器上面,立即读取数据并绘制。由于这个数据我们不能直接拿来就用,需要转一遍格式,而且转换的速度又不是非常快,所以 和师兄们商量着想了个替代方案,异步化处理数据,不是用户点击之后才进行数据的转换,而是先转好,这个数据放内存也不靠谱,肯定要放数据库做持久化的,反正先整着试试。1、引依赖 <dependency> <groupId>commons-io</groupId>原创 2020-10-15 19:08:54 · 1826 阅读 · 0 评论 -
Java核心技术卷1扫盲笔记
转义序列\u 注释中不要出现\u,因为Unicode转义序列会在解析代码之前得到处理。 转义序列\u和其他转义序列不同,其他转义序列,如:\t,\n等只能出现在双引号之中,而\u可以出现在加引号的字符串外。java中保留的关键字 const和goto是ja原创 2020-07-05 15:05:12 · 683 阅读 · 0 评论 -
循环依赖问题终极解决方案
今天下午给师兄抽云图数据的时候,报错了。说到底还是C++太菜了,调试了一会才发现是写了个循环依赖,这四个字是这篇文章的重点。这个不是头文件重复包含的问题,看下面的图可能一下就明白了菜鸡犯的错。。。事后看看,这不报错就有鬼了。。。这不就死锁了吗。。。这时候突然想到Spring里面会不会有循环依赖这种问题,一想还是非常有可能的。比如你写的业务A需要调用到业务B的某个接口,而业务B的某个方法也需要调用业务A的某个接口。好了,又是类似之前的循环依赖。网上说Spring依赖注入相当于有两种方式:1、set原创 2020-05-16 21:11:15 · 6508 阅读 · 1 评论 -
SpringCloud---ribbon负载均衡策略分析
一、本地负载均衡和Nginx负载均衡的区别1、本地负载均衡 消费者服务从我们的注册中心获取到集群地址列表,缓存到JVM本地,本地采用负载均衡策略,实现RPC的远程调用。之所以叫本地感觉是相对的,消费者基于生产者就好比是客户端和服务端之间的关系,所以这也叫本地负载均衡吧。2、Nginx负载均衡 客户端的所有请求都会交给Nginx代理,转发原创 2020-05-09 10:47:47 · 416 阅读 · 0 评论 -
SpringCloud---RPC框架OpenFeign的使用
一、基本概念梳理 微服务架构上,都是采用Restful风格进行通信的。1、IPC 进程间通信,Inter-Process Communication指至少两个进程或线程间传送数据或信号的一些技术或方法。每个进程都有自己的一部分独立...原创 2020-05-06 21:12:33 · 3063 阅读 · 4 评论 -
SpringCloud---nacos(服务注册中心、分布式配置中心)
一、架构的演变(图参考自蚂蚁课堂)1、单体应用架构这种架构部署很简单,像SSM框架就是典型的例子,运维人员共各地不需要太深功力。但是这种架构很有问题,代码耦合度极高,只要一点需求变动,就要重新打包部署,整个系统期间都处于不可用状态,而且没有对业务逻辑代码进行拆分,代码都挤在一起。2、分布式架构这种架构将业务进行了粗粒度的拆分,不同业务直接写在不同系统上面,一定程度上降低了代码的耦合度。...原创 2020-05-06 13:50:55 · 1362 阅读 · 0 评论 -
sentinel-1.7.1jar包下载及最新版编译好的nacos-1.2.1
GitHub上的Release版本下载都是非常慢的,推荐先fork到本地仓库,之后通过码云到处源码文件,自己手动对源码进行编译,快准狠。1、源码编译排错记录 在编译过程中,报出如下错误,点开到对应的文件中查看日志。发现原来是te...原创 2020-05-04 15:25:18 · 2910 阅读 · 4 评论 -
使用Jwt生成token解决SSO单点登录以及OAuth2资源权限管理
JWT中主要包括三个部分:1、头部:包含签名的加密算法和token类型。将这个json串用base64url进行编码即形成了第一部分的token。2、载荷:包括用户id、用户名、过期时间等,但是不包括用户的敏感信息,因为可以被反解出来。将这个json串用base64url进行编码即形成了第二部分的token。3、签名:将前两部分的密文用头部指定的加密算法进行加盐加密(必须保证这个盐只有认证中...原创 2020-04-28 21:22:20 · 2297 阅读 · 0 评论 -
深入理解SpringSecurity的执行原理
看下过滤器链的原理:首先分析web.xml中的如下配置: <filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</f...原创 2020-04-28 20:50:09 · 414 阅读 · 0 评论 -
MyBatis源码深入分析
String resource = "mybatis-config.xml"; InputStream in = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in); ...原创 2020-03-19 14:32:04 · 201 阅读 · 0 评论 -
SSM框架整合---附Spring配置文件和Mybatis配置文件以及一大堆jar包
Spring整合javaWebServlet不能用注解注入,因为Servlet对象创建是交给Tomcat的,和IOC容器中的对象不是同个概念,因此不能直接用Controller注解注入。故成员变量Service也不能自动装配,只能用容器.getBean(class)方法获得。 WebApplicationContext ioc = ContextLoader.getCurrentWebAppl...原创 2020-01-27 20:17:10 · 463 阅读 · 0 评论 -
SpringMVC---数据传入与输出
一、数据传入部分1、RequestMapping注解: @RequestMapping(value = "请求的URL",params = {"限定传入的参数"},method="限定方法类型",headers="限定请求头")2、路径数据部分: <a href="method2/100">测试请求头</a><br><br> ...原创 2020-01-19 18:58:02 · 336 阅读 · 0 评论 -
SpringBoot---杂七杂八---终篇
1、静态资源处理,通过源码分析;2、首页配置及源码分析;3、模板引擎视图解析部分;4、扩展MVC部分;5、简单demo。原创 2020-02-20 09:21:54 · 268 阅读 · 0 评论 -
从JSP开始谈模板引擎
JSP即Java Server Page,本质是Servlet。要讲JSP还是要先说Servlet,要说Servlet则离不开Tomcat,要谈Tomcat还是要从HTTP协议说起。一、HTTP协议1、简述与特点HTTP协议是基于TCP/IP的应用层协议。HTTP协议是无状态协议,协议本身并不保留之前一切的请求或响应报文的信息,为了保存一些信息,引入了Cookie。HTTP协议是无连接协...原创 2020-02-18 15:06:38 · 2157 阅读 · 2 评论 -
SpringBoot---启动流程梳理以及自动装配源码分析
一、SpringBoot运行流程分析 SpringBoot工程里面pom.xml还是依赖于父配置文件的,这个文件中代管了版本号。另外在父配置文件中发现了下面的骚气代码: <resources> <resource> <filtering>true&l...原创 2020-02-16 20:06:33 · 375 阅读 · 0 评论 -
SpringBoot学习---HelloWorld
一、简介微服务传统部署方式都是All in one,所有应用服务都放在一台服务器上面,需要扩展的时候复制多份war包到多个服务器上即可。这种方式有致命缺点,当你需要修改一小部分功能的时候,需要停掉整个服务,修改完后再分别重新部署到服务器上。微服务就出现了,将整个应用切分成不同的模块,部署到对应服务器上面。和传统最大的不同:不需要每次将整个应用都部署到服务器上面。微服务是 Martin Flo...原创 2020-02-15 15:08:18 · 184 阅读 · 0 评论 -
MyBatis---缓存以及整合第三方缓存
MyBatis自带的缓存(其实就是Map)流程:1、首先看二级缓存中是否有要查询的对象,如果没有就查看一级缓存中是否有要查询的对象,再没有就从数据库中查找。2、查到后就将数据放到一级缓存中。3、当SqlSession关闭或提交后,一级缓存中的数据放到二级缓存中。注意:CUD执行后不仅会清空一级缓存,还会清空二级缓存。原创 2020-01-27 14:05:45 · 269 阅读 · 0 评论 -
MyBatis---联合查询、分步查询和动态SQL
在MySQL中有个特殊的规定,即不允许使用列别名作为查询条件。一个主人可以养很多条小狗狗,但是一条狗只有一个主人。那主键肯定只能放在dog表里面。数据库表结构:一、联合查询1、一对一(使用左连接) public class Dog { private int DOG_ID; private String DOG_NAME; private Host DO...原创 2020-01-26 19:19:10 · 869 阅读 · 0 评论 -
MyBatis---环境搭建及简单的SQL映射
一、环境搭建1、导入jar包。2、编写两个配置文件。一个是全局的mybatis配置文件,用来指定连接哪个数据库的。另一个是相当于接口的实现类,第二个配置文件需要在第一个中注册。全局配置文件:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.o...原创 2020-01-26 12:57:49 · 244 阅读 · 0 评论 -
SpringMVC---杂七杂八
1、点击超链接切换语言;2、自定义视图解析器;3、Rest风格CRUD;4、自定义类型转换器;5、数据格式化和校验;6、SpringMVC中Ajax的使用;7、文件上传。原创 2020-01-24 17:03:03 · 411 阅读 · 0 评论 -
SpringMVC---异常处理源码学习
一、源码分析 processDispatchResult(…, (Exception)dispatchException):之前目标方法执行出现的异常也会作为参数传入这个方法。 private void processDispatchResult(HttpServletRequest request, HttpS...原创 2020-01-24 16:34:52 · 199 阅读 · 0 评论 -
SpringMVC---拦截器源码学习
多个拦截器的执行流程:1、applyPreHandle方法。2、handle方法。3、applyPostHandle方法。4、processDispatchResult方法。原创 2020-01-24 13:42:51 · 274 阅读 · 0 评论 -
SpringMVC---前端控制器以及视图解析源码学习
调用doDispatch()方法处理流程梳理:1、getHandler():根据当前请求在HandlerMapping中找到这个请求的映射信息,获取到目标处理器类。2、getHandlerAdapter():根据当前处理器类,找到当前类的HandlerAdapter适配器。3、使用刚才获取到的适配器利用反射执行目标方法。4、目标方法执行后会返回一个ModelAndView对象。5、根据ModelAndView的信息转发到具体的页面。原创 2020-01-20 18:44:04 · 552 阅读 · 0 评论 -
Spring---创建Bean的源码学习
创建好的bean对象最终会保存在singletonObjects中。singletonObjects的数据结构:ConcurrentHashMap(自己写的HashMap)。ioc容器的作用之一:保存单实例bean的地方。原创 2020-01-19 11:17:04 · 177 阅读 · 0 评论 -
SpringMVC---环境搭建
SpringMVC执行过程分析:1、客户端发送请求到tomcat服务器。2、SpringMVC的前端控制器收到所有请求,看请求地址和哪个RequestMapping匹配,就利用反射执行对应方法。3、方法执行完后,SpringMVC利用视图解析器拼接字符串得到目标地址,前端控制器帮我们转发到目标页面。下图表示SpringMVC环境搭建成功。二、maven工程原创 2020-01-17 12:07:17 · 137 阅读 · 0 评论 -
Spring---AOP事务管理
事务管理的学习---事务管理的本质:还是动态代理,将事务方法将给事务管理器代理。对于操作数据库的事务管理器,事务方法一出现异常就回滚,没有异常就正常执行。原创 2020-01-15 20:21:23 · 236 阅读 · 0 评论 -
Spring---AOP学习
AOP小白学习---AOP本质:将切面类和目标类交给Spring去进行动态代理(后置处理器)(Around注解)。Spring容器只要有被切的目标类,则IOC容器中存放的就是对应类的代理对象,最后通过代理对象调用方法实现面向切面编程。原创 2020-01-14 13:22:52 · 144 阅读 · 0 评论 -
Spring---IOC学习
IOC小白学习---不管是注解注入还是在xml文件中配置Bean注入的本质:利用反射创建实例对象。原创 2020-01-13 21:47:19 · 191 阅读 · 0 评论 -
动态代理实例分析
代理是什么?为某个对象提供一个代理,以控制对这个对象的访问。使用代理那就必然要定义和实现接口。一、静态代理实现 静态代理可以由继承实现,或者是接口实现。明显接口实现要要优于继承实现。 讲一下静态代理的实现,分为委托类和被代理的...原创 2020-01-12 13:53:24 · 522 阅读 · 0 评论 -
JavaSE学习
Java语言的跨平台特点在运行java程序的操作系统上,安装对应版本的java虚拟机(JVM),由虚拟机来负责java应用程序在该系统中的运行。JRE包括java虚拟机和java的核心类库。JDK包含java的开发工具。使用JDK开发编写java程序,交给JRE运行。配置环境变量的目的:为了在所有的盘里面都能跑java程序。当我们配置了path环境变量之后,运行java代码,...原创 2020-01-12 08:33:30 · 717 阅读 · 0 评论