- 博客(31)
- 收藏
- 关注
原创 SpringBoot之AOP
AOP(Aspect-Oriented Programming) 面向切面编程。Spring Aop 在 Spring框架中的地位举足轻重,主要用于实现事务、缓存、安全等功能。AOP的实现本质就是动态代理,下面从源码角度来分析spring的AOP实现原理AOP的使用下面是AOP的注解实现,也是SpringBoot中实现AOP最常见的方式@Aspectpublic class Aspec...
2019-10-23 15:09:29 297
原创 KMP实现
参考链接:http://wiki.jikexueyuan.com/project/kmp-algorithm/define.html 图解https://www.cnblogs.com/yjiyjige/p/3263858.html 代码KMP要解决的问题是字符串匹配输入:一个文本串S,和一个模式串P输出:若干行,每行包含一个整数,表示s2在s1中出现的位置详细原理参考上述链接,...
2019-11-02 11:57:50 213
原创 SpringBoot之@Transactional事务实现的原理
Spring实现事务的方式分为编程式和声明式,其中声明式是最为常见的,声明式事务的实现又分为XML配置文件、@Transactional注解两种实现方式,SpringBoot因为取消了XML配置文件的书写,所以SpringBoot中的事务主要是使用@Transactional注解来实现的,下面从源码角度分析其原理已知@Transactional事务实现的原理是基于AOP来实现的,在之前的博客中详...
2019-10-27 20:43:46 1512 1
原创 八皇后问题
简单的dfs,非最优解,胜在思路清晰class Solution { int res = 0; public int totalNQueens(int n) { boolean[][] grid = new boolean[n][n]; dfs(grid,0); return res; } public v...
2019-10-24 21:29:15 176
原创 Spring之IOC
前面说完了SpringBoot的自动配置后,接下来SpringBoot的实现和Spring就一样了,借此来复习一下Spring中最为重要的知识——IOC控制反转为什么要控制反转参考自https://zhuanlan.zhihu.com/p/60995312目的 : 降低系统的耦合性传统版本Class Car1{ Engine engine; public Car1(){...
2019-10-20 22:09:11 104
原创 SpringBoot的自动配置(2)-@EnableAutoConfiguration自动装配
上一节讲了自动配置中@ComponentScan是如何将启动类所在的父目录下所有带@Component注解的类注册到beanfactory中的springboot自动装配另一个重要的部分就是@EnableAutoConfiguration自动装配DispatcherServlet,DataSource等固定配置。下面从源码角度来分析其是如何实现的:先来看看@EnableAutoConfigur...
2019-10-13 16:21:13 403
原创 SpringBoot的自动配置(1)-@ComponentScan自动注解扫描
Spring和SpringBoot最大的不同就在于自动配置这一块,这也是为什么SpringBoot不需要XML配置文件为什么SpringBoot可以省去配置文件?其实Spring的注解可以解决大部分本来应该要写在配置文件中的内容,比如 如何将bean加入容器,AOP代理类、切面以及切点。但是不可以没有配置文件是因为有一些固定的类必须要在配置文件中写入,比如DispatchServlet,Dat...
2019-10-12 12:11:56 3064
原创 java 求最大公约数
辗转相除法//非递归int gcd(int a,int b){ while(b!=0){ int t = a%b; a = b; b = t; } return a;}//递归int gcd(int a,int b){ if(b==0) return a; return gcd(b,a%b);}...
2019-09-26 09:34:18 128
原创 Netty中客户端和服务端序列化操作的包名统一问题
netty远程传输对象,使用java自带的序列化工具时客户端:序列化,发送服务端:接受,反序列化这里客户端和服务端的该对象所在的包名和类名必须相同,否则会报ClassNotFoundException,所以不推荐使用java自带的序列化工具来远程传输对象...
2019-09-25 16:23:00 376
原创 SpringBoot之application.properties的加载
SpringBoot中唯一的配置文件就是application.properties了,那这个配置文件是在什么时候被加载的,存储在什么地方,又是如何被使用的呢?下面从源码的角度来分析1、application.properties的加载springboot加载的配置文件是放在environment中的,在prepareEnvironment的时候,springboot读取和加载了applica...
2019-09-24 20:39:37 2250 1
原创 SpringBoot之Listener
springBoot监听器的主要分为两类:运行时监听器和上下文监听器都是定义在spring.factories文件中。1)运行时监听器org.springframework.boot.SpringApplicationRunListener=\org.springframework.boot.context.event.EventPublishingRunListener2)上下文监...
2019-09-23 11:13:49 2028
原创 Spring与SpringBoot的区别
Springboot相比于Spring,开发流程更加简单:1、省去了繁杂的配置文件,实现自动配置2、依赖包整合,聚合常用库形成一个starter库3、内置tomcat等容器,自动部署,启动相同点:SpringBoot相比于Spring,核心逻辑和底层实现原理都相同,如IOC,AOP,依赖注入等不同点:1、自动配置自动配置了DispatcherServlet,JDBCTemplate...
2019-09-23 09:37:08 498
原创 volatile关键字
volatile关键字的作用1、保证数据在各个线程间的可见性2、禁止指令重排序依照我的理解,其实禁止指令重排序就是为了保证数据的可见性,保证缓存一致性,实现这两点都是使用了同一个方法就是加入了内存屏障1、内存屏障的是如何保证数据的可见性的详细参考:http://www.wowotech.net/kernel_synchronization/Why-Memory-Barriers.html...
2019-09-16 11:02:59 86
原创 并查集的关键方法
并查集的详细介绍见https://blog.csdn.net/qq_41593380/article/details/81146850这个给出并查集关键方法的java版本int[] parent = new int[N];//寻找根节点public int find(int root){ int son = root; //向上寻找根 while(root!=pa...
2019-09-12 17:40:34 113 1
原创 Netty学习——ChannelPipeLine ChannelHandler ChannelHandlerContext
先上官方图* I/O Request* via {@link Channel} or* {@link ChannelHandlerCo...
2019-09-11 09:06:15 400
原创 java算法题中的经典图形表达式总结
1、判断直角p2为直角点public boolean isOrthogonal(int[] p1,int[] p2, int[] p3){ return (p2[0] - p1[0]) * (p2[0] - p3[0]) + (p2[1] - p1[1]) * (p2[1] - p3[1]) == 0; }2、判断四个点是否为矩形public boolean is...
2019-09-05 09:59:55 261
原创 SpringBoot下载Excel文件,解决文件损坏问题
最近,在做一个springboot下载excel文件的模块,下载下来的文件一直是文件受损,网上找了一堆解决办法都不行,墨迹了半天终于解决了,主要原因就是springboot的resource目录下的文件是默认自动压缩的,所有直接下载打开会出错,这里记录一下解决方法先上代码public void downloadExcel(HttpServletResponse response,HttpSer...
2019-09-04 17:49:40 11417 16
原创 MySQL server has gone away解决方法
今天使用mysql 导入sql文件的时候会报MySQL server has gone away的错误多方查询,是因为sql文件太大了,超过了数据库设置的阈值解决办法:在mysql的配置文件,我的是my.ini中添加或者修改一行max_allowed_packet=150M这样就可以导入成功了...
2019-08-30 09:12:50 122
原创 java NIO的空轮询bug 以及Netty的解决办法
这个bug是指 java的NIO在linux下selector.select()时,本来如果轮询的结果为空并且不调用wakeup的方法的话,这个selector.select()应该是一直阻塞的,但是java却会打破阻塞,继续执行,导致程序无限空转,造成CPU使用率100%这个bug只出现在linux系统下,因为linux下NIO底层使用的是epoll来实现的,而java的epoll实现存在...
2019-08-29 15:20:27 1682
原创 Netty学习——EventLoop
我认为的netty执行流程的三大关键组件EventLoop,PipeLine,Channel,其中EventLoop处于核心地位,是这个netty程序正常运作的发动机,下面从源码角度来分析EventLoop的实现原理我们从NioEventLoop这个最常见的EventLoop来分析,其继承结构为在BootStrap那一节中向eventloop中注册channel的时候遇到过eventLo...
2019-08-26 17:38:44 202
原创 Selector的wakeup()
/** * Causes the first selection operation that has not yet returned to return * immediately. * * <p> If another thread is currently blocked in an invocation of the * {@link #select()} or {...
2019-08-26 16:52:49 3127
原创 Netty学习——BootStrap
netty的BootStrap类是一个辅助类,其暴露出的接口有助于我们更方便的建立服务器和客户端,下面从源码角度分析Bootstrap是如何引导建立客户端的(使用断点的方式跟踪源码)1、首先找到io.netty.example中的EchoClient,打上断点,Debug模式开始跟踪源码(断点如图)2、b.group方法class AbastactBootStrappublic B ...
2019-08-25 20:16:25 373
原创 Netty学习—— EventLoopGroup
Netty的线程模型如图所示,可知一个EventLoopGroup中管理着多个EventLoop,Netty中的每个EventLoop都有自己的单独的线程来执行任务下面从源码角度来分析一下EventLoopGroup是如何调度多个线程不相同的EventLoop的以NioEventLoopGroup为例入手分析,其继承结构为其中主体方法的实现都在MultithreadEventExecuto...
2019-08-23 17:25:50 523
原创 linux下将java执行命令设置为内置命令,实现java服务器的开启和关闭
我在linux下有一个java服务器的程序每次都需要cd到指定目录下,并且手动执行,很麻烦。所以想着将java程序的开启和关闭写入到内置命令中,这样就可以linux自带命令一样在任意目录下一键执行服务器开启1、首先将java执行命令写入脚本文件中,新建server_start文件,写入cd /home/javaCode/server(java文件的路径)java -Djava.ext....
2019-08-22 18:06:29 302
原创 netty报错Force-closing a channel whose registration task was not accepted by an event loop处理办法
使用netty搭建机器间通信客户端时,报了如下错误08-21 17:27:55 [ WARN] [http-nio-8081-exec-379] Force-closing a channel whose registration task was not accepted by an event loop: [id: 0x2e20a0eb]java.util.concurrent.Rejec...
2019-08-22 15:11:41 10311 4
原创 idea 基于springboot的maven多module项目打war包
首先不要使用maven自带的打包工具去打包,很坑maven多module聚合项目中要求project的pom中的 packaging必须为pom,否则就报错, <packaging>pom</packaging>所以在project的pom中修改pagekaging为war不可行,所以只能使用idea自带的打包工具打包1、打开project structure...
2019-08-02 10:06:55 4584 1
原创 CyclicBarrier的使用和实现原理
CyclicBarrier的使用和实现原理它可以实现让一组线程等待至某个状态之后再全部同时执行。CountDownLatch 在于一定数量的线程执行完毕之后,另一个线程才能开始执行CyclicBarrier 在于凑齐一定数量的线程,让他们一起执行CyclicBarrier 还有不同于 CountDownLatch的是,它可以循环使用public class TestCyclicBarri...
2019-07-19 16:43:43 181
原创 CountDownLatch的实现原理
CountDownLatch的实现原理CountDownLatch是一个同步计数器,能够保证在其他线程完成某一个业务操作前,当前线程一直处于等待/阻塞状态。具体来说,这个计数器将会从给定的某一个数值count开始,通过countDown()方法的调用进行倒数。当执行某一次countDown()操作后,计数器的count数值等于0,所有调用了await()方法的线程,就解除等待/阻塞状态继续执行。...
2019-07-19 16:03:23 172
原创 Java POI操作Excel的日期,统一日期格式
Java POI操作Excel的日期,统一日期格式java poi读取的excel的日期是一个数字,这个数字代表了从1900-1-1到该日期的天数所以在读取时要将该数字转化为相应的日期使用Date date = DateUtil.getJavaDate(cell.getNumericCellValue());可以转化为java日期问题:excel中存在很多不同形式的日期,1996/1/1...
2019-07-18 14:56:06 2922
原创 Java Runtime.getRuntime().exec调用python程序问题总结
Java Runtime.getRuntime().exec调用python程序
2019-07-18 14:35:19 7842 4
原创 Ubuntu16 编译openJDK8u
Ubuntu16 编译openJDK8u1、得到openJDK8uhg clone http://hg.openjdk.java.net/jdk8u/jdk8u-devcd jdk8u-devchmod 755 get_source.sh ./get_source.sh 2、得到bootstrap JDK 用来编译openjdk的java部分 下载oracle JDK1.8 ...
2019-01-22 10:32:02 243
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人