自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 收藏
  • 关注

转载 Spring事务中同一个类的一个方法被另外一个方法调用时

结论:在同一个类中,如果一个被事务修饰的方法被另外一个没有被事务修饰的方法调用的时候,事务是不会生效的。原因:当一个方法被@Transcation修饰时,spring会为该Bean生成一个子类(即代理类),代理类继承原先的bean,当有事务注解的方法被调用时,是由代理类来调用 ,代理类在调用之前启动transcation,然而这个有注解的方法是被同一个类中其他方法调用时,那么该方法的调用就是没有走代理类,而是直接通过原先的那个bean,不会去启动bean,所以不会去启动事务,所以注解无效。...

2021-01-05 10:47:16 603

原创 两个线程交替打印AB

package github.write.funding2.mapper;/** * @Author: MaiYu * @Date: Create in 19:32 2020/12/12 */public class Main3 {// public static void main(String[] args) {// String s=new String();// System.out.println("3");// } priv

2021-01-04 15:47:26 580

原创 拦截器与过滤器

1.过滤器是基于函数回调,依赖于servlet容器,能够对所有的请求进行拦截,因为在servlet为执行前执行,所以也就能执行一次。主要作用登录校验,将不符合要求进行过滤2.拦截器基于反射机制,在方法进行拦截,依赖于web框架,可以多次调用,例如面向切面编程...

2021-01-03 15:11:03 107

原创 spring与spring mvc与springboot关系

Spring:是一个开发企业级应用程序的框架,主要包括了七个模块核心容器(core) :实现了IOC,核心容器便是BeanFactory,使用工厂模式创建BeanSpring AOP:面向切面编程,使用了代理模式设计模式。Spring ORM:对象关系映射,就是将关系型数据库与对象之间做一层映射,这样就不需要与复杂的sql语句打交道了。例如Hibernate,MybatisSpring DAO:将与数据库交互代码与业务代码分离,降低耦合度Spring Context:上下文,构建于core之上,对

2021-01-03 12:51:33 193

原创 java运行时异常类型举例

1.ArithmeticException 数学运算异常例如除数为0System.out.println(3/0);/*Exception in thread "main" java.lang.ArithmeticException: / by zero at github.write.funding2.Write.Main4.main(Main4.java:28)*/2.ClassCastException 类强制转换异常将整型转为字符串 Object x=new

2020-12-26 19:39:56 712 1

原创 JVM调优策略

主要使用的命令1.使用jps(jvm process status)查看进程号F:\GitClone\funding2>jps14432 Launcher739610376 Launcher13608 Funding2Application17368 Jps2.使用 jstat (Jvm statistics monitoring tool)进行监控数据jstat -gc 10376 5000 #监控进程号为13608的堆内存,每5秒钟打印一次 S0C S1C S0

2020-12-26 16:34:55 180

原创 springBoot的ioc初始化过程

主要包括了三个步骤1 BeanDefinition的Resource定位2 BeanDefinition的载入3 向IoC容器注册BeanDefinition1.Resource定位主要包括了三种方式主类所在的包开始扫描,使用SPI扩展机制自动装配(比如各种starter),使用@Enable注解,里面使用的@Import注解,方式是扫描所有被@Import注解的类,然后定位路径2 BeanDefinition的载入根据上面的定位类的路径找到该类,根据为该类定制的属性封装成一个BeanDef

2020-12-23 16:37:38 305

原创 ConcurrentHashMap版本对比

JDK 1.7结构是Segment数组+hashEntry数组+链表JDK1.7构造函数/*先说结论:该构造方法一共参数,初始容量大小,负载因子,并发等级也就是Segment数组大小,并发量为多少执行结果: 根据初始化容量大小,将整个容量平均分配到Segment数组中 假设初始容量为16,并发等级为16.那么就最多支持16个线程并发,每个Segment有一个hashEntry数组, 大小也是2的次方,所有应该hashEntry数组大小为2.*/ public ConcurrentH

2020-12-22 19:20:25 314

原创 HashMap的版本比较与transient关键字作用

JDK1.7JDK 1.8结构数组 +链表数组+链表+红黑树,当数组长度为64,链表长度为阈值(默认为8) 由链表转为红黑树扩容机制默认长度大小为16,负载因子为0.75也就是当元素个数为12的时候进行扩容,为0.75的原因,太大会导致查找效率低,太小是数据会很分散一样插入与扩容先后先扩容或插入先插入后扩容插入方式头插法,导致链表循环,条件:当两个线程同时进行扩容,而且是扩容到新的数组上时仍然同一个槽里面尾插法hashmap构造方法先说结论:初...

2020-12-22 13:41:21 228

原创 测试注解

@SpringBootTest@RunWith(SpringRunner.class)

2020-12-18 10:27:10 177

原创 SpringBoot是如何实现自动配置的

1.实现自动配置的注解@EnableAutoConfiguration在SpringBoot的启动类中,有一个@SpringBootApplication注解,他主要包括了三个注解@Configuration,@EnableAutoConfiguration,@ComponentScan。实现自动配置的就是@EnableAutoConfiguation注解。在@EnableAutoConfiguation起作用的主要就是@Import(AutoConfigurationImportSelector.cl

2020-12-16 16:32:58 1511

原创 CA &数字证书 &数字签名

CA(Certificate Authority):认证机构数字证书:是由认证机构颁发的,当服务端向客户端公钥时,会该证书一并发送过去,客户端先进行验证请求的域名与证书的域名是否一致。防治拦截者对其进行更改。(适用于黑客模仿服务端发送私钥)但是有一个问题拦截者仅仅将私钥进行更改。数字签名:只要对信息进行更改,就不通过,过程:CA机构也有两个密钥,CA将服务端的公钥作为输入参数进行Hash计算,CA私钥进行进行加密并与公钥绑定一起,生成数字签名。服务端将含有数字签名和公钥发送给客户端,客户端会有CA的公

2020-12-15 23:04:27 1818

原创 java反射使用

定义:在运行过程中,对于任意一个类,都知道所有属性与方法,对于任意一个实例,都能够调用所有属性属性与方法。public class Person { private String name; private String time; static { System.out.println("class实例"); } public Person(String name, String time) { this.name = name;

2020-12-13 11:46:11 58

原创 类加载器与加载过程

JVM中有四种类加载器,启动类加载器,扩展类加载器,应用程序类加载器,用户自定义加载器(以JDK8为例)1.启动类加载器加载的jre,jre/lib文件下的文件 URL[] urls = sun.misc.Launcher.getBootstrapClassPath().getURLs(); for (URL url : urls) { System.out.println(url); }/*输出file:/E:/Mysoftware/

2020-12-12 19:59:49 122

转载 在java中new一个对象的整体过程

1.检查类加载过程到遇到new这条指令的时候,首先通过这条指令参数在常量池中是否能定位到该类的符号引用,并且通过该符号引用代表的类是否已经被加载,解析,初始化。如果没有执行上述过程。2.分配内存在堆新生代中去分配内存,分配内存的方式是互斥指针与空闲列表两种方式jdk8使用的是 Parallel Scavenge(新生代)+Parallel Old(老年代)。互斥指针:用过的内存在一块区域,没有的内存在一个区域,中间使用指针来分割,在分配新内存的时候,会将指针向空闲区域移动为分配新对象的大小区域。适

2020-12-12 16:48:32 242

转载 mysql的insert+delete导致的死锁

id为主键,a加了个唯一性索引session1session2delete from table where a=2;delete from table where a=2;insert into table values(10,2);deadlock解释:session1删除该条记录时,会加条记录锁,当session2再进行删除同一条记录时,便会阻塞,等待获取记录锁,然后session1在插入数据时,因为a设置为唯一性索引,所以在插入时会设置为n.

2020-12-12 14:57:42 1214 1

原创 springboot与springcloud区别

1.springboot专注于开发单个个体的微服务2.springcloud主要从整体微服务上进行管理,注册,监控,将一个个单体的微服务整合起来进行管理。3.springcloud为整个为服务提供注册,监控,网关,服务间调用。4.springboot是可以独立存在的,springcloud需要依赖springboot存在。...

2020-12-10 22:35:20 306

原创 抽象类与接口的区别

1.接口中的实例变量默认被final所修饰。抽象类中没有2.接口中的方法默认被public修饰,所有方法不能有实现(JDK8有default可以有实现)3.java中一个类可以实现多个接口,但仅仅只能继承一个类。4.实现接口需要实现接口所有方法,抽象类可以不这样5. 接口是行为的规范,抽象类是行为的规范...

2020-12-10 22:01:22 52

原创 spring事务传播机制

事务传播:一个被事务修饰的方法,被另外一个方法调用的时候,事务是如何传播的。 public void B(){ // do something; A(); } public void A(){ // do something; }当B方法调用A方法时,A方法被以下事务所修饰时1.Propagation.REQUIRED:当A方法没有被事务修饰时,B会创建新事务1.A异常,B正常2.B异常,A正常当A方法被事务所修饰,B加入该事务就是两个方法有一个异常,全部回滚2.

2020-12-10 21:50:49 69

原创 进程切换过程

在每个进程都有一个进程控制块(PCB)进程主要分为 创建状态,就绪状态,运行状态,阻塞状态,结束态。PCB控制块是以链表方式存放,就绪进程的PCB放置在同一个链表之中,阻塞在同一个链表当中当进程进行切换的时候1.保存当前的进程状态,包括程序计数器,寄存器保存在PCB中2.更新PCB的信息,例如更新进程的状态,加入阻塞队列3.然后选择另外一个进程进行执行,更新PCB信息,例如从就绪转为运行状态4.更新完内存管理数据结构,就是将PCB队列进行更新,将进程的上下文从PCB中取出去执行。...

2020-12-07 16:13:01 2731

原创 java是值传递还是引用传递

先说结论:java是值传递值传递:是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。引用传递:是指在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。我认为最大的区别:主要看传递的参数是否为副本,如果是传递副本,那就是值传递,否则就是引用传递。Message实体类package com.github.api.WriteProxy;import lombok.*;/** * @Author: M

2020-12-06 22:21:40 87

原创 手写一个springboot-starter,对redis工具类进行包装

创建一个spring项目目录结构pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache

2020-12-06 17:05:17 285 1

原创 手写java死锁,java命令查看死锁

类Thread1package github.write.funding2.Write;public class Thread1 implements Runnable { private Object lock1; private Object lock2; public Thread1(Object lock1, Object lock2) { this.lock1 = lock1; this.lock2 = lock2; }

2020-12-06 16:19:38 114

原创 mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!-- 1...

2019-07-11 22:05:34 119

原创 mybitis接口式编程

原生:Dao =====>DaoImpmybatis: Mapper ====> xxMapper.xml2、SqlSession掉膘和数据库的一次会话,用完必须关闭;3、SqlSession和connection一样他都是非线程安全,每次使用都应该获取新的对象4、mapper接口没有实现类,但mybatis会为这个接口生成一个代理对象。(将接口与xml文件进行绑定)...

2019-07-11 20:14:40 95

原创 Java递归打印目录

import java.io.File;import java.io.IOException;/** * @create 2019-07-10 15:33 */public class file { public static void main(String[] args) throws IOException { File fl=new...

2019-07-10 15:51:24 167

原创 el基本语法

使用el表达式获取作用域数据注意:获取的pageContext、request、session、application四个对象中的数据,其他数据一概不理会找到了则获取返回,找不到什么也不做,不报错; 语法: ${表达式} 表达式: request对象存储了请求数据------>param.键名...

2019-07-09 19:22:07 219

原创 包装类Integer

Integer a=new Integer(3); Integer b=Integer.valueOf(30); int c=b.intValue(); double d=b.doubleValue(); Integer e=new Integer("999"); Integer f=Integer.parseI...

2019-07-09 14:43:40 202

原创 JSP的规则

JSP 的三种注释:前端语言注释:会被转译,也会被发送,但是不会被浏览器执行java语言注释:会被转译,但是不会被servlet执行jsp注释:不会被转译JSP的page的指令学习<%@page 属性名=“属性值” 属性名=“属性值" 。。。%>pageEncoding:设置jsp文件的数据编码格式Jsp局部代码块:<% %>会被转译但是不会执行 ...

2019-07-07 10:16:54 251

原创 servlet的servletContext

//获取Servletcontext对象//第一种方式:ServletContext sc=this.getServletContext();//第二种方式:ServletContext sc2=this.getServletConfig().getServletContext();//第三种方式:ServletContext sc3=request.getSession().getS...

2019-07-06 16:00:39 104

原创 servletsession

解决一个用户不同用户请求的数据共享问题HttpSession hs= request.getSession();如果请求中拥有session的标识符也就是JESSIONID,则返回session对象,*** 如果请求中没有session的标识符也就是JESSIONID,则创建新的session对象,* 并将其JESSIONID作为从cookie数据存储到浏览器中。* 如果s...

2019-07-06 12:01:24 76

原创 c语言实现二叉树

#include<stdio.h>#include<stdlib.h>typedef int ElemType;typedef struct tree{ /* data */ ElemType data; struct tree *lchlid,*rchild;}Ntree,*p_tree;void insert(p_tree *...

2019-04-25 21:29:23 1361

转载 mysql-练习题

2、查询“生物”课程比“物理”课程成绩高的所有学生的学号;思路:获取所有有生物课程的人(学号,成绩) - 临时表获取所有有物理课程的人(学号,成绩) - 临时表根据【学号】连接两个临时表:学号 物理成绩 生物成绩SELECT student_id,student.sname,sw,sy FROM(SELECT A.student_id, sw, sy FROM( SEL...

2019-03-16 16:05:22 798

原创 python-socket

建立服务器与客户端进行交互1.服务器端对于服务器是先建立自己的服务器地址,然后设置最大的连接数,然后开启等待连接import socket address=('127.0.0.1',8000)sk=socket.socket()sk.bind(address)sk.listen(3)print(".....")while 1: con,addr=sk.ac...

2019-03-15 16:40:08 85

原创 python-生成器

生成器定义:生成器不会把结果保存在一个系列中,而是保存生成器的状态,在每次进行迭代时返回一个值,直到遇到StopIteration异常结束,这相当于你在做一道数学题,通过自己的研究掌握了这个规律,例如第100个的数是多少你不知道,如果你想知道你能够直接按这个规律算出,生成器就是这样,知道了这个函数对象,想使用直接执行函数就行,这就叫做生成器。这样就会节省大量的内存。g = (x * x f...

2019-03-14 11:59:54 73

原创 python-装饰器

装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值也是一个函数对象。1.当没有参数时,如果计算一个程序运行的时间:def show_time(func): def wrapper(): start=time.time() func() end=time.time() ...

2019-03-13 18:50:51 62

原创 python-函数闭包与函数名加括号与不加括号的区别

def outer(): x=1 def inner(): print(x) return innerfun=outer()fun()1.闭包现象:一般函数的作用域分为L(局部作用域)&gt;E(嵌套的父级函数的局部作用域)&gt;G(全局变量)&gt;B(系统固定模块里面的变量),但是在这个函数中,牵扯到内部函数(print x)里,对外在作...

2019-03-13 17:00:50 1163

原创 python随笔-修改字符串注意事项

像字符串,列表,数字这些不可变类型,是不可变的。 可变类型:列表,字典# s='alex'# print(id(s)) #比如我想要一个'Alex'的字符串,只能重新创建一个'Alex'的对象,然后让指针只想这个新对象## s[0]='e' #报错# print(id(s))...

2019-03-13 16:25:56 75

转载 python-函数

高阶函数成为高阶函数所具备的条件:1.接收一个或多个函数作为输入2.输出为一个函数def add(x,y,f): return f(x) + f(y) res = add(3,-6,abs)print(res)def foo(): x=3 def bar(): return x return bar ...

2019-03-13 16:24:35 66

转载 python-元组

元组被称为只读列表,即数据可以被查询,但不能被修改,所以,列表的切片操作同样适用于元组。元组写在小括号(())里,元素之间用逗号隔开。虽然tuple的元素不可改变,但它可以包含可变的对象,比如list列表。构造包含 0 个或 1 个元素的元组比较特殊,所以有一些额外的语法规则:tup1 = () # 空元组tup2 = (20,) # 一个元素,需要在元素后添加逗号再附加一个购...

2019-03-13 15:55:51 74

空空如也

空空如也

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

TA关注的人

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