- 博客(31)
- 资源 (2)
- 收藏
- 关注
原创 数据库事务
事务隔离级别mysql事务,如何开启事务:sql开启和jdbc开启Spring事务传播属性Spring事务管理器分布式事务mybatis如何接入Spring事务
2020-01-03 15:09:42
257
原创 Spring boot启动流程
本文从源码层面讲解Spring boot应用的启动流程。Spring boot应用的入口通常是这样的形式@SpringBootApplication(scanBasePackages = "com.sample")public class SampleApplication extends SpringBootServletInitializer { @Override ...
2019-11-12 09:36:20
298
原创 mybatis-spring 框架原理与源码解析--执行流程
上一篇文章https://blog.youkuaiyun.com/yange1025/article/details/84709273介绍了如何在Spring项目中配置mybatis以及mybatis的启动过程。本篇文章将从用户发起一笔查询到返回查询结果来介绍mybatis的执行流程。入口从用户从Spring容器获取Mapper接口对应的bean,并调用接口方法执行查询开始。我们知道从Spring容器获取...
2019-10-23 20:31:11
463
原创 mybatis-spring 框架原理与源码解析--初始化过程
mybatis-spring将mybatis无缝集成到spring框架中,使得mybatis能够参与spring的事务,将mybatis mapper和sqlsession注入到其它bean中,将mybatis的异常转换成spring的DataAccessException等。本文将在代码层面,从spring容器启动到一次数据库访问结束期间,mybatis-spring的运行流程,来解析mybat...
2019-07-28 23:49:55
337
原创 日常开发问题汇总(不定时更新)
1,post参数长度过大,超过tomcat的maxPostSize阈值,修改tomcat conf目录下的server.xml文件,"-1"表示不限制大小nginx对http client请求体的大小也有限制,可在nginx.conf文件中修改该阈值spring boot 内置tomcat设置maxPostSize可添加如下配置项:server.tomcat.max-http...
2018-12-28 09:51:47
239
原创 基于线程池实现多线程任务
首先,让我们问一个问题,为什么要使用线程池?很多时候,我们使用多线程来执行任务的时候都是这样一个场景:每新建一个任务就对应地创建一个线程,而往往每个任务在很短的时间内就结束了,导致线程的创建和销毁频繁发生,这会降低系统的效率。线程池的应用便应运而生。一,Java线程池1,ThreadPoolExecutorThreadPoolExecutor是线程池任务执行器。其继承链为Threa...
2018-12-05 17:10:09
2365
原创 Spring Security使用和源码解析
一个web工程,如果涉及到私人信息或不可公开的资源,则必然要对访问者做过滤和认证,访问者只能获取跟自己相关或有权限访问的信息,这就是我们所熟知的登陆。简单的登陆通常是这样实现的:提供一个登陆接口,和一个过滤器。登陆接口用来用户名和密码校验,并将用户信息保存在http session中。过滤器则用来拦截所有未经授权的访问。@RestController@RequestMapping("/lo...
2018-12-02 13:11:10
410
原创 Springboot web工程通过内置和外置tomcat启动及其原理
1. 普通的spring web应用(不使用spring boot启动)需要在web.xml里配置上下文信息。web.xml中通过配置ContextLoaderListener来在tomcat容器启动时创建spring上下文。<context-param> <param-name>contextConfigLocation</param-name&g...
2018-08-27 21:53:21
9769
1
原创 Java动态代理的原理
动态代理是使用非常广泛的技术,诸如大名鼎鼎的spring、mybatis等框架都大量使用动态代理。动态代理区别于静态代理的地方在于:静态代理需要为每一个被代理类都创建一个代理类,在编译期代理类就已经生成,而动态代理则是在程序运行期动态地生成代理类,所有被代理对象的执行逻辑都被转移到InvocationHandler对象的invoke方法,在invoke方法里通过反射来调用被代理的对象方法,当然也可...
2018-08-23 23:17:13
1867
1
原创 JVM的类加载机制
维基百科关于java虚拟机的描述:虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。jvm的问世,使得代码编译的结果从本地机器...
2018-08-13 23:20:32
178
原创 Java事件监听器原理以及使用Spring的事件监听
事件监听包括必不可少的三个元素:事件、事件源和监听器。事件:容易理解,点击一下鼠标是一个事件,更改某个类属性也可以抽象为一个事件。事件源:发布事件的地方,也就是事件产生的地方。监听器:定义事件发生后要采取的操作。1,接下来举例说明Java如何实现监听模式事件:package com.wxy.popcorn.eventlistener.model;import jav
2018-01-07 19:13:06
3329
1
原创 最大和连续子数组
问题描述:一个数值型数组,其子数组有多个,求其子数组中最大的和值。所谓和值,是指数组所有元素相加的和。解法(1):扫描法,假设最大和子数组的第一位下标为i,i从0到n-1,对于每个i值,从data[i]开始,进行累加,将每次累加的最大值储存起来。算法实现:
2016-10-19 15:50:14
394
原创 查找
根据数据结构的不同,查找可以分为线性表查找,树表查找和哈希表查找等。1,线性表查找:(1)顺序查找:当线性表是无序表时,只能用顺序查找。较为简单,不做赘述。(2)二分查找:要求线性表是有序表,现假定该有序表是以升序排列的。其基本思想是:维护三个变量low,middle,high,初始时,low = 0; high = n-1;middle = (low+high)/2;如果data[m
2016-10-16 16:23:08
293
原创 排序算法
1,插入排序:(1)直接插入排序,将目标序列分成有序区和无序区,比较无序区第一个元素和有序区最后一个元素,如果前者比后者小,则将有序区后移一位,将无序区第一位插入有序区。算法实现:public class Main{ public static void main(String[] args){ int[] a = {2,4,13,53,6,3,6};
2016-10-16 14:07:40
220
原创 放苹果问题
【问题描述】将m个苹果放到n个空盘子中,允许盘子为空,允许一个盘子放任意个苹果,问总共有多少种放法。注意,不考虑盘子的次序,比如,将7个苹果放到3个盘子中,5 1 1和1 5 1是同一种放法。【解答】假设将m个苹果放到n个盘子中的放法有f(m,n)种,从最简单的情况考虑起。当m=0或者n=0,f(m,n) = 1;当n=1时,所有苹果只能放在一个盘子中,f(m,n) = 1;现我们
2016-10-15 14:47:34
619
原创 暗黑字符串
一个字符串中只包含字符A、B、C,如果该字符串中至少存在一个长度为3且包含A、B、C三个字母的子串,那么该字符串是纯净的,否则该字符串是暗黑的。现给出一个不大于32的整数,求所有长度为该整数的字符串(只包含字符串A、B、C)中,暗黑字符串有多少个。解答:如果字符串长度为1,那么暗黑字符串有3个,即A,B,C;如果字符串长度为2,那么暗黑字符串有9个,即AA, BB, CC, AB, A
2016-10-14 22:33:51
363
原创 图书录入与检索
import java.util.Arrays;import java.util.Scanner;public class Main { public static void main(String[] args){ Scanner in = new Scanner(System.in); int n = in.nextInt(); String[] books = new S
2016-08-19 11:07:03
696
原创 小熊搬家问题
住在森林里的小熊要搬到新家。现可从控制台输入森林的地图,B表示小熊目前的家,H表示小熊的新家,-表示可以通过的路,#表示无法通过。要求根据输入的地图判断小熊能否到达新家。如果能,则输出“Y”,否则输出“N”。例如输入:1 //地图的行数5 //地图的列数-B-H#输出:Y实际上这是一个典型的迷宫问题。本博客中之前的博文已有介绍。区别在于这里迷宫的入口和出口待定,
2016-08-18 17:38:39
991
原创 爬楼梯问题
爬楼梯问题可描述为:有n级台阶,现最大一步可以跨m级台阶,问总共有多少种爬楼梯的方案?乍看这个问题,可能会认为这是一个简单的解m元一次方程的问题。即:x1*1+x2*2+...+xm*m=n该方程解的个数即为方案的种数。然而并不是这样,因为方案的种数还跟先后顺序相关,例如,第一步跨2级台阶,第二步跨1级台阶,和第一步跨1级台阶,第二步跨2级台阶是不一样的两种方案。细看这个问题,可以发现这是
2016-06-26 20:08:52
1510
原创 几种高速缓存算法
缓存是在CPU和内存之间的一块存取速度极快的存储单元,CPU在处理数据时,如果在寄存器中找不到目标数据,则优先从缓存中寻找。而缓存的容量远远小于内存的容量,当缓存已满而又要继续往其中添加新的数据的时候,如何替换缓存中已有的数据就是高速缓存算法要解决的问题。假设CPU要使用的页面依次为{1,2,4,1,5,7,4},而缓存的最大容量为3,以下分别以此为例介绍往缓存的中添加数据的几种算法(a) L
2016-06-15 22:22:17
2251
原创 图形的遍历方法之先广后深法
上篇博文介绍了采用先深后广的方式遍历图形,本文介绍采用先广后深的方式来遍历图形。所谓先广后深法,就是优先遍历列表中当前访问链接的所有节点,再访问其他链接的节点。与先深后广法访问的顺序采用了堆栈结构不同,先广后深法采用的是队列的结构。也即,将当前访问节点相连的所有节点放入队列,访问队列头,再将与当前访问的节点相连且未被访问过的节点放入队列,循环执行此步骤,直至队列为空。具体实现代码如下:pack
2016-05-25 23:26:41
1171
原创 图形的遍历方法之先深后广法
上一篇博文介绍了用相邻表来表示无向图和有向图。对于一个用相邻表来表示的图形,其访问和修改不如相邻矩阵那么简单。遍历一个用相邻表表征的图形,从访问顺序上可以分为先深后广法和先广后深法。所谓先深后广法,继续以上篇博文中无向图和有向图为例, step 1:以A作为起点,将相邻的节点B、D和E放入堆栈,A标记为已访问ED Bstep 2:取出B,将与B相邻,且未访问过的节点
2016-05-23 20:54:06
1387
原创 【数据结构】图形的多种表示方法及其java实现之相邻表法
上一篇博文讲到用相邻矩阵法表示图形,该方法的优点是直观,访问方便,缺点是,当图形的规模庞大,节点数目很多时,有许多节点之间并无连接,这样就浪费了大量的存储空间。而相邻表法则解决了这一问题。 相邻表法只记录图形中存在的连接,也即只记录相邻矩阵中1的部分。 使用相邻表法表示的话,每个节点使用一张表,每张表包括一个表头和与该节点相连的其他节点,表
2016-05-17 18:40:15
1631
原创 java利用递归解决八皇后问题
问题简介:要求在一个8*8的棋盘上放置8个皇后,使任意两个皇后都不同行不同列且不在同一条斜对角线上。采用递归和回溯的思想解决这一问题是较为直观的。一开始,棋盘上的任意格子都可落子,因此可任意选择第一个皇后的位置。放置了第一个皇后之后,棋盘上的可落子格子的分布将发生改变,然后在可以落子的格子中选择一个放置第二个皇后,重复以上步骤,若发生第n个皇后无格子可放置,则回溯到上一步,更改第n-1个皇后的
2016-04-30 00:06:37
2655
原创 java利用递归解决迷宫问题
用一个二维数组表示迷宫,0表示通路,1表示围墙,给定入口和出口,寻找所有可能的通路。例如:111111111111100011111111111011000011111011011
2016-04-28 13:27:18
4679
原创 利用递归解决汉诺塔问题
汉诺塔问题可描述如下:有三根木桩,第一根木桩上串有n个大小不一的盘子,现要求将所有的盘子转移到第三根木桩上,一次只能移动一个盘子,且需始终保证小盘子在大盘子的上方。输入盘子的个数n,输出移动步骤。如输入:3,则移动步骤为:1->3 1->2 3->2 1->3 2->1 2->3 1->3
2016-04-26 12:42:48
576
原创 二叉树的创建和遍历方法(下)
二叉树除了可以使用一维数组存储,还可以使用链表形式。使用链表的好处是对节点的增删很容易,然而很难查找每个节点的父节点。
2016-04-21 10:33:33
393
原创 二叉树的创建和遍历方法(上)
二叉树可以用一维数组或者链表来存储,两者各有利弊。本文分别介绍在这两种存储方式下二叉树的创建和遍历方法。1)数组存储以初始数据int[] a = {5, 9, 1, 3, 12, 21, 8, 2, 7, 9, 15, 17, 6, 4, 18, 25}为节点创建二叉树。二叉树遵循小于父节点的值放在左子节点,大于父节点的值放在右子节点的原则。从树根开始,按阶层依次存入数组中。impor
2016-04-17 19:09:24
542
原创 和尚挑水问题
有7个和尚,一星期七天每天安排一个和尚挑水,每个和尚在每周中空闲的时间不一。用一个二维数组M[][]来表示7个和尚在7天中是否可以挑水,M[i][j]==1表示第i个和尚在第j天可以挑水,M[i][j]==0表示第i个和尚在第j天不可以挑水。现输入矩阵M,要求求出方案的总数,并逐天输出挑水的和尚。 可以考虑用回溯法解决该问题,第i天选取符合条件的和尚j挑水,则和尚j不能在其他的天里挑水,设...
2016-04-15 18:56:38
3221
原创 蛇形矩阵
蛇形矩阵示例:整数3对应的蛇形矩阵为: 1 2 3 8 9 4 7 6 5 整数4对应的蛇形矩阵为: 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 生成蛇形矩阵A的关键是,创建与其对应的导航矩阵B。所谓导航...
2016-04-13 14:56:38
2101
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人