自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 资源 (2)
  • 收藏
  • 关注

原创 数据库事务

事务隔离级别mysql事务,如何开启事务:sql开启和jdbc开启Spring事务传播属性Spring事务管理器分布式事务mybatis如何接入Spring事务

2020-01-03 15:09:42 207

原创 Spring boot启动流程

本文从源码层面讲解Spring boot应用的启动流程。Spring boot应用的入口通常是这样的形式@SpringBootApplication(scanBasePackages = "com.sample")public class SampleApplication extends SpringBootServletInitializer { @Override ...

2019-11-12 09:36:20 248

原创 mybatis-spring 框架原理与源码解析--执行流程

上一篇文章https://blog.csdn.net/yange1025/article/details/84709273介绍了如何在Spring项目中配置mybatis以及mybatis的启动过程。本篇文章将从用户发起一笔查询到返回查询结果来介绍mybatis的执行流程。入口从用户从Spring容器获取Mapper接口对应的bean,并调用接口方法执行查询开始。我们知道从Spring容器获取...

2019-10-23 20:31:11 414

原创 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 282

原创 日常开发问题汇总(不定时更新)

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 201

原创 基于线程池实现多线程任务

首先,让我们问一个问题,为什么要使用线程池?很多时候,我们使用多线程来执行任务的时候都是这样一个场景:每新建一个任务就对应地创建一个线程,而往往每个任务在很短的时间内就结束了,导致线程的创建和销毁频繁发生,这会降低系统的效率。线程池的应用便应运而生。一,Java线程池1,ThreadPoolExecutorThreadPoolExecutor是线程池任务执行器。其继承链为Threa...

2018-12-05 17:10:09 2297

原创 Spring Security使用和源码解析

一个web工程,如果涉及到私人信息或不可公开的资源,则必然要对访问者做过滤和认证,访问者只能获取跟自己相关或有权限访问的信息,这就是我们所熟知的登陆。简单的登陆通常是这样实现的:提供一个登陆接口,和一个过滤器。登陆接口用来用户名和密码校验,并将用户信息保存在http session中。过滤器则用来拦截所有未经授权的访问。@RestController@RequestMapping("/lo...

2018-12-02 13:11:10 350

原创 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 9677 1

原创 Java动态代理的原理

动态代理是使用非常广泛的技术,诸如大名鼎鼎的spring、mybatis等框架都大量使用动态代理。动态代理区别于静态代理的地方在于:静态代理需要为每一个被代理类都创建一个代理类,在编译期代理类就已经生成,而动态代理则是在程序运行期动态地生成代理类,所有被代理对象的执行逻辑都被转移到InvocationHandler对象的invoke方法,在invoke方法里通过反射来调用被代理的对象方法,当然也可...

2018-08-23 23:17:13 1798 1

原创 JVM的类加载机制

维基百科关于java虚拟机的描述:虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。jvm的问世,使得代码编译的结果从本地机器...

2018-08-13 23:20:32 132

原创 Java事件监听器原理以及使用Spring的事件监听

事件监听包括必不可少的三个元素:事件、事件源和监听器。事件:容易理解,点击一下鼠标是一个事件,更改某个类属性也可以抽象为一个事件。事件源:发布事件的地方,也就是事件产生的地方。监听器:定义事件发生后要采取的操作。1,接下来举例说明Java如何实现监听模式事件:package com.wxy.popcorn.eventlistener.model;import jav

2018-01-07 19:13:06 3262 1

原创 最大和连续子数组

问题描述:一个数值型数组,其子数组有多个,求其子数组中最大的和值。所谓和值,是指数组所有元素相加的和。解法(1):扫描法,假设最大和子数组的第一位下标为i,i从0到n-1,对于每个i值,从data[i]开始,进行累加,将每次累加的最大值储存起来。算法实现:

2016-10-19 15:50:14 349

原创 查找

根据数据结构的不同,查找可以分为线性表查找,树表查找和哈希表查找等。1,线性表查找:(1)顺序查找:当线性表是无序表时,只能用顺序查找。较为简单,不做赘述。(2)二分查找:要求线性表是有序表,现假定该有序表是以升序排列的。其基本思想是:维护三个变量low,middle,high,初始时,low = 0; high = n-1;middle = (low+high)/2;如果data[m

2016-10-16 16:23:08 252

原创 排序算法

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 189

原创 放苹果问题

【问题描述】将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 543

原创 暗黑字符串

一个字符串中只包含字符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 330

原创 图书录入与检索

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 657

原创 小熊搬家问题

住在森林里的小熊要搬到新家。现可从控制台输入森林的地图,B表示小熊目前的家,H表示小熊的新家,-表示可以通过的路,#表示无法通过。要求根据输入的地图判断小熊能否到达新家。如果能,则输出“Y”,否则输出“N”。例如输入:1 //地图的行数5 //地图的列数-B-H#输出:Y实际上这是一个典型的迷宫问题。本博客中之前的博文已有介绍。区别在于这里迷宫的入口和出口待定,

2016-08-18 17:38:39 959

原创 爬楼梯问题

爬楼梯问题可描述为:有n级台阶,现最大一步可以跨m级台阶,问总共有多少种爬楼梯的方案?乍看这个问题,可能会认为这是一个简单的解m元一次方程的问题。即:x1*1+x2*2+...+xm*m=n该方程解的个数即为方案的种数。然而并不是这样,因为方案的种数还跟先后顺序相关,例如,第一步跨2级台阶,第二步跨1级台阶,和第一步跨1级台阶,第二步跨2级台阶是不一样的两种方案。细看这个问题,可以发现这是

2016-06-26 20:08:52 1411

原创 几种高速缓存算法

缓存是在CPU和内存之间的一块存取速度极快的存储单元,CPU在处理数据时,如果在寄存器中找不到目标数据,则优先从缓存中寻找。而缓存的容量远远小于内存的容量,当缓存已满而又要继续往其中添加新的数据的时候,如何替换缓存中已有的数据就是高速缓存算法要解决的问题。假设CPU要使用的页面依次为{1,2,4,1,5,7,4},而缓存的最大容量为3,以下分别以此为例介绍往缓存的中添加数据的几种算法(a) L

2016-06-15 22:22:17 2179

原创 图形的遍历方法之先广后深法

上篇博文介绍了采用先深后广的方式遍历图形,本文介绍采用先广后深的方式来遍历图形。所谓先广后深法,就是优先遍历列表中当前访问链接的所有节点,再访问其他链接的节点。与先深后广法访问的顺序采用了堆栈结构不同,先广后深法采用的是队列的结构。也即,将当前访问节点相连的所有节点放入队列,访问队列头,再将与当前访问的节点相连且未被访问过的节点放入队列,循环执行此步骤,直至队列为空。具体实现代码如下:pack

2016-05-25 23:26:41 1107

原创 图形的遍历方法之先深后广法

上一篇博文介绍了用相邻表来表示无向图和有向图。对于一个用相邻表来表示的图形,其访问和修改不如相邻矩阵那么简单。遍历一个用相邻表表征的图形,从访问顺序上可以分为先深后广法和先广后深法。所谓先深后广法,继续以上篇博文中无向图和有向图为例,     step 1:以A作为起点,将相邻的节点B、D和E放入堆栈,A标记为已访问ED Bstep 2:取出B,将与B相邻,且未访问过的节点

2016-05-23 20:54:06 1328

原创 【数据结构】图形的多种表示方法及其java实现之相邻表法

上一篇博文讲到用相邻矩阵法表示图形,该方法的优点是直观,访问方便,缺点是,当图形的规模庞大,节点数目很多时,有许多节点之间并无连接,这样就浪费了大量的存储空间。而相邻表法则解决了这一问题。        相邻表法只记录图形中存在的连接,也即只记录相邻矩阵中1的部分。               使用相邻表法表示的话,每个节点使用一张表,每张表包括一个表头和与该节点相连的其他节点,表

2016-05-17 18:40:15 1596

原创 【数据结构】图形的多种表示方法及其java实现之相邻矩阵法

图形是由多个定点以及连接定点的边构成的集合。通常用G=(V,E)表示

2016-05-16 15:58:46 2279

原创 java利用递归解决八皇后问题

问题简介:要求在一个8*8的棋盘上放置8个皇后,使任意两个皇后都不同行不同列且不在同一条斜对角线上。采用递归和回溯的思想解决这一问题是较为直观的。一开始,棋盘上的任意格子都可落子,因此可任意选择第一个皇后的位置。放置了第一个皇后之后,棋盘上的可落子格子的分布将发生改变,然后在可以落子的格子中选择一个放置第二个皇后,重复以上步骤,若发生第n个皇后无格子可放置,则回溯到上一步,更改第n-1个皇后的

2016-04-30 00:06:37 2600

原创 java利用递归解决迷宫问题

用一个二维数组表示迷宫,0表示通路,1表示围墙,给定入口和出口,寻找所有可能的通路。例如:111111111111100011111111111011000011111011011

2016-04-28 13:27:18 4618

原创 利用递归解决汉诺塔问题

汉诺塔问题可描述如下:有三根木桩,第一根木桩上串有n个大小不一的盘子,现要求将所有的盘子转移到第三根木桩上,一次只能移动一个盘子,且需始终保证小盘子在大盘子的上方。输入盘子的个数n,输出移动步骤。如输入:3,则移动步骤为:1->3  1->2  3->2  1->3  2->1  2->3  1->3

2016-04-26 12:42:48 498

原创 二叉树的创建和遍历方法(下)

二叉树除了可以使用一维数组存储,还可以使用链表形式。使用链表的好处是对节点的增删很容易,然而很难查找每个节点的父节点。

2016-04-21 10:33:33 375

原创 二叉树的创建和遍历方法(上)

二叉树可以用一维数组或者链表来存储,两者各有利弊。本文分别介绍在这两种存储方式下二叉树的创建和遍历方法。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 517

原创 和尚挑水问题

有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 3162

原创 蛇形矩阵

蛇形矩阵示例:整数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 2038 1

模数转换实验

用ADC0809模数转换芯片以及51单片机实现模数转换

2012-06-18

简单计算器源代码

运用MFC编的一个简单程序,能够实现简单的加减乘除运算

2011-10-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除