- 博客(39)
- 收藏
- 关注
原创 Spring之动态代理
动态代理和静态代理角色一样动态代理的代理类是动态生成的,不是我们写好的动态代理分为两大类:基于接口的动态代理,基于类的动态代理1.基于接口–JDK动态代理2.基于类:cglib3.java字节码实现:javasist需要了解两个类:Proxy(代理),InvocationHandler(代理实例的调用处理程序的接口)...
2021-11-11 20:29:53
340
原创 Spring静态代理
10.代理模式SpringAOP的底层!【SpringAOP和SpringMVC面试必问】代理模式的分类:静态代理动态代理10.1静态代理角色分析:抽象角色:一般会食用接口或者抽象类来解决真实角色:被代理的角色代理角色:代理真实的角色,代理真实角色后,一般会做一些附属操作客户:访问代理对象的人!代码步骤:1.接口public interface Rent { public void rent();}2.真实角色public class Host implem
2021-11-08 21:35:44
205
原创 Mybatis学习之LomBok
LomBokjava libraryplugsbuild toolswith one annotation your class使用步骤:1.在IDEA中安装Lombok2.导入Lombok的jar包<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency> <groupId>org.projectlombok</gro
2021-11-08 20:28:51
190
原创 mybatis之缓存
缓存1.什么是缓存查询,连接数据库,耗资源!一次查询的结果,暂存在一个可以直接取到的地方。内存->缓存再次查询数据库时候,直接走缓存,不用走数据库[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TisfVwVt-1632140168337)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210915110535675.png)]1.1什么是缓存存在内存中的临
2021-09-20 20:16:43
187
原创 mybatis之动态SQL
动态SQL1相关知识什么是动态SQL:动态SQL就是根据不同的条件生成不同的SQL语句。痛点:你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。如果你之前用过 JSTL 或任何基于类 XML 语言的文本处理器,你对动态 SQL 元素可能会感觉似曾相识。在 MyBatis 之前的版本中,需要花时间了解大量的元素。借助功能强大的基于 OGNL 的表达式,MyBatis 3 替换了之前的大部分元素,大大精简了元
2021-09-17 15:46:01
106
原创 mybatis一对多(collection)学习笔记
一对多一个老师拥有多个学生!对于老师而言就是一对多的关系。1.环境搭建实体类@Datapublic class Student { private int id; private String name; //学生需要关联一个老师 private int tid;}@Datapublic class Teacher { private int id; private String name; //一个老师拥有多个学生 pr
2021-09-08 09:55:32
193
原创 idea:1复制模块问题2不支持发行版本5的解决办法
1.idea整体复制模块,导致复制后的模块的.java文件,显示为红色的J标识解决参考链接: link.2.不支持发行版本5,解决方法改maven的配置文件maven的settings.xml文件改为:<profile> <id>jdk-11</id> <activation> <activeByDefault>true</activeByDefault> <jdk&
2021-09-07 14:42:57
213
原创 mybatis之多对一
多对一多个学生,对应一个老师对于学生而言,关联,多个学生关联一个老师一对多对于老师而言,集合,一个老师有很多学生association – 一个复杂类型的关联;许多结果将包装成这种类型嵌套结果映射 – 关联可以是 resultMap 元素,或是对其它结果映射的引用collection – 一个复杂类型的集合嵌套结果映射 – 集合可以是 resultMap 元素,或是对其它结果映射的引用复杂环境搭建,创建SQL语句CREATE TABLE `teacher` ( `id
2021-09-06 20:23:40
120
原创 Fiddler入门教程整理(1)(详细)
参考链接1: link1参考链接2: link2.参考链接3:link3.简介与工作原理类似工具:httpwatch, firebug, wireshark常见的抓包工具,常用场景:接口测试、接口调试、线上环境测试、弱网测试、判断前后端bug、mock测试工作原理:代理web服务器、代理地址:127.0.0.1,端口8888①正常的访问网页或App的路径是客户端——目标服务器②抓包,加入了一个代理,访问路径变成客户端——代理——目标服务器③客户端先访问代理,代理记录客
2021-07-29 15:43:13
979
原创 jmeter测试接口出现illegal request问题的解决办法(详细)
参考链接: link.出现问题:①一般来说,illegal request是cookie或者请求头出现问题②用fiddler抓包:了解请求头的信息,没有cookie③用fiddler的Composer测试是不是请求头的问题当没有输入请求头时:出现illegal request的确是请求头的问题。解决问题:①添加Http头信息管理器头信息内容见fiddler抓包的信息②请求中添加消息体数据消息体数据见fiddler抓包信息③有正确返回数据了...
2021-07-27 17:27:12
5022
转载 客户端和服务器的关系
原文链接: link.例子:你在看一群美女/帅哥的图片,当然我默认在网站上浏览的,那么你电脑上的互联网浏览器就是客户端,而运行着靓图的电脑就是服务端。你的浏览器通过互联网将请求发送给靓图的服务器,服务器接着就会把对应的页面作为响应发给你。接下来,你的浏览器就会将页面在屏幕上渲染出来。客户端收到的响应其实就是HTML、CSS和JavaScript代码(用火狐或者go’o浏览器,F12,即可打开开发者工具查看一切客户端代码)客户端就是发生在用户浏览器中的一切(app也属于客户端),而服务端则是发
2021-07-26 10:10:48
2119
原创 mybatis学习之注解实现CRUD
注解CRUD我们可以在工具类创建的时候实现自动提交事务!public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(true);}编写接口,增加注解public interface UserMapper { @Select("select * from user") List<User> getUsers(); //方法存在多个参数,每个参数必须加@Para
2021-07-24 20:44:15
175
原创 jmeter入门学习笔记
1.jmeter的语言转换Options-Choose Language-Chinese(Simplified)2.TestPlan一个jmeter测试的所有资源都在testplan下,TestPlan下添加线程组。每个测试场景都是一个线程组。3.线程组测试计划-添加-线程(用户)-线程组配置线程组参数名称:当前测试线程组的名称,建议写成有业务意义的场景名称。在取样器错误后要执行的动作①继续:线程组下的多个线程,如果失败,其他线程会继续执行。(90%场景)②启动下一组循环:如果执行过程中
2021-07-23 16:18:40
398
转载 CPU与GPU的区别
1.不同之处:CPU和GPU之所以大不相同,是由于其设计目标的不同,它们分别针对了两种不同的应用场景。CPU需要很强的通用性来处理各种不同的数据类型,同时又要逻辑判断又会引入大量的分支跳转和中断的处理。这些都使得CPU的内部结构异常复杂。而GPU面对的则是类型高度统一的、相互无依赖的大规模数据和不需要被打断的纯净的计算环境。链接: link.2.各自擅长的运算CPU擅长逻辑控制,串行的运算。和通用类型数据运算不同,GPU擅长的是大规模并发计算,这也正是密码破解等所需要的。3.什么类型的运算适合在G
2021-07-13 10:15:13
1036
原创 linux学习笔记1(补充进程与线程)
1.僵尸进程一个子进程的进程描述符在子进程退出时不会释放,只有当父进程通过 wait() 或 waitpid() 获取了子进程信息后才会释放。如果子进程退出,而父进程并没有调用 wait() 或 waitpid(),那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵尸进程。僵尸进程通过 ps 命令显示出来的状态为 Z(zombie)。系统所能使用的进程号是有限的,如果产生大量僵尸进程,将因为没有可用的进程号而导致系统不能产生新的进程。要消灭系统中大量的僵尸进程,只需要将其父进程杀死,此时僵尸进
2021-07-09 15:43:33
117
原创 mybatis学习之Limit实现分页
分页为什么要分页?减少数据的处理量使用Limit分页语法SELECT * from user limit startIndex,pageSize;使用Mybatis实现分页,核心SQL1.接口 //分页 List<User> getUserByLimit(Map<String,Integer>map);2.Mapper.xml <!--分页--> <select id="getUserByLimit" parameterT
2021-06-16 14:37:22
154
原创 Mybatis学习之——解决属性名和字段名不一致的情况
解决属性名和字段名不一致的问题数据库中的字段新建一个项目,拷贝之前,测试实体类字段不一致的情况ublic class User { private int id; private String name; private String password;}测试出现问题解决方法:-加别名 <select id="getUserById" resultType="com.kuang.pojo.User"> select id,name,pwd a
2021-06-09 09:21:33
141
原创 Mybatis生命周期和作用域
生命周期和作用域是非常重要的,因为错误的使用会导致严重的并发问题。SqlSessionFactoryBuilder:一旦创建了 SqlSessionFactory,就不再需要它了局部变量SqlSessionFactory:可以想象为:数据库连接池SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例多次重建 SqlSessionFactory 被视为一种代码“坏习惯”,导致资源浪费SqlSessionFactory 的最佳
2021-06-04 09:47:22
121
原创 Mybatis配置解析和配置优化
configuration(配置) properties(属性) settings(设置) typeAliases(类型别名) typeHandlers(类型处理器) objectFactory(对象工厂) plugins(插件) environments(环境配置) environment(环境变量) transactionManager(事务管理器) dataSource(数据源) databas
2021-06-02 10:08:14
158
原创 Mybatis之万能的Map
万能Map假设实体类,或数据库中的表,字段或者参数过多,我们应该考虑适用Map!UserMapper.java //万能的Map int addUser2(Map<String,Object>map);UserMapper.xml<!--对象中的属性,可以直接取出来,传递Map的key --> <insert id="addUser2" parameterType="map"> insert into mybatis.user.
2021-05-24 15:48:15
196
原创 Mybatis增删改查
1.namespacenamespace中的包名要和接口Dao/Mapper中包名一致!2.select选择,查询语句id:对应namespace中的方法名resultType:Sql语句的返回值!parameterType:参数类型①编写接口//根据id查询用户 User getUserById(int id);②编写对应的mapper中的测试语句 <select id="getUserById" parameterType="int" resultType="co
2021-05-20 10:42:22
91
原创 创建Mybatis程序-学习笔记
1搭建数据库CREATE DATA `mybatis`;USE `mybatis`;CREATE TABLE `user`(`id` INT(20) NOT NULL PRIMARY KEY,`name` VARCHAR(30) DEFAULT NULL,`pwd` VARCHAR(30) DEFAULT NULL)ENGINE=INNODB DEFAULT CHARSET=utf8INSERT INTO `user`(`id`,`name`,`pwd`) VALUES(1,`张三`,`
2021-05-19 19:59:29
160
原创 Mybatis学习笔记1
环境JDK11Mysql5.7maven4.0.0IDEA回顾:JDBC:增删改查和事务MysqlJava基础:封装继承MavenJunit测试Mybatis官方文档链接: link.1.简介1.1什么是Mybatis?MyBatis 是一款优秀的持久层框架它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口
2021-05-14 19:37:52
126
原创 Spring学习笔记——使用Java的方式配置Spring
1Spring Framework中文官方文档1.12节 基于Java的容器配置链接: https://www.docs4dev.com/docs/zh/spring-framework/5.1.3.RELEASE/reference/core.html#%E5%9F%BA%E4%BA%8E-java-%E7%9A%84%E5%AE%B9%E5%99%A8%E9%85%8D%E7%BD%AE用@Configuration注解 类表示该类的主要目的是作为 Bean 定义的来源。此外,@Configurat
2021-05-14 15:58:04
108
原创 spring学习笔记——使用注解开发
笔记在Spring4之后,使用注解开发,必须导入aop的包 ①该语句末尾不得有;②topic前须有/ String sql = "insert into user (phone,pwd,sex,img,create_time,role,username)values(?,?,?,?,?,?,?)"; ①该语句?的数量要与参数数量相同②最后一个?后面没有,③注意每个变量的拼写 报错找不到某个文件,可能是文件路径出错,注意文...
2021-04-27 15:48:24
106
原创 UML学习笔记1
1.UML简介UML,统一建模语言,是广泛使用的面向对象的系统建模方法。2.面向对象的机制把应用程序分成许多小块(对象),对象之间相互独立,组合对象,建立应用程序。1)包装将信息与处理信息的功能组合起来,包装成对象。或理解为把应用程序分解成较小的功能组合。好处之一是将系统改变的影响限制在对象内。银行模型的包装2)继承子对象继承父对象的特征。好处是易于维护,只要改变父对象,子对象自动继承这个变化。但是对子对象改变不会影响其他子对象和父对象。3)多态多态的定义
2021-04-02 10:44:29
175
原创 我的STM32学习日记(四)
GPIO作输入1.看原理图PA0,PF11均接VCC,初始将其下拉为低电平检测到高电平即按键按下2.代码解析if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET)//按下按键,输入高电平 { HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_P...
2019-07-19 10:34:10
207
原创 我的STM32学习日记(三)
跑马灯1.看原理图IO口输出低电平,灯亮IO口输出高电平,灯灭2.GPIO的输出方式推挽输出(上拉)(推挽输出可以实现强高低电平的输出)3.初始化函数配置几个基本的寄存器注意:可以一次初始化一组IO的几个IO,前提是这些IO口的配置方式一样。用|隔开。 使用GPIO必须先使能相应的GPIO时钟。4.配置寄存器使GPIO输出高电平或者...
2019-07-19 10:33:45
234
原创 我的STM32学习日记(二)
GPIO工作原理(一)引脚说明STM32F407ZGT6共有7组IO口,每组16个IO口,外加2个PH0和PH1,共114个IO口7组:GPIOA-GPIOG16个:GPIO0-GPIO15(注意不可能出现GPIO16)(二)GPIO基本结构1.标识FT的支持5V容忍2.STM32大部分引脚除了当GPIO使用外,还可以复用为外设功能引脚(三)GPIO的工作模式1...
2019-07-19 10:33:15
545
原创 我的STM32学习日记(一)
1.网络学习资源开源电子网www.openedv.comST中国官方技术论坛www.stmcu.org2.常用词MCU单片机WDT看门狗定时器SRAM静态随机存取存储器DMA直接内存存取TIM定时器...
2019-07-19 10:32:50
323
原创 我的STM32学习日记(十)
死区,简单解释:通常,大功率电机、变频器等,末端都是由大功率管、IGBT等元件组成的H桥或3相桥。每个桥的上半桥和下半桥是是绝对不能同时导通的,但高速的PWM驱动信号在达到功率元件的控制极时,往往会由于各种各样的原因产生延迟的效果,造成某个半桥元件在应该关断时没有关断,造成功率元件烧毁。死区就是在上半桥关断后,延迟一段时间再打开下半桥或在下半桥关断后,延迟一段时间再打开上半桥,从而避免功率元件烧毁...
2018-04-14 21:32:10
407
原创 我的STM32学习日记(九)
脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽度的控制,PWM 原理如图所示:图就是一个简单的 PWM 原理示意图。图中,我们假定定时器工作在向上计数 PWM模式,且当 CNT<CCRx 时,输出 0,当 CNT>=CCRx 时输出 1。那么就...
2018-04-09 16:34:24
148
原创 代码分析
1.GPIO作输入PC0,PD3采用推挽上拉输出PA0,PF11下拉为低电平不管I/O管脚的默认配置如何,还是需要在输出的管脚外加上拉或下拉,这是为了保证芯片上电期间和复位时输出的管脚始终处于已知的电平。 if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET) { HAL_GPIO_Wri...
2018-03-11 11:45:29
190
原创 我的STM32学习日记(八)
通信接口背景处理器与外部设备通信的两种方式:(1)并行通信1.原理:数据各个位同时传输2.优点:速度快 缺点:占用引脚资源多(2)串行通信1.原理:数据按位顺序传输2.优点:占用引脚资源少 缺点:速度慢串行通信12.串行通信的通信方式同步通信:带时钟同步信号 -SPI,IIC异步通信:不带时钟同步信号 UART ,单总线 通过双反约定决定发送与接受(波特率)引脚...
2018-02-27 11:55:00
100
原创 我的STM32学习日记(七)
定时器1.STM32F40X系列总共最多有14个定时器2.3.4.5.向下计数为例定时器定时溢出1.定时脉冲定时脉冲的来源很多,可以是内部时钟,也可以是外部定时信号,此处我们仅使用内部时钟作为定时脉冲的来源内部的定时脉冲来自APB总线时钟,此时钟经过分频后驱动定时器进行计数;分频器有两个,一个称为预分频器(Prescaler,简称PSC),另一个是内部时钟分频器(Internal Clock Di...
2018-02-24 16:27:40
132
原创 我的STM32学习日记(六)
外部中断1.STM32每个IO都可以作为外部中断输入2.STM32中断控制器支持22个外部中断/事件请求3.每根中断线可以映射7个IO,但同一时间只能映射1个(见下图)4.我的问题:1.外部中断,与外部事件的区别中断事件是一种可以导致中断发生的事件,中断则是因为中断事件的发生而导致的后续行为过程。事件与中断事件是包含关系,即事件可分为中断事件或非中断事件。(搜索CSDN博客得知)2.上升沿触发与下...
2018-02-22 22:25:52
131
原创 我的STM32学习日记(五)
NVIC中断优先级管理1.2.每个中断都有IP寄存器,每个寄存器的高4位用来设置抢占优先级和响应优先级(根据分组),低4位保留没有用到。3.分组4.优先级判断注意数字越小,优先级越高。5.只设置一次中断优先级分组,以免程序混乱。以上部分资料整理自正点原子PPT...
2018-02-22 21:57:37
113
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人